diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 000000000..2f15b9132 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,699 @@ +[*] +charset = utf-8 +end_of_line = crlf +indent_size = 4 +indent_style = space +insert_final_newline = false +max_line_length = 120 +tab_width = 4 +ij_continuation_indent_size = 8 +ij_formatter_off_tag = @formatter:off +ij_formatter_on_tag = @formatter:on +ij_formatter_tags_enabled = true +ij_smart_tabs = false +ij_visual_guides = +ij_wrap_on_typing = false + +[*.java] +indent_style = tab +ij_smart_tabs = true +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 = false +ij_java_align_multiline_chained_methods = false +ij_java_align_multiline_deconstruction_list_components = true +ij_java_align_multiline_extends_list = false +ij_java_align_multiline_for = true +ij_java_align_multiline_method_parentheses = false +ij_java_align_multiline_parameters = true +ij_java_align_multiline_parameters_in_calls = false +ij_java_align_multiline_parenthesized_expression = false +ij_java_align_multiline_records = true +ij_java_align_multiline_resources = true +ij_java_align_multiline_ternary_operation = true +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_align_types_in_multi_catch = true +ij_java_annotation_parameter_wrap = off +ij_java_array_initializer_new_line_after_left_brace = false +ij_java_array_initializer_right_brace_on_new_line = false +ij_java_array_initializer_wrap = off +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 = false +ij_java_binary_operation_wrap = off +ij_java_blank_lines_after_anonymous_class_header = 0 +ij_java_blank_lines_after_class_header = 0 +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 = next_line +ij_java_block_comment_add_space = false +ij_java_block_comment_at_first_column = true +ij_java_builder_methods = +ij_java_call_parameters_new_line_after_left_paren = false +ij_java_call_parameters_right_paren_on_new_line = false +ij_java_call_parameters_wrap = off +ij_java_case_statement_on_separate_line = true +ij_java_catch_on_new_line = true +ij_java_class_annotation_wrap = split_into_lines +ij_java_class_brace_style = next_line +ij_java_class_count_to_use_import_on_demand = 5 +ij_java_class_names_in_javadoc = 1 +ij_java_deconstruction_list_wrap = normal +ij_java_do_not_indent_top_level_class_members = false +ij_java_do_not_wrap_after_single_annotation = false +ij_java_do_not_wrap_after_single_annotation_in_parameter = false +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 = true +ij_java_enum_constants_wrap = split_into_lines +ij_java_extends_keyword_wrap = off +ij_java_extends_list_wrap = off +ij_java_field_annotation_wrap = split_into_lines +ij_java_field_name_prefix = +ij_java_field_name_suffix = +ij_java_finally_on_new_line = true +ij_java_for_brace_force = never +ij_java_for_statement_new_line_after_left_paren = false +ij_java_for_statement_right_paren_on_new_line = false +ij_java_for_statement_wrap = off +ij_java_generate_final_locals = false +ij_java_generate_final_parameters = false +ij_java_if_brace_force = always +ij_java_imports_layout = *,|,javax.**,java.**,|,$* +ij_java_indent_case_from_switch = true +ij_java_insert_inner_class_imports = false +ij_java_insert_override_annotation = true +ij_java_keep_blank_lines_before_right_brace = 2 +ij_java_keep_blank_lines_between_package_declaration_and_header = 2 +ij_java_keep_blank_lines_in_code = 2 +ij_java_keep_blank_lines_in_declarations = 2 +ij_java_keep_builder_methods_indents = false +ij_java_keep_control_statement_in_one_line = true +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 = next_line +ij_java_layout_static_imports_separately = true +ij_java_line_comment_add_space = false +ij_java_line_comment_add_space_on_reformat = false +ij_java_line_comment_at_first_column = true +ij_java_local_variable_name_prefix = +ij_java_local_variable_name_suffix = +ij_java_method_annotation_wrap = split_into_lines +ij_java_method_brace_style = next_line +ij_java_method_call_chain_wrap = off +ij_java_method_parameters_new_line_after_left_paren = false +ij_java_method_parameters_right_paren_on_new_line = false +ij_java_method_parameters_wrap = off +ij_java_modifier_list_wrap = false +ij_java_multi_catch_types_wrap = normal +ij_java_names_count_to_use_import_on_demand = 3 +ij_java_new_line_after_lparen_in_annotation = false +ij_java_new_line_after_lparen_in_deconstruction_pattern = true +ij_java_new_line_after_lparen_in_record_header = false +ij_java_packages_to_use_import_on_demand = java.awt.*,javax.swing.* +ij_java_parameter_annotation_wrap = off +ij_java_parameter_name_prefix = +ij_java_parameter_name_suffix = +ij_java_parentheses_expression_new_line_after_left_paren = false +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 = normal +ij_java_repeat_annotations = +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 = false +ij_java_resource_list_right_paren_on_new_line = false +ij_java_resource_list_wrap = off +ij_java_rparen_on_new_line_in_annotation = false +ij_java_rparen_on_new_line_in_deconstruction_pattern = true +ij_java_rparen_on_new_line_in_record_header = false +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_deconstruction_list = 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_annotation_eq = 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_deconstruction_list = 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_record_header = 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_static_field_name_prefix = +ij_java_static_field_name_suffix = +ij_java_subclass_name_prefix = +ij_java_subclass_name_suffix = Impl +ij_java_ternary_operation_signs_on_next_line = true +ij_java_ternary_operation_wrap = normal +ij_java_test_name_prefix = +ij_java_test_name_suffix = Test +ij_java_throws_keyword_wrap = off +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 = true +ij_java_wrap_comments = false +ij_java_wrap_first_method_in_call_chain = false +ij_java_wrap_long_lines = false + +[*.nbtt] +indent_style = tab +max_line_length = 150 +ij_continuation_indent_size = 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 + +[*.properties] +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 + +[.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,*.fxml,*.jhm,*.jnlp,*.jrxml,*.jspx,*.lsx,*.pom,*.rng,*.tagx,*.tld,*.wsdl,*.xml,*.xsd,*.xsl,*.xslt,*.xul}] +ij_xml_align_attributes = true +ij_xml_align_text = false +ij_xml_attribute_wrap = normal +ij_xml_block_comment_add_space = false +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 = false + +[{*.bash,*.sh,*.zsh}] +indent_size = 2 +tab_width = 2 +ij_shell_binary_ops_start_line = false +ij_shell_keep_column_alignment_padding = false +ij_shell_minify_program = false +ij_shell_redirect_followed_by_space = false +ij_shell_switch_cases_indented = false +ij_shell_use_unix_line_separator = true + +[{*.gant,*.groovy,*.gy}] +indent_style = tab +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_add_space = false +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 = next_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_enable_groovydoc_formatting = true +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_ginq_general_clause_wrap_policy = 2 +ij_groovy_ginq_having_wrap_policy = 1 +ij_groovy_ginq_indent_having_clause = true +ij_groovy_ginq_indent_on_clause = true +ij_groovy_ginq_on_wrap_policy = 1 +ij_groovy_ginq_space_after_keyword = true +ij_groovy_if_brace_force = never +ij_groovy_import_annotation_wrap = 2 +ij_groovy_imports_layout = *,|,javax.**,java.**,|,$* +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 = next_line +ij_groovy_layout_static_imports_separately = true +ij_groovy_line_comment_add_space = false +ij_groovy_line_comment_add_space_on_reformat = false +ij_groovy_line_comment_at_first_column = true +ij_groovy_method_annotation_wrap = split_into_lines +ij_groovy_method_brace_style = next_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_packages_to_use_import_on_demand = java.awt.*,javax.swing.* +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_record_parentheses = false +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_chain_calls_after_dot = 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_allow_trailing_comma = false +ij_kotlin_allow_trailing_comma_on_call_site = false +ij_kotlin_assignment_wrap = off +ij_kotlin_blank_lines_after_class_header = 0 +ij_kotlin_blank_lines_around_block_when_branches = 0 +ij_kotlin_blank_lines_before_declaration_with_comment_or_annotation_on_separate_line = 1 +ij_kotlin_block_comment_add_space = false +ij_kotlin_block_comment_at_first_column = true +ij_kotlin_call_parameters_new_line_after_left_paren = false +ij_kotlin_call_parameters_right_paren_on_new_line = false +ij_kotlin_call_parameters_wrap = off +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 = off +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_imports_layout = *,java.**,javax.**,kotlin.**,^ +ij_kotlin_insert_whitespaces_in_simple_one_line_method = true +ij_kotlin_keep_blank_lines_before_right_brace = 2 +ij_kotlin_keep_blank_lines_in_code = 2 +ij_kotlin_keep_blank_lines_in_declarations = 2 +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_break_after_multiline_when_entry = true +ij_kotlin_line_comment_add_space = false +ij_kotlin_line_comment_add_space_on_reformat = false +ij_kotlin_line_comment_at_first_column = true +ij_kotlin_method_annotation_wrap = split_into_lines +ij_kotlin_method_call_chain_wrap = off +ij_kotlin_method_parameters_new_line_after_left_paren = false +ij_kotlin_method_parameters_right_paren_on_new_line = false +ij_kotlin_method_parameters_wrap = off +ij_kotlin_name_count_to_use_star_import = 5 +ij_kotlin_name_count_to_use_star_import_for_members = 3 +ij_kotlin_packages_to_use_import_on_demand = java.util.*,kotlinx.android.synthetic.**,io.ktor.** +ij_kotlin_parameter_annotation_wrap = off +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 + +[{*.har,*.json,*.png.mcmeta,mcmod.info,pack.mcmeta}] +indent_size = 2 +ij_json_array_wrapping = split_into_lines +ij_json_keep_blank_lines_in_code = 0 +ij_json_keep_indents_on_empty_lines = false +ij_json_keep_line_breaks = true +ij_json_keep_trailing_comma = false +ij_json_object_wrapping = split_into_lines +ij_json_property_alignment = do_not_align +ij_json_space_after_colon = true +ij_json_space_after_comma = true +ij_json_space_before_colon = false +ij_json_space_before_comma = false +ij_json_spaces_within_braces = false +ij_json_spaces_within_brackets = false +ij_json_wrap_long_lines = false + +[{*.htm,*.html,*.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_add_space = false +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 + +[{*.lua,*.lua.txt}] +ij_lua_align_consecutive_variable_declarations = false +ij_lua_align_multiline_parameters = true +ij_lua_align_multiline_parameters_in_calls = false +ij_lua_call_parameters_wrap = off +ij_lua_keep_indents_on_empty_lines = false +ij_lua_keep_simple_blocks_in_one_line = false +ij_lua_method_parameters_wrap = off +ij_lua_space_after_comma = true +ij_lua_space_before_comma = false +ij_lua_spaces_around_assignment_operators = true + +[{*.markdown,*.md}] +ij_markdown_force_one_space_after_blockquote_symbol = true +ij_markdown_force_one_space_after_header_symbol = true +ij_markdown_force_one_space_after_list_bullet = true +ij_markdown_force_one_space_between_words = true +ij_markdown_format_tables = true +ij_markdown_insert_quote_arrows_on_wrap = true +ij_markdown_keep_indents_on_empty_lines = false +ij_markdown_keep_line_breaks_inside_text_blocks = true +ij_markdown_max_lines_around_block_elements = 1 +ij_markdown_max_lines_around_header = 1 +ij_markdown_max_lines_between_paragraphs = 1 +ij_markdown_min_lines_around_block_elements = 1 +ij_markdown_min_lines_around_header = 1 +ij_markdown_min_lines_between_paragraphs = 1 +ij_markdown_wrap_text_if_long = true +ij_markdown_wrap_text_inside_blockquotes = true + +[{*.toml,Cargo.lock,Cargo.toml.orig,Gopkg.lock,Pipfile,poetry.lock}] +ij_toml_keep_indents_on_empty_lines = false + +[{*.yaml,*.yml}] +indent_size = 2 +ij_yaml_align_values_properties = do_not_align +ij_yaml_autoinsert_sequence_marker = true +ij_yaml_block_mapping_on_new_line = false +ij_yaml_indent_sequence_value = true +ij_yaml_keep_indents_on_empty_lines = false +ij_yaml_keep_line_breaks = true +ij_yaml_sequence_on_new_line = false +ij_yaml_space_before_colon = false +ij_yaml_spaces_within_braces = true +ij_yaml_spaces_within_brackets = true diff --git a/.gitattributes b/.gitattributes index f811f6ae6..fe885eeac 100644 --- a/.gitattributes +++ b/.gitattributes @@ -3,3 +3,6 @@ # are changed when only line endings change. src/generated/**/.cache/cache text eol=lf src/generated/**/*.json text eol=lf + +# Disable bbmodel previews on GitHub +*.bbmodel linguist-generated=true diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 000000000..ef5b4b999 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,2 @@ +github: leafreynolds +custom: patreon.com/leafreynolds \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 000000000..0453d4cb6 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,8 @@ +blank_issues_enabled: false +contact_links: + - name: Cosmere Discord + url: https://discord.gg/VjAGzeJvAu + about: The best place to receive quick answers to any questions you may have + - name: Feature Request + url: https://github.com/leafreynolds/cosmere/issues/new?template=feature_request.yml + about: Redirects you to creating an issue on Cosmere's issue tracker. \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/general_issue.yml b/.github/ISSUE_TEMPLATE/general_issue.yml new file mode 100644 index 000000000..fb257d186 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/general_issue.yml @@ -0,0 +1,55 @@ +name: General Issue +description: Report a bug or problem with Cosmere +body: + - type: markdown + attributes: + value: "*Please use the search functionality before reporting an issue. Also take a look at the closed issues!*" + - type: textarea + attributes: + label: Issue description + description: A clear and concise description of the issue and if appropriate what the expected outcome should have been. + validations: + required: true + - type: textarea + attributes: + label: Steps to reproduce + description: If there are specific steps that need to be taken to reproduce the issue list them here. + placeholder: | + 1. Start by doing... + 2. Next do... + 3. See result described above + - type: dropdown + id: minecraft-version + attributes: + label: Minecraft version + description: What version of Minecraft are you using? + options: + - 1.20.1 (Latest) + - 1.19.2 + - 1.19.0 or 1.19.1 (No longer being developed) + - 1.18.x or earlier (No longer being developed) + validations: + required: true + - type: input + attributes: + label: Modloader version + description: What version of Neo or Forge are you using? + placeholder: e.g. 43.1.3 + validations: + required: true + - type: input + id: cosmere-version + attributes: + label: Cosmere version + description: What version of Cosmere are you using? You can copy paste the file name of the Cosmere mod if needed. + placeholder: e.g. build 72 + validations: + required: true + - type: textarea + attributes: + label: Other relevant versions + description: If this issue is related to any other mods list their versions here. + - type: input + attributes: + label: "If a (crash)log is relevant for this issue, link it here: (It's almost always relevant)" + description: "Please provide a [mclog](https://mclo.gs) / [gist](https://gist.github.com/) / [pastebin](https://pastebin.com/) / etc link here. (Make sure that it isn't set to expire!)" diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 000000000..99580a64c --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1 @@ +## Changes proposed in this pull request: diff --git a/.gitignore b/.gitignore index f36a9849a..d0a834c5c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,26 +1,28 @@ -# eclipse -bin -*.launch -.settings -.metadata -.classpath -.project - -# idea -out +build +output +.idea +*.iml *.ipr *.iws -*.iml -.idea +out -# gradle -build -.gradle +Cosmere*.jar +MDK.zip +/run +/.gradle +*.classpath +*.project +.settings +/eclipse +*.launch +docs/changelog*.txt -# other -eclipse -run +*.blend1 +*.blend2 +/bin +/logs +/src/datagen/*/resources +libs/ -# Files from Forge MDK -forge*changelog.txt -.run/_cosmere [incrementBuildNumber].run.xml +/.DS_Store +**/.DS_Store \ No newline at end of file diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 000000000..668f2fe71 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,66 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "type": "java", + "name": "runClient", + "request": "launch", + "mainClass": "cpw.mods.bootstraplauncher.BootstrapLauncher", + "projectName": "cosmere", + "cwd": "${workspaceFolder}/run", + "vmArgs": "-DlegacyClassPath.file\u003d/home/diceof20/Documents/GitHub/cosmere/build/classpath/runClient_minecraftClasspath.txt -Dmixin.env.remapRefMap\u003dtrue -Dmixin.env.refMapRemappingFile\u003d/home/diceof20/Documents/GitHub/cosmere/build/createSrgToMcp/output.srg -Dnet.minecraftforge.gradle.GradleStart.srg.srg-mcp\u003d/home/diceof20/Documents/GitHub/cosmere/build/createSrgToMcp/output.srg -DignoreList\u003dbootstraplauncher,securejarhandler,asm-commons,asm-util,asm-analysis,asm-tree,asm,JarJarFileSystems,client-extra,fmlcore,javafmllanguage,lowcodelanguage,mclanguage,forge- -DmergeModules\u003djna-5.10.0.jar,jna-platform-5.10.0.jar -Dforge.enabledGameTestNamespaces\u003dcosmere,allomancy,feruchemy,hemalurgy,surgebinding,sandmastery,cosmeretools -Dforge.enableGameTest\u003dtrue -Djava.net.preferIPv6Addresses\u003dsystem -p /home/diceof20/.gradle/caches/modules-2/files-2.1/cpw.mods/bootstraplauncher/1.1.2/c546e00443d8432cda6baa1c860346980742628/bootstraplauncher-1.1.2.jar:/home/diceof20/.gradle/caches/modules-2/files-2.1/cpw.mods/securejarhandler/2.1.10/51e6a22c6c716beb11e244bf5b8be480f51dd6b5/securejarhandler-2.1.10.jar:/home/diceof20/.gradle/caches/modules-2/files-2.1/org.ow2.asm/asm-commons/9.7/e86dda4696d3c185fcc95d8d311904e7ce38a53f/asm-commons-9.7.jar:/home/diceof20/.gradle/caches/modules-2/files-2.1/org.ow2.asm/asm-util/9.7/c0655519f24d92af2202cb681cd7c1569df6ead6/asm-util-9.7.jar:/home/diceof20/.gradle/caches/modules-2/files-2.1/org.ow2.asm/asm-analysis/9.7/e4a258b7eb96107106c0599f0061cfc1832fe07a/asm-analysis-9.7.jar:/home/diceof20/.gradle/caches/modules-2/files-2.1/org.ow2.asm/asm-tree/9.7/e446a17b175bfb733b87c5c2560ccb4e57d69f1a/asm-tree-9.7.jar:/home/diceof20/.gradle/caches/modules-2/files-2.1/org.ow2.asm/asm/9.7/73d7b3086e14beb604ced229c302feff6449723/asm-9.7.jar:/home/diceof20/.gradle/caches/modules-2/files-2.1/net.minecraftforge/JarJarFileSystems/0.3.19/2464eb7d6b9ddb9db36a82cf8a95193e5c6fe020/JarJarFileSystems-0.3.19.jar --add-modules ALL-MODULE-PATH --add-opens java.base/java.util.jar\u003dcpw.mods.securejarhandler --add-opens java.base/java.lang.invoke\u003dcpw.mods.securejarhandler --add-exports java.base/sun.security.util\u003dcpw.mods.securejarhandler --add-exports jdk.naming.dns/com.sun.jndi.dns\u003djava.naming", + "args": "--launchTarget forgeclientuserdev --version MOD_DEV --assetIndex 5 --assetsDir /home/diceof20/.gradle/caches/forge_gradle/assets --gameDir . --fml.forgeVersion 47.3.0 --fml.mcVersion 1.20.1 --fml.forgeGroup net.minecraftforge --fml.mcpVersion 20230612.114412 --mixin.config cosmere.mixins.json --mixin.config allomancy.mixins.json --mixin.config feruchemy.mixins.json --mixin.config hemalurgy.mixins.json --mixin.config surgebinding.mixins.json --mixin.config sandmastery.mixins.json --mixin.config aviar.mixins.json --mixin.config awakening.mixins.json --mixin.config aondor.mixins.json --mixin.config soulforgery.mixins.json --mixin.config cosmeretools.mixins.json", + "env": { + "MOD_CLASSES": "allomancy%%${workspaceFolder}/build/resources/allomancy:allomancy%%${workspaceFolder}/build/classes/java/allomancy:allomancy%%${workspaceFolder}/build/resources/gameTestAllomancy:allomancy%%${workspaceFolder}/build/classes/java/gameTestAllomancy:aondor%%${workspaceFolder}/build/resources/aondor:aondor%%${workspaceFolder}/build/classes/java/aondor:aondor%%${workspaceFolder}/build/resources/gameTestAondor:aondor%%${workspaceFolder}/build/classes/java/gameTestAondor:aviar%%${workspaceFolder}/build/resources/aviar:aviar%%${workspaceFolder}/build/classes/java/aviar:aviar%%${workspaceFolder}/build/resources/gameTestAviar:aviar%%${workspaceFolder}/build/classes/java/gameTestAviar:awakening%%${workspaceFolder}/build/resources/awakening:awakening%%${workspaceFolder}/build/classes/java/awakening:awakening%%${workspaceFolder}/build/resources/gameTestAwakening:awakening%%${workspaceFolder}/build/classes/java/gameTestAwakening:cosmere%%${workspaceFolder}/build/resources/main:cosmere%%${workspaceFolder}/build/classes/java/main:cosmere%%${workspaceFolder}/build/resources/api:cosmere%%${workspaceFolder}/build/classes/java/api:cosmere%%${workspaceFolder}/build/resources/gameTestMain:cosmere%%${workspaceFolder}/build/classes/java/gameTestMain:cosmeretools%%${workspaceFolder}/build/resources/cosmeretools:cosmeretools%%${workspaceFolder}/build/classes/java/cosmeretools:cosmeretools%%${workspaceFolder}/build/resources/gameTestCosmeretools:cosmeretools%%${workspaceFolder}/build/classes/java/gameTestCosmeretools:example%%${workspaceFolder}/build/resources/example:example%%${workspaceFolder}/build/classes/java/example:example%%${workspaceFolder}/build/resources/gameTestExample:example%%${workspaceFolder}/build/classes/java/gameTestExample:feruchemy%%${workspaceFolder}/build/resources/feruchemy:feruchemy%%${workspaceFolder}/build/classes/java/feruchemy:feruchemy%%${workspaceFolder}/build/resources/gameTestFeruchemy:feruchemy%%${workspaceFolder}/build/classes/java/gameTestFeruchemy:hemalurgy%%${workspaceFolder}/build/resources/hemalurgy:hemalurgy%%${workspaceFolder}/build/classes/java/hemalurgy:hemalurgy%%${workspaceFolder}/build/resources/gameTestHemalurgy:hemalurgy%%${workspaceFolder}/build/classes/java/gameTestHemalurgy:sandmastery%%${workspaceFolder}/build/resources/sandmastery:sandmastery%%${workspaceFolder}/build/classes/java/sandmastery:sandmastery%%${workspaceFolder}/build/resources/gameTestSandmastery:sandmastery%%${workspaceFolder}/build/classes/java/gameTestSandmastery:soulforgery%%${workspaceFolder}/build/resources/soulforgery:soulforgery%%${workspaceFolder}/build/classes/java/soulforgery:soulforgery%%${workspaceFolder}/build/resources/gameTestSoulforgery:soulforgery%%${workspaceFolder}/build/classes/java/gameTestSoulforgery:surgebinding%%${workspaceFolder}/build/resources/surgebinding:surgebinding%%${workspaceFolder}/build/classes/java/surgebinding:surgebinding%%${workspaceFolder}/build/resources/gameTestSurgebinding:surgebinding%%${workspaceFolder}/build/classes/java/gameTestSurgebinding", + "MCP_MAPPINGS": "parchment_2023.09.03-1.20.1" + }, + "preLaunchTask": "prepareRunClientCompile" + }, + { + "type": "java", + "name": "runData", + "request": "launch", + "mainClass": "cpw.mods.bootstraplauncher.BootstrapLauncher", + "projectName": "cosmere", + "cwd": "${workspaceFolder}/run", + "vmArgs": "-DlegacyClassPath.file\u003d/home/diceof20/Documents/GitHub/cosmere/build/classpath/runData_minecraftClasspath.txt -Dmixin.env.remapRefMap\u003dtrue -Dmixin.env.refMapRemappingFile\u003d/home/diceof20/Documents/GitHub/cosmere/build/createSrgToMcp/output.srg -Dnet.minecraftforge.gradle.GradleStart.srg.srg-mcp\u003d/home/diceof20/Documents/GitHub/cosmere/build/createSrgToMcp/output.srg -DignoreList\u003dbootstraplauncher,securejarhandler,asm-commons,asm-util,asm-analysis,asm-tree,asm,JarJarFileSystems,client-extra,fmlcore,javafmllanguage,lowcodelanguage,mclanguage,forge- -DmergeModules\u003djna-5.10.0.jar,jna-platform-5.10.0.jar -Djava.net.preferIPv6Addresses\u003dsystem -p /home/diceof20/.gradle/caches/modules-2/files-2.1/cpw.mods/bootstraplauncher/1.1.2/c546e00443d8432cda6baa1c860346980742628/bootstraplauncher-1.1.2.jar:/home/diceof20/.gradle/caches/modules-2/files-2.1/cpw.mods/securejarhandler/2.1.10/51e6a22c6c716beb11e244bf5b8be480f51dd6b5/securejarhandler-2.1.10.jar:/home/diceof20/.gradle/caches/modules-2/files-2.1/org.ow2.asm/asm-commons/9.7/e86dda4696d3c185fcc95d8d311904e7ce38a53f/asm-commons-9.7.jar:/home/diceof20/.gradle/caches/modules-2/files-2.1/org.ow2.asm/asm-util/9.7/c0655519f24d92af2202cb681cd7c1569df6ead6/asm-util-9.7.jar:/home/diceof20/.gradle/caches/modules-2/files-2.1/org.ow2.asm/asm-analysis/9.7/e4a258b7eb96107106c0599f0061cfc1832fe07a/asm-analysis-9.7.jar:/home/diceof20/.gradle/caches/modules-2/files-2.1/org.ow2.asm/asm-tree/9.7/e446a17b175bfb733b87c5c2560ccb4e57d69f1a/asm-tree-9.7.jar:/home/diceof20/.gradle/caches/modules-2/files-2.1/org.ow2.asm/asm/9.7/73d7b3086e14beb604ced229c302feff6449723/asm-9.7.jar:/home/diceof20/.gradle/caches/modules-2/files-2.1/net.minecraftforge/JarJarFileSystems/0.3.19/2464eb7d6b9ddb9db36a82cf8a95193e5c6fe020/JarJarFileSystems-0.3.19.jar --add-modules ALL-MODULE-PATH --add-opens java.base/java.util.jar\u003dcpw.mods.securejarhandler --add-opens java.base/java.lang.invoke\u003dcpw.mods.securejarhandler --add-exports java.base/sun.security.util\u003dcpw.mods.securejarhandler --add-exports jdk.naming.dns/com.sun.jndi.dns\u003djava.naming", + "args": "--launchTarget forgedatauserdev --assetIndex 5 --assetsDir /home/diceof20/.gradle/caches/forge_gradle/assets --gameDir . --fml.forgeVersion 47.3.0 --fml.mcVersion 1.20.1 --fml.forgeGroup net.minecraftforge --fml.mcpVersion 20230612.114412 --all --output /home/diceof20/Documents/GitHub/cosmere/src/datagen/generated --mod cosmere --existing /home/diceof20/Documents/GitHub/cosmere/src/main/resources --mod allomancy --existing /home/diceof20/Documents/GitHub/cosmere/src/allomancy/resources --mod feruchemy --existing /home/diceof20/Documents/GitHub/cosmere/src/feruchemy/resources --mod hemalurgy --existing /home/diceof20/Documents/GitHub/cosmere/src/hemalurgy/resources --mod surgebinding --existing /home/diceof20/Documents/GitHub/cosmere/src/surgebinding/resources --mod sandmastery --existing /home/diceof20/Documents/GitHub/cosmere/src/sandmastery/resources --mod awakening --existing /home/diceof20/Documents/GitHub/cosmere/src/awakening/resources --mod aondor --existing /home/diceof20/Documents/GitHub/cosmere/src/aondor/resources --mod aviar --existing /home/diceof20/Documents/GitHub/cosmere/src/aviar/resources --mod soulforgery --existing /home/diceof20/Documents/GitHub/cosmere/src/soulforgery/resources --mod example --existing /home/diceof20/Documents/GitHub/cosmere/src/example/resources --mod cosmeretools --existing /home/diceof20/Documents/GitHub/cosmere/src/cosmeretools/resources --mixin.config cosmere.mixins.json --mixin.config allomancy.mixins.json --mixin.config feruchemy.mixins.json --mixin.config hemalurgy.mixins.json --mixin.config surgebinding.mixins.json --mixin.config sandmastery.mixins.json --mixin.config aviar.mixins.json --mixin.config awakening.mixins.json --mixin.config aondor.mixins.json --mixin.config soulforgery.mixins.json --mixin.config cosmeretools.mixins.json", + "env": { + "MOD_CLASSES": "allomancy%%${workspaceFolder}/build/resources/allomancy:allomancy%%${workspaceFolder}/build/classes/java/allomancy:allomancy%%${workspaceFolder}/build/resources/datagenAllomancy:allomancy%%${workspaceFolder}/build/classes/java/datagenAllomancy:aondor%%${workspaceFolder}/build/resources/aondor:aondor%%${workspaceFolder}/build/classes/java/aondor:aondor%%${workspaceFolder}/build/resources/datagenAondor:aondor%%${workspaceFolder}/build/classes/java/datagenAondor:aviar%%${workspaceFolder}/build/resources/aviar:aviar%%${workspaceFolder}/build/classes/java/aviar:aviar%%${workspaceFolder}/build/resources/datagenAviar:aviar%%${workspaceFolder}/build/classes/java/datagenAviar:awakening%%${workspaceFolder}/build/resources/awakening:awakening%%${workspaceFolder}/build/classes/java/awakening:awakening%%${workspaceFolder}/build/resources/datagenAwakening:awakening%%${workspaceFolder}/build/classes/java/datagenAwakening:cosmere%%${workspaceFolder}/build/resources/main:cosmere%%${workspaceFolder}/build/classes/java/main:cosmere%%${workspaceFolder}/build/resources/api:cosmere%%${workspaceFolder}/build/classes/java/api:cosmere%%${workspaceFolder}/build/resources/datagenMain:cosmere%%${workspaceFolder}/build/classes/java/datagenMain:cosmeretools%%${workspaceFolder}/build/resources/cosmeretools:cosmeretools%%${workspaceFolder}/build/classes/java/cosmeretools:cosmeretools%%${workspaceFolder}/build/resources/datagenCosmeretools:cosmeretools%%${workspaceFolder}/build/classes/java/datagenCosmeretools:example%%${workspaceFolder}/build/resources/example:example%%${workspaceFolder}/build/classes/java/example:example%%${workspaceFolder}/build/resources/datagenExample:example%%${workspaceFolder}/build/classes/java/datagenExample:feruchemy%%${workspaceFolder}/build/resources/feruchemy:feruchemy%%${workspaceFolder}/build/classes/java/feruchemy:feruchemy%%${workspaceFolder}/build/resources/datagenFeruchemy:feruchemy%%${workspaceFolder}/build/classes/java/datagenFeruchemy:hemalurgy%%${workspaceFolder}/build/resources/hemalurgy:hemalurgy%%${workspaceFolder}/build/classes/java/hemalurgy:hemalurgy%%${workspaceFolder}/build/resources/datagenHemalurgy:hemalurgy%%${workspaceFolder}/build/classes/java/datagenHemalurgy:sandmastery%%${workspaceFolder}/build/resources/sandmastery:sandmastery%%${workspaceFolder}/build/classes/java/sandmastery:sandmastery%%${workspaceFolder}/build/resources/datagenSandmastery:sandmastery%%${workspaceFolder}/build/classes/java/datagenSandmastery:soulforgery%%${workspaceFolder}/build/resources/soulforgery:soulforgery%%${workspaceFolder}/build/classes/java/soulforgery:soulforgery%%${workspaceFolder}/build/resources/datagenSoulforgery:soulforgery%%${workspaceFolder}/build/classes/java/datagenSoulforgery:surgebinding%%${workspaceFolder}/build/resources/surgebinding:surgebinding%%${workspaceFolder}/build/classes/java/surgebinding:surgebinding%%${workspaceFolder}/build/resources/datagenSurgebinding:surgebinding%%${workspaceFolder}/build/classes/java/datagenSurgebinding", + "MCP_MAPPINGS": "parchment_2023.09.03-1.20.1", + "target": "fmluserdevdata" + }, + "preLaunchTask": "prepareRunDataCompile" + }, + { + "type": "java", + "name": "runGameTestServer", + "request": "launch", + "mainClass": "cpw.mods.bootstraplauncher.BootstrapLauncher", + "projectName": "cosmere", + "cwd": "${workspaceFolder}/runGameTests", + "vmArgs": "-DlegacyClassPath.file\u003d/home/diceof20/Documents/GitHub/cosmere/build/classpath/runGameTestServer_minecraftClasspath.txt -Dmixin.env.remapRefMap\u003dtrue -Dmixin.env.refMapRemappingFile\u003d/home/diceof20/Documents/GitHub/cosmere/build/createSrgToMcp/output.srg -Dnet.minecraftforge.gradle.GradleStart.srg.srg-mcp\u003d/home/diceof20/Documents/GitHub/cosmere/build/createSrgToMcp/output.srg -DignoreList\u003dbootstraplauncher,securejarhandler,asm-commons,asm-util,asm-analysis,asm-tree,asm,JarJarFileSystems,client-extra,fmlcore,javafmllanguage,lowcodelanguage,mclanguage,forge- -DmergeModules\u003djna-5.10.0.jar,jna-platform-5.10.0.jar -Dforge.enabledGameTestNamespaces\u003dcosmere,allomancy,feruchemy,hemalurgy,surgebinding,sandmastery,cosmeretools -Djava.net.preferIPv6Addresses\u003dsystem -p /home/diceof20/.gradle/caches/modules-2/files-2.1/cpw.mods/bootstraplauncher/1.1.2/c546e00443d8432cda6baa1c860346980742628/bootstraplauncher-1.1.2.jar:/home/diceof20/.gradle/caches/modules-2/files-2.1/cpw.mods/securejarhandler/2.1.10/51e6a22c6c716beb11e244bf5b8be480f51dd6b5/securejarhandler-2.1.10.jar:/home/diceof20/.gradle/caches/modules-2/files-2.1/org.ow2.asm/asm-commons/9.7/e86dda4696d3c185fcc95d8d311904e7ce38a53f/asm-commons-9.7.jar:/home/diceof20/.gradle/caches/modules-2/files-2.1/org.ow2.asm/asm-util/9.7/c0655519f24d92af2202cb681cd7c1569df6ead6/asm-util-9.7.jar:/home/diceof20/.gradle/caches/modules-2/files-2.1/org.ow2.asm/asm-analysis/9.7/e4a258b7eb96107106c0599f0061cfc1832fe07a/asm-analysis-9.7.jar:/home/diceof20/.gradle/caches/modules-2/files-2.1/org.ow2.asm/asm-tree/9.7/e446a17b175bfb733b87c5c2560ccb4e57d69f1a/asm-tree-9.7.jar:/home/diceof20/.gradle/caches/modules-2/files-2.1/org.ow2.asm/asm/9.7/73d7b3086e14beb604ced229c302feff6449723/asm-9.7.jar:/home/diceof20/.gradle/caches/modules-2/files-2.1/net.minecraftforge/JarJarFileSystems/0.3.19/2464eb7d6b9ddb9db36a82cf8a95193e5c6fe020/JarJarFileSystems-0.3.19.jar --add-modules ALL-MODULE-PATH --add-opens java.base/java.util.jar\u003dcpw.mods.securejarhandler --add-opens java.base/java.lang.invoke\u003dcpw.mods.securejarhandler --add-exports java.base/sun.security.util\u003dcpw.mods.securejarhandler --add-exports jdk.naming.dns/com.sun.jndi.dns\u003djava.naming", + "args": "--launchTarget forgegametestserveruserdev --gameDir . --fml.forgeVersion 47.3.0 --fml.mcVersion 1.20.1 --fml.forgeGroup net.minecraftforge --fml.mcpVersion 20230612.114412 --mixin.config cosmere.mixins.json --mixin.config allomancy.mixins.json --mixin.config feruchemy.mixins.json --mixin.config hemalurgy.mixins.json --mixin.config surgebinding.mixins.json --mixin.config sandmastery.mixins.json --mixin.config aviar.mixins.json --mixin.config awakening.mixins.json --mixin.config aondor.mixins.json --mixin.config soulforgery.mixins.json --mixin.config cosmeretools.mixins.json", + "env": { + "MOD_CLASSES": "allomancy%%${workspaceFolder}/build/resources/allomancy:allomancy%%${workspaceFolder}/build/classes/java/allomancy:allomancy%%${workspaceFolder}/build/resources/gameTestAllomancy:allomancy%%${workspaceFolder}/build/classes/java/gameTestAllomancy:aondor%%${workspaceFolder}/build/resources/aondor:aondor%%${workspaceFolder}/build/classes/java/aondor:aondor%%${workspaceFolder}/build/resources/gameTestAondor:aondor%%${workspaceFolder}/build/classes/java/gameTestAondor:aviar%%${workspaceFolder}/build/resources/aviar:aviar%%${workspaceFolder}/build/classes/java/aviar:aviar%%${workspaceFolder}/build/resources/gameTestAviar:aviar%%${workspaceFolder}/build/classes/java/gameTestAviar:awakening%%${workspaceFolder}/build/resources/awakening:awakening%%${workspaceFolder}/build/classes/java/awakening:awakening%%${workspaceFolder}/build/resources/gameTestAwakening:awakening%%${workspaceFolder}/build/classes/java/gameTestAwakening:cosmere%%${workspaceFolder}/build/resources/main:cosmere%%${workspaceFolder}/build/classes/java/main:cosmere%%${workspaceFolder}/build/resources/api:cosmere%%${workspaceFolder}/build/classes/java/api:cosmere%%${workspaceFolder}/build/resources/gameTestMain:cosmere%%${workspaceFolder}/build/classes/java/gameTestMain:cosmeretools%%${workspaceFolder}/build/resources/cosmeretools:cosmeretools%%${workspaceFolder}/build/classes/java/cosmeretools:cosmeretools%%${workspaceFolder}/build/resources/gameTestCosmeretools:cosmeretools%%${workspaceFolder}/build/classes/java/gameTestCosmeretools:example%%${workspaceFolder}/build/resources/example:example%%${workspaceFolder}/build/classes/java/example:example%%${workspaceFolder}/build/resources/gameTestExample:example%%${workspaceFolder}/build/classes/java/gameTestExample:feruchemy%%${workspaceFolder}/build/resources/feruchemy:feruchemy%%${workspaceFolder}/build/classes/java/feruchemy:feruchemy%%${workspaceFolder}/build/resources/gameTestFeruchemy:feruchemy%%${workspaceFolder}/build/classes/java/gameTestFeruchemy:hemalurgy%%${workspaceFolder}/build/resources/hemalurgy:hemalurgy%%${workspaceFolder}/build/classes/java/hemalurgy:hemalurgy%%${workspaceFolder}/build/resources/gameTestHemalurgy:hemalurgy%%${workspaceFolder}/build/classes/java/gameTestHemalurgy:sandmastery%%${workspaceFolder}/build/resources/sandmastery:sandmastery%%${workspaceFolder}/build/classes/java/sandmastery:sandmastery%%${workspaceFolder}/build/resources/gameTestSandmastery:sandmastery%%${workspaceFolder}/build/classes/java/gameTestSandmastery:soulforgery%%${workspaceFolder}/build/resources/soulforgery:soulforgery%%${workspaceFolder}/build/classes/java/soulforgery:soulforgery%%${workspaceFolder}/build/resources/gameTestSoulforgery:soulforgery%%${workspaceFolder}/build/classes/java/gameTestSoulforgery:surgebinding%%${workspaceFolder}/build/resources/surgebinding:surgebinding%%${workspaceFolder}/build/classes/java/surgebinding:surgebinding%%${workspaceFolder}/build/resources/gameTestSurgebinding:surgebinding%%${workspaceFolder}/build/classes/java/gameTestSurgebinding", + "MCP_MAPPINGS": "parchment_2023.09.03-1.20.1" + }, + "preLaunchTask": "prepareRunGameTestServerCompile" + }, + { + "type": "java", + "name": "runServer", + "request": "launch", + "mainClass": "cpw.mods.bootstraplauncher.BootstrapLauncher", + "projectName": "cosmere", + "cwd": "${workspaceFolder}/run", + "vmArgs": "-DlegacyClassPath.file\u003d/home/diceof20/Documents/GitHub/cosmere/build/classpath/runServer_minecraftClasspath.txt -Dmixin.env.remapRefMap\u003dtrue -Dmixin.env.refMapRemappingFile\u003d/home/diceof20/Documents/GitHub/cosmere/build/createSrgToMcp/output.srg -Dnet.minecraftforge.gradle.GradleStart.srg.srg-mcp\u003d/home/diceof20/Documents/GitHub/cosmere/build/createSrgToMcp/output.srg -DignoreList\u003dbootstraplauncher,securejarhandler,asm-commons,asm-util,asm-analysis,asm-tree,asm,JarJarFileSystems,client-extra,fmlcore,javafmllanguage,lowcodelanguage,mclanguage,forge- -DmergeModules\u003djna-5.10.0.jar,jna-platform-5.10.0.jar -Dforge.enabledGameTestNamespaces\u003dcosmere,allomancy,feruchemy,hemalurgy,surgebinding,sandmastery,cosmeretools -Dforge.enableGameTest\u003dtrue -Djava.net.preferIPv6Addresses\u003dsystem -p /home/diceof20/.gradle/caches/modules-2/files-2.1/cpw.mods/bootstraplauncher/1.1.2/c546e00443d8432cda6baa1c860346980742628/bootstraplauncher-1.1.2.jar:/home/diceof20/.gradle/caches/modules-2/files-2.1/cpw.mods/securejarhandler/2.1.10/51e6a22c6c716beb11e244bf5b8be480f51dd6b5/securejarhandler-2.1.10.jar:/home/diceof20/.gradle/caches/modules-2/files-2.1/org.ow2.asm/asm-commons/9.7/e86dda4696d3c185fcc95d8d311904e7ce38a53f/asm-commons-9.7.jar:/home/diceof20/.gradle/caches/modules-2/files-2.1/org.ow2.asm/asm-util/9.7/c0655519f24d92af2202cb681cd7c1569df6ead6/asm-util-9.7.jar:/home/diceof20/.gradle/caches/modules-2/files-2.1/org.ow2.asm/asm-analysis/9.7/e4a258b7eb96107106c0599f0061cfc1832fe07a/asm-analysis-9.7.jar:/home/diceof20/.gradle/caches/modules-2/files-2.1/org.ow2.asm/asm-tree/9.7/e446a17b175bfb733b87c5c2560ccb4e57d69f1a/asm-tree-9.7.jar:/home/diceof20/.gradle/caches/modules-2/files-2.1/org.ow2.asm/asm/9.7/73d7b3086e14beb604ced229c302feff6449723/asm-9.7.jar:/home/diceof20/.gradle/caches/modules-2/files-2.1/net.minecraftforge/JarJarFileSystems/0.3.19/2464eb7d6b9ddb9db36a82cf8a95193e5c6fe020/JarJarFileSystems-0.3.19.jar --add-modules ALL-MODULE-PATH --add-opens java.base/java.util.jar\u003dcpw.mods.securejarhandler --add-opens java.base/java.lang.invoke\u003dcpw.mods.securejarhandler --add-exports java.base/sun.security.util\u003dcpw.mods.securejarhandler --add-exports jdk.naming.dns/com.sun.jndi.dns\u003djava.naming", + "args": "--launchTarget forgeserveruserdev --gameDir . --fml.forgeVersion 47.3.0 --fml.mcVersion 1.20.1 --fml.forgeGroup net.minecraftforge --fml.mcpVersion 20230612.114412 --mixin.config cosmere.mixins.json --mixin.config allomancy.mixins.json --mixin.config feruchemy.mixins.json --mixin.config hemalurgy.mixins.json --mixin.config surgebinding.mixins.json --mixin.config sandmastery.mixins.json --mixin.config aviar.mixins.json --mixin.config awakening.mixins.json --mixin.config aondor.mixins.json --mixin.config soulforgery.mixins.json --mixin.config cosmeretools.mixins.json", + "env": { + "MOD_CLASSES": "allomancy%%${workspaceFolder}/build/resources/allomancy:allomancy%%${workspaceFolder}/build/classes/java/allomancy:allomancy%%${workspaceFolder}/build/resources/gameTestAllomancy:allomancy%%${workspaceFolder}/build/classes/java/gameTestAllomancy:aondor%%${workspaceFolder}/build/resources/aondor:aondor%%${workspaceFolder}/build/classes/java/aondor:aondor%%${workspaceFolder}/build/resources/gameTestAondor:aondor%%${workspaceFolder}/build/classes/java/gameTestAondor:aviar%%${workspaceFolder}/build/resources/aviar:aviar%%${workspaceFolder}/build/classes/java/aviar:aviar%%${workspaceFolder}/build/resources/gameTestAviar:aviar%%${workspaceFolder}/build/classes/java/gameTestAviar:awakening%%${workspaceFolder}/build/resources/awakening:awakening%%${workspaceFolder}/build/classes/java/awakening:awakening%%${workspaceFolder}/build/resources/gameTestAwakening:awakening%%${workspaceFolder}/build/classes/java/gameTestAwakening:cosmere%%${workspaceFolder}/build/resources/main:cosmere%%${workspaceFolder}/build/classes/java/main:cosmere%%${workspaceFolder}/build/resources/api:cosmere%%${workspaceFolder}/build/classes/java/api:cosmere%%${workspaceFolder}/build/resources/gameTestMain:cosmere%%${workspaceFolder}/build/classes/java/gameTestMain:cosmeretools%%${workspaceFolder}/build/resources/cosmeretools:cosmeretools%%${workspaceFolder}/build/classes/java/cosmeretools:cosmeretools%%${workspaceFolder}/build/resources/gameTestCosmeretools:cosmeretools%%${workspaceFolder}/build/classes/java/gameTestCosmeretools:example%%${workspaceFolder}/build/resources/example:example%%${workspaceFolder}/build/classes/java/example:example%%${workspaceFolder}/build/resources/gameTestExample:example%%${workspaceFolder}/build/classes/java/gameTestExample:feruchemy%%${workspaceFolder}/build/resources/feruchemy:feruchemy%%${workspaceFolder}/build/classes/java/feruchemy:feruchemy%%${workspaceFolder}/build/resources/gameTestFeruchemy:feruchemy%%${workspaceFolder}/build/classes/java/gameTestFeruchemy:hemalurgy%%${workspaceFolder}/build/resources/hemalurgy:hemalurgy%%${workspaceFolder}/build/classes/java/hemalurgy:hemalurgy%%${workspaceFolder}/build/resources/gameTestHemalurgy:hemalurgy%%${workspaceFolder}/build/classes/java/gameTestHemalurgy:sandmastery%%${workspaceFolder}/build/resources/sandmastery:sandmastery%%${workspaceFolder}/build/classes/java/sandmastery:sandmastery%%${workspaceFolder}/build/resources/gameTestSandmastery:sandmastery%%${workspaceFolder}/build/classes/java/gameTestSandmastery:soulforgery%%${workspaceFolder}/build/resources/soulforgery:soulforgery%%${workspaceFolder}/build/classes/java/soulforgery:soulforgery%%${workspaceFolder}/build/resources/gameTestSoulforgery:soulforgery%%${workspaceFolder}/build/classes/java/gameTestSoulforgery:surgebinding%%${workspaceFolder}/build/resources/surgebinding:surgebinding%%${workspaceFolder}/build/classes/java/surgebinding:surgebinding%%${workspaceFolder}/build/resources/gameTestSurgebinding:surgebinding%%${workspaceFolder}/build/classes/java/gameTestSurgebinding", + "MCP_MAPPINGS": "parchment_2023.09.03-1.20.1" + }, + "preLaunchTask": "prepareRunServerCompile" + } + ] +} \ No newline at end of file diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 000000000..5423194b2 --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,37 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "prepareRunClientCompile", + "type": "shell", + "command": "./gradlew prepareRunClientCompile", + "options": { + "cwd": "${workspaceFolder}" + } + }, + { + "label": "prepareRunDataCompile", + "type": "shell", + "command": "./gradlew prepareRunDataCompile", + "options": { + "cwd": "${workspaceFolder}" + } + }, + { + "label": "prepareRunGameTestServerCompile", + "type": "shell", + "command": "./gradlew prepareRunGameTestServerCompile", + "options": { + "cwd": "${workspaceFolder}" + } + }, + { + "label": "prepareRunServerCompile", + "type": "shell", + "command": "./gradlew prepareRunServerCompile", + "options": { + "cwd": "${workspaceFolder}" + } + } + ] +} \ No newline at end of file diff --git a/Changelog.md b/Changelog.md deleted file mode 100644 index a1c93b320..000000000 --- a/Changelog.md +++ /dev/null @@ -1,61 +0,0 @@ -The Cosmere Project - For 1.16 Minecraft - -B16 - -Auto select a power if none are selected. Only really relevant for first time joining world. -Fixed crash from mousing over creative debug hemalurgy spike that gives all powers in inventory. -Spikes now show up in more varied locations based on curio slot. -Remove key bind check on most allomancy -added a creative mode only shard blade to test a model that was created using blockbench. -fixing some bugs related to soothing and rioting. May have to look into updating the entity goals, since it doesn't seem to affect passive mobs - -B15 - -Adding nuggets to bottles/vials that can then be consumed. -Iron/steel sight. Steel pushing set up. Iron pushing not yet implemented. -Starting to use allomantic/feruchemical strength that the user either starts with or steals with feruchemy. -Duralumin/Nicrosil initial framework set up, though untested. -Fixed a bug where player powers were not persisting across death. -Big spiritweb menu refactor, now I actually understand what's going on there. - -B14 - -Adding illagers and witches to possible powered individuals. -Adding electrum feruchemy. Not sure how happy I am with it. Reduces/increases damage taken a small amount. Any suggestions on what storing/tapping determination could do would be appreciated. -Have also removed annoying mode change message and updated the debug text so it says selected power and what mode the selected power is in. -Big refactor to convert to using attributes instead of capability to track what powers you currently have access to. - -B13 - -All feruchemy basically done except for nicrosil and electrum. -Players are twinborn at a minimum, or they are granted either full allomancy or full feruchemy. -Fine tuned feruchemical bronze storing, so it doesn’t spam chat with sleep messages. -Fine tuned brass feruchemy, so that tapping brass actually does something. Sets others on fire if tapping enough when attacking. Sets self on fire if tapping too much. - -B12 - -Following 1.17 style of ore blocks dropping raw ore, rather than the block itself. -Raw ore is affected by fortune. -Alloys are made out of raw ore for the most part. Recipes are visible in the JEI mod. -Fixed up tin feruchemy so it provides zoom instead of night vision. -Fixed night vision in tin allomancy so it doesn’t spam flash the screen on low night vision timer left. - -B11 - -World generation done! You can find the new ores out in the world now. -Zinc feruchemy gives more experience when tapping, less experience when storing. -Gold feruchemy acts more like poison and regeneration, except the reduced health is dependent on how much health you are storing. -Storing identity with duralumin will hide your nameplate if you’re storing enough. Visibility to mobs is also dependent on how much you’re storing - -B9 - -Ore blocks exist but not generating in the world - -B8 and below. - -Initial commit, never kept track of what the build had then really. -Some feruchemy, -basic gui, -swallowing metal for allomancy etc. -Hemalurgy initial pass too. -Compounding also is in there. diff --git a/LICENSE b/LICENSE index 5f1977b64..c46f518ad 100644 --- a/LICENSE +++ b/LICENSE @@ -1,165 +1,21 @@ -GNU LESSER GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - -Copyright (C) 2007 Free Software Foundation, Inc. -Everyone is permitted to copy and distribute verbatim copies -of this license document, but changing it is not allowed. - - -This version of the GNU Lesser General Public License incorporates -the terms and conditions of version 3 of the GNU General Public -License, supplemented by the additional permissions listed below. - -0. Additional Definitions. - -As used herein, "this License" refers to version 3 of the GNU Lesser -General Public License, and the "GNU GPL" refers to version 3 of the GNU -General Public License. - -"The Library" refers to a covered work governed by this License, -other than an Application or a Combined Work as defined below. - -An "Application" is any work that makes use of an interface provided -by the Library, but which is not otherwise based on the Library. -Defining a subclass of a class defined by the Library is deemed a mode -of using an interface provided by the Library. - -A "Combined Work" is a work produced by combining or linking an -Application with the Library. The particular version of the Library -with which the Combined Work was made is also called the "Linked -Version". - -The "Minimal Corresponding Source" for a Combined Work means the -Corresponding Source for the Combined Work, excluding any source code -for portions of the Combined Work that, considered in isolation, are -based on the Application, and not on the Linked Version. - -The "Corresponding Application Code" for a Combined Work means the -object code and/or source code for the Application, including any data -and utility programs needed for reproducing the Combined Work from the -Application, but excluding the System Libraries of the Combined Work. - -1. Exception to Section 3 of the GNU GPL. - -You may convey a covered work under sections 3 and 4 of this License -without being bound by section 3 of the GNU GPL. - -2. Conveying Modified Versions. - -If you modify a copy of the Library, and, in your modifications, a -facility refers to a function or data to be supplied by an Application -that uses the facility (other than as an argument passed when the -facility is invoked), then you may convey a copy of the modified -version: - -a) under this License, provided that you make a good faith effort to -ensure that, in the event an Application does not supply the -function or data, the facility still operates, and performs -whatever part of its purpose remains meaningful, or - -b) under the GNU GPL, with none of the additional permissions of -this License applicable to that copy. - -3. Object Code Incorporating Material from Library Header Files. - -The object code form of an Application may incorporate material from -a header file that is part of the Library. You may convey such object -code under terms of your choice, provided that, if the incorporated -material is not limited to numerical parameters, data structure -layouts and accessors, or small macros, inline functions and templates -(ten or fewer lines in length), you do both of the following: - -a) Give prominent notice with each copy of the object code that the -Library is used in it and that the Library and its use are -covered by this License. - -b) Accompany the object code with a copy of the GNU GPL and this license -document. - -4. Combined Works. - -You may convey a Combined Work under terms of your choice that, -taken together, effectively do not restrict modification of the -portions of the Library contained in the Combined Work and reverse -engineering for debugging such modifications, if you also do each of -the following: - -a) Give prominent notice with each copy of the Combined Work that -the Library is used in it and that the Library and its use are -covered by this License. - -b) Accompany the Combined Work with a copy of the GNU GPL and this license -document. - -c) For a Combined Work that displays copyright notices during -execution, include the copyright notice for the Library among -these notices, as well as a reference directing the user to the -copies of the GNU GPL and this license document. - -d) Do one of the following: - -0) Convey the Minimal Corresponding Source under the terms of this -License, and the Corresponding Application Code in a form -suitable for, and under terms that permit, the user to -recombine or relink the Application with a modified version of -the Linked Version to produce a modified Combined Work, in the -manner specified by section 6 of the GNU GPL for conveying -Corresponding Source. - -1) Use a suitable shared library mechanism for linking with the -Library. A suitable mechanism is one that (a) uses at run time -a copy of the Library already present on the user's computer -system, and (b) will operate properly with a modified version -of the Library that is interface-compatible with the Linked -Version. - -e) Provide Installation Information, but only if you would otherwise -be required to provide such information under section 6 of the -GNU GPL, and only to the extent that such information is -necessary to install and execute a modified version of the -Combined Work produced by recombining or relinking the -Application with a modified version of the Linked Version. (If -you use option 4d0, the Installation Information must accompany -the Minimal Corresponding Source and Corresponding Application -Code. If you use option 4d1, you must provide the Installation -Information in the manner specified by section 6 of the GNU GPL -for conveying Corresponding Source.) - -5. Combined Libraries. - -You may place library facilities that are a work based on the -Library side by side in a single library together with other library -facilities that are not Applications and are not covered by this -License, and convey such a combined library under terms of your -choice, if you do both of the following: - -a) Accompany the combined library with a copy of the same work based -on the Library, uncombined with any other library facilities, -conveyed under the terms of this License. - -b) Give prominent notice with the combined library that part of it -is a work based on the Library, and explaining where to find the -accompanying uncombined form of the same work. - -6. Revised Versions of the GNU Lesser General Public License. - -The Free Software Foundation may publish revised and/or new versions -of the GNU Lesser General Public License from time to time. Such new -versions will be similar in spirit to the present version, but may -differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the -Library as you received it specifies that a certain numbered version -of the GNU Lesser General Public License "or any later version" -applies to it, you have the option of following the terms and -conditions either of that published version or of any later version -published by the Free Software Foundation. If the Library as you -received it does not specify a version number of the GNU Lesser -General Public License, you may choose any version of the GNU Lesser -General Public License ever published by the Free Software Foundation. - -If the Library as you received it specifies that a proxy can decide -whether future versions of the GNU Lesser General Public License shall -apply, that proxy's public statement of acceptance of any version is -permanent authorization for you to choose that version for the -Library. \ No newline at end of file +The MIT License (MIT) + +Copyright (c) 2022 LeafReynolds + +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. \ No newline at end of file diff --git a/README.md b/README.md index dde543b5a..22fb7d65f 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # Welcome to The Cosmere! -[![](http://cf.way2muchnoise.eu/versions/cosmere.svg)](https://www.curseforge.com/minecraft/mc-mods/cosmere) [![](http://cf.way2muchnoise.eu/short_475343_downloads.svg)](https://www.curseforge.com/minecraft/mc-mods/cosmere/files) [![License: LGPL v3](https://img.shields.io/badge/License-LGPL%20v3-blue.svg?&style=flat-square)](https://www.gnu.org/licenses/lgpl-3.0) [![](https://img.shields.io/discord/828383636465123328.svg?color=purple&label=Discord&style=flat-square)](https://discord.gg/wNghzCbqXw) +[![](https://cf.way2muchnoise.eu/versions/475343.svg)](https://www.curseforge.com/minecraft/mc-mods/cosmere) [![](http://cf.way2muchnoise.eu/short_475343_downloads.svg)](https://www.curseforge.com/minecraft/mc-mods/cosmere/files) [![License: LGPL v3](https://img.shields.io/badge/License-LGPL%20v3-blue.svg?&style=flat-square)](https://www.gnu.org/licenses/lgpl-3.0) [![](https://img.shields.io/discord/828383636465123328.svg?color=purple&label=Discord&style=flat-square)](https://discord.gg/nj6rnQqdc8) ## Overview @@ -9,26 +9,26 @@ This mod aims to bring all of that to Minecraft itself... eventually. ## Current (partially implemented) Features There are currently several powers from Scadrial, the planet from the Mistborn series: -**Allomancy!** +**Allomancy!** ![](https://cf.way2muchnoise.eu/versions/678468.svg) Become a [Misting or Mistborn](https://coppermind.net/wiki/Allomancy)! Consume certain types of metals based on the power you start with and burn it to access your allomantic ability! - -**Feruchemy!** +**Feruchemy!** ![](https://cf.way2muchnoise.eu/versions/678466.svg) The End-Neutral art, where you get out what you put in! If you have access to [feruchemical abilities](https://coppermind.net/wiki/Feruchemy), that is. - **Twinborn & Compounding!** The place where the powers of [allomancy and feruchemy](https://coppermind.net/wiki/Compounding) meet. +**Still not enough for you?** ![](https://cf.way2muchnoise.eu/versions/678469.svg) +Well there's always the [third](https://coppermind.net/wiki/Hemalurgy) metallic art of Scadrial... -**Still not enough for you?** - Well there's always the [third](https://coppermind.net/wiki/Hemalurgy) metallic art of Scadrial... - +Pehaps you'd prefer to try your hand at the magic of Tal'Dain, the world of White Sand: +**Sand Mastery!** ![](https://cf.way2muchnoise.eu/versions/695387.svg) +The art of manipulating sand to your will. Requires a lot of practice and a lot of sand. ## Planned Features -**Surgebinding - The Stormlight Archive** +**Surgebinding - The Stormlight Archive** ![](https://cf.way2muchnoise.eu/versions/624998.svg) Earn the trust and respect of one of the Radiant spren in order to gain access to the ranks of the Knights Radiant. @@ -41,7 +41,7 @@ The art of combining color, Biochromatic Breath and an awakening command in orde **New Dimensions** - Perhaps the cognitive realm may interest you... Better find the nearest perpendicularity! +Perhaps the cognitive realm may interest you... Better find the nearest perpendicularity! ## Inter-Mod Compatibilities **(Required!) CuriosAPI** - because there's always another secret™ @@ -58,4 +58,4 @@ The art of combining color, Biochromatic Breath and an awakening command in orde [Commands](https://github.com/leafreynolds/cosmere/wiki/commands) ## Got something to say? -Consider dropping by the [discord server dedicated to this mod](https://discord.gg/wNghzCbqXw)! \ No newline at end of file +Consider dropping by the [discord server dedicated to this mod](https://discord.gg/nj6rnQqdc8)! diff --git a/blockbench/SprenFlameModel.java b/blockbench/SprenFlameModel.java deleted file mode 100644 index 5ab9dbdfa..000000000 --- a/blockbench/SprenFlameModel.java +++ /dev/null @@ -1,74 +0,0 @@ -// Made with Blockbench 3.8.3 -// Exported for Minecraft version 1.15 - 1.16 -// Paste this class into your mod and generate all required imports - - -public class SprenFlameModel extends EntityModel { - private final ModelRenderer body; - private final ModelRenderer wingLeft; - private final ModelRenderer wingLeftUpper_r1; - private final ModelRenderer wingLeftLower_r1; - private final ModelRenderer wingRight; - private final ModelRenderer wingRightLower_r1; - private final ModelRenderer wingRightUpper_r1; - - public SprenFlameModel() { - textureWidth = 16; - textureHeight = 16; - - body = new ModelRenderer(this); - body.setRotationPoint(0.0F, 24.0F, 0.0F); - body.setTextureOffset(0, 0).addBox(-2.0F, -4.0F, 0.0F, 4.0F, 4.0F, 0.0F, 0.0F, false); - body.setTextureOffset(0, 0).addBox(-1.0F, -3.0F, -1.0F, 2.0F, 2.0F, 2.0F, 0.0F, false); - - wingLeft = new ModelRenderer(this); - wingLeft.setRotationPoint(0.0F, 0.0F, 0.0F); - body.addChild(wingLeft); - - - wingLeftUpper_r1 = new ModelRenderer(this); - wingLeftUpper_r1.setRotationPoint(0.0F, 0.0F, 0.0F); - wingLeft.addChild(wingLeftUpper_r1); - setRotationAngle(wingLeftUpper_r1, 0.0F, 0.7854F, -0.1745F); - wingLeftUpper_r1.setTextureOffset(0, 0).addBox(1.0F, -3.75F, 1.0F, 4.0F, 3.0F, 0.0F, 0.0F, false); - - wingLeftLower_r1 = new ModelRenderer(this); - wingLeftLower_r1.setRotationPoint(0.0F, 0.0F, 0.0F); - wingLeft.addChild(wingLeftLower_r1); - setRotationAngle(wingLeftLower_r1, 0.0F, 0.3491F, 0.0F); - wingLeftLower_r1.setTextureOffset(0, 0).addBox(0.5F, -1.0F, 0.0F, 3.0F, 2.0F, 0.0F, 0.0F, false); - - wingRight = new ModelRenderer(this); - wingRight.setRotationPoint(0.0F, 0.0F, 0.0F); - body.addChild(wingRight); - - - wingRightLower_r1 = new ModelRenderer(this); - wingRightLower_r1.setRotationPoint(0.0F, 0.0F, 0.0F); - wingRight.addChild(wingRightLower_r1); - setRotationAngle(wingRightLower_r1, 0.0F, -0.3491F, 0.0F); - wingRightLower_r1.setTextureOffset(0, 0).addBox(-3.5F, -1.0F, 0.0F, 3.0F, 2.0F, 0.0F, 0.0F, false); - - wingRightUpper_r1 = new ModelRenderer(this); - wingRightUpper_r1.setRotationPoint(0.0F, 0.0F, 0.0F); - wingRight.addChild(wingRightUpper_r1); - setRotationAngle(wingRightUpper_r1, 0.0F, -0.7854F, 0.1745F); - wingRightUpper_r1.setTextureOffset(0, 0).addBox(-5.0F, -3.75F, 1.0F, 4.0F, 3.0F, 0.0F, 0.0F, false); - } - - @Override - public void setRotationAngles(Entity entity, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch){ - //previously the render function, render code was moved to a method below - } - - @Override - public void render(MatrixStack matrixStack, IVertexBuilder buffer, int packedLight, int packedOverlay, float red, float green, float blue, float alpha){ - body.render(matrixStack, buffer, packedLight, packedOverlay); - } - - public void setRotationAngle(ModelRenderer modelRenderer, float x, float y, float z) { - modelRenderer.rotateAngleX = x; - modelRenderer.rotateAngleY = y; - modelRenderer.rotateAngleZ = z; - } -} \ No newline at end of file diff --git a/blockbench/allomancy/mistcloak.bbmodel b/blockbench/allomancy/mistcloak.bbmodel new file mode 100644 index 000000000..56bf1c2a9 --- /dev/null +++ b/blockbench/allomancy/mistcloak.bbmodel @@ -0,0 +1 @@ +{"meta":{"format_version":"4.5","model_format":"modded_entity","box_uv":true},"name":"mistcloak","model_identifier":"mistcloak","modded_entity_version":"1.17","modded_entity_flip_y":true,"visible_box":[1,1,0],"variable_placeholders":"","variable_placeholder_buttons":[],"unhandled_root_fields":{},"resolution":{"width":64,"height":64},"elements":[{"name":"body","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-4,-5,-2],"to":[4,0,2],"autouv":0,"color":7,"origin":[0,-24,0],"uv_offset":[20,20],"faces":{"north":{"uv":[24,24,32,29],"texture":0},"east":{"uv":[20,24,24,29],"texture":0},"south":{"uv":[36,24,44,29],"texture":0},"west":{"uv":[32,24,36,29],"texture":0},"up":{"uv":[32,24,24,20],"texture":0},"down":{"uv":[40,20,32,24],"texture":0}},"type":"cube","uuid":"0718b744-e674-d8b1-fdc0-a0f93cd2c93f"},{"name":"body","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[0,-10.215161996135588,-6.623982390322121],"to":[1,-9.965161996135588,0.3760176096778789],"autouv":0,"color":5,"rotation":[80,0,0],"origin":[-8.881784197001252e-16,-10.121411996135588,3.62601760967788],"uv_offset":[37,0],"faces":{"north":{"uv":[44,7,45,7.25],"texture":0},"east":{"uv":[37,7,44,7.25],"texture":0},"south":{"uv":[52,7,53,7.25],"texture":0},"west":{"uv":[45,7,52,7.25],"texture":0},"up":{"uv":[45,7,44,0],"texture":0},"down":{"uv":[46,0,45,7],"texture":0}},"type":"cube","uuid":"36941eff-c10d-e244-ae3a-097f127cec74"},{"name":"body","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[0,-10.215161996135588,0.3760176096778789],"to":[1,-10.027661996135588,7.376017609677879],"autouv":0,"color":5,"rotation":[80,0,0],"origin":[-8.881784197001252e-16,-10.121411996135588,3.62601760967788],"uv_offset":[0,40],"faces":{"north":{"uv":[7,47,8,47.1875],"texture":0},"east":{"uv":[0,47,7,47.1875],"texture":0},"south":{"uv":[15,47,16,47.1875],"texture":0},"west":{"uv":[8,47,15,47.1875],"texture":0},"up":{"uv":[8,47,7,40],"texture":0},"down":{"uv":[9,40,8,47],"texture":0}},"type":"cube","uuid":"33150fa0-a203-21b2-aec4-4210033346ad"},{"name":"body","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[0,-10.215161996135588,7.376017609677879],"to":[1,-10.090161996135588,14.376017609677879],"autouv":0,"color":5,"rotation":[80,0,0],"origin":[-8.881784197001252e-16,-10.121411996135588,3.62601760967788],"uv_offset":[41,20],"faces":{"north":{"uv":[48,27,49,27.125],"texture":0},"east":{"uv":[41,27,48,27.125],"texture":0},"south":{"uv":[56,27,57,27.125],"texture":0},"west":{"uv":[49,27,56,27.125],"texture":0},"up":{"uv":[49,27,48,20],"texture":0},"down":{"uv":[50,20,49,27],"texture":0}},"type":"cube","uuid":"d6e40f12-fa57-36b0-7155-96992dda9497"},{"name":"body","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[1,-10.215161996135588,-0.6239823903221211],"to":[2,-10.027661996135588,5.376017609677879],"autouv":0,"color":5,"rotation":[80,0,0],"origin":[-8.881784197001252e-16,-10.121411996135588,3.62601760967788],"uv_offset":[44,6],"faces":{"north":{"uv":[50,12,51,12.1875],"texture":0},"east":{"uv":[44,12,50,12.1875],"texture":0},"south":{"uv":[57,12,58,12.1875],"texture":0},"west":{"uv":[51,12,57,12.1875],"texture":0},"up":{"uv":[51,12,50,6],"texture":0},"down":{"uv":[52,6,51,12],"texture":0}},"type":"cube","uuid":"53c9e5ca-144d-1114-170e-807449f9d4c5"},{"name":"body","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[1,-10.215161996135588,-6.623982390322121],"to":[2,-9.965161996135588,-0.6239823903221211],"autouv":0,"color":5,"rotation":[80,0,0],"origin":[-8.881784197001252e-16,-10.121411996135588,3.62601760967788],"uv_offset":[32,41],"faces":{"north":{"uv":[38,47,39,47.25],"texture":0},"east":{"uv":[32,47,38,47.25],"texture":0},"south":{"uv":[45,47,46,47.25],"texture":0},"west":{"uv":[39,47,45,47.25],"texture":0},"up":{"uv":[39,47,38,41],"texture":0},"down":{"uv":[40,41,39,47],"texture":0}},"type":"cube","uuid":"b8ecdd25-b6c7-4038-f676-1493e941717a"},{"name":"body","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[1,-10.215161996135588,5.376017609677879],"to":[2,-10.090161996135588,10.376017609677879],"autouv":0,"color":5,"rotation":[80,0,0],"origin":[-8.881784197001252e-16,-10.121411996135588,3.62601760967788],"uv_offset":[45,31],"faces":{"north":{"uv":[50,36,51,36.125],"texture":0},"east":{"uv":[45,36,50,36.125],"texture":0},"south":{"uv":[56,36,57,36.125],"texture":0},"west":{"uv":[51,36,56,36.125],"texture":0},"up":{"uv":[51,36,50,31],"texture":0},"down":{"uv":[52,31,51,36],"texture":0}},"type":"cube","uuid":"c09863f2-1eb7-64e0-b40a-5dec761db225"},{"name":"body","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[3,-10.215161996135588,5.376017609677879],"to":[4,-10.090161996135588,10.376017609677879],"autouv":0,"color":5,"rotation":[80,0,0],"origin":[-8.881784197001252e-16,-10.121411996135588,3.62601760967788],"uv_offset":[45,26],"faces":{"north":{"uv":[50,31,51,31.125],"texture":0},"east":{"uv":[45,31,50,31.125],"texture":0},"south":{"uv":[56,31,57,31.125],"texture":0},"west":{"uv":[51,31,56,31.125],"texture":0},"up":{"uv":[51,31,50,26],"texture":0},"down":{"uv":[52,26,51,31],"texture":0}},"type":"cube","uuid":"3e64e515-c135-0c1a-e5f5-e6dcffca633b"},{"name":"body","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[3,-10.215161996135588,-6.623982390322121],"to":[4,-9.965161996135588,-0.6239823903221211],"autouv":0,"color":5,"rotation":[80,0,0],"origin":[-8.881784197001252e-16,-10.121411996135588,3.62601760967788],"uv_offset":[30,41],"faces":{"north":{"uv":[36,47,37,47.25],"texture":0},"east":{"uv":[30,47,36,47.25],"texture":0},"south":{"uv":[43,47,44,47.25],"texture":0},"west":{"uv":[37,47,43,47.25],"texture":0},"up":{"uv":[37,47,36,41],"texture":0},"down":{"uv":[38,41,37,47],"texture":0}},"type":"cube","uuid":"a0c17c53-69a5-6d92-58f0-6d394f9c8dab"},{"name":"body","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[3,-10.215161996135588,-0.6239823903221211],"to":[4,-10.027661996135588,5.376017609677879],"autouv":0,"color":5,"rotation":[80,0,0],"origin":[-8.881784197001252e-16,-10.121411996135588,3.62601760967788],"uv_offset":[44,0],"faces":{"north":{"uv":[50,6,51,6.1875],"texture":0},"east":{"uv":[44,6,50,6.1875],"texture":0},"south":{"uv":[57,6,58,6.1875],"texture":0},"west":{"uv":[51,6,57,6.1875],"texture":0},"up":{"uv":[51,6,50,0],"texture":0},"down":{"uv":[52,0,51,6],"texture":0}},"type":"cube","uuid":"73b5ccd9-7eba-3309-4da4-e7e32a6cbb7d"},{"name":"body","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[2,-10.215161996135588,2.376017609677879],"to":[3,-10.090161996135588,9.376017609677879],"autouv":0,"color":5,"rotation":[80,0,0],"origin":[-8.881784197001252e-16,-10.121411996135588,3.62601760967788],"uv_offset":[41,7],"faces":{"north":{"uv":[48,14,49,14.125],"texture":0},"east":{"uv":[41,14,48,14.125],"texture":0},"south":{"uv":[56,14,57,14.125],"texture":0},"west":{"uv":[49,14,56,14.125],"texture":0},"up":{"uv":[49,14,48,7],"texture":0},"down":{"uv":[50,7,49,14],"texture":0}},"type":"cube","uuid":"d4bf1881-a22d-8dfe-ac16-17ac28f4b226"},{"name":"body","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[2,-10.215161996135588,-4.623982390322121],"to":[3,-10.027661996135588,2.376017609677879],"autouv":0,"color":5,"rotation":[80,0,0],"origin":[-8.881784197001252e-16,-10.121411996135588,3.62601760967788],"uv_offset":[39,20],"faces":{"north":{"uv":[46,27,47,27.1875],"texture":0},"east":{"uv":[39,27,46,27.1875],"texture":0},"south":{"uv":[54,27,55,27.1875],"texture":0},"west":{"uv":[47,27,54,27.1875],"texture":0},"up":{"uv":[47,27,46,20],"texture":0},"down":{"uv":[48,20,47,27],"texture":0}},"type":"cube","uuid":"1f567e36-3e6c-0586-ccd7-74857f91c2a2"},{"name":"body","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[2,-10.215161996135588,-6.623982390322121],"to":[3,-9.965161996135588,-4.623982390322121],"autouv":0,"color":5,"rotation":[80,0,0],"origin":[-8.881784197001252e-16,-10.121411996135588,3.62601760967788],"uv_offset":[0,22],"faces":{"north":{"uv":[2,24,3,24.25],"texture":0},"east":{"uv":[0,24,2,24.25],"texture":0},"south":{"uv":[5,24,6,24.25],"texture":0},"west":{"uv":[3,24,5,24.25],"texture":0},"up":{"uv":[3,24,2,22],"texture":0},"down":{"uv":[4,22,3,24],"texture":0}},"type":"cube","uuid":"56defa9d-9f19-355a-424a-cf02883c2831"},{"name":"body","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-3,-10.215161996135588,-6.623982390322121],"to":[-2,-9.965161996135588,-2.873982390322121],"autouv":0,"color":5,"rotation":[80,0,0],"origin":[-8.881784197001252e-16,-10.121411996135588,3.62601760967788],"uv_offset":[44,47],"faces":{"north":{"uv":[47.75,50.75,48.75,51],"texture":0},"east":{"uv":[44,50.75,47.75,51],"texture":0},"south":{"uv":[52.5,50.75,53.5,51],"texture":0},"west":{"uv":[48.75,50.75,52.5,51],"texture":0},"up":{"uv":[48.75,50.75,47.75,47],"texture":0},"down":{"uv":[49.75,47,48.75,50.75],"texture":0}},"type":"cube","uuid":"ccbb4b14-20bb-90a4-8669-6080ea6c7567"},{"name":"body","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-3,-10.215161996135588,-2.873982390322121],"to":[-2,-10.027661996135588,4.126017609677879],"autouv":0,"color":5,"rotation":[80,0,0],"origin":[-8.881784197001252e-16,-10.121411996135588,3.62601760967788],"uv_offset":[39,0],"faces":{"north":{"uv":[46,7,47,7.1875],"texture":0},"east":{"uv":[39,7,46,7.1875],"texture":0},"south":{"uv":[54,7,55,7.1875],"texture":0},"west":{"uv":[47,7,54,7.1875],"texture":0},"up":{"uv":[47,7,46,0],"texture":0},"down":{"uv":[48,0,47,7],"texture":0}},"type":"cube","uuid":"e33e4731-008a-1447-cc0e-c76e4875f0cb"},{"name":"body","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-3,-10.215161996135588,4.126017609677879],"to":[-2,-10.090161996135588,11.126017609677879],"autouv":0,"color":5,"rotation":[80,0,0],"origin":[-8.881784197001252e-16,-10.121411996135588,3.62601760967788],"uv_offset":[41,0],"faces":{"north":{"uv":[48,7,49,7.125],"texture":0},"east":{"uv":[41,7,48,7.125],"texture":0},"south":{"uv":[56,7,57,7.125],"texture":0},"west":{"uv":[49,7,56,7.125],"texture":0},"up":{"uv":[49,7,48,0],"texture":0},"down":{"uv":[50,0,49,7],"texture":0}},"type":"cube","uuid":"a90b8018-c091-4347-8393-2d445a8a22f0"},{"name":"body","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-4,-10.215161996135588,-0.6239823903221211],"to":[-3,-10.027661996135588,5.376017609677879],"autouv":0,"color":5,"rotation":[80,0,0],"origin":[-8.881784197001252e-16,-10.121411996135588,3.62601760967788],"uv_offset":[42,41],"faces":{"north":{"uv":[48,47,49,47.1875],"texture":0},"east":{"uv":[42,47,48,47.1875],"texture":0},"south":{"uv":[55,47,56,47.1875],"texture":0},"west":{"uv":[49,47,55,47.1875],"texture":0},"up":{"uv":[49,47,48,41],"texture":0},"down":{"uv":[50,41,49,47],"texture":0}},"type":"cube","uuid":"636ae6f3-d598-d810-bb47-7bbce8b93a30"},{"name":"body","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-4,-10.215161996135588,-6.623982390322121],"to":[-3,-9.965161996135588,-0.6239823903221211],"autouv":0,"color":5,"rotation":[80,0,0],"origin":[-8.881784197001252e-16,-10.121411996135588,3.62601760967788],"uv_offset":[40,27],"faces":{"north":{"uv":[46,33,47,33.25],"texture":0},"east":{"uv":[40,33,46,33.25],"texture":0},"south":{"uv":[53,33,54,33.25],"texture":0},"west":{"uv":[47,33,53,33.25],"texture":0},"up":{"uv":[47,33,46,27],"texture":0},"down":{"uv":[48,27,47,33],"texture":0}},"type":"cube","uuid":"1ca7955d-78b9-6815-ffe5-db3e3f1328ff"},{"name":"body","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-4,-10.215161996135588,5.376017609677879],"to":[-3,-10.090161996135588,10.376017609677879],"autouv":0,"color":5,"rotation":[80,0,0],"origin":[-8.881784197001252e-16,-10.121411996135588,3.62601760967788],"uv_offset":[26,45],"faces":{"north":{"uv":[31,50,32,50.125],"texture":0},"east":{"uv":[26,50,31,50.125],"texture":0},"south":{"uv":[37,50,38,50.125],"texture":0},"west":{"uv":[32,50,37,50.125],"texture":0},"up":{"uv":[32,50,31,45],"texture":0},"down":{"uv":[33,45,32,50],"texture":0}},"type":"cube","uuid":"88da360a-91bb-391f-9bab-e210c290e212"},{"name":"body","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-2,-10.215161996135588,7.376017609677879],"to":[-1,-10.090161996135588,13.376017609677879],"autouv":0,"color":5,"rotation":[80,0,0],"origin":[-8.881784197001252e-16,-10.121411996135588,3.62601760967788],"uv_offset":[44,20],"faces":{"north":{"uv":[50,26,51,26.125],"texture":0},"east":{"uv":[44,26,50,26.125],"texture":0},"south":{"uv":[57,26,58,26.125],"texture":0},"west":{"uv":[51,26,57,26.125],"texture":0},"up":{"uv":[51,26,50,20],"texture":0},"down":{"uv":[52,20,51,26],"texture":0}},"type":"cube","uuid":"75ae951b-3d5d-3679-92bb-2612449ad367"},{"name":"body","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-2,-10.215161996135588,-6.623982390322121],"to":[-1,-9.965161996135588,1.376017609677879],"autouv":0,"color":5,"rotation":[80,0,0],"origin":[-8.881784197001252e-16,-10.121411996135588,3.62601760967788],"uv_offset":[30,29],"faces":{"north":{"uv":[38,37,39,37.25],"texture":0},"east":{"uv":[30,37,38,37.25],"texture":0},"south":{"uv":[47,37,48,37.25],"texture":0},"west":{"uv":[39,37,47,37.25],"texture":0},"up":{"uv":[39,37,38,29],"texture":0},"down":{"uv":[40,29,39,37],"texture":0}},"type":"cube","uuid":"243fb8a9-45f0-2d36-729e-35f2a0593d1e"},{"name":"body","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-2,-10.215161996135588,1.376017609677879],"to":[-1,-10.027661996135588,7.376017609677879],"autouv":0,"color":5,"rotation":[80,0,0],"origin":[-8.881784197001252e-16,-10.121411996135588,3.62601760967788],"uv_offset":[42,27],"faces":{"north":{"uv":[48,33,49,33.1875],"texture":0},"east":{"uv":[42,33,48,33.1875],"texture":0},"south":{"uv":[55,33,56,33.1875],"texture":0},"west":{"uv":[49,33,55,33.1875],"texture":0},"up":{"uv":[49,33,48,27],"texture":0},"down":{"uv":[50,27,49,33],"texture":0}},"type":"cube","uuid":"a8420696-e7f0-8948-e914-0726b7fea84b"},{"name":"body","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-1,-10.215161996135588,9.376017609677879],"to":[0,-10.090161996135588,16.37601760967788],"autouv":0,"color":5,"rotation":[80,0,0],"origin":[-8.881784197001252e-16,-10.121411996135588,3.62601760967788],"uv_offset":[6,40],"faces":{"north":{"uv":[13.000000000000002,47,14.000000000000002,47.125],"texture":0},"east":{"uv":[6,47,13.000000000000002,47.125],"texture":0},"south":{"uv":[21.000000000000004,47,22.000000000000004,47.125],"texture":0},"west":{"uv":[14.000000000000002,47,21.000000000000004,47.125],"texture":0},"up":{"uv":[14.000000000000002,47,13.000000000000002,40],"texture":0},"down":{"uv":[15.000000000000002,40,14.000000000000002,47],"texture":0}},"type":"cube","uuid":"2742387d-59e3-a539-359c-46e6e125446a"},{"name":"body","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-1,-10.215161996135588,2.376017609677879],"to":[0,-10.027661996135588,9.376017609677879],"autouv":0,"color":5,"rotation":[80,0,0],"origin":[-8.881784197001252e-16,-10.121411996135588,3.62601760967788],"uv_offset":[25,38],"faces":{"north":{"uv":[32,45,33,45.1875],"texture":0},"east":{"uv":[25,45,32,45.1875],"texture":0},"south":{"uv":[40,45,41,45.1875],"texture":0},"west":{"uv":[33,45,40,45.1875],"texture":0},"up":{"uv":[33,45,32,38],"texture":0},"down":{"uv":[34,38,33,45],"texture":0}},"type":"cube","uuid":"07445085-1c8e-4c28-6ff6-a85b83fa4cd4"},{"name":"body","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-1,-10.215161996135588,-6.623982390322121],"to":[0,-9.965161996135588,2.376017609677879],"autouv":0,"color":5,"rotation":[80,0,0],"origin":[-8.881784197001252e-16,-10.121411996135588,3.62601760967788],"uv_offset":[23,29],"faces":{"north":{"uv":[32,38,33,38.25],"texture":0},"east":{"uv":[23,38,32,38.25],"texture":0},"south":{"uv":[42,38,43,38.25],"texture":0},"west":{"uv":[33,38,42,38.25],"texture":0},"up":{"uv":[33,38,32,29],"texture":0},"down":{"uv":[34,29,33,38],"texture":0}},"type":"cube","uuid":"b80037ed-fe15-a268-2235-bc5f4f612c98"},{"name":"head","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-4.125,0,-4],"to":[-4,8,4],"autouv":0,"color":7,"origin":[0,-24,0],"uv_offset":[24,0],"faces":{"north":{"uv":[32,8,32.125,16],"texture":0},"east":{"uv":[24,8,32,16],"texture":0},"south":{"uv":[40.125,8,40.25,16],"texture":0},"west":{"uv":[32.125,8,40.125,16],"texture":0},"up":{"uv":[32.125,8,32,0],"texture":0},"down":{"uv":[32.25,0,32.125,8],"texture":0}},"type":"cube","uuid":"4b4529d7-84f7-2fc5-c3a4-08d1193ff72e"},{"name":"head","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[4,0,-4],"to":[4.125,8,4],"autouv":0,"color":7,"origin":[0,-24,0],"uv_offset":[0,24],"faces":{"north":{"uv":[8,32,8.125,40],"texture":0},"east":{"uv":[0,32,8,40],"texture":0},"south":{"uv":[16.125,32,16.25,40],"texture":0},"west":{"uv":[8.125,32,16.125,40],"texture":0},"up":{"uv":[8.125,32,8,24],"texture":0},"down":{"uv":[8.25,24,8.125,32],"texture":0}},"type":"cube","uuid":"4be65cf9-59fd-e1bf-cbef-622f87ea266e"},{"name":"head","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-4.125,0,4],"to":[4.125,8,4.0625],"autouv":0,"color":7,"origin":[0,-24,0],"uv_offset":[16,37],"faces":{"north":{"uv":[16.0625,37.0625,24.3125,45.0625],"texture":0},"east":{"uv":[16,37.0625,16.0625,45.0625],"texture":0},"south":{"uv":[24.375,37.0625,32.625,45.0625],"texture":0},"west":{"uv":[24.3125,37.0625,24.375,45.0625],"texture":0},"up":{"uv":[24.3125,37.0625,16.0625,37],"texture":0},"down":{"uv":[32.5625,37,24.3125,37.0625],"texture":0}},"type":"cube","uuid":"eb04d618-f4d8-270e-a73d-ea3fc5d1aea4"},{"name":"head","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[3.125,0,-4.0625],"to":[4.125,8,-4],"autouv":0,"color":7,"origin":[0,-24,0],"uv_offset":[2,8],"faces":{"north":{"uv":[2.0625,8.0625,3.0625,16.0625],"texture":0},"east":{"uv":[2,8.0625,2.0625,16.0625],"texture":0},"south":{"uv":[3.125,8.0625,4.125,16.0625],"texture":0},"west":{"uv":[3.0625,8.0625,3.125,16.0625],"texture":0},"up":{"uv":[3.0625,8.0625,2.0625,8],"texture":0},"down":{"uv":[4.0625,8,3.0625,8.0625],"texture":0}},"type":"cube","uuid":"152b8ba8-aaf9-b41f-6171-dec562f1b551"},{"name":"head","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-4.125,8,-4.0625],"to":[4.125,8.0625,4.0625],"autouv":0,"color":7,"origin":[0,-24,0],"uv_offset":[16,0],"faces":{"north":{"uv":[24.125,8.125,32.375,8.1875],"texture":0},"east":{"uv":[16,8.125,24.125,8.1875],"texture":0},"south":{"uv":[40.5,8.125,48.75,8.1875],"texture":0},"west":{"uv":[32.375,8.125,40.5,8.1875],"texture":0},"up":{"uv":[32.375,8.125,24.125,0],"texture":0},"down":{"uv":[40.625,0,32.375,8.125],"texture":0}},"type":"cube","uuid":"a6ebd583-8100-88c3-018a-420c0bab948d"},{"name":"head","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-4.125,0,-4.0625],"to":[-3.125,8,-4],"autouv":0,"color":7,"origin":[0,-24,0],"uv_offset":[0,8],"faces":{"north":{"uv":[0.0625,8.0625,1.0625,16.0625],"texture":0},"east":{"uv":[0,8.0625,0.0625,16.0625],"texture":0},"south":{"uv":[1.125,8.0625,2.125,16.0625],"texture":0},"west":{"uv":[1.0625,8.0625,1.125,16.0625],"texture":0},"up":{"uv":[1.0625,8.0625,0.0625,8],"texture":0},"down":{"uv":[2.0625,8,1.0625,8.0625],"texture":0}},"type":"cube","uuid":"4eaa2c87-e117-ce70-a6e6-d2d31ebbd4fd"},{"name":"head","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-3.125,7,-4.0625],"to":[3.125,8,-4],"autouv":0,"color":7,"origin":[0,-24,0],"uv_offset":[36,48],"faces":{"north":{"uv":[36.0625,48.0625,42.3125,49.0625],"texture":0},"east":{"uv":[36,48.0625,36.0625,49.0625],"texture":0},"south":{"uv":[42.375,48.0625,48.625,49.0625],"texture":0},"west":{"uv":[42.3125,48.0625,42.375,49.0625],"texture":0},"up":{"uv":[42.3125,48.0625,36.0625,48],"texture":0},"down":{"uv":[48.5625,48,42.3125,48.0625],"texture":0}},"type":"cube","uuid":"3f80b068-57b2-b13d-9ad1-a5574458e037"},{"name":"head","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-3.125,7,-4.0625],"to":[3.125,8,-4],"autouv":0,"color":7,"origin":[0,-24,0],"uv_offset":[36,47],"faces":{"north":{"uv":[36.0625,47.0625,42.3125,48.0625],"texture":0},"east":{"uv":[36,47.0625,36.0625,48.0625],"texture":0},"south":{"uv":[42.375,47.0625,48.625,48.0625],"texture":0},"west":{"uv":[42.3125,47.0625,42.375,48.0625],"texture":0},"up":{"uv":[42.3125,47.0625,36.0625,47],"texture":0},"down":{"uv":[48.5625,47,42.3125,47.0625],"texture":0}},"type":"cube","uuid":"ae805eb2-064a-fab4-b48d-726fb9596348"},{"name":"head","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[3.125,0,-4.0625],"to":[4.125,8,-4],"autouv":0,"color":7,"origin":[0,-24,0],"uv_offset":[2,0],"faces":{"north":{"uv":[2.0625,0.0625,3.0625,8.0625],"texture":0},"east":{"uv":[2,0.0625,2.0625,8.0625],"texture":0},"south":{"uv":[3.125,0.0625,4.125,8.0625],"texture":0},"west":{"uv":[3.0625,0.0625,3.125,8.0625],"texture":0},"up":{"uv":[3.0625,0.0625,2.0625,0],"texture":0},"down":{"uv":[4.0625,0,3.0625,0.0625],"texture":0}},"type":"cube","uuid":"26b34a61-fc97-9737-34f5-055807afaeb4"},{"name":"head","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-4.125,8,-4.0625],"to":[4.125,8.0625,4.0625],"autouv":0,"color":7,"origin":[0,-24,0],"faces":{"north":{"uv":[8.125,8.125,16.375,8.1875],"texture":0},"east":{"uv":[0,8.125,8.125,8.1875],"texture":0},"south":{"uv":[24.5,8.125,32.75,8.1875],"texture":0},"west":{"uv":[16.375,8.125,24.5,8.1875],"texture":0},"up":{"uv":[16.375,8.125,8.125,0],"texture":0},"down":{"uv":[24.625,0,16.375,8.125],"texture":0}},"type":"cube","uuid":"d4d692c2-22de-1286-19fc-a3ff3024a78d"},{"name":"head","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-4.125,0,-4.0625],"to":[-3.125,8,-4],"autouv":0,"color":7,"origin":[0,-24,0],"faces":{"north":{"uv":[0.0625,0.0625,1.0625,8.0625],"texture":0},"east":{"uv":[0,0.0625,0.0625,8.0625],"texture":0},"south":{"uv":[1.125,0.0625,2.125,8.0625],"texture":0},"west":{"uv":[1.0625,0.0625,1.125,8.0625],"texture":0},"up":{"uv":[1.0625,0.0625,0.0625,0],"texture":0},"down":{"uv":[2.0625,0,1.0625,0.0625],"texture":0}},"type":"cube","uuid":"1dd72061-fe1d-08cb-9712-2602c74af75a"},{"name":"head","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-4.125,0,-4],"to":[-4,8,4],"autouv":0,"color":7,"origin":[0,-24,0],"uv_offset":[16,21],"faces":{"north":{"uv":[24,29,24.125,37],"texture":0},"east":{"uv":[16,29,24,37],"texture":0},"south":{"uv":[32.125,29,32.25,37],"texture":0},"west":{"uv":[24.125,29,32.125,37],"texture":0},"up":{"uv":[24.125,29,24,21],"texture":0},"down":{"uv":[24.25,21,24.125,29],"texture":0}},"type":"cube","uuid":"273f91e3-e960-0db0-bc0b-40d00954e75d"},{"name":"head","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[4,0,-4],"to":[4.125,8,4],"autouv":0,"color":7,"origin":[0,-24,0],"uv_offset":[0,16],"faces":{"north":{"uv":[8,24,8.125,32],"texture":0},"east":{"uv":[0,24,8,32],"texture":0},"south":{"uv":[16.125,24,16.25,32],"texture":0},"west":{"uv":[8.125,24,16.125,32],"texture":0},"up":{"uv":[8.125,24,8,16],"texture":0},"down":{"uv":[8.25,16,8.125,24],"texture":0}},"type":"cube","uuid":"8ef60550-967c-69cf-0a0c-e3d29220da91"},{"name":"head","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-4.125,-0.0625,-4.0625],"to":[4.125,0,4.0625],"autouv":0,"color":7,"origin":[0,-24,0],"uv_offset":[0,16],"faces":{"north":{"uv":[8.125,24.125,16.375,24.1875],"texture":0},"east":{"uv":[0,24.125,8.125,24.1875],"texture":0},"south":{"uv":[24.5,24.125,32.75,24.1875],"texture":0},"west":{"uv":[16.375,24.125,24.5,24.1875],"texture":0},"up":{"uv":[16.375,24.125,8.125,16],"texture":0},"down":{"uv":[24.625,16,16.375,24.125],"texture":0}},"type":"cube","uuid":"117e93ab-c8bb-7832-0c5b-18bb5f5305ca"},{"name":"body","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[2,-6.945090443225215,-2.7238210402824734],"to":[3,-6.757590443225215,1.2761789597175266],"autouv":0,"color":5,"rotation":[-85,0,0],"origin":[6,-7.863477513231757,-1.5151150341624042],"uv_offset":[0,16],"faces":{"north":{"uv":[4,20,5,20.1875],"texture":0},"east":{"uv":[0,20,4,20.1875],"texture":0},"south":{"uv":[9,20,10,20.1875],"texture":0},"west":{"uv":[5,20,9,20.1875],"texture":0},"up":{"uv":[5,20,4,16],"texture":0},"down":{"uv":[6,16,5,20],"texture":0}},"type":"cube","uuid":"d349f417-7204-83b3-56f7-026152e1ded9"},{"name":"body","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[2,-6.945090443225215,-11.723821040282475],"to":[3,-6.820090443225215,-7.723821040282475],"autouv":0,"color":5,"rotation":[-85,0,0],"origin":[6,-7.863477513231757,-1.5151150341624042],"uv_offset":[36,20],"faces":{"north":{"uv":[40,24,41,24.125],"texture":0},"east":{"uv":[36,24,40,24.125],"texture":0},"south":{"uv":[45,24,46,24.125],"texture":0},"west":{"uv":[41,24,45,24.125],"texture":0},"up":{"uv":[41,24,40,20],"texture":0},"down":{"uv":[42,20,41,24],"texture":0}},"type":"cube","uuid":"b159c445-325d-2c01-0853-7e49366ce58c"},{"name":"body","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[2,-6.945090443225215,-7.723821040282475],"to":[3,-6.757590443225215,-2.7238210402824716],"autouv":0,"color":5,"rotation":[-85,0,0],"origin":[6,-7.863477513231757,-1.5151150341624042],"uv_offset":[0,45],"faces":{"north":{"uv":[5.0000000000000036,50,6.0000000000000036,50.1875],"texture":0},"east":{"uv":[0,50,5.0000000000000036,50.1875],"texture":0},"south":{"uv":[11.000000000000007,50,12.000000000000007,50.1875],"texture":0},"west":{"uv":[6.0000000000000036,50,11.000000000000007,50.1875],"texture":0},"up":{"uv":[6.0000000000000036,50,5.0000000000000036,45],"texture":0},"down":{"uv":[7.0000000000000036,45,6.0000000000000036,50],"texture":0}},"type":"cube","uuid":"4263fbf6-7bbc-65c7-c43c-c1de9fa2e287"},{"name":"body","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[2,-6.945090443225215,1.2761789597175266],"to":[3,-6.695090443225215,6.276178959717527],"autouv":0,"color":5,"rotation":[-85,0,0],"origin":[6,-7.863477513231757,-1.5151150341624042],"uv_offset":[39,7],"faces":{"north":{"uv":[44,12,45,12.25],"texture":0},"east":{"uv":[39,12,44,12.25],"texture":0},"south":{"uv":[50,12,51,12.25],"texture":0},"west":{"uv":[45,12,50,12.25],"texture":0},"up":{"uv":[45,12,44,7],"texture":0},"down":{"uv":[46,7,45,12],"texture":0}},"type":"cube","uuid":"4ab0efeb-fcf2-4f2c-00dd-ca14ecca767f"},{"name":"body","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[1,-6.945090443225215,-5.723821040282475],"to":[2,-6.757590443225215,0.27617895971752837],"autouv":0,"color":5,"rotation":[-85,0,0],"origin":[6,-7.863477513231757,-1.5151150341624042],"uv_offset":[40,41],"faces":{"north":{"uv":[46,47,47,47.1875],"texture":0},"east":{"uv":[40,47,46,47.1875],"texture":0},"south":{"uv":[53.00000000000001,47,54.00000000000001,47.1875],"texture":0},"west":{"uv":[47,47,53.00000000000001,47.1875],"texture":0},"up":{"uv":[47,47,46,41],"texture":0},"down":{"uv":[48,41,47,47],"texture":0}},"type":"cube","uuid":"33456a55-47cf-a580-27e9-d051077a428e"},{"name":"body","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[1,-6.945090443225215,0.2761789597175266],"to":[2,-6.695090443225215,6.276178959717527],"autouv":0,"color":5,"rotation":[-85,0,0],"origin":[6,-7.863477513231757,-1.5151150341624042],"uv_offset":[38,27],"faces":{"north":{"uv":[44,33,45,33.25],"texture":0},"east":{"uv":[38,33,44,33.25],"texture":0},"south":{"uv":[51,33,52,33.25],"texture":0},"west":{"uv":[45,33,51,33.25],"texture":0},"up":{"uv":[45,33,44,27],"texture":0},"down":{"uv":[46,27,45,33],"texture":0}},"type":"cube","uuid":"e1455aff-8505-5cd5-78d3-6ac8898ca2bd"},{"name":"body","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[1,-6.945090443225215,-10.723821040282475],"to":[2,-6.820090443225215,-5.723821040282475],"autouv":0,"color":5,"rotation":[-85,0,0],"origin":[6,-7.863477513231757,-1.5151150341624042],"uv_offset":[24,45],"faces":{"north":{"uv":[29,50,30,50.125],"texture":0},"east":{"uv":[24,50,29,50.125],"texture":0},"south":{"uv":[35,50,36,50.125],"texture":0},"west":{"uv":[30,50,35,50.125],"texture":0},"up":{"uv":[30,50,29,45],"texture":0},"down":{"uv":[31,45,30,50],"texture":0}},"type":"cube","uuid":"914ca948-e9bf-5f63-3b9d-e2dd9041aea0"},{"name":"body","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[3,-6.945090443225215,0.2761789597175266],"to":[4,-6.695090443225215,6.276178959717527],"autouv":0,"color":5,"rotation":[-85,0,0],"origin":[6,-7.863477513231757,-1.5151150341624042],"uv_offset":[0,18],"faces":{"north":{"uv":[6,24,7,24.25],"texture":0},"east":{"uv":[0,24,6,24.25],"texture":0},"south":{"uv":[13,24,14,24.25],"texture":0},"west":{"uv":[7,24,13,24.25],"texture":0},"up":{"uv":[7,24,6,18],"texture":0},"down":{"uv":[8,18,7,24],"texture":0}},"type":"cube","uuid":"5e6930c5-9af2-32db-37f9-d12a3789cdc4"},{"name":"body","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[3,-6.945090443225215,-5.723821040282475],"to":[4,-6.757590443225215,0.27617895971752837],"autouv":0,"color":5,"rotation":[-85,0,0],"origin":[6,-7.863477513231757,-1.5151150341624042],"uv_offset":[38,41],"faces":{"north":{"uv":[44,47,45,47.1875],"texture":0},"east":{"uv":[38,47,44,47.1875],"texture":0},"south":{"uv":[51.00000000000001,47,52.00000000000001,47.1875],"texture":0},"west":{"uv":[45,47,51.00000000000001,47.1875],"texture":0},"up":{"uv":[45,47,44,41],"texture":0},"down":{"uv":[46,41,45,47],"texture":0}},"type":"cube","uuid":"5a62a963-37ad-3356-a9c5-da30b96bd839"},{"name":"body","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[3,-6.945090443225215,-10.723821040282475],"to":[4,-6.820090443225215,-5.723821040282475],"autouv":0,"color":5,"rotation":[-85,0,0],"origin":[6,-7.863477513231757,-1.5151150341624042],"uv_offset":[22,45],"faces":{"north":{"uv":[27,50,28,50.125],"texture":0},"east":{"uv":[22,50,27,50.125],"texture":0},"south":{"uv":[33,50,34,50.125],"texture":0},"west":{"uv":[28,50,33,50.125],"texture":0},"up":{"uv":[28,50,27,45],"texture":0},"down":{"uv":[29,45,28,50],"texture":0}},"type":"cube","uuid":"4073723b-2619-c05e-213c-507f751f8e87"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[4,-4,-2],"to":[8,0,2],"autouv":0,"color":7,"origin":[0,-24,0],"uv_offset":[36,12],"faces":{"north":{"uv":[40,16,44,20],"texture":0},"east":{"uv":[36,16,40,20],"texture":0},"south":{"uv":[48,16,52,20],"texture":0},"west":{"uv":[44,16,48,20],"texture":0},"up":{"uv":[44,16,40,12],"texture":0},"down":{"uv":[48,12,44,16],"texture":0}},"type":"cube","uuid":"d5c7539c-8ed6-8769-81ba-74d69f5f6653"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[6,-10.215161996135588,-6.623982390322121],"to":[7,-9.965161996135588,-3.623982390322121],"autouv":0,"color":5,"rotation":[80,0,0],"origin":[-8.881784197001252e-16,-10.121411996135588,3.62601760967788],"uv_offset":[0,43],"faces":{"north":{"uv":[3,46,4,46.25],"texture":0},"east":{"uv":[0,46,3,46.25],"texture":0},"south":{"uv":[7,46,8,46.25],"texture":0},"west":{"uv":[4,46,7,46.25],"texture":0},"up":{"uv":[4,46,3,43],"texture":0},"down":{"uv":[5,43,4,46],"texture":0}},"type":"cube","uuid":"08169f4b-5770-a493-c0d3-9d6bebc40dd8"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[6,-10.215161996135588,-3.623982390322121],"to":[7,-10.027661996135588,0.3760176096778789],"autouv":0,"color":5,"rotation":[80,0,0],"origin":[-8.881784197001252e-16,-10.121411996135588,3.62601760967788],"uv_offset":[24,16],"faces":{"north":{"uv":[28,20,29,20.1875],"texture":0},"east":{"uv":[24,20,28,20.1875],"texture":0},"south":{"uv":[33,20,34,20.1875],"texture":0},"west":{"uv":[29,20,33,20.1875],"texture":0},"up":{"uv":[29,20,28,16],"texture":0},"down":{"uv":[30,16,29,20],"texture":0}},"type":"cube","uuid":"6d5f034a-0377-292f-f748-80fc68a76d5c"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[6,-10.215161996135588,0.3760176096778789],"to":[7,-10.090161996135588,4.376017609677879],"autouv":0,"color":5,"rotation":[80,0,0],"origin":[-8.881784197001252e-16,-10.121411996135588,3.62601760967788],"uv_offset":[46,45],"faces":{"north":{"uv":[50,49,51,49.125],"texture":0},"east":{"uv":[46,49,50,49.125],"texture":0},"south":{"uv":[55,49,56,49.125],"texture":0},"west":{"uv":[51,49,55,49.125],"texture":0},"up":{"uv":[51,49,50,45],"texture":0},"down":{"uv":[52,45,51,49],"texture":0}},"type":"cube","uuid":"a31157e8-a337-f5f6-b23d-2f63f37898e6"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[5,-10.215161996135588,-6.623982390322121],"to":[6,-9.965161996135588,-2.623982390322121],"autouv":0,"color":5,"rotation":[80,0,0],"origin":[-8.881784197001252e-16,-10.121411996135588,3.62601760967788],"uv_offset":[0,8],"faces":{"north":{"uv":[4,12,5,12.25],"texture":0},"east":{"uv":[0,12,4,12.25],"texture":0},"south":{"uv":[9,12,10,12.25],"texture":0},"west":{"uv":[5,12,9,12.25],"texture":0},"up":{"uv":[5,12,4,8],"texture":0},"down":{"uv":[6,8,5,12],"texture":0}},"type":"cube","uuid":"47daef8d-b35b-40ce-d470-036de5a8dc76"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[5,-10.215161996135588,-2.623982390322121],"to":[6,-10.027661996135588,2.376017609677879],"autouv":0,"color":5,"rotation":[80,0,0],"origin":[-8.881784197001252e-16,-10.121411996135588,3.62601760967788],"uv_offset":[16,45],"faces":{"north":{"uv":[21,50,22,50.1875],"texture":0},"east":{"uv":[16,50,21,50.1875],"texture":0},"south":{"uv":[27,50,28,50.1875],"texture":0},"west":{"uv":[22,50,27,50.1875],"texture":0},"up":{"uv":[22,50,21,45],"texture":0},"down":{"uv":[23,45,22,50],"texture":0}},"type":"cube","uuid":"200fb5e5-1d25-4680-386f-830df7311d64"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[5,-10.215161996135588,2.376017609677879],"to":[6,-10.090161996135588,6.376017609677879],"autouv":0,"color":5,"rotation":[80,0,0],"origin":[-8.881784197001252e-16,-10.121411996135588,3.62601760967788],"uv_offset":[46,41],"faces":{"north":{"uv":[50,45,51,45.125],"texture":0},"east":{"uv":[46,45,50,45.125],"texture":0},"south":{"uv":[55,45,56,45.125],"texture":0},"west":{"uv":[51,45,55,45.125],"texture":0},"up":{"uv":[51,45,50,41],"texture":0},"down":{"uv":[52,41,51,45],"texture":0}},"type":"cube","uuid":"10c58df2-fd21-c085-d232-12c92796c2b5"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[4,-10.215161996135588,-6.623982390322121],"to":[5,-9.965161996135588,-1.623982390322121],"autouv":0,"color":5,"rotation":[80,0,0],"origin":[-8.881784197001252e-16,-10.121411996135588,3.62601760967788],"uv_offset":[41,7],"faces":{"north":{"uv":[46,12,47,12.25],"texture":0},"east":{"uv":[41,12,46,12.25],"texture":0},"south":{"uv":[52,12,53,12.25],"texture":0},"west":{"uv":[47,12,52,12.25],"texture":0},"up":{"uv":[47,12,46,7],"texture":0},"down":{"uv":[48,7,47,12],"texture":0}},"type":"cube","uuid":"4075d0ba-df91-29bc-a50a-cf813fc23d8d"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[4,-10.215161996135588,2.376017609677879],"to":[5,-10.027661996135588,7.376017609677879],"autouv":0,"color":5,"rotation":[80,0,0],"origin":[-8.881784197001252e-16,-10.121411996135588,3.62601760967788],"uv_offset":[14,45],"faces":{"north":{"uv":[19,50,20,50.1875],"texture":0},"east":{"uv":[14,50,19,50.1875],"texture":0},"south":{"uv":[25,50,26,50.1875],"texture":0},"west":{"uv":[20,50,25,50.1875],"texture":0},"up":{"uv":[20,50,19,45],"texture":0},"down":{"uv":[21,45,20,50],"texture":0}},"type":"cube","uuid":"96357101-aabb-6a90-e9b8-aff942e83a9b"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[4,-10.215161996135588,7.376017609677879],"to":[5,-10.090161996135588,11.376017609677879],"autouv":0,"color":5,"rotation":[80,0,0],"origin":[-8.881784197001252e-16,-10.121411996135588,3.62601760967788],"uv_offset":[46,12],"faces":{"north":{"uv":[50,16,51,16.125],"texture":0},"east":{"uv":[46,16,50,16.125],"texture":0},"south":{"uv":[55,16,56,16.125],"texture":0},"west":{"uv":[51,16,55,16.125],"texture":0},"up":{"uv":[51,16,50,12],"texture":0},"down":{"uv":[52,12,51,16],"texture":0}},"type":"cube","uuid":"c26f12ff-0c0d-f2ac-0aa1-f3774b9cf9cc"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[4,-10.215161996135588,-1.623982390322121],"to":[5,-10.027661996135588,2.376017609677879],"autouv":0,"color":5,"rotation":[80,0,0],"origin":[-8.881784197001252e-16,-10.121411996135588,3.62601760967788],"uv_offset":[22,16],"faces":{"north":{"uv":[26,20,27,20.1875],"texture":0},"east":{"uv":[22,20,26,20.1875],"texture":0},"south":{"uv":[31,20,32,20.1875],"texture":0},"west":{"uv":[27,20,31,20.1875],"texture":0},"up":{"uv":[27,20,26,16],"texture":0},"down":{"uv":[28,16,27,20],"texture":0}},"type":"cube","uuid":"7b009284-14f9-2d94-6493-3d019e1f2df7"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[7,-10.215161996135588,-6.623982390322121],"to":[8,-9.965161996135588,-4.623982390322121],"autouv":0,"color":5,"rotation":[80,0,0],"origin":[-8.881784197001252e-16,-10.121411996135588,3.62601760967788],"uv_offset":[0,20],"faces":{"north":{"uv":[2,22,3,22.25],"texture":0},"east":{"uv":[0,22,2,22.25],"texture":0},"south":{"uv":[5,22,6,22.25],"texture":0},"west":{"uv":[3,22,5,22.25],"texture":0},"up":{"uv":[3,22,2,20],"texture":0},"down":{"uv":[4,20,3,22],"texture":0}},"type":"cube","uuid":"40a95224-1342-8975-4ada-317c4fda6503"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[7,-10.215161996135588,-4.623982390322121],"to":[8,-10.027661996135588,-1.623982390322121],"autouv":0,"color":5,"rotation":[80,0,0],"origin":[-8.881784197001252e-16,-10.121411996135588,3.62601760967788],"uv_offset":[0,46],"faces":{"north":{"uv":[3,49,4,49.1875],"texture":0},"east":{"uv":[0,49,3,49.1875],"texture":0},"south":{"uv":[7,49,8,49.1875],"texture":0},"west":{"uv":[4,49,7,49.1875],"texture":0},"up":{"uv":[4,49,3,46],"texture":0},"down":{"uv":[5,46,4,49],"texture":0}},"type":"cube","uuid":"e4a01878-8a9d-baa4-36a6-42d23b691b34"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[7,-10.215161996135588,-1.623982390322121],"to":[8,-10.090161996135588,1.376017609677879],"autouv":0,"color":5,"rotation":[80,0,0],"origin":[-8.881784197001252e-16,-10.121411996135588,3.62601760967788],"uv_offset":[49,12],"faces":{"north":{"uv":[52,15,53,15.125],"texture":0},"east":{"uv":[49,15,52,15.125],"texture":0},"south":{"uv":[56,15,57,15.125],"texture":0},"west":{"uv":[53,15,56,15.125],"texture":0},"up":{"uv":[53,15,52,12],"texture":0},"down":{"uv":[54,12,53,15],"texture":0}},"type":"cube","uuid":"d5b2882f-7976-1583-3c3b-25b9a3eaed8b"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[4.852517792736339,-6.839044783698085,-1.9999999999999991],"to":[6.852517792736339,-6.714044783698085,-0.9999999999999991],"autouv":0,"color":5,"rotation":[0,0,-80],"origin":[7.352517792736337,-8.745294783698085,7.5],"uv_offset":[26,51],"faces":{"north":{"uv":[27,52,29,52.125],"texture":0},"east":{"uv":[26,52,27,52.125],"texture":0},"south":{"uv":[30,52,32,52.125],"texture":0},"west":{"uv":[29,52,30,52.125],"texture":0},"up":{"uv":[29,52,27,51],"texture":0},"down":{"uv":[31,51,29,52],"texture":0}},"type":"cube","uuid":"c1ef9e1a-a089-427b-dc20-baa0fc9360b5"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[2.8525177927363377,-6.839044783698085,-1.9999999999999991],"to":[4.852517792736338,-6.651544783698085,-0.9999999999999991],"autouv":0,"color":5,"rotation":[0,0,-80],"origin":[7.352517792736337,-8.745294783698085,7.5],"uv_offset":[0,49],"faces":{"north":{"uv":[1,50,3,50.1875],"texture":0},"east":{"uv":[0,50,1,50.1875],"texture":0},"south":{"uv":[4,50,6,50.1875],"texture":0},"west":{"uv":[3,50,4,50.1875],"texture":0},"up":{"uv":[3,50,1,49],"texture":0},"down":{"uv":[5,49,3,50],"texture":0}},"type":"cube","uuid":"b7592487-a823-2023-10e8-54b82c37aee9"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-1.1474822072636623,-6.839044783698085,-1.9999999999999991],"to":[2.8525177927363377,-6.589044783698085,-0.9999999999999991],"autouv":0,"color":5,"rotation":[0,0,-80],"origin":[7.352517792736337,-8.745294783698085,7.5],"uv_offset":[32,50],"faces":{"north":{"uv":[33,51,37,51.25],"texture":0},"east":{"uv":[32,51,33,51.25],"texture":0},"south":{"uv":[38,51,42,51.25],"texture":0},"west":{"uv":[37,51,38,51.25],"texture":0},"up":{"uv":[37,51,33,50],"texture":0},"down":{"uv":[41,50,37,51],"texture":0}},"type":"cube","uuid":"a3da4ed8-f4b6-1696-d146-4b7fad8d2cb3"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[6.852517792736339,-6.839044783698085,-0.9999999999999991],"to":[8.85251779273634,-6.714044783698085,8.881784197001252e-16],"autouv":0,"color":5,"rotation":[0,0,-80],"origin":[7.352517792736337,-8.745294783698085,7.5],"uv_offset":[51,25],"faces":{"north":{"uv":[52,26,54,26.125],"texture":0},"east":{"uv":[51,26,52,26.125],"texture":0},"south":{"uv":[55,26,57,26.125],"texture":0},"west":{"uv":[54,26,55,26.125],"texture":0},"up":{"uv":[54,26,52,25],"texture":0},"down":{"uv":[56,25,54,26],"texture":0}},"type":"cube","uuid":"827bfb56-a525-9b45-0f16-6ce206311f71"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[1.8525177927363377,-6.839044783698085,-0.9999999999999991],"to":[6.852517792736338,-6.651544783698085,8.881784197001252e-16],"autouv":0,"color":5,"rotation":[0,0,-80],"origin":[7.352517792736337,-8.745294783698085,7.5],"uv_offset":[49,49],"faces":{"north":{"uv":[50,50,55,50.1875],"texture":0},"east":{"uv":[49,50,50,50.1875],"texture":0},"south":{"uv":[56,50,61,50.1875],"texture":0},"west":{"uv":[55,50,56,50.1875],"texture":0},"up":{"uv":[55,50,50,49],"texture":0},"down":{"uv":[60,49,55,50],"texture":0}},"type":"cube","uuid":"c83109cd-2ed0-de55-18a5-f19105b84884"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-1.1474822072636623,-6.839044783698085,-0.9999999999999991],"to":[1.8525177927363377,-6.589044783698085,8.881784197001252e-16],"autouv":0,"color":5,"rotation":[0,0,-80],"origin":[7.352517792736337,-8.745294783698085,7.5],"uv_offset":[0,50],"faces":{"north":{"uv":[1,51,4,51.25],"texture":0},"east":{"uv":[0,51,1,51.25],"texture":0},"south":{"uv":[5,51,8,51.25],"texture":0},"west":{"uv":[4,51,5,51.25],"texture":0},"up":{"uv":[4,51,1,50],"texture":0},"down":{"uv":[7,50,4,51],"texture":0}},"type":"cube","uuid":"e893d8be-7440-4a5e-a39a-4cc9aad3f17f"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-1.1474822072636623,-6.839044783698085,8.881784197001252e-16],"to":[3.8525177927363377,-6.589044783698085,1.0000000000000009],"autouv":0,"color":5,"rotation":[0,0,-80],"origin":[7.352517792736337,-8.745294783698085,7.5],"uv_offset":[32,49],"faces":{"north":{"uv":[33,50,38,50.25],"texture":0},"east":{"uv":[32,50,33,50.25],"texture":0},"south":{"uv":[39,50,44,50.25],"texture":0},"west":{"uv":[38,50,39,50.25],"texture":0},"up":{"uv":[38,50,33,49],"texture":0},"down":{"uv":[43,49,38,50],"texture":0}},"type":"cube","uuid":"62ce5b01-d5f5-2cce-bbb8-5adb8980c9f8"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[3.8525177927363377,-6.839044783698085,8.881784197001252e-16],"to":[6.852517792736338,-6.651544783698085,1.0000000000000009],"autouv":0,"color":5,"rotation":[0,0,-80],"origin":[7.352517792736337,-8.745294783698085,7.5],"uv_offset":[14,51],"faces":{"north":{"uv":[15,52,18,52.1875],"texture":0},"east":{"uv":[14,52,15,52.1875],"texture":0},"south":{"uv":[19,52,22,52.1875],"texture":0},"west":{"uv":[18,52,19,52.1875],"texture":0},"up":{"uv":[18,52,15,51],"texture":0},"down":{"uv":[21,51,18,52],"texture":0}},"type":"cube","uuid":"fdde48f3-2267-b077-da0e-ed0a45824268"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[6.852517792736339,-6.839044783698085,8.881784197001252e-16],"to":[9.85251779273634,-6.714044783698085,1.0000000000000009],"autouv":0,"color":5,"rotation":[0,0,-80],"origin":[7.352517792736337,-8.745294783698085,7.5],"uv_offset":[51,22],"faces":{"north":{"uv":[52,23,55,23.125],"texture":0},"east":{"uv":[51,23,52,23.125],"texture":0},"south":{"uv":[56,23,59,23.125],"texture":0},"west":{"uv":[55,23,56,23.125],"texture":0},"up":{"uv":[55,23,52,22],"texture":0},"down":{"uv":[58,22,55,23],"texture":0}},"type":"cube","uuid":"2e061aff-3ece-c986-d297-ba03f73bb482"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[5.852517792736339,-6.839044783698085,1.0000000000000009],"to":[7.852517792736339,-6.714044783698085,2.000000000000001],"autouv":0,"color":5,"rotation":[0,0,-80],"origin":[7.352517792736337,-8.745294783698085,7.5],"uv_offset":[51,24],"faces":{"north":{"uv":[52,25,54,25.125],"texture":0},"east":{"uv":[51,25,52,25.125],"texture":0},"south":{"uv":[55,25,57,25.125],"texture":0},"west":{"uv":[54,25,55,25.125],"texture":0},"up":{"uv":[54,25,52,24],"texture":0},"down":{"uv":[56,24,54,25],"texture":0}},"type":"cube","uuid":"39188b99-9fce-6ccd-f3f9-3e7398a379cd"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[2.8525177927363377,-6.839044783698085,1.0000000000000009],"to":[5.852517792736338,-6.651544783698085,2.000000000000001],"autouv":0,"color":5,"rotation":[0,0,-80],"origin":[7.352517792736337,-8.745294783698085,7.5],"uv_offset":[8,51],"faces":{"north":{"uv":[9,52,12,52.1875],"texture":0},"east":{"uv":[8,52,9,52.1875],"texture":0},"south":{"uv":[13,52,16,52.1875],"texture":0},"west":{"uv":[12,52,13,52.1875],"texture":0},"up":{"uv":[12,52,9,51],"texture":0},"down":{"uv":[15,51,12,52],"texture":0}},"type":"cube","uuid":"297246bc-1ac0-fc04-3202-95d17b2a10fa"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-1.1474822072636623,-6.839044783698085,1.0000000000000009],"to":[2.8525177927363377,-6.589044783698085,2.000000000000001],"autouv":0,"color":5,"rotation":[0,0,-80],"origin":[7.352517792736337,-8.745294783698085,7.5],"uv_offset":[24,50],"faces":{"north":{"uv":[25,51,29,51.25],"texture":0},"east":{"uv":[24,51,25,51.25],"texture":0},"south":{"uv":[30,51,34,51.25],"texture":0},"west":{"uv":[29,51,30,51.25],"texture":0},"up":{"uv":[29,51,25,50],"texture":0},"down":{"uv":[33,50,29,51],"texture":0}},"type":"cube","uuid":"c3dc136d-ef24-4be2-4b4f-84ed11db4ab0"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[4,-6.945090443225215,4.276178959717527],"to":[5,-6.695090443225215,6.276178959717527],"autouv":0,"color":5,"rotation":[-85,0,0],"origin":[6,-7.863477513231757,-1.5151150341624042],"uv_offset":[0,18],"faces":{"north":{"uv":[2,20,3,20.25],"texture":0},"east":{"uv":[0,20,2,20.25],"texture":0},"south":{"uv":[5,20,6,20.25],"texture":0},"west":{"uv":[3,20,5,20.25],"texture":0},"up":{"uv":[3,20,2,18],"texture":0},"down":{"uv":[4,18,3,20],"texture":0}},"type":"cube","uuid":"1fd5e130-03d6-f404-184d-f8397e5629de"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[4,-6.945090443225215,-2.7238210402824734],"to":[5,-6.757590443225215,4.276178959717527],"autouv":0,"color":5,"rotation":[-85,0,0],"origin":[6,-7.863477513231757,-1.5151150341624042],"uv_offset":[27,37],"faces":{"north":{"uv":[34,44,35,44.1875],"texture":0},"east":{"uv":[27,44,34,44.1875],"texture":0},"south":{"uv":[42,44,43,44.1875],"texture":0},"west":{"uv":[35,44,42,44.1875],"texture":0},"up":{"uv":[35,44,34,37],"texture":0},"down":{"uv":[36,37,35,44],"texture":0}},"type":"cube","uuid":"911d766f-eca1-cb32-b407-a23a80f4a0a6"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[4,-6.945090443225215,-9.723821040282475],"to":[5,-6.820090443225215,-2.7238210402824716],"autouv":0,"color":5,"rotation":[-85,0,0],"origin":[6,-7.863477513231757,-1.5151150341624042],"uv_offset":[4,40],"faces":{"north":{"uv":[11.000000000000004,47,12.000000000000004,47.125],"texture":0},"east":{"uv":[4,47,11.000000000000004,47.125],"texture":0},"south":{"uv":[19.000000000000007,47,20.000000000000007,47.125],"texture":0},"west":{"uv":[12.000000000000004,47,19.000000000000007,47.125],"texture":0},"up":{"uv":[12.000000000000004,47,11.000000000000004,40],"texture":0},"down":{"uv":[13.000000000000004,40,12.000000000000004,47],"texture":0}},"type":"cube","uuid":"c145f545-149f-756b-4c55-d109ad7c0f92"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[7.000000000000001,-7.827876995015348,0.23019841528248364],"to":[8,-7.577876995015348,5.230198415282484],"autouv":0,"color":5,"rotation":[-85,0,0],"origin":[6.5,-7.734126995015348,-2.5198015847175177],"uv_offset":[37,7],"faces":{"north":{"uv":[42,12,43,12.25],"texture":0},"east":{"uv":[37,12,42,12.25],"texture":0},"south":{"uv":[48,12,49,12.25],"texture":0},"west":{"uv":[43,12,48,12.25],"texture":0},"up":{"uv":[43,12,42,7],"texture":0},"down":{"uv":[44,7,43,12],"texture":0}},"type":"cube","uuid":"ad247402-6394-0f68-c15b-598e7c80ec4c"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[7.000000000000001,-7.827876995015348,-6.769801584717518],"to":[8,-7.702876995015348,-2.769801584717518],"autouv":0,"color":5,"rotation":[-85,0,0],"origin":[6.5,-7.734126995015348,-2.5198015847175177],"uv_offset":[9,47],"faces":{"north":{"uv":[13,51,14,51.125],"texture":0},"east":{"uv":[9,51,13,51.125],"texture":0},"south":{"uv":[18,51,19,51.125],"texture":0},"west":{"uv":[14,51,18,51.125],"texture":0},"up":{"uv":[14,51,13,47],"texture":0},"down":{"uv":[14.999999999999998,47,14,51],"texture":0}},"type":"cube","uuid":"4d1c91f8-47a6-29a4-e1a7-bac172c53667"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[7.000000000000001,-7.827876995015348,-2.7698015847175164],"to":[8,-7.640376995015348,0.23019841528248364],"autouv":0,"color":5,"rotation":[-85,0,0],"origin":[6.5,-7.734126995015348,-2.5198015847175177],"uv_offset":[49,9],"faces":{"north":{"uv":[52,12,53,12.1875],"texture":0},"east":{"uv":[49,12,52,12.1875],"texture":0},"south":{"uv":[56,12,57,12.1875],"texture":0},"west":{"uv":[53,12,56,12.1875],"texture":0},"up":{"uv":[53,12,52,9],"texture":0},"down":{"uv":[54,9,53,12],"texture":0}},"type":"cube","uuid":"8eaac26d-143c-79b5-7be1-7ed9140086c6"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[6.000000000000001,-7.827876995015348,-1.7698015847175164],"to":[7,-7.577876995015348,5.230198415282484],"autouv":0,"color":5,"rotation":[-85,0,0],"origin":[6.5,-7.734126995015348,-2.5198015847175177],"uv_offset":[35,0],"faces":{"north":{"uv":[42,7,43,7.25],"texture":0},"east":{"uv":[35,7,42,7.25],"texture":0},"south":{"uv":[50,7,51,7.25],"texture":0},"west":{"uv":[43,7,50,7.25],"texture":0},"up":{"uv":[43,7,42,0],"texture":0},"down":{"uv":[44,0,43,7],"texture":0}},"type":"cube","uuid":"a28d8829-b8f8-cb64-7d2c-ccaeaf4bed12"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[6.000000000000001,-7.827876995015348,-5.769801584717516],"to":[7,-7.640376995015348,-1.7698015847175164],"autouv":0,"color":5,"rotation":[-85,0,0],"origin":[6.5,-7.734126995015348,-2.5198015847175177],"uv_offset":[28,16],"faces":{"north":{"uv":[32,20,33,20.1875],"texture":0},"east":{"uv":[28,20,32,20.1875],"texture":0},"south":{"uv":[37,20,38,20.1875],"texture":0},"west":{"uv":[33,20,37,20.1875],"texture":0},"up":{"uv":[33,20,32,16],"texture":0},"down":{"uv":[34,16,33,20],"texture":0}},"type":"cube","uuid":"b0a5f214-5bf1-04ac-643b-269b3029fdcb"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[6.000000000000001,-7.827876995015348,-8.769801584717518],"to":[7,-7.702876995015348,-5.769801584717518],"autouv":0,"color":5,"rotation":[-85,0,0],"origin":[6.5,-7.734126995015348,-2.5198015847175177],"uv_offset":[49,18],"faces":{"north":{"uv":[52,21,53,21.125],"texture":0},"east":{"uv":[49,21,52,21.125],"texture":0},"south":{"uv":[56,21,57,21.125],"texture":0},"west":{"uv":[53,21,56,21.125],"texture":0},"up":{"uv":[53,21,52,18],"texture":0},"down":{"uv":[54,18,53,21],"texture":0}},"type":"cube","uuid":"f03775f4-c64d-ddc2-318a-394aa523b5d2"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[5.000000000000001,-7.827876995015348,-2.7698015847175164],"to":[6,-7.577876995015348,5.230198415282484],"autouv":0,"color":5,"rotation":[-85,0,0],"origin":[6.5,-7.734126995015348,-2.5198015847175177],"uv_offset":[28,29],"faces":{"north":{"uv":[36,37,37,37.25],"texture":0},"east":{"uv":[28,37,36,37.25],"texture":0},"south":{"uv":[45,37,46,37.25],"texture":0},"west":{"uv":[37,37,45,37.25],"texture":0},"up":{"uv":[37,37,36,29],"texture":0},"down":{"uv":[38,29,37,37],"texture":0}},"type":"cube","uuid":"ac33fe50-28c0-b5ee-7923-6b48297cc620"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[5.000000000000001,-7.827876995015348,-5.769801584717516],"to":[6,-7.640376995015348,-2.7698015847175164],"autouv":0,"color":5,"rotation":[-85,0,0],"origin":[6.5,-7.734126995015348,-2.5198015847175177],"uv_offset":[49,6],"faces":{"north":{"uv":[52,9,53,9.1875],"texture":0},"east":{"uv":[49,9,52,9.1875],"texture":0},"south":{"uv":[56,9,57,9.1875],"texture":0},"west":{"uv":[53,9,56,9.1875],"texture":0},"up":{"uv":[53,9,52,6],"texture":0},"down":{"uv":[54,6,53,9],"texture":0}},"type":"cube","uuid":"76149ac4-cce3-58fb-3efc-0e63128c1bfe"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[5.000000000000001,-7.827876995015348,-9.769801584717518],"to":[6,-7.702876995015348,-5.769801584717518],"autouv":0,"color":5,"rotation":[-85,0,0],"origin":[6.5,-7.734126995015348,-2.5198015847175177],"uv_offset":[7,47],"faces":{"north":{"uv":[11,51,12,51.125],"texture":0},"east":{"uv":[7,51,11,51.125],"texture":0},"south":{"uv":[16,51,17,51.125],"texture":0},"west":{"uv":[12,51,16,51.125],"texture":0},"up":{"uv":[12,51,11,47],"texture":0},"down":{"uv":[12.999999999999998,47,12,51],"texture":0}},"type":"cube","uuid":"7fae8f90-5fd3-002a-184a-36767a69978f"},{"name":"body","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-4,-6.945090443225215,-10.723821040282475],"to":[-3,-6.820090443225215,-5.723821040282475],"autouv":0,"color":5,"rotation":[-85,0,0],"origin":[-6,-7.863477513231757,-1.5151150341624042],"uv_offset":[20,45],"faces":{"north":{"uv":[25,50,26,50.125],"texture":0},"east":{"uv":[20,50,25,50.125],"texture":0},"south":{"uv":[31,50,32,50.125],"texture":0},"west":{"uv":[26,50,31,50.125],"texture":0},"up":{"uv":[26,50,25,45],"texture":0},"down":{"uv":[27,45,26,50],"texture":0}},"type":"cube","uuid":"917a6a71-837e-fde2-e9b5-8d23a21b534e"},{"name":"body","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-4,-6.945090443225215,-5.723821040282475],"to":[-3,-6.757590443225215,0.27617895971752837],"autouv":0,"color":5,"rotation":[-85,0,0],"origin":[-6,-7.863477513231757,-1.5151150341624042],"uv_offset":[36,41],"faces":{"north":{"uv":[42,47,43,47.1875],"texture":0},"east":{"uv":[36,47,42,47.1875],"texture":0},"south":{"uv":[49.00000000000001,47,50.00000000000001,47.1875],"texture":0},"west":{"uv":[43,47,49.00000000000001,47.1875],"texture":0},"up":{"uv":[43,47,42,41],"texture":0},"down":{"uv":[44,41,43,47],"texture":0}},"type":"cube","uuid":"5bb2e4b5-0ec4-a6f3-2a8a-0003c43e3d85"},{"name":"body","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-4,-6.945090443225215,0.2761789597175266],"to":[-3,-6.695090443225215,6.276178959717527],"autouv":0,"color":5,"rotation":[-85,0,0],"origin":[-6,-7.863477513231757,-1.5151150341624042],"uv_offset":[0,12],"faces":{"north":{"uv":[6,18,7,18.25],"texture":0},"east":{"uv":[0,18,6,18.25],"texture":0},"south":{"uv":[13,18,14,18.25],"texture":0},"west":{"uv":[7,18,13,18.25],"texture":0},"up":{"uv":[7,18,6,12],"texture":0},"down":{"uv":[8,12,7,18],"texture":0}},"type":"cube","uuid":"bafeb829-4522-f032-42bf-39d2d8bc00bb"},{"name":"body","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-2,-6.945090443225215,-10.723821040282475],"to":[-1,-6.820090443225215,-5.723821040282475],"autouv":0,"color":5,"rotation":[-85,0,0],"origin":[-6,-7.863477513231757,-1.5151150341624042],"uv_offset":[18,45],"faces":{"north":{"uv":[23,50,24,50.125],"texture":0},"east":{"uv":[18,50,23,50.125],"texture":0},"south":{"uv":[29,50,30,50.125],"texture":0},"west":{"uv":[24,50,29,50.125],"texture":0},"up":{"uv":[24,50,23,45],"texture":0},"down":{"uv":[25,45,24,50],"texture":0}},"type":"cube","uuid":"01ebe320-d2ec-3f6a-3ee3-ed5553bcf55c"},{"name":"body","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-2,-6.945090443225215,0.2761789597175266],"to":[-1,-6.695090443225215,6.276178959717527],"autouv":0,"color":5,"rotation":[-85,0,0],"origin":[-6,-7.863477513231757,-1.5151150341624042],"uv_offset":[0,6],"faces":{"north":{"uv":[6,12,7,12.25],"texture":0},"east":{"uv":[0,12,6,12.25],"texture":0},"south":{"uv":[13,12,14,12.25],"texture":0},"west":{"uv":[7,12,13,12.25],"texture":0},"up":{"uv":[7,12,6,6],"texture":0},"down":{"uv":[8,6,7,12],"texture":0}},"type":"cube","uuid":"99e1723b-1794-154a-5106-64ed4817bc0a"},{"name":"body","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-2,-6.945090443225215,-5.723821040282475],"to":[-1,-6.757590443225215,0.27617895971752837],"autouv":0,"color":5,"rotation":[-85,0,0],"origin":[-6,-7.863477513231757,-1.5151150341624042],"uv_offset":[34,41],"faces":{"north":{"uv":[40,47,41,47.1875],"texture":0},"east":{"uv":[34,47,40,47.1875],"texture":0},"south":{"uv":[47.00000000000001,47,48.00000000000001,47.1875],"texture":0},"west":{"uv":[41,47,47.00000000000001,47.1875],"texture":0},"up":{"uv":[41,47,40,41],"texture":0},"down":{"uv":[42,41,41,47],"texture":0}},"type":"cube","uuid":"4fb679fd-6689-73d5-43b0-92f17b08ac3f"},{"name":"left_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-8,-4,-2],"to":[-4,0,2],"autouv":0,"color":7,"origin":[0,-24,0],"uv_offset":[36,33],"faces":{"north":{"uv":[40,37,44,41],"texture":0},"east":{"uv":[36,37,40,41],"texture":0},"south":{"uv":[48,37,52,41],"texture":0},"west":{"uv":[44,37,48,41],"texture":0},"up":{"uv":[44,37,40,33],"texture":0},"down":{"uv":[48,33,44,37],"texture":0}},"type":"cube","uuid":"f9aef479-8fa3-6747-a674-cf4323234fc3"},{"name":"left_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-5,-10.215161996135588,7.376017609677879],"to":[-4,-10.090161996135588,11.376017609677879],"autouv":0,"color":5,"rotation":[80,0,0],"origin":[-8.881784197001252e-16,-10.121411996135588,3.62601760967788],"uv_offset":[44,33],"faces":{"north":{"uv":[48,37,49,37.125],"texture":0},"east":{"uv":[44,37,48,37.125],"texture":0},"south":{"uv":[53,37,54,37.125],"texture":0},"west":{"uv":[49,37,53,37.125],"texture":0},"up":{"uv":[49,37,48,33],"texture":0},"down":{"uv":[50,33,49,37],"texture":0}},"type":"cube","uuid":"24238e70-5b69-aaec-94fc-46c892b91ec8"},{"name":"left_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-6,-10.215161996135588,2.376017609677879],"to":[-5,-10.090161996135588,6.376017609677879],"autouv":0,"color":5,"rotation":[80,0,0],"origin":[-8.881784197001252e-16,-10.121411996135588,3.62601760967788],"uv_offset":[38,29],"faces":{"north":{"uv":[42,33,43,33.125],"texture":0},"east":{"uv":[38,33,42,33.125],"texture":0},"south":{"uv":[47,33,48,33.125],"texture":0},"west":{"uv":[43,33,47,33.125],"texture":0},"up":{"uv":[43,33,42,29],"texture":0},"down":{"uv":[44,29,43,33],"texture":0}},"type":"cube","uuid":"206b2ed4-2535-2daf-50d6-869d2b1f4fec"},{"name":"left_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-5,-10.215161996135588,2.376017609677879],"to":[-4,-10.027661996135588,7.376017609677879],"autouv":0,"color":5,"rotation":[80,0,0],"origin":[-8.881784197001252e-16,-10.121411996135588,3.62601760967788],"uv_offset":[12,45],"faces":{"north":{"uv":[17,50,18,50.1875],"texture":0},"east":{"uv":[12,50,17,50.1875],"texture":0},"south":{"uv":[23,50,24,50.1875],"texture":0},"west":{"uv":[18,50,23,50.1875],"texture":0},"up":{"uv":[18,50,17,45],"texture":0},"down":{"uv":[19,45,18,50],"texture":0}},"type":"cube","uuid":"00f378ed-8082-cd25-0ef6-1c6ca5921189"},{"name":"left_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-5,-10.215161996135588,-1.623982390322121],"to":[-4,-10.027661996135588,2.376017609677879],"autouv":0,"color":5,"rotation":[80,0,0],"origin":[-8.881784197001252e-16,-10.121411996135588,3.62601760967788],"uv_offset":[20,16],"faces":{"north":{"uv":[24,20,25,20.1875],"texture":0},"east":{"uv":[20,20,24,20.1875],"texture":0},"south":{"uv":[29,20,30,20.1875],"texture":0},"west":{"uv":[25,20,29,20.1875],"texture":0},"up":{"uv":[25,20,24,16],"texture":0},"down":{"uv":[26,16,25,20],"texture":0}},"type":"cube","uuid":"d063c27b-70d0-dd09-29bd-84faf29afe05"},{"name":"left_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-6,-10.215161996135588,-2.623982390322121],"to":[-5,-10.027661996135588,2.376017609677879],"autouv":0,"color":5,"rotation":[80,0,0],"origin":[-8.881784197001252e-16,-10.121411996135588,3.62601760967788],"uv_offset":[10,45],"faces":{"north":{"uv":[15,50,16,50.1875],"texture":0},"east":{"uv":[10,50,15,50.1875],"texture":0},"south":{"uv":[21,50,22,50.1875],"texture":0},"west":{"uv":[16,50,21,50.1875],"texture":0},"up":{"uv":[16,50,15,45],"texture":0},"down":{"uv":[17,45,16,50],"texture":0}},"type":"cube","uuid":"a938939d-2c25-7f1c-79a6-161e6b612fb4"},{"name":"left_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-6,-10.215161996135588,-6.623982390322121],"to":[-5,-9.965161996135588,-2.623982390322121],"autouv":0,"color":5,"rotation":[80,0,0],"origin":[-8.881784197001252e-16,-10.121411996135588,3.62601760967788],"uv_offset":[0,4],"faces":{"north":{"uv":[4,8,5,8.25],"texture":0},"east":{"uv":[0,8,4,8.25],"texture":0},"south":{"uv":[9,8,10,8.25],"texture":0},"west":{"uv":[5,8,9,8.25],"texture":0},"up":{"uv":[5,8,4,4],"texture":0},"down":{"uv":[6,4,5,8],"texture":0}},"type":"cube","uuid":"8bbf1a1e-8c90-92ac-c4f7-55a31fb480c4"},{"name":"left_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-5,-10.215161996135588,-6.623982390322121],"to":[-4,-9.965161996135588,-1.623982390322121],"autouv":0,"color":5,"rotation":[80,0,0],"origin":[-8.881784197001252e-16,-10.121411996135588,3.62601760967788],"uv_offset":[0,40],"faces":{"north":{"uv":[5,45,6,45.25],"texture":0},"east":{"uv":[0,45,5,45.25],"texture":0},"south":{"uv":[11,45,12,45.25],"texture":0},"west":{"uv":[6,45,11,45.25],"texture":0},"up":{"uv":[6,45,5,40],"texture":0},"down":{"uv":[7,40,6,45],"texture":0}},"type":"cube","uuid":"1bbcd197-5644-c141-7338-536b5cbf83e7"},{"name":"left_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-7,-10.215161996135588,-6.623982390322121],"to":[-6,-9.965161996135588,-3.623982390322121],"autouv":0,"color":5,"rotation":[80,0,0],"origin":[-8.881784197001252e-16,-10.121411996135588,3.62601760967788],"uv_offset":[0,40],"faces":{"north":{"uv":[3,43,4,43.25],"texture":0},"east":{"uv":[0,43,3,43.25],"texture":0},"south":{"uv":[7,43,8,43.25],"texture":0},"west":{"uv":[4,43,7,43.25],"texture":0},"up":{"uv":[4,43,3,40],"texture":0},"down":{"uv":[5,40,4,43],"texture":0}},"type":"cube","uuid":"336d5029-9279-2cf4-b2f1-eb07322590bd"},{"name":"left_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-8,-10.215161996135588,-6.623982390322121],"to":[-7,-9.965161996135588,-2.623982390322121],"autouv":0,"color":5,"rotation":[80,0,0],"origin":[-8.881784197001252e-16,-10.121411996135588,3.62601760967788],"faces":{"north":{"uv":[4,4,5,4.25],"texture":0},"east":{"uv":[0,4,4,4.25],"texture":0},"south":{"uv":[9,4,10,4.25],"texture":0},"west":{"uv":[5,4,9,4.25],"texture":0},"up":{"uv":[5,4,4,0],"texture":0},"down":{"uv":[6,0,5,4],"texture":0}},"type":"cube","uuid":"49e39b5d-5f4d-cac1-dc47-f190d570e3c4"},{"name":"left_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-7,-10.215161996135588,-3.623982390322121],"to":[-6,-10.027661996135588,0.3760176096778789],"autouv":0,"color":5,"rotation":[80,0,0],"origin":[-8.881784197001252e-16,-10.121411996135588,3.62601760967788],"uv_offset":[0,20],"faces":{"north":{"uv":[4,24,5,24.1875],"texture":0},"east":{"uv":[0,24,4,24.1875],"texture":0},"south":{"uv":[9,24,10,24.1875],"texture":0},"west":{"uv":[5,24,9,24.1875],"texture":0},"up":{"uv":[5,24,4,20],"texture":0},"down":{"uv":[6,20,5,24],"texture":0}},"type":"cube","uuid":"6b2baff3-f210-b5f6-b37b-48fc08e5384d"},{"name":"left_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-8,-10.215161996135588,-2.623982390322121],"to":[-7,-10.027661996135588,-0.6239823903221211],"autouv":0,"color":5,"rotation":[80,0,0],"origin":[-8.881784197001252e-16,-10.121411996135588,3.62601760967788],"uv_offset":[46,14],"faces":{"north":{"uv":[48,16,49,16.1875],"texture":0},"east":{"uv":[46,16,48,16.1875],"texture":0},"south":{"uv":[51,16,52,16.1875],"texture":0},"west":{"uv":[49,16,51,16.1875],"texture":0},"up":{"uv":[49,16,48,14],"texture":0},"down":{"uv":[50,14,49,16],"texture":0}},"type":"cube","uuid":"bb880b87-c31e-4f9f-db17-45bf74391a48"},{"name":"left_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-8,-10.215161996135588,-0.6239823903221211],"to":[-7,-10.090161996135588,3.376017609677879],"autouv":0,"color":5,"rotation":[80,0,0],"origin":[-8.881784197001252e-16,-10.121411996135588,3.62601760967788],"uv_offset":[38,20],"faces":{"north":{"uv":[42,24,43,24.125],"texture":0},"east":{"uv":[38,24,42,24.125],"texture":0},"south":{"uv":[47,24,48,24.125],"texture":0},"west":{"uv":[43,24,47,24.125],"texture":0},"up":{"uv":[43,24,42,20],"texture":0},"down":{"uv":[44,20,43,24],"texture":0}},"type":"cube","uuid":"41e59ef6-75be-49c9-2363-93a8e3ba363e"},{"name":"left_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-7,-10.215161996135588,0.3760176096778789],"to":[-6,-10.090161996135588,4.376017609677879],"autouv":0,"color":5,"rotation":[80,0,0],"origin":[-8.881784197001252e-16,-10.121411996135588,3.62601760967788],"uv_offset":[36,29],"faces":{"north":{"uv":[40,33,41,33.125],"texture":0},"east":{"uv":[36,33,40,33.125],"texture":0},"south":{"uv":[45,33,46,33.125],"texture":0},"west":{"uv":[41,33,45,33.125],"texture":0},"up":{"uv":[41,33,40,29],"texture":0},"down":{"uv":[42,29,41,33],"texture":0}},"type":"cube","uuid":"835d4043-29ec-8438-5259-4da215c46a8d"},{"name":"left_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-2.8525177927363377,-6.839044783698085,-2.000000000000001],"to":[1.1474822072636623,-6.589044783698085,-1.0000000000000009],"autouv":0,"color":5,"rotation":[0,0,80],"origin":[-7.352517792736337,-8.745294783698085,-7.5],"uv_offset":[0,51],"faces":{"north":{"uv":[1,52,5,52.25],"texture":0},"east":{"uv":[0,52,1,52.25],"texture":0},"south":{"uv":[6,52,10,52.25],"texture":0},"west":{"uv":[5,52,6,52.25],"texture":0},"up":{"uv":[5,52,1,51],"texture":0},"down":{"uv":[9,51,5,52],"texture":0}},"type":"cube","uuid":"a0f6db82-6ad7-5aef-6bb7-51bf7e034995"},{"name":"left_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-5.852517792736338,-6.839044783698085,-2.000000000000001],"to":[-2.8525177927363377,-6.651544783698085,-1.0000000000000009],"autouv":0,"color":5,"rotation":[0,0,80],"origin":[-7.352517792736337,-8.745294783698085,-7.5],"uv_offset":[51,21],"faces":{"north":{"uv":[52,22,55,22.1875],"texture":0},"east":{"uv":[51,22,52,22.1875],"texture":0},"south":{"uv":[56,22,59,22.1875],"texture":0},"west":{"uv":[55,22,56,22.1875],"texture":0},"up":{"uv":[55,22,52,21],"texture":0},"down":{"uv":[58,21,55,22],"texture":0}},"type":"cube","uuid":"518fa56b-30d0-3641-b5a8-68ef7d884519"},{"name":"left_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-7.852517792736339,-6.839044783698085,-2.000000000000001],"to":[-5.852517792736339,-6.714044783698085,-1.0000000000000009],"autouv":0,"color":5,"rotation":[0,0,80],"origin":[-7.352517792736337,-8.745294783698085,-7.5],"uv_offset":[51,28],"faces":{"north":{"uv":[52,29,54,29.125],"texture":0},"east":{"uv":[51,29,52,29.125],"texture":0},"south":{"uv":[55,29,57,29.125],"texture":0},"west":{"uv":[54,29,55,29.125],"texture":0},"up":{"uv":[54,29,52,28],"texture":0},"down":{"uv":[56,28,54,29],"texture":0}},"type":"cube","uuid":"2d41ab33-299c-e374-b897-850e1044a71f"},{"name":"left_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-9.85251779273634,-6.839044783698085,-1.0000000000000009],"to":[-6.852517792736339,-6.714044783698085,-8.881784197001252e-16],"autouv":0,"color":5,"rotation":[0,0,80],"origin":[-7.352517792736337,-8.745294783698085,-7.5],"uv_offset":[51,23],"faces":{"north":{"uv":[52,24,55,24.125],"texture":0},"east":{"uv":[51,24,52,24.125],"texture":0},"south":{"uv":[56,24,59,24.125],"texture":0},"west":{"uv":[55,24,56,24.125],"texture":0},"up":{"uv":[55,24,52,23],"texture":0},"down":{"uv":[58,23,55,24],"texture":0}},"type":"cube","uuid":"bcc93ae8-1163-9767-ddac-514a86e6a650"},{"name":"left_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-6.852517792736338,-6.839044783698085,-1.0000000000000009],"to":[-3.8525177927363377,-6.651544783698085,-8.881784197001252e-16],"autouv":0,"color":5,"rotation":[0,0,80],"origin":[-7.352517792736337,-8.745294783698085,-7.5],"uv_offset":[20,51],"faces":{"north":{"uv":[21,52,24,52.1875],"texture":0},"east":{"uv":[20,52,21,52.1875],"texture":0},"south":{"uv":[25,52,28,52.1875],"texture":0},"west":{"uv":[24,52,25,52.1875],"texture":0},"up":{"uv":[24,52,21,51],"texture":0},"down":{"uv":[27,51,24,52],"texture":0}},"type":"cube","uuid":"74403782-bad6-2d00-be8b-c1e142510327"},{"name":"left_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-3.8525177927363377,-6.839044783698085,-1.0000000000000009],"to":[1.1474822072636623,-6.589044783698085,-8.881784197001252e-16],"autouv":0,"color":5,"rotation":[0,0,80],"origin":[-7.352517792736337,-8.745294783698085,-7.5],"uv_offset":[49,36],"faces":{"north":{"uv":[50,37,55,37.25],"texture":0},"east":{"uv":[49,37,50,37.25],"texture":0},"south":{"uv":[56,37,61,37.25],"texture":0},"west":{"uv":[55,37,56,37.25],"texture":0},"up":{"uv":[55,37,50,36],"texture":0},"down":{"uv":[60,36,55,37],"texture":0}},"type":"cube","uuid":"69926424-3aa4-dc63-a38c-ceb403139593"},{"name":"left_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-1.8525177927363377,-6.839044783698085,-8.881784197001252e-16],"to":[1.1474822072636623,-6.589044783698085,0.9999999999999991],"autouv":0,"color":5,"rotation":[0,0,80],"origin":[-7.352517792736337,-8.745294783698085,-7.5],"uv_offset":[40,50],"faces":{"north":{"uv":[41,51,44,51.25],"texture":0},"east":{"uv":[40,51,41,51.25],"texture":0},"south":{"uv":[45,51,48,51.25],"texture":0},"west":{"uv":[44,51,45,51.25],"texture":0},"up":{"uv":[44,51,41,50],"texture":0},"down":{"uv":[47,50,44,51],"texture":0}},"type":"cube","uuid":"4a7fa78f-6c2e-f85f-4ec1-58bc972404eb"},{"name":"left_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-6.852517792736338,-6.839044783698085,-8.881784197001252e-16],"to":[-1.8525177927363377,-6.651544783698085,0.9999999999999991],"autouv":0,"color":5,"rotation":[0,0,80],"origin":[-7.352517792736337,-8.745294783698085,-7.5],"uv_offset":[14,50],"faces":{"north":{"uv":[15,51,20,51.1875],"texture":0},"east":{"uv":[14,51,15,51.1875],"texture":0},"south":{"uv":[21,51,26,51.1875],"texture":0},"west":{"uv":[20,51,21,51.1875],"texture":0},"up":{"uv":[20,51,15,50],"texture":0},"down":{"uv":[25,50,20,51],"texture":0}},"type":"cube","uuid":"50a2bffe-2c7a-ba01-ab98-5b1235adde71"},{"name":"left_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-8.85251779273634,-6.839044783698085,-8.881784197001252e-16],"to":[-6.852517792736339,-6.714044783698085,0.9999999999999991],"autouv":0,"color":5,"rotation":[0,0,80],"origin":[-7.352517792736337,-8.745294783698085,-7.5],"uv_offset":[51,27],"faces":{"north":{"uv":[52,28,54,28.125],"texture":0},"east":{"uv":[51,28,52,28.125],"texture":0},"south":{"uv":[55,28,57,28.125],"texture":0},"west":{"uv":[54,28,55,28.125],"texture":0},"up":{"uv":[54,28,52,27],"texture":0},"down":{"uv":[56,27,54,28],"texture":0}},"type":"cube","uuid":"e528b63d-752c-5236-2e12-fdb1c3c997a2"},{"name":"left_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-2.8525177927363377,-6.839044783698085,0.9999999999999991],"to":[1.1474822072636623,-6.589044783698085,1.9999999999999991],"autouv":0,"color":5,"rotation":[0,0,80],"origin":[-7.352517792736337,-8.745294783698085,-7.5],"uv_offset":[49,50],"faces":{"north":{"uv":[50,51,54,51.25],"texture":0},"east":{"uv":[49,51,50,51.25],"texture":0},"south":{"uv":[55,51,59,51.25],"texture":0},"west":{"uv":[54,51,55,51.25],"texture":0},"up":{"uv":[54,51,50,50],"texture":0},"down":{"uv":[58,50,54,51],"texture":0}},"type":"cube","uuid":"03bcb51b-43bf-94fd-ca27-5058cce69989"},{"name":"left_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-4.439341881569803,-7.331448660204188,0.9999999999999991],"to":[-2.4393418815698027,-7.143948660204188,1.9999999999999991],"autouv":0,"color":5,"rotation":[0,0,80],"origin":[-7.439341881569802,-9.237698660204188,-7.5],"uv_offset":[42,49],"faces":{"north":{"uv":[43,50,45,50.1875],"texture":0},"east":{"uv":[42,50,43,50.1875],"texture":0},"south":{"uv":[46,50,48,50.1875],"texture":0},"west":{"uv":[45,50,46,50.1875],"texture":0},"up":{"uv":[45,50,43,49],"texture":0},"down":{"uv":[47,49,45,50],"texture":0}},"type":"cube","uuid":"5eeb0f68-9d2f-67ad-b87f-d270e78d88a7"},{"name":"left_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-6.4393418815698045,-7.331448660204188,0.9999999999999991],"to":[-4.4393418815698045,-7.206448660204188,1.9999999999999991],"autouv":0,"color":5,"rotation":[0,0,80],"origin":[-7.439341881569802,-9.237698660204188,-7.5],"uv_offset":[51,26],"faces":{"north":{"uv":[52,27,54,27.125],"texture":0},"east":{"uv":[51,27,52,27.125],"texture":0},"south":{"uv":[55,27,57,27.125],"texture":0},"west":{"uv":[54,27,55,27.125],"texture":0},"up":{"uv":[54,27,52,26],"texture":0},"down":{"uv":[56,26,54,27],"texture":0}},"type":"cube","uuid":"58e4062f-e987-3935-adc4-7c847f3aa897"},{"name":"left_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-6,-7.827876995015348,-9.769801584717518],"to":[-5.000000000000001,-7.702876995015348,-5.769801584717518],"autouv":0,"color":5,"rotation":[-85,0,0],"origin":[-6.5,-7.734126995015348,-2.5198015847175177],"uv_offset":[5,47],"faces":{"north":{"uv":[9,51,10,51.125],"texture":0},"east":{"uv":[5,51,9,51.125],"texture":0},"south":{"uv":[14,51,15,51.125],"texture":0},"west":{"uv":[10,51,14,51.125],"texture":0},"up":{"uv":[10,51,9,47],"texture":0},"down":{"uv":[10.999999999999998,47,10,51],"texture":0}},"type":"cube","uuid":"f19468a6-eb39-13b3-1a56-61a00dbd6888"},{"name":"left_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-6,-7.827876995015348,-5.769801584717516],"to":[-5.000000000000001,-7.640376995015348,-2.7698015847175164],"autouv":0,"color":5,"rotation":[-85,0,0],"origin":[-6.5,-7.734126995015348,-2.5198015847175177],"uv_offset":[49,3],"faces":{"north":{"uv":[52,6,53,6.1875],"texture":0},"east":{"uv":[49,6,52,6.1875],"texture":0},"south":{"uv":[56,6,57,6.1875],"texture":0},"west":{"uv":[53,6,56,6.1875],"texture":0},"up":{"uv":[53,6,52,3],"texture":0},"down":{"uv":[54,3,53,6],"texture":0}},"type":"cube","uuid":"85b25ada-5f17-8542-ed8b-6d86a02bfc06"},{"name":"left_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-6,-7.827876995015348,-2.7698015847175164],"to":[-5.000000000000001,-7.577876995015348,5.230198415282484],"autouv":0,"color":5,"rotation":[-85,0,0],"origin":[-6.5,-7.734126995015348,-2.5198015847175177],"uv_offset":[26,29],"faces":{"north":{"uv":[34,37,35,37.25],"texture":0},"east":{"uv":[26,37,34,37.25],"texture":0},"south":{"uv":[43,37,44,37.25],"texture":0},"west":{"uv":[35,37,43,37.25],"texture":0},"up":{"uv":[35,37,34,29],"texture":0},"down":{"uv":[36,29,35,37],"texture":0}},"type":"cube","uuid":"a0db7f06-5113-0ce2-7f17-4fb895e1bbf7"},{"name":"left_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-7,-7.827876995015348,-8.769801584717518],"to":[-6.000000000000001,-7.702876995015348,-5.769801584717518],"autouv":0,"color":5,"rotation":[-85,0,0],"origin":[-6.5,-7.734126995015348,-2.5198015847175177],"uv_offset":[49,15],"faces":{"north":{"uv":[52,18,53,18.125],"texture":0},"east":{"uv":[49,18,52,18.125],"texture":0},"south":{"uv":[56,18,57,18.125],"texture":0},"west":{"uv":[53,18,56,18.125],"texture":0},"up":{"uv":[53,18,52,15],"texture":0},"down":{"uv":[54,15,53,18],"texture":0}},"type":"cube","uuid":"2d5b920e-0769-3aa3-87ac-d19f0071fc47"},{"name":"left_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-7,-7.827876995015348,-5.769801584717516],"to":[-6.000000000000001,-7.640376995015348,-1.7698015847175164],"autouv":0,"color":5,"rotation":[-85,0,0],"origin":[-6.5,-7.734126995015348,-2.5198015847175177],"uv_offset":[26,16],"faces":{"north":{"uv":[30,20,31,20.1875],"texture":0},"east":{"uv":[26,20,30,20.1875],"texture":0},"south":{"uv":[35,20,36,20.1875],"texture":0},"west":{"uv":[31,20,35,20.1875],"texture":0},"up":{"uv":[31,20,30,16],"texture":0},"down":{"uv":[32,16,31,20],"texture":0}},"type":"cube","uuid":"e7f5908a-a84a-9b2b-e867-cc472c86eb18"},{"name":"left_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-7,-7.827876995015348,-1.7698015847175164],"to":[-6.000000000000001,-7.577876995015348,5.230198415282484],"autouv":0,"color":5,"rotation":[-85,0,0],"origin":[-6.5,-7.734126995015348,-2.5198015847175177],"uv_offset":[33,0],"faces":{"north":{"uv":[40,7,41,7.25],"texture":0},"east":{"uv":[33,7,40,7.25],"texture":0},"south":{"uv":[48,7,49,7.25],"texture":0},"west":{"uv":[41,7,48,7.25],"texture":0},"up":{"uv":[41,7,40,0],"texture":0},"down":{"uv":[42,0,41,7],"texture":0}},"type":"cube","uuid":"ab4b7410-8e71-d676-a23b-abed5f73d2ab"},{"name":"left_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-8,-7.827876995015348,-2.7698015847175164],"to":[-7.000000000000001,-7.640376995015348,0.23019841528248364],"autouv":0,"color":5,"rotation":[-85,0,0],"origin":[-6.5,-7.734126995015348,-2.5198015847175177],"uv_offset":[49,0],"faces":{"north":{"uv":[52,3,53,3.1875],"texture":0},"east":{"uv":[49,3,52,3.1875],"texture":0},"south":{"uv":[56,3,57,3.1875],"texture":0},"west":{"uv":[53,3,56,3.1875],"texture":0},"up":{"uv":[53,3,52,0],"texture":0},"down":{"uv":[54,0,53,3],"texture":0}},"type":"cube","uuid":"ec2a5337-8a6d-eb88-0c64-641416d6b139"},{"name":"left_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-8,-7.827876995015348,-6.769801584717518],"to":[-7.000000000000001,-7.702876995015348,-2.769801584717518],"autouv":0,"color":5,"rotation":[-85,0,0],"origin":[-6.5,-7.734126995015348,-2.5198015847175177],"uv_offset":[3,47],"faces":{"north":{"uv":[7,51,7.999999999999999,51.125],"texture":0},"east":{"uv":[3,51,7,51.125],"texture":0},"south":{"uv":[12,51,13,51.125],"texture":0},"west":{"uv":[7.999999999999999,51,12,51.125],"texture":0},"up":{"uv":[7.999999999999999,51,7,47],"texture":0},"down":{"uv":[8.999999999999998,47,7.999999999999999,51],"texture":0}},"type":"cube","uuid":"6f051058-0578-05b3-56f3-8eba53c80142"},{"name":"left_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-8,-7.827876995015348,0.23019841528248364],"to":[-7.000000000000001,-7.577876995015348,5.230198415282484],"autouv":0,"color":5,"rotation":[-85,0,0],"origin":[-6.5,-7.734126995015348,-2.5198015847175177],"uv_offset":[35,7],"faces":{"north":{"uv":[40,12,41,12.25],"texture":0},"east":{"uv":[35,12,40,12.25],"texture":0},"south":{"uv":[46,12,47,12.25],"texture":0},"west":{"uv":[41,12,46,12.25],"texture":0},"up":{"uv":[41,12,40,7],"texture":0},"down":{"uv":[42,7,41,12],"texture":0}},"type":"cube","uuid":"f059eb65-b5d3-f991-df79-631db5559a72"},{"name":"left_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-5,-6.945090443225215,-9.723821040282475],"to":[-4,-6.820090443225215,-2.7238210402824716],"autouv":0,"color":5,"rotation":[-85,0,0],"origin":[-6,-7.863477513231757,-1.5151150341624042],"uv_offset":[2,40],"faces":{"north":{"uv":[9.000000000000004,47,10.000000000000004,47.125],"texture":0},"east":{"uv":[2,47,9.000000000000004,47.125],"texture":0},"south":{"uv":[17.000000000000007,47,18.000000000000007,47.125],"texture":0},"west":{"uv":[10.000000000000004,47,17.000000000000007,47.125],"texture":0},"up":{"uv":[10.000000000000004,47,9.000000000000004,40],"texture":0},"down":{"uv":[11.000000000000004,40,10.000000000000004,47],"texture":0}},"type":"cube","uuid":"a676f3c1-1b05-206e-4180-83b246e7a704"},{"name":"left_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-5,-6.945090443225215,-2.7238210402824734],"to":[-4,-6.757590443225215,4.276178959717527],"autouv":0,"color":5,"rotation":[-85,0,0],"origin":[-6,-7.863477513231757,-1.5151150341624042],"uv_offset":[37,20],"faces":{"north":{"uv":[44,27,45,27.1875],"texture":0},"east":{"uv":[37,27,44,27.1875],"texture":0},"south":{"uv":[52,27,53,27.1875],"texture":0},"west":{"uv":[45,27,52,27.1875],"texture":0},"up":{"uv":[45,27,44,20],"texture":0},"down":{"uv":[46,20,45,27],"texture":0}},"type":"cube","uuid":"38d24d65-928d-c20b-2dae-32ec5d1c2fde"},{"name":"left_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-5,-6.945090443225215,4.276178959717527],"to":[-4,-6.695090443225215,6.276178959717527],"autouv":0,"color":5,"rotation":[-85,0,0],"origin":[-6,-7.863477513231757,-1.5151150341624042],"uv_offset":[0,16],"faces":{"north":{"uv":[2,18,3,18.25],"texture":0},"east":{"uv":[0,18,2,18.25],"texture":0},"south":{"uv":[5,18,6,18.25],"texture":0},"west":{"uv":[3,18,5,18.25],"texture":0},"up":{"uv":[3,18,2,16],"texture":0},"down":{"uv":[4,16,3,18],"texture":0}},"type":"cube","uuid":"bcb4a070-5664-9c77-ad26-5e64c216a7ac"},{"name":"body","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-3,-6.945090443225215,1.2761789597175266],"to":[-2,-6.695090443225215,6.276178959717527],"autouv":0,"color":5,"rotation":[-85,0,0],"origin":[-6,-7.863477513231757,-1.5151150341624042],"uv_offset":[13,24],"faces":{"north":{"uv":[18,29,19,29.25],"texture":0},"east":{"uv":[13,29,18,29.25],"texture":0},"south":{"uv":[24,29,25,29.25],"texture":0},"west":{"uv":[19,29,24,29.25],"texture":0},"up":{"uv":[19,29,18,24],"texture":0},"down":{"uv":[20,24,19,29],"texture":0}},"type":"cube","uuid":"527f967a-2b03-62ee-a3b9-7c5048f6b600"},{"name":"body","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-3,-6.945090443225215,-7.723821040282475],"to":[-2,-6.757590443225215,-2.7238210402824716],"autouv":0,"color":5,"rotation":[-85,0,0],"origin":[-6,-7.863477513231757,-1.5151150341624042],"uv_offset":[29,44],"faces":{"north":{"uv":[34,49,35,49.1875],"texture":0},"east":{"uv":[29,49,34,49.1875],"texture":0},"south":{"uv":[40.00000000000001,49,41.00000000000001,49.1875],"texture":0},"west":{"uv":[35,49,40.00000000000001,49.1875],"texture":0},"up":{"uv":[35,49,34,44],"texture":0},"down":{"uv":[36,44,35,49],"texture":0}},"type":"cube","uuid":"1fdf7835-36e6-e12f-2776-2453f2f0f99f"},{"name":"body","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-3,-6.945090443225215,-11.723821040282475],"to":[-2,-6.820090443225215,-7.723821040282475],"autouv":0,"color":5,"rotation":[-85,0,0],"origin":[-6,-7.863477513231757,-1.5151150341624042],"uv_offset":[30,16],"faces":{"north":{"uv":[34,20,35,20.125],"texture":0},"east":{"uv":[30,20,34,20.125],"texture":0},"south":{"uv":[39,20,40,20.125],"texture":0},"west":{"uv":[35,20,39,20.125],"texture":0},"up":{"uv":[35,20,34,16],"texture":0},"down":{"uv":[36,16,35,20],"texture":0}},"type":"cube","uuid":"48cb306d-9eb9-db81-8a5a-14dd6486d9a7"},{"name":"body","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-3,-6.945090443225215,-2.7238210402824734],"to":[-2,-6.757590443225215,1.2761789597175266],"autouv":0,"color":5,"rotation":[-85,0,0],"origin":[-6,-7.863477513231757,-1.5151150341624042],"uv_offset":[0,12],"faces":{"north":{"uv":[4,16,5,16.1875],"texture":0},"east":{"uv":[0,16,4,16.1875],"texture":0},"south":{"uv":[9,16,10,16.1875],"texture":0},"west":{"uv":[5,16,9,16.1875],"texture":0},"up":{"uv":[5,16,4,12],"texture":0},"down":{"uv":[6,12,5,16],"texture":0}},"type":"cube","uuid":"5a8fc79f-08dc-5e92-b0be-b6860df10963"},{"name":"body","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-4.125,-0.0625,-4.0625],"to":[4.125,0,4.0625],"autouv":0,"color":7,"origin":[0,-24,0],"uv_offset":[0,8],"faces":{"north":{"uv":[8.125,16.125,16.375,16.1875],"texture":0},"east":{"uv":[0,16.125,8.125,16.1875],"texture":0},"south":{"uv":[24.5,16.125,32.75,16.1875],"texture":0},"west":{"uv":[16.375,16.125,24.5,16.1875],"texture":0},"up":{"uv":[16.375,16.125,8.125,8],"texture":0},"down":{"uv":[24.625,8,16.375,16.125],"texture":0}},"type":"cube","uuid":"1351f013-097f-fd31-dca3-e69cf760c680"},{"name":"body","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[0,-6.945090443225215,1.2761789597175266],"to":[1,-6.695090443225215,6.276178959717527],"autouv":0,"color":5,"rotation":[-85,0,0],"origin":[6,-7.863477513231757,-1.5151150341624042],"uv_offset":[11,24],"faces":{"north":{"uv":[16,29,17,29.25],"texture":0},"east":{"uv":[11,29,16,29.25],"texture":0},"south":{"uv":[22,29,23,29.25],"texture":0},"west":{"uv":[17,29,22,29.25],"texture":0},"up":{"uv":[17,29,16,24],"texture":0},"down":{"uv":[18,24,17,29],"texture":0}},"type":"cube","uuid":"7b1fdade-da36-64de-a86e-37bb5a096b81"},{"name":"body","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-1,-6.945090443225215,0.2761789597175266],"to":[0,-6.695090443225215,6.276178959717527],"autouv":0,"color":5,"rotation":[-85,0,0],"origin":[6,-7.863477513231757,-1.5151150341624042],"faces":{"north":{"uv":[6,6,7,6.25],"texture":0},"east":{"uv":[0,6,6,6.25],"texture":0},"south":{"uv":[13,6,14,6.25],"texture":0},"west":{"uv":[7,6,13,6.25],"texture":0},"up":{"uv":[7,6,6,0],"texture":0},"down":{"uv":[8,0,7,6],"texture":0}},"type":"cube","uuid":"af57618d-ea06-2714-d404-c30143b92c60"}],"outliner":[{"name":"hat","origin":[0,0,0],"color":0,"uuid":"cac5b5ea-0d5e-e6dc-8078-ede9c208579b","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["4b4529d7-84f7-2fc5-c3a4-08d1193ff72e","4be65cf9-59fd-e1bf-cbef-622f87ea266e","eb04d618-f4d8-270e-a73d-ea3fc5d1aea4","152b8ba8-aaf9-b41f-6171-dec562f1b551","a6ebd583-8100-88c3-018a-420c0bab948d","4eaa2c87-e117-ce70-a6e6-d2d31ebbd4fd","3f80b068-57b2-b13d-9ad1-a5574458e037","ae805eb2-064a-fab4-b48d-726fb9596348","26b34a61-fc97-9737-34f5-055807afaeb4","d4d692c2-22de-1286-19fc-a3ff3024a78d","1dd72061-fe1d-08cb-9712-2602c74af75a","273f91e3-e960-0db0-bc0b-40d00954e75d","8ef60550-967c-69cf-0a0c-e3d29220da91","117e93ab-c8bb-7832-0c5b-18bb5f5305ca"]},{"name":"left_leg","origin":[0,0,0],"color":0,"uuid":"6b8ea7bc-e535-9131-b798-8ee28fd17081","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":false,"autouv":0,"children":[]},{"name":"right_leg","origin":[0,0,0],"color":0,"uuid":"16136636-7ba4-f505-405c-4950c19ba7db","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":false,"autouv":0,"children":[]},{"name":"head","origin":[0,0,0],"color":0,"uuid":"07c4a2a7-e3d0-11bf-8ba4-6df1407f47b5","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":false,"autouv":0,"children":[]},{"name":"body","origin":[-3.700743415417188e-17,-8.474477505111581,0.542290138599702],"color":0,"uuid":"553071be-bb77-a355-840d-da750fb483d0","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["0718b744-e674-d8b1-fdc0-a0f93cd2c93f","36941eff-c10d-e244-ae3a-097f127cec74","33150fa0-a203-21b2-aec4-4210033346ad","d6e40f12-fa57-36b0-7155-96992dda9497","53c9e5ca-144d-1114-170e-807449f9d4c5","b8ecdd25-b6c7-4038-f676-1493e941717a","c09863f2-1eb7-64e0-b40a-5dec761db225","3e64e515-c135-0c1a-e5f5-e6dcffca633b","a0c17c53-69a5-6d92-58f0-6d394f9c8dab","73b5ccd9-7eba-3309-4da4-e7e32a6cbb7d","d4bf1881-a22d-8dfe-ac16-17ac28f4b226","1f567e36-3e6c-0586-ccd7-74857f91c2a2","56defa9d-9f19-355a-424a-cf02883c2831","ccbb4b14-20bb-90a4-8669-6080ea6c7567","e33e4731-008a-1447-cc0e-c76e4875f0cb","a90b8018-c091-4347-8393-2d445a8a22f0","636ae6f3-d598-d810-bb47-7bbce8b93a30","1ca7955d-78b9-6815-ffe5-db3e3f1328ff","88da360a-91bb-391f-9bab-e210c290e212","75ae951b-3d5d-3679-92bb-2612449ad367","243fb8a9-45f0-2d36-729e-35f2a0593d1e","a8420696-e7f0-8948-e914-0726b7fea84b","2742387d-59e3-a539-359c-46e6e125446a","07445085-1c8e-4c28-6ff6-a85b83fa4cd4","b80037ed-fe15-a268-2235-bc5f4f612c98","d349f417-7204-83b3-56f7-026152e1ded9","b159c445-325d-2c01-0853-7e49366ce58c","4263fbf6-7bbc-65c7-c43c-c1de9fa2e287","4ab0efeb-fcf2-4f2c-00dd-ca14ecca767f","33456a55-47cf-a580-27e9-d051077a428e","e1455aff-8505-5cd5-78d3-6ac8898ca2bd","914ca948-e9bf-5f63-3b9d-e2dd9041aea0","5e6930c5-9af2-32db-37f9-d12a3789cdc4","5a62a963-37ad-3356-a9c5-da30b96bd839","4073723b-2619-c05e-213c-507f751f8e87","917a6a71-837e-fde2-e9b5-8d23a21b534e","5bb2e4b5-0ec4-a6f3-2a8a-0003c43e3d85","bafeb829-4522-f032-42bf-39d2d8bc00bb","01ebe320-d2ec-3f6a-3ee3-ed5553bcf55c","99e1723b-1794-154a-5106-64ed4817bc0a","4fb679fd-6689-73d5-43b0-92f17b08ac3f","527f967a-2b03-62ee-a3b9-7c5048f6b600","1fdf7835-36e6-e12f-2776-2453f2f0f99f","48cb306d-9eb9-db81-8a5a-14dd6486d9a7","5a8fc79f-08dc-5e92-b0be-b6860df10963","1351f013-097f-fd31-dca3-e69cf760c680","7b1fdade-da36-64de-a86e-37bb5a096b81","af57618d-ea06-2714-d404-c30143b92c60"]},{"name":"left_arm","origin":[-6.83597286404699,-6.334398071125574,0.24143228212799434],"color":0,"uuid":"ffafa8be-da09-b65f-4d73-0029ca5362ac","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["f9aef479-8fa3-6747-a674-cf4323234fc3","24238e70-5b69-aaec-94fc-46c892b91ec8","206b2ed4-2535-2daf-50d6-869d2b1f4fec","00f378ed-8082-cd25-0ef6-1c6ca5921189","d063c27b-70d0-dd09-29bd-84faf29afe05","a938939d-2c25-7f1c-79a6-161e6b612fb4","8bbf1a1e-8c90-92ac-c4f7-55a31fb480c4","1bbcd197-5644-c141-7338-536b5cbf83e7","336d5029-9279-2cf4-b2f1-eb07322590bd","49e39b5d-5f4d-cac1-dc47-f190d570e3c4","6b2baff3-f210-b5f6-b37b-48fc08e5384d","bb880b87-c31e-4f9f-db17-45bf74391a48","41e59ef6-75be-49c9-2363-93a8e3ba363e","835d4043-29ec-8438-5259-4da215c46a8d","a0f6db82-6ad7-5aef-6bb7-51bf7e034995","518fa56b-30d0-3641-b5a8-68ef7d884519","2d41ab33-299c-e374-b897-850e1044a71f","bcc93ae8-1163-9767-ddac-514a86e6a650","74403782-bad6-2d00-be8b-c1e142510327","69926424-3aa4-dc63-a38c-ceb403139593","4a7fa78f-6c2e-f85f-4ec1-58bc972404eb","50a2bffe-2c7a-ba01-ab98-5b1235adde71","e528b63d-752c-5236-2e12-fdb1c3c997a2","03bcb51b-43bf-94fd-ca27-5058cce69989","5eeb0f68-9d2f-67ad-b87f-d270e78d88a7","58e4062f-e987-3935-adc4-7c847f3aa897","f19468a6-eb39-13b3-1a56-61a00dbd6888","85b25ada-5f17-8542-ed8b-6d86a02bfc06","a0db7f06-5113-0ce2-7f17-4fb895e1bbf7","2d5b920e-0769-3aa3-87ac-d19f0071fc47","e7f5908a-a84a-9b2b-e867-cc472c86eb18","ab4b7410-8e71-d676-a23b-abed5f73d2ab","ec2a5337-8a6d-eb88-0c64-641416d6b139","6f051058-0578-05b3-56f3-8eba53c80142","f059eb65-b5d3-f991-df79-631db5559a72","a676f3c1-1b05-206e-4180-83b246e7a704","38d24d65-928d-c20b-2dae-32ec5d1c2fde","bcb4a070-5664-9c77-ad26-5e64c216a7ac"]},{"name":"right_arm","origin":[6.83597286404699,-6.230734097124289,0.22315352658410723],"color":0,"uuid":"b02f8012-e776-0a19-7950-8fb0029266ca","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["d5c7539c-8ed6-8769-81ba-74d69f5f6653","08169f4b-5770-a493-c0d3-9d6bebc40dd8","6d5f034a-0377-292f-f748-80fc68a76d5c","a31157e8-a337-f5f6-b23d-2f63f37898e6","47daef8d-b35b-40ce-d470-036de5a8dc76","200fb5e5-1d25-4680-386f-830df7311d64","10c58df2-fd21-c085-d232-12c92796c2b5","4075d0ba-df91-29bc-a50a-cf813fc23d8d","96357101-aabb-6a90-e9b8-aff942e83a9b","c26f12ff-0c0d-f2ac-0aa1-f3774b9cf9cc","7b009284-14f9-2d94-6493-3d019e1f2df7","40a95224-1342-8975-4ada-317c4fda6503","e4a01878-8a9d-baa4-36a6-42d23b691b34","d5b2882f-7976-1583-3c3b-25b9a3eaed8b","c1ef9e1a-a089-427b-dc20-baa0fc9360b5","b7592487-a823-2023-10e8-54b82c37aee9","a3da4ed8-f4b6-1696-d146-4b7fad8d2cb3","827bfb56-a525-9b45-0f16-6ce206311f71","c83109cd-2ed0-de55-18a5-f19105b84884","e893d8be-7440-4a5e-a39a-4cc9aad3f17f","62ce5b01-d5f5-2cce-bbb8-5adb8980c9f8","fdde48f3-2267-b077-da0e-ed0a45824268","2e061aff-3ece-c986-d297-ba03f73bb482","39188b99-9fce-6ccd-f3f9-3e7398a379cd","297246bc-1ac0-fc04-3202-95d17b2a10fa","c3dc136d-ef24-4be2-4b4f-84ed11db4ab0","1fd5e130-03d6-f404-184d-f8397e5629de","911d766f-eca1-cb32-b407-a23a80f4a0a6","c145f545-149f-756b-4c55-d109ad7c0f92","ad247402-6394-0f68-c15b-598e7c80ec4c","4d1c91f8-47a6-29a4-e1a7-bac172c53667","8eaac26d-143c-79b5-7be1-7ed9140086c6","a28d8829-b8f8-cb64-7d2c-ccaeaf4bed12","b0a5f214-5bf1-04ac-643b-269b3029fdcb","f03775f4-c64d-ddc2-318a-394aa523b5d2","ac33fe50-28c0-b5ee-7923-6b48297cc620","76149ac4-cce3-58fb-3efc-0e63128c1bfe","7fae8f90-5fd3-002a-184a-36767a69978f"]}],"textures":[{"path":"Z:\\Repo\\Minecraft\\2021\\CosmereProject\\_cosmere\\src\\allomancy\\resources\\assets\\allomancy\\textures\\models\\armor\\mistcloak.png","name":"mistcloak.png","folder":"block","namespace":"","id":"0","particle":false,"render_mode":"default","render_sides":"auto","frame_time":1,"frame_order_type":"loop","frame_order":"","frame_interpolate":false,"visible":true,"mode":"bitmap","saved":true,"uuid":"f2450537-70af-544d-d95e-a01f7141bf79","relative_path":"Z:/Repo/Minecraft/2021/CosmereProject/_cosmere/src/allomancy/resources/assets/allomancy/textures/models/armor/mistcloak.png","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAAXNSR0IArs4c6QAAAIRJREFUeF7t1QERADAMArHi33SFfOagHBm7+Fv8/hOABsQTQCBeAJ8gAgjEE0AgXgArgAAC8QQQiBfACiCAQDwBBOIFsAIIIBBPAIF4AawAAgjEE0AgXgArgAAC8QQQiBfACiCAQDwBBOIFsAIIIBBPAIF4AawAAgjEE0AgXgArgECdwANo2ABBrP9ggQAAAABJRU5ErkJggg=="}]} \ No newline at end of file diff --git a/blockbench/hemalurgy/Koloss_large.bbmodel b/blockbench/hemalurgy/Koloss_large.bbmodel new file mode 100644 index 000000000..45d6bc5ee --- /dev/null +++ b/blockbench/hemalurgy/Koloss_large.bbmodel @@ -0,0 +1 @@ +{"meta":{"format_version":"4.5","model_format":"modded_entity","box_uv":true},"name":"koloss_large","model_identifier":"","modded_entity_version":"1.17","modded_entity_flip_y":true,"visible_box":[1,1,0],"variable_placeholders":"","variable_placeholder_buttons":[],"timeline_setups":[],"unhandled_root_fields":{},"resolution":{"width":256,"height":256},"elements":[{"name":"head","box_uv":true,"rescale":false,"locked":false,"from":[-6.007319704137757,75.74731229205595,-7.427964244289464],"to":[5.992680295862243,87.74731229205595,6.572035755710536],"autouv":0,"color":0,"origin":[-0.007319704137756844,82.74731229205595,0.5720357557105382],"uv_offset":[56,158],"faces":{"north":{"uv":[70,172,82,184],"texture":0},"east":{"uv":[56,172,70,184],"texture":0},"south":{"uv":[96,172,108,184],"texture":0},"west":{"uv":[82,172,96,184],"texture":0},"up":{"uv":[82,172,70,158],"texture":0},"down":{"uv":[94,158,82,172],"texture":0}},"type":"cube","uuid":"41d5a3f9-41c7-0fd8-4644-eeb67c307740"},{"name":"body","box_uv":true,"rescale":false,"locked":false,"from":[-12.007319704137757,45.92269263389284,-4.752177303778403],"to":[11.992680295862243,53.92269263389284,11.247822696221597],"autouv":0,"color":0,"rotation":[-7.500000000000001,0,0],"origin":[-0.007319704137756844,64.42269263389284,3.247822696221597],"uv_offset":[72,0],"faces":{"north":{"uv":[88,16,112,24],"texture":0},"east":{"uv":[72,16,88,24],"texture":0},"south":{"uv":[128,16,152,24],"texture":0},"west":{"uv":[112,16,128,24],"texture":0},"up":{"uv":[112,16,88,0],"texture":0},"down":{"uv":[136,0,112,16],"texture":0}},"type":"cube","uuid":"7676c118-a5b4-f713-b7d0-e6ced3ab316b"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[16.992680295862243,63.92269263389284,-4.752177303778404],"to":[30.992680295862243,75.92269263389284,11.247822696221597],"autouv":0,"color":0,"rotation":[-7.500000000000001,0,0],"origin":[-3.007319704137757,62.42269263389284,3.247822696221596],"uv_offset":[148,154],"faces":{"north":{"uv":[164,170,178,182],"texture":0},"east":{"uv":[148,170,164,182],"texture":0},"south":{"uv":[194,170,208,182],"texture":0},"west":{"uv":[178,170,194,182],"texture":0},"up":{"uv":[178,170,164,154],"texture":0},"down":{"uv":[192,154,178,170],"texture":0}},"type":"cube","uuid":"985b2c88-35eb-5216-51d6-c2267f27bc76"},{"name":"left_arm","box_uv":true,"rescale":false,"locked":false,"from":[-31.007319704137757,63.712971081209886,-5.552444734351091],"to":[-17.007319704137757,75.71297108120987,10.447555265648909],"autouv":0,"color":0,"rotation":[-7.500000000000001,0,0],"origin":[-19.007319704137757,68.42269263389284,1.2478226962215961],"uv_offset":[149,119],"faces":{"north":{"uv":[165,135,179,147],"texture":0},"east":{"uv":[149,135,165,147],"texture":0},"south":{"uv":[195,135,209,147],"texture":0},"west":{"uv":[179,135,195,147],"texture":0},"up":{"uv":[179,135,165,119],"texture":0},"down":{"uv":[193,119,179,135],"texture":0}},"type":"cube","uuid":"8d3a47a4-f2d4-ca79-93c5-eca45ab3576a"},{"name":"body","box_uv":true,"rescale":false,"locked":false,"from":[-2.507319704137757,45.42269263389284,-6.752177303778403],"to":[13.492680295862243,79.42269263389284,13.247822696221597],"autouv":0,"color":0,"rotation":[-5.61399923425755e-15,7.5,89.99999999999994],"origin":[-0.007319704137756844,62.42269263389284,3.247822696221597],"faces":{"north":{"uv":[20,20,36,54],"texture":0},"east":{"uv":[0,20,20,54],"texture":0},"south":{"uv":[56,20,72,54],"texture":0},"west":{"uv":[36,20,56,54],"texture":0},"up":{"uv":[36,20,20,0],"texture":0},"down":{"uv":[52,0,36,20],"texture":0}},"type":"cube","uuid":"2014d3b4-7d47-dffe-9696-737f7d292aa2"},{"name":"body","box_uv":true,"rescale":false,"locked":false,"from":[-10.507319704137757,48.42269263389284,-4.752177303778403],"to":[-2.507319704137757,76.42269263389284,11.247822696221597],"autouv":0,"color":0,"rotation":[-5.61399923425755e-15,7.5,89.99999999999994],"origin":[-0.007319704137756844,62.42269263389284,3.247822696221597],"uv_offset":[128,48],"faces":{"north":{"uv":[144,64,152,92],"texture":0},"east":{"uv":[128,64,144,92],"texture":0},"south":{"uv":[168,64,176,92],"texture":0},"west":{"uv":[152,64,168,92],"texture":0},"up":{"uv":[152,64,144,48],"texture":0},"down":{"uv":[160,48,152,64],"texture":0}},"type":"cube","uuid":"9b11258e-d98a-f3c9-7202-a3eab876b154"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[22.555180295862243,45.92269263389284,-4.814677303778404],"to":[34.55518029586224,68.92269263389284,10.185322696221597],"autouv":0,"color":0,"rotation":[0,0,12.5],"origin":[25.305180295862243,45.92269263389284,4.247822696221596],"uv_offset":[54,120],"faces":{"north":{"uv":[69,135,81,158],"texture":0},"east":{"uv":[54,135,69,158],"texture":0},"south":{"uv":[96,135,108,158],"texture":0},"west":{"uv":[81,135,96,158],"texture":0},"up":{"uv":[81,135,69,120],"texture":0},"down":{"uv":[93,120,81,135],"texture":0}},"type":"cube","uuid":"03e676e6-683f-b3b8-5e82-b1eefa9e2dea"},{"name":"left_arm","box_uv":true,"rescale":false,"locked":false,"from":[-29.477426438589976,44.99506507961209,-4.814677303778404],"to":[-17.477426438589976,67.99506507961198,10.185322696221597],"autouv":0,"color":0,"rotation":[0,0,-12.5],"origin":[-19.007319704137757,68.42269263389284,1.2478226962215961],"uv_offset":[0,100],"faces":{"north":{"uv":[15,115,27,138],"texture":0},"east":{"uv":[0,115,15,138],"texture":0},"south":{"uv":[42,115,54,138],"texture":0},"west":{"uv":[27,115,42,138],"texture":0},"up":{"uv":[27,115,15,100],"texture":0},"down":{"uv":[39,100,27,115],"texture":0}},"type":"cube","uuid":"371039cd-4329-7463-c495-535406842b7c"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[24.742514522733615,25.319351561939087,-9.252177303778403],"to":[38.742514522733615,48.31935156193909,8.747822696221597],"autouv":0,"color":0,"rotation":[12.5,-1.987846675914698e-16,12.5],"origin":[30.992514522733615,31.819351561939087,2.685322696221596],"uv_offset":[64,36],"faces":{"north":{"uv":[82,54,96,77],"texture":0},"east":{"uv":[64,54,82,77],"texture":0},"south":{"uv":[114,54,128,77],"texture":0},"west":{"uv":[96,54,114,77],"texture":0},"up":{"uv":[96,54,82,36],"texture":0},"down":{"uv":[110,36,96,54],"texture":0}},"type":"cube","uuid":"fc3f85c3-f075-186a-3d7e-79ee15f780c8"},{"name":"left_arm","box_uv":true,"rescale":false,"locked":false,"from":[-30.477426438589976,24.784722613948347,-0.9763984189127968],"to":[-16.477426438589976,47.78472261394829,17.02360158108722],"autouv":0,"color":0,"rotation":[12.5,0,-12.5],"origin":[-19.007319704137757,68.42269263389284,1.2478226962215961],"uv_offset":[0,54],"faces":{"north":{"uv":[18,72,32,95],"texture":0},"east":{"uv":[0,72,18,95],"texture":0},"south":{"uv":[50,72,64,95],"texture":0},"west":{"uv":[32,72,50,95],"texture":0},"up":{"uv":[32,72,18,54],"texture":0},"down":{"uv":[46,54,32,72],"texture":0}},"type":"cube","uuid":"e96dd76b-0b42-4a00-20c0-583ec2cf3f4d"},{"name":"left_leg","box_uv":true,"rescale":false,"locked":false,"from":[-18.346822488235773,0.6272665620225055,-6.048784276787699],"to":[-3.346822488235773,20.627266562022506,11.9512157232123],"autouv":0,"color":0,"origin":[-0.8468227266543522,20.156789245995807,3.0789116078553205],"uv_offset":[94,97],"faces":{"north":{"uv":[112,115,127,135],"texture":0},"east":{"uv":[94,115,112,135],"texture":0},"south":{"uv":[145,115,160,135],"texture":0},"west":{"uv":[127,115,145,135],"texture":0},"up":{"uv":[127,115,112,97],"texture":0},"down":{"uv":[142,97,127,115],"texture":0}},"type":"cube","uuid":"d799bf6f-8e41-267e-3dba-f937a673ffbb"},{"name":"right_leg","box_uv":true,"rescale":false,"locked":false,"from":[3.3468224882357718,0.627266562022502,-6.673784276787696],"to":[18.346822488235773,20.627266562022502,11.326215723212304],"autouv":0,"color":0,"origin":[0.8468227266543522,20.156789245995803,3.078911607855323],"uv_offset":[46,77],"faces":{"north":{"uv":[64,95,79,115],"texture":0},"east":{"uv":[46,95,64,115],"texture":0},"south":{"uv":[97,95,112,115],"texture":0},"west":{"uv":[79,95,97,115],"texture":0},"up":{"uv":[79,95,64,77],"texture":0},"down":{"uv":[94,77,79,95],"texture":0}},"type":"cube","uuid":"2381cef3-3770-f9cd-e8ea-dd23d9b7cb62"},{"name":"head","box_uv":true,"rescale":false,"locked":false,"from":[-3.882319704137757,71.74731229205595,-4.427964244289464],"to":[4.117680295862243,75.74731229205595,2.5720357557105364],"autouv":0,"color":0,"origin":[-0.007319704137756844,82.74731229205595,0.5720357557105382],"uv_offset":[52,0],"faces":{"north":{"uv":[59,7,67,11],"texture":0},"east":{"uv":[52,7,59,11],"texture":0},"south":{"uv":[74,7,82,11],"texture":0},"west":{"uv":[67,7,74,11],"texture":0},"up":{"uv":[67,7,59,0],"texture":0},"down":{"uv":[75,0,67,7],"texture":0}},"type":"cube","uuid":"fb4ec91a-26fc-58a3-77a1-cec4c5d2190a"},{"name":"right_leg","box_uv":true,"rescale":false,"locked":false,"from":[4.346822488235771,16.742254619255203,-4.7789646977857],"to":[17.346822488235773,21.742254619255203,10.221035302214304],"autouv":0,"color":0,"origin":[0.8468227266543522,20.156789245995803,3.078911607855325],"uv_offset":[2,194],"faces":{"north":{"uv":[17.000000000000004,209,30.000000000000007,214],"texture":0},"east":{"uv":[2,209,17.000000000000004,214],"texture":0},"south":{"uv":[45.00000000000001,209,58.00000000000001,214],"texture":0},"west":{"uv":[30.000000000000007,209,45.000000000000014,214],"texture":0},"up":{"uv":[30.000000000000007,209,17.000000000000007,194],"texture":0},"down":{"uv":[43.00000000000001,194,30.000000000000007,209],"texture":0}},"type":"cube","uuid":"0fe32a21-4d7a-985d-173c-9ed034c8e11d"},{"name":"left_leg","box_uv":true,"rescale":false,"locked":false,"from":[-17.346822488235773,16.742254619255206,-4.778964697785703],"to":[-4.346822488235773,21.742254619255206,10.221035302214297],"autouv":0,"color":0,"origin":[-0.8468227266543522,20.156789245995807,3.0789116078553214],"uv_offset":[142,92],"faces":{"north":{"uv":[157,107,170,112],"texture":0},"east":{"uv":[142,107,157,112],"texture":0},"south":{"uv":[185,107,198,112],"texture":0},"west":{"uv":[170,107,185,112],"texture":0},"up":{"uv":[170,107,157,92],"texture":0},"down":{"uv":[183,92,170,107],"texture":0}},"type":"cube","uuid":"93fb1f36-1603-ef64-45de-2c91ccc6153a"},{"name":"body","box_uv":true,"rescale":false,"locked":false,"from":[32.49268029586224,23.235192633892837,-4.314677303778403],"to":[34.49268029586224,25.235192633892837,5.685322696221597],"autouv":0,"color":0,"rotation":[-5.61399923425755e-15,7.5,89.99999999999994],"origin":[-0.007319704137756844,36.17269263389284,3.247822696221597],"uv_offset":[94,77],"faces":{"north":{"uv":[104,87,106,89],"texture":0},"east":{"uv":[94,87,104,89],"texture":0},"south":{"uv":[116,87,118,89],"texture":0},"west":{"uv":[106,87,116,89],"texture":0},"up":{"uv":[106,87,104,77],"texture":0},"down":{"uv":[108,77,106,87],"texture":0}},"type":"cube","uuid":"2d74e89c-c4aa-dc23-3648-bb6e5447d893"},{"name":"body","box_uv":true,"rescale":false,"locked":false,"from":[32.49268029586224,48.11019263389284,-4.314677303778403],"to":[34.49268029586224,50.11019263389284,5.685322696221597],"autouv":0,"color":0,"rotation":[-5.61399923425755e-15,7.5,89.99999999999994],"origin":[-0.007319704137756844,36.17269263389284,3.247822696221597],"uv_offset":[72,24],"faces":{"north":{"uv":[82,34,84,36],"texture":0},"east":{"uv":[72,34,82,36],"texture":0},"south":{"uv":[94,34,96,36],"texture":0},"west":{"uv":[84,34,94,36],"texture":0},"up":{"uv":[84,34,82,24],"texture":0},"down":{"uv":[86,24,84,34],"texture":0}},"type":"cube","uuid":"bddc5175-692e-305e-d03c-2d8e5257dcf3"},{"name":"body","box_uv":true,"rescale":false,"locked":false,"from":[33.68749999999995,34.92269263389284,-4.60585905860286],"to":[35.68749999999995,36.92269263389284,3.39414094139714],"autouv":0,"color":0,"rotation":[-5.61399923425755e-15,7.5,89.99999999999994],"origin":[-0.25000000000005196,36.17269263389284,2.39414094139714],"faces":{"north":{"uv":[8,8,10,10],"texture":0},"east":{"uv":[0,8,8,10],"texture":0},"south":{"uv":[18,8,20,10],"texture":0},"west":{"uv":[10,8,18,10],"texture":0},"up":{"uv":[10,8,8,0],"texture":0},"down":{"uv":[12,0,10,8],"texture":0}},"type":"cube","uuid":"1b4013bc-b04c-30d2-4c01-11a347426d32"},{"name":"body","box_uv":true,"rescale":false,"locked":false,"from":[29.24999999999996,36.17269263389284,-4.383100929931317],"to":[31.24999999999996,38.17269263389284,1.6168990700686834],"autouv":0,"color":0,"rotation":[-5.61399923425755e-15,7.5,89.99999999999994],"origin":[0.9999999999999614,36.17269263389284,20.179399070068683],"uv_offset":[52,11],"faces":{"north":{"uv":[58,17,60,19],"texture":0},"east":{"uv":[52,17,58,19],"texture":0},"south":{"uv":[66,17,68,19],"texture":0},"west":{"uv":[60,17,66,19],"texture":0},"up":{"uv":[60,17,58,11],"texture":0},"down":{"uv":[62,11,60,17],"texture":0}},"type":"cube","uuid":"ee745d50-b492-dc2f-826b-08ffacbe3f99"},{"name":"right_leg","box_uv":true,"rescale":false,"locked":false,"from":[3.499999761581419,20.07836364270626,-3.6167779231369224],"to":[16.49999976158142,40.078363642706265,11.38322207686307],"autouv":0,"color":0,"rotation":[7.471783307335337,-0.6518169913758882,4.9574383886179865],"origin":[9.999999761581423,30.07836364270626,3.8832220768630705],"uv_offset":[0,143],"faces":{"north":{"uv":[14.999999999999993,158,27.999999999999993,178],"texture":0},"east":{"uv":[0,158,14.999999999999993,178],"texture":0},"south":{"uv":[42.999999999999986,158,55.999999999999986,178],"texture":0},"west":{"uv":[27.999999999999993,158,42.999999999999986,178],"texture":0},"up":{"uv":[27.999999999999993,158,14.999999999999991,143],"texture":0},"down":{"uv":[41,143,28,158],"texture":0}},"type":"cube","uuid":"4002c3dd-8b6b-8f7a-d15d-8b737b366dae"},{"name":"left_leg","box_uv":true,"rescale":false,"locked":false,"from":[-16.49999976158142,20.07836364270626,-3.6167779231369295],"to":[-3.499999761581421,40.078363642706265,11.38322207686307],"autouv":0,"color":0,"rotation":[7.471783307335341,0.6518169913758883,-4.9574383886179865],"origin":[-9.999999761581423,30.07836364270626,3.8832220768630705],"uv_offset":[108,135],"faces":{"north":{"uv":[123,150,136,170],"texture":0},"east":{"uv":[108,150,123,170],"texture":0},"south":{"uv":[151,150,164,170],"texture":0},"west":{"uv":[136,150,151,170],"texture":0},"up":{"uv":[136,150,123,135],"texture":0},"down":{"uv":[149,135,136,150],"texture":0}},"type":"cube","uuid":"02a97070-4004-e8de-522f-bf37d303a56c"},{"name":"body","box_uv":true,"rescale":false,"locked":false,"from":[-12.007319704137757,37.115183252982106,-2.1903379788272446],"to":[11.992680295862243,47.115183252982106,12.809662021172755],"autouv":0,"color":0,"origin":[-0.007319704137756844,42.11518325298209,6.184662021172755],"uv_offset":[110,24],"faces":{"north":{"uv":[125,39,149,49],"texture":0},"east":{"uv":[110,39,125,49],"texture":0},"south":{"uv":[164,39,188,49],"texture":0},"west":{"uv":[149,39,164,49],"texture":0},"up":{"uv":[149,39,125,24],"texture":0},"down":{"uv":[173,24,149,39],"texture":0}},"type":"cube","uuid":"330f2134-c66a-20e7-6cc4-916ac8ff9687"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[25,18.85369610014618,-57],"to":[37,22.85369610014618,-29],"autouv":0,"color":0,"rotation":[-72.50000000000006,0,0],"origin":[31,46.739062630967254,-43],"uv_offset":[80,195],"faces":{"north":{"uv":[108,223,120,227],"texture":0},"east":{"uv":[80,223,108,227],"texture":0},"south":{"uv":[148,223,160,227],"texture":0},"west":{"uv":[120,223,148,227],"texture":0},"up":{"uv":[120,223,108,195],"texture":0},"down":{"uv":[132,195,120,223],"texture":0}},"type":"cube","uuid":"025366c7-ed30-1f7a-d9f4-ec98ff5f4680"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[29.828427124746185,22,-53],"to":[33.82842712474621,102,-32.99999999999999],"autouv":0,"color":0,"rotation":[-72.50000000000006,0,0],"origin":[31,46.739062630967254,-43],"uv_offset":[194,6],"faces":{"north":{"uv":[214,26.000000000000007,218.00000000000003,106],"texture":0},"east":{"uv":[194,26.000000000000007,214,106],"texture":0},"south":{"uv":[238.00000000000006,26.000000000000007,242.00000000000006,106],"texture":0},"west":{"uv":[218.00000000000003,26.000000000000007,238.00000000000006,106],"texture":0},"up":{"uv":[218.00000000000003,26.000000000000007,214,6],"texture":0},"down":{"uv":[222.00000000000006,6,218.00000000000003,26.000000000000007],"texture":0}},"type":"cube","uuid":"4bedc183-266e-ca6d-88e7-d54d905a66ca"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[25,18.652369653999983,-33.48604503675055],"to":[37,19.652369653999983,-25.486045036750554],"autouv":0,"color":0,"rotation":[-27.49999999999996,0,0],"origin":[31,46.739062630967254,-43],"uv_offset":[188,190],"faces":{"north":{"uv":[196,198,208,199],"texture":0},"east":{"uv":[188,198,196,199],"texture":0},"south":{"uv":[216,198,228,199],"texture":0},"west":{"uv":[208,198,216,199],"texture":0},"up":{"uv":[208,198,196,190],"texture":0},"down":{"uv":[220,190,208,198],"texture":0}},"type":"cube","uuid":"104dc576-9319-efe1-0932-11c8cbe6eb45"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[25,15.61877518345517,-45.26304567838482],"to":[37,16.61877518345517,-41.26304567838482],"autouv":0,"color":0,"rotation":[-50.00000000000004,0,0],"origin":[31,46.739062630967254,-43],"uv_offset":[188,190],"faces":{"north":{"uv":[192,194,204,195],"texture":0},"east":{"uv":[188,194,192,195],"texture":0},"south":{"uv":[208,194,220,195],"texture":0},"west":{"uv":[204,194,208,195],"texture":0},"up":{"uv":[204,194,192,190],"texture":0},"down":{"uv":[216,190,204,194],"texture":0}},"type":"cube","uuid":"b22e2cc5-e4ad-6885-5716-f2e41446959a"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[25,15.61877518345517,-44.73695432161518],"to":[37,16.61877518345517,-40.73695432161518],"autouv":0,"color":0,"rotation":[-95.00000000000018,0,0],"origin":[31,46.739062630967254,-43],"uv_offset":[188,190],"faces":{"north":{"uv":[192,194,204,195],"texture":0},"east":{"uv":[188,194,192,195],"texture":0},"south":{"uv":[208,194,220,195],"texture":0},"west":{"uv":[204,194,208,195],"texture":0},"up":{"uv":[204,194,192,190],"texture":0},"down":{"uv":[216,190,204,194],"texture":0}},"type":"cube","uuid":"3e55c7bd-dbfe-4277-e324-02d2603410aa"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[25,18.652369653999983,-60.51395496324945],"to":[37,19.652369653999983,-52.51395496324945],"autouv":0,"color":0,"rotation":[-117.50000000000043,0,0],"origin":[31,46.739062630967254,-43],"uv_offset":[188,190],"faces":{"north":{"uv":[196,198,208,199],"texture":0},"east":{"uv":[188,198,196,199],"texture":0},"south":{"uv":[216,198,228,199],"texture":0},"west":{"uv":[208,198,216,199],"texture":0},"up":{"uv":[208,198,196,190],"texture":0},"down":{"uv":[220,190,208,198],"texture":0}},"type":"cube","uuid":"834ea381-9fbe-291a-7e97-a10e7e29b065"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[25,14.49453524593963,-50.476054745208664],"to":[37,19.49453524593963,-47.226054745208664],"autouv":0,"color":0,"rotation":[-72.50000000000006,0,0],"origin":[31,46.739062630967254,-43],"uv_offset":[188,190],"faces":{"north":{"uv":[191.25,193.25,203.25,198.25],"texture":0},"east":{"uv":[188,193.25,191.25,198.25],"texture":0},"south":{"uv":[206.5,193.25,218.5,198.25],"texture":0},"west":{"uv":[203.25,193.25,206.5,198.25],"texture":0},"up":{"uv":[203.25,193.25,191.25,190],"texture":0},"down":{"uv":[215.25,190,203.25,193.25],"texture":0}},"type":"cube","uuid":"3be93e7c-5c95-47ab-121b-8b9bdddafdb6"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[25,14.49453524593963,-47.773945254791336],"to":[37,19.49453524593963,-35.523945254791336],"autouv":0,"color":0,"rotation":[-72.50000000000006,0,0],"origin":[31,46.739062630967254,-43],"uv_offset":[188,190],"faces":{"north":{"uv":[200.25,202.25,212.25,207.25],"texture":0},"east":{"uv":[188,202.25,200.25,207.25],"texture":0},"south":{"uv":[224.5,202.25,236.5,207.25],"texture":0},"west":{"uv":[212.25,202.25,224.5,207.25],"texture":0},"up":{"uv":[212.25,202.25,200.25,190],"texture":0},"down":{"uv":[224.25,190,212.25,202.25],"texture":0}},"type":"cube","uuid":"a828037f-06d7-67e0-fafc-c5637aadf69a"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[25,18.29783610483875,-49.82960813580194],"to":[37,19.29783610483875,-30.82960813580194],"autouv":0,"color":0,"rotation":[-72.50000000000006,0,0],"origin":[31,46.739062630967254,-43],"uv_offset":[188,190],"faces":{"north":{"uv":[207,209,219,210],"texture":0},"east":{"uv":[188,209,207,210],"texture":0},"south":{"uv":[238,209,250,210],"texture":0},"west":{"uv":[219,209,238,210],"texture":0},"up":{"uv":[219,209,207,190],"texture":0},"down":{"uv":[231,190,219,209],"texture":0}},"type":"cube","uuid":"07911ba6-c12d-809c-7d50-4f28e5228558"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[25,29.225107667717793,-17.91330702303273],"to":[37,37.22510766771779,-15.91330702303273],"autouv":0,"color":0,"rotation":[-27.49999999999996,0,0],"origin":[31,46.739062630967254,-43],"uv_offset":[188,190],"faces":{"north":{"uv":[190,192,202,200],"texture":0},"east":{"uv":[188,192,190,200],"texture":0},"south":{"uv":[204,192,216,200],"texture":0},"west":{"uv":[202,192,204,200],"texture":0},"up":{"uv":[202,192,190,190],"texture":0},"down":{"uv":[214,190,202,192],"texture":0}},"type":"cube","uuid":"a7e620c0-41d6-b0da-7cad-99f0b0c08a96"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[25,19.652369653999983,-33.48604503675055],"to":[37,21.652369653999983,-25.486045036750554],"autouv":0,"color":0,"rotation":[-27.49999999999996,0,0],"origin":[31,46.739062630967254,-43],"uv_offset":[188,190],"faces":{"north":{"uv":[196,198,208,200],"texture":0},"east":{"uv":[188,198,196,200],"texture":0},"south":{"uv":[216,198,228,200],"texture":0},"west":{"uv":[208,198,216,200],"texture":0},"up":{"uv":[208,198,196,190],"texture":0},"down":{"uv":[220,190,208,198],"texture":0}},"type":"cube","uuid":"8e977582-7571-aeda-d71c-4153c6638a35"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[21.928932188134524,22,-52.071067811865476],"to":[25.928932188134524,106,-48.071067811865476],"autouv":0,"color":0,"rotation":[-77.43146693083919,-12.276586733323747,43.64293162839277],"origin":[31,46.739062630967254,-43],"uv_offset":[194,6],"faces":{"north":{"uv":[198,10,202,94],"texture":0},"east":{"uv":[194,10,198,94],"texture":0},"south":{"uv":[206,10,210,94],"texture":0},"west":{"uv":[202,10,206,94],"texture":0},"up":{"uv":[202,10,198,6],"texture":0},"down":{"uv":[206,6,202,10],"texture":0}},"type":"cube","uuid":"619c98b7-2ec7-774a-7b36-c2f3412fa8be"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[28.171572875253815,22,-53],"to":[32.171572875253815,102,-32.99999999999999],"autouv":0,"color":0,"rotation":[-72.50000000000006,0,0],"origin":[31,46.739062630967254,-43],"uv_offset":[194,6],"faces":{"north":{"uv":[214,26.000000000000007,218,106],"texture":0},"east":{"uv":[194,26.000000000000007,214,106],"texture":0},"south":{"uv":[238,26.000000000000007,242,106],"texture":0},"west":{"uv":[218,26.000000000000007,238,106],"texture":0},"up":{"uv":[218,26.000000000000007,214,6],"texture":0},"down":{"uv":[222,6,218,26.000000000000007],"texture":0}},"type":"cube","uuid":"2b488b68-50a6-e6c9-95df-77a7a81a9a75"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[36.071067811865476,22,-37.92893218813452],"to":[40.071067811865476,106,-33.92893218813452],"autouv":0,"color":0,"rotation":[-77.43146693083919,-12.276586733323747,43.64293162839277],"origin":[31,46.739062630967254,-43],"uv_offset":[194,6],"faces":{"north":{"uv":[198,10,202,94],"texture":0},"east":{"uv":[194,10,198,94],"texture":0},"south":{"uv":[206,10,210,94],"texture":0},"west":{"uv":[202,10,206,94],"texture":0},"up":{"uv":[202,10,198,6],"texture":0},"down":{"uv":[206,6,202,10],"texture":0}},"type":"cube","uuid":"d767e7f6-b7b6-67bb-59a9-c52fbba0396e"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[28.1419347979311,-12.367106558499017,-64.75011892307994],"to":[34.1419347979311,-6.367106558499017,-61.75011892307994],"autouv":0,"color":0,"rotation":[-95.00000000000018,0,0],"origin":[31,46.739062630967254,-43],"uv_offset":[211,117],"faces":{"north":{"uv":[214,120,220,126],"texture":0},"east":{"uv":[211,120,214,126],"texture":0},"south":{"uv":[223,120,229,126],"texture":0},"west":{"uv":[220,120,223,126],"texture":0},"up":{"uv":[220,120,214,117],"texture":0},"down":{"uv":[226,117,220,120],"texture":0}},"type":"cube","uuid":"fe333722-21eb-9a2f-093a-759c0563aa96"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[28.5,-9.5,-46],"to":[33.5,14.5,-40],"autouv":0,"color":0,"rotation":[-72.50000000000006,0,0],"origin":[31,46.739062630967254,-43],"uv_offset":[51,221],"faces":{"north":{"uv":[57,227,62,251],"texture":0},"east":{"uv":[51,227,57,251],"texture":0},"south":{"uv":[68,227,73,251],"texture":0},"west":{"uv":[62,227,68,251],"texture":0},"up":{"uv":[62,227,57,221],"texture":0},"down":{"uv":[67,221,62,227],"texture":0}},"type":"cube","uuid":"e2201b44-9560-85c7-d975-8253013f37ae"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[28.1419347979311,-12.367106558499017,-24.249881076920047],"to":[34.1419347979311,-6.367106558499017,-21.249881076920047],"autouv":0,"color":0,"rotation":[-50.00000000000004,0,0],"origin":[31,46.739062630967254,-43],"uv_offset":[211,117],"faces":{"north":{"uv":[214,120,220,126],"texture":0},"east":{"uv":[211,120,214,126],"texture":0},"south":{"uv":[223,120,229,126],"texture":0},"west":{"uv":[220,120,223,126],"texture":0},"up":{"uv":[220,120,214,117],"texture":0},"down":{"uv":[226,117,220,120],"texture":0}},"type":"cube","uuid":"ba59b7dd-7c40-d2c3-6514-28cbcd5cb744"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[9.38101173167972,-12.421422654143328,-46],"to":[12.38101173167972,-6.421422654143328,-39.99999999999999],"autouv":0,"color":0,"rotation":[-71.156409819509,21.405839620680375,7.0999907511489555],"origin":[31,46.739062630967254,-43],"uv_offset":[211,117],"faces":{"north":{"uv":[217,123,220,129],"texture":0},"east":{"uv":[211,123,217,129],"texture":0},"south":{"uv":[226,123,229,129],"texture":0},"west":{"uv":[220,123,226,129],"texture":0},"up":{"uv":[220,123,217,117],"texture":0},"down":{"uv":[223,117,220,123],"texture":0}},"type":"cube","uuid":"69150e38-1c37-5d5b-c4b7-6cd869b3ecbc"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[49.88124957783961,-12.312790462854707,-46],"to":[52.88124957783961,-6.312790462854707,-39.99999999999999],"autouv":0,"color":0,"rotation":[-71.156409819509,-21.405839620680375,-7.0999907511489555],"origin":[31,46.739062630967254,-43],"uv_offset":[211,117],"faces":{"north":{"uv":[217,123,220,129],"texture":0},"east":{"uv":[211,123,217,129],"texture":0},"south":{"uv":[226,123,229,129],"texture":0},"west":{"uv":[220,123,226,129],"texture":0},"up":{"uv":[220,123,217,117],"texture":0},"down":{"uv":[223,117,220,123],"texture":0}},"type":"cube","uuid":"4758d5ca-1ddc-1ff4-6fd5-77816684e1c7"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[25.845834203740566,-16.54327719506773,-46],"to":[30.345834203740566,-15.04327719506773,-39.99999999999999],"autouv":0,"color":0,"rotation":[-72.50000000000006,0,0],"origin":[31,46.739062630967254,-43],"uv_offset":[211,117],"faces":{"north":{"uv":[217,123,221.5,124.5],"texture":0},"east":{"uv":[211,123,217,124.5],"texture":0},"south":{"uv":[227.5,123,232,124.5],"texture":0},"west":{"uv":[221.5,123,227.5,124.5],"texture":0},"up":{"uv":[221.5,123,217,117],"texture":0},"down":{"uv":[226,117,221.5,123],"texture":0}},"type":"cube","uuid":"c27c1171-e90d-8fc4-b40b-265c382d0f70"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[25.938035392121634,-16.54327719506773,-46],"to":[36.438035392121634,-15.04327719506773,-39.99999999999999],"autouv":0,"color":0,"rotation":[-72.50000000000006,0,0],"origin":[31,46.739062630967254,-43],"uv_offset":[211,117],"faces":{"north":{"uv":[217,123,227.5,124.5],"texture":0},"east":{"uv":[211,123,217,124.5],"texture":0},"south":{"uv":[233.5,123,244,124.5],"texture":0},"west":{"uv":[227.5,123,233.5,124.5],"texture":0},"up":{"uv":[227.5,123,217,117],"texture":0},"down":{"uv":[238,117,227.5,123],"texture":0}},"type":"cube","uuid":"516fce4c-6039-95ab-7140-0b39a1ea0cee"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[28.1419347979311,-16.54327719506773,-42.20389940580946],"to":[34.1419347979311,-15.04327719506773,-37.70389940580946],"autouv":0,"color":0,"rotation":[-72.50000000000006,0,0],"origin":[31,46.739062630967254,-43],"uv_offset":[211,117],"faces":{"north":{"uv":[215.5,121.5,221.5,123],"texture":0},"east":{"uv":[211,121.5,215.5,123],"texture":0},"south":{"uv":[226,121.5,232,123],"texture":0},"west":{"uv":[221.5,121.5,226,123],"texture":0},"up":{"uv":[221.5,121.5,215.5,117],"texture":0},"down":{"uv":[227.5,117,221.5,121.5],"texture":0}},"type":"cube","uuid":"518cf19b-02ba-0def-6cbf-6fc27cdaeca3"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[28.1419347979311,-16.54327719506773,-48.296100594190534],"to":[34.1419347979311,-15.04327719506773,-43.796100594190534],"autouv":0,"color":0,"rotation":[-72.50000000000006,0,0],"origin":[31,46.739062630967254,-43],"uv_offset":[211,117],"faces":{"north":{"uv":[215.5,121.5,221.5,123],"texture":0},"east":{"uv":[211,121.5,215.5,123],"texture":0},"south":{"uv":[226,121.5,232,123],"texture":0},"west":{"uv":[221.5,121.5,226,123],"texture":0},"up":{"uv":[221.5,121.5,215.5,117],"texture":0},"down":{"uv":[227.5,117,221.5,121.5],"texture":0}},"type":"cube","uuid":"eb90958d-4539-65ca-5886-d8b08d20436b"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[29.828427124746185,90.64910866785385,-33.988599571120275],"to":[33.828427124746185,106.64910866785385,-29.988599571120275],"autouv":0,"color":0,"rotation":[-95.00000000000018,0,0],"origin":[31,46.739062630967254,-43],"uv_offset":[194,6],"faces":{"north":{"uv":[198,10,202,26],"texture":0},"east":{"uv":[194,10,198,26],"texture":0},"south":{"uv":[206,10,210,26],"texture":0},"west":{"uv":[202,10,206,26],"texture":0},"up":{"uv":[202,10,198,6],"texture":0},"down":{"uv":[206,6,202,10],"texture":0}},"type":"cube","uuid":"a14518fa-d08c-b8c7-5d51-3ed23e33485e"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[28.171572875253815,90.64910866785385,-33.988599571120275],"to":[32.171572875253815,106.64910866785385,-29.988599571120275],"autouv":0,"color":0,"rotation":[-95.00000000000018,0,0],"origin":[31,46.739062630967254,-43],"uv_offset":[194,6],"faces":{"north":{"uv":[198,10,202,26],"texture":0},"east":{"uv":[194,10,198,26],"texture":0},"south":{"uv":[206,10,210,26],"texture":0},"west":{"uv":[202,10,206,26],"texture":0},"up":{"uv":[202,10,198,6],"texture":0},"down":{"uv":[206,6,202,10],"texture":0}},"type":"cube","uuid":"be3ae4af-d07d-1a11-7592-a0313c02af43"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[28.17157292366028,105.53724160279569,-57.601133635040895],"to":[32.17157292366028,107.28724160279569,-43.6011336350409],"autouv":0,"color":0,"rotation":[-72.50000000000006,0,0],"origin":[31,46.739062630967254,-43],"uv_offset":[194,6],"faces":{"north":{"uv":[208,19.999999999999993,212,21.749999999999993],"texture":0},"east":{"uv":[194,19.999999999999993,208,21.749999999999993],"texture":0},"south":{"uv":[226,19.999999999999993,230,21.749999999999993],"texture":0},"west":{"uv":[212,19.999999999999993,226,21.749999999999993],"texture":0},"up":{"uv":[212,19.999999999999993,208,6],"texture":0},"down":{"uv":[216,6,212,19.999999999999993],"texture":0}},"type":"cube","uuid":"300f487e-32c0-3a46-96ec-5adbfe869b2b"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[29.82842707633972,105.53724160279569,-57.601133635040895],"to":[33.82842707633972,107.28724160279569,-43.6011336350409],"autouv":0,"color":0,"rotation":[-72.50000000000006,0,0],"origin":[31,46.739062630967254,-43],"uv_offset":[194,6],"faces":{"north":{"uv":[208,19.999999999999993,212,21.749999999999993],"texture":0},"east":{"uv":[194,19.999999999999993,208,21.749999999999993],"texture":0},"south":{"uv":[226,19.999999999999993,230,21.749999999999993],"texture":0},"west":{"uv":[212,19.999999999999993,226,21.749999999999993],"texture":0},"up":{"uv":[212,19.999999999999993,208,6],"texture":0},"down":{"uv":[216,6,212,19.999999999999993],"texture":0}},"type":"cube","uuid":"0808c81d-e503-87ad-6542-c1081d27f3a1"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[29.828427124746185,90.7844076928904,-55.684759687660616],"to":[33.828427124746185,106.7844076928904,-51.684759687660616],"autouv":0,"color":0,"rotation":[-50.00000000000004,0,0],"origin":[31,46.739062630967254,-43],"uv_offset":[194,6],"faces":{"north":{"uv":[198,10,202,26],"texture":0},"east":{"uv":[194,10,198,26],"texture":0},"south":{"uv":[206,10,210,26],"texture":0},"west":{"uv":[202,10,206,26],"texture":0},"up":{"uv":[202,10,198,6],"texture":0},"down":{"uv":[206,6,202,10],"texture":0}},"type":"cube","uuid":"3dfe7e41-f0d7-c8cc-a906-5fec06c6f678"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[28.171572875253815,90.7844076928904,-55.684759687660616],"to":[32.171572875253815,106.7844076928904,-51.684759687660616],"autouv":0,"color":0,"rotation":[-50.00000000000004,0,0],"origin":[31,46.739062630967254,-43],"uv_offset":[194,6],"faces":{"north":{"uv":[198,10,202,26],"texture":0},"east":{"uv":[194,10,198,26],"texture":0},"south":{"uv":[206,10,210,26],"texture":0},"west":{"uv":[202,10,206,26],"texture":0},"up":{"uv":[202,10,198,6],"texture":0},"down":{"uv":[206,6,202,10],"texture":0}},"type":"cube","uuid":"f36d4131-9129-426a-d520-cb81d0a042f3"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[28.17157292366028,105.53724160279569,-36.04531297436582],"to":[32.17157292366028,107.28724160279569,-28.04531297436582],"autouv":0,"color":0,"rotation":[-72.50000000000006,0,0],"origin":[31,46.739062630967254,-43],"uv_offset":[194,6],"faces":{"north":{"uv":[202,14,206,15.75],"texture":0},"east":{"uv":[194,14,202,15.75],"texture":0},"south":{"uv":[214,14,218,15.75],"texture":0},"west":{"uv":[206,14,214,15.75],"texture":0},"up":{"uv":[206,14,202,6],"texture":0},"down":{"uv":[210,6,206,14],"texture":0}},"type":"cube","uuid":"37646ebd-4b7f-637d-3ba4-d21abeaa9d0c"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[29.82842707633972,105.53724160279569,-36.04531297436582],"to":[33.82842707633972,107.28724160279569,-28.04531297436582],"autouv":0,"color":0,"rotation":[-72.50000000000006,0,0],"origin":[31,46.739062630967254,-43],"uv_offset":[194,6],"faces":{"north":{"uv":[202,14,206,15.75],"texture":0},"east":{"uv":[194,14,202,15.75],"texture":0},"south":{"uv":[214,14,218,15.75],"texture":0},"west":{"uv":[206,14,214,15.75],"texture":0},"up":{"uv":[206,14,202,6],"texture":0},"down":{"uv":[210,6,206,14],"texture":0}},"type":"cube","uuid":"a202fdc4-89e3-fc8b-a618-acc7d68221f6"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[29.82842707633972,101.53724160279569,-53.601133635040895],"to":[33.82842707633972,107.28724160279569,-31.601133635040902],"autouv":0,"color":0,"rotation":[-72.50000000000006,0,0],"origin":[31,46.739062630967254,-43],"uv_offset":[194,6],"faces":{"north":{"uv":[216,27.999999999999993,220,33.74999999999999],"texture":0},"east":{"uv":[194,27.999999999999993,216,33.74999999999999],"texture":0},"south":{"uv":[242,27.999999999999993,246,33.74999999999999],"texture":0},"west":{"uv":[220,27.999999999999993,242,33.74999999999999],"texture":0},"up":{"uv":[220,27.999999999999993,216,6],"texture":0},"down":{"uv":[224,6,220,27.999999999999993],"texture":0}},"type":"cube","uuid":"5de95a68-0789-a1aa-a241-907df45fe84a"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[28.17157292366028,101.53724160279569,-53.601133635040895],"to":[32.17157292366028,107.28724160279569,-31.601133635040902],"autouv":0,"color":0,"rotation":[-72.50000000000006,0,0],"origin":[31,46.739062630967254,-43],"uv_offset":[194,6],"faces":{"north":{"uv":[216,27.999999999999993,220,33.74999999999999],"texture":0},"east":{"uv":[194,27.999999999999993,216,33.74999999999999],"texture":0},"south":{"uv":[242,27.999999999999993,246,33.74999999999999],"texture":0},"west":{"uv":[220,27.999999999999993,242,33.74999999999999],"texture":0},"up":{"uv":[220,27.999999999999993,216,6],"texture":0},"down":{"uv":[224,6,220,27.999999999999993],"texture":0}},"type":"cube","uuid":"a7a23021-e4d6-d322-a7e9-b7d034b88572"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[29.82842707633972,95.87765117679226,-79.2394673331282],"to":[33.82842707633972,100.12765117679226,-75.2394673331282],"autouv":0,"color":0,"rotation":[-27.49999999999996,0,0],"origin":[31,46.739062630967254,-43],"uv_offset":[194,6],"faces":{"north":{"uv":[198,10,202,14.25],"texture":0},"east":{"uv":[194,10,198,14.25],"texture":0},"south":{"uv":[206,10,210,14.25],"texture":0},"west":{"uv":[202,10,206,14.25],"texture":0},"up":{"uv":[202,10,198,6],"texture":0},"down":{"uv":[206,6,202,10],"texture":0}},"type":"cube","uuid":"09513056-1e56-612f-b3f4-e3ffda5d5abc"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[29.82842707633972,105.18193060424551,-60.049973824344676],"to":[33.82842707633972,109.93193060424551,-56.049973824344676],"autouv":0,"color":0,"rotation":[-50.00000000000004,0,0],"origin":[31,46.739062630967254,-43],"uv_offset":[194,6],"faces":{"north":{"uv":[198,10,202,14.75],"texture":0},"east":{"uv":[194,10,198,14.75],"texture":0},"south":{"uv":[206,10,210,14.75],"texture":0},"west":{"uv":[202,10,206,14.75],"texture":0},"up":{"uv":[202,10,198,6],"texture":0},"down":{"uv":[206,6,202,10],"texture":0}},"type":"cube","uuid":"350db0cd-3f55-98cc-6ecd-62618e4ec316"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[28.17157292366028,95.87765117679226,-79.2394673331282],"to":[32.17157292366028,100.12765117679226,-75.2394673331282],"autouv":0,"color":0,"rotation":[-27.49999999999996,0,0],"origin":[31,46.739062630967254,-43],"uv_offset":[194,6],"faces":{"north":{"uv":[198,10,202,14.25],"texture":0},"east":{"uv":[194,10,198,14.25],"texture":0},"south":{"uv":[206,10,210,14.25],"texture":0},"west":{"uv":[202,10,206,14.25],"texture":0},"up":{"uv":[202,10,198,6],"texture":0},"down":{"uv":[206,6,202,10],"texture":0}},"type":"cube","uuid":"1fb5fd38-baa2-c247-dc3d-68b3cf885ca0"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[28.17157292366028,105.18193060424551,-60.049973824344676],"to":[32.17157292366028,109.93193060424551,-56.049973824344676],"autouv":0,"color":0,"rotation":[-50.00000000000004,0,0],"origin":[31,46.739062630967254,-43],"uv_offset":[194,6],"faces":{"north":{"uv":[198,10,202,14.75],"texture":0},"east":{"uv":[194,10,198,14.75],"texture":0},"south":{"uv":[206,10,210,14.75],"texture":0},"west":{"uv":[202,10,206,14.75],"texture":0},"up":{"uv":[202,10,198,6],"texture":0},"down":{"uv":[206,6,202,10],"texture":0}},"type":"cube","uuid":"94f21ec5-bffd-95df-e9b9-da9a01306c42"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[28.17157292366028,105.04663157920896,-29.62338543443623],"to":[32.17157292366028,109.79663157920896,-25.62338543443623],"autouv":0,"color":0,"rotation":[-95.00000000000018,0,0],"origin":[31,46.739062630967254,-43],"uv_offset":[194,6],"faces":{"north":{"uv":[198,10,202,14.75],"texture":0},"east":{"uv":[194,10,198,14.75],"texture":0},"south":{"uv":[206,10,210,14.75],"texture":0},"west":{"uv":[202,10,206,14.75],"texture":0},"up":{"uv":[202,10,198,6],"texture":0},"down":{"uv":[206,6,202,10],"texture":0}},"type":"cube","uuid":"b5f96a5c-c65e-c72e-2d05-edeee0ebb29f"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[28.17157292366028,96.62765117679226,-10.510532666871782],"to":[32.17157292366028,99.87765117679226,-6.510532666871782],"autouv":0,"color":0,"rotation":[-117.50000000000043,0,0],"origin":[31,46.739062630967254,-43],"uv_offset":[194,6],"faces":{"north":{"uv":[198,10,202,13.25],"texture":0},"east":{"uv":[194,10,198,13.25],"texture":0},"south":{"uv":[206,10,210,13.25],"texture":0},"west":{"uv":[202,10,206,13.25],"texture":0},"up":{"uv":[202,10,198,6],"texture":0},"down":{"uv":[206,6,202,10],"texture":0}},"type":"cube","uuid":"dabd4ad7-6a77-8a6b-6754-c31bb6c5c258"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[29.82842707633972,105.04663157920896,-29.62338543443623],"to":[33.82842707633972,109.79663157920896,-25.62338543443623],"autouv":0,"color":0,"rotation":[-95.00000000000018,0,0],"origin":[31,46.739062630967254,-43],"uv_offset":[194,6],"faces":{"north":{"uv":[198,10,202,14.75],"texture":0},"east":{"uv":[194,10,198,14.75],"texture":0},"south":{"uv":[206,10,210,14.75],"texture":0},"west":{"uv":[202,10,206,14.75],"texture":0},"up":{"uv":[202,10,198,6],"texture":0},"down":{"uv":[206,6,202,10],"texture":0}},"type":"cube","uuid":"02bb7e7a-a60f-803f-2592-f1d405383277"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[29.82842707633972,96.62765117679226,-10.510532666871782],"to":[33.82842707633972,99.87765117679226,-6.510532666871782],"autouv":0,"color":0,"rotation":[-117.50000000000043,0,0],"origin":[31,46.739062630967254,-43],"uv_offset":[194,6],"faces":{"north":{"uv":[198,10,202,13.25],"texture":0},"east":{"uv":[194,10,198,13.25],"texture":0},"south":{"uv":[206,10,210,13.25],"texture":0},"west":{"uv":[202,10,206,13.25],"texture":0},"up":{"uv":[202,10,198,6],"texture":0},"down":{"uv":[206,6,202,10],"texture":0}},"type":"cube","uuid":"94884c01-d254-4344-ffb1-db95f1b64ce2"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[29.82842707633972,106.89640245700224,-38.56925822915716],"to":[33.82842707633972,111.64640245700224,-34.56925822915716],"autouv":0,"color":0,"rotation":[-72.50000000000006,0,0],"origin":[31,46.739062630967254,-43],"uv_offset":[194,6],"faces":{"north":{"uv":[198,10,202,14.75],"texture":0},"east":{"uv":[194,10,198,14.75],"texture":0},"south":{"uv":[206,10,210,14.75],"texture":0},"west":{"uv":[202,10,206,14.75],"texture":0},"up":{"uv":[202,10,198,6],"texture":0},"down":{"uv":[206,6,202,10],"texture":0}},"type":"cube","uuid":"0a29c867-a4cc-22df-0d20-133dd1037b44"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[29.82842707633972,106.89640245700224,-51.07718838024957],"to":[33.82842707633972,111.64640245700224,-38.32718838024957],"autouv":0,"color":0,"rotation":[-72.50000000000006,0,0],"origin":[31,46.739062630967254,-43],"uv_offset":[194,6],"faces":{"north":{"uv":[206.75,18.75,210.75,23.5],"texture":0},"east":{"uv":[194,18.75,206.75,23.5],"texture":0},"south":{"uv":[223.5,18.75,227.5,23.5],"texture":0},"west":{"uv":[210.75,18.75,223.5,23.5],"texture":0},"up":{"uv":[210.75,18.75,206.75,6],"texture":0},"down":{"uv":[214.75,6,210.75,18.75],"texture":0}},"type":"cube","uuid":"7faca1a2-2c7d-2134-e115-22532dd41600"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[28.17157292366028,106.89640245700224,-51.07718838024957],"to":[32.17157292366028,111.64640245700224,-38.32718838024957],"autouv":0,"color":0,"rotation":[-72.50000000000006,0,0],"origin":[31,46.739062630967254,-43],"uv_offset":[194,6],"faces":{"north":{"uv":[206.75,18.75,210.75,23.5],"texture":0},"east":{"uv":[194,18.75,206.75,23.5],"texture":0},"south":{"uv":[223.5,18.75,227.5,23.5],"texture":0},"west":{"uv":[210.75,18.75,223.5,23.5],"texture":0},"up":{"uv":[210.75,18.75,206.75,6],"texture":0},"down":{"uv":[214.75,6,210.75,18.75],"texture":0}},"type":"cube","uuid":"f903a309-6801-dc83-0c7f-eef73dbd13bf"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[28.17157292366028,106.89640245700224,-38.56925822915716],"to":[32.17157292366028,111.64640245700224,-34.56925822915716],"autouv":0,"color":0,"rotation":[-72.50000000000006,0,0],"origin":[31,46.739062630967254,-43],"uv_offset":[194,6],"faces":{"north":{"uv":[198,10,202,14.75],"texture":0},"east":{"uv":[194,10,198,14.75],"texture":0},"south":{"uv":[206,10,210,14.75],"texture":0},"west":{"uv":[202,10,206,14.75],"texture":0},"up":{"uv":[202,10,198,6],"texture":0},"down":{"uv":[206,6,202,10],"texture":0}},"type":"cube","uuid":"520f59f9-3e22-d75a-d877-936e6d245870"}],"outliner":[{"name":"head","origin":[0.055180295862243156,77.74731229205595,-0.6779642442894636],"color":0,"uuid":"00f89d13-9555-be25-20fb-c14586fe6740","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["41d5a3f9-41c7-0fd8-4644-eeb67c307740","fb4ec91a-26fc-58a3-77a1-cec4c5d2190a"]},{"name":"body","origin":[0,0,0],"color":0,"uuid":"c7444aaf-7e0a-137c-092e-45e38ce391d6","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["7676c118-a5b4-f713-b7d0-e6ced3ab316b","2014d3b4-7d47-dffe-9696-737f7d292aa2","9b11258e-d98a-f3c9-7202-a3eab876b154","ee745d50-b492-dc2f-826b-08ffacbe3f99","330f2134-c66a-20e7-6cc4-916ac8ff9687","bddc5175-692e-305e-d03c-2d8e5257dcf3","1b4013bc-b04c-30d2-4c01-11a347426d32","2d74e89c-c4aa-dc23-3648-bb6e5447d893"]},{"name":"left_arm","origin":[-17,69,2],"color":0,"uuid":"6f24ab40-6281-66bd-0000-6ecd4e608121","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["e96dd76b-0b42-4a00-20c0-583ec2cf3f4d","371039cd-4329-7463-c495-535406842b7c","8d3a47a4-f2d4-ca79-93c5-eca45ab3576a"]},{"name":"right_arm","origin":[17,69,2],"color":0,"uuid":"5fb58943-6d60-27d3-fa92-d9e9f5abcc3c","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["985b2c88-35eb-5216-51d6-c2267f27bc76","03e676e6-683f-b3b8-5e82-b1eefa9e2dea","fc3f85c3-f075-186a-3d7e-79ee15f780c8","025366c7-ed30-1f7a-d9f4-ec98ff5f4680","4bedc183-266e-ca6d-88e7-d54d905a66ca","104dc576-9319-efe1-0932-11c8cbe6eb45","b22e2cc5-e4ad-6885-5716-f2e41446959a","3e55c7bd-dbfe-4277-e324-02d2603410aa","834ea381-9fbe-291a-7e97-a10e7e29b065","3be93e7c-5c95-47ab-121b-8b9bdddafdb6","a828037f-06d7-67e0-fafc-c5637aadf69a","07911ba6-c12d-809c-7d50-4f28e5228558","a7e620c0-41d6-b0da-7cad-99f0b0c08a96","8e977582-7571-aeda-d71c-4153c6638a35","619c98b7-2ec7-774a-7b36-c2f3412fa8be","2b488b68-50a6-e6c9-95df-77a7a81a9a75","d767e7f6-b7b6-67bb-59a9-c52fbba0396e","fe333722-21eb-9a2f-093a-759c0563aa96","e2201b44-9560-85c7-d975-8253013f37ae","ba59b7dd-7c40-d2c3-6514-28cbcd5cb744","69150e38-1c37-5d5b-c4b7-6cd869b3ecbc","4758d5ca-1ddc-1ff4-6fd5-77816684e1c7","c27c1171-e90d-8fc4-b40b-265c382d0f70","516fce4c-6039-95ab-7140-0b39a1ea0cee","518cf19b-02ba-0def-6cbf-6fc27cdaeca3","eb90958d-4539-65ca-5886-d8b08d20436b","a14518fa-d08c-b8c7-5d51-3ed23e33485e","be3ae4af-d07d-1a11-7592-a0313c02af43","300f487e-32c0-3a46-96ec-5adbfe869b2b","0808c81d-e503-87ad-6542-c1081d27f3a1","3dfe7e41-f0d7-c8cc-a906-5fec06c6f678","f36d4131-9129-426a-d520-cb81d0a042f3","37646ebd-4b7f-637d-3ba4-d21abeaa9d0c","a202fdc4-89e3-fc8b-a618-acc7d68221f6","5de95a68-0789-a1aa-a241-907df45fe84a","a7a23021-e4d6-d322-a7e9-b7d034b88572","09513056-1e56-612f-b3f4-e3ffda5d5abc","350db0cd-3f55-98cc-6ecd-62618e4ec316","1fb5fd38-baa2-c247-dc3d-68b3cf885ca0","94f21ec5-bffd-95df-e9b9-da9a01306c42","b5f96a5c-c65e-c72e-2d05-edeee0ebb29f","dabd4ad7-6a77-8a6b-6754-c31bb6c5c258","02bb7e7a-a60f-803f-2592-f1d405383277","94884c01-d254-4344-ffb1-db95f1b64ce2","0a29c867-a4cc-22df-0d20-133dd1037b44","7faca1a2-2c7d-2134-e115-22532dd41600","f903a309-6801-dc83-0c7f-eef73dbd13bf","520f59f9-3e22-d75a-d877-936e6d245870"]},{"name":"left_leg","origin":[-10.564548246017655,38.98262827466132,3.185157700763223],"color":0,"uuid":"04c71aa6-50b4-21e3-84ef-3b78075818c6","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["d799bf6f-8e41-267e-3dba-f937a673ffbb","93fb1f36-1603-ef64-45de-2c91ccc6153a","02a97070-4004-e8de-522f-bf37d303a56c"]},{"name":"right_leg","origin":[10.564548246017655,38.98262827466132,2.9768243674298933],"color":0,"uuid":"faef11a6-f232-4560-b7dc-354831bb5bc5","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["4002c3dd-8b6b-8f7a-d15d-8b737b366dae","2381cef3-3770-f9cd-e8ea-dd23d9b7cb62","0fe32a21-4d7a-985d-173c-9ed034c8e11d"]}],"textures":[{"path":"E:\\COSMERE MODELS\\koloss_large.png","name":"koloss_large.png","folder":"block","namespace":"","id":"0","particle":false,"render_mode":"default","render_sides":"auto","frame_time":1,"frame_order_type":"loop","frame_order":"","frame_interpolate":false,"visible":true,"mode":"bitmap","saved":true,"uuid":"230168b0-654d-5a37-8a5f-828b2a1e7ec2","relative_path":"../koloss_large.png","source":"data:image/png;base64,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"}]} \ No newline at end of file diff --git a/blockbench/hemalurgy/Koloss_medium.bbmodel b/blockbench/hemalurgy/Koloss_medium.bbmodel new file mode 100644 index 000000000..f77eda532 --- /dev/null +++ b/blockbench/hemalurgy/Koloss_medium.bbmodel @@ -0,0 +1 @@ +{"meta":{"format_version":"4.5","model_format":"modded_entity","box_uv":true},"name":"koloss_medium","model_identifier":"koloss_medium","modded_entity_version":"1.17","modded_entity_flip_y":true,"visible_box":[1,1,0],"variable_placeholders":"","variable_placeholder_buttons":[],"timeline_setups":[],"unhandled_root_fields":{},"resolution":{"width":256,"height":256},"elements":[{"name":"head","box_uv":true,"rescale":false,"locked":false,"from":[-5.998465824262638,49.36846474362234,-7.241735787639406],"to":[6.001534175737362,61.36846474362234,4.758264212360594],"autouv":0,"color":0,"origin":[0.9001578819353764,30.68423237181117,-26.51065593208846],"uv_offset":[170,52],"faces":{"north":{"uv":[182,64,194,76],"texture":0},"east":{"uv":[170,64,182,76],"texture":0},"south":{"uv":[206,64,218,76],"texture":0},"west":{"uv":[194,64,206,76],"texture":0},"up":{"uv":[194,64,182,52],"texture":0},"down":{"uv":[206,52,194,64],"texture":0}},"type":"cube","uuid":"d194f276-dce9-a59f-8c8a-84ba8e5c9ffa"},{"name":"body","box_uv":true,"rescale":false,"locked":false,"from":[-7.498465824262638,21.865448139802563,-4.333870687206875],"to":[7.501534175737362,27.865448139802563,7.666129312793125],"autouv":0,"color":0,"rotation":[-7.500000000000001,0,0],"origin":[0.9001578819353764,30.68423237181117,-26.51065593208846],"uv_offset":[42,27],"faces":{"north":{"uv":[54,39,69,45],"texture":0},"east":{"uv":[42,39,54,45],"texture":0},"south":{"uv":[81,39,96,45],"texture":0},"west":{"uv":[69,39,81,45],"texture":0},"up":{"uv":[69,39,54,27],"texture":0},"down":{"uv":[84,27,69,39],"texture":0}},"type":"cube","uuid":"976d3a1e-588c-88ca-a521-743bb7cf8ae4"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[12.001534175737362,36.86544813980257,-4.3338706872068755],"to":[20.001534175737362,45.86544813980257,7.6661293127931245],"autouv":0,"color":0,"rotation":[-7.500000000000001,0,0],"origin":[0.9001578819353764,30.68423237181117,-26.51065593208846],"uv_offset":[40,98],"faces":{"north":{"uv":[52,110,60,119],"texture":0},"east":{"uv":[40,110,52,119],"texture":0},"south":{"uv":[72,110,80,119],"texture":0},"west":{"uv":[60,110,72,119],"texture":0},"up":{"uv":[60,110,52,98],"texture":0},"down":{"uv":[68,98,60,110],"texture":0}},"type":"cube","uuid":"2bc0cf2d-91db-3635-bdd2-6e17faae92f1"},{"name":"left_arm","box_uv":true,"rescale":false,"locked":false,"from":[-19.998465824262638,36.86544813980257,-4.3338706872068755],"to":[-11.998465824262638,45.86544813980257,7.6661293127931245],"autouv":0,"color":0,"mirror_uv":true,"rotation":[-7.500000000000001,0,0],"origin":[0.9001578819353764,30.68423237181117,-26.51065593208846],"uv_offset":[0,95],"faces":{"north":{"uv":[20,107,12,116],"texture":0},"east":{"uv":[32,107,20,116],"texture":0},"south":{"uv":[40,107,32,116],"texture":0},"west":{"uv":[12,107,0,116],"texture":0},"up":{"uv":[12,107,20,95],"texture":0},"down":{"uv":[20,95,28,107],"texture":0}},"type":"cube","uuid":"2eeff88e-8f90-aafd-c5c7-9ccfcf889d29"},{"name":"right_leg","box_uv":true,"rescale":false,"locked":false,"from":[2.2515340326862137,14.944343130101423,-0.4511192697083031],"to":[10.251534032686214,26.444343130101423,8.548880730291696],"autouv":0,"color":0,"rotation":[7.5,0,0],"origin":[0.9001578819353764,30.68423237181117,-26.51065593208846],"uv_offset":[119,24],"faces":{"north":{"uv":[128,33,136,44.5],"texture":0},"east":{"uv":[119,33,128,44.5],"texture":0},"south":{"uv":[145,33,153,44.5],"texture":0},"west":{"uv":[136,33,145,44.5],"texture":0},"up":{"uv":[136,33,128,24],"texture":0},"down":{"uv":[144,24,136,33],"texture":0}},"type":"cube","uuid":"45a6fed0-efc3-b614-4abb-bf1ad5d2c25f"},{"name":"left_leg","box_uv":true,"rescale":false,"locked":false,"from":[-10.24846568121149,14.944343130101423,-0.4511192697083031],"to":[-2.24846568121149,26.444343130101423,8.548880730291696],"autouv":0,"color":0,"rotation":[7.5,0,0],"origin":[0.9001578819353764,30.68423237181117,-26.51065593208846],"uv_offset":[16,119],"faces":{"north":{"uv":[25,128,33,139.5],"texture":0},"east":{"uv":[16,128,25,139.5],"texture":0},"south":{"uv":[42,128,50,139.5],"texture":0},"west":{"uv":[33,128,42,139.5],"texture":0},"up":{"uv":[33,128,25,119],"texture":0},"down":{"uv":[41,119,33,128],"texture":0}},"type":"cube","uuid":"bee28484-6489-5926-dd52-1a87d8b49ef7"},{"name":"body","box_uv":true,"rescale":false,"locked":false,"from":[4.0813736499267685,19.582856078009193,-5.833870687206868],"to":[16.081373649926768,43.58285607800919,9.166129312793132],"autouv":0,"color":0,"rotation":[-5.61399923425755e-15,7.5,89.99999999999994],"origin":[0.9001578819353764,30.68423237181117,-26.51065593208846],"faces":{"north":{"uv":[15,15,27,39],"texture":0},"east":{"uv":[0,15,15,39],"texture":0},"south":{"uv":[42,15,54,39],"texture":0},"west":{"uv":[27,15,42,39],"texture":0},"up":{"uv":[27,15,15,0],"texture":0},"down":{"uv":[39,0,27,15],"texture":0}},"type":"cube","uuid":"63d7e6b3-7260-4478-7942-f3caed95f5ea"},{"name":"body","box_uv":true,"rescale":false,"locked":false,"from":[-1.9186263500732315,22.582856078009193,-4.333870687206868],"to":[4.0813736499267685,40.58285607800919,7.666129312793132],"autouv":0,"color":0,"rotation":[-5.61399923425755e-15,7.5,89.99999999999994],"origin":[0.9001578819353764,30.68423237181117,-26.51065593208846],"uv_offset":[52,68],"faces":{"north":{"uv":[64,80,70,98],"texture":0},"east":{"uv":[52,80,64,98],"texture":0},"south":{"uv":[82,80,88,98],"texture":0},"west":{"uv":[70,80,82,98],"texture":0},"up":{"uv":[70,80,64,68],"texture":0},"down":{"uv":[76,68,70,80],"texture":0}},"type":"cube","uuid":"41871ede-7c12-1c58-94a5-162b5c1205dd"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[15.115165119905335,26.406021488242374,-4.672395582256115],"to":[23.115165119905335,42.406021488242374,4.327604417743885],"autouv":0,"color":0,"rotation":[0,0,12.5],"origin":[0.9001578819353764,30.68423237181117,-26.51065593208847],"uv_offset":[105,113],"faces":{"north":{"uv":[114,122,122,138],"texture":0},"east":{"uv":[105,122,114,138],"texture":0},"south":{"uv":[131,122,139,138],"texture":0},"west":{"uv":[122,122,131,138],"texture":0},"up":{"uv":[122,122,114,113],"texture":0},"down":{"uv":[130,113,122,122],"texture":0}},"type":"cube","uuid":"4b4e0166-062a-6a38-6573-b56a6c06ac18"},{"name":"left_arm","box_uv":true,"rescale":false,"locked":false,"from":[-23.057642832123427,25.90880614518307,-4.672395582256115],"to":[-15.057642832123427,41.90880614518307,4.327604417743885],"autouv":0,"color":0,"mirror_uv":true,"rotation":[0,0,-12.5],"origin":[0.9001578819353764,30.68423237181117,-26.51065593208847],"uv_offset":[70,110],"faces":{"north":{"uv":[87,119,79,135],"texture":0},"east":{"uv":[96,119,87,135],"texture":0},"south":{"uv":[104,119,96,135],"texture":0},"west":{"uv":[79,119,70,135],"texture":0},"up":{"uv":[79,119,87,110],"texture":0},"down":{"uv":[87,110,95,119],"texture":0}},"type":"cube","uuid":"fa0bf149-9e07-a60a-2505-22ee9dd8b6d6"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[14.61516511990533,18.850299027765267,-5.134605522447849],"to":[23.615165119905328,33.85029902776527,4.865394477552151],"autouv":0,"color":0,"rotation":[12.5,-1.987846675914698e-16,12.5],"origin":[0.9001578819353764,30.68423237181117,-26.51065593208846],"uv_offset":[90,58],"faces":{"north":{"uv":[100,68,109,83],"texture":0},"east":{"uv":[90,68,100,83],"texture":0},"south":{"uv":[119,68,128,83],"texture":0},"west":{"uv":[109,68,119,83],"texture":0},"up":{"uv":[109,68,100,58],"texture":0},"down":{"uv":[118,58,109,68],"texture":0}},"type":"cube","uuid":"be696623-7d8a-226e-bc94-4c3e2a2d851a"},{"name":"left_arm","box_uv":true,"rescale":false,"locked":false,"from":[-23.557642832123417,18.405452101271095,-5.031432924217],"to":[-14.557642832123417,33.405452101271095,4.968567075783],"autouv":0,"color":0,"mirror_uv":true,"rotation":[12.5,0,-12.5],"origin":[0.9001578819353764,30.68423237181117,-26.51065593208846],"uv_offset":[90,8],"faces":{"north":{"uv":[109,18,100,33],"texture":0},"east":{"uv":[119,18,109,33],"texture":0},"south":{"uv":[128,18,119,33],"texture":0},"west":{"uv":[100,18,90,33],"texture":0},"up":{"uv":[100,18,109,8],"texture":0},"down":{"uv":[109,8,118,18],"texture":0}},"type":"cube","uuid":"7be88c18-4b1b-ff83-e282-20899553bbfb"},{"name":"left_leg","box_uv":true,"rescale":false,"locked":false,"from":[-10.87346568121149,0,-3.7348955822561116],"to":[-1.8734656812114898,12,7.265104417743888],"autouv":0,"color":0,"origin":[0.9001578819353764,30.68423237181117,-26.51065593208846],"uv_offset":[88,34],"faces":{"north":{"uv":[99,45,108,57],"texture":0},"east":{"uv":[88,45,99,57],"texture":0},"south":{"uv":[119,45,128,57],"texture":0},"west":{"uv":[108,45,119,57],"texture":0},"up":{"uv":[108,45,99,34],"texture":0},"down":{"uv":[117,34,108,45],"texture":0}},"type":"cube","uuid":"95e833ac-c665-8b84-7608-4b338997eb06"},{"name":"right_leg","box_uv":true,"rescale":false,"locked":false,"from":[1.8765340326862137,0,-3.7348955822561116],"to":[10.876534032686214,12,7.265104417743888],"autouv":0,"color":0,"origin":[0.9001578819353764,30.68423237181117,-26.51065593208846],"uv_offset":[77,87],"faces":{"north":{"uv":[88,98,97,110],"texture":0},"east":{"uv":[77,98,88,110],"texture":0},"south":{"uv":[108,98,117,110],"texture":0},"west":{"uv":[97,98,108,110],"texture":0},"up":{"uv":[97,98,88,87],"texture":0},"down":{"uv":[106,87,97,98],"texture":0}},"type":"cube","uuid":"0f0b3b24-509b-30aa-807d-d4fc25e26d87"},{"name":"body","box_uv":true,"rescale":false,"locked":false,"from":[-3.904715824262638,46.36846474362234,-5.741735787639406],"to":[4.095284175737362,49.36846474362234,0.2582642123605936],"autouv":0,"color":0,"origin":[0.9001578819353764,30.68423237181117,-26.51065593208846],"uv_offset":[54,18],"faces":{"north":{"uv":[60,24,68,27],"texture":0},"east":{"uv":[54,24,60,27],"texture":0},"south":{"uv":[74,24,82,27],"texture":0},"west":{"uv":[68,24,74,27],"texture":0},"up":{"uv":[68,24,60,18],"texture":0},"down":{"uv":[76,18,68,24],"texture":0}},"type":"cube","uuid":"b4f29649-610c-b1fd-72fa-d6b87d5ebb26"},{"name":"body","box_uv":true,"rescale":false,"locked":false,"from":[-7.498465824262638,20.231735829307183,-1.7582642123605936],"to":[7.501534175737362,23.231735829307183,7.241735787639406],"autouv":0,"color":0,"origin":[0.9001578819353764,30.68423237181117,-26.51065593208846],"uv_offset":[108,101],"faces":{"north":{"uv":[117,110,132,113],"texture":0},"east":{"uv":[108,110,117,113],"texture":0},"south":{"uv":[141,110,156,113],"texture":0},"west":{"uv":[132,110,141,113],"texture":0},"up":{"uv":[132,110,117,101],"texture":0},"down":{"uv":[147,101,132,110],"texture":0}},"type":"cube","uuid":"605c9f97-965a-78f3-a93f-821934f2e01c"},{"name":"body","box_uv":true,"rescale":false,"locked":false,"from":[4.447598807779935,30.5625,-7.797425579191334],"to":[6.4475988077799355,32.5625,7.202574420808666],"autouv":0,"color":0,"rotation":[-5.61399923425755e-15,7.5,89.99999999999994],"origin":[-0.29687500000000844,39.375,-2.445120440565141],"uv_offset":[118,45],"faces":{"north":{"uv":[133,60,135,62],"texture":0},"east":{"uv":[118,60,133,62],"texture":0},"south":{"uv":[150,60,152,62],"texture":0},"west":{"uv":[135,60,150,62],"texture":0},"up":{"uv":[135,60,133,45],"texture":0},"down":{"uv":[137,45,135,60],"texture":0}},"type":"cube","uuid":"c6df88f5-87c0-7395-8c1f-70b9a14ade7c"},{"name":"body","box_uv":true,"rescale":false,"locked":false,"from":[4.447598807779935,45.46875,-7.797425579191334],"to":[6.4475988077799355,47.46875,7.202574420808666],"autouv":0,"color":0,"rotation":[-5.61399923425755e-15,7.5,89.99999999999994],"origin":[-0.29687500000000844,39.375,-2.445120440565141],"uv_offset":[118,0],"faces":{"north":{"uv":[133,15,135,17],"texture":0},"east":{"uv":[118,15,133,17],"texture":0},"south":{"uv":[150,15,152,17],"texture":0},"west":{"uv":[135,15,150,17],"texture":0},"up":{"uv":[135,15,133,0],"texture":0},"down":{"uv":[137,0,135,15],"texture":0}},"type":"cube","uuid":"247bd545-99bc-2f73-6af0-39b31fa54650"},{"name":"body","box_uv":true,"rescale":false,"locked":false,"from":[4.947598807779935,38.0625,-8.266175579191334],"to":[6.947598807779935,40.0625,3.7338244208086664],"autouv":0,"color":0,"rotation":[-5.61399923425755e-15,7.5,89.99999999999994],"origin":[-0.29687500000000844,39.375,-2.445120440565141],"uv_offset":[66,135],"faces":{"north":{"uv":[78,147,80,149],"texture":0},"east":{"uv":[66,147,78,149],"texture":0},"south":{"uv":[92,147,94,149],"texture":0},"west":{"uv":[80,147,92,149],"texture":0},"up":{"uv":[80,147,78,135],"texture":0},"down":{"uv":[82,135,80,147],"texture":0}},"type":"cube","uuid":"2b7bf465-213b-e15b-34e7-308e1e3b1e74"},{"name":"body","box_uv":true,"rescale":false,"locked":false,"from":[-6.052401192220065,38.0625,-6.297425579191334],"to":[-4.052401192220065,40.0625,5.702574420808666],"autouv":0,"color":0,"rotation":[-5.61399923425755e-15,7.5,89.99999999999994],"origin":[-0.29687500000000844,39.375,-2.445120440565141],"uv_offset":[127,126],"faces":{"north":{"uv":[139,138,141,140],"texture":0},"east":{"uv":[127,138,139,140],"texture":0},"south":{"uv":[153,138,155,140],"texture":0},"west":{"uv":[141,138,153,140],"texture":0},"up":{"uv":[141,138,139,126],"texture":0},"down":{"uv":[143,126,141,138],"texture":0}},"type":"cube","uuid":"306d5818-47e5-e7c0-d70c-3fbd96b1cdbe"},{"name":"body","box_uv":true,"rescale":false,"locked":false,"from":[5.197598807779935,46.21875,6.452574420808666],"to":[6.697598807779935,47.71875,9.452574420808666],"autouv":0,"color":0,"rotation":[-5.61399923425755e-15,7.5,89.99999999999994],"origin":[-0.29687500000000844,39.375,-2.445120440565141],"uv_offset":[0,100],"faces":{"north":{"uv":[3,103,4.5,104.5],"texture":0},"east":{"uv":[0,103,3,104.5],"texture":0},"south":{"uv":[7.5,103,9,104.5],"texture":0},"west":{"uv":[4.5,103,7.5,104.5],"texture":0},"up":{"uv":[4.5,103,3,100],"texture":0},"down":{"uv":[6,100,4.5,103],"texture":0}},"type":"cube","uuid":"388bc174-8296-5843-0647-c45a56d51ed9"},{"name":"body","box_uv":true,"rescale":false,"locked":false,"from":[5.197598807779935,31.3125,-2.5474255791913336],"to":[6.697598807779935,32.8125,9.452574420808666],"autouv":0,"color":0,"rotation":[-5.61399923425755e-15,7.5,89.99999999999994],"origin":[-0.29687500000000844,39.375,-2.445120440565141],"uv_offset":[82,137],"faces":{"north":{"uv":[94,149,95.5,150.5],"texture":0},"east":{"uv":[82,149,94,150.5],"texture":0},"south":{"uv":[107.5,149,109,150.5],"texture":0},"west":{"uv":[95.5,149,107.5,150.5],"texture":0},"up":{"uv":[95.5,149,94,137],"texture":0},"down":{"uv":[97,137,95.5,149],"texture":0}},"type":"cube","uuid":"a9d17203-56f0-af3b-2fb3-18698078deec"},{"name":"body","box_uv":true,"rescale":false,"locked":false,"from":[5.603848807779935,38.3125,-2.2661755791913336],"to":[7.103848807779935,39.8125,9.733824420808666],"autouv":0,"color":0,"rotation":[-5.61399923425755e-15,7.5,89.99999999999994],"origin":[-0.29687500000000844,39.375,-2.445120440565141],"uv_offset":[137,45],"faces":{"north":{"uv":[149,57,150.5,58.5],"texture":0},"east":{"uv":[137,57,149,58.5],"texture":0},"south":{"uv":[162.5,57,164,58.5],"texture":0},"west":{"uv":[150.5,57,162.5,58.5],"texture":0},"up":{"uv":[150.5,57,149,45],"texture":0},"down":{"uv":[152,45,150.5,57],"texture":0}},"type":"cube","uuid":"baab068f-d468-1c70-3147-68aede7aec10"},{"name":"body","box_uv":true,"rescale":false,"locked":false,"from":[-5.302401192220062,38.3125,-4.797425579191334],"to":[-3.8024011922200613,39.8125,7.202574420808666],"autouv":0,"color":0,"rotation":[-5.61399923425755e-15,7.5,89.99999999999994],"origin":[-0.29687500000000844,39.375,-2.445120440565141],"uv_offset":[137,0],"faces":{"north":{"uv":[149,12,150.5,13.5],"texture":0},"east":{"uv":[137,12,149,13.5],"texture":0},"south":{"uv":[162.5,12,164,13.5],"texture":0},"west":{"uv":[150.5,12,162.5,13.5],"texture":0},"up":{"uv":[150.5,12,149,0],"texture":0},"down":{"uv":[152,0,150.5,12],"texture":0}},"type":"cube","uuid":"7daef661-7017-67fd-b6a3-81cfe5e2c6b8"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[17.625,13.850531456703512,-38.3703786364581],"to":[24.375,16.100531456703514,-22.620378636458092],"autouv":0,"color":0,"rotation":[-75.0000000000002,0,0],"origin":[0.8986237061980162,30.68423237181117,-27.275760349832353],"uv_offset":[54,0],"faces":{"north":{"uv":[69.75,15.750000000000007,76.5,18.000000000000007],"texture":0},"east":{"uv":[54,15.750000000000007,69.75,18.000000000000007],"texture":0},"south":{"uv":[92.25000000000001,15.750000000000007,99.00000000000001,18.000000000000007],"texture":0},"west":{"uv":[76.5,15.750000000000007,92.25000000000001,18.000000000000007],"texture":0},"up":{"uv":[76.5,15.750000000000007,69.75,0],"texture":0},"down":{"uv":[83.25,0,76.5,15.750000000000007],"texture":0}},"type":"cube","uuid":"17a26230-845b-4bb2-da4f-44e5d891079e"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[20.34099025766973,15.620327400371277,-36.1203786364581],"to":[22.590990257669738,60.62032740037127,-24.870378636458085],"autouv":0,"color":0,"rotation":[-75.0000000000002,0,0],"origin":[0.8986237061980162,30.68423237181117,-27.275760349832353],"uv_offset":[0,182],"faces":{"north":{"uv":[11.250000000000014,193.25,13.500000000000021,238.25],"texture":0},"east":{"uv":[0,193.25,11.250000000000014,238.25],"texture":0},"south":{"uv":[24.750000000000036,193.25,27.000000000000043,238.25],"texture":0},"west":{"uv":[13.500000000000021,193.25,24.750000000000036,238.25],"texture":0},"up":{"uv":[13.500000000000021,193.25,11.250000000000014,182],"texture":0},"down":{"uv":[15.750000000000028,182,13.500000000000021,193.25],"texture":0}},"type":"cube","uuid":"258dc0e7-707d-7995-b699-9e08ee49203b"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[17.625,11.796966199944455,-23.388887157292444],"to":[24.375,12.359466199944455,-18.888887157292444],"autouv":0,"color":0,"rotation":[-29.999999999999673,0,0],"origin":[0.8986237061980162,30.68423237181117,-27.275760349832353],"uv_offset":[117,95],"faces":{"north":{"uv":[121.5,99.5,128.25,100.0625],"texture":0},"east":{"uv":[117,99.5,121.5,100.0625],"texture":0},"south":{"uv":[132.75,99.5,139.5,100.0625],"texture":0},"west":{"uv":[128.25,99.5,132.75,100.0625],"texture":0},"up":{"uv":[128.25,99.5,121.5,95],"texture":0},"down":{"uv":[135,95,128.25,99.5],"texture":0}},"type":"cube","uuid":"229eb22f-a47e-3d7c-bae9-0a20820c3ab5"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[17.625,10.886194033220246,-31.083872660270544],"to":[24.375,11.448694033220246,-28.833872660270544],"autouv":0,"color":0,"rotation":[-52.49999999999994,0,0],"origin":[0.8986237061980162,30.68423237181117,-27.275760349832353],"uv_offset":[28,104],"faces":{"north":{"uv":[30.25,106.25,37,106.8125],"texture":0},"east":{"uv":[28,106.25,30.25,106.8125],"texture":0},"south":{"uv":[39.25,106.25,46,106.8125],"texture":0},"west":{"uv":[37,106.25,39.25,106.8125],"texture":0},"up":{"uv":[37,106.25,30.25,104],"texture":0},"down":{"uv":[43.75,104,37,106.25],"texture":0}},"type":"cube","uuid":"826885b4-ef2c-1b7e-2a6e-6866a73ace96"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[17.625,13.350383186882947,-31.6667269144193],"to":[24.375,13.912883186882947,-29.4167269144193],"autouv":0,"color":0,"rotation":[-97.50000000000016,0,0],"origin":[0.8986237061980162,30.68423237181117,-27.275760349832353],"uv_offset":[88,83],"faces":{"north":{"uv":[90.25,85.25,97,85.8125],"texture":0},"east":{"uv":[88,85.25,90.25,85.8125],"texture":0},"south":{"uv":[99.25,85.25,106,85.8125],"texture":0},"west":{"uv":[97,85.25,99.25,85.8125],"texture":0},"up":{"uv":[97,85.25,90.25,83],"texture":0},"down":{"uv":[103.75,83,97,85.25],"texture":0}},"type":"cube","uuid":"37711d72-0f5b-af12-c2ac-36c331356e92"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[17.625,16.35019404655501,-40.21586138898277],"to":[24.375,16.91269404655501,-35.71586138898277],"autouv":0,"color":0,"rotation":[-120.00000000000007,0,0],"origin":[0.8986237061980162,30.68423237181117,-27.275760349832353],"uv_offset":[103,1],"faces":{"north":{"uv":[107.5,5.5,114.25,6.0625],"texture":0},"east":{"uv":[103,5.5,107.5,6.0625],"texture":0},"south":{"uv":[118.75,5.5,125.5,6.0625],"texture":0},"west":{"uv":[114.25,5.5,118.75,6.0625],"texture":0},"up":{"uv":[114.25,5.5,107.5,1],"texture":0},"down":{"uv":[121,1,114.25,5.5],"texture":0}},"type":"cube","uuid":"3ba0e4d4-e83e-8a62-864d-5f964d9601ab"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[17.625,11.398503476212328,-34.70065943063797],"to":[24.375,14.211003476212328,-32.87253443063797],"autouv":0,"color":0,"rotation":[-75.0000000000002,0,0],"origin":[0.8986237061980162,30.68423237181117,-27.275760349832353],"uv_offset":[96,113],"faces":{"north":{"uv":[97.828125,114.828125,104.578125,117.640625],"texture":0},"east":{"uv":[96,114.828125,97.828125,117.640625],"texture":0},"south":{"uv":[106.40625,114.828125,113.15625,117.640625],"texture":0},"west":{"uv":[104.578125,114.828125,106.40625,117.640625],"texture":0},"up":{"uv":[104.578125,114.828125,97.828125,113],"texture":0},"down":{"uv":[111.328125,113,104.578125,114.828125],"texture":0}},"type":"cube","uuid":"1a728854-efd7-b23b-112c-b69b921f71ed"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[17.625,11.398503476212328,-33.180722842278215],"to":[24.375,14.211003476212328,-26.29009784227822],"autouv":0,"color":0,"rotation":[-75.0000000000002,0,0],"origin":[0.8986237061980162,30.68423237181117,-27.275760349832353],"uv_offset":[98,138],"faces":{"north":{"uv":[104.890625,144.890625,111.640625,147.703125],"texture":0},"east":{"uv":[98,144.890625,104.890625,147.703125],"texture":0},"south":{"uv":[118.53124999999999,144.890625,125.28124999999999,147.703125],"texture":0},"west":{"uv":[111.640625,144.890625,118.53124999999999,147.703125],"texture":0},"up":{"uv":[111.640625,144.890625,104.890625,138],"texture":0},"down":{"uv":[118.390625,138,111.640625,144.890625],"texture":0}},"type":"cube","uuid":"fe452b63-2d97-7934-cfa2-52826693aade"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[17.625,13.537860209343075,-34.33703321284668],"to":[24.375,14.100360209343075,-23.649533212846677],"autouv":0,"color":0,"rotation":[-75.0000000000002,0,0],"origin":[0.8986237061980162,30.68423237181117,-27.275760349832353],"uv_offset":[128,62],"faces":{"north":{"uv":[138.6875,72.6875,145.4375,73.25],"texture":0},"east":{"uv":[128,72.6875,138.6875,73.25],"texture":0},"south":{"uv":[156.125,72.6875,162.875,73.25],"texture":0},"west":{"uv":[145.4375,72.6875,156.125,73.25],"texture":0},"up":{"uv":[145.4375,72.6875,138.6875,62],"texture":0},"down":{"uv":[152.1875,62,145.4375,72.6875],"texture":0}},"type":"cube","uuid":"1f8a750a-3692-7626-e4bd-26b964587c03"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[17.625,17.744131332660732,-14.629222024576165],"to":[24.375,22.244131332660732,-13.504222024576165],"autouv":0,"color":0,"rotation":[-29.999999999999673,0,0],"origin":[0.8986237061980162,30.68423237181117,-27.275760349832353],"uv_offset":[84,6],"faces":{"north":{"uv":[85.125,7.125,91.875,11.625],"texture":0},"east":{"uv":[84,7.125,85.125,11.625],"texture":0},"south":{"uv":[93,7.125,99.75,11.625],"texture":0},"west":{"uv":[91.875,7.125,93,11.625],"texture":0},"up":{"uv":[91.875,7.125,85.125,6],"texture":0},"down":{"uv":[98.625,6,91.875,7.125],"texture":0}},"type":"cube","uuid":"13d2e97a-069a-f1ab-daff-62fb13199176"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[17.625,12.359466199944455,-23.388887157292444],"to":[24.375,13.484466199944455,-18.888887157292444],"autouv":0,"color":0,"rotation":[-29.999999999999673,0,0],"origin":[0.8986237061980162,30.68423237181117,-27.275760349832353],"uv_offset":[84,0],"faces":{"north":{"uv":[88.5,4.5,95.25,5.625],"texture":0},"east":{"uv":[84,4.5,88.5,5.625],"texture":0},"south":{"uv":[99.75,4.5,106.5,5.625],"texture":0},"west":{"uv":[95.25,4.5,99.75,5.625],"texture":0},"up":{"uv":[95.25,4.5,88.5,0],"texture":0},"down":{"uv":[102,0,95.25,4.5],"texture":0}},"type":"cube","uuid":"2347de5a-47c9-2a17-92bb-cb1bca3c2ba6"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[7.733353627248235,15.62032740037131,-48.8686694058419],"to":[9.983353627248242,62.87032740037131,-46.6186694058419],"autouv":0,"color":0,"rotation":[-79.27141687839112,-10.545290589499595,44.007027195636525],"origin":[0.8986237061980162,30.68423237181117,-27.275760349832353],"uv_offset":[0,188],"faces":{"north":{"uv":[2.25,190.25,4.500000000000007,237.5],"texture":0},"east":{"uv":[0,190.25,2.25,237.5],"texture":0},"south":{"uv":[6.750000000000007,190.25,9.000000000000014,237.5],"texture":0},"west":{"uv":[4.500000000000007,190.25,6.750000000000007,237.5],"texture":0},"up":{"uv":[4.500000000000007,190.25,2.25,188],"texture":0},"down":{"uv":[6.750000000000014,188,4.500000000000007,190.25],"texture":0}},"type":"cube","uuid":"ecbf2c50-3586-ac5a-5f11-e1494d4ad776"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[19.40900974233027,15.620327400371277,-36.1203786364581],"to":[21.65900974233027,60.62032740037127,-24.870378636458085],"autouv":0,"color":0,"rotation":[-75.0000000000002,0,0],"origin":[0.8986237061980162,30.68423237181117,-27.275760349832353],"uv_offset":[26,182],"faces":{"north":{"uv":[37.250000000000014,193.25,39.500000000000014,238.25],"texture":0},"east":{"uv":[26,193.25,37.250000000000014,238.25],"texture":0},"south":{"uv":[50.75000000000003,193.25,53.00000000000003,238.25],"texture":0},"west":{"uv":[39.500000000000014,193.25,50.75000000000003,238.25],"texture":0},"up":{"uv":[39.500000000000014,193.25,37.250000000000014,182],"texture":0},"down":{"uv":[41.750000000000014,182,39.500000000000014,193.25],"texture":0}},"type":"cube","uuid":"a770ae80-9356-dfc4-3bc9-703f0e986381"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[15.688304915596895,15.62032740037131,-40.91371811749323],"to":[17.938304915596895,62.87032740037131,-38.66371811749323],"autouv":0,"color":0,"rotation":[-79.27141687839112,-10.545290589499595,44.007027195636525],"origin":[0.8986237061980162,30.68423237181117,-27.275760349832353],"uv_offset":[8,188],"faces":{"north":{"uv":[10.25,190.25,12.5,237.5],"texture":0},"east":{"uv":[8,190.25,10.25,237.5],"texture":0},"south":{"uv":[14.75,190.25,17,237.5],"texture":0},"west":{"uv":[12.5,190.25,14.75,237.5],"texture":0},"up":{"uv":[12.5,190.25,10.25,188],"texture":0},"down":{"uv":[14.75,188,12.5,190.25],"texture":0}},"type":"cube","uuid":"88f10008-91ee-a7b4-0ba2-03fd0daea55c"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[19.392338323836242,-2.3916752929662737,-42.92413200274322],"to":[22.767338323836242,0.9833247070337263,-41.23663200274322],"autouv":0,"color":0,"rotation":[-97.50000000000016,0,0],"origin":[0.8986237061980162,30.68423237181117,-27.27576034983235],"uv_offset":[76,74],"faces":{"north":{"uv":[77.6875,75.6875,81.0625,79.0625],"texture":0},"east":{"uv":[76,75.6875,77.6875,79.0625],"texture":0},"south":{"uv":[82.75,75.6875,86.125,79.0625],"texture":0},"west":{"uv":[81.0625,75.6875,82.75,79.0625],"texture":0},"up":{"uv":[81.0625,75.6875,77.6875,74],"texture":0},"down":{"uv":[84.4375,74,81.0625,75.6875],"texture":0}},"type":"cube","uuid":"bb7262c9-0e45-9db0-25e5-38db15222c22"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[19.59375,-2.098422599628723,-32.1828786364581],"to":[22.40625,11.401577400371277,-28.8078786364581],"autouv":0,"color":0,"rotation":[-75.0000000000002,0,0],"origin":[0.8986237061980162,30.68423237181117,-27.275760349832353],"uv_offset":[47,138],"faces":{"north":{"uv":[50.375,141.375,53.1875,154.875],"texture":0},"east":{"uv":[47,141.375,50.375,154.875],"texture":0},"south":{"uv":[56.5625,141.375,59.375,154.875],"texture":0},"west":{"uv":[53.1875,141.375,56.5625,154.875],"texture":0},"up":{"uv":[53.1875,141.375,50.375,138],"texture":0},"down":{"uv":[56,138,53.1875,141.375],"texture":0}},"type":"cube","uuid":"cec3ece0-56d1-49d5-3d0f-7c0191195447"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[19.392338323836242,-4.855864446628977,-19.263967571946623],"to":[22.767338323836242,-1.4808644466289769,-17.576467571946623],"autouv":0,"color":0,"rotation":[-52.49999999999994,0,0],"origin":[0.8986237061980162,30.68423237181117,-27.27576034983235],"uv_offset":[52,72],"faces":{"north":{"uv":[53.6875,73.6875,57.0625,77.0625],"texture":0},"east":{"uv":[52,73.6875,53.6875,77.0625],"texture":0},"south":{"uv":[58.75,73.6875,62.125,77.0625],"texture":0},"west":{"uv":[57.0625,73.6875,58.75,77.0625],"texture":0},"up":{"uv":[57.0625,73.6875,53.6875,72],"texture":0},"down":{"uv":[60.4375,72,57.0625,73.6875],"texture":0}},"type":"cube","uuid":"be7570c4-3660-e155-9b83-bb5bc4d33f1c"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[6.869802617253271,-11.34678634897195,-32.182878636458085],"to":[8.55730261725327,-7.97178634897195,-28.807878636458078],"autouv":0,"color":0,"rotation":[-73.82646073889687,21.693651843382966,6.119100619287686],"origin":[0.8986237061980162,30.68423237181117,-27.27576034983235],"uv_offset":[30,58],"faces":{"north":{"uv":[33.37500000000001,61.37500000000001,35.06250000000001,64.75],"texture":0},"east":{"uv":[30,61.37500000000001,33.37500000000001,64.75],"texture":0},"south":{"uv":[38.437500000000014,61.37500000000001,40.125000000000014,64.75],"texture":0},"west":{"uv":[35.06250000000001,61.37500000000001,38.437500000000014,64.75],"texture":0},"up":{"uv":[35.06250000000001,61.37500000000001,33.37500000000001,58],"texture":0},"down":{"uv":[36.75000000000001,58,35.06250000000001,61.37500000000001],"texture":0}},"type":"cube","uuid":"b0079fd4-a91e-efcf-1726-3b04a64e5dc6"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[30.52996704804987,4.099246609376694,-32.182878636458085],"to":[32.21746704804987,7.474246609376694,-28.807878636458078],"autouv":0,"color":0,"rotation":[-73.82646073889687,-21.693651843382966,-6.119100619287686],"origin":[0.8986237061980162,30.68423237181117,-27.27576034983235],"uv_offset":[5,8],"faces":{"north":{"uv":[8.375000000000007,11.375000000000007,10.062500000000007,14.750000000000007],"texture":0},"east":{"uv":[5,11.375000000000007,8.375000000000007,14.750000000000007],"texture":0},"south":{"uv":[13.437500000000014,11.375000000000007,15.125000000000014,14.750000000000007],"texture":0},"west":{"uv":[10.062500000000007,11.375000000000007,13.437500000000014,14.750000000000007],"texture":0},"up":{"uv":[10.062500000000007,11.375000000000007,8.375000000000007,8],"texture":0},"down":{"uv":[11.750000000000007,8,10.062500000000007,11.375000000000007],"texture":0}},"type":"cube","uuid":"8c11759c-d19a-79f6-e468-158833faab19"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[18.100781739604066,-6.060266021854316,-32.18287863645809],"to":[20.632031739604066,-5.216516021854316,-28.807878636458085],"autouv":0,"color":0,"rotation":[-75.0000000000002,0,0],"origin":[0.8986237061980162,30.68423237181117,-27.27576034983235],"uv_offset":[52,49],"faces":{"north":{"uv":[55.37500000000001,52.37500000000001,57.90625000000001,53.21875000000001],"texture":0},"east":{"uv":[52,52.37500000000001,55.37500000000001,53.21875000000001],"texture":0},"south":{"uv":[61.281250000000014,52.37500000000001,63.812500000000014,53.21875000000001],"texture":0},"west":{"uv":[57.90625000000001,52.37500000000001,61.281250000000014,53.21875000000001],"texture":0},"up":{"uv":[57.90625000000001,52.37500000000001,55.37500000000001,49],"texture":0},"down":{"uv":[60.43750000000001,49,57.90625000000001,52.37500000000001],"texture":0}},"type":"cube","uuid":"7370ab32-5a7b-37a6-4a1e-5a4ce10a3d7f"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[18.152644908068417,-6.060266021854316,-32.18287863645809],"to":[24.058894908068417,-5.216516021854316,-28.807878636458085],"autouv":0,"color":0,"rotation":[-75.0000000000002,0,0],"origin":[0.8986237061980162,30.68423237181117,-27.27576034983235],"uv_offset":[41,45],"faces":{"north":{"uv":[44.37500000000001,48.37500000000001,50.28125000000001,49.21875000000001],"texture":0},"east":{"uv":[41,48.37500000000001,44.37500000000001,49.21875000000001],"texture":0},"south":{"uv":[53.656250000000014,48.37500000000001,59.562500000000014,49.21875000000001],"texture":0},"west":{"uv":[50.28125000000001,48.37500000000001,53.656250000000014,49.21875000000001],"texture":0},"up":{"uv":[50.28125000000001,48.37500000000001,44.37500000000001,45],"texture":0},"down":{"uv":[56.18750000000001,45,50.28125000000001,48.37500000000001],"texture":0}},"type":"cube","uuid":"a9d2fb92-a850-ac61-27cc-90dc02d31eb2"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[19.392338323836242,-6.060266021854316,-30.04757205222591],"to":[22.767338323836242,-5.216516021854316,-27.51632205222591],"autouv":0,"color":0,"rotation":[-75.0000000000002,0,0],"origin":[0.8986237061980162,30.68423237181117,-27.27576034983235],"uv_offset":[52,68],"faces":{"north":{"uv":[54.53125,70.53125,57.90625,71.375],"texture":0},"east":{"uv":[52,70.53125,54.53125,71.375],"texture":0},"south":{"uv":[60.4375,70.53125,63.8125,71.375],"texture":0},"west":{"uv":[57.90625,70.53125,60.4375,71.375],"texture":0},"up":{"uv":[57.90625,70.53125,54.53125,68],"texture":0},"down":{"uv":[61.28125,68,57.90625,70.53125],"texture":0}},"type":"cube","uuid":"77a886c7-bcd3-5ca4-8791-78f01fed9956"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[19.392338323836242,-6.060266021854316,-33.47443522069027],"to":[22.767338323836242,-5.216516021854316,-30.943185220690268],"autouv":0,"color":0,"rotation":[-75.0000000000002,0,0],"origin":[0.8986237061980162,30.68423237181117,-27.27576034983235],"uv_offset":[52,53],"faces":{"north":{"uv":[54.53125,55.53125,57.90625,56.375],"texture":0},"east":{"uv":[52,55.53125,54.53125,56.375],"texture":0},"south":{"uv":[60.4375,55.53125,63.8125,56.375],"texture":0},"west":{"uv":[57.90625,55.53125,60.4375,56.375],"texture":0},"up":{"uv":[57.90625,55.53125,54.53125,53],"texture":0},"down":{"uv":[61.28125,53,57.90625,55.53125],"texture":0}},"type":"cube","uuid":"dbdb3112-ddf8-ebaa-8662-b18bc5c01aa0"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[20.34099025766973,55.55494577185724,-25.62077736726591],"to":[22.59099025766973,64.55494577185726,-23.37077736726591],"autouv":0,"color":0,"rotation":[-97.50000000000016,0,0],"origin":[0.8986237061980162,30.68423237181117,-27.275760349832353],"uv_offset":[18,205],"faces":{"north":{"uv":[20.25,207.25,22.5,216.25000000000003],"texture":0},"east":{"uv":[18,207.25,20.25,216.25000000000003],"texture":0},"south":{"uv":[24.75,207.25,27,216.25000000000003],"texture":0},"west":{"uv":[22.5,207.25,24.75,216.25000000000003],"texture":0},"up":{"uv":[22.5,207.25,20.25,205],"texture":0},"down":{"uv":[24.75,205,22.5,207.25],"texture":0}},"type":"cube","uuid":"5bd13960-aa4b-d61c-f4ad-f912d9cde6e7"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[19.40900974233027,55.55494577185724,-25.62077736726591],"to":[21.65900974233027,64.55494577185726,-23.37077736726591],"autouv":0,"color":0,"rotation":[-97.50000000000016,0,0],"origin":[0.8986237061980162,30.68423237181117,-27.275760349832353],"uv_offset":[30,205],"faces":{"north":{"uv":[32.25,207.25,34.5,216.25000000000003],"texture":0},"east":{"uv":[30,207.25,32.25,216.25000000000003],"texture":0},"south":{"uv":[36.75,207.25,39,216.25000000000003],"texture":0},"west":{"uv":[34.5,207.25,36.75,216.25000000000003],"texture":0},"up":{"uv":[34.5,207.25,32.25,205],"texture":0},"down":{"uv":[36.75,205,34.5,207.25],"texture":0}},"type":"cube","uuid":"23413041-e9cd-080a-dca0-dbe07ff5bb4f"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[19.409009769558907,62.61002580194385,-38.708516306168605],"to":[21.659009769558907,63.59440080194385,-30.833516306168605],"autouv":0,"color":0,"rotation":[-75.0000000000002,0,0],"origin":[0.8986237061980162,30.68423237181117,-27.275760349832353],"uv_offset":[27,212],"faces":{"north":{"uv":[34.875,219.875,37.125,220.859375],"texture":0},"east":{"uv":[27,219.875,34.875,220.859375],"texture":0},"south":{"uv":[45,219.875,47.25,220.859375],"texture":0},"west":{"uv":[37.125,219.875,45,220.859375],"texture":0},"up":{"uv":[37.125,219.875,34.875,212],"texture":0},"down":{"uv":[39.375,212,37.125,219.875],"texture":0}},"type":"cube","uuid":"eefaa55a-0e13-48d5-3bf4-4f68da38712d"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[20.340990230441093,62.61002580194385,-38.708516306168605],"to":[22.590990230441093,63.59440080194385,-30.833516306168605],"autouv":0,"color":0,"rotation":[-75.0000000000002,0,0],"origin":[0.8986237061980162,30.68423237181117,-27.275760349832353],"uv_offset":[16,203],"faces":{"north":{"uv":[23.875,210.875,26.125,211.859375],"texture":0},"east":{"uv":[16,210.875,23.875,211.859375],"texture":0},"south":{"uv":[34,210.875,36.25,211.859375],"texture":0},"west":{"uv":[26.125,210.875,34,211.859375],"texture":0},"up":{"uv":[26.125,210.875,23.875,203],"texture":0},"down":{"uv":[28.375,203,26.125,210.875],"texture":0}},"type":"cube","uuid":"41500e85-d9dc-f86d-ff4e-b1b718f25d39"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[20.34099025766973,53.16686231977759,-36.946086790488195],"to":[22.59099025766973,62.16686231977759,-34.696086790488195],"autouv":0,"color":0,"rotation":[-52.49999999999994,0,0],"origin":[0.8986237061980162,30.68423237181117,-27.275760349832353],"uv_offset":[22,211],"faces":{"north":{"uv":[24.25,213.25,26.5,222.25],"texture":0},"east":{"uv":[22,213.25,24.25,222.25],"texture":0},"south":{"uv":[28.75,213.25,31,222.25],"texture":0},"west":{"uv":[26.5,213.25,28.75,222.25],"texture":0},"up":{"uv":[26.5,213.25,24.25,211],"texture":0},"down":{"uv":[28.75,211,26.5,213.25],"texture":0}},"type":"cube","uuid":"5b98df3e-d50a-866e-b32c-1a7882140d9d"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[19.409009742330262,53.16686231977759,-36.946086790488195],"to":[21.659009742330262,62.16686231977759,-34.696086790488195],"autouv":0,"color":0,"rotation":[-52.49999999999994,0,0],"origin":[0.8986237061980162,30.68423237181117,-27.275760349832353],"uv_offset":[14,214],"faces":{"north":{"uv":[16.25,216.25,18.5,225.25],"texture":0},"east":{"uv":[14,216.25,16.25,225.25],"texture":0},"south":{"uv":[20.75,216.25,23,225.25],"texture":0},"west":{"uv":[18.5,216.25,20.75,225.25],"texture":0},"up":{"uv":[18.5,216.25,16.25,214],"texture":0},"down":{"uv":[20.75,214,18.5,216.25],"texture":0}},"type":"cube","uuid":"f07be3c7-9aea-f63a-721c-cd21918ccf3c"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[19.409009769558907,62.61002580194385,-26.583367184538865],"to":[21.659009769558907,63.59440080194385,-22.083367184538865],"autouv":0,"color":0,"rotation":[-75.0000000000002,0,0],"origin":[0.8986237061980162,30.68423237181117,-27.275760349832353],"uv_offset":[28,203],"faces":{"north":{"uv":[32.5,207.5,34.75,208.484375],"texture":0},"east":{"uv":[28,207.5,32.5,208.484375],"texture":0},"south":{"uv":[39.25,207.5,41.5,208.484375],"texture":0},"west":{"uv":[34.75,207.5,39.25,208.484375],"texture":0},"up":{"uv":[34.75,207.5,32.5,203],"texture":0},"down":{"uv":[37,203,34.75,207.5],"texture":0}},"type":"cube","uuid":"5564874e-ae54-c561-32e7-710812eab04c"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[20.340990230441093,62.61002580194385,-26.583367184538865],"to":[22.590990230441093,63.59440080194385,-22.083367184538865],"autouv":0,"color":0,"rotation":[-75.0000000000002,0,0],"origin":[0.8986237061980162,30.68423237181117,-27.275760349832353],"uv_offset":[29,215],"faces":{"north":{"uv":[33.5,219.5,35.75,220.484375],"texture":0},"east":{"uv":[29,219.5,33.5,220.484375],"texture":0},"south":{"uv":[40.25,219.5,42.5,220.484375],"texture":0},"west":{"uv":[35.75,219.5,40.25,220.484375],"texture":0},"up":{"uv":[35.75,219.5,33.5,215],"texture":0},"down":{"uv":[38,215,35.75,219.5],"texture":0}},"type":"cube","uuid":"4eaeb6e0-9ed4-5ea9-5567-0dca532033ed"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[20.340990230441093,60.36002580194385,-36.458516306168605],"to":[22.590990230441093,63.59440080194385,-24.083516306168605],"autouv":0,"color":0,"rotation":[-75.0000000000002,0,0],"origin":[0.8986237061980162,30.68423237181117,-27.275760349832353],"uv_offset":[16,201],"faces":{"north":{"uv":[28.375,213.375,30.625,216.609375],"texture":0},"east":{"uv":[16,213.375,28.375,216.609375],"texture":0},"south":{"uv":[43,213.375,45.25,216.609375],"texture":0},"west":{"uv":[30.625,213.375,43,216.609375],"texture":0},"up":{"uv":[30.625,213.375,28.375,201],"texture":0},"down":{"uv":[32.875,201,30.625,213.375],"texture":0}},"type":"cube","uuid":"4172dd63-bb6d-d94c-8076-ca5b67ebb4c2"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[19.409009769558907,60.36002580194385,-36.458516306168605],"to":[21.659009769558907,63.59440080194385,-24.083516306168605],"autouv":0,"color":0,"rotation":[-75.0000000000002,0,0],"origin":[0.8986237061980162,30.68423237181117,-27.275760349832353],"uv_offset":[10,212],"faces":{"north":{"uv":[22.375,224.375,24.625,227.609375],"texture":0},"east":{"uv":[10,224.375,22.375,227.609375],"texture":0},"south":{"uv":[37,224.375,39.25,227.609375],"texture":0},"west":{"uv":[24.625,224.375,37,227.609375],"texture":0},"up":{"uv":[24.625,224.375,22.375,212],"texture":0},"down":{"uv":[26.875,212,24.625,224.375],"texture":0}},"type":"cube","uuid":"173917a1-ebeb-a209-2b6b-c0ccdd5aadaf"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[20.340990230441093,55.23618705651511,-49.12518719900487],"to":[22.590990230441093,57.62681205651511,-46.87518719900487],"autouv":0,"color":0,"rotation":[-29.999999999999673,0,0],"origin":[0.8986237061980162,30.68423237181117,-27.275760349832353],"uv_offset":[32,207],"faces":{"north":{"uv":[34.25,209.25,36.5,211.640625],"texture":0},"east":{"uv":[32,209.25,34.25,211.640625],"texture":0},"south":{"uv":[38.75,209.25,41,211.640625],"texture":0},"west":{"uv":[36.5,209.25,38.75,211.640625],"texture":0},"up":{"uv":[36.5,209.25,34.25,207],"texture":0},"down":{"uv":[38.75,207,36.5,209.25],"texture":0}},"type":"cube","uuid":"00a541ec-e99f-99af-6626-1f53a1f181cf"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[20.340990230441093,61.26546895741485,-39.40151974237298],"to":[22.590990230441093,63.93734395741485,-37.15151974237298],"autouv":0,"color":0,"rotation":[-52.49999999999994,0,0],"origin":[0.8986237061980162,30.68423237181117,-27.275760349832353],"uv_offset":[21,220],"faces":{"north":{"uv":[23.25,222.25,25.5,224.921875],"texture":0},"east":{"uv":[21,222.25,23.25,224.921875],"texture":0},"south":{"uv":[27.75,222.25,30,224.921875],"texture":0},"west":{"uv":[25.5,222.25,27.75,224.921875],"texture":0},"up":{"uv":[25.5,222.25,23.25,220],"texture":0},"down":{"uv":[27.75,220,25.5,222.25],"texture":0}},"type":"cube","uuid":"bebb1f1b-3762-803c-61c4-b431a9465766"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[19.409009769558907,55.23618705651511,-49.12518719900487],"to":[21.659009769558907,57.62681205651511,-46.87518719900487],"autouv":0,"color":0,"rotation":[-29.999999999999673,0,0],"origin":[0.8986237061980162,30.68423237181117,-27.275760349832353],"uv_offset":[24,207],"faces":{"north":{"uv":[26.25,209.25,28.5,211.640625],"texture":0},"east":{"uv":[24,209.25,26.25,211.640625],"texture":0},"south":{"uv":[30.75,209.25,33,211.640625],"texture":0},"west":{"uv":[28.5,209.25,30.75,211.640625],"texture":0},"up":{"uv":[28.5,209.25,26.25,207],"texture":0},"down":{"uv":[30.75,207,28.5,209.25],"texture":0}},"type":"cube","uuid":"a13714b6-e45c-0ecc-4924-b01f37d35e0e"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[19.409009769558907,61.26546895741485,-39.40151974237298],"to":[21.659009769558907,63.93734395741485,-37.15151974237298],"autouv":0,"color":0,"rotation":[-52.49999999999994,0,0],"origin":[0.8986237061980162,30.68423237181117,-27.275760349832353],"uv_offset":[34,207],"faces":{"north":{"uv":[36.25,209.25,38.5,211.921875],"texture":0},"east":{"uv":[34,209.25,36.25,211.921875],"texture":0},"south":{"uv":[40.75,209.25,43,211.921875],"texture":0},"west":{"uv":[38.5,209.25,40.75,211.921875],"texture":0},"up":{"uv":[38.5,209.25,36.25,207],"texture":0},"down":{"uv":[40.75,207,38.5,209.25],"texture":0}},"type":"cube","uuid":"330e31e5-1507-40ee-d723-f67290904ff1"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[19.409009769558907,63.653552409494495,-23.165344415381128],"to":[21.659009769558907,66.3254274094945,-20.915344415381128],"autouv":0,"color":0,"rotation":[-97.50000000000016,0,0],"origin":[0.8986237061980162,30.68423237181117,-27.275760349832353],"uv_offset":[31,209],"faces":{"north":{"uv":[33.25,211.25,35.5,213.921875],"texture":0},"east":{"uv":[31,211.25,33.25,213.921875],"texture":0},"south":{"uv":[37.75,211.25,40,213.921875],"texture":0},"west":{"uv":[35.5,211.25,37.75,213.921875],"texture":0},"up":{"uv":[35.5,211.25,33.25,209],"texture":0},"down":{"uv":[37.75,209,35.5,211.25],"texture":0}},"type":"cube","uuid":"389ecbec-a87b-27cb-ce4e-d2507ee6e8d1"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[19.409009769558907,60.21128990312566,-12.088936347270348],"to":[21.659009769558907,62.03941490312566,-9.838936347270348],"autouv":0,"color":0,"rotation":[-120.00000000000007,0,0],"origin":[0.8986237061980162,30.68423237181117,-27.275760349832353],"uv_offset":[32,213],"faces":{"north":{"uv":[34.25,215.25,36.5,217.078125],"texture":0},"east":{"uv":[32,215.25,34.25,217.078125],"texture":0},"south":{"uv":[38.75,215.25,41,217.078125],"texture":0},"west":{"uv":[36.5,215.25,38.75,217.078125],"texture":0},"up":{"uv":[36.5,215.25,34.25,213],"texture":0},"down":{"uv":[38.75,213,36.5,215.25],"texture":0}},"type":"cube","uuid":"c7dd57d7-7386-6b7f-db19-5b4c236993ab"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[20.340990230441093,63.653552409494495,-23.165344415381128],"to":[22.590990230441093,66.3254274094945,-20.915344415381128],"autouv":0,"color":0,"rotation":[-97.50000000000016,0,0],"origin":[0.8986237061980162,30.68423237181117,-27.275760349832353],"uv_offset":[26,218],"faces":{"north":{"uv":[28.25,220.25,30.5,222.921875],"texture":0},"east":{"uv":[26,220.25,28.25,222.921875],"texture":0},"south":{"uv":[32.75,220.25,35,222.921875],"texture":0},"west":{"uv":[30.5,220.25,32.75,222.921875],"texture":0},"up":{"uv":[30.5,220.25,28.25,218],"texture":0},"down":{"uv":[32.75,218,30.5,220.25],"texture":0}},"type":"cube","uuid":"a7b6bfbf-3445-13d2-be5a-bd0bcbbc10fd"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[20.340990230441093,60.21128990312566,-12.088936347270348],"to":[22.590990230441093,62.03941490312566,-9.838936347270348],"autouv":0,"color":0,"rotation":[-120.00000000000007,0,0],"origin":[0.8986237061980162,30.68423237181117,-27.275760349832353],"uv_offset":[28,206],"faces":{"north":{"uv":[30.25,208.25,32.5,210.078125],"texture":0},"east":{"uv":[28,208.25,30.25,210.078125],"texture":0},"south":{"uv":[34.75,208.25,37,210.078125],"texture":0},"west":{"uv":[32.5,208.25,34.75,210.078125],"texture":0},"up":{"uv":[32.5,208.25,30.25,206],"texture":0},"down":{"uv":[34.75,206,32.5,208.25],"texture":0}},"type":"cube","uuid":"dff5c867-8fbe-499c-584c-02591292e7d8"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[20.340990230441093,63.374553782435044,-28.003086390358988],"to":[22.590990230441093,66.04642878243504,-25.753086390358995],"autouv":0,"color":0,"rotation":[-75.0000000000002,0,0],"origin":[0.8986237061980162,30.68423237181117,-27.275760349832353],"uv_offset":[20,215],"faces":{"north":{"uv":[22.249999999999993,217.25,24.499999999999993,219.921875],"texture":0},"east":{"uv":[20,217.25,22.249999999999993,219.921875],"texture":0},"south":{"uv":[26.749999999999986,217.25,28.999999999999986,219.921875],"texture":0},"west":{"uv":[24.499999999999993,217.25,26.749999999999986,219.921875],"texture":0},"up":{"uv":[24.499999999999993,217.25,22.249999999999993,215],"texture":0},"down":{"uv":[26.749999999999993,215,24.499999999999993,217.25],"texture":0}},"type":"cube","uuid":"e0c38fa1-5448-ba9d-0239-f492366500a2"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[20.340990230441093,63.374553782435044,-35.038797100348475],"to":[22.590990230441093,66.04642878243504,-27.866922100348475],"autouv":0,"color":0,"rotation":[-75.0000000000002,0,0],"origin":[0.8986237061980162,30.68423237181117,-27.275760349832353],"uv_offset":[11,206],"faces":{"north":{"uv":[18.171875,213.171875,20.421875,215.84375],"texture":0},"east":{"uv":[11,213.171875,18.171875,215.84375],"texture":0},"south":{"uv":[27.59375,213.171875,29.84375,215.84375],"texture":0},"west":{"uv":[20.421875,213.171875,27.59375,215.84375],"texture":0},"up":{"uv":[20.421875,213.171875,18.171875,206],"texture":0},"down":{"uv":[22.671875,206,20.421875,213.171875],"texture":0}},"type":"cube","uuid":"eee7d465-8171-68f9-e0a1-ed5ce021eb65"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[19.409009769558907,63.374553782435044,-35.038797100348475],"to":[21.659009769558907,66.04642878243504,-27.866922100348475],"autouv":0,"color":0,"rotation":[-75.0000000000002,0,0],"origin":[0.8986237061980162,30.68423237181117,-27.275760349832353],"uv_offset":[20,208],"faces":{"north":{"uv":[27.171875,215.171875,29.421875,217.84375],"texture":0},"east":{"uv":[20,215.171875,27.171875,217.84375],"texture":0},"south":{"uv":[36.59375,215.171875,38.84375,217.84375],"texture":0},"west":{"uv":[29.421875,215.171875,36.59375,217.84375],"texture":0},"up":{"uv":[29.421875,215.171875,27.171875,208],"texture":0},"down":{"uv":[31.671875,208,29.421875,215.171875],"texture":0}},"type":"cube","uuid":"fdd5768a-16e7-9876-1346-32587c3c4c55"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[19.409009769558907,63.374553782435044,-28.003086390358988],"to":[21.659009769558907,66.04642878243504,-25.753086390358995],"autouv":0,"color":0,"rotation":[-75.0000000000002,0,0],"origin":[0.8986237061980162,30.68423237181117,-27.275760349832353],"uv_offset":[26,205],"faces":{"north":{"uv":[28.249999999999993,207.25,30.499999999999993,209.921875],"texture":0},"east":{"uv":[26,207.25,28.249999999999993,209.921875],"texture":0},"south":{"uv":[32.749999999999986,207.25,34.999999999999986,209.921875],"texture":0},"west":{"uv":[30.499999999999993,207.25,32.749999999999986,209.921875],"texture":0},"up":{"uv":[30.499999999999993,207.25,28.249999999999993,205],"texture":0},"down":{"uv":[32.74999999999999,205,30.499999999999993,207.25],"texture":0}},"type":"cube","uuid":"d7f9f887-0955-41e9-e517-ae78238785f6"},{"name":"body","box_uv":true,"rescale":false,"locked":false,"from":[-7.498465824262638,18.889921660870808,-3.019767662649583],"to":[7.501534175737362,21.889921660870808,5.980232337350417],"autouv":0,"color":0,"rotation":[-7.500000000000001,0,0],"origin":[0.9001578819353764,30.68423223183816,-26.510656996023584],"uv_offset":[106,83],"faces":{"north":{"uv":[115,92,130,95],"texture":0},"east":{"uv":[106,92,115,95],"texture":0},"south":{"uv":[139,92,154,95],"texture":0},"west":{"uv":[130,92,139,95],"texture":0},"up":{"uv":[130,92,115,83],"texture":0},"down":{"uv":[145,83,130,92],"texture":0}},"type":"cube","uuid":"35134933-3eb9-814b-9e54-f818ad706bed"},{"name":"body","box_uv":true,"rescale":false,"locked":false,"from":[-7.498465824262638,23.231735841981514,6.804234713541399],"to":[7.501534175737362,26.231735841981514,7.241734713541399],"autouv":0,"color":0,"origin":[0.9001578819353764,31.026046412948865,-25.249154619832602],"uv_offset":[114.5625,91.5625],"faces":{"north":{"uv":[115,92,130,95],"texture":0},"east":{"uv":[114.5625,92,115,95],"texture":0},"south":{"uv":[130.4375,92,145.4375,95],"texture":0},"west":{"uv":[130,92,130.4375,95],"texture":0},"up":{"uv":[130,92,115,91.5625],"texture":0},"down":{"uv":[145,91.5625,130,92],"texture":0}},"type":"cube","uuid":"ea7b72a1-1aaf-aa57-e84f-c9c879fd68dd"}],"outliner":[{"name":"body","origin":[0,39.375,0],"color":0,"uuid":"f5cc0ddf-a093-7e2d-932f-a6d24115aadd","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["c6df88f5-87c0-7395-8c1f-70b9a14ade7c","63d7e6b3-7260-4478-7942-f3caed95f5ea","306d5818-47e5-e7c0-d70c-3fbd96b1cdbe","7daef661-7017-67fd-b6a3-81cfe5e2c6b8","2b7bf465-213b-e15b-34e7-308e1e3b1e74","baab068f-d468-1c70-3147-68aede7aec10","247bd545-99bc-2f73-6af0-39b31fa54650","41871ede-7c12-1c58-94a5-162b5c1205dd","976d3a1e-588c-88ca-a521-743bb7cf8ae4","605c9f97-965a-78f3-a93f-821934f2e01c","35134933-3eb9-814b-9e54-f818ad706bed","ea7b72a1-1aaf-aa57-e84f-c9c879fd68dd","388bc174-8296-5843-0647-c45a56d51ed9","a9d17203-56f0-af3b-2fb3-18698078deec","b4f29649-610c-b1fd-72fa-d6b87d5ebb26"]},{"name":"right_arm","origin":[11.976350352956828,43.57247646486985,-1.2968661135275676],"color":0,"uuid":"2afcdb5b-7b4d-f296-7a8d-94e1f3cb92bf","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["4b4e0166-062a-6a38-6573-b56a6c06ac18","2bc0cf2d-91db-3635-bdd2-6e17faae92f1","be696623-7d8a-226e-bc94-4c3e2a2d851a","258dc0e7-707d-7995-b699-9e08ee49203b","17a26230-845b-4bb2-da4f-44e5d891079e","d7f9f887-0955-41e9-e517-ae78238785f6","fdd5768a-16e7-9876-1346-32587c3c4c55","eee7d465-8171-68f9-e0a1-ed5ce021eb65","e0c38fa1-5448-ba9d-0239-f492366500a2","dff5c867-8fbe-499c-584c-02591292e7d8","a7b6bfbf-3445-13d2-be5a-bd0bcbbc10fd","c7dd57d7-7386-6b7f-db19-5b4c236993ab","389ecbec-a87b-27cb-ce4e-d2507ee6e8d1","a13714b6-e45c-0ecc-4924-b01f37d35e0e","330e31e5-1507-40ee-d723-f67290904ff1","bebb1f1b-3762-803c-61c4-b431a9465766","00a541ec-e99f-99af-6626-1f53a1f181cf","173917a1-ebeb-a209-2b6b-c0ccdd5aadaf","4172dd63-bb6d-d94c-8076-ca5b67ebb4c2","4eaeb6e0-9ed4-5ea9-5567-0dca532033ed","5564874e-ae54-c561-32e7-710812eab04c","f07be3c7-9aea-f63a-721c-cd21918ccf3c","5b98df3e-d50a-866e-b32c-1a7882140d9d","41500e85-d9dc-f86d-ff4e-b1b718f25d39","eefaa55a-0e13-48d5-3bf4-4f68da38712d","5bd13960-aa4b-d61c-f4ad-f912d9cde6e7","23413041-e9cd-080a-dca0-dbe07ff5bb4f","dbdb3112-ddf8-ebaa-8662-b18bc5c01aa0","a9d2fb92-a850-ac61-27cc-90dc02d31eb2","77a886c7-bcd3-5ca4-8791-78f01fed9956","7370ab32-5a7b-37a6-4a1e-5a4ce10a3d7f","8c11759c-d19a-79f6-e468-158833faab19","b0079fd4-a91e-efcf-1726-3b04a64e5dc6","be7570c4-3660-e155-9b83-bb5bc4d33f1c","cec3ece0-56d1-49d5-3d0f-7c0191195447","bb7262c9-0e45-9db0-25e5-38db15222c22","a770ae80-9356-dfc4-3bc9-703f0e986381","88f10008-91ee-a7b4-0ba2-03fd0daea55c","ecbf2c50-3586-ac5a-5f11-e1494d4ad776","2347de5a-47c9-2a17-92bb-cb1bca3c2ba6","13d2e97a-069a-f1ab-daff-62fb13199176","1f8a750a-3692-7626-e4bd-26b964587c03","fe452b63-2d97-7934-cfa2-52826693aade","1a728854-efd7-b23b-112c-b69b921f71ed","3ba0e4d4-e83e-8a62-864d-5f964d9601ab","37711d72-0f5b-af12-c2ac-36c331356e92","826885b4-ef2c-1b7e-2a6e-6866a73ace96","229eb22f-a47e-3d7c-bae9-0a20820c3ab5"]},{"name":"left_arm","origin":[-11.973422471301722,43.58568328554926,-1.2953846139725633],"color":0,"uuid":"aa1d1499-2e10-d061-1a6c-a63880b2adea","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["2eeff88e-8f90-aafd-c5c7-9ccfcf889d29","7be88c18-4b1b-ff83-e282-20899553bbfb","fa0bf149-9e07-a60a-2505-22ee9dd8b6d6"]},{"name":"left_leg","origin":[-5.999999856948852,20.485234441967172,1.3485159600466043],"color":0,"uuid":"35fea13f-bbae-9803-2e8d-fd353b11b83e","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["bee28484-6489-5926-dd52-1a87d8b49ef7","95e833ac-c665-8b84-7608-4b338997eb06"]},{"name":"right_leg","origin":[5.999999856948852,20.485234441967165,1.2235159600466043],"color":0,"uuid":"231c984b-3e8b-da4d-f6d5-69dda46aca56","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["45a6fed0-efc3-b614-4abb-bf1ad5d2c25f","0f0b3b24-509b-30aa-807d-d4fc25e26d87"]},{"name":"head","origin":[0.046875,51.24346474362234,-2.7568402053832948],"color":0,"uuid":"b50566f4-f102-3832-555b-1804853df1d6","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["d194f276-dce9-a59f-8c8a-84ba8e5c9ffa"]}],"textures":[{"path":"E:\\COSMERE MODELS\\koloss_medium.png","name":"koloss_medium.png","folder":"block","namespace":"","id":"0","particle":false,"render_mode":"default","render_sides":"auto","frame_time":1,"frame_order_type":"loop","frame_order":"","frame_interpolate":false,"visible":true,"mode":"bitmap","saved":true,"uuid":"f1e033f6-cfd5-9090-4698-509df2513568","relative_path":"../koloss_medium.png","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAYAAABccqhmAAAAAXNSR0IArs4c6QAAFlpJREFUeF7tnU2oXsUZx9+bm6bhqv1ACVdi8CMuuioSXKTQlSgW2tAsLKGYQl3Ygl10UeiqyxKwiNBFxbaLKFUaUUuKFQraFFRsFxKkuI2lfuCFQim2Wo03N2XeZK5zT2bOPPNxzpmZ87sQbpJ3Zs7M/3me33lmzpx5VxYJP1/+xncvquq7dn9G1MrW5ifLctLyr5/+9Yqo4cyFjtx1x3JcMT/PvXBmR59j29pzw6HFsycfmmT8R48d3zH+0089EdQPs/7q2vpk44ix39zqBBm2K44CgA7mvqDWga9+h5QHADsBMBZMAMB8MJAEgNuO3i/OADQEpBmAKg8AAMB8QnGakSYDQJrOh6b/AODKKQAZwDRB0vJVAYDFurGBVqqjhK4nMAUo1ZL5+wUAZgAAm9t0FyvNMgAgf6CV2iIAyAwAFVixGUSuJwgSZ3v60dsWew8+bLU/AJAo2EYZAJAZAKlu0XdnTm1bWh8ASJWqv5wXAAfW13c8E357Y2O7jnoKwCJgXid4+6qD3gbNJyquwn/7w2Ne27rqAgCvCZop4HUSADCurUMBsHXRvmfpjecf99oWAIxr2xKv5nUSADCu2QDAuHrP/WpWAHSD3iXStYePiLf1zmUfQKpDhQKAKUCq4vOunwwAJZ9kHWCuOwFD3Uvvruyrp7R0pf66Xs4pQOgYUsqfOrHP+XQipV3q2hVIAsAXb/9a0N7+Ob4LEOp4AAAAhPpMSvlkAEgzAFUudBrQwrsAocaRAsDX7pRPAXx94/NyFFgJfaXXDGQ9DMkUIHXI0mtsfvTh8lI3fvxW6iVHr6/2AIQCwDUVuPXqC9H933jv3cX69fuj65sVQ18lznJRGhErsASA5BVd3aL5am/37t8NUsnzamlPpQBQ7SkIAIB4ACgNc0EAAEg9fJpy23eckACzBbarfi4IhPbvwAfnplE04apqe+7hH/3H24JE05QpgLcDFGhGgSUAQoKrmwl0swCbMhKH9Skq7eNyhXzzk4UrAA7d80D0aT+qj2efecS7d8I2FjPTco1VskYiKaPal5Tr08lnDz5vQ4GmAKCDX8HCtYAIAD51XADQRhCnjKIZAJjBrwQpDQC+05Mk+yS6mZR02tVXbqonLSlOS918CgCAQC1jpwCSqZY0bQ+ZdvnOagQAgQ7QWPHsANAOZ96thlwDsB04WmoG4FvHAACNRVcFw8kKANdjwKEAoNN+2x2xxClAKgBUfb3PQdrW7r1r2wuCXX+c8tzFCmJjFl2sEgCuu75pMV+A5Laub2qQYwowBACue+dMrxT/uulu5+c3X7PGmf+5HWnk9rIAoG9OmuPub7tz+ebBAODSl7D4MgAAMHLEFXa5JACYwa0cTaenrjHGBGUsQFR/xvwhAxhTba6VSwEAYFGyDzrmG402I7jWHpgC5HJZ2smpQBIAJHPu2Dt43yAlq+Ux2Ya+ZqkAUP2TjF1aTrXFFCBnONXXVhYAuF4mMhfrUqUxA3roRcAUaA2ZAUgDW1oOAKR6Zf31qwSAead23RGHygB8Ju8DgHSxNMcOP2l2Rgbgs2jbn2cFgOngU28EKg0Apb4MtG/j5V4P5zEgALAqINm7LplTS+X1BXT3XQBfeckag7RvZjlXBgAAYtSkztAKZM8AbB1OmVPr9nwBXToAhjakrf07bz+Y9OqztM/nN7cWq7tWln/0z4Wti9v/fvG1c1GvUEuvT7l4BZoBgF740o/pfMAYOwOQmCj0ODBXm/osBCkAzGCV9LNbxgYAswwAiFF1nDpNAcCEQMpGoJSMJeXtupIAoKCg/uzZvcvpiRocXQB0gQIAxgnmmKs0eyQYGcBiEZIBKOfppvA+AGiHYwoQE3pl1Gn2UFAyADkAlCuad231d/1/OgPQ/6fd1oQFU4AygjmmF80eCw4AwgBgg0A3A+hCQkPANQXQ0Pjz2TdZBIyJzhHqVGOY1LP89PqA/u3avZhLc9tuRdu0xHyJaKo1ANuYJWsAtimADRKsAeTyqvztzA4A3f0LKWsFPnOYjyZd1ykFAGaKr+7sEgDYFgFtTxQAgM9Tpvt8dgAYKwMwn0io4C8ZADr4fYuAtnJqnKwBTBfAqVeeFQCkQZkqqq5fUwbQHbMkA+ApQC5Pma4dADCg9lMDQLKmkGP4fdOoVx/cy9d95xB5oDYAwEDCSrONIdcAAMCAxm2k6WoAoPU+sL4evL/97Y2NycYpeQnIfELhO8dflZUsXEoODlFlbF+hdvTY8R0ah37Bp1l/dW2dg0MLhsVkgRGrSW0A8H0jkBn8WhNbgHe3J0tAIWnPtnUZAMR6Z331AMDANpOcBThlBgAABnaAwpuvAgAxd32X7mNPBwAAU4CSGTA7AChjjAkBAAAAAMBECrgyBwBwySCurwZjDWAih53gslVkALG6AID+JwYAINaz2qnXHABC1wuGzgaYAkwzBVCPXyWPTPXTldC3R33fBFULIgDAwHsEAAAAKBkGzQFAumFo6Du/7gcAmAYAkv0X0sevtgAmAygUa0wBPl3g86XALa8BAABZgDaXAQAAAKAUAAAzBYBs2JTqU6D7GHBMtU6d2Jfl7UEAILNaERlA96491vxcJtG4pSRv8EmOLbe95CMdCQDwK8UagF8jcQkA8KlUoQDYumh/OfKN5x+PhnvqRiCx4QcsSAYgEzfaSWTNy0oBgPwAuPXqCzLxLaU23nt3sX79/uj6ZsXQV4mzXJQ1ALGMkwEgZLFuTlOC0AzAZelbrtoUO4GtYC4IAIAkMwxeGQAMLnHYBaQAcKX++mopUwBbj4/cdUfwQSy6nedeODO6n7ETUOZ3oxtGd4sMwG4gACBzXF8pAOBT6NLnAECm02ilpADwdSjlKUCJGUBoQOsx+I5PCzlpSbUZWz63PXz2l34+GQCkHZxbuVAADPEUAAC4vQ4AzC0iRx4vAOifGpVyRw/NMFK+Nn5IFyQDGFLdiLZDAeC6RO6Uc+pFwNDn+maAfu6Vp5f/fP+r31r+Nv8de0cHABHOXWIV19t6yjF8X+YZMh7J8eDSo7zVdaV3Qt/pwVJQ1AqAL/z19OLnq3uWprrvK99c/j75l98vf//wwvnFvw8f3WFGqa4AIMT7Jyjre8qg9xYAgMdEWSAAuOTEsRkDU4CRIOAL/G43rj18xHo3zZ0B+FLY7rcW2+SSOl9IOalj1goAdUdnCuAOPhH9R4rdLJcpGQDS9NKXtuecAswBAH2OJYWlbiO2vFTnLEEQ0EhzAFBj90HA3Fo81hRAcjLQFGsABz44F+Auwxbt2zHoy6D6AvTkT76zOH9+c7Fnz+4dv7//s99Gp/SsAQzrC9Gt+4LfbFiBoCYAqMxg86MPl0OQZhPqsEvX68Pq/0sCwNOP3uY8CyAFAL/88bevCH4Fg/t++hsAEB1phVYcAwC+a9heXsqRAQwBgFJT0657sRNwmIBrbgrgC87UDOCfr/xObAnJVMNszDcFAADyzCc0RR+6vPRxq9i5MhUEAEfvv+j6Nl7b/wOATJ5HM0UoAAAAQHM+UERkVdKJ2Rs/dBFwygxA+ZRvmtBdDfc9UqxlDaCSeKqumwCgogwAAFQXX8V3uDkAHLrngaCTa1w7/iQn75rWda0j6Dus7zFW6TsBi/dkOhilAABwvPSTGwC1vwwU5V1UKl4BADAAADQ81G/9+AcAFB8Ls+wgAMgMABX05kKdngLEvkwTcqDmnbcfDJr+5PL4F18715wf5dKm9HaaM9yUawA6+M31AABQegjMu38AYPOTpQd0F/Fi1gBsAMi1116SCZABzDuYY0YPAC4DIEa8bh3bE4Uxn7MDgBxWnFcbAODynF1lADqAXY8G+1wjpk53005f+5K95ABgXsGbY7SzB4B+vVa9Nqv/bpsS+MR2TRl8r+2am3sAgE9lPs+tAAC4/H49AIh3LZ4CxGs3dc3ZA8BcuGMKEOeOACBOtxJqAYCBFwElRpY8cWANQKIkZUIVAAADPwaUGEQCgP1vvbQ4v7m12LN7V5G/V9ZWe4dKliDxhPHLAICMOwFt+wAkJpUAYN/Gy5Kmgstc2Lq4WN3ldgP1ufpxlfHV1x0CAMGmGaUCAMgIAL2iL31nX1s4BAC+gOv73FdX9ccW8N16kna63gsARonn4IsEA6Dvu+t8z8LNl2OCeyqsMOVW4G5A+/QIAYBkDcAlUex7CHtuOLR49uRDwT4iNBXFClAg2LiuAPPd9fTnQ++MKwEAIYGtswafLwAAn0J8HqNANgBoR576CCoAcKUbkAHEhMY86jQHgDGmKJJ3+807uw+KqmzIjkFfe91sAQDMI5hjRtkcAMaYoviO97Kl9a4jw0yj+QLbV1ZPs3K9gWhzKMlbiTGOSJ1pFNgBgKPHjm8fKLG6tm5dAOpLsX2LXurzKdcAcvVP8i0/U2YAQwKg7+u7pnFhrpqiAAAw1JMCqnQAXPfOmRSfsNaVPPrjUV922QdvEAAAAJGT+TYEqUYAgEjKogqtmGm/q2enTuzb/tZWpgCLxRwzAInXAgCJSmWVmQwAsSvTvkWoMQA1ZwD0TQUAQFnBLelNtqcAoRuBAMAl8/h0M40oKavKDLEGoPrhWwcAAJKQK6tMMABSn7Pf+PFbWRRwZQJkAMMAgDWALG5bXCMr0nTWvFu5RiG5Q4Xe0UIfGwKA4QDQ99Ygi4DFxbaoQ1EAcG1YGQIAZ595JChLGWsjUM6de8pSOdsbYgrgS/8BgCjeiiuUDQDKgfWhmhJnNjMKdR6f65XYUACkTlEkL91IsyYJECVltNdIyuZcA5AEvenRrAEUF9/eDhUPAN/uve6UwldeCifdroJaXx1fe+ZJwzZrSIBj1pMe/Z16LoDXc4yzA3RZPUXQ6wXq/7vTBiAhUXa8Ms0BQJpOSyX2AcXXzlQAUP3qC8Qch3y4xs6jQp9XlPN5kwDom1KESq8AkNLelADojtUWmKFpfqh+3fJkAKkK5q0PADx6jgGA2D0Rquv6cajvHITcIMrrhrQ2lQLZAGAu6vnmxaGLWqHtpdyxu4YYGgC59kW8+/kv9foQAJgqxMq+bhQAXEOSrFKbdaXlAYDfiQCAXyNKXKlA0DP2KQSUPnIzMxAygCstRQYwhfeWf80mASDNGCTmGfopAFMAiRUoM5QCzQHAF7ChcChtH4DLEVgEHCpE2m53FAD4Nq/866a7nSrffM3aJGfT+w7+9K1f+D6XLJqGfI8CAGg7UIcaHQBwKAsAhnI52i1JAQDgsIZv8dF3h/d9Ls0ApG9DkgGUFFb19AUAVACA2rKRetyfngIAALBUwJexhKxHEFb1KAAAKgBAbdORetyfngIAACDOAKTrEYRVPQoAAAAgBsBNn/3fDrVOP/XEKP5TTzjV19NRDFjjPoCS0u5S+gIA6gtwX4+TAeALbl8HUj9X77OrPy+9/vfksZh9KSXoVNpdSl8AQKq3llc/OWiGBIDrKGrzEAsAIFvBV64n+fbhvgNfAUB5AZzao1EAcH5za3k2nHk+nOt0GjWgvnJdKAwJAFfQ2A4w1YHT95lprG65buDpz8kAUl2c+n0KZAGA70sjQgDgO3u+O5ihACDdfGODhBncqXdddWgoUwCCeCgFsgGgG7jmHb4LAB8wQgY7JABC+jFUWQAwlLK0qxTIBgAtp3k0tP67NANQbfSdVuuaNgyxCKgygBJcRAOghOkIawAleETePmQBgK9LNgDY6tgyg+6Cn22NoHUAlDIdueWqzR1mYx+Az/PL/zw7AGxn0UsBoOUKOap6qCmAz3RHjx3fkSEMGQylZCMAwOcV9X2eDQB98/oh1gA0JADAeE4HAMbTeqwrZQNAX4dD1gAkAx9jH4CvH6kZgFl/dW2999QjMgCfNfg8VoFkAPR9GWdsp2z1+h6nvfrg3sWf/vhf6+W+/oNfJY/R1vBYAMjxpSEuO3TH4Cr35ge7lx+tvf+Pxfr1+6PNOuQ0KbpTM6+YHBwA4JIHhTq3NAMoAQBmjGy89240BEI1mnlsjjL8ZACM0kvBRZ7/xfesj+3IAATiUWS2ClQNAFfQ91kzFxBamALM1usZ+LYCACDSGQBApHBUK0oBABBpDgAQKRzVilIAAESaIzcAzr9zNrIncdX014rH1aZWKwoAgEhLAoBI4ahWlAIAINIcACBSOKoVpQAAuGwO6aYYbb2U5+FdD1A7AZkCFBUXs+kMAIgEgKqWCwK+rcCz8UYGOroCACCT5KEZRMplT53Yt9h78OGqbZcyfurmU6BqJ5pyI1DXBAAgn1PS0ngKAIDxtOZKKFCcAgCgOJPQIRQYTwEAMJ7WXAkFilMAABRnEjqEAuMpUDUAxpOJK6FAmwoAgDbtyqhQQKQAABDJRCEUaFMBANCmXRkVCogUAAAimSiEAm0qAADatCujQgGRAgBAJBOFUKBNBQBAm3ZlVCggUgAAiGSiEAq0qQAAaNOujAoFRAoAAJFMFEKBNhUAAG3alVGhgEgBACCSiUIo0KYCAKBNuzIqFBApAABEMlEIBdpUAAC0aVdGhQIiBQCASCYKoUCbCgCANu3KqFBApAAAEMlEIRRoUwEA0KZdGRUKiBQAACKZKIQCbSoAANq0K6NCAZECAEAkE4VQoE0FAECbdmVUKCBSAACIZKIQCrSpAABo066MCgVECgAAkUwUQoE2FQgCwL3H773YleHJJ54MakMi41jXkfSFMijQsgJBwTtWYI51nZYNy9hQQKIAAJCoRBkUaFQBANCoYRkWCkgUAAASlSiDAo0qAAAaNSzDQgGJAtsA8C282T5XF+ApgERmyqBAmQoAgDLtQq9QYBQFVlx39pCr584CfNlISN8oiwIo4FYAAOAdKDBjBQDAjI3P0FEgCwBKlDH3tKTEMdInFEhVAACkKkh9FKhYAQBQsfHoOgqkKgAAUhWkPgpUrAAAqNh4dB0FUhUAAKkKUh8FKlYAAFRsPLqOAqkKAIBUBamPAhUrAAAqNh5dR4FUBQBAqoLUR4GKFQAAFRuPrqNAqgIAIFVB6qNAxQoAgIqNR9dRIFUBAJCqIPVRoGIFAEDFxqPrKJCqAABIVZD6KFCxAgCgYuPRdRRIVQAApCpIfRSoWAEAULHx6DoKpCoAAFIVpD4KVKwAAKjYeHQdBVIVAACpClIfBSpWAABUbDy6jgKpCgCAVAWpjwIVKwAAKjYeXUeBVAUAQKqC1EeBihUAABUbj66jQKoCACBVQeqjQMUKAICKjUfXUSBVAQCQqiD1UaBiBQBAxcaj6yiQqgAASFWQ+ihQsQIAoGLj0XUUSFUAAKQqSH0UqFgBAFCx8eg6CqQqAABSFaQ+ClSsAACo2Hh0HQVSFQAAqQpSHwUqVgAAVGw8uo4CqQoAgFQFqY8CFSsAACo2Hl1HgVQFAECqgtRHgYoVAAAVG4+uo0CqAgAgVUHqo0DFCgCAio1H11EgVQEAkKog9VGgYgVWKu47XUcBFEhUAAAkCkh1FKhZAQBQs/XoOwokKgAAEgWkOgrUrAAAqNl69B0FEhUAAIkCUh0FalYAANRsPfqOAokKAIBEAamOAjUrAABqth59R4FEBQBAooBUR4GaFQAANVuPvqNAogIAIFFAqqNAzQoAgJqtR99RIFEBAJAoINVRoGYFAEDN1qPvKJCoAABIFJDqKFCzAgCgZuvRdxRIVOD/4gfULa80ra8AAAAASUVORK5CYII="}],"animations":[{"uuid":"9f4136cb-ac1c-3038-c07e-22524c896b9d","name":"Walk","loop":"once","override":false,"length":1,"snapping":24,"selected":false,"anim_time_update":"","blend_weight":"","start_delay":"","loop_delay":""}]} \ No newline at end of file diff --git a/blockbench/hemalurgy/koloss_small.bbmodel b/blockbench/hemalurgy/koloss_small.bbmodel new file mode 100644 index 000000000..8b124f02a --- /dev/null +++ b/blockbench/hemalurgy/koloss_small.bbmodel @@ -0,0 +1 @@ +{"meta":{"format_version":"4.5","model_format":"modded_entity","box_uv":true},"name":"koloss_small","model_identifier":"","modded_entity_version":"1.17","modded_entity_flip_y":true,"visible_box":[1,1,0],"variable_placeholders":"","variable_placeholder_buttons":[],"timeline_setups":[],"unhandled_root_fields":{},"resolution":{"width":128,"height":128},"elements":[{"name":"head","box_uv":true,"rescale":false,"locked":false,"from":[-4,24.5,-4],"to":[4,32.5,4],"autouv":0,"color":0,"origin":[0,0,0],"uv_offset":[32,25],"faces":{"north":{"uv":[40,33,48,41],"texture":0},"east":{"uv":[32,33,40,41],"texture":0},"south":{"uv":[56,33,64,41],"texture":0},"west":{"uv":[48,33,56,41],"texture":0},"up":{"uv":[48,33,40,25],"texture":0},"down":{"uv":[56,25,48,33],"texture":0}},"type":"cube","uuid":"73ff7e96-a763-6f28-f273-65b7f95c4af8"},{"name":"body","box_uv":true,"rescale":false,"locked":false,"from":[-7.5,19.5,-3],"to":[7.5,24.5,3],"autouv":0,"color":0,"origin":[0,-21.5,0],"uv_offset":[0,11],"faces":{"north":{"uv":[6,17,21,22],"texture":0},"east":{"uv":[0,17,6,22],"texture":0},"south":{"uv":[27,17,42,22],"texture":0},"west":{"uv":[21,17,27,22],"texture":0},"up":{"uv":[21,17,6,11],"texture":0},"down":{"uv":[36,11,21,17],"texture":0}},"type":"cube","uuid":"6495648a-b4e9-1566-b610-b59a6a6af6c3"},{"name":"left_arm","box_uv":true,"rescale":false,"locked":false,"from":[-11.875,12.5,-2.5],"to":[-7.875,22.5,2.5],"autouv":0,"color":0,"rotation":[0,0,-12.5],"origin":[-14.125,16.5,0],"uv_offset":[51,41],"faces":{"north":{"uv":[56,46,60,56],"texture":0},"east":{"uv":[51,46,56,56],"texture":0},"south":{"uv":[65,46,69,56],"texture":0},"west":{"uv":[60,46,65,56],"texture":0},"up":{"uv":[60,46,56,41],"texture":0},"down":{"uv":[64,41,60,46],"texture":0}},"type":"cube","uuid":"6c7de089-94c9-a0d1-90d0-024bcc0092d1"},{"name":"body","box_uv":true,"rescale":false,"locked":false,"from":[-6.5,15.5,-3.5],"to":[6.5,19.5,3.5],"autouv":0,"color":0,"origin":[0,0,0],"uv_offset":[0,22],"faces":{"north":{"uv":[7,29,20,33],"texture":0},"east":{"uv":[0,29,7,33],"texture":0},"south":{"uv":[27,29,40,33],"texture":0},"west":{"uv":[20,29,27,33],"texture":0},"up":{"uv":[20,29,7,22],"texture":0},"down":{"uv":[33,22,20,29],"texture":0}},"type":"cube","uuid":"0775a461-a868-92c0-defa-fddfb3a607bc"},{"name":"left_arm","box_uv":true,"rescale":false,"locked":false,"from":[-10.911492979394609,19.87361924567604,-3],"to":[-6.911492979394609,24.87361924567604,3],"autouv":0,"color":0,"rotation":[0,0,-12.5],"origin":[-8.911492979394609,22.37361924567604,0],"uv_offset":[56,16],"faces":{"north":{"uv":[62,22,66,27],"texture":0},"east":{"uv":[56,22,62,27],"texture":0},"south":{"uv":[72,22,76,27],"texture":0},"west":{"uv":[66,22,72,27],"texture":0},"up":{"uv":[66,22,62,16],"texture":0},"down":{"uv":[70,16,66,22],"texture":0}},"type":"cube","uuid":"4812426e-50b6-2e2f-9ddd-22e407b2d88f"},{"name":"body","box_uv":true,"rescale":false,"locked":false,"from":[-7,12.5,-4],"to":[7,15.5,4],"autouv":0,"color":0,"origin":[0,0,0],"faces":{"north":{"uv":[8,8,22,11],"texture":0},"east":{"uv":[0,8,8,11],"texture":0},"south":{"uv":[30,8,44,11],"texture":0},"west":{"uv":[22,8,30,11],"texture":0},"up":{"uv":[22,8,8,0],"texture":0},"down":{"uv":[36,0,22,8],"texture":0}},"type":"cube","uuid":"0654c238-3a5d-0372-f8b2-b0b872186eac"},{"name":"body","box_uv":true,"rescale":false,"locked":false,"from":[-6,10.5,-3],"to":[6,12.5,3],"autouv":0,"color":0,"origin":[0,0,0],"uv_offset":[0,35],"faces":{"north":{"uv":[6,41,18,43],"texture":0},"east":{"uv":[0,41,6,43],"texture":0},"south":{"uv":[24,41,36,43],"texture":0},"west":{"uv":[18,41,24,43],"texture":0},"up":{"uv":[18,41,6,35],"texture":0},"down":{"uv":[30,35,18,41],"texture":0}},"type":"cube","uuid":"34dbf80d-b0e7-3b25-1a8a-f2694a40fd3b"},{"name":"left_leg","box_uv":true,"rescale":false,"locked":false,"from":[-5.749999904632569,0,-2.5],"to":[-0.7499999046325687,11,2.5],"autouv":0,"color":0,"origin":[-0.03749990463256836,4,-1],"uv_offset":[42,6],"faces":{"north":{"uv":[47,11,52,22],"texture":0},"east":{"uv":[42,11,47,22],"texture":0},"south":{"uv":[57,11,62,22],"texture":0},"west":{"uv":[52,11,57,22],"texture":0},"up":{"uv":[52,11,47,6],"texture":0},"down":{"uv":[57,6,52,11],"texture":0}},"type":"cube","uuid":"5d098f64-4256-4562-4900-8de8b90146e4"},{"name":"right_leg","box_uv":true,"rescale":false,"locked":false,"from":[0.5,0,-2.5],"to":[5.5,11,2.5],"autouv":0,"color":0,"origin":[4.1875,6,-1],"uv_offset":[31,41],"faces":{"north":{"uv":[36,46,41,57],"texture":0},"east":{"uv":[31,46,36,57],"texture":0},"south":{"uv":[46,46,51,57],"texture":0},"west":{"uv":[41,46,46,57],"texture":0},"up":{"uv":[41,46,36,41],"texture":0},"down":{"uv":[46,41,41,46],"texture":0}},"type":"cube","uuid":"e012aeb1-7c83-fa64-8979-05195fcb9f93"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[6.911492979394609,19.87361924567604,-3],"to":[10.911492979394609,24.87361924567604,3],"autouv":0,"color":0,"rotation":[0,0,12.5],"origin":[8.911492979394609,22.37361924567604,0],"uv_offset":[12,52],"faces":{"north":{"uv":[18,58,22,63],"texture":0},"east":{"uv":[12,58,18,63],"texture":0},"south":{"uv":[28,58,32,63],"texture":0},"west":{"uv":[22,58,28,63],"texture":0},"up":{"uv":[22,58,18,52],"texture":0},"down":{"uv":[26,52,22,58],"texture":0}},"type":"cube","uuid":"be1b9745-2c2f-ca5b-7407-bc1ce6107364"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[7.9375,12.5,-2.5],"to":[11.9375,22.5,2.5],"autouv":0,"color":0,"rotation":[0,0,12.5],"origin":[14.125,16.5,0],"uv_offset":[0,43],"faces":{"north":{"uv":[5,48,9,58],"texture":0},"east":{"uv":[0,48,5,58],"texture":0},"south":{"uv":[14,48,18,58],"texture":0},"west":{"uv":[9,48,14,58],"texture":0},"up":{"uv":[9,48,5,43],"texture":0},"down":{"uv":[13,43,9,48],"texture":0}},"type":"cube","uuid":"3032ee30-881b-4c26-9c85-7a1cc08c3af0"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[9.0625,6.213424025036549,-14.5],"to":[12.0625,7.213424025036549,-7.5],"autouv":0,"color":0,"rotation":[-90.00000000000011,0,0],"origin":[10.5625,13.184765657741814,-11],"uv_offset":[41,66],"faces":{"north":{"uv":[48,73,51,74],"texture":0},"east":{"uv":[41,73,48,74],"texture":0},"south":{"uv":[58,73,61,74],"texture":0},"west":{"uv":[51,73,58,74],"texture":0},"up":{"uv":[51,73,48,66],"texture":0},"down":{"uv":[54,66,51,73],"texture":0}},"type":"cube","uuid":"3f4f6b5b-9498-f42b-bf46-ea9f28d49341"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[10.269606781186546,7,-13.499999999999998],"to":[11.26960678118655,27,-8.499999999999998],"autouv":0,"color":0,"rotation":[-90.00000000000011,0,0],"origin":[10.5625,13.184765657741814,-11],"uv_offset":[0,67],"faces":{"north":{"uv":[5,72,6.0000000000000036,92],"texture":0},"east":{"uv":[0,72,5,92],"texture":0},"south":{"uv":[11.000000000000004,72,12.000000000000007,92],"texture":0},"west":{"uv":[6.0000000000000036,72,11.000000000000004,92],"texture":0},"up":{"uv":[6.0000000000000036,72,5,67],"texture":0},"down":{"uv":[7.000000000000007,67,6.0000000000000036,72],"texture":0}},"type":"cube","uuid":"af1a441e-808d-d0bd-c272-5f59c98d0882"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[9.0625,6.163092413499996,-8.621511259187638],"to":[12.0625,6.413092413499996,-6.621511259187638],"autouv":0,"color":0,"rotation":[-45.00000000000001,0,0],"origin":[10.5625,13.184765657741814,-11],"uv_offset":[41,66],"faces":{"north":{"uv":[43,68,46,68.25],"texture":0},"east":{"uv":[41,68,43,68.25],"texture":0},"south":{"uv":[48,68,51,68.25],"texture":0},"west":{"uv":[46,68,48,68.25],"texture":0},"up":{"uv":[46,68,43,66],"texture":0},"down":{"uv":[49,66,46,68],"texture":0}},"type":"cube","uuid":"7ce88a82-50fb-d410-8b50-87364a8d2740"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[9.0625,5.404693795863789,-11.565761419596205],"to":[12.0625,5.654693795863789,-10.565761419596205],"autouv":0,"color":0,"rotation":[-67.50000000000004,0,0],"origin":[10.5625,13.184765657741814,-11],"uv_offset":[41,66],"faces":{"north":{"uv":[42,67,45,67.25],"texture":0},"east":{"uv":[41,67,42,67.25],"texture":0},"south":{"uv":[46,67,49,67.25],"texture":0},"west":{"uv":[45,67,46,67.25],"texture":0},"up":{"uv":[45,67,42,66],"texture":0},"down":{"uv":[48,66,45,67],"texture":0}},"type":"cube","uuid":"ad5b6545-cdcf-5bbd-9c47-e9e862abb717"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[9.0625,5.404693795863789,-11.434238580403795],"to":[12.0625,5.654693795863789,-10.434238580403795],"autouv":0,"color":0,"rotation":[-112.50000000000024,0,0],"origin":[10.5625,13.184765657741814,-11],"uv_offset":[41,66],"faces":{"north":{"uv":[42,67,45,67.25],"texture":0},"east":{"uv":[41,67,42,67.25],"texture":0},"south":{"uv":[46,67,49,67.25],"texture":0},"west":{"uv":[45,67,46,67.25],"texture":0},"up":{"uv":[45,67,42,66],"texture":0},"down":{"uv":[48,66,45,67],"texture":0}},"type":"cube","uuid":"4152248c-5026-bcff-9274-6457a5847b4e"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[9.0625,6.163092413499996,-15.378488740812362],"to":[12.0625,6.413092413499996,-13.378488740812362],"autouv":0,"color":0,"rotation":[-135.0000000000003,0,0],"origin":[10.5625,13.184765657741814,-11],"uv_offset":[41,66],"faces":{"north":{"uv":[43,68,46,68.25],"texture":0},"east":{"uv":[41,68,43,68.25],"texture":0},"south":{"uv":[48,68,51,68.25],"texture":0},"west":{"uv":[46,68,48,68.25],"texture":0},"up":{"uv":[46,68,43,66],"texture":0},"down":{"uv":[49,66,46,68],"texture":0}},"type":"cube","uuid":"d78f6818-2674-83a9-14a5-11c12799eddd"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[9.0625,5.123633811484911,-12.869013686302166],"to":[12.0625,6.373633811484911,-12.056513686302166],"autouv":0,"color":0,"rotation":[-90.00000000000011,0,0],"origin":[10.5625,13.184765657741814,-11],"uv_offset":[41,66],"faces":{"north":{"uv":[41.8125,66.8125,44.8125,68.0625],"texture":0},"east":{"uv":[41,66.8125,41.8125,68.0625],"texture":0},"south":{"uv":[45.625,66.8125,48.625,68.0625],"texture":0},"west":{"uv":[44.8125,66.8125,45.625,68.0625],"texture":0},"up":{"uv":[44.8125,66.8125,41.8125,66],"texture":0},"down":{"uv":[47.8125,66,44.8125,66.8125],"texture":0}},"type":"cube","uuid":"07c56d12-6a69-2db4-d833-81dc54e5fe1b"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[9.0625,5.123633811484911,-12.193486313697834],"to":[12.0625,6.373633811484911,-9.130986313697834],"autouv":0,"color":0,"rotation":[-90.00000000000011,0,0],"origin":[10.5625,13.184765657741814,-11],"uv_offset":[41,66],"faces":{"north":{"uv":[44.0625,69.0625,47.0625,70.3125],"texture":0},"east":{"uv":[41,69.0625,44.0625,70.3125],"texture":0},"south":{"uv":[50.125,69.0625,53.125,70.3125],"texture":0},"west":{"uv":[47.0625,69.0625,50.125,70.3125],"texture":0},"up":{"uv":[47.0625,69.0625,44.0625,66],"texture":0},"down":{"uv":[50.0625,66,47.0625,69.0625],"texture":0}},"type":"cube","uuid":"0b4306ea-c10e-7bda-e3a7-cebfa37ee621"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[9.0625,6.074459026209688,-12.707402033950485],"to":[12.0625,6.324459026209688,-7.957402033950485],"autouv":0,"color":0,"rotation":[-90.00000000000011,0,0],"origin":[10.5625,13.184765657741814,-11],"uv_offset":[41,66],"faces":{"north":{"uv":[45.75,70.75,48.75,71],"texture":0},"east":{"uv":[41,70.75,45.75,71],"texture":0},"south":{"uv":[53.5,70.75,56.5,71],"texture":0},"west":{"uv":[48.75,70.75,53.5,71],"texture":0},"up":{"uv":[48.75,70.75,45.75,66],"texture":0},"down":{"uv":[51.75,66,48.75,70.75],"texture":0}},"type":"cube","uuid":"14f55029-c151-1f09-c189-7c796f498d03"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[9.0625,8.806276916929452,-4.728326755758181],"to":[12.0625,10.806276916929452,-4.228326755758181],"autouv":0,"color":0,"rotation":[-45.00000000000001,0,0],"origin":[10.5625,13.184765657741814,-11],"uv_offset":[41,66],"faces":{"north":{"uv":[41.5,66.5,44.5,68.5],"texture":0},"east":{"uv":[41,66.5,41.5,68.5],"texture":0},"south":{"uv":[45,66.5,48,68.5],"texture":0},"west":{"uv":[44.5,66.5,45,68.5],"texture":0},"up":{"uv":[44.5,66.5,41.5,66],"texture":0},"down":{"uv":[47.5,66,44.5,66.5],"texture":0}},"type":"cube","uuid":"00d8f6bb-8906-21b1-d512-a3320fef426f"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[9.0625,6.413092413499996,-8.621511259187638],"to":[12.0625,6.913092413499996,-6.621511259187638],"autouv":0,"color":0,"rotation":[-45.00000000000001,0,0],"origin":[10.5625,13.184765657741814,-11],"uv_offset":[41,66],"faces":{"north":{"uv":[43,68,46,68.5],"texture":0},"east":{"uv":[41,68,43,68.5],"texture":0},"south":{"uv":[48,68,51,68.5],"texture":0},"west":{"uv":[46,68,48,68.5],"texture":0},"up":{"uv":[46,68,43,66],"texture":0},"down":{"uv":[49,66,46,68],"texture":0}},"type":"cube","uuid":"3ba7ffc3-5dc7-062c-6968-6c339008004a"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[8.294733047033631,7,-13.267766952966369],"to":[9.294733047033635,28,-12.267766952966369],"autouv":0,"color":0,"rotation":[-89.9999999999999,-6.3611093629270335e-15,45.00000000000001],"origin":[10.5625,13.184765657741814,-11],"uv_offset":[0,67],"faces":{"north":{"uv":[1,68,2.0000000000000036,89],"texture":0},"east":{"uv":[0,68,1,89],"texture":0},"south":{"uv":[3.0000000000000036,68,4.000000000000007,89],"texture":0},"west":{"uv":[2.0000000000000036,68,3.0000000000000036,89],"texture":0},"up":{"uv":[2.0000000000000036,68,1,67],"texture":0},"down":{"uv":[3.000000000000007,67,2.0000000000000036,68],"texture":0}},"type":"cube","uuid":"c3d94dca-70ad-7f60-ada1-b5f0d9bc0185"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[9.855393218813454,7,-13.499999999999998],"to":[10.855393218813454,27,-8.499999999999998],"autouv":0,"color":0,"rotation":[-90.00000000000011,0,0],"origin":[10.5625,13.184765657741814,-11],"uv_offset":[0,67],"faces":{"north":{"uv":[5,72,6,92],"texture":0},"east":{"uv":[0,72,5,92],"texture":0},"south":{"uv":[11,72,12,92],"texture":0},"west":{"uv":[6,72,11,92],"texture":0},"up":{"uv":[6,72,5,67],"texture":0},"down":{"uv":[7,67,6,72],"texture":0}},"type":"cube","uuid":"563fed80-5f73-6352-ee1a-f195b739fcbb"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[11.830266952966369,7,-9.732233047033631],"to":[12.83026695296637,28,-8.732233047033631],"autouv":0,"color":0,"rotation":[-89.9999999999999,-6.3611093629270335e-15,45.00000000000001],"origin":[10.5625,13.184765657741814,-11],"uv_offset":[0,67],"faces":{"north":{"uv":[1,68,2.0000000000000018,89],"texture":0},"east":{"uv":[0,68,1,89],"texture":0},"south":{"uv":[3.0000000000000018,68,4.0000000000000036,89],"texture":0},"west":{"uv":[2.0000000000000018,68,3.0000000000000018,89],"texture":0},"up":{"uv":[2.0000000000000018,68,1,67],"texture":0},"down":{"uv":[3.0000000000000036,67,2.0000000000000018,68],"texture":0}},"type":"cube","uuid":"4dac5158-2b1c-49c8-8237-7d807cf1d362"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[9.847983699482775,-1.5917766396247544,-16.437529730769985],"to":[11.347983699482775,-0.09177663962475435,-15.687529730769985],"autouv":0,"color":0,"rotation":[-112.50000000000024,0,0],"origin":[10.5625,13.184765657741814,-11],"uv_offset":[2,105],"faces":{"north":{"uv":[2.75,105.75,4.25,107.25],"texture":0},"east":{"uv":[2,105.75,2.75,107.25],"texture":0},"south":{"uv":[5,105.75,6.5,107.25],"texture":0},"west":{"uv":[4.25,105.75,5,107.25],"texture":0},"up":{"uv":[4.25,105.75,2.75,105],"texture":0},"down":{"uv":[5.75,105,4.25,105.75],"texture":0}},"type":"cube","uuid":"b4cc5f8b-8550-42e5-0d58-a3e650742270"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[9.9375,-0.875,-11.75],"to":[11.1875,5.125,-10.25],"autouv":0,"color":0,"rotation":[-90.00000000000011,0,0],"origin":[10.5625,13.184765657741814,-11],"uv_offset":[51,100],"faces":{"north":{"uv":[52.5,101.5,53.75,107.5],"texture":0},"east":{"uv":[51,101.5,52.5,107.5],"texture":0},"south":{"uv":[55.25,101.5,56.5,107.5],"texture":0},"west":{"uv":[53.75,101.5,55.25,107.5],"texture":0},"up":{"uv":[53.75,101.5,52.5,100],"texture":0},"down":{"uv":[55,100,53.75,101.5],"texture":0}},"type":"cube","uuid":"cdd6602b-94c7-0517-646f-bd70404ef4c2"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[9.847983699482775,-1.5917766396247526,-6.312470269230014],"to":[11.347983699482775,-0.09177663962475435,-5.562470269230014],"autouv":0,"color":0,"rotation":[-67.50000000000004,0,0],"origin":[10.5625,13.184765657741814,-11],"uv_offset":[2,105],"faces":{"north":{"uv":[2.75,105.75,4.25,107.25],"texture":0},"east":{"uv":[2,105.75,2.75,107.25],"texture":0},"south":{"uv":[5,105.75,6.5,107.25],"texture":0},"west":{"uv":[4.25,105.75,5,107.25],"texture":0},"up":{"uv":[4.25,105.75,2.75,105],"texture":0},"down":{"uv":[5.75,105,4.25,105.75],"texture":0}},"type":"cube","uuid":"cf7eb7aa-28f5-bad4-3b97-0c0122f06dd8"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[5.157752932919931,-1.6053556635358355,-11.75],"to":[5.907752932919931,-0.10535566353583548,-10.249999999999998],"autouv":0,"color":0,"rotation":[-90.00000000000001,22.500000000000004,-3.9589987167925055e-14],"origin":[10.5625,13.184765657741814,-11],"uv_offset":[2,105],"faces":{"north":{"uv":[3.5000000000000018,106.5,4.250000000000002,108],"texture":0},"east":{"uv":[2,106.5,3.5000000000000018,108],"texture":0},"south":{"uv":[5.7500000000000036,106.5,6.5000000000000036,108],"texture":0},"west":{"uv":[4.250000000000002,106.5,5.7500000000000036,108],"texture":0},"up":{"uv":[4.250000000000002,106.5,3.5000000000000018,105],"texture":0},"down":{"uv":[5.000000000000002,105,4.250000000000002,106.5],"texture":0}},"type":"cube","uuid":"5494f1cc-b01f-5d60-172f-223fec060bd1"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[15.282812394459903,-1.5781976157136768,-11.75],"to":[16.032812394459903,-0.07819761571367678,-10.249999999999998],"autouv":0,"color":0,"rotation":[-90.00000000000001,-22.500000000000004,3.9589987167925055e-14],"origin":[10.5625,13.184765657741814,-11],"uv_offset":[2,105],"faces":{"north":{"uv":[3.5000000000000018,106.5,4.250000000000002,108],"texture":0},"east":{"uv":[2,106.5,3.5000000000000018,108],"texture":0},"south":{"uv":[5.7500000000000036,106.5,6.5000000000000036,108],"texture":0},"west":{"uv":[4.250000000000002,106.5,5.7500000000000036,108],"texture":0},"up":{"uv":[4.250000000000002,106.5,3.5000000000000018,105],"texture":0},"down":{"uv":[5.000000000000002,105,4.250000000000002,106.5],"texture":0}},"type":"cube","uuid":"f8f3657b-b801-3e82-32cf-8c9258cebb7f"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[9.273958550935141,-2.635819298766929,-11.75],"to":[10.398958550935141,-2.260819298766929,-10.249999999999998],"autouv":0,"color":0,"rotation":[-90.00000000000011,0,0],"origin":[10.5625,13.184765657741814,-11],"uv_offset":[2,105],"faces":{"north":{"uv":[3.5000000000000018,106.5,4.625000000000002,106.875],"texture":0},"east":{"uv":[2,106.5,3.5000000000000018,106.875],"texture":0},"south":{"uv":[6.1250000000000036,106.5,7.2500000000000036,106.875],"texture":0},"west":{"uv":[4.625000000000002,106.5,6.1250000000000036,106.875],"texture":0},"up":{"uv":[4.625000000000002,106.5,3.5000000000000018,105],"texture":0},"down":{"uv":[5.750000000000002,105,4.625000000000002,106.5],"texture":0}},"type":"cube","uuid":"2b66580a-3114-ea09-f440-5b93a04dbd57"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[9.297008848030409,-2.635819298766931,-11.75],"to":[11.922008848030409,-2.260819298766931,-10.249999999999998],"autouv":0,"color":0,"rotation":[-90.00000000000011,0,0],"origin":[10.5625,13.184765657741814,-11],"uv_offset":[2,105],"faces":{"north":{"uv":[3.5000000000000018,106.5,6.125000000000002,106.875],"texture":0},"east":{"uv":[2,106.5,3.5000000000000018,106.875],"texture":0},"south":{"uv":[7.6250000000000036,106.5,10.250000000000004,106.875],"texture":0},"west":{"uv":[6.125000000000002,106.5,7.6250000000000036,106.875],"texture":0},"up":{"uv":[6.125000000000002,106.5,3.5000000000000018,105],"texture":0},"down":{"uv":[8.750000000000002,105,6.125000000000002,106.5],"texture":0}},"type":"cube","uuid":"1cf7ae58-8538-cd2d-494d-f5c5cb153c39"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[9.847983699482775,-2.635819298766929,-10.800974851452365],"to":[11.347983699482775,-2.260819298766929,-9.675974851452365],"autouv":0,"color":0,"rotation":[-90.00000000000011,0,0],"origin":[10.5625,13.184765657741814,-11],"uv_offset":[2,105],"faces":{"north":{"uv":[3.125,106.125,4.625,106.5],"texture":0},"east":{"uv":[2,106.125,3.125,106.5],"texture":0},"south":{"uv":[5.75,106.125,7.25,106.5],"texture":0},"west":{"uv":[4.625,106.125,5.75,106.5],"texture":0},"up":{"uv":[4.625,106.125,3.125,105],"texture":0},"down":{"uv":[6.125,105,4.625,106.125],"texture":0}},"type":"cube","uuid":"70b0abde-b84f-1a44-c080-5ed1154eb53f"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[9.847983699482775,-2.635819298766928,-12.324025148547634],"to":[11.347983699482775,-2.260819298766928,-11.199025148547634],"autouv":0,"color":0,"rotation":[-90.00000000000011,0,0],"origin":[10.5625,13.184765657741814,-11],"uv_offset":[2,105],"faces":{"north":{"uv":[3.125,106.125,4.625,106.5],"texture":0},"east":{"uv":[2,106.125,3.125,106.5],"texture":0},"south":{"uv":[5.75,106.125,7.25,106.5],"texture":0},"west":{"uv":[4.625,106.125,5.75,106.5],"texture":0},"up":{"uv":[4.625,106.125,3.125,105],"texture":0},"down":{"uv":[6.125,105,4.625,106.125],"texture":0}},"type":"cube","uuid":"7cfa446b-481f-8c31-4a9e-cb27d0955406"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[10.269606781186548,24.16227716696347,-8.747149892780067],"to":[11.269606781186548,28.16227716696347,-7.747149892780067],"autouv":0,"color":0,"rotation":[-112.50000000000024,0,0],"origin":[10.5625,13.184765657741814,-11],"uv_offset":[0,67],"faces":{"north":{"uv":[1,68,2,72],"texture":0},"east":{"uv":[0,68,1,72],"texture":0},"south":{"uv":[3,68,4,72],"texture":0},"west":{"uv":[2,68,3,72],"texture":0},"up":{"uv":[2,68,1,67],"texture":0},"down":{"uv":[3,67,2,68],"texture":0}},"type":"cube","uuid":"098cf88f-38b5-51b9-4681-d03cc15a2448"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[9.855393218813452,24.16227716696347,-8.747149892780067],"to":[10.855393218813452,28.16227716696347,-7.747149892780067],"autouv":0,"color":0,"rotation":[-112.50000000000024,0,0],"origin":[10.5625,13.184765657741814,-11],"uv_offset":[0,67],"faces":{"north":{"uv":[1,68,2,72],"texture":0},"east":{"uv":[0,68,1,72],"texture":0},"south":{"uv":[3,68,4,72],"texture":0},"west":{"uv":[2,68,3,72],"texture":0},"up":{"uv":[2,68,1,67],"texture":0},"down":{"uv":[3,67,2,68],"texture":0}},"type":"cube","uuid":"6a823ae1-4759-68a7-1667-c0f4cdcbd9d5"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[9.85539323091507,27.884310400698922,-14.650283408760226],"to":[10.85539323091507,28.321810400698922,-11.150283408760226],"autouv":0,"color":0,"rotation":[-90.00000000000011,0,0],"origin":[10.5625,13.184765657741814,-11],"uv_offset":[0,67],"faces":{"north":{"uv":[3.5,70.5,4.5,70.9375],"texture":0},"east":{"uv":[0,70.5,3.5,70.9375],"texture":0},"south":{"uv":[8,70.5,9,70.9375],"texture":0},"west":{"uv":[4.5,70.5,8,70.9375],"texture":0},"up":{"uv":[4.5,70.5,3.5,67],"texture":0},"down":{"uv":[5.5,67,4.5,70.5],"texture":0}},"type":"cube","uuid":"c1a17dc3-403e-18eb-85a4-28e3f3b8206b"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[10.26960676908493,27.884310400698922,-14.650283408760226],"to":[11.26960676908493,28.321810400698922,-11.150283408760226],"autouv":0,"color":0,"rotation":[-90.00000000000011,0,0],"origin":[10.5625,13.184765657741814,-11],"uv_offset":[0,67],"faces":{"north":{"uv":[3.5,70.5,4.5,70.9375],"texture":0},"east":{"uv":[0,70.5,3.5,70.9375],"texture":0},"south":{"uv":[8,70.5,9,70.9375],"texture":0},"west":{"uv":[4.5,70.5,8,70.9375],"texture":0},"up":{"uv":[4.5,70.5,3.5,67],"texture":0},"down":{"uv":[5.5,67,4.5,70.5],"texture":0}},"type":"cube","uuid":"4a22a801-ee40-3445-5886-b8a6a8a7476b"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[10.269606781186548,24.196101923222614,-14.171189921915156],"to":[11.269606781186548,28.196101923222614,-13.171189921915156],"autouv":0,"color":0,"rotation":[-67.50000000000004,0,0],"origin":[10.5625,13.184765657741814,-11],"uv_offset":[0,67],"faces":{"north":{"uv":[1,68,2,72],"texture":0},"east":{"uv":[0,68,1,72],"texture":0},"south":{"uv":[3,68,4,72],"texture":0},"west":{"uv":[2,68,3,72],"texture":0},"up":{"uv":[2,68,1,67],"texture":0},"down":{"uv":[3,67,2,68],"texture":0}},"type":"cube","uuid":"7f02d710-1fa4-ca31-ba7c-060076b0b884"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[9.855393218813452,24.196101923222614,-14.171189921915156],"to":[10.855393218813452,28.196101923222614,-13.171189921915156],"autouv":0,"color":0,"rotation":[-67.50000000000004,0,0],"origin":[10.5625,13.184765657741814,-11],"uv_offset":[0,67],"faces":{"north":{"uv":[1,68,2,72],"texture":0},"east":{"uv":[0,68,1,72],"texture":0},"south":{"uv":[3,68,4,72],"texture":0},"west":{"uv":[2,68,3,72],"texture":0},"up":{"uv":[2,68,1,67],"texture":0},"down":{"uv":[3,67,2,68],"texture":0}},"type":"cube","uuid":"87b6771e-3578-bcc2-b071-fd4bd0c431d1"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[9.85539323091507,27.884310400698922,-9.261328243591455],"to":[10.85539323091507,28.321810400698922,-7.261328243591455],"autouv":0,"color":0,"rotation":[-90.00000000000011,0,0],"origin":[10.5625,13.184765657741814,-11],"uv_offset":[0,67],"faces":{"north":{"uv":[2,69,3,69.4375],"texture":0},"east":{"uv":[0,69,2,69.4375],"texture":0},"south":{"uv":[5,69,6,69.4375],"texture":0},"west":{"uv":[3,69,5,69.4375],"texture":0},"up":{"uv":[3,69,2,67],"texture":0},"down":{"uv":[4,67,3,69],"texture":0}},"type":"cube","uuid":"cca2f663-b853-21d4-3921-4955b0bda001"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[10.26960676908493,27.884310400698922,-9.261328243591455],"to":[11.26960676908493,28.321810400698922,-7.261328243591455],"autouv":0,"color":0,"rotation":[-90.00000000000011,0,0],"origin":[10.5625,13.184765657741814,-11],"uv_offset":[0,67],"faces":{"north":{"uv":[2,69,3,69.4375],"texture":0},"east":{"uv":[0,69,2,69.4375],"texture":0},"south":{"uv":[5,69,6,69.4375],"texture":0},"west":{"uv":[3,69,5,69.4375],"texture":0},"up":{"uv":[3,69,2,67],"texture":0},"down":{"uv":[4,67,3,69],"texture":0}},"type":"cube","uuid":"4b9bacec-e170-9c3e-7886-10faecf293ee"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[10.26960676908493,26.884310400698922,-13.650283408760226],"to":[11.26960676908493,28.321810400698922,-8.150283408760226],"autouv":0,"color":0,"rotation":[-90.00000000000011,0,0],"origin":[10.5625,13.184765657741814,-11],"uv_offset":[0,67],"faces":{"north":{"uv":[5.5,72.5,6.5,73.9375],"texture":0},"east":{"uv":[0,72.5,5.5,73.9375],"texture":0},"south":{"uv":[12,72.5,13,73.9375],"texture":0},"west":{"uv":[6.5,72.5,12,73.9375],"texture":0},"up":{"uv":[6.5,72.5,5.5,67],"texture":0},"down":{"uv":[7.5,67,6.5,72.5],"texture":0}},"type":"cube","uuid":"c5058030-a484-4749-9902-62b63360f3df"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[9.85539323091507,26.884310400698922,-13.650283408760226],"to":[10.85539323091507,28.321810400698922,-8.150283408760226],"autouv":0,"color":0,"rotation":[-90.00000000000011,0,0],"origin":[10.5625,13.184765657741814,-11],"uv_offset":[0,67],"faces":{"north":{"uv":[5.5,72.5,6.5,73.9375],"texture":0},"east":{"uv":[0,72.5,5.5,73.9375],"texture":0},"south":{"uv":[12,72.5,13,73.9375],"texture":0},"west":{"uv":[6.5,72.5,12,73.9375],"texture":0},"up":{"uv":[6.5,72.5,5.5,67],"texture":0},"down":{"uv":[7.5,67,6.5,72.5],"texture":0}},"type":"cube","uuid":"8f4b925a-b0ab-1333-2442-967972b50959"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[10.26960676908493,25.469412794198064,-20.05986683328205],"to":[11.26960676908493,26.531912794198064,-19.05986683328205],"autouv":0,"color":0,"rotation":[-45.00000000000001,0,0],"origin":[10.5625,13.184765657741814,-11],"uv_offset":[0,67],"faces":{"north":{"uv":[1,68,2,69.0625],"texture":0},"east":{"uv":[0,68,1,69.0625],"texture":0},"south":{"uv":[3,68,4,69.0625],"texture":0},"west":{"uv":[2,68,3,69.0625],"texture":0},"up":{"uv":[2,68,1,67],"texture":0},"down":{"uv":[3,67,2,68],"texture":0}},"type":"cube","uuid":"f6ead556-56c3-c56b-2d57-d7d5867246aa"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[10.26960676908493,27.79548265106139,-15.262493456086172],"to":[11.26960676908493,28.98298265106139,-14.262493456086172],"autouv":0,"color":0,"rotation":[-67.50000000000004,0,0],"origin":[10.5625,13.184765657741814,-11],"uv_offset":[0,67],"faces":{"north":{"uv":[1,68,2,69.1875],"texture":0},"east":{"uv":[0,68,1,69.1875],"texture":0},"south":{"uv":[3,68,4,69.1875],"texture":0},"west":{"uv":[2,68,3,69.1875],"texture":0},"up":{"uv":[2,68,1,67],"texture":0},"down":{"uv":[3,67,2,68],"texture":0}},"type":"cube","uuid":"5c8ecada-6622-da87-c3d3-8b0131cc68bb"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[9.85539323091507,25.469412794198064,-20.05986683328205],"to":[10.85539323091507,26.531912794198064,-19.05986683328205],"autouv":0,"color":0,"rotation":[-45.00000000000001,0,0],"origin":[10.5625,13.184765657741814,-11],"uv_offset":[0,67],"faces":{"north":{"uv":[1,68,2,69.0625],"texture":0},"east":{"uv":[0,68,1,69.0625],"texture":0},"south":{"uv":[3,68,4,69.0625],"texture":0},"west":{"uv":[2,68,3,69.0625],"texture":0},"up":{"uv":[2,68,1,67],"texture":0},"down":{"uv":[3,67,2,68],"texture":0}},"type":"cube","uuid":"6deacc75-96e2-f5af-5ca3-59a3c039a1dc"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[9.85539323091507,27.79548265106139,-15.262493456086172],"to":[10.85539323091507,28.98298265106139,-14.262493456086172],"autouv":0,"color":0,"rotation":[-67.50000000000004,0,0],"origin":[10.5625,13.184765657741814,-11],"uv_offset":[0,67],"faces":{"north":{"uv":[1,68,2,69.1875],"texture":0},"east":{"uv":[0,68,1,69.1875],"texture":0},"south":{"uv":[3,68,4,69.1875],"texture":0},"west":{"uv":[2,68,3,69.1875],"texture":0},"up":{"uv":[2,68,1,67],"texture":0},"down":{"uv":[3,67,2,68],"texture":0}},"type":"cube","uuid":"73823c8d-771d-33a7-d503-800b3a440ff4"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[9.85539323091507,27.761657894802255,-7.655846358609054],"to":[10.85539323091507,28.949157894802255,-6.655846358609054],"autouv":0,"color":0,"rotation":[-112.50000000000024,0,0],"origin":[10.5625,13.184765657741814,-11],"uv_offset":[0,67],"faces":{"north":{"uv":[1,68,2,69.1875],"texture":0},"east":{"uv":[0,68,1,69.1875],"texture":0},"south":{"uv":[3,68,4,69.1875],"texture":0},"west":{"uv":[2,68,3,69.1875],"texture":0},"up":{"uv":[2,68,1,67],"texture":0},"down":{"uv":[3,67,2,68],"texture":0}},"type":"cube","uuid":"7b98227a-b3ae-1038-7566-1648aaf21030"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[9.85539323091507,25.656912794198064,-2.877633166717949],"to":[10.85539323091507,26.469412794198064,-1.877633166717949],"autouv":0,"color":0,"rotation":[-135.0000000000003,0,0],"origin":[10.5625,13.184765657741814,-11],"uv_offset":[0,67],"faces":{"north":{"uv":[1,68,2,68.8125],"texture":0},"east":{"uv":[0,68,1,68.8125],"texture":0},"south":{"uv":[3,68,4,68.8125],"texture":0},"west":{"uv":[2,68,3,68.8125],"texture":0},"up":{"uv":[2,68,1,67],"texture":0},"down":{"uv":[3,67,2,68],"texture":0}},"type":"cube","uuid":"a17c7eb8-96ff-c3e2-728c-f70f2061313b"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[10.26960676908493,27.761657894802255,-7.655846358609054],"to":[11.26960676908493,28.949157894802255,-6.655846358609054],"autouv":0,"color":0,"rotation":[-112.50000000000024,0,0],"origin":[10.5625,13.184765657741814,-11],"uv_offset":[0,67],"faces":{"north":{"uv":[1,68,2,69.1875],"texture":0},"east":{"uv":[0,68,1,69.1875],"texture":0},"south":{"uv":[3,68,4,69.1875],"texture":0},"west":{"uv":[2,68,3,69.1875],"texture":0},"up":{"uv":[2,68,1,67],"texture":0},"down":{"uv":[3,67,2,68],"texture":0}},"type":"cube","uuid":"045eb5d1-594c-120e-2b55-a5e30dc4da39"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[10.26960676908493,25.656912794198064,-2.877633166717949],"to":[11.26960676908493,26.469412794198064,-1.877633166717949],"autouv":0,"color":0,"rotation":[-135.0000000000003,0,0],"origin":[10.5625,13.184765657741814,-11],"uv_offset":[0,67],"faces":{"north":{"uv":[1,68,2,68.8125],"texture":0},"east":{"uv":[0,68,1,68.8125],"texture":0},"south":{"uv":[3,68,4,68.8125],"texture":0},"west":{"uv":[2,68,3,68.8125],"texture":0},"up":{"uv":[2,68,1,67],"texture":0},"down":{"uv":[3,67,2,68],"texture":0}},"type":"cube","uuid":"5c0bc415-b850-de0d-d56b-bff12b31f29b"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[10.26960676908493,28.22410061425056,-9.89231455728929],"to":[11.26960676908493,29.41160061425056,-8.89231455728929],"autouv":0,"color":0,"rotation":[-90.00000000000011,0,0],"origin":[10.5625,13.184765657741814,-11],"uv_offset":[0,67],"faces":{"north":{"uv":[1,68,2,69.1875],"texture":0},"east":{"uv":[0,68,1,69.1875],"texture":0},"south":{"uv":[3,68,4,69.1875],"texture":0},"west":{"uv":[2,68,3,69.1875],"texture":0},"up":{"uv":[2,68,1,67],"texture":0},"down":{"uv":[3,67,2,68],"texture":0}},"type":"cube","uuid":"c6f0d2c9-c535-a779-292a-b3514e3439ac"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[10.26960676908493,28.22410061425056,-13.019297095062392],"to":[11.26960676908493,29.41160061425056,-9.831797095062392],"autouv":0,"color":0,"rotation":[-90.00000000000011,0,0],"origin":[10.5625,13.184765657741814,-11],"uv_offset":[0,67],"faces":{"north":{"uv":[3.1875,70.1875,4.1875,71.375],"texture":0},"east":{"uv":[0,70.1875,3.1875,71.375],"texture":0},"south":{"uv":[7.375,70.1875,8.375,71.375],"texture":0},"west":{"uv":[4.1875,70.1875,7.375,71.375],"texture":0},"up":{"uv":[4.1875,70.1875,3.1875,67],"texture":0},"down":{"uv":[5.1875,67,4.1875,70.1875],"texture":0}},"type":"cube","uuid":"579b0eeb-c032-f7c0-5b0d-3df4c9a67f98"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[9.85539323091507,28.22410061425056,-13.019297095062392],"to":[10.85539323091507,29.41160061425056,-9.831797095062392],"autouv":0,"color":0,"rotation":[-90.00000000000011,0,0],"origin":[10.5625,13.184765657741814,-11],"uv_offset":[0,67],"faces":{"north":{"uv":[3.1875,70.1875,4.1875,71.375],"texture":0},"east":{"uv":[0,70.1875,3.1875,71.375],"texture":0},"south":{"uv":[7.375,70.1875,8.375,71.375],"texture":0},"west":{"uv":[4.1875,70.1875,7.375,71.375],"texture":0},"up":{"uv":[4.1875,70.1875,3.1875,67],"texture":0},"down":{"uv":[5.1875,67,4.1875,70.1875],"texture":0}},"type":"cube","uuid":"b0d5a5f0-8f9d-06f0-ca88-434522898dc7"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"from":[9.85539323091507,28.22410061425056,-9.89231455728929],"to":[10.85539323091507,29.41160061425056,-8.89231455728929],"autouv":0,"color":0,"rotation":[-90.00000000000011,0,0],"origin":[10.5625,13.184765657741814,-11],"uv_offset":[0,67],"faces":{"north":{"uv":[1,68,2,69.1875],"texture":0},"east":{"uv":[0,68,1,69.1875],"texture":0},"south":{"uv":[3,68,4,69.1875],"texture":0},"west":{"uv":[2,68,3,69.1875],"texture":0},"up":{"uv":[2,68,1,67],"texture":0},"down":{"uv":[3,67,2,68],"texture":0}},"type":"cube","uuid":"b636385f-077c-ab10-3cb0-c121b17e0212"}],"outliner":[{"name":"head","origin":[0,28.5,0],"color":0,"uuid":"83386717-76b9-5643-fada-476b96638c04","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["73ff7e96-a763-6f28-f273-65b7f95c4af8"]},{"name":"body","origin":[0,16.25,0],"color":0,"uuid":"1c80920e-5940-bb02-8ede-0dbdc3f8a309","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["6495648a-b4e9-1566-b610-b59a6a6af6c3","0775a461-a868-92c0-defa-fddfb3a607bc","0654c238-3a5d-0372-f8b2-b0b872186eac","34dbf80d-b0e7-3b25-1a8a-f2694a40fd3b"]},{"name":"right_arm","origin":[7.365906917820892,22.471787184715083,0],"color":0,"uuid":"46c060bb-c480-b73f-7f49-b2ce238266c8","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["be1b9745-2c2f-ca5b-7407-bc1ce6107364","3032ee30-881b-4c26-9c85-7a1cc08c3af0","3f4f6b5b-9498-f42b-bf46-ea9f28d49341","af1a441e-808d-d0bd-c272-5f59c98d0882","7ce88a82-50fb-d410-8b50-87364a8d2740","ad5b6545-cdcf-5bbd-9c47-e9e862abb717","4152248c-5026-bcff-9274-6457a5847b4e","d78f6818-2674-83a9-14a5-11c12799eddd","07c56d12-6a69-2db4-d833-81dc54e5fe1b","0b4306ea-c10e-7bda-e3a7-cebfa37ee621","14f55029-c151-1f09-c189-7c796f498d03","00d8f6bb-8906-21b1-d512-a3320fef426f","3ba7ffc3-5dc7-062c-6968-6c339008004a","c3d94dca-70ad-7f60-ada1-b5f0d9bc0185","563fed80-5f73-6352-ee1a-f195b739fcbb","4dac5158-2b1c-49c8-8237-7d807cf1d362","b4cc5f8b-8550-42e5-0d58-a3e650742270","cdd6602b-94c7-0517-646f-bd70404ef4c2","cf7eb7aa-28f5-bad4-3b97-0c0122f06dd8","5494f1cc-b01f-5d60-172f-223fec060bd1","f8f3657b-b801-3e82-32cf-8c9258cebb7f","2b66580a-3114-ea09-f440-5b93a04dbd57","1cf7ae58-8538-cd2d-494d-f5c5cb153c39","70b0abde-b84f-1a44-c080-5ed1154eb53f","7cfa446b-481f-8c31-4a9e-cb27d0955406","098cf88f-38b5-51b9-4681-d03cc15a2448","6a823ae1-4759-68a7-1667-c0f4cdcbd9d5","c1a17dc3-403e-18eb-85a4-28e3f3b8206b","4a22a801-ee40-3445-5886-b8a6a8a7476b","7f02d710-1fa4-ca31-ba7c-060076b0b884","87b6771e-3578-bcc2-b071-fd4bd0c431d1","cca2f663-b853-21d4-3921-4955b0bda001","4b9bacec-e170-9c3e-7886-10faecf293ee","c5058030-a484-4749-9902-62b63360f3df","8f4b925a-b0ab-1333-2442-967972b50959","f6ead556-56c3-c56b-2d57-d7d5867246aa","5c8ecada-6622-da87-c3d3-8b0131cc68bb","6deacc75-96e2-f5af-5ca3-59a3c039a1dc","73823c8d-771d-33a7-d503-800b3a440ff4","7b98227a-b3ae-1038-7566-1648aaf21030","a17c7eb8-96ff-c3e2-728c-f70f2061313b","045eb5d1-594c-120e-2b55-a5e30dc4da39","5c0bc415-b850-de0d-d56b-bff12b31f29b","c6f0d2c9-c535-a779-292a-b3514e3439ac","579b0eeb-c032-f7c0-5b0d-3df4c9a67f98","b0d5a5f0-8f9d-06f0-ca88-434522898dc7","b636385f-077c-ab10-3cb0-c121b17e0212"]},{"name":"left_arm","origin":[-7.335397667598395,22.46502344677952,0],"color":0,"uuid":"d7ae7db3-6ec4-9665-c47f-81c06001e36e","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["6c7de089-94c9-a0d1-90d0-024bcc0092d1","4812426e-50b6-2e2f-9ddd-22e407b2d88f"]},{"name":"right_leg","origin":[3,10.5,0],"color":0,"uuid":"bce8704f-3b98-78f3-337e-9aec36d69195","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["e012aeb1-7c83-fa64-8979-05195fcb9f93"]},{"name":"left_leg","origin":[-3.2499999046325687,10.5,0],"color":0,"uuid":"7dc76f08-82fc-e9bc-9366-1c97bda4f143","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["5d098f64-4256-4562-4900-8de8b90146e4"]},{"name":"right_arm2","origin":[9.10768544271071,30.09910061425056,8.20710676908493],"color":0,"uuid":"15030872-ea41-8a48-63f7-a7865f7e274a","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":[]}],"textures":[{"path":"E:\\COSMERE MODELS\\koloss_small.png","name":"koloss_small.png","folder":"block","namespace":"","id":"0","particle":false,"render_mode":"default","render_sides":"auto","frame_time":1,"frame_order_type":"loop","frame_order":"","frame_interpolate":false,"visible":true,"mode":"bitmap","saved":true,"uuid":"b53b4905-786d-40d7-a9c3-5b31b27ea22a","relative_path":"../koloss_small.png","source":"data:image/png;base64,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"}]} \ No newline at end of file diff --git a/blockbench/hemalurgy/koloss_sword.bbmodel b/blockbench/hemalurgy/koloss_sword.bbmodel new file mode 100644 index 000000000..c7d6f4d19 --- /dev/null +++ b/blockbench/hemalurgy/koloss_sword.bbmodel @@ -0,0 +1 @@ +{"meta":{"format_version":"4.5","model_format":"java_block","box_uv":false},"name":"koloss_sword","parent":"","ambientocclusion":true,"front_gui_light":false,"visible_box":[1,1,0],"variable_placeholders":"","variable_placeholder_buttons":[],"unhandled_root_fields":{},"resolution":{"width":32,"height":32},"elements":[{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[4.5,8.213424025036549,6.5],"to":[11.5,9.213424025036549,9.5],"autouv":0,"color":0,"origin":[9.5,8.213424025036549,6.5],"faces":{"north":{"uv":[21,17,26,18],"texture":0},"east":{"uv":[25,9,28,10],"texture":0},"south":{"uv":[21,18,26,19],"texture":0},"west":{"uv":[25,10,28,11],"texture":0},"up":{"uv":[8,23,3,20],"texture":0},"down":{"uv":[25,20,20,23],"texture":0}},"type":"cube","uuid":"bfce8f8b-76f0-b89a-bb4e-f7282c8e47ba"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[5.500000000000002,9,7.29289321881345],"to":[10.500000000000002,29,8.292893218813454],"autouv":0,"color":0,"origin":[7.000000000000002,4,6.79289321881345],"faces":{"north":{"uv":[0,0,3,20],"texture":0},"east":{"uv":[0,20,1,40],"texture":0},"south":{"uv":[3,0,6,20],"texture":0},"west":{"uv":[20,0,21,20],"texture":0},"up":{"uv":[28,12,25,11],"texture":0},"down":{"uv":[28,12,25,13],"texture":0}},"type":"cube","uuid":"d2f36ff1-f811-cf10-c9cf-9606e01bccd1"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[4.365821270752878,7.440575549726503,6.5],"to":[6.365821270752878,7.690575549726503,9.5],"autouv":0,"color":0,"rotation":[0,0,-45],"origin":[5.865821270752878,7.565575549726503,7.5],"faces":{"north":{"uv":[3,28,5,29],"texture":0},"east":{"uv":[25,13,28,14],"texture":0},"south":{"uv":[6,28,8,29],"texture":0},"west":{"uv":[25,19,28,20],"texture":0},"up":{"uv":[23,6,21,3],"texture":0},"down":{"uv":[23,6,21,9],"texture":0}},"type":"cube","uuid":"1e036b37-0071-cac8-ee9d-5122354cf462"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[4.5097751953012795,8.012567250417915,6.5],"to":[5.5097751953012795,8.262567250417915,9.5],"autouv":0,"color":0,"rotation":[0,0,-22.5],"origin":[5.0097751953012795,8.137567250417915,7.5],"faces":{"north":{"uv":[23,28,24,29],"texture":0},"east":{"uv":[25,20,28,21],"texture":0},"south":{"uv":[28,23,29,24],"texture":0},"west":{"uv":[25,21,28,22],"texture":0},"up":{"uv":[24,28,23,25],"texture":0},"down":{"uv":[25,25,24,28],"texture":0}},"type":"cube","uuid":"0f33180e-6314-9f90-6ea1-e860fe5fe460"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[10.49022480469872,8.012567250417915,6.5],"to":[11.49022480469872,8.262567250417915,9.5],"autouv":0,"color":0,"rotation":[0,0,22.5],"origin":[10.99022480469872,8.137567250417915,7.5],"faces":{"north":{"uv":[24,28,25,29],"texture":0},"east":{"uv":[25,22,28,23],"texture":0},"south":{"uv":[25,28,26,29],"texture":0},"west":{"uv":[25,23,28,24],"texture":0},"up":{"uv":[26,28,25,25],"texture":0},"down":{"uv":[6,26,5,29],"texture":0}},"type":"cube","uuid":"1a840682-984f-22bd-a51d-698a07213b61"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[9.634178729247122,7.440575549726503,6.5],"to":[11.634178729247122,7.690575549726503,9.5],"autouv":0,"color":0,"rotation":[0,0,45],"origin":[10.134178729247122,7.565575549726503,7.5],"faces":{"north":{"uv":[8,28,10,29],"texture":0},"east":{"uv":[6,26,9,27],"texture":0},"south":{"uv":[28,9,30,10],"texture":0},"west":{"uv":[26,17,29,18],"texture":0},"up":{"uv":[23,12,21,9],"texture":0},"down":{"uv":[14,21,12,24],"texture":0}},"type":"cube","uuid":"2ffd3435-456c-7890-e35d-ff8c9c044bec"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[6.130986313697834,7.123633811484911,6.5],"to":[6.943486313697834,8.373633811484911,9.5],"autouv":0,"color":0,"origin":[6.630986313697834,7.248633811484911,7.5],"faces":{"north":{"uv":[27,28,28,29],"texture":0},"east":{"uv":[26,18,29,19],"texture":0},"south":{"uv":[28,28,29,29],"texture":0},"west":{"uv":[26,25,29,26],"texture":0},"up":{"uv":[20,29,19,26],"texture":0},"down":{"uv":[27,26,26,29],"texture":0}},"type":"cube","uuid":"bce14e26-85e4-0e57-30fd-8b3143a56dc6"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[6.806513686302166,7.123633811484911,6.5],"to":[9.869013686302166,8.373633811484911,9.5],"autouv":0,"color":0,"origin":[9.556513686302166,7.248633811484911,7.5],"faces":{"north":{"uv":[29,0,30,1],"texture":0},"east":{"uv":[6,27,9,28],"texture":0},"south":{"uv":[29,1,30,2],"texture":0},"west":{"uv":[9,27,12,28],"texture":0},"up":{"uv":[15,30,14,27],"texture":0},"down":{"uv":[28,14,27,17],"texture":0}},"type":"cube","uuid":"c65934ed-32bd-e5dc-4f3c-b9882d1bdc50"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[6.292597966049515,8.074459026209688,6.5],"to":[11.042597966049515,8.324459026209688,9.5],"autouv":0,"color":0,"origin":[8.042597966049515,8.449459026209688,7.5],"faces":{"north":{"uv":[21,19,25,20],"texture":0},"east":{"uv":[27,24,30,25],"texture":0},"south":{"uv":[5,23,9,24],"texture":0},"west":{"uv":[27,26,30,27],"texture":0},"up":{"uv":[12,23,8,20],"texture":0},"down":{"uv":[25,0,21,3],"texture":0}},"type":"cube","uuid":"4bbc29a6-a066-8895-ef0d-f124ce541fc8"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[9.509178729247122,7.065575549726503,6.5],"to":[10.009178729247122,9.065575549726503,9.5],"autouv":0,"color":0,"rotation":[0,0,-45],"origin":[10.134178729247122,7.565575549726503,7.5],"faces":{"north":{"uv":[20,27,21,29],"texture":0},"east":{"uv":[21,12,24,14],"texture":0},"south":{"uv":[10,28,11,30],"texture":0},"west":{"uv":[14,21,17,23],"texture":0},"up":{"uv":[16,30,15,27],"texture":0},"down":{"uv":[17,27,16,30],"texture":0}},"type":"cube","uuid":"d9ea0caf-3a65-07ad-f0ad-795d2a8e05cb"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[4.365821270752878,7.690575549726503,6.5],"to":[6.365821270752878,8.190575549726503,9.5],"autouv":0,"color":0,"rotation":[0,0,-45],"origin":[5.865821270752878,7.565575549726503,7.5],"faces":{"north":{"uv":[28,10,30,11],"texture":0},"east":{"uv":[27,27,30,28],"texture":0},"south":{"uv":[11,28,13,29],"texture":0},"west":{"uv":[28,3,31,4],"texture":0},"up":{"uv":[23,17,21,14],"texture":0},"down":{"uv":[19,21,17,24],"texture":0}},"type":"cube","uuid":"db7466b0-7e96-5d5c-f93c-fcc7a8dfc82d"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[5.000000000000002,9,7.499999999999998],"to":[6.000000000000002,30,8.5],"autouv":0,"color":0,"rotation":[0,-45,0],"origin":[5.500000000000002,10,7.999999999999998],"faces":{"north":{"uv":[12,0,13,21],"texture":0},"east":{"uv":[13,0,14,21],"texture":0},"south":{"uv":[14,0,15,21],"texture":0},"west":{"uv":[15,0,16,21],"texture":0},"up":{"uv":[30,3,29,2],"texture":0},"down":{"uv":[4,29,3,30],"texture":0}},"type":"cube","uuid":"693bdf47-7389-ebe8-6122-c662d4711708"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[5.500000000000002,9,7.707106781186546],"to":[10.500000000000002,29,8.707106781186546],"autouv":0,"color":0,"origin":[10.000000000000002,26,0.20710678118654613],"faces":{"north":{"uv":[6,0,9,20],"texture":0},"east":{"uv":[1,20,2,40],"texture":0},"south":{"uv":[9,0,12,20],"texture":0},"west":{"uv":[2,20,3,40],"texture":0},"up":{"uv":[31,5,28,4],"texture":0},"down":{"uv":[31,5,28,6],"texture":0}},"type":"cube","uuid":"09b03cb9-bd64-9c1a-c301-adf72a44e720"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[10.000000000000002,9,7.499999999999998],"to":[11.000000000000002,30,8.5],"autouv":0,"color":0,"rotation":[0,-45,0],"origin":[10.500000000000002,10,7.999999999999998],"faces":{"north":{"uv":[16,0,17,21],"texture":0},"east":{"uv":[17,0,18,21],"texture":0},"south":{"uv":[18,0,19,21],"texture":0},"west":{"uv":[19,0,20,21],"texture":0},"up":{"uv":[5,30,4,29],"texture":0},"down":{"uv":[6,29,5,30],"texture":0}},"type":"cube","uuid":"462c8f6a-3bee-7dee-b25a-b9397d33d02c"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8.344102924890352,-0.6049222236572822,7.214516300517225],"to":[9.094102924890352,0.8950777763427178,8.714516300517225],"autouv":0,"color":0,"rotation":[0,0,22.5],"origin":[8.344102924890352,0.1450777763427178,7.964516300517225],"faces":{"north":{"uv":[6,29,7,30],"texture":0},"east":{"uv":[29,6,30,7],"texture":0},"south":{"uv":[7,29,8,30],"texture":0},"west":{"uv":[29,7,30,8],"texture":0},"up":{"uv":[9,30,8,29],"texture":0},"down":{"uv":[30,8,29,9],"texture":0}},"type":"cube","uuid":"7fd378e1-5137-7bb0-38b4-0ed19de45c97"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7.25,1.125,7.375],"to":[8.75,7.125,8.625],"autouv":0,"color":0,"origin":[9,7.125,7.0625],"faces":{"north":{"uv":[19,21,20,26],"texture":0},"east":{"uv":[3,23,4,28],"texture":0},"south":{"uv":[23,3,24,8],"texture":0},"west":{"uv":[4,23,5,28],"texture":0},"up":{"uv":[10,30,9,29],"texture":0},"down":{"uv":[12,29,11,30],"texture":0}},"type":"cube","uuid":"2ed12d8e-1574-9707-9ab3-15985ae84929"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7.020077776342718,-0.030897075109645122,7.214516300517225],"to":[7.770077776342718,1.4691029248903549,8.714516300517225],"autouv":0,"color":0,"rotation":[0,0,-22.5],"origin":[6.270077776342718,0.7191029248903549,7.964516300517225],"faces":{"north":{"uv":[12,29,13,30],"texture":0},"east":{"uv":[29,13,30,14],"texture":0},"south":{"uv":[29,14,30,15],"texture":0},"west":{"uv":[17,29,18,30],"texture":0},"up":{"uv":[30,18,29,17],"texture":0},"down":{"uv":[19,29,18,30],"texture":0}},"type":"cube","uuid":"427e7566-2538-b8ab-c159-790ce7253582"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7.250000000000001,-0.3896627929519183,6.913231138589274],"to":[8.750000000000002,1.1103372070480817,7.663231138589274],"autouv":0,"color":0,"rotation":[22.5,0,0],"origin":[8.000000000000002,0.3603372070480817,7.100731138589274],"faces":{"north":{"uv":[29,18,30,19],"texture":0},"east":{"uv":[19,29,20,30],"texture":0},"south":{"uv":[20,29,21,30],"texture":0},"west":{"uv":[21,29,22,30],"texture":0},"up":{"uv":[23,30,22,29],"texture":0},"down":{"uv":[24,29,23,30],"texture":0}},"type":"cube","uuid":"9442343e-8b1b-3883-b78f-2ddb4d0adc35"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7.250000000000001,-0.38966279295191963,8.265801462445175],"to":[8.750000000000002,1.1103372070480804,9.015801462445175],"autouv":0,"color":0,"rotation":[-22.5,0,0],"origin":[8.000000000000002,0.3603372070480817,8.828301462445175],"faces":{"north":{"uv":[29,23,30,24],"texture":0},"east":{"uv":[24,29,25,30],"texture":0},"south":{"uv":[25,29,26,30],"texture":0},"west":{"uv":[29,25,30,26],"texture":0},"up":{"uv":[27,30,26,29],"texture":0},"down":{"uv":[28,29,27,30],"texture":0}},"type":"cube","uuid":"4e3f48ec-b467-d50b-4288-998a6a017d1e"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7.250000000000001,-0.6358192987669296,8.163541449064859],"to":[8.750000000000002,-0.26081929876692955,9.288541449064859],"autouv":0,"color":0,"origin":[8.000000000000002,-0.44831929876692955,8.538541449064859],"faces":{"north":{"uv":[28,29,29,30],"texture":0},"east":{"uv":[29,28,30,29],"texture":0},"south":{"uv":[29,29,30,30],"texture":0},"west":{"uv":[30,0,31,1],"texture":0},"up":{"uv":[31,2,30,1],"texture":0},"down":{"uv":[31,2,30,3],"texture":0}},"type":"cube","uuid":"496fc623-da15-90bb-5e7f-0b10135eec57"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7.250000000000001,-0.6358192987669309,6.640491151969591],"to":[8.750000000000002,-0.2608192987669309,9.265491151969591],"autouv":0,"color":0,"origin":[8.000000000000002,-0.4483192987669309,8.515491151969591],"faces":{"north":{"uv":[3,30,4,31],"texture":0},"east":{"uv":[28,11,30,12],"texture":0},"south":{"uv":[4,30,5,31],"texture":0},"west":{"uv":[28,12,30,13],"texture":0},"up":{"uv":[14,30,13,28],"texture":0},"down":{"uv":[29,13,28,15],"texture":0}},"type":"cube","uuid":"baa7356b-6dde-c9ae-f475-77e21e5d91ed"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8.199025148547635,-0.6358192987669296,7.214516300517225],"to":[9.324025148547635,-0.26081929876692955,8.714516300517225],"autouv":0,"color":0,"origin":[8.761525148547635,-0.44831929876692955,7.964516300517225],"faces":{"north":{"uv":[5,30,6,31],"texture":0},"east":{"uv":[6,30,7,31],"texture":0},"south":{"uv":[30,6,31,7],"texture":0},"west":{"uv":[7,30,8,31],"texture":0},"up":{"uv":[31,8,30,7],"texture":0},"down":{"uv":[9,30,8,31],"texture":0}},"type":"cube","uuid":"557694f3-8bf8-5fd5-9843-6de972be7adf"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[6.6759748514523665,-0.6358192987669282,7.214516300517225],"to":[7.8009748514523665,-0.2608192987669282,8.714516300517225],"autouv":0,"color":0,"origin":[7.2384748514523665,-0.4483192987669282,7.964516300517225],"faces":{"north":{"uv":[30,8,31,9],"texture":0},"east":{"uv":[9,30,10,31],"texture":0},"south":{"uv":[30,9,31,10],"texture":0},"west":{"uv":[10,30,11,31],"texture":0},"up":{"uv":[31,11,30,10],"texture":0},"down":{"uv":[12,30,11,31],"texture":0}},"type":"cube","uuid":"dbe8acae-c21f-600e-bfe9-426a9c5356e0"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[4.311656357495417,26.075652116881464,7.292893218813452],"to":[5.311656357495417,30.075652116881464,8.292893218813452],"autouv":0,"color":0,"rotation":[0,0,22.5],"origin":[4.811656357495417,30.075652116881464,8],"faces":{"north":{"uv":[23,8,24,12],"texture":0},"east":{"uv":[9,23,10,27],"texture":0},"south":{"uv":[10,23,11,27],"texture":0},"west":{"uv":[11,23,12,27],"texture":0},"up":{"uv":[31,12,30,11],"texture":0},"down":{"uv":[13,30,12,31],"texture":0}},"type":"cube","uuid":"7e8778e4-7904-5845-62dd-3d44381cae73"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[4.311656357495417,26.075652116881464,7.707106781186548],"to":[5.311656357495417,30.075652116881464,8.707106781186548],"autouv":0,"color":0,"rotation":[0,0,22.5],"origin":[4.811656357495417,30.075652116881464,8],"faces":{"north":{"uv":[14,23,15,27],"texture":0},"east":{"uv":[15,23,16,27],"texture":0},"south":{"uv":[16,23,17,27],"texture":0},"west":{"uv":[20,23,21,27],"texture":0},"up":{"uv":[31,13,30,12],"texture":0},"down":{"uv":[14,30,13,31],"texture":0}},"type":"cube","uuid":"ba6e6496-999b-a612-0eae-58ed9b08c08c"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[4.349716591239774,29.88431040069892,7.70710676908493],"to":[7.849716591239774,30.32181040069892,8.70710676908493],"autouv":0,"color":0,"origin":[5.349716591239774,30.00931040069892,8.20710676908493],"faces":{"north":{"uv":[23,14,27,15],"texture":0},"east":{"uv":[30,13,31,14],"texture":0},"south":{"uv":[23,15,27,16],"texture":0},"west":{"uv":[14,30,15,31],"texture":0},"up":{"uv":[27,17,23,16],"texture":0},"down":{"uv":[25,23,21,24],"texture":0}},"type":"cube","uuid":"bb8ca42d-d18b-5dcc-54b5-682632cf1415"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[4.349716591239774,29.88431040069892,7.29289323091507],"to":[7.849716591239774,30.32181040069892,8.29289323091507],"autouv":0,"color":0,"origin":[5.349716591239774,30.00931040069892,7.79289323091507],"faces":{"north":{"uv":[24,3,28,4],"texture":0},"east":{"uv":[30,14,31,15],"texture":0},"south":{"uv":[24,4,28,5],"texture":0},"west":{"uv":[15,30,16,31],"texture":0},"up":{"uv":[9,25,5,24],"texture":0},"down":{"uv":[28,5,24,6],"texture":0}},"type":"cube","uuid":"a9ed864a-edbc-e097-dbfa-f4c0c6556a56"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[10.776731990152902,26.075652116881464,7.292893218813452],"to":[11.776731990152902,30.075652116881464,8.292893218813452],"autouv":0,"color":0,"rotation":[0,0,-22.5],"origin":[11.276731990152902,30.075652116881464,8],"faces":{"north":{"uv":[24,6,25,10],"texture":0},"east":{"uv":[24,10,25,14],"texture":0},"south":{"uv":[12,24,13,28],"texture":0},"west":{"uv":[13,24,14,28],"texture":0},"up":{"uv":[31,16,30,15],"texture":0},"down":{"uv":[17,30,16,31],"texture":0}},"type":"cube","uuid":"96fa16a7-1554-9e0e-368c-72f34f1af362"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[10.776731990152902,26.075652116881464,7.707106781186548],"to":[11.776731990152902,30.075652116881464,8.707106781186548],"autouv":0,"color":0,"rotation":[0,0,-22.5],"origin":[11.276731990152902,30.075652116881464,8],"faces":{"north":{"uv":[17,24,18,28],"texture":0},"east":{"uv":[18,24,19,28],"texture":0},"south":{"uv":[21,24,22,28],"texture":0},"west":{"uv":[22,24,23,28],"texture":0},"up":{"uv":[31,17,30,16],"texture":0},"down":{"uv":[18,30,17,31],"texture":0}},"type":"cube","uuid":"2833acb2-1a9c-7ee4-4d0d-2b4cf9f6ed1d"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[9.738671756408545,29.88431040069892,7.70710676908493],"to":[11.738671756408545,30.32181040069892,8.70710676908493],"autouv":0,"color":0,"origin":[10.738671756408545,30.00931040069892,8.20710676908493],"faces":{"north":{"uv":[28,15,30,16],"texture":0},"east":{"uv":[30,17,31,18],"texture":0},"south":{"uv":[28,16,30,17],"texture":0},"west":{"uv":[18,30,19,31],"texture":0},"up":{"uv":[19,29,17,28],"texture":0},"down":{"uv":[30,19,28,20],"texture":0}},"type":"cube","uuid":"f5f29ac4-d9ee-96ef-9c02-de20b525d170"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[9.738671756408545,29.88431040069892,7.29289323091507],"to":[11.738671756408545,30.32181040069892,8.29289323091507],"autouv":0,"color":0,"origin":[10.738671756408545,30.00931040069892,7.79289323091507],"faces":{"north":{"uv":[28,20,30,21],"texture":0},"east":{"uv":[30,18,31,19],"texture":0},"south":{"uv":[21,28,23,29],"texture":0},"west":{"uv":[19,30,20,31],"texture":0},"up":{"uv":[30,22,28,21],"texture":0},"down":{"uv":[30,22,28,23],"texture":0}},"type":"cube","uuid":"2e4ff1cf-e0e1-5e25-bd0d-031396334d0f"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[5.349716591239774,28.88431040069892,7.29289323091507],"to":[10.849716591239774,30.32181040069892,8.29289323091507],"autouv":0,"color":0,"origin":[4.349716591239774,30.00931040069892,7.79289323091507],"faces":{"north":{"uv":[23,24,27,25],"texture":0},"east":{"uv":[30,19,31,20],"texture":0},"south":{"uv":[25,0,29,1],"texture":0},"west":{"uv":[20,30,21,31],"texture":0},"up":{"uv":[29,2,25,1],"texture":0},"down":{"uv":[29,2,25,3],"texture":0}},"type":"cube","uuid":"dc954fd6-d37c-8e09-6eab-666e30271c54"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[5.349716591239774,28.88431040069892,7.70710676908493],"to":[10.849716591239774,30.32181040069892,8.70710676908493],"autouv":0,"color":0,"origin":[7.349716591239774,30.00931040069892,8.20710676908493],"faces":{"north":{"uv":[5,25,9,26],"texture":0},"east":{"uv":[30,20,31,21],"texture":0},"south":{"uv":[25,6,29,7],"texture":0},"west":{"uv":[21,30,22,31],"texture":0},"up":{"uv":[29,8,25,7],"texture":0},"down":{"uv":[29,8,25,9],"texture":0}},"type":"cube","uuid":"e612d803-fc91-5d86-269e-3cb29bfbb59c"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[10.730438757430713,29.676934182907637,7.29289323091507],"to":[11.730438757430713,30.739434182907637,8.29289323091507],"autouv":0,"color":0,"rotation":[0,0,-45],"origin":[11.230438757430713,30.520684182907637,7.79289323091507],"faces":{"north":{"uv":[30,21,31,22],"texture":0},"east":{"uv":[22,30,23,31],"texture":0},"south":{"uv":[30,22,31,23],"texture":0},"west":{"uv":[23,30,24,31],"texture":0},"up":{"uv":[31,24,30,23],"texture":0},"down":{"uv":[25,30,24,31],"texture":0}},"type":"cube","uuid":"294989f8-d0a9-a40b-88e1-1c766794000e"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[9.985913208136491,30.04941025033117,7.29289323091507],"to":[10.985913208136491,31.23691025033117,8.29289323091507],"autouv":0,"color":0,"rotation":[0,0,-22.5],"origin":[10.485913208136491,31.01816025033117,7.79289323091507],"faces":{"north":{"uv":[30,24,31,25],"texture":0},"east":{"uv":[25,30,26,31],"texture":0},"south":{"uv":[30,25,31,26],"texture":0},"west":{"uv":[26,30,27,31],"texture":0},"up":{"uv":[31,27,30,26],"texture":0},"down":{"uv":[28,30,27,31],"texture":0}},"type":"cube","uuid":"6023dbe9-c49a-c538-5d2d-0d679bdc722c"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[10.730438757430713,29.676934182907637,7.70710676908493],"to":[11.730438757430713,30.739434182907637,8.70710676908493],"autouv":0,"color":0,"rotation":[0,0,-45],"origin":[11.230438757430713,30.520684182907637,8.20710676908493],"faces":{"north":{"uv":[30,27,31,28],"texture":0},"east":{"uv":[28,30,29,31],"texture":0},"south":{"uv":[30,28,31,29],"texture":0},"west":{"uv":[29,30,30,31],"texture":0},"up":{"uv":[31,30,30,29],"texture":0},"down":{"uv":[31,30,30,31],"texture":0}},"type":"cube","uuid":"9af9314e-eb08-2285-5009-2956ff4d9098"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[9.985913208136491,30.04941025033117,7.70710676908493],"to":[10.985913208136491,31.23691025033117,8.70710676908493],"autouv":0,"color":0,"rotation":[0,0,-22.5],"origin":[10.485913208136491,31.01816025033117,8.20710676908493],"faces":{"north":{"uv":[31,0,32,1],"texture":0},"east":{"uv":[31,1,32,2],"texture":0},"south":{"uv":[31,2,32,3],"texture":0},"west":{"uv":[3,31,4,32],"texture":0},"up":{"uv":[32,4,31,3],"texture":0},"down":{"uv":[5,31,4,32],"texture":0}},"type":"cube","uuid":"7866f9ed-a649-8bb9-0e22-d82830eab4e2"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[5.102475139511828,30.04941025033117,7.70710676908493],"to":[6.102475139511828,31.23691025033117,8.70710676908493],"autouv":0,"color":0,"rotation":[0,0,22.5],"origin":[5.602475139511828,31.01816025033117,8.20710676908493],"faces":{"north":{"uv":[31,4,32,5],"texture":0},"east":{"uv":[5,31,6,32],"texture":0},"south":{"uv":[31,5,32,6],"texture":0},"west":{"uv":[6,31,7,32],"texture":0},"up":{"uv":[32,7,31,6],"texture":0},"down":{"uv":[8,31,7,32],"texture":0}},"type":"cube","uuid":"5eb68429-cdae-15c1-694e-934755879812"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[4.357949590217606,29.926934182907637,7.70710676908493],"to":[5.357949590217606,30.739434182907637,8.70710676908493],"autouv":0,"color":0,"rotation":[0,0,45],"origin":[4.857949590217606,30.520684182907637,8.20710676908493],"faces":{"north":{"uv":[31,7,32,8],"texture":0},"east":{"uv":[8,31,9,32],"texture":0},"south":{"uv":[31,8,32,9],"texture":0},"west":{"uv":[9,31,10,32],"texture":0},"up":{"uv":[32,10,31,9],"texture":0},"down":{"uv":[11,31,10,32],"texture":0}},"type":"cube","uuid":"4947b7e0-1d55-e7a1-2001-c2e1607b49a3"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[5.102475139511828,30.04941025033117,7.29289323091507],"to":[6.102475139511828,31.23691025033117,8.29289323091507],"autouv":0,"color":0,"rotation":[0,0,22.5],"origin":[5.602475139511828,31.01816025033117,7.79289323091507],"faces":{"north":{"uv":[31,10,32,11],"texture":0},"east":{"uv":[11,31,12,32],"texture":0},"south":{"uv":[31,11,32,12],"texture":0},"west":{"uv":[12,31,13,32],"texture":0},"up":{"uv":[32,13,31,12],"texture":0},"down":{"uv":[14,31,13,32],"texture":0}},"type":"cube","uuid":"88057037-0394-5594-4e5e-c13f1e16c054"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[4.357949590217606,29.926934182907637,7.29289323091507],"to":[5.357949590217606,30.739434182907637,8.29289323091507],"autouv":0,"color":0,"rotation":[0,0,45],"origin":[4.857949590217606,30.520684182907637,7.79289323091507],"faces":{"north":{"uv":[31,13,32,14],"texture":0},"east":{"uv":[14,31,15,32],"texture":0},"south":{"uv":[31,14,32,15],"texture":0},"west":{"uv":[15,31,16,32],"texture":0},"up":{"uv":[32,16,31,15],"texture":0},"down":{"uv":[17,31,16,32],"texture":0}},"type":"cube","uuid":"4150d13e-9460-5e6e-524a-6187b0fa57d7"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[9.10768544271071,30.22410061425056,7.29289323091507],"to":[10.10768544271071,31.41160061425056,8.29289323091507],"autouv":0,"color":0,"origin":[9.10768544271071,30.09910061425056,7.79289323091507],"faces":{"north":{"uv":[31,16,32,17],"texture":0},"east":{"uv":[17,31,18,32],"texture":0},"south":{"uv":[31,17,32,18],"texture":0},"west":{"uv":[18,31,19,32],"texture":0},"up":{"uv":[32,19,31,18],"texture":0},"down":{"uv":[20,31,19,32],"texture":0}},"type":"cube","uuid":"9f46714b-fa99-c843-2ad2-1004b286a8de"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[5.980702904937608,30.22410061425056,7.29289323091507],"to":[9.168202904937608,31.41160061425056,8.29289323091507],"autouv":0,"color":0,"origin":[8.980702904937608,30.09910061425056,7.79289323091507],"faces":{"north":{"uv":[31,19,32,20],"texture":0},"east":{"uv":[20,31,21,32],"texture":0},"south":{"uv":[31,20,32,21],"texture":0},"west":{"uv":[21,31,22,32],"texture":0},"up":{"uv":[32,22,31,21],"texture":0},"down":{"uv":[23,31,22,32],"texture":0}},"type":"cube","uuid":"49c2aa1c-6f9c-cf1c-550c-24fe67c0040a"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[5.980702904937608,30.22410061425056,7.70710676908493],"to":[9.168202904937608,31.41160061425056,8.70710676908493],"autouv":0,"color":0,"origin":[8.980702904937608,30.09910061425056,8.20710676908493],"faces":{"north":{"uv":[31,22,32,23],"texture":0},"east":{"uv":[23,31,24,32],"texture":0},"south":{"uv":[31,23,32,24],"texture":0},"west":{"uv":[24,31,25,32],"texture":0},"up":{"uv":[32,25,31,24],"texture":0},"down":{"uv":[26,31,25,32],"texture":0}},"type":"cube","uuid":"09f51b14-ca61-108d-0848-5f0ac3d0c1a4"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[9.10768544271071,30.22410061425056,7.70710676908493],"to":[10.10768544271071,31.41160061425056,8.70710676908493],"autouv":0,"color":0,"origin":[9.10768544271071,30.09910061425056,8.20710676908493],"faces":{"north":{"uv":[31,25,32,26],"texture":0},"east":{"uv":[26,31,27,32],"texture":0},"south":{"uv":[31,26,32,27],"texture":0},"west":{"uv":[27,31,28,32],"texture":0},"up":{"uv":[32,28,31,27],"texture":0},"down":{"uv":[29,31,28,32],"texture":0}},"type":"cube","uuid":"d9d16c3f-bc11-7738-1ec4-ab1b244f2dfe"}],"outliner":[{"name":"Everything","origin":[8,8,8],"color":0,"uuid":"f64f2c2f-02d2-bc20-3c9a-0abebe03da04","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["bfce8f8b-76f0-b89a-bb4e-f7282c8e47ba","1e036b37-0071-cac8-ee9d-5122354cf462","db7466b0-7e96-5d5c-f93c-fcc7a8dfc82d","4bbc29a6-a066-8895-ef0d-f124ce541fc8","bce14e26-85e4-0e57-30fd-8b3143a56dc6","c65934ed-32bd-e5dc-4f3c-b9882d1bdc50","0f33180e-6314-9f90-6ea1-e860fe5fe460","2ffd3435-456c-7890-e35d-ff8c9c044bec","d9ea0caf-3a65-07ad-f0ad-795d2a8e05cb","1a840682-984f-22bd-a51d-698a07213b61","d2f36ff1-f811-cf10-c9cf-9606e01bccd1","09b03cb9-bd64-9c1a-c301-adf72a44e720","7e8778e4-7904-5845-62dd-3d44381cae73","ba6e6496-999b-a612-0eae-58ed9b08c08c","bb8ca42d-d18b-5dcc-54b5-682632cf1415","a9ed864a-edbc-e097-dbfa-f4c0c6556a56","e612d803-fc91-5d86-269e-3cb29bfbb59c","dc954fd6-d37c-8e09-6eab-666e30271c54","2e4ff1cf-e0e1-5e25-bd0d-031396334d0f","9f46714b-fa99-c843-2ad2-1004b286a8de","49c2aa1c-6f9c-cf1c-550c-24fe67c0040a","d9d16c3f-bc11-7738-1ec4-ab1b244f2dfe","09f51b14-ca61-108d-0848-5f0ac3d0c1a4","294989f8-d0a9-a40b-88e1-1c766794000e","6023dbe9-c49a-c538-5d2d-0d679bdc722c","7866f9ed-a649-8bb9-0e22-d82830eab4e2","9af9314e-eb08-2285-5009-2956ff4d9098","4150d13e-9460-5e6e-524a-6187b0fa57d7","88057037-0394-5594-4e5e-c13f1e16c054","4947b7e0-1d55-e7a1-2001-c2e1607b49a3","5eb68429-cdae-15c1-694e-934755879812","f5f29ac4-d9ee-96ef-9c02-de20b525d170","2833acb2-1a9c-7ee4-4d0d-2b4cf9f6ed1d","96fa16a7-1554-9e0e-368c-72f34f1af362","7fd378e1-5137-7bb0-38b4-0ed19de45c97","427e7566-2538-b8ab-c159-790ce7253582","4e3f48ec-b467-d50b-4288-998a6a017d1e","496fc623-da15-90bb-5e7f-0b10135eec57","baa7356b-6dde-c9ae-f475-77e21e5d91ed","557694f3-8bf8-5fd5-9843-6de972be7adf","dbe8acae-c21f-600e-bfe9-426a9c5356e0","9442343e-8b1b-3883-b78f-2ddb4d0adc35","2ed12d8e-1574-9707-9ab3-15985ae84929","693bdf47-7389-ebe8-6122-c662d4711708","462c8f6a-3bee-7dee-b25a-b9397d33d02c"]}],"textures":[{"path":"Z:\\Repo\\Minecraft\\2021\\CosmereProject\\_cosmere\\src\\hemalurgy\\resources\\assets\\hemalurgy\\textures\\item\\koloss_sword.png","name":"koloss_sword.png","folder":"item","namespace":"hemalurgy","id":"1","particle":false,"render_mode":"default","render_sides":"auto","frame_time":1,"frame_order_type":"loop","frame_order":"","frame_interpolate":false,"visible":true,"mode":"bitmap","saved":true,"uuid":"465d592c-ef65-50ed-c944-dac00e451891","relative_path":"../../src/hemalurgy/resources/assets/hemalurgy/textures/item/koloss_sword.png","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAYhJREFUWEdjjI6J/s9AZfDp5XMUE/nEJVH4IPkLl68x2Lk4MzCOSAeAguPQnr20D4GMABWGZce/YgQ/TAAUNTSNAl87SYaDN/EnMJo6AFsIoDuHpg7AFQKg+AcBmucCXCFANweg539Y8NPdAegFE8ghdCmIYCEw4A5ATvnIwQ8Sp2kuAFmAng4GxAHIUQCKe1gWpHkI4KoFB9QB6I6iaRrAFgJ0dQCuaghWBtA8DQxKB+CNAmwlFrovcJXvMHWEzKDYAfiaF6Dab8aGO3hbIDR1AKj+33wItUVMKARRsmGUJTdYPbovkF0NC2JsYrjqf/RowZkL7NUh7iXUjsMVxiD9+PQiOwTmAawhgN6Sxd+sRMiCQhBZL64ESTAE0OORUMpHzgHYogabB/CGAL6UjK2RgS6GryGC3CfAKAkJ5WGYZlAQGuhqwT1GqgNgUbB0yVJGnJURrOEAzhW1fuCcAUrlGc2bwBYjOwBWxxObVmDVMYYDkC3FZRioLU8tgDcEqGUJNnNAFsPEAcKXQgxmg3ToAAAAAElFTkSuQmCC"}],"display":{"thirdperson_righthand":{"rotation":[0,90,0],"translation":[0,6,1.75],"scale":[2,2,2]},"thirdperson_lefthand":{"rotation":[0,90,0],"translation":[0,6,1.75],"scale":[2,2,2]},"firstperson_righthand":{"rotation":[0,90,0],"translation":[0,0.5,-1.75],"scale":[1.5,1.5,1.5]},"firstperson_lefthand":{"rotation":[0,90,0],"translation":[0,0.75,-1.75],"scale":[1.5,1.5,1.5]},"ground":{"translation":[0,5,0]},"gui":{"rotation":[0,0,-45],"translation":[-2,-2,0],"scale":[0.5,0.5,0.5]},"fixed":{"translation":[0,-3,0],"scale":[0.5,0.5,0.5]}},"reference_images":[{"name":"Vin_WoA_LB_by_Ben_McSweeney.jpg","scope":"project","position":[300,529],"size":[760,1101.449275362319],"visibility":false,"source":"E:\\COSMERE MODELS\\Vin_WoA_LB_by_Ben_McSweeney.jpg"},{"name":"Pasted","scope":"project","position":[742,1060],"size":[736,1104],"visibility":false,"source":"data:image/png;base64,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"}]} \ No newline at end of file diff --git a/blockbench/sandmastery/SandPlatform01.bbmodel b/blockbench/sandmastery/SandPlatform01.bbmodel new file mode 100644 index 000000000..380be0b87 --- /dev/null +++ b/blockbench/sandmastery/SandPlatform01.bbmodel @@ -0,0 +1 @@ +{"meta":{"format_version":"4.5","model_format":"java_block","box_uv":false},"name":"SandPlatform01","parent":"","ambientocclusion":true,"front_gui_light":false,"visible_box":[1,1,0],"variable_placeholders":"","variable_placeholder_buttons":[],"unhandled_root_fields":{},"resolution":{"width":16,"height":16},"elements":[{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[1,14,5],"to":[6,16,12],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,5,2],"texture":3},"east":{"uv":[0,0,7,2],"texture":3},"south":{"uv":[0,0,5,2],"texture":3},"west":{"uv":[0,0,7,2],"texture":3},"up":{"uv":[0,0,5,7],"texture":3},"down":{"uv":[0,0,5,7],"texture":3}},"type":"cube","uuid":"3756969c-e192-8de5-c375-fe11cada927f"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[0,15,4],"to":[1,16,12],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":3},"east":{"uv":[0,0,8,1],"texture":3},"south":{"uv":[0,0,1,1],"texture":3},"west":{"uv":[0,0,8,1],"texture":3},"up":{"uv":[0,0,1,8],"texture":3},"down":{"uv":[0,0,1,8],"texture":3}},"type":"cube","uuid":"9f0d7754-21f5-4546-79f6-a385866c28ef"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[2,14,12],"to":[6,16,13],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,4,2],"texture":3},"east":{"uv":[0,0,1,2],"texture":3},"south":{"uv":[0,0,4,2],"texture":3},"west":{"uv":[0,0,1,2],"texture":3},"up":{"uv":[0,0,4,1],"texture":3},"down":{"uv":[0,0,4,1],"texture":3}},"type":"cube","uuid":"89993428-c751-3792-9653-5ec8a3565b2a"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[2,14,3],"to":[6,16,5],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,4,2],"texture":3},"east":{"uv":[0,0,2,2],"texture":3},"south":{"uv":[0,0,4,2],"texture":3},"west":{"uv":[0,0,2,2],"texture":3},"up":{"uv":[0,0,4,2],"texture":3},"down":{"uv":[0,0,4,2],"texture":3}},"type":"cube","uuid":"29b2dc93-7f25-ffa0-b24c-41f2e1a165a4"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[3,14,2],"to":[5,16,3],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,2,2],"texture":3},"east":{"uv":[0,0,1,2],"texture":3},"south":{"uv":[0,0,2,2],"texture":3},"west":{"uv":[0,0,1,2],"texture":3},"up":{"uv":[0,0,2,1],"texture":3},"down":{"uv":[0,0,2,1],"texture":3}},"type":"cube","uuid":"a2f7f44d-9192-537f-af0a-91a4d5d5cdd3"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[6,14,4],"to":[7,16,11],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,2],"texture":3},"east":{"uv":[0,0,7,2],"texture":3},"south":{"uv":[0,0,1,2],"texture":3},"west":{"uv":[0,0,7,2],"texture":3},"up":{"uv":[0,0,1,7],"texture":3},"down":{"uv":[0,0,1,7],"texture":3}},"type":"cube","uuid":"2dab598f-3975-7b11-8bf2-b4a83e7020b5"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[10,14,6],"to":[13,16,9],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,3,2],"texture":3},"east":{"uv":[0,0,3,2],"texture":3},"south":{"uv":[0,0,3,2],"texture":3},"west":{"uv":[0,0,3,2],"texture":3},"up":{"uv":[0,0,3,3],"texture":3},"down":{"uv":[0,0,3,3],"texture":3}},"type":"cube","uuid":"1d1ad215-5d04-2b38-87a1-908151da2c44"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[9,14,3],"to":[13,16,6],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,4,2],"texture":3},"east":{"uv":[0,0,3,2],"texture":3},"south":{"uv":[0,0,4,2],"texture":3},"west":{"uv":[0,0,3,2],"texture":3},"up":{"uv":[0,0,4,3],"texture":3},"down":{"uv":[0,0,4,3],"texture":3}},"type":"cube","uuid":"2d420283-b3a9-51cd-f2a8-afcaf3b99287"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[5,14,13],"to":[8,16,14],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,3,2],"texture":3},"east":{"uv":[0,0,1,2],"texture":3},"south":{"uv":[0,0,3,2],"texture":3},"west":{"uv":[0,0,1,2],"texture":3},"up":{"uv":[0,0,3,1],"texture":3},"down":{"uv":[0,0,3,1],"texture":3}},"type":"cube","uuid":"547c07fc-3839-7f3b-f74c-4426aa0d461a"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[6,14,11],"to":[12,16,13],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,6,2],"texture":3},"east":{"uv":[0,0,2,2],"texture":3},"south":{"uv":[0,0,6,2],"texture":3},"west":{"uv":[0,0,2,2],"texture":3},"up":{"uv":[0,0,6,2],"texture":3},"down":{"uv":[0,0,6,2],"texture":3}},"type":"cube","uuid":"1c53c011-c309-c025-a15c-9c824c91dd73"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7,14,10],"to":[12,16,11],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,5,2],"texture":3},"east":{"uv":[0,0,1,2],"texture":3},"south":{"uv":[0,0,5,2],"texture":3},"west":{"uv":[0,0,1,2],"texture":3},"up":{"uv":[0,0,5,1],"texture":3},"down":{"uv":[0,0,5,1],"texture":3}},"type":"cube","uuid":"0cd1d062-68cd-c1fd-025a-f67e55edbeec"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[13,14,2],"to":[15,16,7],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,2,2],"texture":3},"east":{"uv":[0,0,5,2],"texture":3},"south":{"uv":[0,0,2,2],"texture":3},"west":{"uv":[0,0,5,2],"texture":3},"up":{"uv":[0,0,2,5],"texture":3},"down":{"uv":[0,0,2,5],"texture":3}},"type":"cube","uuid":"a37c634b-a1c0-81d1-b414-99e078a8eeff"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[10,14,1],"to":[13,16,3],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,3,2],"texture":3},"east":{"uv":[0,0,2,2],"texture":3},"south":{"uv":[0,0,3,2],"texture":3},"west":{"uv":[0,0,2,2],"texture":3},"up":{"uv":[0,0,3,2],"texture":3},"down":{"uv":[0,0,3,2],"texture":3}},"type":"cube","uuid":"16a0dee0-1eef-3ec2-705a-2d145f72bce1"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8,14,1],"to":[10,16,3],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,2,2],"texture":3},"east":{"uv":[0,0,2,2],"texture":3},"south":{"uv":[0,0,2,2],"texture":3},"west":{"uv":[0,0,2,2],"texture":3},"up":{"uv":[0,0,2,2],"texture":3},"down":{"uv":[0,0,2,2],"texture":3}},"type":"cube","uuid":"8d9694b0-63e8-fccd-34fe-b1a9806afebc"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8,12,4],"to":[9,14,6],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,2],"texture":3},"east":{"uv":[0,0,2,2],"texture":3},"south":{"uv":[0,0,1,2],"texture":3},"west":{"uv":[0,0,2,2],"texture":3},"up":{"uv":[0,0,1,2],"texture":3},"down":{"uv":[0,0,1,2],"texture":3}},"type":"cube","uuid":"60ec065b-2de9-db0f-5016-8164947f1ee6"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[9,14,6],"to":[10,16,9],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,2],"texture":3},"east":{"uv":[0,0,3,2],"texture":3},"south":{"uv":[0,0,1,2],"texture":3},"west":{"uv":[0,0,3,2],"texture":3},"up":{"uv":[0,0,1,3],"texture":3},"down":{"uv":[0,0,1,3],"texture":3}},"type":"cube","uuid":"22e915c6-c421-811a-8a33-016b19134ee8"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[15,14,3],"to":[16,16,6],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,2],"texture":3},"east":{"uv":[0,0,3,2],"texture":3},"south":{"uv":[0,0,1,2],"texture":3},"west":{"uv":[0,0,3,2],"texture":3},"up":{"uv":[0,0,1,3],"texture":3},"down":{"uv":[0,0,1,3],"texture":3}},"type":"cube","uuid":"3ebd80fd-5c13-882e-813b-e59c4b0b777c"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8,14,13],"to":[14,16,15],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,6,2],"texture":3},"east":{"uv":[0,0,2,2],"texture":3},"south":{"uv":[0,0,6,2],"texture":3},"west":{"uv":[0,0,2,2],"texture":3},"up":{"uv":[0,0,6,2],"texture":3},"down":{"uv":[0,0,6,2],"texture":3}},"type":"cube","uuid":"6df0832a-554a-0e48-f47f-7dc979e8067b"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[14,14,13],"to":[15,16,14],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,2],"texture":3},"east":{"uv":[0,0,1,2],"texture":3},"south":{"uv":[0,0,1,2],"texture":3},"west":{"uv":[0,0,1,2],"texture":3},"up":{"uv":[0,0,1,1],"texture":3},"down":{"uv":[0,0,1,1],"texture":3}},"type":"cube","uuid":"412c88f9-40db-d06a-35da-171e3f4a1f18"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[12,14,12],"to":[14,16,13],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,2,2],"texture":3},"east":{"uv":[0,0,1,2],"texture":3},"south":{"uv":[0,0,2,2],"texture":3},"west":{"uv":[0,0,1,2],"texture":3},"up":{"uv":[0,0,2,1],"texture":3},"down":{"uv":[0,0,2,1],"texture":3}},"type":"cube","uuid":"c7f45393-bc38-e364-8c25-de522131bd0d"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8,13,14],"to":[13,14,15],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,5,1],"texture":3},"east":{"uv":[0,0,1,1],"texture":3},"south":{"uv":[0,0,5,1],"texture":3},"west":{"uv":[0,0,1,1],"texture":3},"up":{"uv":[0,0,5,1],"texture":3},"down":{"uv":[0,0,5,1],"texture":3}},"type":"cube","uuid":"4a582729-bf24-215e-3fac-e814c8b286fd"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[9,12,3],"to":[13,14,6],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,4,2],"texture":3},"east":{"uv":[0,0,3,2],"texture":3},"south":{"uv":[0,0,4,2],"texture":3},"west":{"uv":[0,0,3,2],"texture":3},"up":{"uv":[0,0,4,3],"texture":3},"down":{"uv":[0,0,4,3],"texture":3}},"type":"cube","uuid":"c56b5c71-987e-d6f8-7825-1c222ccdca36"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7,14,3],"to":[9,16,6],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,2,2],"texture":3},"east":{"uv":[0,0,3,2],"texture":3},"south":{"uv":[0,0,2,2],"texture":3},"west":{"uv":[0,0,3,2],"texture":3},"up":{"uv":[0,0,2,3],"texture":3},"down":{"uv":[0,0,2,3],"texture":3}},"type":"cube","uuid":"f606a4ae-9084-49f2-2a35-faeb13fa4b6d"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[10,13,2],"to":[13,14,3],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,3,1],"texture":3},"east":{"uv":[0,0,1,1],"texture":3},"south":{"uv":[0,0,3,1],"texture":3},"west":{"uv":[0,0,1,1],"texture":3},"up":{"uv":[0,0,3,1],"texture":3},"down":{"uv":[0,0,3,1],"texture":3}},"type":"cube","uuid":"425496d7-906b-8695-5e43-8bd0d81202e2"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[13,13,2],"to":[14,14,8],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":3},"east":{"uv":[0,0,6,1],"texture":3},"south":{"uv":[0,0,1,1],"texture":3},"west":{"uv":[0,0,6,1],"texture":3},"up":{"uv":[0,0,1,6],"texture":3},"down":{"uv":[0,0,1,6],"texture":3}},"type":"cube","uuid":"70d6e3fb-16b4-3086-a3ba-4dcfb05a37fe"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[13,12,4],"to":[14,13,6],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":3},"east":{"uv":[0,0,2,1],"texture":3},"south":{"uv":[0,0,1,1],"texture":3},"west":{"uv":[0,0,2,1],"texture":3},"up":{"uv":[0,0,1,2],"texture":3},"down":{"uv":[0,0,1,2],"texture":3}},"type":"cube","uuid":"148f4514-dd71-0569-91b7-39c012b1eb38"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[14,13,3],"to":[15,14,6],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":3},"east":{"uv":[0,0,3,1],"texture":3},"south":{"uv":[0,0,1,1],"texture":3},"west":{"uv":[0,0,3,1],"texture":3},"up":{"uv":[0,0,1,3],"texture":3},"down":{"uv":[0,0,1,3],"texture":3}},"type":"cube","uuid":"a358918c-39b4-92cc-45b3-e00cf232ec73"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[10,11,6],"to":[12,14,8],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,2,3],"texture":3},"east":{"uv":[0,0,2,3],"texture":3},"south":{"uv":[0,0,2,3],"texture":3},"west":{"uv":[0,0,2,3],"texture":3},"up":{"uv":[0,0,2,2],"texture":3},"down":{"uv":[0,0,2,2],"texture":3}},"type":"cube","uuid":"6f58ff2d-9c2d-d2c1-113a-fee1f2d4096b"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[10,12,8],"to":[12,14,9],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,2,2],"texture":3},"east":{"uv":[0,0,1,2],"texture":3},"south":{"uv":[0,0,2,2],"texture":3},"west":{"uv":[0,0,1,2],"texture":3},"up":{"uv":[0,0,2,1],"texture":3},"down":{"uv":[0,0,2,1],"texture":3}},"type":"cube","uuid":"1af3967a-9e5e-8a81-0404-b64516409903"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[9,12,6],"to":[10,14,8],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,2],"texture":3},"east":{"uv":[0,0,2,2],"texture":3},"south":{"uv":[0,0,1,2],"texture":3},"west":{"uv":[0,0,2,2],"texture":3},"up":{"uv":[0,0,1,2],"texture":3},"down":{"uv":[0,0,1,2],"texture":3}},"type":"cube","uuid":"797dc2da-a922-e3dc-f04a-914758a74ee8"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[11,9,4],"to":[12,11,7],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,2],"texture":3},"east":{"uv":[0,0,3,2],"texture":3},"south":{"uv":[0,0,1,2],"texture":3},"west":{"uv":[0,0,3,2],"texture":3},"up":{"uv":[0,0,1,3],"texture":3},"down":{"uv":[0,0,1,3],"texture":3}},"type":"cube","uuid":"45bb757a-976b-aac0-b07a-9ed17117125a"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[10,9,4],"to":[11,11,6],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,2],"texture":3},"east":{"uv":[0,0,2,2],"texture":3},"south":{"uv":[0,0,1,2],"texture":3},"west":{"uv":[0,0,2,2],"texture":3},"up":{"uv":[0,0,1,2],"texture":3},"down":{"uv":[0,0,1,2],"texture":3}},"type":"cube","uuid":"0514b0d7-40da-0722-f338-02be0cf6e2c7"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[12,10,5],"to":[13,11,6],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":3},"east":{"uv":[0,0,1,1],"texture":3},"south":{"uv":[0,0,1,1],"texture":3},"west":{"uv":[0,0,1,1],"texture":3},"up":{"uv":[0,0,1,1],"texture":3},"down":{"uv":[0,0,1,1],"texture":3}},"type":"cube","uuid":"8dfcd0fe-7268-be24-b7da-ad9d13986b07"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[11,7,5],"to":[12,9,6],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,2],"texture":3},"east":{"uv":[0,0,1,2],"texture":3},"south":{"uv":[0,0,1,2],"texture":3},"west":{"uv":[0,0,1,2],"texture":3},"up":{"uv":[0,0,1,1],"texture":3},"down":{"uv":[0,0,1,1],"texture":3}},"type":"cube","uuid":"8f5c6bbc-a083-6d9d-8f72-abad285e7524"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8,13,11],"to":[11,14,14],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,3,1],"texture":3},"east":{"uv":[0,0,3,1],"texture":3},"south":{"uv":[0,0,3,1],"texture":3},"west":{"uv":[0,0,3,1],"texture":3},"up":{"uv":[0,0,3,3],"texture":3},"down":{"uv":[0,0,3,3],"texture":3}},"type":"cube","uuid":"1479ac31-3b5e-7518-6a28-02db4b7a9968"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8,15,15],"to":[13,16,16],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,5,1],"texture":3},"east":{"uv":[0,0,1,1],"texture":3},"south":{"uv":[0,0,5,1],"texture":3},"west":{"uv":[0,0,1,1],"texture":3},"up":{"uv":[0,0,5,1],"texture":3},"down":{"uv":[0,0,5,1],"texture":3}},"type":"cube","uuid":"09737d38-664d-8986-3d4c-ab52455391e5"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[11,13,13],"to":[14,14,14],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,3,1],"texture":3},"east":{"uv":[0,0,1,1],"texture":3},"south":{"uv":[0,0,3,1],"texture":3},"west":{"uv":[0,0,1,1],"texture":3},"up":{"uv":[0,0,3,1],"texture":3},"down":{"uv":[0,0,3,1],"texture":3}},"type":"cube","uuid":"d5dbd767-bcb4-4a50-5976-06bd05fa6258"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[11,11,12],"to":[12,13,13],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,2],"texture":3},"east":{"uv":[0,0,1,2],"texture":3},"south":{"uv":[0,0,1,2],"texture":3},"west":{"uv":[0,0,1,2],"texture":3},"up":{"uv":[0,0,1,1],"texture":3},"down":{"uv":[0,0,1,1],"texture":3}},"type":"cube","uuid":"66f657c8-d315-ff58-d880-b66537dccd40"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[10,13,15],"to":[12,14,16],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,2,1],"texture":3},"east":{"uv":[0,0,1,1],"texture":3},"south":{"uv":[0,0,2,1],"texture":3},"west":{"uv":[0,0,1,1],"texture":3},"up":{"uv":[0,0,2,1],"texture":3},"down":{"uv":[0,0,2,1],"texture":3}},"type":"cube","uuid":"04dbd2d0-c719-788d-5222-c838aff8317c"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[6,13,8],"to":[11,14,9],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,5,1],"texture":3},"east":{"uv":[0,0,1,1],"texture":3},"south":{"uv":[0,0,5,1],"texture":3},"west":{"uv":[0,0,1,1],"texture":3},"up":{"uv":[0,0,5,1],"texture":3},"down":{"uv":[0,0,5,1],"texture":3}},"type":"cube","uuid":"597b6a37-cfe0-3a71-c7a4-1fbcef452d5d"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7,13,9],"to":[13,14,11],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,6,1],"texture":3},"east":{"uv":[0,0,2,1],"texture":3},"south":{"uv":[0,0,6,1],"texture":3},"west":{"uv":[0,0,2,1],"texture":3},"up":{"uv":[0,0,6,2],"texture":3},"down":{"uv":[0,0,6,2],"texture":3}},"type":"cube","uuid":"35bcfb90-292a-df53-ade4-0f2e2fe151ca"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[9,10,12],"to":[11,12,14],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,2,2],"texture":3},"east":{"uv":[0,0,2,2],"texture":3},"south":{"uv":[0,0,2,2],"texture":3},"west":{"uv":[0,0,2,2],"texture":3},"up":{"uv":[0,0,2,2],"texture":3},"down":{"uv":[0,0,2,2],"texture":3}},"type":"cube","uuid":"f4e3f4a6-1607-205f-c7ff-3d85949fd1d1"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[10,8,12],"to":[11,10,13],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,2],"texture":3},"east":{"uv":[0,0,1,2],"texture":3},"south":{"uv":[0,0,1,2],"texture":3},"west":{"uv":[0,0,1,2],"texture":3},"up":{"uv":[0,0,1,1],"texture":3},"down":{"uv":[0,0,1,1],"texture":3}},"type":"cube","uuid":"f638c105-52f5-ba7e-c1aa-841b1ab80e56"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[9,11,11],"to":[11,12,12],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,2,1],"texture":3},"east":{"uv":[0,0,1,1],"texture":3},"south":{"uv":[0,0,2,1],"texture":3},"west":{"uv":[0,0,1,1],"texture":3},"up":{"uv":[0,0,2,1],"texture":3},"down":{"uv":[0,0,2,1],"texture":3}},"type":"cube","uuid":"76e28d44-ff65-08dd-ce8f-15b66499ced0"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[2,12,4],"to":[6,14,11],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,4,2],"texture":3},"east":{"uv":[0,0,7,2],"texture":3},"south":{"uv":[0,0,4,2],"texture":3},"west":{"uv":[0,0,7,2],"texture":3},"up":{"uv":[0,0,4,7],"texture":3},"down":{"uv":[0,0,4,7],"texture":3}},"type":"cube","uuid":"628517f4-56e7-66a4-107f-103f255b7e89"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[6,12,6],"to":[7,13,10],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":3},"east":{"uv":[0,0,4,1],"texture":3},"south":{"uv":[0,0,1,1],"texture":3},"west":{"uv":[0,0,4,1],"texture":3},"up":{"uv":[0,0,1,4],"texture":3},"down":{"uv":[0,0,1,4],"texture":3}},"type":"cube","uuid":"3751d8c3-4f10-57aa-5b97-d418fcf9c5e4"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[1,12,6],"to":[2,14,10],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,2],"texture":3},"east":{"uv":[0,0,4,2],"texture":3},"south":{"uv":[0,0,1,2],"texture":3},"west":{"uv":[0,0,4,2],"texture":3},"up":{"uv":[0,0,1,4],"texture":3},"down":{"uv":[0,0,1,4],"texture":3}},"type":"cube","uuid":"8711b732-b785-cda0-d8c1-e7b8900f5c79"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[2,13,11],"to":[6,14,12],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,4,1],"texture":3},"east":{"uv":[0,0,1,1],"texture":3},"south":{"uv":[0,0,4,1],"texture":3},"west":{"uv":[0,0,1,1],"texture":3},"up":{"uv":[0,0,4,1],"texture":3},"down":{"uv":[0,0,4,1],"texture":3}},"type":"cube","uuid":"e9b710d5-496a-0744-649b-7bb770f2f493"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[3,12,3],"to":[5,14,4],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,2,2],"texture":3},"east":{"uv":[0,0,1,2],"texture":3},"south":{"uv":[0,0,2,2],"texture":3},"west":{"uv":[0,0,1,2],"texture":3},"up":{"uv":[0,0,2,1],"texture":3},"down":{"uv":[0,0,2,1],"texture":3}},"type":"cube","uuid":"0c96bcf5-70fc-ae1d-d433-7e0f7c3cc93f"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[2,11,6],"to":[5,12,10],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,3,1],"texture":3},"east":{"uv":[0,0,4,1],"texture":3},"south":{"uv":[0,0,3,1],"texture":3},"west":{"uv":[0,0,4,1],"texture":3},"up":{"uv":[0,0,3,4],"texture":3},"down":{"uv":[0,0,3,4],"texture":3}},"type":"cube","uuid":"ab6bbcd2-bf8c-3aed-26ac-dfd73a476c99"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[6,13,5],"to":[7,14,11],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":3},"east":{"uv":[0,0,6,1],"texture":3},"south":{"uv":[0,0,1,1],"texture":3},"west":{"uv":[0,0,6,1],"texture":3},"up":{"uv":[0,0,1,6],"texture":3},"down":{"uv":[0,0,1,6],"texture":3}},"type":"cube","uuid":"562ae446-ce8c-29df-6b89-882ea4822106"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[5,11,5],"to":[6,12,9],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":3},"east":{"uv":[0,0,4,1],"texture":3},"south":{"uv":[0,0,1,1],"texture":3},"west":{"uv":[0,0,4,1],"texture":3},"up":{"uv":[0,0,1,4],"texture":3},"down":{"uv":[0,0,1,4],"texture":3}},"type":"cube","uuid":"4f1f28db-79e5-1353-2c03-5bf4e8b6566b"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[3,10,5],"to":[5,11,9],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,2,1],"texture":3},"east":{"uv":[0,0,4,1],"texture":3},"south":{"uv":[0,0,2,1],"texture":3},"west":{"uv":[0,0,4,1],"texture":3},"up":{"uv":[0,0,2,4],"texture":3},"down":{"uv":[0,0,2,4],"texture":3}},"type":"cube","uuid":"6519843c-4d07-24e2-a2b3-3dd1dc593c13"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[0,13,7],"to":[1,14,9],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":3},"east":{"uv":[0,0,2,1],"texture":3},"south":{"uv":[0,0,1,1],"texture":3},"west":{"uv":[0,0,2,1],"texture":3},"up":{"uv":[0,0,1,2],"texture":3},"down":{"uv":[0,0,1,2],"texture":3}},"type":"cube","uuid":"2e2106b0-77bf-9a99-5381-6d457c57b5b4"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[3,7,6],"to":[5,9,8],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,2,2],"texture":3},"east":{"uv":[0,0,2,2],"texture":3},"south":{"uv":[0,0,2,2],"texture":3},"west":{"uv":[0,0,2,2],"texture":3},"up":{"uv":[0,0,2,2],"texture":3},"down":{"uv":[0,0,2,2],"texture":3}},"type":"cube","uuid":"86f55d73-4f83-b978-52b5-a28881d2ef18"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[3,11,4],"to":[5,12,6],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,2,1],"texture":3},"east":{"uv":[0,0,2,1],"texture":3},"south":{"uv":[0,0,2,1],"texture":3},"west":{"uv":[0,0,2,1],"texture":3},"up":{"uv":[0,0,2,2],"texture":3},"down":{"uv":[0,0,2,2],"texture":3}},"type":"cube","uuid":"557e679f-e6a5-13ad-6366-26225fc7fcae"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[3,5,7],"to":[4,7,8],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,2],"texture":3},"east":{"uv":[0,0,1,2],"texture":3},"south":{"uv":[0,0,1,2],"texture":3},"west":{"uv":[0,0,1,2],"texture":3},"up":{"uv":[0,0,1,1],"texture":3},"down":{"uv":[0,0,1,1],"texture":3}},"type":"cube","uuid":"c12ccc12-1693-0ded-b4b5-0d1c3317588c"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[2,10,6],"to":[3,11,8],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":3},"east":{"uv":[0,0,2,1],"texture":3},"south":{"uv":[0,0,1,1],"texture":3},"west":{"uv":[0,0,2,1],"texture":3},"up":{"uv":[0,0,1,2],"texture":3},"down":{"uv":[0,0,1,2],"texture":3}},"type":"cube","uuid":"4570dd67-ec34-b5ba-62c4-694cccee17ba"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[9,11,4],"to":[13,12,6],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,4,1],"texture":3},"east":{"uv":[0,0,2,1],"texture":3},"south":{"uv":[0,0,4,1],"texture":3},"west":{"uv":[0,0,2,1],"texture":3},"up":{"uv":[0,0,4,2],"texture":3},"down":{"uv":[0,0,4,2],"texture":3}},"type":"cube","uuid":"f966abea-8f0f-86f7-5238-68f1ef4e5a06"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[10,11,3],"to":[12,12,4],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,2,1],"texture":3},"east":{"uv":[0,0,1,1],"texture":3},"south":{"uv":[0,0,2,1],"texture":3},"west":{"uv":[0,0,1,1],"texture":3},"up":{"uv":[0,0,2,1],"texture":3},"down":{"uv":[0,0,2,1],"texture":3}},"type":"cube","uuid":"b3ed62d5-a0a9-1924-3bed-3bb90119ddd2"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[11,12,2],"to":[12,13,3],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":3},"east":{"uv":[0,0,1,1],"texture":3},"south":{"uv":[0,0,1,1],"texture":3},"west":{"uv":[0,0,1,1],"texture":3},"up":{"uv":[0,0,1,1],"texture":3},"down":{"uv":[0,0,1,1],"texture":3}},"type":"cube","uuid":"8f56265f-09c0-719b-d61e-d74eb73f68d4"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[13,14,1],"to":[14,16,2],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,2],"texture":3},"east":{"uv":[0,0,1,2],"texture":3},"south":{"uv":[0,0,1,2],"texture":3},"west":{"uv":[0,0,1,2],"texture":3},"up":{"uv":[0,0,1,1],"texture":3},"down":{"uv":[0,0,1,1],"texture":3}},"type":"cube","uuid":"068182fb-8107-1579-e4fc-738a582e1b6d"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[11,14,0],"to":[13,16,1],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,2,2],"texture":3},"east":{"uv":[0,0,1,2],"texture":3},"south":{"uv":[0,0,2,2],"texture":3},"west":{"uv":[0,0,1,2],"texture":3},"up":{"uv":[0,0,2,1],"texture":3},"down":{"uv":[0,0,2,1],"texture":3}},"type":"cube","uuid":"c44f72ae-340f-cc71-6619-748eb9f3024e"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8,14,6],"to":[9,16,9],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,2],"texture":3},"east":{"uv":[0,0,3,2],"texture":3},"south":{"uv":[0,0,1,2],"texture":3},"west":{"uv":[0,0,3,2],"texture":3},"up":{"uv":[0,0,1,3],"texture":3},"down":{"uv":[0,0,1,3],"texture":3}},"type":"cube","uuid":"1b33033d-7b7d-d608-5d4c-b0b5cbd00ace"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[11,14,9],"to":[12,16,10],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,2],"texture":3},"east":{"uv":[0,0,1,2],"texture":3},"south":{"uv":[0,0,1,2],"texture":3},"west":{"uv":[0,0,1,2],"texture":3},"up":{"uv":[0,0,1,1],"texture":3},"down":{"uv":[0,0,1,1],"texture":3}},"type":"cube","uuid":"b82ded88-cd87-c90a-f8db-a70dec551739"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[13,14,7],"to":[14,16,8],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,2],"texture":3},"east":{"uv":[0,0,1,2],"texture":3},"south":{"uv":[0,0,1,2],"texture":3},"west":{"uv":[0,0,1,2],"texture":3},"up":{"uv":[0,0,1,1],"texture":3},"down":{"uv":[0,0,1,1],"texture":3}},"type":"cube","uuid":"4b3fe073-ecde-4ee3-c948-5a1cca4eb67d"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[12,11,6],"to":[13,14,7],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,3],"texture":3},"east":{"uv":[0,0,1,3],"texture":3},"south":{"uv":[0,0,1,3],"texture":3},"west":{"uv":[0,0,1,3],"texture":3},"up":{"uv":[0,0,1,1],"texture":3},"down":{"uv":[0,0,1,1],"texture":3}},"type":"cube","uuid":"aaac3948-6ce2-6122-f556-3a009d4dfbb3"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[12,12,7],"to":[13,14,8],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,2],"texture":3},"east":{"uv":[0,0,1,2],"texture":3},"south":{"uv":[0,0,1,2],"texture":3},"west":{"uv":[0,0,1,2],"texture":3},"up":{"uv":[0,0,1,1],"texture":3},"down":{"uv":[0,0,1,1],"texture":3}},"type":"cube","uuid":"c2caf164-24c9-9a0a-3a81-d810086172af"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7,13,4],"to":[8,14,6],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":3},"east":{"uv":[0,0,2,1],"texture":3},"south":{"uv":[0,0,1,1],"texture":3},"west":{"uv":[0,0,2,1],"texture":3},"up":{"uv":[0,0,1,2],"texture":3},"down":{"uv":[0,0,1,2],"texture":3}},"type":"cube","uuid":"5c312153-25af-2cd0-bb92-0fe4a6013f88"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[11,13,1],"to":[12,14,2],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":3},"east":{"uv":[0,0,1,1],"texture":3},"south":{"uv":[0,0,1,1],"texture":3},"west":{"uv":[0,0,1,1],"texture":3},"up":{"uv":[0,0,1,1],"texture":3},"down":{"uv":[0,0,1,1],"texture":3}},"type":"cube","uuid":"7e693f64-f4db-8c1b-12d4-bcf0f4482a21"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8,12,10],"to":[11,13,14],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,3,1],"texture":3},"east":{"uv":[0,0,4,1],"texture":3},"south":{"uv":[0,0,3,1],"texture":3},"west":{"uv":[0,0,4,1],"texture":3},"up":{"uv":[0,0,3,4],"texture":3},"down":{"uv":[0,0,3,4],"texture":3}},"type":"cube","uuid":"f75b8080-8797-acde-3223-19fb4bad47b4"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8,14,9],"to":[10,16,10],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,2,2],"texture":3},"east":{"uv":[0,0,1,2],"texture":3},"south":{"uv":[0,0,2,2],"texture":3},"west":{"uv":[0,0,1,2],"texture":3},"up":{"uv":[0,0,2,1],"texture":3},"down":{"uv":[0,0,2,1],"texture":3}},"type":"cube","uuid":"33f7c6ca-9aa5-d916-c276-71b94afab887"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[12,14,11],"to":[13,16,12],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,2],"texture":3},"east":{"uv":[0,0,1,2],"texture":3},"south":{"uv":[0,0,1,2],"texture":3},"west":{"uv":[0,0,1,2],"texture":3},"up":{"uv":[0,0,1,1],"texture":3},"down":{"uv":[0,0,1,1],"texture":3}},"type":"cube","uuid":"5e8f5fb4-3bec-f8d1-ab58-30a7ba1c9c30"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[11,13,12],"to":[13,14,13],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,2,1],"texture":3},"east":{"uv":[0,0,1,1],"texture":3},"south":{"uv":[0,0,2,1],"texture":3},"west":{"uv":[0,0,1,1],"texture":3},"up":{"uv":[0,0,2,1],"texture":3},"down":{"uv":[0,0,2,1],"texture":3}},"type":"cube","uuid":"ee5a847b-108f-616a-55ad-49d259e10bf1"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[11,13,11],"to":[12,14,12],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":3},"east":{"uv":[0,0,1,1],"texture":3},"south":{"uv":[0,0,1,1],"texture":3},"west":{"uv":[0,0,1,1],"texture":3},"up":{"uv":[0,0,1,1],"texture":3},"down":{"uv":[0,0,1,1],"texture":3}},"type":"cube","uuid":"f9606542-660d-47de-3a5d-2267edef1d70"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[11,12,13],"to":[13,13,14],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,2,1],"texture":3},"east":{"uv":[0,0,1,1],"texture":3},"south":{"uv":[0,0,2,1],"texture":3},"west":{"uv":[0,0,1,1],"texture":3},"up":{"uv":[0,0,2,1],"texture":3},"down":{"uv":[0,0,2,1],"texture":3}},"type":"cube","uuid":"320c6ace-4261-8cd9-acfa-62c99f93c22e"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[10,12,14],"to":[12,13,15],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,2,1],"texture":3},"east":{"uv":[0,0,1,1],"texture":3},"south":{"uv":[0,0,2,1],"texture":3},"west":{"uv":[0,0,1,1],"texture":3},"up":{"uv":[0,0,2,1],"texture":3},"down":{"uv":[0,0,2,1],"texture":3}},"type":"cube","uuid":"1e55aecd-86c1-5889-99ce-9573a7b81910"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7,14,6],"to":[8,16,10],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,2],"texture":3},"east":{"uv":[0,0,4,2],"texture":3},"south":{"uv":[0,0,1,2],"texture":3},"west":{"uv":[0,0,4,2],"texture":3},"up":{"uv":[0,0,1,4],"texture":3},"down":{"uv":[0,0,1,4],"texture":3}},"type":"cube","uuid":"4eb14da1-565b-6d1b-f8dc-f475ab01bb25"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[3,14,1],"to":[5,16,2],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,2,2],"texture":3},"east":{"uv":[0,0,1,2],"texture":3},"south":{"uv":[0,0,2,2],"texture":3},"west":{"uv":[0,0,1,2],"texture":3},"up":{"uv":[0,0,2,1],"texture":3},"down":{"uv":[0,0,2,1],"texture":3}},"type":"cube","uuid":"2d235318-2a27-3429-4bdd-82446e9357bb"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[1,14,4],"to":[2,16,5],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,2],"texture":3},"east":{"uv":[0,0,1,2],"texture":3},"south":{"uv":[0,0,1,2],"texture":3},"west":{"uv":[0,0,1,2],"texture":3},"up":{"uv":[0,0,1,1],"texture":3},"down":{"uv":[0,0,1,1],"texture":3}},"type":"cube","uuid":"d55419b7-22dc-0295-9e46-b1e5a394ec1a"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[3,13,2],"to":[4,14,3],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":3},"east":{"uv":[0,0,1,1],"texture":3},"south":{"uv":[0,0,1,1],"texture":3},"west":{"uv":[0,0,1,1],"texture":3},"up":{"uv":[0,0,1,1],"texture":3},"down":{"uv":[0,0,1,1],"texture":3}},"type":"cube","uuid":"95997cb0-8a69-150b-274c-45161642b1f4"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[3,13,12],"to":[6,14,14],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,3,1],"texture":3},"east":{"uv":[0,0,2,1],"texture":3},"south":{"uv":[0,0,3,1],"texture":3},"west":{"uv":[0,0,2,1],"texture":3},"up":{"uv":[0,0,3,2],"texture":3},"down":{"uv":[0,0,3,2],"texture":3}},"type":"cube","uuid":"ed608c74-8b37-9829-fce6-302f56028155"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[2,15,13],"to":[5,16,15],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,3,1],"texture":3},"east":{"uv":[0,0,2,1],"texture":3},"south":{"uv":[0,0,3,1],"texture":3},"west":{"uv":[0,0,2,1],"texture":3},"up":{"uv":[0,0,3,2],"texture":3},"down":{"uv":[0,0,3,2],"texture":3}},"type":"cube","uuid":"8f7cfec5-00d1-7b3d-9903-ea8139048c5e"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[1,11,7],"to":[2,12,8],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":3},"east":{"uv":[0,0,1,1],"texture":3},"south":{"uv":[0,0,1,1],"texture":3},"west":{"uv":[0,0,1,1],"texture":3},"up":{"uv":[0,0,1,1],"texture":3},"down":{"uv":[0,0,1,1],"texture":3}},"type":"cube","uuid":"25357683-5a46-3369-f2aa-3d734ffaff35"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[1,13,5],"to":[2,14,6],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":3},"east":{"uv":[0,0,1,1],"texture":3},"south":{"uv":[0,0,1,1],"texture":3},"west":{"uv":[0,0,1,1],"texture":3},"up":{"uv":[0,0,1,1],"texture":3},"down":{"uv":[0,0,1,1],"texture":3}},"type":"cube","uuid":"46793d86-b385-3765-7957-b847b0f05910"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[3,9,5],"to":[5,10,9],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,2,1],"texture":3},"east":{"uv":[0,0,4,1],"texture":3},"south":{"uv":[0,0,2,1],"texture":3},"west":{"uv":[0,0,4,1],"texture":3},"up":{"uv":[0,0,2,4],"texture":3},"down":{"uv":[0,0,2,4],"texture":3}},"type":"cube","uuid":"193b2e28-6f86-40b5-e376-3705031e6e3c"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[5,10,6],"to":[6,11,8],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":3},"east":{"uv":[0,0,2,1],"texture":3},"south":{"uv":[0,0,1,1],"texture":3},"west":{"uv":[0,0,2,1],"texture":3},"up":{"uv":[0,0,1,2],"texture":3},"down":{"uv":[0,0,1,2],"texture":3}},"type":"cube","uuid":"64cf4859-6dc8-c876-9200-de86adcfc29f"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[3,10,9],"to":[4,11,10],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":3},"east":{"uv":[0,0,1,1],"texture":3},"south":{"uv":[0,0,1,1],"texture":3},"west":{"uv":[0,0,1,1],"texture":3},"up":{"uv":[0,0,1,1],"texture":3},"down":{"uv":[0,0,1,1],"texture":3}},"type":"cube","uuid":"a5bcf8af-c6e3-23d7-ae54-9b4969c4c259"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[1,13,10],"to":[2,14,11],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":3},"east":{"uv":[0,0,1,1],"texture":3},"south":{"uv":[0,0,1,1],"texture":3},"west":{"uv":[0,0,1,1],"texture":3},"up":{"uv":[0,0,1,1],"texture":3},"down":{"uv":[0,0,1,1],"texture":3}},"type":"cube","uuid":"94cafcb7-9cd0-5651-b205-65b8ceae6de2"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[10,14,9],"to":[11,16,10],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,2],"texture":3},"east":{"uv":[0,0,1,2],"texture":3},"south":{"uv":[0,0,1,2],"texture":3},"west":{"uv":[0,0,1,2],"texture":3},"up":{"uv":[0,0,1,1],"texture":3},"down":{"uv":[0,0,1,1],"texture":3}},"type":"cube","uuid":"396c3466-5003-d8d4-52f2-f56ab4471e30"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[5,15,14],"to":[8,16,15],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,3,1],"texture":3},"east":{"uv":[0,0,1,1],"texture":3},"south":{"uv":[0,0,3,1],"texture":3},"west":{"uv":[0,0,1,1],"texture":3},"up":{"uv":[0,0,3,1],"texture":3},"down":{"uv":[0,0,3,1],"texture":3}},"type":"cube","uuid":"aad21c23-f970-e571-82ee-448c39b4bdd7"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[12,14,9],"to":[13,16,11],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,2],"texture":3},"east":{"uv":[0,0,2,2],"texture":3},"south":{"uv":[0,0,1,2],"texture":3},"west":{"uv":[0,0,2,2],"texture":3},"up":{"uv":[0,0,1,2],"texture":3},"down":{"uv":[0,0,1,2],"texture":3}},"type":"cube","uuid":"5c89f053-11b5-bf45-0005-38570af1585c"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[13,15,8],"to":[14,16,12],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":3},"east":{"uv":[0,0,4,1],"texture":3},"south":{"uv":[0,0,1,1],"texture":3},"west":{"uv":[0,0,4,1],"texture":3},"up":{"uv":[0,0,1,4],"texture":3},"down":{"uv":[0,0,1,4],"texture":3}},"type":"cube","uuid":"da3f65f8-291c-2ecc-94cf-048ccd145b33"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[14,15,12],"to":[15,16,13],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":3},"east":{"uv":[0,0,1,1],"texture":3},"south":{"uv":[0,0,1,1],"texture":3},"west":{"uv":[0,0,1,1],"texture":3},"up":{"uv":[0,0,1,1],"texture":3},"down":{"uv":[0,0,1,1],"texture":3}},"type":"cube","uuid":"95eb701b-c5f1-f29a-8290-946883fc0112"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[13,15,15],"to":[14,16,16],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":3},"east":{"uv":[0,0,1,1],"texture":3},"south":{"uv":[0,0,1,1],"texture":3},"west":{"uv":[0,0,1,1],"texture":3},"up":{"uv":[0,0,1,1],"texture":3},"down":{"uv":[0,0,1,1],"texture":3}},"type":"cube","uuid":"d55af1ea-8f48-887a-9bb7-ba06c7e5a739"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[14,15,7],"to":[16,16,9],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,2,1],"texture":3},"east":{"uv":[0,0,2,1],"texture":3},"south":{"uv":[0,0,2,1],"texture":3},"west":{"uv":[0,0,2,1],"texture":3},"up":{"uv":[0,0,2,2],"texture":3},"down":{"uv":[0,0,2,2],"texture":3}},"type":"cube","uuid":"bf4c4b2e-a202-0d45-ff67-3923e80441c6"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[15,15,6],"to":[16,16,7],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":3},"east":{"uv":[0,0,1,1],"texture":3},"south":{"uv":[0,0,1,1],"texture":3},"west":{"uv":[0,0,1,1],"texture":3},"up":{"uv":[0,0,1,1],"texture":3},"down":{"uv":[0,0,1,1],"texture":3}},"type":"cube","uuid":"f0b422ec-fd01-f61f-0056-76b248caf981"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[14,15,1],"to":[15,16,2],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":3},"east":{"uv":[0,0,1,1],"texture":3},"south":{"uv":[0,0,1,1],"texture":3},"west":{"uv":[0,0,1,1],"texture":3},"up":{"uv":[0,0,1,1],"texture":3},"down":{"uv":[0,0,1,1],"texture":3}},"type":"cube","uuid":"29417d7b-4d68-b3c7-a8d6-82a278c3b20a"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[15,15,2],"to":[16,16,3],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":3},"east":{"uv":[0,0,1,1],"texture":3},"south":{"uv":[0,0,1,1],"texture":3},"west":{"uv":[0,0,1,1],"texture":3},"up":{"uv":[0,0,1,1],"texture":3},"down":{"uv":[0,0,1,1],"texture":3}},"type":"cube","uuid":"5c05cd62-d709-8ff7-3e0e-90fe44b75e0d"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[13,15,0],"to":[14,16,1],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":3},"east":{"uv":[0,0,1,1],"texture":3},"south":{"uv":[0,0,1,1],"texture":3},"west":{"uv":[0,0,1,1],"texture":3},"up":{"uv":[0,0,1,1],"texture":3},"down":{"uv":[0,0,1,1],"texture":3}},"type":"cube","uuid":"da69d765-d709-1700-648a-781caa8501b0"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[6,15,0],"to":[11,16,1],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,5,1],"texture":3},"east":{"uv":[0,0,1,1],"texture":3},"south":{"uv":[0,0,5,1],"texture":3},"west":{"uv":[0,0,1,1],"texture":3},"up":{"uv":[0,0,5,1],"texture":3},"down":{"uv":[0,0,5,1],"texture":3}},"type":"cube","uuid":"e4640d37-e968-3069-1900-531e1fff4391"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[6,15,1],"to":[10,16,2],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,4,1],"texture":3},"east":{"uv":[0,0,1,1],"texture":3},"south":{"uv":[0,0,4,1],"texture":3},"west":{"uv":[0,0,1,1],"texture":3},"up":{"uv":[0,0,4,1],"texture":3},"down":{"uv":[0,0,4,1],"texture":3}},"type":"cube","uuid":"4f6fc9f3-6d4e-29c2-1b80-bda8fa6cbcfd"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[6,15,3],"to":[7,16,4],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":3},"east":{"uv":[0,0,1,1],"texture":3},"south":{"uv":[0,0,1,1],"texture":3},"west":{"uv":[0,0,1,1],"texture":3},"up":{"uv":[0,0,1,1],"texture":3},"down":{"uv":[0,0,1,1],"texture":3}},"type":"cube","uuid":"504aa6ec-9596-6691-388e-3750f34c0750"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7,15,2],"to":[8,16,3],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":3},"east":{"uv":[0,0,1,1],"texture":3},"south":{"uv":[0,0,1,1],"texture":3},"west":{"uv":[0,0,1,1],"texture":3},"up":{"uv":[0,0,1,1],"texture":3},"down":{"uv":[0,0,1,1],"texture":3}},"type":"cube","uuid":"7a6180e4-1387-aaa9-6981-2e60b8bb3b86"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[5,15,2],"to":[7,16,3],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,2,1],"texture":3},"east":{"uv":[0,0,1,1],"texture":3},"south":{"uv":[0,0,2,1],"texture":3},"west":{"uv":[0,0,1,1],"texture":3},"up":{"uv":[0,0,2,1],"texture":3},"down":{"uv":[0,0,2,1],"texture":3}},"type":"cube","uuid":"bfeeac1b-653a-5443-c8b5-e087e33a4873"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[4,15,1],"to":[6,16,2],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,2,1],"texture":3},"east":{"uv":[0,0,1,1],"texture":3},"south":{"uv":[0,0,2,1],"texture":3},"west":{"uv":[0,0,1,1],"texture":3},"up":{"uv":[0,0,2,1],"texture":3},"down":{"uv":[0,0,2,1],"texture":3}},"type":"cube","uuid":"4d6a4cb5-750d-f5e2-eaf7-3b802de252b1"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[2,15,1],"to":[3,16,3],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":3},"east":{"uv":[0,0,2,1],"texture":3},"south":{"uv":[0,0,1,1],"texture":3},"west":{"uv":[0,0,2,1],"texture":3},"up":{"uv":[0,0,1,2],"texture":3},"down":{"uv":[0,0,1,2],"texture":3}},"type":"cube","uuid":"c5c46163-96c8-4978-591e-9777b8bb7232"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[1,15,2],"to":[2,16,4],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":3},"east":{"uv":[0,0,2,1],"texture":3},"south":{"uv":[0,0,1,1],"texture":3},"west":{"uv":[0,0,2,1],"texture":3},"up":{"uv":[0,0,1,2],"texture":3},"down":{"uv":[0,0,1,2],"texture":3}},"type":"cube","uuid":"a2741a3d-c5e4-6ccb-64c6-7731679e9517"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[1,15,12],"to":[2,16,14],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":3},"east":{"uv":[0,0,2,1],"texture":3},"south":{"uv":[0,0,1,1],"texture":3},"west":{"uv":[0,0,2,1],"texture":3},"up":{"uv":[0,0,1,2],"texture":3},"down":{"uv":[0,0,1,2],"texture":3}},"type":"cube","uuid":"758df262-2f6c-7b2b-6145-2be5e41609bb"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[6,13,11],"to":[8,14,14],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,2,1],"texture":3},"east":{"uv":[0,0,3,1],"texture":3},"south":{"uv":[0,0,2,1],"texture":3},"west":{"uv":[0,0,3,1],"texture":3},"up":{"uv":[0,0,2,3],"texture":3},"down":{"uv":[0,0,2,3],"texture":3}},"type":"cube","uuid":"23900b3c-aa66-96f8-3a83-b10d8cbe429f"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[9,13,7],"to":[10,14,8],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":3},"east":{"uv":[0,0,1,1],"texture":3},"south":{"uv":[0,0,1,1],"texture":3},"west":{"uv":[0,0,1,1],"texture":3},"up":{"uv":[0,0,1,1],"texture":3},"down":{"uv":[0,0,1,1],"texture":3}},"type":"cube","uuid":"6b54a1bf-b25d-2917-9e85-c1ec1ace479e"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8,13,6],"to":[9,14,8],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":3},"east":{"uv":[0,0,2,1],"texture":3},"south":{"uv":[0,0,1,1],"texture":3},"west":{"uv":[0,0,2,1],"texture":3},"up":{"uv":[0,0,1,2],"texture":3},"down":{"uv":[0,0,1,2],"texture":3}},"type":"cube","uuid":"2562e637-1dfc-ce78-7139-351004d247e5"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[6,11,6],"to":[7,12,8],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":3},"east":{"uv":[0,0,2,1],"texture":3},"south":{"uv":[0,0,1,1],"texture":3},"west":{"uv":[0,0,2,1],"texture":3},"up":{"uv":[0,0,1,2],"texture":3},"down":{"uv":[0,0,1,2],"texture":3}},"type":"cube","uuid":"38052db3-e813-c638-a441-3e3e69818fc0"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7,13,6],"to":[8,14,8],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":3},"east":{"uv":[0,0,2,1],"texture":3},"south":{"uv":[0,0,1,1],"texture":3},"west":{"uv":[0,0,2,1],"texture":3},"up":{"uv":[0,0,1,2],"texture":3},"down":{"uv":[0,0,1,2],"texture":3}},"type":"cube","uuid":"da2ee2d8-d3dc-06df-c265-0d100965ad4d"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8,11,12],"to":[9,12,13],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":3},"east":{"uv":[0,0,1,1],"texture":3},"south":{"uv":[0,0,1,1],"texture":3},"west":{"uv":[0,0,1,1],"texture":3},"up":{"uv":[0,0,1,1],"texture":3},"down":{"uv":[0,0,1,1],"texture":3}},"type":"cube","uuid":"5a32215e-c974-3a64-86d2-388cd69aa682"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[5,9,7],"to":[6,10,8],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":3},"east":{"uv":[0,0,1,1],"texture":3},"south":{"uv":[0,0,1,1],"texture":3},"west":{"uv":[0,0,1,1],"texture":3},"up":{"uv":[0,0,1,1],"texture":3},"down":{"uv":[0,0,1,1],"texture":3}},"type":"cube","uuid":"0601f440-6712-0c51-5ac5-d5818c063454"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[3,8,8],"to":[4,9,9],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":3},"east":{"uv":[0,0,1,1],"texture":3},"south":{"uv":[0,0,1,1],"texture":3},"west":{"uv":[0,0,1,1],"texture":3},"up":{"uv":[0,0,1,1],"texture":3},"down":{"uv":[0,0,1,1],"texture":3}},"type":"cube","uuid":"39889bca-57ba-0c62-6224-571ca090a4f7"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[2,8,7],"to":[3,10,8],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,2],"texture":3},"east":{"uv":[0,0,1,2],"texture":3},"south":{"uv":[0,0,1,2],"texture":3},"west":{"uv":[0,0,1,2],"texture":3},"up":{"uv":[0,0,1,1],"texture":3},"down":{"uv":[0,0,1,1],"texture":3}},"type":"cube","uuid":"955179b6-91e6-19ef-34c3-e77c5dd891f8"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[3,15,0],"to":[6,16,1],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,3,1],"texture":3},"east":{"uv":[0,0,1,1],"texture":3},"south":{"uv":[0,0,3,1],"texture":3},"west":{"uv":[0,0,1,1],"texture":3},"up":{"uv":[0,0,3,1],"texture":3},"down":{"uv":[0,0,3,1],"texture":3}},"type":"cube","uuid":"32243dbc-5e3f-cad3-84d5-f12bbbca7798"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[3,15,15],"to":[8,16,16],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,5,1],"texture":3},"east":{"uv":[0,0,1,1],"texture":3},"south":{"uv":[0,0,5,1],"texture":3},"west":{"uv":[0,0,1,1],"texture":3},"up":{"uv":[0,0,5,1],"texture":3},"down":{"uv":[0,0,5,1],"texture":3}},"type":"cube","uuid":"964724a8-7f22-aa40-3d3b-dabfff1d67e5"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[13,14,11],"to":[15,15,12],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,2,1],"texture":3},"east":{"uv":[0,0,1,1],"texture":3},"south":{"uv":[0,0,2,1],"texture":3},"west":{"uv":[0,0,1,1],"texture":3},"up":{"uv":[0,0,2,1],"texture":3},"down":{"uv":[0,0,2,1],"texture":3}},"type":"cube","uuid":"5715b2db-6a7a-98c3-dbc6-5dc1fca7de0c"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[13,14,8],"to":[14,15,11],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":3},"east":{"uv":[0,0,3,1],"texture":3},"south":{"uv":[0,0,1,1],"texture":3},"west":{"uv":[0,0,3,1],"texture":3},"up":{"uv":[0,0,1,3],"texture":3},"down":{"uv":[0,0,1,3],"texture":3}},"type":"cube","uuid":"1ac30ab4-7cfd-a16f-bec0-5480e354dfdc"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[12,13,11],"to":[13,14,12],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":3},"east":{"uv":[0,0,1,1],"texture":3},"south":{"uv":[0,0,1,1],"texture":3},"west":{"uv":[0,0,1,1],"texture":3},"up":{"uv":[0,0,1,1],"texture":3},"down":{"uv":[0,0,1,1],"texture":3}},"type":"cube","uuid":"43dae14f-9857-34c2-c8cb-c9c178be7d4b"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[11,12,11],"to":[12,13,12],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":3},"east":{"uv":[0,0,1,1],"texture":3},"south":{"uv":[0,0,1,1],"texture":3},"west":{"uv":[0,0,1,1],"texture":3},"up":{"uv":[0,0,1,1],"texture":3},"down":{"uv":[0,0,1,1],"texture":3}},"type":"cube","uuid":"59813752-17f2-e6cf-e4f9-50d3152c024d"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[12,12,12],"to":[13,13,13],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":3},"east":{"uv":[0,0,1,1],"texture":3},"south":{"uv":[0,0,1,1],"texture":3},"west":{"uv":[0,0,1,1],"texture":3},"up":{"uv":[0,0,1,1],"texture":3},"down":{"uv":[0,0,1,1],"texture":3}},"type":"cube","uuid":"343deebd-477e-54bf-bade-f9218e51084e"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7,12,6],"to":[8,13,8],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":3},"east":{"uv":[0,0,2,1],"texture":3},"south":{"uv":[0,0,1,1],"texture":3},"west":{"uv":[0,0,2,1],"texture":3},"up":{"uv":[0,0,1,2],"texture":3},"down":{"uv":[0,0,1,2],"texture":3}},"type":"cube","uuid":"bf288cc0-4a0c-c5ce-a129-e99794775ae3"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[3,12,11],"to":[4,13,12],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":3},"east":{"uv":[0,0,1,1],"texture":3},"south":{"uv":[0,0,1,1],"texture":3},"west":{"uv":[0,0,1,1],"texture":3},"up":{"uv":[0,0,1,1],"texture":3},"down":{"uv":[0,0,1,1],"texture":3}},"type":"cube","uuid":"e39e7605-5a3b-cbea-a7e1-6b1dc0396f64"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[3,11,10],"to":[4,12,11],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":3},"east":{"uv":[0,0,1,1],"texture":3},"south":{"uv":[0,0,1,1],"texture":3},"west":{"uv":[0,0,1,1],"texture":3},"up":{"uv":[0,0,1,1],"texture":3},"down":{"uv":[0,0,1,1],"texture":3}},"type":"cube","uuid":"a351f969-6d2c-b146-93a6-d8aa75032eba"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7,12,11],"to":[8,13,13],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":3},"east":{"uv":[0,0,2,1],"texture":3},"south":{"uv":[0,0,1,1],"texture":3},"west":{"uv":[0,0,2,1],"texture":3},"up":{"uv":[0,0,1,2],"texture":3},"down":{"uv":[0,0,1,2],"texture":3}},"type":"cube","uuid":"dba8a50d-833c-f6c2-fbfb-2869a576e45f"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[9,12,9],"to":[10,14,10],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,2],"texture":3},"east":{"uv":[0,0,1,2],"texture":3},"south":{"uv":[0,0,1,2],"texture":3},"west":{"uv":[0,0,1,2],"texture":3},"up":{"uv":[0,0,1,1],"texture":3},"down":{"uv":[0,0,1,1],"texture":3}},"type":"cube","uuid":"65ad3b59-2ef3-8f9b-9b3f-27b496ace6e4"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[5,14,14],"to":[8,15,15],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,3,1],"texture":3},"east":{"uv":[0,0,1,1],"texture":3},"south":{"uv":[0,0,3,1],"texture":3},"west":{"uv":[0,0,1,1],"texture":3},"up":{"uv":[0,0,3,1],"texture":3},"down":{"uv":[0,0,3,1],"texture":3}},"type":"cube","uuid":"079a6c0c-c16d-b8c8-eabf-6485b3d1195f"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[3,14,13],"to":[5,15,15],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,2,1],"texture":3},"east":{"uv":[0,0,2,1],"texture":3},"south":{"uv":[0,0,2,1],"texture":3},"west":{"uv":[0,0,2,1],"texture":3},"up":{"uv":[0,0,2,2],"texture":3},"down":{"uv":[0,0,2,2],"texture":3}},"type":"cube","uuid":"4b56862d-5275-bd18-e6aa-fc8a85bf8cd6"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[9,9,12],"to":[10,10,13],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":3},"east":{"uv":[0,0,1,1],"texture":3},"south":{"uv":[0,0,1,1],"texture":3},"west":{"uv":[0,0,1,1],"texture":3},"up":{"uv":[0,0,1,1],"texture":3},"down":{"uv":[0,0,1,1],"texture":3}},"type":"cube","uuid":"7d4afb75-cb79-abee-e457-8f7bf24cef5d"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[3,6,6],"to":[4,7,7],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":3},"east":{"uv":[0,0,1,1],"texture":3},"south":{"uv":[0,0,1,1],"texture":3},"west":{"uv":[0,0,1,1],"texture":3},"up":{"uv":[0,0,1,1],"texture":3},"down":{"uv":[0,0,1,1],"texture":3}},"type":"cube","uuid":"4be1e152-3111-07a5-6a42-525930ec5f73"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[3,8,5],"to":[4,9,6],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":3},"east":{"uv":[0,0,1,1],"texture":3},"south":{"uv":[0,0,1,1],"texture":3},"west":{"uv":[0,0,1,1],"texture":3},"up":{"uv":[0,0,1,1],"texture":3},"down":{"uv":[0,0,1,1],"texture":3}},"type":"cube","uuid":"00665d2d-7cce-29a6-698a-ff381aa2a42c"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[14,15,9],"to":[15,16,12],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":3},"east":{"uv":[0,0,3,1],"texture":3},"south":{"uv":[0,0,1,1],"texture":3},"west":{"uv":[0,0,3,1],"texture":3},"up":{"uv":[0,0,1,3],"texture":3},"down":{"uv":[0,0,1,3],"texture":3}},"type":"cube","uuid":"0c7e8d72-d74f-72b3-92b3-c1a4589b7692"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[14,15,14],"to":[15,16,15],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":3},"east":{"uv":[0,0,1,1],"texture":3},"south":{"uv":[0,0,1,1],"texture":3},"west":{"uv":[0,0,1,1],"texture":3},"up":{"uv":[0,0,1,1],"texture":3},"down":{"uv":[0,0,1,1],"texture":3}},"type":"cube","uuid":"5df1844e-8389-551f-2961-9331c3deecb0"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[9,14,15],"to":[13,15,16],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,4,1],"texture":3},"east":{"uv":[0,0,1,1],"texture":3},"south":{"uv":[0,0,4,1],"texture":3},"west":{"uv":[0,0,1,1],"texture":3},"up":{"uv":[0,0,4,1],"texture":3},"down":{"uv":[0,0,4,1],"texture":3}},"type":"cube","uuid":"2ea33496-c0c8-3ee9-e295-bc2b1d9f62f2"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[0,14,6],"to":[1,15,10],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":3},"east":{"uv":[0,0,4,1],"texture":3},"south":{"uv":[0,0,1,1],"texture":3},"west":{"uv":[0,0,4,1],"texture":3},"up":{"uv":[0,0,1,4],"texture":3},"down":{"uv":[0,0,1,4],"texture":3}},"type":"cube","uuid":"728b8f1f-668a-ba85-11cf-7fad43cb0d54"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[15,15,9],"to":[16,16,14],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":3},"east":{"uv":[0,0,5,1],"texture":3},"south":{"uv":[0,0,1,1],"texture":3},"west":{"uv":[0,0,5,1],"texture":3},"up":{"uv":[0,0,1,5],"texture":3},"down":{"uv":[0,0,1,5],"texture":3}},"type":"cube","uuid":"9b290f65-8a6c-f45b-3885-b9ba212033a0"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[6,14,2],"to":[7,16,4],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,2],"texture":3},"east":{"uv":[0,0,2,2],"texture":3},"south":{"uv":[0,0,1,2],"texture":3},"west":{"uv":[0,0,2,2],"texture":3},"up":{"uv":[0,0,1,2],"texture":3},"down":{"uv":[0,0,1,2],"texture":3}},"type":"cube","uuid":"5172199a-48d4-a9ed-3c13-78e39953f082"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[5,14,2],"to":[6,15,3],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":3},"east":{"uv":[0,0,1,1],"texture":3},"south":{"uv":[0,0,1,1],"texture":3},"west":{"uv":[0,0,1,1],"texture":3},"up":{"uv":[0,0,1,1],"texture":3},"down":{"uv":[0,0,1,1],"texture":3}},"type":"cube","uuid":"9592cba6-95c9-3e46-0dd0-b82f657f7a27"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7,14,2],"to":[8,15,3],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":3},"east":{"uv":[0,0,1,1],"texture":3},"south":{"uv":[0,0,1,1],"texture":3},"west":{"uv":[0,0,1,1],"texture":3},"up":{"uv":[0,0,1,1],"texture":3},"down":{"uv":[0,0,1,1],"texture":3}},"type":"cube","uuid":"3fd8d20b-6eac-a1cf-17b4-1719b880ead8"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[14,14,7],"to":[15,15,11],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":3},"east":{"uv":[0,0,4,1],"texture":3},"south":{"uv":[0,0,1,1],"texture":3},"west":{"uv":[0,0,4,1],"texture":3},"up":{"uv":[0,0,1,4],"texture":3},"down":{"uv":[0,0,1,4],"texture":3}},"type":"cube","uuid":"65a2249e-90a1-036a-747b-b33a5a7d9a0b"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[12,13,8],"to":[13,14,9],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":3},"east":{"uv":[0,0,1,1],"texture":3},"south":{"uv":[0,0,1,1],"texture":3},"west":{"uv":[0,0,1,1],"texture":3},"up":{"uv":[0,0,1,1],"texture":3},"down":{"uv":[0,0,1,1],"texture":3}},"type":"cube","uuid":"4cc7e394-ca05-7333-938f-cbe85183b543"}],"outliner":[{"name":"Everything","origin":[8,8,8],"color":0,"uuid":"f41eaa13-d7b1-3b98-92a1-6d9d0451ccfc","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":[]},"3756969c-e192-8de5-c375-fe11cada927f","9f0d7754-21f5-4546-79f6-a385866c28ef","89993428-c751-3792-9653-5ec8a3565b2a","29b2dc93-7f25-ffa0-b24c-41f2e1a165a4","a2f7f44d-9192-537f-af0a-91a4d5d5cdd3","2dab598f-3975-7b11-8bf2-b4a83e7020b5","1d1ad215-5d04-2b38-87a1-908151da2c44","2d420283-b3a9-51cd-f2a8-afcaf3b99287","547c07fc-3839-7f3b-f74c-4426aa0d461a","1c53c011-c309-c025-a15c-9c824c91dd73","0cd1d062-68cd-c1fd-025a-f67e55edbeec","a37c634b-a1c0-81d1-b414-99e078a8eeff","16a0dee0-1eef-3ec2-705a-2d145f72bce1","8d9694b0-63e8-fccd-34fe-b1a9806afebc","5172199a-48d4-a9ed-3c13-78e39953f082","60ec065b-2de9-db0f-5016-8164947f1ee6","22e915c6-c421-811a-8a33-016b19134ee8","3ebd80fd-5c13-882e-813b-e59c4b0b777c","6df0832a-554a-0e48-f47f-7dc979e8067b","412c88f9-40db-d06a-35da-171e3f4a1f18","c7f45393-bc38-e364-8c25-de522131bd0d","4a582729-bf24-215e-3fac-e814c8b286fd","c56b5c71-987e-d6f8-7825-1c222ccdca36","f606a4ae-9084-49f2-2a35-faeb13fa4b6d","425496d7-906b-8695-5e43-8bd0d81202e2","70d6e3fb-16b4-3086-a3ba-4dcfb05a37fe","148f4514-dd71-0569-91b7-39c012b1eb38","a358918c-39b4-92cc-45b3-e00cf232ec73","6f58ff2d-9c2d-d2c1-113a-fee1f2d4096b","1af3967a-9e5e-8a81-0404-b64516409903","797dc2da-a922-e3dc-f04a-914758a74ee8","45bb757a-976b-aac0-b07a-9ed17117125a","0514b0d7-40da-0722-f338-02be0cf6e2c7","8dfcd0fe-7268-be24-b7da-ad9d13986b07","8f5c6bbc-a083-6d9d-8f72-abad285e7524","1479ac31-3b5e-7518-6a28-02db4b7a9968","09737d38-664d-8986-3d4c-ab52455391e5","d5dbd767-bcb4-4a50-5976-06bd05fa6258","66f657c8-d315-ff58-d880-b66537dccd40","04dbd2d0-c719-788d-5222-c838aff8317c","597b6a37-cfe0-3a71-c7a4-1fbcef452d5d","35bcfb90-292a-df53-ade4-0f2e2fe151ca","f4e3f4a6-1607-205f-c7ff-3d85949fd1d1","f638c105-52f5-ba7e-c1aa-841b1ab80e56","76e28d44-ff65-08dd-ce8f-15b66499ced0","628517f4-56e7-66a4-107f-103f255b7e89","3751d8c3-4f10-57aa-5b97-d418fcf9c5e4","8711b732-b785-cda0-d8c1-e7b8900f5c79","e9b710d5-496a-0744-649b-7bb770f2f493","0c96bcf5-70fc-ae1d-d433-7e0f7c3cc93f","ab6bbcd2-bf8c-3aed-26ac-dfd73a476c99","562ae446-ce8c-29df-6b89-882ea4822106","4f1f28db-79e5-1353-2c03-5bf4e8b6566b","6519843c-4d07-24e2-a2b3-3dd1dc593c13","2e2106b0-77bf-9a99-5381-6d457c57b5b4","86f55d73-4f83-b978-52b5-a28881d2ef18","557e679f-e6a5-13ad-6366-26225fc7fcae","c12ccc12-1693-0ded-b4b5-0d1c3317588c","4570dd67-ec34-b5ba-62c4-694cccee17ba","f966abea-8f0f-86f7-5238-68f1ef4e5a06","b3ed62d5-a0a9-1924-3bed-3bb90119ddd2","8f56265f-09c0-719b-d61e-d74eb73f68d4","068182fb-8107-1579-e4fc-738a582e1b6d","c44f72ae-340f-cc71-6619-748eb9f3024e","1b33033d-7b7d-d608-5d4c-b0b5cbd00ace","b82ded88-cd87-c90a-f8db-a70dec551739","4b3fe073-ecde-4ee3-c948-5a1cca4eb67d","aaac3948-6ce2-6122-f556-3a009d4dfbb3","c2caf164-24c9-9a0a-3a81-d810086172af","5c312153-25af-2cd0-bb92-0fe4a6013f88","7e693f64-f4db-8c1b-12d4-bcf0f4482a21","f75b8080-8797-acde-3223-19fb4bad47b4","33f7c6ca-9aa5-d916-c276-71b94afab887","5e8f5fb4-3bec-f8d1-ab58-30a7ba1c9c30","ee5a847b-108f-616a-55ad-49d259e10bf1","f9606542-660d-47de-3a5d-2267edef1d70","320c6ace-4261-8cd9-acfa-62c99f93c22e","1e55aecd-86c1-5889-99ce-9573a7b81910","4eb14da1-565b-6d1b-f8dc-f475ab01bb25","2d235318-2a27-3429-4bdd-82446e9357bb","d55419b7-22dc-0295-9e46-b1e5a394ec1a","95997cb0-8a69-150b-274c-45161642b1f4","9592cba6-95c9-3e46-0dd0-b82f657f7a27","3fd8d20b-6eac-a1cf-17b4-1719b880ead8","ed608c74-8b37-9829-fce6-302f56028155","8f7cfec5-00d1-7b3d-9903-ea8139048c5e","25357683-5a46-3369-f2aa-3d734ffaff35","46793d86-b385-3765-7957-b847b0f05910","193b2e28-6f86-40b5-e376-3705031e6e3c","64cf4859-6dc8-c876-9200-de86adcfc29f","a5bcf8af-c6e3-23d7-ae54-9b4969c4c259","94cafcb7-9cd0-5651-b205-65b8ceae6de2","396c3466-5003-d8d4-52f2-f56ab4471e30","aad21c23-f970-e571-82ee-448c39b4bdd7","5c89f053-11b5-bf45-0005-38570af1585c","da3f65f8-291c-2ecc-94cf-048ccd145b33","95eb701b-c5f1-f29a-8290-946883fc0112","d55af1ea-8f48-887a-9bb7-ba06c7e5a739","bf4c4b2e-a202-0d45-ff67-3923e80441c6","9b290f65-8a6c-f45b-3885-b9ba212033a0","f0b422ec-fd01-f61f-0056-76b248caf981","29417d7b-4d68-b3c7-a8d6-82a278c3b20a","5c05cd62-d709-8ff7-3e0e-90fe44b75e0d","da69d765-d709-1700-648a-781caa8501b0","e4640d37-e968-3069-1900-531e1fff4391","4f6fc9f3-6d4e-29c2-1b80-bda8fa6cbcfd","504aa6ec-9596-6691-388e-3750f34c0750","7a6180e4-1387-aaa9-6981-2e60b8bb3b86","bfeeac1b-653a-5443-c8b5-e087e33a4873","4d6a4cb5-750d-f5e2-eaf7-3b802de252b1","c5c46163-96c8-4978-591e-9777b8bb7232","a2741a3d-c5e4-6ccb-64c6-7731679e9517","758df262-2f6c-7b2b-6145-2be5e41609bb","23900b3c-aa66-96f8-3a83-b10d8cbe429f","6b54a1bf-b25d-2917-9e85-c1ec1ace479e","2562e637-1dfc-ce78-7139-351004d247e5","38052db3-e813-c638-a441-3e3e69818fc0","da2ee2d8-d3dc-06df-c265-0d100965ad4d","5a32215e-c974-3a64-86d2-388cd69aa682","0601f440-6712-0c51-5ac5-d5818c063454","39889bca-57ba-0c62-6224-571ca090a4f7","955179b6-91e6-19ef-34c3-e77c5dd891f8","32243dbc-5e3f-cad3-84d5-f12bbbca7798","964724a8-7f22-aa40-3d3b-dabfff1d67e5","5715b2db-6a7a-98c3-dbc6-5dc1fca7de0c","65a2249e-90a1-036a-747b-b33a5a7d9a0b","1ac30ab4-7cfd-a16f-bec0-5480e354dfdc","43dae14f-9857-34c2-c8cb-c9c178be7d4b","59813752-17f2-e6cf-e4f9-50d3152c024d","4cc7e394-ca05-7333-938f-cbe85183b543","343deebd-477e-54bf-bade-f9218e51084e","bf288cc0-4a0c-c5ce-a129-e99794775ae3","e39e7605-5a3b-cbea-a7e1-6b1dc0396f64","a351f969-6d2c-b146-93a6-d8aa75032eba","dba8a50d-833c-f6c2-fbfb-2869a576e45f","65ad3b59-2ef3-8f9b-9b3f-27b496ace6e4","079a6c0c-c16d-b8c8-eabf-6485b3d1195f","4b56862d-5275-bd18-e6aa-fc8a85bf8cd6","7d4afb75-cb79-abee-e457-8f7bf24cef5d","4be1e152-3111-07a5-6a42-525930ec5f73","00665d2d-7cce-29a6-698a-ff381aa2a42c","0c7e8d72-d74f-72b3-92b3-c1a4589b7692","5df1844e-8389-551f-2961-9331c3deecb0","2ea33496-c0c8-3ee9-e295-bc2b1d9f62f2","728b8f1f-668a-ba85-11cf-7fad43cb0d54"],"textures":[{"path":"textures\\golden_sand.png","name":"golden_sand.png","folder":"","namespace":"","id":"1","particle":false,"render_mode":"default","render_sides":"auto","frame_time":1,"frame_order_type":"loop","frame_order":"","frame_interpolate":false,"visible":true,"mode":"bitmap","saved":false,"uuid":"3cfdb702-01fc-13c8-a775-b89811e2ecc0","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAHxJREFUOE/dUzEOwCAIxMUfOPH/nymLJu7GhAZcaOIgDh3KAgvHHQeBmRkuo5QCQQCkiDHCGMOViWgB1FrdzTKstXbOABFVqB3mYpBSUgAr968MdlrF4uMd7LYtlh27YCfZJheDOSf03l+0v2Pg+QnXJe4eTS8x58xS3MYDngGKTOcZJJwAAAAASUVORK5CYII=","relative_path":"C:/Users/hawkt/AppData/Local/Programs/Blockbench/textures/golden_sand.png"},{"path":"textures\\white_sand.png","name":"white_sand.png","folder":"","namespace":"","id":"particle","particle":true,"render_mode":"default","render_sides":"auto","frame_time":1,"frame_order_type":"loop","frame_order":"","frame_interpolate":false,"visible":true,"mode":"bitmap","saved":false,"uuid":"e6ea1e7d-e37d-3cad-4500-b7c44dbbece4","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAHxJREFUOE/dUzEOwCAIxMUfOPH/nymLJu7GhAZcaOIgDh3KAgvHHQeBmRkuo5QCQQCkiDHCGMOViWgB1FrdzTKstXbOABFVqB3mYpBSUgAr968MdlrF4uMd7LYtlh27YCfZJheDOSf03l+0v2Pg+QnXJe4eTS8x58xS3MYDngGKTOcZJJwAAAAASUVORK5CYII=","relative_path":"C:/Users/hawkt/AppData/Local/Programs/Blockbench/textures/white_sand.png"},{"path":"E:\\COSMERE MODELS\\white_sand.png","name":"white_sand.png","folder":"","namespace":"","id":"2","particle":false,"render_mode":"default","render_sides":"auto","frame_time":1,"frame_order_type":"loop","frame_order":"","frame_interpolate":false,"visible":true,"mode":"bitmap","saved":true,"uuid":"84a34b45-1c9a-b9fa-b5c5-970c8c14ab16","relative_path":"../white_sand.png","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAOhJREFUOE99kzEOxSAMQ2Hr2pH7n6szG90QW78c6VUupZ8FFBJjOyH33q8xRtLati3pfJ5nKqXE+StWa42cfBzHte97AKhQZ+1aSlAiZwAVU57AMwwo8uSotDU/IJDcWruEpAUyEqDJHbIAUvyW8E8/dy4Tz4KBI8JGCRiKXhg6UDBwam6eG6r4yuwXA2czmwaIy315gDbaNzPy4uiCtxGKaORFZ0KOgPTIQ8KM7u77nUsJCW7QCoQ5YKYwNyQwyvPw+J+gkNiDAR7wMtrovX+o1UDdo0yiz/6q2H9qjPKKAVM4+0GLHfgHUVZWj7GUSsEAAAAASUVORK5CYII="},{"path":"E:\\COSMERE MODELS\\golden_sand.png","name":"golden_sand.png","folder":"","namespace":"","id":"3","particle":false,"render_mode":"default","render_sides":"auto","frame_time":1,"frame_order_type":"loop","frame_order":"","frame_interpolate":false,"visible":true,"mode":"bitmap","saved":true,"uuid":"20c45d79-0ba6-fff1-62f2-88ae620c46db","relative_path":"../golden_sand.png","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAPpJREFUOE99kz0KQjEQhF9A0MLGRjyDp/C2XsMr2Fi+VrFJI/6gEJmF7zEvL5omYbM7mZndpPf9XD6va6c1m687nZ/51C03uzj/it0uh8hJud+XxWobACrUWbuWEpTIGUDFlCfwBAOKPDkqbdUPCCQ98rEISQtkJECTO2QBpPgg4Z9+7lwmngUDR4SNEjAUvTB0oGDg1Nw8N1TxltkTBs6mNg0QlzvxAG20r2bkxdEFbyMU0ciLzoQcAemRkYQa3d33O5cSEtygFghzwExhbkhglOvh8T9BIbERAzzgZbTRe/9QrYEaRplEn/1Wsf/UGOUWA6aw9oMWO/AXzNxVXBpGvuwAAAAASUVORK5CYII="}]} \ No newline at end of file diff --git a/blockbench/sandmastery/SandPlatform02.bbmodel b/blockbench/sandmastery/SandPlatform02.bbmodel new file mode 100644 index 000000000..2cee629e6 --- /dev/null +++ b/blockbench/sandmastery/SandPlatform02.bbmodel @@ -0,0 +1 @@ +{"meta":{"format_version":"4.5","model_format":"java_block","box_uv":false},"name":"SandPlatform02","parent":"","ambientocclusion":true,"front_gui_light":false,"visible_box":[1,1,0],"variable_placeholders":"","variable_placeholder_buttons":[],"unhandled_root_fields":{},"resolution":{"width":16,"height":16},"elements":[{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[1,14,5],"to":[6,16,12],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,5,2],"texture":0},"east":{"uv":[0,0,7,2],"texture":0},"south":{"uv":[0,0,5,2],"texture":0},"west":{"uv":[0,0,7,2],"texture":0},"up":{"uv":[0,0,5,7],"texture":0},"down":{"uv":[0,0,5,7],"texture":0}},"type":"cube","uuid":"e8c116b0-0d57-5969-964e-0c9e4453f569"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[0,15,5],"to":[1,16,11],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,6,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,6,1],"texture":0},"up":{"uv":[0,0,1,6],"texture":0},"down":{"uv":[0,0,1,6],"texture":0}},"type":"cube","uuid":"e2ce53ea-7e18-d51e-67e7-cb866428cba5"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[2,14,12],"to":[6,16,13],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,4,2],"texture":0},"east":{"uv":[0,0,1,2],"texture":0},"south":{"uv":[0,0,4,2],"texture":0},"west":{"uv":[0,0,1,2],"texture":0},"up":{"uv":[0,0,4,1],"texture":0},"down":{"uv":[0,0,4,1],"texture":0}},"type":"cube","uuid":"9235d737-06fa-5d41-65d5-99ec9165dcaf"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[2,14,3],"to":[6,16,5],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,4,2],"texture":0},"east":{"uv":[0,0,2,2],"texture":0},"south":{"uv":[0,0,4,2],"texture":0},"west":{"uv":[0,0,2,2],"texture":0},"up":{"uv":[0,0,4,2],"texture":0},"down":{"uv":[0,0,4,2],"texture":0}},"type":"cube","uuid":"2c45dc49-0f54-7566-36c7-b32920e6914e"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[3,14,2],"to":[5,16,3],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,2,2],"texture":0},"east":{"uv":[0,0,1,2],"texture":0},"south":{"uv":[0,0,2,2],"texture":0},"west":{"uv":[0,0,1,2],"texture":0},"up":{"uv":[0,0,2,1],"texture":0},"down":{"uv":[0,0,2,1],"texture":0}},"type":"cube","uuid":"221a0a4d-6197-3ae9-45f8-d64c3308871f"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[6,14,4],"to":[7,16,11],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,2],"texture":0},"east":{"uv":[0,0,7,2],"texture":0},"south":{"uv":[0,0,1,2],"texture":0},"west":{"uv":[0,0,7,2],"texture":0},"up":{"uv":[0,0,1,7],"texture":0},"down":{"uv":[0,0,1,7],"texture":0}},"type":"cube","uuid":"bce52115-7a5b-d1aa-3ea0-71ff62c809a8"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[10,14,6],"to":[13,16,9],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,3,2],"texture":0},"east":{"uv":[0,0,3,2],"texture":0},"south":{"uv":[0,0,3,2],"texture":0},"west":{"uv":[0,0,3,2],"texture":0},"up":{"uv":[0,0,3,3],"texture":0},"down":{"uv":[0,0,3,3],"texture":0}},"type":"cube","uuid":"0a513d44-a345-f547-7807-1a9079ee1b38"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[9,14,3],"to":[13,16,6],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,4,2],"texture":0},"east":{"uv":[0,0,3,2],"texture":0},"south":{"uv":[0,0,4,2],"texture":0},"west":{"uv":[0,0,3,2],"texture":0},"up":{"uv":[0,0,4,3],"texture":0},"down":{"uv":[0,0,4,3],"texture":0}},"type":"cube","uuid":"75e56146-c89e-d7e4-f983-29167987949b"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[5,14,13],"to":[8,16,14],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,3,2],"texture":0},"east":{"uv":[0,0,1,2],"texture":0},"south":{"uv":[0,0,3,2],"texture":0},"west":{"uv":[0,0,1,2],"texture":0},"up":{"uv":[0,0,3,1],"texture":0},"down":{"uv":[0,0,3,1],"texture":0}},"type":"cube","uuid":"a7f53d4c-285d-d9e2-82fd-410eb12b344c"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[6,14,11],"to":[12,16,13],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,6,2],"texture":0},"east":{"uv":[0,0,2,2],"texture":0},"south":{"uv":[0,0,6,2],"texture":0},"west":{"uv":[0,0,2,2],"texture":0},"up":{"uv":[0,0,6,2],"texture":0},"down":{"uv":[0,0,6,2],"texture":0}},"type":"cube","uuid":"9e19ae26-e206-4c4e-781e-7d9596c70e68"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7,14,10],"to":[12,16,11],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,5,2],"texture":0},"east":{"uv":[0,0,1,2],"texture":0},"south":{"uv":[0,0,5,2],"texture":0},"west":{"uv":[0,0,1,2],"texture":0},"up":{"uv":[0,0,5,1],"texture":0},"down":{"uv":[0,0,5,1],"texture":0}},"type":"cube","uuid":"f54965d6-40ae-f2d0-a1da-7aeb5a79e743"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[13,14,2],"to":[15,16,7],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,2,2],"texture":0},"east":{"uv":[0,0,5,2],"texture":0},"south":{"uv":[0,0,2,2],"texture":0},"west":{"uv":[0,0,5,2],"texture":0},"up":{"uv":[0,0,2,5],"texture":0},"down":{"uv":[0,0,2,5],"texture":0}},"type":"cube","uuid":"7ba948f7-f1fc-94bf-91f0-cf0d87799605"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[10,14,1],"to":[13,16,3],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,3,2],"texture":0},"east":{"uv":[0,0,2,2],"texture":0},"south":{"uv":[0,0,3,2],"texture":0},"west":{"uv":[0,0,2,2],"texture":0},"up":{"uv":[0,0,3,2],"texture":0},"down":{"uv":[0,0,3,2],"texture":0}},"type":"cube","uuid":"c74662c1-df12-2ae7-a32e-578b3f5a02f9"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8,14,2],"to":[10,16,3],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,2,2],"texture":0},"east":{"uv":[0,0,1,2],"texture":0},"south":{"uv":[0,0,2,2],"texture":0},"west":{"uv":[0,0,1,2],"texture":0},"up":{"uv":[0,0,2,1],"texture":0},"down":{"uv":[0,0,2,1],"texture":0}},"type":"cube","uuid":"abeecbe6-abd9-bb7e-5998-e00034c0ef0c"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8,12,4],"to":[9,14,6],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,2],"texture":0},"east":{"uv":[0,0,2,2],"texture":0},"south":{"uv":[0,0,1,2],"texture":0},"west":{"uv":[0,0,2,2],"texture":0},"up":{"uv":[0,0,1,2],"texture":0},"down":{"uv":[0,0,1,2],"texture":0}},"type":"cube","uuid":"346ec6b9-8261-6e83-b911-0026416be87d"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[9,14,6],"to":[10,16,9],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,2],"texture":0},"east":{"uv":[0,0,3,2],"texture":0},"south":{"uv":[0,0,1,2],"texture":0},"west":{"uv":[0,0,3,2],"texture":0},"up":{"uv":[0,0,1,3],"texture":0},"down":{"uv":[0,0,1,3],"texture":0}},"type":"cube","uuid":"2edf875c-35f4-f429-c376-d2b4b0ed1e0a"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[15,14,3],"to":[16,16,6],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,2],"texture":0},"east":{"uv":[0,0,3,2],"texture":0},"south":{"uv":[0,0,1,2],"texture":0},"west":{"uv":[0,0,3,2],"texture":0},"up":{"uv":[0,0,1,3],"texture":0},"down":{"uv":[0,0,1,3],"texture":0}},"type":"cube","uuid":"8b009a59-cdc3-7fdb-2bc5-a11434dd7039"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8,14,13],"to":[14,16,15],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,6,2],"texture":0},"east":{"uv":[0,0,2,2],"texture":0},"south":{"uv":[0,0,6,2],"texture":0},"west":{"uv":[0,0,2,2],"texture":0},"up":{"uv":[0,0,6,2],"texture":0},"down":{"uv":[0,0,6,2],"texture":0}},"type":"cube","uuid":"def6096e-23f1-51a2-f8d1-076ac0216b54"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[14,14,13],"to":[15,16,14],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,2],"texture":0},"east":{"uv":[0,0,1,2],"texture":0},"south":{"uv":[0,0,1,2],"texture":0},"west":{"uv":[0,0,1,2],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"71257104-d400-2275-dd8b-a9a98f93cf20"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[12,14,12],"to":[14,16,13],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,2,2],"texture":0},"east":{"uv":[0,0,1,2],"texture":0},"south":{"uv":[0,0,2,2],"texture":0},"west":{"uv":[0,0,1,2],"texture":0},"up":{"uv":[0,0,2,1],"texture":0},"down":{"uv":[0,0,2,1],"texture":0}},"type":"cube","uuid":"26519acf-b13d-2ae4-1361-8aae171c57d4"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[9,13,14],"to":[13,14,15],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,4,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,4,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,4,1],"texture":0},"down":{"uv":[0,0,4,1],"texture":0}},"type":"cube","uuid":"2513398b-d440-5a3c-f970-68226c3f42f9"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[9,12,3],"to":[13,14,6],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,4,2],"texture":0},"east":{"uv":[0,0,3,2],"texture":0},"south":{"uv":[0,0,4,2],"texture":0},"west":{"uv":[0,0,3,2],"texture":0},"up":{"uv":[0,0,4,3],"texture":0},"down":{"uv":[0,0,4,3],"texture":0}},"type":"cube","uuid":"e4c18237-d7da-b8b3-f45b-e0d1b57d5b86"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7,14,3],"to":[9,16,6],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,2,2],"texture":0},"east":{"uv":[0,0,3,2],"texture":0},"south":{"uv":[0,0,2,2],"texture":0},"west":{"uv":[0,0,3,2],"texture":0},"up":{"uv":[0,0,2,3],"texture":0},"down":{"uv":[0,0,2,3],"texture":0}},"type":"cube","uuid":"29c6be0b-1a18-d8fa-85e5-c290ec2d9200"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[10,13,2],"to":[13,14,3],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,3,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,3,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,3,1],"texture":0},"down":{"uv":[0,0,3,1],"texture":0}},"type":"cube","uuid":"1de4b625-6d07-642a-42b3-f453fa1555a8"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[13,13,2],"to":[14,14,7],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,5,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,5,1],"texture":0},"up":{"uv":[0,0,1,5],"texture":0},"down":{"uv":[0,0,1,5],"texture":0}},"type":"cube","uuid":"6f632d70-007d-d188-4e02-19ba27a3a6fc"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[13,12,4],"to":[14,13,6],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,2,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,2,1],"texture":0},"up":{"uv":[0,0,1,2],"texture":0},"down":{"uv":[0,0,1,2],"texture":0}},"type":"cube","uuid":"9f312fc9-29a9-1e4b-d91f-5e610e5bef77"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[14,13,3],"to":[15,14,6],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,3,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,3,1],"texture":0},"up":{"uv":[0,0,1,3],"texture":0},"down":{"uv":[0,0,1,3],"texture":0}},"type":"cube","uuid":"6853e9ea-f061-9f79-82fe-508a04665639"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[10,11,6],"to":[12,14,8],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,2,3],"texture":0},"east":{"uv":[0,0,2,3],"texture":0},"south":{"uv":[0,0,2,3],"texture":0},"west":{"uv":[0,0,2,3],"texture":0},"up":{"uv":[0,0,2,2],"texture":0},"down":{"uv":[0,0,2,2],"texture":0}},"type":"cube","uuid":"4736a7d1-cb91-a556-b843-94899ac9b317"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[10,12,8],"to":[12,14,9],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,2,2],"texture":0},"east":{"uv":[0,0,1,2],"texture":0},"south":{"uv":[0,0,2,2],"texture":0},"west":{"uv":[0,0,1,2],"texture":0},"up":{"uv":[0,0,2,1],"texture":0},"down":{"uv":[0,0,2,1],"texture":0}},"type":"cube","uuid":"57382d90-8b89-d144-0f38-57fb9c1b9d0b"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[9,12,6],"to":[10,14,8],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,2],"texture":0},"east":{"uv":[0,0,2,2],"texture":0},"south":{"uv":[0,0,1,2],"texture":0},"west":{"uv":[0,0,2,2],"texture":0},"up":{"uv":[0,0,1,2],"texture":0},"down":{"uv":[0,0,1,2],"texture":0}},"type":"cube","uuid":"d193d06b-4786-2336-f900-83976b800cb9"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[11,9,4],"to":[12,11,7],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,2],"texture":0},"east":{"uv":[0,0,3,2],"texture":0},"south":{"uv":[0,0,1,2],"texture":0},"west":{"uv":[0,0,3,2],"texture":0},"up":{"uv":[0,0,1,3],"texture":0},"down":{"uv":[0,0,1,3],"texture":0}},"type":"cube","uuid":"e7945ff8-9961-80a9-7d0a-ebb97179acdb"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[10,9,4],"to":[11,11,6],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,2],"texture":0},"east":{"uv":[0,0,2,2],"texture":0},"south":{"uv":[0,0,1,2],"texture":0},"west":{"uv":[0,0,2,2],"texture":0},"up":{"uv":[0,0,1,2],"texture":0},"down":{"uv":[0,0,1,2],"texture":0}},"type":"cube","uuid":"cb6200af-14e5-d6ad-52e7-06f16a35104e"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[12,10,5],"to":[13,11,6],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"a7ec954d-db29-c243-9fdf-d977e407760c"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[11,7,5],"to":[12,9,6],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,2],"texture":0},"east":{"uv":[0,0,1,2],"texture":0},"south":{"uv":[0,0,1,2],"texture":0},"west":{"uv":[0,0,1,2],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"0a9f6cc0-4ae3-dfac-fd08-f0c0edeab198"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8,13,11],"to":[11,14,14],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,3,1],"texture":0},"east":{"uv":[0,0,3,1],"texture":0},"south":{"uv":[0,0,3,1],"texture":0},"west":{"uv":[0,0,3,1],"texture":0},"up":{"uv":[0,0,3,3],"texture":0},"down":{"uv":[0,0,3,3],"texture":0}},"type":"cube","uuid":"47ca8357-5a5c-1707-4cf6-ec3e9915b975"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8,15,15],"to":[13,16,16],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,5,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,5,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,5,1],"texture":0},"down":{"uv":[0,0,5,1],"texture":0}},"type":"cube","uuid":"b2fa6b75-cbd4-e841-74f6-bdbf5bd02619"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[11,13,13],"to":[14,14,14],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,3,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,3,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,3,1],"texture":0},"down":{"uv":[0,0,3,1],"texture":0}},"type":"cube","uuid":"e09444fd-4c8d-f9c6-20ce-945605a17476"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[11,11,12],"to":[12,13,13],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,2],"texture":0},"east":{"uv":[0,0,1,2],"texture":0},"south":{"uv":[0,0,1,2],"texture":0},"west":{"uv":[0,0,1,2],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"38f2a45e-e8ce-709f-a20f-c0f70385a5ce"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[10,13,15],"to":[12,14,16],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,2,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,2,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,2,1],"texture":0},"down":{"uv":[0,0,2,1],"texture":0}},"type":"cube","uuid":"0c8b6867-1e05-dfdf-fb5a-a61040906570"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[6,13,8],"to":[11,14,9],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,5,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,5,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,5,1],"texture":0},"down":{"uv":[0,0,5,1],"texture":0}},"type":"cube","uuid":"c78c8cf3-9055-95fe-f443-b47e78a6d276"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7,13,9],"to":[12,14,11],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,5,1],"texture":0},"east":{"uv":[0,0,2,1],"texture":0},"south":{"uv":[0,0,5,1],"texture":0},"west":{"uv":[0,0,2,1],"texture":0},"up":{"uv":[0,0,5,2],"texture":0},"down":{"uv":[0,0,5,2],"texture":0}},"type":"cube","uuid":"ddb8d579-2e4f-de59-a664-a6bdde1db2aa"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[9,10,12],"to":[11,12,14],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,2,2],"texture":0},"east":{"uv":[0,0,2,2],"texture":0},"south":{"uv":[0,0,2,2],"texture":0},"west":{"uv":[0,0,2,2],"texture":0},"up":{"uv":[0,0,2,2],"texture":0},"down":{"uv":[0,0,2,2],"texture":0}},"type":"cube","uuid":"cbe7b1c1-751d-e5d6-bbf3-6d89109c97ab"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[10,8,12],"to":[11,10,13],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,2],"texture":0},"east":{"uv":[0,0,1,2],"texture":0},"south":{"uv":[0,0,1,2],"texture":0},"west":{"uv":[0,0,1,2],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"43bc13ff-5329-a9da-b48b-0b86568966c2"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[9,11,11],"to":[11,12,12],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,2,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,2,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,2,1],"texture":0},"down":{"uv":[0,0,2,1],"texture":0}},"type":"cube","uuid":"93619e32-e84f-d310-c36d-578022e53f45"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[2,12,4],"to":[6,14,11],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,4,2],"texture":0},"east":{"uv":[0,0,7,2],"texture":0},"south":{"uv":[0,0,4,2],"texture":0},"west":{"uv":[0,0,7,2],"texture":0},"up":{"uv":[0,0,4,7],"texture":0},"down":{"uv":[0,0,4,7],"texture":0}},"type":"cube","uuid":"6592585e-b0bb-31fe-f777-d077ffac2618"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[6,12,6],"to":[7,13,10],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,4,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,4,1],"texture":0},"up":{"uv":[0,0,1,4],"texture":0},"down":{"uv":[0,0,1,4],"texture":0}},"type":"cube","uuid":"1ad9d23e-3393-d1d7-1858-fa630afc18ad"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[1,12,6],"to":[2,14,10],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,2],"texture":0},"east":{"uv":[0,0,4,2],"texture":0},"south":{"uv":[0,0,1,2],"texture":0},"west":{"uv":[0,0,4,2],"texture":0},"up":{"uv":[0,0,1,4],"texture":0},"down":{"uv":[0,0,1,4],"texture":0}},"type":"cube","uuid":"d798e7cb-6e03-45b6-f751-ef2b4c233549"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[2,13,11],"to":[6,14,12],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,4,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,4,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,4,1],"texture":0},"down":{"uv":[0,0,4,1],"texture":0}},"type":"cube","uuid":"4aa088e6-944b-bfe8-c9ee-8f71304b8aaa"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[3,12,3],"to":[5,14,4],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,2,2],"texture":0},"east":{"uv":[0,0,1,2],"texture":0},"south":{"uv":[0,0,2,2],"texture":0},"west":{"uv":[0,0,1,2],"texture":0},"up":{"uv":[0,0,2,1],"texture":0},"down":{"uv":[0,0,2,1],"texture":0}},"type":"cube","uuid":"4065f544-254c-be0c-3ab2-ee327bcaa100"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[2,11,6],"to":[5,12,10],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,3,1],"texture":0},"east":{"uv":[0,0,4,1],"texture":0},"south":{"uv":[0,0,3,1],"texture":0},"west":{"uv":[0,0,4,1],"texture":0},"up":{"uv":[0,0,3,4],"texture":0},"down":{"uv":[0,0,3,4],"texture":0}},"type":"cube","uuid":"63a2ad42-a1f9-f622-2a95-30b4b2740fd2"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[6,13,5],"to":[7,14,11],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,6,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,6,1],"texture":0},"up":{"uv":[0,0,1,6],"texture":0},"down":{"uv":[0,0,1,6],"texture":0}},"type":"cube","uuid":"962bcc25-e0a9-aca6-cb98-1441dc5457ff"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[5,11,5],"to":[6,12,9],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,4,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,4,1],"texture":0},"up":{"uv":[0,0,1,4],"texture":0},"down":{"uv":[0,0,1,4],"texture":0}},"type":"cube","uuid":"b0d8334c-3f30-2e65-8076-c6561034d897"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[3,10,5],"to":[5,11,9],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,2,1],"texture":0},"east":{"uv":[0,0,4,1],"texture":0},"south":{"uv":[0,0,2,1],"texture":0},"west":{"uv":[0,0,4,1],"texture":0},"up":{"uv":[0,0,2,4],"texture":0},"down":{"uv":[0,0,2,4],"texture":0}},"type":"cube","uuid":"e7263b15-3eef-e658-6ef7-6c206976e716"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[0,13,7],"to":[1,14,9],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,2,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,2,1],"texture":0},"up":{"uv":[0,0,1,2],"texture":0},"down":{"uv":[0,0,1,2],"texture":0}},"type":"cube","uuid":"64043ec1-3828-559a-efc2-336bd2b6b10d"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[3,7,6],"to":[5,9,8],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,2,2],"texture":0},"east":{"uv":[0,0,2,2],"texture":0},"south":{"uv":[0,0,2,2],"texture":0},"west":{"uv":[0,0,2,2],"texture":0},"up":{"uv":[0,0,2,2],"texture":0},"down":{"uv":[0,0,2,2],"texture":0}},"type":"cube","uuid":"8e239c63-0966-2957-1bc3-c0924e687341"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[3,11,4],"to":[5,12,6],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,2,1],"texture":0},"east":{"uv":[0,0,2,1],"texture":0},"south":{"uv":[0,0,2,1],"texture":0},"west":{"uv":[0,0,2,1],"texture":0},"up":{"uv":[0,0,2,2],"texture":0},"down":{"uv":[0,0,2,2],"texture":0}},"type":"cube","uuid":"97532f51-2557-c24a-1dec-ab3d47628cce"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[3,5,7],"to":[4,7,8],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,2],"texture":0},"east":{"uv":[0,0,1,2],"texture":0},"south":{"uv":[0,0,1,2],"texture":0},"west":{"uv":[0,0,1,2],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"82d843dc-30b2-90dd-987d-2435d6363e97"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[2,10,6],"to":[3,11,8],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,2,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,2,1],"texture":0},"up":{"uv":[0,0,1,2],"texture":0},"down":{"uv":[0,0,1,2],"texture":0}},"type":"cube","uuid":"2dcf0b0b-670c-1c50-9966-0f5579e58edf"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[9,11,4],"to":[13,12,6],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,4,1],"texture":0},"east":{"uv":[0,0,2,1],"texture":0},"south":{"uv":[0,0,4,1],"texture":0},"west":{"uv":[0,0,2,1],"texture":0},"up":{"uv":[0,0,4,2],"texture":0},"down":{"uv":[0,0,4,2],"texture":0}},"type":"cube","uuid":"6ee97614-f8a5-60c7-b787-262452dd418d"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[10,11,3],"to":[12,12,4],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,2,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,2,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,2,1],"texture":0},"down":{"uv":[0,0,2,1],"texture":0}},"type":"cube","uuid":"4cc5d16a-9f62-bf96-84c4-521371617a20"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[11,12,2],"to":[12,13,3],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"b06a114c-32b8-064f-b8cd-733b8fa34569"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[13,14,1],"to":[14,16,2],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,2],"texture":0},"east":{"uv":[0,0,1,2],"texture":0},"south":{"uv":[0,0,1,2],"texture":0},"west":{"uv":[0,0,1,2],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"46d58a9f-7923-720f-add0-5297054a8cea"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[11,14,0],"to":[13,16,1],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,2,2],"texture":0},"east":{"uv":[0,0,1,2],"texture":0},"south":{"uv":[0,0,2,2],"texture":0},"west":{"uv":[0,0,1,2],"texture":0},"up":{"uv":[0,0,2,1],"texture":0},"down":{"uv":[0,0,2,1],"texture":0}},"type":"cube","uuid":"5030aba1-c328-63a0-f4b8-522943a4fadd"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8,14,6],"to":[9,16,9],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,2],"texture":0},"east":{"uv":[0,0,3,2],"texture":0},"south":{"uv":[0,0,1,2],"texture":0},"west":{"uv":[0,0,3,2],"texture":0},"up":{"uv":[0,0,1,3],"texture":0},"down":{"uv":[0,0,1,3],"texture":0}},"type":"cube","uuid":"169e518b-2e58-5df6-11bd-eb138d7b85af"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[11,14,9],"to":[12,16,10],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,2],"texture":0},"east":{"uv":[0,0,1,2],"texture":0},"south":{"uv":[0,0,1,2],"texture":0},"west":{"uv":[0,0,1,2],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"3a91b325-b66c-e4ff-b82d-be832044c438"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[13,14,7],"to":[14,16,8],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,2],"texture":0},"east":{"uv":[0,0,1,2],"texture":0},"south":{"uv":[0,0,1,2],"texture":0},"west":{"uv":[0,0,1,2],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"17fdc20a-bbec-3b5c-3845-0a233c968e90"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[12,11,6],"to":[13,14,7],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,3],"texture":0},"east":{"uv":[0,0,1,3],"texture":0},"south":{"uv":[0,0,1,3],"texture":0},"west":{"uv":[0,0,1,3],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"70b6bd31-9238-809c-ca50-841118793e69"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[12,12,7],"to":[13,14,8],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,2],"texture":0},"east":{"uv":[0,0,1,2],"texture":0},"south":{"uv":[0,0,1,2],"texture":0},"west":{"uv":[0,0,1,2],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"8f374807-2005-95ca-2252-66c771c338c9"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7,13,4],"to":[8,14,6],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,2,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,2,1],"texture":0},"up":{"uv":[0,0,1,2],"texture":0},"down":{"uv":[0,0,1,2],"texture":0}},"type":"cube","uuid":"39157e2b-2eff-3691-afaa-a5ee1d93fc25"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[11,13,1],"to":[12,14,2],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"96470000-a711-c978-9453-cfd367c9a360"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8,12,10],"to":[11,13,14],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,3,1],"texture":0},"east":{"uv":[0,0,4,1],"texture":0},"south":{"uv":[0,0,3,1],"texture":0},"west":{"uv":[0,0,4,1],"texture":0},"up":{"uv":[0,0,3,4],"texture":0},"down":{"uv":[0,0,3,4],"texture":0}},"type":"cube","uuid":"7176fe2e-54a4-cdea-3783-f8ff7ac53c92"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8,14,9],"to":[10,16,10],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,2,2],"texture":0},"east":{"uv":[0,0,1,2],"texture":0},"south":{"uv":[0,0,2,2],"texture":0},"west":{"uv":[0,0,1,2],"texture":0},"up":{"uv":[0,0,2,1],"texture":0},"down":{"uv":[0,0,2,1],"texture":0}},"type":"cube","uuid":"b2349c99-5338-ad5a-2405-644cf996b312"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[12,14,11],"to":[13,16,12],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,2],"texture":0},"east":{"uv":[0,0,1,2],"texture":0},"south":{"uv":[0,0,1,2],"texture":0},"west":{"uv":[0,0,1,2],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"d3b9abf5-4f56-aed9-d1fc-adf03ad6b365"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[11,13,12],"to":[13,14,13],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,2,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,2,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,2,1],"texture":0},"down":{"uv":[0,0,2,1],"texture":0}},"type":"cube","uuid":"7d9f85c7-91dd-78eb-7746-c5cfd8cd01c7"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[11,13,11],"to":[12,14,12],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"47de6a67-28ca-360c-4496-aac044093819"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[11,12,13],"to":[13,13,14],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,2,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,2,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,2,1],"texture":0},"down":{"uv":[0,0,2,1],"texture":0}},"type":"cube","uuid":"fda03c4f-85bf-900e-6b43-838b456df2a0"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[10,12,14],"to":[12,13,15],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,2,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,2,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,2,1],"texture":0},"down":{"uv":[0,0,2,1],"texture":0}},"type":"cube","uuid":"1c229c26-45b2-0a94-1e6a-4f4b2bc7be6d"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7,14,6],"to":[8,16,10],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,2],"texture":0},"east":{"uv":[0,0,4,2],"texture":0},"south":{"uv":[0,0,1,2],"texture":0},"west":{"uv":[0,0,4,2],"texture":0},"up":{"uv":[0,0,1,4],"texture":0},"down":{"uv":[0,0,1,4],"texture":0}},"type":"cube","uuid":"5d05e9ec-fd67-33f3-b6f3-838ee60363bf"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[3,14,1],"to":[4,16,2],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,2],"texture":0},"east":{"uv":[0,0,1,2],"texture":0},"south":{"uv":[0,0,1,2],"texture":0},"west":{"uv":[0,0,1,2],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"541839e1-036b-67c0-7054-f7898391a112"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[1,14,4],"to":[2,16,5],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,2],"texture":0},"east":{"uv":[0,0,1,2],"texture":0},"south":{"uv":[0,0,1,2],"texture":0},"west":{"uv":[0,0,1,2],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"b46e7eca-150a-4f1d-a9cf-68bd699164bb"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[3,13,2],"to":[4,14,3],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"3e6f5297-b407-73f9-de8d-8a770f26727a"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[3,13,12],"to":[5,14,13],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,2,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,2,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,2,1],"texture":0},"down":{"uv":[0,0,2,1],"texture":0}},"type":"cube","uuid":"3fe6c19e-197b-a70b-b2be-19f2ef1cd262"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[2,15,13],"to":[5,16,15],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,3,1],"texture":0},"east":{"uv":[0,0,2,1],"texture":0},"south":{"uv":[0,0,3,1],"texture":0},"west":{"uv":[0,0,2,1],"texture":0},"up":{"uv":[0,0,3,2],"texture":0},"down":{"uv":[0,0,3,2],"texture":0}},"type":"cube","uuid":"5cd3c953-07fe-d17c-ff0a-bb64a960319f"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[1,11,7],"to":[2,12,8],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"84127838-ee98-807f-59d7-60082240fd7d"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[1,13,5],"to":[2,14,6],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"3f5e4b8b-87aa-2fea-f9c7-bc9abf507cfc"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[3,9,5],"to":[5,10,9],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,2,1],"texture":0},"east":{"uv":[0,0,4,1],"texture":0},"south":{"uv":[0,0,2,1],"texture":0},"west":{"uv":[0,0,4,1],"texture":0},"up":{"uv":[0,0,2,4],"texture":0},"down":{"uv":[0,0,2,4],"texture":0}},"type":"cube","uuid":"26936ffc-9397-3bf5-b628-e6446c7b5649"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[5,10,6],"to":[6,11,8],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,2,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,2,1],"texture":0},"up":{"uv":[0,0,1,2],"texture":0},"down":{"uv":[0,0,1,2],"texture":0}},"type":"cube","uuid":"90730c8e-e9fc-296d-52c5-a91bd6f86e86"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[3,10,9],"to":[4,11,10],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"ffe167f2-3a4a-fb01-192e-ba3c0937d2cf"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[1,13,10],"to":[2,14,11],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"bf442cb5-0713-05a4-a826-fe929eb08dab"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[10,14,9],"to":[11,16,10],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,2],"texture":0},"east":{"uv":[0,0,1,2],"texture":0},"south":{"uv":[0,0,1,2],"texture":0},"west":{"uv":[0,0,1,2],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"a14d7340-fd9a-d456-d99e-c3f2148a2864"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[5,15,14],"to":[8,16,15],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,3,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,3,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,3,1],"texture":0},"down":{"uv":[0,0,3,1],"texture":0}},"type":"cube","uuid":"fb23a0f2-806f-2b59-18f4-c94b2bf5ab1c"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[12,14,9],"to":[13,16,11],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,2],"texture":0},"east":{"uv":[0,0,2,2],"texture":0},"south":{"uv":[0,0,1,2],"texture":0},"west":{"uv":[0,0,2,2],"texture":0},"up":{"uv":[0,0,1,2],"texture":0},"down":{"uv":[0,0,1,2],"texture":0}},"type":"cube","uuid":"4fb2bdb0-2c8a-3b7b-0936-d97090caa861"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[13,15,8],"to":[14,16,12],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,4,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,4,1],"texture":0},"up":{"uv":[0,0,1,4],"texture":0},"down":{"uv":[0,0,1,4],"texture":0}},"type":"cube","uuid":"1d97694c-4b4d-967d-b070-f27fffac44bf"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[14,15,12],"to":[15,16,13],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"9fc8524a-7cea-b934-618e-d81d570e3086"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[13,15,15],"to":[14,16,16],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"dd0978ed-5888-fd11-365e-d89cdad03029"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[14,15,7],"to":[16,16,9],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,2,1],"texture":0},"east":{"uv":[0,0,2,1],"texture":0},"south":{"uv":[0,0,2,1],"texture":0},"west":{"uv":[0,0,2,1],"texture":0},"up":{"uv":[0,0,2,2],"texture":0},"down":{"uv":[0,0,2,2],"texture":0}},"type":"cube","uuid":"d7deae91-5c42-3d37-e58a-f663b9e87c11"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[15,15,6],"to":[16,16,7],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"9b5c868d-e469-5a1e-0226-b93368423d66"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[14,15,1],"to":[15,16,2],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"e5bff862-4aac-41ad-938c-0ea93ae4502c"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[15,15,2],"to":[16,16,3],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"d092457e-4684-7fcd-e51e-c9d046c1e1e2"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[13,15,0],"to":[14,16,1],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"c19f24eb-0ea8-0044-52c1-1535f9381956"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[10,15,0],"to":[11,16,1],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"9bfd0d51-ce6d-0053-2009-6468e7cda462"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8,15,1],"to":[10,16,2],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,2,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,2,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,2,1],"texture":0},"down":{"uv":[0,0,2,1],"texture":0}},"type":"cube","uuid":"ed70a775-0b70-7d3d-5020-42f335c8ff51"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[6,15,3],"to":[7,16,4],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"742ce1b7-dfc9-c578-4249-018ac710aaab"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7,15,2],"to":[8,16,3],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"1057713e-f12d-ba1a-24c9-a79b6392259e"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[5,15,2],"to":[7,16,3],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,2,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,2,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,2,1],"texture":0},"down":{"uv":[0,0,2,1],"texture":0}},"type":"cube","uuid":"fcbaa067-3659-4d8c-d05d-5c7af9c63c1c"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[4,15,1],"to":[6,16,2],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,2,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,2,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,2,1],"texture":0},"down":{"uv":[0,0,2,1],"texture":0}},"type":"cube","uuid":"bdb2ea7c-b622-c5c1-e936-6a92677bbef2"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[2,15,1],"to":[3,16,3],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,2,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,2,1],"texture":0},"up":{"uv":[0,0,1,2],"texture":0},"down":{"uv":[0,0,1,2],"texture":0}},"type":"cube","uuid":"9e97974e-9612-1700-1224-8aa88861e930"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[1,15,3],"to":[2,16,4],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"f8fe45b0-e83a-915e-1481-bb4eb6cdca84"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[1,15,12],"to":[2,16,14],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,2,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,2,1],"texture":0},"up":{"uv":[0,0,1,2],"texture":0},"down":{"uv":[0,0,1,2],"texture":0}},"type":"cube","uuid":"371cef47-7b99-a720-ea01-9a0a66f4ecad"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[6,13,11],"to":[8,14,13],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,2,1],"texture":0},"east":{"uv":[0,0,2,1],"texture":0},"south":{"uv":[0,0,2,1],"texture":0},"west":{"uv":[0,0,2,1],"texture":0},"up":{"uv":[0,0,2,2],"texture":0},"down":{"uv":[0,0,2,2],"texture":0}},"type":"cube","uuid":"4c146dff-9acd-0c7f-f19e-967c6dfd1133"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[9,13,7],"to":[10,14,8],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"82c00a01-64f2-d6cc-70f0-90789b9d81c0"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8,13,6],"to":[9,14,8],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,2,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,2,1],"texture":0},"up":{"uv":[0,0,1,2],"texture":0},"down":{"uv":[0,0,1,2],"texture":0}},"type":"cube","uuid":"ee0c51fe-2152-d1bb-82f5-6b508ca45c72"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[6,11,6],"to":[7,12,8],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,2,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,2,1],"texture":0},"up":{"uv":[0,0,1,2],"texture":0},"down":{"uv":[0,0,1,2],"texture":0}},"type":"cube","uuid":"780f4200-a4f1-7678-37b0-146328c53346"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7,13,6],"to":[8,14,8],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,2,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,2,1],"texture":0},"up":{"uv":[0,0,1,2],"texture":0},"down":{"uv":[0,0,1,2],"texture":0}},"type":"cube","uuid":"9847a4c5-b9ec-1ac5-8104-ceafab683195"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8,11,12],"to":[9,12,13],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"18e94026-aa73-896d-0261-d2d861cca60d"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[5,9,7],"to":[6,10,8],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"448cc800-1170-b28c-6406-d79c8104dfa3"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[3,8,8],"to":[4,9,9],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"c09e5cb1-e7fb-c815-d26f-acdb9deecbfa"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[2,8,7],"to":[3,10,8],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,2],"texture":0},"east":{"uv":[0,0,1,2],"texture":0},"south":{"uv":[0,0,1,2],"texture":0},"west":{"uv":[0,0,1,2],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"bd7ad7b4-06c1-60ab-c7e9-fdae03f317b2"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[3,15,0],"to":[5,16,1],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,2,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,2,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,2,1],"texture":0},"down":{"uv":[0,0,2,1],"texture":0}},"type":"cube","uuid":"437bbb23-b3ac-1d66-1801-3a48dcf59fc4"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[3,15,15],"to":[5,16,16],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,2,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,2,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,2,1],"texture":0},"down":{"uv":[0,0,2,1],"texture":0}},"type":"cube","uuid":"e483cf49-cda1-e0e4-748d-7b6563efc9c0"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[13,14,11],"to":[14,15,12],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"b85024ad-c61d-a231-1789-fda85968aa9d"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[13,14,8],"to":[14,15,9],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"51b61244-2822-939e-440a-fae9ac704b27"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[12,13,11],"to":[13,14,12],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"5181e8df-1afc-00cb-b481-3f1868446f3a"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[11,12,11],"to":[12,13,12],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"45f04d84-b73c-955a-0de7-1f60e3af1278"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[12,12,12],"to":[13,13,13],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"36ddc278-e198-6e29-b814-d872a3666e2a"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7,12,6],"to":[8,13,8],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,2,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,2,1],"texture":0},"up":{"uv":[0,0,1,2],"texture":0},"down":{"uv":[0,0,1,2],"texture":0}},"type":"cube","uuid":"64216a0b-c0fb-bb52-7523-3d7613e8da59"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[3,12,11],"to":[4,13,12],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"27d29795-a065-74bb-4cec-598e1555bd27"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[3,11,10],"to":[4,12,11],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"542d1705-7acb-485d-f5a2-02c67c8f72a7"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7,12,11],"to":[8,13,13],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,2,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,2,1],"texture":0},"up":{"uv":[0,0,1,2],"texture":0},"down":{"uv":[0,0,1,2],"texture":0}},"type":"cube","uuid":"d6f73b9d-e3b1-eb75-3dec-fc6583a0e55e"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[9,12,9],"to":[10,14,10],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,2],"texture":0},"east":{"uv":[0,0,1,2],"texture":0},"south":{"uv":[0,0,1,2],"texture":0},"west":{"uv":[0,0,1,2],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"38874b1e-f4a4-7d83-7e97-bf978a2d13b8"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[5,14,14],"to":[8,15,15],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,3,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,3,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,3,1],"texture":0},"down":{"uv":[0,0,3,1],"texture":0}},"type":"cube","uuid":"ee5336ab-e790-125d-63b5-3530c6d004c7"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[3,14,13],"to":[5,15,15],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,2,1],"texture":0},"east":{"uv":[0,0,2,1],"texture":0},"south":{"uv":[0,0,2,1],"texture":0},"west":{"uv":[0,0,2,1],"texture":0},"up":{"uv":[0,0,2,2],"texture":0},"down":{"uv":[0,0,2,2],"texture":0}},"type":"cube","uuid":"08acbcc2-9d4c-d44b-a673-ea08806cefe5"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[9,9,12],"to":[10,10,13],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"e55934ab-d685-8b59-919d-292cc3cdf5f7"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[3,6,6],"to":[4,7,7],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"10a0ce1a-e196-e315-35d4-87ea84fbcce8"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[3,8,5],"to":[4,9,6],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"736c7cef-d776-bb26-bdc3-a0da6212a2cf"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[14,15,9],"to":[15,16,12],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,3,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,3,1],"texture":0},"up":{"uv":[0,0,1,3],"texture":0},"down":{"uv":[0,0,1,3],"texture":0}},"type":"cube","uuid":"c44185f8-f5a4-8602-5b1a-cca7f2ac1bd0"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[14,15,14],"to":[15,16,15],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"5460e388-53b3-4bb6-47a6-7b8323c72122"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[9,14,15],"to":[13,15,16],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,4,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,4,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,4,1],"texture":0},"down":{"uv":[0,0,4,1],"texture":0}},"type":"cube","uuid":"7127521b-5f54-56d3-1bd6-605e78f33690"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[0,14,6],"to":[1,15,10],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,4,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,4,1],"texture":0},"up":{"uv":[0,0,1,4],"texture":0},"down":{"uv":[0,0,1,4],"texture":0}},"type":"cube","uuid":"775a08a5-7321-451e-4694-dc57f8fdefb6"}],"outliner":["e8c116b0-0d57-5969-964e-0c9e4453f569","e2ce53ea-7e18-d51e-67e7-cb866428cba5","9235d737-06fa-5d41-65d5-99ec9165dcaf","2c45dc49-0f54-7566-36c7-b32920e6914e","221a0a4d-6197-3ae9-45f8-d64c3308871f","bce52115-7a5b-d1aa-3ea0-71ff62c809a8","0a513d44-a345-f547-7807-1a9079ee1b38","75e56146-c89e-d7e4-f983-29167987949b","a7f53d4c-285d-d9e2-82fd-410eb12b344c","08acbcc2-9d4c-d44b-a673-ea08806cefe5","ee5336ab-e790-125d-63b5-3530c6d004c7","9e19ae26-e206-4c4e-781e-7d9596c70e68","f54965d6-40ae-f2d0-a1da-7aeb5a79e743","7ba948f7-f1fc-94bf-91f0-cf0d87799605","c74662c1-df12-2ae7-a32e-578b3f5a02f9","abeecbe6-abd9-bb7e-5998-e00034c0ef0c","346ec6b9-8261-6e83-b911-0026416be87d","2edf875c-35f4-f429-c376-d2b4b0ed1e0a","8b009a59-cdc3-7fdb-2bc5-a11434dd7039","def6096e-23f1-51a2-f8d1-076ac0216b54","71257104-d400-2275-dd8b-a9a98f93cf20","5460e388-53b3-4bb6-47a6-7b8323c72122","26519acf-b13d-2ae4-1361-8aae171c57d4","b85024ad-c61d-a231-1789-fda85968aa9d","51b61244-2822-939e-440a-fae9ac704b27","2513398b-d440-5a3c-f970-68226c3f42f9","e4c18237-d7da-b8b3-f45b-e0d1b57d5b86","29c6be0b-1a18-d8fa-85e5-c290ec2d9200","1de4b625-6d07-642a-42b3-f453fa1555a8","6f632d70-007d-d188-4e02-19ba27a3a6fc","9f312fc9-29a9-1e4b-d91f-5e610e5bef77","6853e9ea-f061-9f79-82fe-508a04665639","4736a7d1-cb91-a556-b843-94899ac9b317","57382d90-8b89-d144-0f38-57fb9c1b9d0b","38874b1e-f4a4-7d83-7e97-bf978a2d13b8","d193d06b-4786-2336-f900-83976b800cb9","e7945ff8-9961-80a9-7d0a-ebb97179acdb","cb6200af-14e5-d6ad-52e7-06f16a35104e","a7ec954d-db29-c243-9fdf-d977e407760c","0a9f6cc0-4ae3-dfac-fd08-f0c0edeab198","47ca8357-5a5c-1707-4cf6-ec3e9915b975","b2fa6b75-cbd4-e841-74f6-bdbf5bd02619","e09444fd-4c8d-f9c6-20ce-945605a17476","38f2a45e-e8ce-709f-a20f-c0f70385a5ce","0c8b6867-1e05-dfdf-fb5a-a61040906570","7127521b-5f54-56d3-1bd6-605e78f33690","c78c8cf3-9055-95fe-f443-b47e78a6d276","ddb8d579-2e4f-de59-a664-a6bdde1db2aa","cbe7b1c1-751d-e5d6-bbf3-6d89109c97ab","43bc13ff-5329-a9da-b48b-0b86568966c2","45f04d84-b73c-955a-0de7-1f60e3af1278","36ddc278-e198-6e29-b814-d872a3666e2a","93619e32-e84f-d310-c36d-578022e53f45","6592585e-b0bb-31fe-f777-d077ffac2618","1ad9d23e-3393-d1d7-1858-fa630afc18ad","d798e7cb-6e03-45b6-f751-ef2b4c233549","4aa088e6-944b-bfe8-c9ee-8f71304b8aaa","4065f544-254c-be0c-3ab2-ee327bcaa100","63a2ad42-a1f9-f622-2a95-30b4b2740fd2","962bcc25-e0a9-aca6-cb98-1441dc5457ff","b0d8334c-3f30-2e65-8076-c6561034d897","e7263b15-3eef-e658-6ef7-6c206976e716","64043ec1-3828-559a-efc2-336bd2b6b10d","775a08a5-7321-451e-4694-dc57f8fdefb6","8e239c63-0966-2957-1bc3-c0924e687341","97532f51-2557-c24a-1dec-ab3d47628cce","82d843dc-30b2-90dd-987d-2435d6363e97","10a0ce1a-e196-e315-35d4-87ea84fbcce8","736c7cef-d776-bb26-bdc3-a0da6212a2cf","2dcf0b0b-670c-1c50-9966-0f5579e58edf","6ee97614-f8a5-60c7-b787-262452dd418d","4cc5d16a-9f62-bf96-84c4-521371617a20","b06a114c-32b8-064f-b8cd-733b8fa34569","46d58a9f-7923-720f-add0-5297054a8cea","5030aba1-c328-63a0-f4b8-522943a4fadd","169e518b-2e58-5df6-11bd-eb138d7b85af","3a91b325-b66c-e4ff-b82d-be832044c438","17fdc20a-bbec-3b5c-3845-0a233c968e90","70b6bd31-9238-809c-ca50-841118793e69","8f374807-2005-95ca-2252-66c771c338c9","39157e2b-2eff-3691-afaa-a5ee1d93fc25","96470000-a711-c978-9453-cfd367c9a360","7176fe2e-54a4-cdea-3783-f8ff7ac53c92","b2349c99-5338-ad5a-2405-644cf996b312","d3b9abf5-4f56-aed9-d1fc-adf03ad6b365","7d9f85c7-91dd-78eb-7746-c5cfd8cd01c7","5181e8df-1afc-00cb-b481-3f1868446f3a","47de6a67-28ca-360c-4496-aac044093819","fda03c4f-85bf-900e-6b43-838b456df2a0","1c229c26-45b2-0a94-1e6a-4f4b2bc7be6d","5d05e9ec-fd67-33f3-b6f3-838ee60363bf","541839e1-036b-67c0-7054-f7898391a112","b46e7eca-150a-4f1d-a9cf-68bd699164bb","3e6f5297-b407-73f9-de8d-8a770f26727a","3fe6c19e-197b-a70b-b2be-19f2ef1cd262","27d29795-a065-74bb-4cec-598e1555bd27","542d1705-7acb-485d-f5a2-02c67c8f72a7","5cd3c953-07fe-d17c-ff0a-bb64a960319f","84127838-ee98-807f-59d7-60082240fd7d","3f5e4b8b-87aa-2fea-f9c7-bc9abf507cfc","26936ffc-9397-3bf5-b628-e6446c7b5649","90730c8e-e9fc-296d-52c5-a91bd6f86e86","ffe167f2-3a4a-fb01-192e-ba3c0937d2cf","bf442cb5-0713-05a4-a826-fe929eb08dab","a14d7340-fd9a-d456-d99e-c3f2148a2864","fb23a0f2-806f-2b59-18f4-c94b2bf5ab1c","e483cf49-cda1-e0e4-748d-7b6563efc9c0","4fb2bdb0-2c8a-3b7b-0936-d97090caa861","1d97694c-4b4d-967d-b070-f27fffac44bf","c44185f8-f5a4-8602-5b1a-cca7f2ac1bd0","9fc8524a-7cea-b934-618e-d81d570e3086","dd0978ed-5888-fd11-365e-d89cdad03029","d7deae91-5c42-3d37-e58a-f663b9e87c11","9b5c868d-e469-5a1e-0226-b93368423d66","e5bff862-4aac-41ad-938c-0ea93ae4502c","d092457e-4684-7fcd-e51e-c9d046c1e1e2","c19f24eb-0ea8-0044-52c1-1535f9381956","9bfd0d51-ce6d-0053-2009-6468e7cda462","ed70a775-0b70-7d3d-5020-42f335c8ff51","742ce1b7-dfc9-c578-4249-018ac710aaab","1057713e-f12d-ba1a-24c9-a79b6392259e","fcbaa067-3659-4d8c-d05d-5c7af9c63c1c","bdb2ea7c-b622-c5c1-e936-6a92677bbef2","437bbb23-b3ac-1d66-1801-3a48dcf59fc4","9e97974e-9612-1700-1224-8aa88861e930","f8fe45b0-e83a-915e-1481-bb4eb6cdca84","371cef47-7b99-a720-ea01-9a0a66f4ecad","4c146dff-9acd-0c7f-f19e-967c6dfd1133","82c00a01-64f2-d6cc-70f0-90789b9d81c0","ee0c51fe-2152-d1bb-82f5-6b508ca45c72","780f4200-a4f1-7678-37b0-146328c53346","64216a0b-c0fb-bb52-7523-3d7613e8da59","9847a4c5-b9ec-1ac5-8104-ceafab683195","18e94026-aa73-896d-0261-d2d861cca60d","e55934ab-d685-8b59-919d-292cc3cdf5f7","d6f73b9d-e3b1-eb75-3dec-fc6583a0e55e","448cc800-1170-b28c-6406-d79c8104dfa3","c09e5cb1-e7fb-c815-d26f-acdb9deecbfa","bd7ad7b4-06c1-60ab-c7e9-fdae03f317b2"],"textures":[{"path":"E:\\COSMERE MODELS\\golden_sand.png","name":"golden_sand.png","folder":"","namespace":"","id":"0","particle":true,"render_mode":"default","render_sides":"auto","frame_time":1,"frame_order_type":"loop","frame_order":"","frame_interpolate":false,"visible":true,"mode":"bitmap","saved":true,"uuid":"41c87e89-e343-6ef6-67ae-a4e7e3e5010c","relative_path":"../golden_sand.png","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAPpJREFUOE99kz0KQjEQhF9A0MLGRjyDp/C2XsMr2Fi+VrFJI/6gEJmF7zEvL5omYbM7mZndpPf9XD6va6c1m687nZ/51C03uzj/it0uh8hJud+XxWobACrUWbuWEpTIGUDFlCfwBAOKPDkqbdUPCCQ98rEISQtkJECTO2QBpPgg4Z9+7lwmngUDR4SNEjAUvTB0oGDg1Nw8N1TxltkTBs6mNg0QlzvxAG20r2bkxdEFbyMU0ciLzoQcAemRkYQa3d33O5cSEtygFghzwExhbkhglOvh8T9BIbERAzzgZbTRe/9QrYEaRplEn/1Wsf/UGOUWA6aw9oMWO/AXzNxVXBpGvuwAAAAASUVORK5CYII="}]} \ No newline at end of file diff --git a/blockbench/sandmastery/SandPlatform03.bbmodel b/blockbench/sandmastery/SandPlatform03.bbmodel new file mode 100644 index 000000000..8bc33b39a --- /dev/null +++ b/blockbench/sandmastery/SandPlatform03.bbmodel @@ -0,0 +1 @@ +{"meta":{"format_version":"4.5","model_format":"java_block","box_uv":false},"name":"SandPlatform03","parent":"","ambientocclusion":true,"front_gui_light":false,"visible_box":[1,1,0],"variable_placeholders":"","variable_placeholder_buttons":[],"unhandled_root_fields":{},"resolution":{"width":16,"height":16},"elements":[{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[1,14,5],"to":[6,16,12],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,5,2],"texture":0},"east":{"uv":[0,0,7,2],"texture":0},"south":{"uv":[0,0,5,2],"texture":0},"west":{"uv":[0,0,7,2],"texture":0},"up":{"uv":[0,0,5,7],"texture":0},"down":{"uv":[0,0,5,7],"texture":0}},"type":"cube","uuid":"b8440d0c-500f-46d5-cef2-9f74b3f14216"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[0,14,6],"to":[1,16,11],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,2],"texture":0},"east":{"uv":[0,0,5,2],"texture":0},"south":{"uv":[0,0,1,2],"texture":0},"west":{"uv":[0,0,5,2],"texture":0},"up":{"uv":[0,0,1,5],"texture":0},"down":{"uv":[0,0,1,5],"texture":0}},"type":"cube","uuid":"21cd9375-ac82-9063-4b26-16e39b30079c"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[2,14,12],"to":[6,16,13],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,4,2],"texture":0},"east":{"uv":[0,0,1,2],"texture":0},"south":{"uv":[0,0,4,2],"texture":0},"west":{"uv":[0,0,1,2],"texture":0},"up":{"uv":[0,0,4,1],"texture":0},"down":{"uv":[0,0,4,1],"texture":0}},"type":"cube","uuid":"7e774983-747c-d242-7cba-328c236b49a4"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[2,14,3],"to":[6,16,5],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,4,2],"texture":0},"east":{"uv":[0,0,2,2],"texture":0},"south":{"uv":[0,0,4,2],"texture":0},"west":{"uv":[0,0,2,2],"texture":0},"up":{"uv":[0,0,4,2],"texture":0},"down":{"uv":[0,0,4,2],"texture":0}},"type":"cube","uuid":"c037cb89-6450-42cc-8c63-e6b64558adae"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[3,14,2],"to":[5,16,3],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,2,2],"texture":0},"east":{"uv":[0,0,1,2],"texture":0},"south":{"uv":[0,0,2,2],"texture":0},"west":{"uv":[0,0,1,2],"texture":0},"up":{"uv":[0,0,2,1],"texture":0},"down":{"uv":[0,0,2,1],"texture":0}},"type":"cube","uuid":"faba2cde-aa98-01b1-2f95-1bec48aa42f3"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[6,14,4],"to":[7,16,11],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,2],"texture":0},"east":{"uv":[0,0,7,2],"texture":0},"south":{"uv":[0,0,1,2],"texture":0},"west":{"uv":[0,0,7,2],"texture":0},"up":{"uv":[0,0,1,7],"texture":0},"down":{"uv":[0,0,1,7],"texture":0}},"type":"cube","uuid":"3933c1bd-0f49-c530-4b3a-abe99d13f839"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[10,14,6],"to":[13,16,9],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,3,2],"texture":0},"east":{"uv":[0,0,3,2],"texture":0},"south":{"uv":[0,0,3,2],"texture":0},"west":{"uv":[0,0,3,2],"texture":0},"up":{"uv":[0,0,3,3],"texture":0},"down":{"uv":[0,0,3,3],"texture":0}},"type":"cube","uuid":"288a6b46-ff44-e44c-a743-e0d70883a8c7"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[9,14,3],"to":[13,16,6],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,4,2],"texture":0},"east":{"uv":[0,0,3,2],"texture":0},"south":{"uv":[0,0,4,2],"texture":0},"west":{"uv":[0,0,3,2],"texture":0},"up":{"uv":[0,0,4,3],"texture":0},"down":{"uv":[0,0,4,3],"texture":0}},"type":"cube","uuid":"31d6a025-5fac-c346-e787-eb29e6016aae"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[5,14,13],"to":[8,16,14],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,3,2],"texture":0},"east":{"uv":[0,0,1,2],"texture":0},"south":{"uv":[0,0,3,2],"texture":0},"west":{"uv":[0,0,1,2],"texture":0},"up":{"uv":[0,0,3,1],"texture":0},"down":{"uv":[0,0,3,1],"texture":0}},"type":"cube","uuid":"5cd9fcc0-3420-859a-4f69-cc48777aea94"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[6,14,11],"to":[12,16,13],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,6,2],"texture":0},"east":{"uv":[0,0,2,2],"texture":0},"south":{"uv":[0,0,6,2],"texture":0},"west":{"uv":[0,0,2,2],"texture":0},"up":{"uv":[0,0,6,2],"texture":0},"down":{"uv":[0,0,6,2],"texture":0}},"type":"cube","uuid":"5e2191e2-8fdd-ba0d-631b-ce1ab0f55e06"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7,14,10],"to":[12,16,11],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,5,2],"texture":0},"east":{"uv":[0,0,1,2],"texture":0},"south":{"uv":[0,0,5,2],"texture":0},"west":{"uv":[0,0,1,2],"texture":0},"up":{"uv":[0,0,5,1],"texture":0},"down":{"uv":[0,0,5,1],"texture":0}},"type":"cube","uuid":"21813835-7981-fcc2-f68f-c498158cc6bf"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[13,14,2],"to":[15,16,7],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,2,2],"texture":0},"east":{"uv":[0,0,5,2],"texture":0},"south":{"uv":[0,0,2,2],"texture":0},"west":{"uv":[0,0,5,2],"texture":0},"up":{"uv":[0,0,2,5],"texture":0},"down":{"uv":[0,0,2,5],"texture":0}},"type":"cube","uuid":"77126d8f-7ac7-35c6-a46e-4a30d1a6b9ef"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[10,14,1],"to":[13,16,3],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,3,2],"texture":0},"east":{"uv":[0,0,2,2],"texture":0},"south":{"uv":[0,0,3,2],"texture":0},"west":{"uv":[0,0,2,2],"texture":0},"up":{"uv":[0,0,3,2],"texture":0},"down":{"uv":[0,0,3,2],"texture":0}},"type":"cube","uuid":"beccdec5-ef0a-1c65-99f0-35a7d81f16d3"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8,14,2],"to":[10,16,3],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,2,2],"texture":0},"east":{"uv":[0,0,1,2],"texture":0},"south":{"uv":[0,0,2,2],"texture":0},"west":{"uv":[0,0,1,2],"texture":0},"up":{"uv":[0,0,2,1],"texture":0},"down":{"uv":[0,0,2,1],"texture":0}},"type":"cube","uuid":"9fe048bc-354d-04ea-bed3-3b0b9b7e5e0a"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8,12,4],"to":[9,14,6],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,2],"texture":0},"east":{"uv":[0,0,2,2],"texture":0},"south":{"uv":[0,0,1,2],"texture":0},"west":{"uv":[0,0,2,2],"texture":0},"up":{"uv":[0,0,1,2],"texture":0},"down":{"uv":[0,0,1,2],"texture":0}},"type":"cube","uuid":"27dd23ba-4434-3cbd-627b-f1b38c6cf2ad"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[9,14,6],"to":[10,16,9],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,2],"texture":0},"east":{"uv":[0,0,3,2],"texture":0},"south":{"uv":[0,0,1,2],"texture":0},"west":{"uv":[0,0,3,2],"texture":0},"up":{"uv":[0,0,1,3],"texture":0},"down":{"uv":[0,0,1,3],"texture":0}},"type":"cube","uuid":"af7fa842-6102-60cd-3eae-50dd875b2ed3"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[15,14,3],"to":[16,16,6],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,2],"texture":0},"east":{"uv":[0,0,3,2],"texture":0},"south":{"uv":[0,0,1,2],"texture":0},"west":{"uv":[0,0,3,2],"texture":0},"up":{"uv":[0,0,1,3],"texture":0},"down":{"uv":[0,0,1,3],"texture":0}},"type":"cube","uuid":"71dfbe15-c49b-4982-d550-de1246752793"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8,14,13],"to":[14,16,15],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,6,2],"texture":0},"east":{"uv":[0,0,2,2],"texture":0},"south":{"uv":[0,0,6,2],"texture":0},"west":{"uv":[0,0,2,2],"texture":0},"up":{"uv":[0,0,6,2],"texture":0},"down":{"uv":[0,0,6,2],"texture":0}},"type":"cube","uuid":"bb6d62df-38c2-58c3-03a6-8d6240170144"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[14,14,13],"to":[15,16,14],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,2],"texture":0},"east":{"uv":[0,0,1,2],"texture":0},"south":{"uv":[0,0,1,2],"texture":0},"west":{"uv":[0,0,1,2],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"a291066d-672f-e3c8-c060-84d118bb72ee"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[12,14,12],"to":[14,16,13],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,2,2],"texture":0},"east":{"uv":[0,0,1,2],"texture":0},"south":{"uv":[0,0,2,2],"texture":0},"west":{"uv":[0,0,1,2],"texture":0},"up":{"uv":[0,0,2,1],"texture":0},"down":{"uv":[0,0,2,1],"texture":0}},"type":"cube","uuid":"61a52dab-ff53-b6ae-514d-c7ade246e420"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[9,13,14],"to":[13,14,15],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,4,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,4,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,4,1],"texture":0},"down":{"uv":[0,0,4,1],"texture":0}},"type":"cube","uuid":"03d49d90-f6bb-4479-b015-9aef3e37776f"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[9,12,3],"to":[13,14,6],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,4,2],"texture":0},"east":{"uv":[0,0,3,2],"texture":0},"south":{"uv":[0,0,4,2],"texture":0},"west":{"uv":[0,0,3,2],"texture":0},"up":{"uv":[0,0,4,3],"texture":0},"down":{"uv":[0,0,4,3],"texture":0}},"type":"cube","uuid":"9d8386f4-345c-e8c0-6e72-fef61b7e3a79"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7,14,3],"to":[9,16,6],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,2,2],"texture":0},"east":{"uv":[0,0,3,2],"texture":0},"south":{"uv":[0,0,2,2],"texture":0},"west":{"uv":[0,0,3,2],"texture":0},"up":{"uv":[0,0,2,3],"texture":0},"down":{"uv":[0,0,2,3],"texture":0}},"type":"cube","uuid":"e8167d8a-87c7-5a10-557a-ee15a7f2460e"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[10,13,2],"to":[13,14,3],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,3,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,3,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,3,1],"texture":0},"down":{"uv":[0,0,3,1],"texture":0}},"type":"cube","uuid":"10954eaf-40a2-b22e-0b9b-3678572ae7d0"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[13,13,2],"to":[14,14,7],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,5,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,5,1],"texture":0},"up":{"uv":[0,0,1,5],"texture":0},"down":{"uv":[0,0,1,5],"texture":0}},"type":"cube","uuid":"ef3b5cb2-5cd6-e762-d06f-d64d9270f4a9"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[13,12,4],"to":[14,13,6],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,2,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,2,1],"texture":0},"up":{"uv":[0,0,1,2],"texture":0},"down":{"uv":[0,0,1,2],"texture":0}},"type":"cube","uuid":"d114ff96-7b89-9f04-dce2-0662ebd3580d"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[14,13,3],"to":[15,14,6],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,3,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,3,1],"texture":0},"up":{"uv":[0,0,1,3],"texture":0},"down":{"uv":[0,0,1,3],"texture":0}},"type":"cube","uuid":"e80d3526-5eb3-04c0-f8f7-755ab3db2db9"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[10,11,6],"to":[12,14,8],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,2,3],"texture":0},"east":{"uv":[0,0,2,3],"texture":0},"south":{"uv":[0,0,2,3],"texture":0},"west":{"uv":[0,0,2,3],"texture":0},"up":{"uv":[0,0,2,2],"texture":0},"down":{"uv":[0,0,2,2],"texture":0}},"type":"cube","uuid":"8f75acd9-9062-c704-51ad-8e1ce0773440"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[11,12,8],"to":[12,14,9],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,2],"texture":0},"east":{"uv":[0,0,1,2],"texture":0},"south":{"uv":[0,0,1,2],"texture":0},"west":{"uv":[0,0,1,2],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"1208a194-3572-dc10-9210-ba2fb16d18e4"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[9,12,6],"to":[10,14,7],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,2],"texture":0},"east":{"uv":[0,0,1,2],"texture":0},"south":{"uv":[0,0,1,2],"texture":0},"west":{"uv":[0,0,1,2],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"2265b12f-53f9-d8d5-2287-40cce3bbe910"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[11,9,4],"to":[12,11,7],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,2],"texture":0},"east":{"uv":[0,0,3,2],"texture":0},"south":{"uv":[0,0,1,2],"texture":0},"west":{"uv":[0,0,3,2],"texture":0},"up":{"uv":[0,0,1,3],"texture":0},"down":{"uv":[0,0,1,3],"texture":0}},"type":"cube","uuid":"0e17ae5e-c9d0-50c4-5e86-c10bed16e15c"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[10,9,4],"to":[11,11,6],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,2],"texture":0},"east":{"uv":[0,0,2,2],"texture":0},"south":{"uv":[0,0,1,2],"texture":0},"west":{"uv":[0,0,2,2],"texture":0},"up":{"uv":[0,0,1,2],"texture":0},"down":{"uv":[0,0,1,2],"texture":0}},"type":"cube","uuid":"fb89c26b-eba3-8858-b09d-79554c0244b3"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[12,10,5],"to":[13,11,6],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"8bc682b0-4b40-31e8-8ee0-e12e9645d87a"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[11,8,5],"to":[12,9,6],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"9cca9db9-ed7f-7447-7195-13be66bba514"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8,13,11],"to":[11,14,14],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,3,1],"texture":0},"east":{"uv":[0,0,3,1],"texture":0},"south":{"uv":[0,0,3,1],"texture":0},"west":{"uv":[0,0,3,1],"texture":0},"up":{"uv":[0,0,3,3],"texture":0},"down":{"uv":[0,0,3,3],"texture":0}},"type":"cube","uuid":"734be981-99b2-6df1-cf0b-9a7e8fb75c64"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[9,14,15],"to":[13,16,16],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,4,2],"texture":0},"east":{"uv":[0,0,1,2],"texture":0},"south":{"uv":[0,0,4,2],"texture":0},"west":{"uv":[0,0,1,2],"texture":0},"up":{"uv":[0,0,4,1],"texture":0},"down":{"uv":[0,0,4,1],"texture":0}},"type":"cube","uuid":"b6535cbf-e834-0365-e236-420cd5013204"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[11,13,13],"to":[14,14,14],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,3,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,3,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,3,1],"texture":0},"down":{"uv":[0,0,3,1],"texture":0}},"type":"cube","uuid":"87c48159-9a40-90bc-db5e-e934144af25f"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[11,11,12],"to":[12,13,13],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,2],"texture":0},"east":{"uv":[0,0,1,2],"texture":0},"south":{"uv":[0,0,1,2],"texture":0},"west":{"uv":[0,0,1,2],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"db9ca66f-268f-5f49-ade5-72bb20723dd5"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[10,13,15],"to":[12,14,16],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,2,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,2,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,2,1],"texture":0},"down":{"uv":[0,0,2,1],"texture":0}},"type":"cube","uuid":"510d7a02-857e-d03b-139a-de05eca34b4a"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[10,13,8],"to":[11,14,9],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"01957a3c-7dce-4ffc-b70c-0b5c4590f357"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8,13,10],"to":[11,14,11],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,3,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,3,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,3,1],"texture":0},"down":{"uv":[0,0,3,1],"texture":0}},"type":"cube","uuid":"9b5a3dab-5943-5b40-12b6-f45b9b0c699b"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[9,10,12],"to":[11,12,14],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,2,2],"texture":0},"east":{"uv":[0,0,2,2],"texture":0},"south":{"uv":[0,0,2,2],"texture":0},"west":{"uv":[0,0,2,2],"texture":0},"up":{"uv":[0,0,2,2],"texture":0},"down":{"uv":[0,0,2,2],"texture":0}},"type":"cube","uuid":"58b416f3-659c-083a-8562-59d6b2427fcd"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[10,9,12],"to":[11,10,13],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"4244ae80-9e2b-78a6-6062-6b4391f92acb"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[9,11,11],"to":[11,12,12],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,2,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,2,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,2,1],"texture":0},"down":{"uv":[0,0,2,1],"texture":0}},"type":"cube","uuid":"fbb872e7-590d-820e-c395-c616444bbf15"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[2,12,4],"to":[6,14,11],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,4,2],"texture":0},"east":{"uv":[0,0,7,2],"texture":0},"south":{"uv":[0,0,4,2],"texture":0},"west":{"uv":[0,0,7,2],"texture":0},"up":{"uv":[0,0,4,7],"texture":0},"down":{"uv":[0,0,4,7],"texture":0}},"type":"cube","uuid":"56f871fa-5272-502d-bca6-34c4c6126354"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[6,12,6],"to":[7,13,10],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,4,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,4,1],"texture":0},"up":{"uv":[0,0,1,4],"texture":0},"down":{"uv":[0,0,1,4],"texture":0}},"type":"cube","uuid":"5babdd06-9c8f-67d0-5427-2453ae09aa70"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[1,12,6],"to":[2,14,10],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,2],"texture":0},"east":{"uv":[0,0,4,2],"texture":0},"south":{"uv":[0,0,1,2],"texture":0},"west":{"uv":[0,0,4,2],"texture":0},"up":{"uv":[0,0,1,4],"texture":0},"down":{"uv":[0,0,1,4],"texture":0}},"type":"cube","uuid":"c238fcf6-36c4-746e-81e9-b8e5dc722306"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[2,13,11],"to":[6,14,12],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,4,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,4,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,4,1],"texture":0},"down":{"uv":[0,0,4,1],"texture":0}},"type":"cube","uuid":"5d5f30fe-3b86-7c19-ea2b-034637fa7700"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[3,12,3],"to":[5,14,4],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,2,2],"texture":0},"east":{"uv":[0,0,1,2],"texture":0},"south":{"uv":[0,0,2,2],"texture":0},"west":{"uv":[0,0,1,2],"texture":0},"up":{"uv":[0,0,2,1],"texture":0},"down":{"uv":[0,0,2,1],"texture":0}},"type":"cube","uuid":"b35f8d23-3c48-2a25-5523-03dcb5bedaf2"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[2,11,6],"to":[5,12,10],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,3,1],"texture":0},"east":{"uv":[0,0,4,1],"texture":0},"south":{"uv":[0,0,3,1],"texture":0},"west":{"uv":[0,0,4,1],"texture":0},"up":{"uv":[0,0,3,4],"texture":0},"down":{"uv":[0,0,3,4],"texture":0}},"type":"cube","uuid":"1c5d0aae-c856-147e-1d3f-ba21c6e0dc73"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[6,13,5],"to":[7,14,11],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,6,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,6,1],"texture":0},"up":{"uv":[0,0,1,6],"texture":0},"down":{"uv":[0,0,1,6],"texture":0}},"type":"cube","uuid":"6519dc96-94e3-b382-31b9-ae844e026edb"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[5,11,5],"to":[6,12,9],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,4,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,4,1],"texture":0},"up":{"uv":[0,0,1,4],"texture":0},"down":{"uv":[0,0,1,4],"texture":0}},"type":"cube","uuid":"dfa2c383-0c4c-611f-1429-72457e642085"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[3,10,5],"to":[5,11,9],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,2,1],"texture":0},"east":{"uv":[0,0,4,1],"texture":0},"south":{"uv":[0,0,2,1],"texture":0},"west":{"uv":[0,0,4,1],"texture":0},"up":{"uv":[0,0,2,4],"texture":0},"down":{"uv":[0,0,2,4],"texture":0}},"type":"cube","uuid":"535be4e4-07a7-c42f-86db-b552c21faa85"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[0,13,7],"to":[1,14,9],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,2,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,2,1],"texture":0},"up":{"uv":[0,0,1,2],"texture":0},"down":{"uv":[0,0,1,2],"texture":0}},"type":"cube","uuid":"f9856070-3d16-d523-16f7-137ad4f25ff3"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[3,7,6],"to":[5,9,8],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,2,2],"texture":0},"east":{"uv":[0,0,2,2],"texture":0},"south":{"uv":[0,0,2,2],"texture":0},"west":{"uv":[0,0,2,2],"texture":0},"up":{"uv":[0,0,2,2],"texture":0},"down":{"uv":[0,0,2,2],"texture":0}},"type":"cube","uuid":"3e536e74-5210-95d9-76b2-641b1d6cc70a"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[3,11,4],"to":[5,12,6],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,2,1],"texture":0},"east":{"uv":[0,0,2,1],"texture":0},"south":{"uv":[0,0,2,1],"texture":0},"west":{"uv":[0,0,2,1],"texture":0},"up":{"uv":[0,0,2,2],"texture":0},"down":{"uv":[0,0,2,2],"texture":0}},"type":"cube","uuid":"e3c673b7-b879-80d4-24fc-431797e23dbe"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[3,6,7],"to":[4,7,8],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"7318d9ef-2544-9919-457a-c36f76e68e00"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[2,10,6],"to":[3,11,8],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,2,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,2,1],"texture":0},"up":{"uv":[0,0,1,2],"texture":0},"down":{"uv":[0,0,1,2],"texture":0}},"type":"cube","uuid":"75defc92-9ba6-592d-19f1-9bc0a0a76a7e"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[9,11,4],"to":[13,12,6],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,4,1],"texture":0},"east":{"uv":[0,0,2,1],"texture":0},"south":{"uv":[0,0,4,1],"texture":0},"west":{"uv":[0,0,2,1],"texture":0},"up":{"uv":[0,0,4,2],"texture":0},"down":{"uv":[0,0,4,2],"texture":0}},"type":"cube","uuid":"d09d25fe-3c6b-a22f-26c2-2900d796f493"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[10,11,3],"to":[12,12,4],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,2,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,2,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,2,1],"texture":0},"down":{"uv":[0,0,2,1],"texture":0}},"type":"cube","uuid":"34d33a5a-2dea-af0c-cfc9-3065d08da02a"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[11,12,2],"to":[12,13,3],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"73e721ae-f66f-b58b-9f32-d26d3e258a73"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[13,14,1],"to":[14,16,2],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,2],"texture":0},"east":{"uv":[0,0,1,2],"texture":0},"south":{"uv":[0,0,1,2],"texture":0},"west":{"uv":[0,0,1,2],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"d396b998-b408-b23a-601b-59623377324a"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[11,14,0],"to":[13,16,1],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,2,2],"texture":0},"east":{"uv":[0,0,1,2],"texture":0},"south":{"uv":[0,0,2,2],"texture":0},"west":{"uv":[0,0,1,2],"texture":0},"up":{"uv":[0,0,2,1],"texture":0},"down":{"uv":[0,0,2,1],"texture":0}},"type":"cube","uuid":"76d83125-dc24-4f4b-8b31-b3dbeb38af35"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8,14,6],"to":[9,16,9],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,2],"texture":0},"east":{"uv":[0,0,3,2],"texture":0},"south":{"uv":[0,0,1,2],"texture":0},"west":{"uv":[0,0,3,2],"texture":0},"up":{"uv":[0,0,1,3],"texture":0},"down":{"uv":[0,0,1,3],"texture":0}},"type":"cube","uuid":"97692c35-352e-79f2-da33-af900f498db7"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[11,14,9],"to":[12,16,10],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,2],"texture":0},"east":{"uv":[0,0,1,2],"texture":0},"south":{"uv":[0,0,1,2],"texture":0},"west":{"uv":[0,0,1,2],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"150159b9-2450-7777-fd63-94b983086821"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[13,14,7],"to":[14,16,8],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,2],"texture":0},"east":{"uv":[0,0,1,2],"texture":0},"south":{"uv":[0,0,1,2],"texture":0},"west":{"uv":[0,0,1,2],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"bd2fefdd-b645-815c-349e-0100666a78f0"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[12,11,6],"to":[13,14,7],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,3],"texture":0},"east":{"uv":[0,0,1,3],"texture":0},"south":{"uv":[0,0,1,3],"texture":0},"west":{"uv":[0,0,1,3],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"45e6f2b2-bd35-6ba3-6f6d-568cafef8572"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[12,12,7],"to":[13,14,8],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,2],"texture":0},"east":{"uv":[0,0,1,2],"texture":0},"south":{"uv":[0,0,1,2],"texture":0},"west":{"uv":[0,0,1,2],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"0aa51137-0183-ad26-e07e-350441e4fe39"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7,13,4],"to":[8,14,5],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"c507d55b-1191-fa69-72c0-ed96c7015bf0"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[11,13,1],"to":[12,14,2],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"33d23ca2-51b6-acd4-a0e1-261b976ba49b"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8,12,11],"to":[11,13,14],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,3,1],"texture":0},"east":{"uv":[0,0,3,1],"texture":0},"south":{"uv":[0,0,3,1],"texture":0},"west":{"uv":[0,0,3,1],"texture":0},"up":{"uv":[0,0,3,3],"texture":0},"down":{"uv":[0,0,3,3],"texture":0}},"type":"cube","uuid":"ce43cb76-27fc-e690-d515-3a4baaa892b0"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8,14,9],"to":[10,16,10],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,2,2],"texture":0},"east":{"uv":[0,0,1,2],"texture":0},"south":{"uv":[0,0,2,2],"texture":0},"west":{"uv":[0,0,1,2],"texture":0},"up":{"uv":[0,0,2,1],"texture":0},"down":{"uv":[0,0,2,1],"texture":0}},"type":"cube","uuid":"fb2bd315-5c4d-6db2-e136-1a1c803db884"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[12,14,11],"to":[13,16,12],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,2],"texture":0},"east":{"uv":[0,0,1,2],"texture":0},"south":{"uv":[0,0,1,2],"texture":0},"west":{"uv":[0,0,1,2],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"88851c1b-4779-ec4f-a912-8a562510b473"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[11,13,12],"to":[13,14,13],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,2,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,2,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,2,1],"texture":0},"down":{"uv":[0,0,2,1],"texture":0}},"type":"cube","uuid":"a8caf7b1-9557-b151-28b5-c0cde15b4410"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[11,13,11],"to":[12,14,12],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"ba05d0a8-2aca-26bc-ddca-4cafb3d786b3"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[11,12,13],"to":[13,13,14],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,2,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,2,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,2,1],"texture":0},"down":{"uv":[0,0,2,1],"texture":0}},"type":"cube","uuid":"d29be82e-0187-d569-ea61-48beb8dad9ee"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[10,12,14],"to":[12,13,15],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,2,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,2,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,2,1],"texture":0},"down":{"uv":[0,0,2,1],"texture":0}},"type":"cube","uuid":"65bdde7b-19e1-4739-55c0-d29890b6eb7b"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7,14,6],"to":[8,16,10],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,2],"texture":0},"east":{"uv":[0,0,4,2],"texture":0},"south":{"uv":[0,0,1,2],"texture":0},"west":{"uv":[0,0,4,2],"texture":0},"up":{"uv":[0,0,1,4],"texture":0},"down":{"uv":[0,0,1,4],"texture":0}},"type":"cube","uuid":"edcbf370-862a-cb18-928c-e4c905b18364"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[3,14,1],"to":[4,16,2],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,2],"texture":0},"east":{"uv":[0,0,1,2],"texture":0},"south":{"uv":[0,0,1,2],"texture":0},"west":{"uv":[0,0,1,2],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"fe571802-a7d4-c9d1-abf5-0db810ef1c21"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[1,14,4],"to":[2,16,5],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,2],"texture":0},"east":{"uv":[0,0,1,2],"texture":0},"south":{"uv":[0,0,1,2],"texture":0},"west":{"uv":[0,0,1,2],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"d024353f-66ca-e810-d7e3-7979f31877eb"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[3,13,2],"to":[4,14,3],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"0ace3a14-d413-3079-dd60-0af8fda7dd63"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[3,13,12],"to":[4,14,13],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"0c810873-20e6-36e5-4270-57f10b2d562e"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[3,15,13],"to":[5,16,14],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,2,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,2,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,2,1],"texture":0},"down":{"uv":[0,0,2,1],"texture":0}},"type":"cube","uuid":"a4193a9b-38d8-5301-a410-1b4c2bc450d9"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[1,11,7],"to":[2,12,8],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"ff923c0b-69e8-4393-c2b8-5b43d56e91f6"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[0,15,5],"to":[1,16,6],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"78d079e4-52e8-6427-5d60-cee63a992c48"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[1,13,5],"to":[2,14,6],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"1515e5f9-9256-1e66-9dbb-5cedb94041f1"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[3,9,5],"to":[5,10,9],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,2,1],"texture":0},"east":{"uv":[0,0,4,1],"texture":0},"south":{"uv":[0,0,2,1],"texture":0},"west":{"uv":[0,0,4,1],"texture":0},"up":{"uv":[0,0,2,4],"texture":0},"down":{"uv":[0,0,2,4],"texture":0}},"type":"cube","uuid":"e8bd3c61-230f-cc19-9774-a8adec6a926a"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[5,10,6],"to":[6,11,8],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,2,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,2,1],"texture":0},"up":{"uv":[0,0,1,2],"texture":0},"down":{"uv":[0,0,1,2],"texture":0}},"type":"cube","uuid":"35f44ec9-9f8e-d04a-1d93-16b16d46bf26"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[3,10,9],"to":[4,11,10],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"f63cff9d-4d5c-1e39-51b6-8d9338df97ef"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[1,13,10],"to":[2,14,11],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"eadd7480-d219-c1e1-1f1b-6b4966078064"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[10,14,9],"to":[11,16,10],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,2],"texture":0},"east":{"uv":[0,0,1,2],"texture":0},"south":{"uv":[0,0,1,2],"texture":0},"west":{"uv":[0,0,1,2],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"1db1e243-d4d2-ba34-5aa6-567aa7bf2fa3"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[5,15,14],"to":[8,16,15],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,3,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,3,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,3,1],"texture":0},"down":{"uv":[0,0,3,1],"texture":0}},"type":"cube","uuid":"5af06d9b-e4c0-2705-766f-5de45306f8de"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[12,14,9],"to":[13,16,11],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,2],"texture":0},"east":{"uv":[0,0,2,2],"texture":0},"south":{"uv":[0,0,1,2],"texture":0},"west":{"uv":[0,0,2,2],"texture":0},"up":{"uv":[0,0,1,2],"texture":0},"down":{"uv":[0,0,1,2],"texture":0}},"type":"cube","uuid":"e37d5d90-4b98-3561-db72-cce0e30724a1"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[13,15,8],"to":[14,16,12],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,4,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,4,1],"texture":0},"up":{"uv":[0,0,1,4],"texture":0},"down":{"uv":[0,0,1,4],"texture":0}},"type":"cube","uuid":"ab2fba85-5d16-5dd3-74cb-4bacaf6c8f33"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[14,15,12],"to":[15,16,13],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"65b79933-f754-3f30-3001-3d595774ace7"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[14,15,14],"to":[15,16,15],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"ac4cd75d-f1bd-afd6-f4f2-a0d67825569a"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[13,15,15],"to":[14,16,16],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"85e5fa66-abb9-b976-47ed-db727b2f6b2d"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[14,15,7],"to":[15,16,9],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,2,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,2,1],"texture":0},"up":{"uv":[0,0,1,2],"texture":0},"down":{"uv":[0,0,1,2],"texture":0}},"type":"cube","uuid":"483a095a-5e3f-222e-871d-a8789515337b"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[15,15,6],"to":[16,16,7],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"9091d618-3ea4-2f2b-f697-91e0c36352b2"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[14,15,1],"to":[15,16,2],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"f6dba5e6-b153-2e7f-3895-bef8e47ae569"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[15,15,2],"to":[16,16,3],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"bff5e8fa-b2d1-6579-0966-ceb2823c49c5"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[13,15,0],"to":[14,16,1],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"7ab55f12-048f-19c6-7666-7b41e76e4149"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[10,15,0],"to":[11,16,1],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"e8ed9c76-2b29-d9ab-aa9a-126bd3575519"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[9,15,1],"to":[10,16,2],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"f7f2226e-fce7-bfd0-94bf-476a040266e3"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[6,15,3],"to":[7,16,4],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"e7ff4777-0584-5a32-eb39-c39ef960f7d7"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7,15,2],"to":[8,16,3],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"4afc1659-14b2-97b8-94df-fbc8d6f9c705"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[5,15,2],"to":[6,16,3],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"8e0232e5-64f5-dd9d-b70c-0dddb8c00e8d"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[4,15,1],"to":[5,16,2],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"1acce306-9562-eb97-5a4d-732934acc46c"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[2,15,1],"to":[3,16,3],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,2,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,2,1],"texture":0},"up":{"uv":[0,0,1,2],"texture":0},"down":{"uv":[0,0,1,2],"texture":0}},"type":"cube","uuid":"07f35ab0-8d7c-3cee-fde4-1003e077a025"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[1,15,3],"to":[2,16,4],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"31893f3f-6a01-b0e2-0dc2-ba6980679034"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[0,15,4],"to":[1,16,5],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"07452ecf-b4fc-377e-0918-fbea58284067"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[1,15,12],"to":[2,16,13],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"fc10a14f-5e76-addf-5966-ccff4b6db5cd"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[0,15,11],"to":[1,16,12],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"b057dfdb-bdbb-e75e-3b8c-d05f643e6064"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7,13,12],"to":[8,14,13],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"f124ebdc-f45e-c2e1-68d1-0845b6e0a0bf"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[9,13,7],"to":[10,14,8],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"afd72b9d-2e89-69fa-6c2c-c7ccb7686f66"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8,13,6],"to":[9,14,7],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"61ad0ee9-be75-7fa0-1566-0973055da4e0"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[6,11,6],"to":[7,12,8],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,2,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,2,1],"texture":0},"up":{"uv":[0,0,1,2],"texture":0},"down":{"uv":[0,0,1,2],"texture":0}},"type":"cube","uuid":"324efd0b-6a68-d8f7-cf15-04aae0009deb"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7,13,6],"to":[8,14,8],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,2,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,2,1],"texture":0},"up":{"uv":[0,0,1,2],"texture":0},"down":{"uv":[0,0,1,2],"texture":0}},"type":"cube","uuid":"7989d73e-1209-f8c1-797f-523d13775bfc"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8,11,12],"to":[9,12,13],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"21a3fdfc-c835-9e0d-d16b-ce899868ab72"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[5,9,7],"to":[6,10,8],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"3caef340-3390-a743-ab21-dacb07646e55"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[3,8,8],"to":[4,9,9],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"f7d43c9a-de27-527d-6727-9d4d29949a92"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[2,8,7],"to":[3,10,8],"autouv":1,"color":2,"origin":[8,11,8],"faces":{"north":{"uv":[0,0,1,2],"texture":0},"east":{"uv":[0,0,1,2],"texture":0},"south":{"uv":[0,0,1,2],"texture":0},"west":{"uv":[0,0,1,2],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"2ea2ce88-75de-d101-5cc9-06932631513f"}],"outliner":["b8440d0c-500f-46d5-cef2-9f74b3f14216","21cd9375-ac82-9063-4b26-16e39b30079c","7e774983-747c-d242-7cba-328c236b49a4","c037cb89-6450-42cc-8c63-e6b64558adae","faba2cde-aa98-01b1-2f95-1bec48aa42f3","3933c1bd-0f49-c530-4b3a-abe99d13f839","288a6b46-ff44-e44c-a743-e0d70883a8c7","31d6a025-5fac-c346-e787-eb29e6016aae","5cd9fcc0-3420-859a-4f69-cc48777aea94","5af06d9b-e4c0-2705-766f-5de45306f8de","5e2191e2-8fdd-ba0d-631b-ce1ab0f55e06","21813835-7981-fcc2-f68f-c498158cc6bf","77126d8f-7ac7-35c6-a46e-4a30d1a6b9ef","beccdec5-ef0a-1c65-99f0-35a7d81f16d3","9fe048bc-354d-04ea-bed3-3b0b9b7e5e0a","27dd23ba-4434-3cbd-627b-f1b38c6cf2ad","af7fa842-6102-60cd-3eae-50dd875b2ed3","71dfbe15-c49b-4982-d550-de1246752793","bb6d62df-38c2-58c3-03a6-8d6240170144","a291066d-672f-e3c8-c060-84d118bb72ee","61a52dab-ff53-b6ae-514d-c7ade246e420","03d49d90-f6bb-4479-b015-9aef3e37776f","9d8386f4-345c-e8c0-6e72-fef61b7e3a79","e8167d8a-87c7-5a10-557a-ee15a7f2460e","10954eaf-40a2-b22e-0b9b-3678572ae7d0","ef3b5cb2-5cd6-e762-d06f-d64d9270f4a9","d114ff96-7b89-9f04-dce2-0662ebd3580d","e80d3526-5eb3-04c0-f8f7-755ab3db2db9","8f75acd9-9062-c704-51ad-8e1ce0773440","1208a194-3572-dc10-9210-ba2fb16d18e4","2265b12f-53f9-d8d5-2287-40cce3bbe910","0e17ae5e-c9d0-50c4-5e86-c10bed16e15c","fb89c26b-eba3-8858-b09d-79554c0244b3","8bc682b0-4b40-31e8-8ee0-e12e9645d87a","9cca9db9-ed7f-7447-7195-13be66bba514","734be981-99b2-6df1-cf0b-9a7e8fb75c64","b6535cbf-e834-0365-e236-420cd5013204","87c48159-9a40-90bc-db5e-e934144af25f","db9ca66f-268f-5f49-ade5-72bb20723dd5","510d7a02-857e-d03b-139a-de05eca34b4a","01957a3c-7dce-4ffc-b70c-0b5c4590f357","afd72b9d-2e89-69fa-6c2c-c7ccb7686f66","61ad0ee9-be75-7fa0-1566-0973055da4e0","f124ebdc-f45e-c2e1-68d1-0845b6e0a0bf","21a3fdfc-c835-9e0d-d16b-ce899868ab72","9b5a3dab-5943-5b40-12b6-f45b9b0c699b","58b416f3-659c-083a-8562-59d6b2427fcd","4244ae80-9e2b-78a6-6062-6b4391f92acb","fbb872e7-590d-820e-c395-c616444bbf15","56f871fa-5272-502d-bca6-34c4c6126354","5babdd06-9c8f-67d0-5427-2453ae09aa70","c238fcf6-36c4-746e-81e9-b8e5dc722306","5d5f30fe-3b86-7c19-ea2b-034637fa7700","b35f8d23-3c48-2a25-5523-03dcb5bedaf2","1c5d0aae-c856-147e-1d3f-ba21c6e0dc73","6519dc96-94e3-b382-31b9-ae844e026edb","dfa2c383-0c4c-611f-1429-72457e642085","535be4e4-07a7-c42f-86db-b552c21faa85","f9856070-3d16-d523-16f7-137ad4f25ff3","3e536e74-5210-95d9-76b2-641b1d6cc70a","e3c673b7-b879-80d4-24fc-431797e23dbe","7318d9ef-2544-9919-457a-c36f76e68e00","f7d43c9a-de27-527d-6727-9d4d29949a92","75defc92-9ba6-592d-19f1-9bc0a0a76a7e","2ea2ce88-75de-d101-5cc9-06932631513f","d09d25fe-3c6b-a22f-26c2-2900d796f493","34d33a5a-2dea-af0c-cfc9-3065d08da02a","73e721ae-f66f-b58b-9f32-d26d3e258a73","d396b998-b408-b23a-601b-59623377324a","76d83125-dc24-4f4b-8b31-b3dbeb38af35","97692c35-352e-79f2-da33-af900f498db7","1db1e243-d4d2-ba34-5aa6-567aa7bf2fa3","150159b9-2450-7777-fd63-94b983086821","e37d5d90-4b98-3561-db72-cce0e30724a1","ab2fba85-5d16-5dd3-74cb-4bacaf6c8f33","65b79933-f754-3f30-3001-3d595774ace7","f6dba5e6-b153-2e7f-3895-bef8e47ae569","7ab55f12-048f-19c6-7666-7b41e76e4149","e8ed9c76-2b29-d9ab-aa9a-126bd3575519","f7f2226e-fce7-bfd0-94bf-476a040266e3","e7ff4777-0584-5a32-eb39-c39ef960f7d7","4afc1659-14b2-97b8-94df-fbc8d6f9c705","8e0232e5-64f5-dd9d-b70c-0dddb8c00e8d","1acce306-9562-eb97-5a4d-732934acc46c","31893f3f-6a01-b0e2-0dc2-ba6980679034","07452ecf-b4fc-377e-0918-fbea58284067","07f35ab0-8d7c-3cee-fde4-1003e077a025","bff5e8fa-b2d1-6579-0966-ceb2823c49c5","9091d618-3ea4-2f2b-f697-91e0c36352b2","483a095a-5e3f-222e-871d-a8789515337b","ac4cd75d-f1bd-afd6-f4f2-a0d67825569a","85e5fa66-abb9-b976-47ed-db727b2f6b2d","bd2fefdd-b645-815c-349e-0100666a78f0","45e6f2b2-bd35-6ba3-6f6d-568cafef8572","0aa51137-0183-ad26-e07e-350441e4fe39","c507d55b-1191-fa69-72c0-ed96c7015bf0","33d23ca2-51b6-acd4-a0e1-261b976ba49b","ce43cb76-27fc-e690-d515-3a4baaa892b0","fb2bd315-5c4d-6db2-e136-1a1c803db884","88851c1b-4779-ec4f-a912-8a562510b473","a8caf7b1-9557-b151-28b5-c0cde15b4410","ba05d0a8-2aca-26bc-ddca-4cafb3d786b3","d29be82e-0187-d569-ea61-48beb8dad9ee","65bdde7b-19e1-4739-55c0-d29890b6eb7b","edcbf370-862a-cb18-928c-e4c905b18364","fe571802-a7d4-c9d1-abf5-0db810ef1c21","d024353f-66ca-e810-d7e3-7979f31877eb","0ace3a14-d413-3079-dd60-0af8fda7dd63","0c810873-20e6-36e5-4270-57f10b2d562e","a4193a9b-38d8-5301-a410-1b4c2bc450d9","fc10a14f-5e76-addf-5966-ccff4b6db5cd","b057dfdb-bdbb-e75e-3b8c-d05f643e6064","ff923c0b-69e8-4393-c2b8-5b43d56e91f6","78d079e4-52e8-6427-5d60-cee63a992c48","1515e5f9-9256-1e66-9dbb-5cedb94041f1","e8bd3c61-230f-cc19-9774-a8adec6a926a","35f44ec9-9f8e-d04a-1d93-16b16d46bf26","3caef340-3390-a743-ab21-dacb07646e55","324efd0b-6a68-d8f7-cf15-04aae0009deb","7989d73e-1209-f8c1-797f-523d13775bfc","f63cff9d-4d5c-1e39-51b6-8d9338df97ef","eadd7480-d219-c1e1-1f1b-6b4966078064"],"textures":[{"path":"E:\\COSMERE MODELS\\golden_sand.png","name":"golden_sand.png","folder":"","namespace":"","id":"0","particle":true,"render_mode":"default","render_sides":"auto","frame_time":1,"frame_order_type":"loop","frame_order":"","frame_interpolate":false,"visible":true,"mode":"bitmap","saved":true,"uuid":"64c9bae4-74a5-0413-de1e-c7db39067983","relative_path":"../golden_sand.png","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAPpJREFUOE99kz0KQjEQhF9A0MLGRjyDp/C2XsMr2Fi+VrFJI/6gEJmF7zEvL5omYbM7mZndpPf9XD6va6c1m687nZ/51C03uzj/it0uh8hJud+XxWobACrUWbuWEpTIGUDFlCfwBAOKPDkqbdUPCCQ98rEISQtkJECTO2QBpPgg4Z9+7lwmngUDR4SNEjAUvTB0oGDg1Nw8N1TxltkTBs6mNg0QlzvxAG20r2bkxdEFbyMU0ciLzoQcAemRkYQa3d33O5cSEtygFghzwExhbkhglOvh8T9BIbERAzzgZbTRe/9QrYEaRplEn/1Wsf/UGOUWA6aw9oMWO/AXzNxVXBpGvuwAAAAASUVORK5CYII="}]} \ No newline at end of file diff --git a/blockbench/sandmastery/SandPlatform04.bbmodel b/blockbench/sandmastery/SandPlatform04.bbmodel new file mode 100644 index 000000000..a924a1579 --- /dev/null +++ b/blockbench/sandmastery/SandPlatform04.bbmodel @@ -0,0 +1 @@ +{"meta":{"format_version":"4.5","model_format":"java_block","box_uv":false},"name":"SandPlatform04","parent":"","ambientocclusion":true,"front_gui_light":false,"visible_box":[1,1,0],"variable_placeholders":"","variable_placeholder_buttons":[],"unhandled_root_fields":{},"resolution":{"width":16,"height":16},"elements":[{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[1,14,5],"to":[6,16,12],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,5,2],"texture":0},"east":{"uv":[0,0,7,2],"texture":0},"south":{"uv":[0,0,5,2],"texture":0},"west":{"uv":[0,0,7,2],"texture":0},"up":{"uv":[0,0,5,7],"texture":0},"down":{"uv":[0,0,5,7],"texture":0}},"type":"cube","uuid":"c831f76f-ac27-aa59-2ebd-889e87259c65"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[0,14,6],"to":[1,16,11],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,1,2],"texture":0},"east":{"uv":[0,0,5,2],"texture":0},"south":{"uv":[0,0,1,2],"texture":0},"west":{"uv":[0,0,5,2],"texture":0},"up":{"uv":[0,0,1,5],"texture":0},"down":{"uv":[0,0,1,5],"texture":0}},"type":"cube","uuid":"64eec921-adcb-5bce-c7b2-04aa9dc81337"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[2,14,12],"to":[5,16,13],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,3,2],"texture":0},"east":{"uv":[0,0,1,2],"texture":0},"south":{"uv":[0,0,3,2],"texture":0},"west":{"uv":[0,0,1,2],"texture":0},"up":{"uv":[0,0,3,1],"texture":0},"down":{"uv":[0,0,3,1],"texture":0}},"type":"cube","uuid":"78115f1f-84fe-cae5-5925-b4937ff6d9b3"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[2,14,3],"to":[6,16,5],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,4,2],"texture":0},"east":{"uv":[0,0,2,2],"texture":0},"south":{"uv":[0,0,4,2],"texture":0},"west":{"uv":[0,0,2,2],"texture":0},"up":{"uv":[0,0,4,2],"texture":0},"down":{"uv":[0,0,4,2],"texture":0}},"type":"cube","uuid":"ba3a94b8-5f20-4cea-326f-3bb6562fcfc0"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[3,14,2],"to":[5,16,3],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,2,2],"texture":0},"east":{"uv":[0,0,1,2],"texture":0},"south":{"uv":[0,0,2,2],"texture":0},"west":{"uv":[0,0,1,2],"texture":0},"up":{"uv":[0,0,2,1],"texture":0},"down":{"uv":[0,0,2,1],"texture":0}},"type":"cube","uuid":"1ca8f137-e31f-2e43-1148-72c2666e17b2"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[6,14,4],"to":[7,16,10],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,1,2],"texture":0},"east":{"uv":[0,0,6,2],"texture":0},"south":{"uv":[0,0,1,2],"texture":0},"west":{"uv":[0,0,6,2],"texture":0},"up":{"uv":[0,0,1,6],"texture":0},"down":{"uv":[0,0,1,6],"texture":0}},"type":"cube","uuid":"0c7f7831-1439-633c-d92a-8b05c0b45271"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[10,14,6],"to":[13,16,9],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,3,2],"texture":0},"east":{"uv":[0,0,3,2],"texture":0},"south":{"uv":[0,0,3,2],"texture":0},"west":{"uv":[0,0,3,2],"texture":0},"up":{"uv":[0,0,3,3],"texture":0},"down":{"uv":[0,0,3,3],"texture":0}},"type":"cube","uuid":"144e721a-f13a-edcf-3cbc-2c093942b19e"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[9,14,3],"to":[13,16,6],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,4,2],"texture":0},"east":{"uv":[0,0,3,2],"texture":0},"south":{"uv":[0,0,4,2],"texture":0},"west":{"uv":[0,0,3,2],"texture":0},"up":{"uv":[0,0,4,3],"texture":0},"down":{"uv":[0,0,4,3],"texture":0}},"type":"cube","uuid":"7c9cad43-95a6-94d0-f195-5c91f4f24deb"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7,14,13],"to":[8,16,14],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,1,2],"texture":0},"east":{"uv":[0,0,1,2],"texture":0},"south":{"uv":[0,0,1,2],"texture":0},"west":{"uv":[0,0,1,2],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"d8b3cc5c-1e90-9128-de6d-2f7d7b41801b"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[6,14,11],"to":[12,16,13],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,6,2],"texture":0},"east":{"uv":[0,0,2,2],"texture":0},"south":{"uv":[0,0,6,2],"texture":0},"west":{"uv":[0,0,2,2],"texture":0},"up":{"uv":[0,0,6,2],"texture":0},"down":{"uv":[0,0,6,2],"texture":0}},"type":"cube","uuid":"8ced0a72-835e-eef3-f53b-ce413337f173"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7,14,10],"to":[12,16,11],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,5,2],"texture":0},"east":{"uv":[0,0,1,2],"texture":0},"south":{"uv":[0,0,5,2],"texture":0},"west":{"uv":[0,0,1,2],"texture":0},"up":{"uv":[0,0,5,1],"texture":0},"down":{"uv":[0,0,5,1],"texture":0}},"type":"cube","uuid":"7c8a0ac5-0825-498d-ae24-b6478d4ad5de"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[13,14,2],"to":[15,16,7],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,2,2],"texture":0},"east":{"uv":[0,0,5,2],"texture":0},"south":{"uv":[0,0,2,2],"texture":0},"west":{"uv":[0,0,5,2],"texture":0},"up":{"uv":[0,0,2,5],"texture":0},"down":{"uv":[0,0,2,5],"texture":0}},"type":"cube","uuid":"296c759b-443d-f2ab-51a9-4409c4923d19"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[10,14,1],"to":[13,16,3],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,3,2],"texture":0},"east":{"uv":[0,0,2,2],"texture":0},"south":{"uv":[0,0,3,2],"texture":0},"west":{"uv":[0,0,2,2],"texture":0},"up":{"uv":[0,0,3,2],"texture":0},"down":{"uv":[0,0,3,2],"texture":0}},"type":"cube","uuid":"da5451f4-bebd-6b70-f991-ebc661b9426b"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8,14,2],"to":[10,16,3],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,2,2],"texture":0},"east":{"uv":[0,0,1,2],"texture":0},"south":{"uv":[0,0,2,2],"texture":0},"west":{"uv":[0,0,1,2],"texture":0},"up":{"uv":[0,0,2,1],"texture":0},"down":{"uv":[0,0,2,1],"texture":0}},"type":"cube","uuid":"b1f0d9f1-0b1c-dbc9-f2a7-4017760d2b6a"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8,12,4],"to":[9,14,6],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,1,2],"texture":0},"east":{"uv":[0,0,2,2],"texture":0},"south":{"uv":[0,0,1,2],"texture":0},"west":{"uv":[0,0,2,2],"texture":0},"up":{"uv":[0,0,1,2],"texture":0},"down":{"uv":[0,0,1,2],"texture":0}},"type":"cube","uuid":"497f3563-b2bf-30a7-8f73-5bb36710e3f4"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[9,14,6],"to":[10,16,8],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,1,2],"texture":0},"east":{"uv":[0,0,2,2],"texture":0},"south":{"uv":[0,0,1,2],"texture":0},"west":{"uv":[0,0,2,2],"texture":0},"up":{"uv":[0,0,1,2],"texture":0},"down":{"uv":[0,0,1,2],"texture":0}},"type":"cube","uuid":"ccbbb3a4-294c-3417-a235-5e95a9a2073d"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[15,14,3],"to":[16,16,6],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,1,2],"texture":0},"east":{"uv":[0,0,3,2],"texture":0},"south":{"uv":[0,0,1,2],"texture":0},"west":{"uv":[0,0,3,2],"texture":0},"up":{"uv":[0,0,1,3],"texture":0},"down":{"uv":[0,0,1,3],"texture":0}},"type":"cube","uuid":"b27934cd-ed36-fef9-aaa8-d0a71d88d890"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8,14,13],"to":[14,16,15],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,6,2],"texture":0},"east":{"uv":[0,0,2,2],"texture":0},"south":{"uv":[0,0,6,2],"texture":0},"west":{"uv":[0,0,2,2],"texture":0},"up":{"uv":[0,0,6,2],"texture":0},"down":{"uv":[0,0,6,2],"texture":0}},"type":"cube","uuid":"13825c0d-db88-4e54-85eb-dceb1ceb918b"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[14,14,13],"to":[15,16,14],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,1,2],"texture":0},"east":{"uv":[0,0,1,2],"texture":0},"south":{"uv":[0,0,1,2],"texture":0},"west":{"uv":[0,0,1,2],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"768bacae-0977-dcc8-4d6d-9b265a006971"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[12,14,12],"to":[14,16,13],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,2,2],"texture":0},"east":{"uv":[0,0,1,2],"texture":0},"south":{"uv":[0,0,2,2],"texture":0},"west":{"uv":[0,0,1,2],"texture":0},"up":{"uv":[0,0,2,1],"texture":0},"down":{"uv":[0,0,2,1],"texture":0}},"type":"cube","uuid":"3486b29b-3de8-0565-5a1b-1f0fc8ef9a67"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[9,13,14],"to":[13,14,15],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,4,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,4,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,4,1],"texture":0},"down":{"uv":[0,0,4,1],"texture":0}},"type":"cube","uuid":"20a6856e-60b5-8ce4-f475-9afbacaf5529"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[9,12,3],"to":[13,14,6],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,4,2],"texture":0},"east":{"uv":[0,0,3,2],"texture":0},"south":{"uv":[0,0,4,2],"texture":0},"west":{"uv":[0,0,3,2],"texture":0},"up":{"uv":[0,0,4,3],"texture":0},"down":{"uv":[0,0,4,3],"texture":0}},"type":"cube","uuid":"702a8fba-e83b-3447-797d-c752ec174eb0"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7,14,3],"to":[9,16,6],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,2,2],"texture":0},"east":{"uv":[0,0,3,2],"texture":0},"south":{"uv":[0,0,2,2],"texture":0},"west":{"uv":[0,0,3,2],"texture":0},"up":{"uv":[0,0,2,3],"texture":0},"down":{"uv":[0,0,2,3],"texture":0}},"type":"cube","uuid":"d587020c-bdc7-b3d4-ebe8-234f4e467acf"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[10,13,2],"to":[13,14,3],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,3,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,3,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,3,1],"texture":0},"down":{"uv":[0,0,3,1],"texture":0}},"type":"cube","uuid":"c529d531-7a3a-2b39-20e5-5c7910f7c1d4"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[13,13,2],"to":[14,14,7],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,5,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,5,1],"texture":0},"up":{"uv":[0,0,1,5],"texture":0},"down":{"uv":[0,0,1,5],"texture":0}},"type":"cube","uuid":"c6bb4592-03d4-8d36-d7b5-fac56926e553"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[13,12,4],"to":[14,13,6],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,2,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,2,1],"texture":0},"up":{"uv":[0,0,1,2],"texture":0},"down":{"uv":[0,0,1,2],"texture":0}},"type":"cube","uuid":"7c228aea-1ef2-5b90-20ef-6bbe8e8d5f1b"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[14,13,3],"to":[15,14,6],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,3,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,3,1],"texture":0},"up":{"uv":[0,0,1,3],"texture":0},"down":{"uv":[0,0,1,3],"texture":0}},"type":"cube","uuid":"1fde3ea2-a5ca-1ad8-b8bf-fa2f386338a5"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[10,11,6],"to":[12,14,8],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,2,3],"texture":0},"east":{"uv":[0,0,2,3],"texture":0},"south":{"uv":[0,0,2,3],"texture":0},"west":{"uv":[0,0,2,3],"texture":0},"up":{"uv":[0,0,2,2],"texture":0},"down":{"uv":[0,0,2,2],"texture":0}},"type":"cube","uuid":"6fcd6955-7b04-94c6-dd37-60cfbc5373b7"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[11,12,8],"to":[12,14,9],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,1,2],"texture":0},"east":{"uv":[0,0,1,2],"texture":0},"south":{"uv":[0,0,1,2],"texture":0},"west":{"uv":[0,0,1,2],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"619dca23-8ea2-e992-ec54-dfa0adee39e4"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[9,12,6],"to":[10,14,7],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,1,2],"texture":0},"east":{"uv":[0,0,1,2],"texture":0},"south":{"uv":[0,0,1,2],"texture":0},"west":{"uv":[0,0,1,2],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"b42c9f2c-ed6b-d1ba-84f0-bde4a0be903a"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[11,10,4],"to":[12,11,7],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,3,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,3,1],"texture":0},"up":{"uv":[0,0,1,3],"texture":0},"down":{"uv":[0,0,1,3],"texture":0}},"type":"cube","uuid":"d4f0a0d5-b00b-6ca8-0644-603d67392cf4"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[10,10,4],"to":[11,11,6],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,2,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,2,1],"texture":0},"up":{"uv":[0,0,1,2],"texture":0},"down":{"uv":[0,0,1,2],"texture":0}},"type":"cube","uuid":"1b7b9412-8b74-6f46-aee5-3d7d99e76275"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[12,10,5],"to":[13,11,6],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"808ed33b-d1a4-b73e-cdbf-96c25a626f54"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[11,9,5],"to":[12,10,6],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"f2313397-a2d3-7baa-0862-9aac324033db"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8,13,11],"to":[11,14,14],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,3,1],"texture":0},"east":{"uv":[0,0,3,1],"texture":0},"south":{"uv":[0,0,3,1],"texture":0},"west":{"uv":[0,0,3,1],"texture":0},"up":{"uv":[0,0,3,3],"texture":0},"down":{"uv":[0,0,3,3],"texture":0}},"type":"cube","uuid":"7a8f8681-777c-48b2-512a-cb10a91a4e99"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[9,14,15],"to":[13,16,16],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,4,2],"texture":0},"east":{"uv":[0,0,1,2],"texture":0},"south":{"uv":[0,0,4,2],"texture":0},"west":{"uv":[0,0,1,2],"texture":0},"up":{"uv":[0,0,4,1],"texture":0},"down":{"uv":[0,0,4,1],"texture":0}},"type":"cube","uuid":"7c7f4eb1-d1e2-4c73-d6b1-7fa5195f58b2"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[11,13,13],"to":[14,14,14],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,3,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,3,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,3,1],"texture":0},"down":{"uv":[0,0,3,1],"texture":0}},"type":"cube","uuid":"470b8380-9bf5-2c1a-7fe8-80f465e024c5"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[11,11,12],"to":[12,13,13],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,1,2],"texture":0},"east":{"uv":[0,0,1,2],"texture":0},"south":{"uv":[0,0,1,2],"texture":0},"west":{"uv":[0,0,1,2],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"1c63397e-99d2-244b-3360-fb9c0a39ba6b"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[10,13,15],"to":[12,14,16],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,2,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,2,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,2,1],"texture":0},"down":{"uv":[0,0,2,1],"texture":0}},"type":"cube","uuid":"e7c923e8-23bc-0ad7-37d3-3e48ff1569f7"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7,13,12],"to":[8,14,13],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"a6b970b4-19ca-89d8-29ad-444f74a8ac80"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8,13,10],"to":[10,14,11],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,2,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,2,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,2,1],"texture":0},"down":{"uv":[0,0,2,1],"texture":0}},"type":"cube","uuid":"49dbd00c-38b6-3cde-edbe-d30b7a37ccbc"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[9,11,12],"to":[11,12,14],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,2,1],"texture":0},"east":{"uv":[0,0,2,1],"texture":0},"south":{"uv":[0,0,2,1],"texture":0},"west":{"uv":[0,0,2,1],"texture":0},"up":{"uv":[0,0,2,2],"texture":0},"down":{"uv":[0,0,2,2],"texture":0}},"type":"cube","uuid":"4829548b-392c-9b56-d243-a8bbf2024842"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[10,10,12],"to":[11,11,13],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"885a0126-d839-6865-1438-15b765a4f5ab"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[10,11,11],"to":[11,12,12],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"ed1c9376-27d5-461e-a08c-b5506a59bbd8"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[2,12,4],"to":[6,14,11],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,4,2],"texture":0},"east":{"uv":[0,0,7,2],"texture":0},"south":{"uv":[0,0,4,2],"texture":0},"west":{"uv":[0,0,7,2],"texture":0},"up":{"uv":[0,0,4,7],"texture":0},"down":{"uv":[0,0,4,7],"texture":0}},"type":"cube","uuid":"ad878b82-3722-f59c-ddf4-d9d8635e3a09"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[6,12,6],"to":[7,13,8],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,2,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,2,1],"texture":0},"up":{"uv":[0,0,1,2],"texture":0},"down":{"uv":[0,0,1,2],"texture":0}},"type":"cube","uuid":"9f844de1-2032-16f7-6c5d-61f7addde8f5"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[1,12,6],"to":[2,14,10],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,1,2],"texture":0},"east":{"uv":[0,0,4,2],"texture":0},"south":{"uv":[0,0,1,2],"texture":0},"west":{"uv":[0,0,4,2],"texture":0},"up":{"uv":[0,0,1,4],"texture":0},"down":{"uv":[0,0,1,4],"texture":0}},"type":"cube","uuid":"b69c9bb2-1b6f-38b3-edf6-32b34d3c8c93"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[2,13,11],"to":[5,14,12],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,3,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,3,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,3,1],"texture":0},"down":{"uv":[0,0,3,1],"texture":0}},"type":"cube","uuid":"d8ec693f-30db-baa3-29a5-ec3a1f95806a"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[3,12,3],"to":[5,14,4],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,2,2],"texture":0},"east":{"uv":[0,0,1,2],"texture":0},"south":{"uv":[0,0,2,2],"texture":0},"west":{"uv":[0,0,1,2],"texture":0},"up":{"uv":[0,0,2,1],"texture":0},"down":{"uv":[0,0,2,1],"texture":0}},"type":"cube","uuid":"a7996d1d-f23e-524c-b456-74779dc9b47c"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[2,11,6],"to":[5,12,10],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,3,1],"texture":0},"east":{"uv":[0,0,4,1],"texture":0},"south":{"uv":[0,0,3,1],"texture":0},"west":{"uv":[0,0,4,1],"texture":0},"up":{"uv":[0,0,3,4],"texture":0},"down":{"uv":[0,0,3,4],"texture":0}},"type":"cube","uuid":"a8cc27e5-932f-7d0e-d501-df48ac362e40"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[6,13,5],"to":[7,14,9],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,4,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,4,1],"texture":0},"up":{"uv":[0,0,1,4],"texture":0},"down":{"uv":[0,0,1,4],"texture":0}},"type":"cube","uuid":"15fa4b57-3849-d1fd-e33e-1e7e21ce9918"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[5,11,5],"to":[6,12,9],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,4,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,4,1],"texture":0},"up":{"uv":[0,0,1,4],"texture":0},"down":{"uv":[0,0,1,4],"texture":0}},"type":"cube","uuid":"eb6abe8f-d70f-cde0-1f69-2c7caf9cc2d5"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[3,10,5],"to":[5,11,9],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,2,1],"texture":0},"east":{"uv":[0,0,4,1],"texture":0},"south":{"uv":[0,0,2,1],"texture":0},"west":{"uv":[0,0,4,1],"texture":0},"up":{"uv":[0,0,2,4],"texture":0},"down":{"uv":[0,0,2,4],"texture":0}},"type":"cube","uuid":"27710137-e4eb-0a91-863d-e6e0695c47bf"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[0,13,7],"to":[1,14,9],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,2,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,2,1],"texture":0},"up":{"uv":[0,0,1,2],"texture":0},"down":{"uv":[0,0,1,2],"texture":0}},"type":"cube","uuid":"51a7c0e4-8425-55ec-429f-66484a1fe0fd"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[3,8,6],"to":[4,9,8],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,2,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,2,1],"texture":0},"up":{"uv":[0,0,1,2],"texture":0},"down":{"uv":[0,0,1,2],"texture":0}},"type":"cube","uuid":"47886370-e9b9-d097-838c-28d145a63d86"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[3,11,4],"to":[5,12,6],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,2,1],"texture":0},"east":{"uv":[0,0,2,1],"texture":0},"south":{"uv":[0,0,2,1],"texture":0},"west":{"uv":[0,0,2,1],"texture":0},"up":{"uv":[0,0,2,2],"texture":0},"down":{"uv":[0,0,2,2],"texture":0}},"type":"cube","uuid":"d4681ced-5721-8970-63b6-d1243c229f2f"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[3,7,7],"to":[4,8,8],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"3b0c3363-9126-494a-0893-9f7120776a5d"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[2,10,7],"to":[3,11,8],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"708bbd41-0613-26e4-f663-0b137494419e"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[9,11,4],"to":[13,12,6],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,4,1],"texture":0},"east":{"uv":[0,0,2,1],"texture":0},"south":{"uv":[0,0,4,1],"texture":0},"west":{"uv":[0,0,2,1],"texture":0},"up":{"uv":[0,0,4,2],"texture":0},"down":{"uv":[0,0,4,2],"texture":0}},"type":"cube","uuid":"4d40f623-4bf9-464e-22b4-38c77eef7067"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[10,11,3],"to":[12,12,4],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,2,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,2,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,2,1],"texture":0},"down":{"uv":[0,0,2,1],"texture":0}},"type":"cube","uuid":"3e62f1d0-6078-7c81-c1bc-b6852ed27389"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[11,12,2],"to":[12,13,3],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"60f3456f-e732-0834-8477-6987cd309217"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[13,14,1],"to":[14,16,2],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,1,2],"texture":0},"east":{"uv":[0,0,1,2],"texture":0},"south":{"uv":[0,0,1,2],"texture":0},"west":{"uv":[0,0,1,2],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"8e27a792-4d42-4ccc-9cb3-f015713f26ba"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[11,14,0],"to":[13,16,1],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,2,2],"texture":0},"east":{"uv":[0,0,1,2],"texture":0},"south":{"uv":[0,0,2,2],"texture":0},"west":{"uv":[0,0,1,2],"texture":0},"up":{"uv":[0,0,2,1],"texture":0},"down":{"uv":[0,0,2,1],"texture":0}},"type":"cube","uuid":"a6af2fef-5def-1c14-9442-42aa0f612b0b"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8,14,6],"to":[9,16,7],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,1,2],"texture":0},"east":{"uv":[0,0,1,2],"texture":0},"south":{"uv":[0,0,1,2],"texture":0},"west":{"uv":[0,0,1,2],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"28c04270-29c5-6918-70f5-2f56773061bb"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[11,14,9],"to":[12,16,10],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,1,2],"texture":0},"east":{"uv":[0,0,1,2],"texture":0},"south":{"uv":[0,0,1,2],"texture":0},"west":{"uv":[0,0,1,2],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"69646370-d668-c1fd-26ff-3f5e81665f5b"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[13,14,7],"to":[14,16,8],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,1,2],"texture":0},"east":{"uv":[0,0,1,2],"texture":0},"south":{"uv":[0,0,1,2],"texture":0},"west":{"uv":[0,0,1,2],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"351202a3-7b3a-ac79-a1ff-dd278e6f0de4"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[12,11,6],"to":[13,14,7],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,1,3],"texture":0},"east":{"uv":[0,0,1,3],"texture":0},"south":{"uv":[0,0,1,3],"texture":0},"west":{"uv":[0,0,1,3],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"e5de0879-2a63-2ce2-f46a-ae36e1cf63a7"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[12,12,7],"to":[13,14,8],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,1,2],"texture":0},"east":{"uv":[0,0,1,2],"texture":0},"south":{"uv":[0,0,1,2],"texture":0},"west":{"uv":[0,0,1,2],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"606bb7bc-9e56-8727-bf2d-9fbdd5647232"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7,13,4],"to":[8,14,5],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"82f504b4-6dff-4818-566e-a26e3ce4c5cc"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[11,13,1],"to":[12,14,2],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"8970f54c-1a29-aa84-cc0b-b334270fe3fc"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8,12,11],"to":[11,13,14],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,3,1],"texture":0},"east":{"uv":[0,0,3,1],"texture":0},"south":{"uv":[0,0,3,1],"texture":0},"west":{"uv":[0,0,3,1],"texture":0},"up":{"uv":[0,0,3,3],"texture":0},"down":{"uv":[0,0,3,3],"texture":0}},"type":"cube","uuid":"81b81906-820e-94de-1ea6-cd2119e64275"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8,14,9],"to":[10,16,10],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,2,2],"texture":0},"east":{"uv":[0,0,1,2],"texture":0},"south":{"uv":[0,0,2,2],"texture":0},"west":{"uv":[0,0,1,2],"texture":0},"up":{"uv":[0,0,2,1],"texture":0},"down":{"uv":[0,0,2,1],"texture":0}},"type":"cube","uuid":"003a3a05-41fb-781c-280f-1024244cb952"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[12,14,11],"to":[13,16,12],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,1,2],"texture":0},"east":{"uv":[0,0,1,2],"texture":0},"south":{"uv":[0,0,1,2],"texture":0},"west":{"uv":[0,0,1,2],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"01fae3a2-7251-cac2-987d-516e8a71ee3b"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[11,13,12],"to":[13,14,13],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,2,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,2,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,2,1],"texture":0},"down":{"uv":[0,0,2,1],"texture":0}},"type":"cube","uuid":"ff9796e9-3f04-c82e-b938-8f2dc9379e07"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[11,13,11],"to":[12,14,12],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"025dffe2-0c8b-e03a-29d1-c8d1d477c3d7"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[11,12,13],"to":[13,13,14],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,2,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,2,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,2,1],"texture":0},"down":{"uv":[0,0,2,1],"texture":0}},"type":"cube","uuid":"024edd6a-e44e-edbd-2cf7-0eb0d12060d7"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[10,12,14],"to":[12,13,15],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,2,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,2,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,2,1],"texture":0},"down":{"uv":[0,0,2,1],"texture":0}},"type":"cube","uuid":"59816389-5de3-bf18-a4c7-c3c1da3b7f2c"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7,14,7],"to":[8,16,9],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,1,2],"texture":0},"east":{"uv":[0,0,2,2],"texture":0},"south":{"uv":[0,0,1,2],"texture":0},"west":{"uv":[0,0,2,2],"texture":0},"up":{"uv":[0,0,1,2],"texture":0},"down":{"uv":[0,0,1,2],"texture":0}},"type":"cube","uuid":"c996688e-dc1e-8654-9df5-4529f33a4dd5"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[3,14,1],"to":[4,16,2],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,1,2],"texture":0},"east":{"uv":[0,0,1,2],"texture":0},"south":{"uv":[0,0,1,2],"texture":0},"west":{"uv":[0,0,1,2],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"5cffd2fe-d798-d674-f767-a4a28bf9f123"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[1,14,4],"to":[2,16,5],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,1,2],"texture":0},"east":{"uv":[0,0,1,2],"texture":0},"south":{"uv":[0,0,1,2],"texture":0},"west":{"uv":[0,0,1,2],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"236658ea-072d-88ca-9c6c-a0be1dd94633"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[3,13,2],"to":[4,14,3],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"2a3a4e73-9351-8f6e-4117-45841df931fd"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[3,13,12],"to":[4,14,13],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"86139287-c184-0dfc-151b-1dae06d30c71"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[3,15,13],"to":[4,16,14],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"fd65a945-ad1c-a2e3-3e4a-5f4cdfd6784c"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[1,11,7],"to":[2,12,8],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"5c40fe90-1da2-7437-abab-e3843091aaec"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[0,15,5],"to":[1,16,6],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"febbfedb-0ed9-c8d7-225b-c3c08958fbd7"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[1,13,5],"to":[2,14,6],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"57c8003c-4b2c-600a-6eed-81013fcd416a"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[3,9,5],"to":[5,10,9],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,2,1],"texture":0},"east":{"uv":[0,0,4,1],"texture":0},"south":{"uv":[0,0,2,1],"texture":0},"west":{"uv":[0,0,4,1],"texture":0},"up":{"uv":[0,0,2,4],"texture":0},"down":{"uv":[0,0,2,4],"texture":0}},"type":"cube","uuid":"b6168b6c-eadb-350a-61c8-a684149831a2"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[5,10,6],"to":[6,11,8],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,2,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,2,1],"texture":0},"up":{"uv":[0,0,1,2],"texture":0},"down":{"uv":[0,0,1,2],"texture":0}},"type":"cube","uuid":"b3dc4a19-6d54-3fc9-d275-33741d44004e"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[3,10,9],"to":[4,11,10],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"901df008-0805-3cd2-053d-b05cf2101364"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[1,13,10],"to":[2,14,11],"autouv":1,"color":2,"origin":[8,11.5,8],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"8e5373d2-04af-ca39-5df3-6a34b57d42d2"}],"outliner":["c831f76f-ac27-aa59-2ebd-889e87259c65","64eec921-adcb-5bce-c7b2-04aa9dc81337","78115f1f-84fe-cae5-5925-b4937ff6d9b3","ba3a94b8-5f20-4cea-326f-3bb6562fcfc0","1ca8f137-e31f-2e43-1148-72c2666e17b2","5cffd2fe-d798-d674-f767-a4a28bf9f123","236658ea-072d-88ca-9c6c-a0be1dd94633","0c7f7831-1439-633c-d92a-8b05c0b45271","c996688e-dc1e-8654-9df5-4529f33a4dd5","144e721a-f13a-edcf-3cbc-2c093942b19e","7c9cad43-95a6-94d0-f195-5c91f4f24deb","d8b3cc5c-1e90-9128-de6d-2f7d7b41801b","8ced0a72-835e-eef3-f53b-ce413337f173","7c8a0ac5-0825-498d-ae24-b6478d4ad5de","003a3a05-41fb-781c-280f-1024244cb952","296c759b-443d-f2ab-51a9-4409c4923d19","da5451f4-bebd-6b70-f991-ebc661b9426b","a6af2fef-5def-1c14-9442-42aa0f612b0b","8e27a792-4d42-4ccc-9cb3-f015713f26ba","b1f0d9f1-0b1c-dbc9-f2a7-4017760d2b6a","497f3563-b2bf-30a7-8f73-5bb36710e3f4","82f504b4-6dff-4818-566e-a26e3ce4c5cc","ccbbb3a4-294c-3417-a235-5e95a9a2073d","28c04270-29c5-6918-70f5-2f56773061bb","b27934cd-ed36-fef9-aaa8-d0a71d88d890","13825c0d-db88-4e54-85eb-dceb1ceb918b","768bacae-0977-dcc8-4d6d-9b265a006971","3486b29b-3de8-0565-5a1b-1f0fc8ef9a67","01fae3a2-7251-cac2-987d-516e8a71ee3b","20a6856e-60b5-8ce4-f475-9afbacaf5529","702a8fba-e83b-3447-797d-c752ec174eb0","4d40f623-4bf9-464e-22b4-38c77eef7067","3e62f1d0-6078-7c81-c1bc-b6852ed27389","d587020c-bdc7-b3d4-ebe8-234f4e467acf","c529d531-7a3a-2b39-20e5-5c7910f7c1d4","60f3456f-e732-0834-8477-6987cd309217","8970f54c-1a29-aa84-cc0b-b334270fe3fc","c6bb4592-03d4-8d36-d7b5-fac56926e553","606bb7bc-9e56-8727-bf2d-9fbdd5647232","7c228aea-1ef2-5b90-20ef-6bbe8e8d5f1b","1fde3ea2-a5ca-1ad8-b8bf-fa2f386338a5","6fcd6955-7b04-94c6-dd37-60cfbc5373b7","e5de0879-2a63-2ce2-f46a-ae36e1cf63a7","619dca23-8ea2-e992-ec54-dfa0adee39e4","69646370-d668-c1fd-26ff-3f5e81665f5b","351202a3-7b3a-ac79-a1ff-dd278e6f0de4","b42c9f2c-ed6b-d1ba-84f0-bde4a0be903a","d4f0a0d5-b00b-6ca8-0644-603d67392cf4","1b7b9412-8b74-6f46-aee5-3d7d99e76275","808ed33b-d1a4-b73e-cdbf-96c25a626f54","f2313397-a2d3-7baa-0862-9aac324033db","7a8f8681-777c-48b2-512a-cb10a91a4e99","81b81906-820e-94de-1ea6-cd2119e64275","7c7f4eb1-d1e2-4c73-d6b1-7fa5195f58b2","470b8380-9bf5-2c1a-7fe8-80f465e024c5","024edd6a-e44e-edbd-2cf7-0eb0d12060d7","59816389-5de3-bf18-a4c7-c3c1da3b7f2c","1c63397e-99d2-244b-3360-fb9c0a39ba6b","e7c923e8-23bc-0ad7-37d3-3e48ff1569f7","a6b970b4-19ca-89d8-29ad-444f74a8ac80","49dbd00c-38b6-3cde-edbe-d30b7a37ccbc","ff9796e9-3f04-c82e-b938-8f2dc9379e07","025dffe2-0c8b-e03a-29d1-c8d1d477c3d7","4829548b-392c-9b56-d243-a8bbf2024842","885a0126-d839-6865-1438-15b765a4f5ab","ed1c9376-27d5-461e-a08c-b5506a59bbd8","ad878b82-3722-f59c-ddf4-d9d8635e3a09","9f844de1-2032-16f7-6c5d-61f7addde8f5","b69c9bb2-1b6f-38b3-edf6-32b34d3c8c93","d8ec693f-30db-baa3-29a5-ec3a1f95806a","86139287-c184-0dfc-151b-1dae06d30c71","fd65a945-ad1c-a2e3-3e4a-5f4cdfd6784c","a7996d1d-f23e-524c-b456-74779dc9b47c","2a3a4e73-9351-8f6e-4117-45841df931fd","a8cc27e5-932f-7d0e-d501-df48ac362e40","15fa4b57-3849-d1fd-e33e-1e7e21ce9918","eb6abe8f-d70f-cde0-1f69-2c7caf9cc2d5","27710137-e4eb-0a91-863d-e6e0695c47bf","b6168b6c-eadb-350a-61c8-a684149831a2","51a7c0e4-8425-55ec-429f-66484a1fe0fd","febbfedb-0ed9-c8d7-225b-c3c08958fbd7","57c8003c-4b2c-600a-6eed-81013fcd416a","47886370-e9b9-d097-838c-28d145a63d86","b3dc4a19-6d54-3fc9-d275-33741d44004e","d4681ced-5721-8970-63b6-d1243c229f2f","3b0c3363-9126-494a-0893-9f7120776a5d","901df008-0805-3cd2-053d-b05cf2101364","8e5373d2-04af-ca39-5df3-6a34b57d42d2","708bbd41-0613-26e4-f663-0b137494419e","5c40fe90-1da2-7437-abab-e3843091aaec"],"textures":[{"path":"E:\\COSMERE MODELS\\golden_sand.png","name":"golden_sand.png","folder":"","namespace":"","id":"0","particle":true,"render_mode":"default","render_sides":"auto","frame_time":1,"frame_order_type":"loop","frame_order":"","frame_interpolate":false,"visible":true,"mode":"bitmap","saved":true,"uuid":"271270fb-df34-f702-ed34-234618ca9fc4","relative_path":"../golden_sand.png","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAPpJREFUOE99kz0KQjEQhF9A0MLGRjyDp/C2XsMr2Fi+VrFJI/6gEJmF7zEvL5omYbM7mZndpPf9XD6va6c1m687nZ/51C03uzj/it0uh8hJud+XxWobACrUWbuWEpTIGUDFlCfwBAOKPDkqbdUPCCQ98rEISQtkJECTO2QBpPgg4Z9+7lwmngUDR4SNEjAUvTB0oGDg1Nw8N1TxltkTBs6mNg0QlzvxAG20r2bkxdEFbyMU0ciLzoQcAemRkYQa3d33O5cSEtygFghzwExhbkhglOvh8T9BIbERAzzgZbTRe/9QrYEaRplEn/1Wsf/UGOUWA6aw9oMWO/AXzNxVXBpGvuwAAAAASUVORK5CYII="}]} \ No newline at end of file diff --git a/blockbench/sandmastery/SandPlatform05.bbmodel b/blockbench/sandmastery/SandPlatform05.bbmodel new file mode 100644 index 000000000..6beee2a17 --- /dev/null +++ b/blockbench/sandmastery/SandPlatform05.bbmodel @@ -0,0 +1 @@ +{"meta":{"format_version":"4.5","model_format":"java_block","box_uv":false},"name":"SandPlatform05","parent":"","ambientocclusion":true,"front_gui_light":false,"visible_box":[1,1,0],"variable_placeholders":"","variable_placeholder_buttons":[],"unhandled_root_fields":{},"resolution":{"width":16,"height":16},"elements":[{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[1.5,14,4.25],"to":[6.5,16,10.25],"autouv":1,"color":2,"origin":[-0.5,-2,-0.75],"faces":{"north":{"uv":[0,0,5,2],"texture":0},"east":{"uv":[0,0,6,2],"texture":0},"south":{"uv":[0,0,5,2],"texture":0},"west":{"uv":[0,0,6,2],"texture":0},"up":{"uv":[0,0,5,6],"texture":0},"down":{"uv":[0,0,5,6],"texture":0}},"type":"cube","uuid":"59f2a34a-140c-8ba4-4d6f-85a3b80a765d"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[0.5,14,5.25],"to":[1.5,16,9.25],"autouv":1,"color":2,"origin":[-0.5,-2,-0.75],"faces":{"north":{"uv":[0,0,1,2],"texture":0},"east":{"uv":[0,0,4,2],"texture":0},"south":{"uv":[0,0,1,2],"texture":0},"west":{"uv":[0,0,4,2],"texture":0},"up":{"uv":[0,0,1,4],"texture":0},"down":{"uv":[0,0,1,4],"texture":0}},"type":"cube","uuid":"bfed42d3-dedb-8d3a-f1a7-651caf1c961c"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[2.5,14,10.25],"to":[5.5,16,11.25],"autouv":1,"color":2,"origin":[-0.5,-2,-0.75],"faces":{"north":{"uv":[0,0,3,2],"texture":0},"east":{"uv":[0,0,1,2],"texture":0},"south":{"uv":[0,0,3,2],"texture":0},"west":{"uv":[0,0,1,2],"texture":0},"up":{"uv":[0,0,3,1],"texture":0},"down":{"uv":[0,0,3,1],"texture":0}},"type":"cube","uuid":"ebae6d20-1c2e-6ae5-8b1e-96be86bb7fce"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[2.5,14,2.25],"to":[6.5,16,4.25],"autouv":1,"color":2,"origin":[-0.5,-2,-0.75],"faces":{"north":{"uv":[0,0,4,2],"texture":0},"east":{"uv":[0,0,2,2],"texture":0},"south":{"uv":[0,0,4,2],"texture":0},"west":{"uv":[0,0,2,2],"texture":0},"up":{"uv":[0,0,4,2],"texture":0},"down":{"uv":[0,0,4,2],"texture":0}},"type":"cube","uuid":"7c192834-89d0-946e-16df-3fc94bbbc988"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[3.5,14,1.25],"to":[5.5,16,2.25],"autouv":1,"color":2,"origin":[-0.5,-2,-0.75],"faces":{"north":{"uv":[0,0,2,2],"texture":0},"east":{"uv":[0,0,1,2],"texture":0},"south":{"uv":[0,0,2,2],"texture":0},"west":{"uv":[0,0,1,2],"texture":0},"up":{"uv":[0,0,2,1],"texture":0},"down":{"uv":[0,0,2,1],"texture":0}},"type":"cube","uuid":"a61ecaea-a859-ed3d-c11e-def0c308b6c8"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[6.5,14,3.25],"to":[7.5,16,8.25],"autouv":1,"color":2,"origin":[-0.5,-2,-0.75],"faces":{"north":{"uv":[0,0,1,2],"texture":0},"east":{"uv":[0,0,5,2],"texture":0},"south":{"uv":[0,0,1,2],"texture":0},"west":{"uv":[0,0,5,2],"texture":0},"up":{"uv":[0,0,1,5],"texture":0},"down":{"uv":[0,0,1,5],"texture":0}},"type":"cube","uuid":"a00dd48c-0ffe-b66f-6e40-3d82b589f9c7"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[10.5,14,5.25],"to":[13.5,16,8.25],"autouv":1,"color":2,"origin":[-0.5,-2,-0.75],"faces":{"north":{"uv":[0,0,3,2],"texture":0},"east":{"uv":[0,0,3,2],"texture":0},"south":{"uv":[0,0,3,2],"texture":0},"west":{"uv":[0,0,3,2],"texture":0},"up":{"uv":[0,0,3,3],"texture":0},"down":{"uv":[0,0,3,3],"texture":0}},"type":"cube","uuid":"1992dc38-8d22-cf15-cfec-f1fde932c816"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[9.5,14,2.25],"to":[13.5,16,5.25],"autouv":1,"color":2,"origin":[-0.5,-2,-0.75],"faces":{"north":{"uv":[0,0,4,2],"texture":0},"east":{"uv":[0,0,3,2],"texture":0},"south":{"uv":[0,0,4,2],"texture":0},"west":{"uv":[0,0,3,2],"texture":0},"up":{"uv":[0,0,4,3],"texture":0},"down":{"uv":[0,0,4,3],"texture":0}},"type":"cube","uuid":"a27649b4-e31d-2e6c-2ea5-bd0487cf6f9f"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7.5,14,12.25],"to":[8.5,16,13.25],"autouv":1,"color":2,"origin":[-0.5,-2,-0.75],"faces":{"north":{"uv":[0,0,1,2],"texture":0},"east":{"uv":[0,0,1,2],"texture":0},"south":{"uv":[0,0,1,2],"texture":0},"west":{"uv":[0,0,1,2],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"928a9032-d1bb-ee88-fe23-86ec4dfd880a"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7.5,14,10.25],"to":[12.5,16,12.25],"autouv":1,"color":2,"origin":[-0.5,-2,-0.75],"faces":{"north":{"uv":[0,0,5,2],"texture":0},"east":{"uv":[0,0,2,2],"texture":0},"south":{"uv":[0,0,5,2],"texture":0},"west":{"uv":[0,0,2,2],"texture":0},"up":{"uv":[0,0,5,2],"texture":0},"down":{"uv":[0,0,5,2],"texture":0}},"type":"cube","uuid":"1d491481-d53e-6d90-d991-3eec5c4c60fc"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8.5,14,9.25],"to":[11.5,16,10.25],"autouv":1,"color":2,"origin":[-0.5,-2,-0.75],"faces":{"north":{"uv":[0,0,3,2],"texture":0},"east":{"uv":[0,0,1,2],"texture":0},"south":{"uv":[0,0,3,2],"texture":0},"west":{"uv":[0,0,1,2],"texture":0},"up":{"uv":[0,0,3,1],"texture":0},"down":{"uv":[0,0,3,1],"texture":0}},"type":"cube","uuid":"5ffe208f-dd28-a7ed-104a-3086d3ef8dba"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[13.5,14,1.25],"to":[14.5,16,6.25],"autouv":1,"color":2,"origin":[-0.5,-2,-0.75],"faces":{"north":{"uv":[0,0,1,2],"texture":0},"east":{"uv":[0,0,5,2],"texture":0},"south":{"uv":[0,0,1,2],"texture":0},"west":{"uv":[0,0,5,2],"texture":0},"up":{"uv":[0,0,1,5],"texture":0},"down":{"uv":[0,0,1,5],"texture":0}},"type":"cube","uuid":"6937c48b-fcb3-ca6f-f506-e4157aa507c3"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[10.5,14,0.25],"to":[13.5,16,2.25],"autouv":1,"color":2,"origin":[-0.5,-2,-0.75],"faces":{"north":{"uv":[0,0,3,2],"texture":0},"east":{"uv":[0,0,2,2],"texture":0},"south":{"uv":[0,0,3,2],"texture":0},"west":{"uv":[0,0,2,2],"texture":0},"up":{"uv":[0,0,3,2],"texture":0},"down":{"uv":[0,0,3,2],"texture":0}},"type":"cube","uuid":"372c98f6-6396-f2ff-76a4-43aac772d86c"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[9.5,14,1.25],"to":[10.5,16,2.25],"autouv":1,"color":2,"origin":[-0.5,-2,-0.75],"faces":{"north":{"uv":[0,0,1,2],"texture":0},"east":{"uv":[0,0,1,2],"texture":0},"south":{"uv":[0,0,1,2],"texture":0},"west":{"uv":[0,0,1,2],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"f2239098-f7e4-c5ec-5881-f96267bdd5db"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8.5,13,3.25],"to":[9.5,14,4.25],"autouv":1,"color":2,"origin":[-0.5,-2,-0.75],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"3f2f52f3-4dde-b4e6-66dd-dd5efe090885"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[9.5,14,5.25],"to":[10.5,16,7.25],"autouv":1,"color":2,"origin":[-0.5,-2,-0.75],"faces":{"north":{"uv":[0,0,1,2],"texture":0},"east":{"uv":[0,0,2,2],"texture":0},"south":{"uv":[0,0,1,2],"texture":0},"west":{"uv":[0,0,2,2],"texture":0},"up":{"uv":[0,0,1,2],"texture":0},"down":{"uv":[0,0,1,2],"texture":0}},"type":"cube","uuid":"5f942df7-4b4b-6f9d-5781-123e0afdff23"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[14.5,14,2.25],"to":[15.5,16,5.25],"autouv":1,"color":2,"origin":[-0.5,-2,-0.75],"faces":{"north":{"uv":[0,0,1,2],"texture":0},"east":{"uv":[0,0,3,2],"texture":0},"south":{"uv":[0,0,1,2],"texture":0},"west":{"uv":[0,0,3,2],"texture":0},"up":{"uv":[0,0,1,3],"texture":0},"down":{"uv":[0,0,1,3],"texture":0}},"type":"cube","uuid":"efb7c981-e24c-b010-7e50-3b103fad0d6b"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8.5,14,12.25],"to":[13.5,16,14.25],"autouv":1,"color":2,"origin":[-0.5,-2,-0.75],"faces":{"north":{"uv":[0,0,5,2],"texture":0},"east":{"uv":[0,0,2,2],"texture":0},"south":{"uv":[0,0,5,2],"texture":0},"west":{"uv":[0,0,2,2],"texture":0},"up":{"uv":[0,0,5,2],"texture":0},"down":{"uv":[0,0,5,2],"texture":0}},"type":"cube","uuid":"3b40701e-1306-7259-ba2d-70bda1f0242d"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[13.5,14,12.25],"to":[14.5,16,13.25],"autouv":1,"color":2,"origin":[-0.5,-2,-0.75],"faces":{"north":{"uv":[0,0,1,2],"texture":0},"east":{"uv":[0,0,1,2],"texture":0},"south":{"uv":[0,0,1,2],"texture":0},"west":{"uv":[0,0,1,2],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"45aedb8a-525e-e914-ec8c-45e05e2a4b4f"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[12.5,14,11.25],"to":[13.5,16,12.25],"autouv":1,"color":2,"origin":[-0.5,-2,-0.75],"faces":{"north":{"uv":[0,0,1,2],"texture":0},"east":{"uv":[0,0,1,2],"texture":0},"south":{"uv":[0,0,1,2],"texture":0},"west":{"uv":[0,0,1,2],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"3ab885f8-bd1e-58da-7ea3-567a39aed364"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[9.5,13,13.25],"to":[12.5,14,14.25],"autouv":1,"color":2,"origin":[-0.5,-2,-0.75],"faces":{"north":{"uv":[0,0,3,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,3,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,3,1],"texture":0},"down":{"uv":[0,0,3,1],"texture":0}},"type":"cube","uuid":"e56767bf-3383-dda0-1273-e0ea74ec1487"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[9.5,12,2.25],"to":[13.5,14,5.25],"autouv":1,"color":2,"origin":[-0.5,-2,-0.75],"faces":{"north":{"uv":[0,0,4,2],"texture":0},"east":{"uv":[0,0,3,2],"texture":0},"south":{"uv":[0,0,4,2],"texture":0},"west":{"uv":[0,0,3,2],"texture":0},"up":{"uv":[0,0,4,3],"texture":0},"down":{"uv":[0,0,4,3],"texture":0}},"type":"cube","uuid":"a08a70d8-b863-3430-6903-660c24c88b2c"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8.5,14,2.25],"to":[9.5,16,5.25],"autouv":1,"color":2,"origin":[-0.5,-2,-0.75],"faces":{"north":{"uv":[0,0,1,2],"texture":0},"east":{"uv":[0,0,3,2],"texture":0},"south":{"uv":[0,0,1,2],"texture":0},"west":{"uv":[0,0,3,2],"texture":0},"up":{"uv":[0,0,1,3],"texture":0},"down":{"uv":[0,0,1,3],"texture":0}},"type":"cube","uuid":"5efa2619-82f0-4803-4d39-aa29ab837afb"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[10.5,13,1.25],"to":[13.5,14,2.25],"autouv":1,"color":2,"origin":[-0.5,-2,-0.75],"faces":{"north":{"uv":[0,0,3,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,3,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,3,1],"texture":0},"down":{"uv":[0,0,3,1],"texture":0}},"type":"cube","uuid":"39448ba2-8070-79a3-ac87-2dbd243c91ee"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[13.5,13,2.25],"to":[14.5,14,5.25],"autouv":1,"color":2,"origin":[-0.5,-2,-0.75],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,3,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,3,1],"texture":0},"up":{"uv":[0,0,1,3],"texture":0},"down":{"uv":[0,0,1,3],"texture":0}},"type":"cube","uuid":"3912c9d2-a086-edbe-dba3-66ce2533f0f0"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[13.5,12,3.25],"to":[14.5,13,4.25],"autouv":1,"color":2,"origin":[-0.5,-2,-0.75],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"8c49944a-a403-a182-0931-b19e117bf3ba"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[14.5,13,3.25],"to":[15.5,14,4.25],"autouv":1,"color":2,"origin":[-0.5,-2,-0.75],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"ffbc09ca-0995-5387-6d31-2c3ba7d4e84e"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[10.5,12,5.25],"to":[13.5,14,7.25],"autouv":1,"color":2,"origin":[-0.5,-2,-0.75],"faces":{"north":{"uv":[0,0,3,2],"texture":0},"east":{"uv":[0,0,2,2],"texture":0},"south":{"uv":[0,0,3,2],"texture":0},"west":{"uv":[0,0,2,2],"texture":0},"up":{"uv":[0,0,3,2],"texture":0},"down":{"uv":[0,0,3,2],"texture":0}},"type":"cube","uuid":"68bc4dec-65c3-3c18-d6b9-82607c5b5512"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[11.5,13,7.25],"to":[12.5,14,8.25],"autouv":1,"color":2,"origin":[-0.5,-2,-0.75],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"0fe837df-4675-700e-a130-9a55d607bc7b"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[9.5,13,5.25],"to":[10.5,14,6.25],"autouv":1,"color":2,"origin":[-0.5,-2,-0.75],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"997b959d-e414-641f-9b9e-195eff2a8e34"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[11.5,11,3.25],"to":[12.5,12,6.25],"autouv":1,"color":2,"origin":[-0.5,-2,-0.75],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,3,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,3,1],"texture":0},"up":{"uv":[0,0,1,3],"texture":0},"down":{"uv":[0,0,1,3],"texture":0}},"type":"cube","uuid":"90eebe03-c862-40bd-ac02-1ff51efdb993"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[10.5,11,3.25],"to":[11.5,12,5.25],"autouv":1,"color":2,"origin":[-0.5,-2,-0.75],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,2,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,2,1],"texture":0},"up":{"uv":[0,0,1,2],"texture":0},"down":{"uv":[0,0,1,2],"texture":0}},"type":"cube","uuid":"1291c453-35a9-da1a-0cc8-fbe37b38c609"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[12.5,11,4.25],"to":[13.5,12,5.25],"autouv":1,"color":2,"origin":[-0.5,-2,-0.75],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"03d3e371-94a4-1ff7-0739-3fc466e7dfba"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[11.5,10,4.25],"to":[12.5,11,5.25],"autouv":1,"color":2,"origin":[-0.5,-2,-0.75],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"2d39281c-77ba-ff0e-d358-8f56231c5eef"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8.5,13,10.25],"to":[11.5,14,13.25],"autouv":1,"color":2,"origin":[-0.5,-2,-0.75],"faces":{"north":{"uv":[0,0,3,1],"texture":0},"east":{"uv":[0,0,3,1],"texture":0},"south":{"uv":[0,0,3,1],"texture":0},"west":{"uv":[0,0,3,1],"texture":0},"up":{"uv":[0,0,3,3],"texture":0},"down":{"uv":[0,0,3,3],"texture":0}},"type":"cube","uuid":"5af8e541-eac7-e09b-c460-e6ba4ad96971"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[9.5,14,14.25],"to":[12.5,16,15.25],"autouv":1,"color":2,"origin":[-0.5,-2,-0.75],"faces":{"north":{"uv":[0,0,3,2],"texture":0},"east":{"uv":[0,0,1,2],"texture":0},"south":{"uv":[0,0,3,2],"texture":0},"west":{"uv":[0,0,1,2],"texture":0},"up":{"uv":[0,0,3,1],"texture":0},"down":{"uv":[0,0,3,1],"texture":0}},"type":"cube","uuid":"2a0669ac-53b3-8be9-2d19-05af37333634"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[11.5,13,12.25],"to":[13.5,14,13.25],"autouv":1,"color":2,"origin":[-0.5,-2,-0.75],"faces":{"north":{"uv":[0,0,2,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,2,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,2,1],"texture":0},"down":{"uv":[0,0,2,1],"texture":0}},"type":"cube","uuid":"9a63fd62-f4a4-4a51-7443-ad6cb4e77e88"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[11.5,12,11.25],"to":[12.5,14,12.25],"autouv":1,"color":2,"origin":[-0.5,-2,-0.75],"faces":{"north":{"uv":[0,0,1,2],"texture":0},"east":{"uv":[0,0,1,2],"texture":0},"south":{"uv":[0,0,1,2],"texture":0},"west":{"uv":[0,0,1,2],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"49fa0207-460d-0be3-d8a7-a842fb3c3999"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[10.5,13,14.25],"to":[11.5,14,15.25],"autouv":1,"color":2,"origin":[-0.5,-2,-0.75],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"02d98e8b-c80e-0cbe-d343-1e687a8cd80c"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7.5,13,11.25],"to":[8.5,14,12.25],"autouv":1,"color":2,"origin":[-0.5,-2,-0.75],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"12e97159-9870-a5e8-822d-3eb5ee46c583"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[9.5,13,9.25],"to":[10.5,14,10.25],"autouv":1,"color":2,"origin":[-0.5,-2,-0.75],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"903246c9-f3a3-a0bc-dff8-df63c1796b9d"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[9.5,12,11.25],"to":[11.5,13,13.25],"autouv":1,"color":2,"origin":[-0.5,-2,-0.75],"faces":{"north":{"uv":[0,0,2,1],"texture":0},"east":{"uv":[0,0,2,1],"texture":0},"south":{"uv":[0,0,2,1],"texture":0},"west":{"uv":[0,0,2,1],"texture":0},"up":{"uv":[0,0,2,2],"texture":0},"down":{"uv":[0,0,2,2],"texture":0}},"type":"cube","uuid":"f251e59e-41ad-8577-07a3-7017c587a19d"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[10.5,11,11.25],"to":[11.5,12,12.25],"autouv":1,"color":2,"origin":[-0.5,-2,-0.75],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"d07cdb73-e37d-a687-ca37-48ef00caa1db"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[10.5,12,10.25],"to":[11.5,13,11.25],"autouv":1,"color":2,"origin":[-0.5,-2,-0.75],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"74caf038-ccf2-307e-e454-0ebca7ca416c"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[2.5,12,3.25],"to":[6.5,14,10.25],"autouv":1,"color":2,"origin":[-0.5,-2,-0.75],"faces":{"north":{"uv":[0,0,4,2],"texture":0},"east":{"uv":[0,0,7,2],"texture":0},"south":{"uv":[0,0,4,2],"texture":0},"west":{"uv":[0,0,7,2],"texture":0},"up":{"uv":[0,0,4,7],"texture":0},"down":{"uv":[0,0,4,7],"texture":0}},"type":"cube","uuid":"b1d8ca33-a68a-58b5-630c-fe8d7d28c992"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[6.5,12,5.25],"to":[7.5,13,6.25],"autouv":1,"color":2,"origin":[-0.5,-2,-0.75],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"8953095e-0561-42cf-69f0-3e1eec5f1815"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[1.5,12,5.25],"to":[2.5,14,9.25],"autouv":1,"color":2,"origin":[-0.5,-2,-0.75],"faces":{"north":{"uv":[0,0,1,2],"texture":0},"east":{"uv":[0,0,4,2],"texture":0},"south":{"uv":[0,0,1,2],"texture":0},"west":{"uv":[0,0,4,2],"texture":0},"up":{"uv":[0,0,1,4],"texture":0},"down":{"uv":[0,0,1,4],"texture":0}},"type":"cube","uuid":"34c3adf1-bb8e-cc63-5696-050a970a621c"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[3.5,13,10.25],"to":[4.5,14,11.25],"autouv":1,"color":2,"origin":[-0.5,-2,-0.75],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"cc92c09d-3c9c-3f61-1702-1178ec848088"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[3.5,12,2.25],"to":[5.5,14,3.25],"autouv":1,"color":2,"origin":[-0.5,-2,-0.75],"faces":{"north":{"uv":[0,0,2,2],"texture":0},"east":{"uv":[0,0,1,2],"texture":0},"south":{"uv":[0,0,2,2],"texture":0},"west":{"uv":[0,0,1,2],"texture":0},"up":{"uv":[0,0,2,1],"texture":0},"down":{"uv":[0,0,2,1],"texture":0}},"type":"cube","uuid":"7252202d-d057-e5b2-029c-57d5cc862fd8"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[2.5,11,5.25],"to":[5.5,12,9.25],"autouv":1,"color":2,"origin":[-0.5,-2,-0.75],"faces":{"north":{"uv":[0,0,3,1],"texture":0},"east":{"uv":[0,0,4,1],"texture":0},"south":{"uv":[0,0,3,1],"texture":0},"west":{"uv":[0,0,4,1],"texture":0},"up":{"uv":[0,0,3,4],"texture":0},"down":{"uv":[0,0,3,4],"texture":0}},"type":"cube","uuid":"38092e75-75fe-b896-997b-731a39085ad3"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[6.5,13,4.25],"to":[7.5,14,7.25],"autouv":1,"color":2,"origin":[-0.5,-2,-0.75],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,3,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,3,1],"texture":0},"up":{"uv":[0,0,1,3],"texture":0},"down":{"uv":[0,0,1,3],"texture":0}},"type":"cube","uuid":"5ba17571-b949-910e-fe10-9e5d87236e5a"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[5.5,11,4.25],"to":[6.5,12,8.25],"autouv":1,"color":2,"origin":[-0.5,-2,-0.75],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,4,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,4,1],"texture":0},"up":{"uv":[0,0,1,4],"texture":0},"down":{"uv":[0,0,1,4],"texture":0}},"type":"cube","uuid":"da2fea38-a1ef-770e-0e21-620841e13c45"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[3.5,10,4.25],"to":[5.5,11,8.25],"autouv":1,"color":2,"origin":[-0.5,-2,-0.75],"faces":{"north":{"uv":[0,0,2,1],"texture":0},"east":{"uv":[0,0,4,1],"texture":0},"south":{"uv":[0,0,2,1],"texture":0},"west":{"uv":[0,0,4,1],"texture":0},"up":{"uv":[0,0,2,4],"texture":0},"down":{"uv":[0,0,2,4],"texture":0}},"type":"cube","uuid":"087b6918-38a5-6e5a-4ce8-4441d7de0244"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[0.5,13,6.25],"to":[1.5,14,8.25],"autouv":1,"color":2,"origin":[-0.5,-2,-0.75],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,2,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,2,1],"texture":0},"up":{"uv":[0,0,1,2],"texture":0},"down":{"uv":[0,0,1,2],"texture":0}},"type":"cube","uuid":"9bdfe7d8-863e-20d8-db27-ddd9c6b05bf6"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[3.5,9,5.25],"to":[4.5,10,7.25],"autouv":1,"color":2,"origin":[-0.5,-2,-0.75],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,2,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,2,1],"texture":0},"up":{"uv":[0,0,1,2],"texture":0},"down":{"uv":[0,0,1,2],"texture":0}},"type":"cube","uuid":"2b7467ad-3f7c-6735-251e-d40dc3623ad7"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[3.5,11,3.25],"to":[5.5,12,5.25],"autouv":1,"color":2,"origin":[-0.5,-2,-0.75],"faces":{"north":{"uv":[0,0,2,1],"texture":0},"east":{"uv":[0,0,2,1],"texture":0},"south":{"uv":[0,0,2,1],"texture":0},"west":{"uv":[0,0,2,1],"texture":0},"up":{"uv":[0,0,2,2],"texture":0},"down":{"uv":[0,0,2,2],"texture":0}},"type":"cube","uuid":"8efe4d1c-9021-a85c-73fa-9387d2df0eee"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[3.5,8,6.25],"to":[4.5,9,7.25],"autouv":1,"color":2,"origin":[-0.5,-2,-0.75],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"bc48f822-5d82-149f-ab6c-1d9449e80162"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[2.5,10,6.25],"to":[3.5,11,7.25],"autouv":1,"color":2,"origin":[-0.5,-2,-0.75],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[0,0,1,1],"texture":0},"south":{"uv":[0,0,1,1],"texture":0},"west":{"uv":[0,0,1,1],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"type":"cube","uuid":"7ae301a4-4ba8-e05c-def0-5947bcce19ff"}],"outliner":["59f2a34a-140c-8ba4-4d6f-85a3b80a765d","ebae6d20-1c2e-6ae5-8b1e-96be86bb7fce","cc92c09d-3c9c-3f61-1702-1178ec848088","7c192834-89d0-946e-16df-3fc94bbbc988","b1d8ca33-a68a-58b5-630c-fe8d7d28c992","8953095e-0561-42cf-69f0-3e1eec5f1815","da2fea38-a1ef-770e-0e21-620841e13c45","087b6918-38a5-6e5a-4ce8-4441d7de0244","7ae301a4-4ba8-e05c-def0-5947bcce19ff","2b7467ad-3f7c-6735-251e-d40dc3623ad7","bc48f822-5d82-149f-ab6c-1d9449e80162","5ba17571-b949-910e-fe10-9e5d87236e5a","1992dc38-8d22-cf15-cfec-f1fde932c816","68bc4dec-65c3-3c18-d6b9-82607c5b5512","0fe837df-4675-700e-a130-9a55d607bc7b","372c98f6-6396-f2ff-76a4-43aac772d86c","f2239098-f7e4-c5ec-5881-f96267bdd5db","5f942df7-4b4b-6f9d-5781-123e0afdff23","a27649b4-e31d-2e6c-2ea5-bd0487cf6f9f","a08a70d8-b863-3430-6903-660c24c88b2c","90eebe03-c862-40bd-ac02-1ff51efdb993","3f2f52f3-4dde-b4e6-66dd-dd5efe090885","1291c453-35a9-da1a-0cc8-fbe37b38c609","03d3e371-94a4-1ff7-0739-3fc466e7dfba","2d39281c-77ba-ff0e-d358-8f56231c5eef","997b959d-e414-641f-9b9e-195eff2a8e34","8c49944a-a403-a182-0931-b19e117bf3ba","ffbc09ca-0995-5387-6d31-2c3ba7d4e84e","39448ba2-8070-79a3-ac87-2dbd243c91ee","3912c9d2-a086-edbe-dba3-66ce2533f0f0","5efa2619-82f0-4803-4d39-aa29ab837afb","efb7c981-e24c-b010-7e50-3b103fad0d6b","6937c48b-fcb3-ca6f-f506-e4157aa507c3","1d491481-d53e-6d90-d991-3eec5c4c60fc","5af8e541-eac7-e09b-c460-e6ba4ad96971","9a63fd62-f4a4-4a51-7443-ad6cb4e77e88","928a9032-d1bb-ee88-fe23-86ec4dfd880a","12e97159-9870-a5e8-822d-3eb5ee46c583","903246c9-f3a3-a0bc-dff8-df63c1796b9d","45aedb8a-525e-e914-ec8c-45e05e2a4b4f","3ab885f8-bd1e-58da-7ea3-567a39aed364","49fa0207-460d-0be3-d8a7-a842fb3c3999","f251e59e-41ad-8577-07a3-7017c587a19d","d07cdb73-e37d-a687-ca37-48ef00caa1db","74caf038-ccf2-307e-e454-0ebca7ca416c","3b40701e-1306-7259-ba2d-70bda1f0242d","5ffe208f-dd28-a7ed-104a-3086d3ef8dba","e56767bf-3383-dda0-1273-e0ea74ec1487","2a0669ac-53b3-8be9-2d19-05af37333634","02d98e8b-c80e-0cbe-d343-1e687a8cd80c","a61ecaea-a859-ed3d-c11e-def0c308b6c8","7252202d-d057-e5b2-029c-57d5cc862fd8","bfed42d3-dedb-8d3a-f1a7-651caf1c961c","9bdfe7d8-863e-20d8-db27-ddd9c6b05bf6","34c3adf1-bb8e-cc63-5696-050a970a621c","38092e75-75fe-b896-997b-731a39085ad3","8efe4d1c-9021-a85c-73fa-9387d2df0eee","a00dd48c-0ffe-b66f-6e40-3d82b589f9c7"],"textures":[{"path":"E:\\COSMERE MODELS\\golden_sand.png","name":"golden_sand.png","folder":"","namespace":"","id":"0","particle":true,"render_mode":"default","render_sides":"auto","frame_time":1,"frame_order_type":"loop","frame_order":"","frame_interpolate":false,"visible":true,"mode":"bitmap","saved":true,"uuid":"61051a3b-0f5a-71ed-dcc5-374bac0782cb","relative_path":"../golden_sand.png","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAPpJREFUOE99kz0KQjEQhF9A0MLGRjyDp/C2XsMr2Fi+VrFJI/6gEJmF7zEvL5omYbM7mZndpPf9XD6va6c1m687nZ/51C03uzj/it0uh8hJud+XxWobACrUWbuWEpTIGUDFlCfwBAOKPDkqbdUPCCQ98rEISQtkJECTO2QBpPgg4Z9+7lwmngUDR4SNEjAUvTB0oGDg1Nw8N1TxltkTBs6mNg0QlzvxAG20r2bkxdEFbyMU0ciLzoQcAemRkYQa3d33O5cSEtygFghzwExhbkhglOvh8T9BIbERAzzgZbTRe/9QrYEaRplEn/1Wsf/UGOUWA6aw9oMWO/AXzNxVXBpGvuwAAAAASUVORK5CYII="}]} \ No newline at end of file diff --git a/blockbench/surgebinding/blocks/lavis_polyp/CREDITS.txt b/blockbench/surgebinding/blocks/lavis_polyp/CREDITS.txt new file mode 100644 index 000000000..8582deae4 --- /dev/null +++ b/blockbench/surgebinding/blocks/lavis_polyp/CREDITS.txt @@ -0,0 +1 @@ +AlaharranHonor - Model and Texture \ No newline at end of file diff --git a/blockbench/surgebinding/blocks/lavis_polyp/Lovis_Polyp.bbmodel b/blockbench/surgebinding/blocks/lavis_polyp/Lovis_Polyp.bbmodel new file mode 100644 index 000000000..d83323f7e --- /dev/null +++ b/blockbench/surgebinding/blocks/lavis_polyp/Lovis_Polyp.bbmodel @@ -0,0 +1 @@ +{"meta":{"format_version":"3.6","model_format":"java_block","box_uv":false},"name":"lavis_polyp","parent":"","ambientocclusion":true,"front_gui_light":false,"visible_box":[1,1,0],"resolution":{"width":32,"height":32},"elements":[{"name":"cube","from":[6,0,6],"to":[10,1,10],"autouv":0,"color":7,"locked":false,"rotation":[0,-22.5,0],"origin":[8,3.928571428571429,8],"faces":{"north":{"uv":[12,0,16,1],"texture":0},"east":{"uv":[12,1,16,2],"texture":0},"south":{"uv":[12,2,16,3],"texture":0},"west":{"uv":[12,3,16,4],"texture":0},"up":{"uv":[4,16,0,12],"texture":0},"down":{"uv":[8,12,4,16],"texture":0}},"uuid":"b4c44ec5-df14-8f54-cfe5-65833978dbd2"},{"name":"cube","from":[5,1,5],"to":[11,4,11],"autouv":0,"color":7,"locked":false,"rotation":[0,-22.5,0],"origin":[8,3.928571428571429,8],"faces":{"north":{"uv":[6,6,12,9],"texture":0},"east":{"uv":[6,0,12,3],"texture":0},"south":{"uv":[6,3,12,6],"texture":0},"west":{"uv":[6,9,12,12],"texture":0},"up":{"uv":[6,6,0,0],"texture":0},"down":{"uv":[6,6,0,12],"texture":0}},"uuid":"670c29d1-4fe0-dbcb-27a0-6d20d5ce98fe"},{"name":"cube","from":[6,4,6],"to":[10,5,10],"autouv":0,"color":7,"locked":false,"rotation":[0,-22.5,0],"origin":[8,3.928571428571429,8],"faces":{"north":{"uv":[12,4,16,5],"texture":0},"east":{"uv":[12,5,16,6],"texture":0},"south":{"uv":[12,6,16,7],"texture":0},"west":{"uv":[12,7,16,8],"texture":0},"up":{"uv":[12,16,8,12],"texture":0},"down":{"uv":[16,12,12,16],"texture":0}},"uuid":"60d55a30-7275-bd3f-b57d-63f37c3853a1"},{"name":"cube","from":[8,4.5,7],"to":[8,5.5,9],"autouv":0,"color":0,"locked":false,"rotation":[0,-22.5,0],"origin":[8,3.928571428571429,8],"faces":{"north":{"uv":[0,0,0,1],"texture":0},"east":{"uv":[8,16,10,17],"texture":0},"south":{"uv":[0,0,0,1],"texture":0},"west":{"uv":[10,16,12,17],"texture":0},"up":{"uv":[0,2,0,0],"texture":0},"down":{"uv":[0,0,0,2],"texture":0}},"uuid":"d7965ba4-a9ac-48f1-c1aa-884dfea59427"},{"name":"cube","from":[8,4.5,7],"to":[8,5.5,9],"autouv":0,"color":0,"locked":false,"rotation":[0,22.5,0],"origin":[8,3.928571428571429,8],"faces":{"north":{"uv":[0,0,0,1],"texture":0},"east":{"uv":[12,16,14,17],"texture":0},"south":{"uv":[0,0,0,1],"texture":0},"west":{"uv":[14,16,16,17],"texture":0},"up":{"uv":[0,2,0,0],"texture":0},"down":{"uv":[0,0,0,2],"texture":0}},"uuid":"768d9935-0904-0bd4-56c9-d8553421bf4d"},{"name":"cube","from":[7,4.5,8],"to":[9,5.5,8],"autouv":0,"color":0,"locked":false,"rotation":[0,-22.5,0],"origin":[8,3.928571428571429,8],"faces":{"north":{"uv":[16,16,18,17],"texture":0},"east":{"uv":[0,0,0,1],"texture":0},"south":{"uv":[16,0,18,1],"texture":0},"west":{"uv":[0,0,0,1],"texture":0},"up":{"uv":[2,0,0,0],"texture":0},"down":{"uv":[2,0,0,0],"texture":0}},"uuid":"7fd9d358-1f03-8799-1eba-da0a47c17bcb"},{"name":"cube","from":[7,4.5,8],"to":[9,5.5,8],"autouv":0,"color":0,"locked":false,"rotation":[0,22.5,0],"origin":[8,3.928571428571429,8],"faces":{"north":{"uv":[16,1,18,2],"texture":0},"east":{"uv":[0,0,0,1],"texture":0},"south":{"uv":[16,2,18,3],"texture":0},"west":{"uv":[0,0,0,1],"texture":0},"up":{"uv":[2,0,0,0],"texture":0},"down":{"uv":[2,0,0,0],"texture":0}},"uuid":"9f1ee891-e3a0-b32f-2eca-670ed6cd7ecb"},{"name":"cube","from":[6.300197355394134,0,9.005431105567778],"to":[7.300197355394134,1,12.005431105567778],"autouv":0,"color":1,"locked":false,"origin":[6.647383124913178,0.3875000000000002,12.652814230480956],"faces":{"north":{"uv":[19,14,20,15],"texture":0},"east":{"uv":[15,8,18,9],"texture":0},"south":{"uv":[19,15,20,16],"texture":0},"west":{"uv":[15,9,18,10],"texture":0},"up":{"uv":[1,19,0,16],"texture":0},"down":{"uv":[2,16,1,19],"texture":0}},"uuid":"33ffc245-611a-2a8e-2368-d9d8ee7740db"},{"name":"cube","from":[5.9045138163499296,-0.0625,11.691810603487701],"to":[6.9045138163499296,0.9375,13.691810603487701],"autouv":0,"color":1,"locked":false,"inflate":-0.0625,"rotation":[0,-22.5,0],"origin":[6.647383124913178,0.3875000000000002,12.652814230480956],"faces":{"north":{"uv":[19,17,20,18],"texture":0},"east":{"uv":[15,17,17,18],"texture":0},"south":{"uv":[19,18,20,19],"texture":0},"west":{"uv":[17,17,19,18],"texture":0},"up":{"uv":[18,15,17,13],"texture":0},"down":{"uv":[4,18,3,20],"texture":0}},"uuid":"f39a4c1c-f308-428f-04e5-ef4a5bd0fcb1"},{"name":"cube","from":[4.050197355394134,-0.125,12.755431105567778],"to":[6.050197355394134,0.875,13.755431105567778],"autouv":0,"color":0,"locked":false,"inflate":-0.125,"origin":[6.647383124913178,0.3875000000000002,12.652814230480956],"faces":{"north":{"uv":[7,18,9,19],"texture":0},"east":{"uv":[0,20,1,21],"texture":0},"south":{"uv":[9,18,11,19],"texture":0},"west":{"uv":[1,20,2,21],"texture":0},"up":{"uv":[13,19,11,18],"texture":0},"down":{"uv":[15,18,13,19],"texture":0}},"uuid":"16be3596-6384-7060-fad7-97a48ab702bd"},{"name":"cube","from":[3.7681945578334926,-0.1875,14.207455059926684],"to":[5.7681945578334926,0.8125,15.207455059926684],"autouv":0,"color":0,"locked":false,"inflate":-0.1875,"rotation":[0,-45,0],"origin":[6.647383124913178,0.3875000000000002,12.652814230480956],"faces":{"north":{"uv":[15,18,17,19],"texture":0},"east":{"uv":[3,20,4,21],"texture":0},"south":{"uv":[17,18,19,19],"texture":0},"west":{"uv":[4,20,5,21],"texture":0},"up":{"uv":[20,1,18,0],"texture":0},"down":{"uv":[20,1,18,2],"texture":0}},"uuid":"5bca1b17-0ace-47dd-f4ec-db1ffea095e9"},{"name":"cube","from":[5.612697355394134,-0.1875,13.130431105567778],"to":[6.612697355394134,0.8125,15.130431105567778],"autouv":0,"color":0,"locked":false,"inflate":-0.25,"origin":[6.647383124913178,0.3875000000000002,12.652814230480956],"faces":{"north":{"uv":[6,20,7,21],"texture":0},"east":{"uv":[18,2,20,3],"texture":0},"south":{"uv":[7,20,8,21],"texture":0},"west":{"uv":[18,3,20,4],"texture":0},"up":{"uv":[5,20,4,18],"texture":0},"down":{"uv":[19,4,18,6],"texture":0}},"uuid":"a9bb1234-26be-84df-3d09-b2459b4410ad"},{"name":"cube","from":[9,0,8],"to":[12,1,9],"autouv":0,"color":1,"locked":false,"origin":[17,8,16],"faces":{"north":{"uv":[12,8,15,9],"texture":0},"east":{"uv":[14,19,15,20],"texture":0},"south":{"uv":[12,9,15,10],"texture":0},"west":{"uv":[15,19,16,20],"texture":0},"up":{"uv":[15,11,12,10],"texture":0},"down":{"uv":[15,11,12,12],"texture":0}},"uuid":"72ab401b-c2e4-fc17-b140-8a29c697c75c"},{"name":"cube","from":[8.1875,-0.0625,10.5],"to":[10.1875,0.9375,11.5],"autouv":0,"color":1,"locked":false,"inflate":-0.0625,"rotation":[0,-22.5,0],"origin":[16.1875,7.9375,18.5],"faces":{"north":{"uv":[16,3,18,4],"texture":0},"east":{"uv":[16,19,17,20],"texture":0},"south":{"uv":[16,4,18,5],"texture":0},"west":{"uv":[17,19,18,20],"texture":0},"up":{"uv":[18,6,16,5],"texture":0},"down":{"uv":[18,6,16,7],"texture":0}},"uuid":"5077a163-69b3-37a8-66e5-433d43baa737"},{"name":"cube","from":[12.75,-0.125,9.25],"to":[13.75,0.875,11.25],"autouv":0,"color":0,"locked":false,"inflate":-0.125,"origin":[20.75,7.875,17.25],"faces":{"north":{"uv":[18,19,19,20],"texture":0},"east":{"uv":[16,7,18,8],"texture":0},"south":{"uv":[19,19,20,20],"texture":0},"west":{"uv":[16,12,18,13],"texture":0},"up":{"uv":[17,15,16,13],"texture":0},"down":{"uv":[3,17,2,19],"texture":0}},"uuid":"201761f1-0ec5-bcb5-09e3-3f11981e89d1"},{"name":"cube","from":[5.125,-0.1875,13.6875],"to":[6.125,0.8125,15.6875],"autouv":0,"color":0,"locked":false,"inflate":-0.1875,"rotation":[0,-45,0],"origin":[13.125,7.8125,21.6875],"faces":{"north":{"uv":[19,4,20,5],"texture":0},"east":{"uv":[16,15,18,16],"texture":0},"south":{"uv":[19,5,20,6],"texture":0},"west":{"uv":[3,17,5,18],"texture":0},"up":{"uv":[6,19,5,17],"texture":0},"down":{"uv":[7,17,6,19],"texture":0}},"uuid":"5db18d1a-43a7-5aaf-c1ee-6c8a23407869"},{"name":"cube","from":[13.125,-0.1875,8.6875],"to":[15.125,0.8125,9.6875],"autouv":0,"color":0,"locked":false,"inflate":-0.25,"origin":[7.125,7.8125,16.6875],"faces":{"north":{"uv":[7,17,9,18],"texture":0},"east":{"uv":[19,12,20,13],"texture":0},"south":{"uv":[9,17,11,18],"texture":0},"west":{"uv":[19,13,20,14],"texture":0},"up":{"uv":[13,18,11,17],"texture":0},"down":{"uv":[15,17,13,18],"texture":0}},"uuid":"b45c13c2-c2eb-7b69-ce56-43eaa8694f63"},{"name":"cube","from":[4.294766249826356,0,5.694371539038087],"to":[7.294766249826356,1,6.694371539038087],"autouv":0,"color":1,"locked":false,"origin":[3.647383124913178,0.3875000000000002,7.347185769519044],"faces":{"north":{"uv":[15,10,18,11],"texture":0},"east":{"uv":[8,20,9,21],"texture":0},"south":{"uv":[15,11,18,12],"texture":0},"west":{"uv":[9,20,10,21],"texture":0},"up":{"uv":[5,17,2,16],"texture":0},"down":{"uv":[8,16,5,17],"texture":0}},"uuid":"1d9ba9d8-fd93-3b34-728e-af2720569e2d"},{"name":"cube","from":[2.991070184271523,-0.0625,6.166175545571006],"to":[4.991070184271523,0.9375,7.166175545571006],"autouv":0,"color":1,"locked":false,"inflate":-0.0625,"rotation":[0,22.5,0],"origin":[3.647383124913178,0.3875000000000002,7.347185769519044],"faces":{"north":{"uv":[18,6,20,7],"texture":0},"east":{"uv":[10,20,11,21],"texture":0},"south":{"uv":[18,7,20,8],"texture":0},"west":{"uv":[11,20,12,21],"texture":0},"up":{"uv":[20,9,18,8],"texture":0},"down":{"uv":[20,9,18,10],"texture":0}},"uuid":"32467523-3d86-0157-03f8-6eb6396d8be9"},{"name":"cube","from":[2.544766249826356,-0.125,6.944371539038087],"to":[3.544766249826356,0.875,8.944371539038087],"autouv":0,"color":0,"locked":false,"inflate":-0.125,"origin":[3.647383124913178,0.3875000000000002,7.347185769519044],"faces":{"north":{"uv":[12,20,13,21],"texture":0},"east":{"uv":[18,10,20,11],"texture":0},"south":{"uv":[13,20,14,21],"texture":0},"west":{"uv":[18,11,20,12],"texture":0},"up":{"uv":[19,14,18,12],"texture":0},"down":{"uv":[19,14,18,16],"texture":0}},"uuid":"aa8c53af-57ba-1559-6bad-dbebe9698316"},{"name":"cube","from":[1.7998490766539987,-0.1875,7.519267555412181],"to":[2.7998490766539987,0.8125,9.519267555412181],"autouv":0,"color":0,"locked":false,"inflate":-0.1875,"rotation":[0,45,0],"origin":[3.647383124913178,0.3875000000000002,7.347185769519044],"faces":{"north":{"uv":[14,20,15,21],"texture":0},"east":{"uv":[18,16,20,17],"texture":0},"south":{"uv":[15,20,16,21],"texture":0},"west":{"uv":[0,19,2,20],"texture":0},"up":{"uv":[3,21,2,19],"texture":0},"down":{"uv":[6,19,5,21],"texture":0}},"uuid":"dfc2e032-67dc-27ed-0d42-8bc24bb18621"},{"name":"cube","from":[1.1697662498263561,-0.1875,6.381871539038087],"to":[3.169766249826356,0.8125,7.381871539038087],"autouv":0,"color":0,"locked":false,"inflate":-0.25,"origin":[3.647383124913178,0.3875000000000002,7.347185769519044],"faces":{"north":{"uv":[6,19,8,20],"texture":0},"east":{"uv":[16,20,17,21],"texture":0},"south":{"uv":[8,19,10,20],"texture":0},"west":{"uv":[17,20,18,21],"texture":0},"up":{"uv":[12,20,10,19],"texture":0},"down":{"uv":[14,19,12,20],"texture":0}},"uuid":"86d1f403-fc3e-a6d6-8da5-3ff140a3bfe2"}],"outliner":[{"name":"group","origin":[8,8,8],"uuid":"1303b505-c00b-9714-02d6-ee128dae7b52","export":true,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["b4c44ec5-df14-8f54-cfe5-65833978dbd2","60d55a30-7275-bd3f-b57d-63f37c3853a1","670c29d1-4fe0-dbcb-27a0-6d20d5ce98fe",{"name":"group","origin":[16,10,15],"uuid":"b75f8591-1ce3-eb54-ce03-51f52be7022c","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["d7965ba4-a9ac-48f1-c1aa-884dfea59427","768d9935-0904-0bd4-56c9-d8553421bf4d","7fd9d358-1f03-8799-1eba-da0a47c17bcb","9f1ee891-e3a0-b32f-2eca-670ed6cd7ecb"]}]},{"name":"root 1","origin":[15,15.5,15],"uuid":"fabff848-ef30-0383-91ca-c39ba74bba5e","export":true,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["72ab401b-c2e4-fc17-b140-8a29c697c75c",{"name":"group","origin":[19.625,7.9375,16],"uuid":"9bd1fdd6-91c7-ac2f-1ed1-2690c2e8c6b9","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["5077a163-69b3-37a8-66e5-433d43baa737",{"name":"group","origin":[16.1875,7.9375,18.5],"uuid":"a5be58ec-28ed-3b92-b2f4-cc74cd53d14b","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["201761f1-0ec5-bcb5-09e3-3f11981e89d1",{"name":"group","origin":[20.75,7.8125,18.25],"uuid":"67a1d3e0-a007-6299-b38a-62bca86aad87","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["5db18d1a-43a7-5aaf-c1ee-6c8a23407869",{"name":"group","origin":[15.125,7.8125,21.6875],"uuid":"f4711b81-1ab8-cd89-5265-01fbabe8d89d","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["b45c13c2-c2eb-7b69-ce56-43eaa8694f63"]}]}]}]}]},{"name":"root2","origin":[15,15.5,15],"uuid":"deb34afe-69ca-97bf-8893-ee5ca503db28","export":true,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["33ffc245-611a-2a8e-2368-d9d8ee7740db",{"name":"group","origin":[19.625,7.9375,16],"uuid":"1c6a6f53-8cc8-ee37-cd1d-b27d91eaa9ed","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["f39a4c1c-f308-428f-04e5-ef4a5bd0fcb1",{"name":"group","origin":[16.1875,7.9375,18.5],"uuid":"00b95e88-af57-885f-944a-bd38277a734e","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["16be3596-6384-7060-fad7-97a48ab702bd",{"name":"group","origin":[20.75,7.8125,18.25],"uuid":"6528b268-aa61-5c25-352c-e978fdd228e8","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["5bca1b17-0ace-47dd-f4ec-db1ffea095e9",{"name":"group","origin":[15.125,7.8125,21.6875],"uuid":"8e4a87fa-e280-877d-358d-9c2bb1289f16","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["a9bb1234-26be-84df-3d09-b2459b4410ad"]}]}]}]}]},{"name":"root3","origin":[15,15.5,15],"uuid":"4ac89151-815b-092b-a172-ef12062022c8","export":true,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["1d9ba9d8-fd93-3b34-728e-af2720569e2d",{"name":"group","origin":[19.625,7.9375,16],"uuid":"da53f2c0-8d64-55c2-749a-ce51fe278ed2","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["32467523-3d86-0157-03f8-6eb6396d8be9",{"name":"group","origin":[16.1875,7.9375,18.5],"uuid":"3f618b21-87f6-72f1-1926-2d2ecadb1fc2","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["aa8c53af-57ba-1559-6bad-dbebe9698316",{"name":"group","origin":[20.75,7.8125,18.25],"uuid":"8a0d0456-7883-54fa-c4c6-649d04c66887","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["dfc2e032-67dc-27ed-0d42-8bc24bb18621",{"name":"group","origin":[15.125,7.8125,21.6875],"uuid":"bfeedeab-0200-830c-ee0f-1ca77abf7f40","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["86d1f403-fc3e-a6d6-8da5-3ff140a3bfe2"]}]}]}]}]}],"textures":[{"path":"/Users/eliot/Dropbox (Personal)/StormlightCraft/resources/main/assets/stormlight/textures/block/lavis_polyp.png","name":"lavis_polyp.png","folder":"block","namespace":"stormlight","id":"0","particle":true,"visible":true,"mode":"bitmap","saved":true,"uuid":"0b05164a-17ab-ed56-7bda-9d999134b8e2","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAADVElEQVRYR+1WTUgUYRh+Vmd3ZnfdH3dSWywqzCCRJExjQytBI7S6FBQVHYKQDnUyirqU4LlDl4ToEARBh4UCr9EhBKlDUBGWZPjX7uq6O+P+zMzqF983zrBjCzprx30v833v9/d8z/s+7zeOseHTRFE18C4nQApQchnwngAUKQZwgt5WNaCQBQp5SPk1yPk1KAWA54Cbo1EUtM9wzLhBzdXc72CNLZpj4slFMvd70jLdJzZibm4G/r0isJhjY1q7B7n3i6yd1wj7ZlWC28+i0NRx/Hz9gflarz21B2Bs+BRRpMQ/ABJyAqqUZ37fPhHyryW4/AIcdU6kv0s6qFViMqB9STNfzZHrNgE86iWKvGQBwPtEMB8nAJyHhUfJps0QGAwITgfOnL/K1tI1ZQGI3osQGluLcQJInRuOhWUdBLUdbkjTS6gTa6EoCnOFQiG0dpxk7YWZKRyInLOfA9H73YQXvHA5OahagSUc76pGIh5jG7vbQ8h9Spr4/EKVBevxgcvbA/Di7lFCMjoDDq+AXEpPunpftRmC+lAQ8fg8CwHvDbBxg4XmljbWD+9uYl+x5469HBgdPETYYUVGpUatWAWlQkDn9F24oQNaz6P/AiAb9qJqSTNVYISBqqA70mvNl/WeuyZYHgOvHncRfi5j2TQur5ohCIkNyOTypgo6TvSXBJBa1pVkuw6UCgEFQCXmFz2AnvAs/oX9QUQaj5UEEAzrOWC7Drx82EUKizJS2TXU7wlAmpfgF91w+gVkZlNsU3eDD7mYzNrtnRETQLBW1z61sgFEhw7rdXXdphKa5YZNYR/Q4AFiWZOJ4gl9l25Z5ttmYFMATbWAtAJ4BT0cG4oWBUAVUH4l3AIDtOIlk0nAw+lgiswAQCshDcmusyP26sCmDNAQUBPd8Kkc5GXrwzUwOMKGJ8fflAdg9u0DQiVUnFCGpOjGB68Msfeec7aZX1V5BxffY/bpc1w1qyek7f8BAwBdTB8Tw+iN9rZ0Wug2OtPfJljTKL/Fk2xXwmIAdCN6qCuwk1G6GYBiwHStPPvV/lug/hgzZWgcSm+42eFGyIwSXLYKVj4+ZwDorUvRn1qYYu6NBxnz1fQfNm5X/8ZZtiRTMiG26awAqDBQYaDCQIWBvyEFgjDL+FZ8AAAAAElFTkSuQmCC"}],"geckoSettings":{"modSDK":"Forge 1.12 - 1.16","entityType":"Entity","javaPackage":"com.example.mod","animFileNamespace":"MODID","animFilePath":"animations/ANIMATIONFILE.json"}} \ No newline at end of file diff --git a/blockbench/surgebinding/blocks/lavis_polyp/lavis_polyp_hitbox.bbmodel b/blockbench/surgebinding/blocks/lavis_polyp/lavis_polyp_hitbox.bbmodel new file mode 100644 index 000000000..fa8be1662 --- /dev/null +++ b/blockbench/surgebinding/blocks/lavis_polyp/lavis_polyp_hitbox.bbmodel @@ -0,0 +1 @@ +{"meta":{"format_version":"4.5","model_format":"java_block","box_uv":false},"name":"lavis_polyp","parent":"","ambientocclusion":true,"front_gui_light":false,"visible_box":[1,1,0],"variable_placeholders":"","variable_placeholder_buttons":[],"unhandled_root_fields":{},"resolution":{"width":32,"height":32},"elements":[{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[4,0,4],"to":[12,6,12],"autouv":1,"color":0,"origin":[0,0,0],"faces":{"north":{"uv":[0,0,8,6]},"east":{"uv":[0,0,8,6]},"south":{"uv":[0,0,8,6]},"west":{"uv":[0,0,8,6]},"up":{"uv":[0,0,8,8]},"down":{"uv":[0,0,8,8]}},"type":"cube","uuid":"d8ad5497-51c6-f591-e818-d69f44ea5dc0"}],"outliner":["d8ad5497-51c6-f591-e818-d69f44ea5dc0"],"textures":[{"path":"/home/deck/dev/minecraft/cosmere/src/surgebinding/resources/assets/surgebinding/textures/block/lavis_polyp.png","name":"lavis_polyp.png","folder":"block","namespace":"surgebinding","id":"0","particle":true,"render_mode":"default","render_sides":"auto","frame_time":1,"frame_order_type":"loop","frame_order":"","frame_interpolate":false,"visible":true,"mode":"bitmap","saved":true,"uuid":"0a925423-e7ea-79f4-41c7-d8062308c16f","relative_path":"../../../textures/block/lavis_polyp.png","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAA1RJREFUWEftVk1IFGEYflZnd2Z33R93UlssKswgkSRMY0MrQSO0uhQUFR2CkA51Moq6lOC5Q5eE6BAEQYeFAq/RIQSpQ1ARlmT41+7qujvj/szM6hffN86wYws6a8d9L/N97/f3fM/7Pu83jrHh00RRNfAuJ0AKUHIZ8J4AFCkGcILeVjWgkAUKeUj5Ncj5NSgFgOeAm6NRFLTPcMy4Qc3V3O9gjS2aY+LJRTL3e9Iy3Sc2Ym5uBv69IrCYY2Nauwe594usndcI+2ZVgtvPotDUcfx8/YH5Wq89tQdgbPgUUaTEPwAScgKqlGd+3z4R8q8luPwCHHVOpL9LOqhVYjKgfUkzX82R6zYBPOolirxkAcD7RDAfJwCch4VHyabNEBgMCE4Hzpy/ytbSNWUBiN6LEBpbi3ECSJ0bjoVlHQS1HW5I00uoE2uhKApzhUIhtHacZO2FmSkciJyznwPR+92EF7xwOTmoWoElHO+qRiIeYxu720PIfUqa+PxClQXr8YHL2wPw4u5RQjI6Aw6vgFxKT7p6X7UZgvpQEPH4PAsB7w2wcYOF5pY21g/vbmJfseeOvRwYHTxE2GFFRqVGrVgFpUJA5/RduKEDWs+j/wIgG/aiakkzVWCEgaqgO9JrzZf1nrsmWB4Drx53EX4uY9k0Lq+aIQiJDcjk8qYKOk70lwSQWtaVZLsOlAoBBUAl5hc9gJ7wLP6F/UFEGo+VBBAM6zlguw68fNhFCosyUtk11O8JQJqX4BfdcPoFZGZTbFN3gw+5mMza7Z0RE0CwVtc+tbIBRIcO63V13aYSmuWGTWEf0OABYlmTieIJfZduWebbZmBTAE21gLQCeAU9HBuKFgVAFVB+JdwCA7TiJZNJwMPpYIrMAEArIQ3JrrMj9urApgzQEFAT3fCpHORl68M1MDjChifH35QHYPbtA0IlVJxQhqToxgevDLH3nnO2mV9VeQcX32P26XNcNasnpO3/AQMAXUwfE8Pojfa2dFroNjrT3yZY0yi/xZNsV8JiAHQjeqgrsJNRuhmAYsB0rTz71f5boP4YM2VoHEpvuNnhRsiMEly2ClY+PmcA6K1L0Z9amGLujQcZ89X0HzZuV//GWbYkUzIhtumsAKgwUGGgwkCFgb8hBYIwy/hWfAAAAABJRU5ErkJggg=="}]} \ No newline at end of file diff --git a/blockbench/surgebinding/blocks/prickletac/CREDITS.txt b/blockbench/surgebinding/blocks/prickletac/CREDITS.txt new file mode 100644 index 000000000..8582deae4 --- /dev/null +++ b/blockbench/surgebinding/blocks/prickletac/CREDITS.txt @@ -0,0 +1 @@ +AlaharranHonor - Model and Texture \ No newline at end of file diff --git a/blockbench/surgebinding/blocks/prickletac/PrickleTac1.bbmodel b/blockbench/surgebinding/blocks/prickletac/PrickleTac1.bbmodel new file mode 100644 index 000000000..91445f286 --- /dev/null +++ b/blockbench/surgebinding/blocks/prickletac/PrickleTac1.bbmodel @@ -0,0 +1 @@ +{"meta":{"format_version":"3.6","creation_time":1610481732,"model_format":"java_block","box_uv":false},"name":"prickletac1","parent":"","ambientocclusion":true,"front_gui_light":false,"visible_box":[1,1,0],"resolution":{"width":32,"height":32},"elements":[{"name":"cube","from":[5.25,0.875,7.75],"to":[7.25,3.875,9.75],"autouv":0,"color":6,"locked":false,"inflate":-0.0625,"origin":[13.25,7.875,16.75],"faces":{"north":{"uv":[3,3,5,6],"texture":0},"east":{"uv":[3,0,5,3],"texture":0},"south":{"uv":[5,5,7,8],"texture":0},"west":{"uv":[5,0,7,3],"texture":0},"up":{"uv":[7,5,5,3],"texture":0},"down":{"uv":[13,2,11,4],"texture":0}},"uuid":"d3e2b9fd-6000-081a-8a3b-f8db9289b04c"},{"name":"cube","from":[5,0,7],"to":[8,1,10],"autouv":0,"color":6,"locked":false,"origin":[13,8,17],"faces":{"north":{"uv":[9,8,12,9],"texture":0},"east":{"uv":[13,2,16,3],"texture":0},"south":{"uv":[13,3,16,4],"texture":0},"west":{"uv":[13,4,16,5],"texture":0},"up":{"uv":[3,3,0,0],"texture":0},"down":{"uv":[3,3,0,6],"texture":0}},"uuid":"bd05fe86-f928-635c-5b12-6ee5266f056e"},{"name":"cube","from":[5.25,3.185486353883565,8.084584310449374],"to":[7.25,6.185486353883565,10.084584310449374],"autouv":0,"color":6,"locked":false,"inflate":-0.1875,"rotation":[22.5,0,0],"origin":[6.25,4.685486353883565,9.084584310449374],"faces":{"north":{"uv":[6,10,8,13],"texture":0},"east":{"uv":[4,11,6,14],"texture":0},"south":{"uv":[8,11,10,14],"texture":0},"west":{"uv":[10,11,12,14],"texture":0},"up":{"uv":[14,10,12,8],"texture":0},"down":{"uv":[14,10,12,12],"texture":0}},"uuid":"fc56371e-6a34-e20e-d231-841c97784855"},{"name":"cube","from":[5.25,5.24597270776713,8.606668620898748],"to":[7.25,8.24597270776713,10.606668620898748],"autouv":0,"color":6,"locked":false,"inflate":-0.3125,"origin":[13.25,12.24597270776713,17.60666862089875],"faces":{"north":{"uv":[0,6,2,9],"texture":0},"east":{"uv":[2,6,4,9],"texture":0},"south":{"uv":[7,7,9,10],"texture":0},"west":{"uv":[7,0,9,3],"texture":0},"up":{"uv":[13,6,11,4],"texture":0},"down":{"uv":[13,6,11,8],"texture":0}},"uuid":"78f7f340-0791-01bf-edaf-acc4b3d96143"},{"name":"cube","from":[5.25,6.787026098360403,8.119231753822291],"to":[7.25,9.787026098360403,10.119231753822291],"autouv":0,"color":6,"locked":false,"inflate":-0.4375,"rotation":[-45,0,0],"origin":[6.25,8.287026098360403,9.119231753822291],"faces":{"north":{"uv":[7,3,9,6],"texture":0},"east":{"uv":[4,8,6,11],"texture":0},"south":{"uv":[0,9,2,12],"texture":0},"west":{"uv":[2,9,4,12],"texture":0},"up":{"uv":[2,14,0,12],"texture":0},"down":{"uv":[4,12,2,14],"texture":0}},"uuid":"4e80eb6c-aeee-3917-0e0f-f4fd040fc905"},{"name":"cube","from":[5.25,8.02446296543686,6.328178363229018],"to":[7.25,10.02446296543686,9.328178363229018],"autouv":0,"color":6,"locked":false,"inflate":-0.5625,"origin":[6.25,9.02446296543686,7.828178363229018],"faces":{"north":{"uv":[12,12,14,14],"texture":0},"east":{"uv":[9,9,12,11],"texture":0},"south":{"uv":[12,0,14,2],"texture":0},"west":{"uv":[9,0,12,2],"texture":0},"up":{"uv":[11,5,9,2],"texture":0},"down":{"uv":[11,5,9,8],"texture":0}},"uuid":"04e29fe3-1daa-63f1-66e4-c25e02725cb8"},{"name":"cube","from":[5.4375,8.0625,9.25],"to":[6.4375,9.0625,10.25],"autouv":0,"color":7,"locked":false,"rotation":[-45,0,0],"origin":[5.9375,8.5625,9.75],"faces":{"north":{"uv":[8,10,9,11],"texture":0},"east":{"uv":[18,15,19,16],"texture":0},"south":{"uv":[18,17,19,18],"texture":0},"west":{"uv":[20,17,21,18],"texture":0},"up":{"uv":[23,22,22,21],"texture":0},"down":{"uv":[24,20,23,21],"texture":0}},"uuid":"cd038ad0-591f-02c2-df8d-46f266af279c"},{"name":"cube","from":[5.375,8.1875,9.3125],"to":[6.375,10.1875,10.3125],"autouv":0,"color":4,"locked":false,"inflate":-0.125,"rotation":[0,0,45],"origin":[5.875,8.6875,9.8125],"faces":{"north":{"uv":[4,6,5,8],"texture":0},"east":{"uv":[6,8,7,10],"texture":0},"south":{"uv":[2,16,3,18],"texture":0},"west":{"uv":[3,16,4,18],"texture":0},"up":{"uv":[24,22,23,21],"texture":0},"down":{"uv":[11,24,10,25],"texture":0}},"uuid":"621d08ed-2f47-21aa-cdc1-db4d6693d9f5"},{"name":"cube","from":[3.4375,8.875,9.5],"to":[5.4375,9.875,10.5],"autouv":0,"color":3,"locked":false,"inflate":-0.1875,"rotation":[0,45,0],"origin":[4.9375,9.375,10],"faces":{"north":{"uv":[7,6,9,7],"texture":0},"east":{"uv":[18,24,19,25],"texture":0},"south":{"uv":[15,14,17,15],"texture":0},"west":{"uv":[20,24,21,25],"texture":0},"up":{"uv":[6,17,4,16],"texture":0},"down":{"uv":[8,16,6,17],"texture":0}},"uuid":"c53e99bf-b9a5-1694-1107-ed9b43a5201b"},{"name":"cube","from":[3.625,8.875,10.25],"to":[4.625,10.875,11.25],"autouv":0,"color":1,"locked":false,"inflate":-0.25,"rotation":[0,0,-22.5],"origin":[4.125,9.375,10.75],"faces":{"north":{"uv":[8,16,9,18],"texture":0},"east":{"uv":[9,16,10,18],"texture":0},"south":{"uv":[10,16,11,18],"texture":0},"west":{"uv":[15,16,16,18],"texture":0},"up":{"uv":[25,25,24,24],"texture":0},"down":{"uv":[25,0,24,1],"texture":0}},"uuid":"5aff96b8-a68f-e715-307f-123ebdbe1524"},{"name":"cube","from":[3.9375,10,10.0625],"to":[4.9375,12,11.0625],"autouv":0,"color":0,"locked":false,"inflate":-0.4375,"rotation":[-22.5,0,0],"origin":[4.4375,10.5,10.5625],"faces":{"north":{"uv":[16,16,17,18],"texture":0},"east":{"uv":[16,2,17,4],"texture":0},"south":{"uv":[16,4,17,6],"texture":0},"west":{"uv":[16,6,17,8],"texture":0},"up":{"uv":[25,2,24,1],"texture":0},"down":{"uv":[25,2,24,3],"texture":0}},"uuid":"476ed517-859d-83bc-a3f6-f26e9fd0356f"},{"name":"cube","from":[4.1875,10,10.125],"to":[5.1875,12,11.125],"autouv":0,"color":0,"locked":false,"inflate":-0.4375,"rotation":[0,0,-45],"origin":[4.6875,10.5,10.625],"faces":{"north":{"uv":[16,8,17,10],"texture":0},"east":{"uv":[16,10,17,12],"texture":0},"south":{"uv":[16,12,17,14],"texture":0},"west":{"uv":[4,17,5,19],"texture":0},"up":{"uv":[25,4,24,3],"texture":0},"down":{"uv":[25,4,24,5],"texture":0}},"uuid":"18324401-0e81-5afc-c116-f7cccb6f0177"},{"name":"cube","from":[4.1875,10,10.375],"to":[5.1875,12,11.375],"autouv":0,"color":0,"locked":false,"inflate":-0.4375,"rotation":[0,22.5,0],"origin":[4.6875,10.5,10.875],"faces":{"north":{"uv":[5,17,6,19],"texture":0},"east":{"uv":[6,17,7,19],"texture":0},"south":{"uv":[7,17,8,19],"texture":0},"west":{"uv":[11,17,12,19],"texture":0},"up":{"uv":[25,6,24,5],"texture":0},"down":{"uv":[25,6,24,7],"texture":0}},"uuid":"60c67301-eb82-b0dc-123c-5c00de119a08"},{"name":"cube","from":[3.875,10,10.375],"to":[4.875,12,11.375],"autouv":0,"color":0,"locked":false,"inflate":-0.4375,"rotation":[22.5,0,0],"origin":[4.375,10.5,10.875],"faces":{"north":{"uv":[12,17,13,19],"texture":0},"east":{"uv":[13,17,14,19],"texture":0},"south":{"uv":[14,17,15,19],"texture":0},"west":{"uv":[17,17,18,19],"texture":0},"up":{"uv":[25,8,24,7],"texture":0},"down":{"uv":[25,8,24,9],"texture":0}},"uuid":"8cdc0ffb-8030-1902-ef49-e731c7f4040f"},{"name":"cube","from":[3.8125,9.8125,10.125],"to":[4.8125,11.8125,11.125],"autouv":0,"color":0,"locked":false,"inflate":-0.4375,"rotation":[0,0,22.5],"origin":[4.3125,10.3125,10.625],"faces":{"north":{"uv":[17,0,18,2],"texture":0},"east":{"uv":[17,2,18,4],"texture":0},"south":{"uv":[17,4,18,6],"texture":0},"west":{"uv":[17,6,18,8],"texture":0},"up":{"uv":[25,10,24,9],"texture":0},"down":{"uv":[25,10,24,11],"texture":0}},"uuid":"83e478eb-63f3-aa27-9731-fbfe0d1e8c98"},{"name":"cube","from":[5.0625,4.875,8.625],"to":[6.0625,5.875,9.625],"autouv":0,"color":7,"locked":false,"rotation":[-45,0,0],"origin":[5.5625,5.375,9.125],"faces":{"north":{"uv":[24,11,25,12],"texture":0},"east":{"uv":[24,12,25,13],"texture":0},"south":{"uv":[24,13,25,14],"texture":0},"west":{"uv":[24,14,25,15],"texture":0},"up":{"uv":[25,16,24,15],"texture":0},"down":{"uv":[25,16,24,17],"texture":0}},"uuid":"327b0261-e1ee-b953-ba9f-1ed5a81d9684"},{"name":"cube","from":[5,5,8.6875],"to":[6,7,9.6875],"autouv":0,"color":4,"locked":false,"inflate":-0.125,"rotation":[0,0,45],"origin":[5.5,5.5,9.1875],"faces":{"north":{"uv":[17,8,18,10],"texture":0},"east":{"uv":[17,10,18,12],"texture":0},"south":{"uv":[17,12,18,14],"texture":0},"west":{"uv":[2,18,3,20],"texture":0},"up":{"uv":[25,18,24,17],"texture":0},"down":{"uv":[25,18,24,19],"texture":0}},"uuid":"5b94782c-0719-0c32-e602-8a7055231826"},{"name":"cube","from":[3.0625,5.6875,8.875],"to":[5.0625,6.6875,9.875],"autouv":0,"color":3,"locked":false,"inflate":-0.1875,"rotation":[0,45,0],"origin":[4.5625,6.1875,9.375],"faces":{"north":{"uv":[17,14,19,15],"texture":0},"east":{"uv":[24,19,25,20],"texture":0},"south":{"uv":[17,16,19,17],"texture":0},"west":{"uv":[24,20,25,21],"texture":0},"up":{"uv":[10,19,8,18],"texture":0},"down":{"uv":[17,18,15,19],"texture":0}},"uuid":"1299e5dd-0471-2357-afb1-a400a99a2bea"},{"name":"cube","from":[3.3125,5.75,9.625],"to":[4.3125,7.75,10.625],"autouv":0,"color":1,"locked":false,"inflate":-0.25,"rotation":[0,0,-22.5],"origin":[3.8125,6.25,10.125],"faces":{"north":{"uv":[3,18,4,20],"texture":0},"east":{"uv":[10,18,11,20],"texture":0},"south":{"uv":[18,18,19,20],"texture":0},"west":{"uv":[18,0,19,2],"texture":0},"up":{"uv":[25,22,24,21],"texture":0},"down":{"uv":[25,22,24,23],"texture":0}},"uuid":"438c6b3e-23ee-1435-ff34-1015353981d8"},{"name":"cube","from":[3.625,6.875,9.4375],"to":[4.625,8.875,10.4375],"autouv":0,"color":0,"locked":false,"inflate":-0.4375,"rotation":[-22.5,0,0],"origin":[4.125,7.375,9.9375],"faces":{"north":{"uv":[18,2,19,4],"texture":0},"east":{"uv":[18,4,19,6],"texture":0},"south":{"uv":[18,6,19,8],"texture":0},"west":{"uv":[18,8,19,10],"texture":0},"up":{"uv":[25,24,24,23],"texture":0},"down":{"uv":[1,25,0,26],"texture":0}},"uuid":"a056c252-16e6-39f0-f81c-f9da5f19ddfd"},{"name":"cube","from":[3.875,6.875,9.5],"to":[4.875,8.875,10.5],"autouv":0,"color":0,"locked":false,"inflate":-0.4375,"rotation":[0,0,-45],"origin":[4.375,7.375,10],"faces":{"north":{"uv":[18,10,19,12],"texture":0},"east":{"uv":[18,12,19,14],"texture":0},"south":{"uv":[0,19,1,21],"texture":0},"west":{"uv":[1,19,2,21],"texture":0},"up":{"uv":[2,26,1,25],"texture":0},"down":{"uv":[3,25,2,26],"texture":0}},"uuid":"4c488766-a16b-1261-c58f-e1f46b927fee"},{"name":"cube","from":[3.875,6.875,9.75],"to":[4.875,8.875,10.75],"autouv":0,"color":0,"locked":false,"inflate":-0.4375,"rotation":[0,22.5,0],"origin":[4.375,7.375,10.25],"faces":{"north":{"uv":[4,19,5,21],"texture":0},"east":{"uv":[5,19,6,21],"texture":0},"south":{"uv":[6,19,7,21],"texture":0},"west":{"uv":[7,19,8,21],"texture":0},"up":{"uv":[4,26,3,25],"texture":0},"down":{"uv":[5,25,4,26],"texture":0}},"uuid":"60749101-9580-fbf0-a54d-813c9fff7fb6"},{"name":"cube","from":[3.5625,6.875,9.75],"to":[4.5625,8.875,10.75],"autouv":0,"color":0,"locked":false,"inflate":-0.4375,"rotation":[22.5,0,0],"origin":[4.0625,7.375,10.25],"faces":{"north":{"uv":[8,19,9,21],"texture":0},"east":{"uv":[9,19,10,21],"texture":0},"south":{"uv":[11,19,12,21],"texture":0},"west":{"uv":[12,19,13,21],"texture":0},"up":{"uv":[6,26,5,25],"texture":0},"down":{"uv":[7,25,6,26],"texture":0}},"uuid":"f8ab52dd-cf06-2c4c-6656-b3cea9debb1b"},{"name":"cube","from":[3.5,6.6875,9.5],"to":[4.5,8.6875,10.5],"autouv":0,"color":0,"locked":false,"inflate":-0.4375,"rotation":[0,0,22.5],"origin":[4,7.1875,10],"faces":{"north":{"uv":[13,19,14,21],"texture":0},"east":{"uv":[14,19,15,21],"texture":0},"south":{"uv":[15,19,16,21],"texture":0},"west":{"uv":[16,19,17,21],"texture":0},"up":{"uv":[8,26,7,25],"texture":0},"down":{"uv":[9,25,8,26],"texture":0}},"uuid":"d45a2818-5a59-9db2-2a9f-add0f7321c2e"},{"name":"cube","from":[6.0625,6.5,8.4375],"to":[7.0625,7.5,9.4375],"autouv":0,"color":7,"locked":false,"rotation":[-45,0,0],"origin":[6.5625,7,8.9375],"faces":{"north":{"uv":[9,25,10,26],"texture":0},"east":{"uv":[10,25,11,26],"texture":0},"south":{"uv":[11,25,12,26],"texture":0},"west":{"uv":[12,25,13,26],"texture":0},"up":{"uv":[14,26,13,25],"texture":0},"down":{"uv":[15,25,14,26],"texture":0}},"uuid":"0b46abbb-c9a5-209e-5262-b36c0b96606e"},{"name":"cube","from":[6.25,6.5625,6.125],"to":[7.25,7.5625,9.125],"autouv":0,"color":4,"locked":false,"inflate":-0.125,"rotation":[0,-45,0],"origin":[6.75,7.0625,8.625],"faces":{"north":{"uv":[15,25,16,26],"texture":0},"east":{"uv":[13,5,16,6],"texture":0},"south":{"uv":[16,25,17,26],"texture":0},"west":{"uv":[13,6,16,7],"texture":0},"up":{"uv":[7,16,6,13],"texture":0},"down":{"uv":[8,13,7,16],"texture":0}},"uuid":"10b015b4-29e3-4a29-a36a-a2bcbc6d5874"},{"name":"cube","from":[7.8125,6.75,6.8125],"to":[10.8125,7.75,7.8125],"autouv":0,"color":3,"locked":false,"inflate":-0.1875,"rotation":[0,0,45],"origin":[8.3125,7.25,7.3125],"faces":{"north":{"uv":[13,7,16,8],"texture":0},"east":{"uv":[17,25,18,26],"texture":0},"south":{"uv":[0,14,3,15],"texture":0},"west":{"uv":[18,25,19,26],"texture":0},"up":{"uv":[6,15,3,14],"texture":0},"down":{"uv":[11,14,8,15],"texture":0}},"uuid":"0edffab6-4e88-89bb-603d-f4e4d753443a"},{"name":"cube","from":[9.125,8.5,6.8125],"to":[10.125,11.5,7.8125],"autouv":0,"color":1,"locked":false,"inflate":-0.25,"rotation":[0,0,22.5],"origin":[9.625,9,7.3125],"faces":{"north":{"uv":[11,14,12,17],"texture":0},"east":{"uv":[12,14,13,17],"texture":0},"south":{"uv":[13,14,14,17],"texture":0},"west":{"uv":[14,14,15,17],"texture":0},"up":{"uv":[20,26,19,25],"texture":0},"down":{"uv":[21,25,20,26],"texture":0}},"uuid":"9ca1ddd2-e3f4-6ff4-c424-d8eabbfe3687"},{"name":"cube","from":[8.4375,10.4375,6.625],"to":[9.4375,12.4375,7.625],"autouv":0,"color":0,"locked":false,"inflate":-0.4375,"rotation":[-22.5,0,0],"origin":[8.9375,10.9375,7.125],"faces":{"north":{"uv":[17,19,18,21],"texture":0},"east":{"uv":[19,19,20,21],"texture":0},"south":{"uv":[19,0,20,2],"texture":0},"west":{"uv":[19,2,20,4],"texture":0},"up":{"uv":[22,26,21,25],"texture":0},"down":{"uv":[23,25,22,26],"texture":0}},"uuid":"8dd76520-3f76-a256-1e5b-b595db24357d"},{"name":"cube","from":[8.1875,10.4375,6.6875],"to":[9.1875,12.4375,7.6875],"autouv":0,"color":0,"locked":false,"inflate":-0.4375,"rotation":[0,0,45],"origin":[8.6875,10.9375,7.1875],"faces":{"north":{"uv":[19,4,20,6],"texture":0},"east":{"uv":[19,6,20,8],"texture":0},"south":{"uv":[19,8,20,10],"texture":0},"west":{"uv":[19,10,20,12],"texture":0},"up":{"uv":[24,26,23,25],"texture":0},"down":{"uv":[25,25,24,26],"texture":0}},"uuid":"c4579dd5-69c7-3447-39ef-bd5643af290a"},{"name":"cube","from":[8.1875,10.4375,6.9375],"to":[9.1875,12.4375,7.9375],"autouv":0,"color":0,"locked":false,"inflate":-0.4375,"rotation":[0,-22.5,0],"origin":[8.6875,10.9375,7.4375],"faces":{"north":{"uv":[19,12,20,14],"texture":0},"east":{"uv":[19,14,20,16],"texture":0},"south":{"uv":[19,16,20,18],"texture":0},"west":{"uv":[2,20,3,22],"texture":0},"up":{"uv":[26,26,25,25],"texture":0},"down":{"uv":[26,0,25,1],"texture":0}},"uuid":"5571b1ae-eaf6-36cc-57e5-63a5e5898684"},{"name":"cube","from":[8.5,10.4375,6.9375],"to":[9.5,12.4375,7.9375],"autouv":0,"color":0,"locked":false,"inflate":-0.4375,"rotation":[22.5,0,0],"origin":[9,10.9375,7.4375],"faces":{"north":{"uv":[3,20,4,22],"texture":0},"east":{"uv":[10,20,11,22],"texture":0},"south":{"uv":[18,20,19,22],"texture":0},"west":{"uv":[20,20,21,22],"texture":0},"up":{"uv":[26,2,25,1],"texture":0},"down":{"uv":[26,2,25,3],"texture":0}},"uuid":"84ce1664-1158-638b-e354-2ae1d93caba3"},{"name":"cube","from":[8.5625,10.25,6.6875],"to":[9.5625,12.25,7.6875],"autouv":0,"color":0,"locked":false,"inflate":-0.4375,"rotation":[0,0,-22.5],"origin":[9.0625,10.75,7.1875],"faces":{"north":{"uv":[20,0,21,2],"texture":0},"east":{"uv":[20,2,21,4],"texture":0},"south":{"uv":[20,4,21,6],"texture":0},"west":{"uv":[20,6,21,8],"texture":0},"up":{"uv":[26,4,25,3],"texture":0},"down":{"uv":[26,4,25,5],"texture":0}},"uuid":"e8ee502e-df6f-8f00-ede6-9f05003a5915"},{"name":"cube","from":[5.625,8.5,5.5],"to":[6.625,9.5,7.5],"autouv":0,"color":4,"locked":false,"inflate":-0.125,"rotation":[0,45,0],"origin":[6.125,9,7],"faces":{"north":{"uv":[25,5,26,6],"texture":0},"east":{"uv":[19,18,21,19],"texture":0},"south":{"uv":[25,6,26,7],"texture":0},"west":{"uv":[20,8,22,9],"texture":0},"up":{"uv":[21,11,20,9],"texture":0},"down":{"uv":[21,11,20,13],"texture":0}},"uuid":"210e95c2-75f1-ba06-a321-e724e5f2ed09"},{"name":"cube","from":[3.6875,8.6875,5.8125],"to":[5.6875,9.6875,6.8125],"autouv":0,"color":3,"locked":false,"inflate":-0.1875,"rotation":[0,0,-45],"origin":[5.1875,9.1875,6.3125],"faces":{"north":{"uv":[20,13,22,14],"texture":0},"east":{"uv":[25,7,26,8],"texture":0},"south":{"uv":[20,14,22,15],"texture":0},"west":{"uv":[25,8,26,9],"texture":0},"up":{"uv":[22,16,20,15],"texture":0},"down":{"uv":[22,16,20,17],"texture":0}},"uuid":"c17d1b39-e63e-2e1e-2921-bdb096b3e944"},{"name":"cube","from":[3.75,9.5625,5.8125],"to":[4.75,11.5625,6.8125],"autouv":0,"color":1,"locked":false,"inflate":-0.25,"rotation":[0,0,-22.5],"origin":[4.25,10.0625,6.3125],"faces":{"north":{"uv":[0,21,1,23],"texture":0},"east":{"uv":[1,21,2,23],"texture":0},"south":{"uv":[4,21,5,23],"texture":0},"west":{"uv":[5,21,6,23],"texture":0},"up":{"uv":[26,10,25,9],"texture":0},"down":{"uv":[26,10,25,11],"texture":0}},"uuid":"020ea22e-f41e-0d5b-a2e9-6b55bd5110cb"},{"name":"cube","from":[4.0625,10.6875,5.625],"to":[5.0625,12.6875,6.625],"autouv":0,"color":0,"locked":false,"inflate":-0.4375,"rotation":[-22.5,0,0],"origin":[4.5625,11.1875,6.125],"faces":{"north":{"uv":[6,21,7,23],"texture":0},"east":{"uv":[7,21,8,23],"texture":0},"south":{"uv":[8,21,9,23],"texture":0},"west":{"uv":[9,21,10,23],"texture":0},"up":{"uv":[26,12,25,11],"texture":0},"down":{"uv":[26,12,25,13],"texture":0}},"uuid":"e78fae8f-1e69-0579-dedf-996776e0f671"},{"name":"cube","from":[4.3125,10.6875,5.6875],"to":[5.3125,12.6875,6.6875],"autouv":0,"color":0,"locked":false,"inflate":-0.4375,"rotation":[0,0,-45],"origin":[4.8125,11.1875,6.1875],"faces":{"north":{"uv":[11,21,12,23],"texture":0},"east":{"uv":[12,21,13,23],"texture":0},"south":{"uv":[13,21,14,23],"texture":0},"west":{"uv":[14,21,15,23],"texture":0},"up":{"uv":[26,14,25,13],"texture":0},"down":{"uv":[26,14,25,15],"texture":0}},"uuid":"4f2a02a1-d7ab-7855-1c47-46bb44d16ca1"},{"name":"cube","from":[4.3125,10.6875,5.9375],"to":[5.3125,12.6875,6.9375],"autouv":0,"color":0,"locked":false,"inflate":-0.4375,"rotation":[0,22.5,0],"origin":[4.8125,11.1875,6.4375],"faces":{"north":{"uv":[15,21,16,23],"texture":0},"east":{"uv":[16,21,17,23],"texture":0},"south":{"uv":[17,21,18,23],"texture":0},"west":{"uv":[19,21,20,23],"texture":0},"up":{"uv":[26,16,25,15],"texture":0},"down":{"uv":[26,16,25,17],"texture":0}},"uuid":"d3d5f2f6-b0aa-f0fc-b6f7-510a5618a8cb"},{"name":"cube","from":[4,10.6875,5.9375],"to":[5,12.6875,6.9375],"autouv":0,"color":0,"locked":false,"inflate":-0.4375,"rotation":[22.5,0,0],"origin":[4.5,11.1875,6.4375],"faces":{"north":{"uv":[21,21,22,23],"texture":0},"east":{"uv":[21,0,22,2],"texture":0},"south":{"uv":[21,2,22,4],"texture":0},"west":{"uv":[21,4,22,6],"texture":0},"up":{"uv":[26,18,25,17],"texture":0},"down":{"uv":[26,18,25,19],"texture":0}},"uuid":"af125fef-2112-9840-f820-f43b4ac0a6a4"},{"name":"cube","from":[3.9375,10.5,5.6875],"to":[4.9375,12.5,6.6875],"autouv":0,"color":0,"locked":false,"inflate":-0.4375,"rotation":[0,0,22.5],"origin":[4.4375,11,6.1875],"faces":{"north":{"uv":[21,6,22,8],"texture":0},"east":{"uv":[21,9,22,11],"texture":0},"south":{"uv":[21,11,22,13],"texture":0},"west":{"uv":[21,17,22,19],"texture":0},"up":{"uv":[26,20,25,19],"texture":0},"down":{"uv":[26,20,25,21],"texture":0}},"uuid":"cf3dddd8-de5e-3aa9-99b0-139dd7c5391c"},{"name":"cube","from":[6.125,8.875,7.6875],"to":[8.125,9.875,8.6875],"autouv":0,"color":3,"locked":false,"inflate":-0.1875,"rotation":[0,0,45],"origin":[6.625,9.375,8.1875],"faces":{"north":{"uv":[20,19,22,20],"texture":0},"east":{"uv":[25,21,26,22],"texture":0},"south":{"uv":[21,20,23,21],"texture":0},"west":{"uv":[25,22,26,23],"texture":0},"up":{"uv":[4,23,2,22],"texture":0},"down":{"uv":[24,22,22,23],"texture":0}},"uuid":"ea0fb427-e5b1-25cd-61f2-385b57bdda6b"},{"name":"cube","from":[7.0625,9.75,7.6875],"to":[8.0625,11.75,8.6875],"autouv":0,"color":1,"locked":false,"inflate":-0.25,"rotation":[0,0,22.5],"origin":[7.5625,10.25,8.1875],"faces":{"north":{"uv":[10,22,11,24],"texture":0},"east":{"uv":[18,22,19,24],"texture":0},"south":{"uv":[20,22,21,24],"texture":0},"west":{"uv":[22,0,23,2],"texture":0},"up":{"uv":[26,24,25,23],"texture":0},"down":{"uv":[26,24,25,25],"texture":0}},"uuid":"368257be-88c2-ed2e-f53d-c1f5a9421193"},{"name":"cube","from":[6.75,10.875,7.5],"to":[7.75,12.875,8.5],"autouv":0,"color":0,"locked":false,"inflate":-0.4375,"rotation":[-22.5,0,0],"origin":[7.25,11.375,8],"faces":{"north":{"uv":[22,2,23,4],"texture":0},"east":{"uv":[22,4,23,6],"texture":0},"south":{"uv":[22,6,23,8],"texture":0},"west":{"uv":[22,8,23,10],"texture":0},"up":{"uv":[1,27,0,26],"texture":0},"down":{"uv":[2,26,1,27],"texture":0}},"uuid":"4583bf6a-c7cf-34bb-4d83-79d1b5714b50"},{"name":"cube","from":[6.5,10.875,7.5625],"to":[7.5,12.875,8.5625],"autouv":0,"color":0,"locked":false,"inflate":-0.4375,"rotation":[0,0,45],"origin":[7,11.375,8.0625],"faces":{"north":{"uv":[22,10,23,12],"texture":0},"east":{"uv":[22,12,23,14],"texture":0},"south":{"uv":[22,14,23,16],"texture":0},"west":{"uv":[22,16,23,18],"texture":0},"up":{"uv":[3,27,2,26],"texture":0},"down":{"uv":[4,26,3,27],"texture":0}},"uuid":"04a1f407-6af6-15be-d037-44a5a2a0e21f"},{"name":"cube","from":[6.5,10.875,7.8125],"to":[7.5,12.875,8.8125],"autouv":0,"color":0,"locked":false,"inflate":-0.4375,"rotation":[0,-22.5,0],"origin":[7,11.375,8.3125],"faces":{"north":{"uv":[22,18,23,20],"texture":0},"east":{"uv":[0,23,1,25],"texture":0},"south":{"uv":[1,23,2,25],"texture":0},"west":{"uv":[2,23,3,25],"texture":0},"up":{"uv":[5,27,4,26],"texture":0},"down":{"uv":[6,26,5,27],"texture":0}},"uuid":"7b73aada-5166-afa1-25ed-348fa65de183"},{"name":"cube","from":[6.8125,10.875,7.8125],"to":[7.8125,12.875,8.8125],"autouv":0,"color":0,"locked":false,"inflate":-0.4375,"rotation":[22.5,0,0],"origin":[7.3125,11.375,8.3125],"faces":{"north":{"uv":[3,23,4,25],"texture":0},"east":{"uv":[4,23,5,25],"texture":0},"south":{"uv":[5,23,6,25],"texture":0},"west":{"uv":[6,23,7,25],"texture":0},"up":{"uv":[7,27,6,26],"texture":0},"down":{"uv":[8,26,7,27],"texture":0}},"uuid":"2ba7ad9a-43e6-bbda-7f70-26895f040b86"},{"name":"cube","from":[6.875,10.6875,7.5625],"to":[7.875,12.6875,8.5625],"autouv":0,"color":0,"locked":false,"inflate":-0.4375,"rotation":[0,0,-22.5],"origin":[7.375,11.1875,8.0625],"faces":{"north":{"uv":[7,23,8,25],"texture":0},"east":{"uv":[8,23,9,25],"texture":0},"south":{"uv":[9,23,10,25],"texture":0},"west":{"uv":[11,23,12,25],"texture":0},"up":{"uv":[9,27,8,26],"texture":0},"down":{"uv":[10,26,9,27],"texture":0}},"uuid":"efbf1f8b-b0e7-9cac-85c0-48c809bc6e43"},{"name":"cube","from":[5.75,7.6875,9.25],"to":[6.75,8.6875,10.25],"autouv":0,"color":7,"locked":false,"rotation":[45,0,0],"origin":[6.25,8.1875,9.75],"faces":{"north":{"uv":[10,26,11,27],"texture":0},"east":{"uv":[11,26,12,27],"texture":0},"south":{"uv":[12,26,13,27],"texture":0},"west":{"uv":[13,26,14,27],"texture":0},"up":{"uv":[15,27,14,26],"texture":0},"down":{"uv":[16,26,15,27],"texture":0}},"uuid":"38b301a4-caf8-8e0c-a598-5b203c6724dd"},{"name":"cube","from":[5.9375,7.75,9.5625],"to":[6.9375,8.75,12.5625],"autouv":0,"color":4,"locked":false,"inflate":-0.125,"rotation":[0,45,0],"origin":[6.4375,8.25,10.0625],"faces":{"north":{"uv":[16,26,17,27],"texture":0},"east":{"uv":[14,0,17,1],"texture":0},"south":{"uv":[17,26,18,27],"texture":0},"west":{"uv":[14,1,17,2],"texture":0},"up":{"uv":[15,11,14,8],"texture":0},"down":{"uv":[15,11,14,14],"texture":0}},"uuid":"9b2f84ce-a52c-04c3-3817-6a37438e3acc"},{"name":"cube","from":[7.4375,7.9375,10.875],"to":[10.4375,8.9375,11.875],"autouv":0,"color":3,"locked":false,"inflate":-0.1875,"rotation":[0,0,45],"origin":[7.9375,8.4375,11.375],"faces":{"north":{"uv":[0,15,3,16],"texture":0},"east":{"uv":[18,26,19,27],"texture":0},"south":{"uv":[3,15,6,16],"texture":0},"west":{"uv":[19,26,20,27],"texture":0},"up":{"uv":[11,16,8,15],"texture":0},"down":{"uv":[18,15,15,16],"texture":0}},"uuid":"15a266e4-bec3-f7b2-a2ae-6ba4113f7aa9"},{"name":"cube","from":[8.875,9.5625,10.8125],"to":[9.875,12.5625,11.8125],"autouv":0,"color":1,"locked":false,"inflate":-0.25,"rotation":[-22.5,0,0],"origin":[9.375,10.0625,11.3125],"faces":{"north":{"uv":[15,8,16,11],"texture":0},"east":{"uv":[15,11,16,14],"texture":0},"south":{"uv":[0,16,1,19],"texture":0},"west":{"uv":[1,16,2,19],"texture":0},"up":{"uv":[21,27,20,26],"texture":0},"down":{"uv":[22,26,21,27],"texture":0}},"uuid":"92668a48-0bdc-ad5f-4392-a405e3282837"},{"name":"cube","from":[8.6875,11.5,10.125],"to":[9.6875,13.5,11.125],"autouv":0,"color":0,"locked":false,"inflate":-0.4375,"rotation":[0,0,22.5],"origin":[9.1875,12,10.625],"faces":{"north":{"uv":[12,23,13,25],"texture":0},"east":{"uv":[13,23,14,25],"texture":0},"south":{"uv":[14,23,15,25],"texture":0},"west":{"uv":[15,23,16,25],"texture":0},"up":{"uv":[23,27,22,26],"texture":0},"down":{"uv":[24,26,23,27],"texture":0}},"uuid":"2890cf3b-0a49-a6bf-31bd-42815526d95d"},{"name":"cube","from":[8.75,11.5,9.875],"to":[9.75,13.5,10.875],"autouv":0,"color":0,"locked":false,"inflate":-0.4375,"rotation":[-45,0,0],"origin":[9.25,12,10.375],"faces":{"north":{"uv":[16,23,17,25],"texture":0},"east":{"uv":[17,23,18,25],"texture":0},"south":{"uv":[19,23,20,25],"texture":0},"west":{"uv":[21,23,22,25],"texture":0},"up":{"uv":[25,27,24,26],"texture":0},"down":{"uv":[26,26,25,27],"texture":0}},"uuid":"6f9f21a0-69e6-8b5b-11af-8543ab958ee1"},{"name":"cube","from":[9,11.5,9.875],"to":[10,13.5,10.875],"autouv":0,"color":0,"locked":false,"inflate":-0.4375,"rotation":[0,22.5,0],"origin":[9.5,12,10.375],"faces":{"north":{"uv":[22,23,23,25],"texture":0},"east":{"uv":[23,23,24,25],"texture":0},"south":{"uv":[23,0,24,2],"texture":0},"west":{"uv":[23,2,24,4],"texture":0},"up":{"uv":[27,27,26,26],"texture":0},"down":{"uv":[27,0,26,1],"texture":0}},"uuid":"46638945-0f9f-f8e2-3c1e-2f1eced7d15d"},{"name":"cube","from":[9,11.5,10.1875],"to":[10,13.5,11.1875],"autouv":0,"color":0,"locked":false,"inflate":-0.4375,"rotation":[0,0,-22.5],"origin":[9.5,12,10.6875],"faces":{"north":{"uv":[23,4,24,6],"texture":0},"east":{"uv":[23,6,24,8],"texture":0},"south":{"uv":[23,8,24,10],"texture":0},"west":{"uv":[23,10,24,12],"texture":0},"up":{"uv":[27,2,26,1],"texture":0},"down":{"uv":[27,2,26,3],"texture":0}},"uuid":"6983da5f-7eca-4a91-58f2-7fb27393070b"},{"name":"cube","from":[8.75,11.3125,10.25],"to":[9.75,13.3125,11.25],"autouv":0,"color":0,"locked":false,"inflate":-0.4375,"rotation":[22.5,0,0],"origin":[9.25,11.8125,10.75],"faces":{"north":{"uv":[23,12,24,14],"texture":0},"east":{"uv":[23,14,24,16],"texture":0},"south":{"uv":[23,16,24,18],"texture":0},"west":{"uv":[23,18,24,20],"texture":0},"up":{"uv":[27,4,26,3],"texture":0},"down":{"uv":[27,4,26,5],"texture":0}},"uuid":"7db533af-746a-f21c-d989-dba485232701"}],"outliner":[{"name":"group","origin":[8,8,8],"uuid":"dd8aa3fa-17e2-a300-df1b-e302141f6a92","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"stalk","origin":[8,8,8],"uuid":"dea631b1-e511-8845-d8c9-dbc835c545bf","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["d3e2b9fd-6000-081a-8a3b-f8db9289b04c","78f7f340-0791-01bf-edaf-acc4b3d96143","4e80eb6c-aeee-3917-0e0f-f4fd040fc905","04e29fe3-1daa-63f1-66e4-c25e02725cb8","fc56371e-6a34-e20e-d231-841c97784855","bd05fe86-f928-635c-5b12-6ee5266f056e"]},{"name":"arm 1","origin":[6,9.46196296543686,8.078178363229018],"uuid":"83962541-910d-bf96-6a1a-c825a5e1171d","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["cd038ad0-591f-02c2-df8d-46f266af279c",{"name":"group","origin":[5.5,3.375,8],"uuid":"4209a0eb-569b-58e0-3901-2090edb06561","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["621d08ed-2f47-21aa-cdc1-db4d6693d9f5",{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"0854ea56-492c-797f-4ce4-145e6550630c","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["c53e99bf-b9a5-1694-1107-ed9b43a5201b",{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"be1b657a-9efd-1bd5-f2ad-7e016176da3c","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["5aff96b8-a68f-e715-307f-123ebdbe1524",{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"d9dfd6ad-12bd-4926-b05a-7ac28d6747cd","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["476ed517-859d-83bc-a3f6-f26e9fd0356f",{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"720a245b-237d-777d-2477-9a5b207dce90","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["18324401-0e81-5afc-c116-f7cccb6f0177",{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"4b7e4af7-983f-05e2-3e17-a0ba11043ca2","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["60c67301-eb82-b0dc-123c-5c00de119a08",{"name":"group","origin":[4.4375,5.8125,7.375],"uuid":"b1afbda3-3aa3-6e5a-a210-dd0b030bb4c5","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["8cdc0ffb-8030-1902-ef49-e731c7f4040f",{"name":"group","origin":[4.4375,5.8125,7.375],"uuid":"7bae65cb-df5c-a78d-2fee-131be2d29a46","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["83e478eb-63f3-aa27-9731-fbfe0d1e8c98"]}]}]}]}]}]}]}]}]},{"name":"arm 2","origin":[6,9.46196296543686,8.078178363229018],"uuid":"056149d5-da70-134e-52ac-afad7ae30c2a","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["327b0261-e1ee-b953-ba9f-1ed5a81d9684",{"name":"group","origin":[5.5,3.375,8],"uuid":"f2b00150-9184-f37d-91ea-7e7eeb69ae17","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["5b94782c-0719-0c32-e602-8a7055231826",{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"d96dd13e-dc1f-5f82-236f-851757332aeb","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["1299e5dd-0471-2357-afb1-a400a99a2bea",{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"b6ed812a-30f9-9db3-a3ee-332ffdd382b1","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["438c6b3e-23ee-1435-ff34-1015353981d8",{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"d83c724e-ca3a-0130-81ec-32477e2d345d","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["a056c252-16e6-39f0-f81c-f9da5f19ddfd",{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"7e221a64-babf-a6f3-7b53-8abe482b43ad","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["4c488766-a16b-1261-c58f-e1f46b927fee",{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"4c6e192a-29ec-72a8-5c44-4181d6e5a8f0","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["60749101-9580-fbf0-a54d-813c9fff7fb6",{"name":"group","origin":[4.4375,5.8125,7.375],"uuid":"b2a1231b-de90-36ab-c280-fa70a58217d8","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["f8ab52dd-cf06-2c4c-6656-b3cea9debb1b",{"name":"group","origin":[4.4375,5.8125,7.375],"uuid":"159f09ce-7743-0b83-eabf-5b4e8b9680df","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["d45a2818-5a59-9db2-2a9f-add0f7321c2e"]}]}]}]}]}]}]}]}]},{"name":"arm 3","origin":[6,9.46196296543686,8.078178363229018],"uuid":"d0da8046-3d60-4afd-028c-f4b71d9ed778","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["0b46abbb-c9a5-209e-5262-b36c0b96606e",{"name":"group","origin":[5.5,3.375,8],"uuid":"cab60485-a79c-bb8c-bb05-5c90dad63a55","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["10b015b4-29e3-4a29-a36a-a2bcbc6d5874",{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"51365c6e-279a-c827-2b4c-2daf747e3286","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["0edffab6-4e88-89bb-603d-f4e4d753443a",{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"5cc443fb-597c-e7e2-2781-4c10401b09f7","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["9ca1ddd2-e3f4-6ff4-c424-d8eabbfe3687",{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"63aadcdd-cc59-197c-4ab0-b165f868b049","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["8dd76520-3f76-a256-1e5b-b595db24357d",{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"35779741-0172-6e92-7d7f-a94e9d1526ee","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["c4579dd5-69c7-3447-39ef-bd5643af290a",{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"d0f8e7fe-f4cf-8f33-7300-775f456541d0","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["5571b1ae-eaf6-36cc-57e5-63a5e5898684",{"name":"group","origin":[4.4375,5.8125,7.375],"uuid":"a2c43efa-47cb-cc64-7a69-1a81da91134e","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["84ce1664-1158-638b-e354-2ae1d93caba3",{"name":"group","origin":[4.4375,5.8125,7.375],"uuid":"a4eb35b5-0c14-afcd-60a5-c07739916f98","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["e8ee502e-df6f-8f00-ede6-9f05003a5915"]}]}]}]}]}]}]}]}]},{"name":"arm 4","origin":[6,9.46196296543686,8.078178363229018],"uuid":"11803fc3-aad0-3e45-dc14-46c1a2d37614","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[5.5,3.375,8],"uuid":"b81f7d21-4cde-babf-3f13-0a389d1814fa","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["210e95c2-75f1-ba06-a321-e724e5f2ed09",{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"c2061bee-5535-01d9-0fdb-265b225243a0","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["c17d1b39-e63e-2e1e-2921-bdb096b3e944",{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"25197f56-a7f6-7719-7a60-bc24d3bbd9e4","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["020ea22e-f41e-0d5b-a2e9-6b55bd5110cb",{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"ceee3cbe-b671-77b4-11ab-d32c31c82929","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["e78fae8f-1e69-0579-dedf-996776e0f671",{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"bb234386-b168-cd1f-8243-7ab2e81f64c9","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["4f2a02a1-d7ab-7855-1c47-46bb44d16ca1",{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"f5f57660-4ad7-4a21-2fa0-6ff21a99a2cf","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["d3d5f2f6-b0aa-f0fc-b6f7-510a5618a8cb",{"name":"group","origin":[4.4375,5.8125,7.375],"uuid":"cc5dd972-3478-3eb2-2a17-9bd2ba966726","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["af125fef-2112-9840-f820-f43b4ac0a6a4",{"name":"group","origin":[4.4375,5.8125,7.375],"uuid":"cf342518-65f0-a58b-51ff-2e47fb04c32f","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["cf3dddd8-de5e-3aa9-99b0-139dd7c5391c"]}]}]}]}]}]}]}]}]},{"name":"arm 5","origin":[6,9.46196296543686,8.078178363229018],"uuid":"1f0dc130-ce0a-aa2e-8ca7-07b186d844da","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[5.5,3.375,8],"uuid":"672cdf08-2e98-17a6-5573-2da06c5e749c","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"6906935f-5118-d5d8-8a03-f6187561e771","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["ea0fb427-e5b1-25cd-61f2-385b57bdda6b",{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"bf94df74-2643-71ef-5578-6e457053d136","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["368257be-88c2-ed2e-f53d-c1f5a9421193",{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"73edf4eb-f403-c7fc-05d7-18f24ce86948","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["4583bf6a-c7cf-34bb-4d83-79d1b5714b50",{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"e9588671-b9cf-a953-5ca6-8c1bfb056848","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["04a1f407-6af6-15be-d037-44a5a2a0e21f",{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"b47ba2a0-09bb-d0f3-3349-bc19b3a1960e","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["7b73aada-5166-afa1-25ed-348fa65de183",{"name":"group","origin":[4.4375,5.8125,7.375],"uuid":"ae2e2a3b-2703-ebc9-272d-1de37ed7e27b","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["2ba7ad9a-43e6-bbda-7f70-26895f040b86",{"name":"group","origin":[4.4375,5.8125,7.375],"uuid":"d45902b2-3cd7-b777-e51e-643e2180578c","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["efbf1f8b-b0e7-9cac-85c0-48c809bc6e43"]}]}]}]}]}]}]}]}]},{"name":"arm 6","origin":[6,9.46196296543686,8.078178363229018],"uuid":"18adb42f-afd5-900b-6596-b7c6f19643fe","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["38b301a4-caf8-8e0c-a598-5b203c6724dd",{"name":"group","origin":[5.5,3.375,8],"uuid":"5e75a0c6-c961-8868-8960-73df6881208d","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["9b2f84ce-a52c-04c3-3817-6a37438e3acc",{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"ae828b64-ca3c-3f6d-a1b8-d6c12ab5b2a4","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["15a266e4-bec3-f7b2-a2ae-6ba4113f7aa9",{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"6a9b1c7b-6ba2-5bb0-4636-8fc7ee3450af","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["92668a48-0bdc-ad5f-4392-a405e3282837",{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"6b5dd2d5-530d-eddd-5faf-a30c5db95b1c","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["2890cf3b-0a49-a6bf-31bd-42815526d95d",{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"ab528a7a-09f2-d318-6922-670ac3b0528d","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["6f9f21a0-69e6-8b5b-11af-8543ab958ee1",{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"4fb6a012-b11f-e857-d38c-4a2c60beba61","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["46638945-0f9f-f8e2-3c1e-2f1eced7d15d",{"name":"group","origin":[4.4375,5.8125,7.375],"uuid":"f6494360-0985-c457-e272-5078630d059e","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["6983da5f-7eca-4a91-58f2-7fb27393070b",{"name":"group","origin":[4.4375,5.8125,7.375],"uuid":"2da5028f-f248-3c76-d665-fd62f156d77c","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["7db533af-746a-f21c-d989-dba485232701"]}]}]}]}]}]}]}]}]}]}],"textures":[{"path":"/Users/eliot/Dropbox (Personal)/StormlightCraft/resources/main/assets/stormlight/textures/block/prickletac.png","name":"prickletac.png","folder":"block","namespace":"stormlight","id":"0","particle":true,"visible":true,"mode":"bitmap","saved":true,"uuid":"74b0383f-2805-cceb-b44f-e82a18685ebd","source":"data:image/png;base64,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"}]} \ No newline at end of file diff --git a/blockbench/surgebinding/blocks/prickletac/PrickleTac2.bbmodel b/blockbench/surgebinding/blocks/prickletac/PrickleTac2.bbmodel new file mode 100644 index 000000000..773ac3a7d --- /dev/null +++ b/blockbench/surgebinding/blocks/prickletac/PrickleTac2.bbmodel @@ -0,0 +1 @@ +{"meta":{"format_version":"3.6","creation_time":1610481767,"model_format":"java_block","box_uv":false},"name":"prickletac2","parent":"","ambientocclusion":true,"front_gui_light":false,"visible_box":[1,1,0],"resolution":{"width":32,"height":32},"elements":[{"name":"cube","from":[5.25,0.875,7.75],"to":[7.25,3.875,9.75],"autouv":0,"color":6,"locked":false,"inflate":-0.0625,"origin":[13.25,7.875,16.75],"faces":{"north":{"uv":[3,3,5,6],"texture":0},"east":{"uv":[3,0,5,3],"texture":0},"south":{"uv":[5,5,7,8],"texture":0},"west":{"uv":[5,0,7,3],"texture":0},"up":{"uv":[7,5,5,3],"texture":0},"down":{"uv":[13,2,11,4],"texture":0}},"uuid":"d3e2b9fd-6000-081a-8a3b-f8db9289b04c"},{"name":"cube","from":[5,0,7],"to":[8,1,10],"autouv":0,"color":6,"locked":false,"origin":[13,8,17],"faces":{"north":{"uv":[9,8,12,9],"texture":0},"east":{"uv":[13,2,16,3],"texture":0},"south":{"uv":[13,3,16,4],"texture":0},"west":{"uv":[13,4,16,5],"texture":0},"up":{"uv":[3,3,0,0],"texture":0},"down":{"uv":[3,3,0,6],"texture":0}},"uuid":"bd05fe86-f928-635c-5b12-6ee5266f056e"},{"name":"cube","from":[5.25,3.185486353883565,8.084584310449374],"to":[7.25,6.185486353883565,10.084584310449374],"autouv":0,"color":6,"locked":false,"inflate":-0.1875,"rotation":[22.5,0,0],"origin":[6.25,4.685486353883565,9.084584310449374],"faces":{"north":{"uv":[6,10,8,13],"texture":0},"east":{"uv":[4,11,6,14],"texture":0},"south":{"uv":[8,11,10,14],"texture":0},"west":{"uv":[10,11,12,14],"texture":0},"up":{"uv":[14,10,12,8],"texture":0},"down":{"uv":[14,10,12,12],"texture":0}},"uuid":"fc56371e-6a34-e20e-d231-841c97784855"},{"name":"cube","from":[5.25,5.24597270776713,8.606668620898748],"to":[7.25,8.24597270776713,10.606668620898748],"autouv":0,"color":6,"locked":false,"inflate":-0.3125,"origin":[13.25,12.24597270776713,17.60666862089875],"faces":{"north":{"uv":[0,6,2,9],"texture":0},"east":{"uv":[2,6,4,9],"texture":0},"south":{"uv":[7,7,9,10],"texture":0},"west":{"uv":[7,0,9,3],"texture":0},"up":{"uv":[13,6,11,4],"texture":0},"down":{"uv":[13,6,11,8],"texture":0}},"uuid":"78f7f340-0791-01bf-edaf-acc4b3d96143"},{"name":"cube","from":[5.25,6.787026098360403,8.119231753822291],"to":[7.25,9.787026098360403,10.119231753822291],"autouv":0,"color":6,"locked":false,"inflate":-0.4375,"rotation":[-45,0,0],"origin":[6.25,8.287026098360403,9.119231753822291],"faces":{"north":{"uv":[7,3,9,6],"texture":0},"east":{"uv":[4,8,6,11],"texture":0},"south":{"uv":[0,9,2,12],"texture":0},"west":{"uv":[2,9,4,12],"texture":0},"up":{"uv":[2,14,0,12],"texture":0},"down":{"uv":[4,12,2,14],"texture":0}},"uuid":"4e80eb6c-aeee-3917-0e0f-f4fd040fc905"},{"name":"cube","from":[5.25,8.02446296543686,6.328178363229018],"to":[7.25,10.02446296543686,9.328178363229018],"autouv":0,"color":6,"locked":false,"inflate":-0.5625,"origin":[6.25,9.02446296543686,7.828178363229018],"faces":{"north":{"uv":[12,12,14,14],"texture":0},"east":{"uv":[9,9,12,11],"texture":0},"south":{"uv":[12,0,14,2],"texture":0},"west":{"uv":[9,0,12,2],"texture":0},"up":{"uv":[11,5,9,2],"texture":0},"down":{"uv":[11,5,9,8],"texture":0}},"uuid":"04e29fe3-1daa-63f1-66e4-c25e02725cb8"},{"name":"cube","from":[5.4375,8.0625,9.25],"to":[6.4375,9.0625,10.25],"autouv":0,"color":7,"locked":false,"rotation":[-45,0,0],"origin":[5.9375,8.5625,9.75],"faces":{"north":{"uv":[8,10,9,11],"texture":0},"east":{"uv":[18,15,19,16],"texture":0},"south":{"uv":[18,17,19,18],"texture":0},"west":{"uv":[20,17,21,18],"texture":0},"up":{"uv":[23,22,22,21],"texture":0},"down":{"uv":[24,20,23,21],"texture":0}},"uuid":"cd038ad0-591f-02c2-df8d-46f266af279c"},{"name":"cube","from":[5.375,8.1875,9.3125],"to":[6.375,10.1875,10.3125],"autouv":0,"color":4,"locked":false,"inflate":-0.125,"rotation":[0,0,45],"origin":[5.875,8.6875,9.8125],"faces":{"north":{"uv":[4,6,5,8],"texture":0},"east":{"uv":[6,8,7,10],"texture":0},"south":{"uv":[2,16,3,18],"texture":0},"west":{"uv":[3,16,4,18],"texture":0},"up":{"uv":[24,22,23,21],"texture":0},"down":{"uv":[11,24,10,25],"texture":0}},"uuid":"621d08ed-2f47-21aa-cdc1-db4d6693d9f5"},{"name":"cube","from":[3.4375,8.875,9.5],"to":[5.4375,9.875,10.5],"autouv":0,"color":3,"locked":false,"inflate":-0.1875,"rotation":[0,45,0],"origin":[4.9375,9.375,10],"faces":{"north":{"uv":[7,6,9,7],"texture":0},"east":{"uv":[18,24,19,25],"texture":0},"south":{"uv":[15,14,17,15],"texture":0},"west":{"uv":[20,24,21,25],"texture":0},"up":{"uv":[6,17,4,16],"texture":0},"down":{"uv":[8,16,6,17],"texture":0}},"uuid":"c53e99bf-b9a5-1694-1107-ed9b43a5201b"},{"name":"cube","from":[3.625,8.875,10.25],"to":[4.625,10.875,11.25],"autouv":0,"color":1,"locked":false,"inflate":-0.25,"rotation":[0,0,-22.5],"origin":[4.125,9.375,10.75],"faces":{"north":{"uv":[8,16,9,18],"texture":0},"east":{"uv":[9,16,10,18],"texture":0},"south":{"uv":[10,16,11,18],"texture":0},"west":{"uv":[15,16,16,18],"texture":0},"up":{"uv":[25,25,24,24],"texture":0},"down":{"uv":[25,0,24,1],"texture":0}},"uuid":"5aff96b8-a68f-e715-307f-123ebdbe1524"},{"name":"cube","from":[3.9375,9.5,10.25],"to":[4.9375,11.5,11.25],"autouv":0,"color":0,"locked":false,"inflate":-0.4375,"rotation":[-22.5,0,0],"origin":[4.4375,10,10.75],"faces":{"north":{"uv":[16,16,17,18],"texture":0},"east":{"uv":[16,2,17,4],"texture":0},"south":{"uv":[16,4,17,6],"texture":0},"west":{"uv":[16,6,17,8],"texture":0},"up":{"uv":[25,2,24,1],"texture":0},"down":{"uv":[25,2,24,3],"texture":0}},"uuid":"476ed517-859d-83bc-a3f6-f26e9fd0356f"},{"name":"cube","from":[3.8125,9.5625,10.125],"to":[4.8125,11.5625,11.125],"autouv":0,"color":0,"locked":false,"inflate":-0.4375,"rotation":[0,0,-45],"origin":[4.3125,10.0625,10.625],"faces":{"north":{"uv":[16,8,17,10],"texture":0},"east":{"uv":[16,10,17,12],"texture":0},"south":{"uv":[16,12,17,14],"texture":0},"west":{"uv":[4,17,5,19],"texture":0},"up":{"uv":[25,4,24,3],"texture":0},"down":{"uv":[25,4,24,5],"texture":0}},"uuid":"18324401-0e81-5afc-c116-f7cccb6f0177"},{"name":"cube","from":[4,9.5,10.375],"to":[5,11.5,11.375],"autouv":0,"color":0,"locked":false,"inflate":-0.4375,"rotation":[0,22.5,0],"origin":[4.5,10,10.875],"faces":{"north":{"uv":[5,17,6,19],"texture":0},"east":{"uv":[6,17,7,19],"texture":0},"south":{"uv":[7,17,8,19],"texture":0},"west":{"uv":[11,17,12,19],"texture":0},"up":{"uv":[25,6,24,5],"texture":0},"down":{"uv":[25,6,24,7],"texture":0}},"uuid":"60c67301-eb82-b0dc-123c-5c00de119a08"},{"name":"cube","from":[3.875,9.5625,10.25],"to":[4.875,11.5625,11.25],"autouv":0,"color":0,"locked":false,"inflate":-0.4375,"rotation":[22.5,0,0],"origin":[4.375,10.0625,10.75],"faces":{"north":{"uv":[12,17,13,19],"texture":0},"east":{"uv":[13,17,14,19],"texture":0},"south":{"uv":[14,17,15,19],"texture":0},"west":{"uv":[17,17,18,19],"texture":0},"up":{"uv":[25,8,24,7],"texture":0},"down":{"uv":[25,8,24,9],"texture":0}},"uuid":"8cdc0ffb-8030-1902-ef49-e731c7f4040f"},{"name":"cube","from":[4,9.375,10.125],"to":[5,11.375,11.125],"autouv":0,"color":0,"locked":false,"inflate":-0.4375,"rotation":[0,0,22.5],"origin":[4.5,9.875,10.625],"faces":{"north":{"uv":[17,0,18,2],"texture":0},"east":{"uv":[17,2,18,4],"texture":0},"south":{"uv":[17,4,18,6],"texture":0},"west":{"uv":[17,6,18,8],"texture":0},"up":{"uv":[25,10,24,9],"texture":0},"down":{"uv":[25,10,24,11],"texture":0}},"uuid":"83e478eb-63f3-aa27-9731-fbfe0d1e8c98"},{"name":"cube","from":[5.0625,4.875,8.625],"to":[6.0625,5.875,9.625],"autouv":0,"color":7,"locked":false,"rotation":[-45,0,0],"origin":[5.5625,5.375,9.125],"faces":{"north":{"uv":[24,11,25,12],"texture":0},"east":{"uv":[24,12,25,13],"texture":0},"south":{"uv":[24,13,25,14],"texture":0},"west":{"uv":[24,14,25,15],"texture":0},"up":{"uv":[25,16,24,15],"texture":0},"down":{"uv":[25,16,24,17],"texture":0}},"uuid":"327b0261-e1ee-b953-ba9f-1ed5a81d9684"},{"name":"cube","from":[5,5,8.6875],"to":[6,7,9.6875],"autouv":0,"color":4,"locked":false,"inflate":-0.125,"rotation":[0,0,45],"origin":[5.5,5.5,9.1875],"faces":{"north":{"uv":[17,8,18,10],"texture":0},"east":{"uv":[17,10,18,12],"texture":0},"south":{"uv":[17,12,18,14],"texture":0},"west":{"uv":[2,18,3,20],"texture":0},"up":{"uv":[25,18,24,17],"texture":0},"down":{"uv":[25,18,24,19],"texture":0}},"uuid":"5b94782c-0719-0c32-e602-8a7055231826"},{"name":"cube","from":[3.0625,5.6875,8.875],"to":[5.0625,6.6875,9.875],"autouv":0,"color":3,"locked":false,"inflate":-0.1875,"rotation":[0,45,0],"origin":[4.5625,6.1875,9.375],"faces":{"north":{"uv":[17,14,19,15],"texture":0},"east":{"uv":[24,19,25,20],"texture":0},"south":{"uv":[17,16,19,17],"texture":0},"west":{"uv":[24,20,25,21],"texture":0},"up":{"uv":[10,19,8,18],"texture":0},"down":{"uv":[17,18,15,19],"texture":0}},"uuid":"1299e5dd-0471-2357-afb1-a400a99a2bea"},{"name":"cube","from":[3.3125,5.75,9.625],"to":[4.3125,7.75,10.625],"autouv":0,"color":1,"locked":false,"inflate":-0.25,"rotation":[0,0,-22.5],"origin":[3.8125,6.25,10.125],"faces":{"north":{"uv":[3,18,4,20],"texture":0},"east":{"uv":[10,18,11,20],"texture":0},"south":{"uv":[18,18,19,20],"texture":0},"west":{"uv":[18,0,19,2],"texture":0},"up":{"uv":[25,22,24,21],"texture":0},"down":{"uv":[25,22,24,23],"texture":0}},"uuid":"438c6b3e-23ee-1435-ff34-1015353981d8"},{"name":"cube","from":[3.625,6.375,9.6875],"to":[4.625,8.375,10.6875],"autouv":0,"color":0,"locked":false,"inflate":-0.4375,"rotation":[-22.5,0,0],"origin":[4.125,6.875,10.1875],"faces":{"north":{"uv":[18,2,19,4],"texture":0},"east":{"uv":[18,4,19,6],"texture":0},"south":{"uv":[18,6,19,8],"texture":0},"west":{"uv":[18,8,19,10],"texture":0},"up":{"uv":[25,24,24,23],"texture":0},"down":{"uv":[1,25,0,26],"texture":0}},"uuid":"a056c252-16e6-39f0-f81c-f9da5f19ddfd"},{"name":"cube","from":[3.4375,6.375,9.5],"to":[4.4375,8.375,10.5],"autouv":0,"color":0,"locked":false,"inflate":-0.4375,"rotation":[0,0,-45],"origin":[3.9375,6.875,10],"faces":{"north":{"uv":[18,10,19,12],"texture":0},"east":{"uv":[18,12,19,14],"texture":0},"south":{"uv":[0,19,1,21],"texture":0},"west":{"uv":[1,19,2,21],"texture":0},"up":{"uv":[2,26,1,25],"texture":0},"down":{"uv":[3,25,2,26],"texture":0}},"uuid":"4c488766-a16b-1261-c58f-e1f46b927fee"},{"name":"cube","from":[3.625,6.375,9.75],"to":[4.625,8.375,10.75],"autouv":0,"color":0,"locked":false,"inflate":-0.4375,"rotation":[0,22.5,0],"origin":[4.125,6.875,10.25],"faces":{"north":{"uv":[4,19,5,21],"texture":0},"east":{"uv":[5,19,6,21],"texture":0},"south":{"uv":[6,19,7,21],"texture":0},"west":{"uv":[7,19,8,21],"texture":0},"up":{"uv":[4,26,3,25],"texture":0},"down":{"uv":[5,25,4,26],"texture":0}},"uuid":"60749101-9580-fbf0-a54d-813c9fff7fb6"},{"name":"cube","from":[3.5625,6.3125,9.625],"to":[4.5625,8.3125,10.625],"autouv":0,"color":0,"locked":false,"inflate":-0.4375,"rotation":[22.5,0,0],"origin":[4.0625,6.8125,10.125],"faces":{"north":{"uv":[8,19,9,21],"texture":0},"east":{"uv":[9,19,10,21],"texture":0},"south":{"uv":[11,19,12,21],"texture":0},"west":{"uv":[12,19,13,21],"texture":0},"up":{"uv":[6,26,5,25],"texture":0},"down":{"uv":[7,25,6,26],"texture":0}},"uuid":"f8ab52dd-cf06-2c4c-6656-b3cea9debb1b"},{"name":"cube","from":[3.75,6.1875,9.5],"to":[4.75,8.1875,10.5],"autouv":0,"color":0,"locked":false,"inflate":-0.4375,"rotation":[0,0,22.5],"origin":[4.25,6.6875,10],"faces":{"north":{"uv":[13,19,14,21],"texture":0},"east":{"uv":[14,19,15,21],"texture":0},"south":{"uv":[15,19,16,21],"texture":0},"west":{"uv":[16,19,17,21],"texture":0},"up":{"uv":[8,26,7,25],"texture":0},"down":{"uv":[9,25,8,26],"texture":0}},"uuid":"d45a2818-5a59-9db2-2a9f-add0f7321c2e"},{"name":"cube","from":[6.0625,6.5,8.4375],"to":[7.0625,7.5,9.4375],"autouv":0,"color":7,"locked":false,"rotation":[-45,0,0],"origin":[6.5625,7,8.9375],"faces":{"north":{"uv":[9,25,10,26],"texture":0},"east":{"uv":[10,25,11,26],"texture":0},"south":{"uv":[11,25,12,26],"texture":0},"west":{"uv":[12,25,13,26],"texture":0},"up":{"uv":[14,26,13,25],"texture":0},"down":{"uv":[15,25,14,26],"texture":0}},"uuid":"0b46abbb-c9a5-209e-5262-b36c0b96606e"},{"name":"cube","from":[6.25,6.5625,6.125],"to":[7.25,7.5625,9.125],"autouv":0,"color":4,"locked":false,"inflate":-0.125,"rotation":[0,-45,0],"origin":[6.75,7.0625,8.625],"faces":{"north":{"uv":[15,25,16,26],"texture":0},"east":{"uv":[13,5,16,6],"texture":0},"south":{"uv":[16,25,17,26],"texture":0},"west":{"uv":[13,6,16,7],"texture":0},"up":{"uv":[7,16,6,13],"texture":0},"down":{"uv":[8,13,7,16],"texture":0}},"uuid":"10b015b4-29e3-4a29-a36a-a2bcbc6d5874"},{"name":"cube","from":[7.8125,6.75,6.8125],"to":[10.8125,7.75,7.8125],"autouv":0,"color":3,"locked":false,"inflate":-0.1875,"rotation":[0,0,45],"origin":[8.3125,7.25,7.3125],"faces":{"north":{"uv":[13,7,16,8],"texture":0},"east":{"uv":[17,25,18,26],"texture":0},"south":{"uv":[0,14,3,15],"texture":0},"west":{"uv":[18,25,19,26],"texture":0},"up":{"uv":[6,15,3,14],"texture":0},"down":{"uv":[11,14,8,15],"texture":0}},"uuid":"0edffab6-4e88-89bb-603d-f4e4d753443a"},{"name":"cube","from":[9.125,8.5,6.8125],"to":[10.125,11.5,7.8125],"autouv":0,"color":1,"locked":false,"inflate":-0.25,"rotation":[0,0,22.5],"origin":[9.625,9,7.3125],"faces":{"north":{"uv":[11,14,12,17],"texture":0},"east":{"uv":[12,14,13,17],"texture":0},"south":{"uv":[13,14,14,17],"texture":0},"west":{"uv":[14,14,15,17],"texture":0},"up":{"uv":[20,26,19,25],"texture":0},"down":{"uv":[21,25,20,26],"texture":0}},"uuid":"9ca1ddd2-e3f4-6ff4-c424-d8eabbfe3687"},{"name":"cube","from":[8.4375,10.1875,6.8125],"to":[9.4375,12.1875,7.8125],"autouv":0,"color":0,"locked":false,"inflate":-0.4375,"rotation":[-22.5,0,0],"origin":[8.9375,10.6875,7.3125],"faces":{"north":{"uv":[17,19,18,21],"texture":0},"east":{"uv":[19,19,20,21],"texture":0},"south":{"uv":[19,0,20,2],"texture":0},"west":{"uv":[19,2,20,4],"texture":0},"up":{"uv":[22,26,21,25],"texture":0},"down":{"uv":[23,25,22,26],"texture":0}},"uuid":"8dd76520-3f76-a256-1e5b-b595db24357d"},{"name":"cube","from":[8.5,10.1875,6.6875],"to":[9.5,12.1875,7.6875],"autouv":0,"color":0,"locked":false,"inflate":-0.4375,"rotation":[0,0,45],"origin":[9,10.6875,7.1875],"faces":{"north":{"uv":[19,4,20,6],"texture":0},"east":{"uv":[19,6,20,8],"texture":0},"south":{"uv":[19,8,20,10],"texture":0},"west":{"uv":[19,10,20,12],"texture":0},"up":{"uv":[24,26,23,25],"texture":0},"down":{"uv":[25,25,24,26],"texture":0}},"uuid":"c4579dd5-69c7-3447-39ef-bd5643af290a"},{"name":"cube","from":[8.3125,10.0625,6.9375],"to":[9.3125,12.0625,7.9375],"autouv":0,"color":0,"locked":false,"inflate":-0.4375,"rotation":[0,-22.5,0],"origin":[8.8125,10.5625,7.4375],"faces":{"north":{"uv":[19,12,20,14],"texture":0},"east":{"uv":[19,14,20,16],"texture":0},"south":{"uv":[19,16,20,18],"texture":0},"west":{"uv":[2,20,3,22],"texture":0},"up":{"uv":[26,26,25,25],"texture":0},"down":{"uv":[26,0,25,1],"texture":0}},"uuid":"5571b1ae-eaf6-36cc-57e5-63a5e5898684"},{"name":"cube","from":[8.5,10.0625,6.8125],"to":[9.5,12.0625,7.8125],"autouv":0,"color":0,"locked":false,"inflate":-0.4375,"rotation":[22.5,0,0],"origin":[9,10.5625,7.3125],"faces":{"north":{"uv":[3,20,4,22],"texture":0},"east":{"uv":[10,20,11,22],"texture":0},"south":{"uv":[18,20,19,22],"texture":0},"west":{"uv":[20,20,21,22],"texture":0},"up":{"uv":[26,2,25,1],"texture":0},"down":{"uv":[26,2,25,3],"texture":0}},"uuid":"84ce1664-1158-638b-e354-2ae1d93caba3"},{"name":"cube","from":[8.375,9.9375,6.6875],"to":[9.375,11.9375,7.6875],"autouv":0,"color":0,"locked":false,"inflate":-0.4375,"rotation":[0,0,-22.5],"origin":[8.875,10.4375,7.1875],"faces":{"north":{"uv":[20,0,21,2],"texture":0},"east":{"uv":[20,2,21,4],"texture":0},"south":{"uv":[20,4,21,6],"texture":0},"west":{"uv":[20,6,21,8],"texture":0},"up":{"uv":[26,4,25,3],"texture":0},"down":{"uv":[26,4,25,5],"texture":0}},"uuid":"e8ee502e-df6f-8f00-ede6-9f05003a5915"},{"name":"cube","from":[5.625,8.5,5.5],"to":[6.625,9.5,7.5],"autouv":0,"color":4,"locked":false,"inflate":-0.125,"rotation":[0,45,0],"origin":[6.125,9,7],"faces":{"north":{"uv":[25,5,26,6],"texture":0},"east":{"uv":[19,18,21,19],"texture":0},"south":{"uv":[25,6,26,7],"texture":0},"west":{"uv":[20,8,22,9],"texture":0},"up":{"uv":[21,11,20,9],"texture":0},"down":{"uv":[21,11,20,13],"texture":0}},"uuid":"210e95c2-75f1-ba06-a321-e724e5f2ed09"},{"name":"cube","from":[3.6875,8.6875,5.8125],"to":[5.6875,9.6875,6.8125],"autouv":0,"color":3,"locked":false,"inflate":-0.1875,"rotation":[0,0,-45],"origin":[5.1875,9.1875,6.3125],"faces":{"north":{"uv":[20,13,22,14],"texture":0},"east":{"uv":[25,7,26,8],"texture":0},"south":{"uv":[20,14,22,15],"texture":0},"west":{"uv":[25,8,26,9],"texture":0},"up":{"uv":[22,16,20,15],"texture":0},"down":{"uv":[22,16,20,17],"texture":0}},"uuid":"c17d1b39-e63e-2e1e-2921-bdb096b3e944"},{"name":"cube","from":[3.75,9.5625,5.8125],"to":[4.75,11.5625,6.8125],"autouv":0,"color":1,"locked":false,"inflate":-0.25,"rotation":[0,0,-22.5],"origin":[4.25,10.0625,6.3125],"faces":{"north":{"uv":[0,21,1,23],"texture":0},"east":{"uv":[1,21,2,23],"texture":0},"south":{"uv":[4,21,5,23],"texture":0},"west":{"uv":[5,21,6,23],"texture":0},"up":{"uv":[26,10,25,9],"texture":0},"down":{"uv":[26,10,25,11],"texture":0}},"uuid":"020ea22e-f41e-0d5b-a2e9-6b55bd5110cb"},{"name":"cube","from":[4.0625,10.1875,5.875],"to":[5.0625,12.1875,6.875],"autouv":0,"color":0,"locked":false,"inflate":-0.4375,"rotation":[-22.5,0,0],"origin":[4.5625,10.6875,6.375],"faces":{"north":{"uv":[6,21,7,23],"texture":0},"east":{"uv":[7,21,8,23],"texture":0},"south":{"uv":[8,21,9,23],"texture":0},"west":{"uv":[9,21,10,23],"texture":0},"up":{"uv":[26,12,25,11],"texture":0},"down":{"uv":[26,12,25,13],"texture":0}},"uuid":"e78fae8f-1e69-0579-dedf-996776e0f671"},{"name":"cube","from":[4,10.25,5.6875],"to":[5,12.25,6.6875],"autouv":0,"color":0,"locked":false,"inflate":-0.4375,"rotation":[0,0,-45],"origin":[4.5,10.75,6.1875],"faces":{"north":{"uv":[11,21,12,23],"texture":0},"east":{"uv":[12,21,13,23],"texture":0},"south":{"uv":[13,21,14,23],"texture":0},"west":{"uv":[14,21,15,23],"texture":0},"up":{"uv":[26,14,25,13],"texture":0},"down":{"uv":[26,14,25,15],"texture":0}},"uuid":"4f2a02a1-d7ab-7855-1c47-46bb44d16ca1"},{"name":"cube","from":[4.0625,10,5.9375],"to":[5.0625,12,6.9375],"autouv":0,"color":0,"locked":false,"inflate":-0.4375,"rotation":[0,22.5,0],"origin":[4.5625,10.5,6.4375],"faces":{"north":{"uv":[15,21,16,23],"texture":0},"east":{"uv":[16,21,17,23],"texture":0},"south":{"uv":[17,21,18,23],"texture":0},"west":{"uv":[19,21,20,23],"texture":0},"up":{"uv":[26,16,25,15],"texture":0},"down":{"uv":[26,16,25,17],"texture":0}},"uuid":"d3d5f2f6-b0aa-f0fc-b6f7-510a5618a8cb"},{"name":"cube","from":[4,10.0625,5.6875],"to":[5,12.0625,6.6875],"autouv":0,"color":0,"locked":false,"inflate":-0.4375,"rotation":[22.5,0,0],"origin":[4.5,10.5625,6.1875],"faces":{"north":{"uv":[21,21,22,23],"texture":0},"east":{"uv":[21,0,22,2],"texture":0},"south":{"uv":[21,2,22,4],"texture":0},"west":{"uv":[21,4,22,6],"texture":0},"up":{"uv":[26,18,25,17],"texture":0},"down":{"uv":[26,18,25,19],"texture":0}},"uuid":"af125fef-2112-9840-f820-f43b4ac0a6a4"},{"name":"cube","from":[4.125,10.125,5.75],"to":[5.125,12.125,6.75],"autouv":0,"color":0,"locked":false,"inflate":-0.4375,"rotation":[0,0,22.5],"origin":[4.625,10.625,6.25],"faces":{"north":{"uv":[21,6,22,8],"texture":0},"east":{"uv":[21,9,22,11],"texture":0},"south":{"uv":[21,11,22,13],"texture":0},"west":{"uv":[21,17,22,19],"texture":0},"up":{"uv":[26,20,25,19],"texture":0},"down":{"uv":[26,20,25,21],"texture":0}},"uuid":"cf3dddd8-de5e-3aa9-99b0-139dd7c5391c"},{"name":"cube","from":[6.125,8.875,7.6875],"to":[8.125,9.875,8.6875],"autouv":0,"color":3,"locked":false,"inflate":-0.1875,"rotation":[0,0,45],"origin":[6.625,9.375,8.1875],"faces":{"north":{"uv":[20,19,22,20],"texture":0},"east":{"uv":[25,21,26,22],"texture":0},"south":{"uv":[21,20,23,21],"texture":0},"west":{"uv":[25,22,26,23],"texture":0},"up":{"uv":[4,23,2,22],"texture":0},"down":{"uv":[24,22,22,23],"texture":0}},"uuid":"ea0fb427-e5b1-25cd-61f2-385b57bdda6b"},{"name":"cube","from":[7.0625,9.75,7.6875],"to":[8.0625,11.75,8.6875],"autouv":0,"color":1,"locked":false,"inflate":-0.25,"rotation":[0,0,22.5],"origin":[7.5625,10.25,8.1875],"faces":{"north":{"uv":[10,22,11,24],"texture":0},"east":{"uv":[18,22,19,24],"texture":0},"south":{"uv":[20,22,21,24],"texture":0},"west":{"uv":[22,0,23,2],"texture":0},"up":{"uv":[26,24,25,23],"texture":0},"down":{"uv":[26,24,25,25],"texture":0}},"uuid":"368257be-88c2-ed2e-f53d-c1f5a9421193"},{"name":"cube","from":[6.75,10.4375,7.6875],"to":[7.75,12.4375,8.6875],"autouv":0,"color":0,"locked":false,"inflate":-0.4375,"rotation":[-22.5,0,0],"origin":[7.25,10.9375,8.1875],"faces":{"north":{"uv":[22,2,23,4],"texture":0},"east":{"uv":[22,4,23,6],"texture":0},"south":{"uv":[22,6,23,8],"texture":0},"west":{"uv":[22,8,23,10],"texture":0},"up":{"uv":[1,27,0,26],"texture":0},"down":{"uv":[2,26,1,27],"texture":0}},"uuid":"4583bf6a-c7cf-34bb-4d83-79d1b5714b50"},{"name":"cube","from":[6.8125,10.5,7.5625],"to":[7.8125,12.5,8.5625],"autouv":0,"color":0,"locked":false,"inflate":-0.4375,"rotation":[0,0,45],"origin":[7.3125,11,8.0625],"faces":{"north":{"uv":[22,10,23,12],"texture":0},"east":{"uv":[22,12,23,14],"texture":0},"south":{"uv":[22,14,23,16],"texture":0},"west":{"uv":[22,16,23,18],"texture":0},"up":{"uv":[3,27,2,26],"texture":0},"down":{"uv":[4,26,3,27],"texture":0}},"uuid":"04a1f407-6af6-15be-d037-44a5a2a0e21f"},{"name":"cube","from":[6.6875,10.375,7.8125],"to":[7.6875,12.375,8.8125],"autouv":0,"color":0,"locked":false,"inflate":-0.4375,"rotation":[0,-22.5,0],"origin":[7.1875,10.875,8.3125],"faces":{"north":{"uv":[22,18,23,20],"texture":0},"east":{"uv":[0,23,1,25],"texture":0},"south":{"uv":[1,23,2,25],"texture":0},"west":{"uv":[2,23,3,25],"texture":0},"up":{"uv":[5,27,4,26],"texture":0},"down":{"uv":[6,26,5,27],"texture":0}},"uuid":"7b73aada-5166-afa1-25ed-348fa65de183"},{"name":"cube","from":[6.8125,10.375,7.625],"to":[7.8125,12.375,8.625],"autouv":0,"color":0,"locked":false,"inflate":-0.4375,"rotation":[22.5,0,0],"origin":[7.3125,10.875,8.125],"faces":{"north":{"uv":[3,23,4,25],"texture":0},"east":{"uv":[4,23,5,25],"texture":0},"south":{"uv":[5,23,6,25],"texture":0},"west":{"uv":[6,23,7,25],"texture":0},"up":{"uv":[7,27,6,26],"texture":0},"down":{"uv":[8,26,7,27],"texture":0}},"uuid":"2ba7ad9a-43e6-bbda-7f70-26895f040b86"},{"name":"cube","from":[6.6875,10.3125,7.5625],"to":[7.6875,12.3125,8.5625],"autouv":0,"color":0,"locked":false,"inflate":-0.4375,"rotation":[0,0,-22.5],"origin":[7.1875,10.8125,8.0625],"faces":{"north":{"uv":[7,23,8,25],"texture":0},"east":{"uv":[8,23,9,25],"texture":0},"south":{"uv":[9,23,10,25],"texture":0},"west":{"uv":[11,23,12,25],"texture":0},"up":{"uv":[9,27,8,26],"texture":0},"down":{"uv":[10,26,9,27],"texture":0}},"uuid":"efbf1f8b-b0e7-9cac-85c0-48c809bc6e43"},{"name":"cube","from":[5.75,7.6875,9.25],"to":[6.75,8.6875,10.25],"autouv":0,"color":7,"locked":false,"rotation":[45,0,0],"origin":[6.25,8.1875,9.75],"faces":{"north":{"uv":[10,26,11,27],"texture":0},"east":{"uv":[11,26,12,27],"texture":0},"south":{"uv":[12,26,13,27],"texture":0},"west":{"uv":[13,26,14,27],"texture":0},"up":{"uv":[15,27,14,26],"texture":0},"down":{"uv":[16,26,15,27],"texture":0}},"uuid":"38b301a4-caf8-8e0c-a598-5b203c6724dd"},{"name":"cube","from":[5.9375,7.75,9.5625],"to":[6.9375,8.75,12.5625],"autouv":0,"color":4,"locked":false,"inflate":-0.125,"rotation":[0,45,0],"origin":[6.4375,8.25,10.0625],"faces":{"north":{"uv":[16,26,17,27],"texture":0},"east":{"uv":[14,0,17,1],"texture":0},"south":{"uv":[17,26,18,27],"texture":0},"west":{"uv":[14,1,17,2],"texture":0},"up":{"uv":[15,11,14,8],"texture":0},"down":{"uv":[15,11,14,14],"texture":0}},"uuid":"9b2f84ce-a52c-04c3-3817-6a37438e3acc"},{"name":"cube","from":[7.4375,7.9375,10.875],"to":[10.4375,8.9375,11.875],"autouv":0,"color":3,"locked":false,"inflate":-0.1875,"rotation":[0,0,45],"origin":[7.9375,8.4375,11.375],"faces":{"north":{"uv":[0,15,3,16],"texture":0},"east":{"uv":[18,26,19,27],"texture":0},"south":{"uv":[3,15,6,16],"texture":0},"west":{"uv":[19,26,20,27],"texture":0},"up":{"uv":[11,16,8,15],"texture":0},"down":{"uv":[18,15,15,16],"texture":0}},"uuid":"15a266e4-bec3-f7b2-a2ae-6ba4113f7aa9"},{"name":"cube","from":[8.875,9.5625,10.8125],"to":[9.875,12.5625,11.8125],"autouv":0,"color":1,"locked":false,"inflate":-0.25,"rotation":[-22.5,0,0],"origin":[9.375,10.0625,11.3125],"faces":{"north":{"uv":[15,8,16,11],"texture":0},"east":{"uv":[15,11,16,14],"texture":0},"south":{"uv":[0,16,1,19],"texture":0},"west":{"uv":[1,16,2,19],"texture":0},"up":{"uv":[21,27,20,26],"texture":0},"down":{"uv":[22,26,21,27],"texture":0}},"uuid":"92668a48-0bdc-ad5f-4392-a405e3282837"},{"name":"cube","from":[8.875,11.125,10.125],"to":[9.875,13.125,11.125],"autouv":0,"color":0,"locked":false,"inflate":-0.4375,"rotation":[0,0,22.5],"origin":[9.375,11.625,10.625],"faces":{"north":{"uv":[12,23,13,25],"texture":0},"east":{"uv":[13,23,14,25],"texture":0},"south":{"uv":[14,23,15,25],"texture":0},"west":{"uv":[15,23,16,25],"texture":0},"up":{"uv":[23,27,22,26],"texture":0},"down":{"uv":[24,26,23,27],"texture":0}},"uuid":"2890cf3b-0a49-a6bf-31bd-42815526d95d"},{"name":"cube","from":[8.75,11.25,10.25],"to":[9.75,13.25,11.25],"autouv":0,"color":0,"locked":false,"inflate":-0.4375,"rotation":[-45,0,0],"origin":[9.25,11.75,10.75],"faces":{"north":{"uv":[16,23,17,25],"texture":0},"east":{"uv":[17,23,18,25],"texture":0},"south":{"uv":[19,23,20,25],"texture":0},"west":{"uv":[21,23,22,25],"texture":0},"up":{"uv":[25,27,24,26],"texture":0},"down":{"uv":[26,26,25,27],"texture":0}},"uuid":"6f9f21a0-69e6-8b5b-11af-8543ab958ee1"},{"name":"cube","from":[9,11,10.0625],"to":[10,13,11.0625],"autouv":0,"color":0,"locked":false,"inflate":-0.4375,"rotation":[0,22.5,0],"origin":[9.5,11.5,10.5625],"faces":{"north":{"uv":[22,23,23,25],"texture":0},"east":{"uv":[23,23,24,25],"texture":0},"south":{"uv":[23,0,24,2],"texture":0},"west":{"uv":[23,2,24,4],"texture":0},"up":{"uv":[27,27,26,26],"texture":0},"down":{"uv":[27,0,26,1],"texture":0}},"uuid":"46638945-0f9f-f8e2-3c1e-2f1eced7d15d"},{"name":"cube","from":[8.875,11.125,10.1875],"to":[9.875,13.125,11.1875],"autouv":0,"color":0,"locked":false,"inflate":-0.4375,"rotation":[0,0,-22.5],"origin":[9.375,11.625,10.6875],"faces":{"north":{"uv":[23,4,24,6],"texture":0},"east":{"uv":[23,6,24,8],"texture":0},"south":{"uv":[23,8,24,10],"texture":0},"west":{"uv":[23,10,24,12],"texture":0},"up":{"uv":[27,2,26,1],"texture":0},"down":{"uv":[27,2,26,3],"texture":0}},"uuid":"6983da5f-7eca-4a91-58f2-7fb27393070b"},{"name":"cube","from":[8.75,11.0625,10],"to":[9.75,13.0625,11],"autouv":0,"color":0,"locked":false,"inflate":-0.4375,"rotation":[22.5,0,0],"origin":[9.25,11.5625,10.5],"faces":{"north":{"uv":[23,12,24,14],"texture":0},"east":{"uv":[23,14,24,16],"texture":0},"south":{"uv":[23,16,24,18],"texture":0},"west":{"uv":[23,18,24,20],"texture":0},"up":{"uv":[27,4,26,3],"texture":0},"down":{"uv":[27,4,26,5],"texture":0}},"uuid":"7db533af-746a-f21c-d989-dba485232701"}],"outliner":[{"name":"group","origin":[8,8,8],"uuid":"dd8aa3fa-17e2-a300-df1b-e302141f6a92","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"stalk","origin":[8,8,8],"uuid":"dea631b1-e511-8845-d8c9-dbc835c545bf","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["d3e2b9fd-6000-081a-8a3b-f8db9289b04c","78f7f340-0791-01bf-edaf-acc4b3d96143","4e80eb6c-aeee-3917-0e0f-f4fd040fc905","04e29fe3-1daa-63f1-66e4-c25e02725cb8","fc56371e-6a34-e20e-d231-841c97784855","bd05fe86-f928-635c-5b12-6ee5266f056e"]},{"name":"arm 1","origin":[6,9.46196296543686,8.078178363229018],"uuid":"83962541-910d-bf96-6a1a-c825a5e1171d","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["cd038ad0-591f-02c2-df8d-46f266af279c",{"name":"group","origin":[5.5,3.375,8],"uuid":"4209a0eb-569b-58e0-3901-2090edb06561","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["621d08ed-2f47-21aa-cdc1-db4d6693d9f5",{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"0854ea56-492c-797f-4ce4-145e6550630c","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["c53e99bf-b9a5-1694-1107-ed9b43a5201b",{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"be1b657a-9efd-1bd5-f2ad-7e016176da3c","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["5aff96b8-a68f-e715-307f-123ebdbe1524",{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"d9dfd6ad-12bd-4926-b05a-7ac28d6747cd","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["476ed517-859d-83bc-a3f6-f26e9fd0356f",{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"720a245b-237d-777d-2477-9a5b207dce90","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["18324401-0e81-5afc-c116-f7cccb6f0177",{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"4b7e4af7-983f-05e2-3e17-a0ba11043ca2","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["60c67301-eb82-b0dc-123c-5c00de119a08",{"name":"group","origin":[4.4375,5.8125,7.375],"uuid":"b1afbda3-3aa3-6e5a-a210-dd0b030bb4c5","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["8cdc0ffb-8030-1902-ef49-e731c7f4040f",{"name":"group","origin":[4.4375,5.8125,7.375],"uuid":"7bae65cb-df5c-a78d-2fee-131be2d29a46","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["83e478eb-63f3-aa27-9731-fbfe0d1e8c98"]}]}]}]}]}]}]}]}]},{"name":"arm 2","origin":[6,9.46196296543686,8.078178363229018],"uuid":"056149d5-da70-134e-52ac-afad7ae30c2a","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["327b0261-e1ee-b953-ba9f-1ed5a81d9684",{"name":"group","origin":[5.5,3.375,8],"uuid":"f2b00150-9184-f37d-91ea-7e7eeb69ae17","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["5b94782c-0719-0c32-e602-8a7055231826",{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"d96dd13e-dc1f-5f82-236f-851757332aeb","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["1299e5dd-0471-2357-afb1-a400a99a2bea",{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"b6ed812a-30f9-9db3-a3ee-332ffdd382b1","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["438c6b3e-23ee-1435-ff34-1015353981d8",{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"d83c724e-ca3a-0130-81ec-32477e2d345d","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["a056c252-16e6-39f0-f81c-f9da5f19ddfd",{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"7e221a64-babf-a6f3-7b53-8abe482b43ad","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["4c488766-a16b-1261-c58f-e1f46b927fee",{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"4c6e192a-29ec-72a8-5c44-4181d6e5a8f0","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["60749101-9580-fbf0-a54d-813c9fff7fb6",{"name":"group","origin":[4.4375,5.8125,7.375],"uuid":"b2a1231b-de90-36ab-c280-fa70a58217d8","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["f8ab52dd-cf06-2c4c-6656-b3cea9debb1b",{"name":"group","origin":[4.4375,5.8125,7.375],"uuid":"159f09ce-7743-0b83-eabf-5b4e8b9680df","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["d45a2818-5a59-9db2-2a9f-add0f7321c2e"]}]}]}]}]}]}]}]}]},{"name":"arm 3","origin":[6,9.46196296543686,8.078178363229018],"uuid":"d0da8046-3d60-4afd-028c-f4b71d9ed778","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["0b46abbb-c9a5-209e-5262-b36c0b96606e",{"name":"group","origin":[5.5,3.375,8],"uuid":"cab60485-a79c-bb8c-bb05-5c90dad63a55","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["10b015b4-29e3-4a29-a36a-a2bcbc6d5874",{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"51365c6e-279a-c827-2b4c-2daf747e3286","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["0edffab6-4e88-89bb-603d-f4e4d753443a",{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"5cc443fb-597c-e7e2-2781-4c10401b09f7","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["9ca1ddd2-e3f4-6ff4-c424-d8eabbfe3687",{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"63aadcdd-cc59-197c-4ab0-b165f868b049","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["8dd76520-3f76-a256-1e5b-b595db24357d",{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"35779741-0172-6e92-7d7f-a94e9d1526ee","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["c4579dd5-69c7-3447-39ef-bd5643af290a",{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"d0f8e7fe-f4cf-8f33-7300-775f456541d0","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["5571b1ae-eaf6-36cc-57e5-63a5e5898684",{"name":"group","origin":[4.4375,5.8125,7.375],"uuid":"a2c43efa-47cb-cc64-7a69-1a81da91134e","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["84ce1664-1158-638b-e354-2ae1d93caba3",{"name":"group","origin":[4.4375,5.8125,7.375],"uuid":"a4eb35b5-0c14-afcd-60a5-c07739916f98","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["e8ee502e-df6f-8f00-ede6-9f05003a5915"]}]}]}]}]}]}]}]}]},{"name":"arm 4","origin":[6,9.46196296543686,8.078178363229018],"uuid":"11803fc3-aad0-3e45-dc14-46c1a2d37614","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[5.5,3.375,8],"uuid":"b81f7d21-4cde-babf-3f13-0a389d1814fa","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["210e95c2-75f1-ba06-a321-e724e5f2ed09",{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"c2061bee-5535-01d9-0fdb-265b225243a0","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["c17d1b39-e63e-2e1e-2921-bdb096b3e944",{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"25197f56-a7f6-7719-7a60-bc24d3bbd9e4","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["020ea22e-f41e-0d5b-a2e9-6b55bd5110cb",{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"ceee3cbe-b671-77b4-11ab-d32c31c82929","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["e78fae8f-1e69-0579-dedf-996776e0f671",{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"bb234386-b168-cd1f-8243-7ab2e81f64c9","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["4f2a02a1-d7ab-7855-1c47-46bb44d16ca1",{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"f5f57660-4ad7-4a21-2fa0-6ff21a99a2cf","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["d3d5f2f6-b0aa-f0fc-b6f7-510a5618a8cb",{"name":"group","origin":[4.4375,5.8125,7.375],"uuid":"cc5dd972-3478-3eb2-2a17-9bd2ba966726","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["af125fef-2112-9840-f820-f43b4ac0a6a4",{"name":"group","origin":[4.4375,5.8125,7.375],"uuid":"cf342518-65f0-a58b-51ff-2e47fb04c32f","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["cf3dddd8-de5e-3aa9-99b0-139dd7c5391c"]}]}]}]}]}]}]}]}]},{"name":"arm 5","origin":[6,9.46196296543686,8.078178363229018],"uuid":"1f0dc130-ce0a-aa2e-8ca7-07b186d844da","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[5.5,3.375,8],"uuid":"672cdf08-2e98-17a6-5573-2da06c5e749c","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"6906935f-5118-d5d8-8a03-f6187561e771","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["ea0fb427-e5b1-25cd-61f2-385b57bdda6b",{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"bf94df74-2643-71ef-5578-6e457053d136","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["368257be-88c2-ed2e-f53d-c1f5a9421193",{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"73edf4eb-f403-c7fc-05d7-18f24ce86948","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["4583bf6a-c7cf-34bb-4d83-79d1b5714b50",{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"e9588671-b9cf-a953-5ca6-8c1bfb056848","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["04a1f407-6af6-15be-d037-44a5a2a0e21f",{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"b47ba2a0-09bb-d0f3-3349-bc19b3a1960e","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["7b73aada-5166-afa1-25ed-348fa65de183",{"name":"group","origin":[4.4375,5.8125,7.375],"uuid":"ae2e2a3b-2703-ebc9-272d-1de37ed7e27b","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["2ba7ad9a-43e6-bbda-7f70-26895f040b86",{"name":"group","origin":[4.4375,5.8125,7.375],"uuid":"d45902b2-3cd7-b777-e51e-643e2180578c","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["efbf1f8b-b0e7-9cac-85c0-48c809bc6e43"]}]}]}]}]}]}]}]}]},{"name":"arm 6","origin":[6,9.46196296543686,8.078178363229018],"uuid":"18adb42f-afd5-900b-6596-b7c6f19643fe","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["38b301a4-caf8-8e0c-a598-5b203c6724dd",{"name":"group","origin":[5.5,3.375,8],"uuid":"5e75a0c6-c961-8868-8960-73df6881208d","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["9b2f84ce-a52c-04c3-3817-6a37438e3acc",{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"ae828b64-ca3c-3f6d-a1b8-d6c12ab5b2a4","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["15a266e4-bec3-f7b2-a2ae-6ba4113f7aa9",{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"6a9b1c7b-6ba2-5bb0-4636-8fc7ee3450af","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["92668a48-0bdc-ad5f-4392-a405e3282837",{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"6b5dd2d5-530d-eddd-5faf-a30c5db95b1c","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["2890cf3b-0a49-a6bf-31bd-42815526d95d",{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"ab528a7a-09f2-d318-6922-670ac3b0528d","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["6f9f21a0-69e6-8b5b-11af-8543ab958ee1",{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"4fb6a012-b11f-e857-d38c-4a2c60beba61","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["46638945-0f9f-f8e2-3c1e-2f1eced7d15d",{"name":"group","origin":[4.4375,5.8125,7.375],"uuid":"f6494360-0985-c457-e272-5078630d059e","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["6983da5f-7eca-4a91-58f2-7fb27393070b",{"name":"group","origin":[4.4375,5.8125,7.375],"uuid":"2da5028f-f248-3c76-d665-fd62f156d77c","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["7db533af-746a-f21c-d989-dba485232701"]}]}]}]}]}]}]}]}]}]}],"textures":[{"path":"/Users/eliot/Dropbox (Personal)/StormlightCraft/resources/main/assets/stormlight/textures/block/prickletac.png","name":"prickletac.png","folder":"block","namespace":"stormlight","id":"0","particle":true,"visible":true,"mode":"bitmap","saved":true,"uuid":"74b0383f-2805-cceb-b44f-e82a18685ebd","source":"data:image/png;base64,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"}]} \ No newline at end of file diff --git a/blockbench/surgebinding/blocks/prickletac/PrickleTac3.bbmodel b/blockbench/surgebinding/blocks/prickletac/PrickleTac3.bbmodel new file mode 100644 index 000000000..c30360a09 --- /dev/null +++ b/blockbench/surgebinding/blocks/prickletac/PrickleTac3.bbmodel @@ -0,0 +1 @@ +{"meta":{"format_version":"3.6","creation_time":1610481927,"model_format":"java_block","box_uv":false},"name":"prickletac3","parent":"","ambientocclusion":true,"front_gui_light":false,"visible_box":[1,1,0],"resolution":{"width":32,"height":32},"elements":[{"name":"cube","from":[5.25,0.875,7.75],"to":[7.25,3.875,9.75],"autouv":0,"color":6,"locked":false,"inflate":-0.0625,"origin":[13.25,7.875,16.75],"faces":{"north":{"uv":[3,3,5,6],"texture":0},"east":{"uv":[3,0,5,3],"texture":0},"south":{"uv":[5,5,7,8],"texture":0},"west":{"uv":[5,0,7,3],"texture":0},"up":{"uv":[7,5,5,3],"texture":0},"down":{"uv":[13,2,11,4],"texture":0}},"uuid":"d3e2b9fd-6000-081a-8a3b-f8db9289b04c"},{"name":"cube","from":[5,0,7],"to":[8,1,10],"autouv":0,"color":6,"locked":false,"origin":[13,8,17],"faces":{"north":{"uv":[9,8,12,9],"texture":0},"east":{"uv":[13,2,16,3],"texture":0},"south":{"uv":[13,3,16,4],"texture":0},"west":{"uv":[13,4,16,5],"texture":0},"up":{"uv":[3,3,0,0],"texture":0},"down":{"uv":[3,3,0,6],"texture":0}},"uuid":"bd05fe86-f928-635c-5b12-6ee5266f056e"},{"name":"cube","from":[5.25,3.185486353883565,8.084584310449374],"to":[7.25,6.185486353883565,10.084584310449374],"autouv":0,"color":6,"locked":false,"inflate":-0.1875,"rotation":[22.5,0,0],"origin":[6.25,4.685486353883565,9.084584310449374],"faces":{"north":{"uv":[6,10,8,13],"texture":0},"east":{"uv":[4,11,6,14],"texture":0},"south":{"uv":[8,11,10,14],"texture":0},"west":{"uv":[10,11,12,14],"texture":0},"up":{"uv":[14,10,12,8],"texture":0},"down":{"uv":[14,10,12,12],"texture":0}},"uuid":"fc56371e-6a34-e20e-d231-841c97784855"},{"name":"cube","from":[5.25,5.24597270776713,8.606668620898748],"to":[7.25,8.24597270776713,10.606668620898748],"autouv":0,"color":6,"locked":false,"inflate":-0.3125,"origin":[13.25,12.24597270776713,17.60666862089875],"faces":{"north":{"uv":[0,6,2,9],"texture":0},"east":{"uv":[2,6,4,9],"texture":0},"south":{"uv":[7,7,9,10],"texture":0},"west":{"uv":[7,0,9,3],"texture":0},"up":{"uv":[13,6,11,4],"texture":0},"down":{"uv":[13,6,11,8],"texture":0}},"uuid":"78f7f340-0791-01bf-edaf-acc4b3d96143"},{"name":"cube","from":[5.25,6.787026098360403,8.119231753822291],"to":[7.25,9.787026098360403,10.119231753822291],"autouv":0,"color":6,"locked":false,"inflate":-0.4375,"rotation":[-45,0,0],"origin":[6.25,8.287026098360403,9.119231753822291],"faces":{"north":{"uv":[7,3,9,6],"texture":0},"east":{"uv":[4,8,6,11],"texture":0},"south":{"uv":[0,9,2,12],"texture":0},"west":{"uv":[2,9,4,12],"texture":0},"up":{"uv":[2,14,0,12],"texture":0},"down":{"uv":[4,12,2,14],"texture":0}},"uuid":"4e80eb6c-aeee-3917-0e0f-f4fd040fc905"},{"name":"cube","from":[5.25,8.02446296543686,6.328178363229018],"to":[7.25,10.02446296543686,9.328178363229018],"autouv":0,"color":6,"locked":false,"inflate":-0.5625,"origin":[6.25,9.02446296543686,7.828178363229018],"faces":{"north":{"uv":[12,12,14,14],"texture":0},"east":{"uv":[9,9,12,11],"texture":0},"south":{"uv":[12,0,14,2],"texture":0},"west":{"uv":[9,0,12,2],"texture":0},"up":{"uv":[11,5,9,2],"texture":0},"down":{"uv":[11,5,9,8],"texture":0}},"uuid":"04e29fe3-1daa-63f1-66e4-c25e02725cb8"},{"name":"cube","from":[5.4375,8.0625,9.25],"to":[6.4375,9.0625,10.25],"autouv":0,"color":7,"locked":false,"rotation":[-45,0,0],"origin":[5.9375,8.5625,9.75],"faces":{"north":{"uv":[8,10,9,11],"texture":0},"east":{"uv":[18,15,19,16],"texture":0},"south":{"uv":[18,17,19,18],"texture":0},"west":{"uv":[20,17,21,18],"texture":0},"up":{"uv":[23,22,22,21],"texture":0},"down":{"uv":[24,20,23,21],"texture":0}},"uuid":"cd038ad0-591f-02c2-df8d-46f266af279c"},{"name":"cube","from":[5.375,8.1875,9.3125],"to":[6.375,10.1875,10.3125],"autouv":0,"color":4,"locked":false,"inflate":-0.125,"rotation":[0,0,45],"origin":[5.875,8.6875,9.8125],"faces":{"north":{"uv":[4,6,5,8],"texture":0},"east":{"uv":[6,8,7,10],"texture":0},"south":{"uv":[2,16,3,18],"texture":0},"west":{"uv":[3,16,4,18],"texture":0},"up":{"uv":[24,22,23,21],"texture":0},"down":{"uv":[11,24,10,25],"texture":0}},"uuid":"621d08ed-2f47-21aa-cdc1-db4d6693d9f5"},{"name":"cube","from":[3.4375,8.875,9.5],"to":[5.4375,9.875,10.5],"autouv":0,"color":3,"locked":false,"inflate":-0.1875,"rotation":[0,45,0],"origin":[4.9375,9.375,10],"faces":{"north":{"uv":[7,6,9,7],"texture":0},"east":{"uv":[18,24,19,25],"texture":0},"south":{"uv":[15,14,17,15],"texture":0},"west":{"uv":[20,24,21,25],"texture":0},"up":{"uv":[6,17,4,16],"texture":0},"down":{"uv":[8,16,6,17],"texture":0}},"uuid":"c53e99bf-b9a5-1694-1107-ed9b43a5201b"},{"name":"cube","from":[3.625,8.875,10.25],"to":[4.625,10.875,11.25],"autouv":0,"color":1,"locked":false,"inflate":-0.25,"rotation":[0,0,-22.5],"origin":[4.125,9.375,10.75],"faces":{"north":{"uv":[8,16,9,18],"texture":0},"east":{"uv":[9,16,10,18],"texture":0},"south":{"uv":[10,16,11,18],"texture":0},"west":{"uv":[15,16,16,18],"texture":0},"up":{"uv":[25,25,24,24],"texture":0},"down":{"uv":[25,0,24,1],"texture":0}},"uuid":"5aff96b8-a68f-e715-307f-123ebdbe1524"},{"name":"cube","from":[5.0625,4.875,8.625],"to":[6.0625,5.875,9.625],"autouv":0,"color":7,"locked":false,"rotation":[-45,0,0],"origin":[5.5625,5.375,9.125],"faces":{"north":{"uv":[24,11,25,12],"texture":0},"east":{"uv":[24,12,25,13],"texture":0},"south":{"uv":[24,13,25,14],"texture":0},"west":{"uv":[24,14,25,15],"texture":0},"up":{"uv":[25,16,24,15],"texture":0},"down":{"uv":[25,16,24,17],"texture":0}},"uuid":"327b0261-e1ee-b953-ba9f-1ed5a81d9684"},{"name":"cube","from":[5,5,8.6875],"to":[6,7,9.6875],"autouv":0,"color":4,"locked":false,"inflate":-0.125,"rotation":[0,0,45],"origin":[5.5,5.5,9.1875],"faces":{"north":{"uv":[17,8,18,10],"texture":0},"east":{"uv":[17,10,18,12],"texture":0},"south":{"uv":[17,12,18,14],"texture":0},"west":{"uv":[2,18,3,20],"texture":0},"up":{"uv":[25,18,24,17],"texture":0},"down":{"uv":[25,18,24,19],"texture":0}},"uuid":"5b94782c-0719-0c32-e602-8a7055231826"},{"name":"cube","from":[3.0625,5.6875,8.875],"to":[5.0625,6.6875,9.875],"autouv":0,"color":3,"locked":false,"inflate":-0.1875,"rotation":[0,45,0],"origin":[4.5625,6.1875,9.375],"faces":{"north":{"uv":[17,14,19,15],"texture":0},"east":{"uv":[24,19,25,20],"texture":0},"south":{"uv":[17,16,19,17],"texture":0},"west":{"uv":[24,20,25,21],"texture":0},"up":{"uv":[10,19,8,18],"texture":0},"down":{"uv":[17,18,15,19],"texture":0}},"uuid":"1299e5dd-0471-2357-afb1-a400a99a2bea"},{"name":"cube","from":[3.3125,5.75,9.625],"to":[4.3125,7.75,10.625],"autouv":0,"color":1,"locked":false,"inflate":-0.25,"rotation":[0,0,-22.5],"origin":[3.8125,6.25,10.125],"faces":{"north":{"uv":[3,18,4,20],"texture":0},"east":{"uv":[10,18,11,20],"texture":0},"south":{"uv":[18,18,19,20],"texture":0},"west":{"uv":[18,0,19,2],"texture":0},"up":{"uv":[25,22,24,21],"texture":0},"down":{"uv":[25,22,24,23],"texture":0}},"uuid":"438c6b3e-23ee-1435-ff34-1015353981d8"},{"name":"cube","from":[6.0625,6.5,8.4375],"to":[7.0625,7.5,9.4375],"autouv":0,"color":7,"locked":false,"rotation":[-45,0,0],"origin":[6.5625,7,8.9375],"faces":{"north":{"uv":[9,25,10,26],"texture":0},"east":{"uv":[10,25,11,26],"texture":0},"south":{"uv":[11,25,12,26],"texture":0},"west":{"uv":[12,25,13,26],"texture":0},"up":{"uv":[14,26,13,25],"texture":0},"down":{"uv":[15,25,14,26],"texture":0}},"uuid":"0b46abbb-c9a5-209e-5262-b36c0b96606e"},{"name":"cube","from":[6.25,6.5625,6.125],"to":[7.25,7.5625,9.125],"autouv":0,"color":4,"locked":false,"inflate":-0.125,"rotation":[0,-45,0],"origin":[6.75,7.0625,8.625],"faces":{"north":{"uv":[15,25,16,26],"texture":0},"east":{"uv":[13,5,16,6],"texture":0},"south":{"uv":[16,25,17,26],"texture":0},"west":{"uv":[13,6,16,7],"texture":0},"up":{"uv":[7,16,6,13],"texture":0},"down":{"uv":[8,13,7,16],"texture":0}},"uuid":"10b015b4-29e3-4a29-a36a-a2bcbc6d5874"},{"name":"cube","from":[7.8125,6.75,6.8125],"to":[10.8125,7.75,7.8125],"autouv":0,"color":3,"locked":false,"inflate":-0.1875,"rotation":[0,0,45],"origin":[8.3125,7.25,7.3125],"faces":{"north":{"uv":[13,7,16,8],"texture":0},"east":{"uv":[17,25,18,26],"texture":0},"south":{"uv":[0,14,3,15],"texture":0},"west":{"uv":[18,25,19,26],"texture":0},"up":{"uv":[6,15,3,14],"texture":0},"down":{"uv":[11,14,8,15],"texture":0}},"uuid":"0edffab6-4e88-89bb-603d-f4e4d753443a"},{"name":"cube","from":[5.625,8.5,5.5],"to":[6.625,9.5,7.5],"autouv":0,"color":4,"locked":false,"inflate":-0.125,"rotation":[0,45,0],"origin":[6.125,9,7],"faces":{"north":{"uv":[25,5,26,6],"texture":0},"east":{"uv":[19,18,21,19],"texture":0},"south":{"uv":[25,6,26,7],"texture":0},"west":{"uv":[20,8,22,9],"texture":0},"up":{"uv":[21,11,20,9],"texture":0},"down":{"uv":[21,11,20,13],"texture":0}},"uuid":"210e95c2-75f1-ba06-a321-e724e5f2ed09"},{"name":"cube","from":[3.6875,8.6875,5.8125],"to":[5.6875,9.6875,6.8125],"autouv":0,"color":3,"locked":false,"inflate":-0.1875,"rotation":[0,0,-45],"origin":[5.1875,9.1875,6.3125],"faces":{"north":{"uv":[20,13,22,14],"texture":0},"east":{"uv":[25,7,26,8],"texture":0},"south":{"uv":[20,14,22,15],"texture":0},"west":{"uv":[25,8,26,9],"texture":0},"up":{"uv":[22,16,20,15],"texture":0},"down":{"uv":[22,16,20,17],"texture":0}},"uuid":"c17d1b39-e63e-2e1e-2921-bdb096b3e944"},{"name":"cube","from":[3.75,9.5625,5.8125],"to":[4.75,11.5625,6.8125],"autouv":0,"color":1,"locked":false,"inflate":-0.25,"rotation":[0,0,-22.5],"origin":[4.25,10.0625,6.3125],"faces":{"north":{"uv":[0,21,1,23],"texture":0},"east":{"uv":[1,21,2,23],"texture":0},"south":{"uv":[4,21,5,23],"texture":0},"west":{"uv":[5,21,6,23],"texture":0},"up":{"uv":[26,10,25,9],"texture":0},"down":{"uv":[26,10,25,11],"texture":0}},"uuid":"020ea22e-f41e-0d5b-a2e9-6b55bd5110cb"},{"name":"cube","from":[6.125,8.875,7.6875],"to":[8.125,9.875,8.6875],"autouv":0,"color":3,"locked":false,"inflate":-0.1875,"rotation":[0,0,45],"origin":[6.625,9.375,8.1875],"faces":{"north":{"uv":[20,19,22,20],"texture":0},"east":{"uv":[25,21,26,22],"texture":0},"south":{"uv":[21,20,23,21],"texture":0},"west":{"uv":[25,22,26,23],"texture":0},"up":{"uv":[4,23,2,22],"texture":0},"down":{"uv":[24,22,22,23],"texture":0}},"uuid":"ea0fb427-e5b1-25cd-61f2-385b57bdda6b"},{"name":"cube","from":[7.0625,9.75,7.6875],"to":[8.0625,11.75,8.6875],"autouv":0,"color":1,"locked":false,"inflate":-0.25,"rotation":[0,0,22.5],"origin":[7.5625,10.25,8.1875],"faces":{"north":{"uv":[10,22,11,24],"texture":0},"east":{"uv":[18,22,19,24],"texture":0},"south":{"uv":[20,22,21,24],"texture":0},"west":{"uv":[22,0,23,2],"texture":0},"up":{"uv":[26,24,25,23],"texture":0},"down":{"uv":[26,24,25,25],"texture":0}},"uuid":"368257be-88c2-ed2e-f53d-c1f5a9421193"},{"name":"cube","from":[5.75,7.6875,9.25],"to":[6.75,8.6875,10.25],"autouv":0,"color":7,"locked":false,"rotation":[45,0,0],"origin":[6.25,8.1875,9.75],"faces":{"north":{"uv":[10,26,11,27],"texture":0},"east":{"uv":[11,26,12,27],"texture":0},"south":{"uv":[12,26,13,27],"texture":0},"west":{"uv":[13,26,14,27],"texture":0},"up":{"uv":[15,27,14,26],"texture":0},"down":{"uv":[16,26,15,27],"texture":0}},"uuid":"38b301a4-caf8-8e0c-a598-5b203c6724dd"},{"name":"cube","from":[5.9375,7.75,9.5625],"to":[6.9375,8.75,12.5625],"autouv":0,"color":4,"locked":false,"inflate":-0.125,"rotation":[0,45,0],"origin":[6.4375,8.25,10.0625],"faces":{"north":{"uv":[16,26,17,27],"texture":0},"east":{"uv":[14,0,17,1],"texture":0},"south":{"uv":[17,26,18,27],"texture":0},"west":{"uv":[14,1,17,2],"texture":0},"up":{"uv":[15,11,14,8],"texture":0},"down":{"uv":[15,11,14,14],"texture":0}},"uuid":"9b2f84ce-a52c-04c3-3817-6a37438e3acc"},{"name":"cube","from":[7.4375,7.9375,10.875],"to":[10.4375,8.9375,11.875],"autouv":0,"color":3,"locked":false,"inflate":-0.1875,"rotation":[0,0,45],"origin":[7.9375,8.4375,11.375],"faces":{"north":{"uv":[0,15,3,16],"texture":0},"east":{"uv":[18,26,19,27],"texture":0},"south":{"uv":[3,15,6,16],"texture":0},"west":{"uv":[19,26,20,27],"texture":0},"up":{"uv":[11,16,8,15],"texture":0},"down":{"uv":[18,15,15,16],"texture":0}},"uuid":"15a266e4-bec3-f7b2-a2ae-6ba4113f7aa9"},{"name":"cube","from":[8.875,9.5625,10.8125],"to":[9.875,12.5625,11.8125],"autouv":0,"color":1,"locked":false,"inflate":-0.25,"rotation":[-22.5,0,0],"origin":[9.375,10.0625,11.3125],"faces":{"north":{"uv":[15,8,16,11],"texture":0},"east":{"uv":[15,11,16,14],"texture":0},"south":{"uv":[0,16,1,19],"texture":0},"west":{"uv":[1,16,2,19],"texture":0},"up":{"uv":[21,27,20,26],"texture":0},"down":{"uv":[22,26,21,27],"texture":0}},"uuid":"92668a48-0bdc-ad5f-4392-a405e3282837"},{"name":"cube","from":[9.125,8.5,6.8125],"to":[10.125,11.5,7.8125],"autouv":0,"color":1,"locked":false,"inflate":-0.25,"rotation":[0,0,22.5],"origin":[9.625,9,7.3125],"faces":{"north":{"uv":[11,14,12,17],"texture":0},"east":{"uv":[12,14,13,17],"texture":0},"south":{"uv":[13,14,14,17],"texture":0},"west":{"uv":[14,14,15,17],"texture":0},"up":{"uv":[20,26,19,25],"texture":0},"down":{"uv":[21,25,20,26],"texture":0}},"uuid":"9ca1ddd2-e3f4-6ff4-c424-d8eabbfe3687"}],"outliner":[{"name":"group","origin":[8,8,8],"uuid":"dd8aa3fa-17e2-a300-df1b-e302141f6a92","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"stalk","origin":[8,8,8],"uuid":"dea631b1-e511-8845-d8c9-dbc835c545bf","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["d3e2b9fd-6000-081a-8a3b-f8db9289b04c","78f7f340-0791-01bf-edaf-acc4b3d96143","4e80eb6c-aeee-3917-0e0f-f4fd040fc905","04e29fe3-1daa-63f1-66e4-c25e02725cb8","fc56371e-6a34-e20e-d231-841c97784855","bd05fe86-f928-635c-5b12-6ee5266f056e"]},{"name":"arm 1","origin":[6,9.46196296543686,8.078178363229018],"uuid":"83962541-910d-bf96-6a1a-c825a5e1171d","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["cd038ad0-591f-02c2-df8d-46f266af279c",{"name":"group","origin":[5.5,3.375,8],"uuid":"4209a0eb-569b-58e0-3901-2090edb06561","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["621d08ed-2f47-21aa-cdc1-db4d6693d9f5",{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"0854ea56-492c-797f-4ce4-145e6550630c","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["c53e99bf-b9a5-1694-1107-ed9b43a5201b",{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"be1b657a-9efd-1bd5-f2ad-7e016176da3c","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["5aff96b8-a68f-e715-307f-123ebdbe1524",{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"d9dfd6ad-12bd-4926-b05a-7ac28d6747cd","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"720a245b-237d-777d-2477-9a5b207dce90","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"4b7e4af7-983f-05e2-3e17-a0ba11043ca2","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[4.4375,5.8125,7.375],"uuid":"b1afbda3-3aa3-6e5a-a210-dd0b030bb4c5","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[4.4375,5.8125,7.375],"uuid":"7bae65cb-df5c-a78d-2fee-131be2d29a46","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[]}]}]}]}]}]}]}]}]},{"name":"arm 2","origin":[6,9.46196296543686,8.078178363229018],"uuid":"056149d5-da70-134e-52ac-afad7ae30c2a","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["327b0261-e1ee-b953-ba9f-1ed5a81d9684",{"name":"group","origin":[5.5,3.375,8],"uuid":"f2b00150-9184-f37d-91ea-7e7eeb69ae17","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["5b94782c-0719-0c32-e602-8a7055231826",{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"d96dd13e-dc1f-5f82-236f-851757332aeb","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["1299e5dd-0471-2357-afb1-a400a99a2bea",{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"b6ed812a-30f9-9db3-a3ee-332ffdd382b1","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["438c6b3e-23ee-1435-ff34-1015353981d8",{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"d83c724e-ca3a-0130-81ec-32477e2d345d","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"7e221a64-babf-a6f3-7b53-8abe482b43ad","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"4c6e192a-29ec-72a8-5c44-4181d6e5a8f0","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[4.4375,5.8125,7.375],"uuid":"b2a1231b-de90-36ab-c280-fa70a58217d8","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[4.4375,5.8125,7.375],"uuid":"159f09ce-7743-0b83-eabf-5b4e8b9680df","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[]}]}]}]}]}]}]}]}]},{"name":"arm 3","origin":[6,9.46196296543686,8.078178363229018],"uuid":"d0da8046-3d60-4afd-028c-f4b71d9ed778","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["0b46abbb-c9a5-209e-5262-b36c0b96606e",{"name":"group","origin":[5.5,3.375,8],"uuid":"cab60485-a79c-bb8c-bb05-5c90dad63a55","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["10b015b4-29e3-4a29-a36a-a2bcbc6d5874",{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"51365c6e-279a-c827-2b4c-2daf747e3286","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["0edffab6-4e88-89bb-603d-f4e4d753443a",{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"5cc443fb-597c-e7e2-2781-4c10401b09f7","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["9ca1ddd2-e3f4-6ff4-c424-d8eabbfe3687",{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"63aadcdd-cc59-197c-4ab0-b165f868b049","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"35779741-0172-6e92-7d7f-a94e9d1526ee","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"d0f8e7fe-f4cf-8f33-7300-775f456541d0","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[4.4375,5.8125,7.375],"uuid":"a2c43efa-47cb-cc64-7a69-1a81da91134e","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[4.4375,5.8125,7.375],"uuid":"a4eb35b5-0c14-afcd-60a5-c07739916f98","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[]}]}]}]}]}]}]}]}]},{"name":"arm 4","origin":[6,9.46196296543686,8.078178363229018],"uuid":"11803fc3-aad0-3e45-dc14-46c1a2d37614","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[5.5,3.375,8],"uuid":"b81f7d21-4cde-babf-3f13-0a389d1814fa","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["210e95c2-75f1-ba06-a321-e724e5f2ed09",{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"c2061bee-5535-01d9-0fdb-265b225243a0","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["c17d1b39-e63e-2e1e-2921-bdb096b3e944",{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"25197f56-a7f6-7719-7a60-bc24d3bbd9e4","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["020ea22e-f41e-0d5b-a2e9-6b55bd5110cb",{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"ceee3cbe-b671-77b4-11ab-d32c31c82929","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"bb234386-b168-cd1f-8243-7ab2e81f64c9","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"f5f57660-4ad7-4a21-2fa0-6ff21a99a2cf","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[4.4375,5.8125,7.375],"uuid":"cc5dd972-3478-3eb2-2a17-9bd2ba966726","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[4.4375,5.8125,7.375],"uuid":"cf342518-65f0-a58b-51ff-2e47fb04c32f","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[]}]}]}]}]}]}]}]}]},{"name":"arm 5","origin":[6,9.46196296543686,8.078178363229018],"uuid":"1f0dc130-ce0a-aa2e-8ca7-07b186d844da","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[5.5,3.375,8],"uuid":"672cdf08-2e98-17a6-5573-2da06c5e749c","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"6906935f-5118-d5d8-8a03-f6187561e771","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["ea0fb427-e5b1-25cd-61f2-385b57bdda6b",{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"bf94df74-2643-71ef-5578-6e457053d136","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["368257be-88c2-ed2e-f53d-c1f5a9421193",{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"73edf4eb-f403-c7fc-05d7-18f24ce86948","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"e9588671-b9cf-a953-5ca6-8c1bfb056848","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"b47ba2a0-09bb-d0f3-3349-bc19b3a1960e","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[4.4375,5.8125,7.375],"uuid":"ae2e2a3b-2703-ebc9-272d-1de37ed7e27b","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[4.4375,5.8125,7.375],"uuid":"d45902b2-3cd7-b777-e51e-643e2180578c","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[]}]}]}]}]}]}]}]}]},{"name":"arm 6","origin":[6,9.46196296543686,8.078178363229018],"uuid":"18adb42f-afd5-900b-6596-b7c6f19643fe","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["38b301a4-caf8-8e0c-a598-5b203c6724dd",{"name":"group","origin":[5.5,3.375,8],"uuid":"5e75a0c6-c961-8868-8960-73df6881208d","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["9b2f84ce-a52c-04c3-3817-6a37438e3acc",{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"ae828b64-ca3c-3f6d-a1b8-d6c12ab5b2a4","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["15a266e4-bec3-f7b2-a2ae-6ba4113f7aa9",{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"6a9b1c7b-6ba2-5bb0-4636-8fc7ee3450af","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["92668a48-0bdc-ad5f-4392-a405e3282837",{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"6b5dd2d5-530d-eddd-5faf-a30c5db95b1c","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"ab528a7a-09f2-d318-6922-670ac3b0528d","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[5.375,3.5625,7.875],"uuid":"4fb6a012-b11f-e857-d38c-4a2c60beba61","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[4.4375,5.8125,7.375],"uuid":"f6494360-0985-c457-e272-5078630d059e","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[4.4375,5.8125,7.375],"uuid":"2da5028f-f248-3c76-d665-fd62f156d77c","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[]}]}]}]}]}]}]}]}]}]}],"textures":[{"path":"/Users/eliot/Dropbox (Personal)/StormlightCraft/resources/main/assets/stormlight/textures/block/prickletac.png","name":"prickletac.png","folder":"block","namespace":"stormlight","id":"0","particle":true,"visible":true,"mode":"bitmap","saved":true,"uuid":"74b0383f-2805-cceb-b44f-e82a18685ebd","source":"data:image/png;base64,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"}]} \ No newline at end of file diff --git a/blockbench/surgebinding/blocks/prickletac/prickletac_hitbox.bbmodel b/blockbench/surgebinding/blocks/prickletac/prickletac_hitbox.bbmodel new file mode 100644 index 000000000..c9c094977 --- /dev/null +++ b/blockbench/surgebinding/blocks/prickletac/prickletac_hitbox.bbmodel @@ -0,0 +1 @@ +{"meta":{"format_version":"4.5","model_format":"java_block","box_uv":false},"name":"prickletac1","parent":"","ambientocclusion":true,"front_gui_light":false,"visible_box":[1,1,0],"variable_placeholders":"","variable_placeholder_buttons":[],"unhandled_root_fields":{},"resolution":{"width":32,"height":32},"elements":[{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[4,0,6],"to":[9,11,11],"autouv":1,"color":9,"origin":[0,0,0],"faces":{"north":{"uv":[0,0,5,11]},"east":{"uv":[0,0,5,11]},"south":{"uv":[0,0,5,11]},"west":{"uv":[0,0,5,11]},"up":{"uv":[0,0,5,5]},"down":{"uv":[0,0,5,5]}},"type":"cube","uuid":"47c9cd48-18be-cb0e-67d8-d8fba7dba490"}],"outliner":["47c9cd48-18be-cb0e-67d8-d8fba7dba490"],"textures":[{"path":"/home/deck/dev/minecraft/cosmere/src/surgebinding/resources/assets/surgebinding/textures/block/prickletac.png","name":"prickletac.png","folder":"block","namespace":"surgebinding","id":"0","particle":true,"render_mode":"default","render_sides":"auto","frame_time":1,"frame_order_type":"loop","frame_order":"","frame_interpolate":false,"visible":true,"mode":"bitmap","saved":true,"uuid":"deadfabd-3d13-3dc6-232d-95d8d4be74f7","relative_path":"../../../textures/block/prickletac.png","source":"data:image/png;base64,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"}]} \ No newline at end of file diff --git a/blockbench/surgebinding/blocks/rockbud_variant/CREDITS.txt b/blockbench/surgebinding/blocks/rockbud_variant/CREDITS.txt new file mode 100644 index 000000000..8582deae4 --- /dev/null +++ b/blockbench/surgebinding/blocks/rockbud_variant/CREDITS.txt @@ -0,0 +1 @@ +AlaharranHonor - Model and Texture \ No newline at end of file diff --git a/blockbench/surgebinding/blocks/rockbud_variant/RockBud1.bbmodel b/blockbench/surgebinding/blocks/rockbud_variant/RockBud1.bbmodel new file mode 100644 index 000000000..f095e404e --- /dev/null +++ b/blockbench/surgebinding/blocks/rockbud_variant/RockBud1.bbmodel @@ -0,0 +1 @@ +{"meta":{"format_version":"4.5","model_format":"java_block","box_uv":false},"name":"rockbud_variant1","parent":"","ambientocclusion":true,"front_gui_light":false,"visible_box":[1,1,0],"variable_placeholders":"","variable_placeholder_buttons":[],"unhandled_root_fields":{},"resolution":{"width":64,"height":64},"elements":[{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[6,0,6],"to":[10,1,10],"autouv":0,"color":0,"origin":[15,8,15],"faces":{"north":{"uv":[20,19,24,20],"texture":0},"east":{"uv":[32,27,36,28],"texture":0},"south":{"uv":[32,30,36,31],"texture":0},"west":{"uv":[33,11,37,12],"texture":0},"up":{"uv":[28,28,24,24],"texture":0},"down":{"uv":[28,19,24,23],"texture":0}},"type":"cube","uuid":"dfc6c4ee-9b20-b1cf-b68a-68840ab71ff3"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[5,1,5],"to":[11,2,11],"autouv":0,"color":0,"origin":[15,9,15],"faces":{"north":{"uv":[14,29,20,30],"texture":0},"east":{"uv":[0,30,6,31],"texture":0},"south":{"uv":[14,30,20,31],"texture":0},"west":{"uv":[20,30,26,31],"texture":0},"up":{"uv":[14,14,8,8],"texture":0},"down":{"uv":[14,0,8,6],"texture":0}},"type":"cube","uuid":"81ab3df0-7a30-883e-da3f-5edbd1d0d56b"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[4,2,4],"to":[12,4,12],"autouv":0,"color":0,"origin":[15,10,15],"faces":{"north":{"uv":[25,0,33,2],"texture":0},"east":{"uv":[25,2,33,4],"texture":0},"south":{"uv":[25,4,33,6],"texture":0},"west":{"uv":[25,6,33,8],"texture":0},"up":{"uv":[8,8,0,0],"texture":0},"down":{"uv":[8,8,0,16],"texture":0}},"type":"cube","uuid":"acd748e1-74e1-aa79-3d40-45a5510e4180"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[0,3,4],"to":[4,4,12],"autouv":0,"color":7,"rotation":[0,0,45],"origin":[4,3.5,8],"faces":{"north":{"uv":[34,18,38,19],"texture":0},"east":{"uv":[24,23,32,24],"texture":0},"south":{"uv":[34,32,38,33],"texture":0},"west":{"uv":[25,8,33,9],"texture":0},"up":{"uv":[18,8,14,0],"texture":0},"down":{"uv":[4,16,0,24],"texture":0}},"type":"cube","uuid":"3975b324-14b7-87bd-bf2b-7c54047037b4"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-1.474873734152916,0.3180194846605353,5],"to":[1.525126265847084,1.3180194846605353,11],"autouv":0,"color":7,"origin":[4.48743686707646,4.426776695296636,8],"faces":{"north":{"uv":[32,42,35,43],"texture":0},"east":{"uv":[6,31,12,32],"texture":0},"south":{"uv":[35,42,38,43],"texture":0},"west":{"uv":[12,31,18,32],"texture":0},"up":{"uv":[25,6,22,0],"texture":0},"down":{"uv":[25,6,22,12],"texture":0}},"type":"cube","uuid":"cf9a3930-a8e2-b370-d3a6-3b50c144e0f3"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[12,3,4],"to":[16,4,12],"autouv":0,"color":7,"rotation":[0,0,-45],"origin":[12,3.5,8],"faces":{"north":{"uv":[34,33,38,34],"texture":0},"east":{"uv":[25,9,33,10],"texture":0},"south":{"uv":[10,35,14,36],"texture":0},"west":{"uv":[25,10,33,11],"texture":0},"up":{"uv":[8,24,4,16],"texture":0},"down":{"uv":[22,0,18,8],"texture":0}},"type":"cube","uuid":"57687dae-1a12-a202-cd99-2dc3cf048441"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[14.474873734152915,0.3180194846605353,5],"to":[17.474873734152915,1.3180194846605353,11],"autouv":0,"color":7,"origin":[11.512563132923539,4.426776695296636,8],"faces":{"north":{"uv":[38,42,41,43],"texture":0},"east":{"uv":[18,31,24,32],"texture":0},"south":{"uv":[41,42,44,43],"texture":0},"west":{"uv":[24,31,30,32],"texture":0},"up":{"uv":[3,30,0,24],"texture":0},"down":{"uv":[6,24,3,30],"texture":0}},"type":"cube","uuid":"bc622fef-6bb5-1561-de8e-c5382d1da27e"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[4,3,12],"to":[12,4,16],"autouv":0,"color":7,"rotation":[45,0,0],"origin":[8,3.5,12],"faces":{"north":{"uv":[25,11,33,12],"texture":0},"east":{"uv":[24,35,28,36],"texture":0},"south":{"uv":[26,16,34,17],"texture":0},"west":{"uv":[35,0,39,1],"texture":0},"up":{"uv":[22,12,14,8],"texture":0},"down":{"uv":[16,20,8,24],"texture":0}},"type":"cube","uuid":"4d18cc21-a271-0182-26ea-ce7b676bc5ea"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[5,0.3180194846605353,14.474873734152915],"to":[11,1.3180194846605353,17.474873734152915],"autouv":0,"color":7,"origin":[8,4.426776695296636,11.512563132923539],"faces":{"north":{"uv":[30,31,36,32],"texture":0},"east":{"uv":[42,3,45,4],"texture":0},"south":{"uv":[0,32,6,33],"texture":0},"west":{"uv":[42,4,45,5],"texture":0},"up":{"uv":[26,19,20,16],"texture":0},"down":{"uv":[12,24,6,27],"texture":0}},"type":"cube","uuid":"aa1fa152-145a-c86f-6a0a-094c82d8c0f8"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[4,3,0],"to":[12,4,4],"autouv":0,"color":7,"rotation":[-45,0,0],"origin":[8,3.5,4],"faces":{"north":{"uv":[26,17,34,18],"texture":0},"east":{"uv":[35,1,39,2],"texture":0},"south":{"uv":[26,18,34,19],"texture":0},"west":{"uv":[35,2,39,3],"texture":0},"up":{"uv":[24,24,16,20],"texture":0},"down":{"uv":[28,12,20,16],"texture":0}},"type":"cube","uuid":"e567dd13-7520-469c-15be-6fc8e11c1ce5"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[5,0.3180194846605353,-1.474873734152915],"to":[11,1.3180194846605353,1.525126265847085],"autouv":0,"color":7,"origin":[8,4.426776695296636,4.48743686707646],"faces":{"north":{"uv":[6,32,12,33],"texture":0},"east":{"uv":[42,5,45,6],"texture":0},"south":{"uv":[12,32,18,33],"texture":0},"west":{"uv":[42,6,45,7],"texture":0},"up":{"uv":[18,27,12,24],"texture":0},"down":{"uv":[24,24,18,27],"texture":0}},"type":"cube","uuid":"e4f56095-3386-926d-4c63-9c8d62a784be"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[8,5.6875,6],"to":[8,6.6875,10],"autouv":0,"color":5,"origin":[16,13.6875,16],"faces":{"north":{"uv":[0,0,0,1],"texture":0},"east":{"uv":[35,12,39,13],"texture":0},"south":{"uv":[0,0,0,1],"texture":0},"west":{"uv":[35,13,39,14],"texture":0},"up":{"uv":[0,4,0,0],"texture":0},"down":{"uv":[0,0,0,4],"texture":0}},"type":"cube","uuid":"e34e1f9d-4da4-26d1-374c-0a10ccf20445"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[8,5.6875,6],"to":[8,6.6875,10],"autouv":0,"color":5,"rotation":[0,22.5,0],"origin":[8,6.1875,8],"faces":{"north":{"uv":[0,0,0,1],"texture":0},"east":{"uv":[35,14,39,15],"texture":0},"south":{"uv":[0,0,0,1],"texture":0},"west":{"uv":[35,15,39,16],"texture":0},"up":{"uv":[0,4,0,0],"texture":0},"down":{"uv":[0,0,0,4],"texture":0}},"type":"cube","uuid":"25dfcc91-bb31-b869-922b-3218ef1da824"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[8,5.6875,6],"to":[8,6.6875,10],"autouv":0,"color":5,"rotation":[0,45,0],"origin":[8,6.1875,8],"faces":{"north":{"uv":[0,0,0,1],"texture":0},"east":{"uv":[35,19,39,20],"texture":0},"south":{"uv":[0,0,0,1],"texture":0},"west":{"uv":[35,20,39,21],"texture":0},"up":{"uv":[0,4,0,0],"texture":0},"down":{"uv":[0,0,0,4],"texture":0}},"type":"cube","uuid":"2775476f-aeed-93a8-7b07-bfa3c476eec5"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[6,5.6875,8],"to":[10,6.6875,8],"autouv":0,"color":5,"rotation":[0,-22.5,0],"origin":[8,6.1875,8],"faces":{"north":{"uv":[35,21,39,22],"texture":0},"east":{"uv":[0,0,0,1],"texture":0},"south":{"uv":[35,22,39,23],"texture":0},"west":{"uv":[0,0,0,1],"texture":0},"up":{"uv":[4,0,0,0],"texture":0},"down":{"uv":[4,0,0,0],"texture":0}},"type":"cube","uuid":"c9fcc546-4b66-fb1f-a53f-8e66b8d49410"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[6,5.6875,8],"to":[10,6.6875,8],"autouv":0,"color":5,"origin":[8,6.1875,8],"faces":{"north":{"uv":[35,23,39,24],"texture":0},"east":{"uv":[0,0,0,1],"texture":0},"south":{"uv":[35,24,39,25],"texture":0},"west":{"uv":[0,0,0,1],"texture":0},"up":{"uv":[4,0,0,0],"texture":0},"down":{"uv":[4,0,0,0],"texture":0}},"type":"cube","uuid":"e791d8c9-01ef-1460-2db0-3b320bea6b0b"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[6,5.6875,8],"to":[10,6.6875,8],"autouv":0,"color":5,"rotation":[0,22.5,0],"origin":[8,6.1875,8],"faces":{"north":{"uv":[35,25,39,26],"texture":0},"east":{"uv":[0,0,0,1],"texture":0},"south":{"uv":[35,26,39,27],"texture":0},"west":{"uv":[0,0,0,1],"texture":0},"up":{"uv":[4,0,0,0],"texture":0},"down":{"uv":[4,0,0,0],"texture":0}},"type":"cube","uuid":"3ddf4784-aa69-4b17-e873-7aca028ab522"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[6,5.6875,8],"to":[10,6.6875,8],"autouv":0,"color":5,"rotation":[0,45,0],"origin":[8,6.1875,8],"faces":{"north":{"uv":[4,36,8,37],"texture":0},"east":{"uv":[0,0,0,1],"texture":0},"south":{"uv":[8,36,12,37],"texture":0},"west":{"uv":[0,0,0,1],"texture":0},"up":{"uv":[4,0,0,0],"texture":0},"down":{"uv":[4,0,0,0],"texture":0}},"type":"cube","uuid":"ad970ae3-9c92-98f8-eb5f-7d45e2bc3c51"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[8,5.6875,6],"to":[8,6.6875,10],"autouv":0,"color":5,"rotation":[0,-22.5,0],"origin":[8,6.1875,8],"faces":{"north":{"uv":[0,0,0,1],"texture":0},"east":{"uv":[12,36,16,37],"texture":0},"south":{"uv":[0,0,0,1],"texture":0},"west":{"uv":[16,36,20,37],"texture":0},"up":{"uv":[0,4,0,0],"texture":0},"down":{"uv":[0,0,0,4],"texture":0}},"type":"cube","uuid":"70bf14b7-3947-53b4-4807-727ff74304c2"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[11,5.5625,8],"to":[11,6.5625,12],"autouv":0,"color":5,"origin":[19,13.5625,18],"faces":{"north":{"uv":[0,0,0,1],"texture":0},"east":{"uv":[20,36,24,37],"texture":0},"south":{"uv":[0,0,0,1],"texture":0},"west":{"uv":[24,36,28,37],"texture":0},"up":{"uv":[0,4,0,0],"texture":0},"down":{"uv":[0,0,0,4],"texture":0}},"type":"cube","uuid":"6f6f16c3-af8b-f7d9-21f4-4ab43e6a5b70"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[11,5.5625,8],"to":[11,6.5625,12],"autouv":0,"color":5,"rotation":[0,22.5,0],"origin":[11,6.0625,10],"faces":{"north":{"uv":[0,0,0,1],"texture":0},"east":{"uv":[28,36,32,37],"texture":0},"south":{"uv":[0,0,0,1],"texture":0},"west":{"uv":[32,36,36,37],"texture":0},"up":{"uv":[0,4,0,0],"texture":0},"down":{"uv":[0,0,0,4],"texture":0}},"type":"cube","uuid":"04232ec0-f6b4-8398-5464-d93b43e6cbde"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[11,5.5625,8],"to":[11,6.5625,12],"autouv":0,"color":5,"rotation":[0,45,0],"origin":[11,6.0625,10],"faces":{"north":{"uv":[0,0,0,1],"texture":0},"east":{"uv":[36,36,40,37],"texture":0},"south":{"uv":[0,0,0,1],"texture":0},"west":{"uv":[36,3,40,4],"texture":0},"up":{"uv":[0,4,0,0],"texture":0},"down":{"uv":[0,0,0,4],"texture":0}},"type":"cube","uuid":"148e5978-8e5d-42db-b6ae-800c0f367b0f"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[9,5.5625,10],"to":[13,6.5625,10],"autouv":0,"color":5,"rotation":[0,-22.5,0],"origin":[11,6.0625,10],"faces":{"north":{"uv":[36,4,40,5],"texture":0},"east":{"uv":[0,0,0,1],"texture":0},"south":{"uv":[36,5,40,6],"texture":0},"west":{"uv":[0,0,0,1],"texture":0},"up":{"uv":[4,0,0,0],"texture":0},"down":{"uv":[4,0,0,0],"texture":0}},"type":"cube","uuid":"91ebaaed-bbd8-5fab-7aaa-bc9fca61799a"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[9,5.5625,10],"to":[13,6.5625,10],"autouv":0,"color":5,"origin":[11,6.0625,10],"faces":{"north":{"uv":[36,6,40,7],"texture":0},"east":{"uv":[0,0,0,1],"texture":0},"south":{"uv":[36,7,40,8],"texture":0},"west":{"uv":[0,0,0,1],"texture":0},"up":{"uv":[4,0,0,0],"texture":0},"down":{"uv":[4,0,0,0],"texture":0}},"type":"cube","uuid":"376eb963-7b29-7ce1-c844-221008fc692c"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[9,5.5625,10],"to":[13,6.5625,10],"autouv":0,"color":5,"rotation":[0,22.5,0],"origin":[11,6.0625,10],"faces":{"north":{"uv":[36,8,40,9],"texture":0},"east":{"uv":[0,0,0,1],"texture":0},"south":{"uv":[36,9,40,10],"texture":0},"west":{"uv":[0,0,0,1],"texture":0},"up":{"uv":[4,0,0,0],"texture":0},"down":{"uv":[4,0,0,0],"texture":0}},"type":"cube","uuid":"9c4ce39c-73c7-1ac1-ded1-978f005e95e8"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[9,5.5625,10],"to":[13,6.5625,10],"autouv":0,"color":5,"rotation":[0,45,0],"origin":[11,6.0625,10],"faces":{"north":{"uv":[36,10,40,11],"texture":0},"east":{"uv":[0,0,0,1],"texture":0},"south":{"uv":[36,27,40,28],"texture":0},"west":{"uv":[0,0,0,1],"texture":0},"up":{"uv":[4,0,0,0],"texture":0},"down":{"uv":[4,0,0,0],"texture":0}},"type":"cube","uuid":"52e42f06-0b3d-8065-4d01-e4fb5ec1ec6a"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[11,5.5625,8],"to":[11,6.5625,12],"autouv":0,"color":5,"rotation":[0,-22.5,0],"origin":[11,6.0625,10],"faces":{"north":{"uv":[0,0,0,1],"texture":0},"east":{"uv":[36,28,40,29],"texture":0},"south":{"uv":[0,0,0,1],"texture":0},"west":{"uv":[36,29,40,30],"texture":0},"up":{"uv":[0,4,0,0],"texture":0},"down":{"uv":[0,0,0,4],"texture":0}},"type":"cube","uuid":"e3a66ff5-1b31-ba0f-acb5-42954541539c"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[10,5.25,4],"to":[10,6.25,8],"autouv":0,"color":5,"origin":[18,13.25,14],"faces":{"north":{"uv":[0,0,0,1],"texture":0},"east":{"uv":[36,30,40,31],"texture":0},"south":{"uv":[0,0,0,1],"texture":0},"west":{"uv":[36,31,40,32],"texture":0},"up":{"uv":[0,4,0,0],"texture":0},"down":{"uv":[0,0,0,4],"texture":0}},"type":"cube","uuid":"9b669811-45ef-526c-1d24-f2bb056d4a75"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[10,5.25,4],"to":[10,6.25,8],"autouv":0,"color":5,"rotation":[0,22.5,0],"origin":[10,5.75,6],"faces":{"north":{"uv":[0,0,0,1],"texture":0},"east":{"uv":[4,37,8,38],"texture":0},"south":{"uv":[0,0,0,1],"texture":0},"west":{"uv":[8,37,12,38],"texture":0},"up":{"uv":[0,4,0,0],"texture":0},"down":{"uv":[0,0,0,4],"texture":0}},"type":"cube","uuid":"59dd3686-83e8-a0fe-8c54-e11a67c2ed76"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[10,5.25,4],"to":[10,6.25,8],"autouv":0,"color":5,"rotation":[0,45,0],"origin":[10,5.75,6],"faces":{"north":{"uv":[0,0,0,1],"texture":0},"east":{"uv":[12,37,16,38],"texture":0},"south":{"uv":[0,0,0,1],"texture":0},"west":{"uv":[16,37,20,38],"texture":0},"up":{"uv":[0,4,0,0],"texture":0},"down":{"uv":[0,0,0,4],"texture":0}},"type":"cube","uuid":"876d1ce4-389d-bf2a-c4ca-25522c75f295"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[8,5.25,6],"to":[12,6.25,6],"autouv":0,"color":5,"rotation":[0,-22.5,0],"origin":[10,5.75,6],"faces":{"north":{"uv":[20,37,24,38],"texture":0},"east":{"uv":[0,0,0,1],"texture":0},"south":{"uv":[24,37,28,38],"texture":0},"west":{"uv":[0,0,0,1],"texture":0},"up":{"uv":[4,0,0,0],"texture":0},"down":{"uv":[4,0,0,0],"texture":0}},"type":"cube","uuid":"d2361668-7e4e-a20f-83ae-f189e1da3b89"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[8,5.25,6],"to":[12,6.25,6],"autouv":0,"color":5,"origin":[10,5.75,6],"faces":{"north":{"uv":[28,37,32,38],"texture":0},"east":{"uv":[0,0,0,1],"texture":0},"south":{"uv":[32,37,36,38],"texture":0},"west":{"uv":[0,0,0,1],"texture":0},"up":{"uv":[4,0,0,0],"texture":0},"down":{"uv":[4,0,0,0],"texture":0}},"type":"cube","uuid":"5f4d4f3f-431e-1ae2-5a8e-af88f7512845"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[8,5.25,6],"to":[12,6.25,6],"autouv":0,"color":5,"rotation":[0,22.5,0],"origin":[10,5.75,6],"faces":{"north":{"uv":[36,37,40,38],"texture":0},"east":{"uv":[0,0,0,1],"texture":0},"south":{"uv":[37,11,41,12],"texture":0},"west":{"uv":[0,0,0,1],"texture":0},"up":{"uv":[4,0,0,0],"texture":0},"down":{"uv":[4,0,0,0],"texture":0}},"type":"cube","uuid":"03214d6e-1fba-c29d-44e4-1ed91f3a852f"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[8,5.25,6],"to":[12,6.25,6],"autouv":0,"color":5,"rotation":[0,45,0],"origin":[10,5.75,6],"faces":{"north":{"uv":[37,16,41,17],"texture":0},"east":{"uv":[0,0,0,1],"texture":0},"south":{"uv":[37,17,41,18],"texture":0},"west":{"uv":[0,0,0,1],"texture":0},"up":{"uv":[4,0,0,0],"texture":0},"down":{"uv":[4,0,0,0],"texture":0}},"type":"cube","uuid":"e3ce1612-3149-1ae5-3225-dc300c3ebe8c"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[10,5.25,4],"to":[10,6.25,8],"autouv":0,"color":5,"rotation":[0,-22.5,0],"origin":[10,5.75,6],"faces":{"north":{"uv":[0,0,0,1],"texture":0},"east":{"uv":[37,34,41,35],"texture":0},"south":{"uv":[0,0,0,1],"texture":0},"west":{"uv":[37,35,41,36],"texture":0},"up":{"uv":[0,4,0,0],"texture":0},"down":{"uv":[0,0,0,4],"texture":0}},"type":"cube","uuid":"47492c45-ac83-d3b6-15f2-99e570e18cda"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[6,5.3125,9],"to":[6,6.3125,13],"autouv":0,"color":5,"origin":[14,13.3125,19],"faces":{"north":{"uv":[0,0,0,1],"texture":0},"east":{"uv":[0,38,4,39],"texture":0},"south":{"uv":[0,0,0,1],"texture":0},"west":{"uv":[4,38,8,39],"texture":0},"up":{"uv":[0,4,0,0],"texture":0},"down":{"uv":[0,0,0,4],"texture":0}},"type":"cube","uuid":"27a0ebce-a8f7-2a0b-e37e-2bd7cd0326ce"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[6,5.3125,9],"to":[6,6.3125,13],"autouv":0,"color":5,"rotation":[0,22.5,0],"origin":[6,5.8125,11],"faces":{"north":{"uv":[0,0,0,1],"texture":0},"east":{"uv":[8,38,12,39],"texture":0},"south":{"uv":[0,0,0,1],"texture":0},"west":{"uv":[12,38,16,39],"texture":0},"up":{"uv":[0,4,0,0],"texture":0},"down":{"uv":[0,0,0,4],"texture":0}},"type":"cube","uuid":"d71827db-0605-4130-b9b0-c1cf2bf215cb"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[6,5.3125,9],"to":[6,6.3125,13],"autouv":0,"color":5,"rotation":[0,45,0],"origin":[6,5.8125,11],"faces":{"north":{"uv":[0,0,0,1],"texture":0},"east":{"uv":[16,38,20,39],"texture":0},"south":{"uv":[0,0,0,1],"texture":0},"west":{"uv":[20,38,24,39],"texture":0},"up":{"uv":[0,4,0,0],"texture":0},"down":{"uv":[0,0,0,4],"texture":0}},"type":"cube","uuid":"51978212-2987-50cb-cc3b-b7ed49eba1f3"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[4,5.3125,11],"to":[8,6.3125,11],"autouv":0,"color":5,"rotation":[0,-22.5,0],"origin":[6,5.8125,11],"faces":{"north":{"uv":[24,38,28,39],"texture":0},"east":{"uv":[0,0,0,1],"texture":0},"south":{"uv":[28,38,32,39],"texture":0},"west":{"uv":[0,0,0,1],"texture":0},"up":{"uv":[4,0,0,0],"texture":0},"down":{"uv":[4,0,0,0],"texture":0}},"type":"cube","uuid":"fa0d9911-cb56-3632-3af5-e1a6ec9c851f"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[4,5.3125,11],"to":[8,6.3125,11],"autouv":0,"color":5,"origin":[6,5.8125,11],"faces":{"north":{"uv":[32,38,36,39],"texture":0},"east":{"uv":[0,0,0,1],"texture":0},"south":{"uv":[36,38,40,39],"texture":0},"west":{"uv":[0,0,0,1],"texture":0},"up":{"uv":[4,0,0,0],"texture":0},"down":{"uv":[4,0,0,0],"texture":0}},"type":"cube","uuid":"fdee570b-b3e8-1d20-3115-6dfb98574579"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[4,5.3125,11],"to":[8,6.3125,11],"autouv":0,"color":5,"rotation":[0,22.5,0],"origin":[6,5.8125,11],"faces":{"north":{"uv":[38,18,42,19],"texture":0},"east":{"uv":[0,0,0,1],"texture":0},"south":{"uv":[38,32,42,33],"texture":0},"west":{"uv":[0,0,0,1],"texture":0},"up":{"uv":[4,0,0,0],"texture":0},"down":{"uv":[4,0,0,0],"texture":0}},"type":"cube","uuid":"8b159038-c95e-1448-8b0b-eb386f306024"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[4,5.3125,11],"to":[8,6.3125,11],"autouv":0,"color":5,"rotation":[0,45,0],"origin":[6,5.8125,11],"faces":{"north":{"uv":[38,33,42,34],"texture":0},"east":{"uv":[0,0,0,1],"texture":0},"south":{"uv":[0,39,4,40],"texture":0},"west":{"uv":[0,0,0,1],"texture":0},"up":{"uv":[4,0,0,0],"texture":0},"down":{"uv":[4,0,0,0],"texture":0}},"type":"cube","uuid":"079eea1d-eefb-6181-d7f8-d79ec44fca01"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[6,5.3125,9],"to":[6,6.3125,13],"autouv":0,"color":5,"rotation":[0,-22.5,0],"origin":[6,5.8125,11],"faces":{"north":{"uv":[0,0,0,1],"texture":0},"east":{"uv":[4,39,8,40],"texture":0},"south":{"uv":[0,0,0,1],"texture":0},"west":{"uv":[8,39,12,40],"texture":0},"up":{"uv":[0,4,0,0],"texture":0},"down":{"uv":[0,0,0,4],"texture":0}},"type":"cube","uuid":"58fc7f46-3e1d-f880-c88c-7c5c81b99d5a"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[6,5.3125,3],"to":[6,6.3125,7],"autouv":0,"color":5,"origin":[14,13.3125,13],"faces":{"north":{"uv":[0,0,0,1],"texture":0},"east":{"uv":[12,39,16,40],"texture":0},"south":{"uv":[0,0,0,1],"texture":0},"west":{"uv":[16,39,20,40],"texture":0},"up":{"uv":[0,4,0,0],"texture":0},"down":{"uv":[0,0,0,4],"texture":0}},"type":"cube","uuid":"7dd93918-5f56-3428-38bf-781b0247c096"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[6,5.3125,3],"to":[6,6.3125,7],"autouv":0,"color":5,"rotation":[0,22.5,0],"origin":[6,5.8125,5],"faces":{"north":{"uv":[0,0,0,1],"texture":0},"east":{"uv":[20,39,24,40],"texture":0},"south":{"uv":[0,0,0,1],"texture":0},"west":{"uv":[24,39,28,40],"texture":0},"up":{"uv":[0,4,0,0],"texture":0},"down":{"uv":[0,0,0,4],"texture":0}},"type":"cube","uuid":"31b64f78-1c83-9c22-29b1-cac3d06f6282"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[6,5.3125,3],"to":[6,6.3125,7],"autouv":0,"color":5,"rotation":[0,45,0],"origin":[6,5.8125,5],"faces":{"north":{"uv":[0,0,0,1],"texture":0},"east":{"uv":[28,39,32,40],"texture":0},"south":{"uv":[0,0,0,1],"texture":0},"west":{"uv":[32,39,36,40],"texture":0},"up":{"uv":[0,4,0,0],"texture":0},"down":{"uv":[0,0,0,4],"texture":0}},"type":"cube","uuid":"0ca525b0-326d-abe3-84a2-f8905c942be4"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[4,5.3125,5],"to":[8,6.3125,5],"autouv":0,"color":5,"rotation":[0,-22.5,0],"origin":[6,5.8125,5],"faces":{"north":{"uv":[36,39,40,40],"texture":0},"east":{"uv":[0,0,0,1],"texture":0},"south":{"uv":[39,0,43,1],"texture":0},"west":{"uv":[0,0,0,1],"texture":0},"up":{"uv":[4,0,0,0],"texture":0},"down":{"uv":[4,0,0,0],"texture":0}},"type":"cube","uuid":"2e7546ec-d49c-9cb0-8b5d-fd0de5f0e316"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[4,5.3125,5],"to":[8,6.3125,5],"autouv":0,"color":5,"origin":[6,5.8125,5],"faces":{"north":{"uv":[39,1,43,2],"texture":0},"east":{"uv":[0,0,0,1],"texture":0},"south":{"uv":[39,2,43,3],"texture":0},"west":{"uv":[0,0,0,1],"texture":0},"up":{"uv":[4,0,0,0],"texture":0},"down":{"uv":[4,0,0,0],"texture":0}},"type":"cube","uuid":"2f567167-8e2f-0fd4-2095-321c6b7ae9da"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[4,5.3125,5],"to":[8,6.3125,5],"autouv":0,"color":5,"rotation":[0,22.5,0],"origin":[6,5.8125,5],"faces":{"north":{"uv":[39,12,43,13],"texture":0},"east":{"uv":[0,0,0,1],"texture":0},"south":{"uv":[39,13,43,14],"texture":0},"west":{"uv":[0,0,0,1],"texture":0},"up":{"uv":[4,0,0,0],"texture":0},"down":{"uv":[4,0,0,0],"texture":0}},"type":"cube","uuid":"bcf2ef7f-89e7-37ad-acb4-acd2191b44bf"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[4,5.3125,5],"to":[8,6.3125,5],"autouv":0,"color":5,"rotation":[0,45,0],"origin":[6,5.8125,5],"faces":{"north":{"uv":[39,14,43,15],"texture":0},"east":{"uv":[0,0,0,1],"texture":0},"south":{"uv":[39,15,43,16],"texture":0},"west":{"uv":[0,0,0,1],"texture":0},"up":{"uv":[4,0,0,0],"texture":0},"down":{"uv":[4,0,0,0],"texture":0}},"type":"cube","uuid":"b25fed3b-dc36-6753-3674-2b89f480892b"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[6,5.3125,3],"to":[6,6.3125,7],"autouv":0,"color":5,"rotation":[0,-22.5,0],"origin":[6,5.8125,5],"faces":{"north":{"uv":[0,0,0,1],"texture":0},"east":{"uv":[39,19,43,20],"texture":0},"south":{"uv":[0,0,0,1],"texture":0},"west":{"uv":[39,20,43,21],"texture":0},"up":{"uv":[0,4,0,0],"texture":0},"down":{"uv":[0,0,0,4],"texture":0}},"type":"cube","uuid":"f97cc6d5-806b-e52a-4104-5de0463e51cf"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[5,3.75,3],"to":[7,5.75,6],"autouv":0,"color":6,"inflate":-0.25,"origin":[6,4.75,5],"faces":{"north":{"uv":[2,40,4,42],"texture":0},"east":{"uv":[18,32,21,34],"texture":0},"south":{"uv":[4,40,6,42],"texture":0},"west":{"uv":[21,32,24,34],"texture":0},"up":{"uv":[26,35,24,32],"texture":0},"down":{"uv":[28,32,26,35],"texture":0}},"type":"cube","uuid":"ae09116a-24a9-19da-8a3d-b8d8ce804b5c"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[5,4,5],"to":[7,6,7],"autouv":0,"color":6,"origin":[14,12,13],"faces":{"north":{"uv":[12,6,14,8],"texture":0},"east":{"uv":[18,12,20,14],"texture":0},"south":{"uv":[39,21,41,23],"texture":0},"west":{"uv":[39,23,41,25],"texture":0},"up":{"uv":[41,27,39,25],"texture":0},"down":{"uv":[2,40,0,42],"texture":0}},"type":"cube","uuid":"a04b2e66-67c5-eb0d-8b2b-1e39c6613ade"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[5.5,4,0.8125],"to":[6.5,5,3.8125],"autouv":0,"color":5,"inflate":0.125,"rotation":[-45,0,0],"origin":[6,4.5,3.3125],"faces":{"north":{"uv":[45,18,46,19],"texture":0},"east":{"uv":[42,9,45,10],"texture":0},"south":{"uv":[45,19,46,20],"texture":0},"west":{"uv":[42,10,45,11],"texture":0},"up":{"uv":[7,46,6,43],"texture":0},"down":{"uv":[8,43,7,46],"texture":0}},"type":"cube","uuid":"8c164554-7495-53db-c533-32eac92f4573"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[4.4375,2,1.0625],"to":[6.4375,3,2.0625],"autouv":0,"color":0,"inflate":0.0625,"origin":[13.4375,10,9.0625],"faces":{"north":{"uv":[22,27,24,28],"texture":0},"east":{"uv":[45,20,46,21],"texture":0},"south":{"uv":[20,29,22,30],"texture":0},"west":{"uv":[45,21,46,22],"texture":0},"up":{"uv":[6,36,4,35],"texture":0},"down":{"uv":[16,35,14,36],"texture":0}},"type":"cube","uuid":"8cc5f78d-5d5d-13c5-5ba8-e97461cf6bb7"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[2,1.6875,1.0625],"to":[5,2.6875,2.0625],"autouv":0,"color":3,"rotation":[0,0,45],"origin":[4.5,2.1875,1.5625],"faces":{"north":{"uv":[42,18,45,19],"texture":0},"east":{"uv":[45,22,46,23],"texture":0},"south":{"uv":[42,32,45,33],"texture":0},"west":{"uv":[45,29,46,30],"texture":0},"up":{"uv":[45,34,42,33],"texture":0},"down":{"uv":[45,40,42,41],"texture":0}},"type":"cube","uuid":"eef3388f-a32c-a45c-4cc2-b20e9bb25b0e"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[1.25,0.0625,1.0625],"to":[3.25,1.0625,2.0625],"autouv":0,"color":7,"inflate":-0.125,"origin":[7.25,8.0625,9.0625],"faces":{"north":{"uv":[43,16,45,17],"texture":0},"east":{"uv":[45,30,46,31],"texture":0},"south":{"uv":[43,17,45,18],"texture":0},"west":{"uv":[45,32,46,33],"texture":0},"up":{"uv":[45,20,43,19],"texture":0},"down":{"uv":[45,20,43,21],"texture":0}},"type":"cube","uuid":"06744f48-a7d1-e919-8e43-310ac781c15b"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[2.4375,3.75,5],"to":[5.4375,5.75,7],"autouv":0,"color":6,"inflate":-0.25,"origin":[4.4375,4.75,6],"faces":{"north":{"uv":[28,32,31,34],"texture":0},"east":{"uv":[6,40,8,42],"texture":0},"south":{"uv":[31,32,34,34],"texture":0},"west":{"uv":[8,40,10,42],"texture":0},"up":{"uv":[35,14,32,12],"texture":0},"down":{"uv":[35,14,32,16],"texture":0}},"type":"cube","uuid":"399c163a-6ac5-8be0-4992-cf06fba50ccf"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-0.75,4,5.5],"to":[3.25,5,6.5],"autouv":0,"color":5,"inflate":0.125,"rotation":[0,0,45],"origin":[2.75,4.5,6],"faces":{"north":{"uv":[10,40,14,41],"texture":0},"east":{"uv":[45,33,46,34],"texture":0},"south":{"uv":[14,40,18,41],"texture":0},"west":{"uv":[45,38,46,39],"texture":0},"up":{"uv":[22,41,18,40],"texture":0},"down":{"uv":[26,40,22,41],"texture":0}},"type":"cube","uuid":"380a1bb5-4b99-1045-9e74-d5d5d3c5d4d0"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-0.25,1.5,4.4375],"to":[0.75,2.5,6.4375],"autouv":0,"color":0,"inflate":0.0625,"origin":[7.75,9.5,13.4375],"faces":{"north":{"uv":[45,39,46,40],"texture":0},"east":{"uv":[43,29,45,30],"texture":0},"south":{"uv":[45,40,46,41],"texture":0},"west":{"uv":[43,30,45,31],"texture":0},"up":{"uv":[44,36,43,34],"texture":0},"down":{"uv":[44,36,43,38],"texture":0}},"type":"cube","uuid":"e7b70214-05b2-2b11-52a1-ed23a299c777"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-0.25,1.1875,3],"to":[0.75,2.1875,5],"autouv":0,"color":3,"rotation":[-45,0,0],"origin":[0.25,1.6875,4.5],"faces":{"north":{"uv":[45,41,46,42],"texture":0},"east":{"uv":[43,38,45,39],"texture":0},"south":{"uv":[0,46,1,47],"texture":0},"west":{"uv":[43,39,45,40],"texture":0},"up":{"uv":[1,46,0,44],"texture":0},"down":{"uv":[2,44,1,46],"texture":0}},"type":"cube","uuid":"5f1b501c-a4be-a661-824c-b36f165fbda6"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-0.25,0.0625,2],"to":[0.75,1.0625,4],"autouv":0,"color":7,"inflate":-0.125,"origin":[7.75,8.0625,8],"faces":{"north":{"uv":[1,46,2,47],"texture":0},"east":{"uv":[2,44,4,45],"texture":0},"south":{"uv":[2,46,3,47],"texture":0},"west":{"uv":[4,44,6,45],"texture":0},"up":{"uv":[9,46,8,44],"texture":0},"down":{"uv":[10,44,9,46],"texture":0}},"type":"cube","uuid":"dcf7397e-2817-79af-4679-e122eaa6a3e9"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[9,4,5],"to":[11,6,7],"autouv":0,"color":6,"origin":[3,12,14],"faces":{"north":{"uv":[26,40,28,42],"texture":0},"east":{"uv":[28,40,30,42],"texture":0},"south":{"uv":[30,40,32,42],"texture":0},"west":{"uv":[32,40,34,42],"texture":0},"up":{"uv":[36,42,34,40],"texture":0},"down":{"uv":[38,40,36,42],"texture":0}},"type":"cube","uuid":"945d0c38-0b0e-21b2-7ed1-d4554a718d96"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[10,3.75,5],"to":[13,5.75,7],"autouv":0,"color":6,"inflate":-0.25,"origin":[11,4.75,6],"faces":{"north":{"uv":[32,19,35,21],"texture":0},"east":{"uv":[38,40,40,42],"texture":0},"south":{"uv":[32,21,35,23],"texture":0},"west":{"uv":[40,40,42,42],"texture":0},"up":{"uv":[35,25,32,23],"texture":0},"down":{"uv":[35,25,32,27],"texture":0}},"type":"cube","uuid":"7f15accd-b74b-31c7-c72d-e1287c2bb8cc"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[12.1875,4,5.5],"to":[15.1875,5,6.5],"autouv":0,"color":5,"inflate":0.125,"rotation":[0,0,-45],"origin":[12.6875,4.5,6],"faces":{"north":{"uv":[42,41,45,42],"texture":0},"east":{"uv":[3,46,4,47],"texture":0},"south":{"uv":[8,43,11,44],"texture":0},"west":{"uv":[6,46,7,47],"texture":0},"up":{"uv":[14,44,11,43],"texture":0},"down":{"uv":[17,43,14,44],"texture":0}},"type":"cube","uuid":"1e1273f6-b391-9328-a8df-14b5aa9202fa"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[13.9375,2,4.4375],"to":[14.9375,3,6.4375],"autouv":0,"color":0,"inflate":0.0625,"origin":[6.9375,10,13.4375],"faces":{"north":{"uv":[7,46,8,47],"texture":0},"east":{"uv":[10,44,12,45],"texture":0},"south":{"uv":[8,46,9,47],"texture":0},"west":{"uv":[12,44,14,45],"texture":0},"up":{"uv":[15,46,14,44],"texture":0},"down":{"uv":[16,44,15,46],"texture":0}},"type":"cube","uuid":"fdba7bd4-fa24-f292-1d27-edebd39227a0"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[13.9375,1.6875,2],"to":[14.9375,2.6875,5],"autouv":0,"color":3,"rotation":[-45,0,0],"origin":[14.4375,2.1875,4.5],"faces":{"north":{"uv":[9,46,10,47],"texture":0},"east":{"uv":[17,43,20,44],"texture":0},"south":{"uv":[10,46,11,47],"texture":0},"west":{"uv":[20,43,23,44],"texture":0},"up":{"uv":[24,46,23,43],"texture":0},"down":{"uv":[25,43,24,46],"texture":0}},"type":"cube","uuid":"2b249a1e-dca7-b19e-0362-092d1dcec130"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[13.9375,0.0625,1.25],"to":[14.9375,1.0625,3.25],"autouv":0,"color":7,"inflate":-0.125,"origin":[6.9375,8.0625,7.25],"faces":{"north":{"uv":[11,46,12,47],"texture":0},"east":{"uv":[16,44,18,45],"texture":0},"south":{"uv":[12,46,13,47],"texture":0},"west":{"uv":[18,44,20,45],"texture":0},"up":{"uv":[21,46,20,44],"texture":0},"down":{"uv":[22,44,21,46],"texture":0}},"type":"cube","uuid":"86a9ad28-4ff1-5068-c7b3-368424b3f0d8"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[9,3.75,2.4375],"to":[11,5.75,5.4375],"autouv":0,"color":6,"inflate":-0.25,"origin":[10,4.75,4.4375],"faces":{"north":{"uv":[40,3,42,5],"texture":0},"east":{"uv":[0,33,3,35],"texture":0},"south":{"uv":[40,5,42,7],"texture":0},"west":{"uv":[3,33,6,35],"texture":0},"up":{"uv":[8,36,6,33],"texture":0},"down":{"uv":[10,33,8,36],"texture":0}},"type":"cube","uuid":"b04e8fd8-f677-886f-eb3e-e509408e882d"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[9.5,4,-0.75],"to":[10.5,5,3.25],"autouv":0,"color":5,"inflate":0.125,"rotation":[-45,0,0],"origin":[10,4.5,2.75],"faces":{"north":{"uv":[13,46,14,47],"texture":0},"east":{"uv":[40,7,44,8],"texture":0},"south":{"uv":[14,46,15,47],"texture":0},"west":{"uv":[40,8,44,9],"texture":0},"up":{"uv":[41,31,40,27],"texture":0},"down":{"uv":[41,36,40,40],"texture":0}},"type":"cube","uuid":"cbd3d12d-27d3-b14c-e9ee-0bb2985736a9"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[9.5625,1.5,-0.25],"to":[11.5625,2.5,0.75],"autouv":0,"color":0,"inflate":0.0625,"origin":[2.5625,9.5,7.75],"faces":{"north":{"uv":[25,44,27,45],"texture":0},"east":{"uv":[15,46,16,47],"texture":0},"south":{"uv":[32,44,34,45],"texture":0},"west":{"uv":[18,46,19,47],"texture":0},"up":{"uv":[36,45,34,44],"texture":0},"down":{"uv":[38,44,36,45],"texture":0}},"type":"cube","uuid":"3a132c74-93dd-60d8-cce7-7767f5923059"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[11,1.1875,-0.25],"to":[13,2.1875,0.75],"autouv":0,"color":3,"rotation":[0,0,-45],"origin":[11.5,1.6875,0.25],"faces":{"north":{"uv":[38,44,40,45],"texture":0},"east":{"uv":[19,46,20,47],"texture":0},"south":{"uv":[40,44,42,45],"texture":0},"west":{"uv":[20,46,21,47],"texture":0},"up":{"uv":[44,45,42,44],"texture":0},"down":{"uv":[46,44,44,45],"texture":0}},"type":"cube","uuid":"0447144a-389f-2dad-f68f-0bae70e93940"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[12,0.0625,-0.25],"to":[14,1.0625,0.75],"autouv":0,"color":7,"inflate":-0.125,"origin":[8,8.0625,7.75],"faces":{"north":{"uv":[44,7,46,8],"texture":0},"east":{"uv":[21,46,22,47],"texture":0},"south":{"uv":[44,8,46,9],"texture":0},"west":{"uv":[22,46,23,47],"texture":0},"up":{"uv":[46,24,44,23],"texture":0},"down":{"uv":[46,24,44,25],"texture":0}},"type":"cube","uuid":"beb2526a-ad97-5491-86f8-939ad3c9a97c"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[9,4,9],"to":[11,6,11],"autouv":0,"color":6,"origin":[2,12,3],"faces":{"north":{"uv":[40,9,42,11],"texture":0},"east":{"uv":[10,41,12,43],"texture":0},"south":{"uv":[12,41,14,43],"texture":0},"west":{"uv":[14,41,16,43],"texture":0},"up":{"uv":[18,43,16,41],"texture":0},"down":{"uv":[20,41,18,43],"texture":0}},"type":"cube","uuid":"a9931b54-00e9-9020-0eec-867da2136efb"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[9,3.75,10],"to":[11,5.75,13],"autouv":0,"color":6,"inflate":-0.25,"origin":[10,4.75,11],"faces":{"north":{"uv":[20,41,22,43],"texture":0},"east":{"uv":[10,33,13,35],"texture":0},"south":{"uv":[22,41,24,43],"texture":0},"west":{"uv":[13,33,16,35],"texture":0},"up":{"uv":[18,36,16,33],"texture":0},"down":{"uv":[35,0,33,3],"texture":0}},"type":"cube","uuid":"b858ce77-f139-fa1f-f12f-8459c7eae6a9"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[9.5,4,12.1875],"to":[10.5,5,15.1875],"autouv":0,"color":5,"inflate":0.125,"rotation":[45,0,0],"origin":[10,4.5,12.6875],"faces":{"north":{"uv":[23,46,24,47],"texture":0},"east":{"uv":[25,43,28,44],"texture":0},"south":{"uv":[24,46,25,47],"texture":0},"west":{"uv":[32,43,35,44],"texture":0},"up":{"uv":[29,46,28,43],"texture":0},"down":{"uv":[30,43,29,46],"texture":0}},"type":"cube","uuid":"ec1a0187-ce9b-38d4-a71f-1d9050c29d3c"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[9.5625,2,13.9375],"to":[11.5625,3,14.9375],"autouv":0,"color":0,"inflate":0.0625,"origin":[2.5625,10,6.9375],"faces":{"north":{"uv":[44,25,46,26],"texture":0},"east":{"uv":[25,46,26,47],"texture":0},"south":{"uv":[44,26,46,27],"texture":0},"west":{"uv":[26,46,27,47],"texture":0},"up":{"uv":[46,28,44,27],"texture":0},"down":{"uv":[46,28,44,29],"texture":0}},"type":"cube","uuid":"a83a00d8-4f8f-4e28-ce36-89b159fd5c69"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[11,1.6875,13.9375],"to":[14,2.6875,14.9375],"autouv":0,"color":3,"rotation":[0,0,-45],"origin":[11.5,2.1875,14.4375],"faces":{"north":{"uv":[35,43,38,44],"texture":0},"east":{"uv":[27,46,28,47],"texture":0},"south":{"uv":[38,43,41,44],"texture":0},"west":{"uv":[28,46,29,47],"texture":0},"up":{"uv":[44,44,41,43],"texture":0},"down":{"uv":[46,0,43,1],"texture":0}},"type":"cube","uuid":"09f70950-ff77-621c-946d-409e3b1e6cbb"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[12.75,0.0625,13.9375],"to":[14.75,1.0625,14.9375],"autouv":0,"color":7,"inflate":-0.125,"origin":[8.75,8.0625,6.9375],"faces":{"north":{"uv":[44,31,46,32],"texture":0},"east":{"uv":[29,46,30,47],"texture":0},"south":{"uv":[44,34,46,35],"texture":0},"west":{"uv":[30,46,31,47],"texture":0},"up":{"uv":[46,36,44,35],"texture":0},"down":{"uv":[46,36,44,37],"texture":0}},"type":"cube","uuid":"e1f2fae3-a94f-158d-954f-5f69258cdd77"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[10.5625,3.75,9],"to":[13.5625,5.75,11],"autouv":0,"color":6,"inflate":-0.25,"origin":[11.5625,4.75,10],"faces":{"north":{"uv":[33,3,36,5],"texture":0},"east":{"uv":[24,41,26,43],"texture":0},"south":{"uv":[33,5,36,7],"texture":0},"west":{"uv":[41,16,43,18],"texture":0},"up":{"uv":[36,9,33,7],"texture":0},"down":{"uv":[36,9,33,11],"texture":0}},"type":"cube","uuid":"fca1caff-66fe-82cf-b053-877bea1454e9"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[12.75,4,9.5],"to":[16.75,5,10.5],"autouv":0,"color":5,"inflate":0.125,"rotation":[0,0,-45],"origin":[13.25,4.5,10],"faces":{"north":{"uv":[40,31,44,32],"texture":0},"east":{"uv":[31,46,32,47],"texture":0},"south":{"uv":[41,11,45,12],"texture":0},"west":{"uv":[34,46,35,47],"texture":0},"up":{"uv":[45,22,41,21],"texture":0},"down":{"uv":[45,22,41,23],"texture":0}},"type":"cube","uuid":"25bf4787-56f3-6e90-2a3a-738663df3a4d"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[15.25,1.5,9.5625],"to":[16.25,2.5,11.5625],"autouv":0,"color":0,"inflate":0.0625,"origin":[8.25,9.5,2.5625],"faces":{"north":{"uv":[35,46,36,47],"texture":0},"east":{"uv":[44,37,46,38],"texture":0},"south":{"uv":[36,46,37,47],"texture":0},"west":{"uv":[44,42,46,43],"texture":0},"up":{"uv":[23,46,22,44],"texture":0},"down":{"uv":[28,44,27,46],"texture":0}},"type":"cube","uuid":"1e8ba1bf-0a33-aa9e-e37a-963efb50cd8b"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[15.25,1.1875,11],"to":[16.25,2.1875,13],"autouv":0,"color":3,"rotation":[45,0,0],"origin":[15.75,1.6875,11.5],"faces":{"north":{"uv":[37,46,38,47],"texture":0},"east":{"uv":[44,43,46,44],"texture":0},"south":{"uv":[40,46,41,47],"texture":0},"west":{"uv":[2,45,4,46],"texture":0},"up":{"uv":[5,47,4,45],"texture":0},"down":{"uv":[6,45,5,47],"texture":0}},"type":"cube","uuid":"e37508de-7360-0b8a-5b17-43d292feac03"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[15.25,0.0625,12],"to":[16.25,1.0625,14],"autouv":0,"color":7,"inflate":-0.125,"origin":[8.25,8.0625,8],"faces":{"north":{"uv":[41,46,42,47],"texture":0},"east":{"uv":[10,45,12,46],"texture":0},"south":{"uv":[42,46,43,47],"texture":0},"west":{"uv":[12,45,14,46],"texture":0},"up":{"uv":[17,47,16,45],"texture":0},"down":{"uv":[18,45,17,47],"texture":0}},"type":"cube","uuid":"27fd6802-5697-0d83-7f60-bcea51dba448"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[5,4,5],"to":[11,5,11],"autouv":0,"color":0,"inflate":0.0625,"origin":[8,4.5,8],"faces":{"north":{"uv":[26,30,32,31],"texture":0},"east":{"uv":[30,28,36,29],"texture":0},"south":{"uv":[30,29,36,30],"texture":0},"west":{"uv":[0,31,6,32],"texture":0},"up":{"uv":[14,20,8,14],"texture":0},"down":{"uv":[20,14,14,20],"texture":0}},"type":"cube","uuid":"2c508eaa-4f9c-efd9-171e-1597ef51a23a"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[5,4,9],"to":[7,6,11],"autouv":0,"color":6,"origin":[13,12,2],"faces":{"north":{"uv":[41,23,43,25],"texture":0},"east":{"uv":[41,25,43,27],"texture":0},"south":{"uv":[41,27,43,29],"texture":0},"west":{"uv":[41,29,43,31],"texture":0},"up":{"uv":[43,36,41,34],"texture":0},"down":{"uv":[43,36,41,38],"texture":0}},"type":"cube","uuid":"80031d17-9f52-6b47-ec7b-84571c75b8bd"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[3,3.75,9],"to":[6,5.75,11],"autouv":0,"color":6,"inflate":-0.25,"origin":[5,4.75,10],"faces":{"north":{"uv":[18,34,21,36],"texture":0},"east":{"uv":[41,38,43,40],"texture":0},"south":{"uv":[21,34,24,36],"texture":0},"west":{"uv":[0,42,2,44],"texture":0},"up":{"uv":[31,36,28,34],"texture":0},"down":{"uv":[34,34,31,36],"texture":0}},"type":"cube","uuid":"58d13cd5-ce7d-deef-a35a-3cd6425e8c50"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[0.8125,4,9.5],"to":[3.8125,5,10.5],"autouv":0,"color":5,"inflate":0.125,"rotation":[0,0,45],"origin":[3.3125,4.5,10],"faces":{"north":{"uv":[43,1,46,2],"texture":0},"east":{"uv":[43,46,44,47],"texture":0},"south":{"uv":[43,2,46,3],"texture":0},"west":{"uv":[44,46,45,47],"texture":0},"up":{"uv":[46,13,43,12],"texture":0},"down":{"uv":[46,13,43,14],"texture":0}},"type":"cube","uuid":"1c227a26-9555-3d37-80b0-340ea46bbaf2"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[1.0625,2,9.5625],"to":[2.0625,3,11.5625],"autouv":0,"color":0,"inflate":0.0625,"origin":[9.0625,10,2.5625],"faces":{"north":{"uv":[45,46,46,47],"texture":0},"east":{"uv":[18,45,20,46],"texture":0},"south":{"uv":[46,46,47,47],"texture":0},"west":{"uv":[25,45,27,46],"texture":0},"up":{"uv":[33,47,32,45],"texture":0},"down":{"uv":[34,45,33,47],"texture":0}},"type":"cube","uuid":"00469cba-9736-7b3a-9034-3f30a9cc14cd"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[1.0625,1.6875,11],"to":[2.0625,2.6875,14],"autouv":0,"color":3,"rotation":[45,0,0],"origin":[1.5625,2.1875,11.5],"faces":{"north":{"uv":[46,0,47,1],"texture":0},"east":{"uv":[43,14,46,15],"texture":0},"south":{"uv":[46,1,47,2],"texture":0},"west":{"uv":[43,15,46,16],"texture":0},"up":{"uv":[44,26,43,23],"texture":0},"down":{"uv":[44,26,43,29],"texture":0}},"type":"cube","uuid":"b2d17fdb-6ea2-9e0d-a515-9534f0a86027"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[1.0625,0.0625,12.75],"to":[2.0625,1.0625,14.75],"autouv":0,"color":7,"inflate":-0.125,"origin":[9.0625,8.0625,8.75],"faces":{"north":{"uv":[46,2,47,3],"texture":0},"east":{"uv":[34,45,36,46],"texture":0},"south":{"uv":[46,7,47,8],"texture":0},"west":{"uv":[36,45,38,46],"texture":0},"up":{"uv":[39,47,38,45],"texture":0},"down":{"uv":[40,45,39,47],"texture":0}},"type":"cube","uuid":"75655baf-2eb9-5e67-3dbf-b38ac0a71435"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[5,3.75,10.5625],"to":[7,5.75,13.5625],"autouv":0,"color":6,"inflate":-0.25,"origin":[6,4.75,11.5625],"faces":{"north":{"uv":[2,42,4,44],"texture":0},"east":{"uv":[34,34,37,36],"texture":0},"south":{"uv":[4,42,6,44],"texture":0},"west":{"uv":[34,16,37,18],"texture":0},"up":{"uv":[2,38,0,35],"texture":0},"down":{"uv":[4,35,2,38],"texture":0}},"type":"cube","uuid":"00380398-1fb0-b632-88db-3953cc20a5c8"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[5.5,4,12.75],"to":[6.5,5,16.75],"autouv":0,"color":5,"inflate":0.125,"rotation":[45,0,0],"origin":[6,4.5,13.25],"faces":{"north":{"uv":[46,8,47,9],"texture":0},"east":{"uv":[6,42,10,43],"texture":0},"south":{"uv":[46,12,47,13],"texture":0},"west":{"uv":[26,42,30,43],"texture":0},"up":{"uv":[31,46,30,42],"texture":0},"down":{"uv":[32,42,31,46],"texture":0}},"type":"cube","uuid":"bc42de9c-f278-35e9-8507-e4a6c6a4b1ee"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[4.4375,1.5,15.25],"to":[6.4375,2.5,16.25],"autouv":0,"color":0,"inflate":0.0625,"origin":[13.4375,9.5,8.25],"faces":{"north":{"uv":[40,45,42,46],"texture":0},"east":{"uv":[46,13,47,14],"texture":0},"south":{"uv":[42,45,44,46],"texture":0},"west":{"uv":[46,14,47,15],"texture":0},"up":{"uv":[46,46,44,45],"texture":0},"down":{"uv":[47,3,45,4],"texture":0}},"type":"cube","uuid":"eec63572-7b38-b82b-7ee7-24fba748744b"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[3,1.1875,15.25],"to":[5,2.1875,16.25],"autouv":0,"color":3,"rotation":[0,0,45],"origin":[4.5,1.6875,15.75],"faces":{"north":{"uv":[45,4,47,5],"texture":0},"east":{"uv":[46,15,47,16],"texture":0},"south":{"uv":[45,5,47,6],"texture":0},"west":{"uv":[46,18,47,19],"texture":0},"up":{"uv":[47,7,45,6],"texture":0},"down":{"uv":[47,9,45,10],"texture":0}},"type":"cube","uuid":"3fd041d4-1572-cae5-809f-71ec169039e6"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[2,0.0625,15.25],"to":[4,1.0625,16.25],"autouv":0,"color":7,"inflate":-0.125,"origin":[8,8.0625,8.25],"faces":{"north":{"uv":[45,10,47,11],"texture":0},"east":{"uv":[46,19,47,20],"texture":0},"south":{"uv":[45,11,47,12],"texture":0},"west":{"uv":[46,20,47,21],"texture":0},"up":{"uv":[47,17,45,16],"texture":0},"down":{"uv":[47,17,45,18],"texture":0}},"type":"cube","uuid":"dfc855a2-d286-657f-eddc-32fec3238200"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[5,4.75,6],"to":[5,6.75,10],"autouv":0,"color":5,"origin":[13,13.75,16],"faces":{"north":{"uv":[0,0,0,2],"texture":0},"east":{"uv":[8,6,12,8],"texture":0},"south":{"uv":[0,0,0,2],"texture":0},"west":{"uv":[14,12,18,14],"texture":0},"up":{"uv":[0,4,0,0],"texture":0},"down":{"uv":[0,0,0,4],"texture":0}},"type":"cube","uuid":"25993725-0f18-4821-d003-4b8dc9bab086"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[5,4.75,6],"to":[5,6.75,10],"autouv":0,"color":5,"rotation":[0,22.5,0],"origin":[5,6.25,8],"faces":{"north":{"uv":[0,0,0,2],"texture":0},"east":{"uv":[6,27,10,29],"texture":0},"south":{"uv":[0,0,0,2],"texture":0},"west":{"uv":[10,27,14,29],"texture":0},"up":{"uv":[0,4,0,0],"texture":0},"down":{"uv":[0,0,0,4],"texture":0}},"type":"cube","uuid":"24ba7757-6d81-30a5-a4ca-043a09bfcf10"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[5,4.75,6],"to":[5,6.75,10],"autouv":0,"color":5,"rotation":[0,45,0],"origin":[5,6.25,8],"faces":{"north":{"uv":[0,0,0,2],"texture":0},"east":{"uv":[14,27,18,29],"texture":0},"south":{"uv":[0,0,0,2],"texture":0},"west":{"uv":[18,27,22,29],"texture":0},"up":{"uv":[0,4,0,0],"texture":0},"down":{"uv":[0,0,0,4],"texture":0}},"type":"cube","uuid":"40db50a7-8fb1-416d-b457-d67267810051"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[3,4.75,8],"to":[7,6.75,8],"autouv":0,"color":5,"rotation":[0,-22.5,0],"origin":[5,6.25,8],"faces":{"north":{"uv":[22,28,26,30],"texture":0},"east":{"uv":[0,0,0,2],"texture":0},"south":{"uv":[26,28,30,30],"texture":0},"west":{"uv":[0,0,0,2],"texture":0},"up":{"uv":[4,0,0,0],"texture":0},"down":{"uv":[4,0,0,0],"texture":0}},"type":"cube","uuid":"b6d17113-a614-6b9e-01a0-2606b8e59af3"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[3,4.75,8],"to":[7,6.75,8],"autouv":0,"color":5,"origin":[5,6.25,8],"faces":{"north":{"uv":[28,12,32,14],"texture":0},"east":{"uv":[0,0,0,2],"texture":0},"south":{"uv":[28,14,32,16],"texture":0},"west":{"uv":[0,0,0,2],"texture":0},"up":{"uv":[4,0,0,0],"texture":0},"down":{"uv":[4,0,0,0],"texture":0}},"type":"cube","uuid":"cb0f0afd-1b16-35c5-ef6b-6dfae9f56834"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[3,4.75,8],"to":[7,6.75,8],"autouv":0,"color":5,"rotation":[0,22.5,0],"origin":[5,6.25,8],"faces":{"north":{"uv":[28,19,32,21],"texture":0},"east":{"uv":[0,0,0,2],"texture":0},"south":{"uv":[28,21,32,23],"texture":0},"west":{"uv":[0,0,0,2],"texture":0},"up":{"uv":[4,0,0,0],"texture":0},"down":{"uv":[4,0,0,0],"texture":0}},"type":"cube","uuid":"341a62f7-a029-58f7-d0af-efe6e4bbe15c"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[3,4.75,8],"to":[7,6.75,8],"autouv":0,"color":5,"rotation":[0,45,0],"origin":[5,6.25,8],"faces":{"north":{"uv":[28,24,32,26],"texture":0},"east":{"uv":[0,0,0,2],"texture":0},"south":{"uv":[28,26,32,28],"texture":0},"west":{"uv":[0,0,0,2],"texture":0},"up":{"uv":[4,0,0,0],"texture":0},"down":{"uv":[4,0,0,0],"texture":0}},"type":"cube","uuid":"dba04d25-aac0-9491-9ed4-37700daa7c0e"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[5,4.75,6],"to":[5,6.75,10],"autouv":0,"color":5,"rotation":[0,-22.5,0],"origin":[5,6.25,8],"faces":{"north":{"uv":[0,0,0,2],"texture":0},"east":{"uv":[6,29,10,31],"texture":0},"south":{"uv":[0,0,0,2],"texture":0},"west":{"uv":[10,29,14,31],"texture":0},"up":{"uv":[0,4,0,0],"texture":0},"down":{"uv":[0,0,0,4],"texture":0}},"type":"cube","uuid":"233e4173-fc57-92c1-cb16-33cfe6ff6d77"}],"outliner":[{"name":"group","origin":[8,8,8],"color":0,"uuid":"9d985a48-53f2-58f6-02e5-80cee0c514ab","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["dfc6c4ee-9b20-b1cf-b68a-68840ab71ff3","81ab3df0-7a30-883e-da3f-5edbd1d0d56b","acd748e1-74e1-aa79-3d40-45a5510e4180","2c508eaa-4f9c-efd9-171e-1597ef51a23a"]},{"name":"group","origin":[15,10,15],"color":0,"uuid":"6534abfb-7475-3213-e227-6bc4d5e4ca30","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["3975b324-14b7-87bd-bf2b-7c54047037b4",{"name":"group","origin":[11,11,12],"color":0,"uuid":"691d9295-3d66-228b-1cc5-d66ac5298db3","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["cf9a3930-a8e2-b370-d3a6-3b50c144e0f3"]}]},{"name":"group","origin":[15,10,15],"color":0,"uuid":"87e1cc84-22e2-b4cd-f1c3-04c3dee5dd2e","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["57687dae-1a12-a202-cd99-2dc3cf048441",{"name":"group","origin":[11,11,12],"color":0,"uuid":"faadfb34-3e32-a744-7055-31f00c492088","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["bc622fef-6bb5-1561-de8e-c5382d1da27e"]}]},{"name":"group","origin":[15,10,15],"color":0,"uuid":"5c3bd61c-a87c-1557-906a-3747ceb3d428","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["4d18cc21-a271-0182-26ea-ce7b676bc5ea",{"name":"group","origin":[11,11,12],"color":0,"uuid":"46cae728-2e0c-58a4-2c65-5b7a25757eaf","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["aa1fa152-145a-c86f-6a0a-094c82d8c0f8"]}]},{"name":"group","origin":[15,10,15],"color":0,"uuid":"319a3c0e-92b8-7956-f6e9-3a311f302d4f","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["e567dd13-7520-469c-15be-6fc8e11c1ce5",{"name":"group","origin":[11,11,12],"color":0,"uuid":"da0dcc44-c266-2ab0-ef78-3825b1cea3ca","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["e4f56095-3386-926d-4c63-9c8d62a784be"]}]},{"name":"flower1","origin":[8,8,8],"color":0,"uuid":"dfa291b8-23e4-55af-e2b6-29a876bff1be","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["e34e1f9d-4da4-26d1-374c-0a10ccf20445","25dfcc91-bb31-b869-922b-3218ef1da824","2775476f-aeed-93a8-7b07-bfa3c476eec5","c9fcc546-4b66-fb1f-a53f-8e66b8d49410","e791d8c9-01ef-1460-2db0-3b320bea6b0b","3ddf4784-aa69-4b17-e873-7aca028ab522","ad970ae3-9c92-98f8-eb5f-7d45e2bc3c51","70bf14b7-3947-53b4-4807-727ff74304c2"]},{"name":"flower2","origin":[8,8,8],"color":0,"uuid":"0f3e6f20-8ad9-2771-d9e8-a42ace119c4e","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["6f6f16c3-af8b-f7d9-21f4-4ab43e6a5b70","04232ec0-f6b4-8398-5464-d93b43e6cbde","148e5978-8e5d-42db-b6ae-800c0f367b0f","91ebaaed-bbd8-5fab-7aaa-bc9fca61799a","376eb963-7b29-7ce1-c844-221008fc692c","9c4ce39c-73c7-1ac1-ded1-978f005e95e8","52e42f06-0b3d-8065-4d01-e4fb5ec1ec6a","e3a66ff5-1b31-ba0f-acb5-42954541539c"]},{"name":"flower3","origin":[8,8,8],"color":0,"uuid":"ee4535a0-18a1-c3b4-3833-e2536bacf616","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["9b669811-45ef-526c-1d24-f2bb056d4a75","59dd3686-83e8-a0fe-8c54-e11a67c2ed76","876d1ce4-389d-bf2a-c4ca-25522c75f295","d2361668-7e4e-a20f-83ae-f189e1da3b89","5f4d4f3f-431e-1ae2-5a8e-af88f7512845","03214d6e-1fba-c29d-44e4-1ed91f3a852f","e3ce1612-3149-1ae5-3225-dc300c3ebe8c","47492c45-ac83-d3b6-15f2-99e570e18cda"]},{"name":"flower4","origin":[8,8,8],"color":0,"uuid":"de365a90-950e-a2ed-7dca-28edb1d98f5f","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["27a0ebce-a8f7-2a0b-e37e-2bd7cd0326ce","d71827db-0605-4130-b9b0-c1cf2bf215cb","51978212-2987-50cb-cc3b-b7ed49eba1f3","fa0d9911-cb56-3632-3af5-e1a6ec9c851f","fdee570b-b3e8-1d20-3115-6dfb98574579","8b159038-c95e-1448-8b0b-eb386f306024","079eea1d-eefb-6181-d7f8-d79ec44fca01","58fc7f46-3e1d-f880-c88c-7c5c81b99d5a"]},{"name":"flower5","origin":[8,8,8],"color":0,"uuid":"38f31fc5-2836-e9e5-cb25-61c380273597","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["7dd93918-5f56-3428-38bf-781b0247c096","31b64f78-1c83-9c22-29b1-cac3d06f6282","0ca525b0-326d-abe3-84a2-f8905c942be4","2e7546ec-d49c-9cb0-8b5d-fd0de5f0e316","2f567167-8e2f-0fd4-2095-321c6b7ae9da","bcf2ef7f-89e7-37ad-acb4-acd2191b44bf","b25fed3b-dc36-6753-3674-2b89f480892b","f97cc6d5-806b-e52a-4104-5de0463e51cf"]},{"name":"flower6","origin":[8,8,8],"color":0,"uuid":"67c8e104-eb2a-9c28-975f-45c6202e789e","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["25993725-0f18-4821-d003-4b8dc9bab086","24ba7757-6d81-30a5-a4ca-043a09bfcf10","40db50a7-8fb1-416d-b457-d67267810051","b6d17113-a614-6b9e-01a0-2606b8e59af3","cb0f0afd-1b16-35c5-ef6b-6dfae9f56834","341a62f7-a029-58f7-d0af-efe6e4bbe15c","dba04d25-aac0-9491-9ed4-37700daa7c0e","233e4173-fc57-92c1-cb16-33cfe6ff6d77"]},{"name":"group","origin":[8,8,8],"color":0,"uuid":"71757c43-14b6-f4f5-d906-c901675071b3","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["a04b2e66-67c5-eb0d-8b2b-1e39c6613ade",{"name":"group","origin":[14,12,13],"color":0,"uuid":"fa876bde-ca01-2bdb-3fcb-9ae4a555c862","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["ae09116a-24a9-19da-8a3d-b8d8ce804b5c",{"name":"group","origin":[4.4375,4.75,6],"color":0,"uuid":"01a20b05-a0c0-249d-e3c7-1b2d03f46270","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["8c164554-7495-53db-c533-32eac92f4573",{"name":"group","origin":[2.75,4.5,6],"color":0,"uuid":"44f24956-916d-b383-5bcf-a502253e08be","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["8cc5f78d-5d5d-13c5-5ba8-e97461cf6bb7",{"name":"group","origin":[7.875,9.5,13.4375],"color":0,"uuid":"04e2be59-7055-90d6-6c5a-2c4e81f13916","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["eef3388f-a32c-a45c-4cc2-b20e9bb25b0e",{"name":"group","origin":[0.25,1.6875,4.5],"color":0,"uuid":"5bfc8e2d-081d-2562-54a7-8c4e074481fc","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["06744f48-a7d1-e919-8e43-310ac781c15b"]}]}]}]}]},{"name":"group","origin":[14,12,13],"color":0,"uuid":"3e0fc0c1-dab2-e2c8-0144-fe99a471f69c","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["399c163a-6ac5-8be0-4992-cf06fba50ccf",{"name":"group","origin":[4.4375,4.75,6],"color":0,"uuid":"23b78a32-c5a5-c593-3f7f-f0e6c8c6d0bb","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["380a1bb5-4b99-1045-9e74-d5d5d3c5d4d0",{"name":"group","origin":[2.75,4.5,6],"color":0,"uuid":"144f50b7-186c-ff5d-b88b-58a6f004e465","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["e7b70214-05b2-2b11-52a1-ed23a299c777",{"name":"group","origin":[7.875,9.5,13.4375],"color":0,"uuid":"0d1aa47b-3336-ae11-c99c-8c33122e0679","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["5f1b501c-a4be-a661-824c-b36f165fbda6",{"name":"group","origin":[0.25,1.6875,4.5],"color":0,"uuid":"d4329ad8-e90e-7a62-1a08-51ac6406a0a7","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["dcf7397e-2817-79af-4679-e122eaa6a3e9"]}]}]}]}]}]},{"name":"group","origin":[8,8,8],"color":0,"uuid":"dd961576-16db-a252-e834-04a48de93842","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["945d0c38-0b0e-21b2-7ed1-d4554a718d96",{"name":"group","origin":[14,12,13],"color":0,"uuid":"9f5fe069-c120-953e-679f-e5accee53636","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["7f15accd-b74b-31c7-c72d-e1287c2bb8cc",{"name":"group","origin":[4.4375,4.75,6],"color":0,"uuid":"635e56ba-f192-2e4c-42aa-7db2af61c213","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["1e1273f6-b391-9328-a8df-14b5aa9202fa",{"name":"group","origin":[2.75,4.5,6],"color":0,"uuid":"22e2d4a5-15e5-8293-938a-08e182b3eca3","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["fdba7bd4-fa24-f292-1d27-edebd39227a0",{"name":"group","origin":[7.875,9.5,13.4375],"color":0,"uuid":"d23f890f-4f79-2000-5656-c274e526f1f6","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["2b249a1e-dca7-b19e-0362-092d1dcec130",{"name":"group","origin":[0.25,1.6875,4.5],"color":0,"uuid":"fb79aeb3-a95c-bfe4-6f54-cb303e457ff6","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["86a9ad28-4ff1-5068-c7b3-368424b3f0d8"]}]}]}]}]},{"name":"group","origin":[14,12,13],"color":0,"uuid":"0763052f-9370-ebae-2351-8b1c45ab0c85","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["b04e8fd8-f677-886f-eb3e-e509408e882d",{"name":"group","origin":[4.4375,4.75,6],"color":0,"uuid":"9bc496de-88b4-1516-cf61-90c8167501d5","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["cbd3d12d-27d3-b14c-e9ee-0bb2985736a9",{"name":"group","origin":[2.75,4.5,6],"color":0,"uuid":"728534c7-d79f-f651-db1c-7a96733f6b3c","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["3a132c74-93dd-60d8-cce7-7767f5923059",{"name":"group","origin":[7.875,9.5,13.4375],"color":0,"uuid":"dcab58ce-5c05-fed4-38b4-9ab893163a1d","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["0447144a-389f-2dad-f68f-0bae70e93940",{"name":"group","origin":[0.25,1.6875,4.5],"color":0,"uuid":"e63b457c-79f1-a358-131d-f31f65118892","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["beb2526a-ad97-5491-86f8-939ad3c9a97c"]}]}]}]}]}]},{"name":"group","origin":[8,8,8],"color":0,"uuid":"15a725af-991a-e10a-c504-8cdf49439f2a","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["a9931b54-00e9-9020-0eec-867da2136efb",{"name":"group","origin":[14,12,13],"color":0,"uuid":"177ca692-ecd0-4f2a-387b-fe546bf9d896","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["b858ce77-f139-fa1f-f12f-8459c7eae6a9",{"name":"group","origin":[4.4375,4.75,6],"color":0,"uuid":"d76cf09c-fa81-9748-549f-30dcd3d6d66f","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["ec1a0187-ce9b-38d4-a71f-1d9050c29d3c",{"name":"group","origin":[2.75,4.5,6],"color":0,"uuid":"60b49778-3628-7f5f-ad15-7604f41c11cc","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["a83a00d8-4f8f-4e28-ce36-89b159fd5c69",{"name":"group","origin":[7.875,9.5,13.4375],"color":0,"uuid":"2c782798-ad70-958c-a6b7-55bb42d5d922","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["09f70950-ff77-621c-946d-409e3b1e6cbb",{"name":"group","origin":[0.25,1.6875,4.5],"color":0,"uuid":"6198baa8-5e27-5ff0-b32f-ad0618be8918","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["e1f2fae3-a94f-158d-954f-5f69258cdd77"]}]}]}]}]},{"name":"group","origin":[14,12,13],"color":0,"uuid":"663fc299-5bac-cfe0-7ba2-c606307a0c56","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["fca1caff-66fe-82cf-b053-877bea1454e9",{"name":"group","origin":[4.4375,4.75,6],"color":0,"uuid":"51d700f7-1b78-7ace-ca18-747291239c03","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["25bf4787-56f3-6e90-2a3a-738663df3a4d",{"name":"group","origin":[2.75,4.5,6],"color":0,"uuid":"cdda252f-6ded-dda2-0ef6-3bd81ac93425","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["1e8ba1bf-0a33-aa9e-e37a-963efb50cd8b",{"name":"group","origin":[7.875,9.5,13.4375],"color":0,"uuid":"8038fa6d-36a9-f8f3-76d2-788c58111ffc","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["e37508de-7360-0b8a-5b17-43d292feac03",{"name":"group","origin":[0.25,1.6875,4.5],"color":0,"uuid":"6175dd4f-210f-9431-c58b-77af0d559b3b","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["27fd6802-5697-0d83-7f60-bcea51dba448"]}]}]}]}]}]},{"name":"group","origin":[8,8,8],"color":0,"uuid":"f99233d0-a262-8a87-4839-180e09e4d9d2","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["80031d17-9f52-6b47-ec7b-84571c75b8bd",{"name":"group","origin":[14,12,13],"color":0,"uuid":"3ccc6491-cd06-43ec-eaa9-c71032cd8642","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["58d13cd5-ce7d-deef-a35a-3cd6425e8c50",{"name":"group","origin":[4.4375,4.75,6],"color":0,"uuid":"68ba2538-8d8f-a03e-d4af-2ab62ac045c9","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["1c227a26-9555-3d37-80b0-340ea46bbaf2",{"name":"group","origin":[2.75,4.5,6],"color":0,"uuid":"d99a924d-2d8b-9840-bf95-867a34a25096","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["00469cba-9736-7b3a-9034-3f30a9cc14cd",{"name":"group","origin":[7.875,9.5,13.4375],"color":0,"uuid":"518cb151-b74a-2d30-a256-0e89480b6ecc","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["b2d17fdb-6ea2-9e0d-a515-9534f0a86027",{"name":"group","origin":[0.25,1.6875,4.5],"color":0,"uuid":"6dc64e90-c3f6-c2a6-fda4-6620fa2ad66b","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["75655baf-2eb9-5e67-3dbf-b38ac0a71435"]}]}]}]}]},{"name":"group","origin":[14,12,13],"color":0,"uuid":"c8d8bcc4-0191-ffd0-b2c0-c559bdd7995b","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["00380398-1fb0-b632-88db-3953cc20a5c8",{"name":"group","origin":[4.4375,4.75,6],"color":0,"uuid":"5d3c7416-0f92-0042-0051-da4c1f15a01f","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["bc42de9c-f278-35e9-8507-e4a6c6a4b1ee",{"name":"group","origin":[2.75,4.5,6],"color":0,"uuid":"d1d0df2e-4647-6e73-772e-8fce3dd0da3a","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["eec63572-7b38-b82b-7ee7-24fba748744b",{"name":"group","origin":[7.875,9.5,13.4375],"color":0,"uuid":"eefbaffd-6eda-98c6-755f-71021a507629","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["3fd041d4-1572-cae5-809f-71ec169039e6",{"name":"group","origin":[0.25,1.6875,4.5],"color":0,"uuid":"e5c4d697-a76d-9966-5076-da2628aae90d","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["dfc855a2-d286-657f-eddc-32fec3238200"]}]}]}]}]}]}],"textures":[{"path":"/home/deck/dev/minecraft/cosmere/src/surgebinding/resources/assets/surgebinding/textures/block/rockbud_variant.png","name":"rockbud_variant.png","folder":"block","namespace":"surgebinding","id":"0","particle":true,"render_mode":"default","render_sides":"auto","frame_time":1,"frame_order_type":"loop","frame_order":"","frame_interpolate":false,"visible":true,"mode":"bitmap","saved":true,"uuid":"4440f627-806b-7922-d359-16cf69529382","relative_path":"../../../../../textures/block/rockbud_variant.png","source":"data:image/png;base64,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"}]} \ No newline at end of file diff --git a/blockbench/surgebinding/blocks/rockbud_variant/RockBud2.bbmodel b/blockbench/surgebinding/blocks/rockbud_variant/RockBud2.bbmodel new file mode 100644 index 000000000..be69f41ae --- /dev/null +++ b/blockbench/surgebinding/blocks/rockbud_variant/RockBud2.bbmodel @@ -0,0 +1 @@ +{"meta":{"format_version":"4.5","model_format":"java_block","box_uv":false},"name":"rockbud_variant2","parent":"","ambientocclusion":true,"front_gui_light":false,"visible_box":[1,1,0],"variable_placeholders":"","variable_placeholder_buttons":[],"unhandled_root_fields":{},"resolution":{"width":64,"height":64},"elements":[{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[6,0,6],"to":[10,1,10],"autouv":0,"color":0,"origin":[15,8,15],"faces":{"north":{"uv":[20,19,24,20],"texture":0},"east":{"uv":[32,27,36,28],"texture":0},"south":{"uv":[32,30,36,31],"texture":0},"west":{"uv":[33,11,37,12],"texture":0},"up":{"uv":[28,28,24,24],"texture":0},"down":{"uv":[28,19,24,23],"texture":0}},"type":"cube","uuid":"dfc6c4ee-9b20-b1cf-b68a-68840ab71ff3"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[5,1,5],"to":[11,2,11],"autouv":0,"color":0,"origin":[15,9,15],"faces":{"north":{"uv":[14,29,20,30],"texture":0},"east":{"uv":[0,30,6,31],"texture":0},"south":{"uv":[14,30,20,31],"texture":0},"west":{"uv":[20,30,26,31],"texture":0},"up":{"uv":[14,14,8,8],"texture":0},"down":{"uv":[14,0,8,6],"texture":0}},"type":"cube","uuid":"81ab3df0-7a30-883e-da3f-5edbd1d0d56b"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[4,2,4],"to":[12,4,12],"autouv":0,"color":0,"origin":[15,10,15],"faces":{"north":{"uv":[25,0,33,2],"texture":0},"east":{"uv":[25,2,33,4],"texture":0},"south":{"uv":[25,4,33,6],"texture":0},"west":{"uv":[25,6,33,8],"texture":0},"up":{"uv":[8,8,0,0],"texture":0},"down":{"uv":[8,8,0,16],"texture":0}},"type":"cube","uuid":"acd748e1-74e1-aa79-3d40-45a5510e4180"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[0,3,4],"to":[4,4,12],"autouv":0,"color":7,"rotation":[0,0,45],"origin":[4,3.5,8],"faces":{"north":{"uv":[34,18,38,19],"texture":0},"east":{"uv":[24,23,32,24],"texture":0},"south":{"uv":[34,32,38,33],"texture":0},"west":{"uv":[25,8,33,9],"texture":0},"up":{"uv":[18,8,14,0],"texture":0},"down":{"uv":[4,16,0,24],"texture":0}},"type":"cube","uuid":"3975b324-14b7-87bd-bf2b-7c54047037b4"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-1.474873734152916,0.3180194846605353,5],"to":[1.525126265847084,1.3180194846605353,11],"autouv":0,"color":7,"origin":[4.48743686707646,4.426776695296636,8],"faces":{"north":{"uv":[32,42,35,43],"texture":0},"east":{"uv":[6,31,12,32],"texture":0},"south":{"uv":[35,42,38,43],"texture":0},"west":{"uv":[12,31,18,32],"texture":0},"up":{"uv":[25,6,22,0],"texture":0},"down":{"uv":[25,6,22,12],"texture":0}},"type":"cube","uuid":"cf9a3930-a8e2-b370-d3a6-3b50c144e0f3"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[12,3,4],"to":[16,4,12],"autouv":0,"color":7,"rotation":[0,0,-45],"origin":[12,3.5,8],"faces":{"north":{"uv":[34,33,38,34],"texture":0},"east":{"uv":[25,9,33,10],"texture":0},"south":{"uv":[10,35,14,36],"texture":0},"west":{"uv":[25,10,33,11],"texture":0},"up":{"uv":[8,24,4,16],"texture":0},"down":{"uv":[22,0,18,8],"texture":0}},"type":"cube","uuid":"57687dae-1a12-a202-cd99-2dc3cf048441"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[14.474873734152915,0.3180194846605353,5],"to":[17.474873734152915,1.3180194846605353,11],"autouv":0,"color":7,"origin":[11.512563132923539,4.426776695296636,8],"faces":{"north":{"uv":[38,42,41,43],"texture":0},"east":{"uv":[18,31,24,32],"texture":0},"south":{"uv":[41,42,44,43],"texture":0},"west":{"uv":[24,31,30,32],"texture":0},"up":{"uv":[3,30,0,24],"texture":0},"down":{"uv":[6,24,3,30],"texture":0}},"type":"cube","uuid":"bc622fef-6bb5-1561-de8e-c5382d1da27e"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[4,3,12],"to":[12,4,16],"autouv":0,"color":7,"rotation":[45,0,0],"origin":[8,3.5,12],"faces":{"north":{"uv":[25,11,33,12],"texture":0},"east":{"uv":[24,35,28,36],"texture":0},"south":{"uv":[26,16,34,17],"texture":0},"west":{"uv":[35,0,39,1],"texture":0},"up":{"uv":[22,12,14,8],"texture":0},"down":{"uv":[16,20,8,24],"texture":0}},"type":"cube","uuid":"4d18cc21-a271-0182-26ea-ce7b676bc5ea"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[5,0.3180194846605353,14.474873734152915],"to":[11,1.3180194846605353,17.474873734152915],"autouv":0,"color":7,"origin":[8,4.426776695296636,11.512563132923539],"faces":{"north":{"uv":[30,31,36,32],"texture":0},"east":{"uv":[42,3,45,4],"texture":0},"south":{"uv":[0,32,6,33],"texture":0},"west":{"uv":[42,4,45,5],"texture":0},"up":{"uv":[26,19,20,16],"texture":0},"down":{"uv":[12,24,6,27],"texture":0}},"type":"cube","uuid":"aa1fa152-145a-c86f-6a0a-094c82d8c0f8"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[4,3,0],"to":[12,4,4],"autouv":0,"color":7,"rotation":[-45,0,0],"origin":[8,3.5,4],"faces":{"north":{"uv":[26,17,34,18],"texture":0},"east":{"uv":[35,1,39,2],"texture":0},"south":{"uv":[26,18,34,19],"texture":0},"west":{"uv":[35,2,39,3],"texture":0},"up":{"uv":[24,24,16,20],"texture":0},"down":{"uv":[28,12,20,16],"texture":0}},"type":"cube","uuid":"e567dd13-7520-469c-15be-6fc8e11c1ce5"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[5,0.3180194846605353,-1.474873734152915],"to":[11,1.3180194846605353,1.525126265847085],"autouv":0,"color":7,"origin":[8,4.426776695296636,4.48743686707646],"faces":{"north":{"uv":[6,32,12,33],"texture":0},"east":{"uv":[42,5,45,6],"texture":0},"south":{"uv":[12,32,18,33],"texture":0},"west":{"uv":[42,6,45,7],"texture":0},"up":{"uv":[18,27,12,24],"texture":0},"down":{"uv":[24,24,18,27],"texture":0}},"type":"cube","uuid":"e4f56095-3386-926d-4c63-9c8d62a784be"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[8,5.6875,6],"to":[8,6.6875,10],"autouv":0,"color":5,"origin":[16,13.6875,16],"faces":{"north":{"uv":[0,0,0,1],"texture":0},"east":{"uv":[35,12,39,13],"texture":0},"south":{"uv":[0,0,0,1],"texture":0},"west":{"uv":[35,13,39,14],"texture":0},"up":{"uv":[0,4,0,0],"texture":0},"down":{"uv":[0,0,0,4],"texture":0}},"type":"cube","uuid":"e34e1f9d-4da4-26d1-374c-0a10ccf20445"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[8,5.6875,6],"to":[8,6.6875,10],"autouv":0,"color":5,"rotation":[0,22.5,0],"origin":[8,6.1875,8],"faces":{"north":{"uv":[0,0,0,1],"texture":0},"east":{"uv":[35,14,39,15],"texture":0},"south":{"uv":[0,0,0,1],"texture":0},"west":{"uv":[35,15,39,16],"texture":0},"up":{"uv":[0,4,0,0],"texture":0},"down":{"uv":[0,0,0,4],"texture":0}},"type":"cube","uuid":"25dfcc91-bb31-b869-922b-3218ef1da824"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[8,5.6875,6],"to":[8,6.6875,10],"autouv":0,"color":5,"rotation":[0,45,0],"origin":[8,6.1875,8],"faces":{"north":{"uv":[0,0,0,1],"texture":0},"east":{"uv":[35,19,39,20],"texture":0},"south":{"uv":[0,0,0,1],"texture":0},"west":{"uv":[35,20,39,21],"texture":0},"up":{"uv":[0,4,0,0],"texture":0},"down":{"uv":[0,0,0,4],"texture":0}},"type":"cube","uuid":"2775476f-aeed-93a8-7b07-bfa3c476eec5"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[6,5.6875,8],"to":[10,6.6875,8],"autouv":0,"color":5,"rotation":[0,-22.5,0],"origin":[8,6.1875,8],"faces":{"north":{"uv":[35,21,39,22],"texture":0},"east":{"uv":[0,0,0,1],"texture":0},"south":{"uv":[35,22,39,23],"texture":0},"west":{"uv":[0,0,0,1],"texture":0},"up":{"uv":[4,0,0,0],"texture":0},"down":{"uv":[4,0,0,0],"texture":0}},"type":"cube","uuid":"c9fcc546-4b66-fb1f-a53f-8e66b8d49410"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[6,5.6875,8],"to":[10,6.6875,8],"autouv":0,"color":5,"origin":[8,6.1875,8],"faces":{"north":{"uv":[35,23,39,24],"texture":0},"east":{"uv":[0,0,0,1],"texture":0},"south":{"uv":[35,24,39,25],"texture":0},"west":{"uv":[0,0,0,1],"texture":0},"up":{"uv":[4,0,0,0],"texture":0},"down":{"uv":[4,0,0,0],"texture":0}},"type":"cube","uuid":"e791d8c9-01ef-1460-2db0-3b320bea6b0b"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[6,5.6875,8],"to":[10,6.6875,8],"autouv":0,"color":5,"rotation":[0,22.5,0],"origin":[8,6.1875,8],"faces":{"north":{"uv":[35,25,39,26],"texture":0},"east":{"uv":[0,0,0,1],"texture":0},"south":{"uv":[35,26,39,27],"texture":0},"west":{"uv":[0,0,0,1],"texture":0},"up":{"uv":[4,0,0,0],"texture":0},"down":{"uv":[4,0,0,0],"texture":0}},"type":"cube","uuid":"3ddf4784-aa69-4b17-e873-7aca028ab522"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[6,5.6875,8],"to":[10,6.6875,8],"autouv":0,"color":5,"rotation":[0,45,0],"origin":[8,6.1875,8],"faces":{"north":{"uv":[4,36,8,37],"texture":0},"east":{"uv":[0,0,0,1],"texture":0},"south":{"uv":[8,36,12,37],"texture":0},"west":{"uv":[0,0,0,1],"texture":0},"up":{"uv":[4,0,0,0],"texture":0},"down":{"uv":[4,0,0,0],"texture":0}},"type":"cube","uuid":"ad970ae3-9c92-98f8-eb5f-7d45e2bc3c51"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[8,5.6875,6],"to":[8,6.6875,10],"autouv":0,"color":5,"rotation":[0,-22.5,0],"origin":[8,6.1875,8],"faces":{"north":{"uv":[0,0,0,1],"texture":0},"east":{"uv":[12,36,16,37],"texture":0},"south":{"uv":[0,0,0,1],"texture":0},"west":{"uv":[16,36,20,37],"texture":0},"up":{"uv":[0,4,0,0],"texture":0},"down":{"uv":[0,0,0,4],"texture":0}},"type":"cube","uuid":"70bf14b7-3947-53b4-4807-727ff74304c2"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[6,5.3125,9],"to":[6,6.3125,13],"autouv":0,"color":5,"origin":[14,13.3125,19],"faces":{"north":{"uv":[0,0,0,1],"texture":0},"east":{"uv":[0,38,4,39],"texture":0},"south":{"uv":[0,0,0,1],"texture":0},"west":{"uv":[4,38,8,39],"texture":0},"up":{"uv":[0,4,0,0],"texture":0},"down":{"uv":[0,0,0,4],"texture":0}},"type":"cube","uuid":"27a0ebce-a8f7-2a0b-e37e-2bd7cd0326ce"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[6,5.3125,9],"to":[6,6.3125,13],"autouv":0,"color":5,"rotation":[0,22.5,0],"origin":[6,5.8125,11],"faces":{"north":{"uv":[0,0,0,1],"texture":0},"east":{"uv":[8,38,12,39],"texture":0},"south":{"uv":[0,0,0,1],"texture":0},"west":{"uv":[12,38,16,39],"texture":0},"up":{"uv":[0,4,0,0],"texture":0},"down":{"uv":[0,0,0,4],"texture":0}},"type":"cube","uuid":"d71827db-0605-4130-b9b0-c1cf2bf215cb"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[6,5.3125,9],"to":[6,6.3125,13],"autouv":0,"color":5,"rotation":[0,45,0],"origin":[6,5.8125,11],"faces":{"north":{"uv":[0,0,0,1],"texture":0},"east":{"uv":[16,38,20,39],"texture":0},"south":{"uv":[0,0,0,1],"texture":0},"west":{"uv":[20,38,24,39],"texture":0},"up":{"uv":[0,4,0,0],"texture":0},"down":{"uv":[0,0,0,4],"texture":0}},"type":"cube","uuid":"51978212-2987-50cb-cc3b-b7ed49eba1f3"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[4,5.3125,11],"to":[8,6.3125,11],"autouv":0,"color":5,"rotation":[0,-22.5,0],"origin":[6,5.8125,11],"faces":{"north":{"uv":[24,38,28,39],"texture":0},"east":{"uv":[0,0,0,1],"texture":0},"south":{"uv":[28,38,32,39],"texture":0},"west":{"uv":[0,0,0,1],"texture":0},"up":{"uv":[4,0,0,0],"texture":0},"down":{"uv":[4,0,0,0],"texture":0}},"type":"cube","uuid":"fa0d9911-cb56-3632-3af5-e1a6ec9c851f"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[4,5.3125,11],"to":[8,6.3125,11],"autouv":0,"color":5,"origin":[6,5.8125,11],"faces":{"north":{"uv":[32,38,36,39],"texture":0},"east":{"uv":[0,0,0,1],"texture":0},"south":{"uv":[36,38,40,39],"texture":0},"west":{"uv":[0,0,0,1],"texture":0},"up":{"uv":[4,0,0,0],"texture":0},"down":{"uv":[4,0,0,0],"texture":0}},"type":"cube","uuid":"fdee570b-b3e8-1d20-3115-6dfb98574579"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[4,5.3125,11],"to":[8,6.3125,11],"autouv":0,"color":5,"rotation":[0,22.5,0],"origin":[6,5.8125,11],"faces":{"north":{"uv":[38,18,42,19],"texture":0},"east":{"uv":[0,0,0,1],"texture":0},"south":{"uv":[38,32,42,33],"texture":0},"west":{"uv":[0,0,0,1],"texture":0},"up":{"uv":[4,0,0,0],"texture":0},"down":{"uv":[4,0,0,0],"texture":0}},"type":"cube","uuid":"8b159038-c95e-1448-8b0b-eb386f306024"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[4,5.3125,11],"to":[8,6.3125,11],"autouv":0,"color":5,"rotation":[0,45,0],"origin":[6,5.8125,11],"faces":{"north":{"uv":[38,33,42,34],"texture":0},"east":{"uv":[0,0,0,1],"texture":0},"south":{"uv":[0,39,4,40],"texture":0},"west":{"uv":[0,0,0,1],"texture":0},"up":{"uv":[4,0,0,0],"texture":0},"down":{"uv":[4,0,0,0],"texture":0}},"type":"cube","uuid":"079eea1d-eefb-6181-d7f8-d79ec44fca01"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[6,5.3125,9],"to":[6,6.3125,13],"autouv":0,"color":5,"rotation":[0,-22.5,0],"origin":[6,5.8125,11],"faces":{"north":{"uv":[0,0,0,1],"texture":0},"east":{"uv":[4,39,8,40],"texture":0},"south":{"uv":[0,0,0,1],"texture":0},"west":{"uv":[8,39,12,40],"texture":0},"up":{"uv":[0,4,0,0],"texture":0},"down":{"uv":[0,0,0,4],"texture":0}},"type":"cube","uuid":"58fc7f46-3e1d-f880-c88c-7c5c81b99d5a"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[5,3.75,3],"to":[7,5.75,6],"autouv":0,"color":6,"inflate":-0.25,"origin":[6,4.75,5],"faces":{"north":{"uv":[2,40,4,42],"texture":0},"east":{"uv":[18,32,21,34],"texture":0},"south":{"uv":[4,40,6,42],"texture":0},"west":{"uv":[21,32,24,34],"texture":0},"up":{"uv":[26,35,24,32],"texture":0},"down":{"uv":[28,32,26,35],"texture":0}},"type":"cube","uuid":"ae09116a-24a9-19da-8a3d-b8d8ce804b5c"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[5,4,5],"to":[7,6,7],"autouv":0,"color":6,"origin":[14,12,13],"faces":{"north":{"uv":[12,6,14,8],"texture":0},"east":{"uv":[18,12,20,14],"texture":0},"south":{"uv":[39,21,41,23],"texture":0},"west":{"uv":[39,23,41,25],"texture":0},"up":{"uv":[41,27,39,25],"texture":0},"down":{"uv":[2,40,0,42],"texture":0}},"type":"cube","uuid":"a04b2e66-67c5-eb0d-8b2b-1e39c6613ade"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[5.5,4,0.8125],"to":[6.5,5,3.8125],"autouv":0,"color":5,"inflate":0.125,"rotation":[-45,0,0],"origin":[6,4.5,3.3125],"faces":{"north":{"uv":[45,18,46,19],"texture":0},"east":{"uv":[42,9,45,10],"texture":0},"south":{"uv":[45,19,46,20],"texture":0},"west":{"uv":[42,10,45,11],"texture":0},"up":{"uv":[7,46,6,43],"texture":0},"down":{"uv":[8,43,7,46],"texture":0}},"type":"cube","uuid":"8c164554-7495-53db-c533-32eac92f4573"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[4.4375,2,1.0625],"to":[6.4375,3,2.0625],"autouv":0,"color":0,"inflate":0.0625,"origin":[13.4375,10,9.0625],"faces":{"north":{"uv":[22,27,24,28],"texture":0},"east":{"uv":[45,20,46,21],"texture":0},"south":{"uv":[20,29,22,30],"texture":0},"west":{"uv":[45,21,46,22],"texture":0},"up":{"uv":[6,36,4,35],"texture":0},"down":{"uv":[16,35,14,36],"texture":0}},"type":"cube","uuid":"8cc5f78d-5d5d-13c5-5ba8-e97461cf6bb7"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[2.4375,3.75,5],"to":[5.4375,5.75,7],"autouv":0,"color":6,"inflate":-0.25,"origin":[4.4375,4.75,6],"faces":{"north":{"uv":[28,32,31,34],"texture":0},"east":{"uv":[6,40,8,42],"texture":0},"south":{"uv":[31,32,34,34],"texture":0},"west":{"uv":[8,40,10,42],"texture":0},"up":{"uv":[35,14,32,12],"texture":0},"down":{"uv":[35,14,32,16],"texture":0}},"type":"cube","uuid":"399c163a-6ac5-8be0-4992-cf06fba50ccf"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-0.75,4,5.5],"to":[3.25,5,6.5],"autouv":0,"color":5,"inflate":0.125,"rotation":[0,0,45],"origin":[2.75,4.5,6],"faces":{"north":{"uv":[10,40,14,41],"texture":0},"east":{"uv":[45,33,46,34],"texture":0},"south":{"uv":[14,40,18,41],"texture":0},"west":{"uv":[45,38,46,39],"texture":0},"up":{"uv":[22,41,18,40],"texture":0},"down":{"uv":[26,40,22,41],"texture":0}},"type":"cube","uuid":"380a1bb5-4b99-1045-9e74-d5d5d3c5d4d0"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-0.25,1.5,4.4375],"to":[0.75,2.5,6.4375],"autouv":0,"color":0,"inflate":0.0625,"origin":[7.75,9.5,13.4375],"faces":{"north":{"uv":[45,39,46,40],"texture":0},"east":{"uv":[43,29,45,30],"texture":0},"south":{"uv":[45,40,46,41],"texture":0},"west":{"uv":[43,30,45,31],"texture":0},"up":{"uv":[44,36,43,34],"texture":0},"down":{"uv":[44,36,43,38],"texture":0}},"type":"cube","uuid":"e7b70214-05b2-2b11-52a1-ed23a299c777"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-0.25,1.1875,3],"to":[0.75,2.1875,5],"autouv":0,"color":3,"rotation":[-45,0,0],"origin":[0.25,1.6875,4.5],"faces":{"north":{"uv":[45,41,46,42],"texture":0},"east":{"uv":[43,38,45,39],"texture":0},"south":{"uv":[0,46,1,47],"texture":0},"west":{"uv":[43,39,45,40],"texture":0},"up":{"uv":[1,46,0,44],"texture":0},"down":{"uv":[2,44,1,46],"texture":0}},"type":"cube","uuid":"5f1b501c-a4be-a661-824c-b36f165fbda6"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[9,4,5],"to":[11,6,7],"autouv":0,"color":6,"origin":[3,12,14],"faces":{"north":{"uv":[26,40,28,42],"texture":0},"east":{"uv":[28,40,30,42],"texture":0},"south":{"uv":[30,40,32,42],"texture":0},"west":{"uv":[32,40,34,42],"texture":0},"up":{"uv":[36,42,34,40],"texture":0},"down":{"uv":[38,40,36,42],"texture":0}},"type":"cube","uuid":"945d0c38-0b0e-21b2-7ed1-d4554a718d96"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[10,3.75,5],"to":[13,5.75,7],"autouv":0,"color":6,"inflate":-0.25,"origin":[11,4.75,6],"faces":{"north":{"uv":[32,19,35,21],"texture":0},"east":{"uv":[38,40,40,42],"texture":0},"south":{"uv":[32,21,35,23],"texture":0},"west":{"uv":[40,40,42,42],"texture":0},"up":{"uv":[35,25,32,23],"texture":0},"down":{"uv":[35,25,32,27],"texture":0}},"type":"cube","uuid":"7f15accd-b74b-31c7-c72d-e1287c2bb8cc"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[12.1875,4,5.5],"to":[15.1875,5,6.5],"autouv":0,"color":5,"inflate":0.125,"rotation":[0,0,-45],"origin":[12.6875,4.5,6],"faces":{"north":{"uv":[42,41,45,42],"texture":0},"east":{"uv":[3,46,4,47],"texture":0},"south":{"uv":[8,43,11,44],"texture":0},"west":{"uv":[6,46,7,47],"texture":0},"up":{"uv":[14,44,11,43],"texture":0},"down":{"uv":[17,43,14,44],"texture":0}},"type":"cube","uuid":"1e1273f6-b391-9328-a8df-14b5aa9202fa"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[13.9375,2,4.4375],"to":[14.9375,3,6.4375],"autouv":0,"color":0,"inflate":0.0625,"origin":[6.9375,10,13.4375],"faces":{"north":{"uv":[7,46,8,47],"texture":0},"east":{"uv":[10,44,12,45],"texture":0},"south":{"uv":[8,46,9,47],"texture":0},"west":{"uv":[12,44,14,45],"texture":0},"up":{"uv":[15,46,14,44],"texture":0},"down":{"uv":[16,44,15,46],"texture":0}},"type":"cube","uuid":"fdba7bd4-fa24-f292-1d27-edebd39227a0"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[13.9375,1.6875,2],"to":[14.9375,2.6875,5],"autouv":0,"color":3,"rotation":[-45,0,0],"origin":[14.4375,2.1875,4.5],"faces":{"north":{"uv":[9,46,10,47],"texture":0},"east":{"uv":[17,43,20,44],"texture":0},"south":{"uv":[10,46,11,47],"texture":0},"west":{"uv":[20,43,23,44],"texture":0},"up":{"uv":[24,46,23,43],"texture":0},"down":{"uv":[25,43,24,46],"texture":0}},"type":"cube","uuid":"2b249a1e-dca7-b19e-0362-092d1dcec130"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[9,3.75,2.4375],"to":[11,5.75,5.4375],"autouv":0,"color":6,"inflate":-0.25,"origin":[10,4.75,4.4375],"faces":{"north":{"uv":[40,3,42,5],"texture":0},"east":{"uv":[0,33,3,35],"texture":0},"south":{"uv":[40,5,42,7],"texture":0},"west":{"uv":[3,33,6,35],"texture":0},"up":{"uv":[8,36,6,33],"texture":0},"down":{"uv":[10,33,8,36],"texture":0}},"type":"cube","uuid":"b04e8fd8-f677-886f-eb3e-e509408e882d"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[9.5,4,-0.75],"to":[10.5,5,3.25],"autouv":0,"color":5,"inflate":0.125,"rotation":[-45,0,0],"origin":[10,4.5,2.75],"faces":{"north":{"uv":[13,46,14,47],"texture":0},"east":{"uv":[40,7,44,8],"texture":0},"south":{"uv":[14,46,15,47],"texture":0},"west":{"uv":[40,8,44,9],"texture":0},"up":{"uv":[41,31,40,27],"texture":0},"down":{"uv":[41,36,40,40],"texture":0}},"type":"cube","uuid":"cbd3d12d-27d3-b14c-e9ee-0bb2985736a9"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[9.5625,1.5,-0.25],"to":[11.5625,2.5,0.75],"autouv":0,"color":0,"inflate":0.0625,"origin":[2.5625,9.5,7.75],"faces":{"north":{"uv":[25,44,27,45],"texture":0},"east":{"uv":[15,46,16,47],"texture":0},"south":{"uv":[32,44,34,45],"texture":0},"west":{"uv":[18,46,19,47],"texture":0},"up":{"uv":[36,45,34,44],"texture":0},"down":{"uv":[38,44,36,45],"texture":0}},"type":"cube","uuid":"3a132c74-93dd-60d8-cce7-7767f5923059"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[9,4,9],"to":[11,6,11],"autouv":0,"color":6,"origin":[2,12,3],"faces":{"north":{"uv":[40,9,42,11],"texture":0},"east":{"uv":[10,41,12,43],"texture":0},"south":{"uv":[12,41,14,43],"texture":0},"west":{"uv":[14,41,16,43],"texture":0},"up":{"uv":[18,43,16,41],"texture":0},"down":{"uv":[20,41,18,43],"texture":0}},"type":"cube","uuid":"a9931b54-00e9-9020-0eec-867da2136efb"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[9,3.75,10],"to":[11,5.75,13],"autouv":0,"color":6,"inflate":-0.25,"origin":[10,4.75,11],"faces":{"north":{"uv":[20,41,22,43],"texture":0},"east":{"uv":[10,33,13,35],"texture":0},"south":{"uv":[22,41,24,43],"texture":0},"west":{"uv":[13,33,16,35],"texture":0},"up":{"uv":[18,36,16,33],"texture":0},"down":{"uv":[35,0,33,3],"texture":0}},"type":"cube","uuid":"b858ce77-f139-fa1f-f12f-8459c7eae6a9"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[9.5,4,12.1875],"to":[10.5,5,15.1875],"autouv":0,"color":5,"inflate":0.125,"rotation":[45,0,0],"origin":[10,4.5,12.6875],"faces":{"north":{"uv":[23,46,24,47],"texture":0},"east":{"uv":[25,43,28,44],"texture":0},"south":{"uv":[24,46,25,47],"texture":0},"west":{"uv":[32,43,35,44],"texture":0},"up":{"uv":[29,46,28,43],"texture":0},"down":{"uv":[30,43,29,46],"texture":0}},"type":"cube","uuid":"ec1a0187-ce9b-38d4-a71f-1d9050c29d3c"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[9.5625,2,13.9375],"to":[11.5625,3,14.9375],"autouv":0,"color":0,"inflate":0.0625,"origin":[2.5625,10,6.9375],"faces":{"north":{"uv":[44,25,46,26],"texture":0},"east":{"uv":[25,46,26,47],"texture":0},"south":{"uv":[44,26,46,27],"texture":0},"west":{"uv":[26,46,27,47],"texture":0},"up":{"uv":[46,28,44,27],"texture":0},"down":{"uv":[46,28,44,29],"texture":0}},"type":"cube","uuid":"a83a00d8-4f8f-4e28-ce36-89b159fd5c69"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[10.5625,3.75,9],"to":[13.5625,5.75,11],"autouv":0,"color":6,"inflate":-0.25,"origin":[11.5625,4.75,10],"faces":{"north":{"uv":[33,3,36,5],"texture":0},"east":{"uv":[24,41,26,43],"texture":0},"south":{"uv":[33,5,36,7],"texture":0},"west":{"uv":[41,16,43,18],"texture":0},"up":{"uv":[36,9,33,7],"texture":0},"down":{"uv":[36,9,33,11],"texture":0}},"type":"cube","uuid":"fca1caff-66fe-82cf-b053-877bea1454e9"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[12.75,4,9.5],"to":[16.75,5,10.5],"autouv":0,"color":5,"inflate":0.125,"rotation":[0,0,-45],"origin":[13.25,4.5,10],"faces":{"north":{"uv":[40,31,44,32],"texture":0},"east":{"uv":[31,46,32,47],"texture":0},"south":{"uv":[41,11,45,12],"texture":0},"west":{"uv":[34,46,35,47],"texture":0},"up":{"uv":[45,22,41,21],"texture":0},"down":{"uv":[45,22,41,23],"texture":0}},"type":"cube","uuid":"25bf4787-56f3-6e90-2a3a-738663df3a4d"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[15.25,1.5,9.5625],"to":[16.25,2.5,11.5625],"autouv":0,"color":0,"inflate":0.0625,"origin":[8.25,9.5,2.5625],"faces":{"north":{"uv":[35,46,36,47],"texture":0},"east":{"uv":[44,37,46,38],"texture":0},"south":{"uv":[36,46,37,47],"texture":0},"west":{"uv":[44,42,46,43],"texture":0},"up":{"uv":[23,46,22,44],"texture":0},"down":{"uv":[28,44,27,46],"texture":0}},"type":"cube","uuid":"1e8ba1bf-0a33-aa9e-e37a-963efb50cd8b"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[15.25,1.1875,11],"to":[16.25,2.1875,13],"autouv":0,"color":3,"rotation":[45,0,0],"origin":[15.75,1.6875,11.5],"faces":{"north":{"uv":[37,46,38,47],"texture":0},"east":{"uv":[44,43,46,44],"texture":0},"south":{"uv":[40,46,41,47],"texture":0},"west":{"uv":[2,45,4,46],"texture":0},"up":{"uv":[5,47,4,45],"texture":0},"down":{"uv":[6,45,5,47],"texture":0}},"type":"cube","uuid":"e37508de-7360-0b8a-5b17-43d292feac03"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[5,4,5],"to":[11,5,11],"autouv":0,"color":0,"inflate":0.0625,"origin":[8,4.5,8],"faces":{"north":{"uv":[26,30,32,31],"texture":0},"east":{"uv":[30,28,36,29],"texture":0},"south":{"uv":[30,29,36,30],"texture":0},"west":{"uv":[0,31,6,32],"texture":0},"up":{"uv":[14,20,8,14],"texture":0},"down":{"uv":[20,14,14,20],"texture":0}},"type":"cube","uuid":"2c508eaa-4f9c-efd9-171e-1597ef51a23a"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[5,4,9],"to":[7,6,11],"autouv":0,"color":6,"origin":[13,12,2],"faces":{"north":{"uv":[41,23,43,25],"texture":0},"east":{"uv":[41,25,43,27],"texture":0},"south":{"uv":[41,27,43,29],"texture":0},"west":{"uv":[41,29,43,31],"texture":0},"up":{"uv":[43,36,41,34],"texture":0},"down":{"uv":[43,36,41,38],"texture":0}},"type":"cube","uuid":"80031d17-9f52-6b47-ec7b-84571c75b8bd"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[3,3.75,9],"to":[6,5.75,11],"autouv":0,"color":6,"inflate":-0.25,"origin":[5,4.75,10],"faces":{"north":{"uv":[18,34,21,36],"texture":0},"east":{"uv":[41,38,43,40],"texture":0},"south":{"uv":[21,34,24,36],"texture":0},"west":{"uv":[0,42,2,44],"texture":0},"up":{"uv":[31,36,28,34],"texture":0},"down":{"uv":[34,34,31,36],"texture":0}},"type":"cube","uuid":"58d13cd5-ce7d-deef-a35a-3cd6425e8c50"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[0.8125,4,9.5],"to":[3.8125,5,10.5],"autouv":0,"color":5,"inflate":0.125,"rotation":[0,0,45],"origin":[3.3125,4.5,10],"faces":{"north":{"uv":[43,1,46,2],"texture":0},"east":{"uv":[43,46,44,47],"texture":0},"south":{"uv":[43,2,46,3],"texture":0},"west":{"uv":[44,46,45,47],"texture":0},"up":{"uv":[46,13,43,12],"texture":0},"down":{"uv":[46,13,43,14],"texture":0}},"type":"cube","uuid":"1c227a26-9555-3d37-80b0-340ea46bbaf2"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[1.0625,2,9.5625],"to":[2.0625,3,11.5625],"autouv":0,"color":0,"inflate":0.0625,"origin":[9.0625,10,2.5625],"faces":{"north":{"uv":[45,46,46,47],"texture":0},"east":{"uv":[18,45,20,46],"texture":0},"south":{"uv":[46,46,47,47],"texture":0},"west":{"uv":[25,45,27,46],"texture":0},"up":{"uv":[33,47,32,45],"texture":0},"down":{"uv":[34,45,33,47],"texture":0}},"type":"cube","uuid":"00469cba-9736-7b3a-9034-3f30a9cc14cd"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[1.0625,1.6875,11],"to":[2.0625,2.6875,14],"autouv":0,"color":3,"rotation":[45,0,0],"origin":[1.5625,2.1875,11.5],"faces":{"north":{"uv":[46,0,47,1],"texture":0},"east":{"uv":[43,14,46,15],"texture":0},"south":{"uv":[46,1,47,2],"texture":0},"west":{"uv":[43,15,46,16],"texture":0},"up":{"uv":[44,26,43,23],"texture":0},"down":{"uv":[44,26,43,29],"texture":0}},"type":"cube","uuid":"b2d17fdb-6ea2-9e0d-a515-9534f0a86027"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[5,3.75,10.5625],"to":[7,5.75,13.5625],"autouv":0,"color":6,"inflate":-0.25,"origin":[6,4.75,11.5625],"faces":{"north":{"uv":[2,42,4,44],"texture":0},"east":{"uv":[34,34,37,36],"texture":0},"south":{"uv":[4,42,6,44],"texture":0},"west":{"uv":[34,16,37,18],"texture":0},"up":{"uv":[2,38,0,35],"texture":0},"down":{"uv":[4,35,2,38],"texture":0}},"type":"cube","uuid":"00380398-1fb0-b632-88db-3953cc20a5c8"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[5.5,4,12.75],"to":[6.5,5,16.75],"autouv":0,"color":5,"inflate":0.125,"rotation":[45,0,0],"origin":[6,4.5,13.25],"faces":{"north":{"uv":[46,8,47,9],"texture":0},"east":{"uv":[6,42,10,43],"texture":0},"south":{"uv":[46,12,47,13],"texture":0},"west":{"uv":[26,42,30,43],"texture":0},"up":{"uv":[31,46,30,42],"texture":0},"down":{"uv":[32,42,31,46],"texture":0}},"type":"cube","uuid":"bc42de9c-f278-35e9-8507-e4a6c6a4b1ee"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[4.4375,1.5,15.25],"to":[6.4375,2.5,16.25],"autouv":0,"color":0,"inflate":0.0625,"origin":[13.4375,9.5,8.25],"faces":{"north":{"uv":[40,45,42,46],"texture":0},"east":{"uv":[46,13,47,14],"texture":0},"south":{"uv":[42,45,44,46],"texture":0},"west":{"uv":[46,14,47,15],"texture":0},"up":{"uv":[46,46,44,45],"texture":0},"down":{"uv":[47,3,45,4],"texture":0}},"type":"cube","uuid":"eec63572-7b38-b82b-7ee7-24fba748744b"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[5,4.75,6],"to":[5,6.75,10],"autouv":0,"color":5,"origin":[13,13.75,16],"faces":{"north":{"uv":[0,0,0,2],"texture":0},"east":{"uv":[8,6,12,8],"texture":0},"south":{"uv":[0,0,0,2],"texture":0},"west":{"uv":[14,12,18,14],"texture":0},"up":{"uv":[0,4,0,0],"texture":0},"down":{"uv":[0,0,0,4],"texture":0}},"type":"cube","uuid":"25993725-0f18-4821-d003-4b8dc9bab086"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[5,4.75,6],"to":[5,6.75,10],"autouv":0,"color":5,"rotation":[0,22.5,0],"origin":[5,6.25,8],"faces":{"north":{"uv":[0,0,0,2],"texture":0},"east":{"uv":[6,27,10,29],"texture":0},"south":{"uv":[0,0,0,2],"texture":0},"west":{"uv":[10,27,14,29],"texture":0},"up":{"uv":[0,4,0,0],"texture":0},"down":{"uv":[0,0,0,4],"texture":0}},"type":"cube","uuid":"24ba7757-6d81-30a5-a4ca-043a09bfcf10"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[5,4.75,6],"to":[5,6.75,10],"autouv":0,"color":5,"rotation":[0,45,0],"origin":[5,6.25,8],"faces":{"north":{"uv":[0,0,0,2],"texture":0},"east":{"uv":[14,27,18,29],"texture":0},"south":{"uv":[0,0,0,2],"texture":0},"west":{"uv":[18,27,22,29],"texture":0},"up":{"uv":[0,4,0,0],"texture":0},"down":{"uv":[0,0,0,4],"texture":0}},"type":"cube","uuid":"40db50a7-8fb1-416d-b457-d67267810051"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[3,4.75,8],"to":[7,6.75,8],"autouv":0,"color":5,"rotation":[0,-22.5,0],"origin":[5,6.25,8],"faces":{"north":{"uv":[22,28,26,30],"texture":0},"east":{"uv":[0,0,0,2],"texture":0},"south":{"uv":[26,28,30,30],"texture":0},"west":{"uv":[0,0,0,2],"texture":0},"up":{"uv":[4,0,0,0],"texture":0},"down":{"uv":[4,0,0,0],"texture":0}},"type":"cube","uuid":"b6d17113-a614-6b9e-01a0-2606b8e59af3"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[3,4.75,8],"to":[7,6.75,8],"autouv":0,"color":5,"origin":[5,6.25,8],"faces":{"north":{"uv":[28,12,32,14],"texture":0},"east":{"uv":[0,0,0,2],"texture":0},"south":{"uv":[28,14,32,16],"texture":0},"west":{"uv":[0,0,0,2],"texture":0},"up":{"uv":[4,0,0,0],"texture":0},"down":{"uv":[4,0,0,0],"texture":0}},"type":"cube","uuid":"cb0f0afd-1b16-35c5-ef6b-6dfae9f56834"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[3,4.75,8],"to":[7,6.75,8],"autouv":0,"color":5,"rotation":[0,22.5,0],"origin":[5,6.25,8],"faces":{"north":{"uv":[28,19,32,21],"texture":0},"east":{"uv":[0,0,0,2],"texture":0},"south":{"uv":[28,21,32,23],"texture":0},"west":{"uv":[0,0,0,2],"texture":0},"up":{"uv":[4,0,0,0],"texture":0},"down":{"uv":[4,0,0,0],"texture":0}},"type":"cube","uuid":"341a62f7-a029-58f7-d0af-efe6e4bbe15c"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[3,4.75,8],"to":[7,6.75,8],"autouv":0,"color":5,"rotation":[0,45,0],"origin":[5,6.25,8],"faces":{"north":{"uv":[28,24,32,26],"texture":0},"east":{"uv":[0,0,0,2],"texture":0},"south":{"uv":[28,26,32,28],"texture":0},"west":{"uv":[0,0,0,2],"texture":0},"up":{"uv":[4,0,0,0],"texture":0},"down":{"uv":[4,0,0,0],"texture":0}},"type":"cube","uuid":"dba04d25-aac0-9491-9ed4-37700daa7c0e"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[5,4.75,6],"to":[5,6.75,10],"autouv":0,"color":5,"rotation":[0,-22.5,0],"origin":[5,6.25,8],"faces":{"north":{"uv":[0,0,0,2],"texture":0},"east":{"uv":[6,29,10,31],"texture":0},"south":{"uv":[0,0,0,2],"texture":0},"west":{"uv":[10,29,14,31],"texture":0},"up":{"uv":[0,4,0,0],"texture":0},"down":{"uv":[0,0,0,4],"texture":0}},"type":"cube","uuid":"233e4173-fc57-92c1-cb16-33cfe6ff6d77"}],"outliner":[{"name":"group","origin":[8,8,8],"color":0,"uuid":"9d985a48-53f2-58f6-02e5-80cee0c514ab","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["dfc6c4ee-9b20-b1cf-b68a-68840ab71ff3","81ab3df0-7a30-883e-da3f-5edbd1d0d56b","acd748e1-74e1-aa79-3d40-45a5510e4180","2c508eaa-4f9c-efd9-171e-1597ef51a23a"]},{"name":"group","origin":[15,10,15],"color":0,"uuid":"6534abfb-7475-3213-e227-6bc4d5e4ca30","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["3975b324-14b7-87bd-bf2b-7c54047037b4",{"name":"group","origin":[11,11,12],"color":0,"uuid":"691d9295-3d66-228b-1cc5-d66ac5298db3","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["cf9a3930-a8e2-b370-d3a6-3b50c144e0f3"]}]},{"name":"group","origin":[15,10,15],"color":0,"uuid":"87e1cc84-22e2-b4cd-f1c3-04c3dee5dd2e","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["57687dae-1a12-a202-cd99-2dc3cf048441",{"name":"group","origin":[11,11,12],"color":0,"uuid":"faadfb34-3e32-a744-7055-31f00c492088","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["bc622fef-6bb5-1561-de8e-c5382d1da27e"]}]},{"name":"group","origin":[15,10,15],"color":0,"uuid":"5c3bd61c-a87c-1557-906a-3747ceb3d428","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["4d18cc21-a271-0182-26ea-ce7b676bc5ea",{"name":"group","origin":[11,11,12],"color":0,"uuid":"46cae728-2e0c-58a4-2c65-5b7a25757eaf","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["aa1fa152-145a-c86f-6a0a-094c82d8c0f8"]}]},{"name":"group","origin":[15,10,15],"color":0,"uuid":"319a3c0e-92b8-7956-f6e9-3a311f302d4f","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["e567dd13-7520-469c-15be-6fc8e11c1ce5",{"name":"group","origin":[11,11,12],"color":0,"uuid":"da0dcc44-c266-2ab0-ef78-3825b1cea3ca","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["e4f56095-3386-926d-4c63-9c8d62a784be"]}]},{"name":"flower1","origin":[8,8,8],"color":0,"uuid":"dfa291b8-23e4-55af-e2b6-29a876bff1be","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["e34e1f9d-4da4-26d1-374c-0a10ccf20445","25dfcc91-bb31-b869-922b-3218ef1da824","2775476f-aeed-93a8-7b07-bfa3c476eec5","c9fcc546-4b66-fb1f-a53f-8e66b8d49410","e791d8c9-01ef-1460-2db0-3b320bea6b0b","3ddf4784-aa69-4b17-e873-7aca028ab522","ad970ae3-9c92-98f8-eb5f-7d45e2bc3c51","70bf14b7-3947-53b4-4807-727ff74304c2"]},{"name":"flower4","origin":[8,8,8],"color":0,"uuid":"de365a90-950e-a2ed-7dca-28edb1d98f5f","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["27a0ebce-a8f7-2a0b-e37e-2bd7cd0326ce","d71827db-0605-4130-b9b0-c1cf2bf215cb","51978212-2987-50cb-cc3b-b7ed49eba1f3","fa0d9911-cb56-3632-3af5-e1a6ec9c851f","fdee570b-b3e8-1d20-3115-6dfb98574579","8b159038-c95e-1448-8b0b-eb386f306024","079eea1d-eefb-6181-d7f8-d79ec44fca01","58fc7f46-3e1d-f880-c88c-7c5c81b99d5a"]},{"name":"flower6","origin":[8,8,8],"color":0,"uuid":"67c8e104-eb2a-9c28-975f-45c6202e789e","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["25993725-0f18-4821-d003-4b8dc9bab086","24ba7757-6d81-30a5-a4ca-043a09bfcf10","40db50a7-8fb1-416d-b457-d67267810051","b6d17113-a614-6b9e-01a0-2606b8e59af3","cb0f0afd-1b16-35c5-ef6b-6dfae9f56834","341a62f7-a029-58f7-d0af-efe6e4bbe15c","dba04d25-aac0-9491-9ed4-37700daa7c0e","233e4173-fc57-92c1-cb16-33cfe6ff6d77"]},{"name":"group","origin":[8,8,8],"color":0,"uuid":"71757c43-14b6-f4f5-d906-c901675071b3","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["a04b2e66-67c5-eb0d-8b2b-1e39c6613ade",{"name":"group","origin":[14,12,13],"color":0,"uuid":"fa876bde-ca01-2bdb-3fcb-9ae4a555c862","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["ae09116a-24a9-19da-8a3d-b8d8ce804b5c",{"name":"group","origin":[4.4375,4.75,6],"color":0,"uuid":"01a20b05-a0c0-249d-e3c7-1b2d03f46270","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["8c164554-7495-53db-c533-32eac92f4573",{"name":"group","origin":[2.75,4.5,6],"color":0,"uuid":"44f24956-916d-b383-5bcf-a502253e08be","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["8cc5f78d-5d5d-13c5-5ba8-e97461cf6bb7",{"name":"group","origin":[7.875,9.5,13.4375],"color":0,"uuid":"04e2be59-7055-90d6-6c5a-2c4e81f13916","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[0.25,1.6875,4.5],"color":0,"uuid":"5bfc8e2d-081d-2562-54a7-8c4e074481fc","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[]}]}]}]}]},{"name":"group","origin":[14,12,13],"color":0,"uuid":"3e0fc0c1-dab2-e2c8-0144-fe99a471f69c","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["399c163a-6ac5-8be0-4992-cf06fba50ccf",{"name":"group","origin":[4.4375,4.75,6],"color":0,"uuid":"23b78a32-c5a5-c593-3f7f-f0e6c8c6d0bb","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["380a1bb5-4b99-1045-9e74-d5d5d3c5d4d0",{"name":"group","origin":[2.75,4.5,6],"color":0,"uuid":"144f50b7-186c-ff5d-b88b-58a6f004e465","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["e7b70214-05b2-2b11-52a1-ed23a299c777",{"name":"group","origin":[7.875,9.5,13.4375],"color":0,"uuid":"0d1aa47b-3336-ae11-c99c-8c33122e0679","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["5f1b501c-a4be-a661-824c-b36f165fbda6",{"name":"group","origin":[0.25,1.6875,4.5],"color":0,"uuid":"d4329ad8-e90e-7a62-1a08-51ac6406a0a7","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[]}]}]}]}]}]},{"name":"group","origin":[8,8,8],"color":0,"uuid":"dd961576-16db-a252-e834-04a48de93842","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["945d0c38-0b0e-21b2-7ed1-d4554a718d96",{"name":"group","origin":[14,12,13],"color":0,"uuid":"9f5fe069-c120-953e-679f-e5accee53636","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["7f15accd-b74b-31c7-c72d-e1287c2bb8cc",{"name":"group","origin":[4.4375,4.75,6],"color":0,"uuid":"635e56ba-f192-2e4c-42aa-7db2af61c213","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["1e1273f6-b391-9328-a8df-14b5aa9202fa",{"name":"group","origin":[2.75,4.5,6],"color":0,"uuid":"22e2d4a5-15e5-8293-938a-08e182b3eca3","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["fdba7bd4-fa24-f292-1d27-edebd39227a0",{"name":"group","origin":[7.875,9.5,13.4375],"color":0,"uuid":"d23f890f-4f79-2000-5656-c274e526f1f6","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["2b249a1e-dca7-b19e-0362-092d1dcec130",{"name":"group","origin":[0.25,1.6875,4.5],"color":0,"uuid":"fb79aeb3-a95c-bfe4-6f54-cb303e457ff6","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[]}]}]}]}]},{"name":"group","origin":[14,12,13],"color":0,"uuid":"0763052f-9370-ebae-2351-8b1c45ab0c85","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["b04e8fd8-f677-886f-eb3e-e509408e882d",{"name":"group","origin":[4.4375,4.75,6],"color":0,"uuid":"9bc496de-88b4-1516-cf61-90c8167501d5","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["cbd3d12d-27d3-b14c-e9ee-0bb2985736a9",{"name":"group","origin":[2.75,4.5,6],"color":0,"uuid":"728534c7-d79f-f651-db1c-7a96733f6b3c","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["3a132c74-93dd-60d8-cce7-7767f5923059",{"name":"group","origin":[7.875,9.5,13.4375],"color":0,"uuid":"dcab58ce-5c05-fed4-38b4-9ab893163a1d","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[0.25,1.6875,4.5],"color":0,"uuid":"e63b457c-79f1-a358-131d-f31f65118892","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[]}]}]}]}]}]},{"name":"group","origin":[8,8,8],"color":0,"uuid":"15a725af-991a-e10a-c504-8cdf49439f2a","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["a9931b54-00e9-9020-0eec-867da2136efb",{"name":"group","origin":[14,12,13],"color":0,"uuid":"177ca692-ecd0-4f2a-387b-fe546bf9d896","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["b858ce77-f139-fa1f-f12f-8459c7eae6a9",{"name":"group","origin":[4.4375,4.75,6],"color":0,"uuid":"d76cf09c-fa81-9748-549f-30dcd3d6d66f","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["ec1a0187-ce9b-38d4-a71f-1d9050c29d3c",{"name":"group","origin":[2.75,4.5,6],"color":0,"uuid":"60b49778-3628-7f5f-ad15-7604f41c11cc","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["a83a00d8-4f8f-4e28-ce36-89b159fd5c69",{"name":"group","origin":[7.875,9.5,13.4375],"color":0,"uuid":"2c782798-ad70-958c-a6b7-55bb42d5d922","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[0.25,1.6875,4.5],"color":0,"uuid":"6198baa8-5e27-5ff0-b32f-ad0618be8918","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[]}]}]}]}]},{"name":"group","origin":[14,12,13],"color":0,"uuid":"663fc299-5bac-cfe0-7ba2-c606307a0c56","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["fca1caff-66fe-82cf-b053-877bea1454e9",{"name":"group","origin":[4.4375,4.75,6],"color":0,"uuid":"51d700f7-1b78-7ace-ca18-747291239c03","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["25bf4787-56f3-6e90-2a3a-738663df3a4d",{"name":"group","origin":[2.75,4.5,6],"color":0,"uuid":"cdda252f-6ded-dda2-0ef6-3bd81ac93425","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["1e8ba1bf-0a33-aa9e-e37a-963efb50cd8b",{"name":"group","origin":[7.875,9.5,13.4375],"color":0,"uuid":"8038fa6d-36a9-f8f3-76d2-788c58111ffc","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["e37508de-7360-0b8a-5b17-43d292feac03",{"name":"group","origin":[0.25,1.6875,4.5],"color":0,"uuid":"6175dd4f-210f-9431-c58b-77af0d559b3b","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[]}]}]}]}]}]},{"name":"group","origin":[8,8,8],"color":0,"uuid":"f99233d0-a262-8a87-4839-180e09e4d9d2","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["80031d17-9f52-6b47-ec7b-84571c75b8bd",{"name":"group","origin":[14,12,13],"color":0,"uuid":"3ccc6491-cd06-43ec-eaa9-c71032cd8642","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["58d13cd5-ce7d-deef-a35a-3cd6425e8c50",{"name":"group","origin":[4.4375,4.75,6],"color":0,"uuid":"68ba2538-8d8f-a03e-d4af-2ab62ac045c9","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["1c227a26-9555-3d37-80b0-340ea46bbaf2",{"name":"group","origin":[2.75,4.5,6],"color":0,"uuid":"d99a924d-2d8b-9840-bf95-867a34a25096","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["00469cba-9736-7b3a-9034-3f30a9cc14cd",{"name":"group","origin":[7.875,9.5,13.4375],"color":0,"uuid":"518cb151-b74a-2d30-a256-0e89480b6ecc","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["b2d17fdb-6ea2-9e0d-a515-9534f0a86027",{"name":"group","origin":[0.25,1.6875,4.5],"color":0,"uuid":"6dc64e90-c3f6-c2a6-fda4-6620fa2ad66b","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[]}]}]}]}]},{"name":"group","origin":[14,12,13],"color":0,"uuid":"c8d8bcc4-0191-ffd0-b2c0-c559bdd7995b","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["00380398-1fb0-b632-88db-3953cc20a5c8",{"name":"group","origin":[4.4375,4.75,6],"color":0,"uuid":"5d3c7416-0f92-0042-0051-da4c1f15a01f","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["bc42de9c-f278-35e9-8507-e4a6c6a4b1ee",{"name":"group","origin":[2.75,4.5,6],"color":0,"uuid":"d1d0df2e-4647-6e73-772e-8fce3dd0da3a","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["eec63572-7b38-b82b-7ee7-24fba748744b",{"name":"group","origin":[7.875,9.5,13.4375],"color":0,"uuid":"eefbaffd-6eda-98c6-755f-71021a507629","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[0.25,1.6875,4.5],"color":0,"uuid":"e5c4d697-a76d-9966-5076-da2628aae90d","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[]}]}]}]}]}]}],"textures":[{"path":"/home/deck/dev/minecraft/cosmere/src/surgebinding/resources/assets/surgebinding/textures/block/rockbud_variant.png","name":"rockbud_variant.png","folder":"block","namespace":"surgebinding","id":"0","particle":true,"render_mode":"default","render_sides":"auto","frame_time":1,"frame_order_type":"loop","frame_order":"","frame_interpolate":false,"visible":true,"mode":"bitmap","saved":true,"uuid":"e43ce628-5f0f-02e4-3664-c3621dc4778c","relative_path":"../../../../../textures/block/rockbud_variant.png","source":"data:image/png;base64,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"}]} \ No newline at end of file diff --git a/blockbench/surgebinding/blocks/rockbud_variant/RockBud3.bbmodel b/blockbench/surgebinding/blocks/rockbud_variant/RockBud3.bbmodel new file mode 100644 index 000000000..d09c3a37c --- /dev/null +++ b/blockbench/surgebinding/blocks/rockbud_variant/RockBud3.bbmodel @@ -0,0 +1 @@ +{"meta":{"format_version":"4.5","model_format":"java_block","box_uv":false},"name":"rockbud_variant3","parent":"","ambientocclusion":true,"front_gui_light":false,"visible_box":[1,1,0],"variable_placeholders":"","variable_placeholder_buttons":[],"unhandled_root_fields":{},"resolution":{"width":64,"height":64},"elements":[{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[6,0,6],"to":[10,1,10],"autouv":0,"color":0,"origin":[15,8,15],"faces":{"north":{"uv":[20,19,24,20],"texture":0},"east":{"uv":[32,27,36,28],"texture":0},"south":{"uv":[32,30,36,31],"texture":0},"west":{"uv":[33,11,37,12],"texture":0},"up":{"uv":[28,28,24,24],"texture":0},"down":{"uv":[28,19,24,23],"texture":0}},"type":"cube","uuid":"dfc6c4ee-9b20-b1cf-b68a-68840ab71ff3"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[5,1,5],"to":[11,2,11],"autouv":0,"color":0,"origin":[15,9,15],"faces":{"north":{"uv":[14,29,20,30],"texture":0},"east":{"uv":[0,30,6,31],"texture":0},"south":{"uv":[14,30,20,31],"texture":0},"west":{"uv":[20,30,26,31],"texture":0},"up":{"uv":[14,14,8,8],"texture":0},"down":{"uv":[14,0,8,6],"texture":0}},"type":"cube","uuid":"81ab3df0-7a30-883e-da3f-5edbd1d0d56b"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[4,2,4],"to":[12,4,12],"autouv":0,"color":0,"origin":[15,10,15],"faces":{"north":{"uv":[25,0,33,2],"texture":0},"east":{"uv":[25,2,33,4],"texture":0},"south":{"uv":[25,4,33,6],"texture":0},"west":{"uv":[25,6,33,8],"texture":0},"up":{"uv":[8,8,0,0],"texture":0},"down":{"uv":[8,8,0,16],"texture":0}},"type":"cube","uuid":"acd748e1-74e1-aa79-3d40-45a5510e4180"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[0,3,4],"to":[4,4,12],"autouv":0,"color":7,"rotation":[0,0,45],"origin":[4,3.5,8],"faces":{"north":{"uv":[34,18,38,19],"texture":0},"east":{"uv":[24,23,32,24],"texture":0},"south":{"uv":[34,32,38,33],"texture":0},"west":{"uv":[25,8,33,9],"texture":0},"up":{"uv":[18,8,14,0],"texture":0},"down":{"uv":[4,16,0,24],"texture":0}},"type":"cube","uuid":"3975b324-14b7-87bd-bf2b-7c54047037b4"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-0.4748737341529159,-0.6819805153394647,5],"to":[2.525126265847084,0.3180194846605353,11],"autouv":0,"color":7,"rotation":[0,0,-22.5],"origin":[5.48743686707646,3.4267766952966356,8],"faces":{"north":{"uv":[32,42,35,43],"texture":0},"east":{"uv":[6,31,12,32],"texture":0},"south":{"uv":[35,42,38,43],"texture":0},"west":{"uv":[12,31,18,32],"texture":0},"up":{"uv":[25,6,22,0],"texture":0},"down":{"uv":[25,6,22,12],"texture":0}},"type":"cube","uuid":"cf9a3930-a8e2-b370-d3a6-3b50c144e0f3"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[12,3,4],"to":[16,4,12],"autouv":0,"color":7,"rotation":[0,0,-45],"origin":[12,3.5,8],"faces":{"north":{"uv":[34,33,38,34],"texture":0},"east":{"uv":[25,9,33,10],"texture":0},"south":{"uv":[10,35,14,36],"texture":0},"west":{"uv":[25,10,33,11],"texture":0},"up":{"uv":[8,24,4,16],"texture":0},"down":{"uv":[22,0,18,8],"texture":0}},"type":"cube","uuid":"57687dae-1a12-a202-cd99-2dc3cf048441"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[13.474873734152915,-0.6819805153394647,5],"to":[16.474873734152915,0.3180194846605353,11],"autouv":0,"color":7,"rotation":[0,0,22.5],"origin":[10.512563132923539,3.4267766952966356,8],"faces":{"north":{"uv":[38,42,41,43],"texture":0},"east":{"uv":[18,31,24,32],"texture":0},"south":{"uv":[41,42,44,43],"texture":0},"west":{"uv":[24,31,30,32],"texture":0},"up":{"uv":[3,30,0,24],"texture":0},"down":{"uv":[6,24,3,30],"texture":0}},"type":"cube","uuid":"bc622fef-6bb5-1561-de8e-c5382d1da27e"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[4,3,12],"to":[12,4,16],"autouv":0,"color":7,"rotation":[45,0,0],"origin":[8,3.5,12],"faces":{"north":{"uv":[25,11,33,12],"texture":0},"east":{"uv":[24,35,28,36],"texture":0},"south":{"uv":[26,16,34,17],"texture":0},"west":{"uv":[35,0,39,1],"texture":0},"up":{"uv":[22,12,14,8],"texture":0},"down":{"uv":[16,20,8,24],"texture":0}},"type":"cube","uuid":"4d18cc21-a271-0182-26ea-ce7b676bc5ea"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[5,-0.6819805153394647,13.474873734152915],"to":[11,0.3180194846605353,16.474873734152915],"autouv":0,"color":7,"rotation":[-22.5,0,0],"origin":[8,3.4267766952966356,10.512563132923539],"faces":{"north":{"uv":[30,31,36,32],"texture":0},"east":{"uv":[42,3,45,4],"texture":0},"south":{"uv":[0,32,6,33],"texture":0},"west":{"uv":[42,4,45,5],"texture":0},"up":{"uv":[26,19,20,16],"texture":0},"down":{"uv":[12,24,6,27],"texture":0}},"type":"cube","uuid":"aa1fa152-145a-c86f-6a0a-094c82d8c0f8"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[4,3,0],"to":[12,4,4],"autouv":0,"color":7,"rotation":[-45,0,0],"origin":[8,3.5,4],"faces":{"north":{"uv":[26,17,34,18],"texture":0},"east":{"uv":[35,1,39,2],"texture":0},"south":{"uv":[26,18,34,19],"texture":0},"west":{"uv":[35,2,39,3],"texture":0},"up":{"uv":[24,24,16,20],"texture":0},"down":{"uv":[28,12,20,16],"texture":0}},"type":"cube","uuid":"e567dd13-7520-469c-15be-6fc8e11c1ce5"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[5,-0.6819805153394647,-0.474873734152915],"to":[11,0.3180194846605353,2.525126265847085],"autouv":0,"color":7,"rotation":[22.5,0,0],"origin":[8,3.4267766952966356,5.48743686707646],"faces":{"north":{"uv":[6,32,12,33],"texture":0},"east":{"uv":[42,5,45,6],"texture":0},"south":{"uv":[12,32,18,33],"texture":0},"west":{"uv":[42,6,45,7],"texture":0},"up":{"uv":[18,27,12,24],"texture":0},"down":{"uv":[24,24,18,27],"texture":0}},"type":"cube","uuid":"e4f56095-3386-926d-4c63-9c8d62a784be"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[8,5.6875,6],"to":[8,6.6875,10],"autouv":0,"color":5,"origin":[16,13.6875,16],"faces":{"north":{"uv":[0,0,0,1],"texture":0},"east":{"uv":[35,12,39,13],"texture":0},"south":{"uv":[0,0,0,1],"texture":0},"west":{"uv":[35,13,39,14],"texture":0},"up":{"uv":[0,4,0,0],"texture":0},"down":{"uv":[0,0,0,4],"texture":0}},"type":"cube","uuid":"e34e1f9d-4da4-26d1-374c-0a10ccf20445"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[8,5.6875,6],"to":[8,6.6875,10],"autouv":0,"color":5,"rotation":[0,22.5,0],"origin":[8,6.1875,8],"faces":{"north":{"uv":[0,0,0,1],"texture":0},"east":{"uv":[35,14,39,15],"texture":0},"south":{"uv":[0,0,0,1],"texture":0},"west":{"uv":[35,15,39,16],"texture":0},"up":{"uv":[0,4,0,0],"texture":0},"down":{"uv":[0,0,0,4],"texture":0}},"type":"cube","uuid":"25dfcc91-bb31-b869-922b-3218ef1da824"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[8,5.6875,6],"to":[8,6.6875,10],"autouv":0,"color":5,"rotation":[0,45,0],"origin":[8,6.1875,8],"faces":{"north":{"uv":[0,0,0,1],"texture":0},"east":{"uv":[35,19,39,20],"texture":0},"south":{"uv":[0,0,0,1],"texture":0},"west":{"uv":[35,20,39,21],"texture":0},"up":{"uv":[0,4,0,0],"texture":0},"down":{"uv":[0,0,0,4],"texture":0}},"type":"cube","uuid":"2775476f-aeed-93a8-7b07-bfa3c476eec5"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[6,5.6875,8],"to":[10,6.6875,8],"autouv":0,"color":5,"rotation":[0,-22.5,0],"origin":[8,6.1875,8],"faces":{"north":{"uv":[35,21,39,22],"texture":0},"east":{"uv":[0,0,0,1],"texture":0},"south":{"uv":[35,22,39,23],"texture":0},"west":{"uv":[0,0,0,1],"texture":0},"up":{"uv":[4,0,0,0],"texture":0},"down":{"uv":[4,0,0,0],"texture":0}},"type":"cube","uuid":"c9fcc546-4b66-fb1f-a53f-8e66b8d49410"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[6,5.6875,8],"to":[10,6.6875,8],"autouv":0,"color":5,"origin":[8,6.1875,8],"faces":{"north":{"uv":[35,23,39,24],"texture":0},"east":{"uv":[0,0,0,1],"texture":0},"south":{"uv":[35,24,39,25],"texture":0},"west":{"uv":[0,0,0,1],"texture":0},"up":{"uv":[4,0,0,0],"texture":0},"down":{"uv":[4,0,0,0],"texture":0}},"type":"cube","uuid":"e791d8c9-01ef-1460-2db0-3b320bea6b0b"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[6,5.6875,8],"to":[10,6.6875,8],"autouv":0,"color":5,"rotation":[0,22.5,0],"origin":[8,6.1875,8],"faces":{"north":{"uv":[35,25,39,26],"texture":0},"east":{"uv":[0,0,0,1],"texture":0},"south":{"uv":[35,26,39,27],"texture":0},"west":{"uv":[0,0,0,1],"texture":0},"up":{"uv":[4,0,0,0],"texture":0},"down":{"uv":[4,0,0,0],"texture":0}},"type":"cube","uuid":"3ddf4784-aa69-4b17-e873-7aca028ab522"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[6,5.6875,8],"to":[10,6.6875,8],"autouv":0,"color":5,"rotation":[0,45,0],"origin":[8,6.1875,8],"faces":{"north":{"uv":[4,36,8,37],"texture":0},"east":{"uv":[0,0,0,1],"texture":0},"south":{"uv":[8,36,12,37],"texture":0},"west":{"uv":[0,0,0,1],"texture":0},"up":{"uv":[4,0,0,0],"texture":0},"down":{"uv":[4,0,0,0],"texture":0}},"type":"cube","uuid":"ad970ae3-9c92-98f8-eb5f-7d45e2bc3c51"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[8,5.6875,6],"to":[8,6.6875,10],"autouv":0,"color":5,"rotation":[0,-22.5,0],"origin":[8,6.1875,8],"faces":{"north":{"uv":[0,0,0,1],"texture":0},"east":{"uv":[12,36,16,37],"texture":0},"south":{"uv":[0,0,0,1],"texture":0},"west":{"uv":[16,36,20,37],"texture":0},"up":{"uv":[0,4,0,0],"texture":0},"down":{"uv":[0,0,0,4],"texture":0}},"type":"cube","uuid":"70bf14b7-3947-53b4-4807-727ff74304c2"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[5,3.75,3],"to":[7,5.75,6],"autouv":0,"color":6,"inflate":-0.25,"origin":[6,4.75,5],"faces":{"north":{"uv":[2,40,4,42],"texture":0},"east":{"uv":[18,32,21,34],"texture":0},"south":{"uv":[4,40,6,42],"texture":0},"west":{"uv":[21,32,24,34],"texture":0},"up":{"uv":[26,35,24,32],"texture":0},"down":{"uv":[28,32,26,35],"texture":0}},"type":"cube","uuid":"ae09116a-24a9-19da-8a3d-b8d8ce804b5c"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[5,4,5],"to":[7,6,7],"autouv":0,"color":6,"origin":[14,12,13],"faces":{"north":{"uv":[12,6,14,8],"texture":0},"east":{"uv":[18,12,20,14],"texture":0},"south":{"uv":[39,21,41,23],"texture":0},"west":{"uv":[39,23,41,25],"texture":0},"up":{"uv":[41,27,39,25],"texture":0},"down":{"uv":[2,40,0,42],"texture":0}},"type":"cube","uuid":"a04b2e66-67c5-eb0d-8b2b-1e39c6613ade"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[5.5,4,0.8125],"to":[6.5,5,3.8125],"autouv":0,"color":5,"inflate":0.125,"rotation":[-45,0,0],"origin":[6,4.5,3.3125],"faces":{"north":{"uv":[45,18,46,19],"texture":0},"east":{"uv":[42,9,45,10],"texture":0},"south":{"uv":[45,19,46,20],"texture":0},"west":{"uv":[42,10,45,11],"texture":0},"up":{"uv":[7,46,6,43],"texture":0},"down":{"uv":[8,43,7,46],"texture":0}},"type":"cube","uuid":"8c164554-7495-53db-c533-32eac92f4573"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[4.4375,2,1.0625],"to":[6.4375,3,2.0625],"autouv":0,"color":0,"inflate":0.0625,"origin":[13.4375,10,9.0625],"faces":{"north":{"uv":[22,27,24,28],"texture":0},"east":{"uv":[45,20,46,21],"texture":0},"south":{"uv":[20,29,22,30],"texture":0},"west":{"uv":[45,21,46,22],"texture":0},"up":{"uv":[6,36,4,35],"texture":0},"down":{"uv":[16,35,14,36],"texture":0}},"type":"cube","uuid":"8cc5f78d-5d5d-13c5-5ba8-e97461cf6bb7"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[2.4375,3.75,5],"to":[5.4375,5.75,7],"autouv":0,"color":6,"inflate":-0.25,"origin":[4.4375,4.75,6],"faces":{"north":{"uv":[28,32,31,34],"texture":0},"east":{"uv":[6,40,8,42],"texture":0},"south":{"uv":[31,32,34,34],"texture":0},"west":{"uv":[8,40,10,42],"texture":0},"up":{"uv":[35,14,32,12],"texture":0},"down":{"uv":[35,14,32,16],"texture":0}},"type":"cube","uuid":"399c163a-6ac5-8be0-4992-cf06fba50ccf"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-0.75,4,5.5],"to":[3.25,5,6.5],"autouv":0,"color":5,"inflate":0.125,"rotation":[0,0,45],"origin":[2.75,4.5,6],"faces":{"north":{"uv":[10,40,14,41],"texture":0},"east":{"uv":[45,33,46,34],"texture":0},"south":{"uv":[14,40,18,41],"texture":0},"west":{"uv":[45,38,46,39],"texture":0},"up":{"uv":[22,41,18,40],"texture":0},"down":{"uv":[26,40,22,41],"texture":0}},"type":"cube","uuid":"380a1bb5-4b99-1045-9e74-d5d5d3c5d4d0"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[9,4,5],"to":[11,6,7],"autouv":0,"color":6,"origin":[3,12,14],"faces":{"north":{"uv":[26,40,28,42],"texture":0},"east":{"uv":[28,40,30,42],"texture":0},"south":{"uv":[30,40,32,42],"texture":0},"west":{"uv":[32,40,34,42],"texture":0},"up":{"uv":[36,42,34,40],"texture":0},"down":{"uv":[38,40,36,42],"texture":0}},"type":"cube","uuid":"945d0c38-0b0e-21b2-7ed1-d4554a718d96"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[10,3.75,5],"to":[13,5.75,7],"autouv":0,"color":6,"inflate":-0.25,"origin":[11,4.75,6],"faces":{"north":{"uv":[32,19,35,21],"texture":0},"east":{"uv":[38,40,40,42],"texture":0},"south":{"uv":[32,21,35,23],"texture":0},"west":{"uv":[40,40,42,42],"texture":0},"up":{"uv":[35,25,32,23],"texture":0},"down":{"uv":[35,25,32,27],"texture":0}},"type":"cube","uuid":"7f15accd-b74b-31c7-c72d-e1287c2bb8cc"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[9,3.75,2.4375],"to":[11,5.75,5.4375],"autouv":0,"color":6,"inflate":-0.25,"origin":[10,4.75,4.4375],"faces":{"north":{"uv":[40,3,42,5],"texture":0},"east":{"uv":[0,33,3,35],"texture":0},"south":{"uv":[40,5,42,7],"texture":0},"west":{"uv":[3,33,6,35],"texture":0},"up":{"uv":[8,36,6,33],"texture":0},"down":{"uv":[10,33,8,36],"texture":0}},"type":"cube","uuid":"b04e8fd8-f677-886f-eb3e-e509408e882d"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[9.5,4,-0.75],"to":[10.5,5,3.25],"autouv":0,"color":5,"inflate":0.125,"rotation":[-45,0,0],"origin":[10,4.5,2.75],"faces":{"north":{"uv":[13,46,14,47],"texture":0},"east":{"uv":[40,7,44,8],"texture":0},"south":{"uv":[14,46,15,47],"texture":0},"west":{"uv":[40,8,44,9],"texture":0},"up":{"uv":[41,31,40,27],"texture":0},"down":{"uv":[41,36,40,40],"texture":0}},"type":"cube","uuid":"cbd3d12d-27d3-b14c-e9ee-0bb2985736a9"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[9,4,9],"to":[11,6,11],"autouv":0,"color":6,"origin":[2,12,3],"faces":{"north":{"uv":[40,9,42,11],"texture":0},"east":{"uv":[10,41,12,43],"texture":0},"south":{"uv":[12,41,14,43],"texture":0},"west":{"uv":[14,41,16,43],"texture":0},"up":{"uv":[18,43,16,41],"texture":0},"down":{"uv":[20,41,18,43],"texture":0}},"type":"cube","uuid":"a9931b54-00e9-9020-0eec-867da2136efb"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[9,3.75,10],"to":[11,5.75,13],"autouv":0,"color":6,"inflate":-0.25,"origin":[10,4.75,11],"faces":{"north":{"uv":[20,41,22,43],"texture":0},"east":{"uv":[10,33,13,35],"texture":0},"south":{"uv":[22,41,24,43],"texture":0},"west":{"uv":[13,33,16,35],"texture":0},"up":{"uv":[18,36,16,33],"texture":0},"down":{"uv":[35,0,33,3],"texture":0}},"type":"cube","uuid":"b858ce77-f139-fa1f-f12f-8459c7eae6a9"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[10.5625,3.75,9],"to":[13.5625,5.75,11],"autouv":0,"color":6,"inflate":-0.25,"origin":[11.5625,4.75,10],"faces":{"north":{"uv":[33,3,36,5],"texture":0},"east":{"uv":[24,41,26,43],"texture":0},"south":{"uv":[33,5,36,7],"texture":0},"west":{"uv":[41,16,43,18],"texture":0},"up":{"uv":[36,9,33,7],"texture":0},"down":{"uv":[36,9,33,11],"texture":0}},"type":"cube","uuid":"fca1caff-66fe-82cf-b053-877bea1454e9"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[12.75,4,9.5],"to":[16.75,5,10.5],"autouv":0,"color":5,"inflate":0.125,"rotation":[0,0,-45],"origin":[13.25,4.5,10],"faces":{"north":{"uv":[40,31,44,32],"texture":0},"east":{"uv":[31,46,32,47],"texture":0},"south":{"uv":[41,11,45,12],"texture":0},"west":{"uv":[34,46,35,47],"texture":0},"up":{"uv":[45,22,41,21],"texture":0},"down":{"uv":[45,22,41,23],"texture":0}},"type":"cube","uuid":"25bf4787-56f3-6e90-2a3a-738663df3a4d"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[5,4,5],"to":[11,5,11],"autouv":0,"color":0,"inflate":0.0625,"origin":[8,4.5,8],"faces":{"north":{"uv":[26,30,32,31],"texture":0},"east":{"uv":[30,28,36,29],"texture":0},"south":{"uv":[30,29,36,30],"texture":0},"west":{"uv":[0,31,6,32],"texture":0},"up":{"uv":[14,20,8,14],"texture":0},"down":{"uv":[20,14,14,20],"texture":0}},"type":"cube","uuid":"2c508eaa-4f9c-efd9-171e-1597ef51a23a"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[5,4,9],"to":[7,6,11],"autouv":0,"color":6,"origin":[13,12,2],"faces":{"north":{"uv":[41,23,43,25],"texture":0},"east":{"uv":[41,25,43,27],"texture":0},"south":{"uv":[41,27,43,29],"texture":0},"west":{"uv":[41,29,43,31],"texture":0},"up":{"uv":[43,36,41,34],"texture":0},"down":{"uv":[43,36,41,38],"texture":0}},"type":"cube","uuid":"80031d17-9f52-6b47-ec7b-84571c75b8bd"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[3,3.75,9],"to":[6,5.75,11],"autouv":0,"color":6,"inflate":-0.25,"origin":[5,4.75,10],"faces":{"north":{"uv":[18,34,21,36],"texture":0},"east":{"uv":[41,38,43,40],"texture":0},"south":{"uv":[21,34,24,36],"texture":0},"west":{"uv":[0,42,2,44],"texture":0},"up":{"uv":[31,36,28,34],"texture":0},"down":{"uv":[34,34,31,36],"texture":0}},"type":"cube","uuid":"58d13cd5-ce7d-deef-a35a-3cd6425e8c50"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[5,3.75,10.5625],"to":[7,5.75,13.5625],"autouv":0,"color":6,"inflate":-0.25,"origin":[6,4.75,11.5625],"faces":{"north":{"uv":[2,42,4,44],"texture":0},"east":{"uv":[34,34,37,36],"texture":0},"south":{"uv":[4,42,6,44],"texture":0},"west":{"uv":[34,16,37,18],"texture":0},"up":{"uv":[2,38,0,35],"texture":0},"down":{"uv":[4,35,2,38],"texture":0}},"type":"cube","uuid":"00380398-1fb0-b632-88db-3953cc20a5c8"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[5.5,4,12.75],"to":[6.5,5,16.75],"autouv":0,"color":5,"inflate":0.125,"rotation":[45,0,0],"origin":[6,4.5,13.25],"faces":{"north":{"uv":[46,8,47,9],"texture":0},"east":{"uv":[6,42,10,43],"texture":0},"south":{"uv":[46,12,47,13],"texture":0},"west":{"uv":[26,42,30,43],"texture":0},"up":{"uv":[31,46,30,42],"texture":0},"down":{"uv":[32,42,31,46],"texture":0}},"type":"cube","uuid":"bc42de9c-f278-35e9-8507-e4a6c6a4b1ee"}],"outliner":[{"name":"group","origin":[8,8,8],"color":0,"uuid":"9d985a48-53f2-58f6-02e5-80cee0c514ab","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["dfc6c4ee-9b20-b1cf-b68a-68840ab71ff3","81ab3df0-7a30-883e-da3f-5edbd1d0d56b","acd748e1-74e1-aa79-3d40-45a5510e4180","2c508eaa-4f9c-efd9-171e-1597ef51a23a"]},{"name":"group","origin":[15,10,15],"color":0,"uuid":"6534abfb-7475-3213-e227-6bc4d5e4ca30","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["3975b324-14b7-87bd-bf2b-7c54047037b4",{"name":"group","origin":[11,11,12],"color":0,"uuid":"691d9295-3d66-228b-1cc5-d66ac5298db3","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["cf9a3930-a8e2-b370-d3a6-3b50c144e0f3"]}]},{"name":"group","origin":[15,10,15],"color":0,"uuid":"87e1cc84-22e2-b4cd-f1c3-04c3dee5dd2e","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["57687dae-1a12-a202-cd99-2dc3cf048441",{"name":"group","origin":[11,11,12],"color":0,"uuid":"faadfb34-3e32-a744-7055-31f00c492088","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["bc622fef-6bb5-1561-de8e-c5382d1da27e"]}]},{"name":"group","origin":[15,10,15],"color":0,"uuid":"5c3bd61c-a87c-1557-906a-3747ceb3d428","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["4d18cc21-a271-0182-26ea-ce7b676bc5ea",{"name":"group","origin":[11,11,12],"color":0,"uuid":"46cae728-2e0c-58a4-2c65-5b7a25757eaf","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["aa1fa152-145a-c86f-6a0a-094c82d8c0f8"]}]},{"name":"group","origin":[15,10,15],"color":0,"uuid":"319a3c0e-92b8-7956-f6e9-3a311f302d4f","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["e567dd13-7520-469c-15be-6fc8e11c1ce5",{"name":"group","origin":[11,11,12],"color":0,"uuid":"da0dcc44-c266-2ab0-ef78-3825b1cea3ca","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["e4f56095-3386-926d-4c63-9c8d62a784be"]}]},{"name":"flower1","origin":[8,8,8],"color":0,"uuid":"dfa291b8-23e4-55af-e2b6-29a876bff1be","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["e34e1f9d-4da4-26d1-374c-0a10ccf20445","25dfcc91-bb31-b869-922b-3218ef1da824","2775476f-aeed-93a8-7b07-bfa3c476eec5","c9fcc546-4b66-fb1f-a53f-8e66b8d49410","e791d8c9-01ef-1460-2db0-3b320bea6b0b","3ddf4784-aa69-4b17-e873-7aca028ab522","ad970ae3-9c92-98f8-eb5f-7d45e2bc3c51","70bf14b7-3947-53b4-4807-727ff74304c2"]},{"name":"group","origin":[8,8,8],"color":0,"uuid":"71757c43-14b6-f4f5-d906-c901675071b3","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["a04b2e66-67c5-eb0d-8b2b-1e39c6613ade",{"name":"group","origin":[14,12,13],"color":0,"uuid":"fa876bde-ca01-2bdb-3fcb-9ae4a555c862","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["ae09116a-24a9-19da-8a3d-b8d8ce804b5c",{"name":"group","origin":[4.4375,4.75,6],"color":0,"uuid":"01a20b05-a0c0-249d-e3c7-1b2d03f46270","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["8c164554-7495-53db-c533-32eac92f4573",{"name":"group","origin":[2.75,4.5,6],"color":0,"uuid":"44f24956-916d-b383-5bcf-a502253e08be","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["8cc5f78d-5d5d-13c5-5ba8-e97461cf6bb7",{"name":"group","origin":[7.875,9.5,13.4375],"color":0,"uuid":"04e2be59-7055-90d6-6c5a-2c4e81f13916","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[0.25,1.6875,4.5],"color":0,"uuid":"5bfc8e2d-081d-2562-54a7-8c4e074481fc","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[]}]}]}]}]},{"name":"group","origin":[14,12,13],"color":0,"uuid":"3e0fc0c1-dab2-e2c8-0144-fe99a471f69c","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["399c163a-6ac5-8be0-4992-cf06fba50ccf",{"name":"group","origin":[4.4375,4.75,6],"color":0,"uuid":"23b78a32-c5a5-c593-3f7f-f0e6c8c6d0bb","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["380a1bb5-4b99-1045-9e74-d5d5d3c5d4d0",{"name":"group","origin":[2.75,4.5,6],"color":0,"uuid":"144f50b7-186c-ff5d-b88b-58a6f004e465","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[7.875,9.5,13.4375],"color":0,"uuid":"0d1aa47b-3336-ae11-c99c-8c33122e0679","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[0.25,1.6875,4.5],"color":0,"uuid":"d4329ad8-e90e-7a62-1a08-51ac6406a0a7","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[]}]}]}]}]}]},{"name":"group","origin":[8,8,8],"color":0,"uuid":"dd961576-16db-a252-e834-04a48de93842","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["945d0c38-0b0e-21b2-7ed1-d4554a718d96",{"name":"group","origin":[14,12,13],"color":0,"uuid":"9f5fe069-c120-953e-679f-e5accee53636","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["7f15accd-b74b-31c7-c72d-e1287c2bb8cc",{"name":"group","origin":[4.4375,4.75,6],"color":0,"uuid":"635e56ba-f192-2e4c-42aa-7db2af61c213","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[2.75,4.5,6],"color":0,"uuid":"22e2d4a5-15e5-8293-938a-08e182b3eca3","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[7.875,9.5,13.4375],"color":0,"uuid":"d23f890f-4f79-2000-5656-c274e526f1f6","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[0.25,1.6875,4.5],"color":0,"uuid":"fb79aeb3-a95c-bfe4-6f54-cb303e457ff6","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[]}]}]}]}]},{"name":"group","origin":[14,12,13],"color":0,"uuid":"0763052f-9370-ebae-2351-8b1c45ab0c85","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["b04e8fd8-f677-886f-eb3e-e509408e882d",{"name":"group","origin":[4.4375,4.75,6],"color":0,"uuid":"9bc496de-88b4-1516-cf61-90c8167501d5","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["cbd3d12d-27d3-b14c-e9ee-0bb2985736a9",{"name":"group","origin":[2.75,4.5,6],"color":0,"uuid":"728534c7-d79f-f651-db1c-7a96733f6b3c","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[7.875,9.5,13.4375],"color":0,"uuid":"dcab58ce-5c05-fed4-38b4-9ab893163a1d","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[0.25,1.6875,4.5],"color":0,"uuid":"e63b457c-79f1-a358-131d-f31f65118892","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[]}]}]}]}]}]},{"name":"group","origin":[8,8,8],"color":0,"uuid":"15a725af-991a-e10a-c504-8cdf49439f2a","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["a9931b54-00e9-9020-0eec-867da2136efb",{"name":"group","origin":[14,12,13],"color":0,"uuid":"177ca692-ecd0-4f2a-387b-fe546bf9d896","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["b858ce77-f139-fa1f-f12f-8459c7eae6a9",{"name":"group","origin":[4.4375,4.75,6],"color":0,"uuid":"d76cf09c-fa81-9748-549f-30dcd3d6d66f","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[2.75,4.5,6],"color":0,"uuid":"60b49778-3628-7f5f-ad15-7604f41c11cc","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[7.875,9.5,13.4375],"color":0,"uuid":"2c782798-ad70-958c-a6b7-55bb42d5d922","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[0.25,1.6875,4.5],"color":0,"uuid":"6198baa8-5e27-5ff0-b32f-ad0618be8918","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[]}]}]}]}]},{"name":"group","origin":[14,12,13],"color":0,"uuid":"663fc299-5bac-cfe0-7ba2-c606307a0c56","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["fca1caff-66fe-82cf-b053-877bea1454e9",{"name":"group","origin":[4.4375,4.75,6],"color":0,"uuid":"51d700f7-1b78-7ace-ca18-747291239c03","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["25bf4787-56f3-6e90-2a3a-738663df3a4d",{"name":"group","origin":[2.75,4.5,6],"color":0,"uuid":"cdda252f-6ded-dda2-0ef6-3bd81ac93425","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[7.875,9.5,13.4375],"color":0,"uuid":"8038fa6d-36a9-f8f3-76d2-788c58111ffc","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[0.25,1.6875,4.5],"color":0,"uuid":"6175dd4f-210f-9431-c58b-77af0d559b3b","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[]}]}]}]}]}]},{"name":"group","origin":[8,8,8],"color":0,"uuid":"f99233d0-a262-8a87-4839-180e09e4d9d2","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["80031d17-9f52-6b47-ec7b-84571c75b8bd",{"name":"group","origin":[14,12,13],"color":0,"uuid":"3ccc6491-cd06-43ec-eaa9-c71032cd8642","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["58d13cd5-ce7d-deef-a35a-3cd6425e8c50",{"name":"group","origin":[4.4375,4.75,6],"color":0,"uuid":"68ba2538-8d8f-a03e-d4af-2ab62ac045c9","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[2.75,4.5,6],"color":0,"uuid":"d99a924d-2d8b-9840-bf95-867a34a25096","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[7.875,9.5,13.4375],"color":0,"uuid":"518cb151-b74a-2d30-a256-0e89480b6ecc","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[0.25,1.6875,4.5],"color":0,"uuid":"6dc64e90-c3f6-c2a6-fda4-6620fa2ad66b","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[]}]}]}]}]},{"name":"group","origin":[14,12,13],"color":0,"uuid":"c8d8bcc4-0191-ffd0-b2c0-c559bdd7995b","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["00380398-1fb0-b632-88db-3953cc20a5c8",{"name":"group","origin":[4.4375,4.75,6],"color":0,"uuid":"5d3c7416-0f92-0042-0051-da4c1f15a01f","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["bc42de9c-f278-35e9-8507-e4a6c6a4b1ee",{"name":"group","origin":[2.75,4.5,6],"color":0,"uuid":"d1d0df2e-4647-6e73-772e-8fce3dd0da3a","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[7.875,9.5,13.4375],"color":0,"uuid":"eefbaffd-6eda-98c6-755f-71021a507629","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[0.25,1.6875,4.5],"color":0,"uuid":"e5c4d697-a76d-9966-5076-da2628aae90d","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[]}]}]}]}]}]}],"textures":[{"path":"/home/deck/dev/minecraft/cosmere/src/surgebinding/resources/assets/surgebinding/textures/block/rockbud_variant.png","name":"rockbud_variant.png","folder":"block","namespace":"surgebinding","id":"0","particle":true,"render_mode":"default","render_sides":"auto","frame_time":1,"frame_order_type":"loop","frame_order":"","frame_interpolate":false,"visible":true,"mode":"bitmap","saved":true,"uuid":"05d5e940-264e-c748-2def-e76fbcfc8a67","relative_path":"../../../../../textures/block/rockbud_variant.png","source":"data:image/png;base64,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"}]} \ No newline at end of file diff --git a/blockbench/surgebinding/blocks/rockbud_variant/RockBud4.bbmodel b/blockbench/surgebinding/blocks/rockbud_variant/RockBud4.bbmodel new file mode 100644 index 000000000..a0a661935 --- /dev/null +++ b/blockbench/surgebinding/blocks/rockbud_variant/RockBud4.bbmodel @@ -0,0 +1 @@ +{"meta":{"format_version":"4.5","model_format":"java_block","box_uv":false},"name":"rockbud_variant4","parent":"","ambientocclusion":true,"front_gui_light":false,"visible_box":[1,1,0],"variable_placeholders":"","variable_placeholder_buttons":[],"unhandled_root_fields":{},"resolution":{"width":64,"height":64},"elements":[{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[6,0,6],"to":[10,1,10],"autouv":0,"color":0,"origin":[15,8,15],"faces":{"north":{"uv":[20,19,24,20],"texture":0},"east":{"uv":[32,27,36,28],"texture":0},"south":{"uv":[32,30,36,31],"texture":0},"west":{"uv":[33,11,37,12],"texture":0},"up":{"uv":[28,28,24,24],"texture":0},"down":{"uv":[28,19,24,23],"texture":0}},"type":"cube","uuid":"dfc6c4ee-9b20-b1cf-b68a-68840ab71ff3"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[5,1,5],"to":[11,2,11],"autouv":0,"color":0,"origin":[15,9,15],"faces":{"north":{"uv":[14,29,20,30],"texture":0},"east":{"uv":[0,30,6,31],"texture":0},"south":{"uv":[14,30,20,31],"texture":0},"west":{"uv":[20,30,26,31],"texture":0},"up":{"uv":[14,14,8,8],"texture":0},"down":{"uv":[14,0,8,6],"texture":0}},"type":"cube","uuid":"81ab3df0-7a30-883e-da3f-5edbd1d0d56b"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[4,2,4],"to":[12,4,12],"autouv":0,"color":0,"origin":[15,10,15],"faces":{"north":{"uv":[25,0,33,2],"texture":0},"east":{"uv":[25,2,33,4],"texture":0},"south":{"uv":[25,4,33,6],"texture":0},"west":{"uv":[25,6,33,8],"texture":0},"up":{"uv":[8,8,0,0],"texture":0},"down":{"uv":[8,8,0,16],"texture":0}},"type":"cube","uuid":"acd748e1-74e1-aa79-3d40-45a5510e4180"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[0,3,4],"to":[4,4,12],"autouv":0,"color":7,"origin":[4,3.5,8],"faces":{"north":{"uv":[34,18,38,19],"texture":0},"east":{"uv":[24,23,32,24],"texture":0},"south":{"uv":[34,32,38,33],"texture":0},"west":{"uv":[25,8,33,9],"texture":0},"up":{"uv":[18,8,14,0],"texture":0},"down":{"uv":[4,16,0,24],"texture":0}},"type":"cube","uuid":"3975b324-14b7-87bd-bf2b-7c54047037b4"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-3.105671322741437,3.008225553690454,5],"to":[-0.1056713227414372,4.008225553690454,11],"autouv":0,"color":7,"rotation":[0,0,-45],"origin":[-0.07351198682702975,3.738489969843622,8],"faces":{"north":{"uv":[32,42,35,43],"texture":0},"east":{"uv":[6,31,12,32],"texture":0},"south":{"uv":[35,42,38,43],"texture":0},"west":{"uv":[12,31,18,32],"texture":0},"up":{"uv":[25,6,22,0],"texture":0},"down":{"uv":[25,6,22,12],"texture":0}},"type":"cube","uuid":"cf9a3930-a8e2-b370-d3a6-3b50c144e0f3"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[12,3,4],"to":[16,4,12],"autouv":0,"color":7,"origin":[12,3.5,8],"faces":{"north":{"uv":[34,33,38,34],"texture":0},"east":{"uv":[25,9,33,10],"texture":0},"south":{"uv":[10,35,14,36],"texture":0},"west":{"uv":[25,10,33,11],"texture":0},"up":{"uv":[8,24,4,16],"texture":0},"down":{"uv":[22,0,18,8],"texture":0}},"type":"cube","uuid":"57687dae-1a12-a202-cd99-2dc3cf048441"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[16.105671322741443,3.008225553690454,5],"to":[19.105671322741443,4.008225553690454,11],"autouv":0,"color":7,"rotation":[0,0,45],"origin":[16.07351198682703,3.738489969843622,8],"faces":{"north":{"uv":[38,42,41,43],"texture":0},"east":{"uv":[18,31,24,32],"texture":0},"south":{"uv":[41,42,44,43],"texture":0},"west":{"uv":[24,31,30,32],"texture":0},"up":{"uv":[3,30,0,24],"texture":0},"down":{"uv":[6,24,3,30],"texture":0}},"type":"cube","uuid":"bc622fef-6bb5-1561-de8e-c5382d1da27e"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[4,3,12],"to":[12,4,16],"autouv":0,"color":7,"origin":[8,3.5,12],"faces":{"north":{"uv":[25,11,33,12],"texture":0},"east":{"uv":[24,35,28,36],"texture":0},"south":{"uv":[26,16,34,17],"texture":0},"west":{"uv":[35,0,39,1],"texture":0},"up":{"uv":[22,12,14,8],"texture":0},"down":{"uv":[16,20,8,24],"texture":0}},"type":"cube","uuid":"4d18cc21-a271-0182-26ea-ce7b676bc5ea"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[5,3.008225553690454,16.105671322741443],"to":[11,4.008225553690454,19.105671322741443],"autouv":0,"color":7,"rotation":[-45,0,0],"origin":[8,3.738489969843622,16.07351198682703],"faces":{"north":{"uv":[30,31,36,32],"texture":0},"east":{"uv":[42,3,45,4],"texture":0},"south":{"uv":[0,32,6,33],"texture":0},"west":{"uv":[42,4,45,5],"texture":0},"up":{"uv":[26,19,20,16],"texture":0},"down":{"uv":[12,24,6,27],"texture":0}},"type":"cube","uuid":"aa1fa152-145a-c86f-6a0a-094c82d8c0f8"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[4,3,0],"to":[12,4,4],"autouv":0,"color":7,"origin":[8,3.5,4],"faces":{"north":{"uv":[26,17,34,18],"texture":0},"east":{"uv":[35,1,39,2],"texture":0},"south":{"uv":[26,18,34,19],"texture":0},"west":{"uv":[35,2,39,3],"texture":0},"up":{"uv":[24,24,16,20],"texture":0},"down":{"uv":[28,12,20,16],"texture":0}},"type":"cube","uuid":"e567dd13-7520-469c-15be-6fc8e11c1ce5"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[5,3.0082255536904547,-3.1056713227414363],"to":[11,4.008225553690455,-0.10567132274143631],"autouv":0,"color":7,"rotation":[45,0,0],"origin":[8,3.7384899698436227,-0.07351198682702975],"faces":{"north":{"uv":[6,32,12,33],"texture":0},"east":{"uv":[42,5,45,6],"texture":0},"south":{"uv":[12,32,18,33],"texture":0},"west":{"uv":[42,6,45,7],"texture":0},"up":{"uv":[18,27,12,24],"texture":0},"down":{"uv":[24,24,18,27],"texture":0}},"type":"cube","uuid":"e4f56095-3386-926d-4c63-9c8d62a784be"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[5,4,5],"to":[7,6,7],"autouv":0,"color":6,"origin":[14,12,13],"faces":{"north":{"uv":[12,6,14,8],"texture":0},"east":{"uv":[18,12,20,14],"texture":0},"south":{"uv":[39,21,41,23],"texture":0},"west":{"uv":[39,23,41,25],"texture":0},"up":{"uv":[41,27,39,25],"texture":0},"down":{"uv":[2,40,0,42],"texture":0}},"type":"cube","uuid":"a04b2e66-67c5-eb0d-8b2b-1e39c6613ade"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[9,4,5],"to":[11,6,7],"autouv":0,"color":6,"origin":[3,12,14],"faces":{"north":{"uv":[26,40,28,42],"texture":0},"east":{"uv":[28,40,30,42],"texture":0},"south":{"uv":[30,40,32,42],"texture":0},"west":{"uv":[32,40,34,42],"texture":0},"up":{"uv":[36,42,34,40],"texture":0},"down":{"uv":[38,40,36,42],"texture":0}},"type":"cube","uuid":"945d0c38-0b0e-21b2-7ed1-d4554a718d96"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[9,4,9],"to":[11,6,11],"autouv":0,"color":6,"origin":[2,12,3],"faces":{"north":{"uv":[40,9,42,11],"texture":0},"east":{"uv":[10,41,12,43],"texture":0},"south":{"uv":[12,41,14,43],"texture":0},"west":{"uv":[14,41,16,43],"texture":0},"up":{"uv":[18,43,16,41],"texture":0},"down":{"uv":[20,41,18,43],"texture":0}},"type":"cube","uuid":"a9931b54-00e9-9020-0eec-867da2136efb"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[5,4,5],"to":[11,5,11],"autouv":0,"color":0,"inflate":0.0625,"origin":[8,4.5,8],"faces":{"north":{"uv":[26,30,32,31],"texture":0},"east":{"uv":[30,28,36,29],"texture":0},"south":{"uv":[30,29,36,30],"texture":0},"west":{"uv":[0,31,6,32],"texture":0},"up":{"uv":[14,20,8,14],"texture":0},"down":{"uv":[20,14,14,20],"texture":0}},"type":"cube","uuid":"2c508eaa-4f9c-efd9-171e-1597ef51a23a"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[5,4,9],"to":[7,6,11],"autouv":0,"color":6,"origin":[13,12,2],"faces":{"north":{"uv":[41,23,43,25],"texture":0},"east":{"uv":[41,25,43,27],"texture":0},"south":{"uv":[41,27,43,29],"texture":0},"west":{"uv":[41,29,43,31],"texture":0},"up":{"uv":[43,36,41,34],"texture":0},"down":{"uv":[43,36,41,38],"texture":0}},"type":"cube","uuid":"80031d17-9f52-6b47-ec7b-84571c75b8bd"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[8,5.6875,6],"to":[8,6.6875,10],"autouv":0,"color":5,"origin":[16,13.6875,16],"faces":{"north":{"uv":[0,0,0,1],"texture":0},"east":{"uv":[35,12,39,13],"texture":0},"south":{"uv":[0,0,0,1],"texture":0},"west":{"uv":[35,13,39,14],"texture":0},"up":{"uv":[0,4,0,0],"texture":0},"down":{"uv":[0,0,0,4],"texture":0}},"type":"cube","uuid":"e34e1f9d-4da4-26d1-374c-0a10ccf20445"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[8,5.6875,6],"to":[8,6.6875,10],"autouv":0,"color":5,"rotation":[0,22.5,0],"origin":[8,6.1875,8],"faces":{"north":{"uv":[0,0,0,1],"texture":0},"east":{"uv":[35,14,39,15],"texture":0},"south":{"uv":[0,0,0,1],"texture":0},"west":{"uv":[35,15,39,16],"texture":0},"up":{"uv":[0,4,0,0],"texture":0},"down":{"uv":[0,0,0,4],"texture":0}},"type":"cube","uuid":"25dfcc91-bb31-b869-922b-3218ef1da824"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[8,5.6875,6],"to":[8,6.6875,10],"autouv":0,"color":5,"rotation":[0,45,0],"origin":[8,6.1875,8],"faces":{"north":{"uv":[0,0,0,1],"texture":0},"east":{"uv":[35,19,39,20],"texture":0},"south":{"uv":[0,0,0,1],"texture":0},"west":{"uv":[35,20,39,21],"texture":0},"up":{"uv":[0,4,0,0],"texture":0},"down":{"uv":[0,0,0,4],"texture":0}},"type":"cube","uuid":"2775476f-aeed-93a8-7b07-bfa3c476eec5"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[6,5.6875,8],"to":[10,6.6875,8],"autouv":0,"color":5,"rotation":[0,-22.5,0],"origin":[8,6.1875,8],"faces":{"north":{"uv":[35,21,39,22],"texture":0},"east":{"uv":[0,0,0,1],"texture":0},"south":{"uv":[35,22,39,23],"texture":0},"west":{"uv":[0,0,0,1],"texture":0},"up":{"uv":[4,0,0,0],"texture":0},"down":{"uv":[4,0,0,0],"texture":0}},"type":"cube","uuid":"c9fcc546-4b66-fb1f-a53f-8e66b8d49410"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[6,5.6875,8],"to":[10,6.6875,8],"autouv":0,"color":5,"origin":[8,6.1875,8],"faces":{"north":{"uv":[35,23,39,24],"texture":0},"east":{"uv":[0,0,0,1],"texture":0},"south":{"uv":[35,24,39,25],"texture":0},"west":{"uv":[0,0,0,1],"texture":0},"up":{"uv":[4,0,0,0],"texture":0},"down":{"uv":[4,0,0,0],"texture":0}},"type":"cube","uuid":"e791d8c9-01ef-1460-2db0-3b320bea6b0b"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[6,5.6875,8],"to":[10,6.6875,8],"autouv":0,"color":5,"rotation":[0,22.5,0],"origin":[8,6.1875,8],"faces":{"north":{"uv":[35,25,39,26],"texture":0},"east":{"uv":[0,0,0,1],"texture":0},"south":{"uv":[35,26,39,27],"texture":0},"west":{"uv":[0,0,0,1],"texture":0},"up":{"uv":[4,0,0,0],"texture":0},"down":{"uv":[4,0,0,0],"texture":0}},"type":"cube","uuid":"3ddf4784-aa69-4b17-e873-7aca028ab522"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[6,5.6875,8],"to":[10,6.6875,8],"autouv":0,"color":5,"rotation":[0,45,0],"origin":[8,6.1875,8],"faces":{"north":{"uv":[4,36,8,37],"texture":0},"east":{"uv":[0,0,0,1],"texture":0},"south":{"uv":[8,36,12,37],"texture":0},"west":{"uv":[0,0,0,1],"texture":0},"up":{"uv":[4,0,0,0],"texture":0},"down":{"uv":[4,0,0,0],"texture":0}},"type":"cube","uuid":"ad970ae3-9c92-98f8-eb5f-7d45e2bc3c51"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[8,5.6875,6],"to":[8,6.6875,10],"autouv":0,"color":5,"rotation":[0,-22.5,0],"origin":[8,6.1875,8],"faces":{"north":{"uv":[0,0,0,1],"texture":0},"east":{"uv":[12,36,16,37],"texture":0},"south":{"uv":[0,0,0,1],"texture":0},"west":{"uv":[16,36,20,37],"texture":0},"up":{"uv":[0,4,0,0],"texture":0},"down":{"uv":[0,0,0,4],"texture":0}},"type":"cube","uuid":"70bf14b7-3947-53b4-4807-727ff74304c2"}],"outliner":[{"name":"group","origin":[8,8,8],"color":0,"uuid":"9d985a48-53f2-58f6-02e5-80cee0c514ab","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["dfc6c4ee-9b20-b1cf-b68a-68840ab71ff3","81ab3df0-7a30-883e-da3f-5edbd1d0d56b","acd748e1-74e1-aa79-3d40-45a5510e4180","2c508eaa-4f9c-efd9-171e-1597ef51a23a"]},{"name":"group","origin":[15,10,15],"color":0,"uuid":"6534abfb-7475-3213-e227-6bc4d5e4ca30","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["3975b324-14b7-87bd-bf2b-7c54047037b4",{"name":"group","origin":[11,11,12],"color":0,"uuid":"691d9295-3d66-228b-1cc5-d66ac5298db3","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["cf9a3930-a8e2-b370-d3a6-3b50c144e0f3"]}]},{"name":"group","origin":[15,10,15],"color":0,"uuid":"87e1cc84-22e2-b4cd-f1c3-04c3dee5dd2e","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["57687dae-1a12-a202-cd99-2dc3cf048441",{"name":"group","origin":[11,11,12],"color":0,"uuid":"faadfb34-3e32-a744-7055-31f00c492088","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["bc622fef-6bb5-1561-de8e-c5382d1da27e"]}]},{"name":"group","origin":[15,10,15],"color":0,"uuid":"5c3bd61c-a87c-1557-906a-3747ceb3d428","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["4d18cc21-a271-0182-26ea-ce7b676bc5ea",{"name":"group","origin":[11,11,12],"color":0,"uuid":"46cae728-2e0c-58a4-2c65-5b7a25757eaf","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["aa1fa152-145a-c86f-6a0a-094c82d8c0f8"]}]},{"name":"group","origin":[15,10,15],"color":0,"uuid":"319a3c0e-92b8-7956-f6e9-3a311f302d4f","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["e567dd13-7520-469c-15be-6fc8e11c1ce5",{"name":"group","origin":[11,11,12],"color":0,"uuid":"da0dcc44-c266-2ab0-ef78-3825b1cea3ca","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["e4f56095-3386-926d-4c63-9c8d62a784be"]}]},{"name":"flower1","origin":[8,8,8],"color":0,"uuid":"dfa291b8-23e4-55af-e2b6-29a876bff1be","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["e34e1f9d-4da4-26d1-374c-0a10ccf20445","25dfcc91-bb31-b869-922b-3218ef1da824","2775476f-aeed-93a8-7b07-bfa3c476eec5","c9fcc546-4b66-fb1f-a53f-8e66b8d49410","e791d8c9-01ef-1460-2db0-3b320bea6b0b","3ddf4784-aa69-4b17-e873-7aca028ab522","ad970ae3-9c92-98f8-eb5f-7d45e2bc3c51","70bf14b7-3947-53b4-4807-727ff74304c2"]},{"name":"group","origin":[8,8,8],"color":0,"uuid":"71757c43-14b6-f4f5-d906-c901675071b3","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["a04b2e66-67c5-eb0d-8b2b-1e39c6613ade",{"name":"group","origin":[14,12,13],"color":0,"uuid":"fa876bde-ca01-2bdb-3fcb-9ae4a555c862","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[4.4375,4.75,6],"color":0,"uuid":"01a20b05-a0c0-249d-e3c7-1b2d03f46270","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[2.75,4.5,6],"color":0,"uuid":"44f24956-916d-b383-5bcf-a502253e08be","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[7.875,9.5,13.4375],"color":0,"uuid":"04e2be59-7055-90d6-6c5a-2c4e81f13916","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[0.25,1.6875,4.5],"color":0,"uuid":"5bfc8e2d-081d-2562-54a7-8c4e074481fc","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[]}]}]}]}]},{"name":"group","origin":[14,12,13],"color":0,"uuid":"3e0fc0c1-dab2-e2c8-0144-fe99a471f69c","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[4.4375,4.75,6],"color":0,"uuid":"23b78a32-c5a5-c593-3f7f-f0e6c8c6d0bb","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[2.75,4.5,6],"color":0,"uuid":"144f50b7-186c-ff5d-b88b-58a6f004e465","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[7.875,9.5,13.4375],"color":0,"uuid":"0d1aa47b-3336-ae11-c99c-8c33122e0679","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[0.25,1.6875,4.5],"color":0,"uuid":"d4329ad8-e90e-7a62-1a08-51ac6406a0a7","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[]}]}]}]}]}]},{"name":"group","origin":[8,8,8],"color":0,"uuid":"dd961576-16db-a252-e834-04a48de93842","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["945d0c38-0b0e-21b2-7ed1-d4554a718d96",{"name":"group","origin":[14,12,13],"color":0,"uuid":"9f5fe069-c120-953e-679f-e5accee53636","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[4.4375,4.75,6],"color":0,"uuid":"635e56ba-f192-2e4c-42aa-7db2af61c213","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[2.75,4.5,6],"color":0,"uuid":"22e2d4a5-15e5-8293-938a-08e182b3eca3","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[7.875,9.5,13.4375],"color":0,"uuid":"d23f890f-4f79-2000-5656-c274e526f1f6","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[0.25,1.6875,4.5],"color":0,"uuid":"fb79aeb3-a95c-bfe4-6f54-cb303e457ff6","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[]}]}]}]}]},{"name":"group","origin":[14,12,13],"color":0,"uuid":"0763052f-9370-ebae-2351-8b1c45ab0c85","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[4.4375,4.75,6],"color":0,"uuid":"9bc496de-88b4-1516-cf61-90c8167501d5","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[2.75,4.5,6],"color":0,"uuid":"728534c7-d79f-f651-db1c-7a96733f6b3c","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[7.875,9.5,13.4375],"color":0,"uuid":"dcab58ce-5c05-fed4-38b4-9ab893163a1d","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[0.25,1.6875,4.5],"color":0,"uuid":"e63b457c-79f1-a358-131d-f31f65118892","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[]}]}]}]}]}]},{"name":"group","origin":[8,8,8],"color":0,"uuid":"15a725af-991a-e10a-c504-8cdf49439f2a","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["a9931b54-00e9-9020-0eec-867da2136efb",{"name":"group","origin":[14,12,13],"color":0,"uuid":"177ca692-ecd0-4f2a-387b-fe546bf9d896","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[4.4375,4.75,6],"color":0,"uuid":"d76cf09c-fa81-9748-549f-30dcd3d6d66f","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[2.75,4.5,6],"color":0,"uuid":"60b49778-3628-7f5f-ad15-7604f41c11cc","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[7.875,9.5,13.4375],"color":0,"uuid":"2c782798-ad70-958c-a6b7-55bb42d5d922","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[0.25,1.6875,4.5],"color":0,"uuid":"6198baa8-5e27-5ff0-b32f-ad0618be8918","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[]}]}]}]}]},{"name":"group","origin":[14,12,13],"color":0,"uuid":"663fc299-5bac-cfe0-7ba2-c606307a0c56","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[4.4375,4.75,6],"color":0,"uuid":"51d700f7-1b78-7ace-ca18-747291239c03","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[2.75,4.5,6],"color":0,"uuid":"cdda252f-6ded-dda2-0ef6-3bd81ac93425","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[7.875,9.5,13.4375],"color":0,"uuid":"8038fa6d-36a9-f8f3-76d2-788c58111ffc","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[0.25,1.6875,4.5],"color":0,"uuid":"6175dd4f-210f-9431-c58b-77af0d559b3b","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[]}]}]}]}]}]},{"name":"group","origin":[8,8,8],"color":0,"uuid":"f99233d0-a262-8a87-4839-180e09e4d9d2","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["80031d17-9f52-6b47-ec7b-84571c75b8bd",{"name":"group","origin":[14,12,13],"color":0,"uuid":"3ccc6491-cd06-43ec-eaa9-c71032cd8642","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[4.4375,4.75,6],"color":0,"uuid":"68ba2538-8d8f-a03e-d4af-2ab62ac045c9","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[2.75,4.5,6],"color":0,"uuid":"d99a924d-2d8b-9840-bf95-867a34a25096","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[7.875,9.5,13.4375],"color":0,"uuid":"518cb151-b74a-2d30-a256-0e89480b6ecc","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[0.25,1.6875,4.5],"color":0,"uuid":"6dc64e90-c3f6-c2a6-fda4-6620fa2ad66b","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[]}]}]}]}]},{"name":"group","origin":[14,12,13],"color":0,"uuid":"c8d8bcc4-0191-ffd0-b2c0-c559bdd7995b","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[4.4375,4.75,6],"color":0,"uuid":"5d3c7416-0f92-0042-0051-da4c1f15a01f","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[2.75,4.5,6],"color":0,"uuid":"d1d0df2e-4647-6e73-772e-8fce3dd0da3a","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[7.875,9.5,13.4375],"color":0,"uuid":"eefbaffd-6eda-98c6-755f-71021a507629","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[0.25,1.6875,4.5],"color":0,"uuid":"e5c4d697-a76d-9966-5076-da2628aae90d","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[]}]}]}]}]}]}],"textures":[{"path":"/home/deck/dev/minecraft/cosmere/src/surgebinding/resources/assets/surgebinding/textures/block/rockbud_variant.png","name":"rockbud_variant.png","folder":"block","namespace":"surgebinding","id":"0","particle":true,"render_mode":"default","render_sides":"auto","frame_time":1,"frame_order_type":"loop","frame_order":"","frame_interpolate":false,"visible":true,"mode":"bitmap","saved":true,"uuid":"05d5e940-264e-c748-2def-e76fbcfc8a67","relative_path":"../../../../../textures/block/rockbud_variant.png","source":"data:image/png;base64,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"}]} \ No newline at end of file diff --git a/blockbench/surgebinding/blocks/rockbud_variant/RockBud5.bbmodel b/blockbench/surgebinding/blocks/rockbud_variant/RockBud5.bbmodel new file mode 100644 index 000000000..8ca7477c5 --- /dev/null +++ b/blockbench/surgebinding/blocks/rockbud_variant/RockBud5.bbmodel @@ -0,0 +1 @@ +{"meta":{"format_version":"4.5","model_format":"java_block","box_uv":false},"name":"rockbud_variant5","parent":"","ambientocclusion":true,"front_gui_light":false,"visible_box":[1,1,0],"variable_placeholders":"","variable_placeholder_buttons":[],"unhandled_root_fields":{},"resolution":{"width":64,"height":64},"elements":[{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[6,0,6],"to":[10,1,10],"autouv":0,"color":0,"origin":[15,8,15],"faces":{"north":{"uv":[20,19,24,20],"texture":0},"east":{"uv":[32,27,36,28],"texture":0},"south":{"uv":[32,30,36,31],"texture":0},"west":{"uv":[33,11,37,12],"texture":0},"up":{"uv":[28,28,24,24],"texture":0},"down":{"uv":[28,19,24,23],"texture":0}},"type":"cube","uuid":"dfc6c4ee-9b20-b1cf-b68a-68840ab71ff3"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[5,1,5],"to":[11,2,11],"autouv":0,"color":0,"origin":[15,9,15],"faces":{"north":{"uv":[14,29,20,30],"texture":0},"east":{"uv":[0,30,6,31],"texture":0},"south":{"uv":[14,30,20,31],"texture":0},"west":{"uv":[20,30,26,31],"texture":0},"up":{"uv":[14,14,8,8],"texture":0},"down":{"uv":[14,0,8,6],"texture":0}},"type":"cube","uuid":"81ab3df0-7a30-883e-da3f-5edbd1d0d56b"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[4,2,4],"to":[12,4,12],"autouv":0,"color":0,"origin":[15,10,15],"faces":{"north":{"uv":[25,0,33,2],"texture":0},"east":{"uv":[25,2,33,4],"texture":0},"south":{"uv":[25,4,33,6],"texture":0},"west":{"uv":[25,6,33,8],"texture":0},"up":{"uv":[8,8,0,0],"texture":0},"down":{"uv":[8,8,0,16],"texture":0}},"type":"cube","uuid":"acd748e1-74e1-aa79-3d40-45a5510e4180"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[3.5,2.9375,4],"to":[4.5,6.9375,12],"autouv":0,"color":7,"rotation":[0,0,22.5],"origin":[4,2.9375,8],"faces":{"north":{"uv":[34,18,38,19],"rotation":270,"texture":0},"east":{"uv":[18,8,14,0],"rotation":90,"texture":0},"south":{"uv":[34,32,38,33],"rotation":90,"texture":0},"west":{"uv":[4,16,0,24],"rotation":90,"texture":0},"up":{"uv":[25,8,33,9],"rotation":90,"texture":0},"down":{"uv":[24,23,32,24],"rotation":90,"texture":0}},"type":"cube","uuid":"3975b324-14b7-87bd-bf2b-7c54047037b4"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[2.830430681421709,6.7915206024366235,5],"to":[5.830430681421708,7.7915206024366235,11],"autouv":0,"color":7,"origin":[2.7982713455073016,7.061256186283454,8],"faces":{"north":{"uv":[32,42,35,43],"rotation":180,"texture":0},"east":{"uv":[12,31,18,32],"rotation":180,"texture":0},"south":{"uv":[35,42,38,43],"rotation":180,"texture":0},"west":{"uv":[6,31,12,32],"rotation":180,"texture":0},"up":{"uv":[25,6,22,12],"rotation":180,"texture":0},"down":{"uv":[25,6,22,0],"rotation":180,"texture":0}},"type":"cube","uuid":"cf9a3930-a8e2-b370-d3a6-3b50c144e0f3"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[11.5,2.9375,4],"to":[12.5,6.9375,12],"autouv":0,"color":7,"rotation":[0,0,-22.5],"origin":[12,2.9375,8],"faces":{"north":{"uv":[34,33,38,34],"rotation":90,"texture":0},"east":{"uv":[22,0,18,8],"rotation":270,"texture":0},"south":{"uv":[10,35,14,36],"rotation":270,"texture":0},"west":{"uv":[8,24,4,16],"rotation":270,"texture":0},"up":{"uv":[25,9,33,10],"rotation":270,"texture":0},"down":{"uv":[25,10,33,11],"rotation":270,"texture":0}},"type":"cube","uuid":"57687dae-1a12-a202-cd99-2dc3cf048441"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[10.16956931857829,6.79152060243662,5],"to":[13.16956931857829,7.79152060243662,11],"autouv":0,"color":7,"origin":[13.201728654492705,7.061256186283451,8],"faces":{"north":{"uv":[38,42,41,43],"rotation":180,"texture":0},"east":{"uv":[24,31,30,32],"rotation":180,"texture":0},"south":{"uv":[41,42,44,43],"rotation":180,"texture":0},"west":{"uv":[18,31,24,32],"rotation":180,"texture":0},"up":{"uv":[6,24,3,30],"rotation":180,"texture":0},"down":{"uv":[3,30,0,24],"rotation":180,"texture":0}},"type":"cube","uuid":"bc622fef-6bb5-1561-de8e-c5382d1da27e"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[4,2.9375,11.5],"to":[12,6.9375,12.5],"autouv":0,"color":7,"rotation":[22.5,0,0],"origin":[8,2.9375,12],"faces":{"north":{"uv":[22,12,14,8],"rotation":180,"texture":0},"east":{"uv":[24,35,28,36],"rotation":90,"texture":0},"south":{"uv":[16,20,8,24],"texture":0},"west":{"uv":[35,0,39,1],"rotation":270,"texture":0},"up":{"uv":[26,16,34,17],"texture":0},"down":{"uv":[25,11,33,12],"rotation":180,"texture":0}},"type":"cube","uuid":"4d18cc21-a271-0182-26ea-ce7b676bc5ea"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[5,7.024510958103974,13.012530324326828],"to":[11,10.024510958103974,14.012530324326828],"autouv":0,"color":7,"rotation":[-45,0,0],"origin":[8,6.99235162218956,13.28226590817366],"faces":{"north":{"uv":[26,19,20,16],"rotation":180,"texture":0},"east":{"uv":[42,3,45,4],"rotation":90,"texture":0},"south":{"uv":[12,24,6,27],"texture":0},"west":{"uv":[42,4,45,5],"rotation":270,"texture":0},"up":{"uv":[0,32,6,33],"texture":0},"down":{"uv":[30,31,36,32],"rotation":180,"texture":0}},"type":"cube","uuid":"aa1fa152-145a-c86f-6a0a-094c82d8c0f8"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[4,2.9375,3.5],"to":[12,6.9375,4.5],"autouv":0,"color":7,"rotation":[-22.5,0,0],"origin":[8,2.9375,4],"faces":{"north":{"uv":[28,12,20,16],"rotation":180,"texture":0},"east":{"uv":[35,1,39,2],"rotation":270,"texture":0},"south":{"uv":[24,24,16,20],"texture":0},"west":{"uv":[35,2,39,3],"rotation":90,"texture":0},"up":{"uv":[26,17,34,18],"rotation":180,"texture":0},"down":{"uv":[26,18,34,19],"texture":0}},"type":"cube","uuid":"e567dd13-7520-469c-15be-6fc8e11c1ce5"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[5,6.722616038342735,2.7498934277407505],"to":[11,7.722616038342734,5.74989342774075],"autouv":0,"color":7,"rotation":[-45,0,0],"origin":[8,6.992351622189567,2.717734091826344],"faces":{"north":{"uv":[12,32,18,33],"rotation":180,"texture":0},"east":{"uv":[42,5,45,6],"rotation":180,"texture":0},"south":{"uv":[6,32,12,33],"rotation":180,"texture":0},"west":{"uv":[42,6,45,7],"rotation":180,"texture":0},"up":{"uv":[24,24,18,27],"texture":0},"down":{"uv":[18,27,12,24],"texture":0}},"type":"cube","uuid":"e4f56095-3386-926d-4c63-9c8d62a784be"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[5,4,5],"to":[7,6,7],"autouv":0,"color":6,"origin":[14,12,13],"faces":{"north":{"uv":[12,6,14,8],"texture":0},"east":{"uv":[18,12,20,14],"texture":0},"south":{"uv":[39,21,41,23],"texture":0},"west":{"uv":[39,23,41,25],"texture":0},"up":{"uv":[41,27,39,25],"texture":0},"down":{"uv":[2,40,0,42],"texture":0}},"type":"cube","uuid":"a04b2e66-67c5-eb0d-8b2b-1e39c6613ade"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[9,4,5],"to":[11,6,7],"autouv":0,"color":6,"origin":[3,12,14],"faces":{"north":{"uv":[26,40,28,42],"texture":0},"east":{"uv":[28,40,30,42],"texture":0},"south":{"uv":[30,40,32,42],"texture":0},"west":{"uv":[32,40,34,42],"texture":0},"up":{"uv":[36,42,34,40],"texture":0},"down":{"uv":[38,40,36,42],"texture":0}},"type":"cube","uuid":"945d0c38-0b0e-21b2-7ed1-d4554a718d96"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[9,4,9],"to":[11,6,11],"autouv":0,"color":6,"origin":[2,12,3],"faces":{"north":{"uv":[40,9,42,11],"texture":0},"east":{"uv":[10,41,12,43],"texture":0},"south":{"uv":[12,41,14,43],"texture":0},"west":{"uv":[14,41,16,43],"texture":0},"up":{"uv":[18,43,16,41],"texture":0},"down":{"uv":[20,41,18,43],"texture":0}},"type":"cube","uuid":"a9931b54-00e9-9020-0eec-867da2136efb"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[5,4,5],"to":[11,5,11],"autouv":0,"color":0,"inflate":0.0625,"origin":[8,4.5,8],"faces":{"north":{"uv":[26,30,32,31],"texture":0},"east":{"uv":[30,28,36,29],"texture":0},"south":{"uv":[30,29,36,30],"texture":0},"west":{"uv":[0,31,6,32],"texture":0},"up":{"uv":[14,20,8,14],"texture":0},"down":{"uv":[20,14,14,20],"texture":0}},"type":"cube","uuid":"2c508eaa-4f9c-efd9-171e-1597ef51a23a"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[5,4,9],"to":[7,6,11],"autouv":0,"color":6,"origin":[13,12,2],"faces":{"north":{"uv":[41,23,43,25],"texture":0},"east":{"uv":[41,25,43,27],"texture":0},"south":{"uv":[41,27,43,29],"texture":0},"west":{"uv":[41,29,43,31],"texture":0},"up":{"uv":[43,36,41,34],"texture":0},"down":{"uv":[43,36,41,38],"texture":0}},"type":"cube","uuid":"80031d17-9f52-6b47-ec7b-84571c75b8bd"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[8,5.6875,6],"to":[8,6.6875,10],"autouv":0,"color":5,"origin":[16,13.6875,16],"faces":{"north":{"uv":[0,0,0,1],"texture":0},"east":{"uv":[35,12,39,13],"texture":0},"south":{"uv":[0,0,0,1],"texture":0},"west":{"uv":[35,13,39,14],"texture":0},"up":{"uv":[0,4,0,0],"texture":0},"down":{"uv":[0,0,0,4],"texture":0}},"type":"cube","uuid":"e34e1f9d-4da4-26d1-374c-0a10ccf20445"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[8,5.6875,6],"to":[8,6.6875,10],"autouv":0,"color":5,"rotation":[0,22.5,0],"origin":[8,6.1875,8],"faces":{"north":{"uv":[0,0,0,1],"texture":0},"east":{"uv":[35,14,39,15],"texture":0},"south":{"uv":[0,0,0,1],"texture":0},"west":{"uv":[35,15,39,16],"texture":0},"up":{"uv":[0,4,0,0],"texture":0},"down":{"uv":[0,0,0,4],"texture":0}},"type":"cube","uuid":"25dfcc91-bb31-b869-922b-3218ef1da824"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[8,5.6875,6],"to":[8,6.6875,10],"autouv":0,"color":5,"rotation":[0,45,0],"origin":[8,6.1875,8],"faces":{"north":{"uv":[0,0,0,1],"texture":0},"east":{"uv":[35,19,39,20],"texture":0},"south":{"uv":[0,0,0,1],"texture":0},"west":{"uv":[35,20,39,21],"texture":0},"up":{"uv":[0,4,0,0],"texture":0},"down":{"uv":[0,0,0,4],"texture":0}},"type":"cube","uuid":"2775476f-aeed-93a8-7b07-bfa3c476eec5"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[6,5.6875,8],"to":[10,6.6875,8],"autouv":0,"color":5,"rotation":[0,-22.5,0],"origin":[8,6.1875,8],"faces":{"north":{"uv":[35,21,39,22],"texture":0},"east":{"uv":[0,0,0,1],"texture":0},"south":{"uv":[35,22,39,23],"texture":0},"west":{"uv":[0,0,0,1],"texture":0},"up":{"uv":[4,0,0,0],"texture":0},"down":{"uv":[4,0,0,0],"texture":0}},"type":"cube","uuid":"c9fcc546-4b66-fb1f-a53f-8e66b8d49410"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[6,5.6875,8],"to":[10,6.6875,8],"autouv":0,"color":5,"origin":[8,6.1875,8],"faces":{"north":{"uv":[35,23,39,24],"texture":0},"east":{"uv":[0,0,0,1],"texture":0},"south":{"uv":[35,24,39,25],"texture":0},"west":{"uv":[0,0,0,1],"texture":0},"up":{"uv":[4,0,0,0],"texture":0},"down":{"uv":[4,0,0,0],"texture":0}},"type":"cube","uuid":"e791d8c9-01ef-1460-2db0-3b320bea6b0b"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[6,5.6875,8],"to":[10,6.6875,8],"autouv":0,"color":5,"rotation":[0,22.5,0],"origin":[8,6.1875,8],"faces":{"north":{"uv":[35,25,39,26],"texture":0},"east":{"uv":[0,0,0,1],"texture":0},"south":{"uv":[35,26,39,27],"texture":0},"west":{"uv":[0,0,0,1],"texture":0},"up":{"uv":[4,0,0,0],"texture":0},"down":{"uv":[4,0,0,0],"texture":0}},"type":"cube","uuid":"3ddf4784-aa69-4b17-e873-7aca028ab522"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[6,5.6875,8],"to":[10,6.6875,8],"autouv":0,"color":5,"rotation":[0,45,0],"origin":[8,6.1875,8],"faces":{"north":{"uv":[4,36,8,37],"texture":0},"east":{"uv":[0,0,0,1],"texture":0},"south":{"uv":[8,36,12,37],"texture":0},"west":{"uv":[0,0,0,1],"texture":0},"up":{"uv":[4,0,0,0],"texture":0},"down":{"uv":[4,0,0,0],"texture":0}},"type":"cube","uuid":"ad970ae3-9c92-98f8-eb5f-7d45e2bc3c51"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[8,5.6875,6],"to":[8,6.6875,10],"autouv":0,"color":5,"rotation":[0,-22.5,0],"origin":[8,6.1875,8],"faces":{"north":{"uv":[0,0,0,1],"texture":0},"east":{"uv":[12,36,16,37],"texture":0},"south":{"uv":[0,0,0,1],"texture":0},"west":{"uv":[16,36,20,37],"texture":0},"up":{"uv":[0,4,0,0],"texture":0},"down":{"uv":[0,0,0,4],"texture":0}},"type":"cube","uuid":"70bf14b7-3947-53b4-4807-727ff74304c2"}],"outliner":[{"name":"group","origin":[8,8,8],"color":0,"uuid":"9d985a48-53f2-58f6-02e5-80cee0c514ab","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["dfc6c4ee-9b20-b1cf-b68a-68840ab71ff3","81ab3df0-7a30-883e-da3f-5edbd1d0d56b","acd748e1-74e1-aa79-3d40-45a5510e4180","2c508eaa-4f9c-efd9-171e-1597ef51a23a"]},{"name":"group","origin":[15,10,15],"color":0,"uuid":"6534abfb-7475-3213-e227-6bc4d5e4ca30","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["3975b324-14b7-87bd-bf2b-7c54047037b4",{"name":"group","origin":[11,11,12],"color":0,"uuid":"691d9295-3d66-228b-1cc5-d66ac5298db3","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["cf9a3930-a8e2-b370-d3a6-3b50c144e0f3"]}]},{"name":"group","origin":[15,10,15],"color":0,"uuid":"87e1cc84-22e2-b4cd-f1c3-04c3dee5dd2e","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["57687dae-1a12-a202-cd99-2dc3cf048441",{"name":"group","origin":[11,11,12],"color":0,"uuid":"faadfb34-3e32-a744-7055-31f00c492088","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["bc622fef-6bb5-1561-de8e-c5382d1da27e"]}]},{"name":"group","origin":[15,10,15],"color":0,"uuid":"5c3bd61c-a87c-1557-906a-3747ceb3d428","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["4d18cc21-a271-0182-26ea-ce7b676bc5ea",{"name":"group","origin":[11,11,12],"color":0,"uuid":"46cae728-2e0c-58a4-2c65-5b7a25757eaf","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["aa1fa152-145a-c86f-6a0a-094c82d8c0f8"]}]},{"name":"group","origin":[15,10,15],"color":0,"uuid":"319a3c0e-92b8-7956-f6e9-3a311f302d4f","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["e567dd13-7520-469c-15be-6fc8e11c1ce5",{"name":"group","origin":[11,11,12],"color":0,"uuid":"da0dcc44-c266-2ab0-ef78-3825b1cea3ca","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["e4f56095-3386-926d-4c63-9c8d62a784be"]}]},{"name":"flower1","origin":[8,8,8],"color":0,"uuid":"dfa291b8-23e4-55af-e2b6-29a876bff1be","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["e34e1f9d-4da4-26d1-374c-0a10ccf20445","25dfcc91-bb31-b869-922b-3218ef1da824","2775476f-aeed-93a8-7b07-bfa3c476eec5","c9fcc546-4b66-fb1f-a53f-8e66b8d49410","e791d8c9-01ef-1460-2db0-3b320bea6b0b","3ddf4784-aa69-4b17-e873-7aca028ab522","ad970ae3-9c92-98f8-eb5f-7d45e2bc3c51","70bf14b7-3947-53b4-4807-727ff74304c2"]},{"name":"group","origin":[8,8,8],"color":0,"uuid":"71757c43-14b6-f4f5-d906-c901675071b3","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["a04b2e66-67c5-eb0d-8b2b-1e39c6613ade",{"name":"group","origin":[14,12,13],"color":0,"uuid":"fa876bde-ca01-2bdb-3fcb-9ae4a555c862","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[4.4375,4.75,6],"color":0,"uuid":"01a20b05-a0c0-249d-e3c7-1b2d03f46270","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[2.75,4.5,6],"color":0,"uuid":"44f24956-916d-b383-5bcf-a502253e08be","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[7.875,9.5,13.4375],"color":0,"uuid":"04e2be59-7055-90d6-6c5a-2c4e81f13916","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[0.25,1.6875,4.5],"color":0,"uuid":"5bfc8e2d-081d-2562-54a7-8c4e074481fc","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[]}]}]}]}]},{"name":"group","origin":[14,12,13],"color":0,"uuid":"3e0fc0c1-dab2-e2c8-0144-fe99a471f69c","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[4.4375,4.75,6],"color":0,"uuid":"23b78a32-c5a5-c593-3f7f-f0e6c8c6d0bb","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[2.75,4.5,6],"color":0,"uuid":"144f50b7-186c-ff5d-b88b-58a6f004e465","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[7.875,9.5,13.4375],"color":0,"uuid":"0d1aa47b-3336-ae11-c99c-8c33122e0679","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[0.25,1.6875,4.5],"color":0,"uuid":"d4329ad8-e90e-7a62-1a08-51ac6406a0a7","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[]}]}]}]}]}]},{"name":"group","origin":[8,8,8],"color":0,"uuid":"dd961576-16db-a252-e834-04a48de93842","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["945d0c38-0b0e-21b2-7ed1-d4554a718d96",{"name":"group","origin":[14,12,13],"color":0,"uuid":"9f5fe069-c120-953e-679f-e5accee53636","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[4.4375,4.75,6],"color":0,"uuid":"635e56ba-f192-2e4c-42aa-7db2af61c213","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[2.75,4.5,6],"color":0,"uuid":"22e2d4a5-15e5-8293-938a-08e182b3eca3","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[7.875,9.5,13.4375],"color":0,"uuid":"d23f890f-4f79-2000-5656-c274e526f1f6","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[0.25,1.6875,4.5],"color":0,"uuid":"fb79aeb3-a95c-bfe4-6f54-cb303e457ff6","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[]}]}]}]}]},{"name":"group","origin":[14,12,13],"color":0,"uuid":"0763052f-9370-ebae-2351-8b1c45ab0c85","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[4.4375,4.75,6],"color":0,"uuid":"9bc496de-88b4-1516-cf61-90c8167501d5","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[2.75,4.5,6],"color":0,"uuid":"728534c7-d79f-f651-db1c-7a96733f6b3c","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[7.875,9.5,13.4375],"color":0,"uuid":"dcab58ce-5c05-fed4-38b4-9ab893163a1d","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[0.25,1.6875,4.5],"color":0,"uuid":"e63b457c-79f1-a358-131d-f31f65118892","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[]}]}]}]}]}]},{"name":"group","origin":[8,8,8],"color":0,"uuid":"15a725af-991a-e10a-c504-8cdf49439f2a","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["a9931b54-00e9-9020-0eec-867da2136efb",{"name":"group","origin":[14,12,13],"color":0,"uuid":"177ca692-ecd0-4f2a-387b-fe546bf9d896","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[4.4375,4.75,6],"color":0,"uuid":"d76cf09c-fa81-9748-549f-30dcd3d6d66f","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[2.75,4.5,6],"color":0,"uuid":"60b49778-3628-7f5f-ad15-7604f41c11cc","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[7.875,9.5,13.4375],"color":0,"uuid":"2c782798-ad70-958c-a6b7-55bb42d5d922","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[0.25,1.6875,4.5],"color":0,"uuid":"6198baa8-5e27-5ff0-b32f-ad0618be8918","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[]}]}]}]}]},{"name":"group","origin":[14,12,13],"color":0,"uuid":"663fc299-5bac-cfe0-7ba2-c606307a0c56","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[4.4375,4.75,6],"color":0,"uuid":"51d700f7-1b78-7ace-ca18-747291239c03","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[2.75,4.5,6],"color":0,"uuid":"cdda252f-6ded-dda2-0ef6-3bd81ac93425","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[7.875,9.5,13.4375],"color":0,"uuid":"8038fa6d-36a9-f8f3-76d2-788c58111ffc","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[0.25,1.6875,4.5],"color":0,"uuid":"6175dd4f-210f-9431-c58b-77af0d559b3b","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[]}]}]}]}]}]},{"name":"group","origin":[8,8,8],"color":0,"uuid":"f99233d0-a262-8a87-4839-180e09e4d9d2","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["80031d17-9f52-6b47-ec7b-84571c75b8bd",{"name":"group","origin":[14,12,13],"color":0,"uuid":"3ccc6491-cd06-43ec-eaa9-c71032cd8642","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[4.4375,4.75,6],"color":0,"uuid":"68ba2538-8d8f-a03e-d4af-2ab62ac045c9","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[2.75,4.5,6],"color":0,"uuid":"d99a924d-2d8b-9840-bf95-867a34a25096","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[7.875,9.5,13.4375],"color":0,"uuid":"518cb151-b74a-2d30-a256-0e89480b6ecc","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[0.25,1.6875,4.5],"color":0,"uuid":"6dc64e90-c3f6-c2a6-fda4-6620fa2ad66b","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[]}]}]}]}]},{"name":"group","origin":[14,12,13],"color":0,"uuid":"c8d8bcc4-0191-ffd0-b2c0-c559bdd7995b","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[4.4375,4.75,6],"color":0,"uuid":"5d3c7416-0f92-0042-0051-da4c1f15a01f","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[2.75,4.5,6],"color":0,"uuid":"d1d0df2e-4647-6e73-772e-8fce3dd0da3a","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[7.875,9.5,13.4375],"color":0,"uuid":"eefbaffd-6eda-98c6-755f-71021a507629","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[0.25,1.6875,4.5],"color":0,"uuid":"e5c4d697-a76d-9966-5076-da2628aae90d","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[]}]}]}]}]}]}],"textures":[{"path":"/home/deck/dev/minecraft/cosmere/src/surgebinding/resources/assets/surgebinding/textures/block/rockbud_variant.png","name":"rockbud_variant.png","folder":"block","namespace":"surgebinding","id":"0","particle":true,"render_mode":"default","render_sides":"auto","frame_time":1,"frame_order_type":"loop","frame_order":"","frame_interpolate":false,"visible":true,"mode":"bitmap","saved":true,"uuid":"05d5e940-264e-c748-2def-e76fbcfc8a67","relative_path":"../../../../../textures/block/rockbud_variant.png","source":"data:image/png;base64,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"}]} \ No newline at end of file diff --git a/blockbench/surgebinding/blocks/rockbud_variant/RockBud6.bbmodel b/blockbench/surgebinding/blocks/rockbud_variant/RockBud6.bbmodel new file mode 100644 index 000000000..a7904a919 --- /dev/null +++ b/blockbench/surgebinding/blocks/rockbud_variant/RockBud6.bbmodel @@ -0,0 +1 @@ +{"meta":{"format_version":"4.5","model_format":"java_block","box_uv":false},"name":"rockbud_variant6","parent":"","ambientocclusion":true,"front_gui_light":false,"visible_box":[1,1,0],"variable_placeholders":"","variable_placeholder_buttons":[],"unhandled_root_fields":{},"resolution":{"width":64,"height":64},"elements":[{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[6,0,6],"to":[10,1,10],"autouv":0,"color":0,"origin":[15,8,15],"faces":{"north":{"uv":[20,19,24,20],"texture":0},"east":{"uv":[32,27,36,28],"texture":0},"south":{"uv":[32,30,36,31],"texture":0},"west":{"uv":[33,11,37,12],"texture":0},"up":{"uv":[28,28,24,24],"texture":0},"down":{"uv":[28,19,24,23],"texture":0}},"type":"cube","uuid":"dfc6c4ee-9b20-b1cf-b68a-68840ab71ff3"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[5,1,5],"to":[11,2,11],"autouv":0,"color":0,"origin":[15,9,15],"faces":{"north":{"uv":[14,29,20,30],"texture":0},"east":{"uv":[0,30,6,31],"texture":0},"south":{"uv":[14,30,20,31],"texture":0},"west":{"uv":[20,30,26,31],"texture":0},"up":{"uv":[14,14,8,8],"texture":0},"down":{"uv":[14,0,8,6],"texture":0}},"type":"cube","uuid":"81ab3df0-7a30-883e-da3f-5edbd1d0d56b"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[4,2,4],"to":[12,4,12],"autouv":0,"color":0,"origin":[15,10,15],"faces":{"north":{"uv":[25,0,33,2],"texture":0},"east":{"uv":[25,2,33,4],"texture":0},"south":{"uv":[25,4,33,6],"texture":0},"west":{"uv":[25,6,33,8],"texture":0},"up":{"uv":[8,8,0,0],"texture":0},"down":{"uv":[8,8,0,16],"texture":0}},"type":"cube","uuid":"acd748e1-74e1-aa79-3d40-45a5510e4180"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[3,3,4],"to":[4,7,12],"autouv":0,"color":7,"rotation":[0,0,-22.5],"origin":[3.5,3,8],"faces":{"north":{"uv":[34,18,38,19],"rotation":270,"texture":0},"east":{"uv":[18,8,14,0],"rotation":90,"texture":0},"south":{"uv":[34,32,38,33],"rotation":90,"texture":0},"west":{"uv":[4,16,0,24],"rotation":90,"texture":0},"up":{"uv":[25,8,33,9],"rotation":90,"texture":0},"down":{"uv":[24,23,32,24],"rotation":90,"texture":0}},"type":"cube","uuid":"3975b324-14b7-87bd-bf2b-7c54047037b4"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[4.639861775070192,6.033306455634415,5],"to":[7.639861775070193,7.033306455634415,11],"autouv":0,"color":7,"rotation":[0,0,-22.5],"origin":[4.677551173840815,6.924549244998316,8],"faces":{"north":{"uv":[32,42,35,43],"rotation":180,"texture":0},"east":{"uv":[12,31,18,32],"rotation":180,"texture":0},"south":{"uv":[35,42,38,43],"rotation":180,"texture":0},"west":{"uv":[6,31,12,32],"rotation":180,"texture":0},"up":{"uv":[25,6,22,12],"rotation":180,"texture":0},"down":{"uv":[25,6,22,0],"rotation":180,"texture":0}},"type":"cube","uuid":"cf9a3930-a8e2-b370-d3a6-3b50c144e0f3"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[12,3,4],"to":[13,7,12],"autouv":0,"color":7,"rotation":[0,0,22.5],"origin":[12.5,3,8],"faces":{"north":{"uv":[34,33,38,34],"rotation":90,"texture":0},"east":{"uv":[22,0,18,8],"rotation":270,"texture":0},"south":{"uv":[10,35,14,36],"rotation":270,"texture":0},"west":{"uv":[8,24,4,16],"rotation":270,"texture":0},"up":{"uv":[25,9,33,10],"rotation":270,"texture":0},"down":{"uv":[25,10,33,11],"rotation":270,"texture":0}},"type":"cube","uuid":"57687dae-1a12-a202-cd99-2dc3cf048441"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[8.36013822492981,6.033306455634415,5],"to":[11.360138224929809,7.033306455634415,11],"autouv":0,"color":7,"rotation":[0,0,22.5],"origin":[11.322448826159185,6.924549244998316,8],"faces":{"north":{"uv":[38,42,41,43],"rotation":180,"texture":0},"east":{"uv":[24,31,30,32],"rotation":180,"texture":0},"south":{"uv":[41,42,44,43],"rotation":180,"texture":0},"west":{"uv":[18,31,24,32],"rotation":180,"texture":0},"up":{"uv":[6,24,3,30],"rotation":180,"texture":0},"down":{"uv":[3,30,0,24],"rotation":180,"texture":0}},"type":"cube","uuid":"bc622fef-6bb5-1561-de8e-c5382d1da27e"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[4,3,12],"to":[12,7,13],"autouv":0,"color":7,"rotation":[-22.5,0,0],"origin":[8,3,12.5],"faces":{"north":{"uv":[22,12,14,8],"rotation":180,"texture":0},"east":{"uv":[24,35,28,36],"rotation":90,"texture":0},"south":{"uv":[16,20,8,24],"texture":0},"west":{"uv":[35,0,39,1],"rotation":270,"texture":0},"up":{"uv":[26,16,34,17],"texture":0},"down":{"uv":[25,11,33,12],"rotation":180,"texture":0}},"type":"cube","uuid":"4d18cc21-a271-0182-26ea-ce7b676bc5ea"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[5,6.033306455634415,8.36013822492981],"to":[11,7.033306455634415,11.360138224929809],"autouv":0,"color":7,"origin":[8,6.924549244998316,11.322448826159185],"faces":{"north":{"uv":[0,32,6,33],"rotation":180,"texture":0},"east":{"uv":[42,3,45,4],"rotation":180,"texture":0},"south":{"uv":[30,31,36,32],"rotation":180,"texture":0},"west":{"uv":[42,4,45,5],"rotation":180,"texture":0},"up":{"uv":[12,24,6,27],"texture":0},"down":{"uv":[26,19,20,16],"texture":0}},"type":"cube","uuid":"aa1fa152-145a-c86f-6a0a-094c82d8c0f8"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[4,3,3],"to":[12,7,4],"autouv":0,"color":7,"rotation":[22.5,0,0],"origin":[8,3,3.5],"faces":{"north":{"uv":[28,12,20,16],"rotation":180,"texture":0},"east":{"uv":[35,1,39,2],"rotation":270,"texture":0},"south":{"uv":[24,24,16,20],"texture":0},"west":{"uv":[35,2,39,3],"rotation":90,"texture":0},"up":{"uv":[26,17,34,18],"rotation":180,"texture":0},"down":{"uv":[26,18,34,19],"texture":0}},"type":"cube","uuid":"e567dd13-7520-469c-15be-6fc8e11c1ce5"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[5,6.033306455634416,4.63986177507019],"to":[11,7.033306455634416,7.63986177507019],"autouv":0,"color":7,"origin":[8,6.924549244998317,4.677551173840815],"faces":{"north":{"uv":[12,32,18,33],"rotation":180,"texture":0},"east":{"uv":[42,5,45,6],"rotation":180,"texture":0},"south":{"uv":[6,32,12,33],"rotation":180,"texture":0},"west":{"uv":[42,6,45,7],"rotation":180,"texture":0},"up":{"uv":[24,24,18,27],"texture":0},"down":{"uv":[18,27,12,24],"texture":0}},"type":"cube","uuid":"e4f56095-3386-926d-4c63-9c8d62a784be"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[5,4,5],"to":[11,5,11],"autouv":0,"color":0,"inflate":0.0625,"origin":[8,4.5,8],"faces":{"north":{"uv":[26,30,32,31],"texture":0},"east":{"uv":[30,28,36,29],"texture":0},"south":{"uv":[30,29,36,30],"texture":0},"west":{"uv":[0,31,6,32],"texture":0},"up":{"uv":[14,20,8,14],"texture":0},"down":{"uv":[20,14,14,20],"texture":0}},"type":"cube","uuid":"2c508eaa-4f9c-efd9-171e-1597ef51a23a"}],"outliner":[{"name":"group","origin":[8,8,8],"color":0,"uuid":"9d985a48-53f2-58f6-02e5-80cee0c514ab","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["dfc6c4ee-9b20-b1cf-b68a-68840ab71ff3","81ab3df0-7a30-883e-da3f-5edbd1d0d56b","acd748e1-74e1-aa79-3d40-45a5510e4180","2c508eaa-4f9c-efd9-171e-1597ef51a23a"]},{"name":"group","origin":[15,10,15],"color":0,"uuid":"6534abfb-7475-3213-e227-6bc4d5e4ca30","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["3975b324-14b7-87bd-bf2b-7c54047037b4",{"name":"group","origin":[11,11,12],"color":0,"uuid":"691d9295-3d66-228b-1cc5-d66ac5298db3","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["cf9a3930-a8e2-b370-d3a6-3b50c144e0f3"]}]},{"name":"group","origin":[15,10,15],"color":0,"uuid":"87e1cc84-22e2-b4cd-f1c3-04c3dee5dd2e","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["57687dae-1a12-a202-cd99-2dc3cf048441",{"name":"group","origin":[11,11,12],"color":0,"uuid":"faadfb34-3e32-a744-7055-31f00c492088","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["bc622fef-6bb5-1561-de8e-c5382d1da27e"]}]},{"name":"group","origin":[15,10,15],"color":0,"uuid":"5c3bd61c-a87c-1557-906a-3747ceb3d428","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["4d18cc21-a271-0182-26ea-ce7b676bc5ea",{"name":"group","origin":[11,11,12],"color":0,"uuid":"46cae728-2e0c-58a4-2c65-5b7a25757eaf","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["aa1fa152-145a-c86f-6a0a-094c82d8c0f8"]}]},{"name":"group","origin":[15,10,15],"color":0,"uuid":"319a3c0e-92b8-7956-f6e9-3a311f302d4f","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["e567dd13-7520-469c-15be-6fc8e11c1ce5",{"name":"group","origin":[11,11,12],"color":0,"uuid":"da0dcc44-c266-2ab0-ef78-3825b1cea3ca","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["e4f56095-3386-926d-4c63-9c8d62a784be"]}]}],"textures":[{"path":"/home/deck/dev/minecraft/cosmere/src/surgebinding/resources/assets/surgebinding/textures/block/rockbud_variant.png","name":"rockbud_variant.png","folder":"block","namespace":"surgebinding","id":"0","particle":true,"render_mode":"default","render_sides":"auto","frame_time":1,"frame_order_type":"loop","frame_order":"","frame_interpolate":false,"visible":true,"mode":"bitmap","saved":true,"uuid":"4440f627-806b-7922-d359-16cf69529382","relative_path":"../../../../../textures/block/rockbud_variant.png","source":"data:image/png;base64,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"}]} \ No newline at end of file diff --git a/blockbench/surgebinding/blocks/rockbud_variant/RockBudTexture1.png b/blockbench/surgebinding/blocks/rockbud_variant/RockBudTexture1.png new file mode 100644 index 000000000..814a8a0cb Binary files /dev/null and b/blockbench/surgebinding/blocks/rockbud_variant/RockBudTexture1.png differ diff --git a/blockbench/surgebinding/blocks/vinebud/CREDITS.txt b/blockbench/surgebinding/blocks/vinebud/CREDITS.txt new file mode 100644 index 000000000..8582deae4 --- /dev/null +++ b/blockbench/surgebinding/blocks/vinebud/CREDITS.txt @@ -0,0 +1 @@ +AlaharranHonor - Model and Texture \ No newline at end of file diff --git a/blockbench/surgebinding/blocks/vinebud/VineBud1.bbmodel b/blockbench/surgebinding/blocks/vinebud/VineBud1.bbmodel new file mode 100644 index 000000000..d18a97ee4 --- /dev/null +++ b/blockbench/surgebinding/blocks/vinebud/VineBud1.bbmodel @@ -0,0 +1 @@ +{"meta":{"format_version":"3.6","model_format":"java_block","box_uv":false},"name":"VineBud","parent":"","ambientocclusion":true,"front_gui_light":false,"visible_box":[1,1,0],"resolution":{"width":32,"height":32},"elements":[{"name":"cube","from":[5,0,5],"to":[11,6,11],"autouv":0,"color":4,"locked":false,"origin":[16,8,16],"faces":{"north":{"uv":[0,0,6,6],"texture":0},"east":{"uv":[0,6,6,12],"texture":0},"south":{"uv":[6,6,12,12],"texture":0},"west":{"uv":[6,0,12,6],"texture":0},"up":{"uv":[6,18,0,12],"texture":0},"down":{"uv":[12,12,6,18],"texture":0}},"uuid":"d68afced-893f-b744-c18f-170ee0e1ec99"},{"name":"cube","from":[5,1,11],"to":[11,5,12],"autouv":0,"color":5,"locked":false,"rotation":[22.5,0,0],"origin":[8,1,11],"faces":{"north":{"uv":[12,12,18,16],"texture":0},"east":{"uv":[22,22,23,26],"texture":0},"south":{"uv":[12,0,18,4],"texture":0},"west":{"uv":[22,0,23,4],"texture":0},"up":{"uv":[24,17,18,16],"texture":0},"down":{"uv":[24,17,18,18],"texture":0}},"uuid":"9e929490-f5c3-2d53-1ff5-a441a7bda83e"},{"name":"cube","from":[6,4.695518130045147,9.530733729460358],"to":[10,5.695518130045147,12.530733729460358],"autouv":0,"color":5,"locked":false,"rotation":[45,0,0],"origin":[8,4.695518130045147,12.530733729460358],"faces":{"north":{"uv":[22,4,26,5],"texture":0},"east":{"uv":[23,2,26,3],"texture":0},"south":{"uv":[22,5,26,6],"texture":0},"west":{"uv":[23,3,26,4],"texture":0},"up":{"uv":[22,3,18,0],"texture":0},"down":{"uv":[22,3,18,6],"texture":0}},"uuid":"ac9422af-2b63-b016-1662-a87c99a6c633"},{"name":"cube","from":[5,1,4],"to":[11,5,5],"autouv":0,"color":5,"locked":false,"rotation":[-22.5,0,0],"origin":[8,1,5],"faces":{"north":{"uv":[12,4,18,8],"texture":0},"east":{"uv":[22,6,23,10],"texture":0},"south":{"uv":[12,8,18,12],"texture":0},"west":{"uv":[0,23,1,27],"texture":0},"up":{"uv":[6,23,0,22],"texture":0},"down":{"uv":[12,22,6,23],"texture":0}},"uuid":"0a219ab6-e69a-0a9b-834b-4b93280c0959"},{"name":"cube","from":[6,4.695518130045147,3.4692662705396415],"to":[10,5.695518130045147,6.4692662705396415],"autouv":0,"color":5,"locked":false,"rotation":[-45,0,0],"origin":[8,4.695518130045147,3.4692662705396415],"faces":{"north":{"uv":[22,10,26,11],"texture":0},"east":{"uv":[23,22,26,23],"texture":0},"south":{"uv":[22,11,26,12],"texture":0},"west":{"uv":[24,6,27,7],"texture":0},"up":{"uv":[22,9,18,6],"texture":0},"down":{"uv":[22,9,18,12],"texture":0}},"uuid":"e3dea036-d71b-4244-7d4a-c37e17055339"},{"name":"cube","from":[4,1,5],"to":[5,5,11],"autouv":0,"color":5,"locked":false,"rotation":[0,0,22.5],"origin":[5,1,8],"faces":{"north":{"uv":[1,23,2,27],"texture":0},"east":{"uv":[12,16,18,20],"texture":0},"south":{"uv":[2,23,3,27],"texture":0},"west":{"uv":[0,18,6,22],"texture":0},"up":{"uv":[19,28,18,22],"texture":0},"down":{"uv":[20,22,19,28],"texture":0}},"uuid":"e9990229-654f-b0b3-dd71-edf404c1af7a"},{"name":"cube","from":[3.4692662705396415,4.695518130045147,6],"to":[6.4692662705396415,5.695518130045147,10],"autouv":0,"color":5,"locked":false,"rotation":[0,0,45],"origin":[3.4692662705396415,4.695518130045147,8],"faces":{"north":{"uv":[24,7,27,8],"texture":0},"east":{"uv":[3,23,7,24],"texture":0},"south":{"uv":[24,8,27,9],"texture":0},"west":{"uv":[7,23,11,24],"texture":0},"up":{"uv":[21,16,18,12],"texture":0},"down":{"uv":[15,20,12,24],"texture":0}},"uuid":"2b200c54-35e5-5905-515e-6726457bf099"},{"name":"cube","from":[11,1,5],"to":[12,5,11],"autouv":0,"color":5,"locked":false,"rotation":[0,0,-22.5],"origin":[11,1,8],"faces":{"north":{"uv":[11,23,12,27],"texture":0},"east":{"uv":[6,18,12,22],"texture":0},"south":{"uv":[23,23,24,27],"texture":0},"west":{"uv":[18,18,24,22],"texture":0},"up":{"uv":[21,28,20,22],"texture":0},"down":{"uv":[22,22,21,28],"texture":0}},"uuid":"e0db21d3-4896-753c-4a0d-60784a9e9c72"},{"name":"cube","from":[9.530733729460358,4.695518130045147,6],"to":[12.530733729460358,5.695518130045147,10],"autouv":0,"color":5,"locked":false,"rotation":[0,0,-45],"origin":[12.530733729460358,4.695518130045147,8],"faces":{"north":{"uv":[24,9,27,10],"texture":0},"east":{"uv":[23,0,27,1],"texture":0},"south":{"uv":[24,12,27,13],"texture":0},"west":{"uv":[23,1,27,2],"texture":0},"up":{"uv":[18,24,15,20],"texture":0},"down":{"uv":[24,12,21,16],"texture":0}},"uuid":"59150f38-930e-4233-75fb-38a9e18a9e57"},{"name":"cube","from":[6,6,9],"to":[6,10,10],"autouv":0,"color":3,"locked":false,"rotation":[0,0,22.5],"origin":[6,6,9],"faces":{"north":{"uv":[0,0,0,4],"texture":0},"east":{"uv":[23,6,24,10],"texture":0},"south":{"uv":[0,0,0,4],"texture":0},"west":{"uv":[3,24,4,28],"texture":0},"up":{"uv":[0,1,0,0],"texture":0},"down":{"uv":[0,0,0,1],"texture":0}},"uuid":"3af7bee9-469f-381d-eb7b-47badfdefe6d"},{"name":"cube","from":[6,6,6],"to":[6,10,7],"autouv":0,"color":3,"locked":false,"rotation":[0,0,22.5],"origin":[6,6,6],"faces":{"north":{"uv":[0,0,0,4],"texture":0},"east":{"uv":[4,24,5,28],"texture":0},"south":{"uv":[0,0,0,4],"texture":0},"west":{"uv":[5,24,6,28],"texture":0},"up":{"uv":[0,1,0,0],"texture":0},"down":{"uv":[0,0,0,1],"texture":0}},"uuid":"5c92057b-c324-fae3-0dad-f9928a732e43"},{"name":"cube","from":[9,6,10],"to":[10,10,10],"autouv":0,"color":3,"locked":false,"rotation":[22.5,0,0],"origin":[9,6,10],"faces":{"north":{"uv":[15,24,16,28],"texture":0},"east":{"uv":[0,0,0,4],"texture":0},"south":{"uv":[16,24,17,28],"texture":0},"west":{"uv":[0,0,0,4],"texture":0},"up":{"uv":[1,0,0,0],"texture":0},"down":{"uv":[1,0,0,0],"texture":0}},"uuid":"17c00ad5-1c64-8cff-31fb-3b5515460f78"},{"name":"cube","from":[6,6,10],"to":[7,10,10],"autouv":0,"color":3,"locked":false,"rotation":[22.5,0,0],"origin":[6,6,10],"faces":{"north":{"uv":[17,24,18,28],"texture":0},"east":{"uv":[0,0,0,4],"texture":0},"south":{"uv":[24,24,25,28],"texture":0},"west":{"uv":[0,0,0,4],"texture":0},"up":{"uv":[1,0,0,0],"texture":0},"down":{"uv":[1,0,0,0],"texture":0}},"uuid":"e65cc952-43af-3b6c-53ea-6a41bac7da42"},{"name":"cube","from":[6,5,9],"to":[7,8,10],"autouv":0,"color":5,"locked":false,"origin":[14,14,17],"faces":{"north":{"uv":[24,13,25,16],"texture":0},"east":{"uv":[24,16,25,19],"texture":0},"south":{"uv":[24,19,25,22],"texture":0},"west":{"uv":[25,25,26,28],"texture":0},"up":{"uv":[25,24,24,23],"texture":0},"down":{"uv":[27,5,26,6],"texture":0}},"uuid":"7ec4e1a0-2517-8438-02e2-ca8ee8e17fe1"},{"name":"cube","from":[6,7,9],"to":[7,10,10],"autouv":0,"color":5,"locked":false,"inflate":-0.125,"rotation":[22.5,0,0],"origin":[6.5,7.5,9.5],"faces":{"north":{"uv":[25,13,26,16],"texture":0},"east":{"uv":[25,16,26,19],"texture":0},"south":{"uv":[25,19,26,22],"texture":0},"west":{"uv":[22,26,23,29],"texture":0},"up":{"uv":[27,26,26,25],"texture":0},"down":{"uv":[29,27,28,28],"texture":0}},"uuid":"a095ed54-0076-e476-d650-72f51496d710"},{"name":"cube","from":[6,9,9.8125],"to":[7,12,10.8125],"autouv":0,"color":5,"locked":false,"inflate":-0.25,"rotation":[0,0,-22.5],"origin":[6.5,9.5,10.3125],"faces":{"north":{"uv":[26,26,27,29],"texture":0},"east":{"uv":[26,2,27,5],"texture":0},"south":{"uv":[26,13,27,16],"texture":0},"west":{"uv":[26,16,27,19],"texture":0},"up":{"uv":[30,29,29,28],"texture":0},"down":{"uv":[12,30,11,31],"texture":0}},"uuid":"b3a5b370-cc21-4f72-fb0b-7c51714280a1"},{"name":"cube","from":[6.875,11,9.8125],"to":[7.875,14,10.8125],"autouv":0,"color":5,"locked":false,"inflate":-0.375,"rotation":[0,0,22.5],"origin":[7.375,11.5,10.3125],"faces":{"north":{"uv":[26,19,27,22],"texture":0},"east":{"uv":[26,22,27,25],"texture":0},"south":{"uv":[0,27,1,30],"texture":0},"west":{"uv":[1,27,2,30],"texture":0},"up":{"uv":[24,31,23,30],"texture":0},"down":{"uv":[28,30,27,31],"texture":0}},"uuid":"93d1ba33-a5e3-f551-4245-407d79ad222b"},{"name":"cube","from":[6.0625,13.019030116872178,9.904329141908727],"to":[7.0625,15.019030116872178,10.904329141908727],"autouv":0,"color":5,"locked":false,"inflate":-0.4375,"rotation":[-22.5,0,0],"origin":[6.5625,13.25,10.5],"faces":{"north":{"uv":[25,23,26,25],"texture":0},"east":{"uv":[26,10,27,12],"texture":0},"south":{"uv":[29,6,30,8],"texture":0},"west":{"uv":[29,8,30,10],"texture":0},"up":{"uv":[31,31,30,30],"texture":0},"down":{"uv":[31,0,30,1],"texture":0}},"uuid":"e03be8e7-cc7c-7eee-7fbd-4f387978a10e"},{"name":"cube","from":[6,6,6],"to":[7,10,6],"autouv":0,"color":3,"locked":false,"rotation":[-22.5,0,0],"origin":[7,6,6],"faces":{"north":{"uv":[10,24,11,28],"texture":0},"east":{"uv":[0,0,0,4],"texture":0},"south":{"uv":[12,24,13,28],"texture":0},"west":{"uv":[0,0,0,4],"texture":0},"up":{"uv":[1,0,0,0],"texture":0},"down":{"uv":[1,0,0,0],"texture":0}},"uuid":"04c9e505-afe8-dd8d-e790-4c79cce181c6"},{"name":"cube","from":[9,6,6],"to":[10,10,6],"autouv":0,"color":3,"locked":false,"rotation":[-22.5,0,0],"origin":[10,6,6],"faces":{"north":{"uv":[13,24,14,28],"texture":0},"east":{"uv":[0,0,0,4],"texture":0},"south":{"uv":[14,24,15,28],"texture":0},"west":{"uv":[0,0,0,4],"texture":0},"up":{"uv":[1,0,0,0],"texture":0},"down":{"uv":[1,0,0,0],"texture":0}},"uuid":"4bb863d8-5b4a-0cbb-072a-30f98e5fec8a"},{"name":"cube","from":[10,6,9],"to":[10,10,10],"autouv":0,"color":3,"locked":false,"rotation":[0,0,-22.5],"origin":[10,6,9],"faces":{"north":{"uv":[0,0,0,4],"texture":0},"east":{"uv":[6,24,7,28],"texture":0},"south":{"uv":[0,0,0,4],"texture":0},"west":{"uv":[7,24,8,28],"texture":0},"up":{"uv":[0,1,0,0],"texture":0},"down":{"uv":[0,0,0,1],"texture":0}},"uuid":"d01e7327-23b8-326c-991f-552e90b920b3"},{"name":"cube","from":[10,6,6],"to":[10,10,7],"autouv":0,"color":3,"locked":false,"rotation":[0,0,-22.5],"origin":[10,6,6],"faces":{"north":{"uv":[0,0,0,4],"texture":0},"east":{"uv":[8,24,9,28],"texture":0},"south":{"uv":[0,0,0,4],"texture":0},"west":{"uv":[9,24,10,28],"texture":0},"up":{"uv":[0,1,0,0],"texture":0},"down":{"uv":[0,0,0,1],"texture":0}},"uuid":"1404db55-da24-2b0e-356e-1334c7e1a24e"},{"name":"cube","from":[9,5,9],"to":[10,8,10],"autouv":0,"color":5,"locked":false,"origin":[9,6,10],"faces":{"north":{"uv":[2,27,3,30],"texture":0},"east":{"uv":[11,27,12,30],"texture":0},"south":{"uv":[23,27,24,30],"texture":0},"west":{"uv":[27,27,28,30],"texture":0},"up":{"uv":[31,2,30,1],"texture":0},"down":{"uv":[31,2,30,3],"texture":0}},"uuid":"514a7dce-bf8b-8574-bb8e-225f8dfb1444"},{"name":"cube","from":[9.535964914803282,6.694477582584383,9],"to":[10.535964914803282,9.694477582584383,10],"autouv":0,"color":5,"locked":false,"inflate":-0.125,"rotation":[0,0,22.5],"origin":[9,6,10],"faces":{"north":{"uv":[27,0,28,3],"texture":0},"east":{"uv":[27,3,28,6],"texture":0},"south":{"uv":[27,6,28,9],"texture":0},"west":{"uv":[27,9,28,12],"texture":0},"up":{"uv":[31,4,30,3],"texture":0},"down":{"uv":[31,4,30,5],"texture":0}},"uuid":"d5aea6b2-db49-79bd-8e1d-99877f488b42"},{"name":"cube","from":[8.1875,8.542236647606954,7.698668220466537],"to":[9.1875,11.542236647606954,8.698668220466537],"autouv":0,"color":5,"locked":false,"inflate":-0.25,"rotation":[22.5,0,0],"origin":[9,6,10],"faces":{"north":{"uv":[27,12,28,15],"texture":0},"east":{"uv":[27,15,28,18],"texture":0},"south":{"uv":[27,18,28,21],"texture":0},"west":{"uv":[27,21,28,24],"texture":0},"up":{"uv":[31,6,30,5],"texture":0},"down":{"uv":[31,6,30,7],"texture":0}},"uuid":"156ff0e1-40c5-1a41-168d-281f7d7131da"},{"name":"cube","from":[8.1875,10.437831141675163,11.95121370269972],"to":[9.1875,13.437831141675163,12.95121370269972],"autouv":0,"color":5,"locked":false,"inflate":-0.375,"rotation":[-22.5,0,0],"origin":[9,6,10],"faces":{"north":{"uv":[27,24,28,27],"texture":0},"east":{"uv":[3,28,4,31],"texture":0},"south":{"uv":[4,28,5,31],"texture":0},"west":{"uv":[5,28,6,31],"texture":0},"up":{"uv":[31,8,30,7],"texture":0},"down":{"uv":[31,8,30,9],"texture":0}},"uuid":"dabeb1b3-bbb3-d4be-800e-c0b30539add7"},{"name":"cube","from":[5.359276207188733,12.275815011396451,9.0625],"to":[6.359276207188733,14.275815011396451,10.0625],"autouv":0,"color":5,"locked":false,"inflate":-0.4375,"rotation":[0,0,-22.5],"origin":[9,6,10],"faces":{"north":{"uv":[29,10,30,12],"texture":0},"east":{"uv":[29,12,30,14],"texture":0},"south":{"uv":[29,14,30,16],"texture":0},"west":{"uv":[29,16,30,18],"texture":0},"up":{"uv":[31,10,30,9],"texture":0},"down":{"uv":[31,10,30,11],"texture":0}},"uuid":"101d1cd9-4797-e666-89f2-3f84edad4ad6"},{"name":"cube","from":[6,5,6],"to":[7,8,7],"autouv":0,"color":5,"locked":false,"origin":[7,6,7],"faces":{"north":{"uv":[6,28,7,31],"texture":0},"east":{"uv":[7,28,8,31],"texture":0},"south":{"uv":[8,28,9,31],"texture":0},"west":{"uv":[9,28,10,31],"texture":0},"up":{"uv":[31,12,30,11],"texture":0},"down":{"uv":[31,12,30,13],"texture":0}},"uuid":"5dda715c-1827-1c59-1f55-9e46a2044c99"},{"name":"cube","from":[5.464035085196718,6.694477582584383,6],"to":[6.464035085196718,9.694477582584383,7],"autouv":0,"color":5,"locked":false,"inflate":-0.125,"rotation":[0,0,-22.5],"origin":[7,6,7],"faces":{"north":{"uv":[10,28,11,31],"texture":0},"east":{"uv":[12,28,13,31],"texture":0},"south":{"uv":[13,28,14,31],"texture":0},"west":{"uv":[14,28,15,31],"texture":0},"up":{"uv":[31,14,30,13],"texture":0},"down":{"uv":[31,14,30,15],"texture":0}},"uuid":"91b8c459-160e-3243-c197-0869039165a2"},{"name":"cube","from":[6.8125,8.542236647606954,4.698668220466537],"to":[7.8125,11.542236647606954,5.698668220466537],"autouv":0,"color":5,"locked":false,"inflate":-0.25,"rotation":[22.5,0,0],"origin":[7,6,7],"faces":{"north":{"uv":[15,28,16,31],"texture":0},"east":{"uv":[16,28,17,31],"texture":0},"south":{"uv":[17,28,18,31],"texture":0},"west":{"uv":[18,28,19,31],"texture":0},"up":{"uv":[31,16,30,15],"texture":0},"down":{"uv":[31,16,30,17],"texture":0}},"uuid":"d562291d-b13e-d6bd-a6a7-ee89fba3d257"},{"name":"cube","from":[6.8125,10.437831141675163,8.95121370269972],"to":[7.8125,13.437831141675163,9.95121370269972],"autouv":0,"color":5,"locked":false,"inflate":-0.375,"rotation":[-22.5,0,0],"origin":[7,6,7],"faces":{"north":{"uv":[19,28,20,31],"texture":0},"east":{"uv":[20,28,21,31],"texture":0},"south":{"uv":[21,28,22,31],"texture":0},"west":{"uv":[24,28,25,31],"texture":0},"up":{"uv":[31,18,30,17],"texture":0},"down":{"uv":[31,18,30,19],"texture":0}},"uuid":"64ef1090-a021-6e9d-c9fe-4522581a668b"},{"name":"cube","from":[9.640723792811267,12.275815011396451,6.0625],"to":[10.640723792811267,14.275815011396451,7.0625],"autouv":0,"color":5,"locked":false,"inflate":-0.4375,"rotation":[0,0,22.5],"origin":[7,6,7],"faces":{"north":{"uv":[29,18,30,20],"texture":0},"east":{"uv":[29,20,30,22],"texture":0},"south":{"uv":[29,22,30,24],"texture":0},"west":{"uv":[29,24,30,26],"texture":0},"up":{"uv":[31,20,30,19],"texture":0},"down":{"uv":[31,20,30,21],"texture":0}},"uuid":"2484fafa-28fd-a50d-f23d-e3d0d8330ec1"},{"name":"cube","from":[9,5,6],"to":[10,8,7],"autouv":0,"color":5,"locked":false,"origin":[9,6,6],"faces":{"north":{"uv":[25,28,26,31],"texture":0},"east":{"uv":[28,28,29,31],"texture":0},"south":{"uv":[28,0,29,3],"texture":0},"west":{"uv":[28,3,29,6],"texture":0},"up":{"uv":[31,22,30,21],"texture":0},"down":{"uv":[31,22,30,23],"texture":0}},"uuid":"52f16131-2063-699a-2ff9-fc467c912cc2"},{"name":"cube","from":[9,6.694477582584383,6.535964914803282],"to":[10,9.694477582584383,7.535964914803282],"autouv":0,"color":5,"locked":false,"inflate":-0.125,"rotation":[-22.5,0,0],"origin":[9,6,6],"faces":{"north":{"uv":[28,6,29,9],"texture":0},"east":{"uv":[28,9,29,12],"texture":0},"south":{"uv":[28,12,29,15],"texture":0},"west":{"uv":[28,15,29,18],"texture":0},"up":{"uv":[31,24,30,23],"texture":0},"down":{"uv":[31,24,30,25],"texture":0}},"uuid":"0bc52833-aaa9-80d1-1e33-190ae3177700"},{"name":"cube","from":[10.301331779533463,8.542236647606954,5.1875],"to":[11.301331779533463,11.542236647606954,6.1875],"autouv":0,"color":5,"locked":false,"inflate":-0.25,"rotation":[0,0,22.5],"origin":[9,6,6],"faces":{"north":{"uv":[28,18,29,21],"texture":0},"east":{"uv":[28,21,29,24],"texture":0},"south":{"uv":[28,24,29,27],"texture":0},"west":{"uv":[22,29,23,32],"texture":0},"up":{"uv":[31,26,30,25],"texture":0},"down":{"uv":[31,26,30,27],"texture":0}},"uuid":"a2b81b16-7fdf-83a1-4813-cb88f05e1b62"},{"name":"cube","from":[6.04878629730028,10.437831141675163,5.1875],"to":[7.04878629730028,13.437831141675163,6.1875],"autouv":0,"color":5,"locked":false,"inflate":-0.375,"rotation":[0,0,-22.5],"origin":[9,6,6],"faces":{"north":{"uv":[26,29,27,32],"texture":0},"east":{"uv":[29,29,30,32],"texture":0},"south":{"uv":[29,0,30,3],"texture":0},"west":{"uv":[29,3,30,6],"texture":0},"up":{"uv":[31,28,30,27],"texture":0},"down":{"uv":[31,28,30,29],"texture":0}},"uuid":"dc2919c4-d6de-3803-9698-b4adb7d5b393"},{"name":"cube","from":[8.9375,12.275815011396451,2.359276207188733],"to":[9.9375,14.275815011396451,3.359276207188733],"autouv":0,"color":5,"locked":false,"inflate":-0.4375,"rotation":[22.5,0,0],"origin":[9,6,6],"faces":{"north":{"uv":[29,26,30,28],"texture":0},"east":{"uv":[0,30,1,32],"texture":0},"south":{"uv":[1,30,2,32],"texture":0},"west":{"uv":[2,30,3,32],"texture":0},"up":{"uv":[31,30,30,29],"texture":0},"down":{"uv":[4,31,3,32],"texture":0}},"uuid":"b1ffeea7-1def-d124-81b4-3be0077a4a2a"}],"outliner":[{"name":"body","origin":[8,8,8],"uuid":"cca4b678-0111-b423-6005-352f5528fe13","export":true,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["d68afced-893f-b744-c18f-170ee0e1ec99"]},{"name":"shell1","origin":[16,8,16],"uuid":"49325fff-300f-b554-f654-30c36f0d6429","export":true,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["9e929490-f5c3-2d53-1ff5-a441a7bda83e",{"name":"group","origin":[16,8,16],"uuid":"a5a73669-c93b-0a38-d43d-c1b026ef67db","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["ac9422af-2b63-b016-1662-a87c99a6c633"]}]},{"name":"shell2","origin":[16,8,16],"uuid":"e026df91-1bb3-23af-1d67-742f88255c84","export":true,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["0a219ab6-e69a-0a9b-834b-4b93280c0959",{"name":"group","origin":[8,4.695518130045148,3.5307337294603585],"uuid":"897489fe-6bfc-bc06-7584-d6f61a5529b7","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["e3dea036-d71b-4244-7d4a-c37e17055339"]}]},{"name":"shell3","origin":[16,8,16],"uuid":"1e20cdcd-2803-c09a-67dd-cff43068fbc0","export":true,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["e9990229-654f-b0b3-dd71-edf404c1af7a",{"name":"group","origin":[16,8,16],"uuid":"459b7171-2e78-4fe7-e16d-42d7e4240473","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["2b200c54-35e5-5905-515e-6726457bf099"]}]},{"name":"shell4","origin":[16,8,16],"uuid":"925a1817-7568-39ef-fc9c-305814384064","export":true,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["e0db21d3-4896-753c-4a0d-60784a9e9c72",{"name":"group","origin":[16,8,16],"uuid":"10cf94b6-9c38-bcb1-7fbd-f5432ade3fac","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["59150f38-930e-4233-75fb-38a9e18a9e57"]}]},{"name":"leaf1","origin":[8,8,8],"uuid":"8ecdbdb7-8885-9612-5d2d-5f3b8961241a","export":true,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["3af7bee9-469f-381d-eb7b-47badfdefe6d","5c92057b-c324-fae3-0dad-f9928a732e43"]},{"name":"leaf2","origin":[8,8,8],"uuid":"eaaff567-5ad6-f918-13bf-c047055ceefe","export":true,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["d01e7327-23b8-326c-991f-552e90b920b3","1404db55-da24-2b0e-356e-1334c7e1a24e"]},{"name":"leaf3","origin":[8,8,8],"uuid":"51269a0c-2716-0ba7-55c3-ff362e6de43f","export":true,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["04c9e505-afe8-dd8d-e790-4c79cce181c6","4bb863d8-5b4a-0cbb-072a-30f98e5fec8a"]},{"name":"leaf4","origin":[8,8,8],"uuid":"af1d1ba2-d33e-fad7-4c3b-56812c0548a9","export":true,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["17c00ad5-1c64-8cff-31fb-3b5515460f78","e65cc952-43af-3b6c-53ea-6a41bac7da42"]},{"name":"tendril1","origin":[8,8,8],"uuid":"c4df370a-5ecd-1571-927c-dfb1f62a8bf7","export":true,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["7ec4e1a0-2517-8438-02e2-ca8ee8e17fe1",{"name":"group","origin":[8,8,8],"uuid":"acd1d7d0-468d-66a4-19de-400f2cb49075","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["a095ed54-0076-e476-d650-72f51496d710",{"name":"group","origin":[14,15,17],"uuid":"7f4d227b-340a-ce5d-b23d-43065a24a515","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["b3a5b370-cc21-4f72-fb0b-7c51714280a1",{"name":"group","origin":[14,15,17],"uuid":"45bca06c-f80f-9823-c359-a32de3563959","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["93d1ba33-a5e3-f551-4245-407d79ad222b",{"name":"group","origin":[14,15,17],"uuid":"0c566ac1-4cb4-c64d-8226-eb94951b8820","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["e03be8e7-cc7c-7eee-7fbd-4f387978a10e"]}]}]}]}]},{"name":"tendril2","origin":[8,8,8],"uuid":"b66b699d-7ec8-0fd9-51cb-ddce91336188","export":true,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["514a7dce-bf8b-8574-bb8e-225f8dfb1444",{"name":"group","origin":[8,8,8],"uuid":"9be69316-2534-bef8-ca4a-425710fd0c93","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["d5aea6b2-db49-79bd-8e1d-99877f488b42",{"name":"group","origin":[14,15,17],"uuid":"7b2a0b67-2a68-0b16-f220-22f079d17d29","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["156ff0e1-40c5-1a41-168d-281f7d7131da",{"name":"group","origin":[14,15,17],"uuid":"02297e95-85d9-bb8e-4ff4-55e632eb2aed","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["dabeb1b3-bbb3-d4be-800e-c0b30539add7",{"name":"group","origin":[14,15,17],"uuid":"259a2b6d-a7d7-c9cb-0454-9d70755347cc","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["101d1cd9-4797-e666-89f2-3f84edad4ad6"]}]}]}]}]},{"name":"tendril3","origin":[8,8,8],"uuid":"7be7de41-a0ff-ebd7-39d3-600fc7039811","export":true,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["5dda715c-1827-1c59-1f55-9e46a2044c99",{"name":"group","origin":[8,8,8],"uuid":"e93d7796-1886-837e-e64e-a468bb308db0","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["91b8c459-160e-3243-c197-0869039165a2",{"name":"group","origin":[14,15,17],"uuid":"382c955c-aec2-f610-73cf-edc46dcdf6d3","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["d562291d-b13e-d6bd-a6a7-ee89fba3d257",{"name":"group","origin":[14,15,17],"uuid":"7ebd2d1f-c6b5-fbb1-a037-d2f2b86b7f30","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["64ef1090-a021-6e9d-c9fe-4522581a668b",{"name":"group","origin":[14,15,17],"uuid":"c60918ed-f474-f57b-117f-d5a4a1e18a6d","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["2484fafa-28fd-a50d-f23d-e3d0d8330ec1"]}]}]}]}]},{"name":"tendril4","origin":[8,8,8],"uuid":"a6d863a0-eb3d-a87e-aaf0-2d26799300b2","export":true,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["52f16131-2063-699a-2ff9-fc467c912cc2",{"name":"group","origin":[8,8,8],"uuid":"dd24899f-aa48-ad36-4e9f-99d1c5f639aa","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["0bc52833-aaa9-80d1-1e33-190ae3177700",{"name":"group","origin":[14,15,17],"uuid":"f0e0a727-7198-0627-0746-838b3c98530f","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["a2b81b16-7fdf-83a1-4813-cb88f05e1b62",{"name":"group","origin":[14,15,17],"uuid":"0b544e37-0c51-d6d8-acd8-dbebeb40c830","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["dc2919c4-d6de-3803-9698-b4adb7d5b393",{"name":"group","origin":[14,15,17],"uuid":"ee47465f-c477-e07a-3730-c4293ee11fc6","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["b1ffeea7-1def-d124-81b4-3be0077a4a2a"]}]}]}]}]}],"textures":[{"path":"C:\\Users\\Hannah\\Desktop\\Work for Eliot\\VineBudTexture.png","name":"VineBudTexture.png","folder":"Work for Eliot","namespace":"","id":"0","particle":true,"visible":true,"mode":"bitmap","saved":false,"uuid":"0a2840e9-ef37-6ca2-2929-5349c3cdf613","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAE9ElEQVRYR7WXf2wUVRDH54Te9a73q/RSFFvaKxcatDEtNVipUgMGaYEYIqmaFOIPJAgxEQ2pGuMfJsQQURslQRNijMRADCipBtP+oyZimyiWmJZScuXaXgFbrtzP/rgrZc33XeZld7vHtQ3MP+/t7Nt5n503Mztratq/Q0lOJslitRCE5+EbYbLZbbP0a554jKyWXJpMTon1PHfmOcmcYxa61HSKYuMxMVdLx1fXaSo1Tr7SCvLkL6PmzxpMps1NWxRsNJGYEGuzzdeuryWHy0H958aosMIs5vFonLwlXgEDAVxgMEAPrVylAfj+w78kgH+gm378rSUNgFWxcJrYme/UPKTXV9WspviVRbSitoDcod/pfF8FOcpmqLpytea58xf+IZ/PJ7wCsLaWforGbhoDYBPeONt8S+Vtupr7KFlt1vTbTkzSg1N/07S3QQOQEzhL99fsFt7AkXQeu6EBGL4WoBPtB9Me4LdkC2oYtVXon9m2yTAG9OddvLRIo9J7QAI8uXmdOIK5yqbn6g1jALFwJ/n1Cz/lmvPkEcQTUfry1NsmU6YsgDGj7Chd4Z1TDARHhul4z3e0b83rMg4QhJDKh2spEOxNA8w3CzLFgKtq56wsODPcSu+tb5Zx0PZpnwQIha/Rx9/sWlgWGLmaIx73EHR+v59aB3+mtza8aegBDUC2yOc0RRAiDY2k8IHCWVnQcmmA3t3+jiEAFstCNJ8smCuAHnLyjzK60HNOHoEEmG8W1NU/NScP6NPw8mmzBqCzqz1dCV8+8KoyPriIyBlNG465KK9khi7920uJaFyzmd3loA1bnzYEQCXkoqP+DgBEX4yQBRKgsXG3QlMWMtmmhWFlIocoN0m9Qx3iOjIWEaO7wC3GZ5u2ZQTADWwWioTkGs5/l3OJ0KEcAwDHISph467nFVMin6xFKVpsXkzxK/eRYg9Tb/dFuTlbA8Q9A3CU3aZbqVs0OWxeMIDREWTygCxEd+sIkIb8OWaPASgrwN0KQsPAIKKeUzHxDdDHgCxEn58+ohh1ODBopB+9PpppL0O9HgCLvMWrSAIc/Pojhbua0e6UaDTQ4UCM9Pj+z0cYoGiZl/AFZACMohK+f+QDBR1OdXk3RTx1otVChwMx0qtLLveB8BQ6ICPJCnD0cINi1OHAWLbOx+P2yMCbL4AsRBwDanpEb6azVntADYDvP57BfR7VVbDnZEpzBBoA3lxfv2H0TqI+AlS/wYEhKildLkb0jIghpGFN1UYRdOoYkJUQQcibfPvncXIud1FsKB0s9mIHJYJxOe5cu4N+CJ6ROqzh+3uqX9MAiCyyWQk2X3EcFgAirhJRkQUSAEHIACc6TtKS8gK62TcmVO6V+RS5HJbji4+/QL+MtUkd1vB9PQA6ZcQQbD5ytUHUAs4EAMhKiCBkgEOdfeT0uigWSHuA5zw215TT0ZH/xH3oIDx/o26vxgP9rTO0bmMXwWZVaCst9RSTw+6SHpAAB146JgDwp9Ll+YksbgslI0lhnOc8wtBFX7u4Dx2E5/vq92qCEAD4DYNNBhgJBYUn8DWUhUgNgH82FgCphVtqjCxcXvkab8iCvp//A2ELHgAAhL0hmtJ7BYBgw4Z4KQDwCADNz+mh/WdlDHCk8pHoPYA3RkMxFw8AgD3CAGw3IwAWoD5rfL/Aiz3bP1Hw48GPw9NwOa7V8/8BFyXVTkX9oxsAAAAASUVORK5CYII="}],"display":{"thirdperson_righthand":{"translation":[0,0.5,-1.5],"scale":[0.5,0.5,0.5]},"thirdperson_lefthand":{"translation":[0,0,-1.5],"scale":[0.5,0.5,0.5]},"firstperson_righthand":{"scale":[0.5,0.5,0.5]},"firstperson_lefthand":{"scale":[0.5,0.5,0.5]},"ground":{"translation":[0,0.5,0],"scale":[0.5,0.5,0.5]},"gui":{"rotation":[0,45,0],"translation":[0,0.5,0],"scale":[0.9,0.9,0.9]},"head":{"translation":[0,14.5,0]}},"geckoSettings":{"modSDK":"Forge 1.12 - 1.16","entityType":"Entity","javaPackage":"com.example.mod","animFileNamespace":"MODID","animFilePath":"animations/ANIMATIONFILE.json"}} \ No newline at end of file diff --git a/blockbench/surgebinding/blocks/vinebud/VineBud2.bbmodel b/blockbench/surgebinding/blocks/vinebud/VineBud2.bbmodel new file mode 100644 index 000000000..030338f5e --- /dev/null +++ b/blockbench/surgebinding/blocks/vinebud/VineBud2.bbmodel @@ -0,0 +1 @@ +{"meta":{"format_version":"3.6","model_format":"java_block","box_uv":false},"name":"vinebud2","parent":"","ambientocclusion":true,"front_gui_light":false,"visible_box":[1,1,0],"resolution":{"width":32,"height":32},"elements":[{"name":"cube","from":[5,0,5],"to":[11,6,11],"autouv":0,"color":4,"locked":false,"origin":[16,8,16],"faces":{"north":{"uv":[0,0,6,6],"texture":0},"east":{"uv":[0,6,6,12],"texture":0},"south":{"uv":[6,6,12,12],"texture":0},"west":{"uv":[6,0,12,6],"texture":0},"up":{"uv":[6,18,0,12],"texture":0},"down":{"uv":[12,12,6,18],"texture":0}},"uuid":"d68afced-893f-b744-c18f-170ee0e1ec99"},{"name":"cube","from":[5,2,11],"to":[11,6,12],"autouv":0,"color":5,"locked":false,"rotation":[22.5,0,0],"origin":[8,2,11],"faces":{"north":{"uv":[12,12,18,16],"texture":0},"east":{"uv":[22,22,23,26],"texture":0},"south":{"uv":[12,0,18,4],"texture":0},"west":{"uv":[22,0,23,4],"texture":0},"up":{"uv":[24,17,18,16],"texture":0},"down":{"uv":[24,17,18,18],"texture":0}},"uuid":"9e929490-f5c3-2d53-1ff5-a441a7bda83e"},{"name":"cube","from":[6,5.695518130045147,9.530733729460358],"to":[10,6.695518130045147,12.530733729460358],"autouv":0,"color":5,"locked":false,"rotation":[45,0,0],"origin":[8,5.695518130045147,12.530733729460358],"faces":{"north":{"uv":[22,4,26,5],"texture":0},"east":{"uv":[23,2,26,3],"texture":0},"south":{"uv":[22,5,26,6],"texture":0},"west":{"uv":[23,3,26,4],"texture":0},"up":{"uv":[22,3,18,0],"texture":0},"down":{"uv":[22,3,18,6],"texture":0}},"uuid":"ac9422af-2b63-b016-1662-a87c99a6c633"},{"name":"cube","from":[5,2,4],"to":[11,6,5],"autouv":0,"color":5,"locked":false,"rotation":[-22.5,0,0],"origin":[8,2,5],"faces":{"north":{"uv":[12,4,18,8],"texture":0},"east":{"uv":[22,6,23,10],"texture":0},"south":{"uv":[12,8,18,12],"texture":0},"west":{"uv":[0,23,1,27],"texture":0},"up":{"uv":[6,23,0,22],"texture":0},"down":{"uv":[12,22,6,23],"texture":0}},"uuid":"0a219ab6-e69a-0a9b-834b-4b93280c0959"},{"name":"cube","from":[6,5.695518130045147,3.4692662705396415],"to":[10,6.695518130045147,6.4692662705396415],"autouv":0,"color":5,"locked":false,"rotation":[-45,0,0],"origin":[8,5.695518130045147,3.4692662705396415],"faces":{"north":{"uv":[22,10,26,11],"texture":0},"east":{"uv":[23,22,26,23],"texture":0},"south":{"uv":[22,11,26,12],"texture":0},"west":{"uv":[24,6,27,7],"texture":0},"up":{"uv":[22,9,18,6],"texture":0},"down":{"uv":[22,9,18,12],"texture":0}},"uuid":"e3dea036-d71b-4244-7d4a-c37e17055339"},{"name":"cube","from":[4,2,5],"to":[5,6,11],"autouv":0,"color":5,"locked":false,"rotation":[0,0,22.5],"origin":[5,2,8],"faces":{"north":{"uv":[1,23,2,27],"texture":0},"east":{"uv":[12,16,18,20],"texture":0},"south":{"uv":[2,23,3,27],"texture":0},"west":{"uv":[0,18,6,22],"texture":0},"up":{"uv":[19,28,18,22],"texture":0},"down":{"uv":[20,22,19,28],"texture":0}},"uuid":"e9990229-654f-b0b3-dd71-edf404c1af7a"},{"name":"cube","from":[3.4692662705396415,5.695518130045147,6],"to":[6.4692662705396415,6.695518130045147,10],"autouv":0,"color":5,"locked":false,"rotation":[0,0,45],"origin":[3.4692662705396415,5.695518130045147,8],"faces":{"north":{"uv":[24,7,27,8],"texture":0},"east":{"uv":[3,23,7,24],"texture":0},"south":{"uv":[24,8,27,9],"texture":0},"west":{"uv":[7,23,11,24],"texture":0},"up":{"uv":[21,16,18,12],"texture":0},"down":{"uv":[15,20,12,24],"texture":0}},"uuid":"2b200c54-35e5-5905-515e-6726457bf099"},{"name":"cube","from":[11,2,5],"to":[12,6,11],"autouv":0,"color":5,"locked":false,"rotation":[0,0,-22.5],"origin":[11,2,8],"faces":{"north":{"uv":[11,23,12,27],"texture":0},"east":{"uv":[6,18,12,22],"texture":0},"south":{"uv":[23,23,24,27],"texture":0},"west":{"uv":[18,18,24,22],"texture":0},"up":{"uv":[21,28,20,22],"texture":0},"down":{"uv":[22,22,21,28],"texture":0}},"uuid":"e0db21d3-4896-753c-4a0d-60784a9e9c72"},{"name":"cube","from":[9.530733729460358,5.695518130045147,6],"to":[12.530733729460358,6.695518130045147,10],"autouv":0,"color":5,"locked":false,"rotation":[0,0,-45],"origin":[12.530733729460358,5.695518130045147,8],"faces":{"north":{"uv":[24,9,27,10],"texture":0},"east":{"uv":[23,0,27,1],"texture":0},"south":{"uv":[24,12,27,13],"texture":0},"west":{"uv":[23,1,27,2],"texture":0},"up":{"uv":[18,24,15,20],"texture":0},"down":{"uv":[24,12,21,16],"texture":0}},"uuid":"59150f38-930e-4233-75fb-38a9e18a9e57"},{"name":"cube","from":[6,3,9],"to":[6,7,10],"autouv":0,"color":3,"locked":false,"origin":[6,3,9],"faces":{"north":{"uv":[0,0,0,4],"texture":0},"east":{"uv":[23,6,24,10],"texture":0},"south":{"uv":[0,0,0,4],"texture":0},"west":{"uv":[3,24,4,28],"texture":0},"up":{"uv":[0,1,0,0],"texture":0},"down":{"uv":[0,0,0,1],"texture":0}},"uuid":"3af7bee9-469f-381d-eb7b-47badfdefe6d"},{"name":"cube","from":[6,5,6],"to":[6,9,7],"autouv":0,"color":3,"locked":false,"visibility":false,"origin":[6,5,6],"faces":{"north":{"uv":[0,0,0,4],"texture":0},"east":{"uv":[4,24,5,28],"texture":0},"south":{"uv":[0,0,0,4],"texture":0},"west":{"uv":[5,24,6,28],"texture":0},"up":{"uv":[0,1,0,0],"texture":0},"down":{"uv":[0,0,0,1],"texture":0}},"uuid":"5c92057b-c324-fae3-0dad-f9928a732e43"},{"name":"cube","from":[9,5,10],"to":[10,9,10],"autouv":0,"color":3,"locked":false,"origin":[9,5,10],"faces":{"north":{"uv":[15,24,16,28],"texture":0},"east":{"uv":[0,0,0,4],"texture":0},"south":{"uv":[16,24,17,28],"texture":0},"west":{"uv":[0,0,0,4],"texture":0},"up":{"uv":[1,0,0,0],"texture":0},"down":{"uv":[1,0,0,0],"texture":0}},"uuid":"17c00ad5-1c64-8cff-31fb-3b5515460f78"},{"name":"cube","from":[6,5,10],"to":[7,9,10],"autouv":0,"color":3,"locked":false,"visibility":false,"origin":[6,5,10],"faces":{"north":{"uv":[17,24,18,28],"texture":0},"east":{"uv":[0,0,0,4],"texture":0},"south":{"uv":[24,24,25,28],"texture":0},"west":{"uv":[0,0,0,4],"texture":0},"up":{"uv":[1,0,0,0],"texture":0},"down":{"uv":[1,0,0,0],"texture":0}},"uuid":"e65cc952-43af-3b6c-53ea-6a41bac7da42"},{"name":"cube","from":[6,5,9],"to":[7,8,10],"autouv":0,"color":5,"locked":false,"inflate":-0.125,"rotation":[22.5,0,0],"origin":[6.5,5.5,9.5],"faces":{"north":{"uv":[25,13,26,16],"texture":0},"east":{"uv":[25,16,26,19],"texture":0},"south":{"uv":[25,19,26,22],"texture":0},"west":{"uv":[22,26,23,29],"texture":0},"up":{"uv":[27,26,26,25],"texture":0},"down":{"uv":[29,27,28,28],"texture":0}},"uuid":"a095ed54-0076-e476-d650-72f51496d710"},{"name":"cube","from":[6,7,9.8125],"to":[7,10,10.8125],"autouv":0,"color":5,"locked":false,"inflate":-0.25,"rotation":[0,0,-22.5],"origin":[6.5,7.5,10.3125],"faces":{"north":{"uv":[26,26,27,29],"texture":0},"east":{"uv":[26,2,27,5],"texture":0},"south":{"uv":[26,13,27,16],"texture":0},"west":{"uv":[26,16,27,19],"texture":0},"up":{"uv":[30,29,29,28],"texture":0},"down":{"uv":[12,30,11,31],"texture":0}},"uuid":"b3a5b370-cc21-4f72-fb0b-7c51714280a1"},{"name":"cube","from":[6.875,9,9.8125],"to":[7.875,12,10.8125],"autouv":0,"color":5,"locked":false,"inflate":-0.375,"rotation":[0,0,22.5],"origin":[7.375,9.5,10.3125],"faces":{"north":{"uv":[26,19,27,22],"texture":0},"east":{"uv":[26,22,27,25],"texture":0},"south":{"uv":[0,27,1,30],"texture":0},"west":{"uv":[1,27,2,30],"texture":0},"up":{"uv":[24,31,23,30],"texture":0},"down":{"uv":[28,30,27,31],"texture":0}},"uuid":"93d1ba33-a5e3-f551-4245-407d79ad222b"},{"name":"cube","from":[6.0625,11.019030116872178,9.904329141908727],"to":[7.0625,13.019030116872178,10.904329141908727],"autouv":0,"color":5,"locked":false,"inflate":-0.4375,"rotation":[-22.5,0,0],"origin":[6.5625,11.25,10.5],"faces":{"north":{"uv":[25,23,26,25],"texture":0},"east":{"uv":[26,10,27,12],"texture":0},"south":{"uv":[29,6,30,8],"texture":0},"west":{"uv":[29,8,30,10],"texture":0},"up":{"uv":[31,31,30,30],"texture":0},"down":{"uv":[31,0,30,1],"texture":0}},"uuid":"e03be8e7-cc7c-7eee-7fbd-4f387978a10e"},{"name":"cube","from":[6,4,6],"to":[7,8,6],"autouv":0,"color":3,"locked":false,"origin":[7,4,6],"faces":{"north":{"uv":[10,24,11,28],"texture":0},"east":{"uv":[0,0,0,4],"texture":0},"south":{"uv":[12,24,13,28],"texture":0},"west":{"uv":[0,0,0,4],"texture":0},"up":{"uv":[1,0,0,0],"texture":0},"down":{"uv":[1,0,0,0],"texture":0}},"uuid":"04c9e505-afe8-dd8d-e790-4c79cce181c6"},{"name":"cube","from":[9,5,6],"to":[10,9,6],"autouv":0,"color":3,"locked":false,"visibility":false,"origin":[10,5,6],"faces":{"north":{"uv":[13,24,14,28],"texture":0},"east":{"uv":[0,0,0,4],"texture":0},"south":{"uv":[14,24,15,28],"texture":0},"west":{"uv":[0,0,0,4],"texture":0},"up":{"uv":[1,0,0,0],"texture":0},"down":{"uv":[1,0,0,0],"texture":0}},"uuid":"4bb863d8-5b4a-0cbb-072a-30f98e5fec8a"},{"name":"cube","from":[10,5,9],"to":[10,9,10],"autouv":0,"color":3,"locked":false,"visibility":false,"origin":[10,5,9],"faces":{"north":{"uv":[0,0,0,4],"texture":0},"east":{"uv":[6,24,7,28],"texture":0},"south":{"uv":[0,0,0,4],"texture":0},"west":{"uv":[7,24,8,28],"texture":0},"up":{"uv":[0,1,0,0],"texture":0},"down":{"uv":[0,0,0,1],"texture":0}},"uuid":"d01e7327-23b8-326c-991f-552e90b920b3"},{"name":"cube","from":[10,6,6],"to":[10,10,7],"autouv":0,"color":3,"locked":false,"origin":[10,6,6],"faces":{"north":{"uv":[0,0,0,4],"texture":0},"east":{"uv":[8,24,9,28],"texture":0},"south":{"uv":[0,0,0,4],"texture":0},"west":{"uv":[9,24,10,28],"texture":0},"up":{"uv":[0,1,0,0],"texture":0},"down":{"uv":[0,0,0,1],"texture":0}},"uuid":"1404db55-da24-2b0e-356e-1334c7e1a24e"},{"name":"cube","from":[9.535964914803282,4.694477582584383,9],"to":[10.535964914803282,7.694477582584383,10],"autouv":0,"color":5,"locked":false,"inflate":-0.125,"rotation":[0,0,22.5],"origin":[9,4,10],"faces":{"north":{"uv":[27,0,28,3],"texture":0},"east":{"uv":[27,3,28,6],"texture":0},"south":{"uv":[27,6,28,9],"texture":0},"west":{"uv":[27,9,28,12],"texture":0},"up":{"uv":[31,4,30,3],"texture":0},"down":{"uv":[31,4,30,5],"texture":0}},"uuid":"d5aea6b2-db49-79bd-8e1d-99877f488b42"},{"name":"cube","from":[8.1875,6.542236647606954,7.698668220466537],"to":[9.1875,9.542236647606954,8.698668220466537],"autouv":0,"color":5,"locked":false,"inflate":-0.25,"rotation":[22.5,0,0],"origin":[9,4,10],"faces":{"north":{"uv":[27,12,28,15],"texture":0},"east":{"uv":[27,15,28,18],"texture":0},"south":{"uv":[27,18,28,21],"texture":0},"west":{"uv":[27,21,28,24],"texture":0},"up":{"uv":[31,6,30,5],"texture":0},"down":{"uv":[31,6,30,7],"texture":0}},"uuid":"156ff0e1-40c5-1a41-168d-281f7d7131da"},{"name":"cube","from":[8.1875,8.437831141675163,11.95121370269972],"to":[9.1875,11.437831141675163,12.95121370269972],"autouv":0,"color":5,"locked":false,"inflate":-0.375,"rotation":[-22.5,0,0],"origin":[9,4,10],"faces":{"north":{"uv":[27,24,28,27],"texture":0},"east":{"uv":[3,28,4,31],"texture":0},"south":{"uv":[4,28,5,31],"texture":0},"west":{"uv":[5,28,6,31],"texture":0},"up":{"uv":[31,8,30,7],"texture":0},"down":{"uv":[31,8,30,9],"texture":0}},"uuid":"dabeb1b3-bbb3-d4be-800e-c0b30539add7"},{"name":"cube","from":[5.359276207188733,10.275815011396451,9.0625],"to":[6.359276207188733,12.275815011396451,10.0625],"autouv":0,"color":5,"locked":false,"inflate":-0.4375,"rotation":[0,0,-22.5],"origin":[9,4,10],"faces":{"north":{"uv":[29,10,30,12],"texture":0},"east":{"uv":[29,12,30,14],"texture":0},"south":{"uv":[29,14,30,16],"texture":0},"west":{"uv":[29,16,30,18],"texture":0},"up":{"uv":[31,10,30,9],"texture":0},"down":{"uv":[31,10,30,11],"texture":0}},"uuid":"101d1cd9-4797-e666-89f2-3f84edad4ad6"},{"name":"cube","from":[5.464035085196718,4.694477582584383,6],"to":[6.464035085196718,7.694477582584383,7],"autouv":0,"color":5,"locked":false,"inflate":-0.125,"rotation":[0,0,-22.5],"origin":[7,4,7],"faces":{"north":{"uv":[10,28,11,31],"texture":0},"east":{"uv":[12,28,13,31],"texture":0},"south":{"uv":[13,28,14,31],"texture":0},"west":{"uv":[14,28,15,31],"texture":0},"up":{"uv":[31,14,30,13],"texture":0},"down":{"uv":[31,14,30,15],"texture":0}},"uuid":"91b8c459-160e-3243-c197-0869039165a2"},{"name":"cube","from":[6.8125,6.542236647606954,4.698668220466537],"to":[7.8125,9.542236647606954,5.698668220466537],"autouv":0,"color":5,"locked":false,"inflate":-0.25,"rotation":[22.5,0,0],"origin":[7,4,7],"faces":{"north":{"uv":[15,28,16,31],"texture":0},"east":{"uv":[16,28,17,31],"texture":0},"south":{"uv":[17,28,18,31],"texture":0},"west":{"uv":[18,28,19,31],"texture":0},"up":{"uv":[31,16,30,15],"texture":0},"down":{"uv":[31,16,30,17],"texture":0}},"uuid":"d562291d-b13e-d6bd-a6a7-ee89fba3d257"},{"name":"cube","from":[6.8125,8.437831141675163,8.95121370269972],"to":[7.8125,11.437831141675163,9.95121370269972],"autouv":0,"color":5,"locked":false,"inflate":-0.375,"rotation":[-22.5,0,0],"origin":[7,4,7],"faces":{"north":{"uv":[19,28,20,31],"texture":0},"east":{"uv":[20,28,21,31],"texture":0},"south":{"uv":[21,28,22,31],"texture":0},"west":{"uv":[24,28,25,31],"texture":0},"up":{"uv":[31,18,30,17],"texture":0},"down":{"uv":[31,18,30,19],"texture":0}},"uuid":"64ef1090-a021-6e9d-c9fe-4522581a668b"},{"name":"cube","from":[9.640723792811267,10.275815011396451,6.0625],"to":[10.640723792811267,12.275815011396451,7.0625],"autouv":0,"color":5,"locked":false,"inflate":-0.4375,"rotation":[0,0,22.5],"origin":[7,4,7],"faces":{"north":{"uv":[29,18,30,20],"texture":0},"east":{"uv":[29,20,30,22],"texture":0},"south":{"uv":[29,22,30,24],"texture":0},"west":{"uv":[29,24,30,26],"texture":0},"up":{"uv":[31,20,30,19],"texture":0},"down":{"uv":[31,20,30,21],"texture":0}},"uuid":"2484fafa-28fd-a50d-f23d-e3d0d8330ec1"},{"name":"cube","from":[9,4.694477582584383,6.535964914803282],"to":[10,7.694477582584383,7.535964914803282],"autouv":0,"color":5,"locked":false,"inflate":-0.125,"rotation":[-22.5,0,0],"origin":[9,4,6],"faces":{"north":{"uv":[28,6,29,9],"texture":0},"east":{"uv":[28,9,29,12],"texture":0},"south":{"uv":[28,12,29,15],"texture":0},"west":{"uv":[28,15,29,18],"texture":0},"up":{"uv":[31,24,30,23],"texture":0},"down":{"uv":[31,24,30,25],"texture":0}},"uuid":"0bc52833-aaa9-80d1-1e33-190ae3177700"},{"name":"cube","from":[10.301331779533463,6.542236647606954,5.1875],"to":[11.301331779533463,9.542236647606954,6.1875],"autouv":0,"color":5,"locked":false,"inflate":-0.25,"rotation":[0,0,22.5],"origin":[9,4,6],"faces":{"north":{"uv":[28,18,29,21],"texture":0},"east":{"uv":[28,21,29,24],"texture":0},"south":{"uv":[28,24,29,27],"texture":0},"west":{"uv":[22,29,23,32],"texture":0},"up":{"uv":[31,26,30,25],"texture":0},"down":{"uv":[31,26,30,27],"texture":0}},"uuid":"a2b81b16-7fdf-83a1-4813-cb88f05e1b62"},{"name":"cube","from":[6.04878629730028,8.437831141675163,5.1875],"to":[7.04878629730028,11.437831141675163,6.1875],"autouv":0,"color":5,"locked":false,"inflate":-0.375,"rotation":[0,0,-22.5],"origin":[9,4,6],"faces":{"north":{"uv":[26,29,27,32],"texture":0},"east":{"uv":[29,29,30,32],"texture":0},"south":{"uv":[29,0,30,3],"texture":0},"west":{"uv":[29,3,30,6],"texture":0},"up":{"uv":[31,28,30,27],"texture":0},"down":{"uv":[31,28,30,29],"texture":0}},"uuid":"dc2919c4-d6de-3803-9698-b4adb7d5b393"},{"name":"cube","from":[8.9375,10.275815011396451,2.359276207188733],"to":[9.9375,12.275815011396451,3.359276207188733],"autouv":0,"color":5,"locked":false,"inflate":-0.4375,"rotation":[22.5,0,0],"origin":[9,4,6],"faces":{"north":{"uv":[29,26,30,28],"texture":0},"east":{"uv":[0,30,1,32],"texture":0},"south":{"uv":[1,30,2,32],"texture":0},"west":{"uv":[2,30,3,32],"texture":0},"up":{"uv":[31,30,30,29],"texture":0},"down":{"uv":[4,31,3,32],"texture":0}},"uuid":"b1ffeea7-1def-d124-81b4-3be0077a4a2a"}],"outliner":[{"name":"body","origin":[8,8,8],"uuid":"cca4b678-0111-b423-6005-352f5528fe13","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["d68afced-893f-b744-c18f-170ee0e1ec99"]},{"name":"shell1","origin":[16,8,16],"uuid":"49325fff-300f-b554-f654-30c36f0d6429","export":true,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["9e929490-f5c3-2d53-1ff5-a441a7bda83e",{"name":"group","origin":[16,8,16],"uuid":"a5a73669-c93b-0a38-d43d-c1b026ef67db","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["ac9422af-2b63-b016-1662-a87c99a6c633"]}]},{"name":"shell2","origin":[16,8,16],"uuid":"e026df91-1bb3-23af-1d67-742f88255c84","export":true,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["0a219ab6-e69a-0a9b-834b-4b93280c0959",{"name":"group","origin":[8,4.695518130045148,3.5307337294603585],"uuid":"897489fe-6bfc-bc06-7584-d6f61a5529b7","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["e3dea036-d71b-4244-7d4a-c37e17055339"]}]},{"name":"shell3","origin":[16,8,16],"uuid":"1e20cdcd-2803-c09a-67dd-cff43068fbc0","export":true,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["e9990229-654f-b0b3-dd71-edf404c1af7a",{"name":"group","origin":[16,8,16],"uuid":"459b7171-2e78-4fe7-e16d-42d7e4240473","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["2b200c54-35e5-5905-515e-6726457bf099"]}]},{"name":"shell4","origin":[16,8,16],"uuid":"925a1817-7568-39ef-fc9c-305814384064","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["e0db21d3-4896-753c-4a0d-60784a9e9c72",{"name":"group","origin":[16,8,16],"uuid":"10cf94b6-9c38-bcb1-7fbd-f5432ade3fac","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["59150f38-930e-4233-75fb-38a9e18a9e57"]}]},{"name":"leaf1","origin":[8,8,8],"uuid":"8ecdbdb7-8885-9612-5d2d-5f3b8961241a","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["3af7bee9-469f-381d-eb7b-47badfdefe6d","5c92057b-c324-fae3-0dad-f9928a732e43"]},{"name":"leaf2","origin":[8,8,8],"uuid":"eaaff567-5ad6-f918-13bf-c047055ceefe","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["d01e7327-23b8-326c-991f-552e90b920b3","1404db55-da24-2b0e-356e-1334c7e1a24e"]},{"name":"leaf3","origin":[8,8,8],"uuid":"51269a0c-2716-0ba7-55c3-ff362e6de43f","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["04c9e505-afe8-dd8d-e790-4c79cce181c6","4bb863d8-5b4a-0cbb-072a-30f98e5fec8a"]},{"name":"leaf4","origin":[8,8,8],"uuid":"af1d1ba2-d33e-fad7-4c3b-56812c0548a9","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["17c00ad5-1c64-8cff-31fb-3b5515460f78","e65cc952-43af-3b6c-53ea-6a41bac7da42"]},{"name":"tendril1","origin":[8,8,8],"uuid":"c4df370a-5ecd-1571-927c-dfb1f62a8bf7","export":true,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[8,8,8],"uuid":"acd1d7d0-468d-66a4-19de-400f2cb49075","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["a095ed54-0076-e476-d650-72f51496d710",{"name":"group","origin":[14,15,17],"uuid":"7f4d227b-340a-ce5d-b23d-43065a24a515","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["b3a5b370-cc21-4f72-fb0b-7c51714280a1",{"name":"group","origin":[14,15,17],"uuid":"45bca06c-f80f-9823-c359-a32de3563959","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["93d1ba33-a5e3-f551-4245-407d79ad222b",{"name":"group","origin":[14,15,17],"uuid":"0c566ac1-4cb4-c64d-8226-eb94951b8820","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["e03be8e7-cc7c-7eee-7fbd-4f387978a10e"]}]}]}]}]},{"name":"tendril2","origin":[8,8,8],"uuid":"b66b699d-7ec8-0fd9-51cb-ddce91336188","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[8,8,8],"uuid":"9be69316-2534-bef8-ca4a-425710fd0c93","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["d5aea6b2-db49-79bd-8e1d-99877f488b42",{"name":"group","origin":[14,15,17],"uuid":"7b2a0b67-2a68-0b16-f220-22f079d17d29","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["156ff0e1-40c5-1a41-168d-281f7d7131da",{"name":"group","origin":[14,15,17],"uuid":"02297e95-85d9-bb8e-4ff4-55e632eb2aed","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["dabeb1b3-bbb3-d4be-800e-c0b30539add7",{"name":"group","origin":[14,15,17],"uuid":"259a2b6d-a7d7-c9cb-0454-9d70755347cc","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["101d1cd9-4797-e666-89f2-3f84edad4ad6"]}]}]}]}]},{"name":"tendril3","origin":[8,8,8],"uuid":"7be7de41-a0ff-ebd7-39d3-600fc7039811","export":true,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[8,8,8],"uuid":"e93d7796-1886-837e-e64e-a468bb308db0","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["91b8c459-160e-3243-c197-0869039165a2",{"name":"group","origin":[14,15,17],"uuid":"382c955c-aec2-f610-73cf-edc46dcdf6d3","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["d562291d-b13e-d6bd-a6a7-ee89fba3d257",{"name":"group","origin":[14,15,17],"uuid":"7ebd2d1f-c6b5-fbb1-a037-d2f2b86b7f30","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["64ef1090-a021-6e9d-c9fe-4522581a668b",{"name":"group","origin":[14,15,17],"uuid":"c60918ed-f474-f57b-117f-d5a4a1e18a6d","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["2484fafa-28fd-a50d-f23d-e3d0d8330ec1"]}]}]}]}]},{"name":"tendril4","origin":[8,8,8],"uuid":"a6d863a0-eb3d-a87e-aaf0-2d26799300b2","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[8,8,8],"uuid":"dd24899f-aa48-ad36-4e9f-99d1c5f639aa","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["0bc52833-aaa9-80d1-1e33-190ae3177700",{"name":"group","origin":[14,15,17],"uuid":"f0e0a727-7198-0627-0746-838b3c98530f","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["a2b81b16-7fdf-83a1-4813-cb88f05e1b62",{"name":"group","origin":[14,15,17],"uuid":"0b544e37-0c51-d6d8-acd8-dbebeb40c830","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["dc2919c4-d6de-3803-9698-b4adb7d5b393",{"name":"group","origin":[14,15,17],"uuid":"ee47465f-c477-e07a-3730-c4293ee11fc6","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["b1ffeea7-1def-d124-81b4-3be0077a4a2a"]}]}]}]}]}],"textures":[{"path":"/Users/eliot/Dropbox (Personal)/StormlightCraft/resources/main/assets/stormlight/textures/block/vinebud.png","name":"vinebud.png","folder":"block","namespace":"stormlight","id":"0","particle":true,"visible":true,"mode":"bitmap","saved":true,"uuid":"0a2840e9-ef37-6ca2-2929-5349c3cdf613","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAE9ElEQVRYR7WXf2wUVRDH54Te9a73q/RSFFvaKxcatDEtNVipUgMGaYEYIqmaFOIPJAgxEQ2pGuMfJsQQURslQRNijMRADCipBtP+oyZimyiWmJZScuXaXgFbrtzP/rgrZc33XeZld7vHtQ3MP+/t7Nt5n503Mztratq/Q0lOJslitRCE5+EbYbLZbbP0a554jKyWXJpMTon1PHfmOcmcYxa61HSKYuMxMVdLx1fXaSo1Tr7SCvLkL6PmzxpMps1NWxRsNJGYEGuzzdeuryWHy0H958aosMIs5vFonLwlXgEDAVxgMEAPrVylAfj+w78kgH+gm378rSUNgFWxcJrYme/UPKTXV9WspviVRbSitoDcod/pfF8FOcpmqLpytea58xf+IZ/PJ7wCsLaWforGbhoDYBPeONt8S+Vtupr7KFlt1vTbTkzSg1N/07S3QQOQEzhL99fsFt7AkXQeu6EBGL4WoBPtB9Me4LdkC2oYtVXon9m2yTAG9OddvLRIo9J7QAI8uXmdOIK5yqbn6g1jALFwJ/n1Cz/lmvPkEcQTUfry1NsmU6YsgDGj7Chd4Z1TDARHhul4z3e0b83rMg4QhJDKh2spEOxNA8w3CzLFgKtq56wsODPcSu+tb5Zx0PZpnwQIha/Rx9/sWlgWGLmaIx73EHR+v59aB3+mtza8aegBDUC2yOc0RRAiDY2k8IHCWVnQcmmA3t3+jiEAFstCNJ8smCuAHnLyjzK60HNOHoEEmG8W1NU/NScP6NPw8mmzBqCzqz1dCV8+8KoyPriIyBlNG465KK9khi7920uJaFyzmd3loA1bnzYEQCXkoqP+DgBEX4yQBRKgsXG3QlMWMtmmhWFlIocoN0m9Qx3iOjIWEaO7wC3GZ5u2ZQTADWwWioTkGs5/l3OJ0KEcAwDHISph467nFVMin6xFKVpsXkzxK/eRYg9Tb/dFuTlbA8Q9A3CU3aZbqVs0OWxeMIDREWTygCxEd+sIkIb8OWaPASgrwN0KQsPAIKKeUzHxDdDHgCxEn58+ohh1ODBopB+9PpppL0O9HgCLvMWrSAIc/Pojhbua0e6UaDTQ4UCM9Pj+z0cYoGiZl/AFZACMohK+f+QDBR1OdXk3RTx1otVChwMx0qtLLveB8BQ6ICPJCnD0cINi1OHAWLbOx+P2yMCbL4AsRBwDanpEb6azVntADYDvP57BfR7VVbDnZEpzBBoA3lxfv2H0TqI+AlS/wYEhKildLkb0jIghpGFN1UYRdOoYkJUQQcibfPvncXIud1FsKB0s9mIHJYJxOe5cu4N+CJ6ROqzh+3uqX9MAiCyyWQk2X3EcFgAirhJRkQUSAEHIACc6TtKS8gK62TcmVO6V+RS5HJbji4+/QL+MtUkd1vB9PQA6ZcQQbD5ytUHUAs4EAMhKiCBkgEOdfeT0uigWSHuA5zw215TT0ZH/xH3oIDx/o26vxgP9rTO0bmMXwWZVaCst9RSTw+6SHpAAB146JgDwp9Ll+YksbgslI0lhnOc8wtBFX7u4Dx2E5/vq92qCEAD4DYNNBhgJBYUn8DWUhUgNgH82FgCphVtqjCxcXvkab8iCvp//A2ELHgAAhL0hmtJ7BYBgw4Z4KQDwCADNz+mh/WdlDHCk8pHoPYA3RkMxFw8AgD3CAGw3IwAWoD5rfL/Aiz3bP1Hw48GPw9NwOa7V8/8BFyXVTkX9oxsAAAAASUVORK5CYII="}],"display":{"thirdperson_righthand":{"translation":[0,0.5,-1.5],"scale":[0.5,0.5,0.5]},"thirdperson_lefthand":{"translation":[0,0,-1.5],"scale":[0.5,0.5,0.5]},"firstperson_righthand":{"scale":[0.5,0.5,0.5]},"firstperson_lefthand":{"scale":[0.5,0.5,0.5]},"ground":{"translation":[0,0.5,0],"scale":[0.5,0.5,0.5]},"gui":{"rotation":[0,45,0],"translation":[0,0.5,0],"scale":[0.9,0.9,0.9]},"head":{"translation":[0,14.5,0]}},"geckoSettings":{"modSDK":"Forge 1.12 - 1.16","entityType":"Entity","javaPackage":"com.example.mod","animFileNamespace":"MODID","animFilePath":"animations/ANIMATIONFILE.json"}} \ No newline at end of file diff --git a/blockbench/surgebinding/blocks/vinebud/VineBud3.bbmodel b/blockbench/surgebinding/blocks/vinebud/VineBud3.bbmodel new file mode 100644 index 000000000..23893c720 --- /dev/null +++ b/blockbench/surgebinding/blocks/vinebud/VineBud3.bbmodel @@ -0,0 +1 @@ +{"meta":{"format_version":"3.6","model_format":"java_block","box_uv":false},"name":"vinebud3","parent":"","ambientocclusion":true,"front_gui_light":false,"visible_box":[1,1,0],"resolution":{"width":32,"height":32},"elements":[{"name":"cube","from":[5,0,5],"to":[11,6,11],"autouv":0,"color":4,"locked":false,"origin":[16,8,16],"faces":{"north":{"uv":[0,0,6,6],"texture":0},"east":{"uv":[0,6,6,12],"texture":0},"south":{"uv":[6,6,12,12],"texture":0},"west":{"uv":[6,0,12,6],"texture":0},"up":{"uv":[6,18,0,12],"texture":0},"down":{"uv":[12,12,6,18],"texture":0}},"uuid":"d68afced-893f-b744-c18f-170ee0e1ec99"},{"name":"cube","from":[5,2,11],"to":[11,6,12],"autouv":0,"color":5,"locked":false,"origin":[8,2,11],"faces":{"north":{"uv":[12,12,18,16],"texture":0},"east":{"uv":[22,22,23,26],"texture":0},"south":{"uv":[12,0,18,4],"texture":0},"west":{"uv":[22,0,23,4],"texture":0},"up":{"uv":[24,17,18,16],"texture":0},"down":{"uv":[24,17,18,18],"texture":0}},"uuid":"9e929490-f5c3-2d53-1ff5-a441a7bda83e"},{"name":"cube","from":[6,6,8],"to":[10,7,11],"autouv":0,"color":5,"locked":false,"rotation":[45,0,0],"origin":[8,6,11],"faces":{"north":{"uv":[22,4,26,5],"texture":0},"east":{"uv":[23,2,26,3],"texture":0},"south":{"uv":[22,5,26,6],"texture":0},"west":{"uv":[23,3,26,4],"texture":0},"up":{"uv":[22,3,18,0],"texture":0},"down":{"uv":[22,3,18,6],"texture":0}},"uuid":"ac9422af-2b63-b016-1662-a87c99a6c633"},{"name":"cube","from":[5,2,4],"to":[11,6,5],"autouv":0,"color":5,"locked":false,"origin":[8,2,5],"faces":{"north":{"uv":[12,4,18,8],"texture":0},"east":{"uv":[22,6,23,10],"texture":0},"south":{"uv":[12,8,18,12],"texture":0},"west":{"uv":[0,23,1,27],"texture":0},"up":{"uv":[6,23,0,22],"texture":0},"down":{"uv":[12,22,6,23],"texture":0}},"uuid":"0a219ab6-e69a-0a9b-834b-4b93280c0959"},{"name":"cube","from":[6,6,5],"to":[10,7,8],"autouv":0,"color":5,"locked":false,"rotation":[-45,0,0],"origin":[8,6,5],"faces":{"north":{"uv":[22,10,26,11],"texture":0},"east":{"uv":[23,22,26,23],"texture":0},"south":{"uv":[22,11,26,12],"texture":0},"west":{"uv":[24,6,27,7],"texture":0},"up":{"uv":[22,9,18,6],"texture":0},"down":{"uv":[22,9,18,12],"texture":0}},"uuid":"e3dea036-d71b-4244-7d4a-c37e17055339"},{"name":"cube","from":[4,2,5],"to":[5,6,11],"autouv":0,"color":5,"locked":false,"origin":[5,2,8],"faces":{"north":{"uv":[1,23,2,27],"texture":0},"east":{"uv":[12,16,18,20],"texture":0},"south":{"uv":[2,23,3,27],"texture":0},"west":{"uv":[0,18,6,22],"texture":0},"up":{"uv":[19,28,18,22],"texture":0},"down":{"uv":[20,22,19,28],"texture":0}},"uuid":"e9990229-654f-b0b3-dd71-edf404c1af7a"},{"name":"cube","from":[5,6,6],"to":[8,7,10],"autouv":0,"color":5,"locked":false,"rotation":[0,0,45],"origin":[5,6,8],"faces":{"north":{"uv":[24,7,27,8],"texture":0},"east":{"uv":[3,23,7,24],"texture":0},"south":{"uv":[24,8,27,9],"texture":0},"west":{"uv":[7,23,11,24],"texture":0},"up":{"uv":[21,16,18,12],"texture":0},"down":{"uv":[15,20,12,24],"texture":0}},"uuid":"2b200c54-35e5-5905-515e-6726457bf099"},{"name":"cube","from":[11,2,5],"to":[12,6,11],"autouv":0,"color":5,"locked":false,"origin":[11,2,8],"faces":{"north":{"uv":[11,23,12,27],"texture":0},"east":{"uv":[6,18,12,22],"texture":0},"south":{"uv":[23,23,24,27],"texture":0},"west":{"uv":[18,18,24,22],"texture":0},"up":{"uv":[21,28,20,22],"texture":0},"down":{"uv":[22,22,21,28],"texture":0}},"uuid":"e0db21d3-4896-753c-4a0d-60784a9e9c72"},{"name":"cube","from":[8,6,6],"to":[11,7,10],"autouv":0,"color":5,"locked":false,"rotation":[0,0,-45],"origin":[11,6,8],"faces":{"north":{"uv":[24,9,27,10],"texture":0},"east":{"uv":[23,0,27,1],"texture":0},"south":{"uv":[24,12,27,13],"texture":0},"west":{"uv":[23,1,27,2],"texture":0},"up":{"uv":[18,24,15,20],"texture":0},"down":{"uv":[24,12,21,16],"texture":0}},"uuid":"59150f38-930e-4233-75fb-38a9e18a9e57"},{"name":"cube","from":[6,5,7.8125],"to":[7,8,8.8125],"autouv":0,"color":5,"locked":false,"inflate":-0.25,"rotation":[0,0,-22.5],"origin":[6.5,5.5,8.3125],"faces":{"north":{"uv":[26,26,27,29],"texture":0},"east":{"uv":[26,2,27,5],"texture":0},"south":{"uv":[26,13,27,16],"texture":0},"west":{"uv":[26,16,27,19],"texture":0},"up":{"uv":[30,29,29,28],"texture":0},"down":{"uv":[12,30,11,31],"texture":0}},"uuid":"b3a5b370-cc21-4f72-fb0b-7c51714280a1"},{"name":"cube","from":[6.875,7,7.8125],"to":[7.875,10,8.8125],"autouv":0,"color":5,"locked":false,"inflate":-0.375,"rotation":[0,0,22.5],"origin":[7.375,7.5,8.3125],"faces":{"north":{"uv":[26,19,27,22],"texture":0},"east":{"uv":[26,22,27,25],"texture":0},"south":{"uv":[0,27,1,30],"texture":0},"west":{"uv":[1,27,2,30],"texture":0},"up":{"uv":[24,31,23,30],"texture":0},"down":{"uv":[28,30,27,31],"texture":0}},"uuid":"93d1ba33-a5e3-f551-4245-407d79ad222b"},{"name":"cube","from":[6.0625,9.019030116872178,7.904329141908727],"to":[7.0625,11.019030116872178,8.904329141908727],"autouv":0,"color":5,"locked":false,"inflate":-0.4375,"rotation":[-22.5,0,0],"origin":[6.5625,9.25,8.5],"faces":{"north":{"uv":[25,23,26,25],"texture":0},"east":{"uv":[26,10,27,12],"texture":0},"south":{"uv":[29,6,30,8],"texture":0},"west":{"uv":[29,8,30,10],"texture":0},"up":{"uv":[31,31,30,30],"texture":0},"down":{"uv":[31,0,30,1],"texture":0}},"uuid":"e03be8e7-cc7c-7eee-7fbd-4f387978a10e"},{"name":"cube","from":[8.1875,4.542236647606954,6.698668220466537],"to":[9.1875,7.542236647606954,7.698668220466537],"autouv":0,"color":5,"locked":false,"inflate":-0.25,"rotation":[22.5,0,0],"origin":[9,2,9],"faces":{"north":{"uv":[27,12,28,15],"texture":0},"east":{"uv":[27,15,28,18],"texture":0},"south":{"uv":[27,18,28,21],"texture":0},"west":{"uv":[27,21,28,24],"texture":0},"up":{"uv":[31,6,30,5],"texture":0},"down":{"uv":[31,6,30,7],"texture":0}},"uuid":"156ff0e1-40c5-1a41-168d-281f7d7131da"},{"name":"cube","from":[8.1875,6.437831141675163,10.95121370269972],"to":[9.1875,9.437831141675163,11.95121370269972],"autouv":0,"color":5,"locked":false,"inflate":-0.375,"rotation":[-22.5,0,0],"origin":[9,2,9],"faces":{"north":{"uv":[27,24,28,27],"texture":0},"east":{"uv":[3,28,4,31],"texture":0},"south":{"uv":[4,28,5,31],"texture":0},"west":{"uv":[5,28,6,31],"texture":0},"up":{"uv":[31,8,30,7],"texture":0},"down":{"uv":[31,8,30,9],"texture":0}},"uuid":"dabeb1b3-bbb3-d4be-800e-c0b30539add7"},{"name":"cube","from":[5.359276207188733,8.275815011396451,8.0625],"to":[6.359276207188733,10.275815011396451,9.0625],"autouv":0,"color":5,"locked":false,"inflate":-0.4375,"rotation":[0,0,-22.5],"origin":[9,2,9],"faces":{"north":{"uv":[29,10,30,12],"texture":0},"east":{"uv":[29,12,30,14],"texture":0},"south":{"uv":[29,14,30,16],"texture":0},"west":{"uv":[29,16,30,18],"texture":0},"up":{"uv":[31,10,30,9],"texture":0},"down":{"uv":[31,10,30,11],"texture":0}},"uuid":"101d1cd9-4797-e666-89f2-3f84edad4ad6"},{"name":"cube","from":[6.8125,4.542236647606954,4.698668220466537],"to":[7.8125,7.542236647606954,5.698668220466537],"autouv":0,"color":5,"locked":false,"inflate":-0.25,"rotation":[22.5,0,0],"origin":[7,2,7],"faces":{"north":{"uv":[15,28,16,31],"texture":0},"east":{"uv":[16,28,17,31],"texture":0},"south":{"uv":[17,28,18,31],"texture":0},"west":{"uv":[18,28,19,31],"texture":0},"up":{"uv":[31,16,30,15],"texture":0},"down":{"uv":[31,16,30,17],"texture":0}},"uuid":"d562291d-b13e-d6bd-a6a7-ee89fba3d257"},{"name":"cube","from":[6.8125,6.437831141675163,8.95121370269972],"to":[7.8125,9.437831141675163,9.95121370269972],"autouv":0,"color":5,"locked":false,"inflate":-0.375,"rotation":[-22.5,0,0],"origin":[7,2,7],"faces":{"north":{"uv":[19,28,20,31],"texture":0},"east":{"uv":[20,28,21,31],"texture":0},"south":{"uv":[21,28,22,31],"texture":0},"west":{"uv":[24,28,25,31],"texture":0},"up":{"uv":[31,18,30,17],"texture":0},"down":{"uv":[31,18,30,19],"texture":0}},"uuid":"64ef1090-a021-6e9d-c9fe-4522581a668b"},{"name":"cube","from":[9.640723792811267,8.275815011396451,6.0625],"to":[10.640723792811267,10.275815011396451,7.0625],"autouv":0,"color":5,"locked":false,"inflate":-0.4375,"rotation":[0,0,22.5],"origin":[7,2,7],"faces":{"north":{"uv":[29,18,30,20],"texture":0},"east":{"uv":[29,20,30,22],"texture":0},"south":{"uv":[29,22,30,24],"texture":0},"west":{"uv":[29,24,30,26],"texture":0},"up":{"uv":[31,20,30,19],"texture":0},"down":{"uv":[31,20,30,21],"texture":0}},"uuid":"2484fafa-28fd-a50d-f23d-e3d0d8330ec1"},{"name":"cube","from":[10.301331779533463,4.542236647606954,7.1875],"to":[11.301331779533463,7.542236647606954,8.1875],"autouv":0,"color":5,"locked":false,"inflate":-0.25,"rotation":[0,0,22.5],"origin":[9,2,8],"faces":{"north":{"uv":[28,18,29,21],"texture":0},"east":{"uv":[28,21,29,24],"texture":0},"south":{"uv":[28,24,29,27],"texture":0},"west":{"uv":[22,29,23,32],"texture":0},"up":{"uv":[31,26,30,25],"texture":0},"down":{"uv":[31,26,30,27],"texture":0}},"uuid":"a2b81b16-7fdf-83a1-4813-cb88f05e1b62"},{"name":"cube","from":[6.04878629730028,6.437831141675163,7.1875],"to":[7.04878629730028,9.437831141675163,8.1875],"autouv":0,"color":5,"locked":false,"inflate":-0.375,"rotation":[0,0,-22.5],"origin":[9,2,8],"faces":{"north":{"uv":[26,29,27,32],"texture":0},"east":{"uv":[29,29,30,32],"texture":0},"south":{"uv":[29,0,30,3],"texture":0},"west":{"uv":[29,3,30,6],"texture":0},"up":{"uv":[31,28,30,27],"texture":0},"down":{"uv":[31,28,30,29],"texture":0}},"uuid":"dc2919c4-d6de-3803-9698-b4adb7d5b393"},{"name":"cube","from":[8.9375,8.275815011396451,4.359276207188733],"to":[9.9375,10.275815011396451,5.359276207188733],"autouv":0,"color":5,"locked":false,"inflate":-0.4375,"rotation":[22.5,0,0],"origin":[9,2,8],"faces":{"north":{"uv":[29,26,30,28],"texture":0},"east":{"uv":[0,30,1,32],"texture":0},"south":{"uv":[1,30,2,32],"texture":0},"west":{"uv":[2,30,3,32],"texture":0},"up":{"uv":[31,30,30,29],"texture":0},"down":{"uv":[4,31,3,32],"texture":0}},"uuid":"b1ffeea7-1def-d124-81b4-3be0077a4a2a"}],"outliner":[{"name":"body","origin":[8,8,8],"uuid":"cca4b678-0111-b423-6005-352f5528fe13","export":true,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["d68afced-893f-b744-c18f-170ee0e1ec99"]},{"name":"shell1","origin":[16,8,16],"uuid":"49325fff-300f-b554-f654-30c36f0d6429","export":true,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["9e929490-f5c3-2d53-1ff5-a441a7bda83e",{"name":"group","origin":[16,8,16],"uuid":"a5a73669-c93b-0a38-d43d-c1b026ef67db","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["ac9422af-2b63-b016-1662-a87c99a6c633"]}]},{"name":"shell2","origin":[16,8,16],"uuid":"e026df91-1bb3-23af-1d67-742f88255c84","export":true,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["0a219ab6-e69a-0a9b-834b-4b93280c0959",{"name":"group","origin":[8,4.695518130045148,3.5307337294603585],"uuid":"897489fe-6bfc-bc06-7584-d6f61a5529b7","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["e3dea036-d71b-4244-7d4a-c37e17055339"]}]},{"name":"shell3","origin":[16,8,16],"uuid":"1e20cdcd-2803-c09a-67dd-cff43068fbc0","export":true,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["e9990229-654f-b0b3-dd71-edf404c1af7a",{"name":"group","origin":[16,8,16],"uuid":"459b7171-2e78-4fe7-e16d-42d7e4240473","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["2b200c54-35e5-5905-515e-6726457bf099"]}]},{"name":"shell4","origin":[16,8,16],"uuid":"925a1817-7568-39ef-fc9c-305814384064","export":true,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["e0db21d3-4896-753c-4a0d-60784a9e9c72",{"name":"group","origin":[16,8,16],"uuid":"10cf94b6-9c38-bcb1-7fbd-f5432ade3fac","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["59150f38-930e-4233-75fb-38a9e18a9e57"]}]},{"name":"tendril1","origin":[8,8,8],"uuid":"c4df370a-5ecd-1571-927c-dfb1f62a8bf7","export":true,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[8,8,8],"uuid":"acd1d7d0-468d-66a4-19de-400f2cb49075","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[14,15,17],"uuid":"7f4d227b-340a-ce5d-b23d-43065a24a515","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["b3a5b370-cc21-4f72-fb0b-7c51714280a1",{"name":"group","origin":[14,15,17],"uuid":"45bca06c-f80f-9823-c359-a32de3563959","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["93d1ba33-a5e3-f551-4245-407d79ad222b",{"name":"group","origin":[14,15,17],"uuid":"0c566ac1-4cb4-c64d-8226-eb94951b8820","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["e03be8e7-cc7c-7eee-7fbd-4f387978a10e"]}]}]}]}]},{"name":"tendril2","origin":[8,8,8],"uuid":"b66b699d-7ec8-0fd9-51cb-ddce91336188","export":true,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[8,8,8],"uuid":"9be69316-2534-bef8-ca4a-425710fd0c93","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[14,15,17],"uuid":"7b2a0b67-2a68-0b16-f220-22f079d17d29","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["156ff0e1-40c5-1a41-168d-281f7d7131da",{"name":"group","origin":[14,15,17],"uuid":"02297e95-85d9-bb8e-4ff4-55e632eb2aed","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["dabeb1b3-bbb3-d4be-800e-c0b30539add7",{"name":"group","origin":[14,15,17],"uuid":"259a2b6d-a7d7-c9cb-0454-9d70755347cc","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["101d1cd9-4797-e666-89f2-3f84edad4ad6"]}]}]}]}]},{"name":"tendril3","origin":[8,8,8],"uuid":"7be7de41-a0ff-ebd7-39d3-600fc7039811","export":true,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[8,8,8],"uuid":"e93d7796-1886-837e-e64e-a468bb308db0","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[14,15,17],"uuid":"382c955c-aec2-f610-73cf-edc46dcdf6d3","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["d562291d-b13e-d6bd-a6a7-ee89fba3d257",{"name":"group","origin":[14,15,17],"uuid":"7ebd2d1f-c6b5-fbb1-a037-d2f2b86b7f30","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["64ef1090-a021-6e9d-c9fe-4522581a668b",{"name":"group","origin":[14,15,17],"uuid":"c60918ed-f474-f57b-117f-d5a4a1e18a6d","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["2484fafa-28fd-a50d-f23d-e3d0d8330ec1"]}]}]}]}]},{"name":"tendril4","origin":[8,8,8],"uuid":"a6d863a0-eb3d-a87e-aaf0-2d26799300b2","export":true,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[8,8,8],"uuid":"dd24899f-aa48-ad36-4e9f-99d1c5f639aa","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"group","origin":[14,15,17],"uuid":"f0e0a727-7198-0627-0746-838b3c98530f","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["a2b81b16-7fdf-83a1-4813-cb88f05e1b62",{"name":"group","origin":[14,15,17],"uuid":"0b544e37-0c51-d6d8-acd8-dbebeb40c830","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["dc2919c4-d6de-3803-9698-b4adb7d5b393",{"name":"group","origin":[14,15,17],"uuid":"ee47465f-c477-e07a-3730-c4293ee11fc6","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["b1ffeea7-1def-d124-81b4-3be0077a4a2a"]}]}]}]}]}],"textures":[{"path":"/Users/eliot/Dropbox (Personal)/StormlightCraft/resources/main/assets/stormlight/textures/block/vinebud.png","name":"vinebud.png","folder":"block","namespace":"stormlight","id":"0","particle":true,"visible":true,"mode":"bitmap","saved":true,"uuid":"0a2840e9-ef37-6ca2-2929-5349c3cdf613","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAE9ElEQVRYR7WXf2wUVRDH54Te9a73q/RSFFvaKxcatDEtNVipUgMGaYEYIqmaFOIPJAgxEQ2pGuMfJsQQURslQRNijMRADCipBtP+oyZimyiWmJZScuXaXgFbrtzP/rgrZc33XeZld7vHtQ3MP+/t7Nt5n503Mztratq/Q0lOJslitRCE5+EbYbLZbbP0a554jKyWXJpMTon1PHfmOcmcYxa61HSKYuMxMVdLx1fXaSo1Tr7SCvLkL6PmzxpMps1NWxRsNJGYEGuzzdeuryWHy0H958aosMIs5vFonLwlXgEDAVxgMEAPrVylAfj+w78kgH+gm378rSUNgFWxcJrYme/UPKTXV9WspviVRbSitoDcod/pfF8FOcpmqLpytea58xf+IZ/PJ7wCsLaWforGbhoDYBPeONt8S+Vtupr7KFlt1vTbTkzSg1N/07S3QQOQEzhL99fsFt7AkXQeu6EBGL4WoBPtB9Me4LdkC2oYtVXon9m2yTAG9OddvLRIo9J7QAI8uXmdOIK5yqbn6g1jALFwJ/n1Cz/lmvPkEcQTUfry1NsmU6YsgDGj7Chd4Z1TDARHhul4z3e0b83rMg4QhJDKh2spEOxNA8w3CzLFgKtq56wsODPcSu+tb5Zx0PZpnwQIha/Rx9/sWlgWGLmaIx73EHR+v59aB3+mtza8aegBDUC2yOc0RRAiDY2k8IHCWVnQcmmA3t3+jiEAFstCNJ8smCuAHnLyjzK60HNOHoEEmG8W1NU/NScP6NPw8mmzBqCzqz1dCV8+8KoyPriIyBlNG465KK9khi7920uJaFyzmd3loA1bnzYEQCXkoqP+DgBEX4yQBRKgsXG3QlMWMtmmhWFlIocoN0m9Qx3iOjIWEaO7wC3GZ5u2ZQTADWwWioTkGs5/l3OJ0KEcAwDHISph467nFVMin6xFKVpsXkzxK/eRYg9Tb/dFuTlbA8Q9A3CU3aZbqVs0OWxeMIDREWTygCxEd+sIkIb8OWaPASgrwN0KQsPAIKKeUzHxDdDHgCxEn58+ohh1ODBopB+9PpppL0O9HgCLvMWrSAIc/Pojhbua0e6UaDTQ4UCM9Pj+z0cYoGiZl/AFZACMohK+f+QDBR1OdXk3RTx1otVChwMx0qtLLveB8BQ6ICPJCnD0cINi1OHAWLbOx+P2yMCbL4AsRBwDanpEb6azVntADYDvP57BfR7VVbDnZEpzBBoA3lxfv2H0TqI+AlS/wYEhKildLkb0jIghpGFN1UYRdOoYkJUQQcibfPvncXIud1FsKB0s9mIHJYJxOe5cu4N+CJ6ROqzh+3uqX9MAiCyyWQk2X3EcFgAirhJRkQUSAEHIACc6TtKS8gK62TcmVO6V+RS5HJbji4+/QL+MtUkd1vB9PQA6ZcQQbD5ytUHUAs4EAMhKiCBkgEOdfeT0uigWSHuA5zw215TT0ZH/xH3oIDx/o26vxgP9rTO0bmMXwWZVaCst9RSTw+6SHpAAB146JgDwp9Ll+YksbgslI0lhnOc8wtBFX7u4Dx2E5/vq92qCEAD4DYNNBhgJBYUn8DWUhUgNgH82FgCphVtqjCxcXvkab8iCvp//A2ELHgAAhL0hmtJ7BYBgw4Z4KQDwCADNz+mh/WdlDHCk8pHoPYA3RkMxFw8AgD3CAGw3IwAWoD5rfL/Aiz3bP1Hw48GPw9NwOa7V8/8BFyXVTkX9oxsAAAAASUVORK5CYII="}],"display":{"thirdperson_righthand":{"translation":[0,0.5,-1.5],"scale":[0.5,0.5,0.5]},"thirdperson_lefthand":{"translation":[0,0,-1.5],"scale":[0.5,0.5,0.5]},"firstperson_righthand":{"scale":[0.5,0.5,0.5]},"firstperson_lefthand":{"scale":[0.5,0.5,0.5]},"ground":{"translation":[0,0.5,0],"scale":[0.5,0.5,0.5]},"gui":{"rotation":[0,45,0],"translation":[0,0.5,0],"scale":[0.9,0.9,0.9]},"head":{"translation":[0,14.5,0]}},"geckoSettings":{"modSDK":"Forge 1.12 - 1.16","entityType":"Entity","javaPackage":"com.example.mod","animFileNamespace":"MODID","animFilePath":"animations/ANIMATIONFILE.json"}} \ No newline at end of file diff --git a/blockbench/surgebinding/blocks/vinebud/VineBud4.bbmodel b/blockbench/surgebinding/blocks/vinebud/VineBud4.bbmodel new file mode 100644 index 000000000..577d8f8b2 --- /dev/null +++ b/blockbench/surgebinding/blocks/vinebud/VineBud4.bbmodel @@ -0,0 +1 @@ +{"meta":{"format_version":"3.6","model_format":"java_block","box_uv":false},"name":"VineBud2","parent":"","ambientocclusion":true,"front_gui_light":false,"visible_box":[1,1,0],"resolution":{"width":32,"height":32},"elements":[{"name":"cube","from":[5,0,5],"to":[11,6,11],"autouv":0,"color":4,"locked":false,"origin":[16,8,16],"faces":{"north":{"uv":[0,0,6,6],"texture":0},"east":{"uv":[0,6,6,12],"texture":0},"south":{"uv":[6,6,12,12],"texture":0},"west":{"uv":[6,0,12,6],"texture":0},"up":{"uv":[6,18,0,12],"texture":0},"down":{"uv":[12,12,6,18],"texture":0}},"uuid":"d68afced-893f-b744-c18f-170ee0e1ec99"},{"name":"cube","from":[5,2,11],"to":[11,6,12],"autouv":0,"color":5,"locked":false,"origin":[8,2,11],"faces":{"north":{"uv":[12,12,18,16],"texture":0},"east":{"uv":[22,22,23,26],"texture":0},"south":{"uv":[12,0,18,4],"texture":0},"west":{"uv":[22,0,23,4],"texture":0},"up":{"uv":[24,17,18,16],"texture":0},"down":{"uv":[24,17,18,18],"texture":0}},"uuid":"9e929490-f5c3-2d53-1ff5-a441a7bda83e"},{"name":"cube","from":[6,6,8],"to":[10,7,11],"autouv":0,"color":5,"locked":false,"origin":[8,6,11],"faces":{"north":{"uv":[22,4,26,5],"texture":0},"east":{"uv":[23,2,26,3],"texture":0},"south":{"uv":[22,5,26,6],"texture":0},"west":{"uv":[23,3,26,4],"texture":0},"up":{"uv":[22,3,18,0],"texture":0},"down":{"uv":[22,3,18,6],"texture":0}},"uuid":"ac9422af-2b63-b016-1662-a87c99a6c633"},{"name":"cube","from":[5,2,4],"to":[11,6,5],"autouv":0,"color":5,"locked":false,"origin":[8,2,5],"faces":{"north":{"uv":[12,4,18,8],"texture":0},"east":{"uv":[22,6,23,10],"texture":0},"south":{"uv":[12,8,18,12],"texture":0},"west":{"uv":[0,23,1,27],"texture":0},"up":{"uv":[6,23,0,22],"texture":0},"down":{"uv":[12,22,6,23],"texture":0}},"uuid":"0a219ab6-e69a-0a9b-834b-4b93280c0959"},{"name":"cube","from":[6,6,5],"to":[10,7,8],"autouv":0,"color":5,"locked":false,"origin":[8,6,5],"faces":{"north":{"uv":[22,10,26,11],"texture":0},"east":{"uv":[23,22,26,23],"texture":0},"south":{"uv":[22,11,26,12],"texture":0},"west":{"uv":[24,6,27,7],"texture":0},"up":{"uv":[22,9,18,6],"texture":0},"down":{"uv":[22,9,18,12],"texture":0}},"uuid":"e3dea036-d71b-4244-7d4a-c37e17055339"},{"name":"cube","from":[4,2,5],"to":[5,6,11],"autouv":0,"color":5,"locked":false,"origin":[5,2,8],"faces":{"north":{"uv":[1,23,2,27],"texture":0},"east":{"uv":[12,16,18,20],"texture":0},"south":{"uv":[2,23,3,27],"texture":0},"west":{"uv":[0,18,6,22],"texture":0},"up":{"uv":[19,28,18,22],"texture":0},"down":{"uv":[20,22,19,28],"texture":0}},"uuid":"e9990229-654f-b0b3-dd71-edf404c1af7a"},{"name":"cube","from":[5,6,6],"to":[8,7,10],"autouv":0,"color":5,"locked":false,"origin":[5,6,8],"faces":{"north":{"uv":[24,7,27,8],"texture":0},"east":{"uv":[3,23,7,24],"texture":0},"south":{"uv":[24,8,27,9],"texture":0},"west":{"uv":[7,23,11,24],"texture":0},"up":{"uv":[21,16,18,12],"texture":0},"down":{"uv":[15,20,12,24],"texture":0}},"uuid":"2b200c54-35e5-5905-515e-6726457bf099"},{"name":"cube","from":[11,2,5],"to":[12,6,11],"autouv":0,"color":5,"locked":false,"origin":[11,2,8],"faces":{"north":{"uv":[11,23,12,27],"texture":0},"east":{"uv":[6,18,12,22],"texture":0},"south":{"uv":[23,23,24,27],"texture":0},"west":{"uv":[18,18,24,22],"texture":0},"up":{"uv":[21,28,20,22],"texture":0},"down":{"uv":[22,22,21,28],"texture":0}},"uuid":"e0db21d3-4896-753c-4a0d-60784a9e9c72"},{"name":"cube","from":[8,6,6],"to":[11,7,10],"autouv":0,"color":5,"locked":false,"origin":[11,6,8],"faces":{"north":{"uv":[24,9,27,10],"texture":0},"east":{"uv":[23,0,27,1],"texture":0},"south":{"uv":[24,12,27,13],"texture":0},"west":{"uv":[23,1,27,2],"texture":0},"up":{"uv":[18,24,15,20],"texture":0},"down":{"uv":[24,12,21,16],"texture":0}},"uuid":"59150f38-930e-4233-75fb-38a9e18a9e57"}],"outliner":[{"name":"body","origin":[8,8,8],"uuid":"cca4b678-0111-b423-6005-352f5528fe13","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["d68afced-893f-b744-c18f-170ee0e1ec99"]},{"name":"shell1","origin":[16,8,16],"uuid":"49325fff-300f-b554-f654-30c36f0d6429","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["9e929490-f5c3-2d53-1ff5-a441a7bda83e",{"name":"group","origin":[16,8,16],"uuid":"a5a73669-c93b-0a38-d43d-c1b026ef67db","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["ac9422af-2b63-b016-1662-a87c99a6c633"]}]},{"name":"shell2","origin":[16,8,16],"uuid":"e026df91-1bb3-23af-1d67-742f88255c84","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["0a219ab6-e69a-0a9b-834b-4b93280c0959",{"name":"group","origin":[8,4.695518130045148,3.5307337294603585],"uuid":"897489fe-6bfc-bc06-7584-d6f61a5529b7","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["e3dea036-d71b-4244-7d4a-c37e17055339"]}]},{"name":"shell3","origin":[16,8,16],"uuid":"1e20cdcd-2803-c09a-67dd-cff43068fbc0","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["e9990229-654f-b0b3-dd71-edf404c1af7a",{"name":"group","origin":[16,8,16],"uuid":"459b7171-2e78-4fe7-e16d-42d7e4240473","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["2b200c54-35e5-5905-515e-6726457bf099"]}]},{"name":"shell4","origin":[16,8,16],"uuid":"925a1817-7568-39ef-fc9c-305814384064","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["e0db21d3-4896-753c-4a0d-60784a9e9c72",{"name":"group","origin":[16,8,16],"uuid":"10cf94b6-9c38-bcb1-7fbd-f5432ade3fac","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["59150f38-930e-4233-75fb-38a9e18a9e57"]}]}],"textures":[{"path":"/Users/eliot/Dropbox (Personal)/StormlightCraft/resources/main/assets/stormlight/textures/block/vinebud.png","name":"vinebud.png","folder":"block","namespace":"stormlight","id":"0","particle":true,"visible":true,"mode":"bitmap","saved":true,"uuid":"0a2840e9-ef37-6ca2-2929-5349c3cdf613","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAALUlEQVRYR+3QQREAAAABQfqXFsNnFTizzXk99+MAAQIECBAgQIAAAQIECBAgMBo/ACHo7lH9AAAAAElFTkSuQmCC"}],"display":{"thirdperson_righthand":{"translation":[0,0.5,-1.5],"scale":[0.5,0.5,0.5]},"thirdperson_lefthand":{"translation":[0,0,-1.5],"scale":[0.5,0.5,0.5]},"firstperson_righthand":{"scale":[0.5,0.5,0.5]},"firstperson_lefthand":{"scale":[0.5,0.5,0.5]},"ground":{"translation":[0,0.5,0],"scale":[0.5,0.5,0.5]},"gui":{"rotation":[0,45,0],"translation":[0,0.5,0],"scale":[0.9,0.9,0.9]},"head":{"translation":[0,14.5,0]}},"geckoSettings":{"modSDK":"Forge 1.12 - 1.16","entityType":"Entity","javaPackage":"com.example.mod","animFileNamespace":"MODID","animFilePath":"animations/ANIMATIONFILE.json"}} \ No newline at end of file diff --git a/blockbench/surgebinding/blocks/vinebud/VineBudTexture.png b/blockbench/surgebinding/blocks/vinebud/VineBudTexture.png new file mode 100644 index 000000000..14f93138f Binary files /dev/null and b/blockbench/surgebinding/blocks/vinebud/VineBudTexture.png differ diff --git a/blockbench/surgebinding/blocks/vinebud/vinebud_hitbox.bbmodel b/blockbench/surgebinding/blocks/vinebud/vinebud_hitbox.bbmodel new file mode 100644 index 000000000..2ccc87180 --- /dev/null +++ b/blockbench/surgebinding/blocks/vinebud/vinebud_hitbox.bbmodel @@ -0,0 +1 @@ +{"meta":{"format_version":"4.5","model_format":"java_block","box_uv":false},"name":"vinebud1","parent":"","ambientocclusion":true,"front_gui_light":false,"visible_box":[1,1,0],"variable_placeholders":"","variable_placeholder_buttons":[],"unhandled_root_fields":{},"resolution":{"width":32,"height":32},"elements":[{"name":"hitbox","box_uv":false,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[3,0,3],"to":[13,10,13],"autouv":1,"color":5,"origin":[0,0,0],"faces":{"north":{"uv":[0,0,10,10]},"east":{"uv":[0,0,10,10]},"south":{"uv":[0,0,10,10]},"west":{"uv":[0,0,10,10]},"up":{"uv":[0,0,10,10]},"down":{"uv":[0,0,10,10]}},"type":"cube","uuid":"0776f64d-fbc2-b261-4c71-ed054e68c661"}],"outliner":["0776f64d-fbc2-b261-4c71-ed054e68c661"],"textures":[{"path":"/home/deck/dev/minecraft/cosmere/src/surgebinding/resources/assets/surgebinding/textures/block/vinebud.png","name":"vinebud.png","folder":"block","namespace":"surgebinding","id":"0","particle":true,"render_mode":"default","render_sides":"auto","frame_time":1,"frame_order_type":"loop","frame_order":"","frame_interpolate":false,"visible":true,"mode":"bitmap","saved":true,"uuid":"0f785dfc-c80e-6786-db72-9e8478085fc4","relative_path":"../../../textures/block/vinebud.png","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAABPRJREFUWEe1l39sFFUQx+eE3vWu96v0UhRb2isXGrQxLTVYqVIDBmmBGCKpmhTiDyQIMRENqRrjHybEEFEbJUETYozEQAwoqQbT/qMmYpsolpiWUnLl2l4BW67cz/64K2XN913mZXe7x7UNzD/v7ezbeZ+dNzM7a2rav0NJTibJYrUQhOfhG2Gy2W2z9GueeIysllyaTE6J9Tx35jnJnGMWutR0imLjMTFXS8dX12kqNU6+0gry5C+j5s8aTKbNTVsUbDSRmBBrs83Xrq8lh8tB/efGqLDCLObxaJy8JV4BAwFcYDBAD61cpQH4/sO/JIB/oJt+/K0lDYBVsXCa2Jnv1Dyk11fVrKb4lUW0oraA3KHf6XxfBTnKZqi6crXmufMX/iGfzye8ArC2ln6Kxm4aA2AT3jjbfEvlbbqa+yhZbdb0205M0oNTf9O0t0EDkBM4S/fX7BbewJF0HruhARi+FqAT7QfTHuC3ZAtqGLVV6J/ZtskwBvTnXby0SKPSe0ACPLl5nTiCucqm5+oNYwCxcCf59Qs/5Zrz5BHEE1H68tTbJlOmLIAxo+woXeGdUwwER4bpeM93tG/N6zIOEISQyodrKRDsTQPMNwsyxYCrauesLDgz3ErvrW+WcdD2aZ8ECIWv0cff7FpYFhi5miMe9xB0fr+fWgd/prc2vGnoAQ1AtsjnNEUQIg2NpPCBwllZ0HJpgN7d/o4hABbLQjSfLJgrgB5y8o8yutBzTh6BBJhvFtTVPzUnD+jT8PJpswags6s9XQlfPvCqMj64iMgZTRuOuSivZIYu/dtLiWhcs5nd5aANW582BEAl5KKj/g4ARF+MkAUSoLFxt0JTFjLZpoVhZSKHKDdJvUMd4joyFhGju8AtxmebtmUEwA1sFoqE5BrOf5dzidChHAMAxyEqYeOu5xVTIp+sRSlabF5M8Sv3kWIPU2/3Rbk5WwPEPQNwlN2mW6lbNDlsXjCA0RFk8oAsRHfrCJCG/DlmjwEoK8DdCkLDwCCinlMx8Q3Qx4AsRJ+fPqIYdTgwaKQfvT6aaS9DvR4Ai7zFq0gCHPz6I4W7mtHulGg00OFAjPT4/s9HGKBomZfwBWQAjKISvn/kAwUdTnV5N0U8daLVQocDMdKrSy73gfAUOiAjyQpw9HCDYtThwFi2zsfj9sjAmy+ALEQcA2p6RG+ms1Z7QA2A7z+ewX0e1VWw52RKcwQaAN5cX79h9E6iPgJUv8GBISopXS5G9IyIIaRhTdVGEXTqGJCVEEHIm3z753FyLndRbCgdLPZiByWCcTnuXLuDfgiekTqs4ft7ql/TAIgsslkJNl9xHBYAIq4SUZEFEgBByAAnOk7SkvICutk3JlTulfkUuRyW44uPv0C/jLVJHdbwfT0AOmXEEGw+crVB1ALOBADISoggZIBDnX3k9LooFkh7gOc8NteU09GR/8R96CA8f6Nur8YD/a0ztG5jF8FmVWgrLfUUk8Pukh6QAAdeOiYA8KfS5fmJLG4LJSNJYZznPMLQRV+7uA8dhOf76vdqghAA+A2DTQYYCQWFJ/A1lIVIDYB/NhYAqYVbaowsXF75Gm/Igr6f/wNhCx4AAIS9IZrSewWAYMOGeCkA8AgAzc/pof1nZQxwpPKR6D2AN0ZDMRcPAIA9wgBsNyMAFqA+a3y/wIs92z9R8OPBj8PTcDmu1fP/ARcl1U5F/aMbAAAAAElFTkSuQmCC"}],"display":{"thirdperson_righthand":{"translation":[0,0.5,-1.5],"scale":[0.5,0.5,0.5]},"thirdperson_lefthand":{"translation":[0,0,-1.5],"scale":[0.5,0.5,0.5]},"firstperson_righthand":{"scale":[0.5,0.5,0.5]},"firstperson_lefthand":{"scale":[0.5,0.5,0.5]},"ground":{"translation":[0,0.5,0],"scale":[0.5,0.5,0.5]},"gui":{"rotation":[0,45,0],"translation":[0,0.5,0],"scale":[0.9,0.9,0.9]},"head":{"translation":[0,14.5,0]}}} \ No newline at end of file diff --git a/blockbench/surgebinding/entities/chull/Chull2.bbmodel b/blockbench/surgebinding/entities/chull/Chull2.bbmodel new file mode 100644 index 000000000..bac85a2a5 --- /dev/null +++ b/blockbench/surgebinding/entities/chull/Chull2.bbmodel @@ -0,0 +1 @@ +{"meta":{"format_version":"4.5","model_format":"modded_entity","box_uv":true},"name":"Chull2","model_identifier":"","modded_entity_version":"1.17","modded_entity_flip_y":true,"visible_box":[1,1,0],"variable_placeholders":"","variable_placeholder_buttons":[],"unhandled_root_fields":{},"resolution":{"width":512,"height":512},"elements":[{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-24,22.75,-34],"to":[24,32.75,34],"autouv":0,"color":0,"origin":[-7,-17.25,3],"faces":{"north":{"uv":[68,68,116,78],"texture":0},"east":{"uv":[0,68,68,78],"texture":0},"south":{"uv":[184,68,232,78],"texture":0},"west":{"uv":[116,68,184,78],"texture":0},"up":{"uv":[116,68,68,0],"texture":0},"down":{"uv":[164,0,116,68],"texture":0}},"type":"cube","uuid":"7f82a42a-463a-0706-defd-80e6a81b4678"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-20,3.75,-31],"to":[20,8.75,30],"autouv":0,"color":0,"origin":[-7,-17.25,3],"uv_offset":[0,155],"faces":{"north":{"uv":[61,216,101,221],"texture":0},"east":{"uv":[0,216,61,221],"texture":0},"south":{"uv":[162,216,202,221],"texture":0},"west":{"uv":[101,216,162,221],"texture":0},"up":{"uv":[101,216,61,155],"texture":0},"down":{"uv":[141,155,101,216],"texture":0}},"type":"cube","uuid":"318e8291-f63b-d1a1-db70-b4ec368a2cfe"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-20,8.75,-33],"to":[20,22.75,30],"autouv":0,"color":0,"origin":[-7,-17.25,3],"uv_offset":[0,78],"faces":{"north":{"uv":[63,141,103,155],"texture":0},"east":{"uv":[0,141,63,155],"texture":0},"south":{"uv":[166,141,206,155],"texture":0},"west":{"uv":[103,141,166,155],"texture":0},"up":{"uv":[103,141,63,78],"texture":0},"down":{"uv":[143,78,103,141],"texture":0}},"type":"cube","uuid":"3e3db869-a499-1768-6d93-def64cbde61f"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[7,8.75,26],"to":[24,22.75,34],"autouv":0,"color":0,"origin":[-7,-17.25,3],"uv_offset":[164,22],"faces":{"north":{"uv":[172,30,189,44],"texture":0},"east":{"uv":[164,30,172,44],"texture":0},"south":{"uv":[197,30,214,44],"texture":0},"west":{"uv":[189,30,197,44],"texture":0},"up":{"uv":[189,30,172,22],"texture":0},"down":{"uv":[206,22,189,30],"texture":0}},"type":"cube","uuid":"38b4bd52-b061-ee78-496e-ecc9d00b9c0a"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-24,8.75,-14],"to":[24,22.75,-6],"autouv":0,"color":0,"origin":[-7,-17.25,3],"uv_offset":[204,246],"faces":{"north":{"uv":[212,254,260,268],"texture":0},"east":{"uv":[204,254,212,268],"texture":0},"south":{"uv":[268,254,316,268],"texture":0},"west":{"uv":[260,254,268,268],"texture":0},"up":{"uv":[260,254,212,246],"texture":0},"down":{"uv":[308,246,260,254],"texture":0}},"type":"cube","uuid":"11b68558-97a5-5520-131c-121bd0755d20"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-24,8.75,6],"to":[24,22.75,14],"autouv":0,"color":0,"origin":[-7,-17.25,3],"uv_offset":[92,240],"faces":{"north":{"uv":[100,248,148,262],"texture":0},"east":{"uv":[92,248,100,262],"texture":0},"south":{"uv":[156,248,204,262],"texture":0},"west":{"uv":[148,248,156,262],"texture":0},"up":{"uv":[148,248,100,240],"texture":0},"down":{"uv":[196,240,148,248],"texture":0}},"type":"cube","uuid":"7af561f3-3881-190b-2f7f-1b8cf085593c"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-24,8.75,-34],"to":[24,22.75,-26],"autouv":0,"color":0,"origin":[-7,-17.25,3],"uv_offset":[224,70],"faces":{"north":{"uv":[232,78,280,92],"texture":0},"east":{"uv":[224,78,232,92],"texture":0},"south":{"uv":[288,78,336,92],"texture":0},"west":{"uv":[280,78,288,92],"texture":0},"up":{"uv":[280,78,232,70],"texture":0},"down":{"uv":[328,70,280,78],"texture":0}},"type":"cube","uuid":"a03ae94d-82fe-2785-aded-964e73f08c52"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[20.585786437626908,3.75,-34],"to":[23.585786437626908,9.75,34],"autouv":0,"color":0,"rotation":[0,0,-45],"origin":[22.585786437626908,8.75,13],"uv_offset":[208,172],"faces":{"north":{"uv":[276,240,279,246],"texture":0},"east":{"uv":[208,240,276,246],"texture":0},"south":{"uv":[347,240,350,246],"texture":0},"west":{"uv":[279,240,347,246],"texture":0},"up":{"uv":[279,240,276,172],"texture":0},"down":{"uv":[282,172,279,240],"texture":0}},"type":"cube","uuid":"524c7552-0f50-1885-1aea-1c41ba23e9e7"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-23.585786437626908,3.75,-34],"to":[-20.585786437626908,9.75,34],"autouv":0,"color":0,"rotation":[0,0,45],"origin":[-22.585786437626908,8.75,13],"uv_offset":[134,166],"faces":{"north":{"uv":[202,234,205,240],"texture":0},"east":{"uv":[134,234,202,240],"texture":0},"south":{"uv":[273,234,276,240],"texture":0},"west":{"uv":[205,234,273,240],"texture":0},"up":{"uv":[205,234,202,166],"texture":0},"down":{"uv":[208,166,205,234],"texture":0}},"type":"cube","uuid":"e76105fd-6ac7-67bd-8d9e-47b134ae2b9c"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-42.574250469770206,-0.3125,24.056050989001413],"to":[-30.574250469770206,11.6875,38.05605098900141],"autouv":0,"color":0,"rotation":[0,35.00000000000003,0],"origin":[-36.95370717498624,9.003993353153962,32.644969867117595],"uv_offset":[0,155],"faces":{"north":{"uv":[14,169,26,181],"texture":0},"east":{"uv":[0,169,14,181],"texture":0},"south":{"uv":[40,169,52,181],"texture":0},"west":{"uv":[26,169,40,181],"texture":0},"up":{"uv":[26,169,14,155],"texture":0},"down":{"uv":[38,155,26,169],"texture":0}},"type":"cube","uuid":"52ab6eb3-eaae-f041-603b-06d4a2489bb0"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-49.04663551277867,6.227716879651458,27.056050989001413],"to":[-41.04663551277868,10.22771687965146,35.05605098900141],"autouv":0,"color":0,"rotation":[19.295342735331264,29.784009840891997,35.176737775201744],"origin":[-36.95370717498624,9.003993353153962,32.644969867117595],"uv_offset":[328,30],"faces":{"north":{"uv":[336,38,344,42],"texture":0},"east":{"uv":[328,38,336,42],"texture":0},"south":{"uv":[352,38,360,42],"texture":0},"west":{"uv":[344,38,352,42],"texture":0},"up":{"uv":[344,38,336,30],"texture":0},"down":{"uv":[352,30,344,38],"texture":0}},"type":"cube","uuid":"a08061b9-44d3-d1f4-1c11-de1049461897"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-48.03835208490797,0.01730484541326227,27.056050989001413],"to":[-40.03835208490797,4.017304845413262,35.05605098900141],"autouv":0,"color":0,"rotation":[0,35.00000000000003,0],"origin":[-36.95370717498624,9.003993353153962,32.644969867117595],"uv_offset":[326,289],"faces":{"north":{"uv":[334,297,342,301],"texture":0},"east":{"uv":[326,297,334,301],"texture":0},"south":{"uv":[350,297,358,301],"texture":0},"west":{"uv":[342,297,350,301],"texture":0},"up":{"uv":[342,297,334,289],"texture":0},"down":{"uv":[350,289,342,297],"texture":0}},"type":"cube","uuid":"67ded8d7-58e0-195a-231a-276faa8d9a06"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-52.04663551277867,7.227716879651458,28.056050989001413],"to":[-49.04663551277867,10.22771687965146,34.05605098900141],"autouv":0,"color":0,"rotation":[19.295342735331264,29.784009840891997,35.176737775201744],"origin":[-36.95370717498624,9.003993353153962,32.644969867117595],"uv_offset":[290,333],"faces":{"north":{"uv":[296,339,299,342],"texture":0},"east":{"uv":[290,339,296,342],"texture":0},"south":{"uv":[305,339,308,342],"texture":0},"west":{"uv":[299,339,305,342],"texture":0},"up":{"uv":[299,339,296,333],"texture":0},"down":{"uv":[302,333,299,339],"texture":0}},"type":"cube","uuid":"5fe24b37-4fbb-c214-c6ab-cb0fa38f7f31"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-50.6152112977888,16.663357031621633,29.056050989001413],"to":[-48.6152112977888,18.663357031621633,33.05605098900141],"autouv":0,"color":0,"rotation":[32.39935655016117,14.028462645393255,69.09429953599825],"origin":[-36.95370717498624,9.003993353153962,32.644969867117595],"uv_offset":[202,44],"faces":{"north":{"uv":[206,48,208,50],"texture":0},"east":{"uv":[202,48,206,50],"texture":0},"south":{"uv":[212,48,214,50],"texture":0},"west":{"uv":[208,48,212,50],"texture":0},"up":{"uv":[208,48,206,44],"texture":0},"down":{"uv":[210,44,208,48],"texture":0}},"type":"cube","uuid":"ac591aef-697b-18bd-a968-7551852d15f0"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-51.48166481974269,-0.2953107286600396,29.056050989001413],"to":[-49.48166481974269,0.7046892713399604,33.05605098900141],"autouv":0,"color":0,"rotation":[0,35.00000000000003,0],"origin":[-36.95370717498624,9.003993353153962,32.644969867117595],"uv_offset":[150,270],"faces":{"north":{"uv":[154,274,156,275],"texture":0},"east":{"uv":[150,274,154,275],"texture":0},"south":{"uv":[160,274,162,275],"texture":0},"west":{"uv":[156,274,160,275],"texture":0},"up":{"uv":[156,274,154,270],"texture":0},"down":{"uv":[158,270,156,274],"texture":0}},"type":"cube","uuid":"2a5f1029-4736-5e49-8679-4115c9c3b159"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-49.48166481974269,-0.2953107286600396,28.056050989001413],"to":[-47.48166481974269,0.7046892713399604,34.05605098900141],"autouv":0,"color":0,"rotation":[0,35.00000000000003,0],"origin":[-36.95370717498624,9.003993353153962,32.644969867117595],"uv_offset":[308,246],"faces":{"north":{"uv":[314,252,316,253],"texture":0},"east":{"uv":[308,252,314,253],"texture":0},"south":{"uv":[322,252,324,253],"texture":0},"west":{"uv":[316,252,322,253],"texture":0},"up":{"uv":[316,252,314,246],"texture":0},"down":{"uv":[318,246,316,252],"texture":0}},"type":"cube","uuid":"893db7aa-2de8-7ca4-1d61-b87c81226e20"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-48.04416481974269,-0.2953107286600396,27.056050989001413],"to":[-40.04416481974269,3.7046892713399604,35.05605098900141],"autouv":0,"color":0,"rotation":[0,35.00000000000003,0],"origin":[-36.95370717498624,9.003993353153962,32.644969867117595],"uv_offset":[320,325],"faces":{"north":{"uv":[328,333,336,337],"texture":0},"east":{"uv":[320,333,328,337],"texture":0},"south":{"uv":[344,333,352,337],"texture":0},"west":{"uv":[336,333,344,337],"texture":0},"up":{"uv":[336,333,328,325],"texture":0},"down":{"uv":[344,325,336,333],"texture":0}},"type":"cube","uuid":"1ae4d8db-4adf-7a7b-7d89-f1650d8f268f"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-46.40944995410905,-0.2953107286600396,29.190752857028937],"to":[-38.40944995410905,3.7046892713399604,37.19075285702894],"autouv":0,"color":0,"rotation":[180,87.50000000000004,180],"origin":[-36.95370717498624,9.003993353153962,32.644969867117595],"uv_offset":[160,325],"faces":{"north":{"uv":[168,333,176,337],"texture":0},"east":{"uv":[160,333,168,337],"texture":0},"south":{"uv":[184,333,192,337],"texture":0},"west":{"uv":[176,333,184,337],"texture":0},"up":{"uv":[176,333,168,325],"texture":0},"down":{"uv":[184,325,176,333],"texture":0}},"type":"cube","uuid":"d18aa3ec-469e-22da-0a29-0b1639bba50e"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-47.84694995410905,-0.2953107286600396,30.190752857028937],"to":[-45.84694995410905,0.7046892713399604,36.19075285702894],"autouv":0,"color":0,"rotation":[180,87.50000000000004,180],"origin":[-36.95370717498624,9.003993353153962,32.644969867117595],"uv_offset":[208,307],"faces":{"north":{"uv":[214,313,216,314],"texture":0},"east":{"uv":[208,313,214,314],"texture":0},"south":{"uv":[222,313,224,314],"texture":0},"west":{"uv":[216,313,222,314],"texture":0},"up":{"uv":[216,313,214,307],"texture":0},"down":{"uv":[218,307,216,313],"texture":0}},"type":"cube","uuid":"d4499ed2-9c21-9437-9f39-e18ca0372157"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-49.84694995410905,-0.2953107286600396,31.190752857028937],"to":[-47.84694995410905,0.7046892713399604,35.19075285702894],"autouv":0,"color":0,"rotation":[180,87.50000000000004,180],"origin":[-36.95370717498624,9.003993353153962,32.644969867117595],"uv_offset":[266,166],"faces":{"north":{"uv":[270,170,272,171],"texture":0},"east":{"uv":[266,170,270,171],"texture":0},"south":{"uv":[276,170,278,171],"texture":0},"west":{"uv":[272,170,276,171],"texture":0},"up":{"uv":[272,170,270,166],"texture":0},"down":{"uv":[274,166,272,170],"texture":0}},"type":"cube","uuid":"269303e8-a2a8-22c7-e5fd-6df5834f9812"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-49.92435094283302,15.181802219313315,31.190752857028933],"to":[-47.92435094283302,17.181802219313315,35.19075285702893],"autouv":0,"color":0,"rotation":[92.75806438933462,24.974573527445862,91.16523859501446],"origin":[-36.95370717498624,9.003993353153962,32.644969867117595],"uv_offset":[0,187],"faces":{"north":{"uv":[4,191,6,193],"texture":0},"east":{"uv":[0,191,4,193],"texture":0},"south":{"uv":[10,191,12,193],"texture":0},"west":{"uv":[6,191,10,193],"texture":0},"up":{"uv":[6,191,4,187],"texture":0},"down":{"uv":[8,187,6,191],"texture":0}},"type":"cube","uuid":"a6d9372f-040c-bd75-7377-f1ec6330fdfd"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-50.63093091119589,6.410359446834634,30.190752857028908],"to":[-47.63093091119588,9.410359446834633,36.19075285702891],"autouv":0,"color":0,"rotation":[94.99051678989554,59.90568069244192,94.32054514388427],"origin":[-36.95370717498624,9.003993353153962,32.644969867117595],"uv_offset":[272,333],"faces":{"north":{"uv":[278,339,281,342],"texture":0},"east":{"uv":[272,339,278,342],"texture":0},"south":{"uv":[287,339,290,342],"texture":0},"west":{"uv":[281,339,287,342],"texture":0},"up":{"uv":[281,339,278,333],"texture":0},"down":{"uv":[284,333,281,339],"texture":0}},"type":"cube","uuid":"43921d9f-05d6-7a46-0c58-95b1ec5d5c14"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-46.40363721927433,0.01730484541326227,29.190752857028937],"to":[-38.40363721927433,4.017304845413262,37.19075285702894],"autouv":0,"color":0,"rotation":[180,87.50000000000004,180],"origin":[-36.95370717498624,9.003993353153962,32.644969867117595],"uv_offset":[128,325],"faces":{"north":{"uv":[136,333,144,337],"texture":0},"east":{"uv":[128,333,136,337],"texture":0},"south":{"uv":[152,333,160,337],"texture":0},"west":{"uv":[144,333,152,337],"texture":0},"up":{"uv":[144,333,136,325],"texture":0},"down":{"uv":[152,325,144,333],"texture":0}},"type":"cube","uuid":"80c9dc79-ecbd-a255-1ef5-78ecd6a33360"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-47.63093091119589,5.410359446834634,29.190752857028908],"to":[-39.63093091119589,9.410359446834633,37.19075285702891],"autouv":0,"color":0,"rotation":[94.99051678989554,59.90568069244192,94.32054514388427],"origin":[-36.95370717498624,9.003993353153962,32.644969867117595],"uv_offset":[96,324],"faces":{"north":{"uv":[104,332,112,336],"texture":0},"east":{"uv":[96,332,104,336],"texture":0},"south":{"uv":[120,332,128,336],"texture":0},"west":{"uv":[112,332,120,336],"texture":0},"up":{"uv":[112,332,104,324],"texture":0},"down":{"uv":[120,324,112,332],"texture":0}},"type":"cube","uuid":"90147b6b-a3d4-0564-6bed-e82c33f43006"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-49.08961113389665,-0.2953107286600396,26.39173589539287],"to":[-41.08961113389665,3.7046892713399604,34.39173589539287],"autouv":0,"color":0,"rotation":[6.678352476723521e-18,-22.50000000000034,-1.0450951327755264e-32],"origin":[-36.95370717498624,9.003993353153962,32.644969867117595],"uv_offset":[324,55],"faces":{"north":{"uv":[332,63,340,67],"texture":0},"east":{"uv":[324,63,332,67],"texture":0},"south":{"uv":[348,63,356,67],"texture":0},"west":{"uv":[340,63,348,67],"texture":0},"up":{"uv":[340,63,332,55],"texture":0},"down":{"uv":[348,55,340,63],"texture":0}},"type":"cube","uuid":"03650dbf-ceaf-56c6-5747-9cb417605954"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-50.52711113389665,-0.2953107286600396,27.39173589539287],"to":[-48.52711113389665,0.7046892713399604,33.39173589539287],"autouv":0,"color":0,"rotation":[6.678352476723521e-18,-22.50000000000034,-1.0450951327755264e-32],"origin":[-36.95370717498624,9.003993353153962,32.644969867117595],"uv_offset":[152,301],"faces":{"north":{"uv":[158,307,160,308],"texture":0},"east":{"uv":[152,307,158,308],"texture":0},"south":{"uv":[166,307,168,308],"texture":0},"west":{"uv":[160,307,166,308],"texture":0},"up":{"uv":[160,307,158,301],"texture":0},"down":{"uv":[162,301,160,307],"texture":0}},"type":"cube","uuid":"979b86bd-b5ac-a094-f0e4-e3e8aa4fa346"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-52.52711113389665,-0.2953107286600396,28.39173589539287],"to":[-50.52711113389665,0.7046892713399604,32.39173589539287],"autouv":0,"color":0,"rotation":[6.678352476723521e-18,-22.50000000000034,-1.0450951327755264e-32],"origin":[-36.95370717498624,9.003993353153962,32.644969867117595],"uv_offset":[188,262],"faces":{"north":{"uv":[192,266,194,267],"texture":0},"east":{"uv":[188,266,192,267],"texture":0},"south":{"uv":[198,266,200,267],"texture":0},"west":{"uv":[194,266,198,267],"texture":0},"up":{"uv":[194,266,192,262],"texture":0},"down":{"uv":[196,262,194,266],"texture":0}},"type":"cube","uuid":"a35adf92-7aa9-ab9d-ee0f-ba8ee11f7f89"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-51.05703600181975,17.61085316706815,28.391735895392866],"to":[-49.05703600181975,19.61085316706815,32.39173589539287],"autouv":0,"color":0,"rotation":[-20.576385285113936,-9.307268232796186,66.69303765222317],"origin":[-36.95370717498624,9.003993353153962,32.644969867117595],"uv_offset":[0,181],"faces":{"north":{"uv":[4.0000000000000036,185,6.0000000000000036,187],"texture":0},"east":{"uv":[0,185,4.0000000000000036,187],"texture":0},"south":{"uv":[10.000000000000007,185,12.000000000000007,187],"texture":0},"west":{"uv":[6.0000000000000036,185,10.000000000000007,187],"texture":0},"up":{"uv":[6.0000000000000036,185,4.0000000000000036,181],"texture":0},"down":{"uv":[8.000000000000004,181,6.0000000000000036,185],"texture":0}},"type":"cube","uuid":"7115ff6a-2382-753e-3fce-f8fd7e8ebf99"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-52.95201857912883,7.750440036728426,27.3917358953929],"to":[-49.952018579128826,10.750440036728426,33.3917358953929],"autouv":0,"color":0,"rotation":[-11.700919508153738,-19.354596151650917,32.00206341243393],"origin":[-36.95370717498624,9.003993353153962,32.644969867117595],"uv_offset":[254,333],"faces":{"north":{"uv":[260,339,263,342],"texture":0},"east":{"uv":[254,339,260,342],"texture":0},"south":{"uv":[269,339,272,342],"texture":0},"west":{"uv":[263,339,269,342],"texture":0},"up":{"uv":[263,339,260,333],"texture":0},"down":{"uv":[266,333,263,339],"texture":0}},"type":"cube","uuid":"294fc59b-e1b2-5162-3820-b5b6beae240d"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-49.08379839906193,0.01730484541326227,26.39173589539287],"to":[-41.08379839906193,4.017304845413262,34.39173589539287],"autouv":0,"color":0,"rotation":[6.678352476723521e-18,-22.50000000000034,-1.0450951327755264e-32],"origin":[-36.95370717498624,9.003993353153962,32.644969867117595],"uv_offset":[64,322],"faces":{"north":{"uv":[72,330,80,334],"texture":0},"east":{"uv":[64,330,72,334],"texture":0},"south":{"uv":[88,330,96,334],"texture":0},"west":{"uv":[80,330,88,334],"texture":0},"up":{"uv":[80,330,72,322],"texture":0},"down":{"uv":[88,322,80,330],"texture":0}},"type":"cube","uuid":"e962ef82-db89-0378-c758-f9b7a6e23b21"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-49.952018579128826,6.750440036728426,26.3917358953929],"to":[-41.952018579128826,10.750440036728426,34.3917358953929],"autouv":0,"color":0,"rotation":[-11.700919508153738,-19.354596151650917,32.00206341243393],"origin":[-36.95370717498624,9.003993353153962,32.644969867117595],"uv_offset":[32,322],"faces":{"north":{"uv":[40,330,48,334],"texture":0},"east":{"uv":[32,330,40,334],"texture":0},"south":{"uv":[55.99999999999999,330,63.99999999999999,334],"texture":0},"west":{"uv":[48,330,55.99999999999999,334],"texture":0},"up":{"uv":[48,330,40,322],"texture":0},"down":{"uv":[56,322,48,330],"texture":0}},"type":"cube","uuid":"c6ed1813-535f-58d9-4568-6fc18fb84df8"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-43.173345621020275,9.332341419728495,24.056050989001413],"to":[-38.173345621020275,22.332341419728493,38.05605098900141],"autouv":0,"color":0,"rotation":[-15.00046142754923,31.999747699873854,-26.82396215276299],"origin":[-36.95370717498624,9.003993353153962,32.644969867117595],"uv_offset":[0,271],"faces":{"north":{"uv":[14,285,19,298],"texture":0},"east":{"uv":[0,285,14,298],"texture":0},"south":{"uv":[33,285,38,298],"texture":0},"west":{"uv":[19,285,33,298],"texture":0},"up":{"uv":[19,285,14,271],"texture":0},"down":{"uv":[24,271,19,285],"texture":0}},"type":"cube","uuid":"b388b281-6432-7111-cbfd-4097d39f5a75"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-37.574250469770206,11.6875,24.056050989001413],"to":[-30.574250469770206,23.6875,38.05605098900141],"autouv":0,"color":0,"rotation":[0,35.00000000000003,0],"origin":[-36.95370717498624,9.003993353153962,32.644969867117595],"uv_offset":[122,262],"faces":{"north":{"uv":[136,276,143,288],"texture":0},"east":{"uv":[122,276,136,288],"texture":0},"south":{"uv":[157,276,164,288],"texture":0},"west":{"uv":[143,276,157,288],"texture":0},"up":{"uv":[143,276,136,262],"texture":0},"down":{"uv":[150,262,143,276],"texture":0}},"type":"cube","uuid":"5b7769e1-1140-21a0-f104-af631f014a9f"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-27.574250469770202,12.6875,29.056050989001413],"to":[-12.574250469770202,16.6875,33.05605098900141],"autouv":0,"color":0,"rotation":[0,35.00000000000003,0],"origin":[-36.95370717498624,9.003993353153962,32.644969867117595],"uv_offset":[0,207],"faces":{"north":{"uv":[4,211,19,215],"texture":0},"east":{"uv":[0,211,4,215],"texture":0},"south":{"uv":[23,211,38,215],"texture":0},"west":{"uv":[19,211,23,215],"texture":0},"up":{"uv":[19,211,4,207],"texture":0},"down":{"uv":[34,207,19,211],"texture":0}},"type":"cube","uuid":"a67a1a3b-baa3-2860-448b-1e891888aa2b"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-43.746438417290264,18.556786474450394,29.056050989001413],"to":[-33.746438417290264,22.556786474450394,33.05605098900141],"autouv":0,"color":0,"rotation":[-28.20866808810481,21.634714886786412,-55.49730644801023],"origin":[-36.95370717498624,9.003993353153962,32.644969867117595],"uv_offset":[314,230],"faces":{"north":{"uv":[318,234,328,238],"texture":0},"east":{"uv":[314,234,318,238],"texture":0},"south":{"uv":[332,234,342,238],"texture":0},"west":{"uv":[328,234,332,238],"texture":0},"up":{"uv":[328,234,318,230],"texture":0},"down":{"uv":[338,230,328,234],"texture":0}},"type":"cube","uuid":"57c5e0ad-cf49-4b76-bcc6-e6264fd992c5"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-37.104336119797715,-0.29531072866003816,27.05605098900142],"to":[-29.104336119797715,3.7046892713399617,35.05605098900142],"autouv":0,"color":0,"rotation":[-5.420233701831308e-14,35.00000000000017,-6.161010322251864e-15],"origin":[-36.95370717498624,9.003993353153962,32.644969867117595],"uv_offset":[0,322],"faces":{"north":{"uv":[8,330,16,334],"texture":0},"east":{"uv":[0,330,8,334],"texture":0},"south":{"uv":[24,330,32,334],"texture":0},"west":{"uv":[16,330,24,334],"texture":0},"up":{"uv":[16,330,8,322],"texture":0},"down":{"uv":[24,322,16,330],"texture":0}},"type":"cube","uuid":"deb49571-0d4a-8092-80e0-a36e5a23ea4d"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-29.666836119797715,-0.29531072866003816,28.05605098900142],"to":[-27.666836119797715,0.7046892713399618,34.05605098900142],"autouv":0,"color":0,"rotation":[-5.420233701831308e-14,35.00000000000017,-6.161010322251864e-15],"origin":[-36.95370717498624,9.003993353153962,32.644969867117595],"uv_offset":[120,300],"faces":{"north":{"uv":[126,306,128,307],"texture":0},"east":{"uv":[120,306,126,307],"texture":0},"south":{"uv":[134,306,136,307],"texture":0},"west":{"uv":[128,306,134,307],"texture":0},"up":{"uv":[128,306,126,300],"texture":0},"down":{"uv":[130,300,128,306],"texture":0}},"type":"cube","uuid":"632b529f-f492-26af-8fb1-71636fb8465f"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-27.666836119797715,-0.29531072866003816,29.05605098900142],"to":[-25.666836119797715,0.7046892713399618,33.05605098900142],"autouv":0,"color":0,"rotation":[-5.420233701831308e-14,35.00000000000017,-6.161010322251864e-15],"origin":[-36.95370717498624,9.003993353153962,32.644969867117595],"uv_offset":[258,63],"faces":{"north":{"uv":[262,67,264,68],"texture":0},"east":{"uv":[258,67,262,68],"texture":0},"south":{"uv":[268,67,270,68],"texture":0},"west":{"uv":[264,67,268,68],"texture":0},"up":{"uv":[264,67,262,63],"texture":0},"down":{"uv":[266,63,264,67],"texture":0}},"type":"cube","uuid":"83dd185c-ba51-b7ab-e7f7-42a6cf790c99"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-26.661945432817987,13.725935017036166,29.056050989001353],"to":[-24.661945432817987,15.725935017036166,33.05605098900135],"autouv":0,"color":0,"rotation":[-32.39935655016129,14.028462645392954,-69.09429953599829],"origin":[-36.95370717498624,9.003993353153962,32.644969867117595],"uv_offset":[141,172],"faces":{"north":{"uv":[145,176,147,178],"texture":0},"east":{"uv":[141,176,145,178],"texture":0},"south":{"uv":[151,176,153,178],"texture":0},"west":{"uv":[147,176,151,178],"texture":0},"up":{"uv":[147,176,145,172],"texture":0},"down":{"uv":[149,172,147,176],"texture":0}},"type":"cube","uuid":"51a174c4-16cd-4cc8-81d5-5623ebfdb925"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-27.667642159624695,5.6071735848675015,28.05605098900145],"to":[-24.667642159624695,8.607173584867502,34.05605098900145],"autouv":0,"color":0,"rotation":[-19.295342735331328,29.784009840892285,-35.176737775201914],"origin":[-36.95370717498624,9.003993353153962,32.644969867117595],"uv_offset":[222,333],"faces":{"north":{"uv":[228,339,231,342],"texture":0},"east":{"uv":[222,339,228,342],"texture":0},"south":{"uv":[237,339,240,342],"texture":0},"west":{"uv":[231,339,237,342],"texture":0},"up":{"uv":[231,339,228,333],"texture":0},"down":{"uv":[234,333,231,339],"texture":0}},"type":"cube","uuid":"d10265d7-442a-a794-ea23-8291ec9731a3"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-37.110148854632435,0.017304845413263714,27.056050989001413],"to":[-29.110148854632435,4.017304845413264,35.05605098900141],"autouv":0,"color":0,"rotation":[-5.420233701831308e-14,35.00000000000017,-6.161010322251864e-15],"origin":[-36.95370717498624,9.003993353153962,32.644969867117595],"uv_offset":[296,321],"faces":{"north":{"uv":[304,329,312,333],"texture":0},"east":{"uv":[296,329,304,333],"texture":0},"south":{"uv":[320,329,328,333],"texture":0},"west":{"uv":[312,329,320,333],"texture":0},"up":{"uv":[312,329,304,321],"texture":0},"down":{"uv":[320,321,312,329],"texture":0}},"type":"cube","uuid":"2399f5ae-0f0d-817a-b5a7-838a9f33334d"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-35.667642159624684,4.6071735848675015,27.05605098900145],"to":[-27.66764215962469,8.607173584867502,35.05605098900145],"autouv":0,"color":0,"rotation":[-19.295342735331328,29.784009840892285,-35.176737775201914],"origin":[-36.95370717498624,9.003993353153962,32.644969867117595],"uv_offset":[264,321],"faces":{"north":{"uv":[272,329,280,333],"texture":0},"east":{"uv":[264,329,272,333],"texture":0},"south":{"uv":[288,329,296,333],"texture":0},"west":{"uv":[280,329,288,333],"texture":0},"up":{"uv":[280,329,272,321],"texture":0},"down":{"uv":[288,321,280,329],"texture":0}},"type":"cube","uuid":"16311827-8421-7d6c-c54b-1cf252bc7228"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-39.99999999999999,2.285254037844382,-4],"to":[-32,6.285254037844382,4],"autouv":0,"color":0,"rotation":[1.2730982451367867e-14,3.560202018719105e-13,-30.000000000000053],"origin":[-36,4.2852540378443855,0],"uv_offset":[216,321],"faces":{"north":{"uv":[224,329,232,333],"texture":0},"east":{"uv":[216,329,224,333],"texture":0},"south":{"uv":[240,329,248,333],"texture":0},"west":{"uv":[232,329,240,333],"texture":0},"up":{"uv":[232,329,224,321],"texture":0},"down":{"uv":[240,321,232,329],"texture":0}},"type":"cube","uuid":"aa060338-378b-afb6-94e5-6433a5b548da"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-39.535898384862236,0.01730484541326227,-4],"to":[-31.535898384862236,4.017304845413262,4],"autouv":0,"color":0,"rotation":[-5.0668526673353835e-14,1.264270485881748e-13,-5.046804200358181e-15],"origin":[-35.535898384862236,2.0173048454132623,0],"uv_offset":[184,319],"faces":{"north":{"uv":[192,327,200,331],"texture":0},"east":{"uv":[184,327,192,331],"texture":0},"south":{"uv":[208,327,216,331],"texture":0},"west":{"uv":[200,327,208,331],"texture":0},"up":{"uv":[200,327,192,319],"texture":0},"down":{"uv":[208,319,200,327],"texture":0}},"type":"cube","uuid":"8439e200-32e6-f7ca-1654-430e000266af"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-32,3.285254037844382,-3],"to":[-29,6.285254037844382,3],"autouv":0,"color":0,"rotation":[1.2730982451367867e-14,3.560202018719105e-13,-30.000000000000053],"origin":[-36,4.2852540378443855,0],"uv_offset":[332,258],"faces":{"north":{"uv":[338,264,341,267],"texture":0},"east":{"uv":[332,264,338,267],"texture":0},"south":{"uv":[347,264,350,267],"texture":0},"west":{"uv":[341,264,347,267],"texture":0},"up":{"uv":[341,264,338,258],"texture":0},"down":{"uv":[344,258,341,264],"texture":0}},"type":"cube","uuid":"f64c6fe7-330d-edff-b94d-d3768ab7a9e5"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-31.61651035497117,0.31260664137688643,-2],"to":[-29.61651035497117,2.3126066413768864,2],"autouv":0,"color":0,"rotation":[-8.309302975815115e-14,-3.205220336466177e-13,-65.00000000000001],"origin":[-30.11651035497117,0.3126066413768882,-1],"uv_offset":[141,166],"faces":{"north":{"uv":[145,170,147,172],"texture":0},"east":{"uv":[141,170,145,172],"texture":0},"south":{"uv":[151,170,153,172],"texture":0},"west":{"uv":[147,170,151,172],"texture":0},"up":{"uv":[147,170,145,166],"texture":0},"down":{"uv":[149,166,147,170],"texture":0}},"type":"cube","uuid":"a0fbdbab-df3d-a15d-2d08-95320b7459ba"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-30.092585650027516,-0.2953107286600396,-2],"to":[-28.092585650027516,0.7046892713399604,2],"autouv":0,"color":0,"rotation":[-5.0668526673353835e-14,1.264270485881748e-13,-5.046804200358181e-15],"origin":[-32.592585650027516,-0.2953107286600378,-1],"uv_offset":[242,63],"faces":{"north":{"uv":[246,67,248,68],"texture":0},"east":{"uv":[242,67,246,68],"texture":0},"south":{"uv":[252,67,254,68],"texture":0},"west":{"uv":[248,67,252,68],"texture":0},"up":{"uv":[248,67,246,63],"texture":0},"down":{"uv":[250,63,248,67],"texture":0}},"type":"cube","uuid":"d50127b1-5a23-d77c-e31a-180da3865f1c"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-32.092585650027516,-0.2953107286600396,-3],"to":[-30.092585650027516,0.7046892713399604,3],"autouv":0,"color":0,"rotation":[-5.0668526673353835e-14,1.264270485881748e-13,-5.046804200358181e-15],"origin":[-32.592585650027516,-0.2953107286600378,-1],"uv_offset":[88,298],"faces":{"north":{"uv":[94,304,96,305],"texture":0},"east":{"uv":[88,304,94,305],"texture":0},"south":{"uv":[102,304,104,305],"texture":0},"west":{"uv":[96,304,102,305],"texture":0},"up":{"uv":[96,304,94,298],"texture":0},"down":{"uv":[98,298,96,304],"texture":0}},"type":"cube","uuid":"38c61638-086f-2e8f-83bc-0bd7c9c8a414"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-39.530085650027516,-0.2953107286600396,-4],"to":[-31.530085650027516,3.7046892713399604,4],"autouv":0,"color":0,"rotation":[-5.0668526673353835e-14,1.264270485881748e-13,-5.046804200358181e-15],"origin":[-32.592585650027516,-0.2953107286600378,-1],"uv_offset":[240,317],"faces":{"north":{"uv":[248,325,256,329],"texture":0},"east":{"uv":[240,325,248,329],"texture":0},"south":{"uv":[264,325,272,329],"texture":0},"west":{"uv":[256,325,264,329],"texture":0},"up":{"uv":[256,325,248,317],"texture":0},"down":{"uv":[264,317,256,325],"texture":0}},"type":"cube","uuid":"3bba687d-6bb1-590b-1978-8ee93a804430"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-36.68184916219474,15.803297434967968,-2],"to":[-26.681849162194737,19.803297434967966,2],"autouv":0,"color":0,"rotation":[0,0,-50],"origin":[-31.681849162194737,17.803297434967966,0],"uv_offset":[226,268],"faces":{"north":{"uv":[230,272,240,276],"texture":0},"east":{"uv":[226,272,230,276],"texture":0},"south":{"uv":[244,272,254,276],"texture":0},"west":{"uv":[240,272,244,276],"texture":0},"up":{"uv":[240,272,230,268],"texture":0},"down":{"uv":[250,268,240,272],"texture":0}},"type":"cube","uuid":"607fb366-c53a-1971-1ddc-d660a36924b4"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-30,12.6875,-2],"to":[-20,16.6875,2],"autouv":0,"color":0,"origin":[-18,0,-20],"uv_offset":[188,268],"faces":{"north":{"uv":[192,272,202,276],"texture":0},"east":{"uv":[188,272,192,276],"texture":0},"south":{"uv":[206,272,216,276],"texture":0},"west":{"uv":[202,272,206,276],"texture":0},"up":{"uv":[202,272,192,268],"texture":0},"down":{"uv":[212,268,202,272],"texture":0}},"type":"cube","uuid":"ad1df379-4060-0969-8976-2f9133399dba"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-40,11.6875,-7],"to":[-33,23.6875,7],"autouv":0,"color":0,"origin":[-1,0,-20],"uv_offset":[0,221],"faces":{"north":{"uv":[14,235,21,247],"texture":0},"east":{"uv":[0,235,14,247],"texture":0},"south":{"uv":[35,235,42,247],"texture":0},"west":{"uv":[21,235,35,247],"texture":0},"up":{"uv":[21,235,14,221],"texture":0},"down":{"uv":[28,221,21,235],"texture":0}},"type":"cube","uuid":"c9f5d1ea-9728-e15f-dda6-d350f269cecf"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-42.81808010704253,10.656752046520086,-7],"to":[-37.81808010704253,23.656752046520086,7],"autouv":0,"color":0,"rotation":[0,0,-22.5],"origin":[-41.31808010704253,16.656752046520086,0],"uv_offset":[240,268],"faces":{"north":{"uv":[254,282,259,295],"texture":0},"east":{"uv":[240,282,254,295],"texture":0},"south":{"uv":[273,282,278,295],"texture":0},"west":{"uv":[259,282,273,295],"texture":0},"up":{"uv":[259,282,254,268],"texture":0},"down":{"uv":[264,268,259,282],"texture":0}},"type":"cube","uuid":"c4c1f9f4-8858-912a-3927-db04943a36b2"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-43.44256783258947,0.2850544418893226,-13],"to":[-35.44256783258947,4.285054441889322,-5],"autouv":0,"color":0,"rotation":[-38.126340045758376,-46.91980519468873,47.05781842911979],"origin":[-43.45370717498625,2.244971654592171,-9],"uv_offset":[316,246],"faces":{"north":{"uv":[324,254,332,258],"texture":0},"east":{"uv":[316,254,324,258],"texture":0},"south":{"uv":[340,254,348,258],"texture":0},"west":{"uv":[332,254,340,258],"texture":0},"up":{"uv":[332,254,324,246],"texture":0},"down":{"uv":[340,246,332,254],"texture":0}},"type":"cube","uuid":"e40d2acb-4fbc-0f1d-4207-2eac1efeaa3d"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-44.464101615137764,0.01730484541326227,-13],"to":[-36.464101615137764,4.017304845413262,-5],"autouv":0,"color":0,"rotation":[6.678352476723515e-18,-57.500000000000306,-7.701545078646284e-33],"origin":[-43.45370717498625,2.244971654592171,-9],"uv_offset":[316,0],"faces":{"north":{"uv":[324,8,332,12],"texture":0},"east":{"uv":[316,8,324,12],"texture":0},"south":{"uv":[340,8,348,12],"texture":0},"west":{"uv":[332,8,340,12],"texture":0},"up":{"uv":[332,8,324,0],"texture":0},"down":{"uv":[340,0,332,8],"texture":0}},"type":"cube","uuid":"4bd6b020-02aa-bd00-1305-19f08f101ab9"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-46.442567832589475,1.2850544418893226,-12],"to":[-43.44256783258947,4.285054441889322,-6],"autouv":0,"color":0,"rotation":[-38.126340045758376,-46.91980519468873,47.05781842911979],"origin":[-43.45370717498625,2.244971654592171,-9],"uv_offset":[332,212],"faces":{"north":{"uv":[338,218,341,221],"texture":0},"east":{"uv":[332,218,338,221],"texture":0},"south":{"uv":[347,218,350,221],"texture":0},"west":{"uv":[341,218,347,221],"texture":0},"up":{"uv":[341,218,338,212],"texture":0},"down":{"uv":[344,212,341,218],"texture":0}},"type":"cube","uuid":"2c7b0465-bedd-da96-1fe0-62c46b3456f1"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-46.731895077757855,3.6304496850633217,-11],"to":[-44.731895077757855,5.630449685063322,-7],"autouv":0,"color":0,"rotation":[-54.89549437179885,-20.881272338444834,75.93426731516178],"origin":[-43.45370717498625,2.244971654592171,-9],"uv_offset":[0,161],"faces":{"north":{"uv":[4,165,6,167],"texture":0},"east":{"uv":[0,165,4,167],"texture":0},"south":{"uv":[10,165,12,167],"texture":0},"west":{"uv":[6,165,10,167],"texture":0},"up":{"uv":[6,165,4,161],"texture":0},"down":{"uv":[8,161,6,165],"texture":0}},"type":"cube","uuid":"232770e6-3ca5-d4da-cb44-cdc93df20cc1"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-47.907414349972484,-0.2953107286600396,-11],"to":[-45.907414349972484,0.7046892713399604,-7],"autouv":0,"color":0,"rotation":[6.678352476723515e-18,-57.500000000000306,-7.701545078646284e-33],"origin":[-43.45370717498625,2.244971654592171,-9],"uv_offset":[0,226],"faces":{"north":{"uv":[4,230,6,231],"texture":0},"east":{"uv":[0,230,4,231],"texture":0},"south":{"uv":[10,230,12,231],"texture":0},"west":{"uv":[6,230,10,231],"texture":0},"up":{"uv":[6,230,4,226],"texture":0},"down":{"uv":[8,226,6,230],"texture":0}},"type":"cube","uuid":"94b71c96-139c-79c5-df8b-7743bb215d0c"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-45.907414349972484,-0.2953107286600396,-12],"to":[-43.907414349972484,0.7046892713399604,-6],"autouv":0,"color":0,"rotation":[6.678352476723515e-18,-57.500000000000306,-7.701545078646284e-33],"origin":[-43.45370717498625,2.244971654592171,-9],"uv_offset":[56,298],"faces":{"north":{"uv":[62,304,64,305],"texture":0},"east":{"uv":[56,304,62,305],"texture":0},"south":{"uv":[70,304,72,305],"texture":0},"west":{"uv":[64,304,70,305],"texture":0},"up":{"uv":[64,304,62,298],"texture":0},"down":{"uv":[66,298,64,304],"texture":0}},"type":"cube","uuid":"543a620c-0c48-7477-f5d0-a93179465fbf"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-44.469914349972484,-0.2953107286600396,-13],"to":[-36.469914349972484,3.7046892713399604,-5],"autouv":0,"color":0,"rotation":[6.678352476723515e-18,-57.500000000000306,-7.701545078646284e-33],"origin":[-43.45370717498625,2.244971654592171,-9],"uv_offset":[160,313],"faces":{"north":{"uv":[168,321,176,325],"texture":0},"east":{"uv":[160,321,168,325],"texture":0},"south":{"uv":[184,321,192,325],"texture":0},"west":{"uv":[176,321,184,325],"texture":0},"up":{"uv":[176,321,168,313],"texture":0},"down":{"uv":[184,313,176,321],"texture":0}},"type":"cube","uuid":"592fea65-42be-8f2f-c2b1-e7bf8e1bdf6d"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-43.44256783258947,0.2850544418893226,5],"to":[-35.44256783258947,4.285054441889322,13],"autouv":0,"color":0,"rotation":[38.126340045758376,46.91980519468873,47.05781842911979],"origin":[-43.45370717498625,2.244971654592171,9],"uv_offset":[128,313],"faces":{"north":{"uv":[136,321,144,325],"texture":0},"east":{"uv":[128,321,136,325],"texture":0},"south":{"uv":[152,321,160,325],"texture":0},"west":{"uv":[144,321,152,325],"texture":0},"up":{"uv":[144,321,136,313],"texture":0},"down":{"uv":[152,313,144,321],"texture":0}},"type":"cube","uuid":"48653996-5f86-7273-5167-954758de7908"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-44.464101615137764,0.01730484541326227,5],"to":[-36.464101615137764,4.017304845413262,13],"autouv":0,"color":0,"rotation":[-6.678352476723515e-18,57.500000000000306,-7.701545078646284e-33],"origin":[-43.45370717498625,2.244971654592171,9],"uv_offset":[96,312],"faces":{"north":{"uv":[104,320,112,324],"texture":0},"east":{"uv":[96,320,104,324],"texture":0},"south":{"uv":[120,320,128,324],"texture":0},"west":{"uv":[112,320,120,324],"texture":0},"up":{"uv":[112,320,104,312],"texture":0},"down":{"uv":[120,312,112,320],"texture":0}},"type":"cube","uuid":"44ab1994-c9ad-0a3f-91f0-f5a9f90d57d0"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-46.442567832589475,1.2850544418893226,6],"to":[-43.44256783258947,4.285054441889322,12],"autouv":0,"color":0,"rotation":[38.126340045758376,46.91980519468873,47.05781842911979],"origin":[-43.45370717498625,2.244971654592171,9],"uv_offset":[332,200],"faces":{"north":{"uv":[338,206,341,209],"texture":0},"east":{"uv":[332,206,338,209],"texture":0},"south":{"uv":[347,206,350,209],"texture":0},"west":{"uv":[341,206,347,209],"texture":0},"up":{"uv":[341,206,338,200],"texture":0},"down":{"uv":[344,200,341,206],"texture":0}},"type":"cube","uuid":"9f98ac42-bd57-0240-b2a5-4262beeac7e5"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-46.731895077757855,3.6304496850633217,7],"to":[-44.731895077757855,5.630449685063322,11],"autouv":0,"color":0,"rotation":[54.89549437179885,20.881272338444834,75.93426731516178],"origin":[-43.45370717498625,2.244971654592171,9],"uv_offset":[0,155],"faces":{"north":{"uv":[4,159,6,161],"texture":0},"east":{"uv":[0,159,4,161],"texture":0},"south":{"uv":[10,159,12,161],"texture":0},"west":{"uv":[6,159,10,161],"texture":0},"up":{"uv":[6,159,4,155],"texture":0},"down":{"uv":[8,155,6,159],"texture":0}},"type":"cube","uuid":"cc92d339-959f-dd1b-a84a-963e29a82eb1"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-47.907414349972484,-0.2953107286600396,7],"to":[-45.907414349972484,0.7046892713399604,11],"autouv":0,"color":0,"rotation":[-6.678352476723515e-18,57.500000000000306,-7.701545078646284e-33],"origin":[-43.45370717498625,2.244971654592171,9],"uv_offset":[224,63],"faces":{"north":{"uv":[228,67,230,68],"texture":0},"east":{"uv":[224,67,228,68],"texture":0},"south":{"uv":[234,67,236,68],"texture":0},"west":{"uv":[230,67,234,68],"texture":0},"up":{"uv":[230,67,228,63],"texture":0},"down":{"uv":[232,63,230,67],"texture":0}},"type":"cube","uuid":"15e4c649-787e-df0e-0bf5-afeb9f1b3dca"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-45.907414349972484,-0.2953107286600396,6],"to":[-43.907414349972484,0.7046892713399604,12],"autouv":0,"color":0,"rotation":[-6.678352476723515e-18,57.500000000000306,-7.701545078646284e-33],"origin":[-43.45370717498625,2.244971654592171,9],"uv_offset":[24,298],"faces":{"north":{"uv":[30,304,32,305],"texture":0},"east":{"uv":[24,304,30,305],"texture":0},"south":{"uv":[38,304,40,305],"texture":0},"west":{"uv":[32,304,38,305],"texture":0},"up":{"uv":[32,304,30,298],"texture":0},"down":{"uv":[34,298,32,304],"texture":0}},"type":"cube","uuid":"7d9f17ca-3bab-1815-2edf-f8d4f382284c"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-44.469914349972484,-0.2953107286600396,5],"to":[-36.469914349972484,3.7046892713399604,13],"autouv":0,"color":0,"rotation":[-6.678352476723515e-18,57.500000000000306,-7.701545078646284e-33],"origin":[-43.45370717498625,2.244971654592171,9],"uv_offset":[310,309],"faces":{"north":{"uv":[318,317,326,321],"texture":0},"east":{"uv":[310,317,318,321],"texture":0},"south":{"uv":[334,317,342,321],"texture":0},"west":{"uv":[326,317,334,321],"texture":0},"up":{"uv":[326,317,318,309],"texture":0},"down":{"uv":[334,309,326,317],"texture":0}},"type":"cube","uuid":"0574d4a5-e3a8-486d-ea25-bb999c665dff"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-50.469914349972484,-0.2953107286600396,-4],"to":[-42.469914349972484,3.7046892713399604,4],"autouv":0,"color":0,"origin":[-49.407414349972484,-0.2953107286600378,-1],"uv_offset":[310,132],"faces":{"north":{"uv":[318,140,326,144],"texture":0},"east":{"uv":[310,140,318,144],"texture":0},"south":{"uv":[334,140,342,144],"texture":0},"west":{"uv":[326,140,334,144],"texture":0},"up":{"uv":[326,140,318,132],"texture":0},"down":{"uv":[334,132,326,140],"texture":0}},"type":"cube","uuid":"f4349477-9863-1b6f-ff88-e282a7986fd2"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-51.907414349972484,-0.2953107286600396,-3],"to":[-49.907414349972484,0.7046892713399604,3],"autouv":0,"color":0,"origin":[-49.407414349972484,-0.2953107286600378,-1],"uv_offset":[296,63],"faces":{"north":{"uv":[302,69,304,70],"texture":0},"east":{"uv":[296,69,302,70],"texture":0},"south":{"uv":[310,69,312,70],"texture":0},"west":{"uv":[304,69,310,70],"texture":0},"up":{"uv":[304,69,302,63],"texture":0},"down":{"uv":[306,63,304,69],"texture":0}},"type":"cube","uuid":"0c88ea64-1e64-ab91-5249-b5eb181d7fd7"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-53.907414349972484,-0.2953107286600396,-2],"to":[-51.907414349972484,0.7046892713399604,2],"autouv":0,"color":0,"origin":[-49.407414349972484,-0.2953107286600378,-1],"uv_offset":[0,221],"faces":{"north":{"uv":[4,225,6,226],"texture":0},"east":{"uv":[0,225,4,226],"texture":0},"south":{"uv":[10,225,12,226],"texture":0},"west":{"uv":[6,225,10,226],"texture":0},"up":{"uv":[6,225,4,221],"texture":0},"down":{"uv":[8,221,6,225],"texture":0}},"type":"cube","uuid":"0fff2fef-7105-e871-f00d-f55b585cc812"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-52.38348964502883,0.3126066413768869,-2],"to":[-50.38348964502883,2.312606641376887,2],"autouv":0,"color":0,"rotation":[0,0,65],"origin":[-51.88348964502883,0.31260664137688865,-1],"uv_offset":[143,110],"faces":{"north":{"uv":[147,114,149,116],"texture":0},"east":{"uv":[143,114,147,116],"texture":0},"south":{"uv":[153,114,155,116],"texture":0},"west":{"uv":[149,114,153,116],"texture":0},"up":{"uv":[149,114,147,110],"texture":0},"down":{"uv":[151,110,149,114],"texture":0}},"type":"cube","uuid":"94e53b1c-196a-9ff2-2bdc-41a143122283"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-53,3.285254037844382,-3],"to":[-50,6.285254037844382,3],"autouv":0,"color":0,"rotation":[0,0,30],"origin":[-46,4.285254037844385,0],"uv_offset":[332,188],"faces":{"north":{"uv":[338,194,341,197],"texture":0},"east":{"uv":[332,194,338,197],"texture":0},"south":{"uv":[347,194,350,197],"texture":0},"west":{"uv":[341,194,347,197],"texture":0},"up":{"uv":[341,194,338,188],"texture":0},"down":{"uv":[344,188,341,194],"texture":0}},"type":"cube","uuid":"6064062a-ce4f-3fd0-10f2-752b0ae6d312"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-50.464101615137764,0.01730484541326227,-4],"to":[-42.464101615137764,4.017304845413262,4],"autouv":0,"color":0,"origin":[-46.464101615137764,2.0173048454132623,0],"uv_offset":[310,120],"faces":{"north":{"uv":[318,128,326,132],"texture":0},"east":{"uv":[310,128,318,132],"texture":0},"south":{"uv":[334,128,342,132],"texture":0},"west":{"uv":[326,128,334,132],"texture":0},"up":{"uv":[326,128,318,120],"texture":0},"down":{"uv":[334,120,326,128],"texture":0}},"type":"cube","uuid":"3dfd1758-3102-63ef-2936-b87ed7a84ec1"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-50,2.285254037844382,-4],"to":[-42.00000000000001,6.285254037844382,4],"autouv":0,"color":0,"rotation":[0,0,30],"origin":[-46,4.285254037844385,0],"uv_offset":[310,108],"faces":{"north":{"uv":[318,116,326,120],"texture":0},"east":{"uv":[310,116,318,120],"texture":0},"south":{"uv":[334,116,342,120],"texture":0},"west":{"uv":[326,116,334,120],"texture":0},"up":{"uv":[326,116,318,108],"texture":0},"down":{"uv":[334,108,326,116],"texture":0}},"type":"cube","uuid":"8d882fe8-7547-c6fa-a35f-1c3391f67ac3"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-45,-0.3125,-7],"to":[-33,11.6875,7],"autouv":0,"color":0,"origin":[-1,0,-20],"uv_offset":[143,104],"faces":{"north":{"uv":[157,118,169,130],"texture":0},"east":{"uv":[143,118,157,130],"texture":0},"south":{"uv":[183,118,195,130],"texture":0},"west":{"uv":[169,118,183,130],"texture":0},"up":{"uv":[169,118,157,104],"texture":0},"down":{"uv":[181,104,169,118],"texture":0}},"type":"cube","uuid":"1607d473-450a-b153-0c80-fc96436bbbd8"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-35.667642159624684,4.6071735848675015,-35.05605098900145],"to":[-27.66764215962469,8.607173584867502,-27.05605098900145],"autouv":0,"color":0,"rotation":[19.295342735331328,-29.784009840892285,-35.176737775201914],"origin":[-36.95370717498624,9.003993353153962,-32.644969867117595],"uv_offset":[310,96],"faces":{"north":{"uv":[318,104,326,108],"texture":0},"east":{"uv":[310,104,318,108],"texture":0},"south":{"uv":[334,104,342,108],"texture":0},"west":{"uv":[326,104,334,108],"texture":0},"up":{"uv":[326,104,318,96],"texture":0},"down":{"uv":[334,96,326,104],"texture":0}},"type":"cube","uuid":"7066deb7-3547-8884-bea7-a4d94760db48"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-37.110148854632435,0.017304845413263714,-35.05605098900141],"to":[-29.110148854632435,4.017304845413264,-27.056050989001413],"autouv":0,"color":0,"rotation":[5.420233701831308e-14,-35.00000000000017,-6.161010322251864e-15],"origin":[-36.95370717498624,9.003993353153962,-32.644969867117595],"uv_offset":[64,310],"faces":{"north":{"uv":[72,318,80,322],"texture":0},"east":{"uv":[64,318,72,322],"texture":0},"south":{"uv":[88,318,96,322],"texture":0},"west":{"uv":[80,318,88,322],"texture":0},"up":{"uv":[80,318,72,310],"texture":0},"down":{"uv":[88,310,80,318],"texture":0}},"type":"cube","uuid":"42b12de0-bde7-bc22-e6c3-09ebf5b7221c"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-27.667642159624695,5.6071735848675015,-34.05605098900145],"to":[-24.667642159624695,8.607173584867502,-28.05605098900145],"autouv":0,"color":0,"rotation":[19.295342735331328,-29.784009840892285,-35.176737775201914],"origin":[-36.95370717498624,9.003993353153962,-32.644969867117595],"uv_offset":[332,176],"faces":{"north":{"uv":[338,182,341,185],"texture":0},"east":{"uv":[332,182,338,185],"texture":0},"south":{"uv":[347,182,350,185],"texture":0},"west":{"uv":[341,182,347,185],"texture":0},"up":{"uv":[341,182,338,176],"texture":0},"down":{"uv":[344,176,341,182],"texture":0}},"type":"cube","uuid":"fe7fbbc5-b11e-e7d8-512d-6ebdf8756f49"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-26.661945432817987,13.725935017036166,-33.05605098900135],"to":[-24.661945432817987,15.725935017036166,-29.056050989001353],"autouv":0,"color":0,"rotation":[32.39935655016129,-14.028462645392954,-69.09429953599829],"origin":[-36.95370717498624,9.003993353153962,-32.644969867117595],"uv_offset":[143,104],"faces":{"north":{"uv":[147,108,149,110],"texture":0},"east":{"uv":[143,108,147,110],"texture":0},"south":{"uv":[153,108,155,110],"texture":0},"west":{"uv":[149,108,153,110],"texture":0},"up":{"uv":[149,108,147,104],"texture":0},"down":{"uv":[151,104,149,108],"texture":0}},"type":"cube","uuid":"6f54ea13-ed2d-9386-5267-4a40d13249fc"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-27.666836119797715,-0.29531072866003816,-33.05605098900142],"to":[-25.666836119797715,0.7046892713399618,-29.05605098900142],"autouv":0,"color":0,"rotation":[5.420233701831308e-14,-35.00000000000017,-6.161010322251864e-15],"origin":[-36.95370717498624,9.003993353153962,-32.644969867117595],"uv_offset":[212,63],"faces":{"north":{"uv":[216,67,218,68],"texture":0},"east":{"uv":[212,67,216,68],"texture":0},"south":{"uv":[222,67,224,68],"texture":0},"west":{"uv":[218,67,222,68],"texture":0},"up":{"uv":[218,67,216,63],"texture":0},"down":{"uv":[220,63,218,67],"texture":0}},"type":"cube","uuid":"152f78c6-ac2a-9245-eff5-514da716b5b7"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-29.666836119797715,-0.29531072866003816,-34.05605098900142],"to":[-27.666836119797715,0.7046892713399618,-28.05605098900142],"autouv":0,"color":0,"rotation":[5.420233701831308e-14,-35.00000000000017,-6.161010322251864e-15],"origin":[-36.95370717498624,9.003993353153962,-32.644969867117595],"uv_offset":[254,295],"faces":{"north":{"uv":[260,301,262,302],"texture":0},"east":{"uv":[254,301,260,302],"texture":0},"south":{"uv":[268,301,270,302],"texture":0},"west":{"uv":[262,301,268,302],"texture":0},"up":{"uv":[262,301,260,295],"texture":0},"down":{"uv":[264,295,262,301],"texture":0}},"type":"cube","uuid":"ef9847b0-6b1c-9341-c14b-f2dfa18832be"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-37.104336119797715,-0.29531072866003816,-35.05605098900142],"to":[-29.104336119797715,3.7046892713399617,-27.05605098900142],"autouv":0,"color":0,"rotation":[5.420233701831308e-14,-35.00000000000017,-6.161010322251864e-15],"origin":[-36.95370717498624,9.003993353153962,-32.644969867117595],"uv_offset":[32,310],"faces":{"north":{"uv":[40,318,48,322],"texture":0},"east":{"uv":[32,318,40,322],"texture":0},"south":{"uv":[56,318,64,322],"texture":0},"west":{"uv":[48,318,56,322],"texture":0},"up":{"uv":[48,318,40,310],"texture":0},"down":{"uv":[56,310,48,318],"texture":0}},"type":"cube","uuid":"72366eea-e453-52d5-7458-e90a8d092fd7"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-43.746438417290264,18.556786474450394,-33.05605098900141],"to":[-33.746438417290264,22.556786474450394,-29.056050989001413],"autouv":0,"color":0,"rotation":[28.20866808810481,-21.634714886786412,-55.49730644801023],"origin":[-36.95370717498624,9.003993353153962,-32.644969867117595],"uv_offset":[150,262],"faces":{"north":{"uv":[154,266,164,270],"texture":0},"east":{"uv":[150,266,154,270],"texture":0},"south":{"uv":[168,266,178,270],"texture":0},"west":{"uv":[164,266,168,270],"texture":0},"up":{"uv":[164,266,154,262],"texture":0},"down":{"uv":[174,262,164,266],"texture":0}},"type":"cube","uuid":"202013b1-8ecc-68be-e669-84764990b991"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-27.574250469770202,12.6875,-33.05605098900141],"to":[-12.574250469770202,16.6875,-29.056050989001413],"autouv":0,"color":0,"rotation":[0,-35.00000000000003,0],"origin":[-36.95370717498624,9.003993353153962,-32.644969867117595],"uv_offset":[164,44],"faces":{"north":{"uv":[168,48,183,52],"texture":0},"east":{"uv":[164,48,168,52],"texture":0},"south":{"uv":[187,48,202,52],"texture":0},"west":{"uv":[183,48,187,52],"texture":0},"up":{"uv":[183,48,168,44],"texture":0},"down":{"uv":[198,44,183,48],"texture":0}},"type":"cube","uuid":"62ee84c7-1df1-36b3-475c-91de8aeaad9b"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-37.574250469770206,11.6875,-38.05605098900141],"to":[-30.574250469770206,23.6875,-24.056050989001413],"autouv":0,"color":0,"rotation":[0,-35.00000000000003,0],"origin":[-36.95370717498624,9.003993353153962,-32.644969867117595],"uv_offset":[208,192],"faces":{"north":{"uv":[222,206,229,218],"texture":0},"east":{"uv":[208,206,222,218],"texture":0},"south":{"uv":[243,206,250,218],"texture":0},"west":{"uv":[229,206,243,218],"texture":0},"up":{"uv":[229,206,222,192],"texture":0},"down":{"uv":[236,192,229,206],"texture":0}},"type":"cube","uuid":"c8472377-c7ef-114c-aa5c-d5bf59480df2"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-43.173345621020275,9.332341419728495,-38.05605098900141],"to":[-38.173345621020275,22.332341419728493,-24.056050989001413],"autouv":0,"color":0,"rotation":[15.00046142754923,-31.999747699873854,-26.82396215276299],"origin":[-36.95370717498624,9.003993353153962,-32.644969867117595],"uv_offset":[202,268],"faces":{"north":{"uv":[216,282,221,295],"texture":0},"east":{"uv":[202,282,216,295],"texture":0},"south":{"uv":[235,282,240,295],"texture":0},"west":{"uv":[221,282,235,295],"texture":0},"up":{"uv":[221,282,216,268],"texture":0},"down":{"uv":[226,268,221,282],"texture":0}},"type":"cube","uuid":"461233be-638f-5511-5868-d5d0c620b8e9"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-49.952018579128826,6.750440036728426,-34.3917358953929],"to":[-41.952018579128826,10.750440036728426,-26.3917358953929],"autouv":0,"color":0,"rotation":[11.700919508153738,19.354596151650917,32.00206341243393],"origin":[-36.95370717498624,9.003993353153962,-32.644969867117595],"uv_offset":[0,310],"faces":{"north":{"uv":[7.9999999999999964,318,15.999999999999996,322],"texture":0},"east":{"uv":[0,318,7.9999999999999964,322],"texture":0},"south":{"uv":[23.999999999999993,318,31.999999999999993,322],"texture":0},"west":{"uv":[15.999999999999996,318,23.999999999999993,322],"texture":0},"up":{"uv":[15.999999999999996,318,7.9999999999999964,310],"texture":0},"down":{"uv":[23.999999999999996,310,15.999999999999996,318],"texture":0}},"type":"cube","uuid":"69fc4267-42a0-1b7e-b372-d22de6d3cf61"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-49.08379839906193,0.01730484541326227,-34.39173589539287],"to":[-41.08379839906193,4.017304845413262,-26.39173589539287],"autouv":0,"color":0,"rotation":[-6.678352476723521e-18,22.50000000000034,-1.0450951327755264e-32],"origin":[-36.95370717498624,9.003993353153962,-32.644969867117595],"uv_offset":[278,309],"faces":{"north":{"uv":[286,317,294,321],"texture":0},"east":{"uv":[278,317,286,321],"texture":0},"south":{"uv":[302,317,310,321],"texture":0},"west":{"uv":[294,317,302,321],"texture":0},"up":{"uv":[294,317,286,309],"texture":0},"down":{"uv":[302,309,294,317],"texture":0}},"type":"cube","uuid":"be156cd9-8d53-f073-641d-50c86f685b57"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-52.95201857912883,7.750440036728426,-33.3917358953929],"to":[-49.952018579128826,10.750440036728426,-27.3917358953929],"autouv":0,"color":0,"rotation":[11.700919508153738,19.354596151650917,32.00206341243393],"origin":[-36.95370717498624,9.003993353153962,-32.644969867117595],"uv_offset":[332,44],"faces":{"north":{"uv":[338,50,341,53],"texture":0},"east":{"uv":[332,50,338,53],"texture":0},"south":{"uv":[347,50,350,53],"texture":0},"west":{"uv":[341,50,347,53],"texture":0},"up":{"uv":[341,50,338,44],"texture":0},"down":{"uv":[344,44,341,50],"texture":0}},"type":"cube","uuid":"59602358-3b15-2501-7fd3-6b2d6375374a"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-51.05703600181975,17.61085316706815,-32.39173589539287],"to":[-49.05703600181975,19.61085316706815,-28.391735895392866],"autouv":0,"color":0,"rotation":[20.576385285113936,9.307268232796186,66.69303765222317],"origin":[-36.95370717498624,9.003993353153962,-32.644969867117595],"uv_offset":[143,84],"faces":{"north":{"uv":[147,88,149,90],"texture":0},"east":{"uv":[143,88,147,90],"texture":0},"south":{"uv":[153,88,155,90],"texture":0},"west":{"uv":[149,88,153,90],"texture":0},"up":{"uv":[149,88,147,84],"texture":0},"down":{"uv":[151,84,149,88],"texture":0}},"type":"cube","uuid":"230f9e26-6cf7-9e2b-920d-b8d5d9b2ca32"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-52.52711113389665,-0.2953107286600396,-32.39173589539287],"to":[-50.52711113389665,0.7046892713399604,-28.39173589539287],"autouv":0,"color":0,"rotation":[-6.678352476723521e-18,22.50000000000034,-1.0450951327755264e-32],"origin":[-36.95370717498624,9.003993353153962,-32.644969867117595],"uv_offset":[46,211],"faces":{"north":{"uv":[50,215,52,216],"texture":0},"east":{"uv":[46,215,50,216],"texture":0},"south":{"uv":[56,215,58,216],"texture":0},"west":{"uv":[52,215,56,216],"texture":0},"up":{"uv":[52,215,50,211],"texture":0},"down":{"uv":[54,211,52,215],"texture":0}},"type":"cube","uuid":"054bedfe-287e-2809-f495-c6e488b45397"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-50.52711113389665,-0.2953107286600396,-33.39173589539287],"to":[-48.52711113389665,0.7046892713399604,-27.39173589539287],"autouv":0,"color":0,"rotation":[-6.678352476723521e-18,22.50000000000034,-1.0450951327755264e-32],"origin":[-36.95370717498624,9.003993353153962,-32.644969867117595],"uv_offset":[222,295],"faces":{"north":{"uv":[228,301,230,302],"texture":0},"east":{"uv":[222,301,228,302],"texture":0},"south":{"uv":[236,301,238,302],"texture":0},"west":{"uv":[230,301,236,302],"texture":0},"up":{"uv":[230,301,228,295],"texture":0},"down":{"uv":[232,295,230,301],"texture":0}},"type":"cube","uuid":"5cf3b277-d8f9-2cc0-d226-1d1585624fb8"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-49.08961113389665,-0.2953107286600396,-34.39173589539287],"to":[-41.08961113389665,3.7046892713399604,-26.39173589539287],"autouv":0,"color":0,"rotation":[-6.678352476723521e-18,22.50000000000034,-1.0450951327755264e-32],"origin":[-36.95370717498624,9.003993353153962,-32.644969867117595],"uv_offset":[308,260],"faces":{"north":{"uv":[316,268,324,272],"texture":0},"east":{"uv":[308,268,316,272],"texture":0},"south":{"uv":[332,268,340,272],"texture":0},"west":{"uv":[324,268,332,272],"texture":0},"up":{"uv":[324,268,316,260],"texture":0},"down":{"uv":[332,260,324,268],"texture":0}},"type":"cube","uuid":"83c3a882-83cd-ea71-e44e-8cf1f1a550ee"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-47.63093091119589,5.410359446834634,-37.19075285702891],"to":[-39.63093091119589,9.410359446834633,-29.190752857028908],"autouv":0,"color":0,"rotation":[-94.99051678989554,-59.90568069244192,94.32054514388427],"origin":[-36.95370717498624,9.003993353153962,-32.644969867117595],"uv_offset":[216,307],"faces":{"north":{"uv":[224,315,232,319],"texture":0},"east":{"uv":[216,315,224,319],"texture":0},"south":{"uv":[240,315,248,319],"texture":0},"west":{"uv":[232,315,240,319],"texture":0},"up":{"uv":[232,315,224,307],"texture":0},"down":{"uv":[240,307,232,315],"texture":0}},"type":"cube","uuid":"ffe93e17-967f-78b1-a453-8ff6511014a0"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-46.40363721927433,0.01730484541326227,-37.19075285702894],"to":[-38.40363721927433,4.017304845413262,-29.190752857028937],"autouv":0,"color":0,"rotation":[-180,-87.50000000000004,180],"origin":[-36.95370717498624,9.003993353153962,-32.644969867117595],"uv_offset":[184,307],"faces":{"north":{"uv":[192,315,200,319],"texture":0},"east":{"uv":[184,315,192,319],"texture":0},"south":{"uv":[208,315,216,319],"texture":0},"west":{"uv":[200,315,208,319],"texture":0},"up":{"uv":[200,315,192,307],"texture":0},"down":{"uv":[208,307,200,315],"texture":0}},"type":"cube","uuid":"ef3319e8-7d2b-4bd4-433a-885d42817dbf"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-50.63093091119589,6.410359446834634,-36.19075285702891],"to":[-47.63093091119588,9.410359446834633,-30.190752857028908],"autouv":0,"color":0,"rotation":[-94.99051678989554,-59.90568069244192,94.32054514388427],"origin":[-36.95370717498624,9.003993353153962,-32.644969867117595],"uv_offset":[332,20],"faces":{"north":{"uv":[338,26.000000000000004,341,29.000000000000004],"texture":0},"east":{"uv":[332,26.000000000000004,338,29.000000000000004],"texture":0},"south":{"uv":[347,26.000000000000004,350,29.000000000000004],"texture":0},"west":{"uv":[341,26.000000000000004,347,29.000000000000004],"texture":0},"up":{"uv":[341,26.000000000000004,338,20],"texture":0},"down":{"uv":[344,20,341,26.000000000000004],"texture":0}},"type":"cube","uuid":"8c85391d-01c8-d8c4-03e5-156ee992908f"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-49.92435094283302,15.181802219313315,-35.19075285702893],"to":[-47.92435094283302,17.181802219313315,-31.190752857028933],"autouv":0,"color":0,"rotation":[-92.75806438933462,-24.974573527445862,91.16523859501446],"origin":[-36.95370717498624,9.003993353153962,-32.644969867117595],"uv_offset":[143,78],"faces":{"north":{"uv":[147,82,149,84],"texture":0},"east":{"uv":[143,82,147,84],"texture":0},"south":{"uv":[153,82,155,84],"texture":0},"west":{"uv":[149,82,153,84],"texture":0},"up":{"uv":[149,82,147,78],"texture":0},"down":{"uv":[151,78,149,82],"texture":0}},"type":"cube","uuid":"6ab02939-baf7-e2b1-9b20-db2c69f0866b"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-49.84694995410905,-0.2953107286600396,-35.19075285702894],"to":[-47.84694995410905,0.7046892713399604,-31.190752857028937],"autouv":0,"color":0,"rotation":[-180,-87.50000000000004,180],"origin":[-36.95370717498624,9.003993353153962,-32.644969867117595],"uv_offset":[34,211],"faces":{"north":{"uv":[38,215,40,216],"texture":0},"east":{"uv":[34,215,38,216],"texture":0},"south":{"uv":[44.00000000000001,215,46.00000000000001,216],"texture":0},"west":{"uv":[40,215,44.00000000000001,216],"texture":0},"up":{"uv":[40,215,38,211],"texture":0},"down":{"uv":[42,211,40,215],"texture":0}},"type":"cube","uuid":"c847d5a6-d43a-bb2e-1282-9dc47b69a60c"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-47.84694995410905,-0.2953107286600396,-36.19075285702894],"to":[-45.84694995410905,0.7046892713399604,-30.190752857028937],"autouv":0,"color":0,"rotation":[-180,-87.50000000000004,180],"origin":[-36.95370717498624,9.003993353153962,-32.644969867117595],"uv_offset":[166,289],"faces":{"north":{"uv":[172,295,174,296],"texture":0},"east":{"uv":[166,295,172,296],"texture":0},"south":{"uv":[180,295,182,296],"texture":0},"west":{"uv":[174,295,180,296],"texture":0},"up":{"uv":[174,295,172,289],"texture":0},"down":{"uv":[176,289,174,295],"texture":0}},"type":"cube","uuid":"74e4e526-261d-682a-96f2-c4c167076ebe"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-46.40944995410905,-0.2953107286600396,-37.19075285702894],"to":[-38.40944995410905,3.7046892713399604,-29.190752857028937],"autouv":0,"color":0,"rotation":[-180,-87.50000000000004,180],"origin":[-36.95370717498624,9.003993353153962,-32.644969867117595],"uv_offset":[306,273],"faces":{"north":{"uv":[314,281,322,285],"texture":0},"east":{"uv":[306,281,314,285],"texture":0},"south":{"uv":[330,281,338,285],"texture":0},"west":{"uv":[322,281,330,285],"texture":0},"up":{"uv":[322,281,314,273],"texture":0},"down":{"uv":[330,273,322,281],"texture":0}},"type":"cube","uuid":"02702ec3-cce1-9bb2-ae06-92d4fafb9322"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-48.04416481974269,-0.2953107286600396,-35.05605098900141],"to":[-40.04416481974269,3.7046892713399604,-27.056050989001413],"autouv":0,"color":0,"rotation":[0,-35.00000000000003,0],"origin":[-36.95370717498624,9.003993353153962,-32.644969867117595],"uv_offset":[306,218],"faces":{"north":{"uv":[314,226,322,230],"texture":0},"east":{"uv":[306,226,314,230],"texture":0},"south":{"uv":[330,226,338,230],"texture":0},"west":{"uv":[322,226,330,230],"texture":0},"up":{"uv":[322,226,314,218],"texture":0},"down":{"uv":[330,218,322,226],"texture":0}},"type":"cube","uuid":"9d65b17b-444b-94df-ae6d-2518aefbd816"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-49.48166481974269,-0.2953107286600396,-34.05605098900141],"to":[-47.48166481974269,0.7046892713399604,-28.056050989001413],"autouv":0,"color":0,"rotation":[0,-35.00000000000003,0],"origin":[-36.95370717498624,9.003993353153962,-32.644969867117595],"uv_offset":[134,288],"faces":{"north":{"uv":[140,294,142,295],"texture":0},"east":{"uv":[134,294,140,295],"texture":0},"south":{"uv":[148,294,150,295],"texture":0},"west":{"uv":[142,294,148,295],"texture":0},"up":{"uv":[142,294,140,288],"texture":0},"down":{"uv":[144,288,142,294],"texture":0}},"type":"cube","uuid":"1f7bc007-fa3e-aa43-e5a3-caf1821e7ebf"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-51.48166481974269,-0.2953107286600396,-33.05605098900141],"to":[-49.48166481974269,0.7046892713399604,-29.056050989001413],"autouv":0,"color":0,"rotation":[0,-35.00000000000003,0],"origin":[-36.95370717498624,9.003993353153962,-32.644969867117595],"uv_offset":[208,197],"faces":{"north":{"uv":[212,201,214,202],"texture":0},"east":{"uv":[208,201,212,202],"texture":0},"south":{"uv":[218,201,220,202],"texture":0},"west":{"uv":[214,201,218,202],"texture":0},"up":{"uv":[214,201,212,197],"texture":0},"down":{"uv":[216,197,214,201],"texture":0}},"type":"cube","uuid":"13afbd27-11fc-d25e-02e1-0fe672a8cc43"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-50.6152112977888,16.663357031621633,-33.05605098900141],"to":[-48.6152112977888,18.663357031621633,-29.056050989001413],"autouv":0,"color":0,"rotation":[-32.39935655016117,-14.028462645393255,69.09429953599825],"origin":[-36.95370717498624,9.003993353153962,-32.644969867117595],"uv_offset":[0,110],"faces":{"north":{"uv":[4,114,6,116],"texture":0},"east":{"uv":[0,114,4,116],"texture":0},"south":{"uv":[10,114,12,116],"texture":0},"west":{"uv":[6,114,10,116],"texture":0},"up":{"uv":[6,114,4,110],"texture":0},"down":{"uv":[8,110,6,114],"texture":0}},"type":"cube","uuid":"c3cd9e6e-5afb-04b8-cd95-2f3124050b61"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-52.04663551277867,7.227716879651458,-34.05605098900141],"to":[-49.04663551277867,10.22771687965146,-28.056050989001413],"autouv":0,"color":0,"rotation":[-19.295342735331264,-29.784009840891997,35.176737775201744],"origin":[-36.95370717498624,9.003993353153962,-32.644969867117595],"uv_offset":[204,331],"faces":{"north":{"uv":[210,337,213,340],"texture":0},"east":{"uv":[204,337,210,340],"texture":0},"south":{"uv":[219,337,222,340],"texture":0},"west":{"uv":[213,337,219,340],"texture":0},"up":{"uv":[213,337,210,331],"texture":0},"down":{"uv":[216,331,213,337],"texture":0}},"type":"cube","uuid":"1815a980-4878-0c37-dc17-2a990f965423"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-48.03835208490797,0.01730484541326227,-35.05605098900141],"to":[-40.03835208490797,4.017304845413262,-27.056050989001413],"autouv":0,"color":0,"rotation":[0,-35.00000000000003,0],"origin":[-36.95370717498624,9.003993353153962,-32.644969867117595],"uv_offset":[306,206],"faces":{"north":{"uv":[314,214,322,218],"texture":0},"east":{"uv":[306,214,314,218],"texture":0},"south":{"uv":[330,214,338,218],"texture":0},"west":{"uv":[322,214,330,218],"texture":0},"up":{"uv":[322,214,314,206],"texture":0},"down":{"uv":[330,206,322,214],"texture":0}},"type":"cube","uuid":"9f191201-3f8d-e392-0f66-1778af110a4c"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-49.04663551277867,6.227716879651458,-35.05605098900141],"to":[-41.04663551277868,10.22771687965146,-27.056050989001413],"autouv":0,"color":0,"rotation":[-19.295342735331264,-29.784009840891997,35.176737775201744],"origin":[-36.95370717498624,9.003993353153962,-32.644969867117595],"uv_offset":[306,194],"faces":{"north":{"uv":[314,202,322,206],"texture":0},"east":{"uv":[306,202,314,206],"texture":0},"south":{"uv":[330,202,338,206],"texture":0},"west":{"uv":[322,202,330,206],"texture":0},"up":{"uv":[322,202,314,194],"texture":0},"down":{"uv":[330,194,322,202],"texture":0}},"type":"cube","uuid":"54ebeabc-1e75-2576-f10a-8c21a69ead4a"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-42.574250469770206,-0.3125,-38.05605098900141],"to":[-30.574250469770206,11.6875,-24.056050989001413],"autouv":0,"color":0,"rotation":[0,-35.00000000000003,0],"origin":[-36.95370717498624,9.003993353153962,-32.644969867117595],"uv_offset":[143,78],"faces":{"north":{"uv":[157,92,169,104],"texture":0},"east":{"uv":[143,92,157,104],"texture":0},"south":{"uv":[183,92,195,104],"texture":0},"west":{"uv":[169,92,183,104],"texture":0},"up":{"uv":[169,92,157,78],"texture":0},"down":{"uv":[181,78,169,92],"texture":0}},"type":"cube","uuid":"f16ec369-e42e-73b2-5583-1a62936b2c74"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[30.574250469770206,-0.3125,-38.05605098900141],"to":[42.574250469770206,11.6875,-24.056050989001413],"autouv":0,"color":0,"rotation":[0,35.00000000000003,0],"origin":[36.95370717498624,9.003993353153962,-32.644969867117595],"uv_offset":[0,104],"faces":{"north":{"uv":[14,118,26,130],"texture":0},"east":{"uv":[0,118,14,130],"texture":0},"south":{"uv":[40,118,52,130],"texture":0},"west":{"uv":[26,118,40,130],"texture":0},"up":{"uv":[26,118,14,104],"texture":0},"down":{"uv":[38,104,26,118],"texture":0}},"type":"cube","uuid":"c38c50b0-ac83-a802-1bc8-9372778ffccc"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[41.04663551277868,6.227716879651458,-35.05605098900141],"to":[49.04663551277867,10.22771687965146,-27.056050989001413],"autouv":0,"color":0,"rotation":[-19.295342735331264,29.784009840891997,-35.176737775201744],"origin":[36.95370717498624,9.003993353153962,-32.644969867117595],"uv_offset":[306,182],"faces":{"north":{"uv":[314,190,322,194],"texture":0},"east":{"uv":[306,190,314,194],"texture":0},"south":{"uv":[330,190,338,194],"texture":0},"west":{"uv":[322,190,330,194],"texture":0},"up":{"uv":[322,190,314,182],"texture":0},"down":{"uv":[330,182,322,190],"texture":0}},"type":"cube","uuid":"dc1ace27-b9ce-e5d5-0704-4a2603e0ea75"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[40.03835208490797,0.01730484541326227,-35.05605098900141],"to":[48.03835208490797,4.017304845413262,-27.056050989001413],"autouv":0,"color":0,"rotation":[0,35.00000000000003,0],"origin":[36.95370717498624,9.003993353153962,-32.644969867117595],"uv_offset":[306,170],"faces":{"north":{"uv":[314,178,322,182],"texture":0},"east":{"uv":[306,178,314,182],"texture":0},"south":{"uv":[330,178,338,182],"texture":0},"west":{"uv":[322,178,330,182],"texture":0},"up":{"uv":[322,178,314,170],"texture":0},"down":{"uv":[330,170,322,178],"texture":0}},"type":"cube","uuid":"a6d455ac-9c19-407c-65be-27d0c4fecff6"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[49.04663551277867,7.227716879651458,-34.05605098900141],"to":[52.04663551277867,10.22771687965146,-28.056050989001413],"autouv":0,"color":0,"rotation":[-19.295342735331264,29.784009840891997,-35.176737775201744],"origin":[36.95370717498624,9.003993353153962,-32.644969867117595],"uv_offset":[186,331],"faces":{"north":{"uv":[192,337,195,340],"texture":0},"east":{"uv":[186,337,192,340],"texture":0},"south":{"uv":[201,337,204,340],"texture":0},"west":{"uv":[195,337,201,340],"texture":0},"up":{"uv":[195,337,192,331],"texture":0},"down":{"uv":[198,331,195,337],"texture":0}},"type":"cube","uuid":"83e6a221-98f5-d66e-edb8-ef0819524e5e"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[48.6152112977888,16.663357031621633,-33.05605098900141],"to":[50.6152112977888,18.663357031621633,-29.056050989001413],"autouv":0,"color":0,"rotation":[-32.39935655016117,14.028462645393255,-69.09429953599825],"origin":[36.95370717498624,9.003993353153962,-32.644969867117595],"uv_offset":[0,104],"faces":{"north":{"uv":[4,108,6,110],"texture":0},"east":{"uv":[0,108,4,110],"texture":0},"south":{"uv":[10,108,12,110],"texture":0},"west":{"uv":[6,108,10,110],"texture":0},"up":{"uv":[6,108,4,104],"texture":0},"down":{"uv":[8,104,6,108],"texture":0}},"type":"cube","uuid":"7cac05cd-b09b-c003-c4ae-663cc4636f86"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[49.48166481974269,-0.2953107286600396,-33.05605098900141],"to":[51.48166481974269,0.7046892713399604,-29.056050989001413],"autouv":0,"color":0,"rotation":[0,35.00000000000003,0],"origin":[36.95370717498624,9.003993353153962,-32.644969867117595],"uv_offset":[208,192],"faces":{"north":{"uv":[212,196,214,197],"texture":0},"east":{"uv":[208,196,212,197],"texture":0},"south":{"uv":[218,196,220,197],"texture":0},"west":{"uv":[214,196,218,197],"texture":0},"up":{"uv":[214,196,212,192],"texture":0},"down":{"uv":[216,192,214,196],"texture":0}},"type":"cube","uuid":"441045b6-cd3c-c110-7cf2-9da5ee05ee63"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[47.48166481974269,-0.2953107286600396,-34.05605098900141],"to":[49.48166481974269,0.7046892713399604,-28.056050989001413],"autouv":0,"color":0,"rotation":[0,35.00000000000003,0],"origin":[36.95370717498624,9.003993353153962,-32.644969867117595],"uv_offset":[280,63],"faces":{"north":{"uv":[286,69,288,70],"texture":0},"east":{"uv":[280,69,286,70],"texture":0},"south":{"uv":[294,69,296,70],"texture":0},"west":{"uv":[288,69,294,70],"texture":0},"up":{"uv":[288,69,286,63],"texture":0},"down":{"uv":[290,63,288,69],"texture":0}},"type":"cube","uuid":"7bd6118c-6524-a58a-3109-c6ea65ff53d4"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[40.04416481974269,-0.2953107286600396,-35.05605098900141],"to":[48.04416481974269,3.7046892713399604,-27.056050989001413],"autouv":0,"color":0,"rotation":[0,35.00000000000003,0],"origin":[36.95370717498624,9.003993353153962,-32.644969867117595],"uv_offset":[306,14],"faces":{"north":{"uv":[314,22,322,26],"texture":0},"east":{"uv":[306,22,314,26],"texture":0},"south":{"uv":[330,22,338,26],"texture":0},"west":{"uv":[322,22,330,26],"texture":0},"up":{"uv":[322,22,314,14],"texture":0},"down":{"uv":[330,14,322,22],"texture":0}},"type":"cube","uuid":"b451b336-355b-edef-5e56-8ef98514edfd"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[38.40944995410905,-0.2953107286600396,-37.19075285702894],"to":[46.40944995410905,3.7046892713399604,-29.190752857028937],"autouv":0,"color":0,"rotation":[-180,87.50000000000004,-180],"origin":[36.95370717498624,9.003993353153962,-32.644969867117595],"uv_offset":[254,305],"faces":{"north":{"uv":[262,313,270,317],"texture":0},"east":{"uv":[254,313,262,317],"texture":0},"south":{"uv":[278,313,286,317],"texture":0},"west":{"uv":[270,313,278,317],"texture":0},"up":{"uv":[270,313,262,305],"texture":0},"down":{"uv":[278,305,270,313],"texture":0}},"type":"cube","uuid":"c014f0f0-c01c-54ee-dd77-e344d9524fa8"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[45.84694995410905,-0.2953107286600396,-36.19075285702894],"to":[47.84694995410905,0.7046892713399604,-30.190752857028937],"autouv":0,"color":0,"rotation":[-180,87.50000000000004,-180],"origin":[36.95370717498624,9.003993353153962,-32.644969867117595],"uv_offset":[264,63],"faces":{"north":{"uv":[270,69,272,70],"texture":0},"east":{"uv":[264,69,270,70],"texture":0},"south":{"uv":[278,69,280,70],"texture":0},"west":{"uv":[272,69,278,70],"texture":0},"up":{"uv":[272,69,270,63],"texture":0},"down":{"uv":[274,63,272,69],"texture":0}},"type":"cube","uuid":"96236ba1-bca3-47f9-dc85-a33324a10569"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[47.84694995410905,-0.2953107286600396,-35.19075285702894],"to":[49.84694995410905,0.7046892713399604,-31.190752857028937],"autouv":0,"color":0,"rotation":[-180,87.50000000000004,-180],"origin":[36.95370717498624,9.003993353153962,-32.644969867117595],"uv_offset":[208,171],"faces":{"north":{"uv":[212,175,214,176],"texture":0},"east":{"uv":[208,175,212,176],"texture":0},"south":{"uv":[218,175,220,176],"texture":0},"west":{"uv":[214,175,218,176],"texture":0},"up":{"uv":[214,175,212,171],"texture":0},"down":{"uv":[216,171,214,175],"texture":0}},"type":"cube","uuid":"64748d78-5c2d-e6ec-1cac-9fa178fa8566"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[47.92435094283302,15.181802219313315,-35.19075285702893],"to":[49.92435094283302,17.181802219313315,-31.190752857028933],"autouv":0,"color":0,"rotation":[-92.75806438933462,24.974573527445862,-91.16523859501446],"origin":[36.95370717498624,9.003993353153962,-32.644969867117595],"uv_offset":[0,84],"faces":{"north":{"uv":[4,88,6,90],"texture":0},"east":{"uv":[0,88,4,90],"texture":0},"south":{"uv":[10,88,12,90],"texture":0},"west":{"uv":[6,88,10,90],"texture":0},"up":{"uv":[6,88,4,84],"texture":0},"down":{"uv":[8,84,6,88],"texture":0}},"type":"cube","uuid":"a3a59bb5-b94c-fa15-7ff8-14e43167f6c9"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[47.63093091119588,6.410359446834634,-36.19075285702891],"to":[50.63093091119589,9.410359446834633,-30.190752857028908],"autouv":0,"color":0,"rotation":[-94.99051678989554,59.90568069244192,-94.32054514388427],"origin":[36.95370717498624,9.003993353153962,-32.644969867117595],"uv_offset":[330,272],"faces":{"north":{"uv":[336,278,339,281],"texture":0},"east":{"uv":[330,278,336,281],"texture":0},"south":{"uv":[345,278,348,281],"texture":0},"west":{"uv":[339,278,345,281],"texture":0},"up":{"uv":[339,278,336,272],"texture":0},"down":{"uv":[342,272,339,278],"texture":0}},"type":"cube","uuid":"57030e77-c041-8add-e061-1ce76c727206"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[38.40363721927433,0.01730484541326227,-37.19075285702894],"to":[46.40363721927433,4.017304845413262,-29.190752857028937],"autouv":0,"color":0,"rotation":[-180,87.50000000000004,-180],"origin":[36.95370717498624,9.003993353153962,-32.644969867117595],"uv_offset":[304,38],"faces":{"north":{"uv":[312,46,320,50],"texture":0},"east":{"uv":[304,46,312,50],"texture":0},"south":{"uv":[328,46,336,50],"texture":0},"west":{"uv":[320,46,328,50],"texture":0},"up":{"uv":[320,46,312,38],"texture":0},"down":{"uv":[328,38,320,46],"texture":0}},"type":"cube","uuid":"41310ca2-e92b-29e3-1713-5ebfe9e39b5e"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[39.63093091119589,5.410359446834634,-37.19075285702891],"to":[47.63093091119589,9.410359446834633,-29.190752857028908],"autouv":0,"color":0,"rotation":[-94.99051678989554,59.90568069244192,-94.32054514388427],"origin":[36.95370717498624,9.003993353153962,-32.644969867117595],"uv_offset":[304,26],"faces":{"north":{"uv":[312,34,320,38],"texture":0},"east":{"uv":[304,34,312,38],"texture":0},"south":{"uv":[328,34,336,38],"texture":0},"west":{"uv":[320,34,328,38],"texture":0},"up":{"uv":[320,34,312,26],"texture":0},"down":{"uv":[328,26,320,34],"texture":0}},"type":"cube","uuid":"4edcdec1-b347-f2bb-b294-50c8921b01d2"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[41.08961113389665,-0.2953107286600396,-34.39173589539287],"to":[49.08961113389665,3.7046892713399604,-26.39173589539287],"autouv":0,"color":0,"rotation":[-6.678352476723521e-18,-22.50000000000034,1.0450951327755264e-32],"origin":[36.95370717498624,9.003993353153962,-32.644969867117595],"uv_offset":[302,285],"faces":{"north":{"uv":[310,293,318,297],"texture":0},"east":{"uv":[302,293,310,297],"texture":0},"south":{"uv":[326,293,334,297],"texture":0},"west":{"uv":[318,293,326,297],"texture":0},"up":{"uv":[318,293,310,285],"texture":0},"down":{"uv":[326,285,318,293],"texture":0}},"type":"cube","uuid":"b1a6c8fa-304d-19b7-f4e2-c37298aaf46f"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[48.52711113389665,-0.2953107286600396,-33.39173589539287],"to":[50.52711113389665,0.7046892713399604,-27.39173589539287],"autouv":0,"color":0,"rotation":[-6.678352476723521e-18,-22.50000000000034,1.0450951327755264e-32],"origin":[36.95370717498624,9.003993353153962,-32.644969867117595],"uv_offset":[260,212],"faces":{"north":{"uv":[266,218,268,219],"texture":0},"east":{"uv":[260,218,266,219],"texture":0},"south":{"uv":[274,218,276,219],"texture":0},"west":{"uv":[268,218,274,219],"texture":0},"up":{"uv":[268,218,266,212],"texture":0},"down":{"uv":[270,212,268,218],"texture":0}},"type":"cube","uuid":"6de6119e-032f-be6f-8051-e3b5da01fca9"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[50.52711113389665,-0.2953107286600396,-32.39173589539287],"to":[52.52711113389665,0.7046892713399604,-28.39173589539287],"autouv":0,"color":0,"rotation":[-6.678352476723521e-18,-22.50000000000034,1.0450951327755264e-32],"origin":[36.95370717498624,9.003993353153962,-32.644969867117595],"uv_offset":[208,166],"faces":{"north":{"uv":[212,170,214,171],"texture":0},"east":{"uv":[208,170,212,171],"texture":0},"south":{"uv":[218,170,220,171],"texture":0},"west":{"uv":[214,170,218,171],"texture":0},"up":{"uv":[214,170,212,166],"texture":0},"down":{"uv":[216,166,214,170],"texture":0}},"type":"cube","uuid":"b72448e3-dbbd-f0c2-f390-bf7ff5022002"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[49.05703600181975,17.61085316706815,-32.39173589539287],"to":[51.05703600181975,19.61085316706815,-28.391735895392866],"autouv":0,"color":0,"rotation":[20.576385285113936,-9.307268232796186,-66.69303765222317],"origin":[36.95370717498624,9.003993353153962,-32.644969867117595],"uv_offset":[0,78],"faces":{"north":{"uv":[4.0000000000000036,82,6.0000000000000036,84],"texture":0},"east":{"uv":[0,82,4.0000000000000036,84],"texture":0},"south":{"uv":[10.000000000000007,82,12.000000000000007,84],"texture":0},"west":{"uv":[6.0000000000000036,82,10.000000000000007,84],"texture":0},"up":{"uv":[6.0000000000000036,82,4.0000000000000036,78],"texture":0},"down":{"uv":[8.000000000000004,78,6.0000000000000036,82],"texture":0}},"type":"cube","uuid":"59408ce5-c286-7d8b-9027-d1d757c4ae81"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[49.952018579128826,7.750440036728426,-33.3917358953929],"to":[52.95201857912883,10.750440036728426,-27.3917358953929],"autouv":0,"color":0,"rotation":[11.700919508153738,-19.354596151650917,-32.00206341243393],"origin":[36.95370717498624,9.003993353153962,-32.644969867117595],"uv_offset":[330,166],"faces":{"north":{"uv":[336,172,339,175],"texture":0},"east":{"uv":[330,172,336,175],"texture":0},"south":{"uv":[345,172,348,175],"texture":0},"west":{"uv":[339,172,345,175],"texture":0},"up":{"uv":[339,172,336,166],"texture":0},"down":{"uv":[342,166,339,172],"texture":0}},"type":"cube","uuid":"eb48d141-9af8-b398-1afc-04a5fafd3fb6"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[41.08379839906193,0.01730484541326227,-34.39173589539287],"to":[49.08379839906193,4.017304845413262,-26.39173589539287],"autouv":0,"color":0,"rotation":[-6.678352476723521e-18,-22.50000000000034,1.0450951327755264e-32],"origin":[36.95370717498624,9.003993353153962,-32.644969867117595],"uv_offset":[160,301],"faces":{"north":{"uv":[168,309,176,313],"texture":0},"east":{"uv":[160,309,168,313],"texture":0},"south":{"uv":[184,309,192,313],"texture":0},"west":{"uv":[176,309,184,313],"texture":0},"up":{"uv":[176,309,168,301],"texture":0},"down":{"uv":[184,301,176,309],"texture":0}},"type":"cube","uuid":"993bb223-93ee-7728-8617-b8e765defac3"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[41.952018579128826,6.750440036728426,-34.3917358953929],"to":[49.952018579128826,10.750440036728426,-26.3917358953929],"autouv":0,"color":0,"rotation":[11.700919508153738,-19.354596151650917,-32.00206341243393],"origin":[36.95370717498624,9.003993353153962,-32.644969867117595],"uv_offset":[128,301],"faces":{"north":{"uv":[136,309,144,313],"texture":0},"east":{"uv":[128,309,136,313],"texture":0},"south":{"uv":[152,309,160,313],"texture":0},"west":{"uv":[144,309,152,313],"texture":0},"up":{"uv":[144,309,136,301],"texture":0},"down":{"uv":[152,301,144,309],"texture":0}},"type":"cube","uuid":"cd146e93-a5f1-6017-54e8-08d6052efa15"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[38.173345621020275,9.332341419728495,-38.05605098900141],"to":[43.173345621020275,22.332341419728493,-24.056050989001413],"autouv":0,"color":0,"rotation":[15.00046142754923,31.999747699873854,26.82396215276299],"origin":[36.95370717498624,9.003993353153962,-32.644969867117595],"uv_offset":[164,262],"faces":{"north":{"uv":[178,276,183,289],"texture":0},"east":{"uv":[164,276,178,289],"texture":0},"south":{"uv":[197,276,202,289],"texture":0},"west":{"uv":[183,276,197,289],"texture":0},"up":{"uv":[183,276,178,262],"texture":0},"down":{"uv":[188,262,183,276],"texture":0}},"type":"cube","uuid":"75396845-e823-9641-faf2-c2fe1990eb76"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[30.574250469770206,11.6875,-38.05605098900141],"to":[37.574250469770206,23.6875,-24.056050989001413],"autouv":0,"color":0,"rotation":[0,35.00000000000003,0],"origin":[36.95370717498624,9.003993353153962,-32.644969867117595],"uv_offset":[208,166],"faces":{"north":{"uv":[222,180,229,192],"texture":0},"east":{"uv":[208,180,222,192],"texture":0},"south":{"uv":[243,180,250,192],"texture":0},"west":{"uv":[229,180,243,192],"texture":0},"up":{"uv":[229,180,222,166],"texture":0},"down":{"uv":[236,166,229,180],"texture":0}},"type":"cube","uuid":"58fc4942-fa4c-c7cd-7446-b685855d648f"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[12.574250469770202,12.6875,-33.05605098900141],"to":[27.574250469770202,16.6875,-29.056050989001413],"autouv":0,"color":0,"rotation":[0,35.00000000000003,0],"origin":[36.95370717498624,9.003993353153962,-32.644969867117595],"uv_offset":[143,130],"faces":{"north":{"uv":[147,134,162,138],"texture":0},"east":{"uv":[143,134,147,138],"texture":0},"south":{"uv":[166,134,181,138],"texture":0},"west":{"uv":[162,134,166,138],"texture":0},"up":{"uv":[162,134,147,130],"texture":0},"down":{"uv":[177,130,162,134],"texture":0}},"type":"cube","uuid":"38f28f4e-ff1e-28f4-7703-66d3ecd83532"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[33.746438417290264,18.556786474450394,-33.05605098900141],"to":[43.746438417290264,22.556786474450394,-29.056050989001413],"autouv":0,"color":0,"rotation":[28.20866808810481,21.634714886786412,55.49730644801023],"origin":[36.95370717498624,9.003993353153962,-32.644969867117595],"uv_offset":[92,231],"faces":{"north":{"uv":[96,235,106,239],"texture":0},"east":{"uv":[92,235,96,239],"texture":0},"south":{"uv":[110,235,120,239],"texture":0},"west":{"uv":[106,235,110,239],"texture":0},"up":{"uv":[106,235,96,231],"texture":0},"down":{"uv":[116,231,106,235],"texture":0}},"type":"cube","uuid":"d8f309d8-abf2-dc38-6d29-3ee1057cb19f"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[29.104336119797715,-0.29531072866003816,-35.05605098900142],"to":[37.104336119797715,3.7046892713399617,-27.05605098900142],"autouv":0,"color":0,"rotation":[5.420233701831308e-14,35.00000000000017,6.161010322251864e-15],"origin":[36.95370717498624,9.003993353153962,-32.644969867117595],"uv_offset":[96,300],"faces":{"north":{"uv":[104,308,112,312],"texture":0},"east":{"uv":[96,308,104,312],"texture":0},"south":{"uv":[120,308,128,312],"texture":0},"west":{"uv":[112,308,120,312],"texture":0},"up":{"uv":[112,308,104,300],"texture":0},"down":{"uv":[120,300,112,308],"texture":0}},"type":"cube","uuid":"5e8270ac-c195-9cc0-b78c-bbffa8b327d7"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[27.666836119797715,-0.29531072866003816,-34.05605098900142],"to":[29.666836119797715,0.7046892713399618,-28.05605098900142],"autouv":0,"color":0,"rotation":[5.420233701831308e-14,35.00000000000017,6.161010322251864e-15],"origin":[36.95370717498624,9.003993353153962,-32.644969867117595],"uv_offset":[260,205],"faces":{"north":{"uv":[266,211,268,212],"texture":0},"east":{"uv":[260,211,266,212],"texture":0},"south":{"uv":[274,211,276,212],"texture":0},"west":{"uv":[268,211,274,212],"texture":0},"up":{"uv":[268,211,266,205],"texture":0},"down":{"uv":[270,205,268,211],"texture":0}},"type":"cube","uuid":"66681aad-e11f-8fd0-e807-2e754138e084"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[25.666836119797715,-0.29531072866003816,-33.05605098900142],"to":[27.666836119797715,0.7046892713399618,-29.05605098900142],"autouv":0,"color":0,"rotation":[5.420233701831308e-14,35.00000000000017,6.161010322251864e-15],"origin":[36.95370717498624,9.003993353153962,-32.644969867117595],"uv_offset":[48,202],"faces":{"north":{"uv":[52,206,54,207],"texture":0},"east":{"uv":[48,206,52,207],"texture":0},"south":{"uv":[58,206,60,207],"texture":0},"west":{"uv":[54,206,58,207],"texture":0},"up":{"uv":[54,206,52,202],"texture":0},"down":{"uv":[56,202,54,206],"texture":0}},"type":"cube","uuid":"2d37846b-6532-82cc-29f3-9fce7475036c"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[24.661945432817987,13.725935017036166,-33.05605098900135],"to":[26.661945432817987,15.725935017036166,-29.056050989001353],"autouv":0,"color":0,"rotation":[32.39935655016129,14.028462645392954,69.09429953599829],"origin":[36.95370717498624,9.003993353153962,-32.644969867117595],"uv_offset":[52,50],"faces":{"north":{"uv":[56,54,58,56],"texture":0},"east":{"uv":[52,54,56,56],"texture":0},"south":{"uv":[61.99999999999999,54,63.99999999999999,56],"texture":0},"west":{"uv":[58,54,61.99999999999999,56],"texture":0},"up":{"uv":[58,54,56,50],"texture":0},"down":{"uv":[60,50,58,54],"texture":0}},"type":"cube","uuid":"98a22dd0-14f0-8297-4f0b-b75ec5c30284"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[24.667642159624695,5.6071735848675015,-34.05605098900145],"to":[27.667642159624695,8.607173584867502,-28.05605098900145],"autouv":0,"color":0,"rotation":[19.295342735331328,29.784009840892285,35.176737775201914],"origin":[36.95370717498624,9.003993353153962,-32.644969867117595],"uv_offset":[330,86],"faces":{"north":{"uv":[336,92,339,95],"texture":0},"east":{"uv":[330,92,336,95],"texture":0},"south":{"uv":[345,92,348,95],"texture":0},"west":{"uv":[339,92,345,95],"texture":0},"up":{"uv":[339,92,336,86],"texture":0},"down":{"uv":[342,86,339,92],"texture":0}},"type":"cube","uuid":"af0f278a-4b14-d85d-b543-db1396dd96c2"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[29.110148854632435,0.017304845413263714,-35.05605098900141],"to":[37.110148854632435,4.017304845413264,-27.056050989001413],"autouv":0,"color":0,"rotation":[5.420233701831308e-14,35.00000000000017,6.161010322251864e-15],"origin":[36.95370717498624,9.003993353153962,-32.644969867117595],"uv_offset":[64,298],"faces":{"north":{"uv":[72,306,80,310],"texture":0},"east":{"uv":[64,306,72,310],"texture":0},"south":{"uv":[88,306,96,310],"texture":0},"west":{"uv":[80,306,88,310],"texture":0},"up":{"uv":[80,306,72,298],"texture":0},"down":{"uv":[88,298,80,306],"texture":0}},"type":"cube","uuid":"3a0925ce-4c25-75c7-5618-619d11ef03cd"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[27.66764215962469,4.6071735848675015,-35.05605098900145],"to":[35.667642159624684,8.607173584867502,-27.05605098900145],"autouv":0,"color":0,"rotation":[19.295342735331328,29.784009840892285,35.176737775201914],"origin":[36.95370717498624,9.003993353153962,-32.644969867117595],"uv_offset":[32,298],"faces":{"north":{"uv":[40,306,47.99999999999999,310],"texture":0},"east":{"uv":[32,306,40,310],"texture":0},"south":{"uv":[55.99999999999999,306,63.999999999999986,310],"texture":0},"west":{"uv":[47.99999999999999,306,55.99999999999999,310],"texture":0},"up":{"uv":[47.99999999999999,306,40,298],"texture":0},"down":{"uv":[55.999999999999986,298,47.99999999999999,306],"texture":0}},"type":"cube","uuid":"c5bf455f-bee3-f135-357c-0a622f2d2117"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[33,-0.3125,-7],"to":[45,11.6875,7],"autouv":0,"color":0,"origin":[1,0,-20],"uv_offset":[0,78],"faces":{"north":{"uv":[14,92,26,104],"texture":0},"east":{"uv":[0,92,14,104],"texture":0},"south":{"uv":[40,92,52,104],"texture":0},"west":{"uv":[26,92,40,104],"texture":0},"up":{"uv":[26,92,14,78],"texture":0},"down":{"uv":[38,78,26,92],"texture":0}},"type":"cube","uuid":"5131a3f8-3b71-68b9-7002-9fb45053e943"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[42.00000000000001,2.285254037844382,-4],"to":[50,6.285254037844382,4],"autouv":0,"color":0,"rotation":[0,0,-30],"origin":[46,4.285254037844385,0],"uv_offset":[0,298],"faces":{"north":{"uv":[8,306,15.999999999999993,310],"texture":0},"east":{"uv":[0,306,8,310],"texture":0},"south":{"uv":[23.999999999999993,306,31.999999999999986,310],"texture":0},"west":{"uv":[15.999999999999993,306,23.999999999999993,310],"texture":0},"up":{"uv":[15.999999999999993,306,8,298],"texture":0},"down":{"uv":[23.999999999999986,298,15.999999999999993,306],"texture":0}},"type":"cube","uuid":"51313aa8-afb6-c07f-07ef-3506275404aa"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[42.464101615137764,0.01730484541326227,-4],"to":[50.464101615137764,4.017304845413262,4],"autouv":0,"color":0,"origin":[46.464101615137764,2.0173048454132623,0],"uv_offset":[294,297],"faces":{"north":{"uv":[302,305,310,309],"texture":0},"east":{"uv":[294,305,302,309],"texture":0},"south":{"uv":[318,305,326,309],"texture":0},"west":{"uv":[310,305,318,309],"texture":0},"up":{"uv":[310,305,302,297],"texture":0},"down":{"uv":[318,297,310,305],"texture":0}},"type":"cube","uuid":"ae0b6b11-4a13-fd1a-eebd-9e4f9e847491"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[50,3.285254037844382,-3],"to":[53,6.285254037844382,3],"autouv":0,"color":0,"rotation":[0,0,-30],"origin":[46,4.285254037844385,0],"uv_offset":[242,329],"faces":{"north":{"uv":[248,335,251,338],"texture":0},"east":{"uv":[242,335,248,338],"texture":0},"south":{"uv":[257,335,260,338],"texture":0},"west":{"uv":[251,335,257,338],"texture":0},"up":{"uv":[251,335,248,329],"texture":0},"down":{"uv":[254,329,251,335],"texture":0}},"type":"cube","uuid":"05380e75-5cf7-8427-f118-fb671977384a"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[50.38348964502883,0.3126066413768869,-2],"to":[52.38348964502883,2.312606641376887,2],"autouv":0,"color":0,"rotation":[0,0,-65],"origin":[51.88348964502883,0.31260664137688865,-1],"uv_offset":[45,6],"faces":{"north":{"uv":[49,10,51,12],"texture":0},"east":{"uv":[45,10,49,12],"texture":0},"south":{"uv":[55,10,57,12],"texture":0},"west":{"uv":[51,10,55,12],"texture":0},"up":{"uv":[51,10,49,6],"texture":0},"down":{"uv":[53,6,51,10],"texture":0}},"type":"cube","uuid":"6b5011eb-51a9-682e-86df-b1a34c694ced"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[51.907414349972484,-0.2953107286600396,-2],"to":[53.907414349972484,0.7046892713399604,2],"autouv":0,"color":0,"origin":[49.407414349972484,-0.2953107286600378,-1],"uv_offset":[200,63],"faces":{"north":{"uv":[204,67,206,68],"texture":0},"east":{"uv":[200,67,204,68],"texture":0},"south":{"uv":[210,67,212,68],"texture":0},"west":{"uv":[206,67,210,68],"texture":0},"up":{"uv":[206,67,204,63],"texture":0},"down":{"uv":[208,63,206,67],"texture":0}},"type":"cube","uuid":"0979a20c-f194-a7c4-a5f8-22e9436496ba"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[49.907414349972484,-0.2953107286600396,-3],"to":[51.907414349972484,0.7046892713399604,3],"autouv":0,"color":0,"origin":[49.407414349972484,-0.2953107286600378,-1],"uv_offset":[260,185],"faces":{"north":{"uv":[266,191,268,192],"texture":0},"east":{"uv":[260,191,266,192],"texture":0},"south":{"uv":[274,191,276,192],"texture":0},"west":{"uv":[268,191,274,192],"texture":0},"up":{"uv":[268,191,266,185],"texture":0},"down":{"uv":[270,185,268,191],"texture":0}},"type":"cube","uuid":"88ceb5cf-024c-71c3-dad5-a7bee19b93f8"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[42.469914349972484,-0.2953107286600396,-4],"to":[50.469914349972484,3.7046892713399604,4],"autouv":0,"color":0,"origin":[49.407414349972484,-0.2953107286600378,-1],"uv_offset":[230,295],"faces":{"north":{"uv":[238,303,246,307],"texture":0},"east":{"uv":[230,303,238,307],"texture":0},"south":{"uv":[254,303,262,307],"texture":0},"west":{"uv":[246,303,254,307],"texture":0},"up":{"uv":[246,303,238,295],"texture":0},"down":{"uv":[254,295,246,303],"texture":0}},"type":"cube","uuid":"2082d7a9-3843-9ab8-6818-58f07c4ba5df"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[36.469914349972484,-0.2953107286600396,5],"to":[44.469914349972484,3.7046892713399604,13],"autouv":0,"color":0,"rotation":[-6.678352476723515e-18,-57.500000000000306,7.701545078646284e-33],"origin":[43.45370717498625,2.244971654592171,9],"uv_offset":[198,295],"faces":{"north":{"uv":[206,303,214,307],"texture":0},"east":{"uv":[198,303,206,307],"texture":0},"south":{"uv":[222,303,230,307],"texture":0},"west":{"uv":[214,303,222,307],"texture":0},"up":{"uv":[214,303,206,295],"texture":0},"down":{"uv":[222,295,214,303],"texture":0}},"type":"cube","uuid":"f8fb9a22-9196-ecbf-664b-c7b57aae346b"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[43.907414349972484,-0.2953107286600396,6],"to":[45.907414349972484,0.7046892713399604,12],"autouv":0,"color":0,"rotation":[-6.678352476723515e-18,-57.500000000000306,7.701545078646284e-33],"origin":[43.45370717498625,2.244971654592171,9],"uv_offset":[260,178],"faces":{"north":{"uv":[266,184,268,185],"texture":0},"east":{"uv":[260,184,266,185],"texture":0},"south":{"uv":[274,184,276,185],"texture":0},"west":{"uv":[268,184,274,185],"texture":0},"up":{"uv":[268,184,266,178],"texture":0},"down":{"uv":[270,178,268,184],"texture":0}},"type":"cube","uuid":"590e1995-aa95-299b-eef5-732d6ac1c4f8"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[45.907414349972484,-0.2953107286600396,7],"to":[47.907414349972484,0.7046892713399604,11],"autouv":0,"color":0,"rotation":[-6.678352476723515e-18,-57.500000000000306,7.701545078646284e-33],"origin":[43.45370717498625,2.244971654592171,9],"uv_offset":[193,113],"faces":{"north":{"uv":[197,117,199,118],"texture":0},"east":{"uv":[193,117,197,118],"texture":0},"south":{"uv":[203,117,205,118],"texture":0},"west":{"uv":[199,117,203,118],"texture":0},"up":{"uv":[199,117,197,113],"texture":0},"down":{"uv":[201,113,199,117],"texture":0}},"type":"cube","uuid":"4031d07a-4392-b0d7-e44a-a3d32d7e69fe"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[44.731895077757855,3.6304496850633217,7],"to":[46.731895077757855,5.630449685063322,11],"autouv":0,"color":0,"rotation":[54.89549437179885,-20.881272338444834,-75.93426731516178],"origin":[43.45370717498625,2.244971654592171,9],"uv_offset":[45,0],"faces":{"north":{"uv":[49,4,51,6],"texture":0},"east":{"uv":[45,4,49,6],"texture":0},"south":{"uv":[55,4,57,6],"texture":0},"west":{"uv":[51,4,55,6],"texture":0},"up":{"uv":[51,4,49,0],"texture":0},"down":{"uv":[53,0,51,4],"texture":0}},"type":"cube","uuid":"561e03e9-693b-597c-eef8-0e87ed84b37c"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[43.44256783258947,1.2850544418893226,6],"to":[46.442567832589475,4.285054441889322,12],"autouv":0,"color":0,"rotation":[38.126340045758376,-46.91980519468873,-47.05781842911979],"origin":[43.45370717498625,2.244971654592171,9],"uv_offset":[101,271],"faces":{"north":{"uv":[107,277,110,280],"texture":0},"east":{"uv":[101,277,107,280],"texture":0},"south":{"uv":[116,277,119.00000000000001,280],"texture":0},"west":{"uv":[110,277,116,280],"texture":0},"up":{"uv":[110,277,107,271],"texture":0},"down":{"uv":[113.00000000000001,271,110,277],"texture":0}},"type":"cube","uuid":"5e01bb4a-3e3f-92c1-48d8-2cfd4111c0ef"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[36.464101615137764,0.01730484541326227,5],"to":[44.464101615137764,4.017304845413262,13],"autouv":0,"color":0,"rotation":[-6.678352476723515e-18,-57.500000000000306,7.701545078646284e-33],"origin":[43.45370717498625,2.244971654592171,9],"uv_offset":[270,293],"faces":{"north":{"uv":[278,301,286,305],"texture":0},"east":{"uv":[270,301,278,305],"texture":0},"south":{"uv":[294,301,302,305],"texture":0},"west":{"uv":[286,301,294,305],"texture":0},"up":{"uv":[286,301,278,293],"texture":0},"down":{"uv":[294,293,286,301],"texture":0}},"type":"cube","uuid":"c165b077-1c23-f7b3-9093-e65d98b256f2"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[35.44256783258947,0.2850544418893226,5],"to":[43.44256783258947,4.285054441889322,13],"autouv":0,"color":0,"rotation":[38.126340045758376,-46.91980519468873,-47.05781842911979],"origin":[43.45370717498625,2.244971654592171,9],"uv_offset":[174,289],"faces":{"north":{"uv":[182,297,190,301],"texture":0},"east":{"uv":[174,297,182,301],"texture":0},"south":{"uv":[198,297,206,301],"texture":0},"west":{"uv":[190,297,198,301],"texture":0},"up":{"uv":[190,297,182,289],"texture":0},"down":{"uv":[198,289,190,297],"texture":0}},"type":"cube","uuid":"7bb1fdaa-d223-1d56-5109-07a18f65c328"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[36.469914349972484,-0.2953107286600396,-13],"to":[44.469914349972484,3.7046892713399604,-5],"autouv":0,"color":0,"rotation":[6.678352476723515e-18,57.500000000000306,7.701545078646284e-33],"origin":[43.45370717498625,2.244971654592171,-9],"uv_offset":[142,289],"faces":{"north":{"uv":[150,297,158,301],"texture":0},"east":{"uv":[142,297,150,301],"texture":0},"south":{"uv":[166,297,174,301],"texture":0},"west":{"uv":[158,297,166,301],"texture":0},"up":{"uv":[158,297,150,289],"texture":0},"down":{"uv":[166,289,158,297],"texture":0}},"type":"cube","uuid":"b8ab140f-ff04-3a29-3dd8-f105bafdd0e6"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[43.907414349972484,-0.2953107286600396,-12],"to":[45.907414349972484,0.7046892713399604,-6],"autouv":0,"color":0,"rotation":[6.678352476723515e-18,57.500000000000306,7.701545078646284e-33],"origin":[43.45370717498625,2.244971654592171,-9],"uv_offset":[248,63],"faces":{"north":{"uv":[254,69,256,70],"texture":0},"east":{"uv":[248,69,254,70],"texture":0},"south":{"uv":[262,69,264,70],"texture":0},"west":{"uv":[256,69,262,70],"texture":0},"up":{"uv":[256,69,254,63],"texture":0},"down":{"uv":[258,63,256,69],"texture":0}},"type":"cube","uuid":"2e956fa5-29ab-9996-2f55-a5c4f26992f3"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[45.907414349972484,-0.2953107286600396,-11],"to":[47.907414349972484,0.7046892713399604,-7],"autouv":0,"color":0,"rotation":[6.678352476723515e-18,57.500000000000306,7.701545078646284e-33],"origin":[43.45370717498625,2.244971654592171,-9],"uv_offset":[188,63],"faces":{"north":{"uv":[192,67,194,68],"texture":0},"east":{"uv":[188,67,192,68],"texture":0},"south":{"uv":[198,67,200,68],"texture":0},"west":{"uv":[194,67,198,68],"texture":0},"up":{"uv":[194,67,192,63],"texture":0},"down":{"uv":[196,63,194,67],"texture":0}},"type":"cube","uuid":"05362a32-47c2-b0cc-2a62-722d6d06db85"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[44.731895077757855,3.6304496850633217,-11],"to":[46.731895077757855,5.630449685063322,-7],"autouv":0,"color":0,"rotation":[-54.89549437179885,20.881272338444834,-75.93426731516178],"origin":[43.45370717498625,2.244971654592171,-9],"uv_offset":[38,36],"faces":{"north":{"uv":[42,40,44,42],"texture":0},"east":{"uv":[38,40,42,42],"texture":0},"south":{"uv":[48,40,50,42],"texture":0},"west":{"uv":[44,40,48,42],"texture":0},"up":{"uv":[44,40,42,36],"texture":0},"down":{"uv":[46,36,44,40],"texture":0}},"type":"cube","uuid":"16f39a66-5986-66a8-b2ab-e3117470d2b6"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[43.44256783258947,1.2850544418893226,-12],"to":[46.442567832589475,4.285054441889322,-6],"autouv":0,"color":0,"rotation":[-38.126340045758376,46.91980519468873,-47.05781842911979],"origin":[43.45370717498625,2.244971654592171,-9],"uv_offset":[65,271],"faces":{"north":{"uv":[71,277,74,280],"texture":0},"east":{"uv":[65,277,71,280],"texture":0},"south":{"uv":[80,277,83.00000000000001,280],"texture":0},"west":{"uv":[74,277,80,280],"texture":0},"up":{"uv":[74,277,71,271],"texture":0},"down":{"uv":[77.00000000000001,271,74,277],"texture":0}},"type":"cube","uuid":"d3c4d2e1-2dfa-1027-5494-093070b1aef8"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[36.464101615137764,0.01730484541326227,-13],"to":[44.464101615137764,4.017304845413262,-5],"autouv":0,"color":0,"rotation":[6.678352476723515e-18,57.500000000000306,7.701545078646284e-33],"origin":[43.45370717498625,2.244971654592171,-9],"uv_offset":[110,288],"faces":{"north":{"uv":[118,296,126,300],"texture":0},"east":{"uv":[110,296,118,300],"texture":0},"south":{"uv":[134,296,142,300],"texture":0},"west":{"uv":[126,296,134,300],"texture":0},"up":{"uv":[126,296,118,288],"texture":0},"down":{"uv":[134,288,126,296],"texture":0}},"type":"cube","uuid":"17692a33-8cd2-eb80-1f84-7b883347af8e"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[35.44256783258947,0.2850544418893226,-13],"to":[43.44256783258947,4.285054441889322,-5],"autouv":0,"color":0,"rotation":[-38.126340045758376,46.91980519468873,-47.05781842911979],"origin":[43.45370717498625,2.244971654592171,-9],"uv_offset":[286,140],"faces":{"north":{"uv":[294,148,302,152],"texture":0},"east":{"uv":[286,148,294,152],"texture":0},"south":{"uv":[310,148,318,152],"texture":0},"west":{"uv":[302,148,310,152],"texture":0},"up":{"uv":[302,148,294,140],"texture":0},"down":{"uv":[310,140,302,148],"texture":0}},"type":"cube","uuid":"dc6166d4-5f0e-1f38-0916-02ccec85cf5d"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[37.81808010704253,10.656752046520086,-7],"to":[42.81808010704253,23.656752046520086,7],"autouv":0,"color":0,"rotation":[0,0,22.5],"origin":[41.31808010704253,16.656752046520086,0],"uv_offset":[236,205],"faces":{"north":{"uv":[250,219,255,232],"texture":0},"east":{"uv":[236,219,250,232],"texture":0},"south":{"uv":[269,219,274,232],"texture":0},"west":{"uv":[255,219,269,232],"texture":0},"up":{"uv":[255,219,250,205],"texture":0},"down":{"uv":[260,205,255,219],"texture":0}},"type":"cube","uuid":"9ad4f3d5-8036-bc56-5465-0a8e90050d4d"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[33,11.6875,-7],"to":[40,23.6875,7],"autouv":0,"color":0,"origin":[1,0,-20],"uv_offset":[0,181],"faces":{"north":{"uv":[14,195,21,207],"texture":0},"east":{"uv":[0,195,14,207],"texture":0},"south":{"uv":[35,195,42,207],"texture":0},"west":{"uv":[21,195,35,207],"texture":0},"up":{"uv":[21,195,14,181],"texture":0},"down":{"uv":[28,181,21,195],"texture":0}},"type":"cube","uuid":"fd5e7d99-d232-5a89-72b7-877f84d4ca0b"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[20,12.6875,-2],"to":[30,16.6875,2],"autouv":0,"color":0,"origin":[18,0,-20],"uv_offset":[208,226],"faces":{"north":{"uv":[212,230,222,234],"texture":0},"east":{"uv":[208,230,212,234],"texture":0},"south":{"uv":[226,230,236,234],"texture":0},"west":{"uv":[222,230,226,234],"texture":0},"up":{"uv":[222,230,212,226],"texture":0},"down":{"uv":[232,226,222,230],"texture":0}},"type":"cube","uuid":"42cd17db-9ef8-dafd-83e1-fb2abf76e1e7"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[26.681849162194737,15.803297434967968,-2],"to":[36.68184916219474,19.803297434967966,2],"autouv":0,"color":0,"rotation":[0,0,50],"origin":[31.681849162194737,17.803297434967966,0],"uv_offset":[208,218],"faces":{"north":{"uv":[212,222,222,226],"texture":0},"east":{"uv":[208,222,212,226],"texture":0},"south":{"uv":[226,222,236,226],"texture":0},"west":{"uv":[222,222,226,226],"texture":0},"up":{"uv":[222,222,212,218],"texture":0},"down":{"uv":[232,218,222,222],"texture":0}},"type":"cube","uuid":"f52c5c07-66f8-c6d5-1132-f92fe1a72f95"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[31.530085650027516,-0.2953107286600396,-4],"to":[39.530085650027516,3.7046892713399604,4],"autouv":0,"color":0,"rotation":[-5.0668526673353835e-14,-1.264270485881748e-13,5.046804200358181e-15],"origin":[32.592585650027516,-0.2953107286600378,-1],"uv_offset":[286,128],"faces":{"north":{"uv":[294,136,302,140],"texture":0},"east":{"uv":[286,136,294,140],"texture":0},"south":{"uv":[310,136,318,140],"texture":0},"west":{"uv":[302,136,310,140],"texture":0},"up":{"uv":[302,136,294,128],"texture":0},"down":{"uv":[310,128,302,136],"texture":0}},"type":"cube","uuid":"f7436df3-0c30-a464-73dd-7415a6fd0e45"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[30.092585650027516,-0.2953107286600396,-3],"to":[32.092585650027516,0.7046892713399604,3],"autouv":0,"color":0,"rotation":[-5.0668526673353835e-14,-1.264270485881748e-13,5.046804200358181e-15],"origin":[32.592585650027516,-0.2953107286600378,-1],"uv_offset":[196,240],"faces":{"north":{"uv":[202,246,204,247],"texture":0},"east":{"uv":[196,246,202,247],"texture":0},"south":{"uv":[210,246,212,247],"texture":0},"west":{"uv":[204,246,210,247],"texture":0},"up":{"uv":[204,246,202,240],"texture":0},"down":{"uv":[206,240,204,246],"texture":0}},"type":"cube","uuid":"86628a1f-92bb-0088-743b-98deca274be5"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[28.092585650027516,-0.2953107286600396,-2],"to":[30.092585650027516,0.7046892713399604,2],"autouv":0,"color":0,"rotation":[-5.0668526673353835e-14,-1.264270485881748e-13,5.046804200358181e-15],"origin":[32.592585650027516,-0.2953107286600378,-1],"uv_offset":[183,187],"faces":{"north":{"uv":[187,191,189,192],"texture":0},"east":{"uv":[183,191,187,192],"texture":0},"south":{"uv":[193,191,195,192],"texture":0},"west":{"uv":[189,191,193,192],"texture":0},"up":{"uv":[189,191,187,187],"texture":0},"down":{"uv":[191,187,189,191],"texture":0}},"type":"cube","uuid":"3bd03361-cd8b-8976-792c-db9ce3b8dcf7"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[29.61651035497117,0.31260664137688643,-2],"to":[31.61651035497117,2.3126066413768864,2],"autouv":0,"color":0,"rotation":[-8.309302975815115e-14,3.205220336466177e-13,65.00000000000001],"origin":[30.11651035497117,0.3126066413768882,-1],"uv_offset":[38,30],"faces":{"north":{"uv":[42,34,44,36],"texture":0},"east":{"uv":[38,34,42,36],"texture":0},"south":{"uv":[48,34,50,36],"texture":0},"west":{"uv":[44,34,48,36],"texture":0},"up":{"uv":[44,34,42,30],"texture":0},"down":{"uv":[46,30,44,34],"texture":0}},"type":"cube","uuid":"de28f347-01d3-808b-d23f-dc8f97ba39f4"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[29,3.285254037844382,-3],"to":[32,6.285254037844382,3],"autouv":0,"color":0,"rotation":[1.2730982451367867e-14,-3.560202018719105e-13,30.000000000000053],"origin":[36,4.2852540378443855,0],"uv_offset":[24,271],"faces":{"north":{"uv":[30,277,33,280],"texture":0},"east":{"uv":[24,277,30,280],"texture":0},"south":{"uv":[39,277,42,280],"texture":0},"west":{"uv":[33,277,39,280],"texture":0},"up":{"uv":[33,277,30,271],"texture":0},"down":{"uv":[36,271,33,277],"texture":0}},"type":"cube","uuid":"95d11859-d7ba-e397-ba0c-3be402bf329f"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[31.535898384862236,0.01730484541326227,-4],"to":[39.535898384862236,4.017304845413262,4],"autouv":0,"color":0,"rotation":[-5.0668526673353835e-14,-1.264270485881748e-13,5.046804200358181e-15],"origin":[35.535898384862236,2.0173048454132623,0],"uv_offset":[286,116],"faces":{"north":{"uv":[294,124,302,128],"texture":0},"east":{"uv":[286,124,294,128],"texture":0},"south":{"uv":[310,124,318,128],"texture":0},"west":{"uv":[302,124,310,128],"texture":0},"up":{"uv":[302,124,294,116],"texture":0},"down":{"uv":[310,116,302,124],"texture":0}},"type":"cube","uuid":"2b4b128e-e94a-842a-2deb-bd3a14dac42c"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[32,2.285254037844382,-4],"to":[39.99999999999999,6.285254037844382,4],"autouv":0,"color":0,"rotation":[1.2730982451367867e-14,-3.560202018719105e-13,30.000000000000053],"origin":[36,4.2852540378443855,0],"uv_offset":[286,104],"faces":{"north":{"uv":[294,112,302,116],"texture":0},"east":{"uv":[286,112,294,116],"texture":0},"south":{"uv":[310,112,318,116],"texture":0},"west":{"uv":[302,112,310,116],"texture":0},"up":{"uv":[302,112,294,104],"texture":0},"down":{"uv":[310,104,302,112],"texture":0}},"type":"cube","uuid":"378b9e14-65e7-9f18-7117-2faefde985a0"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[27.66764215962469,4.6071735848675015,27.05605098900145],"to":[35.667642159624684,8.607173584867502,35.05605098900145],"autouv":0,"color":0,"rotation":[-19.295342735331328,-29.784009840892285,35.176737775201914],"origin":[36.95370717498624,9.003993353153962,32.644969867117595],"uv_offset":[286,92],"faces":{"north":{"uv":[294,100,302,104],"texture":0},"east":{"uv":[286,100,294,104],"texture":0},"south":{"uv":[310,100,318,104],"texture":0},"west":{"uv":[302,100,310,104],"texture":0},"up":{"uv":[302,100,294,92],"texture":0},"down":{"uv":[310,92,302,100],"texture":0}},"type":"cube","uuid":"3927d906-d442-4458-c288-2387060a44b6"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[29.110148854632435,0.017304845413263714,27.056050989001413],"to":[37.110148854632435,4.017304845413264,35.05605098900141],"autouv":0,"color":0,"rotation":[-5.420233701831308e-14,-35.00000000000017,6.161010322251864e-15],"origin":[36.95370717498624,9.003993353153962,32.644969867117595],"uv_offset":[282,226],"faces":{"north":{"uv":[290,234,298,238],"texture":0},"east":{"uv":[282,234,290,238],"texture":0},"south":{"uv":[306,234,314,238],"texture":0},"west":{"uv":[298,234,306,238],"texture":0},"up":{"uv":[298,234,290,226],"texture":0},"down":{"uv":[306,226,298,234],"texture":0}},"type":"cube","uuid":"f0cbe10e-a501-857e-f90f-b205593d062d"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[24.667642159624695,5.6071735848675015,28.05605098900145],"to":[27.667642159624695,8.607173584867502,34.05605098900145],"autouv":0,"color":0,"rotation":[-19.295342735331328,-29.784009840892285,35.176737775201914],"origin":[36.95370717498624,9.003993353153962,32.644969867117595],"uv_offset":[180,221],"faces":{"north":{"uv":[186,227,189,230],"texture":0},"east":{"uv":[180,227,186,230],"texture":0},"south":{"uv":[195,227,198,230],"texture":0},"west":{"uv":[189,227,195,230],"texture":0},"up":{"uv":[189,227,186,221],"texture":0},"down":{"uv":[192,221,189,227],"texture":0}},"type":"cube","uuid":"dd716f22-290c-285f-a16a-6906b08e3fde"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[24.661945432817987,13.725935017036166,29.056050989001353],"to":[26.661945432817987,15.725935017036166,33.05605098900135],"autouv":0,"color":0,"rotation":[-32.39935655016129,-14.028462645392954,69.09429953599829],"origin":[36.95370717498624,9.003993353153962,32.644969867117595],"uv_offset":[0,36],"faces":{"north":{"uv":[3.9999999999999964,40,5.9999999999999964,42],"texture":0},"east":{"uv":[0,40,3.9999999999999964,42],"texture":0},"south":{"uv":[9.999999999999993,40,11.999999999999993,42],"texture":0},"west":{"uv":[5.9999999999999964,40,9.999999999999993,42],"texture":0},"up":{"uv":[5.9999999999999964,40,3.9999999999999964,36],"texture":0},"down":{"uv":[7.9999999999999964,36,5.9999999999999964,40],"texture":0}},"type":"cube","uuid":"4e9f1f88-4a08-d131-1dae-a44514ca4cd9"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[25.666836119797715,-0.29531072866003816,29.05605098900142],"to":[27.666836119797715,0.7046892713399618,33.05605098900142],"autouv":0,"color":0,"rotation":[-5.420233701831308e-14,-35.00000000000017,6.161010322251864e-15],"origin":[36.95370717498624,9.003993353153962,32.644969867117595],"uv_offset":[181,113],"faces":{"north":{"uv":[185,117,187,118],"texture":0},"east":{"uv":[181,117,185,118],"texture":0},"south":{"uv":[191,117,193,118],"texture":0},"west":{"uv":[187,117,191,118],"texture":0},"up":{"uv":[187,117,185,113],"texture":0},"down":{"uv":[189,113,187,117],"texture":0}},"type":"cube","uuid":"0c83d4ad-f986-3390-33a0-1ede82231776"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[27.666836119797715,-0.29531072866003816,28.05605098900142],"to":[29.666836119797715,0.7046892713399618,34.05605098900142],"autouv":0,"color":0,"rotation":[-5.420233701831308e-14,-35.00000000000017,6.161010322251864e-15],"origin":[36.95370717498624,9.003993353153962,32.644969867117595],"uv_offset":[114,233],"faces":{"north":{"uv":[120,239,122,240],"texture":0},"east":{"uv":[114,239,120,240],"texture":0},"south":{"uv":[128,239,130,240],"texture":0},"west":{"uv":[122,239,128,240],"texture":0},"up":{"uv":[122,239,120,233],"texture":0},"down":{"uv":[124,233,122,239],"texture":0}},"type":"cube","uuid":"bbe802f0-184b-fc5a-2b97-33178b6947f2"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[29.104336119797715,-0.29531072866003816,27.05605098900142],"to":[37.104336119797715,3.7046892713399617,35.05605098900142],"autouv":0,"color":0,"rotation":[-5.420233701831308e-14,-35.00000000000017,6.161010322251864e-15],"origin":[36.95370717498624,9.003993353153962,32.644969867117595],"uv_offset":[282,214],"faces":{"north":{"uv":[290,222,298,226],"texture":0},"east":{"uv":[282,222,290,226],"texture":0},"south":{"uv":[306,222,314,226],"texture":0},"west":{"uv":[298,222,306,226],"texture":0},"up":{"uv":[298,222,290,214],"texture":0},"down":{"uv":[306,214,298,222],"texture":0}},"type":"cube","uuid":"8ec4a847-c78d-bb71-c775-5e32a02f46dc"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[33.746438417290264,18.556786474450394,29.056050989001413],"to":[43.746438417290264,22.556786474450394,33.05605098900141],"autouv":0,"color":0,"rotation":[-28.20866808810481,-21.634714886786412,55.49730644801023],"origin":[36.95370717498624,9.003993353153962,32.644969867117595],"uv_offset":[174,192],"faces":{"north":{"uv":[178,196,188,200],"texture":0},"east":{"uv":[174,196,178,200],"texture":0},"south":{"uv":[192,196,202,200],"texture":0},"west":{"uv":[188,196,192,200],"texture":0},"up":{"uv":[188,196,178,192],"texture":0},"down":{"uv":[198,192,188,196],"texture":0}},"type":"cube","uuid":"5e656e23-007e-427e-2be1-8d7a2e26394d"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[12.574250469770202,12.6875,29.056050989001413],"to":[27.574250469770202,16.6875,33.05605098900141],"autouv":0,"color":0,"rotation":[0,-35.00000000000003,0],"origin":[36.95370717498624,9.003993353153962,32.644969867117595],"uv_offset":[0,130],"faces":{"north":{"uv":[4,134,19,138],"texture":0},"east":{"uv":[0,134,4,138],"texture":0},"south":{"uv":[23,134,38,138],"texture":0},"west":{"uv":[19,134,23,138],"texture":0},"up":{"uv":[19,134,4,130],"texture":0},"down":{"uv":[34,130,19,134],"texture":0}},"type":"cube","uuid":"a6ddd8e0-cc21-c17b-3148-c804ba964d58"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[30.574250469770206,11.6875,24.056050989001413],"to":[37.574250469770206,23.6875,38.05605098900141],"autouv":0,"color":0,"rotation":[0,-35.00000000000003,0],"origin":[36.95370717498624,9.003993353153962,32.644969867117595],"uv_offset":[141,166],"faces":{"north":{"uv":[155,180,162,192],"texture":0},"east":{"uv":[141,180,155,192],"texture":0},"south":{"uv":[176,180,183,192],"texture":0},"west":{"uv":[162,180,176,192],"texture":0},"up":{"uv":[162,180,155,166],"texture":0},"down":{"uv":[169,166,162,180],"texture":0}},"type":"cube","uuid":"bbfd7458-d7d5-6200-4cad-d3a031cf4c75"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[38.173345621020275,9.332341419728495,24.056050989001413],"to":[43.173345621020275,22.332341419728493,38.05605098900141],"autouv":0,"color":0,"rotation":[-15.00046142754923,-31.999747699873854,26.82396215276299],"origin":[36.95370717498624,9.003993353153962,32.644969867117595],"uv_offset":[236,178],"faces":{"north":{"uv":[250,192,255,205],"texture":0},"east":{"uv":[236,192,250,205],"texture":0},"south":{"uv":[269,192,274,205],"texture":0},"west":{"uv":[255,192,269,205],"texture":0},"up":{"uv":[255,192,250,178],"texture":0},"down":{"uv":[260,178,255,192],"texture":0}},"type":"cube","uuid":"5df03304-c0f3-0b31-dba8-423ba28a60cd"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[41.952018579128826,6.750440036728426,26.3917358953929],"to":[49.952018579128826,10.750440036728426,34.3917358953929],"autouv":0,"color":0,"rotation":[-11.700919508153738,19.354596151650917,-32.00206341243393],"origin":[36.95370717498624,9.003993353153962,32.644969867117595],"uv_offset":[282,202],"faces":{"north":{"uv":[290,210,298,214],"texture":0},"east":{"uv":[282,210,290,214],"texture":0},"south":{"uv":[306,210,314,214],"texture":0},"west":{"uv":[298,210,306,214],"texture":0},"up":{"uv":[298,210,290,202],"texture":0},"down":{"uv":[306,202,298,210],"texture":0}},"type":"cube","uuid":"cb6b20ac-4813-93cb-c07d-919369ddd446"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[41.08379839906193,0.01730484541326227,26.39173589539287],"to":[49.08379839906193,4.017304845413262,34.39173589539287],"autouv":0,"color":0,"rotation":[6.678352476723521e-18,22.50000000000034,1.0450951327755264e-32],"origin":[36.95370717498624,9.003993353153962,32.644969867117595],"uv_offset":[282,190],"faces":{"north":{"uv":[290,198,298,202],"texture":0},"east":{"uv":[282,198,290,202],"texture":0},"south":{"uv":[306,198,314,202],"texture":0},"west":{"uv":[298,198,306,202],"texture":0},"up":{"uv":[298,198,290,190],"texture":0},"down":{"uv":[306,190,298,198],"texture":0}},"type":"cube","uuid":"d9637e4f-7ec1-142a-b293-a143329f9597"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[49.952018579128826,7.750440036728426,27.3917358953929],"to":[52.95201857912883,10.750440036728426,33.3917358953929],"autouv":0,"color":0,"rotation":[-11.700919508153738,19.354596151650917,-32.00206341243393],"origin":[36.95370717498624,9.003993353153962,32.644969867117595],"uv_offset":[36,202],"faces":{"north":{"uv":[42,208,45,211],"texture":0},"east":{"uv":[36,208,42,211],"texture":0},"south":{"uv":[51,208,54.00000000000001,211],"texture":0},"west":{"uv":[45,208,51,211],"texture":0},"up":{"uv":[45,208,42,202],"texture":0},"down":{"uv":[48.000000000000014,202,45,208],"texture":0}},"type":"cube","uuid":"0ab81bc4-b785-3b4c-9d97-7101b21d14f4"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[49.05703600181975,17.61085316706815,28.391735895392866],"to":[51.05703600181975,19.61085316706815,32.39173589539287],"autouv":0,"color":0,"rotation":[-20.576385285113936,9.307268232796186,-66.69303765222317],"origin":[36.95370717498624,9.003993353153962,32.644969867117595],"uv_offset":[0,30],"faces":{"north":{"uv":[4.0000000000000036,34,6.0000000000000036,36],"texture":0},"east":{"uv":[0,34,4.0000000000000036,36],"texture":0},"south":{"uv":[10.000000000000007,34,12.000000000000007,36],"texture":0},"west":{"uv":[6.0000000000000036,34,10.000000000000007,36],"texture":0},"up":{"uv":[6.0000000000000036,34,4.0000000000000036,30],"texture":0},"down":{"uv":[8.000000000000004,30,6.0000000000000036,34],"texture":0}},"type":"cube","uuid":"41815d3b-0fbd-91b4-3bbf-25b70856b725"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[50.52711113389665,-0.2953107286600396,28.39173589539287],"to":[52.52711113389665,0.7046892713399604,32.39173589539287],"autouv":0,"color":0,"rotation":[6.678352476723521e-18,22.50000000000034,1.0450951327755264e-32],"origin":[36.95370717498624,9.003993353153962,32.644969867117595],"uv_offset":[176,63],"faces":{"north":{"uv":[180,67,182,68],"texture":0},"east":{"uv":[176,67,180,68],"texture":0},"south":{"uv":[186,67,188,68],"texture":0},"west":{"uv":[182,67,186,68],"texture":0},"up":{"uv":[182,67,180,63],"texture":0},"down":{"uv":[184,63,182,67],"texture":0}},"type":"cube","uuid":"2105f29c-39d7-d705-22a8-2c29f8af188c"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[48.52711113389665,-0.2953107286600396,27.39173589539287],"to":[50.52711113389665,0.7046892713399604,33.39173589539287],"autouv":0,"color":0,"rotation":[6.678352476723521e-18,22.50000000000034,1.0450951327755264e-32],"origin":[36.95370717498624,9.003993353153962,32.644969867117595],"uv_offset":[232,63],"faces":{"north":{"uv":[238,69,240,70],"texture":0},"east":{"uv":[232,69,238,70],"texture":0},"south":{"uv":[246,69,248,70],"texture":0},"west":{"uv":[240,69,246,70],"texture":0},"up":{"uv":[240,69,238,63],"texture":0},"down":{"uv":[242,63,240,69],"texture":0}},"type":"cube","uuid":"93c193e7-f1f0-129f-183b-8c7428936a34"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[41.08961113389665,-0.2953107286600396,26.39173589539287],"to":[49.08961113389665,3.7046892713399604,34.39173589539287],"autouv":0,"color":0,"rotation":[6.678352476723521e-18,22.50000000000034,1.0450951327755264e-32],"origin":[36.95370717498624,9.003993353153962,32.644969867117595],"uv_offset":[282,178],"faces":{"north":{"uv":[290,186,298,190],"texture":0},"east":{"uv":[282,186,290,190],"texture":0},"south":{"uv":[306,186,314,190],"texture":0},"west":{"uv":[298,186,306,190],"texture":0},"up":{"uv":[298,186,290,178],"texture":0},"down":{"uv":[306,178,298,186],"texture":0}},"type":"cube","uuid":"26eb2098-d03f-a06d-8221-de4d80b62dd9"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[39.63093091119589,5.410359446834634,29.190752857028908],"to":[47.63093091119589,9.410359446834633,37.19075285702891],"autouv":0,"color":0,"rotation":[94.99051678989554,-59.90568069244192,-94.32054514388427],"origin":[36.95370717498624,9.003993353153962,32.644969867117595],"uv_offset":[282,166],"faces":{"north":{"uv":[290,174,298,178],"texture":0},"east":{"uv":[282,174,290,178],"texture":0},"south":{"uv":[306,174,314,178],"texture":0},"west":{"uv":[298,174,306,178],"texture":0},"up":{"uv":[298,174,290,166],"texture":0},"down":{"uv":[306,166,298,174],"texture":0}},"type":"cube","uuid":"26395c9f-8953-ee05-f99d-a43f5c02832f"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[38.40363721927433,0.01730484541326227,29.190752857028937],"to":[46.40363721927433,4.017304845413262,37.19075285702894],"autouv":0,"color":0,"rotation":[180,-87.50000000000004,-180],"origin":[36.95370717498624,9.003993353153962,32.644969867117595],"uv_offset":[278,281],"faces":{"north":{"uv":[286,289,294,293],"texture":0},"east":{"uv":[278,289,286,293],"texture":0},"south":{"uv":[302,289,310,293],"texture":0},"west":{"uv":[294,289,302,293],"texture":0},"up":{"uv":[294,289,286,281],"texture":0},"down":{"uv":[302,281,294,289],"texture":0}},"type":"cube","uuid":"8f15743c-b23d-a8d4-11f6-90c2a1109c8d"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[47.63093091119588,6.410359446834634,30.190752857028908],"to":[50.63093091119589,9.410359446834633,36.19075285702891],"autouv":0,"color":0,"rotation":[94.99051678989554,-59.90568069244192,-94.32054514388427],"origin":[36.95370717498624,9.003993353153962,32.644969867117595],"uv_offset":[42,193],"faces":{"north":{"uv":[48,199,51.000000000000014,202],"texture":0},"east":{"uv":[42,199,48,202],"texture":0},"south":{"uv":[57.000000000000014,199,60.00000000000002,202],"texture":0},"west":{"uv":[51.000000000000014,199,57.000000000000014,202],"texture":0},"up":{"uv":[51.000000000000014,199,48,193],"texture":0},"down":{"uv":[54.000000000000014,193,51.000000000000014,199],"texture":0}},"type":"cube","uuid":"b69787cf-28fb-a3d5-f40a-8325be0467d0"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[47.92435094283302,15.181802219313315,31.190752857028933],"to":[49.92435094283302,17.181802219313315,35.19075285702893],"autouv":0,"color":0,"rotation":[92.75806438933462,-24.974573527445862,-91.16523859501446],"origin":[36.95370717498624,9.003993353153962,32.644969867117595],"uv_offset":[0,6],"faces":{"north":{"uv":[4,10,6,12],"texture":0},"east":{"uv":[0,10,4,12],"texture":0},"south":{"uv":[10,10,12,12],"texture":0},"west":{"uv":[6,10,10,12],"texture":0},"up":{"uv":[6,10,4,6],"texture":0},"down":{"uv":[8,6,6,10],"texture":0}},"type":"cube","uuid":"91ed5460-839d-6092-477e-0ccf74c92d6c"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[47.84694995410905,-0.2953107286600396,31.190752857028937],"to":[49.84694995410905,0.7046892713399604,35.19075285702894],"autouv":0,"color":0,"rotation":[180,-87.50000000000004,-180],"origin":[36.95370717498624,9.003993353153962,32.644969867117595],"uv_offset":[164,63],"faces":{"north":{"uv":[168,67,170,68],"texture":0},"east":{"uv":[164,67,168,68],"texture":0},"south":{"uv":[174,67,176,68],"texture":0},"west":{"uv":[170,67,174,68],"texture":0},"up":{"uv":[170,67,168,63],"texture":0},"down":{"uv":[172,63,170,67],"texture":0}},"type":"cube","uuid":"20955d94-1601-beea-40c0-9cdcd8ffaf50"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[45.84694995410905,-0.2953107286600396,30.190752857028937],"to":[47.84694995410905,0.7046892713399604,36.19075285702894],"autouv":0,"color":0,"rotation":[180,-87.50000000000004,-180],"origin":[36.95370717498624,9.003993353153962,32.644969867117595],"uv_offset":[28,228],"faces":{"north":{"uv":[34,234,36,235],"texture":0},"east":{"uv":[28,234,34,235],"texture":0},"south":{"uv":[42.00000000000001,234,44.00000000000001,235],"texture":0},"west":{"uv":[36,234,42.00000000000001,235],"texture":0},"up":{"uv":[36,234,34,228],"texture":0},"down":{"uv":[38,228,36,234],"texture":0}},"type":"cube","uuid":"6e0a8fbc-3e56-af51-3101-5fc25f833eeb"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[38.40944995410905,-0.2953107286600396,29.190752857028937],"to":[46.40944995410905,3.7046892713399604,37.19075285702894],"autouv":0,"color":0,"rotation":[180,-87.50000000000004,-180],"origin":[36.95370717498624,9.003993353153962,32.644969867117595],"uv_offset":[280,34],"faces":{"north":{"uv":[288,42,296,46],"texture":0},"east":{"uv":[280,42,288,46],"texture":0},"south":{"uv":[304,42,312,46],"texture":0},"west":{"uv":[296,42,304,46],"texture":0},"up":{"uv":[296,42,288,34],"texture":0},"down":{"uv":[304,34,296,42],"texture":0}},"type":"cube","uuid":"d2a94d13-c6eb-0741-1b3f-62b88bdd34da"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[40.04416481974269,-0.2953107286600396,27.056050989001413],"to":[48.04416481974269,3.7046892713399604,35.05605098900141],"autouv":0,"color":0,"rotation":[0,-35.00000000000003,0],"origin":[36.95370717498624,9.003993353153962,32.644969867117595],"uv_offset":[280,22],"faces":{"north":{"uv":[288,30,296,34],"texture":0},"east":{"uv":[280,30,288,34],"texture":0},"south":{"uv":[304,30,312,34],"texture":0},"west":{"uv":[296,30,304,34],"texture":0},"up":{"uv":[296,30,288,22],"texture":0},"down":{"uv":[304,22,296,30],"texture":0}},"type":"cube","uuid":"d818e7e1-a0c8-082b-621b-3c7c79e5a395"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[47.48166481974269,-0.2953107286600396,28.056050989001413],"to":[49.48166481974269,0.7046892713399604,34.05605098900141],"autouv":0,"color":0,"rotation":[0,-35.00000000000003,0],"origin":[36.95370717498624,9.003993353153962,32.644969867117595],"uv_offset":[28,221],"faces":{"north":{"uv":[34,227,36,228],"texture":0},"east":{"uv":[28,227,34,228],"texture":0},"south":{"uv":[42,227,44,228],"texture":0},"west":{"uv":[36,227,42,228],"texture":0},"up":{"uv":[36,227,34,221],"texture":0},"down":{"uv":[38,221,36,227],"texture":0}},"type":"cube","uuid":"4f37afc2-dde4-dea6-62d6-8a7ca61e2813"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[49.48166481974269,-0.2953107286600396,29.056050989001413],"to":[51.48166481974269,0.7046892713399604,33.05605098900141],"autouv":0,"color":0,"rotation":[0,-35.00000000000003,0],"origin":[36.95370717498624,9.003993353153962,32.644969867117595],"uv_offset":[38,164],"faces":{"north":{"uv":[42,168,44,169],"texture":0},"east":{"uv":[38,168,42,169],"texture":0},"south":{"uv":[48,168,50,169],"texture":0},"west":{"uv":[44,168,48,169],"texture":0},"up":{"uv":[44,168,42,164],"texture":0},"down":{"uv":[46,164,44,168],"texture":0}},"type":"cube","uuid":"809bbe6f-aa2d-52f4-0aab-b6edee149ee6"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[48.6152112977888,16.663357031621633,29.056050989001413],"to":[50.6152112977888,18.663357031621633,33.05605098900141],"autouv":0,"color":0,"rotation":[32.39935655016117,-14.028462645393255,-69.09429953599825],"origin":[36.95370717498624,9.003993353153962,32.644969867117595],"faces":{"north":{"uv":[4,4,6,6],"texture":0},"east":{"uv":[0,4,4,6],"texture":0},"south":{"uv":[10,4,12,6],"texture":0},"west":{"uv":[6,4,10,6],"texture":0},"up":{"uv":[6,4,4,0],"texture":0},"down":{"uv":[8,0,6,4],"texture":0}},"type":"cube","uuid":"acee732c-bb4d-265d-62c0-c4b14c0e9c23"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[49.04663551277867,7.227716879651458,28.056050989001413],"to":[52.04663551277867,10.22771687965146,34.05605098900141],"autouv":0,"color":0,"rotation":[19.295342735331264,-29.784009840891997,-35.176737775201744],"origin":[36.95370717498624,9.003993353153962,32.644969867117595],"uv_offset":[183,178],"faces":{"north":{"uv":[189,184,192,187],"texture":0},"east":{"uv":[183,184,189,187],"texture":0},"south":{"uv":[198,184,201,187],"texture":0},"west":{"uv":[192,184,198,187],"texture":0},"up":{"uv":[192,184,189,178],"texture":0},"down":{"uv":[195,178,192,184],"texture":0}},"type":"cube","uuid":"eadce4f7-89a1-6d8b-c5fc-384288aaefa4"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[40.03835208490797,0.01730484541326227,27.056050989001413],"to":[48.03835208490797,4.017304845413262,35.05605098900141],"autouv":0,"color":0,"rotation":[0,-35.00000000000003,0],"origin":[36.95370717498624,9.003993353153962,32.644969867117595],"uv_offset":[28,181],"faces":{"north":{"uv":[36,189,44,193],"texture":0},"east":{"uv":[28,189,36,193],"texture":0},"south":{"uv":[52,189,60,193],"texture":0},"west":{"uv":[44,189,52,193],"texture":0},"up":{"uv":[44,189,36,181],"texture":0},"down":{"uv":[52,181,44,189],"texture":0}},"type":"cube","uuid":"c72e97eb-6310-5044-fe92-38e29a908de0"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[41.04663551277868,6.227716879651458,27.056050989001413],"to":[49.04663551277867,10.22771687965146,35.05605098900141],"autouv":0,"color":0,"rotation":[19.295342735331264,-29.784009840891997,-35.176737775201744],"origin":[36.95370717498624,9.003993353153962,32.644969867117595],"uv_offset":[169,166],"faces":{"north":{"uv":[177,174,185,178],"texture":0},"east":{"uv":[169,174,177,178],"texture":0},"south":{"uv":[193,174,201,178],"texture":0},"west":{"uv":[185,174,193,178],"texture":0},"up":{"uv":[185,174,177,166],"texture":0},"down":{"uv":[193,166,185,174],"texture":0}},"type":"cube","uuid":"f1a3f19d-ac70-3038-8b21-0229e12a6b8b"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[30.574250469770206,-0.3125,24.056050989001413],"to":[42.574250469770206,11.6875,38.05605098900141],"autouv":0,"color":0,"rotation":[0,-35.00000000000003,0],"origin":[36.95370717498624,9.003993353153962,32.644969867117595],"uv_offset":[0,30],"faces":{"north":{"uv":[14,44,26,56],"texture":0},"east":{"uv":[0,44,14,56],"texture":0},"south":{"uv":[40,44,52,56],"texture":0},"west":{"uv":[26,44,40,56],"texture":0},"up":{"uv":[26,44,14,30],"texture":0},"down":{"uv":[38,30,26,44],"texture":0}},"type":"cube","uuid":"8c62cdd9-d2b6-3fcf-c603-c6a2ba42f0a5"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-21,32.75,-30],"to":[19,43.75,30],"autouv":0,"color":0,"origin":[-7,-17.25,3],"uv_offset":[146,95],"faces":{"north":{"uv":[206,155,246,166],"texture":0},"east":{"uv":[146,155,206,166],"texture":0},"south":{"uv":[306,155,346,166],"texture":0},"west":{"uv":[246,155,306,166],"texture":0},"up":{"uv":[246,155,206,95],"texture":0},"down":{"uv":[286,95,246,155],"texture":0}},"type":"cube","uuid":"f4650799-1c5c-84f7-5412-96983ecd3b17"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-17,43.75,-26],"to":[15,54.75,26],"autouv":0,"color":0,"origin":[-7,-17.25,3],"uv_offset":[164,0],"faces":{"north":{"uv":[216,52,248,63],"texture":0},"east":{"uv":[164,52,216,63],"texture":0},"south":{"uv":[300,52,332,63],"texture":0},"west":{"uv":[248,52,300,63],"texture":0},"up":{"uv":[248,52,216,0],"texture":0},"down":{"uv":[280,0,248,52],"texture":0}},"type":"cube","uuid":"adc71653-c4ce-9e73-a1db-1f64dd9fb480"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-13,54.75,-22],"to":[11,60.75,22],"autouv":0,"color":0,"origin":[-7,-17.25,3],"uv_offset":[0,221],"faces":{"north":{"uv":[44,265,68,271],"texture":0},"east":{"uv":[0,265,44,271],"texture":0},"south":{"uv":[112,265,136,271],"texture":0},"west":{"uv":[68,265,112,271],"texture":0},"up":{"uv":[68,265,44,221],"texture":0},"down":{"uv":[92,221,68,265],"texture":0}},"type":"cube","uuid":"0144e097-b2f0-17ff-ccc8-13c9c09aef5d"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-24,8.75,26],"to":[-7,22.75,34],"autouv":0,"color":0,"origin":[-7,-17.25,3],"uv_offset":[164,0],"faces":{"north":{"uv":[172,8,189,22],"texture":0},"east":{"uv":[164,8,172,22],"texture":0},"south":{"uv":[197,8,214,22],"texture":0},"west":{"uv":[189,8,197,22],"texture":0},"up":{"uv":[189,8,172,0],"texture":0},"down":{"uv":[206,0,189,8],"texture":0}},"type":"cube","uuid":"743dddda-11f3-1de1-ce13-1bb8ee4b2f25"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-19.757359312880716,4.507359312880715,30],"to":[-6.757359312880716,10.507359312880716,34],"autouv":0,"color":0,"origin":[-6.757359312880716,-17.242640687119284,3],"uv_offset":[280,12],"faces":{"north":{"uv":[284,16,297,22],"texture":0},"east":{"uv":[280,16,284,22],"texture":0},"south":{"uv":[301,16,314,22],"texture":0},"west":{"uv":[297,16,301,22],"texture":0},"up":{"uv":[297,16,284,12],"texture":0},"down":{"uv":[310,12,297,16],"texture":0}},"type":"cube","uuid":"ab11c084-3bde-579c-0778-ff045a8a30c3"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[12.017293447085315,26.6875,57.288840157139376],"to":[21.017293447085315,30.6875,61.288840157139376],"autouv":0,"color":0,"rotation":[-25,1.113194138512231e-14,-39.99999999999995],"origin":[19.017293447085315,11.6875,55.288840157139376],"uv_offset":[330,12],"faces":{"north":{"uv":[334,16,343,20],"texture":0},"east":{"uv":[330,16,334,20],"texture":0},"south":{"uv":[347,16,356,20],"texture":0},"west":{"uv":[343,16,347,20],"texture":0},"up":{"uv":[343,16,334,12],"texture":0},"down":{"uv":[352,12,343,16],"texture":0}},"type":"cube","uuid":"c374388e-9bd8-03f6-2ff0-3adac45ac0ba"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[14.017293447085315,-3.3125,57.288840157139376],"to":[19.017293447085315,1.6875,61.288840157139376],"autouv":0,"color":0,"rotation":[-25,1.113194138512231e-14,-39.99999999999995],"origin":[19.017293447085315,11.6875,55.288840157139376],"uv_offset":[181,130],"faces":{"north":{"uv":[185,134,190,139],"texture":0},"east":{"uv":[181,134,185,139],"texture":0},"south":{"uv":[194,134,199,139],"texture":0},"west":{"uv":[190,134,194,139],"texture":0},"up":{"uv":[190,134,185,130],"texture":0},"down":{"uv":[195,130,190,134],"texture":0}},"type":"cube","uuid":"648eb3cf-d1a0-595b-87db-e7f42ca55510"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[13.017293447085315,1.6875,57.288840157139376],"to":[20.017293447085315,6.6875,61.288840157139376],"autouv":0,"color":0,"rotation":[-25,1.113194138512231e-14,-39.99999999999995],"origin":[19.017293447085315,11.6875,55.288840157139376],"uv_offset":[38,155],"faces":{"north":{"uv":[42,159,49,164],"texture":0},"east":{"uv":[38,159,42,164],"texture":0},"south":{"uv":[53,159,60,164],"texture":0},"west":{"uv":[49,159,53,164],"texture":0},"up":{"uv":[49,159,42,155],"texture":0},"down":{"uv":[56,155,49,159],"texture":0}},"type":"cube","uuid":"564c727d-9fed-ab77-a160-0f61a1fbcd77"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[12.017293447085315,6.6875,57.288840157139376],"to":[21.017293447085315,11.6875,61.288840157139376],"autouv":0,"color":0,"rotation":[-25,1.113194138512231e-14,-39.99999999999995],"origin":[19.017293447085315,11.6875,55.288840157139376],"uv_offset":[328,67],"faces":{"north":{"uv":[332,71,341,76],"texture":0},"east":{"uv":[328,71,332,76],"texture":0},"south":{"uv":[345,71,354,76],"texture":0},"west":{"uv":[341,71,345,76],"texture":0},"up":{"uv":[341,71,332,67],"texture":0},"down":{"uv":[350,67,341,71],"texture":0}},"type":"cube","uuid":"2106f6cc-e2db-101a-748b-735a9eb1d506"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[12.434494447606482,0.3025187732749399,55.379630249098575],"to":[17.434494447606482,5.302518773274941,58.379630249098575],"autouv":0,"color":0,"rotation":[0,1.2921003393445536e-15,-39.999999999999915],"origin":[14.224393730978141,10.828627256692771,55.89636319782414],"uv_offset":[185,208],"faces":{"north":{"uv":[188,211,193,216],"texture":0},"east":{"uv":[185,211,188,216],"texture":0},"south":{"uv":[196,211,201,216],"texture":0},"west":{"uv":[193,211,196,216],"texture":0},"up":{"uv":[193,211,188,208],"texture":0},"down":{"uv":[198,208,193,211],"texture":0}},"type":"cube","uuid":"de681622-440b-af2b-0c32-01a4cd272d51"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[11.434494447606486,5.302518773274941,54.379630249098575],"to":[18.434494447606486,12.30251877327494,58.379630249098575],"autouv":0,"color":0,"rotation":[0,1.2921003393445536e-15,-39.999999999999915],"origin":[14.224393730978141,10.828627256692771,55.89636319782414],"uv_offset":[38,104],"faces":{"north":{"uv":[42,108,49,115],"texture":0},"east":{"uv":[38,108,42,115],"texture":0},"south":{"uv":[53,108,60,115],"texture":0},"west":{"uv":[49,108,53,115],"texture":0},"up":{"uv":[49,108,42,104],"texture":0},"down":{"uv":[56,104,49,108],"texture":0}},"type":"cube","uuid":"52521b34-f935-a1e8-d371-dca512f8267a"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[12.017293447085315,8.6875,52.288840157139376],"to":[21.017293447085315,26.6875,61.288840157139376],"autouv":0,"color":0,"rotation":[-25,1.113194138512231e-14,-39.99999999999995],"origin":[19.017293447085315,11.6875,55.288840157139376],"uv_offset":[74,271],"faces":{"north":{"uv":[83,280,92,298],"texture":0},"east":{"uv":[74,280,83,298],"texture":0},"south":{"uv":[101,280,110,298],"texture":0},"west":{"uv":[92,280,101,298],"texture":0},"up":{"uv":[92,280,83,271],"texture":0},"down":{"uv":[101,271,92,280],"texture":0}},"type":"cube","uuid":"b6cb675d-e7ab-bc1c-83de-3e79f99c0e39"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[3.3505795633058177,8.1875,41.635651731917854],"to":[16.350579563305818,15.1875,48.635651731917854],"autouv":0,"color":0,"rotation":[1.4694882436692546e-14,-77.5000000000001,-20.000000000000032],"origin":[17.35057956330582,11.6875,46.13565173191785],"uv_offset":[0,247],"faces":{"north":{"uv":[7,254,20,261],"texture":0},"east":{"uv":[0,254,7,261],"texture":0},"south":{"uv":[27,254,40,261],"texture":0},"west":{"uv":[20,254,27,261],"texture":0},"up":{"uv":[20,254,7,247],"texture":0},"down":{"uv":[33,247,20,254],"texture":0}},"type":"cube","uuid":"7761d98d-a9cb-35a7-c7a7-198e34ce8b70"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[13.017293447085315,14.6875,48.288840157139376],"to":[25.017293447085315,20.6875,54.288840157139376],"autouv":0,"color":0,"rotation":[-73.2642975585462,-41.267545843548355,58.7820806520273],"origin":[19.517293447085315,11.6875,51.288840157139376],"uv_offset":[280,0],"faces":{"north":{"uv":[286,6,298,12],"texture":0},"east":{"uv":[280,6,286,12],"texture":0},"south":{"uv":[304,6,316,12],"texture":0},"west":{"uv":[298,6,304,12],"texture":0},"up":{"uv":[298,6,286,0],"texture":0},"down":{"uv":[310,0,298,6],"texture":0}},"type":"cube","uuid":"0544f41d-5fd7-de73-8f87-8e26842db697"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-7.700000000000001,7.700000000000001,26.400000000000002],"to":[7.299999999999999,22.700000000000003,41.400000000000006],"autouv":0,"color":0,"origin":[0,0,0],"faces":{"north":{"uv":[15.000000000000004,15.000000000000004,30.000000000000004,30.000000000000007],"texture":0},"east":{"uv":[0,15.000000000000004,15.000000000000004,30.000000000000007],"texture":0},"south":{"uv":[45.00000000000001,15.000000000000004,60.00000000000001,30.000000000000007],"texture":0},"west":{"uv":[30.000000000000004,15.000000000000004,45.00000000000001,30.000000000000007],"texture":0},"up":{"uv":[30.000000000000004,15.000000000000004,15.000000000000004,0],"texture":0},"down":{"uv":[45,0,30,15.000000000000004],"texture":0}},"type":"cube","uuid":"efe51f13-10e2-d1e6-baa6-516fab8fe801"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-5.5,11,41.800000000000004],"to":[5.5,22,52.800000000000004],"autouv":0,"color":0,"origin":[0,0,0],"uv_offset":[141,192],"faces":{"north":{"uv":[152,203,163,214],"texture":0},"east":{"uv":[141,203,152,214],"texture":0},"south":{"uv":[174,203,185,214],"texture":0},"west":{"uv":[163,203,174,214],"texture":0},"up":{"uv":[163,203,152,192],"texture":0},"down":{"uv":[174,192,163,203],"texture":0}},"type":"cube","uuid":"ac139376-f669-87f1-e32f-d6525eb8f730"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-4.4,22,50.6],"to":[-2.4000000000000004,25,52.6],"autouv":0,"color":0,"origin":[0,0,0],"uv_offset":[60,45],"faces":{"north":{"uv":[62,47,64,50],"texture":0},"east":{"uv":[60,47,62,50],"texture":0},"south":{"uv":[66,47,68,50],"texture":0},"west":{"uv":[64,47,66,50],"texture":0},"up":{"uv":[64,47,62,45],"texture":0},"down":{"uv":[66,45,64,47],"texture":0}},"type":"cube","uuid":"e8641445-c9a9-0b3e-83a2-b607852593ac"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[2.2,22,50.6],"to":[4.2,25,52.6],"autouv":0,"color":0,"origin":[0,0,0],"uv_offset":[60,40],"faces":{"north":{"uv":[62,42,64,45],"texture":0},"east":{"uv":[60,42,62,45],"texture":0},"south":{"uv":[66,42,68,45],"texture":0},"west":{"uv":[64,42,66,45],"texture":0},"up":{"uv":[64,42,62,40],"texture":0},"down":{"uv":[66,40,64,42],"texture":0}},"type":"cube","uuid":"0a5a9334-8776-99bd-4a18-7c821cc8806a"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-10.106250000000001,19.8,52.800000000000004],"to":[-8.106250000000001,19.8,72.80000000000001],"autouv":0,"color":0,"rotation":[0,-12.5,0],"origin":[-4.4,19.8,75.9],"uv_offset":[40,20],"faces":{"north":{"uv":[60.00000000000001,40.00000000000001,62.00000000000001,40.00000000000001],"texture":0},"east":{"uv":[40,40.00000000000001,60.00000000000001,40.00000000000001],"texture":0},"south":{"uv":[82.00000000000001,40.00000000000001,84.00000000000001,40.00000000000001],"texture":0},"west":{"uv":[62.00000000000001,40.00000000000001,82.00000000000001,40.00000000000001],"texture":0},"up":{"uv":[62.00000000000001,40.00000000000001,60.00000000000001,20],"texture":0},"down":{"uv":[64,20,62.00000000000001,40.00000000000001],"texture":0}},"type":"cube","uuid":"3fd49385-2fa2-a231-d62b-95097ae30f8e"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-11.1383715351585,14.850147372062839,70.15113296538625],"to":[-9.1383715351585,14.850147372062839,90.15113296538625],"autouv":0,"color":0,"rotation":[30,-12.499999999999998,-4.0722212554752365e-16],"origin":[-10.0383715351585,14.850147372062839,80.05113296538626],"uv_offset":[40,0],"faces":{"north":{"uv":[60,20,62,20],"texture":0},"east":{"uv":[40,20,60,20],"texture":0},"south":{"uv":[82,20,84,20],"texture":0},"west":{"uv":[62,20,82,20],"texture":0},"up":{"uv":[62,20,60,0],"texture":0},"down":{"uv":[64,0,62,20],"texture":0}},"type":"cube","uuid":"1688b13c-9912-9f8a-e576-096494d7e929"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[8.9383715351585,14.850147372062839,70.15113296538625],"to":[10.9383715351585,14.850147372062839,90.15113296538625],"autouv":0,"color":0,"rotation":[30,12.499999999999998,4.0722212554752365e-16],"origin":[10.0383715351585,14.850147372062839,80.05113296538626],"uv_offset":[36,30],"faces":{"north":{"uv":[56,50,58,50],"texture":0},"east":{"uv":[36,50,56,50],"texture":0},"south":{"uv":[78,50,80,50],"texture":0},"west":{"uv":[58,50,78,50],"texture":0},"up":{"uv":[58,50,56,30],"texture":0},"down":{"uv":[60,30,58,50],"texture":0}},"type":"cube","uuid":"4f1836cf-4ba7-8860-2e5b-d8f58230b4fe"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[7.906250000000001,19.8,52.800000000000004],"to":[9.90625,19.8,72.80000000000001],"autouv":0,"color":0,"rotation":[0,12.5,0],"origin":[4.4,19.8,75.9],"uv_offset":[32,30],"faces":{"north":{"uv":[52.00000000000001,50.00000000000001,54.00000000000001,50.00000000000001],"texture":0},"east":{"uv":[32,50.00000000000001,52.00000000000001,50.00000000000001],"texture":0},"south":{"uv":[74.00000000000001,50.00000000000001,76.00000000000001,50.00000000000001],"texture":0},"west":{"uv":[54.00000000000001,50.00000000000001,74.00000000000001,50.00000000000001],"texture":0},"up":{"uv":[54.00000000000001,50.00000000000001,52.00000000000001,30],"texture":0},"down":{"uv":[56.00000000000001,30,54.00000000000001,50.00000000000001],"texture":0}},"type":"cube","uuid":"b653c92b-ab19-f852-611e-aaeb6838b22b"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-20,4.5,-34],"to":[20,10.5,-30],"autouv":0,"color":0,"origin":[-7,-17.25,3],"uv_offset":[92,221],"faces":{"north":{"uv":[96,225,136,231],"texture":0},"east":{"uv":[92,225,96,231],"texture":0},"south":{"uv":[140,225,180,231],"texture":0},"west":{"uv":[136,225,140,231],"texture":0},"up":{"uv":[136,225,96,221],"texture":0},"down":{"uv":[176,221,136,225],"texture":0}},"type":"cube","uuid":"a94c7118-b4a6-b117-b22c-51eb834efe25"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-7.242640687119284,4.507359312880714,30],"to":[19.757359312880716,10.507359312880716,34],"autouv":0,"color":0,"origin":[12.757359312880716,-17.242640687119284,3],"uv_offset":[0,56],"faces":{"north":{"uv":[4,60,31,66],"texture":0},"east":{"uv":[0,60,4,66],"texture":0},"south":{"uv":[35,60,62,66],"texture":0},"west":{"uv":[31,60,35,66],"texture":0},"up":{"uv":[31,60,4,56],"texture":0},"down":{"uv":[58,56,31,60],"texture":0}},"type":"cube","uuid":"05d7d1b5-7a3e-ddd1-7be1-9df970563e8b"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-7.699999809265137,5.4172006236213015,31.193417061931],"to":[7.300000190734863,8.417200623621302,41.193417061931],"autouv":0,"color":0,"rotation":[-17.5,0,0],"origin":[-0.19999980926513672,7.2297006236213015,33.880917061931],"uv_offset":[264,268],"faces":{"north":{"uv":[274,278,289,281],"texture":0},"east":{"uv":[264,278,274,281],"texture":0},"south":{"uv":[299,278,314,281],"texture":0},"west":{"uv":[289,278,299,281],"texture":0},"up":{"uv":[289,278,274,268],"texture":0},"down":{"uv":[304,268,289,278],"texture":0}},"type":"cube","uuid":"6a749b08-99b5-98b1-e986-1a29bd5f6322"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-26.017293447085315,14.6875,48.288840157139376],"to":[-14.017293447085315,20.6875,54.288840157139376],"autouv":0,"color":0,"rotation":[-73.2642975585463,41.267545843548405,-53.782080652027325],"origin":[-20.517293447085315,11.6875,51.288840157139376],"uv_offset":[236,166],"faces":{"north":{"uv":[242,172,254,178],"texture":0},"east":{"uv":[236,172,242,178],"texture":0},"south":{"uv":[260,172,272,178],"texture":0},"west":{"uv":[254,172,260,178],"texture":0},"up":{"uv":[254,172,242,166],"texture":0},"down":{"uv":[266,166,254,172],"texture":0}},"type":"cube","uuid":"ed2a02d5-9cba-42a2-42fc-c5ba21f14845"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-17.350579563305818,8.1875,41.635651731917854],"to":[-4.350579563305818,15.1875,48.635651731917854],"autouv":0,"color":0,"rotation":[3.1593997238890236e-13,77.50000000000057,25.00000000000083],"origin":[-18.35057956330582,11.6875,46.13565173191785],"uv_offset":[181,78],"faces":{"north":{"uv":[188,85,201,92],"texture":0},"east":{"uv":[181,85,188,92],"texture":0},"south":{"uv":[208,85,221,92],"texture":0},"west":{"uv":[201,85,208,92],"texture":0},"up":{"uv":[201,85,188,78],"texture":0},"down":{"uv":[214,78,201,85],"texture":0}},"type":"cube","uuid":"faf5693a-0283-c7f3-f2ce-cb9fdfcdb953"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-22.017293447085315,8.6875,52.288840157139376],"to":[-13.017293447085315,26.6875,61.288840157139376],"autouv":0,"color":0,"rotation":[-25.000000000000036,-1.2722218725854067e-14,44.99999999999997],"origin":[-20.017293447085315,11.6875,55.288840157139376],"uv_offset":[38,271],"faces":{"north":{"uv":[47,280,56,298],"texture":0},"east":{"uv":[38,280,47,298],"texture":0},"south":{"uv":[65,280,74,298],"texture":0},"west":{"uv":[56,280,65,298],"texture":0},"up":{"uv":[56,280,47,271],"texture":0},"down":{"uv":[65,271,56,280],"texture":0}},"type":"cube","uuid":"ef07b0b7-2298-0481-2351-c28e14204c36"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-19.434494447606486,6.302518773274941,54.379630249098575],"to":[-12.434494447606486,13.30251877327494,58.379630249098575],"autouv":0,"color":0,"rotation":[-7.062250076880254e-31,-1.2921003393445536e-15,44.99999999999995],"origin":[-15.224393730978141,10.828627256692771,55.89636319782414],"uv_offset":[38,78],"faces":{"north":{"uv":[42,82,49,89],"texture":0},"east":{"uv":[38,82,42,89],"texture":0},"south":{"uv":[53,82,60,89],"texture":0},"west":{"uv":[49,82,53,89],"texture":0},"up":{"uv":[49,82,42,78],"texture":0},"down":{"uv":[56,78,49,82],"texture":0}},"type":"cube","uuid":"779f7e2b-3fa7-f61f-a117-091f501848f7"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-18.434494447606482,1.30251877327494,55.379630249098575],"to":[-13.434494447606482,6.302518773274941,58.379630249098575],"autouv":0,"color":0,"rotation":[-7.062250076880254e-31,-1.2921003393445536e-15,44.99999999999995],"origin":[-15.224393730978141,10.828627256692771,55.89636319782414],"uv_offset":[185,200],"faces":{"north":{"uv":[188,203,193,208],"texture":0},"east":{"uv":[185,203,188,208],"texture":0},"south":{"uv":[196,203,201,208],"texture":0},"west":{"uv":[193,203,196,208],"texture":0},"up":{"uv":[193,203,188,200],"texture":0},"down":{"uv":[198,200,193,203],"texture":0}},"type":"cube","uuid":"99759ac5-7350-0f29-7e52-32adb2ffb805"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-22.017293447085315,6.6875,57.288840157139376],"to":[-13.017293447085315,11.6875,61.288840157139376],"autouv":0,"color":0,"rotation":[-25.000000000000036,-1.2722218725854067e-14,44.99999999999997],"origin":[-20.017293447085315,11.6875,55.288840157139376],"uv_offset":[318,144],"faces":{"north":{"uv":[322,148,331,153],"texture":0},"east":{"uv":[318,148,322,153],"texture":0},"south":{"uv":[335,148,344,153],"texture":0},"west":{"uv":[331,148,335,153],"texture":0},"up":{"uv":[331,148,322,144],"texture":0},"down":{"uv":[340,144,331,148],"texture":0}},"type":"cube","uuid":"363c7768-3843-8bc0-7f67-ef4c4913e87f"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-21.017293447085315,1.6875,57.288840157139376],"to":[-14.017293447085315,6.6875,61.288840157139376],"autouv":0,"color":0,"rotation":[-25.000000000000036,-1.2722218725854067e-14,44.99999999999997],"origin":[-20.017293447085315,11.6875,55.288840157139376],"uv_offset":[38,130],"faces":{"north":{"uv":[42,134,49,139],"texture":0},"east":{"uv":[38,134,42,139],"texture":0},"south":{"uv":[53,134,60,139],"texture":0},"west":{"uv":[49,134,53,139],"texture":0},"up":{"uv":[49,134,42,130],"texture":0},"down":{"uv":[56,130,49,134],"texture":0}},"type":"cube","uuid":"e68164af-c04f-25b2-5794-5a33f6882e51"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-20.017293447085315,-3.3125,57.288840157139376],"to":[-15.017293447085315,1.6875,61.288840157139376],"autouv":0,"color":0,"rotation":[-25.000000000000036,-1.2722218725854067e-14,44.99999999999997],"origin":[-20.017293447085315,11.6875,55.288840157139376],"uv_offset":[181,104],"faces":{"north":{"uv":[185,108,190,113],"texture":0},"east":{"uv":[181,108,185,113],"texture":0},"south":{"uv":[194,108,199,113],"texture":0},"west":{"uv":[190,108,194,113],"texture":0},"up":{"uv":[190,108,185,104],"texture":0},"down":{"uv":[195,104,190,108],"texture":0}},"type":"cube","uuid":"1ff63108-1647-c24a-7a12-5126f6f2d513"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"from":[-22.017293447085315,26.6875,57.288840157139376],"to":[-13.017293447085315,30.6875,61.288840157139376],"autouv":0,"color":0,"rotation":[-25.000000000000036,-1.2722218725854067e-14,44.99999999999997],"origin":[-20.017293447085315,11.6875,55.288840157139376],"uv_offset":[326,301],"faces":{"north":{"uv":[330,305,339,309],"texture":0},"east":{"uv":[326,305,330,309],"texture":0},"south":{"uv":[343,305,352,309],"texture":0},"west":{"uv":[339,305,343,309],"texture":0},"up":{"uv":[339,305,330,301],"texture":0},"down":{"uv":[348,301,339,305],"texture":0}},"type":"cube","uuid":"96d5021a-743d-da37-2c90-4d78c96471ea"}],"outliner":[{"name":"Everything","origin":[0,0,0],"rotation":[0,-180,0],"color":0,"uuid":"225a5c9d-3896-7ae5-ca6b-2db074723aa7","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"body","origin":[22.585786437626908,8.75,13],"color":0,"uuid":"8c693161-93d3-0822-7df7-e018e005e933","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["e76105fd-6ac7-67bd-8d9e-47b134ae2b9c","7f82a42a-463a-0706-defd-80e6a81b4678","f4650799-1c5c-84f7-5412-96983ecd3b17","adc71653-c4ce-9e73-a1db-1f64dd9fb480","0144e097-b2f0-17ff-ccc8-13c9c09aef5d","3e3db869-a499-1768-6d93-def64cbde61f","38b4bd52-b061-ee78-496e-ecc9d00b9c0a","a94c7118-b4a6-b117-b22c-51eb834efe25","ab11c084-3bde-579c-0778-ff045a8a30c3","05d7d1b5-7a3e-ddd1-7be1-9df970563e8b","743dddda-11f3-1de1-ce13-1bb8ee4b2f25","11b68558-97a5-5520-131c-121bd0755d20","a03ae94d-82fe-2785-aded-964e73f08c52","7af561f3-3881-190b-2f7f-1b8cf085593c","318e8291-f63b-d1a1-db70-b4ec368a2cfe","524c7552-0f50-1885-1aea-1c41ba23e9e7"]},{"name":"head","origin":[0,19.8,34.900000000000006],"color":0,"uuid":"c534e5bc-0e0c-30e7-7e31-bd39200992fa","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["4f1836cf-4ba7-8860-2e5b-d8f58230b4fe","efe51f13-10e2-d1e6-baa6-516fab8fe801","6a749b08-99b5-98b1-e986-1a29bd5f6322","ac139376-f669-87f1-e32f-d6525eb8f730","e8641445-c9a9-0b3e-83a2-b607852593ac","0a5a9334-8776-99bd-4a18-7c821cc8806a","3fd49385-2fa2-a231-d62b-95097ae30f8e","1688b13c-9912-9f8a-e576-096494d7e929","b653c92b-ab19-f852-611e-aaeb6838b22b"]},{"name":"right_foreleg","origin":[-15,10.8,32],"color":0,"uuid":"5078d36b-a1b6-3cb6-1956-0fe04221eeef","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["faf5693a-0283-c7f3-f2ce-cb9fdfcdb953","ed2a02d5-9cba-42a2-42fc-c5ba21f14845","ef07b0b7-2298-0481-2351-c28e14204c36","96d5021a-743d-da37-2c90-4d78c96471ea","363c7768-3843-8bc0-7f67-ef4c4913e87f","e68164af-c04f-25b2-5794-5a33f6882e51","1ff63108-1647-c24a-7a12-5126f6f2d513","779f7e2b-3fa7-f61f-a117-091f501848f7","99759ac5-7350-0f29-7e52-32adb2ffb805"]},{"name":"front_right_leg","origin":[-17,15,16.5],"color":0,"uuid":"e0592427-5dc8-a76e-80b7-20ccb46640fe","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["52ab6eb3-eaae-f041-603b-06d4a2489bb0","5b7769e1-1140-21a0-f104-af631f014a9f","a67a1a3b-baa3-2860-448b-1e891888aa2b","57c5e0ad-cf49-4b76-bcc6-e6264fd992c5","b388b281-6432-7111-cbfd-4097d39f5a75","a08061b9-44d3-d1f4-1c11-de1049461897","5fe24b37-4fbb-c214-c6ab-cb0fa38f7f31","ac591aef-697b-18bd-a968-7551852d15f0","2a5f1029-4736-5e49-8679-4115c9c3b159","893db7aa-2de8-7ca4-1d61-b87c81226e20","1ae4d8db-4adf-7a7b-7d89-f1650d8f268f","67ded8d7-58e0-195a-231a-276faa8d9a06","16311827-8421-7d6c-c54b-1cf252bc7228","2399f5ae-0f0d-817a-b5a7-838a9f33334d","d10265d7-442a-a794-ea23-8291ec9731a3","51a174c4-16cd-4cc8-81d5-5623ebfdb925","83dd185c-ba51-b7ab-e7f7-42a6cf790c99","632b529f-f492-26af-8fb1-71636fb8465f","deb49571-0d4a-8092-80e0-a36e5a23ea4d","90147b6b-a3d4-0564-6bed-e82c33f43006","80c9dc79-ecbd-a255-1ef5-78ecd6a33360","43921d9f-05d6-7a46-0c58-95b1ec5d5c14","a6d9372f-040c-bd75-7377-f1ec6330fdfd","269303e8-a2a8-22c7-e5fd-6df5834f9812","d4499ed2-9c21-9437-9f39-e18ca0372157","d18aa3ec-469e-22da-0a29-0b1639bba50e","c6ed1813-535f-58d9-4568-6fc18fb84df8","e962ef82-db89-0378-c758-f9b7a6e23b21","294fc59b-e1b2-5162-3820-b5b6beae240d","7115ff6a-2382-753e-3fce-f8fd7e8ebf99","a35adf92-7aa9-ab9d-ee0f-ba8ee11f7f89","979b86bd-b5ac-a094-f0e4-e3e8aa4fa346","03650dbf-ceaf-56c6-5747-9cb417605954"]},{"name":"middle_right_leg","origin":[-20,14.5,0],"color":0,"uuid":"4aa05215-6c0b-d398-6a98-d7dd7c94f0c8","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["607fb366-c53a-1971-1ddc-d660a36924b4","1607d473-450a-b153-0c80-fc96436bbbd8","8d882fe8-7547-c6fa-a35f-1c3391f67ac3","3dfd1758-3102-63ef-2936-b87ed7a84ec1","6064062a-ce4f-3fd0-10f2-752b0ae6d312","94e53b1c-196a-9ff2-2bdc-41a143122283","0fff2fef-7105-e871-f00d-f55b585cc812","0c88ea64-1e64-ab91-5249-b5eb181d7fd7","f4349477-9863-1b6f-ff88-e282a7986fd2","0574d4a5-e3a8-486d-ea25-bb999c665dff","7d9f17ca-3bab-1815-2edf-f8d4f382284c","15e4c649-787e-df0e-0bf5-afeb9f1b3dca","cc92d339-959f-dd1b-a84a-963e29a82eb1","9f98ac42-bd57-0240-b2a5-4262beeac7e5","44ab1994-c9ad-0a3f-91f0-f5a9f90d57d0","48653996-5f86-7273-5167-954758de7908","592fea65-42be-8f2f-c2b1-e7bf8e1bdf6d","543a620c-0c48-7477-f5d0-a93179465fbf","94b71c96-139c-79c5-df8b-7743bb215d0c","232770e6-3ca5-d4da-cb44-cdc93df20cc1","2c7b0465-bedd-da96-1fe0-62c46b3456f1","4bd6b020-02aa-bd00-1305-19f08f101ab9","e40d2acb-4fbc-0f1d-4207-2eac1efeaa3d","c4c1f9f4-8858-912a-3927-db04943a36b2","c9f5d1ea-9728-e15f-dda6-d350f269cecf","ad1df379-4060-0969-8976-2f9133399dba","a0fbdbab-df3d-a15d-2d08-95320b7459ba","f64c6fe7-330d-edff-b94d-d3768ab7a9e5","aa060338-378b-afb6-94e5-6433a5b548da","8439e200-32e6-f7ca-1654-430e000266af","d50127b1-5a23-d77c-e31a-180da3865f1c","38c61638-086f-2e8f-83bc-0bd7c9c8a414","3bba687d-6bb1-590b-1978-8ee93a804430"]},{"name":"back_right_leg","origin":[-20,14,-16],"color":0,"uuid":"41d69265-8592-622c-1ba0-12bd8d738cad","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["f16ec369-e42e-73b2-5583-1a62936b2c74","54ebeabc-1e75-2576-f10a-8c21a69ead4a","9f191201-3f8d-e392-0f66-1778af110a4c","1815a980-4878-0c37-dc17-2a990f965423","c3cd9e6e-5afb-04b8-cd95-2f3124050b61","13afbd27-11fc-d25e-02e1-0fe672a8cc43","1f7bc007-fa3e-aa43-e5a3-caf1821e7ebf","9d65b17b-444b-94df-ae6d-2518aefbd816","02702ec3-cce1-9bb2-ae06-92d4fafb9322","74e4e526-261d-682a-96f2-c4c167076ebe","c847d5a6-d43a-bb2e-1282-9dc47b69a60c","6ab02939-baf7-e2b1-9b20-db2c69f0866b","8c85391d-01c8-d8c4-03e5-156ee992908f","ef3319e8-7d2b-4bd4-433a-885d42817dbf","ffe93e17-967f-78b1-a453-8ff6511014a0","83c3a882-83cd-ea71-e44e-8cf1f1a550ee","5cf3b277-d8f9-2cc0-d226-1d1585624fb8","054bedfe-287e-2809-f495-c6e488b45397","230f9e26-6cf7-9e2b-920d-b8d5d9b2ca32","59602358-3b15-2501-7fd3-6b2d6375374a","be156cd9-8d53-f073-641d-50c86f685b57","69fc4267-42a0-1b7e-b372-d22de6d3cf61","461233be-638f-5511-5868-d5d0c620b8e9","c8472377-c7ef-114c-aa5c-d5bf59480df2","62ee84c7-1df1-36b3-475c-91de8aeaad9b","202013b1-8ecc-68be-e669-84764990b991","72366eea-e453-52d5-7458-e90a8d092fd7","ef9847b0-6b1c-9341-c14b-f2dfa18832be","152f78c6-ac2a-9245-eff5-514da716b5b7","6f54ea13-ed2d-9386-5267-4a40d13249fc","fe7fbbc5-b11e-e7d8-512d-6ebdf8756f49","42b12de0-bde7-bc22-e6c3-09ebf5b7221c","7066deb7-3547-8884-bea7-a4d94760db48"]},{"name":"left_foreleg","origin":[16.68702258003463,12.548929736318327,32],"color":0,"uuid":"432ffc27-f316-711b-1da3-158c0bc22fbb","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["0544f41d-5fd7-de73-8f87-8e26842db697","7761d98d-a9cb-35a7-c7a7-198e34ce8b70","b6cb675d-e7ab-bc1c-83de-3e79f99c0e39","52521b34-f935-a1e8-d371-dca512f8267a","de681622-440b-af2b-0c32-01a4cd272d51","2106f6cc-e2db-101a-748b-735a9eb1d506","564c727d-9fed-ab77-a160-0f61a1fbcd77","648eb3cf-d1a0-595b-87db-e7f42ca55510","c374388e-9bd8-03f6-2ff0-3adac45ac0ba"]},{"name":"front_left_leg","origin":[17,15,16.5],"color":0,"uuid":"7c8a2965-e2dd-99f6-02a9-4723d9ac98fe","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["3927d906-d442-4458-c288-2387060a44b6","809bbe6f-aa2d-52f4-0aab-b6edee149ee6","4f37afc2-dde4-dea6-62d6-8a7ca61e2813","d818e7e1-a0c8-082b-621b-3c7c79e5a395","d2a94d13-c6eb-0741-1b3f-62b88bdd34da","6e0a8fbc-3e56-af51-3101-5fc25f833eeb","20955d94-1601-beea-40c0-9cdcd8ffaf50","91ed5460-839d-6092-477e-0ccf74c92d6c","b69787cf-28fb-a3d5-f40a-8325be0467d0","8f15743c-b23d-a8d4-11f6-90c2a1109c8d","26395c9f-8953-ee05-f99d-a43f5c02832f","26eb2098-d03f-a06d-8221-de4d80b62dd9","93c193e7-f1f0-129f-183b-8c7428936a34","2105f29c-39d7-d705-22a8-2c29f8af188c","41815d3b-0fbd-91b4-3bbf-25b70856b725","0ab81bc4-b785-3b4c-9d97-7101b21d14f4","d9637e4f-7ec1-142a-b293-a143329f9597","cb6b20ac-4813-93cb-c07d-919369ddd446","5df03304-c0f3-0b31-dba8-423ba28a60cd","bbfd7458-d7d5-6200-4cad-d3a031cf4c75","a6ddd8e0-cc21-c17b-3148-c804ba964d58","5e656e23-007e-427e-2be1-8d7a2e26394d","8ec4a847-c78d-bb71-c775-5e32a02f46dc","bbe802f0-184b-fc5a-2b97-33178b6947f2","0c83d4ad-f986-3390-33a0-1ede82231776","4e9f1f88-4a08-d131-1dae-a44514ca4cd9","dd716f22-290c-285f-a16a-6906b08e3fde","f0cbe10e-a501-857e-f90f-b205593d062d","8c62cdd9-d2b6-3fcf-c603-c6a2ba42f0a5","f1a3f19d-ac70-3038-8b21-0229e12a6b8b","c72e97eb-6310-5044-fe92-38e29a908de0","eadce4f7-89a1-6d8b-c5fc-384288aaefa4","acee732c-bb4d-265d-62c0-c4b14c0e9c23"]},{"name":"middle_left_leg","origin":[20,14.5,0],"color":0,"uuid":"e954d161-5e61-037d-7664-42d48fddfcb2","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["5131a3f8-3b71-68b9-7002-9fb45053e943","2e956fa5-29ab-9996-2f55-a5c4f26992f3","b8ab140f-ff04-3a29-3dd8-f105bafdd0e6","7bb1fdaa-d223-1d56-5109-07a18f65c328","c165b077-1c23-f7b3-9093-e65d98b256f2","5e01bb4a-3e3f-92c1-48d8-2cfd4111c0ef","561e03e9-693b-597c-eef8-0e87ed84b37c","4031d07a-4392-b0d7-e44a-a3d32d7e69fe","590e1995-aa95-299b-eef5-732d6ac1c4f8","f8fb9a22-9196-ecbf-664b-c7b57aae346b","2082d7a9-3843-9ab8-6818-58f07c4ba5df","88ceb5cf-024c-71c3-dad5-a7bee19b93f8","0979a20c-f194-a7c4-a5f8-22e9436496ba","6b5011eb-51a9-682e-86df-b1a34c694ced","05380e75-5cf7-8427-f118-fb671977384a","ae0b6b11-4a13-fd1a-eebd-9e4f9e847491","51313aa8-afb6-c07f-07ef-3506275404aa","9ad4f3d5-8036-bc56-5465-0a8e90050d4d","dc6166d4-5f0e-1f38-0916-02ccec85cf5d","17692a33-8cd2-eb80-1f84-7b883347af8e","d3c4d2e1-2dfa-1027-5494-093070b1aef8","16f39a66-5986-66a8-b2ab-e3117470d2b6","05362a32-47c2-b0cc-2a62-722d6d06db85","f7436df3-0c30-a464-73dd-7415a6fd0e45","f52c5c07-66f8-c6d5-1132-f92fe1a72f95","42cd17db-9ef8-dafd-83e1-fb2abf76e1e7","fd5e7d99-d232-5a89-72b7-877f84d4ca0b","86628a1f-92bb-0088-743b-98deca274be5","3bd03361-cd8b-8976-792c-db9ce3b8dcf7","378b9e14-65e7-9f18-7117-2faefde985a0","2b4b128e-e94a-842a-2deb-bd3a14dac42c","95d11859-d7ba-e397-ba0c-3be402bf329f","de28f347-01d3-808b-d23f-dc8f97ba39f4"]},{"name":"back_left_leg","origin":[20,14,-16],"color":0,"uuid":"23d6a211-c043-8e74-db2e-5210236e69f1","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["c38c50b0-ac83-a802-1bc8-9372778ffccc","64748d78-5c2d-e6ec-1cac-9fa178fa8566","96236ba1-bca3-47f9-dc85-a33324a10569","c014f0f0-c01c-54ee-dd77-e344d9524fa8","b451b336-355b-edef-5e56-8ef98514edfd","7bd6118c-6524-a58a-3109-c6ea65ff53d4","441045b6-cd3c-c110-7cf2-9da5ee05ee63","7cac05cd-b09b-c003-c4ae-663cc4636f86","83e6a221-98f5-d66e-edb8-ef0819524e5e","a6d455ac-9c19-407c-65be-27d0c4fecff6","dc1ace27-b9ce-e5d5-0704-4a2603e0ea75","b72448e3-dbbd-f0c2-f390-bf7ff5022002","6de6119e-032f-be6f-8051-e3b5da01fca9","b1a6c8fa-304d-19b7-f4e2-c37298aaf46f","4edcdec1-b347-f2bb-b294-50c8921b01d2","41310ca2-e92b-29e3-1713-5ebfe9e39b5e","57030e77-c041-8add-e061-1ce76c727206","a3a59bb5-b94c-fa15-7ff8-14e43167f6c9","75396845-e823-9641-faf2-c2fe1990eb76","cd146e93-a5f1-6017-54e8-08d6052efa15","993bb223-93ee-7728-8617-b8e765defac3","eb48d141-9af8-b398-1afc-04a5fafd3fb6","59408ce5-c286-7d8b-9027-d1d757c4ae81","66681aad-e11f-8fd0-e807-2e754138e084","5e8270ac-c195-9cc0-b78c-bbffa8b327d7","d8f309d8-abf2-dc38-6d29-3ee1057cb19f","38f28f4e-ff1e-28f4-7703-66d3ecd83532","58fc4942-fa4c-c7cd-7446-b685855d648f","c5bf455f-bee3-f135-357c-0a622f2d2117","3a0925ce-4c25-75c7-5618-619d11ef03cd","af0f278a-4b14-d85d-b543-db1396dd96c2","98a22dd0-14f0-8297-4f0b-b75ec5c30284","2d37846b-6532-82cc-29f3-9fce7475036c"]}]}],"textures":[{"path":"Z:\\Repo\\Minecraft\\2021\\CosmereProject\\_cosmere\\src\\surgebinding\\resources\\assets\\surgebinding\\textures\\entity\\chull\\chull.png","name":"chull.png","folder":"block","namespace":"","id":"0","particle":false,"render_mode":"default","render_sides":"auto","frame_time":1,"frame_order_type":"loop","frame_order":"","frame_interpolate":false,"visible":true,"mode":"bitmap","saved":true,"uuid":"f3e51725-2995-2419-4f93-c253f9f47b14","relative_path":"../../src/surgebinding/resources/assets/surgebinding/textures/entity/chull/chull.png","source":"data:image/png;base64,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AQQQQAABBAISIAABiy5lBBBAAAEECIAeQAABBBBAICABAhCw6FJGAAEEEECAAOgBBBBAAAEEAhIgAAGLLmUEEEAAAQQIgB5AAAEEEEAgIAECELDoUkYAAQQQQIAA6AEEEEAAAQQCEiAAAYsuZQQQQAABBAiAHkAAAQQQQCAgAQIQsOhSRgABBBBAgADoAQQQQAABBAISIAABiy5lBBBAAAEECIAeQAABBBBAICABAhCw6FJGAAEEEECAAOgBBBBAAAEEAhIgAAGLLmUEEEAAAQQIgB5AAAEEEEAgIAECELDoUkYAAQQQQIAA6AEEEEAAAQQCEiAAAYsuZQQQQAABBAiAHkAAAQQQQCAgAQIQsOhSRgABBBBAgADoAQQQQAABBAISIAABiy5lBBBAAAEECIAeQAABBBBAICABAhCw6FJGAAEEEECAAOgBBBBAAAEEAhIgAAGLLmUEEEAAAQQIgB5AAAEEEEAgIAECELDoUkYAAQQQQIAA6AEEEEAAAQQCEiAAAYsuZQQQQAABBAiAHkAAAQQQQCAgAQIQsOhSRgABBBBAgADoAQQQQAABBAISIAABiy5lBBBAAAEECIAeQAABBBBAICABAhCw6FJGAAEEEECAAOgBBBBAAAEEAhIgAAGLLmUEEEAAAQQIgB5AAAEEEEAgIAECELDoUkYAAQQQQIAA6AEEEEAAAQQCEiAAAYsuZQQQQAABBAiAHkAAAQQQQCAgAQIQsOhSRgABBBBAgADoAQQQQAABBAISIAABiy5lBBBAAAEECIAeQAABBBBAICABAhCw6FJGAAEEEECAAOgBBBBAAAEEAhIgAAGLLmUEEEAAAQQIgB5AAAEEEEAgIAECELDoUkYAAQQQQIAA6AEEEEAAAQQCEiAAAYsuZQQQQAABBAiAHkAAAQQQQCAgAQIQsOhSRgABBBBAgADoAQQQQAABBAISIAABiy5lBBBAAAEECIAeQAABBBBAICABAhCw6FJGAAEEEECAAOgBBBBAAAEEAhIgAAGLLmUEEEAAAQQIgB5AAAEEEEAgIAECELDoUkYAAQQQQIAA6AEEEEAAAQQCEiAAAYsuZQQQQAABBAiAHkAAAQQQQCAgAQIQsOhSRgABBBBAgADoAQQQQAABBAISIAABiy5lBBBAAAEECIAeQAABBBBAICABAhCw6FJGAAEEEECAAOgBBBBAAAEEAhIgAAGLLmUEEEAAAQQIgB5AAAEEEEAgIAECELDoUkYAAQQQQIAA6AEEEEAAAQQCEiAAAYsuZQQQQAABBAiAHkAAAQQQQCAgAQIQsOhSRgABBBBAgADoAQQQQAABBAISIAABiy5lBBBAAAEECIAeQAABBBBAICABAhCw6FJGAAEEEECAAOgBBBBAAAEEAhIgAAGLLmUEEEAAAQQIgB5AAAEEEEAgIAECELDoUkYAAQQQQIAA6AEEEEAAAQQCEiAAAYsuZQQQQAABBAiAHkAAAQQQQCAgAQIQsOhSRgABBBBAgADoAQQQQAABBAISIAABiy5lBBBAAAEECIAeQAABBBBAICABAhCw6FJGAAEEEECAAOgBBBBAAAEEAhIgAAGLLmUEEEAAAQQIgB5AAAEEEEAgIAECELDoUkYAAQQQQIAA6AEEEEAAAQQCEiAAAYsuZQQQQAABBAiAHkAAAQQQQCAgAQIQsOhSRgABBBBAgADoAQQQQAABBAISIAABiy5lBBBAAAEECIAeQAABBBBAICABAhCw6FJGAAEEEECAAOgBBBBAAAEEAhIgAAGLLmUEEEAAAQQIgB5AAAEEEEAgIAECELDoUkYAAQQQQIAA6AEEEEAAAQQCEiAAAYsuZQQQQAABBAiAHkAAAQQQQCAgAQIQsOhSRgABBBBAgADoAQQQQAABBAISIAABiy5lBBBAAAEECIAeQAABBBBAICABAhCw6FJGAAEEEECAAOgBBBBAAAEEAhIgAAGLLmUEEEAAAQQIgB5AAAEEEEAgIAECELDoUkYAAQQQQIAA6AEEEEAAAQQCEiAAAYsuZQQQQAABBAiAHkAAAQQQQCAgAQIQsOhSRgABBBBAgADoAQQQQAABBAISIAABiy5lBBBAAAEECIAeQAABBBBAICCB/w92xp8OGRDXXwAAAABJRU5ErkJggg=="}]} \ No newline at end of file diff --git a/blockbench/surgebinding/entities/chull/Chull3.bbmodel b/blockbench/surgebinding/entities/chull/Chull3.bbmodel new file mode 100644 index 000000000..6fbc5dc0a --- /dev/null +++ b/blockbench/surgebinding/entities/chull/Chull3.bbmodel @@ -0,0 +1 @@ +{"meta":{"format_version":"4.10","model_format":"modded_entity","box_uv":true},"name":"Chull3","model_identifier":"","modded_entity_entity_class":"","modded_entity_version":"1.17","modded_entity_flip_y":true,"visible_box":[1,1,0],"variable_placeholders":"","variable_placeholder_buttons":[],"timeline_setups":[],"unhandled_root_fields":{},"resolution":{"width":128,"height":128},"elements":[{"name":"bottom","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-16,2,-16],"to":[16,18,16],"autouv":0,"color":0,"origin":[-12,-10,12],"faces":{"north":{"uv":[32,32,64,48],"texture":0},"east":{"uv":[0,32,32,48],"texture":0},"south":{"uv":[96,32,128,48],"texture":0},"west":{"uv":[64,32,96,48],"texture":0},"up":{"uv":[64,32,32,0],"texture":0},"down":{"uv":[96,0,64,32],"texture":0}},"type":"cube","uuid":"0a7c4075-bc6c-9296-d12b-6bdd4073e03f"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-27.8157,0,14.01806],"to":[-20.8157,10,22.01806],"autouv":0,"color":7,"rotation":[0,45,0],"origin":[-23.44367,6.89062,18.42469],"uv_offset":[32,94],"faces":{"north":{"uv":[40,102,47,112],"texture":0},"east":{"uv":[32,102,40,112],"texture":0},"south":{"uv":[55,102,62,112],"texture":0},"west":{"uv":[47,102,55,112],"texture":0},"up":{"uv":[47,102,40,94],"texture":0},"down":{"uv":[54,94,47,102],"texture":0}},"type":"cube","uuid":"9b8a6dcb-83cf-e083-cb53-db119414cebf"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-27.3157,0,22.01806],"to":[-21.3157,4,25.01806],"autouv":0,"color":7,"rotation":[0,45,0],"origin":[-23.44367,6.89062,18.42469],"uv_offset":[96,0],"faces":{"north":{"uv":[99,3,105,7],"texture":0},"east":{"uv":[96,3,99,7],"texture":0},"south":{"uv":[108,3,114,7],"texture":0},"west":{"uv":[105,3,108,7],"texture":0},"up":{"uv":[105,3,99,0],"texture":0},"down":{"uv":[111,0,105,3],"texture":0}},"type":"cube","uuid":"f99515f5-e8f6-5184-08c7-d43d8a4a36b8"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-26.7907,-0.26471,16.21802],"to":[-21.7907,3.73529,19.21802],"autouv":0,"color":7,"rotation":[-60,45,0],"origin":[-23.44367,6.89062,18.42469],"uv_offset":[0,120],"faces":{"north":{"uv":[3,123,8,127],"texture":0},"east":{"uv":[0,123,3,127],"texture":0},"south":{"uv":[11,123,16,127],"texture":0},"west":{"uv":[8,123,11,127],"texture":0},"up":{"uv":[8,123,3,120],"texture":0},"down":{"uv":[13,120,8,123],"texture":0}},"type":"cube","uuid":"9cb74de9-41ce-76db-297b-21b016b9fb5e"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-26.7907,-1.78441,19.6894],"to":[-21.7907,1.09059,22.6894],"autouv":0,"color":7,"rotation":[-30,45,0],"origin":[-23.44367,6.89062,18.42469],"uv_offset":[96,7],"faces":{"north":{"uv":[99,10,104,12.875],"texture":0},"east":{"uv":[96,10,99,12.875],"texture":0},"south":{"uv":[107,10,112,12.875],"texture":0},"west":{"uv":[104,10,107,12.875],"texture":0},"up":{"uv":[104,10,99,7],"texture":0},"down":{"uv":[109,7,104,10],"texture":0}},"type":"cube","uuid":"48927ba4-b9a6-d6fa-1f2d-d56d753a750f"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-27.3157,0,25.01806],"to":[-21.3157,1.5,26.45556],"autouv":0,"color":7,"rotation":[0,45,0],"origin":[-23.44367,6.89062,18.42469],"uv_offset":[114,5],"faces":{"north":{"uv":[115.4375,6.4375,121.4375,7.9375],"texture":0},"east":{"uv":[114,6.4375,115.4375,7.9375],"texture":0},"south":{"uv":[122.875,6.4375,128.875,7.9375],"texture":0},"west":{"uv":[121.4375,6.4375,122.875,7.9375],"texture":0},"up":{"uv":[121.4375,6.4375,115.4375,5],"texture":0},"down":{"uv":[127.4375,5,121.4375,6.4375],"texture":0}},"type":"cube","uuid":"40ade474-3dab-f41a-078a-15bb3693155a"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-26.85696,0,25.80337],"to":[-20.85696,1.5,27.24087],"autouv":0,"color":7,"rotation":[0,-45,0],"origin":[-23.44367,6.89062,18.42469],"uv_offset":[114,5],"faces":{"north":{"uv":[115.4375,6.4375,121.4375,7.9375],"texture":0},"east":{"uv":[114,6.4375,115.4375,7.9375],"texture":0},"south":{"uv":[122.875,6.4375,128.875,7.9375],"texture":0},"west":{"uv":[121.4375,6.4375,122.875,7.9375],"texture":0},"up":{"uv":[121.4375,6.4375,115.4375,5],"texture":0},"down":{"uv":[127.4375,5,121.4375,6.4375],"texture":0}},"type":"cube","uuid":"3742d33e-fc09-8e6f-59ab-5df75b6ca11b"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-26.33196,-2.17707,20.3695],"to":[-21.33196,0.69793,23.3695],"autouv":0,"color":7,"rotation":[-30,-45,0],"origin":[-23.44367,6.89062,18.42469],"uv_offset":[96,7],"faces":{"north":{"uv":[99,10,104,12.875],"texture":0},"east":{"uv":[96,10,99,12.875],"texture":0},"south":{"uv":[107,10,112,12.875],"texture":0},"west":{"uv":[104,10,107,12.875],"texture":0},"up":{"uv":[104,10,99,7],"texture":0},"down":{"uv":[109,7,104,10],"texture":0}},"type":"cube","uuid":"38d819f0-40a2-4a06-7c02-352b6433cb59"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-26.33196,-0.94481,16.61068],"to":[-21.33196,3.05519,19.61068],"autouv":0,"color":7,"rotation":[-60,-45,0],"origin":[-23.44367,6.89062,18.42469],"uv_offset":[0,120],"faces":{"north":{"uv":[3,123,8,127],"texture":0},"east":{"uv":[0,123,3,127],"texture":0},"south":{"uv":[11,123,16,127],"texture":0},"west":{"uv":[8,123,11,127],"texture":0},"up":{"uv":[8,123,3,120],"texture":0},"down":{"uv":[13,120,8,123],"texture":0}},"type":"cube","uuid":"2fd4a586-8f3f-43b9-6fe3-b3b7c8198f8a"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-26.85696,0,22.80337],"to":[-20.85696,4,25.80337],"autouv":0,"color":7,"rotation":[0,-45,0],"origin":[-23.44367,6.89062,18.42469],"uv_offset":[96,0],"faces":{"north":{"uv":[99,3,105,7],"texture":0},"east":{"uv":[96,3,99,7],"texture":0},"south":{"uv":[108,3,114,7],"texture":0},"west":{"uv":[105,3,108,7],"texture":0},"up":{"uv":[105,3,99,0],"texture":0},"down":{"uv":[111,0,105,3],"texture":0}},"type":"cube","uuid":"3d295af3-807f-4aa2-081f-43f507e1384e"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-26.8157,0,9.58056],"to":[-21.8157,1.5,11.01806],"autouv":0,"color":7,"rotation":[0,45,0],"origin":[-23.44367,6.89062,18.42469],"uv_offset":[114,11],"faces":{"north":{"uv":[115.4375,12.4375,120.4375,13.9375],"texture":0},"east":{"uv":[114,12.4375,115.4375,13.9375],"texture":0},"south":{"uv":[121.875,12.4375,126.875,13.9375],"texture":0},"west":{"uv":[120.4375,12.4375,121.875,13.9375],"texture":0},"up":{"uv":[120.4375,12.4375,115.4375,11],"texture":0},"down":{"uv":[125.4375,11,120.4375,12.4375],"texture":0}},"type":"cube","uuid":"be17bca0-def0-754d-46c2-d6c2bfff924f"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-26.3907,-2.19105,13.45567],"to":[-22.3907,0.68395,16.45567],"autouv":0,"color":7,"rotation":[30,45,0],"origin":[-23.44367,6.89062,18.42469],"uv_offset":[114,0],"faces":{"north":{"uv":[117,3,121,5.875],"texture":0},"east":{"uv":[114,3,117,5.875],"texture":0},"south":{"uv":[124,3,128,5.875],"texture":0},"west":{"uv":[121,3,124,5.875],"texture":0},"up":{"uv":[121,3,117,0],"texture":0},"down":{"uv":[125,0,121,3],"texture":0}},"type":"cube","uuid":"da14606c-6a3b-bc94-d2f9-1e7786b41bac"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-26.3907,-0.96902,17.22473],"to":[-22.3907,3.03098,20.22473],"autouv":0,"color":7,"rotation":[60,45,0],"origin":[-23.44367,6.89062,18.42469],"uv_offset":[90,55],"faces":{"north":{"uv":[93,58,97,62],"texture":0},"east":{"uv":[90,58,93,62],"texture":0},"south":{"uv":[100,58,104,62],"texture":0},"west":{"uv":[97,58,100,62],"texture":0},"up":{"uv":[97,58,93,55],"texture":0},"down":{"uv":[101,55,97,58],"texture":0}},"type":"cube","uuid":"740bcba7-d7d3-7863-c949-a4441bc10ad7"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-26.8157,0,11.01806],"to":[-21.8157,4,14.01806],"autouv":0,"color":7,"rotation":[0,45,0],"origin":[-23.44367,6.89062,18.42469],"uv_offset":[90,48],"faces":{"north":{"uv":[93,51,98,55],"texture":0},"east":{"uv":[90,51,93,55],"texture":0},"south":{"uv":[101,51,106,55],"texture":0},"west":{"uv":[98,51,101,55],"texture":0},"up":{"uv":[98,51,93,48],"texture":0},"down":{"uv":[103,48,98,51],"texture":0}},"type":"cube","uuid":"075d2bf5-43f0-bbb9-73ab-0dbec14dc9ba"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-28.03187,8.78109,17.30748],"to":[-21.03187,15.78109,20.30748],"autouv":0,"color":7,"rotation":[-30,-45,0],"origin":[-24.93187,12.28109,18.80748],"uv_offset":[24,112],"faces":{"north":{"uv":[27,115,34,122],"texture":0},"east":{"uv":[24,115,27,122],"texture":0},"south":{"uv":[37,115,44,122],"texture":0},"west":{"uv":[34,115,37,122],"texture":0},"up":{"uv":[34,115,27,112],"texture":0},"down":{"uv":[41,112,34,115],"texture":0}},"type":"cube","uuid":"ea40e263-7b68-4e80-7ab6-09e378600d19"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-24.8157,10,14.01806],"to":[-20.8157,16.0625,22.01806],"autouv":0,"color":7,"rotation":[0,45,0],"origin":[-23.44367,6.89062,18.42469],"uv_offset":[92,107],"faces":{"north":{"uv":[100,115,104,121.0625],"texture":0},"east":{"uv":[92,115,100,121.0625],"texture":0},"south":{"uv":[112,115,116,121.0625],"texture":0},"west":{"uv":[104,115,112,121.0625],"texture":0},"up":{"uv":[104,115,100,107],"texture":0},"down":{"uv":[108,107,104,115],"texture":0}},"type":"cube","uuid":"6c99e89c-2d40-3f0b-8025-c55b1db532f9"},{"name":"leg2","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-27.97334,11.17422,16.76806],"to":[-20.97334,14.17422,19.76806],"autouv":0,"color":0,"rotation":[-37.45372,27.03402,-59.31794],"origin":[-23.44367,6.89062,18.42469],"uv_offset":[105,60],"faces":{"north":{"uv":[108,63,115,66],"texture":0},"east":{"uv":[105,63,108,66],"texture":0},"south":{"uv":[118,63,125,66],"texture":0},"west":{"uv":[115,63,118,66],"texture":0},"up":{"uv":[115,63,108,60],"texture":0},"down":{"uv":[122,60,115,63],"texture":0}},"type":"cube","uuid":"381793a8-1302-83ce-f5f4-df62b06ab4d0"},{"name":"leg1","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-21.18709,7.75119,8.56095],"to":[-13.18709,11.75119,12.56095],"autouv":0,"color":0,"rotation":[0,45,0],"origin":[-15.44367,8.89063,11.42469],"uv_offset":[0,112],"faces":{"north":{"uv":[4,116,12,120],"texture":0},"east":{"uv":[0,116,4,120],"texture":0},"south":{"uv":[16,116,24,120],"texture":0},"west":{"uv":[12,116,16,120],"texture":0},"up":{"uv":[12,116,4,112],"texture":0},"down":{"uv":[20,112,12,116],"texture":0}},"type":"cube","uuid":"588d15a8-ede4-0109-a5d5-032a4bcf33ab"},{"name":"leg1","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-22.76479,7.75119,-1.75],"to":[-15.76479,11.75119,2.25],"autouv":0,"color":0,"origin":[-27.49509,6.89062,0],"uv_offset":[105,52],"faces":{"north":{"uv":[109,56,116,60],"texture":0},"east":{"uv":[105,56,109,60],"texture":0},"south":{"uv":[120,56,127,60],"texture":0},"west":{"uv":[116,56,120,60],"texture":0},"up":{"uv":[116,56,109,52],"texture":0},"down":{"uv":[123,52,116,56],"texture":0}},"type":"cube","uuid":"abe75abd-c467-aa01-e526-3dec0db4ba79"},{"name":"leg2","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-32.11017,11.07243,-1.25],"to":[-25.11017,14.07243,1.75],"autouv":0,"color":0,"rotation":[0,0,-50],"origin":[-27.49509,6.89062,0],"uv_offset":[105,60],"faces":{"north":{"uv":[108,63,115,66],"texture":0},"east":{"uv":[105,63,108,66],"texture":0},"south":{"uv":[118,63,125,66],"texture":0},"west":{"uv":[115,63,118,66],"texture":0},"up":{"uv":[115,63,108,60],"texture":0},"down":{"uv":[122,60,115,63],"texture":0}},"type":"cube","uuid":"003625fd-4fed-5642-0498-c44c318ebc69"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-29,10,-4],"to":[-25,16.0625,4],"autouv":0,"color":7,"origin":[-27.49509,6.89062,0],"uv_offset":[92,107],"faces":{"north":{"uv":[100,115,104,121.0625],"texture":0},"east":{"uv":[92,115,100,121.0625],"texture":0},"south":{"uv":[112,115,116,121.0625],"texture":0},"west":{"uv":[104,115,112,121.0625],"texture":0},"up":{"uv":[104,115,100,107],"texture":0},"down":{"uv":[108,107,104,115],"texture":0}},"type":"cube","uuid":"dd7508aa-eb1a-2f10-8f61-f2a516e50d20"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-31,7.33097,2.45605],"to":[-24,14.33097,5.45605],"autouv":0,"color":7,"rotation":[0,-90,-30],"origin":[-27.49509,6.89062,0],"uv_offset":[24,112],"faces":{"north":{"uv":[27,115,34,122],"texture":0},"east":{"uv":[24,115,27,122],"texture":0},"south":{"uv":[37,115,44,122],"texture":0},"west":{"uv":[34,115,37,122],"texture":0},"up":{"uv":[34,115,27,112],"texture":0},"down":{"uv":[41,112,34,115],"texture":0}},"type":"cube","uuid":"55843084-2fc1-5f6f-ec34-ce837adccd19"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-31,0,-7],"to":[-26,4,-4],"autouv":0,"color":7,"origin":[-27.49509,6.89062,0],"uv_offset":[90,48],"faces":{"north":{"uv":[93,51,98,55],"texture":0},"east":{"uv":[90,51,93,55],"texture":0},"south":{"uv":[101,51,106,55],"texture":0},"west":{"uv":[98,51,101,55],"texture":0},"up":{"uv":[98,51,93,48],"texture":0},"down":{"uv":[103,48,98,51],"texture":0}},"type":"cube","uuid":"cb6c5b58-73ce-d6e1-8758-56a3733b2296"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-30.475,-0.61687,-0.99665],"to":[-26.475,3.38313,2.00335],"autouv":0,"color":7,"rotation":[60,0,0],"origin":[-27.44509,6.89062,0],"uv_offset":[90,55],"faces":{"north":{"uv":[93,58,97,62],"texture":0},"east":{"uv":[90,58,93,62],"texture":0},"south":{"uv":[100,58,104,62],"texture":0},"west":{"uv":[97,58,100,62],"texture":0},"up":{"uv":[97,58,93,55],"texture":0},"down":{"uv":[101,55,97,58],"texture":0}},"type":"cube","uuid":"5a839f88-1c6d-77c4-e0fb-44066ec52ba7"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-31,0,-8.4375],"to":[-26,1.5,-7],"autouv":0,"color":7,"origin":[-27.49509,6.89062,0],"uv_offset":[114,11],"faces":{"north":{"uv":[115.4375,12.4375,120.4375,13.9375],"texture":0},"east":{"uv":[114,12.4375,115.4375,13.9375],"texture":0},"south":{"uv":[121.875,12.4375,126.875,13.9375],"texture":0},"west":{"uv":[120.4375,12.4375,121.875,13.9375],"texture":0},"up":{"uv":[120.4375,12.4375,115.4375,11],"texture":0},"down":{"uv":[125.4375,11,120.4375,12.4375],"texture":0}},"type":"cube","uuid":"f462ee27-a868-12b3-42fb-14d711f5baa0"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-30.50174,0,4.51156],"to":[-24.50174,4,7.51156],"autouv":0,"color":7,"rotation":[0,-90,0],"origin":[-27.49509,6.89062,0],"uv_offset":[96,0],"faces":{"north":{"uv":[99,3,105,7],"texture":0},"east":{"uv":[96,3,99,7],"texture":0},"south":{"uv":[108,3,114,7],"texture":0},"west":{"uv":[105,3,108,7],"texture":0},"up":{"uv":[105,3,99,0],"texture":0},"down":{"uv":[111,0,105,3],"texture":0}},"type":"cube","uuid":"e069d02d-3a4b-077c-8515-448ce5cdf5b6"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-29.97674,-1.05989,-1.74758],"to":[-24.97674,2.94011,1.25242],"autouv":0,"color":7,"rotation":[0,-90,-60],"origin":[-27.49509,6.89062,0],"uv_offset":[0,120],"faces":{"north":{"uv":[3,123,8,127],"texture":0},"east":{"uv":[0,123,3,127],"texture":0},"south":{"uv":[11,123,16,127],"texture":0},"west":{"uv":[8,123,11,127],"texture":0},"up":{"uv":[8,123,3,120],"texture":0},"down":{"uv":[13,120,8,123],"texture":0}},"type":"cube","uuid":"74b7b771-b07c-0ca6-93a3-35a824990932"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-30.50174,0,7.51156],"to":[-24.50174,1.5,8.94906],"autouv":0,"color":7,"rotation":[0,-90,0],"origin":[-27.49509,6.89062,0],"uv_offset":[114,5],"faces":{"north":{"uv":[115.4375,6.4375,121.4375,7.9375],"texture":0},"east":{"uv":[114,6.4375,115.4375,7.9375],"texture":0},"south":{"uv":[122.875,6.4375,128.875,7.9375],"texture":0},"west":{"uv":[121.4375,6.4375,122.875,7.9375],"texture":0},"up":{"uv":[121.4375,6.4375,115.4375,5],"texture":0},"down":{"uv":[127.4375,5,121.4375,6.4375],"texture":0}},"type":"cube","uuid":"6648038f-3ea8-6c09-f78b-8dbd69365df4"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-31.5,0,7],"to":[-25.5,1.5,8.4375],"autouv":0,"color":7,"origin":[-27.49509,6.89062,0],"uv_offset":[114,5],"faces":{"north":{"uv":[115.4375,6.4375,121.4375,7.9375],"texture":0},"east":{"uv":[114,6.4375,115.4375,7.9375],"texture":0},"south":{"uv":[122.875,6.4375,128.875,7.9375],"texture":0},"west":{"uv":[121.4375,6.4375,122.875,7.9375],"texture":0},"up":{"uv":[121.4375,6.4375,115.4375,5],"texture":0},"down":{"uv":[127.4375,5,121.4375,6.4375],"texture":0}},"type":"cube","uuid":"7070fc74-1f5a-2a86-da0c-c2bbe15d35f7"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-31,-1.98773,1.61687],"to":[-26,0.88727,4.61687],"autouv":0,"color":7,"rotation":[-30,0,0],"origin":[-27.49509,6.89062,0],"uv_offset":[96,7],"faces":{"north":{"uv":[99,10,104,12.875],"texture":0},"east":{"uv":[96,10,99,12.875],"texture":0},"south":{"uv":[107,10,112,12.875],"texture":0},"west":{"uv":[104,10,107,12.875],"texture":0},"up":{"uv":[104,10,99,7],"texture":0},"down":{"uv":[109,7,104,10],"texture":0}},"type":"cube","uuid":"16ab778a-23ea-60a9-3f7a-e599fe2e71e8"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-31,-0.61687,-2.00335],"to":[-26,3.38313,0.99665],"autouv":0,"color":7,"rotation":[-60,0,0],"origin":[-27.49509,6.89062,0],"uv_offset":[0,120],"faces":{"north":{"uv":[3,123,8,127],"texture":0},"east":{"uv":[0,123,3,127],"texture":0},"south":{"uv":[11,123,16,127],"texture":0},"west":{"uv":[8,123,11,127],"texture":0},"up":{"uv":[8,123,3,120],"texture":0},"down":{"uv":[13,120,8,123],"texture":0}},"type":"cube","uuid":"43c05692-80a7-3089-f02c-dc79e4a69873"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-31.5,0,4],"to":[-25.5,4,7],"autouv":0,"color":7,"origin":[-27.49509,6.89062,0],"uv_offset":[96,0],"faces":{"north":{"uv":[99,3,105,7],"texture":0},"east":{"uv":[96,3,99,7],"texture":0},"south":{"uv":[108,3,114,7],"texture":0},"west":{"uv":[105,3,108,7],"texture":0},"up":{"uv":[105,3,99,0],"texture":0},"down":{"uv":[111,0,105,3],"texture":0}},"type":"cube","uuid":"add38799-beb0-be3c-040e-fa3e22cff72b"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-32,0,-4],"to":[-25,10,4],"autouv":0,"color":7,"origin":[-27.49509,6.89062,0],"uv_offset":[32,94],"faces":{"north":{"uv":[40,102,47,112],"texture":0},"east":{"uv":[32,102,40,112],"texture":0},"south":{"uv":[55,102,62,112],"texture":0},"west":{"uv":[47,102,55,112],"texture":0},"up":{"uv":[47,102,40,94],"texture":0},"down":{"uv":[54,94,47,102],"texture":0}},"type":"cube","uuid":"abd20661-eea6-efa9-8d9a-07625075c582"},{"name":"top","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-15,17.75,-15],"to":[15,33.75,15],"autouv":0,"color":0,"origin":[-12,5.75,13],"uv_offset":[0,48],"faces":{"north":{"uv":[30,78,60,94],"texture":0},"east":{"uv":[0,78,30,94],"texture":0},"south":{"uv":[90,78,120,94],"texture":0},"west":{"uv":[60,78,90,94],"texture":0},"up":{"uv":[60,78,30,48],"texture":0},"down":{"uv":[90,48,60,78],"texture":0}},"type":"cube","uuid":"90a77059-fca7-422d-9f41-daecb93b7bf0"},{"name":"leg1","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-18.58049,7.75119,-20.26806],"to":[-10.58049,11.75119,-16.26806],"autouv":0,"color":0,"rotation":[0,-45,0],"origin":[-23.44367,6.89062,-18.42469],"uv_offset":[0,112],"faces":{"north":{"uv":[4,116,12,120],"texture":0},"east":{"uv":[0,116,4,120],"texture":0},"south":{"uv":[16,116,24,120],"texture":0},"west":{"uv":[12,116,16,120],"texture":0},"up":{"uv":[12,116,4,112],"texture":0},"down":{"uv":[20,112,12,116],"texture":0}},"type":"cube","uuid":"e84a389b-3a84-4a4f-82a0-a899a18fedfa"},{"name":"leg2","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-27.97334,11.17422,-19.76806],"to":[-20.97334,14.17422,-16.76806],"autouv":0,"color":0,"rotation":[37.45372,-27.03402,-59.31794],"origin":[-23.44367,6.89062,-18.42469],"uv_offset":[105,60],"faces":{"north":{"uv":[108,63,115,66],"texture":0},"east":{"uv":[105,63,108,66],"texture":0},"south":{"uv":[118,63,125,66],"texture":0},"west":{"uv":[115,63,118,66],"texture":0},"up":{"uv":[115,63,108,60],"texture":0},"down":{"uv":[122,60,115,63],"texture":0}},"type":"cube","uuid":"d44324cb-bb7c-0f9a-3976-050344d92f59"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-24.8157,10,-22.01806],"to":[-20.8157,16.0625,-14.01806],"autouv":0,"color":7,"rotation":[0,-45,0],"origin":[-23.44367,6.89062,-18.42469],"uv_offset":[92,107],"faces":{"north":{"uv":[100,115,104,121.0625],"texture":0},"east":{"uv":[92,115,100,121.0625],"texture":0},"south":{"uv":[112,115,116,121.0625],"texture":0},"west":{"uv":[104,115,112,121.0625],"texture":0},"up":{"uv":[104,115,100,107],"texture":0},"down":{"uv":[108,107,104,115],"texture":0}},"type":"cube","uuid":"f160b8e4-c3f2-6fe2-4292-f3702d4f4fd7"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-28.1417,8.78109,-20.57265],"to":[-21.1417,15.78109,-17.57265],"autouv":0,"color":7,"rotation":[150,-45,180],"origin":[-24.6667,12.28109,-19.07265],"uv_offset":[24,112],"faces":{"north":{"uv":[27,115,34,122],"texture":0},"east":{"uv":[24,115,27,122],"texture":0},"south":{"uv":[37,115,44,122],"texture":0},"west":{"uv":[34,115,37,122],"texture":0},"up":{"uv":[34,115,27,112],"texture":0},"down":{"uv":[41,112,34,115],"texture":0}},"type":"cube","uuid":"6ee67f4c-f77b-8a27-b4a5-a862e11388f2"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-26.8157,0,-14.01806],"to":[-21.8157,4,-11.01806],"autouv":0,"color":7,"rotation":[0,-45,0],"origin":[-23.44367,6.89062,-18.42469],"uv_offset":[90,63],"faces":{"north":{"uv":[93,66,98,70],"texture":0},"east":{"uv":[90,66,93,70],"texture":0},"south":{"uv":[101,66,106,70],"texture":0},"west":{"uv":[98,66,101,70],"texture":0},"up":{"uv":[98,66,93,63],"texture":0},"down":{"uv":[103,63,98,66],"texture":0}},"type":"cube","uuid":"78d94604-e7f2-c0f0-6f84-589980049c1f"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-26.2907,-0.96902,-20.22473],"to":[-22.2907,3.03098,-17.22473],"autouv":0,"color":7,"rotation":[-60,-45,0],"origin":[-23.44367,6.89062,-18.42469],"uv_offset":[90,55],"faces":{"north":{"uv":[93,58,97,62],"texture":0},"east":{"uv":[90,58,93,62],"texture":0},"south":{"uv":[100,58,104,62],"texture":0},"west":{"uv":[97,58,100,62],"texture":0},"up":{"uv":[97,58,93,55],"texture":0},"down":{"uv":[101,55,97,58],"texture":0}},"type":"cube","uuid":"2ca47203-6f40-a856-51cd-002fd9eca81a"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-26.2907,-2.19105,-16.45567],"to":[-22.2907,0.68395,-13.45567],"autouv":0,"color":7,"rotation":[-30,-45,0],"origin":[-23.44367,6.89062,-18.42469],"uv_offset":[114,0],"faces":{"north":{"uv":[117,3,121,5.875],"texture":0},"east":{"uv":[114,3,117,5.875],"texture":0},"south":{"uv":[124,3,128,5.875],"texture":0},"west":{"uv":[121,3,124,5.875],"texture":0},"up":{"uv":[121,3,117,0],"texture":0},"down":{"uv":[125,0,121,3],"texture":0}},"type":"cube","uuid":"afa6125b-ac38-e38b-0555-d1156fba930c"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-26.8157,0,-11.01806],"to":[-21.8157,1.5,-9.58056],"autouv":0,"color":7,"rotation":[0,-45,0],"origin":[-23.44367,6.89062,-18.42469],"uv_offset":[114,11],"faces":{"north":{"uv":[115.4375,12.4375,120.4375,13.9375],"texture":0},"east":{"uv":[114,12.4375,115.4375,13.9375],"texture":0},"south":{"uv":[121.875,12.4375,126.875,13.9375],"texture":0},"west":{"uv":[120.4375,12.4375,121.875,13.9375],"texture":0},"up":{"uv":[120.4375,12.4375,115.4375,11],"texture":0},"down":{"uv":[125.4375,11,120.4375,12.4375],"texture":0}},"type":"cube","uuid":"62f38a00-33a4-1058-37d5-6c5082c0f60b"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-26.85696,0,-25.80337],"to":[-20.85696,4,-22.80337],"autouv":0,"color":7,"rotation":[0,45,0],"origin":[-23.44367,6.89062,-18.42469],"uv_offset":[90,71],"faces":{"north":{"uv":[93,74,99,78],"texture":0},"east":{"uv":[90,74,93,78],"texture":0},"south":{"uv":[102,74,108,78],"texture":0},"west":{"uv":[99,74,102,78],"texture":0},"up":{"uv":[99,74,93,71],"texture":0},"down":{"uv":[105,71,99,74],"texture":0}},"type":"cube","uuid":"9d8d39fd-fac5-27c7-e4fb-a8703b04818b"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-26.38196,-0.94481,-19.61068],"to":[-21.38196,3.05519,-16.61068],"autouv":0,"color":7,"rotation":[60,45,0],"origin":[-23.44367,6.89062,-18.42469],"uv_offset":[0,120],"faces":{"north":{"uv":[3,123,8,127],"texture":0},"east":{"uv":[0,123,3,127],"texture":0},"south":{"uv":[11,123,16,127],"texture":0},"west":{"uv":[8,123,11,127],"texture":0},"up":{"uv":[8,123,3,120],"texture":0},"down":{"uv":[13,120,8,123],"texture":0}},"type":"cube","uuid":"f3fe2359-ae7a-63d2-2dbe-c9182e119b80"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-26.38196,-2.17707,-23.3695],"to":[-21.38196,0.69793,-20.3695],"autouv":0,"color":7,"rotation":[30,45,0],"origin":[-23.44367,6.89062,-18.42469],"uv_offset":[96,7],"faces":{"north":{"uv":[99,10,104,12.875],"texture":0},"east":{"uv":[96,10,99,12.875],"texture":0},"south":{"uv":[107,10,112,12.875],"texture":0},"west":{"uv":[104,10,107,12.875],"texture":0},"up":{"uv":[104,10,99,7],"texture":0},"down":{"uv":[109,7,104,10],"texture":0}},"type":"cube","uuid":"a280e3fa-bd4d-55c2-16fb-d0f740f6367a"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-26.85696,0,-27.24087],"to":[-20.85696,1.5,-25.80337],"autouv":0,"color":7,"rotation":[0,45,0],"origin":[-23.44367,6.89062,-18.42469],"uv_offset":[114,5],"faces":{"north":{"uv":[115.4375,6.4375,121.4375,7.9375],"texture":0},"east":{"uv":[114,6.4375,115.4375,7.9375],"texture":0},"south":{"uv":[122.875,6.4375,128.875,7.9375],"texture":0},"west":{"uv":[121.4375,6.4375,122.875,7.9375],"texture":0},"up":{"uv":[121.4375,6.4375,115.4375,5],"texture":0},"down":{"uv":[127.4375,5,121.4375,6.4375],"texture":0}},"type":"cube","uuid":"2d0c962d-63da-b81c-a251-7c5fb934d084"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-27.3157,0,-26.45556],"to":[-21.3157,1.5,-25.01806],"autouv":0,"color":7,"rotation":[0,-45,0],"origin":[-23.44367,6.89062,-18.42469],"uv_offset":[114,5],"faces":{"north":{"uv":[115.4375,6.4375,121.4375,7.9375],"texture":0},"east":{"uv":[114,6.4375,115.4375,7.9375],"texture":0},"south":{"uv":[122.875,6.4375,128.875,7.9375],"texture":0},"west":{"uv":[121.4375,6.4375,122.875,7.9375],"texture":0},"up":{"uv":[121.4375,6.4375,115.4375,5],"texture":0},"down":{"uv":[127.4375,5,121.4375,6.4375],"texture":0}},"type":"cube","uuid":"52828342-9322-2b13-f388-a7e51f534f71"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-26.8407,-1.78441,-22.6894],"to":[-21.8407,1.09059,-19.6894],"autouv":0,"color":7,"rotation":[30,-45,0],"origin":[-23.44367,6.89062,-18.42469],"uv_offset":[96,7],"faces":{"north":{"uv":[99,10,104,12.875],"texture":0},"east":{"uv":[96,10,99,12.875],"texture":0},"south":{"uv":[107,10,112,12.875],"texture":0},"west":{"uv":[104,10,107,12.875],"texture":0},"up":{"uv":[104,10,99,7],"texture":0},"down":{"uv":[109,7,104,10],"texture":0}},"type":"cube","uuid":"9985386e-8766-96c5-2553-f0b780dac158"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-26.8407,-0.26471,-19.21802],"to":[-21.8407,3.73529,-16.21802],"autouv":0,"color":7,"rotation":[60,-45,0],"origin":[-23.44367,6.89062,-18.42469],"uv_offset":[0,120],"faces":{"north":{"uv":[3,123,8,127],"texture":0},"east":{"uv":[0,123,3,127],"texture":0},"south":{"uv":[11,123,16,127],"texture":0},"west":{"uv":[8,123,11,127],"texture":0},"up":{"uv":[8,123,3,120],"texture":0},"down":{"uv":[13,120,8,123],"texture":0}},"type":"cube","uuid":"dab7d550-b9b3-3786-551b-c38b86b96a1c"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-23.45873,0,-24.14286],"to":[-17.45873,4,-21.14286],"autouv":0,"color":7,"rotation":[0,-45,0],"origin":[-20.45873,2,-22.64286],"uv_offset":[90,71],"faces":{"north":{"uv":[93,74,99,78],"texture":0},"east":{"uv":[90,74,93,78],"texture":0},"south":{"uv":[102,74,108,78],"texture":0},"west":{"uv":[99,74,102,78],"texture":0},"up":{"uv":[99,74,93,71],"texture":0},"down":{"uv":[105,71,99,74],"texture":0}},"type":"cube","uuid":"550d8d01-c08d-264d-06e8-778748c85579"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-27.8157,0,-22.01806],"to":[-20.8157,10,-14.01806],"autouv":0,"color":7,"rotation":[0,-45,0],"origin":[-23.44367,6.89062,-18.42469],"uv_offset":[32,94],"faces":{"north":{"uv":[40,102,47,112],"texture":0},"east":{"uv":[32,102,40,112],"texture":0},"south":{"uv":[55,102,62,112],"texture":0},"west":{"uv":[47,102,55,112],"texture":0},"up":{"uv":[47,102,40,94],"texture":0},"down":{"uv":[54,94,47,102],"texture":0}},"type":"cube","uuid":"c36fc078-a7bc-5201-d453-9b9d5c95a309"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[20.8157,0,-22.01806],"to":[27.8157,10,-14.01806],"autouv":0,"color":7,"mirror_uv":true,"rotation":[0,45,0],"origin":[23.44367,6.89062,-18.42469],"uv_offset":[32,94],"faces":{"north":{"uv":[47,102,40,112],"texture":0},"east":{"uv":[55,102,47,112],"texture":0},"south":{"uv":[62,102,55,112],"texture":0},"west":{"uv":[40,102,32,112],"texture":0},"up":{"uv":[40,102,47,94],"texture":0},"down":{"uv":[47,94,54,102],"texture":0}},"type":"cube","uuid":"91f58307-85b0-2d5c-5b83-77c97752ae5a"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[21.3157,0,-25.01806],"to":[27.3157,4,-22.01806],"autouv":0,"color":7,"mirror_uv":true,"rotation":[0,45,0],"origin":[23.44367,6.89062,-18.42469],"uv_offset":[90,71],"faces":{"north":{"uv":[99,74,93,78],"texture":0},"east":{"uv":[102,74,99,78],"texture":0},"south":{"uv":[108,74,102,78],"texture":0},"west":{"uv":[93,74,90,78],"texture":0},"up":{"uv":[93,74,99,71],"texture":0},"down":{"uv":[99,71,105,74],"texture":0}},"type":"cube","uuid":"3cc6a566-e732-80b9-f71c-c3017bb48932"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[21.7407,-0.26471,-19.21802],"to":[26.7407,3.73529,-16.21802],"autouv":0,"color":7,"mirror_uv":true,"rotation":[60,45,0],"origin":[23.44367,6.89062,-18.42469],"uv_offset":[0,120],"faces":{"north":{"uv":[8,123,3,127],"texture":0},"east":{"uv":[11,123,8,127],"texture":0},"south":{"uv":[16,123,11,127],"texture":0},"west":{"uv":[3,123,0,127],"texture":0},"up":{"uv":[3,123,8,120],"texture":0},"down":{"uv":[8,120,13,123],"texture":0}},"type":"cube","uuid":"126949d5-4740-c3c0-d3af-9d3e7b369e65"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[21.7407,-1.78441,-22.6894],"to":[26.7407,1.09059,-19.6894],"autouv":0,"color":7,"mirror_uv":true,"rotation":[30,45,0],"origin":[23.44367,6.89062,-18.42469],"uv_offset":[96,7],"faces":{"north":{"uv":[104,10,99,12.875],"texture":0},"east":{"uv":[107,10,104,12.875],"texture":0},"south":{"uv":[112,10,107,12.875],"texture":0},"west":{"uv":[99,10,96,12.875],"texture":0},"up":{"uv":[99,10,104,7],"texture":0},"down":{"uv":[104,7,109,10],"texture":0}},"type":"cube","uuid":"2f2d9c83-c5a6-6323-28dd-ac1d354299db"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[21.3157,0,-26.45556],"to":[27.3157,1.5,-25.01806],"autouv":0,"color":7,"mirror_uv":true,"rotation":[0,45,0],"origin":[23.44367,6.89062,-18.42469],"uv_offset":[114,5],"faces":{"north":{"uv":[121.4375,6.4375,115.4375,7.9375],"texture":0},"east":{"uv":[122.875,6.4375,121.4375,7.9375],"texture":0},"south":{"uv":[128.875,6.4375,122.875,7.9375],"texture":0},"west":{"uv":[115.4375,6.4375,114,7.9375],"texture":0},"up":{"uv":[115.4375,6.4375,121.4375,5],"texture":0},"down":{"uv":[121.4375,5,127.4375,6.4375],"texture":0}},"type":"cube","uuid":"8fbb2de2-3bc5-8be7-994b-501acccbbda7"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[20.85696,0,-27.24087],"to":[26.85696,1.5,-25.80337],"autouv":0,"color":7,"mirror_uv":true,"rotation":[0,-45,0],"origin":[23.44367,6.89062,-18.42469],"uv_offset":[114,5],"faces":{"north":{"uv":[121.4375,6.4375,115.4375,7.9375],"texture":0},"east":{"uv":[122.875,6.4375,121.4375,7.9375],"texture":0},"south":{"uv":[128.875,6.4375,122.875,7.9375],"texture":0},"west":{"uv":[115.4375,6.4375,114,7.9375],"texture":0},"up":{"uv":[115.4375,6.4375,121.4375,5],"texture":0},"down":{"uv":[121.4375,5,127.4375,6.4375],"texture":0}},"type":"cube","uuid":"04d66ae8-8e89-92e3-a917-f3e9b6b263f0"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[21.38196,-2.17707,-23.3695],"to":[26.38196,0.69793,-20.3695],"autouv":0,"color":7,"mirror_uv":true,"rotation":[30,-45,0],"origin":[23.44367,6.89062,-18.42469],"uv_offset":[96,7],"faces":{"north":{"uv":[104,10,99,12.875],"texture":0},"east":{"uv":[107,10,104,12.875],"texture":0},"south":{"uv":[112,10,107,12.875],"texture":0},"west":{"uv":[99,10,96,12.875],"texture":0},"up":{"uv":[99,10,104,7],"texture":0},"down":{"uv":[104,7,109,10],"texture":0}},"type":"cube","uuid":"7c48cce6-3ce9-5a15-6e0e-0fabe9ed15d8"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[21.38196,-0.94481,-19.61068],"to":[26.38196,3.05519,-16.61068],"autouv":0,"color":7,"mirror_uv":true,"rotation":[60,-45,0],"origin":[23.44367,6.89062,-18.42469],"uv_offset":[0,120],"faces":{"north":{"uv":[8,123,3,127],"texture":0},"east":{"uv":[11,123,8,127],"texture":0},"south":{"uv":[16,123,11,127],"texture":0},"west":{"uv":[3,123,0,127],"texture":0},"up":{"uv":[3,123,8,120],"texture":0},"down":{"uv":[8,120,13,123],"texture":0}},"type":"cube","uuid":"1347b4da-4115-06cf-1ac6-376fdee5e469"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[20.85696,0,-25.80337],"to":[26.85696,4,-22.80337],"autouv":0,"color":7,"mirror_uv":true,"rotation":[0,-45,0],"origin":[23.44367,6.89062,-18.42469],"uv_offset":[90,71],"faces":{"north":{"uv":[99,74,93,78],"texture":0},"east":{"uv":[102,74,99,78],"texture":0},"south":{"uv":[108,74,102,78],"texture":0},"west":{"uv":[93,74,90,78],"texture":0},"up":{"uv":[93,74,99,71],"texture":0},"down":{"uv":[99,71,105,74],"texture":0}},"type":"cube","uuid":"5e854c8a-787e-3415-5905-0ccf83662cf8"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[21.8157,0,-11.01806],"to":[26.8157,1.5,-9.58056],"autouv":0,"color":7,"mirror_uv":true,"rotation":[0,45,0],"origin":[23.44367,6.89062,-18.42469],"uv_offset":[114,11],"faces":{"north":{"uv":[120.4375,12.4375,115.4375,13.9375],"texture":0},"east":{"uv":[121.875,12.4375,120.4375,13.9375],"texture":0},"south":{"uv":[126.875,12.4375,121.875,13.9375],"texture":0},"west":{"uv":[115.4375,12.4375,114,13.9375],"texture":0},"up":{"uv":[115.4375,12.4375,120.4375,11],"texture":0},"down":{"uv":[120.4375,11,125.4375,12.4375],"texture":0}},"type":"cube","uuid":"132d934a-c935-accf-5494-08fff85c02e6"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[22.3407,-2.19105,-16.45567],"to":[26.3407,0.68395,-13.45567],"autouv":0,"color":7,"mirror_uv":true,"rotation":[-30,45,0],"origin":[23.44367,6.89062,-18.42469],"uv_offset":[114,0],"faces":{"north":{"uv":[121,3,117,5.875],"texture":0},"east":{"uv":[124,3,121,5.875],"texture":0},"south":{"uv":[128,3,124,5.875],"texture":0},"west":{"uv":[117,3,114,5.875],"texture":0},"up":{"uv":[117,3,121,0],"texture":0},"down":{"uv":[121,0,125,3],"texture":0}},"type":"cube","uuid":"996a94af-a181-df6c-7cea-fa5aede635bd"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[22.3407,-0.96902,-20.22473],"to":[26.3407,3.03098,-17.22473],"autouv":0,"color":7,"mirror_uv":true,"rotation":[-60,45,0],"origin":[23.44367,6.89062,-18.42469],"uv_offset":[90,55],"faces":{"north":{"uv":[97,58,93,62],"texture":0},"east":{"uv":[100,58,97,62],"texture":0},"south":{"uv":[104,58,100,62],"texture":0},"west":{"uv":[93,58,90,62],"texture":0},"up":{"uv":[93,58,97,55],"texture":0},"down":{"uv":[97,55,101,58],"texture":0}},"type":"cube","uuid":"eca7e05d-e830-9066-7d32-9780949eea6b"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[21.8157,0,-14.01806],"to":[26.8157,4,-11.01806],"autouv":0,"color":7,"mirror_uv":true,"rotation":[0,45,0],"origin":[23.44367,6.89062,-18.42469],"uv_offset":[90,63],"faces":{"north":{"uv":[98,66,93,70],"texture":0},"east":{"uv":[101,66,98,70],"texture":0},"south":{"uv":[106,66,101,70],"texture":0},"west":{"uv":[93,66,90,70],"texture":0},"up":{"uv":[93,66,98,63],"texture":0},"down":{"uv":[98,63,103,66],"texture":0}},"type":"cube","uuid":"17c1d72a-be1f-9168-5930-ad91a60650ce"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[21.1917,8.78109,-20.57265],"to":[28.1917,15.78109,-17.57265],"autouv":0,"color":7,"mirror_uv":true,"rotation":[150,45,-180],"origin":[24.6667,12.28109,-19.07265],"uv_offset":[24,112],"faces":{"north":{"uv":[34,115,27,122],"texture":0},"east":{"uv":[37,115,34,122],"texture":0},"south":{"uv":[44,115,37,122],"texture":0},"west":{"uv":[27,115,24,122],"texture":0},"up":{"uv":[27,115,34,112],"texture":0},"down":{"uv":[34,112,41,115],"texture":0}},"type":"cube","uuid":"67db8cc6-8191-11ea-3e2a-9f716952691a"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[20.8157,10,-22.01806],"to":[24.8157,16.0625,-14.01806],"autouv":0,"color":7,"mirror_uv":true,"rotation":[0,45,0],"origin":[23.44367,6.89062,-18.42469],"uv_offset":[92,107],"faces":{"north":{"uv":[104,115,100,121.0625],"texture":0},"east":{"uv":[112,115,104,121.0625],"texture":0},"south":{"uv":[116,115,112,121.0625],"texture":0},"west":{"uv":[100,115,92,121.0625],"texture":0},"up":{"uv":[100,115,104,107],"texture":0},"down":{"uv":[104,107,108,115],"texture":0}},"type":"cube","uuid":"fc939091-b300-7b64-0c59-8186c6ebe91e"},{"name":"leg2","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[20.97334,11.17422,-19.76806],"to":[27.97334,14.17422,-16.76806],"autouv":0,"color":0,"mirror_uv":true,"rotation":[37.45372,27.03402,59.31794],"origin":[23.44367,6.89062,-18.42469],"uv_offset":[105,60],"faces":{"north":{"uv":[115,63,108,66],"texture":0},"east":{"uv":[118,63,115,66],"texture":0},"south":{"uv":[125,63,118,66],"texture":0},"west":{"uv":[108,63,105,66],"texture":0},"up":{"uv":[108,63,115,60],"texture":0},"down":{"uv":[115,60,122,63],"texture":0}},"type":"cube","uuid":"31e82821-4989-3174-b116-5f11b609d07b"},{"name":"leg1","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[10.58049,7.75119,-20.26806],"to":[18.58049,11.75119,-16.26806],"autouv":0,"color":0,"mirror_uv":true,"rotation":[0,45,0],"origin":[23.44367,6.89062,-18.42469],"uv_offset":[0,112],"faces":{"north":{"uv":[12,116,4,120],"texture":0},"east":{"uv":[16,116,12,120],"texture":0},"south":{"uv":[24,116,16,120],"texture":0},"west":{"uv":[4,116,0,120],"texture":0},"up":{"uv":[4,116,12,112],"texture":0},"down":{"uv":[12,112,20,116],"texture":0}},"type":"cube","uuid":"de69bbf1-8152-7f8b-12ea-b3bc1552fc65"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[25,0,-4],"to":[32,10,4],"autouv":0,"color":7,"mirror_uv":true,"origin":[27.49509,6.89062,0],"uv_offset":[32,94],"faces":{"north":{"uv":[47,102,40,112],"texture":0},"east":{"uv":[55,102,47,112],"texture":0},"south":{"uv":[62,102,55,112],"texture":0},"west":{"uv":[40,102,32,112],"texture":0},"up":{"uv":[40,102,47,94],"texture":0},"down":{"uv":[47,94,54,102],"texture":0}},"type":"cube","uuid":"9dbc00ee-dd55-5413-c322-f9b436243ff1"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[25.5,0,4],"to":[31.5,4,7],"autouv":0,"color":7,"mirror_uv":true,"origin":[27.49509,6.89062,0],"uv_offset":[96,0],"faces":{"north":{"uv":[105,3,99,7],"texture":0},"east":{"uv":[108,3,105,7],"texture":0},"south":{"uv":[114,3,108,7],"texture":0},"west":{"uv":[99,3,96,7],"texture":0},"up":{"uv":[99,3,105,0],"texture":0},"down":{"uv":[105,0,111,3],"texture":0}},"type":"cube","uuid":"56727859-96ee-81d1-1a83-ae71755092b9"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[25.925,-0.61687,-2.00335],"to":[30.925,3.38313,0.99665],"autouv":0,"color":7,"mirror_uv":true,"rotation":[-60,0,0],"origin":[27.49509,6.89062,0],"uv_offset":[0,120],"faces":{"north":{"uv":[8,123,3,127],"texture":0},"east":{"uv":[11,123,8,127],"texture":0},"south":{"uv":[16,123,11,127],"texture":0},"west":{"uv":[3,123,0,127],"texture":0},"up":{"uv":[3,123,8,120],"texture":0},"down":{"uv":[8,120,13,123],"texture":0}},"type":"cube","uuid":"95a910b8-3832-6e38-b9c4-7d3c3543d2b3"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[26.025,-1.98773,1.61687],"to":[31.025,0.88727,4.61687],"autouv":0,"color":7,"mirror_uv":true,"rotation":[-30,0,0],"origin":[27.49509,6.89062,0],"uv_offset":[96,7],"faces":{"north":{"uv":[104,10,99,12.875],"texture":0},"east":{"uv":[107,10,104,12.875],"texture":0},"south":{"uv":[112,10,107,12.875],"texture":0},"west":{"uv":[99,10,96,12.875],"texture":0},"up":{"uv":[99,10,104,7],"texture":0},"down":{"uv":[104,7,109,10],"texture":0}},"type":"cube","uuid":"6ea50fca-6d7b-8d72-e106-cd8861417155"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[25.5,0,7],"to":[31.5,1.5,8.4375],"autouv":0,"color":7,"mirror_uv":true,"origin":[27.49509,6.89062,0],"uv_offset":[114,5],"faces":{"north":{"uv":[121.4375,6.4375,115.4375,7.9375],"texture":0},"east":{"uv":[122.875,6.4375,121.4375,7.9375],"texture":0},"south":{"uv":[128.875,6.4375,122.875,7.9375],"texture":0},"west":{"uv":[115.4375,6.4375,114,7.9375],"texture":0},"up":{"uv":[115.4375,6.4375,121.4375,5],"texture":0},"down":{"uv":[121.4375,5,127.4375,6.4375],"texture":0}},"type":"cube","uuid":"1f0db8da-4050-08d7-9669-2f1b9f7187f8"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[24.50174,0,7.51156],"to":[30.50174,1.5,8.94906],"autouv":0,"color":7,"mirror_uv":true,"rotation":[0,90,0],"origin":[27.49509,6.89062,0],"uv_offset":[114,5],"faces":{"north":{"uv":[121.4375,6.4375,115.4375,7.9375],"texture":0},"east":{"uv":[122.875,6.4375,121.4375,7.9375],"texture":0},"south":{"uv":[128.875,6.4375,122.875,7.9375],"texture":0},"west":{"uv":[115.4375,6.4375,114,7.9375],"texture":0},"up":{"uv":[115.4375,6.4375,121.4375,5],"texture":0},"down":{"uv":[121.4375,5,127.4375,6.4375],"texture":0}},"type":"cube","uuid":"e40231c8-bd8a-65e5-ea45-808f38477c61"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[25.02674,-2.24351,2.05989],"to":[30.02674,0.63149,5.05989],"autouv":0,"color":7,"mirror_uv":true,"rotation":[0,90,30],"origin":[27.49509,6.89062,0],"uv_offset":[96,7],"faces":{"north":{"uv":[104,10,99,12.875],"texture":0},"east":{"uv":[107,10,104,12.875],"texture":0},"south":{"uv":[112,10,107,12.875],"texture":0},"west":{"uv":[99,10,96,12.875],"texture":0},"up":{"uv":[99,10,104,7],"texture":0},"down":{"uv":[104,7,109,10],"texture":0}},"type":"cube","uuid":"d9ac01dd-636d-8a11-e80f-feaa0b5e9fb2"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[25.02674,-1.05989,-1.74758],"to":[30.02674,2.94011,1.25242],"autouv":0,"color":7,"mirror_uv":true,"rotation":[0,90,60],"origin":[27.49509,6.89062,0],"uv_offset":[0,120],"faces":{"north":{"uv":[8,123,3,127],"texture":0},"east":{"uv":[11,123,8,127],"texture":0},"south":{"uv":[16,123,11,127],"texture":0},"west":{"uv":[3,123,0,127],"texture":0},"up":{"uv":[3,123,8,120],"texture":0},"down":{"uv":[8,120,13,123],"texture":0}},"type":"cube","uuid":"23f49dc4-59cf-e3d3-2cc4-bce4ec2f94b2"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[24.50174,0,4.51156],"to":[30.50174,4,7.51156],"autouv":0,"color":7,"mirror_uv":true,"rotation":[0,90,0],"origin":[27.49509,6.89062,0],"uv_offset":[96,0],"faces":{"north":{"uv":[105,3,99,7],"texture":0},"east":{"uv":[108,3,105,7],"texture":0},"south":{"uv":[114,3,108,7],"texture":0},"west":{"uv":[99,3,96,7],"texture":0},"up":{"uv":[99,3,105,0],"texture":0},"down":{"uv":[105,0,111,3],"texture":0}},"type":"cube","uuid":"f3fb1dee-ca27-b7cd-b0ee-a544579ec618"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[26,0,-8.4375],"to":[31,1.5,-7],"autouv":0,"color":7,"mirror_uv":true,"origin":[27.49509,6.89062,0],"uv_offset":[114,11],"faces":{"north":{"uv":[120.4375,12.4375,115.4375,13.9375],"texture":0},"east":{"uv":[121.875,12.4375,120.4375,13.9375],"texture":0},"south":{"uv":[126.875,12.4375,121.875,13.9375],"texture":0},"west":{"uv":[115.4375,12.4375,114,13.9375],"texture":0},"up":{"uv":[115.4375,12.4375,120.4375,11],"texture":0},"down":{"uv":[120.4375,11,125.4375,12.4375],"texture":0}},"type":"cube","uuid":"a312594e-5bf6-4dac-fa3e-f893f238ac1c"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[26.525,-1.98773,-4.61687],"to":[30.525,0.88727,-1.61687],"autouv":0,"color":7,"mirror_uv":true,"rotation":[30,0,0],"origin":[27.49509,6.89062,0],"uv_offset":[114,0],"faces":{"north":{"uv":[121,3,117,5.875],"texture":0},"east":{"uv":[124,3,121,5.875],"texture":0},"south":{"uv":[128,3,124,5.875],"texture":0},"west":{"uv":[117,3,114,5.875],"texture":0},"up":{"uv":[117,3,121,0],"texture":0},"down":{"uv":[121,0,125,3],"texture":0}},"type":"cube","uuid":"be420179-b5f2-805d-e778-8973c6172860"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[26.525,-0.61687,-0.99665],"to":[30.525,3.38313,2.00335],"autouv":0,"color":7,"mirror_uv":true,"rotation":[60,0,0],"origin":[27.49509,6.89062,0],"uv_offset":[90,55],"faces":{"north":{"uv":[97,58,93,62],"texture":0},"east":{"uv":[100,58,97,62],"texture":0},"south":{"uv":[104,58,100,62],"texture":0},"west":{"uv":[93,58,90,62],"texture":0},"up":{"uv":[93,58,97,55],"texture":0},"down":{"uv":[97,55,101,58],"texture":0}},"type":"cube","uuid":"32083e49-6bdc-cb48-3a9e-4c1363440861"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[26,0,-7],"to":[31,4,-4],"autouv":0,"color":7,"mirror_uv":true,"origin":[27.49509,6.89062,0],"uv_offset":[90,48],"faces":{"north":{"uv":[98,51,93,55],"texture":0},"east":{"uv":[101,51,98,55],"texture":0},"south":{"uv":[106,51,101,55],"texture":0},"west":{"uv":[93,51,90,55],"texture":0},"up":{"uv":[93,51,98,48],"texture":0},"down":{"uv":[98,48,103,51],"texture":0}},"type":"cube","uuid":"e878671b-c703-c7cc-22ca-7403ebf9146c"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[24,7.33097,2.45605],"to":[31,14.33097,5.45605],"autouv":0,"color":7,"mirror_uv":true,"rotation":[0,90,30],"origin":[27.49509,6.89062,0],"uv_offset":[24,112],"faces":{"north":{"uv":[34,115,27,122],"texture":0},"east":{"uv":[37,115,34,122],"texture":0},"south":{"uv":[44,115,37,122],"texture":0},"west":{"uv":[27,115,24,122],"texture":0},"up":{"uv":[27,115,34,112],"texture":0},"down":{"uv":[34,112,41,115],"texture":0}},"type":"cube","uuid":"60c97526-b50b-6b87-e3d7-df9ff1446159"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[25,10,-4],"to":[29,16.0625,4],"autouv":0,"color":7,"mirror_uv":true,"origin":[27.49509,6.89062,0],"uv_offset":[92,107],"faces":{"north":{"uv":[104,115,100,121.0625],"texture":0},"east":{"uv":[112,115,104,121.0625],"texture":0},"south":{"uv":[116,115,112,121.0625],"texture":0},"west":{"uv":[100,115,92,121.0625],"texture":0},"up":{"uv":[100,115,104,107],"texture":0},"down":{"uv":[104,107,108,115],"texture":0}},"type":"cube","uuid":"2856fc05-81df-fa22-0a6c-9a273039af7b"},{"name":"leg2","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[25.11017,11.07243,-1.25],"to":[32.11017,14.07243,1.75],"autouv":0,"color":0,"mirror_uv":true,"rotation":[0,0,50],"origin":[27.49509,6.89062,0],"uv_offset":[105,60],"faces":{"north":{"uv":[115,63,108,66],"texture":0},"east":{"uv":[118,63,115,66],"texture":0},"south":{"uv":[125,63,118,66],"texture":0},"west":{"uv":[108,63,105,66],"texture":0},"up":{"uv":[108,63,115,60],"texture":0},"down":{"uv":[115,60,122,63],"texture":0}},"type":"cube","uuid":"4130f3c4-417e-f29d-0b0e-9330eeb5512c"},{"name":"leg1","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[15.76479,7.75119,-1.75],"to":[22.76479,11.75119,2.25],"autouv":0,"color":0,"mirror_uv":true,"origin":[27.49509,6.89062,0],"uv_offset":[105,52],"faces":{"north":{"uv":[116,56,109,60],"texture":0},"east":{"uv":[120,56,116,60],"texture":0},"south":{"uv":[127,56,120,60],"texture":0},"west":{"uv":[109,56,105,60],"texture":0},"up":{"uv":[109,56,116,52],"texture":0},"down":{"uv":[116,52,123,56],"texture":0}},"type":"cube","uuid":"b0506837-a0c1-be82-8dee-ff3c5b3146c7"},{"name":"leg1","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[10.58049,7.75119,16.26806],"to":[18.58049,11.75119,20.26806],"autouv":0,"color":0,"mirror_uv":true,"rotation":[0,-45,0],"origin":[23.44367,6.89062,18.42469],"uv_offset":[0,112],"faces":{"north":{"uv":[12,116,4,120],"texture":0},"east":{"uv":[16,116,12,120],"texture":0},"south":{"uv":[24,116,16,120],"texture":0},"west":{"uv":[4,116,0,120],"texture":0},"up":{"uv":[4,116,12,112],"texture":0},"down":{"uv":[12,112,20,116],"texture":0}},"type":"cube","uuid":"fdc04b5b-5ffa-10e6-cb69-b36e9bd10bc0"},{"name":"leg2","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[20.97334,11.17422,16.76806],"to":[27.97334,14.17422,19.76806],"autouv":0,"color":0,"mirror_uv":true,"rotation":[-37.45372,-27.03402,59.31794],"origin":[23.44367,6.89062,18.42469],"uv_offset":[105,60],"faces":{"north":{"uv":[115,63,108,66],"texture":0},"east":{"uv":[118,63,115,66],"texture":0},"south":{"uv":[125,63,118,66],"texture":0},"west":{"uv":[108,63,105,66],"texture":0},"up":{"uv":[108,63,115,60],"texture":0},"down":{"uv":[115,60,122,63],"texture":0}},"type":"cube","uuid":"2fada0c5-27d5-d618-64cc-00cfa24a212c"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[20.8157,10,14.01806],"to":[24.8157,16.0625,22.01806],"autouv":0,"color":7,"mirror_uv":true,"rotation":[0,-45,0],"origin":[23.44367,6.89062,18.42469],"uv_offset":[92,107],"faces":{"north":{"uv":[104,115,100,121.0625],"texture":0},"east":{"uv":[112,115,104,121.0625],"texture":0},"south":{"uv":[116,115,112,121.0625],"texture":0},"west":{"uv":[100,115,92,121.0625],"texture":0},"up":{"uv":[100,115,104,107],"texture":0},"down":{"uv":[104,107,108,115],"texture":0}},"type":"cube","uuid":"36e116b3-996d-1c54-d868-137870a882a7"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[20.32531,7.39741,20.76567],"to":[27.32531,14.39741,23.76567],"autouv":0,"color":7,"mirror_uv":true,"rotation":[-30,45,0],"origin":[23.44367,6.89062,18.42469],"uv_offset":[24,112],"faces":{"north":{"uv":[34,115,27,122],"texture":0},"east":{"uv":[37,115,34,122],"texture":0},"south":{"uv":[44,115,37,122],"texture":0},"west":{"uv":[27,115,24,122],"texture":0},"up":{"uv":[27,115,34,112],"texture":0},"down":{"uv":[34,112,41,115],"texture":0}},"type":"cube","uuid":"3a62ca46-c28b-b8e8-64ec-fabbbd48e05a"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[21.8157,0,11.01806],"to":[26.8157,4,14.01806],"autouv":0,"color":7,"mirror_uv":true,"rotation":[0,-45,0],"origin":[23.44367,6.89062,18.42469],"uv_offset":[90,48],"faces":{"north":{"uv":[98,51,93,55],"texture":0},"east":{"uv":[101,51,98,55],"texture":0},"south":{"uv":[106,51,101,55],"texture":0},"west":{"uv":[93,51,90,55],"texture":0},"up":{"uv":[93,51,98,48],"texture":0},"down":{"uv":[98,48,103,51],"texture":0}},"type":"cube","uuid":"c4cc3457-6e45-6449-5a40-590d93a96285"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[22.2907,-0.96902,17.22473],"to":[26.2907,3.03098,20.22473],"autouv":0,"color":7,"mirror_uv":true,"rotation":[60,-45,0],"origin":[23.44367,6.89062,18.42469],"uv_offset":[90,55],"faces":{"north":{"uv":[97,58,93,62],"texture":0},"east":{"uv":[100,58,97,62],"texture":0},"south":{"uv":[104,58,100,62],"texture":0},"west":{"uv":[93,58,90,62],"texture":0},"up":{"uv":[93,58,97,55],"texture":0},"down":{"uv":[97,55,101,58],"texture":0}},"type":"cube","uuid":"befdff54-a686-5ac0-fc46-f2ef6e408763"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[22.2907,-2.19105,13.45567],"to":[26.2907,0.68395,16.45567],"autouv":0,"color":7,"mirror_uv":true,"rotation":[30,-45,0],"origin":[23.44367,6.89062,18.42469],"uv_offset":[114,0],"faces":{"north":{"uv":[121,3,117,5.875],"texture":0},"east":{"uv":[124,3,121,5.875],"texture":0},"south":{"uv":[128,3,124,5.875],"texture":0},"west":{"uv":[117,3,114,5.875],"texture":0},"up":{"uv":[117,3,121,0],"texture":0},"down":{"uv":[121,0,125,3],"texture":0}},"type":"cube","uuid":"e7338d16-154e-5332-5299-8edd426d36d9"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[21.8157,0,9.58056],"to":[26.8157,1.5,11.01806],"autouv":0,"color":7,"mirror_uv":true,"rotation":[0,-45,0],"origin":[23.44367,6.89062,18.42469],"uv_offset":[113,13],"faces":{"north":{"uv":[119.4375,14.4375,114.4375,15.9375],"texture":0},"east":{"uv":[120.875,14.4375,119.4375,15.9375],"texture":0},"south":{"uv":[125.875,14.4375,120.875,15.9375],"texture":0},"west":{"uv":[114.4375,14.4375,113,15.9375],"texture":0},"up":{"uv":[114.4375,14.4375,119.4375,13],"texture":0},"down":{"uv":[119.4375,13,124.4375,14.4375],"texture":0}},"type":"cube","uuid":"7e33d722-ada9-3f13-d980-35b57c7423b3"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[20.85696,0,22.80337],"to":[26.85696,4,25.80337],"autouv":0,"color":7,"mirror_uv":true,"rotation":[0,45,0],"origin":[23.44367,6.89062,18.42469],"uv_offset":[96,0],"faces":{"north":{"uv":[105,3,99,7],"texture":0},"east":{"uv":[108,3,105,7],"texture":0},"south":{"uv":[114,3,108,7],"texture":0},"west":{"uv":[99,3,96,7],"texture":0},"up":{"uv":[99,3,105,0],"texture":0},"down":{"uv":[105,0,111,3],"texture":0}},"type":"cube","uuid":"ba42aac7-f301-9f9f-c1b9-6ceb8ce75a78"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[21.28196,-0.94481,16.61068],"to":[26.28196,3.05519,19.61068],"autouv":0,"color":7,"mirror_uv":true,"rotation":[-60,45,0],"origin":[23.44367,6.89062,18.42469],"uv_offset":[0,120],"faces":{"north":{"uv":[8,123,3,127],"texture":0},"east":{"uv":[11,123,8,127],"texture":0},"south":{"uv":[16,123,11,127],"texture":0},"west":{"uv":[3,123,0,127],"texture":0},"up":{"uv":[3,123,8,120],"texture":0},"down":{"uv":[8,120,13,123],"texture":0}},"type":"cube","uuid":"546b7cc6-835a-08f0-7833-04d25e83d447"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[21.28196,-2.17707,20.3695],"to":[26.28196,0.69793,23.3695],"autouv":0,"color":7,"mirror_uv":true,"rotation":[-30,45,0],"origin":[23.44367,6.89062,18.42469],"uv_offset":[96,7],"faces":{"north":{"uv":[104,10,99,12.875],"texture":0},"east":{"uv":[107,10,104,12.875],"texture":0},"south":{"uv":[112,10,107,12.875],"texture":0},"west":{"uv":[99,10,96,12.875],"texture":0},"up":{"uv":[99,10,104,7],"texture":0},"down":{"uv":[104,7,109,10],"texture":0}},"type":"cube","uuid":"5b1afece-bbc9-e89e-7d51-1cc64d8ab8fa"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[20.85696,0,25.80337],"to":[26.85696,1.5,27.24087],"autouv":0,"color":7,"mirror_uv":true,"rotation":[0,45,0],"origin":[23.44367,6.89062,18.42469],"uv_offset":[114,5],"faces":{"north":{"uv":[121.4375,6.4375,115.4375,7.9375],"texture":0},"east":{"uv":[122.875,6.4375,121.4375,7.9375],"texture":0},"south":{"uv":[128.875,6.4375,122.875,7.9375],"texture":0},"west":{"uv":[115.4375,6.4375,114,7.9375],"texture":0},"up":{"uv":[115.4375,6.4375,121.4375,5],"texture":0},"down":{"uv":[121.4375,5,127.4375,6.4375],"texture":0}},"type":"cube","uuid":"38ca4b91-b062-87e6-f546-ad63462b165a"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[21.3157,0,25.01806],"to":[27.3157,1.5,26.45556],"autouv":0,"color":7,"mirror_uv":true,"rotation":[0,-45,0],"origin":[23.44367,6.89062,18.42469],"uv_offset":[114,5],"faces":{"north":{"uv":[121.4375,6.4375,115.4375,7.9375],"texture":0},"east":{"uv":[122.875,6.4375,121.4375,7.9375],"texture":0},"south":{"uv":[128.875,6.4375,122.875,7.9375],"texture":0},"west":{"uv":[115.4375,6.4375,114,7.9375],"texture":0},"up":{"uv":[115.4375,6.4375,121.4375,5],"texture":0},"down":{"uv":[121.4375,5,127.4375,6.4375],"texture":0}},"type":"cube","uuid":"91334231-7cf1-8ffa-da06-9515e73d7363"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[21.8407,-1.78441,19.6894],"to":[26.8407,1.09059,22.6894],"autouv":0,"color":7,"mirror_uv":true,"rotation":[-30,-45,0],"origin":[23.44367,6.89062,18.42469],"uv_offset":[96,7],"faces":{"north":{"uv":[104,10,99,12.875],"texture":0},"east":{"uv":[107,10,104,12.875],"texture":0},"south":{"uv":[112,10,107,12.875],"texture":0},"west":{"uv":[99,10,96,12.875],"texture":0},"up":{"uv":[99,10,104,7],"texture":0},"down":{"uv":[104,7,109,10],"texture":0}},"type":"cube","uuid":"a90ad2f6-b968-6090-4e83-fda01f6f120a"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[21.8407,-0.26471,16.21802],"to":[26.8407,3.73529,19.21802],"autouv":0,"color":7,"mirror_uv":true,"rotation":[-60,-45,0],"origin":[23.44367,6.89062,18.42469],"uv_offset":[0,120],"faces":{"north":{"uv":[8,123,3,127],"texture":0},"east":{"uv":[11,123,8,127],"texture":0},"south":{"uv":[16,123,11,127],"texture":0},"west":{"uv":[3,123,0,127],"texture":0},"up":{"uv":[3,123,8,120],"texture":0},"down":{"uv":[8,120,13,123],"texture":0}},"type":"cube","uuid":"2c056c12-c971-f8a9-2f8b-3595c5cde8d0"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[21.3157,0,22.01806],"to":[27.3157,4,25.01806],"autouv":0,"color":7,"mirror_uv":true,"rotation":[0,-45,0],"origin":[23.44367,6.89062,18.42469],"uv_offset":[96,0],"faces":{"north":{"uv":[105,3,99,7],"texture":0},"east":{"uv":[108,3,105,7],"texture":0},"south":{"uv":[114,3,108,7],"texture":0},"west":{"uv":[99,3,96,7],"texture":0},"up":{"uv":[99,3,105,0],"texture":0},"down":{"uv":[105,0,111,3],"texture":0}},"type":"cube","uuid":"510edcfe-13f1-8fed-1321-cbb7791052e2"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[20.8157,0,14.01806],"to":[27.8157,10,22.01806],"autouv":0,"color":7,"mirror_uv":true,"rotation":[0,-45,0],"origin":[23.44367,6.89062,18.42469],"uv_offset":[32,94],"faces":{"north":{"uv":[47,102,40,112],"texture":0},"east":{"uv":[55,102,47,112],"texture":0},"south":{"uv":[62,102,55,112],"texture":0},"west":{"uv":[40,102,32,112],"texture":0},"up":{"uv":[40,102,47,94],"texture":0},"down":{"uv":[47,94,54,102],"texture":0}},"type":"cube","uuid":"e53d3285-fe8c-a7a5-67db-56c28210b5d8"},{"name":"hand","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-23.30487,20.03082,15.10871],"to":[-18.30487,27.03082,26.10871],"autouv":0,"color":9,"rotation":[44.08894,30.73293,16.34134],"origin":[-11.55741,6.44555,15.52679],"uv_offset":[0,94],"faces":{"north":{"uv":[11,105,16,112],"texture":0},"east":{"uv":[0,105,11,112],"texture":0},"south":{"uv":[27,105,32,112],"texture":0},"west":{"uv":[16,105,27,112],"texture":0},"up":{"uv":[16,105,11,94],"texture":0},"down":{"uv":[21,94,16,105],"texture":0}},"type":"cube","uuid":"43036808-81f0-745b-bad7-8727eb67a04d"},{"name":"pincer2","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-22.80487,22.51869,20.84206],"to":[-18.80487,25.51869,25.84206],"autouv":0,"color":9,"rotation":[59.08894,30.73293,16.34134],"origin":[-11.55741,6.44555,15.52679],"uv_offset":[109,95],"faces":{"north":{"uv":[114,100,118,103],"texture":0},"east":{"uv":[109,100,114,103],"texture":0},"south":{"uv":[123,100,127,103],"texture":0},"west":{"uv":[118,100,123,103],"texture":0},"up":{"uv":[118,100,114,95],"texture":0},"down":{"uv":[122,95,118,100],"texture":0}},"type":"cube","uuid":"4d958243-0fbc-a5fe-a194-42f49a17b258"},{"name":"pincer1","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-22.80487,23.53082,26.10871],"to":[-18.80487,26.53082,31.10871],"autouv":0,"color":9,"mirror_uv":true,"rotation":[44.08894,30.73293,16.34134],"origin":[-11.55741,6.44555,15.52679],"uv_offset":[83,95],"faces":{"north":{"uv":[92,100,88,103],"texture":0},"east":{"uv":[97,100,92,103],"texture":0},"south":{"uv":[101,100,97,103],"texture":0},"west":{"uv":[88,100,83,103],"texture":0},"up":{"uv":[88,100,92,95],"texture":0},"down":{"uv":[92,95,96,100],"texture":0}},"type":"cube","uuid":"54295083-0b51-d463-a927-26fa3f2fead3"},{"name":"arm2","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-12.5,-0.39597,21.00765],"to":[-9.5,2.60403,33.00765],"autouv":0,"color":9,"rotation":[-40,-15,0],"origin":[-10.55741,5.94555,16.52679],"uv_offset":[62,94],"faces":{"north":{"uv":[74,106,77,109],"texture":0},"east":{"uv":[62,106,74,109],"texture":0},"south":{"uv":[89,106,92,109],"texture":0},"west":{"uv":[77,106,89,109],"texture":0},"up":{"uv":[77,106,74,94],"texture":0},"down":{"uv":[80,94,77,106],"texture":0}},"type":"cube","uuid":"6cfa9343-8f8f-d6de-18fd-3a998e90aa59"},{"name":"arm1","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-13,4,15],"to":[-9,8,24],"autouv":0,"color":9,"rotation":[0,-15,0],"origin":[-10.55741,6.44555,16.52679],"uv_offset":[92,94],"faces":{"north":{"uv":[101,103,105,107],"texture":0},"east":{"uv":[92,103,101,107],"texture":0},"south":{"uv":[114,103,118,107],"texture":0},"west":{"uv":[105,103,114,107],"texture":0},"up":{"uv":[105,103,101,94],"texture":0},"down":{"uv":[109,94,105,103],"texture":0}},"type":"cube","uuid":"b12ea92c-291a-1b29-bdd3-d93b1eba24cd"},{"name":"pincer2","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[18.80487,22.51869,20.84206],"to":[22.80487,25.51869,25.84206],"autouv":0,"color":9,"rotation":[59.08894,-30.73293,-16.34134],"origin":[11.55741,6.44555,15.52679],"uv_offset":[109,95],"faces":{"north":{"uv":[114,100,118,103],"texture":0},"east":{"uv":[109,100,114,103],"texture":0},"south":{"uv":[123,100,127,103],"texture":0},"west":{"uv":[118,100,123,103],"texture":0},"up":{"uv":[118,100,114,95],"texture":0},"down":{"uv":[122,95,118,100],"texture":0}},"type":"cube","uuid":"6269b635-9b8b-1f3b-33f9-80f4923a9a4f"},{"name":"pincer1","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[18.80487,23.53082,26.10871],"to":[22.80487,26.53082,31.10871],"autouv":0,"color":9,"rotation":[44.08894,-30.73293,-16.34134],"origin":[11.55741,6.44555,15.52679],"uv_offset":[83,95],"faces":{"north":{"uv":[88,100,92,103],"texture":0},"east":{"uv":[83,100,88,103],"texture":0},"south":{"uv":[97,100,101,103],"texture":0},"west":{"uv":[92,100,97,103],"texture":0},"up":{"uv":[92,100,88,95],"texture":0},"down":{"uv":[96,95,92,100],"texture":0}},"type":"cube","uuid":"98060a8d-85c1-6b48-b00b-e6069e6528fb"},{"name":"hand","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[18.30487,20.03082,15.10871],"to":[23.30487,27.03082,26.10871],"autouv":0,"color":9,"mirror_uv":true,"rotation":[44.08894,-30.73293,-16.34134],"origin":[11.55741,6.44555,15.52679],"uv_offset":[0,94],"faces":{"north":{"uv":[16,105,11,112],"texture":0},"east":{"uv":[27,105,16,112],"texture":0},"south":{"uv":[32,105,27,112],"texture":0},"west":{"uv":[11,105,0,112],"texture":0},"up":{"uv":[11,105,16,94],"texture":0},"down":{"uv":[16,94,21,105],"texture":0}},"type":"cube","uuid":"99029de3-257e-18be-a152-a793b9334083"},{"name":"arm1","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[9.5,-0.39597,21.00765],"to":[12.5,2.60403,33.00765],"autouv":0,"color":9,"mirror_uv":true,"rotation":[-40,15,0],"origin":[10.55741,5.94555,16.52679],"uv_offset":[62,94],"faces":{"north":{"uv":[77,106,74,109],"texture":0},"east":{"uv":[89,106,77,109],"texture":0},"south":{"uv":[92,106,89,109],"texture":0},"west":{"uv":[74,106,62,109],"texture":0},"up":{"uv":[74,106,77,94],"texture":0},"down":{"uv":[77,94,80,106],"texture":0}},"type":"cube","uuid":"cfc54668-b130-e56c-de6b-bb2521510e8a"},{"name":"arm2","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[9,4,15],"to":[13,8,24],"autouv":0,"color":9,"mirror_uv":true,"rotation":[0,15,0],"origin":[10.55741,6.44555,16.52679],"uv_offset":[92,94],"faces":{"north":{"uv":[105,103,101,107],"texture":0},"east":{"uv":[114,103,105,107],"texture":0},"south":{"uv":[118,103,114,107],"texture":0},"west":{"uv":[101,103,92,107],"texture":0},"up":{"uv":[101,103,105,94],"texture":0},"down":{"uv":[105,94,109,103],"texture":0}},"type":"cube","uuid":"c4fa28ac-2c40-10a3-b54c-9418ca57112a"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-3,3,16],"to":[3,9,22],"autouv":0,"color":6,"rotation":[10,0,0],"origin":[0,6.5,19],"uv_offset":[62,109],"faces":{"north":{"uv":[68,115,74,121],"texture":0},"east":{"uv":[62,115,68,121],"texture":0},"south":{"uv":[80,115,86,121],"texture":0},"west":{"uv":[74,115,80,121],"texture":0},"up":{"uv":[74,115,68,109],"texture":0},"down":{"uv":[80,109,74,115],"texture":0}},"type":"cube","uuid":"451baa86-bb99-b993-6fba-c0301a1816a2"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-2,3,16],"to":[2,8,21],"autouv":0,"color":6,"origin":[0,1.5,19],"uv_offset":[44,112],"faces":{"north":{"uv":[49,117,53,122],"texture":0},"east":{"uv":[44,117,49,122],"texture":0},"south":{"uv":[58,117,62,122],"texture":0},"west":{"uv":[53,117,58,122],"texture":0},"up":{"uv":[53,117,49,112],"texture":0},"down":{"uv":[57,112,53,117],"texture":0}},"type":"cube","uuid":"f43395fc-8bfa-2e2b-cf48-984ba4a6664b"},{"name":"stem2","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-1.75,8.02541,21.38958],"to":[-1.25,11.02541,21.88958],"autouv":0,"color":6,"rotation":[10,0,0],"origin":[1.25,11.52541,23.88958],"faces":{"north":{"uv":[0.5,0.5,1,3.5],"texture":0},"east":{"uv":[0,0.5,0.5,3.5],"texture":0},"south":{"uv":[1.5,0.5,2,3.5],"texture":0},"west":{"uv":[1,0.5,1.5,3.5],"texture":0},"up":{"uv":[1,0.5,0.5,0],"texture":0},"down":{"uv":[1.5,0,1,0.5],"texture":0}},"type":"cube","uuid":"0a29feb1-e332-5320-6f22-c40b5421ad1c"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-2,10.77541,21.63958],"to":[-1,11.77541,22.63958],"autouv":0,"color":6,"rotation":[10,0,0],"origin":[1,14.27541,24.63958],"uv_offset":[86,109],"faces":{"north":{"uv":[87,110,88,111],"texture":0},"east":{"uv":[86,110,87,111],"texture":0},"south":{"uv":[89,110,90,111],"texture":0},"west":{"uv":[88,110,89,111],"texture":0},"up":{"uv":[88,110,87,109],"texture":0},"down":{"uv":[89,109,88,110],"texture":0}},"type":"cube","uuid":"11dfe79e-ce4e-727e-c958-3ed8ae196670"},{"name":"stem1","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[1.25,8.02541,21.38958],"to":[1.75,11.02541,21.88958],"autouv":0,"color":6,"rotation":[10,0,0],"origin":[4.25,11.52541,23.88958],"faces":{"north":{"uv":[0.5,0.5,1,3.5],"texture":0},"east":{"uv":[0,0.5,0.5,3.5],"texture":0},"south":{"uv":[1.5,0.5,2,3.5],"texture":0},"west":{"uv":[1,0.5,1.5,3.5],"texture":0},"up":{"uv":[1,0.5,0.5,0],"texture":0},"down":{"uv":[1.5,0,1,0.5],"texture":0}},"type":"cube","uuid":"877e9bcf-772d-cf33-5927-8f998fe10fa0"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[1,10.77541,21.63958],"to":[2,11.77541,22.63958],"autouv":0,"color":6,"rotation":[10,0,0],"origin":[4,14.27541,24.63958],"uv_offset":[86,109],"faces":{"north":{"uv":[87,110,88,111],"texture":0},"east":{"uv":[86,110,87,111],"texture":0},"south":{"uv":[89,110,90,111],"texture":0},"west":{"uv":[88,110,89,111],"texture":0},"up":{"uv":[88,110,87,109],"texture":0},"down":{"uv":[89,109,88,110],"texture":0}},"type":"cube","uuid":"61c54a6c-fdfe-d20d-a585-48e33a1ff110"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-2,8.6985,20.23987],"to":[-1,8.6985,24.23987],"autouv":0,"color":6,"rotation":[30,-7.5,0],"origin":[-1.5,5.57226,19.00962],"uv_offset":[114,7],"faces":{"north":{"uv":[118,11,119,11],"texture":0},"east":{"uv":[114,11,118,11],"texture":0},"south":{"uv":[123,11,124,11],"texture":0},"west":{"uv":[119,11,123,11],"texture":0},"up":{"uv":[119,11,118,7],"texture":0},"down":{"uv":[120,7,119,11],"texture":0}},"type":"cube","uuid":"d3e4200f-27b1-a818-533f-40e71a7ea5e0"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-2,10.29876,22.85487],"to":[-1,10.29876,26.85487],"autouv":0,"color":6,"rotation":[50,-7.5,0],"origin":[-1.5,5.57226,19.00962],"uv_offset":[114,7],"faces":{"north":{"uv":[118,11,119,11],"texture":0},"east":{"uv":[114,11,118,11],"texture":0},"south":{"uv":[123,11,124,11],"texture":0},"west":{"uv":[119,11,123,11],"texture":0},"up":{"uv":[119,11,118,7],"texture":0},"down":{"uv":[120,7,119,11],"texture":0}},"type":"cube","uuid":"1738b23c-1a2b-49e9-b7cb-ef0284abe8c2"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[1,10.29876,22.85487],"to":[2,10.29876,26.85487],"autouv":0,"color":6,"mirror_uv":true,"rotation":[50,7.5,0],"origin":[1.5,5.57226,19.00962],"uv_offset":[114,7],"faces":{"north":{"uv":[119,11,118,11],"texture":0},"east":{"uv":[123,11,119,11],"texture":0},"south":{"uv":[124,11,123,11],"texture":0},"west":{"uv":[118,11,114,11],"texture":0},"up":{"uv":[118,11,119,7],"texture":0},"down":{"uv":[119,7,120,11],"texture":0}},"type":"cube","uuid":"51c09895-9974-47bd-64c6-4b987d95a52b"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[1,8.6985,20.23987],"to":[2,8.6985,24.23987],"autouv":0,"color":6,"mirror_uv":true,"rotation":[30,7.5,0],"origin":[1.5,5.57226,19.00962],"uv_offset":[114,7],"faces":{"north":{"uv":[119,11,118,11],"texture":0},"east":{"uv":[123,11,119,11],"texture":0},"south":{"uv":[124,11,123,11],"texture":0},"west":{"uv":[118,11,114,11],"texture":0},"up":{"uv":[118,11,119,7],"texture":0},"down":{"uv":[119,7,120,11],"texture":0}},"type":"cube","uuid":"e268c1f6-030e-6db7-5938-b8605c8e6b41"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-15.80272,-1.76816,-13.88817],"to":[-10.80272,1.10684,-10.88817],"autouv":0,"color":7,"rotation":[0,-90,-30],"origin":[-27.26443,11.29953,-13.94336],"uv_offset":[96,7],"faces":{"north":{"uv":[99,10,104,12.875],"texture":0},"east":{"uv":[96,10,99,12.875],"texture":0},"south":{"uv":[107,10,112,12.875],"texture":0},"west":{"uv":[104,10,107,12.875],"texture":0},"up":{"uv":[104,10,99,7],"texture":0},"down":{"uv":[109,7,104,10],"texture":0}},"type":"cube","uuid":"d248abf5-bb0a-c650-0370-4e6dbaf4026b"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-30.475,-1.98773,-4.61687],"to":[-26.475,0.88727,-1.61687],"autouv":0,"color":7,"mirror_uv":true,"rotation":[30,0,0],"origin":[-19.90491,6.89062,0],"uv_offset":[114,0],"faces":{"north":{"uv":[121,3,117,5.875],"texture":0},"east":{"uv":[124,3,121,5.875],"texture":0},"south":{"uv":[128,3,124,5.875],"texture":0},"west":{"uv":[117,3,114,5.875],"texture":0},"up":{"uv":[117,3,121,0],"texture":0},"down":{"uv":[121,0,125,3],"texture":0}},"type":"cube","uuid":"e625139a-359a-bd61-40dc-3feb79bbba78"}],"outliner":[{"name":"Everything","origin":[0,0,0],"rotation":[0,-180,0],"color":0,"uuid":"75060622-42f9-bae8-480d-3fa98533e29a","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"selected":true,"children":[{"name":"body","origin":[-12,5.75,13],"color":0,"uuid":"9613ee7e-cc2f-018d-5ebf-45777b67d5a9","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"selected":false,"children":["0a7c4075-bc6c-9296-d12b-6bdd4073e03f","90a77059-fca7-422d-9f41-daecb93b7bf0"]},{"name":"head","origin":[0,5.5,16],"color":0,"uuid":"5546f445-466a-2cb9-6f7b-0cf0fb150c55","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"selected":false,"children":["451baa86-bb99-b993-6fba-c0301a1816a2","0a29feb1-e332-5320-6f22-c40b5421ad1c","11dfe79e-ce4e-727e-c958-3ed8ae196670","877e9bcf-772d-cf33-5927-8f998fe10fa0","61c54a6c-fdfe-d20d-a585-48e33a1ff110","d3e4200f-27b1-a818-533f-40e71a7ea5e0","1738b23c-1a2b-49e9-b7cb-ef0284abe8c2","51c09895-9974-47bd-64c6-4b987d95a52b","e268c1f6-030e-6db7-5938-b8605c8e6b41","f43395fc-8bfa-2e2b-cf48-984ba4a6664b"]},{"name":"right_foreleg","origin":[-10,7,15],"color":0,"uuid":"cf7e72c2-e1cf-bf00-a1eb-2f3081b16b18","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"selected":false,"children":["43036808-81f0-745b-bad7-8727eb67a04d","b12ea92c-291a-1b29-bdd3-d93b1eba24cd","6cfa9343-8f8f-d6de-18fd-3a998e90aa59","54295083-0b51-d463-a927-26fa3f2fead3","4d958243-0fbc-a5fe-a194-42f49a17b258"]},{"name":"front_right_leg","origin":[-15,10,11],"color":0,"uuid":"5d69ec76-686b-d6e4-2fe2-a9fe20eb12aa","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"selected":false,"children":["9b8a6dcb-83cf-e083-cb53-db119414cebf","f99515f5-e8f6-5184-08c7-d43d8a4a36b8","9cb74de9-41ce-76db-297b-21b016b9fb5e","48927ba4-b9a6-d6fa-1f2d-d56d753a750f","40ade474-3dab-f41a-078a-15bb3693155a","3742d33e-fc09-8e6f-59ab-5df75b6ca11b","38d819f0-40a2-4a06-7c02-352b6433cb59","2fd4a586-8f3f-43b9-6fe3-b3b7c8198f8a","3d295af3-807f-4aa2-081f-43f507e1384e","be17bca0-def0-754d-46c2-d6c2bfff924f","da14606c-6a3b-bc94-d2f9-1e7786b41bac","740bcba7-d7d3-7863-c949-a4441bc10ad7","075d2bf5-43f0-bbb9-73ab-0dbec14dc9ba","ea40e263-7b68-4e80-7ab6-09e378600d19","6c99e89c-2d40-3f0b-8025-c55b1db532f9","381793a8-1302-83ce-f5f4-df62b06ab4d0","588d15a8-ede4-0109-a5d5-032a4bcf33ab"]},{"name":"middle_right_leg","origin":[-16,10,0],"color":0,"uuid":"992291ce-32cc-2d6e-788a-44a390f09d76","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"selected":false,"children":["abe75abd-c467-aa01-e526-3dec0db4ba79","003625fd-4fed-5642-0498-c44c318ebc69","dd7508aa-eb1a-2f10-8f61-f2a516e50d20","55843084-2fc1-5f6f-ec34-ce837adccd19","cb6c5b58-73ce-d6e1-8758-56a3733b2296","5a839f88-1c6d-77c4-e0fb-44066ec52ba7","e069d02d-3a4b-077c-8515-448ce5cdf5b6","74b7b771-b07c-0ca6-93a3-35a824990932","6648038f-3ea8-6c09-f78b-8dbd69365df4","7070fc74-1f5a-2a86-da0c-c2bbe15d35f7","16ab778a-23ea-60a9-3f7a-e599fe2e71e8","43c05692-80a7-3089-f02c-dc79e4a69873","add38799-beb0-be3c-040e-fa3e22cff72b","abd20661-eea6-efa9-8d9a-07625075c582","f462ee27-a868-12b3-42fb-14d711f5baa0"]},{"name":"back_right_leg","origin":[-15,10,-11],"color":0,"uuid":"c256f8c0-6ccd-6551-cdc9-7352ab61f8aa","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"selected":false,"children":["e84a389b-3a84-4a4f-82a0-a899a18fedfa","d44324cb-bb7c-0f9a-3976-050344d92f59","f160b8e4-c3f2-6fe2-4292-f3702d4f4fd7","6ee67f4c-f77b-8a27-b4a5-a862e11388f2","78d94604-e7f2-c0f0-6f84-589980049c1f","2ca47203-6f40-a856-51cd-002fd9eca81a","afa6125b-ac38-e38b-0555-d1156fba930c","62f38a00-33a4-1058-37d5-6c5082c0f60b","9d8d39fd-fac5-27c7-e4fb-a8703b04818b","f3fe2359-ae7a-63d2-2dbe-c9182e119b80","a280e3fa-bd4d-55c2-16fb-d0f740f6367a","d248abf5-bb0a-c650-0370-4e6dbaf4026b","2d0c962d-63da-b81c-a251-7c5fb934d084","52828342-9322-2b13-f388-a7e51f534f71","9985386e-8766-96c5-2553-f0b780dac158","dab7d550-b9b3-3786-551b-c38b86b96a1c","550d8d01-c08d-264d-06e8-778748c85579","c36fc078-a7bc-5201-d453-9b9d5c95a309"]},{"name":"left_foreleg","origin":[10,7,15],"color":0,"uuid":"5542a814-2569-57eb-706d-df46189f589b","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"selected":false,"children":["c4fa28ac-2c40-10a3-b54c-9418ca57112a","cfc54668-b130-e56c-de6b-bb2521510e8a","6269b635-9b8b-1f3b-33f9-80f4923a9a4f","98060a8d-85c1-6b48-b00b-e6069e6528fb","99029de3-257e-18be-a152-a793b9334083"]},{"name":"front_left_leg","origin":[15,10,11],"color":0,"uuid":"d739bf9c-474f-0c8c-d55a-e52a0e821239","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"selected":false,"children":["fdc04b5b-5ffa-10e6-cb69-b36e9bd10bc0","2fada0c5-27d5-d618-64cc-00cfa24a212c","36e116b3-996d-1c54-d868-137870a882a7","3a62ca46-c28b-b8e8-64ec-fabbbd48e05a","c4cc3457-6e45-6449-5a40-590d93a96285","befdff54-a686-5ac0-fc46-f2ef6e408763","e7338d16-154e-5332-5299-8edd426d36d9","7e33d722-ada9-3f13-d980-35b57c7423b3","ba42aac7-f301-9f9f-c1b9-6ceb8ce75a78","546b7cc6-835a-08f0-7833-04d25e83d447","5b1afece-bbc9-e89e-7d51-1cc64d8ab8fa","38ca4b91-b062-87e6-f546-ad63462b165a","91334231-7cf1-8ffa-da06-9515e73d7363","a90ad2f6-b968-6090-4e83-fda01f6f120a","2c056c12-c971-f8a9-2f8b-3595c5cde8d0","510edcfe-13f1-8fed-1321-cbb7791052e2","e53d3285-fe8c-a7a5-67db-56c28210b5d8"]},{"name":"middle_left_leg","origin":[16,10,0],"color":0,"uuid":"85c7bdf0-403c-4aaa-ca92-07da8fcf8872","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"selected":false,"children":["9dbc00ee-dd55-5413-c322-f9b436243ff1","56727859-96ee-81d1-1a83-ae71755092b9","95a910b8-3832-6e38-b9c4-7d3c3543d2b3","6ea50fca-6d7b-8d72-e106-cd8861417155","1f0db8da-4050-08d7-9669-2f1b9f7187f8","e40231c8-bd8a-65e5-ea45-808f38477c61","d9ac01dd-636d-8a11-e80f-feaa0b5e9fb2","23f49dc4-59cf-e3d3-2cc4-bce4ec2f94b2","f3fb1dee-ca27-b7cd-b0ee-a544579ec618","a312594e-5bf6-4dac-fa3e-f893f238ac1c","be420179-b5f2-805d-e778-8973c6172860","e625139a-359a-bd61-40dc-3feb79bbba78","32083e49-6bdc-cb48-3a9e-4c1363440861","e878671b-c703-c7cc-22ca-7403ebf9146c","60c97526-b50b-6b87-e3d7-df9ff1446159","2856fc05-81df-fa22-0a6c-9a273039af7b","4130f3c4-417e-f29d-0b0e-9330eeb5512c","b0506837-a0c1-be82-8dee-ff3c5b3146c7"]},{"name":"back_left_leg","origin":[15,10,-11],"color":0,"uuid":"be64732b-da49-7535-ea2e-10ea6455b35e","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"selected":false,"children":["91f58307-85b0-2d5c-5b83-77c97752ae5a","3cc6a566-e732-80b9-f71c-c3017bb48932","126949d5-4740-c3c0-d3af-9d3e7b369e65","2f2d9c83-c5a6-6323-28dd-ac1d354299db","8fbb2de2-3bc5-8be7-994b-501acccbbda7","04d66ae8-8e89-92e3-a917-f3e9b6b263f0","7c48cce6-3ce9-5a15-6e0e-0fabe9ed15d8","1347b4da-4115-06cf-1ac6-376fdee5e469","5e854c8a-787e-3415-5905-0ccf83662cf8","132d934a-c935-accf-5494-08fff85c02e6","996a94af-a181-df6c-7cea-fa5aede635bd","eca7e05d-e830-9066-7d32-9780949eea6b","17c1d72a-be1f-9168-5930-ad91a60650ce","67db8cc6-8191-11ea-3e2a-9f716952691a","fc939091-b300-7b64-0c59-8186c6ebe91e","31e82821-4989-3174-b116-5f11b609d07b","de69bbf1-8152-7f8b-12ea-b3bc1552fc65"]}]}],"textures":[{"path":"Z:\\Repo\\Minecraft\\2021\\CosmereProject\\_cosmere\\src\\surgebinding\\resources\\assets\\surgebinding\\textures\\entity\\chull\\chull.png","name":"chull.png","folder":"block","namespace":"","id":"1","group":"","width":128,"height":128,"uv_width":128,"uv_height":128,"particle":false,"use_as_default":false,"layers_enabled":true,"sync_to_project":"","render_mode":"default","render_sides":"auto","pbr_channel":"color","frame_time":1,"frame_order_type":"loop","frame_order":"","frame_interpolate":false,"visible":true,"internal":true,"saved":true,"uuid":"38d85630-fc49-18fa-e070-003e70185531","layers":[{"name":"layer","offset":[0,0],"scale":[1,1],"opacity":100,"visible":true,"blend_mode":"default","width":128,"height":128,"data_url":"data:image/png;base64,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"}],"relative_path":"../../../src/surgebinding/resources/assets/surgebinding/textures/entity/chull/chull.png","source":"data:image/png;base64,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"}],"reference_images":[{"name":"Pasted","scope":"project","position":[755,152],"size":[237,237],"source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAAXNSR0IArs4c6QAAANpJREFUOI1lUkEKAjEMHCG30pLjiih+zKf4JP8kirjH0NK7h1mzod1D2TYzk8y0h8f9lrUASJoBAOjWmlWrHf9PS/J/AdCsckMO16yF55RzCfF9s/p+fQfJoU/WIhEUWzuaK0vNqmhJsRD1Ip+DbB7OlyPndrsOnfMQF06avUCoq1Bo72C1W+36PxrQDt1SGixyeoZGWtJMGt3upgcmafOoslxPy2TXMwGwPj9xVFmfH2+drTHs+QZ3D3SM1zeW5z6ejcRXwJEcNzxHImV+lS3kG03zfOwwM4d8f86sw8uGBiPxAAAAAElFTkSuQmCC"}]} \ No newline at end of file diff --git a/blockbench/surgebinding/entities/cryptic/CREDITS.txt b/blockbench/surgebinding/entities/cryptic/CREDITS.txt new file mode 100644 index 000000000..eca458623 --- /dev/null +++ b/blockbench/surgebinding/entities/cryptic/CREDITS.txt @@ -0,0 +1 @@ +Eliot Lash - Original Model, Rig, Texture diff --git a/blockbench/surgebinding/entities/cryptic/cryptic.bbmodel b/blockbench/surgebinding/entities/cryptic/cryptic.bbmodel new file mode 100644 index 000000000..d7a91ac17 --- /dev/null +++ b/blockbench/surgebinding/entities/cryptic/cryptic.bbmodel @@ -0,0 +1 @@ +{"meta":{"format_version":"4.5","model_format":"modded_entity","box_uv":true},"name":"CrypticModel","model_identifier":"CrypticModel","modded_entity_version":"1.17","modded_entity_flip_y":true,"visible_box":[1,1,0],"variable_placeholders":"","variable_placeholder_buttons":[],"unhandled_root_fields":{},"resolution":{"width":16,"height":16},"elements":[{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[0,13,-4],"to":[1,14,-3],"autouv":1,"color":7,"origin":[0,13,-8],"faces":{"north":{"uv":[1,1,2,2],"texture":0},"east":{"uv":[0,1,1,2],"texture":0},"south":{"uv":[3,1,4,2],"texture":0},"west":{"uv":[2,1,3,2],"texture":0},"up":{"uv":[2,1,1,0],"texture":0},"down":{"uv":[3,0,2,1],"texture":0}},"type":"cube","uuid":"7fdfd539-4135-81ff-439b-065559bba249"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[1,14,-4],"to":[2,15,-3],"autouv":1,"color":0,"origin":[1,14,-8],"faces":{"north":{"uv":[1,1,2,2],"texture":0},"east":{"uv":[0,1,1,2],"texture":0},"south":{"uv":[3,1,4,2],"texture":0},"west":{"uv":[2,1,3,2],"texture":0},"up":{"uv":[2,1,1,0],"texture":0},"down":{"uv":[3,0,2,1],"texture":0}},"type":"cube","uuid":"12bbb76d-6062-d603-5041-e6d728ecbdb3"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[2,15,-4],"to":[3,16,-3],"autouv":1,"color":4,"origin":[2,15,-8],"faces":{"north":{"uv":[1,1,2,2],"texture":0},"east":{"uv":[0,1,1,2],"texture":0},"south":{"uv":[3,1,4,2],"texture":0},"west":{"uv":[2,1,3,2],"texture":0},"up":{"uv":[2,1,1,0],"texture":0},"down":{"uv":[3,0,2,1],"texture":0}},"type":"cube","uuid":"fdd1e7ea-3887-d0fd-3c12-e021332fa392"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[2,16,-4],"to":[3,17,-3],"autouv":1,"color":0,"origin":[2,16,-8],"faces":{"north":{"uv":[1,1,2,2],"texture":0},"east":{"uv":[0,1,1,2],"texture":0},"south":{"uv":[3,1,4,2],"texture":0},"west":{"uv":[2,1,3,2],"texture":0},"up":{"uv":[2,1,1,0],"texture":0},"down":{"uv":[3,0,2,1],"texture":0}},"type":"cube","uuid":"99b351cf-13ae-57c2-78a7-350eb2a01a94"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[1,18,-4],"to":[2,19,-3],"autouv":1,"color":0,"origin":[1,18,-8],"faces":{"north":{"uv":[1,1,2,2],"texture":0},"east":{"uv":[0,1,1,2],"texture":0},"south":{"uv":[3,1,4,2],"texture":0},"west":{"uv":[2,1,3,2],"texture":0},"up":{"uv":[2,1,1,0],"texture":0},"down":{"uv":[3,0,2,1],"texture":0}},"type":"cube","uuid":"4650c229-52d4-b0d0-6b85-76026f35df90"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[2,17,-4],"to":[3,18,-3],"autouv":1,"color":0,"origin":[2,17,-8],"faces":{"north":{"uv":[1,1,2,2],"texture":0},"east":{"uv":[0,1,1,2],"texture":0},"south":{"uv":[3,1,4,2],"texture":0},"west":{"uv":[2,1,3,2],"texture":0},"up":{"uv":[2,1,1,0],"texture":0},"down":{"uv":[3,0,2,1],"texture":0}},"type":"cube","uuid":"5f765e45-461f-0b2c-f72f-5df2e57bf6dd"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[0,19,-4],"to":[1,20,-3],"autouv":1,"color":0,"origin":[0,19,-8],"faces":{"north":{"uv":[1,1,2,2],"texture":0},"east":{"uv":[0,1,1,2],"texture":0},"south":{"uv":[3,1,4,2],"texture":0},"west":{"uv":[2,1,3,2],"texture":0},"up":{"uv":[2,1,1,0],"texture":0},"down":{"uv":[3,0,2,1],"texture":0}},"type":"cube","uuid":"7db803b7-834f-eeb8-97fc-f7e87efd8dfb"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[1,20,-4],"to":[5,21,-3],"autouv":1,"color":0,"origin":[1,20,-8],"faces":{"north":{"uv":[1,1,5,2],"texture":0},"east":{"uv":[0,1,1,2],"texture":0},"south":{"uv":[6,1,10,2],"texture":0},"west":{"uv":[5,1,6,2],"texture":0},"up":{"uv":[5,1,1,0],"texture":0},"down":{"uv":[9,0,5,1],"texture":0}},"type":"cube","uuid":"515a9268-c862-2c11-cf4a-d70d9702412e"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[3,15,-4],"to":[4,16,-3],"autouv":1,"color":0,"shade":false,"mirror_uv":true,"origin":[4,15,-8],"faces":{"north":{"uv":[2,1,1,2],"texture":0},"east":{"uv":[3,1,2,2],"texture":0},"south":{"uv":[4,1,3,2],"texture":0},"west":{"uv":[1,1,0,2],"texture":0},"up":{"uv":[1,1,2,0],"texture":0},"down":{"uv":[2,0,3,1],"texture":0}},"type":"cube","uuid":"8040446f-dee9-cf35-842d-18c4887618d0"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[5,14,-4],"to":[6,15,-3],"autouv":1,"color":0,"shade":false,"mirror_uv":true,"origin":[6,14,-8],"faces":{"north":{"uv":[2,1,1,2],"texture":0},"east":{"uv":[3,1,2,2],"texture":0},"south":{"uv":[4,1,3,2],"texture":0},"west":{"uv":[1,1,0,2],"texture":0},"up":{"uv":[1,1,2,0],"texture":0},"down":{"uv":[2,0,3,1],"texture":0}},"type":"cube","uuid":"6d87e198-1c38-4375-580c-7549cbee0504"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[4,15,-4],"to":[5,16,-3],"autouv":1,"color":0,"shade":false,"mirror_uv":true,"origin":[5,15,-8],"faces":{"north":{"uv":[2,1,1,2],"texture":0},"east":{"uv":[3,1,2,2],"texture":0},"south":{"uv":[4,1,3,2],"texture":0},"west":{"uv":[1,1,0,2],"texture":0},"up":{"uv":[1,1,2,0],"texture":0},"down":{"uv":[2,0,3,1],"texture":0}},"type":"cube","uuid":"05431365-d961-a8df-a5e1-91969af779f7"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[6,13,-4],"to":[7,14,-3],"autouv":1,"color":0,"shade":false,"mirror_uv":true,"origin":[7,13,-8],"faces":{"north":{"uv":[2,1,1,2],"texture":0},"east":{"uv":[3,1,2,2],"texture":0},"south":{"uv":[4,1,3,2],"texture":0},"west":{"uv":[1,1,0,2],"texture":0},"up":{"uv":[1,1,2,0],"texture":0},"down":{"uv":[2,0,3,1],"texture":0}},"type":"cube","uuid":"a9f47379-250b-b4fa-c00e-4f4126b9c61d"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[7,14,-4],"to":[8,18,-3],"autouv":1,"color":0,"shade":false,"mirror_uv":true,"origin":[8,14,-8],"faces":{"north":{"uv":[2,1,1,5],"texture":0},"east":{"uv":[3,1,2,5],"texture":0},"south":{"uv":[4,1,3,5],"texture":0},"west":{"uv":[1,1,0,5],"texture":0},"up":{"uv":[1,1,2,0],"texture":0},"down":{"uv":[2,0,3,1],"texture":0}},"type":"cube","uuid":"decc9b57-7b2d-aac4-0e2e-4e23490fcea3"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-1,13,-4],"to":[0,14,-3],"autouv":1,"color":7,"shade":false,"mirror_uv":true,"origin":[0,13,-8],"faces":{"north":{"uv":[2,1,1,2],"texture":0},"east":{"uv":[3,1,2,2],"texture":0},"south":{"uv":[4,1,3,2],"texture":0},"west":{"uv":[1,1,0,2],"texture":0},"up":{"uv":[1,1,2,0],"texture":0},"down":{"uv":[2,0,3,1],"texture":0}},"type":"cube","uuid":"4870ad97-e432-66f4-b5d5-0d121a1b6342"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-2,14,-4],"to":[-1,15,-3],"autouv":1,"color":0,"shade":false,"mirror_uv":true,"origin":[-1,14,-8],"faces":{"north":{"uv":[2,1,1,2],"texture":0},"east":{"uv":[3,1,2,2],"texture":0},"south":{"uv":[4,1,3,2],"texture":0},"west":{"uv":[1,1,0,2],"texture":0},"up":{"uv":[1,1,2,0],"texture":0},"down":{"uv":[2,0,3,1],"texture":0}},"type":"cube","uuid":"dc4d4933-1c85-3598-e251-db84b5b31a22"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-3,15,-4],"to":[-2,16,-3],"autouv":1,"color":4,"shade":false,"mirror_uv":true,"origin":[-2,15,-8],"faces":{"north":{"uv":[2,1,1,2],"texture":0},"east":{"uv":[3,1,2,2],"texture":0},"south":{"uv":[4,1,3,2],"texture":0},"west":{"uv":[1,1,0,2],"texture":0},"up":{"uv":[1,1,2,0],"texture":0},"down":{"uv":[2,0,3,1],"texture":0}},"type":"cube","uuid":"02c0aaa5-cdb1-83f6-29c9-8c309e951ed4"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-3,16,-4],"to":[-2,17,-3],"autouv":1,"color":0,"shade":false,"mirror_uv":true,"origin":[-2,16,-8],"faces":{"north":{"uv":[2,1,1,2],"texture":0},"east":{"uv":[3,1,2,2],"texture":0},"south":{"uv":[4,1,3,2],"texture":0},"west":{"uv":[1,1,0,2],"texture":0},"up":{"uv":[1,1,2,0],"texture":0},"down":{"uv":[2,0,3,1],"texture":0}},"type":"cube","uuid":"e53372a8-55ae-f510-76e2-7aea43f51c80"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-4,15,-4],"to":[-3,16,-3],"autouv":1,"color":0,"origin":[-4,15,-8],"faces":{"north":{"uv":[1,1,2,2],"texture":0},"east":{"uv":[0,1,1,2],"texture":0},"south":{"uv":[3,1,4,2],"texture":0},"west":{"uv":[2,1,3,2],"texture":0},"up":{"uv":[2,1,1,0],"texture":0},"down":{"uv":[3,0,2,1],"texture":0}},"type":"cube","uuid":"1ada3e66-0f09-aabd-9c89-ba65ee280b0b"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-2,18,-4],"to":[-1,19,-3],"autouv":1,"color":0,"shade":false,"mirror_uv":true,"origin":[-1,18,-8],"faces":{"north":{"uv":[2,1,1,2],"texture":0},"east":{"uv":[3,1,2,2],"texture":0},"south":{"uv":[4,1,3,2],"texture":0},"west":{"uv":[1,1,0,2],"texture":0},"up":{"uv":[1,1,2,0],"texture":0},"down":{"uv":[2,0,3,1],"texture":0}},"type":"cube","uuid":"1252bad6-3db7-eb9a-d2d4-28d314bcf6b7"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-6,14,-4],"to":[-5,15,-3],"autouv":1,"color":0,"origin":[-6,14,-8],"faces":{"north":{"uv":[1,1,2,2],"texture":0},"east":{"uv":[0,1,1,2],"texture":0},"south":{"uv":[3,1,4,2],"texture":0},"west":{"uv":[2,1,3,2],"texture":0},"up":{"uv":[2,1,1,0],"texture":0},"down":{"uv":[3,0,2,1],"texture":0}},"type":"cube","uuid":"4fecc180-c1f5-81b1-deed-2aa0a51f4bf0"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-1,19,-4],"to":[0,20,-3],"autouv":1,"color":0,"shade":false,"mirror_uv":true,"origin":[0,19,-8],"faces":{"north":{"uv":[2,1,1,2],"texture":0},"east":{"uv":[3,1,2,2],"texture":0},"south":{"uv":[4,1,3,2],"texture":0},"west":{"uv":[1,1,0,2],"texture":0},"up":{"uv":[1,1,2,0],"texture":0},"down":{"uv":[2,0,3,1],"texture":0}},"type":"cube","uuid":"56de0901-0ab4-0e30-95cd-d025a0dfb2c3"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-7,13,-4],"to":[-6,14,-3],"autouv":1,"color":0,"origin":[-7,13,-8],"faces":{"north":{"uv":[1,1,2,2],"texture":0},"east":{"uv":[0,1,1,2],"texture":0},"south":{"uv":[3,1,4,2],"texture":0},"west":{"uv":[2,1,3,2],"texture":0},"up":{"uv":[2,1,1,0],"texture":0},"down":{"uv":[3,0,2,1],"texture":0}},"type":"cube","uuid":"64c74fd9-9d18-5ed8-ce9c-a81478ed9280"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-5,20,-4],"to":[-1,21,-3],"autouv":1,"color":0,"shade":false,"mirror_uv":true,"origin":[-1,20,-8],"faces":{"north":{"uv":[5,1,1,2],"texture":0},"east":{"uv":[6,1,5,2],"texture":0},"south":{"uv":[10,1,6,2],"texture":0},"west":{"uv":[1,1,0,2],"texture":0},"up":{"uv":[1,1,5,0],"texture":0},"down":{"uv":[5,0,9,1],"texture":0}},"type":"cube","uuid":"ce2885f0-e154-9fd2-06e1-884243f1c0c4"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-8,14,-4],"to":[-7,18,-3],"autouv":1,"color":0,"origin":[-8,14,-8],"faces":{"north":{"uv":[1,1,2,5],"texture":0},"east":{"uv":[0,1,1,5],"texture":0},"south":{"uv":[3,1,4,5],"texture":0},"west":{"uv":[2,1,3,5],"texture":0},"up":{"uv":[2,1,1,0],"texture":0},"down":{"uv":[3,0,2,1],"texture":0}},"type":"cube","uuid":"4a0f386e-b013-6a84-d1bf-a6c1c4dec4c7"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-3,17,-4],"to":[-2,18,-3],"autouv":1,"color":0,"shade":false,"mirror_uv":true,"origin":[-2,17,-8],"faces":{"north":{"uv":[2,1,1,2],"texture":0},"east":{"uv":[3,1,2,2],"texture":0},"south":{"uv":[4,1,3,2],"texture":0},"west":{"uv":[1,1,0,2],"texture":0},"up":{"uv":[1,1,2,0],"texture":0},"down":{"uv":[2,0,3,1],"texture":0}},"type":"cube","uuid":"af599bc6-fb6c-a51d-4904-929581d639f0"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-5,15,-4],"to":[-4,16,-3],"autouv":1,"color":0,"origin":[-5,15,-8],"faces":{"north":{"uv":[1,1,2,2],"texture":0},"east":{"uv":[0,1,1,2],"texture":0},"south":{"uv":[3,1,4,2],"texture":0},"west":{"uv":[2,1,3,2],"texture":0},"up":{"uv":[2,1,1,0],"texture":0},"down":{"uv":[3,0,2,1],"texture":0}},"type":"cube","uuid":"cc0030be-77a7-86a8-31f0-630606d9756d"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-1,12,-4],"to":[0,13,-3],"autouv":1,"color":7,"shade":false,"mirror_uv":true,"origin":[0,13,-8],"faces":{"north":{"uv":[2,1,1,2],"texture":0},"east":{"uv":[3,1,2,2],"texture":0},"south":{"uv":[4,1,3,2],"texture":0},"west":{"uv":[1,1,0,2],"texture":0},"up":{"uv":[1,1,2,0],"texture":0},"down":{"uv":[2,0,3,1],"texture":0}},"type":"cube","uuid":"f6e9f333-7e95-8342-91ac-841bf1aafa79"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-2,11,-4],"to":[-1,12,-3],"autouv":1,"color":0,"shade":false,"mirror_uv":true,"origin":[-1,12,-8],"faces":{"north":{"uv":[2,1,1,2],"texture":0},"east":{"uv":[3,1,2,2],"texture":0},"south":{"uv":[4,1,3,2],"texture":0},"west":{"uv":[1,1,0,2],"texture":0},"up":{"uv":[1,1,2,0],"texture":0},"down":{"uv":[2,0,3,1],"texture":0}},"type":"cube","uuid":"7d2c88e8-e901-c76b-aef1-539792e5e9cb"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-3,10,-4],"to":[-2,11,-3],"autouv":1,"color":4,"shade":false,"mirror_uv":true,"origin":[-2,11,-8],"faces":{"north":{"uv":[2,1,1,2],"texture":0},"east":{"uv":[3,1,2,2],"texture":0},"south":{"uv":[4,1,3,2],"texture":0},"west":{"uv":[1,1,0,2],"texture":0},"up":{"uv":[1,1,2,0],"texture":0},"down":{"uv":[2,0,3,1],"texture":0}},"type":"cube","uuid":"c80cc155-d6eb-60d0-2646-eb97eb5437ba"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-3,9,-4],"to":[-2,10,-3],"autouv":1,"color":0,"shade":false,"mirror_uv":true,"origin":[-2,10,-8],"faces":{"north":{"uv":[2,1,1,2],"texture":0},"east":{"uv":[3,1,2,2],"texture":0},"south":{"uv":[4,1,3,2],"texture":0},"west":{"uv":[1,1,0,2],"texture":0},"up":{"uv":[1,1,2,0],"texture":0},"down":{"uv":[2,0,3,1],"texture":0}},"type":"cube","uuid":"9a69201d-1631-5b03-e714-08adfad7762d"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-4,10,-4],"to":[-3,11,-3],"autouv":1,"color":0,"origin":[-4,11,-8],"faces":{"north":{"uv":[1,1,2,2],"texture":0},"east":{"uv":[0,1,1,2],"texture":0},"south":{"uv":[3,1,4,2],"texture":0},"west":{"uv":[2,1,3,2],"texture":0},"up":{"uv":[2,1,1,0],"texture":0},"down":{"uv":[3,0,2,1],"texture":0}},"type":"cube","uuid":"b74f62d2-017c-e485-11ae-f6ff4cc5b55a"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-2,7,-4],"to":[-1,8,-3],"autouv":1,"color":0,"shade":false,"mirror_uv":true,"origin":[-1,8,-8],"faces":{"north":{"uv":[2,1,1,2],"texture":0},"east":{"uv":[3,1,2,2],"texture":0},"south":{"uv":[4,1,3,2],"texture":0},"west":{"uv":[1,1,0,2],"texture":0},"up":{"uv":[1,1,2,0],"texture":0},"down":{"uv":[2,0,3,1],"texture":0}},"type":"cube","uuid":"1a7bc1ce-d12e-ee6e-3cf8-b73dc86ed316"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-6,11,-4],"to":[-5,12,-3],"autouv":1,"color":0,"origin":[-6,12,-8],"faces":{"north":{"uv":[1,1,2,2],"texture":0},"east":{"uv":[0,1,1,2],"texture":0},"south":{"uv":[3,1,4,2],"texture":0},"west":{"uv":[2,1,3,2],"texture":0},"up":{"uv":[2,1,1,0],"texture":0},"down":{"uv":[3,0,2,1],"texture":0}},"type":"cube","uuid":"77063817-e2b8-8fd4-35ea-dc53a5ddea15"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-1,6,-4],"to":[0,7,-3],"autouv":1,"color":0,"shade":false,"mirror_uv":true,"origin":[0,7,-8],"faces":{"north":{"uv":[2,1,1,2],"texture":0},"east":{"uv":[3,1,2,2],"texture":0},"south":{"uv":[4,1,3,2],"texture":0},"west":{"uv":[1,1,0,2],"texture":0},"up":{"uv":[1,1,2,0],"texture":0},"down":{"uv":[2,0,3,1],"texture":0}},"type":"cube","uuid":"7f4827ef-da1a-0fb1-bfb7-00d6e262b1c0"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-7,12,-4],"to":[-6,13,-3],"autouv":1,"color":0,"origin":[-7,13,-8],"faces":{"north":{"uv":[1,1,2,2],"texture":0},"east":{"uv":[0,1,1,2],"texture":0},"south":{"uv":[3,1,4,2],"texture":0},"west":{"uv":[2,1,3,2],"texture":0},"up":{"uv":[2,1,1,0],"texture":0},"down":{"uv":[3,0,2,1],"texture":0}},"type":"cube","uuid":"5afae85d-5aed-52df-86ae-188ef2cf2553"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-5,5,-4],"to":[-1,6,-3],"autouv":1,"color":0,"shade":false,"mirror_uv":true,"origin":[-1,6,-8],"faces":{"north":{"uv":[5,1,1,2],"texture":0},"east":{"uv":[6,1,5,2],"texture":0},"south":{"uv":[10,1,6,2],"texture":0},"west":{"uv":[1,1,0,2],"texture":0},"up":{"uv":[1,1,5,0],"texture":0},"down":{"uv":[5,0,9,1],"texture":0}},"type":"cube","uuid":"1e81cced-a38b-20df-fc16-baa89da4425e"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-8,8,-4],"to":[-7,12,-3],"autouv":1,"color":0,"origin":[-8,12,-8],"faces":{"north":{"uv":[1,1,2,5],"texture":0},"east":{"uv":[0,1,1,5],"texture":0},"south":{"uv":[3,1,4,5],"texture":0},"west":{"uv":[2,1,3,5],"texture":0},"up":{"uv":[2,1,1,0],"texture":0},"down":{"uv":[3,0,2,1],"texture":0}},"type":"cube","uuid":"c7cf075a-385b-3465-1349-3132ba43da88"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-3,8,-4],"to":[-2,9,-3],"autouv":1,"color":0,"shade":false,"mirror_uv":true,"origin":[-2,9,-8],"faces":{"north":{"uv":[2,1,1,2],"texture":0},"east":{"uv":[3,1,2,2],"texture":0},"south":{"uv":[4,1,3,2],"texture":0},"west":{"uv":[1,1,0,2],"texture":0},"up":{"uv":[1,1,2,0],"texture":0},"down":{"uv":[2,0,3,1],"texture":0}},"type":"cube","uuid":"7d136a6e-e5bb-a1f9-b717-cbac33836936"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-5,10,-4],"to":[-4,11,-3],"autouv":1,"color":0,"origin":[-5,11,-8],"faces":{"north":{"uv":[1,1,2,2],"texture":0},"east":{"uv":[0,1,1,2],"texture":0},"south":{"uv":[3,1,4,2],"texture":0},"west":{"uv":[2,1,3,2],"texture":0},"up":{"uv":[2,1,1,0],"texture":0},"down":{"uv":[3,0,2,1],"texture":0}},"type":"cube","uuid":"b437a96c-04ef-e8ac-f64e-bebf080aec2c"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[0,12,-4],"to":[1,13,-3],"autouv":1,"color":7,"origin":[0,13,-8],"faces":{"north":{"uv":[1,1,2,2],"texture":0},"east":{"uv":[0,1,1,2],"texture":0},"south":{"uv":[3,1,4,2],"texture":0},"west":{"uv":[2,1,3,2],"texture":0},"up":{"uv":[2,1,1,0],"texture":0},"down":{"uv":[3,0,2,1],"texture":0}},"type":"cube","uuid":"02a29876-ae9b-65ae-0015-987c17d1aa00"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[1,11,-4],"to":[2,12,-3],"autouv":1,"color":0,"origin":[1,12,-8],"faces":{"north":{"uv":[1,1,2,2],"texture":0},"east":{"uv":[0,1,1,2],"texture":0},"south":{"uv":[3,1,4,2],"texture":0},"west":{"uv":[2,1,3,2],"texture":0},"up":{"uv":[2,1,1,0],"texture":0},"down":{"uv":[3,0,2,1],"texture":0}},"type":"cube","uuid":"0a5330b6-d3a4-c84c-4727-414d908bf8db"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[2,10,-4],"to":[3,11,-3],"autouv":1,"color":4,"origin":[2,11,-8],"faces":{"north":{"uv":[1,1,2,2],"texture":0},"east":{"uv":[0,1,1,2],"texture":0},"south":{"uv":[3,1,4,2],"texture":0},"west":{"uv":[2,1,3,2],"texture":0},"up":{"uv":[2,1,1,0],"texture":0},"down":{"uv":[3,0,2,1],"texture":0}},"type":"cube","uuid":"c7775d2f-a6d4-e86c-1e27-bd9b01de327d"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[2,9,-4],"to":[3,10,-3],"autouv":1,"color":0,"origin":[2,10,-8],"faces":{"north":{"uv":[1,1,2,2],"texture":0},"east":{"uv":[0,1,1,2],"texture":0},"south":{"uv":[3,1,4,2],"texture":0},"west":{"uv":[2,1,3,2],"texture":0},"up":{"uv":[2,1,1,0],"texture":0},"down":{"uv":[3,0,2,1],"texture":0}},"type":"cube","uuid":"07c5f87e-810c-26e8-7e38-0acb5a998e5e"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[3,10,-4],"to":[4,11,-3],"autouv":1,"color":0,"shade":false,"mirror_uv":true,"origin":[4,11,-8],"faces":{"north":{"uv":[2,1,1,2],"texture":0},"east":{"uv":[3,1,2,2],"texture":0},"south":{"uv":[4,1,3,2],"texture":0},"west":{"uv":[1,1,0,2],"texture":0},"up":{"uv":[1,1,2,0],"texture":0},"down":{"uv":[2,0,3,1],"texture":0}},"type":"cube","uuid":"4938fd1e-31bd-031d-6cf7-adb0458f35b4"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[1,7,-4],"to":[2,8,-3],"autouv":1,"color":0,"origin":[1,8,-8],"faces":{"north":{"uv":[1,1,2,2],"texture":0},"east":{"uv":[0,1,1,2],"texture":0},"south":{"uv":[3,1,4,2],"texture":0},"west":{"uv":[2,1,3,2],"texture":0},"up":{"uv":[2,1,1,0],"texture":0},"down":{"uv":[3,0,2,1],"texture":0}},"type":"cube","uuid":"90d0b3ce-ec86-2ecb-c1a8-8e8d612d906e"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[5,11,-4],"to":[6,12,-3],"autouv":1,"color":0,"shade":false,"mirror_uv":true,"origin":[6,12,-8],"faces":{"north":{"uv":[2,1,1,2],"texture":0},"east":{"uv":[3,1,2,2],"texture":0},"south":{"uv":[4,1,3,2],"texture":0},"west":{"uv":[1,1,0,2],"texture":0},"up":{"uv":[1,1,2,0],"texture":0},"down":{"uv":[2,0,3,1],"texture":0}},"type":"cube","uuid":"26d1e6d0-ab92-01ce-7794-65eb30329015"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[0,6,-4],"to":[1,7,-3],"autouv":1,"color":0,"origin":[0,7,-8],"faces":{"north":{"uv":[1,1,2,2],"texture":0},"east":{"uv":[0,1,1,2],"texture":0},"south":{"uv":[3,1,4,2],"texture":0},"west":{"uv":[2,1,3,2],"texture":0},"up":{"uv":[2,1,1,0],"texture":0},"down":{"uv":[3,0,2,1],"texture":0}},"type":"cube","uuid":"76488d7e-39a8-ffa6-9e64-6443b3c8f552"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[6,12,-4],"to":[7,13,-3],"autouv":1,"color":0,"shade":false,"mirror_uv":true,"origin":[7,13,-8],"faces":{"north":{"uv":[2,1,1,2],"texture":0},"east":{"uv":[3,1,2,2],"texture":0},"south":{"uv":[4,1,3,2],"texture":0},"west":{"uv":[1,1,0,2],"texture":0},"up":{"uv":[1,1,2,0],"texture":0},"down":{"uv":[2,0,3,1],"texture":0}},"type":"cube","uuid":"1d24c549-b1d0-a5ab-283c-00274bacf6a1"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[1,5,-4],"to":[5,6,-3],"autouv":1,"color":0,"origin":[1,6,-8],"faces":{"north":{"uv":[1,1,5,2],"texture":0},"east":{"uv":[0,1,1,2],"texture":0},"south":{"uv":[6,1,10,2],"texture":0},"west":{"uv":[5,1,6,2],"texture":0},"up":{"uv":[5,1,1,0],"texture":0},"down":{"uv":[9,0,5,1],"texture":0}},"type":"cube","uuid":"de184cb7-1838-0955-346c-c1241512f25d"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[7,8,-4],"to":[8,12,-3],"autouv":1,"color":0,"shade":false,"mirror_uv":true,"origin":[8,12,-8],"faces":{"north":{"uv":[2,1,1,5],"texture":0},"east":{"uv":[3,1,2,5],"texture":0},"south":{"uv":[4,1,3,5],"texture":0},"west":{"uv":[1,1,0,5],"texture":0},"up":{"uv":[1,1,2,0],"texture":0},"down":{"uv":[2,0,3,1],"texture":0}},"type":"cube","uuid":"7ad7f028-6fa4-c31b-4baa-75a9abb5467b"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[2,8,-4],"to":[3,9,-3],"autouv":1,"color":0,"origin":[2,9,-8],"faces":{"north":{"uv":[1,1,2,2],"texture":0},"east":{"uv":[0,1,1,2],"texture":0},"south":{"uv":[3,1,4,2],"texture":0},"west":{"uv":[2,1,3,2],"texture":0},"up":{"uv":[2,1,1,0],"texture":0},"down":{"uv":[3,0,2,1],"texture":0}},"type":"cube","uuid":"62162bfb-d7e8-cab2-4d7e-04edb9c0325a"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[4,10,-4],"to":[5,11,-3],"autouv":1,"color":0,"shade":false,"mirror_uv":true,"origin":[5,11,-8],"faces":{"north":{"uv":[2,1,1,2],"texture":0},"east":{"uv":[3,1,2,2],"texture":0},"south":{"uv":[4,1,3,2],"texture":0},"west":{"uv":[1,1,0,2],"texture":0},"up":{"uv":[1,1,2,0],"texture":0},"down":{"uv":[2,0,3,1],"texture":0}},"type":"cube","uuid":"39d34cb7-7ece-4a08-bc17-42890120ba75"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[0,13,-4],"to":[1,14,-3],"autouv":1,"color":7,"origin":[0,13,-8],"faces":{"north":{"uv":[1,1,2,2],"texture":0},"east":{"uv":[0,1,1,2],"texture":0},"south":{"uv":[3,1,4,2],"texture":0},"west":{"uv":[2,1,3,2],"texture":0},"up":{"uv":[2,1,1,0],"texture":0},"down":{"uv":[3,0,2,1],"texture":0}},"type":"cube","uuid":"85a641db-17a4-383e-39c1-409fbecfefd4"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[0,13,-4],"to":[1,15,-3],"autouv":1,"color":7,"origin":[0,13,-8],"faces":{"north":{"uv":[1,1,2,3],"texture":0},"east":{"uv":[0,1,1,3],"texture":0},"south":{"uv":[3,1,4,3],"texture":0},"west":{"uv":[2,1,3,3],"texture":0},"up":{"uv":[2,1,1,0],"texture":0},"down":{"uv":[3,0,2,1],"texture":0}},"type":"cube","uuid":"99e2f49f-6a7a-ec3d-a01a-23a619f44e85"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[1,15,-4],"to":[2,17,-3],"autouv":1,"color":7,"origin":[1,15,-8],"faces":{"north":{"uv":[1,1,2,3],"texture":0},"east":{"uv":[0,1,1,3],"texture":0},"south":{"uv":[3,1,4,3],"texture":0},"west":{"uv":[2,1,3,3],"texture":0},"up":{"uv":[2,1,1,0],"texture":0},"down":{"uv":[3,0,2,1],"texture":0}},"type":"cube","uuid":"2304b223-aaab-4bc5-1dac-e1b982237cb5"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[2,17,-4],"to":[3,18,-3],"autouv":1,"color":7,"origin":[2,17,-8],"faces":{"north":{"uv":[1,1,2,2],"texture":0},"east":{"uv":[0,1,1,2],"texture":0},"south":{"uv":[3,1,4,2],"texture":0},"west":{"uv":[2,1,3,2],"texture":0},"up":{"uv":[2,1,1,0],"texture":0},"down":{"uv":[3,0,2,1],"texture":0}},"type":"cube","uuid":"0d3520a0-f00c-69a4-0493-c66c2c3126c3"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[3,18,-4],"to":[4,19,-3],"autouv":1,"color":7,"origin":[3,18,-8],"faces":{"north":{"uv":[1,1,2,2],"texture":0},"east":{"uv":[0,1,1,2],"texture":0},"south":{"uv":[3,1,4,2],"texture":0},"west":{"uv":[2,1,3,2],"texture":0},"up":{"uv":[2,1,1,0],"texture":0},"down":{"uv":[3,0,2,1],"texture":0}},"type":"cube","uuid":"b488dc59-80e3-76df-a686-cf2e8e59d2b3"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[4,19,-4],"to":[6,20,-3],"autouv":1,"color":7,"origin":[4,19,-8],"faces":{"north":{"uv":[1,1,3,2],"texture":0},"east":{"uv":[0,1,1,2],"texture":0},"south":{"uv":[4,1,6,2],"texture":0},"west":{"uv":[3,1,4,2],"texture":0},"up":{"uv":[3,1,1,0],"texture":0},"down":{"uv":[5,0,3,1],"texture":0}},"type":"cube","uuid":"8bfc08cb-a3d1-6be4-698b-f4e667f49e6f"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[6,20,-4],"to":[8,21,-3],"autouv":1,"color":7,"origin":[6,20,-8],"faces":{"north":{"uv":[1,1,3,2],"texture":0},"east":{"uv":[0,1,1,2],"texture":0},"south":{"uv":[4,1,6,2],"texture":0},"west":{"uv":[3,1,4,2],"texture":0},"up":{"uv":[3,1,1,0],"texture":0},"down":{"uv":[5,0,3,1],"texture":0}},"type":"cube","uuid":"3ef41e58-ac1f-639d-ff9c-c69458e25d4c"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-1,12,-4],"to":[0,13,-3],"autouv":1,"color":7,"shade":false,"mirror_uv":true,"origin":[0,13,-8],"faces":{"north":{"uv":[2,1,1,2],"texture":0},"east":{"uv":[3,1,2,2],"texture":0},"south":{"uv":[4,1,3,2],"texture":0},"west":{"uv":[1,1,0,2],"texture":0},"up":{"uv":[1,1,2,0],"texture":0},"down":{"uv":[2,0,3,1],"texture":0}},"type":"cube","uuid":"2a5b9c2a-73e8-13b3-9b13-a9e169e5332f"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-1,11,-4],"to":[0,13,-3],"autouv":1,"color":7,"shade":false,"mirror_uv":true,"origin":[0,13,-8],"faces":{"north":{"uv":[2,1,1,3],"texture":0},"east":{"uv":[3,1,2,3],"texture":0},"south":{"uv":[4,1,3,3],"texture":0},"west":{"uv":[1,1,0,3],"texture":0},"up":{"uv":[1,1,2,0],"texture":0},"down":{"uv":[2,0,3,1],"texture":0}},"type":"cube","uuid":"ae431105-6501-b0f7-3ee7-988d970cbb51"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-2,9,-4],"to":[-1,11,-3],"autouv":1,"color":7,"shade":false,"mirror_uv":true,"origin":[-1,11,-8],"faces":{"north":{"uv":[2,1,1,3],"texture":0},"east":{"uv":[3,1,2,3],"texture":0},"south":{"uv":[4,1,3,3],"texture":0},"west":{"uv":[1,1,0,3],"texture":0},"up":{"uv":[1,1,2,0],"texture":0},"down":{"uv":[2,0,3,1],"texture":0}},"type":"cube","uuid":"14fc97bb-940d-a61f-6dbe-4bed4c12f9af"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-3,8,-4],"to":[-2,9,-3],"autouv":1,"color":7,"shade":false,"mirror_uv":true,"origin":[-2,9,-8],"faces":{"north":{"uv":[2,1,1,2],"texture":0},"east":{"uv":[3,1,2,2],"texture":0},"south":{"uv":[4,1,3,2],"texture":0},"west":{"uv":[1,1,0,2],"texture":0},"up":{"uv":[1,1,2,0],"texture":0},"down":{"uv":[2,0,3,1],"texture":0}},"type":"cube","uuid":"11bb455b-01d7-ebd7-ee63-e5e064548511"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-4,7,-4],"to":[-3,8,-3],"autouv":1,"color":7,"shade":false,"mirror_uv":true,"origin":[-3,8,-8],"faces":{"north":{"uv":[2,1,1,2],"texture":0},"east":{"uv":[3,1,2,2],"texture":0},"south":{"uv":[4,1,3,2],"texture":0},"west":{"uv":[1,1,0,2],"texture":0},"up":{"uv":[1,1,2,0],"texture":0},"down":{"uv":[2,0,3,1],"texture":0}},"type":"cube","uuid":"a54cd32d-d3cf-e3bc-a56e-e80214ef69bf"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-6,6,-4],"to":[-4,7,-3],"autouv":1,"color":7,"shade":false,"mirror_uv":true,"origin":[-4,7,-8],"faces":{"north":{"uv":[3,1,1,2],"texture":0},"east":{"uv":[4,1,3,2],"texture":0},"south":{"uv":[6,1,4,2],"texture":0},"west":{"uv":[1,1,0,2],"texture":0},"up":{"uv":[1,1,3,0],"texture":0},"down":{"uv":[3,0,5,1],"texture":0}},"type":"cube","uuid":"1d9a3f26-8c11-99ff-31ef-da3ca716d0d9"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-8,5,-4],"to":[-6,6,-3],"autouv":1,"color":7,"shade":false,"mirror_uv":true,"origin":[-6,6,-8],"faces":{"north":{"uv":[3,1,1,2],"texture":0},"east":{"uv":[4,1,3,2],"texture":0},"south":{"uv":[6,1,4,2],"texture":0},"west":{"uv":[1,1,0,2],"texture":0},"up":{"uv":[1,1,3,0],"texture":0},"down":{"uv":[3,0,5,1],"texture":0}},"type":"cube","uuid":"a992a420-e3be-7122-7a77-f62e26b806c6"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[7,4,-4],"to":[8,5,-3],"autouv":1,"color":7,"shade":false,"mirror_uv":true,"origin":[8,5,-8],"faces":{"north":{"uv":[2,1,1,2],"texture":0},"east":{"uv":[3,1,2,2],"texture":0},"south":{"uv":[4,1,3,2],"texture":0},"west":{"uv":[1,1,0,2],"texture":0},"up":{"uv":[1,1,2,0],"texture":0},"down":{"uv":[2,0,3,1],"texture":0}},"type":"cube","uuid":"e0291fad-6a0b-e87a-aeb2-0918d7679d10"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[7,3,-4],"to":[8,5,-3],"autouv":1,"color":7,"shade":false,"mirror_uv":true,"origin":[8,5,-8],"faces":{"north":{"uv":[2,1,1,3],"texture":0},"east":{"uv":[3,1,2,3],"texture":0},"south":{"uv":[4,1,3,3],"texture":0},"west":{"uv":[1,1,0,3],"texture":0},"up":{"uv":[1,1,2,0],"texture":0},"down":{"uv":[2,0,3,1],"texture":0}},"type":"cube","uuid":"83ee86f9-d988-fd14-1ff9-b3e9701d744e"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[6,1,-4],"to":[7,3,-3],"autouv":1,"color":7,"shade":false,"mirror_uv":true,"origin":[7,3,-8],"faces":{"north":{"uv":[2,1,1,3],"texture":0},"east":{"uv":[3,1,2,3],"texture":0},"south":{"uv":[4,1,3,3],"texture":0},"west":{"uv":[1,1,0,3],"texture":0},"up":{"uv":[1,1,2,0],"texture":0},"down":{"uv":[2,0,3,1],"texture":0}},"type":"cube","uuid":"00fb8a51-e3bd-479d-75ca-eb83610e2639"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[5,0,-4],"to":[6,1,-3],"autouv":1,"color":7,"shade":false,"mirror_uv":true,"origin":[6,1,-8],"faces":{"north":{"uv":[2,1,1,2],"texture":0},"east":{"uv":[3,1,2,2],"texture":0},"south":{"uv":[4,1,3,2],"texture":0},"west":{"uv":[1,1,0,2],"texture":0},"up":{"uv":[1,1,2,0],"texture":0},"down":{"uv":[2,0,3,1],"texture":0}},"type":"cube","uuid":"7fc730a0-f5ec-73a9-96e4-0cbfa7552f07"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[4,-1,-4],"to":[5,0,-3],"autouv":1,"color":7,"shade":false,"mirror_uv":true,"origin":[5,0,-8],"faces":{"north":{"uv":[2,1,1,2],"texture":0},"east":{"uv":[3,1,2,2],"texture":0},"south":{"uv":[4,1,3,2],"texture":0},"west":{"uv":[1,1,0,2],"texture":0},"up":{"uv":[1,1,2,0],"texture":0},"down":{"uv":[2,0,3,1],"texture":0}},"type":"cube","uuid":"65ef588e-3a49-ea7d-0472-0ad44adbbffd"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[2,-2,-4],"to":[4,-1,-3],"autouv":1,"color":7,"shade":false,"mirror_uv":true,"origin":[4,-1,-8],"faces":{"north":{"uv":[3,1,1,2],"texture":0},"east":{"uv":[4,1,3,2],"texture":0},"south":{"uv":[6,1,4,2],"texture":0},"west":{"uv":[1,1,0,2],"texture":0},"up":{"uv":[1,1,3,0],"texture":0},"down":{"uv":[3,0,5,1],"texture":0}},"type":"cube","uuid":"9ea5455d-ebf0-00c0-2c16-7c5489344b6d"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[0,-3,-4],"to":[2,-2,-3],"autouv":1,"color":7,"shade":false,"mirror_uv":true,"origin":[2,-2,-8],"faces":{"north":{"uv":[3,1,1,2],"texture":0},"east":{"uv":[4,1,3,2],"texture":0},"south":{"uv":[6,1,4,2],"texture":0},"west":{"uv":[1,1,0,2],"texture":0},"up":{"uv":[1,1,3,0],"texture":0},"down":{"uv":[3,0,5,1],"texture":0}},"type":"cube","uuid":"a0a2fbe6-744c-10d5-6124-ad11c17d4629"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-8,21,-4],"to":[-7,22,-3],"autouv":1,"color":7,"origin":[-8,21,-8],"faces":{"north":{"uv":[1,1,2,2],"texture":0},"east":{"uv":[0,1,1,2],"texture":0},"south":{"uv":[3,1,4,2],"texture":0},"west":{"uv":[2,1,3,2],"texture":0},"up":{"uv":[2,1,1,0],"texture":0},"down":{"uv":[3,0,2,1],"texture":0}},"type":"cube","uuid":"58b62290-713a-6c98-029c-c3653f5003b3"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-8,21,-4],"to":[-7,23,-3],"autouv":1,"color":7,"origin":[-8,21,-8],"faces":{"north":{"uv":[1,1,2,3],"texture":0},"east":{"uv":[0,1,1,3],"texture":0},"south":{"uv":[3,1,4,3],"texture":0},"west":{"uv":[2,1,3,3],"texture":0},"up":{"uv":[2,1,1,0],"texture":0},"down":{"uv":[3,0,2,1],"texture":0}},"type":"cube","uuid":"3703c529-a748-56cd-9145-20741adeb074"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-7,23,-4],"to":[-6,25,-3],"autouv":1,"color":7,"origin":[-7,23,-8],"faces":{"north":{"uv":[1,1,2,3],"texture":0},"east":{"uv":[0,1,1,3],"texture":0},"south":{"uv":[3,1,4,3],"texture":0},"west":{"uv":[2,1,3,3],"texture":0},"up":{"uv":[2,1,1,0],"texture":0},"down":{"uv":[3,0,2,1],"texture":0}},"type":"cube","uuid":"5e00f405-ba18-63e8-8708-1bfe2ec2fe87"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-6,25,-4],"to":[-5,26,-3],"autouv":1,"color":7,"origin":[-6,25,-8],"faces":{"north":{"uv":[1,1,2,2],"texture":0},"east":{"uv":[0,1,1,2],"texture":0},"south":{"uv":[3,1,4,2],"texture":0},"west":{"uv":[2,1,3,2],"texture":0},"up":{"uv":[2,1,1,0],"texture":0},"down":{"uv":[3,0,2,1],"texture":0}},"type":"cube","uuid":"cdb83e2b-a21b-fc77-a182-780ef8155d78"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-5,26,-4],"to":[-4,27,-3],"autouv":1,"color":7,"origin":[-5,26,-8],"faces":{"north":{"uv":[1,1,2,2],"texture":0},"east":{"uv":[0,1,1,2],"texture":0},"south":{"uv":[3,1,4,2],"texture":0},"west":{"uv":[2,1,3,2],"texture":0},"up":{"uv":[2,1,1,0],"texture":0},"down":{"uv":[3,0,2,1],"texture":0}},"type":"cube","uuid":"5a1facd1-ef6b-bb95-0d87-65761c476453"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-4,27,-4],"to":[-2,28,-3],"autouv":1,"color":7,"origin":[-4,27,-8],"faces":{"north":{"uv":[1,1,3,2],"texture":0},"east":{"uv":[0,1,1,2],"texture":0},"south":{"uv":[4,1,6,2],"texture":0},"west":{"uv":[3,1,4,2],"texture":0},"up":{"uv":[3,1,1,0],"texture":0},"down":{"uv":[5,0,3,1],"texture":0}},"type":"cube","uuid":"c23de4b7-e427-7ba9-05fc-6cf6fcf560f0"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-2,28,-4],"to":[0,29,-3],"autouv":1,"color":7,"origin":[-2,28,-8],"faces":{"north":{"uv":[1,1,3,2],"texture":0},"east":{"uv":[0,1,1,2],"texture":0},"south":{"uv":[4,1,6,2],"texture":0},"west":{"uv":[3,1,4,2],"texture":0},"up":{"uv":[3,1,1,0],"texture":0},"down":{"uv":[5,0,3,1],"texture":0}},"type":"cube","uuid":"4aba2443-8dac-e14b-b8a2-5251d21d790d"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-1,13,-4],"to":[0,14,-3],"autouv":1,"color":7,"shade":false,"mirror_uv":true,"origin":[0,13,-8],"faces":{"north":{"uv":[2,1,1,2],"texture":0},"east":{"uv":[3,1,2,2],"texture":0},"south":{"uv":[4,1,3,2],"texture":0},"west":{"uv":[1,1,0,2],"texture":0},"up":{"uv":[1,1,2,0],"texture":0},"down":{"uv":[2,0,3,1],"texture":0}},"type":"cube","uuid":"4575c914-e171-8f30-da1a-ad9bd2ebfd74"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-1,13,-4],"to":[0,15,-3],"autouv":1,"color":7,"shade":false,"mirror_uv":true,"origin":[0,13,-8],"faces":{"north":{"uv":[2,1,1,3],"texture":0},"east":{"uv":[3,1,2,3],"texture":0},"south":{"uv":[4,1,3,3],"texture":0},"west":{"uv":[1,1,0,3],"texture":0},"up":{"uv":[1,1,2,0],"texture":0},"down":{"uv":[2,0,3,1],"texture":0}},"type":"cube","uuid":"a51fdba5-5f1d-bf3e-b67b-0624ef7b1498"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-2,15,-4],"to":[-1,17,-3],"autouv":1,"color":7,"shade":false,"mirror_uv":true,"origin":[-1,15,-8],"faces":{"north":{"uv":[2,1,1,3],"texture":0},"east":{"uv":[3,1,2,3],"texture":0},"south":{"uv":[4,1,3,3],"texture":0},"west":{"uv":[1,1,0,3],"texture":0},"up":{"uv":[1,1,2,0],"texture":0},"down":{"uv":[2,0,3,1],"texture":0}},"type":"cube","uuid":"ab9c1439-e22c-9174-a0cd-76dad6e5ac2b"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-3,17,-4],"to":[-2,18,-3],"autouv":1,"color":7,"shade":false,"mirror_uv":true,"origin":[-2,17,-8],"faces":{"north":{"uv":[2,1,1,2],"texture":0},"east":{"uv":[3,1,2,2],"texture":0},"south":{"uv":[4,1,3,2],"texture":0},"west":{"uv":[1,1,0,2],"texture":0},"up":{"uv":[1,1,2,0],"texture":0},"down":{"uv":[2,0,3,1],"texture":0}},"type":"cube","uuid":"2a3f11e3-a21a-3101-01d4-010a6cd072f5"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-4,18,-4],"to":[-3,19,-3],"autouv":1,"color":7,"shade":false,"mirror_uv":true,"origin":[-3,18,-8],"faces":{"north":{"uv":[2,1,1,2],"texture":0},"east":{"uv":[3,1,2,2],"texture":0},"south":{"uv":[4,1,3,2],"texture":0},"west":{"uv":[1,1,0,2],"texture":0},"up":{"uv":[1,1,2,0],"texture":0},"down":{"uv":[2,0,3,1],"texture":0}},"type":"cube","uuid":"5037d633-46e5-0618-c57c-74792f71af86"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-6,19,-4],"to":[-4,20,-3],"autouv":1,"color":7,"shade":false,"mirror_uv":true,"origin":[-4,19,-8],"faces":{"north":{"uv":[3,1,1,2],"texture":0},"east":{"uv":[4,1,3,2],"texture":0},"south":{"uv":[6,1,4,2],"texture":0},"west":{"uv":[1,1,0,2],"texture":0},"up":{"uv":[1,1,3,0],"texture":0},"down":{"uv":[3,0,5,1],"texture":0}},"type":"cube","uuid":"ce71dd1b-c266-10b8-d566-62df87c800d6"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-8,20,-4],"to":[-6,21,-3],"autouv":1,"color":7,"shade":false,"mirror_uv":true,"origin":[-6,20,-8],"faces":{"north":{"uv":[3,1,1,2],"texture":0},"east":{"uv":[4,1,3,2],"texture":0},"south":{"uv":[6,1,4,2],"texture":0},"west":{"uv":[1,1,0,2],"texture":0},"up":{"uv":[1,1,3,0],"texture":0},"down":{"uv":[3,0,5,1],"texture":0}},"type":"cube","uuid":"421bb8b2-35f0-23d0-7f8b-0fabe1c31aa6"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[0,12,-4],"to":[1,13,-3],"autouv":1,"color":7,"origin":[0,13,-8],"faces":{"north":{"uv":[1,1,2,2],"texture":0},"east":{"uv":[0,1,1,2],"texture":0},"south":{"uv":[3,1,4,2],"texture":0},"west":{"uv":[2,1,3,2],"texture":0},"up":{"uv":[2,1,1,0],"texture":0},"down":{"uv":[3,0,2,1],"texture":0}},"type":"cube","uuid":"1ef34843-42c1-427e-a234-e90e7ab624fa"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[0,11,-4],"to":[1,13,-3],"autouv":1,"color":7,"origin":[0,13,-8],"faces":{"north":{"uv":[1,1,2,3],"texture":0},"east":{"uv":[0,1,1,3],"texture":0},"south":{"uv":[3,1,4,3],"texture":0},"west":{"uv":[2,1,3,3],"texture":0},"up":{"uv":[2,1,1,0],"texture":0},"down":{"uv":[3,0,2,1],"texture":0}},"type":"cube","uuid":"f04f6192-b49e-611c-455d-6bbd43deb1f8"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[1,9,-4],"to":[2,11,-3],"autouv":1,"color":7,"origin":[1,11,-8],"faces":{"north":{"uv":[1,1,2,3],"texture":0},"east":{"uv":[0,1,1,3],"texture":0},"south":{"uv":[3,1,4,3],"texture":0},"west":{"uv":[2,1,3,3],"texture":0},"up":{"uv":[2,1,1,0],"texture":0},"down":{"uv":[3,0,2,1],"texture":0}},"type":"cube","uuid":"8e4522e2-4a6c-d006-be14-7227e380f962"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[2,8,-4],"to":[3,9,-3],"autouv":1,"color":7,"origin":[2,9,-8],"faces":{"north":{"uv":[1,1,2,2],"texture":0},"east":{"uv":[0,1,1,2],"texture":0},"south":{"uv":[3,1,4,2],"texture":0},"west":{"uv":[2,1,3,2],"texture":0},"up":{"uv":[2,1,1,0],"texture":0},"down":{"uv":[3,0,2,1],"texture":0}},"type":"cube","uuid":"2b3d72c0-b096-77d5-de29-70511b2bb9d0"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[3,7,-4],"to":[4,8,-3],"autouv":1,"color":7,"origin":[3,8,-8],"faces":{"north":{"uv":[1,1,2,2],"texture":0},"east":{"uv":[0,1,1,2],"texture":0},"south":{"uv":[3,1,4,2],"texture":0},"west":{"uv":[2,1,3,2],"texture":0},"up":{"uv":[2,1,1,0],"texture":0},"down":{"uv":[3,0,2,1],"texture":0}},"type":"cube","uuid":"6c04a87d-f951-67dc-e52c-041200ef40ff"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[4,6,-4],"to":[6,7,-3],"autouv":1,"color":7,"origin":[4,7,-8],"faces":{"north":{"uv":[1,1,3,2],"texture":0},"east":{"uv":[0,1,1,2],"texture":0},"south":{"uv":[4,1,6,2],"texture":0},"west":{"uv":[3,1,4,2],"texture":0},"up":{"uv":[3,1,1,0],"texture":0},"down":{"uv":[5,0,3,1],"texture":0}},"type":"cube","uuid":"d39728ca-9f3c-a5cf-9e76-f8748771e26e"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[6,5,-4],"to":[8,6,-3],"autouv":1,"color":7,"origin":[6,6,-8],"faces":{"north":{"uv":[1,1,3,2],"texture":0},"east":{"uv":[0,1,1,2],"texture":0},"south":{"uv":[4,1,6,2],"texture":0},"west":{"uv":[3,1,4,2],"texture":0},"up":{"uv":[3,1,1,0],"texture":0},"down":{"uv":[5,0,3,1],"texture":0}},"type":"cube","uuid":"2a484986-9c37-c58d-87a6-02f709028325"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-8,4,-4],"to":[-7,5,-3],"autouv":1,"color":7,"origin":[-8,5,-8],"faces":{"north":{"uv":[1,1,2,2],"texture":0},"east":{"uv":[0,1,1,2],"texture":0},"south":{"uv":[3,1,4,2],"texture":0},"west":{"uv":[2,1,3,2],"texture":0},"up":{"uv":[2,1,1,0],"texture":0},"down":{"uv":[3,0,2,1],"texture":0}},"type":"cube","uuid":"e50aa0cb-87c6-6264-b09d-7d29738b1bf0"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-8,3,-4],"to":[-7,5,-3],"autouv":1,"color":7,"origin":[-8,5,-8],"faces":{"north":{"uv":[1,1,2,3],"texture":0},"east":{"uv":[0,1,1,3],"texture":0},"south":{"uv":[3,1,4,3],"texture":0},"west":{"uv":[2,1,3,3],"texture":0},"up":{"uv":[2,1,1,0],"texture":0},"down":{"uv":[3,0,2,1],"texture":0}},"type":"cube","uuid":"bf28d279-9263-02fc-454b-d6d728e7af44"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-7,1,-4],"to":[-6,3,-3],"autouv":1,"color":7,"origin":[-7,3,-8],"faces":{"north":{"uv":[1,1,2,3],"texture":0},"east":{"uv":[0,1,1,3],"texture":0},"south":{"uv":[3,1,4,3],"texture":0},"west":{"uv":[2,1,3,3],"texture":0},"up":{"uv":[2,1,1,0],"texture":0},"down":{"uv":[3,0,2,1],"texture":0}},"type":"cube","uuid":"a65a5f2d-b0c5-7f79-7869-44f2db925838"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-6,0,-4],"to":[-5,1,-3],"autouv":1,"color":7,"origin":[-6,1,-8],"faces":{"north":{"uv":[1,1,2,2],"texture":0},"east":{"uv":[0,1,1,2],"texture":0},"south":{"uv":[3,1,4,2],"texture":0},"west":{"uv":[2,1,3,2],"texture":0},"up":{"uv":[2,1,1,0],"texture":0},"down":{"uv":[3,0,2,1],"texture":0}},"type":"cube","uuid":"d09dc331-cd75-1b2e-b4fc-3f10a767b267"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-5,-1,-4],"to":[-4,0,-3],"autouv":1,"color":7,"origin":[-5,0,-8],"faces":{"north":{"uv":[1,1,2,2],"texture":0},"east":{"uv":[0,1,1,2],"texture":0},"south":{"uv":[3,1,4,2],"texture":0},"west":{"uv":[2,1,3,2],"texture":0},"up":{"uv":[2,1,1,0],"texture":0},"down":{"uv":[3,0,2,1],"texture":0}},"type":"cube","uuid":"94bbb13f-6e57-6f72-0611-58d31645bf24"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-4,-2,-4],"to":[-2,-1,-3],"autouv":1,"color":7,"origin":[-4,-1,-8],"faces":{"north":{"uv":[1,1,3,2],"texture":0},"east":{"uv":[0,1,1,2],"texture":0},"south":{"uv":[4,1,6,2],"texture":0},"west":{"uv":[3,1,4,2],"texture":0},"up":{"uv":[3,1,1,0],"texture":0},"down":{"uv":[5,0,3,1],"texture":0}},"type":"cube","uuid":"4c973d88-5559-7554-f1fa-61084b5629db"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-2,-3,-4],"to":[0,-2,-3],"autouv":1,"color":7,"origin":[-2,-2,-8],"faces":{"north":{"uv":[1,1,3,2],"texture":0},"east":{"uv":[0,1,1,2],"texture":0},"south":{"uv":[4,1,6,2],"texture":0},"west":{"uv":[3,1,4,2],"texture":0},"up":{"uv":[3,1,1,0],"texture":0},"down":{"uv":[5,0,3,1],"texture":0}},"type":"cube","uuid":"cc7e340f-9128-6490-dfb9-65b5b723f577"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[7,21,-4],"to":[8,22,-3],"autouv":1,"color":7,"shade":false,"mirror_uv":true,"origin":[8,21,-8],"faces":{"north":{"uv":[2,1,1,2],"texture":0},"east":{"uv":[3,1,2,2],"texture":0},"south":{"uv":[4,1,3,2],"texture":0},"west":{"uv":[1,1,0,2],"texture":0},"up":{"uv":[1,1,2,0],"texture":0},"down":{"uv":[2,0,3,1],"texture":0}},"type":"cube","uuid":"309cfe3d-0c52-f967-3b07-72ab387ca070"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[7,21,-4],"to":[8,23,-3],"autouv":1,"color":7,"shade":false,"mirror_uv":true,"origin":[8,21,-8],"faces":{"north":{"uv":[2,1,1,3],"texture":0},"east":{"uv":[3,1,2,3],"texture":0},"south":{"uv":[4,1,3,3],"texture":0},"west":{"uv":[1,1,0,3],"texture":0},"up":{"uv":[1,1,2,0],"texture":0},"down":{"uv":[2,0,3,1],"texture":0}},"type":"cube","uuid":"2eabb0d9-120d-acf4-f124-f7378a432a6d"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[6,23,-4],"to":[7,25,-3],"autouv":1,"color":7,"shade":false,"mirror_uv":true,"origin":[7,23,-8],"faces":{"north":{"uv":[2,1,1,3],"texture":0},"east":{"uv":[3,1,2,3],"texture":0},"south":{"uv":[4,1,3,3],"texture":0},"west":{"uv":[1,1,0,3],"texture":0},"up":{"uv":[1,1,2,0],"texture":0},"down":{"uv":[2,0,3,1],"texture":0}},"type":"cube","uuid":"3cf9560b-a356-f381-0cb2-2751b0fb832a"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[5,25,-4],"to":[6,26,-3],"autouv":1,"color":7,"shade":false,"mirror_uv":true,"origin":[6,25,-8],"faces":{"north":{"uv":[2,1,1,2],"texture":0},"east":{"uv":[3,1,2,2],"texture":0},"south":{"uv":[4,1,3,2],"texture":0},"west":{"uv":[1,1,0,2],"texture":0},"up":{"uv":[1,1,2,0],"texture":0},"down":{"uv":[2,0,3,1],"texture":0}},"type":"cube","uuid":"cb0447a3-3646-218d-7c64-2ad8ddef4168"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[4,26,-4],"to":[5,27,-3],"autouv":1,"color":7,"shade":false,"mirror_uv":true,"origin":[5,26,-8],"faces":{"north":{"uv":[2,1,1,2],"texture":0},"east":{"uv":[3,1,2,2],"texture":0},"south":{"uv":[4,1,3,2],"texture":0},"west":{"uv":[1,1,0,2],"texture":0},"up":{"uv":[1,1,2,0],"texture":0},"down":{"uv":[2,0,3,1],"texture":0}},"type":"cube","uuid":"5bb34183-4ad6-c226-025e-51410765d5a4"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[2,27,-4],"to":[4,28,-3],"autouv":1,"color":7,"shade":false,"mirror_uv":true,"origin":[4,27,-8],"faces":{"north":{"uv":[3,1,1,2],"texture":0},"east":{"uv":[4,1,3,2],"texture":0},"south":{"uv":[6,1,4,2],"texture":0},"west":{"uv":[1,1,0,2],"texture":0},"up":{"uv":[1,1,3,0],"texture":0},"down":{"uv":[3,0,5,1],"texture":0}},"type":"cube","uuid":"b0b0b6ee-5f10-9b9d-8844-483e73b6a79c"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[0,28,-4],"to":[2,29,-3],"autouv":1,"color":7,"shade":false,"mirror_uv":true,"origin":[2,28,-8],"faces":{"north":{"uv":[3,1,1,2],"texture":0},"east":{"uv":[4,1,3,2],"texture":0},"south":{"uv":[6,1,4,2],"texture":0},"west":{"uv":[1,1,0,2],"texture":0},"up":{"uv":[1,1,3,0],"texture":0},"down":{"uv":[3,0,5,1],"texture":0}},"type":"cube","uuid":"dc9f34d2-0df7-d97c-1f8c-999889ae7770"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[0,13,-4],"to":[1,14,-3],"autouv":1,"color":7,"origin":[0,13,-8],"faces":{"north":{"uv":[1,1,2,2],"texture":0},"east":{"uv":[0,1,1,2],"texture":0},"south":{"uv":[3,1,4,2],"texture":0},"west":{"uv":[2,1,3,2],"texture":0},"up":{"uv":[2,1,1,0],"texture":0},"down":{"uv":[3,0,2,1],"texture":0}},"type":"cube","uuid":"119e89bd-9f1b-ebba-376f-7cc5ac7c95c7"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[1,14,-4],"to":[2,15,-3],"autouv":1,"color":0,"origin":[1,14,-8],"faces":{"north":{"uv":[1,1,2,2],"texture":0},"east":{"uv":[0,1,1,2],"texture":0},"south":{"uv":[3,1,4,2],"texture":0},"west":{"uv":[2,1,3,2],"texture":0},"up":{"uv":[2,1,1,0],"texture":0},"down":{"uv":[3,0,2,1],"texture":0}},"type":"cube","uuid":"cfb8d305-035e-a8ef-0105-296dffd0a7ac"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[2,15,-4],"to":[3,16,-3],"autouv":1,"color":4,"origin":[2,15,-8],"faces":{"north":{"uv":[1,1,2,2],"texture":0},"east":{"uv":[0,1,1,2],"texture":0},"south":{"uv":[3,1,4,2],"texture":0},"west":{"uv":[2,1,3,2],"texture":0},"up":{"uv":[2,1,1,0],"texture":0},"down":{"uv":[3,0,2,1],"texture":0}},"type":"cube","uuid":"0fbc3bbe-26d1-f656-8a24-0514a04fca4c"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[2,16,-4],"to":[3,17,-3],"autouv":1,"color":0,"origin":[2,16,-8],"faces":{"north":{"uv":[1,1,2,2],"texture":0},"east":{"uv":[0,1,1,2],"texture":0},"south":{"uv":[3,1,4,2],"texture":0},"west":{"uv":[2,1,3,2],"texture":0},"up":{"uv":[2,1,1,0],"texture":0},"down":{"uv":[3,0,2,1],"texture":0}},"type":"cube","uuid":"cca4934c-da83-dc01-bba5-cd78f4aa845e"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[3,15,-4],"to":[4,16,-3],"autouv":1,"color":0,"shade":false,"mirror_uv":true,"origin":[4,15,-8],"faces":{"north":{"uv":[2,1,1,2],"texture":0},"east":{"uv":[3,1,2,2],"texture":0},"south":{"uv":[4,1,3,2],"texture":0},"west":{"uv":[1,1,0,2],"texture":0},"up":{"uv":[1,1,2,0],"texture":0},"down":{"uv":[2,0,3,1],"texture":0}},"type":"cube","uuid":"fc024a24-4da7-0f66-c0bf-f95744d2f2cc"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[1,18,-4],"to":[2,19,-3],"autouv":1,"color":0,"origin":[1,18,-8],"faces":{"north":{"uv":[1,1,2,2],"texture":0},"east":{"uv":[0,1,1,2],"texture":0},"south":{"uv":[3,1,4,2],"texture":0},"west":{"uv":[2,1,3,2],"texture":0},"up":{"uv":[2,1,1,0],"texture":0},"down":{"uv":[3,0,2,1],"texture":0}},"type":"cube","uuid":"8dd5159d-7bca-8142-1c10-d97acbe31225"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[5,14,-4],"to":[6,15,-3],"autouv":1,"color":0,"shade":false,"mirror_uv":true,"origin":[6,14,-8],"faces":{"north":{"uv":[2,1,1,2],"texture":0},"east":{"uv":[3,1,2,2],"texture":0},"south":{"uv":[4,1,3,2],"texture":0},"west":{"uv":[1,1,0,2],"texture":0},"up":{"uv":[1,1,2,0],"texture":0},"down":{"uv":[2,0,3,1],"texture":0}},"type":"cube","uuid":"06e67a14-80e0-1236-dd6b-c41c177fd718"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[0,19,-4],"to":[1,20,-3],"autouv":1,"color":0,"origin":[0,19,-8],"faces":{"north":{"uv":[1,1,2,2],"texture":0},"east":{"uv":[0,1,1,2],"texture":0},"south":{"uv":[3,1,4,2],"texture":0},"west":{"uv":[2,1,3,2],"texture":0},"up":{"uv":[2,1,1,0],"texture":0},"down":{"uv":[3,0,2,1],"texture":0}},"type":"cube","uuid":"f5f535de-e37d-91a3-5db5-72eb72376267"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[6,13,-4],"to":[7,14,-3],"autouv":1,"color":0,"shade":false,"mirror_uv":true,"origin":[7,13,-8],"faces":{"north":{"uv":[2,1,1,2],"texture":0},"east":{"uv":[3,1,2,2],"texture":0},"south":{"uv":[4,1,3,2],"texture":0},"west":{"uv":[1,1,0,2],"texture":0},"up":{"uv":[1,1,2,0],"texture":0},"down":{"uv":[2,0,3,1],"texture":0}},"type":"cube","uuid":"e801b8bf-33c0-c422-6a02-f45241e5f3bf"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[1,20,-4],"to":[5,21,-3],"autouv":1,"color":0,"origin":[1,20,-8],"faces":{"north":{"uv":[1,1,5,2],"texture":0},"east":{"uv":[0,1,1,2],"texture":0},"south":{"uv":[6,1,10,2],"texture":0},"west":{"uv":[5,1,6,2],"texture":0},"up":{"uv":[5,1,1,0],"texture":0},"down":{"uv":[9,0,5,1],"texture":0}},"type":"cube","uuid":"9e8a0461-b57b-05f7-d4db-1fab14de88d6"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[7,14,-4],"to":[8,18,-3],"autouv":1,"color":0,"shade":false,"mirror_uv":true,"origin":[8,14,-8],"faces":{"north":{"uv":[2,1,1,5],"texture":0},"east":{"uv":[3,1,2,5],"texture":0},"south":{"uv":[4,1,3,5],"texture":0},"west":{"uv":[1,1,0,5],"texture":0},"up":{"uv":[1,1,2,0],"texture":0},"down":{"uv":[2,0,3,1],"texture":0}},"type":"cube","uuid":"5650dde6-ec25-028f-ca0d-76545ecbe3d7"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[2,17,-4],"to":[3,18,-3],"autouv":1,"color":0,"origin":[2,17,-8],"faces":{"north":{"uv":[1,1,2,2],"texture":0},"east":{"uv":[0,1,1,2],"texture":0},"south":{"uv":[3,1,4,2],"texture":0},"west":{"uv":[2,1,3,2],"texture":0},"up":{"uv":[2,1,1,0],"texture":0},"down":{"uv":[3,0,2,1],"texture":0}},"type":"cube","uuid":"5ff7976c-6342-b750-6055-d35bbf900a07"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[4,15,-4],"to":[5,16,-3],"autouv":1,"color":0,"shade":false,"mirror_uv":true,"origin":[5,15,-8],"faces":{"north":{"uv":[2,1,1,2],"texture":0},"east":{"uv":[3,1,2,2],"texture":0},"south":{"uv":[4,1,3,2],"texture":0},"west":{"uv":[1,1,0,2],"texture":0},"up":{"uv":[1,1,2,0],"texture":0},"down":{"uv":[2,0,3,1],"texture":0}},"type":"cube","uuid":"42c3fcb8-d102-d0c9-ee8e-828e3d4abafc"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-1,13,-4],"to":[0,14,-3],"autouv":1,"color":7,"shade":false,"mirror_uv":true,"origin":[0,13,-8],"faces":{"north":{"uv":[2,1,1,2],"texture":0},"east":{"uv":[3,1,2,2],"texture":0},"south":{"uv":[4,1,3,2],"texture":0},"west":{"uv":[1,1,0,2],"texture":0},"up":{"uv":[1,1,2,0],"texture":0},"down":{"uv":[2,0,3,1],"texture":0}},"type":"cube","uuid":"e9ff765a-b2cf-410e-409f-04f979879ef1"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-2,14,-4],"to":[-1,15,-3],"autouv":1,"color":0,"shade":false,"mirror_uv":true,"origin":[-1,14,-8],"faces":{"north":{"uv":[2,1,1,2],"texture":0},"east":{"uv":[3,1,2,2],"texture":0},"south":{"uv":[4,1,3,2],"texture":0},"west":{"uv":[1,1,0,2],"texture":0},"up":{"uv":[1,1,2,0],"texture":0},"down":{"uv":[2,0,3,1],"texture":0}},"type":"cube","uuid":"bb867a57-8a0c-2aec-4b71-70b79bd75250"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-3,15,-4],"to":[-2,16,-3],"autouv":1,"color":4,"shade":false,"mirror_uv":true,"origin":[-2,15,-8],"faces":{"north":{"uv":[2,1,1,2],"texture":0},"east":{"uv":[3,1,2,2],"texture":0},"south":{"uv":[4,1,3,2],"texture":0},"west":{"uv":[1,1,0,2],"texture":0},"up":{"uv":[1,1,2,0],"texture":0},"down":{"uv":[2,0,3,1],"texture":0}},"type":"cube","uuid":"24eecaf5-03d2-714e-2b58-524c9311194d"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-3,16,-4],"to":[-2,17,-3],"autouv":1,"color":0,"shade":false,"mirror_uv":true,"origin":[-2,16,-8],"faces":{"north":{"uv":[2,1,1,2],"texture":0},"east":{"uv":[3,1,2,2],"texture":0},"south":{"uv":[4,1,3,2],"texture":0},"west":{"uv":[1,1,0,2],"texture":0},"up":{"uv":[1,1,2,0],"texture":0},"down":{"uv":[2,0,3,1],"texture":0}},"type":"cube","uuid":"6694888c-e86e-028f-9e29-6f8d9d1475a4"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-4,15,-4],"to":[-3,16,-3],"autouv":1,"color":0,"origin":[-4,15,-8],"faces":{"north":{"uv":[1,1,2,2],"texture":0},"east":{"uv":[0,1,1,2],"texture":0},"south":{"uv":[3,1,4,2],"texture":0},"west":{"uv":[2,1,3,2],"texture":0},"up":{"uv":[2,1,1,0],"texture":0},"down":{"uv":[3,0,2,1],"texture":0}},"type":"cube","uuid":"987d90a2-3738-f28a-15fb-3fe7135bfe79"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-2,18,-4],"to":[-1,19,-3],"autouv":1,"color":0,"shade":false,"mirror_uv":true,"origin":[-1,18,-8],"faces":{"north":{"uv":[2,1,1,2],"texture":0},"east":{"uv":[3,1,2,2],"texture":0},"south":{"uv":[4,1,3,2],"texture":0},"west":{"uv":[1,1,0,2],"texture":0},"up":{"uv":[1,1,2,0],"texture":0},"down":{"uv":[2,0,3,1],"texture":0}},"type":"cube","uuid":"d4ced9f9-761f-4018-b0bb-d257ef4d0185"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-6,14,-4],"to":[-5,15,-3],"autouv":1,"color":0,"origin":[-6,14,-8],"faces":{"north":{"uv":[1,1,2,2],"texture":0},"east":{"uv":[0,1,1,2],"texture":0},"south":{"uv":[3,1,4,2],"texture":0},"west":{"uv":[2,1,3,2],"texture":0},"up":{"uv":[2,1,1,0],"texture":0},"down":{"uv":[3,0,2,1],"texture":0}},"type":"cube","uuid":"d464655c-0125-8c8f-b2da-a09f0dd2ac8c"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-1,19,-4],"to":[0,20,-3],"autouv":1,"color":0,"shade":false,"mirror_uv":true,"origin":[0,19,-8],"faces":{"north":{"uv":[2,1,1,2],"texture":0},"east":{"uv":[3,1,2,2],"texture":0},"south":{"uv":[4,1,3,2],"texture":0},"west":{"uv":[1,1,0,2],"texture":0},"up":{"uv":[1,1,2,0],"texture":0},"down":{"uv":[2,0,3,1],"texture":0}},"type":"cube","uuid":"5fa00f27-7fa9-2f2f-c611-2c09f2ae4014"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-7,13,-4],"to":[-6,14,-3],"autouv":1,"color":0,"origin":[-7,13,-8],"faces":{"north":{"uv":[1,1,2,2],"texture":0},"east":{"uv":[0,1,1,2],"texture":0},"south":{"uv":[3,1,4,2],"texture":0},"west":{"uv":[2,1,3,2],"texture":0},"up":{"uv":[2,1,1,0],"texture":0},"down":{"uv":[3,0,2,1],"texture":0}},"type":"cube","uuid":"6b78b322-1f3d-f37a-b26e-cf0fe84e8535"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-5,20,-4],"to":[-1,21,-3],"autouv":1,"color":0,"shade":false,"mirror_uv":true,"origin":[-1,20,-8],"faces":{"north":{"uv":[5,1,1,2],"texture":0},"east":{"uv":[6,1,5,2],"texture":0},"south":{"uv":[10,1,6,2],"texture":0},"west":{"uv":[1,1,0,2],"texture":0},"up":{"uv":[1,1,5,0],"texture":0},"down":{"uv":[5,0,9,1],"texture":0}},"type":"cube","uuid":"b2b021a2-1d1d-4167-59dd-637411deb719"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-8,14,-4],"to":[-7,18,-3],"autouv":1,"color":0,"origin":[-8,14,-8],"faces":{"north":{"uv":[1,1,2,5],"texture":0},"east":{"uv":[0,1,1,5],"texture":0},"south":{"uv":[3,1,4,5],"texture":0},"west":{"uv":[2,1,3,5],"texture":0},"up":{"uv":[2,1,1,0],"texture":0},"down":{"uv":[3,0,2,1],"texture":0}},"type":"cube","uuid":"bf043c01-082d-c466-1743-ecd1cd62ff77"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-3,17,-4],"to":[-2,18,-3],"autouv":1,"color":0,"shade":false,"mirror_uv":true,"origin":[-2,17,-8],"faces":{"north":{"uv":[2,1,1,2],"texture":0},"east":{"uv":[3,1,2,2],"texture":0},"south":{"uv":[4,1,3,2],"texture":0},"west":{"uv":[1,1,0,2],"texture":0},"up":{"uv":[1,1,2,0],"texture":0},"down":{"uv":[2,0,3,1],"texture":0}},"type":"cube","uuid":"476e0aff-f042-5c05-ee9f-6065906e5c1d"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-5,15,-4],"to":[-4,16,-3],"autouv":1,"color":0,"origin":[-5,15,-8],"faces":{"north":{"uv":[1,1,2,2],"texture":0},"east":{"uv":[0,1,1,2],"texture":0},"south":{"uv":[3,1,4,2],"texture":0},"west":{"uv":[2,1,3,2],"texture":0},"up":{"uv":[2,1,1,0],"texture":0},"down":{"uv":[3,0,2,1],"texture":0}},"type":"cube","uuid":"0fcfc939-029c-be42-7b71-89d39fe1b2cf"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-1,12,-4],"to":[0,13,-3],"autouv":1,"color":7,"shade":false,"mirror_uv":true,"origin":[0,13,-8],"faces":{"north":{"uv":[2,1,1,2],"texture":0},"east":{"uv":[3,1,2,2],"texture":0},"south":{"uv":[4,1,3,2],"texture":0},"west":{"uv":[1,1,0,2],"texture":0},"up":{"uv":[1,1,2,0],"texture":0},"down":{"uv":[2,0,3,1],"texture":0}},"type":"cube","uuid":"1c9845d8-f307-ebe6-1226-1a60343851ad"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-2,11,-4],"to":[-1,12,-3],"autouv":1,"color":0,"shade":false,"mirror_uv":true,"origin":[-1,12,-8],"faces":{"north":{"uv":[2,1,1,2],"texture":0},"east":{"uv":[3,1,2,2],"texture":0},"south":{"uv":[4,1,3,2],"texture":0},"west":{"uv":[1,1,0,2],"texture":0},"up":{"uv":[1,1,2,0],"texture":0},"down":{"uv":[2,0,3,1],"texture":0}},"type":"cube","uuid":"3dac1c72-41e6-9846-d204-aba9f2a5c456"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-3,10,-4],"to":[-2,11,-3],"autouv":1,"color":4,"shade":false,"mirror_uv":true,"origin":[-2,11,-8],"faces":{"north":{"uv":[2,1,1,2],"texture":0},"east":{"uv":[3,1,2,2],"texture":0},"south":{"uv":[4,1,3,2],"texture":0},"west":{"uv":[1,1,0,2],"texture":0},"up":{"uv":[1,1,2,0],"texture":0},"down":{"uv":[2,0,3,1],"texture":0}},"type":"cube","uuid":"f6f1d43f-ba0d-22a3-a1df-58451c6ea8d8"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-3,9,-4],"to":[-2,10,-3],"autouv":1,"color":0,"shade":false,"mirror_uv":true,"origin":[-2,10,-8],"faces":{"north":{"uv":[2,1,1,2],"texture":0},"east":{"uv":[3,1,2,2],"texture":0},"south":{"uv":[4,1,3,2],"texture":0},"west":{"uv":[1,1,0,2],"texture":0},"up":{"uv":[1,1,2,0],"texture":0},"down":{"uv":[2,0,3,1],"texture":0}},"type":"cube","uuid":"7822744b-ca84-d988-ba11-3a431116e319"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-4,10,-4],"to":[-3,11,-3],"autouv":1,"color":0,"origin":[-4,11,-8],"faces":{"north":{"uv":[1,1,2,2],"texture":0},"east":{"uv":[0,1,1,2],"texture":0},"south":{"uv":[3,1,4,2],"texture":0},"west":{"uv":[2,1,3,2],"texture":0},"up":{"uv":[2,1,1,0],"texture":0},"down":{"uv":[3,0,2,1],"texture":0}},"type":"cube","uuid":"49475140-9711-339d-fc8f-48fd62a27e93"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-2,7,-4],"to":[-1,8,-3],"autouv":1,"color":0,"shade":false,"mirror_uv":true,"origin":[-1,8,-8],"faces":{"north":{"uv":[2,1,1,2],"texture":0},"east":{"uv":[3,1,2,2],"texture":0},"south":{"uv":[4,1,3,2],"texture":0},"west":{"uv":[1,1,0,2],"texture":0},"up":{"uv":[1,1,2,0],"texture":0},"down":{"uv":[2,0,3,1],"texture":0}},"type":"cube","uuid":"eb1a83a1-8e83-dd14-3f0e-fc4602713065"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-6,11,-4],"to":[-5,12,-3],"autouv":1,"color":0,"origin":[-6,12,-8],"faces":{"north":{"uv":[1,1,2,2],"texture":0},"east":{"uv":[0,1,1,2],"texture":0},"south":{"uv":[3,1,4,2],"texture":0},"west":{"uv":[2,1,3,2],"texture":0},"up":{"uv":[2,1,1,0],"texture":0},"down":{"uv":[3,0,2,1],"texture":0}},"type":"cube","uuid":"1bcd411f-0d22-ac65-42ab-0743860df18f"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-1,6,-4],"to":[0,7,-3],"autouv":1,"color":0,"shade":false,"mirror_uv":true,"origin":[0,7,-8],"faces":{"north":{"uv":[2,1,1,2],"texture":0},"east":{"uv":[3,1,2,2],"texture":0},"south":{"uv":[4,1,3,2],"texture":0},"west":{"uv":[1,1,0,2],"texture":0},"up":{"uv":[1,1,2,0],"texture":0},"down":{"uv":[2,0,3,1],"texture":0}},"type":"cube","uuid":"d58943ac-9aa8-26e7-ab97-a7b21c2601ef"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-7,12,-4],"to":[-6,13,-3],"autouv":1,"color":0,"origin":[-7,13,-8],"faces":{"north":{"uv":[1,1,2,2],"texture":0},"east":{"uv":[0,1,1,2],"texture":0},"south":{"uv":[3,1,4,2],"texture":0},"west":{"uv":[2,1,3,2],"texture":0},"up":{"uv":[2,1,1,0],"texture":0},"down":{"uv":[3,0,2,1],"texture":0}},"type":"cube","uuid":"cf9e876c-64d0-ecb7-6825-df7ef51612ee"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-5,5,-4],"to":[-1,6,-3],"autouv":1,"color":0,"shade":false,"mirror_uv":true,"origin":[-1,6,-8],"faces":{"north":{"uv":[5,1,1,2],"texture":0},"east":{"uv":[6,1,5,2],"texture":0},"south":{"uv":[10,1,6,2],"texture":0},"west":{"uv":[1,1,0,2],"texture":0},"up":{"uv":[1,1,5,0],"texture":0},"down":{"uv":[5,0,9,1],"texture":0}},"type":"cube","uuid":"22b4f669-2d4a-cb51-6088-4f7caf4041db"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-8,8,-4],"to":[-7,12,-3],"autouv":1,"color":0,"origin":[-8,12,-8],"faces":{"north":{"uv":[1,1,2,5],"texture":0},"east":{"uv":[0,1,1,5],"texture":0},"south":{"uv":[3,1,4,5],"texture":0},"west":{"uv":[2,1,3,5],"texture":0},"up":{"uv":[2,1,1,0],"texture":0},"down":{"uv":[3,0,2,1],"texture":0}},"type":"cube","uuid":"8ca40305-30b3-35d8-46ad-a30703876314"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-3,8,-4],"to":[-2,9,-3],"autouv":1,"color":0,"shade":false,"mirror_uv":true,"origin":[-2,9,-8],"faces":{"north":{"uv":[2,1,1,2],"texture":0},"east":{"uv":[3,1,2,2],"texture":0},"south":{"uv":[4,1,3,2],"texture":0},"west":{"uv":[1,1,0,2],"texture":0},"up":{"uv":[1,1,2,0],"texture":0},"down":{"uv":[2,0,3,1],"texture":0}},"type":"cube","uuid":"ac8b1784-01db-0540-06da-c646023b919a"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-5,10,-4],"to":[-4,11,-3],"autouv":1,"color":0,"origin":[-5,11,-8],"faces":{"north":{"uv":[1,1,2,2],"texture":0},"east":{"uv":[0,1,1,2],"texture":0},"south":{"uv":[3,1,4,2],"texture":0},"west":{"uv":[2,1,3,2],"texture":0},"up":{"uv":[2,1,1,0],"texture":0},"down":{"uv":[3,0,2,1],"texture":0}},"type":"cube","uuid":"b61b2efa-7a79-7f2f-f1c8-2f496d6be5c1"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[0,12,-4],"to":[1,13,-3],"autouv":1,"color":7,"origin":[0,13,-8],"faces":{"north":{"uv":[1,1,2,2],"texture":0},"east":{"uv":[0,1,1,2],"texture":0},"south":{"uv":[3,1,4,2],"texture":0},"west":{"uv":[2,1,3,2],"texture":0},"up":{"uv":[2,1,1,0],"texture":0},"down":{"uv":[3,0,2,1],"texture":0}},"type":"cube","uuid":"b1c8682f-38a7-b5b7-8dd9-21a904e0822b"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[1,11,-4],"to":[2,12,-3],"autouv":1,"color":0,"origin":[1,12,-8],"faces":{"north":{"uv":[1,1,2,2],"texture":0},"east":{"uv":[0,1,1,2],"texture":0},"south":{"uv":[3,1,4,2],"texture":0},"west":{"uv":[2,1,3,2],"texture":0},"up":{"uv":[2,1,1,0],"texture":0},"down":{"uv":[3,0,2,1],"texture":0}},"type":"cube","uuid":"b4b269a0-18f9-f893-f1cb-e001485a7e3a"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[2,10,-4],"to":[3,11,-3],"autouv":1,"color":4,"origin":[2,11,-8],"faces":{"north":{"uv":[1,1,2,2],"texture":0},"east":{"uv":[0,1,1,2],"texture":0},"south":{"uv":[3,1,4,2],"texture":0},"west":{"uv":[2,1,3,2],"texture":0},"up":{"uv":[2,1,1,0],"texture":0},"down":{"uv":[3,0,2,1],"texture":0}},"type":"cube","uuid":"94d3e05e-8115-7070-4b95-44578a946efe"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[2,9,-4],"to":[3,10,-3],"autouv":1,"color":0,"origin":[2,10,-8],"faces":{"north":{"uv":[1,1,2,2],"texture":0},"east":{"uv":[0,1,1,2],"texture":0},"south":{"uv":[3,1,4,2],"texture":0},"west":{"uv":[2,1,3,2],"texture":0},"up":{"uv":[2,1,1,0],"texture":0},"down":{"uv":[3,0,2,1],"texture":0}},"type":"cube","uuid":"f2907a1d-8bd1-b760-174d-d450f6b6a19e"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[3,10,-4],"to":[4,11,-3],"autouv":1,"color":0,"shade":false,"mirror_uv":true,"origin":[4,11,-8],"faces":{"north":{"uv":[2,1,1,2],"texture":0},"east":{"uv":[3,1,2,2],"texture":0},"south":{"uv":[4,1,3,2],"texture":0},"west":{"uv":[1,1,0,2],"texture":0},"up":{"uv":[1,1,2,0],"texture":0},"down":{"uv":[2,0,3,1],"texture":0}},"type":"cube","uuid":"e0c166ca-b20b-0732-f611-f5c7ddd6a62d"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[1,7,-4],"to":[2,8,-3],"autouv":1,"color":0,"origin":[1,8,-8],"faces":{"north":{"uv":[1,1,2,2],"texture":0},"east":{"uv":[0,1,1,2],"texture":0},"south":{"uv":[3,1,4,2],"texture":0},"west":{"uv":[2,1,3,2],"texture":0},"up":{"uv":[2,1,1,0],"texture":0},"down":{"uv":[3,0,2,1],"texture":0}},"type":"cube","uuid":"e518aec2-d95c-fdc3-baba-f6a5e93e3c11"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[5,11,-4],"to":[6,12,-3],"autouv":1,"color":0,"shade":false,"mirror_uv":true,"origin":[6,12,-8],"faces":{"north":{"uv":[2,1,1,2],"texture":0},"east":{"uv":[3,1,2,2],"texture":0},"south":{"uv":[4,1,3,2],"texture":0},"west":{"uv":[1,1,0,2],"texture":0},"up":{"uv":[1,1,2,0],"texture":0},"down":{"uv":[2,0,3,1],"texture":0}},"type":"cube","uuid":"cf3b8857-9ca9-0d07-7283-c1fe7645b232"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[0,6,-4],"to":[1,7,-3],"autouv":1,"color":0,"origin":[0,7,-8],"faces":{"north":{"uv":[1,1,2,2],"texture":0},"east":{"uv":[0,1,1,2],"texture":0},"south":{"uv":[3,1,4,2],"texture":0},"west":{"uv":[2,1,3,2],"texture":0},"up":{"uv":[2,1,1,0],"texture":0},"down":{"uv":[3,0,2,1],"texture":0}},"type":"cube","uuid":"a646b354-a280-b832-105b-0fb396a70f6d"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[6,12,-4],"to":[7,13,-3],"autouv":1,"color":0,"shade":false,"mirror_uv":true,"origin":[7,13,-8],"faces":{"north":{"uv":[2,1,1,2],"texture":0},"east":{"uv":[3,1,2,2],"texture":0},"south":{"uv":[4,1,3,2],"texture":0},"west":{"uv":[1,1,0,2],"texture":0},"up":{"uv":[1,1,2,0],"texture":0},"down":{"uv":[2,0,3,1],"texture":0}},"type":"cube","uuid":"1ee9226a-2b37-acbf-95a4-aec792ad7b7d"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[1,5,-4],"to":[5,6,-3],"autouv":1,"color":0,"origin":[1,6,-8],"faces":{"north":{"uv":[1,1,5,2],"texture":0},"east":{"uv":[0,1,1,2],"texture":0},"south":{"uv":[6,1,10,2],"texture":0},"west":{"uv":[5,1,6,2],"texture":0},"up":{"uv":[5,1,1,0],"texture":0},"down":{"uv":[9,0,5,1],"texture":0}},"type":"cube","uuid":"a254b0fd-8e01-2473-c417-03a892c65597"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[7,8,-4],"to":[8,12,-3],"autouv":1,"color":0,"shade":false,"mirror_uv":true,"origin":[8,12,-8],"faces":{"north":{"uv":[2,1,1,5],"texture":0},"east":{"uv":[3,1,2,5],"texture":0},"south":{"uv":[4,1,3,5],"texture":0},"west":{"uv":[1,1,0,5],"texture":0},"up":{"uv":[1,1,2,0],"texture":0},"down":{"uv":[2,0,3,1],"texture":0}},"type":"cube","uuid":"3352ce97-ad57-4079-4707-6aa38cd29eb6"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[2,8,-4],"to":[3,9,-3],"autouv":1,"color":0,"origin":[2,9,-8],"faces":{"north":{"uv":[1,1,2,2],"texture":0},"east":{"uv":[0,1,1,2],"texture":0},"south":{"uv":[3,1,4,2],"texture":0},"west":{"uv":[2,1,3,2],"texture":0},"up":{"uv":[2,1,1,0],"texture":0},"down":{"uv":[3,0,2,1],"texture":0}},"type":"cube","uuid":"d6329cae-92ef-cb8a-3fb8-f2831cd05b3d"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[4,10,-4],"to":[5,11,-3],"autouv":1,"color":0,"shade":false,"mirror_uv":true,"origin":[5,11,-8],"faces":{"north":{"uv":[2,1,1,2],"texture":0},"east":{"uv":[3,1,2,2],"texture":0},"south":{"uv":[4,1,3,2],"texture":0},"west":{"uv":[1,1,0,2],"texture":0},"up":{"uv":[1,1,2,0],"texture":0},"down":{"uv":[2,0,3,1],"texture":0}},"type":"cube","uuid":"2e0dc397-5712-897d-55c3-7aa0bad8af86"}],"outliner":[{"name":"root","origin":[0,5,-8],"rotation":[90.00000000000009,0,0],"color":0,"uuid":"e7bc9711-ee27-ec64-e8a3-3c9f246ee395","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"limbSet1","origin":[0,13,-8],"color":0,"uuid":"31ba9532-b961-ebe9-862a-f17ef45382be","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"fgLimb1","origin":[0,5,-8],"color":0,"uuid":"5a6cc670-0564-0bc4-5b9a-e31157e8a05a","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["85a641db-17a4-383e-39c1-409fbecfefd4","99e2f49f-6a7a-ec3d-a01a-23a619f44e85","2304b223-aaab-4bc5-1dac-e1b982237cb5","0d3520a0-f00c-69a4-0493-c66c2c3126c3","b488dc59-80e3-76df-a686-cf2e8e59d2b3","8bfc08cb-a3d1-6be4-698b-f4e667f49e6f","3ef41e58-ac1f-639d-ff9c-c69458e25d4c"]},{"name":"fgLimb2","origin":[0,21,-8],"color":0,"uuid":"04654570-dc56-eb6a-57f8-f5a58d54f78c","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["2a5b9c2a-73e8-13b3-9b13-a9e169e5332f","ae431105-6501-b0f7-3ee7-988d970cbb51","14fc97bb-940d-a61f-6dbe-4bed4c12f9af","11bb455b-01d7-ebd7-ee63-e5e064548511","a54cd32d-d3cf-e3bc-a56e-e80214ef69bf","1d9a3f26-8c11-99ff-31ef-da3ca716d0d9","a992a420-e3be-7122-7a77-f62e26b806c6"]},{"name":"fgLimb3","origin":[8,13,-8],"rotation":[0,0,-90],"color":0,"uuid":"c946d4c2-ecaa-81c4-d8c7-af5c172799f4","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["e0291fad-6a0b-e87a-aeb2-0918d7679d10","83ee86f9-d988-fd14-1ff9-b3e9701d744e","00fb8a51-e3bd-479d-75ca-eb83610e2639","7fc730a0-f5ec-73a9-96e4-0cbfa7552f07","65ef588e-3a49-ea7d-0472-0ad44adbbffd","9ea5455d-ebf0-00c0-2c16-7c5489344b6d","a0a2fbe6-744c-10d5-6124-ad11c17d4629"]},{"name":"fgLimb4","origin":[-8,13,-8],"rotation":[0,0,-90],"color":0,"uuid":"a1fbc08f-dab4-0087-e3a3-fb84d5d5768e","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["58b62290-713a-6c98-029c-c3653f5003b3","3703c529-a748-56cd-9145-20741adeb074","5e00f405-ba18-63e8-8708-1bfe2ec2fe87","cdb83e2b-a21b-fc77-a182-780ef8155d78","5a1facd1-ef6b-bb95-0d87-65761c476453","c23de4b7-e427-7ba9-05fc-6cf6fcf560f0","4aba2443-8dac-e14b-b8a2-5251d21d790d"]}]},{"name":"limbSet2","origin":[0,13,-8],"color":0,"uuid":"776e8056-368b-b8e1-d114-95755109980b","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"fgLimb5","origin":[0,5,-8],"color":0,"uuid":"82110556-ab8a-ba31-b606-8a357ee8ead6","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["4575c914-e171-8f30-da1a-ad9bd2ebfd74","a51fdba5-5f1d-bf3e-b67b-0624ef7b1498","ab9c1439-e22c-9174-a0cd-76dad6e5ac2b","2a3f11e3-a21a-3101-01d4-010a6cd072f5","5037d633-46e5-0618-c57c-74792f71af86","ce71dd1b-c266-10b8-d566-62df87c800d6","421bb8b2-35f0-23d0-7f8b-0fabe1c31aa6"]},{"name":"fgLimb6","origin":[0,21,-8],"color":0,"uuid":"d5bf9274-5469-ced9-ca61-84f78e5a8bcf","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["1ef34843-42c1-427e-a234-e90e7ab624fa","f04f6192-b49e-611c-455d-6bbd43deb1f8","8e4522e2-4a6c-d006-be14-7227e380f962","2b3d72c0-b096-77d5-de29-70511b2bb9d0","6c04a87d-f951-67dc-e52c-041200ef40ff","d39728ca-9f3c-a5cf-9e76-f8748771e26e","2a484986-9c37-c58d-87a6-02f709028325"]},{"name":"fgLimb7","origin":[-8,13,-8],"rotation":[0,0,90],"color":0,"uuid":"298a1a70-c6b1-e91b-6fa2-87ebbe04191b","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["e50aa0cb-87c6-6264-b09d-7d29738b1bf0","bf28d279-9263-02fc-454b-d6d728e7af44","a65a5f2d-b0c5-7f79-7869-44f2db925838","d09dc331-cd75-1b2e-b4fc-3f10a767b267","94bbb13f-6e57-6f72-0611-58d31645bf24","4c973d88-5559-7554-f1fa-61084b5629db","cc7e340f-9128-6490-dfb9-65b5b723f577"]},{"name":"fgLimb8","origin":[8,13,-8],"rotation":[0,0,90],"color":0,"uuid":"adccbeb7-09cf-5986-8402-9885c5a0888f","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["309cfe3d-0c52-f967-3b07-72ab387ca070","2eabb0d9-120d-acf4-f124-f7378a432a6d","3cf9560b-a356-f381-0cb2-2751b0fb832a","cb0447a3-3646-218d-7c64-2ad8ddef4168","5bb34183-4ad6-c226-025e-51410765d5a4","b0b0b6ee-5f10-9b9d-8844-483e73b6a79c","dc9f34d2-0df7-d97c-1f8c-999889ae7770"]}]},{"name":"limbSet3","origin":[0,13,-8],"color":0,"uuid":"23292523-2f2d-b8e6-04ec-144ccf24964b","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"bgLimb1","origin":[0,13,-8],"color":0,"uuid":"664e0a0e-dc84-ff0e-4744-60ba54682070","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["7fdfd539-4135-81ff-439b-065559bba249","12bbb76d-6062-d603-5041-e6d728ecbdb3","fdd1e7ea-3887-d0fd-3c12-e021332fa392","99b351cf-13ae-57c2-78a7-350eb2a01a94","8040446f-dee9-cf35-842d-18c4887618d0","4650c229-52d4-b0d0-6b85-76026f35df90","6d87e198-1c38-4375-580c-7549cbee0504","7db803b7-834f-eeb8-97fc-f7e87efd8dfb","a9f47379-250b-b4fa-c00e-4f4126b9c61d","515a9268-c862-2c11-cf4a-d70d9702412e","decc9b57-7b2d-aac4-0e2e-4e23490fcea3","5f765e45-461f-0b2c-f72f-5df2e57bf6dd","05431365-d961-a8df-a5e1-91969af779f7"]},{"name":"bgLimb2","origin":[0,13,-8],"color":0,"uuid":"75f0f52a-cc83-9dac-04fe-9aad207e660d","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["4870ad97-e432-66f4-b5d5-0d121a1b6342","dc4d4933-1c85-3598-e251-db84b5b31a22","02c0aaa5-cdb1-83f6-29c9-8c309e951ed4","e53372a8-55ae-f510-76e2-7aea43f51c80","1ada3e66-0f09-aabd-9c89-ba65ee280b0b","1252bad6-3db7-eb9a-d2d4-28d314bcf6b7","4fecc180-c1f5-81b1-deed-2aa0a51f4bf0","56de0901-0ab4-0e30-95cd-d025a0dfb2c3","64c74fd9-9d18-5ed8-ce9c-a81478ed9280","ce2885f0-e154-9fd2-06e1-884243f1c0c4","4a0f386e-b013-6a84-d1bf-a6c1c4dec4c7","af599bc6-fb6c-a51d-4904-929581d639f0","cc0030be-77a7-86a8-31f0-630606d9756d"]},{"name":"bgLimb3","origin":[0,13,-8],"color":0,"uuid":"ab5ec93a-a156-5369-aa81-2c23d3801192","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["f6e9f333-7e95-8342-91ac-841bf1aafa79","7d2c88e8-e901-c76b-aef1-539792e5e9cb","c80cc155-d6eb-60d0-2646-eb97eb5437ba","9a69201d-1631-5b03-e714-08adfad7762d","b74f62d2-017c-e485-11ae-f6ff4cc5b55a","1a7bc1ce-d12e-ee6e-3cf8-b73dc86ed316","77063817-e2b8-8fd4-35ea-dc53a5ddea15","7f4827ef-da1a-0fb1-bfb7-00d6e262b1c0","5afae85d-5aed-52df-86ae-188ef2cf2553","1e81cced-a38b-20df-fc16-baa89da4425e","c7cf075a-385b-3465-1349-3132ba43da88","7d136a6e-e5bb-a1f9-b717-cbac33836936","b437a96c-04ef-e8ac-f64e-bebf080aec2c"]},{"name":"bgLimb4","origin":[0,13,-8],"color":0,"uuid":"312f1691-475b-ec9e-3b95-6e58465e4f8a","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["02a29876-ae9b-65ae-0015-987c17d1aa00","0a5330b6-d3a4-c84c-4727-414d908bf8db","c7775d2f-a6d4-e86c-1e27-bd9b01de327d","07c5f87e-810c-26e8-7e38-0acb5a998e5e","4938fd1e-31bd-031d-6cf7-adb0458f35b4","90d0b3ce-ec86-2ecb-c1a8-8e8d612d906e","26d1e6d0-ab92-01ce-7794-65eb30329015","76488d7e-39a8-ffa6-9e64-6443b3c8f552","1d24c549-b1d0-a5ab-283c-00274bacf6a1","de184cb7-1838-0955-346c-c1241512f25d","7ad7f028-6fa4-c31b-4baa-75a9abb5467b","62162bfb-d7e8-cab2-4d7e-04edb9c0325a","39d34cb7-7ece-4a08-bc17-42890120ba75"]}]},{"name":"limbSet4","origin":[0,13,-8],"color":0,"uuid":"4373a68c-35f0-6780-04b1-691146eaf34c","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"bgLimb5","origin":[0,13,-8],"color":0,"uuid":"deabdf17-54d8-de10-63e6-67a7b9308c3f","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["119e89bd-9f1b-ebba-376f-7cc5ac7c95c7","cfb8d305-035e-a8ef-0105-296dffd0a7ac","0fbc3bbe-26d1-f656-8a24-0514a04fca4c","cca4934c-da83-dc01-bba5-cd78f4aa845e","fc024a24-4da7-0f66-c0bf-f95744d2f2cc","8dd5159d-7bca-8142-1c10-d97acbe31225","06e67a14-80e0-1236-dd6b-c41c177fd718","f5f535de-e37d-91a3-5db5-72eb72376267","e801b8bf-33c0-c422-6a02-f45241e5f3bf","9e8a0461-b57b-05f7-d4db-1fab14de88d6","5650dde6-ec25-028f-ca0d-76545ecbe3d7","5ff7976c-6342-b750-6055-d35bbf900a07","42c3fcb8-d102-d0c9-ee8e-828e3d4abafc"]},{"name":"bgLimb6","origin":[0,13,-8],"color":0,"uuid":"10241f51-3ed2-7d57-9bef-387bad08cf66","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["e9ff765a-b2cf-410e-409f-04f979879ef1","bb867a57-8a0c-2aec-4b71-70b79bd75250","24eecaf5-03d2-714e-2b58-524c9311194d","6694888c-e86e-028f-9e29-6f8d9d1475a4","987d90a2-3738-f28a-15fb-3fe7135bfe79","d4ced9f9-761f-4018-b0bb-d257ef4d0185","d464655c-0125-8c8f-b2da-a09f0dd2ac8c","5fa00f27-7fa9-2f2f-c611-2c09f2ae4014","6b78b322-1f3d-f37a-b26e-cf0fe84e8535","b2b021a2-1d1d-4167-59dd-637411deb719","bf043c01-082d-c466-1743-ecd1cd62ff77","476e0aff-f042-5c05-ee9f-6065906e5c1d","0fcfc939-029c-be42-7b71-89d39fe1b2cf"]},{"name":"bgLimb7","origin":[0,13,-8],"color":0,"uuid":"afdd030e-acef-4fa3-af47-84e12687f995","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["1c9845d8-f307-ebe6-1226-1a60343851ad","3dac1c72-41e6-9846-d204-aba9f2a5c456","f6f1d43f-ba0d-22a3-a1df-58451c6ea8d8","7822744b-ca84-d988-ba11-3a431116e319","49475140-9711-339d-fc8f-48fd62a27e93","eb1a83a1-8e83-dd14-3f0e-fc4602713065","1bcd411f-0d22-ac65-42ab-0743860df18f","d58943ac-9aa8-26e7-ab97-a7b21c2601ef","cf9e876c-64d0-ecb7-6825-df7ef51612ee","22b4f669-2d4a-cb51-6088-4f7caf4041db","8ca40305-30b3-35d8-46ad-a30703876314","ac8b1784-01db-0540-06da-c646023b919a","b61b2efa-7a79-7f2f-f1c8-2f496d6be5c1"]},{"name":"bgLimb8","origin":[0,13,-8],"color":0,"uuid":"65ba2835-5024-95f4-8eb4-6bdb5da9c609","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["b1c8682f-38a7-b5b7-8dd9-21a904e0822b","b4b269a0-18f9-f893-f1cb-e001485a7e3a","94d3e05e-8115-7070-4b95-44578a946efe","f2907a1d-8bd1-b760-174d-d450f6b6a19e","e0c166ca-b20b-0732-f611-f5c7ddd6a62d","e518aec2-d95c-fdc3-baba-f6a5e93e3c11","cf3b8857-9ca9-0d07-7283-c1fe7645b232","a646b354-a280-b832-105b-0fb396a70f6d","1ee9226a-2b37-acbf-95a4-aec792ad7b7d","a254b0fd-8e01-2473-c417-03a892c65597","3352ce97-ad57-4079-4707-6aa38cd29eb6","d6329cae-92ef-cb8a-3fb8-f2831cd05b3d","2e0dc397-5712-897d-55c3-7aa0bad8af86"]}]}]}],"textures":[{"path":"/Users/eliot/Dropbox (Personal)/StormlightCraft/raw/models/entities/Cryptic/spren1.png","name":"spren1.png","folder":"Cryptic","namespace":"","id":"0","particle":false,"render_mode":"default","render_sides":"auto","frame_time":1,"frame_order_type":"loop","frame_order":"","frame_interpolate":false,"visible":true,"mode":"bitmap","saved":false,"uuid":"fcdb2809-ff02-1e55-ab91-845907e21265","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAHklEQVQ4T2NUV1f/z0ABYBw1gGE0DBhGw4BhWIQBAAjGF1F2RXDQAAAAAElFTkSuQmCC","relative_path":"../../../../../../../../../../Users/eliot/Dropbox (Personal)/StormlightCraft/raw/models/entities/Cryptic/spren1.png"}]} \ No newline at end of file diff --git a/blockbench/surgebinding/entities/cryptic/spren1.png b/blockbench/surgebinding/entities/cryptic/spren1.png new file mode 100644 index 000000000..66d028aff Binary files /dev/null and b/blockbench/surgebinding/entities/cryptic/spren1.png differ diff --git a/blockbench/surgebinding/shardblades/dynamic_shardblade.bbmodel b/blockbench/surgebinding/shardblades/dynamic_shardblade.bbmodel new file mode 100644 index 000000000..a01e5b535 --- /dev/null +++ b/blockbench/surgebinding/shardblades/dynamic_shardblade.bbmodel @@ -0,0 +1 @@ +{"meta":{"format_version":"4.10","model_format":"modded_entity","box_uv":true},"name":"dynamic_shardblade","model_identifier":"shardblade","modded_entity_entity_class":"Trident","modded_entity_version":"1.17","modded_entity_flip_y":true,"visible_box":[1,1,0],"variable_placeholders":"","variable_placeholder_buttons":[],"timeline_setups":[],"unhandled_root_fields":{},"resolution":{"width":32,"height":32},"elements":[{"name":"handle_guide","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-0.5,9,-0.5],"to":[0.5,16,0.5],"autouv":0,"color":9,"origin":[0,0,0],"uv_offset":[4,8],"faces":{"north":{"uv":[5,9,6,16],"texture":0},"east":{"uv":[4,9,5,16],"texture":0},"south":{"uv":[7,9,8,16],"texture":0},"west":{"uv":[6,9,7,16],"texture":0},"up":{"uv":[6,9,5,8],"texture":0},"down":{"uv":[7,8,6,9],"texture":0}},"type":"cube","uuid":"f0df6dca-f8f7-794e-9d32-c663c7933018"},{"name":"pommel_guide","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-1.5,7,-1.5],"to":[1.5,9,1.5],"autouv":0,"color":6,"origin":[0,0,0],"uv_offset":[4,3],"faces":{"north":{"uv":[7,6,10,8],"texture":0},"east":{"uv":[4,6,7,8],"texture":0},"south":{"uv":[13,6,16,8],"texture":0},"west":{"uv":[10,6,13,8],"texture":0},"up":{"uv":[10,6,7,3],"texture":0},"down":{"uv":[13,3,10,6],"texture":0}},"type":"cube","uuid":"31dcd4d1-10e3-aa84-6715-198e80acce51"},{"name":"crossguard_guide","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-4.5,16,-0.9999999999999999],"to":[4.5,17,0.9999999999999997],"autouv":0,"color":7,"origin":[0,0,0],"faces":{"north":{"uv":[1.9999999999999996,1.9999999999999996,11,2.9999999999999996],"texture":0},"east":{"uv":[0,1.9999999999999996,1.9999999999999996,2.9999999999999996],"texture":0},"south":{"uv":[13,1.9999999999999996,22,2.9999999999999996],"texture":0},"west":{"uv":[11,1.9999999999999996,13,2.9999999999999996],"texture":0},"up":{"uv":[11,1.9999999999999996,2,0],"texture":0},"down":{"uv":[20,0,11,1.9999999999999996],"texture":0}},"type":"cube","uuid":"6522c261-de52-025c-ac83-8b84c24e24f0"},{"name":"blade_2","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-2.5,17,-0.5],"to":[2.5,45,0.5],"autouv":0,"color":8,"origin":[0,0,0],"uv_offset":[19,3],"faces":{"north":{"uv":[20,4,25,32],"texture":0},"east":{"uv":[19,4,20,32],"texture":0},"south":{"uv":[26,4,31,32],"texture":0},"west":{"uv":[25,4,26,32],"texture":0},"up":{"uv":[25,4,20,3],"texture":0},"down":{"uv":[30,3,25,4],"texture":0}},"type":"cube","uuid":"81affbcf-d5f7-c6b4-0fc3-3dde7030f639"},{"name":"blade1","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-0.5,17,-0.5],"to":[0.5,45,0.5],"autouv":0,"color":0,"origin":[0,0,0],"uv_offset":[0,3],"faces":{"north":{"uv":[1,4,2,32],"texture":0},"east":{"uv":[0,4,1,32],"texture":0},"south":{"uv":[3,4,4,32],"texture":0},"west":{"uv":[2,4,3,32],"texture":0},"up":{"uv":[2,4,1,3],"texture":0},"down":{"uv":[3,3,2,4],"texture":0}},"type":"cube","uuid":"1754012f-518b-0cb7-a697-87bbe4db931a"},{"name":"handle_guide","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-0.5,9,-0.5],"to":[0.5,16,0.5],"autouv":0,"color":0,"origin":[0,0,0],"uv_offset":[4,8],"faces":{"north":{"uv":[5,9,6,16],"texture":0},"east":{"uv":[4,9,5,16],"texture":0},"south":{"uv":[7,9,8,16],"texture":0},"west":{"uv":[6,9,7,16],"texture":0},"up":{"uv":[6,9,5,8],"texture":0},"down":{"uv":[7,8,6,9],"texture":0}},"type":"cube","uuid":"0c0250ab-7d6e-e478-584e-d893be7bd4bd"},{"name":"pommel_guide","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-1.5,7,-1.5],"to":[1.5,9,1.5],"autouv":0,"color":0,"origin":[0,0,0],"uv_offset":[4,3],"faces":{"north":{"uv":[7,6,10,8],"texture":0},"east":{"uv":[4,6,7,8],"texture":0},"south":{"uv":[13,6,16,8],"texture":0},"west":{"uv":[10,6,13,8],"texture":0},"up":{"uv":[10,6,7,3],"texture":0},"down":{"uv":[13,3,10,6],"texture":0}},"type":"cube","uuid":"eab7eab3-059d-22f5-8432-d2bc044f5d62"},{"name":"crossguard_guide","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-4.5,16,-0.9999999999999999],"to":[4.5,17,0.9999999999999997],"autouv":0,"color":9,"origin":[0,0,0],"faces":{"north":{"uv":[1.9999999999999996,1.9999999999999996,11,2.9999999999999996],"texture":0},"east":{"uv":[0,1.9999999999999996,1.9999999999999996,2.9999999999999996],"texture":0},"south":{"uv":[13,1.9999999999999996,22,2.9999999999999996],"texture":0},"west":{"uv":[11,1.9999999999999996,13,2.9999999999999996],"texture":0},"up":{"uv":[11,1.9999999999999996,2,0],"texture":0},"down":{"uv":[20,0,11,1.9999999999999996],"texture":0}},"type":"cube","uuid":"794d2699-632d-d7bd-2188-c9a84ccd7392"},{"name":"blade_guide","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-0.5,17,-0.5],"to":[0.5,45,0.5],"autouv":0,"color":0,"origin":[0,0,0],"uv_offset":[0,3],"faces":{"north":{"uv":[1,4,2,32],"texture":0},"east":{"uv":[0,4,1,32],"texture":0},"south":{"uv":[3,4,4,32],"texture":0},"west":{"uv":[2,4,3,32],"texture":0},"up":{"uv":[2,4,1,3],"texture":0},"down":{"uv":[3,3,2,4],"texture":0}},"type":"cube","uuid":"05223173-dfff-257e-7f1a-abff51dcd729"}],"outliner":[{"name":"root","origin":[0,0,0],"color":0,"uuid":"4f9f26cb-2a2e-1be1-6735-20c4a8e53c1d","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"selected":false,"children":[{"name":"blade","origin":[0,0,0],"color":1,"uuid":"be18e929-3b48-68eb-51f6-01a4fb513eb2","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"selected":false,"children":[{"name":"blade_guide","origin":[0,0,0],"color":0,"uuid":"67e16657-d59b-7e29-0932-59fd78f3a2be","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"selected":false,"children":["05223173-dfff-257e-7f1a-abff51dcd729"]},{"name":"blade_1","origin":[0,0,0],"color":0,"uuid":"544318aa-a3f6-a30d-e04c-6820a949ee66","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"selected":false,"children":["1754012f-518b-0cb7-a697-87bbe4db931a"]},{"name":"blade_2","origin":[0,0,0],"color":0,"uuid":"37646c2b-e40b-906d-6564-2701eaed94df","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"selected":false,"children":["81affbcf-d5f7-c6b4-0fc3-3dde7030f639"]}]},{"name":"cross_guard","origin":[0,0,0],"color":4,"uuid":"3aeee4e3-7d09-e5e6-dc64-0730c7d03ec1","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"selected":false,"children":[{"name":"crossguard_guide","origin":[0,0,0],"color":0,"uuid":"ab50bfed-4d2c-51b4-d83a-141a7d84dd76","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"selected":false,"children":["6522c261-de52-025c-ac83-8b84c24e24f0"]},{"name":"crossguard_1","origin":[0,0,0],"color":0,"uuid":"a0cee35c-5831-c8c6-9487-646c7340cdc5","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"selected":false,"children":["794d2699-632d-d7bd-2188-c9a84ccd7392"]}]},{"name":"handle","origin":[0,0,0],"color":2,"uuid":"5a74f1cc-eeab-ddc0-08dd-2336f618f792","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"selected":false,"children":[{"name":"handle_guide","origin":[0,0,0],"color":0,"uuid":"0002f36b-baf8-0926-9ca6-4da2ff90ffd9","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"selected":false,"children":["f0df6dca-f8f7-794e-9d32-c663c7933018"]},{"name":"handle_1","origin":[0,0,0],"color":0,"uuid":"dd7f01c4-1c7d-0c52-21a6-4baf3789d456","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"selected":false,"children":["0c0250ab-7d6e-e478-584e-d893be7bd4bd"]}]},{"name":"pommel","origin":[0,0,0],"color":3,"uuid":"f07accc4-c9b6-c635-00f1-67f6f9ada0a1","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"selected":false,"children":[{"name":"pommel_guide","origin":[0,0,0],"color":0,"uuid":"d2c49297-10cd-a120-c9ca-8320db5ff3b4","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"selected":false,"children":["31dcd4d1-10e3-aa84-6715-198e80acce51"]},{"name":"pommel_1","origin":[0,0,0],"color":0,"uuid":"c557acce-67c0-bfc8-aa10-8797d7ef216d","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"selected":false,"children":["eab7eab3-059d-22f5-8432-d2bc044f5d62"]}]}]}],"textures":[{"path":"Z:\\Repo\\Minecraft\\2021\\CosmereProject\\_cosmere\\src\\surgebinding\\resources\\assets\\surgebinding\\textures\\item\\models\\shardblade\\dynamic.png","name":"dynamic.png","folder":"block","namespace":"","id":"0","group":"","width":32,"height":32,"uv_width":32,"uv_height":32,"particle":false,"use_as_default":false,"layers_enabled":false,"sync_to_project":"","render_mode":"default","render_sides":"auto","pbr_channel":"color","frame_time":1,"frame_order_type":"loop","frame_order":"","frame_interpolate":false,"visible":true,"internal":true,"saved":true,"uuid":"d1bd19be-cdb3-bc4b-4c53-0949fe504807","relative_path":"../../../src/surgebinding/resources/assets/surgebinding/textures/item/models/shardblade/dynamic.png","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAPRJREFUWEdjZICCLVce/oexcdHzeycTUsKwdn4PI0FFSArgigfMAc4vesE+l7iSTtDhM09NAqthCX9DUC2Hch9RIQFWBPI9KHjRgw85VJCDH18wYwtJbFEHM4MRFAIg34N8B/IZsstBhlmoyDCcuPOEAWSItLgEw9OXL3DGM8ws9OCBmY0uDrKLoANgmogJAZgDFCS44XY9ePEV7jl2aXW4+M+nN8GexXCAN7c0XBFyuoDFP3oaQA6x4eEAkI9wJUpCSZ9qIYArUY46YDQERkOALiFAbC2GzTFUKQdGHTAaAqMhMBoCoyEwGgKjIUCNECClawYAtF/PPwh2D9wAAAAASUVORK5CYII="}]} \ No newline at end of file diff --git a/blockbench/surgebinding/shardblades/honorblades/bondsmith_honorblade.bbmodel b/blockbench/surgebinding/shardblades/honorblades/bondsmith_honorblade.bbmodel new file mode 100644 index 000000000..08e2200ed --- /dev/null +++ b/blockbench/surgebinding/shardblades/honorblades/bondsmith_honorblade.bbmodel @@ -0,0 +1 @@ +{"meta":{"format_version":"4.0","model_format":"java_block","box_uv":false},"name":"bondsmith_honorblade","parent":"","ambientocclusion":true,"front_gui_light":false,"visible_box":[1,1,0],"variable_placeholders":"","variable_placeholder_buttons":[],"resolution":{"width":32,"height":32},"elements":[{"name":"cube","rescale":false,"locked":false,"from":[9.816637385819611,11.678663758976253,7.960624999999999],"to":[9.895387385819612,12.544913758976254,8.039375],"autouv":0,"color":6,"rotation":[0,0,22.5],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[4,0,5,1],"texture":0},"east":{"uv":[4,1,5,2],"texture":0},"south":{"uv":[4,2,5,3],"texture":0},"west":{"uv":[4,3,5,4],"texture":0},"up":{"uv":[5,5,4,4],"texture":0},"down":{"uv":[1,5,0,6],"texture":0}},"type":"cube","uuid":"636706d3-3b05-079c-b18e-3622e474e61c"},{"name":"cube","rescale":false,"locked":false,"from":[9.737887385819612,11.678663758976253,7.960624999999999],"to":[9.895387385819612,12.466163758976254,8.039375],"autouv":0,"color":5,"rotation":[0,0,22.5],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[27,18,28,19],"texture":0},"east":{"uv":[19,27,20,28],"texture":0},"south":{"uv":[27,19,28,20],"texture":0},"west":{"uv":[20,27,21,28],"texture":0},"up":{"uv":[28,21,27,20],"texture":0},"down":{"uv":[22,27,21,28],"texture":0}},"type":"cube","uuid":"8c62e0fd-f705-5e90-50c2-964fc01b64f0"},{"name":"cube","rescale":false,"locked":false,"from":[9.580387385819613,11.678663758976253,7.960624999999999],"to":[9.737887385819612,12.308663758976252,8.039375],"autouv":0,"color":0,"rotation":[0,0,22.5],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[27,24,28,25],"texture":0},"east":{"uv":[25,27,26,28],"texture":0},"south":{"uv":[27,25,28,26],"texture":0},"west":{"uv":[26,27,27,28],"texture":0},"up":{"uv":[28,27,27,26],"texture":0},"down":{"uv":[28,27,27,28],"texture":0}},"type":"cube","uuid":"b16144f7-a358-4a0c-7e85-c68c37a98277"},{"name":"cube","rescale":false,"locked":false,"from":[9.501637385819611,11.678663758976253,7.960624999999999],"to":[9.659137385819612,11.993663758976254,8.039375],"autouv":0,"color":1,"rotation":[0,0,22.5],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[3,28,4,29],"texture":0},"east":{"uv":[28,3,29,4],"texture":0},"south":{"uv":[4,28,5,29],"texture":0},"west":{"uv":[28,4,29,5],"texture":0},"up":{"uv":[6,29,5,28],"texture":0},"down":{"uv":[29,5,28,6],"texture":0}},"type":"cube","uuid":"b1a4543b-773b-14cb-96f5-fd3452676448"},{"name":"cube","rescale":false,"locked":false,"from":[4.481027385819612,11.445013758976252,7.960624999999999],"to":[4.5263873858196115,11.490373758976254,8.039375],"autouv":0,"color":5,"rotation":[0,0,-45],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[27,15,28,16],"texture":0},"east":{"uv":[16,27,17,28],"texture":0},"south":{"uv":[27,16,28,17],"texture":0},"west":{"uv":[17,27,18,28],"texture":0},"up":{"uv":[28,18,27,17],"texture":0},"down":{"uv":[19,27,18,28],"texture":0}},"type":"cube","uuid":"09bda4ee-a4c5-102d-d8aa-8f9cc811c590"},{"name":"cube","rescale":false,"locked":false,"from":[9.605687385819612,11.090623758976253,7.960624999999999],"to":[9.684437385819612,11.248123758976252,8.039375],"autouv":0,"color":0,"rotation":[0,0,22.5],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[17,4,18,5],"texture":0},"east":{"uv":[5,17,6,18],"texture":0},"south":{"uv":[17,5,18,6],"texture":0},"west":{"uv":[6,17,7,18],"texture":0},"up":{"uv":[18,7,17,6],"texture":0},"down":{"uv":[8,17,7,18],"texture":0}},"type":"cube","uuid":"1b2956e6-50dc-aced-c372-258aa53dddab"},{"name":"cube","rescale":false,"locked":false,"from":[5.552987385819612,10.660193758976252,7.960624999999999],"to":[5.789237385819612,10.738943758976255,8.039375],"autouv":0,"color":6,"rotation":[0,0,-45],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[5,1,6,2],"texture":0},"east":{"uv":[2,5,3,6],"texture":0},"south":{"uv":[5,2,6,3],"texture":0},"west":{"uv":[3,5,4,6],"texture":0},"up":{"uv":[6,4,5,3],"texture":0},"down":{"uv":[5,5,4,6],"texture":0}},"type":"cube","uuid":"e109909f-352a-eb77-34b5-d26bdf6319d5"},{"name":"cube","rescale":false,"locked":false,"from":[6.739287385819612,11.224973758976255,7.960624999999999],"to":[6.975537385819612,11.382473758976253,8.039375],"autouv":0,"color":0,"rotation":[0,0,-22.5],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[3,8,4,9],"texture":0},"east":{"uv":[8,3,9,4],"texture":0},"south":{"uv":[4,8,5,9],"texture":0},"west":{"uv":[8,4,9,5],"texture":0},"up":{"uv":[6,9,5,8],"texture":0},"down":{"uv":[9,5,8,6],"texture":0}},"type":"cube","uuid":"8e79ea83-ad2b-c96b-9c9b-64c23de7bd92"},{"name":"cube","rescale":false,"locked":false,"from":[8.028347385819611,11.572723758976252,7.960624999999999],"to":[8.343347385819612,12.123973758976252,8.039375],"autouv":0,"color":6,"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[0,8,1,9],"texture":0},"east":{"uv":[8,0,9,1],"texture":0},"south":{"uv":[1,8,2,9],"texture":0},"west":{"uv":[8,1,9,2],"texture":0},"up":{"uv":[3,9,2,8],"texture":0},"down":{"uv":[9,2,8,3],"texture":0}},"type":"cube","uuid":"cb7bbaab-c14b-9534-b550-5b3153e32e31"},{"name":"cube","rescale":false,"locked":false,"from":[6.278117385819612,11.075113758976254,7.960624999999999],"to":[6.356867385819612,11.232613758976253,8.039375],"autouv":0,"color":2,"rotation":[0,0,-22.5],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[17,13,18,14],"texture":0},"east":{"uv":[14,17,15,18],"texture":0},"south":{"uv":[17,14,18,15],"texture":0},"west":{"uv":[15,17,16,18],"texture":0},"up":{"uv":[18,16,17,15],"texture":0},"down":{"uv":[17,17,16,18],"texture":0}},"type":"cube","uuid":"00d02aba-5a1e-fb98-8b9c-d53a379bcf70"},{"name":"cube","rescale":false,"locked":false,"from":[7.616117385819612,11.572723758976252,7.960624999999999],"to":[8.088617385819612,12.123973758976252,8.039375],"autouv":0,"color":0,"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[17,10,18,11],"texture":0},"east":{"uv":[11,17,12,18],"texture":0},"south":{"uv":[17,11,18,12],"texture":0},"west":{"uv":[12,17,13,18],"texture":0},"up":{"uv":[18,13,17,12],"texture":0},"down":{"uv":[14,17,13,18],"texture":0}},"type":"cube","uuid":"21dc5148-e8e0-cc46-b53b-7f1828d22abf"},{"name":"cube","rescale":false,"locked":false,"from":[6.067167385819612,11.663153758976254,7.960624999999999],"to":[6.145917385819612,12.529403758976255,8.039375],"autouv":0,"color":0,"rotation":[0,0,-22.5],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[17,7,18,8],"texture":0},"east":{"uv":[8,17,9,18],"texture":0},"south":{"uv":[17,8,18,9],"texture":0},"west":{"uv":[9,17,10,18],"texture":0},"up":{"uv":[18,10,17,9],"texture":0},"down":{"uv":[11,17,10,18],"texture":0}},"type":"cube","uuid":"94c187b0-adae-a251-e164-0190b21f94d2"},{"name":"cube","rescale":false,"locked":false,"from":[6.067167385819612,11.663153758976254,7.960624999999999],"to":[6.224667385819612,12.450653758976252,8.039375],"autouv":0,"color":7,"rotation":[0,0,-22.5],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[27,21,28,22],"texture":0},"east":{"uv":[22,27,23,28],"texture":0},"south":{"uv":[27,22,28,23],"texture":0},"west":{"uv":[23,27,24,28],"texture":0},"up":{"uv":[28,24,27,23],"texture":0},"down":{"uv":[25,27,24,28],"texture":0}},"type":"cube","uuid":"ed940ede-8feb-9bcd-4063-9c8e970288fe"},{"name":"cube","rescale":false,"locked":false,"from":[6.224667385819612,11.663153758976254,7.960624999999999],"to":[6.382167385819612,12.293153758976253,8.039375],"autouv":0,"color":1,"rotation":[0,0,-22.5],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[0,28,1,29],"texture":0},"east":{"uv":[28,0,29,1],"texture":0},"south":{"uv":[1,28,2,29],"texture":0},"west":{"uv":[28,1,29,2],"texture":0},"up":{"uv":[3,29,2,28],"texture":0},"down":{"uv":[29,2,28,3],"texture":0}},"type":"cube","uuid":"31841281-42c5-fdad-fdd5-cf47227153c5"},{"name":"cube","rescale":false,"locked":false,"from":[9.338217385819611,10.780543758976254,7.960624999999999],"to":[9.495717385819612,10.938043758976253,8.039375],"autouv":0,"color":5,"rotation":[0,0,22.5],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[2,6,3,7],"texture":0},"east":{"uv":[6,2,7,3],"texture":0},"south":{"uv":[3,6,4,7],"texture":0},"west":{"uv":[6,3,7,4],"texture":0},"up":{"uv":[5,7,4,6],"texture":0},"down":{"uv":[7,4,6,5],"texture":0}},"type":"cube","uuid":"8f6780fc-02be-3cc3-ccc6-490d2d16c8ad"},{"name":"cube","rescale":false,"locked":false,"from":[8.130157385819611,11.214033758976253,7.960624999999999],"to":[8.287657385819612,11.450283758976255,8.039375],"autouv":0,"color":1,"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[5,4,6,5],"texture":0},"east":{"uv":[5,5,6,6],"texture":0},"south":{"uv":[0,6,1,7],"texture":0},"west":{"uv":[6,0,7,1],"texture":0},"up":{"uv":[2,7,1,6],"texture":0},"down":{"uv":[7,1,6,2],"texture":0}},"type":"cube","uuid":"d4277da5-bedc-c118-2ec0-a8c4eb3cd150"},{"name":"cube","rescale":false,"locked":false,"from":[7.451027385819612,9.753403758976253,7.960624999999999],"to":[7.529777385819612,9.832153758976254,8.039375],"autouv":0,"color":0,"rotation":[0,0,-22.5],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[7,4,8,5],"texture":0},"east":{"uv":[5,7,6,8],"texture":0},"south":{"uv":[7,5,8,6],"texture":0},"west":{"uv":[6,7,7,8],"texture":0},"up":{"uv":[8,7,7,6],"texture":0},"down":{"uv":[8,7,7,8],"texture":0}},"type":"cube","uuid":"60e19254-a3d7-236f-ba2a-77f520eb426e"},{"name":"cube","rescale":false,"locked":false,"from":[6.785687385819612,9.433993758976253,7.960624999999999],"to":[6.8644373858196115,9.591493758976252,8.039375],"autouv":0,"color":5,"rotation":[0,0,-45],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[9,0,10,1],"texture":0},"east":{"uv":[1,9,2,10],"texture":0},"south":{"uv":[9,1,10,2],"texture":0},"west":{"uv":[2,9,3,10],"texture":0},"up":{"uv":[10,3,9,2],"texture":0},"down":{"uv":[4,9,3,10],"texture":0}},"type":"cube","uuid":"259bf34c-ca70-25c6-573b-8aaa18b679a3"},{"name":"cube","rescale":false,"locked":false,"from":[8.738177385819611,9.275323758976253,7.960624999999999],"to":[8.816927385819612,9.354073758976252,8.039375],"autouv":0,"color":1,"rotation":[0,0,22.5],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[9,6,10,7],"texture":0},"east":{"uv":[7,9,8,10],"texture":0},"south":{"uv":[9,7,10,8],"texture":0},"west":{"uv":[8,9,9,10],"texture":0},"up":{"uv":[10,9,9,8],"texture":0},"down":{"uv":[10,9,9,10],"texture":0}},"type":"cube","uuid":"527a0170-4431-5f6e-0985-a4f29082f72b"},{"name":"cube","rescale":false,"locked":false,"from":[8.768317385819612,9.123813758976254,7.960624999999999],"to":[8.847067385819612,9.202563758976254,8.039375],"autouv":0,"color":2,"rotation":[0,0,22.5],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[8,12,9,13],"texture":0},"east":{"uv":[12,8,13,9],"texture":0},"south":{"uv":[9,12,10,13],"texture":0},"west":{"uv":[12,9,13,10],"texture":0},"up":{"uv":[11,13,10,12],"texture":0},"down":{"uv":[13,10,12,11],"texture":0}},"type":"cube","uuid":"efc530d8-6e49-d716-edb7-e96ad8c514a7"},{"name":"cube","rescale":false,"locked":false,"from":[9.164037385819611,8.786873758976252,7.960624999999999],"to":[9.242787385819613,8.944373758976253,8.039375],"autouv":0,"color":4,"rotation":[0,0,45],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[9,3,10,4],"texture":0},"east":{"uv":[4,9,5,10],"texture":0},"south":{"uv":[9,4,10,5],"texture":0},"west":{"uv":[5,9,6,10],"texture":0},"up":{"uv":[10,6,9,5],"texture":0},"down":{"uv":[7,9,6,10],"texture":0}},"type":"cube","uuid":"5e34c9eb-e63e-e95d-b41d-bd19c8f15c70"},{"name":"cube","rescale":false,"locked":false,"from":[7.128387385819612,9.055153758976253,7.960624999999999],"to":[7.285887385819612,9.212653758976252,8.039375],"autouv":0,"color":4,"rotation":[0,0,-45],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[2,12,3,13],"texture":0},"east":{"uv":[12,2,13,3],"texture":0},"south":{"uv":[3,12,4,13],"texture":0},"west":{"uv":[12,3,13,4],"texture":0},"up":{"uv":[5,13,4,12],"texture":0},"down":{"uv":[13,4,12,5],"texture":0}},"type":"cube","uuid":"7a5caf04-1fbf-c9a2-0cf9-7e1d953a7724"},{"name":"cube","rescale":false,"locked":false,"from":[7.695427385819611,9.163373758976253,7.960624999999999],"to":[7.774177385819612,9.320873758976253,8.039375],"autouv":0,"color":6,"rotation":[0,0,-22.5],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[11,10,12,11],"texture":0},"east":{"uv":[11,11,12,12],"texture":0},"south":{"uv":[0,12,1,13],"texture":0},"west":{"uv":[12,0,13,1],"texture":0},"up":{"uv":[2,13,1,12],"texture":0},"down":{"uv":[13,1,12,2],"texture":0}},"type":"cube","uuid":"72522637-e007-ceff-65d6-db6c3530dd04"},{"name":"cube","rescale":false,"locked":false,"from":[8.320037385819612,8.377203758976254,7.960624999999999],"to":[8.477537385819613,8.534703758976253,8.039375],"autouv":0,"color":7,"rotation":[0,0,22.5],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[11,7,12,8],"texture":0},"east":{"uv":[8,11,9,12],"texture":0},"south":{"uv":[11,8,12,9],"texture":0},"west":{"uv":[9,11,10,12],"texture":0},"up":{"uv":[12,10,11,9],"texture":0},"down":{"uv":[11,11,10,12],"texture":0}},"type":"cube","uuid":"e3b29329-001a-dcc2-7f65-3bdfcd349c2b"},{"name":"cube","rescale":false,"locked":false,"from":[8.506787385819612,8.086993758976252,7.960624999999999],"to":[8.585537385819611,8.244493758976255,8.039375],"autouv":0,"color":6,"rotation":[0,0,45],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[11,4,12,5],"texture":0},"east":{"uv":[5,11,6,12],"texture":0},"south":{"uv":[11,5,12,6],"texture":0},"west":{"uv":[6,11,7,12],"texture":0},"up":{"uv":[12,7,11,6],"texture":0},"down":{"uv":[8,11,7,12],"texture":0}},"type":"cube","uuid":"3948f493-89f3-daf6-eb4b-c9dc6fab1d8f"},{"name":"cube","rescale":false,"locked":false,"from":[8.957027385819611,9.658163758976254,7.960624999999999],"to":[9.035777385819612,9.736913758976254,8.039375],"autouv":0,"color":5,"rotation":[0,0,22.5],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[6,8,7,9],"texture":0},"east":{"uv":[8,6,9,7],"texture":0},"south":{"uv":[7,8,8,9],"texture":0},"west":{"uv":[8,7,9,8],"texture":0},"up":{"uv":[9,9,8,8],"texture":0},"down":{"uv":[1,9,0,10],"texture":0}},"type":"cube","uuid":"109441a4-7610-fc70-1cd9-5af653b84c8d"},{"name":"cube","rescale":false,"locked":false,"from":[8.157817385819612,9.169873758976253,7.960624999999999],"to":[8.236567385819612,10.114873758976254,8.039375],"autouv":0,"color":6,"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[7,1,8,2],"texture":0},"east":{"uv":[2,7,3,8],"texture":0},"south":{"uv":[7,2,8,3],"texture":0},"west":{"uv":[3,7,4,8],"texture":0},"up":{"uv":[8,4,7,3],"texture":0},"down":{"uv":[5,7,4,8],"texture":0}},"type":"cube","uuid":"d724f822-17d9-5d82-383b-19a185e39291"},{"name":"cube","rescale":false,"locked":false,"from":[6.285487385819612,9.891573758976254,7.960624999999999],"to":[6.521737385819612,9.970323758976253,8.039375],"autouv":0,"color":4,"rotation":[0,0,-45],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[11,1,12,2],"texture":0},"east":{"uv":[2,11,3,12],"texture":0},"south":{"uv":[11,2,12,3],"texture":0},"west":{"uv":[3,11,4,12],"texture":0},"up":{"uv":[12,4,11,3],"texture":0},"down":{"uv":[5,11,4,12],"texture":0}},"type":"cube","uuid":"673769dd-53d3-f9b1-12b1-a1e5d5666585"},{"name":"cube","rescale":false,"locked":false,"from":[9.175877385819613,10.119753758976254,7.960624999999999],"to":[9.254627385819612,10.277253758976254,8.039375],"autouv":0,"color":6,"rotation":[0,0,22.5],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[9,10,10,11],"texture":0},"east":{"uv":[10,9,11,10],"texture":0},"south":{"uv":[10,10,11,11],"texture":0},"west":{"uv":[0,11,1,12],"texture":0},"up":{"uv":[12,1,11,0],"texture":0},"down":{"uv":[2,11,1,12],"texture":0}},"type":"cube","uuid":"41a7a722-8532-2349-5c3a-da0d300126ca"},{"name":"cube","rescale":false,"locked":false,"from":[7.121887385819612,10.234543758976253,7.960624999999999],"to":[7.358137385819612,10.392043758976254,8.039375],"autouv":0,"color":0,"rotation":[0,0,-22.5],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[6,10,7,11],"texture":0},"east":{"uv":[10,6,11,7],"texture":0},"south":{"uv":[7,10,8,11],"texture":0},"west":{"uv":[10,7,11,8],"texture":0},"up":{"uv":[9,11,8,10],"texture":0},"down":{"uv":[11,8,10,9],"texture":0}},"type":"cube","uuid":"0cfec6c5-22df-cdf0-def9-c78db01908cd"},{"name":"cube","rescale":false,"locked":false,"from":[8.183367385819611,10.073823758976253,7.960624999999999],"to":[8.262117385819613,10.388823758976255,8.039375],"autouv":0,"color":6,"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[3,10,4,11],"texture":0},"east":{"uv":[10,3,11,4],"texture":0},"south":{"uv":[4,10,5,11],"texture":0},"west":{"uv":[10,4,11,5],"texture":0},"up":{"uv":[6,11,5,10],"texture":0},"down":{"uv":[11,5,10,6],"texture":0}},"type":"cube","uuid":"23a5bb58-e5da-e377-8a63-9146d2af6aa4"},{"name":"cube","rescale":false,"locked":false,"from":[8.957027385819611,9.736913758976254,7.960624999999999],"to":[9.035777385819612,9.894413758976253,8.039375],"autouv":0,"color":0,"rotation":[0,0,22.5],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[0,10,1,11],"texture":0},"east":{"uv":[10,0,11,1],"texture":0},"south":{"uv":[1,10,2,11],"texture":0},"west":{"uv":[10,1,11,2],"texture":0},"up":{"uv":[3,11,2,10],"texture":0},"down":{"uv":[11,2,10,3],"texture":0}},"type":"cube","uuid":"3170f6c8-d4a8-e8b1-4e5e-5083ac71e9d4"},{"name":"cube","rescale":false,"locked":false,"from":[8.160297385819613,10.511273758976253,7.960624999999999],"to":[8.317797385819611,11.141273758976254,8.039375],"autouv":0,"color":6,"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[5,6,6,7],"texture":0},"east":{"uv":[6,5,7,6],"texture":0},"south":{"uv":[6,6,7,7],"texture":0},"west":{"uv":[0,7,1,8],"texture":0},"up":{"uv":[8,1,7,0],"texture":0},"down":{"uv":[2,7,1,8],"texture":0}},"type":"cube","uuid":"20d63373-b136-0381-a4f4-d24b3c075f9e"},{"name":"cube","rescale":false,"locked":false,"from":[8.187947385819612,8.603993758976253,7.960624999999999],"to":[8.266697385819612,9.233993758976254,8.039375],"autouv":0,"color":1,"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[5,12,6,13],"texture":0},"east":{"uv":[12,5,13,6],"texture":0},"south":{"uv":[6,12,7,13],"texture":0},"west":{"uv":[12,6,13,7],"texture":0},"up":{"uv":[8,13,7,12],"texture":0},"down":{"uv":[13,7,12,8],"texture":0}},"type":"cube","uuid":"1aa8fb4b-2a0b-a7d7-940a-e392fdbe3e9b"},{"name":"cube","rescale":false,"locked":false,"from":[8.428927385819613,8.225693758976252,7.960624999999999],"to":[8.507677385819612,8.304443758976253,8.039375],"autouv":0,"color":1,"rotation":[0,0,22.5],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[14,18,15,19],"texture":0},"east":{"uv":[18,14,19,15],"texture":0},"south":{"uv":[15,18,16,19],"texture":0},"west":{"uv":[18,15,19,16],"texture":0},"up":{"uv":[17,19,16,18],"texture":0},"down":{"uv":[19,16,18,17],"texture":0}},"type":"cube","uuid":"eca9988c-d84d-7041-012a-b2444247e449"},{"name":"cube","rescale":false,"locked":false,"from":[7.749517385819612,8.476653758976253,7.960624999999999],"to":[7.985767385819612,8.555403758976254,8.039375],"autouv":0,"color":6,"rotation":[0,0,-45],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[11,18,12,19],"texture":0},"east":{"uv":[18,11,19,12],"texture":0},"south":{"uv":[12,18,13,19],"texture":0},"west":{"uv":[18,12,19,13],"texture":0},"up":{"uv":[14,19,13,18],"texture":0},"down":{"uv":[19,13,18,14],"texture":0}},"type":"cube","uuid":"e14be52b-32a9-8717-b5c0-67e471734647"},{"name":"cube","rescale":false,"locked":false,"from":[7.932997385819612,8.288313758976253,7.960624999999999],"to":[8.169247385819611,8.524563758976253,8.039375],"autouv":0,"color":2,"rotation":[0,0,-22.5],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[8,18,9,19],"texture":0},"east":{"uv":[18,8,19,9],"texture":0},"south":{"uv":[9,18,10,19],"texture":0},"west":{"uv":[18,9,19,10],"texture":0},"up":{"uv":[11,19,10,18],"texture":0},"down":{"uv":[19,10,18,11],"texture":0}},"type":"cube","uuid":"0838b762-05f1-9d90-c814-faa886cf3718"},{"name":"cube","rescale":false,"locked":false,"from":[8.139337385819612,7.801853758976254,7.960624999999999],"to":[8.296837385819611,8.274353758976254,8.039375],"autouv":0,"color":1,"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[5,18,6,19],"texture":0},"east":{"uv":[18,5,19,6],"texture":0},"south":{"uv":[6,18,7,19],"texture":0},"west":{"uv":[18,6,19,7],"texture":0},"up":{"uv":[8,19,7,18],"texture":0},"down":{"uv":[19,7,18,8],"texture":0}},"type":"cube","uuid":"a44bac06-cb4d-5cb0-9ed7-944d9853855a"},{"name":"cube","rescale":false,"locked":false,"from":[8.169477385819611,7.1572237589762535,7.960624999999999],"to":[8.326977385819612,7.472223758976253,8.039375],"autouv":0,"color":5,"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[19,7,20,8],"texture":0},"east":{"uv":[8,19,9,20],"texture":0},"south":{"uv":[19,8,20,9],"texture":0},"west":{"uv":[9,19,10,20],"texture":0},"up":{"uv":[20,10,19,9],"texture":0},"down":{"uv":[11,19,10,20],"texture":0}},"type":"cube","uuid":"f50074d5-f75b-04c9-adb2-3b6a88dd7c13"},{"name":"cube","rescale":false,"locked":false,"from":[8.267807385819612,7.558773758976253,7.960624999999999],"to":[8.504057385819612,7.795023758976253,8.039375],"autouv":0,"color":0,"rotation":[0,0,-22.5],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[19,4,20,5],"texture":0},"east":{"uv":[5,19,6,20],"texture":0},"south":{"uv":[19,5,20,6],"texture":0},"west":{"uv":[6,19,7,20],"texture":0},"up":{"uv":[20,7,19,6],"texture":0},"down":{"uv":[8,19,7,20],"texture":0}},"type":"cube","uuid":"75b00aaa-6a4c-b990-6841-ceb40c0e4067"},{"name":"cube","rescale":false,"locked":false,"from":[8.495517385819612,7.930763758976253,7.960624999999999],"to":[8.574267385819612,8.009513758976254,8.039375],"autouv":0,"color":6,"rotation":[0,0,-45],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[19,1,20,2],"texture":0},"east":{"uv":[2,19,3,20],"texture":0},"south":{"uv":[19,2,20,3],"texture":0},"west":{"uv":[3,19,4,20],"texture":0},"up":{"uv":[20,4,19,3],"texture":0},"down":{"uv":[5,19,4,20],"texture":0}},"type":"cube","uuid":"084ec73e-0c07-58a5-b668-cd4c5695c145"},{"name":"cube","rescale":false,"locked":false,"from":[8.149797385819612,7.473083758976253,7.960624999999999],"to":[8.228547385819612,7.551833758976254,8.039375],"autouv":0,"color":7,"rotation":[0,0,22.5],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[17,18,18,19],"texture":0},"east":{"uv":[18,17,19,18],"texture":0},"south":{"uv":[18,18,19,19],"texture":0},"west":{"uv":[0,19,1,20],"texture":0},"up":{"uv":[20,1,19,0],"texture":0},"down":{"uv":[2,19,1,20],"texture":0}},"type":"cube","uuid":"a5beb20d-0342-8ebf-93bb-e3f52522b6ba"},{"name":"cube","rescale":false,"locked":false,"from":[7.962167385819612,7.545843758976253,7.960624999999999],"to":[8.198417385819612,7.782093758976253,8.039375],"autouv":0,"color":5,"rotation":[0,0,22.5],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[2,18,3,19],"texture":0},"east":{"uv":[18,2,19,3],"texture":0},"south":{"uv":[3,18,4,19],"texture":0},"west":{"uv":[18,3,19,4],"texture":0},"up":{"uv":[5,19,4,18],"texture":0},"down":{"uv":[19,4,18,5],"texture":0}},"type":"cube","uuid":"4c24706f-4dcf-3bf9-c58d-2979ae109a27"},{"name":"cube","rescale":false,"locked":false,"from":[7.664567385819612,6.859993758976254,7.960624999999999],"to":[7.979567385819612,7.174993758976253,8.039375],"autouv":0,"color":0,"rotation":[0,0,22.5],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[19,10,20,11],"texture":0},"east":{"uv":[11,19,12,20],"texture":0},"south":{"uv":[19,11,20,12],"texture":0},"west":{"uv":[12,19,13,20],"texture":0},"up":{"uv":[20,13,19,12],"texture":0},"down":{"uv":[14,19,13,20],"texture":0}},"type":"cube","uuid":"8d141d76-29ac-58ca-d0ba-1cc34b6d3010"},{"name":"cube","rescale":false,"locked":false,"from":[7.414507385819612,5.549063758976253,7.960624999999999],"to":[7.572007385819612,6.100313758976253,8.039375],"autouv":0,"color":4,"rotation":[0,0,22.5],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[21,0,22,1],"texture":0},"east":{"uv":[1,21,2,22],"texture":0},"south":{"uv":[21,1,22,2],"texture":0},"west":{"uv":[2,21,3,22],"texture":0},"up":{"uv":[22,3,21,2],"texture":0},"down":{"uv":[4,21,3,22],"texture":0}},"type":"cube","uuid":"4c614b80-bbd1-3fa2-6a01-51f7c74dca8f"},{"name":"cube","rescale":false,"locked":false,"from":[7.960897385819612,7.498493758976253,7.960624999999999],"to":[8.039647385819611,7.577243758976254,8.039375],"autouv":0,"color":4,"rotation":[0,0,45],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[17,16,18,17],"texture":0},"east":{"uv":[17,17,18,18],"texture":0},"south":{"uv":[0,18,1,19],"texture":0},"west":{"uv":[18,0,19,1],"texture":0},"up":{"uv":[2,19,1,18],"texture":0},"down":{"uv":[19,1,18,2],"texture":0}},"type":"cube","uuid":"5ad869c0-f2c8-82fd-7ce1-70e0f3313650"},{"name":"cube","rescale":false,"locked":false,"from":[8.966657385819612,7.466113758976253,7.960624999999999],"to":[9.045407385819612,7.544863758976254,8.039375],"autouv":0,"color":3,"rotation":[0,0,-45],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[9,20,10,21],"texture":0},"east":{"uv":[20,9,21,10],"texture":0},"south":{"uv":[10,20,11,21],"texture":0},"west":{"uv":[20,10,21,11],"texture":0},"up":{"uv":[12,21,11,20],"texture":0},"down":{"uv":[21,11,20,12],"texture":0}},"type":"cube","uuid":"5cf9cadd-1c6f-d822-0527-5ff367bed34a"},{"name":"cube","rescale":false,"locked":false,"from":[8.525267385819612,6.949193758976254,7.960624999999999],"to":[8.761517385819612,7.185443758976254,8.039375],"autouv":0,"color":1,"rotation":[0,0,-22.5],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[6,20,7,21],"texture":0},"east":{"uv":[20,6,21,7],"texture":0},"south":{"uv":[7,20,8,21],"texture":0},"west":{"uv":[20,7,21,8],"texture":0},"up":{"uv":[9,21,8,20],"texture":0},"down":{"uv":[21,8,20,9],"texture":0}},"type":"cube","uuid":"64f1b38d-75da-a16f-f185-f74a22a88edf"},{"name":"cube","rescale":false,"locked":false,"from":[8.769667385819611,6.437913758976253,7.960624999999999],"to":[9.005917385819611,6.6741637589762535,8.039375],"autouv":0,"color":5,"rotation":[0,0,-22.5],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[15,20,16,21],"texture":0},"east":{"uv":[20,15,21,16],"texture":0},"south":{"uv":[16,20,17,21],"texture":0},"west":{"uv":[20,16,21,17],"texture":0},"up":{"uv":[18,21,17,20],"texture":0},"down":{"uv":[21,17,20,18],"texture":0}},"type":"cube","uuid":"e56373f0-bf52-2106-c8c7-215f94b13a95"},{"name":"cube","rescale":false,"locked":false,"from":[9.230607385819612,7.008533758976253,7.960624999999999],"to":[9.466857385819612,7.166033758976253,8.039375],"autouv":0,"color":7,"rotation":[0,0,-45],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[12,20,13,21],"texture":0},"east":{"uv":[20,12,21,13],"texture":0},"south":{"uv":[13,20,14,21],"texture":0},"west":{"uv":[20,13,21,14],"texture":0},"up":{"uv":[15,21,14,20],"texture":0},"down":{"uv":[21,14,20,15],"texture":0}},"type":"cube","uuid":"334fc68b-8bc9-7b05-de8e-9d66bf432eff"},{"name":"cube","rescale":false,"locked":false,"from":[8.095307385819611,6.574263758976254,7.960624999999999],"to":[8.331557385819611,6.810513758976254,8.039375],"autouv":0,"color":1,"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[3,20,4,21],"texture":0},"east":{"uv":[20,3,21,4],"texture":0},"south":{"uv":[4,20,5,21],"texture":0},"west":{"uv":[20,4,21,5],"texture":0},"up":{"uv":[6,21,5,20],"texture":0},"down":{"uv":[21,5,20,6],"texture":0}},"type":"cube","uuid":"a983234d-df82-d8ff-1fa0-1dd2f03ba338"},{"name":"cube","rescale":false,"locked":false,"from":[8.125447385819612,6.008373758976253,7.960624999999999],"to":[8.361697385819612,6.244623758976253,8.039375],"autouv":0,"color":7,"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[18,20,19,21],"texture":0},"east":{"uv":[20,18,21,19],"texture":0},"south":{"uv":[19,20,20,21],"texture":0},"west":{"uv":[20,19,21,20],"texture":0},"up":{"uv":[21,21,20,20],"texture":0},"down":{"uv":[1,21,0,22],"texture":0}},"type":"cube","uuid":"026238c0-0557-b6b8-4db6-7737db6dd3da"},{"name":"cube","rescale":false,"locked":false,"from":[8.463767385819612,5.493093758976253,7.960624999999999],"to":[8.542517385819611,5.571843758976254,8.039375],"autouv":0,"color":7,"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[23,22,24,23],"texture":0},"east":{"uv":[23,23,24,24],"texture":0},"south":{"uv":[0,24,1,25],"texture":0},"west":{"uv":[24,0,25,1],"texture":0},"up":{"uv":[2,25,1,24],"texture":0},"down":{"uv":[25,1,24,2],"texture":0}},"type":"cube","uuid":"85695d43-faef-2804-c0b5-dc71045722a9"},{"name":"cube","rescale":false,"locked":false,"from":[6.532217385819612,5.843733758976253,7.960624999999999],"to":[6.610967385819611,6.158733758976253,8.039375],"autouv":0,"color":3,"rotation":[0,0,45],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[5,24,6,25],"texture":0},"east":{"uv":[24,5,25,6],"texture":0},"south":{"uv":[6,24,7,25],"texture":0},"west":{"uv":[24,6,25,7],"texture":0},"up":{"uv":[8,25,7,24],"texture":0},"down":{"uv":[25,7,24,8],"texture":0}},"type":"cube","uuid":"eb8b7956-7c1a-c23f-bedb-40b5f6771a3f"},{"name":"cube","rescale":false,"locked":false,"from":[5.648017385819612,6.393823758976254,7.960624999999999],"to":[5.805517385819612,6.472573758976253,8.039375],"autouv":0,"color":4,"rotation":[0,0,45],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[20,24,21,25],"texture":0},"east":{"uv":[24,20,25,21],"texture":0},"south":{"uv":[21,24,22,25],"texture":0},"west":{"uv":[24,21,25,22],"texture":0},"up":{"uv":[23,25,22,24],"texture":0},"down":{"uv":[25,22,24,23],"texture":0}},"type":"cube","uuid":"8a6003f9-e0a6-515f-d41b-572e0ec11780"},{"name":"cube","rescale":false,"locked":false,"from":[9.278927385819612,5.848913758976254,7.960624999999999],"to":[9.357677385819612,5.927663758976253,8.039375],"autouv":0,"color":5,"rotation":[0,0,-22.5],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[8,24,9,25],"texture":0},"east":{"uv":[24,8,25,9],"texture":0},"south":{"uv":[9,24,10,25],"texture":0},"west":{"uv":[24,9,25,10],"texture":0},"up":{"uv":[11,25,10,24],"texture":0},"down":{"uv":[25,10,24,11],"texture":0}},"type":"cube","uuid":"47e97d2c-49b3-b583-e390-a88ced4f162b"},{"name":"cube","rescale":false,"locked":false,"from":[7.231787385819612,5.604753758976253,7.960624999999999],"to":[7.310537385819612,5.683503758976253,8.039375],"autouv":0,"color":5,"rotation":[0,0,22.5],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[14,24,15,25],"texture":0},"east":{"uv":[24,14,25,15],"texture":0},"south":{"uv":[15,24,16,25],"texture":0},"west":{"uv":[24,15,25,16],"texture":0},"up":{"uv":[17,25,16,24],"texture":0},"down":{"uv":[25,16,24,17],"texture":0}},"type":"cube","uuid":"fe301417-c6f0-0a10-09ab-709c273d19ab"},{"name":"cube","rescale":false,"locked":false,"from":[6.216137385819612,6.081063758976253,7.960624999999999],"to":[6.452387385819612,6.2385637589762535,8.039375],"autouv":0,"color":6,"rotation":[0,0,45],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[17,24,18,25],"texture":0},"east":{"uv":[24,17,25,18],"texture":0},"south":{"uv":[18,24,19,25],"texture":0},"west":{"uv":[24,18,25,19],"texture":0},"up":{"uv":[20,25,19,24],"texture":0},"down":{"uv":[25,19,24,20],"texture":0}},"type":"cube","uuid":"f1eaff64-2c3a-5137-d1a4-810c146cd862"},{"name":"cube","rescale":false,"locked":false,"from":[8.122137385819611,5.523233758976254,7.960624999999999],"to":[8.437137385819613,5.680733758976253,8.039375],"autouv":0,"color":5,"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[11,24,12,25],"texture":0},"east":{"uv":[24,11,25,12],"texture":0},"south":{"uv":[12,24,13,25],"texture":0},"west":{"uv":[24,12,25,13],"texture":0},"up":{"uv":[14,25,13,24],"texture":0},"down":{"uv":[25,13,24,14],"texture":0}},"type":"cube","uuid":"0b4ce300-5dad-db6a-f7c2-2d7090b72d51"},{"name":"cube","rescale":false,"locked":false,"from":[7.416947385819612,5.256843758976253,7.960624999999999],"to":[7.495697385819612,5.571843758976254,8.039375],"autouv":0,"color":5,"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[2,24,3,25],"texture":0},"east":{"uv":[24,2,25,3],"texture":0},"south":{"uv":[3,24,4,25],"texture":0},"west":{"uv":[24,3,25,4],"texture":0},"up":{"uv":[5,25,4,24],"texture":0},"down":{"uv":[25,4,24,5],"texture":0}},"type":"cube","uuid":"0cfa3510-65ad-1a9e-f112-e568474f6856"},{"name":"cube","rescale":false,"locked":false,"from":[7.881607385819612,5.241343758976253,7.960624999999999],"to":[8.117857385819612,5.635093758976254,8.039375],"autouv":0,"color":1,"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[25,13,26,14],"texture":0},"east":{"uv":[14,25,15,26],"texture":0},"south":{"uv":[25,14,26,15],"texture":0},"west":{"uv":[15,25,16,26],"texture":0},"up":{"uv":[26,16,25,15],"texture":0},"down":{"uv":[17,25,16,26],"texture":0}},"type":"cube","uuid":"fd50e828-a08a-2ca1-6bda-6077c9179aaa"},{"name":"cube","rescale":false,"locked":false,"from":[7.881607385819612,5.654613758976254,7.070685],"to":[8.117857385819612,5.8121137589762535,7.1494349999999995],"autouv":0,"color":1,"rotation":[-22.5,0,0],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[9,26,10,27],"texture":0},"east":{"uv":[26,9,27,10],"texture":0},"south":{"uv":[10,26,11,27],"texture":0},"west":{"uv":[26,10,27,11],"texture":0},"up":{"uv":[12,27,11,26],"texture":0},"down":{"uv":[27,11,26,12],"texture":0}},"type":"cube","uuid":"a6ef0edf-6515-5ce2-ace5-13ee43896f63"},{"name":"cube","rescale":false,"locked":false,"from":[7.881607385819612,6.304153758976254,9.623095],"to":[8.117857385819612,6.3759737589762535,9.694914999999998],"autouv":0,"color":5,"rotation":[45,0,0],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[12,26,13,27],"texture":0},"east":{"uv":[26,12,27,13],"texture":0},"south":{"uv":[13,26,14,27],"texture":0},"west":{"uv":[26,13,27,14],"texture":0},"up":{"uv":[15,27,14,26],"texture":0},"down":{"uv":[27,14,26,15],"texture":0}},"type":"cube","uuid":"f44f66f3-96b6-b138-a3a0-b98fe20183b5"},{"name":"cube","rescale":false,"locked":false,"from":[7.881607385819612,5.654613758976254,8.850565],"to":[8.117857385819612,5.8121137589762535,8.929314999999999],"autouv":0,"color":5,"rotation":[22.5,0,0],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[6,26,7,27],"texture":0},"east":{"uv":[26,6,27,7],"texture":0},"south":{"uv":[7,26,8,27],"texture":0},"west":{"uv":[26,7,27,8],"texture":0},"up":{"uv":[9,27,8,26],"texture":0},"down":{"uv":[27,8,26,9],"texture":0}},"type":"cube","uuid":"7358f7bd-21fe-fa4e-852a-c39cad932533"},{"name":"cube","rescale":false,"locked":false,"from":[7.881607385819612,5.083843758976253,7.960624999999999],"to":[8.117857385819612,5.241343758976253,8.039375],"autouv":0,"color":3,"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[25,16,26,17],"texture":0},"east":{"uv":[17,25,18,26],"texture":0},"south":{"uv":[25,17,26,18],"texture":0},"west":{"uv":[18,25,19,26],"texture":0},"up":{"uv":[26,19,25,18],"texture":0},"down":{"uv":[20,25,19,26],"texture":0}},"type":"cube","uuid":"bd0729b6-c361-7568-1e19-e278ab9b5a16"},{"name":"cube","rescale":false,"locked":false,"from":[7.881607385819612,4.956393758976253,7.888285],"to":[8.117857385819612,5.507643758976253,7.967035],"autouv":0,"color":3,"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[15,26,16,27],"texture":0},"east":{"uv":[26,15,27,16],"texture":0},"south":{"uv":[16,26,17,27],"texture":0},"west":{"uv":[26,16,27,17],"texture":0},"up":{"uv":[18,27,17,26],"texture":0},"down":{"uv":[27,17,26,18],"texture":0}},"type":"cube","uuid":"fa61267d-8cba-f6d1-ca9a-5ae77edde4fe"},{"name":"cube","rescale":false,"locked":false,"from":[5.845677385819612,5.767313758976254,7.888285],"to":[6.081927385819612,5.924813758976253,7.967035],"autouv":0,"color":2,"rotation":[0,0,45],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[6,28,7,29],"texture":0},"east":{"uv":[28,6,29,7],"texture":0},"south":{"uv":[7,28,8,29],"texture":0},"west":{"uv":[28,7,29,8],"texture":0},"up":{"uv":[9,29,8,28],"texture":0},"down":{"uv":[29,8,28,9],"texture":0}},"type":"cube","uuid":"ee8baadd-6551-149d-c851-1a30c13b5685"},{"name":"cube","rescale":false,"locked":false,"from":[5.766927385819612,5.688563758976253,7.888285],"to":[6.003177385819612,5.846063758976253,7.967035],"autouv":0,"color":0,"rotation":[0,0,45],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[12,28,13,29],"texture":0},"east":{"uv":[28,12,29,13],"texture":0},"south":{"uv":[13,28,14,29],"texture":0},"west":{"uv":[28,13,29,14],"texture":0},"up":{"uv":[15,29,14,28],"texture":0},"down":{"uv":[29,14,28,15],"texture":0}},"type":"cube","uuid":"b57a05b9-fca5-d065-b298-a743a93d820f"},{"name":"cube","rescale":false,"locked":false,"from":[5.766927385819612,5.924813758976253,7.888285],"to":[5.9244273858196115,6.0823137589762535,7.967035],"autouv":0,"color":4,"rotation":[0,0,45],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[9,28,10,29],"texture":0},"east":{"uv":[28,9,29,10],"texture":0},"south":{"uv":[10,28,11,29],"texture":0},"west":{"uv":[28,10,29,11],"texture":0},"up":{"uv":[12,29,11,28],"texture":0},"down":{"uv":[29,11,28,12],"texture":0}},"type":"cube","uuid":"165cb38c-3996-8b4b-2eba-7874f43edb12"},{"name":"cube","rescale":false,"locked":false,"from":[5.688177385819611,5.846063758976253,7.888285],"to":[5.845677385819612,6.003563758976253,7.967035],"autouv":0,"color":2,"rotation":[0,0,45],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[15,28,16,29],"texture":0},"east":{"uv":[28,15,29,16],"texture":0},"south":{"uv":[16,28,17,29],"texture":0},"west":{"uv":[28,16,29,17],"texture":0},"up":{"uv":[18,29,17,28],"texture":0},"down":{"uv":[29,17,28,18],"texture":0}},"type":"cube","uuid":"96ae7630-73e6-acc8-cac3-81ad295b0217"},{"name":"cube","rescale":false,"locked":false,"from":[7.881607385819612,4.956393758976253,8.032965],"to":[8.117857385819612,5.507643758976253,8.111715],"autouv":0,"color":5,"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[18,26,19,27],"texture":0},"east":{"uv":[26,18,27,19],"texture":0},"south":{"uv":[19,26,20,27],"texture":0},"west":{"uv":[26,19,27,20],"texture":0},"up":{"uv":[21,27,20,26],"texture":0},"down":{"uv":[27,20,26,21],"texture":0}},"type":"cube","uuid":"cae988a9-afc6-69f7-91cf-d2d1c2f5080a"},{"name":"cube","rescale":false,"locked":false,"from":[7.251607385819612,4.9263437589762535,7.881875],"to":[8.747857385819612,5.083843758976253,8.118125],"autouv":0,"color":6,"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[3,26,4,27],"texture":0},"east":{"uv":[26,3,27,4],"texture":0},"south":{"uv":[4,26,5,27],"texture":0},"west":{"uv":[26,4,27,5],"texture":0},"up":{"uv":[6,27,5,26],"texture":0},"down":{"uv":[27,5,26,6],"texture":0}},"type":"cube","uuid":"7feef681-44c5-6971-40a6-35e9e0511e7e"},{"name":"cube","rescale":false,"locked":false,"from":[7.881607385819612,3.193843758976253,7.881875],"to":[8.117857385819612,4.9263437589762535,8.118125],"autouv":0,"color":3,"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[27,0,28,1],"texture":0},"east":{"uv":[1,27,2,28],"texture":0},"south":{"uv":[27,1,28,2],"texture":0},"west":{"uv":[2,27,3,28],"texture":0},"up":{"uv":[28,3,27,2],"texture":0},"down":{"uv":[4,27,3,28],"texture":0}},"type":"cube","uuid":"9dd319c0-0bde-4cbd-b486-ca345ef86b94"},{"name":"cube","rescale":false,"locked":false,"from":[7.881607385819612,2.9575937589762535,7.881875],"to":[8.117857385819612,3.193843758976253,8.118125],"autouv":0,"color":2,"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[18,28,19,29],"texture":0},"east":{"uv":[28,18,29,19],"texture":0},"south":{"uv":[19,28,20,29],"texture":0},"west":{"uv":[28,19,29,20],"texture":0},"up":{"uv":[21,29,20,28],"texture":0},"down":{"uv":[29,20,28,21],"texture":0}},"type":"cube","uuid":"84f26a2f-d716-edcc-9235-f20a810c7fb9"},{"name":"cube","rescale":false,"locked":false,"from":[8.747857385819612,4.847593758976253,7.881875],"to":[8.905357385819611,5.713843758976253,8.118125],"autouv":0,"color":4,"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[24,26,25,27],"texture":0},"east":{"uv":[26,24,27,25],"texture":0},"south":{"uv":[25,26,26,27],"texture":0},"west":{"uv":[26,25,27,26],"texture":0},"up":{"uv":[27,27,26,26],"texture":0},"down":{"uv":[1,27,0,28],"texture":0}},"type":"cube","uuid":"3c0f4a35-0435-6c7b-7bc0-2f2662be6709"},{"name":"cube","rescale":false,"locked":false,"from":[6.911487385819612,5.743263758976253,7.881875],"to":[7.023627385819612,5.855403758976253,8.118125],"autouv":0,"color":7,"rotation":[0,0,45],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[27,3,28,4],"texture":0},"east":{"uv":[4,27,5,28],"texture":0},"south":{"uv":[27,4,28,5],"texture":0},"west":{"uv":[5,27,6,28],"texture":0},"up":{"uv":[28,6,27,5],"texture":0},"down":{"uv":[7,27,6,28],"texture":0}},"type":"cube","uuid":"cc08c381-94cc-d442-def5-668497a6efd4"},{"name":"cube","rescale":false,"locked":false,"from":[5.408767385819612,6.577763758976253,7.881875],"to":[5.520907385819612,6.689903758976254,8.118125],"autouv":0,"color":3,"rotation":[0,0,45],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[27,9,28,10],"texture":0},"east":{"uv":[10,27,11,28],"texture":0},"south":{"uv":[27,10,28,11],"texture":0},"west":{"uv":[11,27,12,28],"texture":0},"up":{"uv":[28,12,27,11],"texture":0},"down":{"uv":[13,27,12,28],"texture":0}},"type":"cube","uuid":"cf4d5804-7fee-6c57-7590-37e36ef58262"},{"name":"cube","rescale":false,"locked":false,"from":[5.074657385819612,6.2436537589762535,7.881875],"to":[5.186797385819612,6.355793758976253,8.118125],"autouv":0,"color":3,"rotation":[0,0,45],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[27,12,28,13],"texture":0},"east":{"uv":[13,27,14,28],"texture":0},"south":{"uv":[27,13,28,14],"texture":0},"west":{"uv":[14,27,15,28],"texture":0},"up":{"uv":[28,15,27,14],"texture":0},"down":{"uv":[16,27,15,28],"texture":0}},"type":"cube","uuid":"e64e51cf-c148-1421-f514-2d94cdb2e7d2"},{"name":"cube","rescale":false,"locked":false,"from":[6.299717385819612,5.1299637589762535,7.881875],"to":[6.411857385819612,5.242103758976253,8.118125],"autouv":0,"color":1,"rotation":[0,0,45],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[27,6,28,7],"texture":0},"east":{"uv":[7,27,8,28],"texture":0},"south":{"uv":[27,7,28,8],"texture":0},"west":{"uv":[8,27,9,28],"texture":0},"up":{"uv":[28,9,27,8],"texture":0},"down":{"uv":[10,27,9,28],"texture":0}},"type":"cube","uuid":"e6c01e77-7784-6b7b-f92d-78085170cb37"},{"name":"cube","rescale":false,"locked":false,"from":[7.094107385819612,4.768843758976253,7.881875],"to":[7.251607385819612,5.241343758976253,8.118125],"autouv":0,"color":0,"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[21,26,22,27],"texture":0},"east":{"uv":[26,21,27,22],"texture":0},"south":{"uv":[22,26,23,27],"texture":0},"west":{"uv":[26,22,27,23],"texture":0},"up":{"uv":[24,27,23,26],"texture":0},"down":{"uv":[27,23,26,24],"texture":0}},"type":"cube","uuid":"ae40e8c4-06bd-e785-1db6-d90926045b11"},{"name":"cube","rescale":false,"locked":false,"from":[7.426507385819612,5.312533758976253,7.960624999999999],"to":[7.5840073858196115,5.548783758976253,8.039375],"autouv":0,"color":3,"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[23,24,24,25],"texture":0},"east":{"uv":[24,23,25,24],"texture":0},"south":{"uv":[24,24,25,25],"texture":0},"west":{"uv":[0,25,1,26],"texture":0},"up":{"uv":[26,1,25,0],"texture":0},"down":{"uv":[2,25,1,26],"texture":0}},"type":"cube","uuid":"e40ab3b5-14e6-6483-9b87-6efda075f0bd"},{"name":"cube","rescale":false,"locked":false,"from":[8.535237385819611,5.430663758976253,7.960624999999999],"to":[8.613987385819613,5.588163758976253,8.039375],"autouv":0,"color":7,"rotation":[0,0,-22.5],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[25,1,26,2],"texture":0},"east":{"uv":[2,25,3,26],"texture":0},"south":{"uv":[25,2,26,3],"texture":0},"west":{"uv":[3,25,4,26],"texture":0},"up":{"uv":[26,4,25,3],"texture":0},"down":{"uv":[5,25,4,26],"texture":0}},"type":"cube","uuid":"327e1269-5433-ba59-ea08-a969a165c69b"},{"name":"cube","rescale":false,"locked":false,"from":[9.332717385819612,5.9279637589762535,7.960624999999999],"to":[9.490217385819612,6.164213758976253,8.039375],"autouv":0,"color":4,"rotation":[0,0,-45],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[25,4,26,5],"texture":0},"east":{"uv":[5,25,6,26],"texture":0},"south":{"uv":[25,5,26,6],"texture":0},"west":{"uv":[6,25,7,26],"texture":0},"up":{"uv":[26,7,25,6],"texture":0},"down":{"uv":[8,25,7,26],"texture":0}},"type":"cube","uuid":"03a3b87e-c095-3a7e-6c6b-e16da53f98fa"},{"name":"cube","rescale":false,"locked":false,"from":[8.638127385819612,5.6910537589762535,7.960624999999999],"to":[8.795627385819612,5.769803758976254,8.039375],"autouv":0,"color":1,"rotation":[0,0,-22.5],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[25,10,26,11],"texture":0},"east":{"uv":[11,25,12,26],"texture":0},"south":{"uv":[25,11,26,12],"texture":0},"west":{"uv":[12,25,13,26],"texture":0},"up":{"uv":[26,13,25,12],"texture":0},"down":{"uv":[14,25,13,26],"texture":0}},"type":"cube","uuid":"783d48f6-ecaf-ca99-9420-9f92fda5b048"},{"name":"cube","rescale":false,"locked":false,"from":[6.9299173858196115,5.725983758976254,7.960624999999999],"to":[7.087417385819612,5.883483758976253,8.039375],"autouv":0,"color":0,"rotation":[0,0,22.5],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[25,19,26,20],"texture":0},"east":{"uv":[20,25,21,26],"texture":0},"south":{"uv":[25,20,26,21],"texture":0},"west":{"uv":[21,25,22,26],"texture":0},"up":{"uv":[26,22,25,21],"texture":0},"down":{"uv":[23,25,22,26],"texture":0}},"type":"cube","uuid":"391a6876-30f1-0ff3-aab2-ec4de398f66c"},{"name":"cube","rescale":false,"locked":false,"from":[7.699957385819612,5.592473758976253,7.960624999999999],"to":[7.778707385819612,5.671223758976254,8.039375],"autouv":0,"color":1,"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[25,7,26,8],"texture":0},"east":{"uv":[8,25,9,26],"texture":0},"south":{"uv":[25,8,26,9],"texture":0},"west":{"uv":[9,25,10,26],"texture":0},"up":{"uv":[26,10,25,9],"texture":0},"down":{"uv":[11,25,10,26],"texture":0}},"type":"cube","uuid":"f9217373-8032-5ed3-5557-2f2e78d49991"},{"name":"cube","rescale":false,"locked":false,"from":[7.524467385819611,6.477153758976254,7.960624999999999],"to":[7.7607173858196115,6.6346537589762535,8.039375],"autouv":0,"color":1,"rotation":[0,0,22.5],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[0,20,1,21],"texture":0},"east":{"uv":[20,0,21,1],"texture":0},"south":{"uv":[1,20,2,21],"texture":0},"west":{"uv":[20,1,21,2],"texture":0},"up":{"uv":[3,21,2,20],"texture":0},"down":{"uv":[21,2,20,3],"texture":0}},"type":"cube","uuid":"c93f3efc-f428-f1d6-471f-7835de832551"},{"name":"cube","rescale":false,"locked":false,"from":[7.1174173858196115,6.605893758976253,7.960624999999999],"to":[7.196167385819612,6.763393758976253,8.039375],"autouv":0,"color":2,"rotation":[0,0,45],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[19,16,20,17],"texture":0},"east":{"uv":[17,19,18,20],"texture":0},"south":{"uv":[19,17,20,18],"texture":0},"west":{"uv":[18,19,19,20],"texture":0},"up":{"uv":[20,19,19,18],"texture":0},"down":{"uv":[20,19,19,20],"texture":0}},"type":"cube","uuid":"4a6b8b84-4ad2-f666-fca8-057d6124a880"},{"name":"cube","rescale":false,"locked":false,"from":[7.712107385819611,6.325653758976253,7.960624999999999],"to":[7.790857385819612,6.404403758976253,8.039375],"autouv":0,"color":5,"rotation":[0,0,22.5],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[19,13,20,14],"texture":0},"east":{"uv":[14,19,15,20],"texture":0},"south":{"uv":[19,14,20,15],"texture":0},"west":{"uv":[15,19,16,20],"texture":0},"up":{"uv":[20,16,19,15],"texture":0},"down":{"uv":[17,19,16,20],"texture":0}},"type":"cube","uuid":"e69632d8-7d1d-82bf-9a61-4348bd0c61a2"},{"name":"cube","rescale":false,"locked":false,"from":[7.931687385819612,7.469823758976253,7.960624999999999],"to":[8.010437385819612,7.548573758976254,8.039375],"autouv":0,"color":5,"rotation":[0,0,-45],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[23,19,24,20],"texture":0},"east":{"uv":[20,23,21,24],"texture":0},"south":{"uv":[23,20,24,21],"texture":0},"west":{"uv":[21,23,22,24],"texture":0},"up":{"uv":[24,22,23,21],"texture":0},"down":{"uv":[23,23,22,24],"texture":0}},"type":"cube","uuid":"821ce34e-cefd-c11a-7190-47836d711c7b"},{"name":"cube","rescale":false,"locked":false,"from":[7.764137385819612,7.530333758976253,7.960624999999999],"to":[8.000387385819613,7.766583758976253,8.039375],"autouv":0,"color":2,"rotation":[0,0,-22.5],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[23,16,24,17],"texture":0},"east":{"uv":[17,23,18,24],"texture":0},"south":{"uv":[23,17,24,18],"texture":0},"west":{"uv":[18,23,19,24],"texture":0},"up":{"uv":[24,19,23,18],"texture":0},"down":{"uv":[20,23,19,24],"texture":0}},"type":"cube","uuid":"a5dd3cda-f911-2221-9998-9ab6b990208c"},{"name":"cube","rescale":false,"locked":false,"from":[7.6626273858196114,7.801853758976254,7.960624999999999],"to":[7.820127385819612,8.274353758976254,8.039375],"autouv":0,"color":6,"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[23,13,24,14],"texture":0},"east":{"uv":[14,23,15,24],"texture":0},"south":{"uv":[23,14,24,15],"texture":0},"west":{"uv":[15,23,16,24],"texture":0},"up":{"uv":[24,16,23,15],"texture":0},"down":{"uv":[17,23,16,24],"texture":0}},"type":"cube","uuid":"039c61ba-a12b-39f5-3a18-45f2b5de2b0f"},{"name":"cube","rescale":false,"locked":false,"from":[7.793297385819612,8.303823758976254,7.960624999999999],"to":[8.029547385819612,8.540073758976252,8.039375],"autouv":0,"color":6,"rotation":[0,0,22.5],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[23,10,24,11],"texture":0},"east":{"uv":[11,23,12,24],"texture":0},"south":{"uv":[23,11,24,12],"texture":0},"west":{"uv":[12,23,13,24],"texture":0},"up":{"uv":[24,13,23,12],"texture":0},"down":{"uv":[14,23,13,24],"texture":0}},"type":"cube","uuid":"5dab3457-17a6-e29a-dce4-49c7368e2a40"},{"name":"cube","rescale":false,"locked":false,"from":[7.985577385819612,8.505313758976254,7.960624999999999],"to":[8.221827385819612,8.584063758976253,8.039375],"autouv":0,"color":6,"rotation":[0,0,45],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[23,7,24,8],"texture":0},"east":{"uv":[8,23,9,24],"texture":0},"south":{"uv":[23,8,24,9],"texture":0},"west":{"uv":[9,23,10,24],"texture":0},"up":{"uv":[24,10,23,9],"texture":0},"down":{"uv":[11,23,10,24],"texture":0}},"type":"cube","uuid":"edf78c83-7bcc-259d-c4fb-a7df710235c5"},{"name":"cube","rescale":false,"locked":false,"from":[7.454877385819612,8.210183758976253,7.960624999999999],"to":[7.533627385819612,8.288933758976253,8.039375],"autouv":0,"color":1,"rotation":[0,0,-22.5],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[23,4,24,5],"texture":0},"east":{"uv":[5,23,6,24],"texture":0},"south":{"uv":[23,5,24,6],"texture":0},"west":{"uv":[6,23,7,24],"texture":0},"up":{"uv":[24,7,23,6],"texture":0},"down":{"uv":[8,23,7,24],"texture":0}},"type":"cube","uuid":"f0287ccd-d215-c0ca-1059-6da0dd5f73b6"},{"name":"cube","rescale":false,"locked":false,"from":[7.733997385819612,7.457573758976253,7.960624999999999],"to":[7.812747385819612,7.536323758976254,8.039375],"autouv":0,"color":4,"rotation":[0,0,-22.5],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[23,1,24,2],"texture":0},"east":{"uv":[2,23,3,24],"texture":0},"south":{"uv":[23,2,24,3],"texture":0},"west":{"uv":[3,23,4,24],"texture":0},"up":{"uv":[24,4,23,3],"texture":0},"down":{"uv":[5,23,4,24],"texture":0}},"type":"cube","uuid":"ef75cc37-e99a-315b-4c11-58a615383fc6"},{"name":"cube","rescale":false,"locked":false,"from":[7.397067385819612,7.9594237589762535,7.960624999999999],"to":[7.475817385819612,8.038173758976253,8.039375],"autouv":0,"color":5,"rotation":[0,0,45],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[21,22,22,23],"texture":0},"east":{"uv":[22,21,23,22],"texture":0},"south":{"uv":[22,22,23,23],"texture":0},"west":{"uv":[0,23,1,24],"texture":0},"up":{"uv":[24,1,23,0],"texture":0},"down":{"uv":[2,23,1,24],"texture":0}},"type":"cube","uuid":"9b3bb2a6-79a8-498b-96b2-7bfe5cc7b584"},{"name":"cube","rescale":false,"locked":false,"from":[7.458497385819612,7.574283758976254,7.960624999999999],"to":[7.694747385819612,7.810533758976253,8.039375],"autouv":0,"color":5,"rotation":[0,0,22.5],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[18,22,19,23],"texture":0},"east":{"uv":[22,18,23,19],"texture":0},"south":{"uv":[19,22,20,23],"texture":0},"west":{"uv":[22,19,23,20],"texture":0},"up":{"uv":[21,23,20,22],"texture":0},"down":{"uv":[23,20,22,21],"texture":0}},"type":"cube","uuid":"e3a6b84f-f616-e26c-e3ba-c9141886f7bf"},{"name":"cube","rescale":false,"locked":false,"from":[7.632487385819612,7.1572237589762535,7.960624999999999],"to":[7.868737385819612,7.472223758976253,8.039375],"autouv":0,"color":2,"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[15,22,16,23],"texture":0},"east":{"uv":[22,15,23,16],"texture":0},"south":{"uv":[16,22,17,23],"texture":0},"west":{"uv":[22,16,23,17],"texture":0},"up":{"uv":[18,23,17,22],"texture":0},"down":{"uv":[23,17,22,18],"texture":0}},"type":"cube","uuid":"b10b6b68-3fbd-b4ea-c431-114203cac9f9"},{"name":"cube","rescale":false,"locked":false,"from":[7.982987385819612,6.844483758976254,7.960624999999999],"to":[8.297987385819612,7.159483758976253,8.039375],"autouv":0,"color":7,"rotation":[0,0,-22.5],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[12,22,13,23],"texture":0},"east":{"uv":[22,12,23,13],"texture":0},"south":{"uv":[13,22,14,23],"texture":0},"west":{"uv":[22,13,23,14],"texture":0},"up":{"uv":[15,23,14,22],"texture":0},"down":{"uv":[23,14,22,15],"texture":0}},"type":"cube","uuid":"8b864360-09e1-2885-2078-b8a9c9461955"},{"name":"cube","rescale":false,"locked":false,"from":[8.171697385819613,6.3101437589762535,7.960624999999999],"to":[8.250447385819612,6.388893758976254,8.039375],"autouv":0,"color":6,"rotation":[0,0,-22.5],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[9,22,10,23],"texture":0},"east":{"uv":[22,9,23,10],"texture":0},"south":{"uv":[10,22,11,23],"texture":0},"west":{"uv":[22,10,23,11],"texture":0},"up":{"uv":[12,23,11,22],"texture":0},"down":{"uv":[23,11,22,12],"texture":0}},"type":"cube","uuid":"dfcc4a97-c556-2c02-dcdb-b94e7c891fa4"},{"name":"cube","rescale":false,"locked":false,"from":[8.775177385819612,6.577233758976253,7.960624999999999],"to":[8.853927385819611,6.655983758976253,8.039375],"autouv":0,"color":3,"rotation":[0,0,-45],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[6,22,7,23],"texture":0},"east":{"uv":[22,6,23,7],"texture":0},"south":{"uv":[7,22,8,23],"texture":0},"west":{"uv":[22,7,23,8],"texture":0},"up":{"uv":[9,23,8,22],"texture":0},"down":{"uv":[23,8,22,9],"texture":0}},"type":"cube","uuid":"72180e6d-1fbc-6288-1de8-f0f81da2d3ae"},{"name":"cube","rescale":false,"locked":false,"from":[8.201837385819612,6.3828937589762536,7.960624999999999],"to":[8.516837385819612,6.619143758976254,8.039375],"autouv":0,"color":0,"rotation":[0,0,-22.5],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[3,22,4,23],"texture":0},"east":{"uv":[22,3,23,4],"texture":0},"south":{"uv":[4,22,5,23],"texture":0},"west":{"uv":[22,4,23,5],"texture":0},"up":{"uv":[6,23,5,22],"texture":0},"down":{"uv":[23,5,22,6],"texture":0}},"type":"cube","uuid":"069f97f1-752b-c10b-915c-2daab5226d2a"},{"name":"cube","rescale":false,"locked":false,"from":[7.627907385819612,6.574263758976254,7.960624999999999],"to":[7.864157385819611,6.810513758976254,8.039375],"autouv":0,"color":0,"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[0,22,1,23],"texture":0},"east":{"uv":[22,0,23,1],"texture":0},"south":{"uv":[1,22,2,23],"texture":0},"west":{"uv":[22,1,23,2],"texture":0},"up":{"uv":[3,23,2,22],"texture":0},"down":{"uv":[23,2,22,3],"texture":0}},"type":"cube","uuid":"61eb65c2-31f7-45cc-5d88-11ae9d321df4"},{"name":"cube","rescale":false,"locked":false,"from":[7.201027385819612,6.9647037589762535,7.960624999999999],"to":[7.437277385819612,7.200953758976254,8.039375],"autouv":0,"color":3,"rotation":[0,0,22.5],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[21,18,22,19],"texture":0},"east":{"uv":[19,21,20,22],"texture":0},"south":{"uv":[21,19,22,20],"texture":0},"west":{"uv":[20,21,21,22],"texture":0},"up":{"uv":[22,21,21,20],"texture":0},"down":{"uv":[22,21,21,22],"texture":0}},"type":"cube","uuid":"1080a63d-cd40-8d38-b945-8a2c1df93a97"},{"name":"cube","rescale":false,"locked":false,"from":[6.9259273858196115,7.494773758976254,7.960624999999999],"to":[7.004677385819612,7.573523758976253,8.039375],"autouv":0,"color":5,"rotation":[0,0,45],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[21,15,22,16],"texture":0},"east":{"uv":[16,21,17,22],"texture":0},"south":{"uv":[21,16,22,17],"texture":0},"west":{"uv":[17,21,18,22],"texture":0},"up":{"uv":[22,18,21,17],"texture":0},"down":{"uv":[19,21,18,22],"texture":0}},"type":"cube","uuid":"aff2eb44-79d1-58c4-4f0f-e6527e387c55"},{"name":"cube","rescale":false,"locked":false,"from":[6.504477385819611,7.115943758976253,7.960624999999999],"to":[6.661977385819612,7.194693758976253,8.039375],"autouv":0,"color":4,"rotation":[0,0,45],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[21,12,22,13],"texture":0},"east":{"uv":[13,21,14,22],"texture":0},"south":{"uv":[21,13,22,14],"texture":0},"west":{"uv":[14,21,15,22],"texture":0},"up":{"uv":[22,15,21,14],"texture":0},"down":{"uv":[16,21,15,22],"texture":0}},"type":"cube","uuid":"e4749f5f-586c-ba1f-527b-01065b389f52"},{"name":"cube","rescale":false,"locked":false,"from":[6.9566373858196116,6.532173758976254,7.960624999999999],"to":[7.271637385819612,6.689673758976253,8.039375],"autouv":0,"color":7,"rotation":[0,0,22.5],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[21,9,22,10],"texture":0},"east":{"uv":[10,21,11,22],"texture":0},"south":{"uv":[21,10,22,11],"texture":0},"west":{"uv":[11,21,12,22],"texture":0},"up":{"uv":[22,12,21,11],"texture":0},"down":{"uv":[13,21,12,22],"texture":0}},"type":"cube","uuid":"70147bca-4649-7c37-edb0-665685a76377"},{"name":"cube","rescale":false,"locked":false,"from":[7.597767385819612,6.008373758976253,7.960624999999999],"to":[7.834017385819612,6.3233737589762535,8.039375],"autouv":0,"color":4,"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[21,6,22,7],"texture":0},"east":{"uv":[7,21,8,22],"texture":0},"south":{"uv":[21,7,22,8],"texture":0},"west":{"uv":[8,21,9,22],"texture":0},"up":{"uv":[22,9,21,8],"texture":0},"down":{"uv":[10,21,9,22],"texture":0}},"type":"cube","uuid":"77a491b3-858a-a0b3-cd9a-1b32c25d13e8"},{"name":"cube","rescale":false,"locked":false,"from":[8.390547385819612,5.533553758976254,7.960624999999999],"to":[8.548047385819611,6.084803758976253,8.039375],"autouv":0,"color":4,"rotation":[0,0,-22.5],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[21,3,22,4],"texture":0},"east":{"uv":[4,21,5,22],"texture":0},"south":{"uv":[21,4,22,5],"texture":0},"west":{"uv":[5,21,6,22],"texture":0},"up":{"uv":[22,6,21,5],"texture":0},"down":{"uv":[7,21,6,22],"texture":0}},"type":"cube","uuid":"4e07deca-9ed7-db69-315d-f2872951d946"},{"name":"cube","rescale":false,"locked":false,"from":[10.182097385819612,10.688853758976254,7.960624999999999],"to":[10.418347385819612,10.767603758976254,8.039375],"autouv":0,"color":7,"rotation":[0,0,45],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[17,1,18,2],"texture":0},"east":{"uv":[2,17,3,18],"texture":0},"south":{"uv":[17,2,18,3],"texture":0},"west":{"uv":[3,17,4,18],"texture":0},"up":{"uv":[18,4,17,3],"texture":0},"down":{"uv":[5,17,4,18],"texture":0}},"type":"cube","uuid":"2e533da7-0979-07eb-09fc-7bc323f2bb4c"},{"name":"cube","rescale":false,"locked":false,"from":[7.671807385819612,11.214033758976253,7.960624999999999],"to":[7.829307385819612,11.450283758976255,8.039375],"autouv":0,"color":2,"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[15,16,16,17],"texture":0},"east":{"uv":[16,15,17,16],"texture":0},"south":{"uv":[16,16,17,17],"texture":0},"west":{"uv":[0,17,1,18],"texture":0},"up":{"uv":[18,1,17,0],"texture":0},"down":{"uv":[2,17,1,18],"texture":0}},"type":"cube","uuid":"b7507ce2-9962-19bf-5b26-e9914afa9748"},{"name":"cube","rescale":false,"locked":false,"from":[6.466827385819612,10.765033758976255,7.960624999999999],"to":[6.624327385819612,10.922533758976254,8.039375],"autouv":0,"color":0,"rotation":[0,0,-22.5],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[12,16,13,17],"texture":0},"east":{"uv":[16,12,17,13],"texture":0},"south":{"uv":[13,16,14,17],"texture":0},"west":{"uv":[16,13,17,14],"texture":0},"up":{"uv":[15,17,14,16],"texture":0},"down":{"uv":[17,14,16,15],"texture":0}},"type":"cube","uuid":"53b8477c-f8cb-fe84-f7cf-1e0d800a3aef"},{"name":"cube","rescale":false,"locked":false,"from":[7.641667385819612,10.511273758976253,7.960624999999999],"to":[7.7991673858196116,11.141273758976254,8.039375],"autouv":0,"color":0,"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[9,16,10,17],"texture":0},"east":{"uv":[16,9,17,10],"texture":0},"south":{"uv":[10,16,11,17],"texture":0},"west":{"uv":[16,10,17,11],"texture":0},"up":{"uv":[12,17,11,16],"texture":0},"down":{"uv":[17,11,16,12],"texture":0}},"type":"cube","uuid":"64987c62-9bbc-4da8-130f-6d95be0c4705"},{"name":"cube","rescale":false,"locked":false,"from":[7.7228973858196115,9.169873758976253,7.960624999999999],"to":[7.801647385819612,10.114873758976254,8.039375],"autouv":0,"color":7,"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[6,16,7,17],"texture":0},"east":{"uv":[16,6,17,7],"texture":0},"south":{"uv":[7,16,8,17],"texture":0},"west":{"uv":[16,7,17,8],"texture":0},"up":{"uv":[9,17,8,16],"texture":0},"down":{"uv":[17,8,16,9],"texture":0}},"type":"cube","uuid":"d4ad4e06-ef78-a2fb-de8a-a454d0e46593"},{"name":"cube","rescale":false,"locked":false,"from":[8.432777385819612,9.768913758976254,7.960624999999999],"to":[8.511527385819612,9.847663758976253,8.039375],"autouv":0,"color":1,"rotation":[0,0,22.5],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[3,16,4,17],"texture":0},"east":{"uv":[16,3,17,4],"texture":0},"south":{"uv":[4,16,5,17],"texture":0},"west":{"uv":[16,4,17,5],"texture":0},"up":{"uv":[6,17,5,16],"texture":0},"down":{"uv":[17,5,16,6],"texture":0}},"type":"cube","uuid":"859aac9a-9a52-427e-e054-847a6f5ee357"},{"name":"cube","rescale":false,"locked":false,"from":[8.987017385819613,11.240483758976254,7.960624999999999],"to":[9.223267385819613,11.397983758976252,8.039375],"autouv":0,"color":7,"rotation":[0,0,22.5],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[0,16,1,17],"texture":0},"east":{"uv":[16,0,17,1],"texture":0},"south":{"uv":[1,16,2,17],"texture":0},"west":{"uv":[16,1,17,2],"texture":0},"up":{"uv":[3,17,2,16],"texture":0},"down":{"uv":[17,2,16,3],"texture":0}},"type":"cube","uuid":"2ec0d11f-b36a-d992-e2b7-5493157ff6dd"},{"name":"cube","rescale":false,"locked":false,"from":[6.926767385819612,9.642653758976254,7.960624999999999],"to":[7.005517385819612,9.721403758976253,8.039375],"autouv":0,"color":7,"rotation":[0,0,-22.5],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[15,12,16,13],"texture":0},"east":{"uv":[13,15,14,16],"texture":0},"south":{"uv":[15,13,16,14],"texture":0},"west":{"uv":[14,15,15,16],"texture":0},"up":{"uv":[16,15,15,14],"texture":0},"down":{"uv":[16,15,15,16],"texture":0}},"type":"cube","uuid":"04762e72-9b49-efab-a4f2-cdaff1d76d82"},{"name":"cube","rescale":false,"locked":false,"from":[9.106897385819611,9.462653758976252,7.960624999999999],"to":[9.185647385819612,9.620153758976254,8.039375],"autouv":0,"color":2,"rotation":[0,0,45],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[15,9,16,10],"texture":0},"east":{"uv":[10,15,11,16],"texture":0},"south":{"uv":[15,10,16,11],"texture":0},"west":{"uv":[11,15,12,16],"texture":0},"up":{"uv":[16,12,15,11],"texture":0},"down":{"uv":[13,15,12,16],"texture":0}},"type":"cube","uuid":"de93da4e-dbbc-93f6-75c7-df21188232f4"},{"name":"cube","rescale":false,"locked":false,"from":[6.728547385819612,8.758203758976254,7.960624999999999],"to":[6.807297385819612,8.915703758976253,8.039375],"autouv":0,"color":1,"rotation":[0,0,-45],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[15,6,16,7],"texture":0},"east":{"uv":[7,15,8,16],"texture":0},"south":{"uv":[15,7,16,8],"texture":0},"west":{"uv":[8,15,9,16],"texture":0},"up":{"uv":[16,9,15,8],"texture":0},"down":{"uv":[10,15,9,16],"texture":0}},"type":"cube","uuid":"feec73eb-ebf6-1dfd-8268-efa9cacf6532"},{"name":"cube","rescale":false,"locked":false,"from":[7.1456173858196115,9.259813758976254,7.960624999999999],"to":[7.224367385819612,9.338563758976253,8.039375],"autouv":0,"color":0,"rotation":[0,0,-22.5],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[15,3,16,4],"texture":0},"east":{"uv":[4,15,5,16],"texture":0},"south":{"uv":[15,4,16,5],"texture":0},"west":{"uv":[5,15,6,16],"texture":0},"up":{"uv":[16,6,15,5],"texture":0},"down":{"uv":[7,15,6,16],"texture":0}},"type":"cube","uuid":"698d3610-f482-ff3b-6778-6d7284664c61"},{"name":"cube","rescale":false,"locked":false,"from":[6.926767385819612,9.721403758976253,7.960624999999999],"to":[7.005517385819612,9.878903758976254,8.039375],"autouv":0,"color":3,"rotation":[0,0,-22.5],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[15,0,16,1],"texture":0},"east":{"uv":[1,15,2,16],"texture":0},"south":{"uv":[15,1,16,2],"texture":0},"west":{"uv":[2,15,3,16],"texture":0},"up":{"uv":[16,3,15,2],"texture":0},"down":{"uv":[4,15,3,16],"texture":0}},"type":"cube","uuid":"d75e3d37-eb93-b674-6f44-80fa9a9faaf1"},{"name":"cube","rescale":false,"locked":false,"from":[7.6973473858196115,10.073823758976253,7.960624999999999],"to":[7.854847385819612,10.388823758976255,8.039375],"autouv":0,"color":6,"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[12,14,13,15],"texture":0},"east":{"uv":[14,12,15,13],"texture":0},"south":{"uv":[13,14,14,15],"texture":0},"west":{"uv":[14,13,15,14],"texture":0},"up":{"uv":[15,15,14,14],"texture":0},"down":{"uv":[1,15,0,16],"texture":0}},"type":"cube","uuid":"6ec78c46-0e3e-595f-434c-a479479e42ff"},{"name":"cube","rescale":false,"locked":false,"from":[8.604417385819612,10.250053758976254,7.960624999999999],"to":[8.840667385819613,10.407553758976253,8.039375],"autouv":0,"color":2,"rotation":[0,0,22.5],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[9,14,10,15],"texture":0},"east":{"uv":[14,9,15,10],"texture":0},"south":{"uv":[10,14,11,15],"texture":0},"west":{"uv":[14,10,15,11],"texture":0},"up":{"uv":[12,15,11,14],"texture":0},"down":{"uv":[15,11,14,12],"texture":0}},"type":"cube","uuid":"62c39be6-0ea2-6331-3a36-2c0960e21bcf"},{"name":"cube","rescale":false,"locked":false,"from":[6.707917385819612,10.104233758976253,7.960624999999999],"to":[6.786667385819612,10.261733758976252,8.039375],"autouv":0,"color":2,"rotation":[0,0,-22.5],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[6,14,7,15],"texture":0},"east":{"uv":[14,6,15,7],"texture":0},"south":{"uv":[7,14,8,15],"texture":0},"west":{"uv":[14,7,15,8],"texture":0},"up":{"uv":[9,15,8,14],"texture":0},"down":{"uv":[15,8,14,9],"texture":0}},"type":"cube","uuid":"5d53b581-7a21-2d63-8f28-f25222a3aa2d"},{"name":"cube","rescale":false,"locked":false,"from":[9.449607385819611,9.920233758976252,7.960624999999999],"to":[9.685857385819611,9.998983758976253,8.039375],"autouv":0,"color":6,"rotation":[0,0,45],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[3,14,4,15],"texture":0},"east":{"uv":[14,3,15,4],"texture":0},"south":{"uv":[4,14,5,15],"texture":0},"west":{"uv":[14,4,15,5],"texture":0},"up":{"uv":[6,15,5,14],"texture":0},"down":{"uv":[15,5,14,6],"texture":0}},"type":"cube","uuid":"4a4fef0c-3ffa-00fb-5594-6aa096ec0d25"},{"name":"cube","rescale":false,"locked":false,"from":[7.385807385819612,8.058333758976254,7.960624999999999],"to":[7.464557385819612,8.215833758976252,8.039375],"autouv":0,"color":2,"rotation":[0,0,-45],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[0,14,1,15],"texture":0},"east":{"uv":[14,0,15,1],"texture":0},"south":{"uv":[1,14,2,15],"texture":0},"west":{"uv":[14,1,15,2],"texture":0},"up":{"uv":[3,15,2,14],"texture":0},"down":{"uv":[15,2,14,3],"texture":0}},"type":"cube","uuid":"a50cee7b-c9db-2e5a-a11e-e92ae13db7f1"},{"name":"cube","rescale":false,"locked":false,"from":[7.485017385819612,8.361693758976253,7.960624999999999],"to":[7.642517385819612,8.519193758976254,8.039375],"autouv":0,"color":5,"rotation":[0,0,-22.5],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[13,10,14,11],"texture":0},"east":{"uv":[11,13,12,14],"texture":0},"south":{"uv":[13,11,14,12],"texture":0},"west":{"uv":[12,13,13,14],"texture":0},"up":{"uv":[14,13,13,12],"texture":0},"down":{"uv":[14,13,13,14],"texture":0}},"type":"cube","uuid":"883dd50f-204e-a525-a0de-2840924654ad"},{"name":"cube","rescale":false,"locked":false,"from":[8.188377385819612,9.178883758976253,7.960624999999999],"to":[8.345877385819612,9.415133758976253,8.039375],"autouv":0,"color":4,"rotation":[0,0,22.5],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[13,7,14,8],"texture":0},"east":{"uv":[8,13,9,14],"texture":0},"south":{"uv":[13,8,14,9],"texture":0},"west":{"uv":[9,13,10,14],"texture":0},"up":{"uv":[14,10,13,9],"texture":0},"down":{"uv":[11,13,10,14],"texture":0}},"type":"cube","uuid":"109e4c27-1860-cc16-0c3d-4f34b3e0598b"},{"name":"cube","rescale":false,"locked":false,"from":[8.685447385819613,9.162563758976253,7.960624999999999],"to":[8.842947385819611,9.241313758976254,8.039375],"autouv":0,"color":7,"rotation":[0,0,45],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[13,4,14,5],"texture":0},"east":{"uv":[5,13,6,14],"texture":0},"south":{"uv":[13,5,14,6],"texture":0},"west":{"uv":[6,13,7,14],"texture":0},"up":{"uv":[14,7,13,6],"texture":0},"down":{"uv":[8,13,7,14],"texture":0}},"type":"cube","uuid":"a0738066-6479-1dbc-48bb-8c9dff7c5616"},{"name":"cube","rescale":false,"locked":false,"from":[7.692767385819612,8.603993758976253,7.960624999999999],"to":[7.8502673858196115,9.233993758976254,8.039375],"autouv":0,"color":5,"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[13,1,14,2],"texture":0},"east":{"uv":[2,13,3,14],"texture":0},"south":{"uv":[13,2,14,3],"texture":0},"west":{"uv":[3,13,4,14],"texture":0},"up":{"uv":[14,4,13,3],"texture":0},"down":{"uv":[5,13,4,14],"texture":0}},"type":"cube","uuid":"905d791b-84ad-d234-0f23-9049249ea6d0"},{"name":"cube","rescale":false,"locked":false,"from":[7.115487385819612,9.108303758976254,7.960624999999999],"to":[7.194237385819612,9.187053758976253,8.039375],"autouv":0,"color":4,"rotation":[0,0,-22.5],"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[11,12,12,13],"texture":0},"east":{"uv":[12,11,13,12],"texture":0},"south":{"uv":[12,12,13,13],"texture":0},"west":{"uv":[0,13,1,14],"texture":0},"up":{"uv":[14,1,13,0],"texture":0},"down":{"uv":[2,13,1,14],"texture":0}},"type":"cube","uuid":"9c7d2a9a-24ad-5b18-9702-3332ecefc7f6"},{"name":"cube","rescale":false,"locked":false,"from":[7.794197385819611,5.611493758976254,7.960624999999999],"to":[8.187947385819612,12.068993758976255,8.039375],"autouv":0,"color":3,"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[0,0,1,5],"texture":0},"east":{"uv":[1,0,2,5],"texture":0},"south":{"uv":[2,0,3,5],"texture":0},"west":{"uv":[3,0,4,5],"texture":0},"up":{"uv":[6,1,5,0],"texture":0},"down":{"uv":[2,5,1,6],"texture":0}},"type":"cube","uuid":"b06d9fab-5865-dea9-7fdb-1031460d421e"},{"name":"cube","rescale":false,"locked":false,"from":[7.636697385819612,5.611493758976254,7.960624999999999],"to":[8.345447385819611,6.083993758976254,8.039375],"autouv":0,"color":1,"origin":[7.999997385819611,8.000003758976252,7.999995],"faces":{"north":{"uv":[25,22,26,23],"texture":0},"east":{"uv":[23,25,24,26],"texture":0},"south":{"uv":[25,23,26,24],"texture":0},"west":{"uv":[24,25,25,26],"texture":0},"up":{"uv":[26,25,25,24],"texture":0},"down":{"uv":[26,25,25,26],"texture":0}},"type":"cube","uuid":"3b7f0350-cb50-d83e-98ac-3e6912893592"}],"outliner":[{"name":"Everything","origin":[8,8,8],"color":0,"uuid":"470dc570-cac2-6bad-a533-ca69ff46142f","export":true,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"Blade","origin":[8,8,8],"color":0,"uuid":"f03d84b2-55db-3e84-5525-a14c57b06a9f","export":true,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["636706d3-3b05-079c-b18e-3622e474e61c","8c62e0fd-f705-5e90-50c2-964fc01b64f0","b16144f7-a358-4a0c-7e85-c68c37a98277","b1a4543b-773b-14cb-96f5-fd3452676448","09bda4ee-a4c5-102d-d8aa-8f9cc811c590","1b2956e6-50dc-aced-c372-258aa53dddab","e109909f-352a-eb77-34b5-d26bdf6319d5","8e79ea83-ad2b-c96b-9c9b-64c23de7bd92","cb7bbaab-c14b-9534-b550-5b3153e32e31","00d02aba-5a1e-fb98-8b9c-d53a379bcf70","21dc5148-e8e0-cc46-b53b-7f1828d22abf","94c187b0-adae-a251-e164-0190b21f94d2","ed940ede-8feb-9bcd-4063-9c8e970288fe","31841281-42c5-fdad-fdd5-cf47227153c5","8f6780fc-02be-3cc3-ccc6-490d2d16c8ad","d4277da5-bedc-c118-2ec0-a8c4eb3cd150","60e19254-a3d7-236f-ba2a-77f520eb426e","259bf34c-ca70-25c6-573b-8aaa18b679a3","527a0170-4431-5f6e-0985-a4f29082f72b","efc530d8-6e49-d716-edb7-e96ad8c514a7","5e34c9eb-e63e-e95d-b41d-bd19c8f15c70","7a5caf04-1fbf-c9a2-0cf9-7e1d953a7724","72522637-e007-ceff-65d6-db6c3530dd04","e3b29329-001a-dcc2-7f65-3bdfcd349c2b","3948f493-89f3-daf6-eb4b-c9dc6fab1d8f","109441a4-7610-fc70-1cd9-5af653b84c8d","d724f822-17d9-5d82-383b-19a185e39291","673769dd-53d3-f9b1-12b1-a1e5d5666585","41a7a722-8532-2349-5c3a-da0d300126ca","0cfec6c5-22df-cdf0-def9-c78db01908cd","23a5bb58-e5da-e377-8a63-9146d2af6aa4","3170f6c8-d4a8-e8b1-4e5e-5083ac71e9d4","20d63373-b136-0381-a4f4-d24b3c075f9e","1aa8fb4b-2a0b-a7d7-940a-e392fdbe3e9b","eca9988c-d84d-7041-012a-b2444247e449","e14be52b-32a9-8717-b5c0-67e471734647","0838b762-05f1-9d90-c814-faa886cf3718","a44bac06-cb4d-5cb0-9ed7-944d9853855a","f50074d5-f75b-04c9-adb2-3b6a88dd7c13","75b00aaa-6a4c-b990-6841-ceb40c0e4067","084ec73e-0c07-58a5-b668-cd4c5695c145","a5beb20d-0342-8ebf-93bb-e3f52522b6ba","4c24706f-4dcf-3bf9-c58d-2979ae109a27","8d141d76-29ac-58ca-d0ba-1cc34b6d3010","4c614b80-bbd1-3fa2-6a01-51f7c74dca8f","5ad869c0-f2c8-82fd-7ce1-70e0f3313650","5cf9cadd-1c6f-d822-0527-5ff367bed34a","64f1b38d-75da-a16f-f185-f74a22a88edf","e56373f0-bf52-2106-c8c7-215f94b13a95","334fc68b-8bc9-7b05-de8e-9d66bf432eff","a983234d-df82-d8ff-1fa0-1dd2f03ba338","026238c0-0557-b6b8-4db6-7737db6dd3da","85695d43-faef-2804-c0b5-dc71045722a9","eb8b7956-7c1a-c23f-bedb-40b5f6771a3f","8a6003f9-e0a6-515f-d41b-572e0ec11780","47e97d2c-49b3-b583-e390-a88ced4f162b","fe301417-c6f0-0a10-09ab-709c273d19ab","f1eaff64-2c3a-5137-d1a4-810c146cd862","0b4ce300-5dad-db6a-f7c2-2d7090b72d51","0cfa3510-65ad-1a9e-f112-e568474f6856","fd50e828-a08a-2ca1-6bda-6077c9179aaa","a6ef0edf-6515-5ce2-ace5-13ee43896f63","f44f66f3-96b6-b138-a3a0-b98fe20183b5","7358f7bd-21fe-fa4e-852a-c39cad932533","bd0729b6-c361-7568-1e19-e278ab9b5a16","fa61267d-8cba-f6d1-ca9a-5ae77edde4fe","ee8baadd-6551-149d-c851-1a30c13b5685","b57a05b9-fca5-d065-b298-a743a93d820f","165cb38c-3996-8b4b-2eba-7874f43edb12","96ae7630-73e6-acc8-cac3-81ad295b0217","cae988a9-afc6-69f7-91cf-d2d1c2f5080a","7feef681-44c5-6971-40a6-35e9e0511e7e","9dd319c0-0bde-4cbd-b486-ca345ef86b94","84f26a2f-d716-edcc-9235-f20a810c7fb9","3c0f4a35-0435-6c7b-7bc0-2f2662be6709","cc08c381-94cc-d442-def5-668497a6efd4","cf4d5804-7fee-6c57-7590-37e36ef58262","e64e51cf-c148-1421-f514-2d94cdb2e7d2","e6c01e77-7784-6b7b-f92d-78085170cb37","ae40e8c4-06bd-e785-1db6-d90926045b11","e40ab3b5-14e6-6483-9b87-6efda075f0bd","327e1269-5433-ba59-ea08-a969a165c69b","03a3b87e-c095-3a7e-6c6b-e16da53f98fa","783d48f6-ecaf-ca99-9420-9f92fda5b048","391a6876-30f1-0ff3-aab2-ec4de398f66c","f9217373-8032-5ed3-5557-2f2e78d49991","c93f3efc-f428-f1d6-471f-7835de832551","4a6b8b84-4ad2-f666-fca8-057d6124a880","e69632d8-7d1d-82bf-9a61-4348bd0c61a2","821ce34e-cefd-c11a-7190-47836d711c7b","a5dd3cda-f911-2221-9998-9ab6b990208c","039c61ba-a12b-39f5-3a18-45f2b5de2b0f","5dab3457-17a6-e29a-dce4-49c7368e2a40","edf78c83-7bcc-259d-c4fb-a7df710235c5","f0287ccd-d215-c0ca-1059-6da0dd5f73b6","ef75cc37-e99a-315b-4c11-58a615383fc6","9b3bb2a6-79a8-498b-96b2-7bfe5cc7b584","e3a6b84f-f616-e26c-e3ba-c9141886f7bf","b10b6b68-3fbd-b4ea-c431-114203cac9f9","8b864360-09e1-2885-2078-b8a9c9461955","dfcc4a97-c556-2c02-dcdb-b94e7c891fa4","72180e6d-1fbc-6288-1de8-f0f81da2d3ae","069f97f1-752b-c10b-915c-2daab5226d2a","61eb65c2-31f7-45cc-5d88-11ae9d321df4","1080a63d-cd40-8d38-b945-8a2c1df93a97","aff2eb44-79d1-58c4-4f0f-e6527e387c55","e4749f5f-586c-ba1f-527b-01065b389f52","70147bca-4649-7c37-edb0-665685a76377","77a491b3-858a-a0b3-cd9a-1b32c25d13e8","4e07deca-9ed7-db69-315d-f2872951d946","2e533da7-0979-07eb-09fc-7bc323f2bb4c","b7507ce2-9962-19bf-5b26-e9914afa9748","53b8477c-f8cb-fe84-f7cf-1e0d800a3aef","64987c62-9bbc-4da8-130f-6d95be0c4705","d4ad4e06-ef78-a2fb-de8a-a454d0e46593","859aac9a-9a52-427e-e054-847a6f5ee357","2ec0d11f-b36a-d992-e2b7-5493157ff6dd","04762e72-9b49-efab-a4f2-cdaff1d76d82","de93da4e-dbbc-93f6-75c7-df21188232f4","feec73eb-ebf6-1dfd-8268-efa9cacf6532","698d3610-f482-ff3b-6778-6d7284664c61","d75e3d37-eb93-b674-6f44-80fa9a9faaf1","6ec78c46-0e3e-595f-434c-a479479e42ff","62c39be6-0ea2-6331-3a36-2c0960e21bcf","5d53b581-7a21-2d63-8f28-f25222a3aa2d","4a4fef0c-3ffa-00fb-5594-6aa096ec0d25","a50cee7b-c9db-2e5a-a11e-e92ae13db7f1","883dd50f-204e-a525-a0de-2840924654ad","109e4c27-1860-cc16-0c3d-4f34b3e0598b","a0738066-6479-1dbc-48bb-8c9dff7c5616","905d791b-84ad-d234-0f23-9049249ea6d0","9c7d2a9a-24ad-5b18-9702-3332ecefc7f6","b06d9fab-5865-dea9-7fdb-1031460d421e","3b7f0350-cb50-d83e-98ac-3e6912893592"]}]}],"textures":[{"path":"C:\\Users\\hawkt\\Documents\\GitHub\\cosmere\\src\\surgebinding\\resources\\assets\\surgebinding\\textures\\item\\models\\shardblade_model\\bondsmith_honorblade.png","name":"bondsmith_honorblade.png","folder":"item/models/shardblade_model","namespace":"surgebinding","id":"0","particle":true,"render_mode":"default","visible":true,"mode":"bitmap","saved":true,"uuid":"6f3efa66-3055-80a1-39ae-d026c461cffa","relative_path":"../../src/surgebinding/resources/assets/surgebinding/textures/item/models/shardblade_model/bondsmith_honorblade.png","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAANlJREFUWEdjrM6q/s9AB3CiToghaL08w7PL5xlap7UywqxkpJcDKmW4GRYKqg2cA258/8ngZGYxcA6Q0jUEh/qARcGoA2AhAIqG7MwQ+ueCUQeMhsDIDgFk3w9INhw0DgDVAyDH0L0gQq4HRh1QH/eHgc2ic2DqAlAaGHUAcoMUVCbQrVEKSv3ozbFRB1AUAujFK6yjAQpmbABnFETv+fJ/rmIdw57v+QwPD5+maR8JaxqYOn0NRV0zXD7G5ROicwGuIMZlcKohIvSQSzpCQQovEgkppJX8qAMALE7AIUzNiSIAAAAASUVORK5CYII="}],"display":{"thirdperson_righthand":{"rotation":[0,90,0],"translation":[0,13.75,1],"scale":[4,4,4]},"thirdperson_lefthand":{"rotation":[0,-90,0],"translation":[0,13.75,1],"scale":[4,4,4]},"firstperson_righthand":{"rotation":[0,90.5,0],"translation":[0,11.75,0],"scale":[3,3,3]},"firstperson_lefthand":{"rotation":[0,90,0],"translation":[0,11.75,0],"scale":[3,3,3]},"ground":{"translation":[0,3.75,0],"scale":[1.25,1.25,1.25]},"gui":{"rotation":[0,0,-45],"translation":[1,1,0],"scale":[1.25,1.25,1.25]},"fixed":{"rotation":[0,180,-45],"scale":[1.5,1.5,1.5]}}} \ No newline at end of file diff --git a/blockbench/surgebinding/shardblades/honorblades/dustbringer_honorblade.bbmodel b/blockbench/surgebinding/shardblades/honorblades/dustbringer_honorblade.bbmodel new file mode 100644 index 000000000..355f80f45 --- /dev/null +++ b/blockbench/surgebinding/shardblades/honorblades/dustbringer_honorblade.bbmodel @@ -0,0 +1 @@ +{"meta":{"format_version":"4.0","model_format":"java_block","box_uv":false},"name":"dustbringer_honorblade","parent":"","ambientocclusion":true,"front_gui_light":false,"visible_box":[1,1,0],"variable_placeholders":"","variable_placeholder_buttons":[],"resolution":{"width":32,"height":32},"elements":[{"name":"cube","rescale":false,"locked":false,"from":[7.5,7.5,7.5],"to":[7.75,14.5625,7.5625],"autouv":0,"color":0,"origin":[-0.0625,0,0],"faces":{"north":{"uv":[0,0,1,7],"texture":0},"east":{"uv":[1,0,2,7],"texture":0},"south":{"uv":[2,0,3,7],"texture":0},"west":{"uv":[3,0,4,7],"texture":0},"up":{"uv":[4,8,3,7],"texture":0},"down":{"uv":[5,7,4,8],"texture":0}},"type":"cube","uuid":"cc74b1f8-1e8f-2690-4ca6-2421215c7f22"},{"name":"cube","rescale":false,"locked":false,"from":[7.1875,7.5,7.5],"to":[7.4375,14.5625,7.5625],"autouv":0,"color":0,"origin":[0,0,0],"faces":{"north":{"uv":[4,0,5,7],"texture":0},"east":{"uv":[5,0,6,7],"texture":0},"south":{"uv":[6,0,7,7],"texture":0},"west":{"uv":[0,7,1,14],"texture":0},"up":{"uv":[8,5,7,4],"texture":0},"down":{"uv":[6,7,5,8],"texture":0}},"type":"cube","uuid":"cdf3425a-1f52-3d54-c384-6882f16a6674"},{"name":"cube","rescale":false,"locked":false,"from":[7.499999999999999,14.562500000000002,7.5],"to":[7.624999999999999,14.750000000000002,7.5625],"autouv":0,"color":0,"origin":[7.625,14.46875,7.53125],"faces":{"north":{"uv":[7,5,8,6],"texture":0},"east":{"uv":[6,7,7,8],"texture":0},"south":{"uv":[7,6,8,7],"texture":0},"west":{"uv":[7,7,8,8],"texture":0},"up":{"uv":[9,1,8,0],"texture":0},"down":{"uv":[9,1,8,2],"texture":0}},"type":"cube","uuid":"1d25a3e1-3266-bf07-bb60-f1acb32c8b37"},{"name":"cube","rescale":false,"locked":false,"from":[7.3125,14.5625,7.5],"to":[7.4375,14.75,7.5625],"autouv":0,"color":0,"origin":[7.375,14.65625,7.53125],"faces":{"north":{"uv":[8,2,9,3],"texture":0},"east":{"uv":[3,8,4,9],"texture":0},"south":{"uv":[8,3,9,4],"texture":0},"west":{"uv":[4,8,5,9],"texture":0},"up":{"uv":[9,5,8,4],"texture":0},"down":{"uv":[6,8,5,9],"texture":0}},"type":"cube","uuid":"7b581b69-13fa-88f2-0fb3-e325b98a81e0"},{"name":"cube","rescale":false,"locked":false,"from":[7.499999999999999,14.750000000000002,7.5],"to":[7.562499999999999,14.937500000000002,7.5625],"autouv":0,"color":0,"origin":[7.625,14.46875,7.53125],"faces":{"north":{"uv":[8,5,9,6],"texture":0},"east":{"uv":[6,8,7,9],"texture":0},"south":{"uv":[8,6,9,7],"texture":0},"west":{"uv":[7,8,8,9],"texture":0},"up":{"uv":[9,8,8,7],"texture":0},"down":{"uv":[9,8,8,9],"texture":0}},"type":"cube","uuid":"c7286cfa-bff4-0743-de65-be72da1e0531"},{"name":"cube","rescale":false,"locked":false,"from":[7.374999999999999,14.750000000000002,7.5],"to":[7.437499999999999,14.937500000000002,7.5625],"autouv":0,"color":0,"origin":[7.6875,14.46875,7.53125],"faces":{"north":{"uv":[9,0,10,1],"texture":0},"east":{"uv":[1,9,2,10],"texture":0},"south":{"uv":[9,1,10,2],"texture":0},"west":{"uv":[2,9,3,10],"texture":0},"up":{"uv":[10,3,9,2],"texture":0},"down":{"uv":[4,9,3,10],"texture":0}},"type":"cube","uuid":"2ebbb7dd-fed2-376a-b109-4207a8383a03"},{"name":"cube","rescale":false,"locked":false,"from":[7.610924292997203,14.509972075952618,7.5],"to":[7.673424292997203,15.009972075952618,7.5625],"autouv":0,"color":0,"rotation":[0,0,22.5],"origin":[7.579674292997203,14.728722075952618,7.53125],"faces":{"north":{"uv":[9,3,10,4],"texture":0},"east":{"uv":[4,9,5,10],"texture":0},"south":{"uv":[9,4,10,5],"texture":0},"west":{"uv":[5,9,6,10],"texture":0},"up":{"uv":[10,6,9,5],"texture":0},"down":{"uv":[7,9,6,10],"texture":0}},"type":"cube","uuid":"a113a21f-932a-22bf-e931-5e05058ce07f"},{"name":"cube","rescale":false,"locked":false,"from":[7.2474893889559375,14.364087024206686,7.5],"to":[7.3099893889559375,14.864087024206686,7.5625],"autouv":0,"color":0,"rotation":[0,0,-22.5],"origin":[7.716239388955938,14.614087024206686,7.53125],"faces":{"north":{"uv":[9,6,10,7],"texture":0},"east":{"uv":[7,9,8,10],"texture":0},"south":{"uv":[9,7,10,8],"texture":0},"west":{"uv":[8,9,9,10],"texture":0},"up":{"uv":[10,9,9,8],"texture":0},"down":{"uv":[10,9,9,10],"texture":0}},"type":"cube","uuid":"cc45e147-2599-1d51-34c4-4e0e21587bb3"},{"name":"cube","rescale":false,"locked":false,"from":[7.2834978071752055,14.543404848911525,7.5],"to":[7.3459978071752055,14.855904848911525,7.5625],"autouv":0,"color":0,"rotation":[0,0,-22.5],"origin":[7.2522478071752055,14.637154848911525,7.53125],"faces":{"north":{"uv":[10,0,11,1],"texture":0},"east":{"uv":[1,10,2,11],"texture":0},"south":{"uv":[10,1,11,2],"texture":0},"west":{"uv":[2,10,3,11],"texture":0},"up":{"uv":[11,3,10,2],"texture":0},"down":{"uv":[4,10,3,11],"texture":0}},"type":"cube","uuid":"77579049-c53a-00b3-04a8-50a474b203b1"},{"name":"cube","rescale":false,"locked":false,"from":[7.5915021928247945,14.543404848911525,7.5],"to":[7.6540021928247945,14.855904848911525,7.5625],"autouv":0,"color":0,"rotation":[0,0,22.5],"origin":[7.6852521928247945,14.637154848911525,7.53125],"faces":{"north":{"uv":[10,3,11,4],"texture":0},"east":{"uv":[4,10,5,11],"texture":0},"south":{"uv":[10,4,11,5],"texture":0},"west":{"uv":[5,10,6,11],"texture":0},"up":{"uv":[11,6,10,5],"texture":0},"down":{"uv":[7,10,6,11],"texture":0}},"type":"cube","uuid":"55ec728b-ed58-029f-90b8-53b7bf043fc7"},{"name":"cube","rescale":false,"locked":false,"from":[7.562499999999999,14.812500000000002,7.5],"to":[7.602499999999999,14.875000000000002,7.5625],"autouv":0,"color":0,"origin":[7.625,14.46875,7.53125],"faces":{"north":{"uv":[10,6,11,7],"texture":0},"east":{"uv":[7,10,8,11],"texture":0},"south":{"uv":[10,7,11,8],"texture":0},"west":{"uv":[8,10,9,11],"texture":0},"up":{"uv":[11,9,10,8],"texture":0},"down":{"uv":[10,10,9,11],"texture":0}},"type":"cube","uuid":"75ed4d17-5699-c9db-8e6f-1e0c9ab2a7e9"},{"name":"cube","rescale":false,"locked":false,"from":[7.335000008344649,14.812500000000002,7.5],"to":[7.375000008344649,14.875000000000002,7.5625],"autouv":0,"color":0,"origin":[7.83500000834465,14.53125,7.53125],"faces":{"north":{"uv":[10,9,11,10],"texture":0},"east":{"uv":[10,10,11,11],"texture":0},"south":{"uv":[11,0,12,1],"texture":0},"west":{"uv":[1,11,2,12],"texture":0},"up":{"uv":[12,2,11,1],"texture":0},"down":{"uv":[3,11,2,12],"texture":0}},"type":"cube","uuid":"4fbeb8dc-8c5d-b21f-45fc-79c32cdec6e4"},{"name":"cube","rescale":false,"locked":false,"from":[7.499999999999999,14.937500000000002,7.5],"to":[7.562499999999999,15.000000000000002,7.5625],"autouv":0,"color":0,"origin":[7.625,14.46875,7.53125],"faces":{"north":{"uv":[11,2,12,3],"texture":0},"east":{"uv":[3,11,4,12],"texture":0},"south":{"uv":[11,3,12,4],"texture":0},"west":{"uv":[4,11,5,12],"texture":0},"up":{"uv":[12,5,11,4],"texture":0},"down":{"uv":[6,11,5,12],"texture":0}},"type":"cube","uuid":"cae3db5b-28bf-621e-50a7-1e437e80532a"},{"name":"cube","rescale":false,"locked":false,"from":[7.374999999999999,14.937500000000002,7.5],"to":[7.437499999999999,15.000000000000002,7.5625],"autouv":0,"color":0,"origin":[7.625,14.46875,7.53125],"faces":{"north":{"uv":[11,5,12,6],"texture":0},"east":{"uv":[6,11,7,12],"texture":0},"south":{"uv":[11,6,12,7],"texture":0},"west":{"uv":[7,11,8,12],"texture":0},"up":{"uv":[12,8,11,7],"texture":0},"down":{"uv":[9,11,8,12],"texture":0}},"type":"cube","uuid":"4142bc3d-6860-17fa-721d-5fec9de7e6c5"},{"name":"cube","rescale":false,"locked":false,"from":[7.509443043147751,14.985748319918958,7.5],"to":[7.554443043147751,15.030748319918958,7.5625],"autouv":0,"color":0,"rotation":[0,0,-22.5],"origin":[7.540693043147751,15.016998319918958,7.53125],"faces":{"north":{"uv":[11,8,12,9],"texture":0},"east":{"uv":[9,11,10,12],"texture":0},"south":{"uv":[11,9,12,10],"texture":0},"west":{"uv":[10,11,11,12],"texture":0},"up":{"uv":[12,11,11,10],"texture":0},"down":{"uv":[12,11,11,12],"texture":0}},"type":"cube","uuid":"eedb67a5-8387-9acf-6464-93558cc9a6bc"},{"name":"cube","rescale":false,"locked":false,"from":[7.385739384060421,14.989762853518487,7.5],"to":[7.430739384060421,15.034762853518489,7.5625],"autouv":0,"color":0,"rotation":[0,0,22.5],"origin":[7.408239384060422,15.012262853518488,7.53125],"faces":{"north":{"uv":[12,0,13,1],"texture":0},"east":{"uv":[1,12,2,13],"texture":0},"south":{"uv":[12,1,13,2],"texture":0},"west":{"uv":[2,12,3,13],"texture":0},"up":{"uv":[13,3,12,2],"texture":0},"down":{"uv":[4,12,3,13],"texture":0}},"type":"cube","uuid":"aed18435-8fd5-de42-5ee5-2e623ce8aa47"},{"name":"cube","rescale":false,"locked":false,"from":[7.1875,7,7.5],"to":[7.75,7.5,7.5625],"autouv":0,"color":0,"origin":[0,0,0],"faces":{"north":{"uv":[12,3,13,4],"texture":0},"east":{"uv":[4,12,5,13],"texture":0},"south":{"uv":[12,4,13,5],"texture":0},"west":{"uv":[5,12,6,13],"texture":0},"up":{"uv":[13,6,12,5],"texture":0},"down":{"uv":[7,12,6,13],"texture":0}},"type":"cube","uuid":"808f4969-4d0b-9997-4c19-2c83784bd9b8"},{"name":"cube","rescale":false,"locked":false,"from":[7.5355496227002945,7.194571259610769,7.4375],"to":[7.5980496227002945,7.507071259610769,7.625],"autouv":0,"color":9,"rotation":[0,0,22.5],"origin":[7.5667996227002945,7.257071259610769,7.59375],"faces":{"north":{"uv":[12,6,13,7],"texture":0},"east":{"uv":[7,12,8,13],"texture":0},"south":{"uv":[12,7,13,8],"texture":0},"west":{"uv":[8,12,9,13],"texture":0},"up":{"uv":[13,9,12,8],"texture":0},"down":{"uv":[10,12,9,13],"texture":0}},"type":"cube","uuid":"2a6475bc-856d-ed2f-2a75-839bebcd630b"},{"name":"cube","rescale":false,"locked":false,"from":[7.3394503772997055,7.194571259610769,7.4375],"to":[7.4019503772997055,7.507071259610769,7.625],"autouv":0,"color":9,"rotation":[0,0,-22.5],"origin":[7.3707003772997055,7.257071259610769,7.59375],"faces":{"north":{"uv":[12,9,13,10],"texture":0},"east":{"uv":[10,12,11,13],"texture":0},"south":{"uv":[12,10,13,11],"texture":0},"west":{"uv":[11,12,12,13],"texture":0},"up":{"uv":[13,12,12,11],"texture":0},"down":{"uv":[13,12,12,13],"texture":0}},"type":"cube","uuid":"d726bb0b-1d52-f397-8f9d-842e4ac29d46"},{"name":"cube","rescale":false,"locked":false,"from":[7.475678623304613,7.005231583919086,7.4375],"to":[7.725678623304613,7.255231583919086,7.625],"autouv":0,"color":9,"rotation":[0,0,45],"origin":[7.694428623304613,7.098981583919086,7.53125],"faces":{"north":{"uv":[13,0,14,1],"texture":0},"east":{"uv":[1,13,2,14],"texture":0},"south":{"uv":[13,1,14,2],"texture":0},"west":{"uv":[2,13,3,14],"texture":0},"up":{"uv":[14,3,13,2],"texture":0},"down":{"uv":[4,13,3,14],"texture":0}},"type":"cube","uuid":"325f2d72-6024-da7b-c468-3fd08aabe979"},{"name":"cube","rescale":false,"locked":false,"from":[7.211821376695387,7.005231583919086,7.4375],"to":[7.461821376695387,7.255231583919086,7.625],"autouv":0,"color":9,"rotation":[0,0,-45],"origin":[7.243071376695387,7.098981583919086,7.53125],"faces":{"north":{"uv":[13,3,14,4],"texture":0},"east":{"uv":[4,13,5,14],"texture":0},"south":{"uv":[13,4,14,5],"texture":0},"west":{"uv":[5,13,6,14],"texture":0},"up":{"uv":[14,6,13,5],"texture":0},"down":{"uv":[7,13,6,14],"texture":0}},"type":"cube","uuid":"05b4e00f-484a-7e37-acf2-9dbf9dd86675"},{"name":"cube","rescale":false,"locked":false,"from":[7.4375,7.4375,7.4375],"to":[7.5,7.5,7.625],"autouv":0,"color":9,"origin":[0,0,0],"faces":{"north":{"uv":[13,6,14,7],"texture":0},"east":{"uv":[7,13,8,14],"texture":0},"south":{"uv":[13,7,14,8],"texture":0},"west":{"uv":[8,13,9,14],"texture":0},"up":{"uv":[14,9,13,8],"texture":0},"down":{"uv":[10,13,9,14],"texture":0}},"type":"cube","uuid":"17b592e1-ecd9-6aea-dde1-8ba11665aea4"},{"name":"cube","rescale":false,"locked":false,"from":[7.407816970952931,6.992287410094926,7.4375],"to":[7.782816970952931,7.054787410094926,7.625],"autouv":0,"color":9,"origin":[7.657816970952931,7.023537410094926,7.53125],"faces":{"north":{"uv":[13,9,14,10],"texture":0},"east":{"uv":[10,13,11,14],"texture":0},"south":{"uv":[13,10,14,11],"texture":0},"west":{"uv":[11,13,12,14],"texture":0},"up":{"uv":[14,12,13,11],"texture":0},"down":{"uv":[13,13,12,14],"texture":0}},"type":"cube","uuid":"e7599a20-fe1e-254f-7024-ba6b6e06b75a"},{"name":"cube","rescale":false,"locked":false,"from":[7.154683029047069,6.992287410094926,7.4375],"to":[7.467183029047069,7.054787410094926,7.625],"autouv":0,"color":9,"origin":[7.592183029047069,7.023537410094926,7.53125],"faces":{"north":{"uv":[13,12,14,13],"texture":0},"east":{"uv":[13,13,14,14],"texture":0},"south":{"uv":[0,14,1,15],"texture":0},"west":{"uv":[14,0,15,1],"texture":0},"up":{"uv":[2,15,1,14],"texture":0},"down":{"uv":[15,1,14,2],"texture":0}},"type":"cube","uuid":"5c8483dc-d652-584c-5780-7d527dd3c146"},{"name":"cube","rescale":false,"locked":false,"from":[7.588442591993499,6.831018855010469,7.4375],"to":[7.713442591993499,7.018518855010469,7.625],"autouv":0,"color":9,"rotation":[0,0,-22.5],"origin":[7.682192591993499,6.831018855010469,7.53125],"faces":{"north":{"uv":[2,14,3,15],"texture":0},"east":{"uv":[14,2,15,3],"texture":0},"south":{"uv":[3,14,4,15],"texture":0},"west":{"uv":[14,3,15,4],"texture":0},"up":{"uv":[5,15,4,14],"texture":0},"down":{"uv":[15,4,14,5],"texture":0}},"type":"cube","uuid":"d4430d7e-1dca-bd74-48cb-a19fab6a70fa"},{"name":"cube","rescale":false,"locked":false,"from":[7.465821356602522,6.655477712271878,7.4375],"to":[7.715821356602522,6.842977712271878,7.625],"autouv":0,"color":9,"origin":[7.684571356602522,6.749227712271878,7.53125],"faces":{"north":{"uv":[5,14,6,15],"texture":0},"east":{"uv":[14,5,15,6],"texture":0},"south":{"uv":[6,14,7,15],"texture":0},"west":{"uv":[14,6,15,7],"texture":0},"up":{"uv":[8,15,7,14],"texture":0},"down":{"uv":[15,7,14,8],"texture":0}},"type":"cube","uuid":"f4c8c748-ae75-cefa-27b4-6622e630f44f"},{"name":"cube","rescale":false,"locked":false,"from":[7.561819163777726,6.487072863360354,7.4375],"to":[7.749319163777726,6.674572863360354,7.625],"autouv":0,"color":9,"rotation":[0,0,22.5],"origin":[7.718069163777726,6.580822863360354,7.53125],"faces":{"north":{"uv":[8,14,9,15],"texture":0},"east":{"uv":[14,8,15,9],"texture":0},"south":{"uv":[9,14,10,15],"texture":0},"west":{"uv":[14,9,15,10],"texture":0},"up":{"uv":[11,15,10,14],"texture":0},"down":{"uv":[15,10,14,11],"texture":0}},"type":"cube","uuid":"d8a9dd77-b117-f305-519f-b4b2e9bb2a99"},{"name":"cube","rescale":false,"locked":false,"from":[7.188180836222273,6.487072863360354,7.4375],"to":[7.375680836222273,6.674572863360354,7.625],"autouv":0,"color":9,"rotation":[0,0,-22.5],"origin":[7.219430836222273,6.580822863360354,7.53125],"faces":{"north":{"uv":[11,14,12,15],"texture":0},"east":{"uv":[14,11,15,12],"texture":0},"south":{"uv":[12,14,13,15],"texture":0},"west":{"uv":[14,12,15,13],"texture":0},"up":{"uv":[14,15,13,14],"texture":0},"down":{"uv":[15,13,14,14],"texture":0}},"type":"cube","uuid":"c9a54a2d-de47-f6e0-5c04-0229d0cc6188"},{"name":"cube","rescale":false,"locked":false,"from":[7.224057408006502,6.831018855010469,7.4375],"to":[7.349057408006502,7.018518855010469,7.625],"autouv":0,"color":9,"rotation":[0,0,22.5],"origin":[7.255307408006502,6.831018855010469,7.53125],"faces":{"north":{"uv":[14,14,15,15],"texture":0},"east":{"uv":[0,15,1,16],"texture":0},"south":{"uv":[15,0,16,1],"texture":0},"west":{"uv":[1,15,2,16],"texture":0},"up":{"uv":[16,2,15,1],"texture":0},"down":{"uv":[3,15,2,16],"texture":0}},"type":"cube","uuid":"69e686c8-97fc-faa4-c189-2aa4f0bbdad5"},{"name":"cube","rescale":false,"locked":false,"from":[7.221678643397478,6.655477712271878,7.4375],"to":[7.471678643397478,6.842977712271878,7.625],"autouv":0,"color":9,"origin":[7.252928643397478,6.749227712271878,7.53125],"faces":{"north":{"uv":[15,2,16,3],"texture":0},"east":{"uv":[3,15,4,16],"texture":0},"south":{"uv":[15,3,16,4],"texture":0},"west":{"uv":[4,15,5,16],"texture":0},"up":{"uv":[16,5,15,4],"texture":0},"down":{"uv":[6,15,5,16],"texture":0}},"type":"cube","uuid":"66b745bd-877b-f94f-2c1c-68e36b0f77a6"},{"name":"cube","rescale":false,"locked":false,"from":[7.154683029047069,6.38116801444883,7.4375],"to":[7.467183029047069,6.50616801444883,7.625],"autouv":0,"color":9,"origin":[7.592183029047069,7.03741801444883,7.53125],"faces":{"north":{"uv":[15,5,16,6],"texture":0},"east":{"uv":[6,15,7,16],"texture":0},"south":{"uv":[15,6,16,7],"texture":0},"west":{"uv":[7,15,8,16],"texture":0},"up":{"uv":[16,8,15,7],"texture":0},"down":{"uv":[9,15,8,16],"texture":0}},"type":"cube","uuid":"f079fafc-0f60-c365-72ca-63fa12cbdb3b"},{"name":"cube","rescale":false,"locked":false,"from":[7.407816970952931,6.38116801444883,7.4375],"to":[7.782816970952931,6.50616801444883,7.625],"autouv":0,"color":9,"origin":[7.595316970952931,6.47491801444883,7.53125],"faces":{"north":{"uv":[15,8,16,9],"texture":0},"east":{"uv":[9,15,10,16],"texture":0},"south":{"uv":[15,9,16,10],"texture":0},"west":{"uv":[10,15,11,16],"texture":0},"up":{"uv":[16,11,15,10],"texture":0},"down":{"uv":[12,15,11,16],"texture":0}},"type":"cube","uuid":"1678ea84-184e-8804-7a7f-e6e34bedb0b5"},{"name":"cube","rescale":false,"locked":false,"from":[7.534387362568373,6.366653449009229,7.375],"to":[7.596887362568373,6.804153449009229,7.6875],"autouv":0,"color":9,"rotation":[0,0,45],"origin":[7.628137362568374,6.616653449009229,7.53125],"faces":{"north":{"uv":[15,11,16,12],"texture":0},"east":{"uv":[12,15,13,16],"texture":0},"south":{"uv":[15,12,16,13],"texture":0},"west":{"uv":[13,15,14,16],"texture":0},"up":{"uv":[16,14,15,13],"texture":0},"down":{"uv":[15,15,14,16],"texture":0}},"type":"cube","uuid":"f11d6fef-b43d-173d-3feb-9c4aa23f663a"},{"name":"cube","rescale":false,"locked":false,"from":[7.64369028773897,5.723347622833387,7.375],"to":[7.70619028773897,6.160847622833387,7.6875],"autouv":0,"color":9,"rotation":[0,0,-45],"origin":[8.23744028773897,6.660847622833387,7.53125],"faces":{"north":{"uv":[15,14,16,15],"texture":0},"east":{"uv":[15,15,16,16],"texture":0},"south":{"uv":[0,16,1,17],"texture":0},"west":{"uv":[16,0,17,1],"texture":0},"up":{"uv":[2,17,1,16],"texture":0},"down":{"uv":[17,1,16,2],"texture":0}},"type":"cube","uuid":"9377f074-72b6-2c75-cf40-4cc557734c5d"},{"name":"cube","rescale":false,"locked":false,"from":[7.473522788400114,6.726811934485695,7.375],"to":[7.723522788400114,6.789311934485695,7.6875],"autouv":0,"color":9,"rotation":[0,0,22.5],"origin":[7.629772788400114,6.758061934485695,7.53125],"faces":{"north":{"uv":[2,16,3,17],"texture":0},"east":{"uv":[16,2,17,3],"texture":0},"south":{"uv":[3,16,4,17],"texture":0},"west":{"uv":[16,3,17,4],"texture":0},"up":{"uv":[5,17,4,16],"texture":0},"down":{"uv":[17,4,16,5],"texture":0}},"type":"cube","uuid":"a7e0e1a9-d603-f3d8-9ffe-afa9755fa3f4"},{"name":"cube","rescale":false,"locked":false,"from":[7.213977211599886,6.726811934485694,7.375],"to":[7.463977211599886,6.789311934485694,7.6875],"autouv":0,"color":9,"rotation":[0,0,-22.5],"origin":[7.307727211599886,6.758061934485694,7.53125],"faces":{"north":{"uv":[5,16,6,17],"texture":0},"east":{"uv":[16,5,17,6],"texture":0},"south":{"uv":[6,16,7,17],"texture":0},"west":{"uv":[16,6,17,7],"texture":0},"up":{"uv":[8,17,7,16],"texture":0},"down":{"uv":[17,7,16,8],"texture":0}},"type":"cube","uuid":"dc58be38-b88f-0605-ed62-4d557472a854"},{"name":"cube","rescale":false,"locked":false,"from":[7.704427637311638,6.760309741660899,7.375],"to":[7.766927637311639,6.822809741660899,7.6875],"autouv":0,"color":9,"origin":[7.735677637311638,6.791559741660899,7.53125],"faces":{"north":{"uv":[8,16,9,17],"texture":0},"east":{"uv":[16,8,17,9],"texture":0},"south":{"uv":[9,16,10,17],"texture":0},"west":{"uv":[16,9,17,10],"texture":0},"up":{"uv":[11,17,10,16],"texture":0},"down":{"uv":[17,10,16,11],"texture":0}},"type":"cube","uuid":"a17d0e57-591e-8c77-5988-e20de9e4c51e"},{"name":"cube","rescale":false,"locked":false,"from":[7.170572362688362,6.760309741660898,7.375],"to":[7.233072362688362,6.822809741660898,7.6875],"autouv":0,"color":9,"origin":[7.764322362688361,6.791559741660898,7.53125],"faces":{"north":{"uv":[11,16,12,17],"texture":0},"east":{"uv":[16,11,17,12],"texture":0},"south":{"uv":[12,16,13,17],"texture":0},"west":{"uv":[16,12,17,13],"texture":0},"up":{"uv":[14,17,13,16],"texture":0},"down":{"uv":[17,13,16,14],"texture":0}},"type":"cube","uuid":"1107a67f-1247-6f24-90f1-b61f531d2388"},{"name":"cube","rescale":false,"locked":false,"from":[7.738622797128772,6.373585492976353,7.375],"to":[7.801122797128773,6.436085492976353,7.6875],"autouv":0,"color":9,"origin":[7.769872797128773,6.842335492976353,7.53125],"faces":{"north":{"uv":[14,16,15,17],"texture":0},"east":{"uv":[16,14,17,15],"texture":0},"south":{"uv":[15,16,16,17],"texture":0},"west":{"uv":[16,15,17,16],"texture":0},"up":{"uv":[17,17,16,16],"texture":0},"down":{"uv":[1,17,0,18],"texture":0}},"type":"cube","uuid":"94b3d9b9-8507-0135-1f95-fdc9141cce61"},{"name":"cube","rescale":false,"locked":false,"from":[7.136377202871229,6.3735854929763525,7.375],"to":[7.198877202871229,6.4360854929763525,7.6875],"autouv":0,"color":9,"origin":[7.792627202871229,6.8423354929763525,7.53125],"faces":{"north":{"uv":[17,0,18,1],"texture":0},"east":{"uv":[1,17,2,18],"texture":0},"south":{"uv":[17,1,18,2],"texture":0},"west":{"uv":[2,17,3,18],"texture":0},"up":{"uv":[18,3,17,2],"texture":0},"down":{"uv":[4,17,3,18],"texture":0}},"type":"cube","uuid":"5451e343-e2b7-50d9-bc09-31d40858d5c6"},{"name":"cube","rescale":false,"locked":false,"from":[7.278321356602522,6.842977712271878,7.4375],"to":[7.715821356602522,7.030477712271878,7.625],"autouv":0,"color":9,"origin":[7.684571356602522,6.749227712271878,7.53125],"faces":{"north":{"uv":[17,3,18,4],"texture":0},"east":{"uv":[4,17,5,18],"texture":0},"south":{"uv":[17,4,18,5],"texture":0},"west":{"uv":[5,17,6,18],"texture":0},"up":{"uv":[18,6,17,5],"texture":0},"down":{"uv":[7,17,6,18],"texture":0}},"type":"cube","uuid":"86192ba7-2a86-c4b7-fc6b-b76a72d3a205"},{"name":"cube","rescale":false,"locked":false,"from":[7.278321356602522,6.467977712271878,7.4375],"to":[7.715821356602522,6.655477712271878,7.625],"autouv":0,"color":9,"origin":[7.684571356602522,6.749227712271878,7.53125],"faces":{"north":{"uv":[17,6,18,7],"texture":0},"east":{"uv":[7,17,8,18],"texture":0},"south":{"uv":[17,7,18,8],"texture":0},"west":{"uv":[8,17,9,18],"texture":0},"up":{"uv":[18,9,17,8],"texture":0},"down":{"uv":[10,17,9,18],"texture":0}},"type":"cube","uuid":"bb7dfb12-54f6-dd4c-e34c-15af9f51037e"},{"name":"cube","rescale":false,"locked":false,"from":[7.7178844329529,5.392541796657547,7.375],"to":[8.1553844329529,5.705041796657547,7.6875],"autouv":0,"color":9,"rotation":[0,0,-45],"origin":[8.2491344329529,6.705041796657547,7.53125],"faces":{"north":{"uv":[17,9,18,10],"texture":0},"east":{"uv":[10,17,11,18],"texture":0},"south":{"uv":[17,10,18,11],"texture":0},"west":{"uv":[11,17,12,18],"texture":0},"up":{"uv":[18,12,17,11],"texture":0},"down":{"uv":[13,17,12,18],"texture":0}},"type":"cube","uuid":"3a3e082a-5d1d-e5e9-f602-0a7913d23e33"},{"name":"cube","rescale":false,"locked":false,"from":[7.712414057837071,5.856850058415955,7.375],"to":[8.024914057837071,6.294350058415955,7.6875],"autouv":0,"color":9,"rotation":[0,0,-45],"origin":[7.837414057837071,6.263100058415955,7.53125],"faces":{"north":{"uv":[17,12,18,13],"texture":0},"east":{"uv":[13,17,14,18],"texture":0},"south":{"uv":[17,13,18,14],"texture":0},"west":{"uv":[14,17,15,18],"texture":0},"up":{"uv":[18,15,17,14],"texture":0},"down":{"uv":[16,17,15,18],"texture":0}},"type":"cube","uuid":"865c9059-9f03-71e4-2512-f8a0949b0a3b"},{"name":"cube","rescale":false,"locked":false,"from":[7.75643128809206,5.724694716507944,7.375],"to":[8.00643128809206,6.037194716507944,7.6875],"autouv":0,"color":9,"rotation":[0,0,-22.5],"origin":[7.97518128809206,6.068444716507944,7.53125],"faces":{"north":{"uv":[17,15,18,16],"texture":0},"east":{"uv":[16,17,17,18],"texture":0},"south":{"uv":[17,16,18,17],"texture":0},"west":{"uv":[17,17,18,18],"texture":0},"up":{"uv":[1,19,0,18],"texture":0},"down":{"uv":[19,0,18,1],"texture":0}},"type":"cube","uuid":"5c95740a-ca51-9bb5-39d4-526b273d9e2d"},{"name":"cube","rescale":false,"locked":false,"from":[7.804593666221628,6.027614623855557,7.375],"to":[7.992093666221628,6.152614623855557,7.6875],"autouv":0,"color":9,"origin":[7.960843666221628,6.121364623855557,7.53125],"faces":{"north":{"uv":[1,18,2,19],"texture":0},"east":{"uv":[18,1,19,2],"texture":0},"south":{"uv":[2,18,3,19],"texture":0},"west":{"uv":[18,2,19,3],"texture":0},"up":{"uv":[4,19,3,18],"texture":0},"down":{"uv":[19,3,18,4],"texture":0}},"type":"cube","uuid":"1483c536-7a4f-f8cf-9bb9-56b5e935ce17"},{"name":"cube","rescale":false,"locked":false,"from":[6.990862969576818,5.736588539553053,7.375],"to":[7.240862969576818,6.049088539553053,7.6875],"autouv":0,"color":9,"rotation":[0,0,22.5],"origin":[7.022112969576818,5.924088539553053,7.53125],"faces":{"north":{"uv":[4,18,5,19],"texture":0},"east":{"uv":[18,4,19,5],"texture":0},"south":{"uv":[5,18,6,19],"texture":0},"west":{"uv":[18,5,19,6],"texture":0},"up":{"uv":[7,19,6,18],"texture":0},"down":{"uv":[19,6,18,7],"texture":0}},"type":"cube","uuid":"c3f22c3e-b15b-7a1c-da66-820a2427f0b0"},{"name":"cube","rescale":false,"locked":false,"from":[6.945406305140201,6.027614623855556,7.375],"to":[7.070406305140201,6.152614623855556,7.6875],"autouv":0,"color":9,"origin":[8.039156305140203,5.996364623855556,7.53125],"faces":{"north":{"uv":[7,18,8,19],"texture":0},"east":{"uv":[18,7,19,8],"texture":0},"south":{"uv":[8,18,9,19],"texture":0},"west":{"uv":[18,8,19,9],"texture":0},"up":{"uv":[10,19,9,18],"texture":0},"down":{"uv":[19,9,18,10],"texture":0}},"type":"cube","uuid":"3cd23fbf-f4d8-7aec-8909-6188614138c1"},{"name":"cube","rescale":false,"locked":false,"from":[7.002821826838227,5.54182217729339,7.375],"to":[7.065321826838227,5.79182217729339,7.6875],"autouv":0,"color":9,"rotation":[0,0,-22.5],"origin":[7.034071826838227,5.69807217729339,7.53125],"faces":{"north":{"uv":[10,18,11,19],"texture":0},"east":{"uv":[18,10,19,11],"texture":0},"south":{"uv":[11,18,12,19],"texture":0},"west":{"uv":[18,11,19,12],"texture":0},"up":{"uv":[13,19,12,18],"texture":0},"down":{"uv":[19,12,18,13],"texture":0}},"type":"cube","uuid":"69981905-b41e-eed4-e743-930bd8f08dde"},{"name":"cube","rescale":false,"locked":false,"from":[7.872178144523605,5.541822177293394,7.375],"to":[7.934678144523605,5.791822177293394,7.6875],"autouv":0,"color":9,"rotation":[0,0,22.5],"origin":[7.903428144523605,5.698072177293394,7.53125],"faces":{"north":{"uv":[13,18,14,19],"texture":0},"east":{"uv":[18,13,19,14],"texture":0},"south":{"uv":[14,18,15,19],"texture":0},"west":{"uv":[18,14,19,15],"texture":0},"up":{"uv":[16,19,15,18],"texture":0},"down":{"uv":[19,15,18,16],"texture":0}},"type":"cube","uuid":"d4e6dd36-9883-5503-5313-9abbf947673d"},{"name":"cube","rescale":false,"locked":false,"from":[7.814712847791355,5.518089664549574,7.375],"to":[7.877212847791355,5.955589664549574,7.6875],"autouv":0,"color":9,"rotation":[0,0,45],"origin":[7.845962847791355,5.674339664549574,7.53125],"faces":{"north":{"uv":[16,18,17,19],"texture":0},"east":{"uv":[18,16,19,17],"texture":0},"south":{"uv":[17,18,18,19],"texture":0},"west":{"uv":[18,17,19,18],"texture":0},"up":{"uv":[19,19,18,18],"texture":0},"down":{"uv":[1,19,0,20],"texture":0}},"type":"cube","uuid":"b567a66f-ac4c-412e-2e8b-bc107854bec7"},{"name":"cube","rescale":false,"locked":false,"from":[7.060287123570478,5.5180896645495725,7.375],"to":[7.122787123570478,5.9555896645495725,7.6875],"autouv":0,"color":9,"rotation":[0,0,-45],"origin":[7.091537123570478,5.674339664549571,7.53125],"faces":{"north":{"uv":[19,0,20,1],"texture":0},"east":{"uv":[1,19,2,20],"texture":0},"south":{"uv":[19,1,20,2],"texture":0},"west":{"uv":[2,19,3,20],"texture":0},"up":{"uv":[20,3,19,2],"texture":0},"down":{"uv":[4,19,3,20],"texture":0}},"type":"cube","uuid":"5242f66b-855a-865d-68af-644cb366b2a9"},{"name":"cube","rescale":false,"locked":false,"from":[7.419186152494719,5.83281053367037,7.375],"to":[7.669186152494719,5.89531053367037,7.6875],"autouv":0,"color":9,"origin":[7.575436152494718,5.86406053367037,7.53125],"faces":{"north":{"uv":[19,3,20,4],"texture":0},"east":{"uv":[4,19,5,20],"texture":0},"south":{"uv":[19,4,20,5],"texture":0},"west":{"uv":[5,19,6,20],"texture":0},"up":{"uv":[20,6,19,5],"texture":0},"down":{"uv":[7,19,6,20],"texture":0}},"type":"cube","uuid":"71fdf7cf-b6bd-722d-c47d-c1ce04a15799"},{"name":"cube","rescale":false,"locked":false,"from":[7.2683138188671155,5.832810533670367,7.375],"to":[7.4558138188671155,5.895310533670367,7.6875],"autouv":0,"color":9,"origin":[7.5495638188671155,5.864060533670367,7.53125],"faces":{"north":{"uv":[19,6,20,7],"texture":0},"east":{"uv":[7,19,8,20],"texture":0},"south":{"uv":[19,7,20,8],"texture":0},"west":{"uv":[8,19,9,20],"texture":0},"up":{"uv":[20,9,19,8],"texture":0},"down":{"uv":[10,19,9,20],"texture":0}},"type":"cube","uuid":"1b0f4ea7-e280-7f7a-75be-99778a9de028"},{"name":"cube","rescale":false,"locked":false,"from":[7.3961227971008325,5.873585492976353,7.375],"to":[7.771122797100833,6.373585492976353,7.6875],"autouv":0,"color":9,"origin":[7.6461227971008325,6.342335492976353,7.53125],"faces":{"north":{"uv":[19,9,20,10],"texture":0},"east":{"uv":[10,19,11,20],"texture":0},"south":{"uv":[19,10,20,11],"texture":0},"west":{"uv":[11,19,12,20],"texture":0},"up":{"uv":[20,12,19,11],"texture":0},"down":{"uv":[13,19,12,20],"texture":0}},"type":"cube","uuid":"3d5b101a-9337-5c73-6fa0-4b5535706ecf"},{"name":"cube","rescale":false,"locked":false,"from":[7.166377174260999,5.8735854929763525,7.375],"to":[7.416377174260999,6.3735854929763525,7.6875],"autouv":0,"color":9,"origin":[7.291377174260999,6.3423354929763525,7.53125],"faces":{"north":{"uv":[19,12,20,13],"texture":0},"east":{"uv":[13,19,14,20],"texture":0},"south":{"uv":[19,13,20,14],"texture":0},"west":{"uv":[14,19,15,20],"texture":0},"up":{"uv":[20,15,19,14],"texture":0},"down":{"uv":[16,19,15,20],"texture":0}},"type":"cube","uuid":"d3562faf-4541-858e-5392-f3569b1692b1"},{"name":"cube","rescale":false,"locked":false,"from":[7.3772128477913546,5.643089664549574,7.4375],"to":[7.814712847791355,5.830589664549574,7.625],"autouv":0,"color":9,"rotation":[0,0,45],"origin":[7.845962847791355,5.674339664549574,7.53125],"faces":{"north":{"uv":[19,15,20,16],"texture":0},"east":{"uv":[16,19,17,20],"texture":0},"south":{"uv":[19,16,20,17],"texture":0},"west":{"uv":[17,19,18,20],"texture":0},"up":{"uv":[20,18,19,17],"texture":0},"down":{"uv":[19,19,18,20],"texture":0}},"type":"cube","uuid":"1c312f8d-8f5d-df2a-255e-2251646583aa"},{"name":"cube","rescale":false,"locked":false,"from":[7.122787123570478,5.6430896645495725,7.4375],"to":[7.560287123570478,5.8305896645495725,7.625],"autouv":0,"color":9,"rotation":[0,0,-45],"origin":[7.091537123570478,5.674339664549571,7.53125],"faces":{"north":{"uv":[19,18,20,19],"texture":0},"east":{"uv":[19,19,20,20],"texture":0},"south":{"uv":[0,20,1,21],"texture":0},"west":{"uv":[20,0,21,1],"texture":0},"up":{"uv":[2,21,1,20],"texture":0},"down":{"uv":[21,1,20,2],"texture":0}},"type":"cube","uuid":"fbb3c804-4d3d-2424-42cb-c691290f8f47"},{"name":"cube","rescale":false,"locked":false,"from":[7.6897128477913546,5.830589664549574,7.4375],"to":[7.814712847791355,6.080589664549574,7.625],"autouv":0,"color":9,"rotation":[0,0,45],"origin":[7.845962847791355,5.674339664549574,7.53125],"faces":{"north":{"uv":[2,20,3,21],"texture":0},"east":{"uv":[20,2,21,3],"texture":0},"south":{"uv":[3,20,4,21],"texture":0},"west":{"uv":[20,3,21,4],"texture":0},"up":{"uv":[5,21,4,20],"texture":0},"down":{"uv":[21,4,20,5],"texture":0}},"type":"cube","uuid":"d90e8a24-c771-e871-dd7f-c2ad4f45696d"},{"name":"cube","rescale":false,"locked":false,"from":[7.122787123570478,5.8305896645495725,7.4375],"to":[7.247787123570478,6.0805896645495725,7.625],"autouv":0,"color":9,"rotation":[0,0,-45],"origin":[7.091537123570478,5.674339664549571,7.53125],"faces":{"north":{"uv":[5,20,6,21],"texture":0},"east":{"uv":[20,5,21,6],"texture":0},"south":{"uv":[6,20,7,21],"texture":0},"west":{"uv":[20,6,21,7],"texture":0},"up":{"uv":[8,21,7,20],"texture":0},"down":{"uv":[21,7,20,8],"texture":0}},"type":"cube","uuid":"86dbb63c-9e97-115b-ae78-b4f34a024d25"},{"name":"cube","rescale":false,"locked":false,"from":[7.3125,3.9360854929763534,7.375],"to":[7.625,5.436085492976353,7.6875],"autouv":0,"color":9,"origin":[7.6461227971008325,6.342335492976353,7.53125],"faces":{"north":{"uv":[7,0,8,2],"texture":0},"east":{"uv":[1,7,2,9],"texture":0},"south":{"uv":[2,7,3,9],"texture":0},"west":{"uv":[7,2,8,4],"texture":0},"up":{"uv":[9,21,8,20],"texture":0},"down":{"uv":[21,8,20,9],"texture":0}},"type":"cube","uuid":"90c433b0-869a-f2b5-5ecb-a33943608caa"},{"name":"cube","rescale":false,"locked":false,"from":[6.997787123570478,5.7055896645495725,7.375],"to":[7.060287123570478,5.9555896645495725,7.6875],"autouv":0,"color":9,"rotation":[0,0,-45],"origin":[7.091537123570478,5.674339664549571,7.53125],"faces":{"north":{"uv":[9,20,10,21],"texture":0},"east":{"uv":[20,9,21,10],"texture":0},"south":{"uv":[10,20,11,21],"texture":0},"west":{"uv":[20,10,21,11],"texture":0},"up":{"uv":[12,21,11,20],"texture":0},"down":{"uv":[21,11,20,12],"texture":0}},"type":"cube","uuid":"172c37d1-1242-edee-1102-326a0a308a58"},{"name":"cube","rescale":false,"locked":false,"from":[6.997787123570478,5.67,7.375],"to":[7.060287123570478,5.92,7.6875],"autouv":0,"color":9,"rotation":[0,0,-45],"origin":[7.091537123570478,5.674339664549571,7.53125],"faces":{"north":{"uv":[12,20,13,21],"texture":0},"east":{"uv":[20,12,21,13],"texture":0},"south":{"uv":[13,20,14,21],"texture":0},"west":{"uv":[20,13,21,14],"texture":0},"up":{"uv":[15,21,14,20],"texture":0},"down":{"uv":[21,14,20,15],"texture":0}},"type":"cube","uuid":"88804984-19ee-d96d-ac42-7d242156dcda"},{"name":"cube","rescale":false,"locked":false,"from":[7.877212847791355,5.67,7.375],"to":[7.939712847791355,5.92,7.6875],"autouv":0,"color":9,"rotation":[0,0,45],"origin":[7.845962847791355,5.674339664549574,7.53125],"faces":{"north":{"uv":[15,20,16,21],"texture":0},"east":{"uv":[20,15,21,16],"texture":0},"south":{"uv":[16,20,17,21],"texture":0},"west":{"uv":[20,16,21,17],"texture":0},"up":{"uv":[18,21,17,20],"texture":0},"down":{"uv":[21,17,20,18],"texture":0}},"type":"cube","uuid":"25e876d2-215f-eeca-47da-fd9a8e64a209"},{"name":"cube","rescale":false,"locked":false,"from":[7.312500013678362,5.382738406064274,7.3787912607362385],"to":[7.625000013678362,5.507738406064274,7.4412912607362385],"autouv":0,"color":9,"rotation":[45,0,0],"origin":[7.468750013678362,5.413988406064274,7.4412912607362385],"faces":{"north":{"uv":[18,20,19,21],"texture":0},"east":{"uv":[20,18,21,19],"texture":0},"south":{"uv":[19,20,20,21],"texture":0},"west":{"uv":[20,19,21,20],"texture":0},"up":{"uv":[21,21,20,20],"texture":0},"down":{"uv":[1,21,0,22],"texture":0}},"type":"cube","uuid":"44b4514e-781b-c821-d41b-6813312521dc"},{"name":"cube","rescale":false,"locked":false,"from":[7.312500013678362,6.6007917005459475,4.061849522494646],"to":[7.625000013678362,6.7257917005459475,4.124349522494646],"autouv":0,"color":9,"rotation":[-45,0,0],"origin":[7.468750013678362,10.319541700545948,7.311849522494646],"faces":{"north":{"uv":[21,0,22,1],"texture":0},"east":{"uv":[1,21,2,22],"texture":0},"south":{"uv":[21,1,22,2],"texture":0},"west":{"uv":[2,21,3,22],"texture":0},"up":{"uv":[22,3,21,2],"texture":0},"down":{"uv":[4,21,3,22],"texture":0}},"type":"cube","uuid":"99016393-0764-2ee0-c887-66e2f46bc05a"},{"name":"cube","rescale":false,"locked":false,"from":[7.526296479771687,3.803884164932989,7.375],"to":[7.651296479771687,3.928884164932989,7.6875],"autouv":0,"color":9,"rotation":[0,0,22.5],"origin":[7.620046479771687,3.866384164932989,7.53125],"faces":{"north":{"uv":[21,3,22,4],"texture":0},"east":{"uv":[4,21,5,22],"texture":0},"south":{"uv":[21,4,22,5],"texture":0},"west":{"uv":[5,21,6,22],"texture":0},"up":{"uv":[22,6,21,5],"texture":0},"down":{"uv":[7,21,6,22],"texture":0}},"type":"cube","uuid":"bc6b3e72-e2a8-b406-fa2f-a5dce01bfa38"},{"name":"cube","rescale":false,"locked":false,"from":[7.286203534546522,3.803884164932989,7.375],"to":[7.411203534546522,3.928884164932989,7.6875],"autouv":0,"color":9,"rotation":[0,0,-22.5],"origin":[7.317453534546522,3.866384164932989,7.53125],"faces":{"north":{"uv":[21,6,22,7],"texture":0},"east":{"uv":[7,21,8,22],"texture":0},"south":{"uv":[21,7,22,8],"texture":0},"west":{"uv":[8,21,9,22],"texture":0},"up":{"uv":[22,9,21,8],"texture":0},"down":{"uv":[10,21,9,22],"texture":0}},"type":"cube","uuid":"8b5a7999-d0c6-3d88-3f3a-20b809b547b6"},{"name":"cube","rescale":false,"locked":false,"from":[7.312500013678362,3.803884164932989,7.34870352086816],"to":[7.625000013678362,3.928884164932989,7.47370352086816],"autouv":0,"color":9,"rotation":[22.5,0,0],"origin":[7.468750013678362,3.866384164932989,7.37995352086816],"faces":{"north":{"uv":[21,9,22,10],"texture":0},"east":{"uv":[10,21,11,22],"texture":0},"south":{"uv":[21,10,22,11],"texture":0},"west":{"uv":[11,21,12,22],"texture":0},"up":{"uv":[22,12,21,11],"texture":0},"down":{"uv":[13,21,12,22],"texture":0}},"type":"cube","uuid":"b22e03b5-7b09-e3df-8302-63406e3bbea1"},{"name":"cube","rescale":false,"locked":false,"from":[7.312500013678362,3.803884164932989,7.58879647913184],"to":[7.625000013678362,3.928884164932989,7.71379647913184],"autouv":0,"color":9,"rotation":[-22.5,0,0],"origin":[7.468750013678362,3.866384164932989,7.68254647913184],"faces":{"north":{"uv":[21,12,22,13],"texture":0},"east":{"uv":[13,21,14,22],"texture":0},"south":{"uv":[21,13,22,14],"texture":0},"west":{"uv":[14,21,15,22],"texture":0},"up":{"uv":[22,15,21,14],"texture":0},"down":{"uv":[16,21,15,22],"texture":0}},"type":"cube","uuid":"6b36d0ca-5aeb-1b72-0a6d-a2307f134bca"},{"name":"cube","rescale":false,"locked":false,"from":[7.264664584632726,3.758100551412443,7.375],"to":[7.514664584632726,3.820600551412443,7.6875],"autouv":0,"color":9,"origin":[7.327164584632726,3.7581005514124426,7.53125],"faces":{"north":{"uv":[21,15,22,16],"texture":0},"east":{"uv":[16,21,17,22],"texture":0},"south":{"uv":[21,16,22,17],"texture":0},"west":{"uv":[17,21,18,22],"texture":0},"up":{"uv":[22,18,21,17],"texture":0},"down":{"uv":[19,21,18,22],"texture":0}},"type":"cube","uuid":"f33285ae-4c42-9ad9-0ded-d3b29b5db3f9"},{"name":"cube","rescale":false,"locked":false,"from":[7.422835429685483,3.758100551412443,7.375],"to":[7.672835429685483,3.820600551412443,7.6875],"autouv":0,"color":9,"origin":[7.485335429685483,3.7581005514124426,7.53125],"faces":{"north":{"uv":[21,18,22,19],"texture":0},"east":{"uv":[19,21,20,22],"texture":0},"south":{"uv":[21,19,22,20],"texture":0},"west":{"uv":[20,21,21,22],"texture":0},"up":{"uv":[22,21,21,20],"texture":0},"down":{"uv":[22,21,21,22],"texture":0}},"type":"cube","uuid":"c3df2b75-30ff-a425-980d-4e74c7798261"},{"name":"cube","rescale":false,"locked":false,"from":[7.312500013678362,3.758100551412442,7.327164570954364],"to":[7.625000013678362,3.820600551412442,7.577164570954364],"autouv":0,"color":9,"origin":[7.468750013678362,3.7893505514124426,7.452164570954364],"faces":{"north":{"uv":[0,22,1,23],"texture":0},"east":{"uv":[22,0,23,1],"texture":0},"south":{"uv":[1,22,2,23],"texture":0},"west":{"uv":[22,1,23,2],"texture":0},"up":{"uv":[3,23,2,22],"texture":0},"down":{"uv":[23,2,22,3],"texture":0}},"type":"cube","uuid":"33f3ae24-da96-c92d-2c75-0d08e0049f73"},{"name":"cube","rescale":false,"locked":false,"from":[7.312500013678362,3.758100551412442,7.485335429045636],"to":[7.625000013678362,3.820600551412442,7.735335429045636],"autouv":0,"color":9,"origin":[7.468750013678362,3.7893505514124426,7.360335429045636],"faces":{"north":{"uv":[3,22,4,23],"texture":0},"east":{"uv":[22,3,23,4],"texture":0},"south":{"uv":[4,22,5,23],"texture":0},"west":{"uv":[22,4,23,5],"texture":0},"up":{"uv":[6,23,5,22],"texture":0},"down":{"uv":[23,5,22,6],"texture":0}},"type":"cube","uuid":"2cd007d3-d085-12c2-2557-fbc4a78f306d"},{"name":"cube","rescale":false,"locked":false,"from":[7.312500013678362,3.649816937891897,7.58879647913184],"to":[7.625000013678362,3.774816937891897,7.71379647913184],"autouv":0,"color":9,"rotation":[22.5,0,0],"origin":[7.468750013678362,3.712316937891897,7.68254647913184],"faces":{"north":{"uv":[6,22,7,23],"texture":0},"east":{"uv":[22,6,23,7],"texture":0},"south":{"uv":[7,22,8,23],"texture":0},"west":{"uv":[22,7,23,8],"texture":0},"up":{"uv":[9,23,8,22],"texture":0},"down":{"uv":[23,8,22,9],"texture":0}},"type":"cube","uuid":"546e7fbd-a0f1-195b-144c-69a4fa7758b8"},{"name":"cube","rescale":false,"locked":false,"from":[7.286203534546522,3.649816937891897,7.375],"to":[7.411203534546522,3.774816937891897,7.6875],"autouv":0,"color":9,"rotation":[0,0,22.5],"origin":[7.317453534546522,3.712316937891897,7.53125],"faces":{"north":{"uv":[9,22,10,23],"texture":0},"east":{"uv":[22,9,23,10],"texture":0},"south":{"uv":[10,22,11,23],"texture":0},"west":{"uv":[22,10,23,11],"texture":0},"up":{"uv":[12,23,11,22],"texture":0},"down":{"uv":[23,11,22,12],"texture":0}},"type":"cube","uuid":"71820737-8f4b-ab46-fc10-13070ddaee83"},{"name":"cube","rescale":false,"locked":false,"from":[7.526296479771687,3.649816937891897,7.375],"to":[7.651296479771687,3.774816937891897,7.6875],"autouv":0,"color":9,"rotation":[0,0,-22.5],"origin":[7.620046479771687,3.712316937891897,7.53125],"faces":{"north":{"uv":[12,22,13,23],"texture":0},"east":{"uv":[22,12,23,13],"texture":0},"south":{"uv":[13,22,14,23],"texture":0},"west":{"uv":[22,13,23,14],"texture":0},"up":{"uv":[15,23,14,22],"texture":0},"down":{"uv":[23,14,22,15],"texture":0}},"type":"cube","uuid":"88b4d6e5-3674-d873-347e-f6c918550604"},{"name":"cube","rescale":false,"locked":false,"from":[7.312500013678362,3.649816937891897,7.34870352086816],"to":[7.625000013678362,3.774816937891897,7.47370352086816],"autouv":0,"color":9,"rotation":[-22.5,0,0],"origin":[7.468750013678362,3.712316937891897,7.37995352086816],"faces":{"north":{"uv":[15,22,16,23],"texture":0},"east":{"uv":[22,15,23,16],"texture":0},"south":{"uv":[16,22,17,23],"texture":0},"west":{"uv":[22,16,23,17],"texture":0},"up":{"uv":[18,23,17,22],"texture":0},"down":{"uv":[23,17,22,18],"texture":0}},"type":"cube","uuid":"e8cf3d47-3aaf-d37a-f224-78cfa0280af2"},{"name":"cube","rescale":false,"locked":false,"from":[7.312500013678362,3.642615609848533,7.375],"to":[7.625000013678362,3.705115609848533,7.6875],"autouv":0,"color":9,"origin":[7.375000013678362,3.8926156098485327,7.53125],"faces":{"north":{"uv":[18,22,19,23],"texture":0},"east":{"uv":[22,18,23,19],"texture":0},"south":{"uv":[19,22,20,23],"texture":0},"west":{"uv":[22,19,23,20],"texture":0},"up":{"uv":[21,23,20,22],"texture":0},"down":{"uv":[23,20,22,21],"texture":0}},"type":"cube","uuid":"b8f80b74-dce7-03ac-b240-ef53b80f5325"}],"outliner":[{"name":"Everything","origin":[8,8,8],"color":0,"uuid":"bccb76cd-1a6a-4077-afdb-c25403bf28c6","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"Blade","origin":[8,8,8],"color":0,"uuid":"9f929cda-ec3f-e79f-3541-5d659a63ebf0","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["cc74b1f8-1e8f-2690-4ca6-2421215c7f22","cdf3425a-1f52-3d54-c384-6882f16a6674","808f4969-4d0b-9997-4c19-2c83784bd9b8","17b592e1-ecd9-6aea-dde1-8ba11665aea4","2a6475bc-856d-ed2f-2a75-839bebcd630b","325f2d72-6024-da7b-c468-3fd08aabe979","e7599a20-fe1e-254f-7024-ba6b6e06b75a","d4430d7e-1dca-bd74-48cb-a19fab6a70fa","d8a9dd77-b117-f305-519f-b4b2e9bb2a99","f4c8c748-ae75-cefa-27b4-6622e630f44f","86192ba7-2a86-c4b7-fc6b-b76a72d3a205","bb7dfb12-54f6-dd4c-e34c-15af9f51037e","66b745bd-877b-f94f-2c1c-68e36b0f77a6","f11d6fef-b43d-173d-3feb-9c4aa23f663a","dc58be38-b88f-0605-ed62-4d557472a854","9377f074-72b6-2c75-cf40-4cc557734c5d","3a3e082a-5d1d-e5e9-f602-0a7913d23e33","865c9059-9f03-71e4-2512-f8a0949b0a3b","3d5b101a-9337-5c73-6fa0-4b5535706ecf","d3562faf-4541-858e-5392-f3569b1692b1","90c433b0-869a-f2b5-5ecb-a33943608caa","bc6b3e72-e2a8-b406-fa2f-a5dce01bfa38","8b5a7999-d0c6-3d88-3f3a-20b809b547b6","f33285ae-4c42-9ad9-0ded-d3b29b5db3f9","b8f80b74-dce7-03ac-b240-ef53b80f5325","33f3ae24-da96-c92d-2c75-0d08e0049f73","2cd007d3-d085-12c2-2557-fbc4a78f306d","c3df2b75-30ff-a425-980d-4e74c7798261","b22e03b5-7b09-e3df-8302-63406e3bbea1","6b36d0ca-5aeb-1b72-0a6d-a2307f134bca","e8cf3d47-3aaf-d37a-f224-78cfa0280af2","88b4d6e5-3674-d873-347e-f6c918550604","71820737-8f4b-ab46-fc10-13070ddaee83","546e7fbd-a0f1-195b-144c-69a4fa7758b8","44b4514e-781b-c821-d41b-6813312521dc","99016393-0764-2ee0-c887-66e2f46bc05a","1483c536-7a4f-f8cf-9bb9-56b5e935ce17","3cd23fbf-f4d8-7aec-8909-6188614138c1","5c95740a-ca51-9bb5-39d4-526b273d9e2d","c3f22c3e-b15b-7a1c-da66-820a2427f0b0","69981905-b41e-eed4-e743-930bd8f08dde","5242f66b-855a-865d-68af-644cb366b2a9","172c37d1-1242-edee-1102-326a0a308a58","88804984-19ee-d96d-ac42-7d242156dcda","fbb3c804-4d3d-2424-42cb-c691290f8f47","86dbb63c-9e97-115b-ae78-b4f34a024d25","d4e6dd36-9883-5503-5313-9abbf947673d","b567a66f-ac4c-412e-2e8b-bc107854bec7","25e876d2-215f-eeca-47da-fd9a8e64a209","1c312f8d-8f5d-df2a-255e-2251646583aa","d90e8a24-c771-e871-dd7f-c2ad4f45696d","71fdf7cf-b6bd-722d-c47d-c1ce04a15799","1b0f4ea7-e280-7f7a-75be-99778a9de028","a7e0e1a9-d603-f3d8-9ffe-afa9755fa3f4","a17d0e57-591e-8c77-5988-e20de9e4c51e","94b3d9b9-8507-0135-1f95-fdc9141cce61","5451e343-e2b7-50d9-bc09-31d40858d5c6","1107a67f-1247-6f24-90f1-b61f531d2388","69e686c8-97fc-faa4-c189-2aa4f0bbdad5","c9a54a2d-de47-f6e0-5c04-0229d0cc6188","5c8483dc-d652-584c-5780-7d527dd3c146","1678ea84-184e-8804-7a7f-e6e34bedb0b5","f079fafc-0f60-c365-72ca-63fa12cbdb3b","05b4e00f-484a-7e37-acf2-9dbf9dd86675","d726bb0b-1d52-f397-8f9d-842e4ac29d46","1d25a3e1-3266-bf07-bb60-f1acb32c8b37","c7286cfa-bff4-0743-de65-be72da1e0531","cae3db5b-28bf-621e-50a7-1e437e80532a","eedb67a5-8387-9acf-6464-93558cc9a6bc","aed18435-8fd5-de42-5ee5-2e623ce8aa47","4142bc3d-6860-17fa-721d-5fec9de7e6c5","75ed4d17-5699-c9db-8e6f-1e0c9ab2a7e9","4fbeb8dc-8c5d-b21f-45fc-79c32cdec6e4","a113a21f-932a-22bf-e931-5e05058ce07f","cc45e147-2599-1d51-34c4-4e0e21587bb3","2ebbb7dd-fed2-376a-b109-4207a8383a03","77579049-c53a-00b3-04a8-50a474b203b1","55ec728b-ed58-029f-90b8-53b7bf043fc7","7b581b69-13fa-88f2-0fb3-e325b98a81e0"]}]}],"textures":[{"path":"C:\\Users\\hawkt\\Documents\\GitHub\\cosmere\\src\\main\\resources\\assets\\cosmere\\textures\\item\\models\\shardblade_model\\dustbringer_honorblade.png","name":"dustbringer_honorblade.png","folder":"item/models/shardblade_model","namespace":"cosmere","id":"0","particle":true,"render_mode":"default","visible":true,"mode":"bitmap","saved":true,"uuid":"15caff90-f6e1-c2ae-e833-9833d79fa214","relative_path":"../../Documents/GitHub/cosmere/src/main/resources/assets/cosmere/textures/item/models/shardblade_model/dustbringer_honorblade.png","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAS9JREFUWEdjPHri4n8GHGDd6nUMQaFBGLIXL93GpYVBX0+VAaTPcedaBp8rVxhxKoRKMI46gBYh8D4lGhzAFEcBrvgjlAaGtwPw+R4UYqBcQHIIgLINCGDLcujRMOgdcPfmZXAZQLNESCgEQBbLTWoYdQB1QoCY4MZWVpAcBeRahKugIskB02atwVkbYrWAkYGBmZmF4e+fPzgrOto6AE/9CiqEQKE56oABDQFYa6h/TyLDXoliwi0ikhMhWhoAxTsygDnAISqKgaeqirAD8DVIQAaDDFRW1yXUtGMA1QEwAKoL5pt6MKyd30PYAcXF9SjZEFaRELSRgAJiWkMgIxi36OiQVg7gsHj5hBMMcxXrGPZ8z2fw0ZEn6HOYMUQrpDREcOkfdcBoCIyGwGgIAAAlS/MhkkJH9AAAAABJRU5ErkJggg=="}],"display":{"thirdperson_righthand":{"rotation":[0,90,0],"translation":[1.5,10.75,-0.25],"scale":[4,4,4]}}} \ No newline at end of file diff --git a/blockbench/surgebinding/shardblades/honorblades/edgedancer_honorblade.bbmodel b/blockbench/surgebinding/shardblades/honorblades/edgedancer_honorblade.bbmodel new file mode 100644 index 000000000..08239cbbc --- /dev/null +++ b/blockbench/surgebinding/shardblades/honorblades/edgedancer_honorblade.bbmodel @@ -0,0 +1 @@ +{"meta":{"format_version":"4.0","model_format":"java_block","box_uv":false},"name":"edgedancer_honorblade","parent":"","ambientocclusion":true,"front_gui_light":false,"visible_box":[1,1,0],"variable_placeholders":"","variable_placeholder_buttons":[],"resolution":{"width":32,"height":32},"elements":[{"name":"cube","rescale":false,"locked":false,"from":[7.75499,5.59655,7.7125],"to":[8.25499,5.78405,8.15],"autouv":0,"color":1,"origin":[7.81749,5.8778,7.93125],"faces":{"north":{"uv":[1,22,2,23],"texture":0},"east":{"uv":[22,1,23,2],"texture":0},"south":{"uv":[2,22,3,23],"texture":0},"west":{"uv":[22,2,23,3],"texture":0},"up":{"uv":[4,23,3,22],"texture":0},"down":{"uv":[23,3,22,4],"texture":0}},"type":"cube","uuid":"a0b1689f-ec8a-71ac-2bab-080f517131c0"},{"name":"cube","rescale":false,"locked":false,"from":[7.785,2.84655,7.7125],"to":[8.2225,2.97155,8.15],"autouv":0,"color":5,"origin":[7.81749,5.8778,7.93125],"faces":{"north":{"uv":[23,20,24,21],"texture":0},"east":{"uv":[21,23,22,24],"texture":0},"south":{"uv":[23,21,24,22],"texture":0},"west":{"uv":[22,23,23,24],"texture":0},"up":{"uv":[24,23,23,22],"texture":0},"down":{"uv":[24,23,23,24],"texture":0}},"type":"cube","uuid":"5b92ef71-200b-1bd3-1715-71291707f28f"},{"name":"cube","rescale":false,"locked":false,"from":[7.73684,2.21197,7.7125],"to":[7.79934,2.83697,8.15],"autouv":0,"color":5,"rotation":[0,0,22.5],"origin":[7.76809,2.80572,7.93125],"faces":{"north":{"uv":[19,22,20,23],"texture":0},"east":{"uv":[22,19,23,20],"texture":0},"south":{"uv":[20,22,21,23],"texture":0},"west":{"uv":[22,20,23,21],"texture":0},"up":{"uv":[22,23,21,22],"texture":0},"down":{"uv":[23,21,22,22],"texture":0}},"type":"cube","uuid":"3dea93df-16a7-65cb-cbe6-92daeec01d23"},{"name":"cube","rescale":false,"locked":false,"from":[7.79934,2.39947,7.7125],"to":[7.98684,2.83697,8.15],"autouv":0,"color":2,"rotation":[0,0,22.5],"origin":[7.76809,2.80572,7.93125],"faces":{"north":{"uv":[23,8,24,9],"texture":0},"east":{"uv":[9,23,10,24],"texture":0},"south":{"uv":[23,9,24,10],"texture":0},"west":{"uv":[10,23,11,24],"texture":0},"up":{"uv":[24,11,23,10],"texture":0},"down":{"uv":[12,23,11,24],"texture":0}},"type":"cube","uuid":"8b1996da-6bdc-3e46-721f-0cf51682073c"},{"name":"cube","rescale":false,"locked":false,"from":[7.93841,2.32699,7.7125],"to":[8.06341,2.88949,8.15],"autouv":0,"color":7,"origin":[7.93841,2.63949,7.93125],"faces":{"north":{"uv":[23,14,24,15],"texture":0},"east":{"uv":[15,23,16,24],"texture":0},"south":{"uv":[23,15,24,16],"texture":0},"west":{"uv":[16,23,17,24],"texture":0},"up":{"uv":[24,17,23,16],"texture":0},"down":{"uv":[18,23,17,24],"texture":0}},"type":"cube","uuid":"4f08c2d7-2771-7a55-2081-dad3f971d7f5"},{"name":"cube","rescale":false,"locked":false,"from":[7.98,2.26449,7.7125],"to":[8.0425,2.32699,8.15],"autouv":0,"color":6,"origin":[7.93841,2.63949,7.93125],"faces":{"north":{"uv":[23,17,24,18],"texture":0},"east":{"uv":[18,23,19,24],"texture":0},"south":{"uv":[23,18,24,19],"texture":0},"west":{"uv":[19,23,20,24],"texture":0},"up":{"uv":[24,20,23,19],"texture":0},"down":{"uv":[21,23,20,24],"texture":0}},"type":"cube","uuid":"741ca0ab-134e-3a86-286a-03e21d9e8c50"},{"name":"cube","rescale":false,"locked":false,"from":[7.84447,2.78688,7.7125],"to":[7.90697,2.97438,8.15],"autouv":0,"color":2,"rotation":[0,0,-22.5],"origin":[7.87572,3.09938,7.93125],"faces":{"north":{"uv":[22,22,23,23],"texture":0},"east":{"uv":[0,23,1,24],"texture":0},"south":{"uv":[23,0,24,1],"texture":0},"west":{"uv":[1,23,2,24],"texture":0},"up":{"uv":[24,2,23,1],"texture":0},"down":{"uv":[3,23,2,24],"texture":0}},"type":"cube","uuid":"02f3227e-e4c7-3ecb-9ce3-9ee6a00d2439"},{"name":"cube","rescale":false,"locked":false,"from":[8.11005,2.73905,7.7125],"to":[8.17255,2.92655,8.15],"autouv":0,"color":2,"rotation":[0,0,22.5],"origin":[8.0163,3.05155,7.93125],"faces":{"north":{"uv":[23,5,24,6],"texture":0},"east":{"uv":[6,23,7,24],"texture":0},"south":{"uv":[23,6,24,7],"texture":0},"west":{"uv":[7,23,8,24],"texture":0},"up":{"uv":[24,8,23,7],"texture":0},"down":{"uv":[9,23,8,24],"texture":0}},"type":"cube","uuid":"c437bf88-47ca-1b11-8b8f-2cc0d3ecfdbe"},{"name":"cube","rescale":false,"locked":false,"from":[8.20816,2.21197,7.7125],"to":[8.27066,2.83697,8.15],"autouv":0,"color":4,"rotation":[0,0,-22.5],"origin":[8.23941,2.80572,7.93125],"faces":{"north":{"uv":[23,2,24,3],"texture":0},"east":{"uv":[3,23,4,24],"texture":0},"south":{"uv":[23,3,24,4],"texture":0},"west":{"uv":[4,23,5,24],"texture":0},"up":{"uv":[24,5,23,4],"texture":0},"down":{"uv":[6,23,5,24],"texture":0}},"type":"cube","uuid":"ee51c937-5d8c-8d39-a957-6196b8b8e120"},{"name":"cube","rescale":false,"locked":false,"from":[8.02066,2.39947,7.7125],"to":[8.20816,2.83697,8.15],"autouv":0,"color":2,"rotation":[0,0,-22.5],"origin":[8.23941,2.80572,7.93125],"faces":{"north":{"uv":[23,11,24,12],"texture":0},"east":{"uv":[12,23,13,24],"texture":0},"south":{"uv":[23,12,24,13],"texture":0},"west":{"uv":[13,23,14,24],"texture":0},"up":{"uv":[24,14,23,13],"texture":0},"down":{"uv":[15,23,14,24],"texture":0}},"type":"cube","uuid":"87d1c8a8-d887-5b88-b7a9-71676450beb8"},{"name":"cube","rescale":false,"locked":false,"from":[8.51599,2.50945,7.7125],"to":[8.56999,2.56345,8.15],"autouv":0,"color":7,"rotation":[0,0,-45],"origin":[7.92224,3.0407,9.05625],"faces":{"north":{"uv":[16,22,17,23],"texture":0},"east":{"uv":[22,16,23,17],"texture":0},"south":{"uv":[17,22,18,23],"texture":0},"west":{"uv":[22,17,23,18],"texture":0},"up":{"uv":[19,23,18,22],"texture":0},"down":{"uv":[23,18,22,19],"texture":0}},"type":"cube","uuid":"dca05f53-f04b-6152-6bfa-fbd572aefb40"},{"name":"cube","rescale":false,"locked":false,"from":[7.785,2.965,7.7125],"to":[8.2225,5.6525,8.15],"autouv":0,"color":3,"origin":[0,1.125,0.275],"faces":{"north":{"uv":[4,0,5,3],"texture":0},"east":{"uv":[4,3,5,6],"texture":0},"south":{"uv":[5,0,6,3],"texture":0},"west":{"uv":[5,3,6,6],"texture":0},"up":{"uv":[1,25,0,24],"texture":0},"down":{"uv":[25,0,24,1],"texture":0}},"type":"cube","uuid":"a683acca-29f9-6277-a1cc-2d2a8115f84f"},{"name":"cube","rescale":false,"locked":false,"from":[7.75499,5.73449,7.76964],"to":[8.25499,5.92199,7.89464],"autouv":0,"color":7,"rotation":[45,0,0],"origin":[8.06249,5.82824,7.80089],"faces":{"north":{"uv":[4,22,5,23],"texture":0},"east":{"uv":[22,4,23,5],"texture":0},"south":{"uv":[5,22,6,23],"texture":0},"west":{"uv":[22,5,23,6],"texture":0},"up":{"uv":[7,23,6,22],"texture":0},"down":{"uv":[23,6,22,7],"texture":0}},"type":"cube","uuid":"01a12ae6-bba7-beb3-5d95-5db4b8b9c5b7"},{"name":"cube","rescale":false,"locked":false,"from":[8.15899,5.42814,7.7125],"to":[8.22149,5.61564,8.15],"autouv":0,"color":6,"rotation":[0,0,-22.5],"origin":[8.19024,5.52189,7.9625],"faces":{"north":{"uv":[10,22,11,23],"texture":0},"east":{"uv":[22,10,23,11],"texture":0},"south":{"uv":[11,22,12,23],"texture":0},"west":{"uv":[22,11,23,12],"texture":0},"up":{"uv":[13,23,12,22],"texture":0},"down":{"uv":[23,12,22,13],"texture":0}},"type":"cube","uuid":"39b14d7b-a375-5b05-0b3d-1efa19bcf45d"},{"name":"cube","rescale":false,"locked":false,"from":[7.78848,5.42814,7.7125],"to":[7.85098,5.61564,8.15],"autouv":0,"color":2,"rotation":[0,0,22.5],"origin":[7.81973,5.52189,7.93125],"faces":{"north":{"uv":[13,22,14,23],"texture":0},"east":{"uv":[22,13,23,14],"texture":0},"south":{"uv":[14,22,15,23],"texture":0},"west":{"uv":[22,14,23,15],"texture":0},"up":{"uv":[16,23,15,22],"texture":0},"down":{"uv":[23,15,22,16],"texture":0}},"type":"cube","uuid":"c819b773-31c4-a7b1-cd66-67142c404c54"},{"name":"cube","rescale":false,"locked":false,"from":[7.75499,5.73449,7.96786],"to":[8.25499,5.92199,8.09286],"autouv":0,"color":2,"rotation":[-45,0,0],"origin":[8.00499,5.82824,8.06161],"faces":{"north":{"uv":[7,22,8,23],"texture":0},"east":{"uv":[22,7,23,8],"texture":0},"south":{"uv":[8,22,9,23],"texture":0},"west":{"uv":[22,8,23,9],"texture":0},"up":{"uv":[10,23,9,22],"texture":0},"down":{"uv":[23,9,22,10],"texture":0}},"type":"cube","uuid":"6578c430-8bbe-6274-bd71-5ecf46f365b2"},{"name":"cube","rescale":false,"locked":false,"from":[7.72106,6.91237,7.8375],"to":[8.48106,7.67237,8.025],"autouv":0,"color":0,"rotation":[0,0,-45],"origin":[7.75231,7.29237,7.99375],"faces":{"north":{"uv":[17,14,18,15],"texture":0},"east":{"uv":[15,17,16,18],"texture":0},"south":{"uv":[17,15,18,16],"texture":0},"west":{"uv":[16,17,17,18],"texture":0},"up":{"uv":[18,17,17,16],"texture":0},"down":{"uv":[18,17,17,18],"texture":0}},"type":"cube","uuid":"10d0b2f9-cb0c-214a-ce9c-2f97aea76539"},{"name":"cube","rescale":false,"locked":false,"from":[7.46152,5.92077,7.8375],"to":[8.53652,7.04577,8.025],"autouv":0,"color":1,"origin":[7.99277,6.48327,7.93125],"faces":{"north":{"uv":[17,11,18,12],"texture":0},"east":{"uv":[12,17,13,18],"texture":0},"south":{"uv":[17,12,18,13],"texture":0},"west":{"uv":[13,17,14,18],"texture":0},"up":{"uv":[18,14,17,13],"texture":0},"down":{"uv":[15,17,14,18],"texture":0}},"type":"cube","uuid":"7c5fdbda-57b2-69b6-a052-5336a2f7ec79"},{"name":"cube","rescale":false,"locked":false,"from":[6.46152,6.60827,7.8375],"to":[7.46152,6.85827,8.025],"autouv":0,"color":1,"origin":[7.99277,6.48327,7.93125],"faces":{"north":{"uv":[13,20,14,21],"texture":0},"east":{"uv":[20,13,21,14],"texture":0},"south":{"uv":[14,20,15,21],"texture":0},"west":{"uv":[20,14,21,15],"texture":0},"up":{"uv":[16,21,15,20],"texture":0},"down":{"uv":[21,15,20,16],"texture":0}},"type":"cube","uuid":"9876234c-bb4d-9b11-e453-12d0df249deb"},{"name":"cube","rescale":false,"locked":false,"from":[5.7879,6.74226,7.8375],"to":[6.5379,6.99226,8.025],"autouv":0,"color":5,"rotation":[0,0,-22.5],"origin":[6.1629,6.86726,7.93125],"faces":{"north":{"uv":[19,20,20,21],"texture":0},"east":{"uv":[20,19,21,20],"texture":0},"south":{"uv":[20,20,21,21],"texture":0},"west":{"uv":[0,21,1,22],"texture":0},"up":{"uv":[22,1,21,0],"texture":0},"down":{"uv":[2,21,1,22],"texture":0}},"type":"cube","uuid":"bcd66d9a-1bda-2bc5-a269-454e409bcaee"},{"name":"cube","rescale":false,"locked":false,"from":[5.67678,6.87625,7.8375],"to":[5.86428,7.12625,8.025],"autouv":0,"color":1,"origin":[5.48928,7.00125,7.93125],"faces":{"north":{"uv":[21,16,22,17],"texture":0},"east":{"uv":[17,21,18,22],"texture":0},"south":{"uv":[21,17,22,18],"texture":0},"west":{"uv":[18,21,19,22],"texture":0},"up":{"uv":[22,19,21,18],"texture":0},"down":{"uv":[20,21,19,22],"texture":0}},"type":"cube","uuid":"b2cae097-60d4-92bb-f4e5-ce12e4867528"},{"name":"cube","rescale":false,"locked":false,"from":[10.13572,6.87625,7.8375],"to":[10.32322,7.12625,8.025],"autouv":0,"color":2,"origin":[5.51072,7.00125,7.93125],"faces":{"north":{"uv":[21,19,22,20],"texture":0},"east":{"uv":[20,21,21,22],"texture":0},"south":{"uv":[21,20,22,21],"texture":0},"west":{"uv":[21,21,22,22],"texture":0},"up":{"uv":[1,23,0,22],"texture":0},"down":{"uv":[23,0,22,1],"texture":0}},"type":"cube","uuid":"0b23f0a2-80c8-ad9b-0f83-fd908718e04d"},{"name":"cube","rescale":false,"locked":false,"from":[9.4621,6.74226,7.8375],"to":[10.2121,6.99226,8.025],"autouv":0,"color":4,"rotation":[0,0,22.5],"origin":[9.8371,6.86726,7.93125],"faces":{"north":{"uv":[21,1,22,2],"texture":0},"east":{"uv":[2,21,3,22],"texture":0},"south":{"uv":[21,2,22,3],"texture":0},"west":{"uv":[3,21,4,22],"texture":0},"up":{"uv":[22,4,21,3],"texture":0},"down":{"uv":[5,21,4,22],"texture":0}},"type":"cube","uuid":"a71e2867-25a8-0b0f-c0cc-403d91dc053e"},{"name":"cube","rescale":false,"locked":false,"from":[8.53652,6.60827,7.8375],"to":[9.53652,6.85827,8.025],"autouv":0,"color":2,"origin":[8.00527,6.67077,7.93125],"faces":{"north":{"uv":[16,20,17,21],"texture":0},"east":{"uv":[20,16,21,17],"texture":0},"south":{"uv":[17,20,18,21],"texture":0},"west":{"uv":[20,17,21,18],"texture":0},"up":{"uv":[19,21,18,20],"texture":0},"down":{"uv":[21,18,20,19],"texture":0}},"type":"cube","uuid":"581e5017-a3ee-901a-9df8-4ddf26962747"},{"name":"cube","rescale":false,"locked":false,"from":[7.28474,6.05649,7.8375],"to":[7.34724,6.18149,8.025],"autouv":0,"color":5,"origin":[7.31599,6.05649,7.93125],"faces":{"north":{"uv":[6,18,7,19],"texture":0},"east":{"uv":[18,6,19,7],"texture":0},"south":{"uv":[7,18,8,19],"texture":0},"west":{"uv":[18,7,19,8],"texture":0},"up":{"uv":[9,19,8,18],"texture":0},"down":{"uv":[19,8,18,9],"texture":0}},"type":"cube","uuid":"e9f98aa0-9f80-66d1-ae2d-22cd3c49cf10"},{"name":"cube","rescale":false,"locked":false,"from":[8.04429,6.2552,7.8375],"to":[8.16929,6.5052,8.025],"autouv":0,"color":7,"rotation":[0,0,-45],"origin":[7.57554,7.1352,7.99375],"faces":{"north":{"uv":[0,18,1,19],"texture":0},"east":{"uv":[18,0,19,1],"texture":0},"south":{"uv":[1,18,2,19],"texture":0},"west":{"uv":[18,1,19,2],"texture":0},"up":{"uv":[3,19,2,18],"texture":0},"down":{"uv":[19,2,18,3],"texture":0}},"type":"cube","uuid":"e1481c5d-960b-2510-b7ca-5296d12a0552"},{"name":"cube","rescale":false,"locked":false,"from":[7.25961,6.59836,7.8375],"to":[7.50961,6.72336,8.025],"autouv":0,"color":4,"rotation":[0,0,-22.5],"origin":[7.32211,6.59836,7.93125],"faces":{"north":{"uv":[21,4,22,5],"texture":0},"east":{"uv":[5,21,6,22],"texture":0},"south":{"uv":[21,5,22,6],"texture":0},"west":{"uv":[6,21,7,22],"texture":0},"up":{"uv":[22,7,21,6],"texture":0},"down":{"uv":[8,21,7,22],"texture":0}},"type":"cube","uuid":"a8f2bd0c-1acf-f5d2-dac3-a0ce07db54fc"},{"name":"cube","rescale":false,"locked":false,"from":[7.25961,6.74318,7.8375],"to":[7.50961,6.86818,8.025],"autouv":0,"color":4,"rotation":[0,0,22.5],"origin":[7.32211,6.86818,7.93125],"faces":{"north":{"uv":[21,10,22,11],"texture":0},"east":{"uv":[11,21,12,22],"texture":0},"south":{"uv":[21,11,22,12],"texture":0},"west":{"uv":[12,21,13,22],"texture":0},"up":{"uv":[22,13,21,12],"texture":0},"down":{"uv":[14,21,13,22],"texture":0}},"type":"cube","uuid":"77056f1e-527a-d572-1c72-cb1cf6422d4c"},{"name":"cube","rescale":false,"locked":false,"from":[8.49039,6.74318,7.8375],"to":[8.74039,6.86818,8.025],"autouv":0,"color":7,"rotation":[0,0,-22.5],"origin":[8.67789,6.86818,7.93125],"faces":{"north":{"uv":[21,13,22,14],"texture":0},"east":{"uv":[14,21,15,22],"texture":0},"south":{"uv":[21,14,22,15],"texture":0},"west":{"uv":[15,21,16,22],"texture":0},"up":{"uv":[22,16,21,15],"texture":0},"down":{"uv":[17,21,16,22],"texture":0}},"type":"cube","uuid":"13cd582d-ee6d-303c-9614-54bbff256428"},{"name":"cube","rescale":false,"locked":false,"from":[8.49039,6.59836,7.8375],"to":[8.74039,6.72336,8.025],"autouv":0,"color":3,"rotation":[0,0,22.5],"origin":[8.67789,6.59836,7.93125],"faces":{"north":{"uv":[21,7,22,8],"texture":0},"east":{"uv":[8,21,9,22],"texture":0},"south":{"uv":[21,8,22,9],"texture":0},"west":{"uv":[9,21,10,22],"texture":0},"up":{"uv":[22,10,21,9],"texture":0},"down":{"uv":[11,21,10,22],"texture":0}},"type":"cube","uuid":"ca0c9132-0d4e-69a5-5472-17c58f660ff5"},{"name":"cube","rescale":false,"locked":false,"from":[8.47977,6.02903,7.8375],"to":[8.72977,6.27903,8.025],"autouv":0,"color":6,"rotation":[0,0,-45],"origin":[8.60477,6.24778,7.93125],"faces":{"north":{"uv":[3,18,4,19],"texture":0},"east":{"uv":[18,3,19,4],"texture":0},"south":{"uv":[4,18,5,19],"texture":0},"west":{"uv":[18,4,19,5],"texture":0},"up":{"uv":[6,19,5,18],"texture":0},"down":{"uv":[19,5,18,6],"texture":0}},"type":"cube","uuid":"a3bb6b12-afb7-50db-27e2-36387eb0a4bc"},{"name":"cube","rescale":false,"locked":false,"from":[8.65276,6.05649,7.8375],"to":[8.71526,6.18149,8.025],"autouv":0,"color":0,"origin":[7.18401,6.05649,7.93125],"faces":{"north":{"uv":[9,18,10,19],"texture":0},"east":{"uv":[18,9,19,10],"texture":0},"south":{"uv":[10,18,11,19],"texture":0},"west":{"uv":[18,10,19,11],"texture":0},"up":{"uv":[12,19,11,18],"texture":0},"down":{"uv":[19,11,18,12],"texture":0}},"type":"cube","uuid":"bc464bae-fb39-4cf3-9389-5fa8a45f162a"},{"name":"cube","rescale":false,"locked":false,"from":[8.47977,5.95895,7.8375],"to":[8.72977,6.20895,8.025],"autouv":0,"color":2,"rotation":[0,0,45],"origin":[8.60477,5.9902,7.93125],"faces":{"north":{"uv":[12,18,13,19],"texture":0},"east":{"uv":[18,12,19,13],"texture":0},"south":{"uv":[13,18,14,19],"texture":0},"west":{"uv":[18,13,19,14],"texture":0},"up":{"uv":[15,19,14,18],"texture":0},"down":{"uv":[19,14,18,15],"texture":0}},"type":"cube","uuid":"9e7c0b7d-f89e-0ed4-4c11-8c5620821ef1"},{"name":"cube","rescale":false,"locked":false,"from":[8.28604,5.8295,7.8375],"to":[8.53604,6.017,8.025],"autouv":0,"color":3,"rotation":[0,0,22.5],"origin":[8.41104,5.86075,7.93125],"faces":{"north":{"uv":[15,18,16,19],"texture":0},"east":{"uv":[18,15,19,16],"texture":0},"south":{"uv":[16,18,17,19],"texture":0},"west":{"uv":[18,16,19,17],"texture":0},"up":{"uv":[18,19,17,18],"texture":0},"down":{"uv":[19,17,18,18],"texture":0}},"type":"cube","uuid":"15e1cb02-55bf-688d-46a5-903af937f9a5"},{"name":"cube","rescale":false,"locked":false,"from":[7.27023,5.95895,7.8375],"to":[7.52023,6.20895,8.025],"autouv":0,"color":1,"rotation":[0,0,-45],"origin":[7.39523,5.9902,7.93125],"faces":{"north":{"uv":[19,2,20,3],"texture":0},"east":{"uv":[3,19,4,20],"texture":0},"south":{"uv":[19,3,20,4],"texture":0},"west":{"uv":[4,19,5,20],"texture":0},"up":{"uv":[20,5,19,4],"texture":0},"down":{"uv":[6,19,5,20],"texture":0}},"type":"cube","uuid":"2ff4d841-f530-5e9d-6186-cab25526df0f"},{"name":"cube","rescale":false,"locked":false,"from":[7.46396,5.8295,7.8375],"to":[7.71396,6.017,8.025],"autouv":0,"color":3,"rotation":[0,0,-22.5],"origin":[7.58896,5.86075,7.93125],"faces":{"north":{"uv":[18,18,19,19],"texture":0},"east":{"uv":[0,19,1,20],"texture":0},"south":{"uv":[19,0,20,1],"texture":0},"west":{"uv":[1,19,2,20],"texture":0},"up":{"uv":[20,2,19,1],"texture":0},"down":{"uv":[3,19,2,20],"texture":0}},"type":"cube","uuid":"45d5f161-6a1d-19f9-c2e1-9b129bd7e703"},{"name":"cube","rescale":false,"locked":false,"from":[7.69249,5.78405,7.8375],"to":[8.30749,5.97155,8.025],"autouv":0,"color":5,"origin":[7.81749,5.8778,7.93125],"faces":{"north":{"uv":[19,5,20,6],"texture":0},"east":{"uv":[6,19,7,20],"texture":0},"south":{"uv":[19,6,20,7],"texture":0},"west":{"uv":[7,19,8,20],"texture":0},"up":{"uv":[20,8,19,7],"texture":0},"down":{"uv":[9,19,8,20],"texture":0}},"type":"cube","uuid":"1960a837-267a-d947-f2be-f2f48ffbb1dc"},{"name":"cube","rescale":false,"locked":false,"from":[7.65747,6.57847,7.775],"to":[7.84497,7.07847,8.0875],"autouv":0,"color":3,"rotation":[0,0,-22.5],"origin":[7.99652,6.58658,8.05625],"faces":{"north":{"uv":[19,8,20,9],"texture":0},"east":{"uv":[9,19,10,20],"texture":0},"south":{"uv":[19,9,20,10],"texture":0},"west":{"uv":[10,19,11,20],"texture":0},"up":{"uv":[20,11,19,10],"texture":0},"down":{"uv":[12,19,11,20],"texture":0}},"type":"cube","uuid":"0264fde3-fe19-78a2-14d3-c7f4af97faf7"},{"name":"cube","rescale":false,"locked":false,"from":[8.14806,6.57847,7.775],"to":[8.33556,7.07847,8.0875],"autouv":0,"color":5,"rotation":[0,0,22.5],"origin":[7.99652,6.58658,8.05625],"faces":{"north":{"uv":[19,17,20,18],"texture":0},"east":{"uv":[18,19,19,20],"texture":0},"south":{"uv":[19,18,20,19],"texture":0},"west":{"uv":[19,19,20,20],"texture":0},"up":{"uv":[1,21,0,20],"texture":0},"down":{"uv":[21,0,20,1],"texture":0}},"type":"cube","uuid":"44bb0c0a-9af4-fe14-f970-aeb11d6cc6f3"},{"name":"cube","rescale":false,"locked":false,"from":[7.68018,6.45883,7.775],"to":[7.93018,6.70883,8.0875],"autouv":0,"color":1,"origin":[7.99652,6.58658,8.05625],"faces":{"north":{"uv":[19,11,20,12],"texture":0},"east":{"uv":[12,19,13,20],"texture":0},"south":{"uv":[19,12,20,13],"texture":0},"west":{"uv":[13,19,14,20],"texture":0},"up":{"uv":[20,14,19,13],"texture":0},"down":{"uv":[15,19,14,20],"texture":0}},"type":"cube","uuid":"ec45e4cc-948d-8e22-a887-cb286e3a6b09"},{"name":"cube","rescale":false,"locked":false,"from":[8.06286,6.45883,7.775],"to":[8.31286,6.70883,8.0875],"autouv":0,"color":7,"origin":[7.99652,6.58658,8.05625],"faces":{"north":{"uv":[1,20,2,21],"texture":0},"east":{"uv":[20,1,21,2],"texture":0},"south":{"uv":[2,20,3,21],"texture":0},"west":{"uv":[20,2,21,3],"texture":0},"up":{"uv":[4,21,3,20],"texture":0},"down":{"uv":[21,3,20,4],"texture":0}},"type":"cube","uuid":"10b57a6f-4b71-c6de-c628-4fbef7f3a849"},{"name":"cube","rescale":false,"locked":false,"from":[7.87152,6.17077,7.775],"to":[8.12152,7.17077,8.0875],"autouv":0,"color":5,"origin":[7.99652,6.58658,8.05625],"faces":{"north":{"uv":[19,14,20,15],"texture":0},"east":{"uv":[15,19,16,20],"texture":0},"south":{"uv":[19,15,20,16],"texture":0},"west":{"uv":[16,19,17,20],"texture":0},"up":{"uv":[20,17,19,16],"texture":0},"down":{"uv":[18,19,17,20],"texture":0}},"type":"cube","uuid":"408c5dce-51b5-b42c-864b-6f9d5aeede7b"},{"name":"cube","rescale":false,"locked":false,"from":[8.14806,6.0947,7.775],"to":[8.33556,6.5947,8.0875],"autouv":0,"color":7,"rotation":[0,0,-22.5],"origin":[7.99652,6.58658,8.05625],"faces":{"north":{"uv":[10,20,11,21],"texture":0},"east":{"uv":[20,10,21,11],"texture":0},"south":{"uv":[11,20,12,21],"texture":0},"west":{"uv":[20,11,21,12],"texture":0},"up":{"uv":[13,21,12,20],"texture":0},"down":{"uv":[21,12,20,13],"texture":0}},"type":"cube","uuid":"a0ded0c7-9b57-d1a6-5686-32a083a06d22"},{"name":"cube","rescale":false,"locked":false,"from":[7.65747,6.0947,7.775],"to":[7.84497,6.5947,8.0875],"autouv":0,"color":2,"rotation":[0,0,22.5],"origin":[7.99652,6.58658,8.05625],"faces":{"north":{"uv":[7,20,8,21],"texture":0},"east":{"uv":[20,7,21,8],"texture":0},"south":{"uv":[8,20,9,21],"texture":0},"west":{"uv":[20,8,21,9],"texture":0},"up":{"uv":[10,21,9,20],"texture":0},"down":{"uv":[21,9,20,10],"texture":0}},"type":"cube","uuid":"deb26481-489f-1632-2228-a4a9f4db3124"},{"name":"cube","rescale":false,"locked":false,"from":[7.87152,6.0024,7.775],"to":[8.12152,6.1899,8.0875],"autouv":0,"color":4,"origin":[7.99652,6.58658,8.05625],"faces":{"north":{"uv":[4,20,5,21],"texture":0},"east":{"uv":[20,4,21,5],"texture":0},"south":{"uv":[5,20,6,21],"texture":0},"west":{"uv":[20,5,21,6],"texture":0},"up":{"uv":[7,21,6,20],"texture":0},"down":{"uv":[21,6,20,7],"texture":0}},"type":"cube","uuid":"04f227c1-cee4-edb5-9345-deff6cbaaebc"},{"name":"cube","rescale":false,"locked":false,"from":[7.5,7.5,7.9],"to":[8.5,19.125,7.9625],"autouv":0,"color":1,"origin":[0,3.125,0.275],"faces":{"north":{"uv":[0,0,1,13],"texture":0},"east":{"uv":[1,0,2,13],"texture":0},"south":{"uv":[2,0,3,13],"texture":0},"west":{"uv":[3,0,4,13],"texture":0},"up":{"uv":[7,1,6,0],"texture":0},"down":{"uv":[7,1,6,2],"texture":0}},"type":"cube","uuid":"aaf6be8b-8fb8-c9bc-d036-ef1c8b4b0617"},{"name":"cube","rescale":false,"locked":false,"from":[7.50571,7.00158,7.9],"to":[8.49571,7.56408,7.9625],"autouv":0,"color":0,"origin":[2.69321,3.06408,0.275],"faces":{"north":{"uv":[11,9,12,10],"texture":0},"east":{"uv":[10,11,11,12],"texture":0},"south":{"uv":[11,10,12,11],"texture":0},"west":{"uv":[11,11,12,12],"texture":0},"up":{"uv":[13,1,12,0],"texture":0},"down":{"uv":[13,1,12,2],"texture":0}},"type":"cube","uuid":"5fe78c5f-146c-4e77-f315-c5e154cd3a1a"},{"name":"cube","rescale":false,"locked":false,"from":[8.35519,10.47119,7.9],"to":[8.60519,11.09619,7.9625],"autouv":0,"color":6,"rotation":[0,0,22.5],"origin":[8.48019,10.84619,8.025],"faces":{"north":{"uv":[4,14,5,15],"texture":0},"east":{"uv":[14,4,15,5],"texture":0},"south":{"uv":[5,14,6,15],"texture":0},"west":{"uv":[14,5,15,6],"texture":0},"up":{"uv":[7,15,6,14],"texture":0},"down":{"uv":[15,6,14,7],"texture":0}},"type":"cube","uuid":"f4418c8c-5a08-da6e-9ec2-3c00386c3a50"},{"name":"cube","rescale":false,"locked":false,"from":[8.3791,10.21,7.9],"to":[8.6291,10.5225,7.9625],"autouv":0,"color":1,"rotation":[0,0,-22.5],"origin":[8.5041,10.2725,7.93125],"faces":{"north":{"uv":[10,14,11,15],"texture":0},"east":{"uv":[14,10,15,11],"texture":0},"south":{"uv":[11,14,12,15],"texture":0},"west":{"uv":[14,11,15,12],"texture":0},"up":{"uv":[13,15,12,14],"texture":0},"down":{"uv":[15,12,14,13],"texture":0}},"type":"cube","uuid":"168df216-e3af-d609-99d5-f33e22012c4e"},{"name":"cube","rescale":false,"locked":false,"from":[8.45207,10.35056,7.9],"to":[8.63957,10.53806,7.9625],"autouv":0,"color":3,"rotation":[0,0,45],"origin":[8.51457,10.66306,7.93125],"faces":{"north":{"uv":[7,14,8,15],"texture":0},"east":{"uv":[14,7,15,8],"texture":0},"south":{"uv":[8,14,9,15],"texture":0},"west":{"uv":[14,8,15,9],"texture":0},"up":{"uv":[10,15,9,14],"texture":0},"down":{"uv":[15,9,14,10],"texture":0}},"type":"cube","uuid":"0320f5bf-b2ea-4f09-c302-a40fd345ce41"},{"name":"cube","rescale":false,"locked":false,"from":[8.33127,8.96653,7.9],"to":[8.58127,9.21653,7.9625],"autouv":0,"color":7,"rotation":[0,0,-22.5],"origin":[8.45627,9.09153,7.93125],"faces":{"north":{"uv":[13,2,14,3],"texture":0},"east":{"uv":[3,13,4,14],"texture":0},"south":{"uv":[13,3,14,4],"texture":0},"west":{"uv":[4,13,5,14],"texture":0},"up":{"uv":[14,5,13,4],"texture":0},"down":{"uv":[6,13,5,14],"texture":0}},"type":"cube","uuid":"8c570363-1cc2-1421-1073-6126248e090a"},{"name":"cube","rescale":false,"locked":false,"from":[8.28343,9.7828,7.9],"to":[8.53343,10.0953,7.9625],"autouv":0,"color":3,"rotation":[0,0,22.5],"origin":[8.40843,10.2828,8.025],"faces":{"north":{"uv":[12,2,13,3],"texture":0},"east":{"uv":[12,3,13,4],"texture":0},"south":{"uv":[4,12,5,13],"texture":0},"west":{"uv":[12,4,13,5],"texture":0},"up":{"uv":[6,13,5,12],"texture":0},"down":{"uv":[13,5,12,6],"texture":0}},"type":"cube","uuid":"a8c40b19-4bf1-dd36-515d-413a65829277"},{"name":"cube","rescale":false,"locked":false,"from":[8.42694,9.25999,7.9],"to":[8.67694,9.57249,7.9625],"autouv":0,"color":4,"rotation":[0,0,-22.5],"origin":[8.55194,9.44749,7.93125],"faces":{"north":{"uv":[9,12,10,13],"texture":0},"east":{"uv":[12,9,13,10],"texture":0},"south":{"uv":[10,12,11,13],"texture":0},"west":{"uv":[12,10,13,11],"texture":0},"up":{"uv":[12,13,11,12],"texture":0},"down":{"uv":[13,11,12,12],"texture":0}},"type":"cube","uuid":"2eb6fd07-4f01-47ff-2c39-6b3077cb608c"},{"name":"cube","rescale":false,"locked":false,"from":[8.46526,9.56692,7.9],"to":[8.84026,9.94192,7.9625],"autouv":0,"color":0,"rotation":[0,0,45],"origin":[8.71526,9.69192,7.93125],"faces":{"north":{"uv":[6,12,7,13],"texture":0},"east":{"uv":[12,6,13,7],"texture":0},"south":{"uv":[7,12,8,13],"texture":0},"west":{"uv":[12,7,13,8],"texture":0},"up":{"uv":[9,13,8,12],"texture":0},"down":{"uv":[13,8,12,9],"texture":0}},"type":"cube","uuid":"28f4aaaf-ae1b-98a3-e171-468d028c0757"},{"name":"cube","rescale":false,"locked":false,"from":[8.36959,10.09967,7.9],"to":[8.61959,10.22467,7.9625],"autouv":0,"color":5,"origin":[8.49459,9.97467,7.93125],"faces":{"north":{"uv":[11,6,12,7],"texture":0},"east":{"uv":[7,11,8,12],"texture":0},"south":{"uv":[11,7,12,8],"texture":0},"west":{"uv":[8,11,9,12],"texture":0},"up":{"uv":[12,9,11,8],"texture":0},"down":{"uv":[10,11,9,12],"texture":0}},"type":"cube","uuid":"f162e734-c18e-80e1-0d4c-dc142234f57a"},{"name":"cube","rescale":false,"locked":false,"from":[8.36959,9.15917,7.9],"to":[8.61959,9.28417,7.9625],"autouv":0,"color":7,"origin":[8.49459,10.09667,7.93125],"faces":{"north":{"uv":[12,12,13,13],"texture":0},"east":{"uv":[0,13,1,14],"texture":0},"south":{"uv":[13,0,14,1],"texture":0},"west":{"uv":[1,13,2,14],"texture":0},"up":{"uv":[14,2,13,1],"texture":0},"down":{"uv":[3,13,2,14],"texture":0}},"type":"cube","uuid":"ff6f9988-9d70-7743-17f4-a05e3bc78af2"},{"name":"cube","rescale":false,"locked":false,"from":[8.27392,8.3657,7.9],"to":[8.52392,8.9907,7.9625],"autouv":0,"color":1,"origin":[8.39892,10.4282,7.93125],"faces":{"north":{"uv":[10,16,11,17],"texture":0},"east":{"uv":[16,10,17,11],"texture":0},"south":{"uv":[11,16,12,17],"texture":0},"west":{"uv":[16,11,17,12],"texture":0},"up":{"uv":[13,17,12,16],"texture":0},"down":{"uv":[17,12,16,13],"texture":0}},"type":"cube","uuid":"c7af71d2-ce0a-e299-b32d-670adfd1d49f"},{"name":"cube","rescale":false,"locked":false,"from":[7.38041,10.09967,7.9],"to":[7.63041,10.22467,7.9625],"autouv":0,"color":7,"origin":[7.50541,9.97467,7.93125],"faces":{"north":{"uv":[7,16,8,17],"texture":0},"east":{"uv":[16,7,17,8],"texture":0},"south":{"uv":[8,16,9,17],"texture":0},"west":{"uv":[16,8,17,9],"texture":0},"up":{"uv":[10,17,9,16],"texture":0},"down":{"uv":[17,9,16,10],"texture":0}},"type":"cube","uuid":"f30f2c0d-7d7a-bbd0-3a67-b4400f8ef030"},{"name":"cube","rescale":false,"locked":false,"from":[7.46657,9.7828,7.9],"to":[7.71657,10.0953,7.9625],"autouv":0,"color":1,"rotation":[0,0,-22.5],"origin":[7.59157,10.2828,8.025],"faces":{"north":{"uv":[4,16,5,17],"texture":0},"east":{"uv":[16,4,17,5],"texture":0},"south":{"uv":[5,16,6,17],"texture":0},"west":{"uv":[16,5,17,6],"texture":0},"up":{"uv":[7,17,6,16],"texture":0},"down":{"uv":[17,6,16,7],"texture":0}},"type":"cube","uuid":"8430a0fe-466b-ce60-645f-6018d5509c65"},{"name":"cube","rescale":false,"locked":false,"from":[7.15974,9.56692,7.9],"to":[7.53474,9.94192,7.9625],"autouv":0,"color":3,"rotation":[0,0,-45],"origin":[7.28474,9.69192,7.93125],"faces":{"north":{"uv":[1,16,2,17],"texture":0},"east":{"uv":[16,1,17,2],"texture":0},"south":{"uv":[2,16,3,17],"texture":0},"west":{"uv":[16,2,17,3],"texture":0},"up":{"uv":[4,17,3,16],"texture":0},"down":{"uv":[17,3,16,4],"texture":0}},"type":"cube","uuid":"2c6a5511-9cf8-fdfb-4e6d-f5b84dba89ee"},{"name":"cube","rescale":false,"locked":false,"from":[7.32306,9.25999,7.9],"to":[7.57306,9.57249,7.9625],"autouv":0,"color":2,"rotation":[0,0,22.5],"origin":[7.44806,9.44749,7.93125],"faces":{"north":{"uv":[15,13,16,14],"texture":0},"east":{"uv":[14,15,15,16],"texture":0},"south":{"uv":[15,14,16,15],"texture":0},"west":{"uv":[15,15,16,16],"texture":0},"up":{"uv":[1,17,0,16],"texture":0},"down":{"uv":[17,0,16,1],"texture":0}},"type":"cube","uuid":"a3d40793-319c-a2fd-da0a-002153bbc94f"},{"name":"cube","rescale":false,"locked":false,"from":[7.38041,9.15917,7.9],"to":[7.63041,9.28417,7.9625],"autouv":0,"color":6,"origin":[7.50541,10.09667,7.93125],"faces":{"north":{"uv":[15,10,16,11],"texture":0},"east":{"uv":[11,15,12,16],"texture":0},"south":{"uv":[15,11,16,12],"texture":0},"west":{"uv":[12,15,13,16],"texture":0},"up":{"uv":[16,13,15,12],"texture":0},"down":{"uv":[14,15,13,16],"texture":0}},"type":"cube","uuid":"c1d605d6-6472-6a9d-f612-7d4e96a9c769"},{"name":"cube","rescale":false,"locked":false,"from":[7.41873,8.96653,7.9],"to":[7.66873,9.21653,7.9625],"autouv":0,"color":6,"rotation":[0,0,22.5],"origin":[7.54373,9.09153,7.93125],"faces":{"north":{"uv":[15,7,16,8],"texture":0},"east":{"uv":[8,15,9,16],"texture":0},"south":{"uv":[15,8,16,9],"texture":0},"west":{"uv":[9,15,10,16],"texture":0},"up":{"uv":[16,10,15,9],"texture":0},"down":{"uv":[11,15,10,16],"texture":0}},"type":"cube","uuid":"5562a70b-808f-df0c-4e93-d060e38f893d"},{"name":"cube","rescale":false,"locked":false,"from":[7.39481,10.47119,7.9],"to":[7.64481,11.09619,7.9625],"autouv":0,"color":6,"rotation":[0,0,-22.5],"origin":[7.51981,10.84619,8.025],"faces":{"north":{"uv":[15,4,16,5],"texture":0},"east":{"uv":[5,15,6,16],"texture":0},"south":{"uv":[15,5,16,6],"texture":0},"west":{"uv":[6,15,7,16],"texture":0},"up":{"uv":[16,7,15,6],"texture":0},"down":{"uv":[8,15,7,16],"texture":0}},"type":"cube","uuid":"0db55e06-410b-91e6-2177-7d63f2622cec"},{"name":"cube","rescale":false,"locked":false,"from":[7.36043,10.35056,7.9],"to":[7.54793,10.53806,7.9625],"autouv":0,"color":1,"rotation":[0,0,-45],"origin":[7.48543,10.66306,7.93125],"faces":{"north":{"uv":[15,1,16,2],"texture":0},"east":{"uv":[2,15,3,16],"texture":0},"south":{"uv":[15,2,16,3],"texture":0},"west":{"uv":[3,15,4,16],"texture":0},"up":{"uv":[16,4,15,3],"texture":0},"down":{"uv":[5,15,4,16],"texture":0}},"type":"cube","uuid":"dd879046-a6b9-9cb9-c672-df5f8dd912c3"},{"name":"cube","rescale":false,"locked":false,"from":[7.3709,10.21,7.9],"to":[7.6209,10.5225,7.9625],"autouv":0,"color":3,"rotation":[0,0,22.5],"origin":[7.4959,10.2725,7.93125],"faces":{"north":{"uv":[13,14,14,15],"texture":0},"east":{"uv":[14,13,15,14],"texture":0},"south":{"uv":[14,14,15,15],"texture":0},"west":{"uv":[0,15,1,16],"texture":0},"up":{"uv":[16,1,15,0],"texture":0},"down":{"uv":[2,15,1,16],"texture":0}},"type":"cube","uuid":"13d4a8b0-e03a-362d-a2ac-b1529fba2ccf"},{"name":"cube","rescale":false,"locked":false,"from":[8.3791,8.1494,7.9],"to":[8.6291,8.3994,7.9625],"autouv":0,"color":2,"rotation":[0,0,22.5],"origin":[8.5041,8.1494,8.025],"faces":{"north":{"uv":[1,14,2,15],"texture":0},"east":{"uv":[14,1,15,2],"texture":0},"south":{"uv":[2,14,3,15],"texture":0},"west":{"uv":[14,2,15,3],"texture":0},"up":{"uv":[4,15,3,14],"texture":0},"down":{"uv":[15,3,14,4],"texture":0}},"type":"cube","uuid":"6b2e074c-7ab9-ba6e-1231-cf1d2cdd8fc4"},{"name":"cube","rescale":false,"locked":false,"from":[8.28343,7.63037,7.9],"to":[8.53343,8.06787,7.9625],"autouv":0,"color":6,"rotation":[0,0,22.5],"origin":[8.40843,8.25537,8.025],"faces":{"north":{"uv":[13,11,14,12],"texture":0},"east":{"uv":[12,13,13,14],"texture":0},"south":{"uv":[13,12,14,13],"texture":0},"west":{"uv":[13,13,14,14],"texture":0},"up":{"uv":[1,15,0,14],"texture":0},"down":{"uv":[15,0,14,1],"texture":0}},"type":"cube","uuid":"5866df12-04e7-4900-a659-b274f9caaf66"},{"name":"cube","rescale":false,"locked":false,"from":[8.36959,8.07223,7.9],"to":[8.61959,8.19723,7.9625],"autouv":0,"color":7,"origin":[8.49459,7.94723,7.93125],"faces":{"north":{"uv":[13,8,14,9],"texture":0},"east":{"uv":[9,13,10,14],"texture":0},"south":{"uv":[13,9,14,10],"texture":0},"west":{"uv":[10,13,11,14],"texture":0},"up":{"uv":[14,11,13,10],"texture":0},"down":{"uv":[12,13,11,14],"texture":0}},"type":"cube","uuid":"f226869f-c486-11e1-46c7-640d86da010f"},{"name":"cube","rescale":false,"locked":false,"from":[8.30679,7.07924,7.9],"to":[9.05679,7.57924,7.9625],"autouv":0,"color":3,"rotation":[0,0,45],"origin":[8.49429,7.26674,7.93125],"faces":{"north":{"uv":[13,5,14,6],"texture":0},"east":{"uv":[6,13,7,14],"texture":0},"south":{"uv":[13,6,14,7],"texture":0},"west":{"uv":[7,13,8,14],"texture":0},"up":{"uv":[14,8,13,7],"texture":0},"down":{"uv":[9,13,8,14],"texture":0}},"type":"cube","uuid":"6f711156-90b9-d398-a32d-bdd4ecf9f170"},{"name":"cube","rescale":false,"locked":false,"from":[7.47608,8.3657,7.9],"to":[7.72608,8.9907,7.9625],"autouv":0,"color":4,"origin":[7.60108,10.4282,7.93125],"faces":{"north":{"uv":[17,8,18,9],"texture":0},"east":{"uv":[9,17,10,18],"texture":0},"south":{"uv":[17,9,18,10],"texture":0},"west":{"uv":[10,17,11,18],"texture":0},"up":{"uv":[18,11,17,10],"texture":0},"down":{"uv":[12,17,11,18],"texture":0}},"type":"cube","uuid":"1e15b0d7-e24d-a11d-dca0-1799f0168cf1"},{"name":"cube","rescale":false,"locked":false,"from":[7.3709,8.1494,7.9],"to":[7.6209,8.3994,7.9625],"autouv":0,"color":3,"rotation":[0,0,-22.5],"origin":[7.4959,8.1494,8.025],"faces":{"north":{"uv":[17,5,18,6],"texture":0},"east":{"uv":[6,17,7,18],"texture":0},"south":{"uv":[17,6,18,7],"texture":0},"west":{"uv":[7,17,8,18],"texture":0},"up":{"uv":[18,8,17,7],"texture":0},"down":{"uv":[9,17,8,18],"texture":0}},"type":"cube","uuid":"ce673388-a947-105a-fe4a-85bc6b3cb59e"},{"name":"cube","rescale":false,"locked":false,"from":[7.38041,8.07223,7.9],"to":[7.63041,8.19723,7.9625],"autouv":0,"color":6,"origin":[7.50541,7.94723,7.93125],"faces":{"north":{"uv":[17,2,18,3],"texture":0},"east":{"uv":[3,17,4,18],"texture":0},"south":{"uv":[17,3,18,4],"texture":0},"west":{"uv":[4,17,5,18],"texture":0},"up":{"uv":[18,5,17,4],"texture":0},"down":{"uv":[6,17,5,18],"texture":0}},"type":"cube","uuid":"dd09f9c2-46bb-c560-2b6b-33e99641640b"},{"name":"cube","rescale":false,"locked":false,"from":[7.46657,7.56787,7.9],"to":[7.71657,8.06787,7.9625],"autouv":0,"color":5,"rotation":[0,0,-22.5],"origin":[7.59157,8.25537,8.025],"faces":{"north":{"uv":[16,16,17,17],"texture":0},"east":{"uv":[0,17,1,18],"texture":0},"south":{"uv":[17,0,18,1],"texture":0},"west":{"uv":[1,17,2,18],"texture":0},"up":{"uv":[18,2,17,1],"texture":0},"down":{"uv":[3,17,2,18],"texture":0}},"type":"cube","uuid":"a365ecd6-6bf4-37bd-8bd0-2d67a1dc7829"},{"name":"cube","rescale":false,"locked":false,"from":[6.94321,7.07924,7.9],"to":[7.69321,7.57924,7.9625],"autouv":0,"color":2,"rotation":[0,0,-45],"origin":[7.50571,7.26674,7.93125],"faces":{"north":{"uv":[13,16,14,17],"texture":0},"east":{"uv":[16,13,17,14],"texture":0},"south":{"uv":[14,16,15,17],"texture":0},"west":{"uv":[16,14,17,15],"texture":0},"up":{"uv":[16,17,15,16],"texture":0},"down":{"uv":[17,15,16,16],"texture":0}},"type":"cube","uuid":"448318d7-b506-c8e2-b57f-5b55dc1cbe19"},{"name":"cube","rescale":false,"locked":false,"from":[9.2197,18.7705,7.9],"to":[9.2822,19.958,7.9625],"autouv":0,"color":6,"rotation":[0,0,-22.5],"origin":[9.25095,23.2705,8.025],"faces":{"north":{"uv":[6,2,7,3],"texture":0},"east":{"uv":[6,3,7,4],"texture":0},"south":{"uv":[4,6,5,7],"texture":0},"west":{"uv":[6,4,7,5],"texture":0},"up":{"uv":[6,7,5,6],"texture":0},"down":{"uv":[7,5,6,6],"texture":0}},"type":"cube","uuid":"6ad176ba-0a2e-f308-afcb-4748a13cd747"},{"name":"cube","rescale":false,"locked":false,"from":[9.2822,18.7705,7.9],"to":[9.3447,19.8955,7.9625],"autouv":0,"color":1,"rotation":[0,0,-22.5],"origin":[9.25095,23.2705,8.025],"faces":{"north":{"uv":[5,8,6,9],"texture":0},"east":{"uv":[8,5,9,6],"texture":0},"south":{"uv":[6,8,7,9],"texture":0},"west":{"uv":[8,6,9,7],"texture":0},"up":{"uv":[8,9,7,8],"texture":0},"down":{"uv":[9,7,8,8],"texture":0}},"type":"cube","uuid":"45709691-6197-6ee3-5de5-3be3534af6d0"},{"name":"cube","rescale":false,"locked":false,"from":[9.3447,18.7705,7.9],"to":[9.4072,19.708,7.9625],"autouv":0,"color":0,"rotation":[0,0,-22.5],"origin":[9.25095,23.2705,8.025],"faces":{"north":{"uv":[9,4,10,5],"texture":0},"east":{"uv":[5,9,6,10],"texture":0},"south":{"uv":[9,5,10,6],"texture":0},"west":{"uv":[6,9,7,10],"texture":0},"up":{"uv":[10,7,9,6],"texture":0},"down":{"uv":[8,9,7,10],"texture":0}},"type":"cube","uuid":"3ba41b90-182f-3e15-5f06-031a0c0149c9"},{"name":"cube","rescale":false,"locked":false,"from":[9.4072,18.7705,7.9],"to":[9.5322,19.708,7.9625],"autouv":0,"color":2,"rotation":[0,0,-22.5],"origin":[9.25095,23.2705,8.025],"faces":{"north":{"uv":[10,2,11,3],"texture":0},"east":{"uv":[10,3,11,4],"texture":0},"south":{"uv":[4,10,5,11],"texture":0},"west":{"uv":[10,4,11,5],"texture":0},"up":{"uv":[6,11,5,10],"texture":0},"down":{"uv":[11,5,10,6],"texture":0}},"type":"cube","uuid":"4956e53b-1e0d-0f09-9f72-48c6439b0617"},{"name":"cube","rescale":false,"locked":false,"from":[9.5322,18.7705,7.9],"to":[9.6572,19.458,7.9625],"autouv":0,"color":3,"rotation":[0,0,-22.5],"origin":[9.25095,23.2705,8.025],"faces":{"north":{"uv":[9,10,10,11],"texture":0},"east":{"uv":[10,9,11,10],"texture":0},"south":{"uv":[10,10,11,11],"texture":0},"west":{"uv":[11,0,12,1],"texture":0},"up":{"uv":[12,2,11,1],"texture":0},"down":{"uv":[12,2,11,3],"texture":0}},"type":"cube","uuid":"a53b0386-99a1-2755-2ea9-570495955a48"},{"name":"cube","rescale":false,"locked":false,"from":[7.97,19.06784,7.9],"to":[8.0325,20.19284,7.9625],"autouv":0,"color":5,"origin":[7.75609,19.66159,8.025],"faces":{"north":{"uv":[8,0,9,1],"texture":0},"east":{"uv":[8,1,9,2],"texture":0},"south":{"uv":[8,2,9,3],"texture":0},"west":{"uv":[8,3,9,4],"texture":0},"up":{"uv":[5,9,4,8],"texture":0},"down":{"uv":[9,4,8,5],"texture":0}},"type":"cube","uuid":"6207db2e-9ecd-6531-8dbd-9c9073073266"},{"name":"cube","rescale":false,"locked":false,"from":[7.57131,20.02504,7.9],"to":[7.63531,20.08904,7.9625],"autouv":0,"color":7,"rotation":[0,0,45],"origin":[7.60256,20.61879,8.025],"faces":{"north":{"uv":[7,4,8,5],"texture":0},"east":{"uv":[5,7,6,8],"texture":0},"south":{"uv":[7,5,8,6],"texture":0},"west":{"uv":[6,7,7,8],"texture":0},"up":{"uv":[8,7,7,6],"texture":0},"down":{"uv":[8,7,7,8],"texture":0}},"type":"cube","uuid":"ab2a7cbb-2517-196a-68c8-52f73f4cc66d"},{"name":"cube","rescale":false,"locked":false,"from":[8.21266,19.06784,7.9],"to":[8.27516,20.25534,7.9625],"autouv":0,"color":5,"rotation":[0,0,22.5],"origin":[8.24391,19.66159,8.025],"faces":{"north":{"uv":[6,6,7,7],"texture":0},"east":{"uv":[7,0,8,1],"texture":0},"south":{"uv":[7,1,8,2],"texture":0},"west":{"uv":[7,2,8,3],"texture":0},"up":{"uv":[8,4,7,3],"texture":0},"down":{"uv":[5,7,4,8],"texture":0}},"type":"cube","uuid":"ec3c864b-be41-c108-c00e-49d3d311f69c"},{"name":"cube","rescale":false,"locked":false,"from":[8.15016,19.06784,7.9],"to":[8.21266,20.19284,7.9625],"autouv":0,"color":3,"rotation":[0,0,22.5],"origin":[8.24391,19.66159,8.025],"faces":{"north":{"uv":[8,8,9,9],"texture":0},"east":{"uv":[9,0,10,1],"texture":0},"south":{"uv":[9,1,10,2],"texture":0},"west":{"uv":[9,2,10,3],"texture":0},"up":{"uv":[10,4,9,3],"texture":0},"down":{"uv":[5,9,4,10],"texture":0}},"type":"cube","uuid":"8420d65a-d51f-9983-f92e-85f7b3319600"},{"name":"cube","rescale":false,"locked":false,"from":[8.08766,19.06784,7.9],"to":[8.15016,20.00534,7.9625],"autouv":0,"color":5,"rotation":[0,0,22.5],"origin":[8.24391,19.66159,8.025],"faces":{"north":{"uv":[9,7,10,8],"texture":0},"east":{"uv":[8,9,9,10],"texture":0},"south":{"uv":[9,8,10,9],"texture":0},"west":{"uv":[9,9,10,10],"texture":0},"up":{"uv":[11,1,10,0],"texture":0},"down":{"uv":[11,1,10,2],"texture":0}},"type":"cube","uuid":"eac95006-7afd-0aaf-b1d4-05fda6eb0544"},{"name":"cube","rescale":false,"locked":false,"from":[7.96266,19.06784,7.9],"to":[8.08766,20.00534,7.9625],"autouv":0,"color":1,"rotation":[0,0,22.5],"origin":[8.24391,19.66159,8.025],"faces":{"north":{"uv":[6,10,7,11],"texture":0},"east":{"uv":[10,6,11,7],"texture":0},"south":{"uv":[7,10,8,11],"texture":0},"west":{"uv":[10,7,11,8],"texture":0},"up":{"uv":[9,11,8,10],"texture":0},"down":{"uv":[11,8,10,9],"texture":0}},"type":"cube","uuid":"8908bd30-0b86-a1a7-80f8-dd625da1762a"},{"name":"cube","rescale":false,"locked":false,"from":[7.83766,19.06784,7.9],"to":[7.96266,19.88034,7.9625],"autouv":0,"color":6,"rotation":[0,0,22.5],"origin":[8.24391,19.66159,8.025],"faces":{"north":{"uv":[11,3,12,4],"texture":0},"east":{"uv":[4,11,5,12],"texture":0},"south":{"uv":[11,4,12,5],"texture":0},"west":{"uv":[5,11,6,12],"texture":0},"up":{"uv":[12,6,11,5],"texture":0},"down":{"uv":[7,11,6,12],"texture":0}},"type":"cube","uuid":"821ed96e-7dcd-0b1e-1394-3025b8f1c70a"}],"outliner":[{"name":"Everything","origin":[8,8,8],"color":0,"uuid":"0d9e9e8d-13cd-fe6b-fda6-419f36866f7c","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"Handle","origin":[9.8371,3.74226,7.65625],"color":0,"uuid":"02ae9025-4241-7096-e8a9-ecf5428b5cd3","export":true,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["a0b1689f-ec8a-71ac-2bab-080f517131c0","5b92ef71-200b-1bd3-1715-71291707f28f","3dea93df-16a7-65cb-cbe6-92daeec01d23","8b1996da-6bdc-3e46-721f-0cf51682073c","4f08c2d7-2771-7a55-2081-dad3f971d7f5","741ca0ab-134e-3a86-286a-03e21d9e8c50","02f3227e-e4c7-3ecb-9ce3-9ee6a00d2439","c437bf88-47ca-1b11-8b8f-2cc0d3ecfdbe","ee51c937-5d8c-8d39-a957-6196b8b8e120","87d1c8a8-d887-5b88-b7a9-71676450beb8","dca05f53-f04b-6152-6bfa-fbd572aefb40","a683acca-29f9-6277-a1cc-2d2a8115f84f"]},"01a12ae6-bba7-beb3-5d95-5db4b8b9c5b7","39b14d7b-a375-5b05-0b3d-1efa19bcf45d","c819b773-31c4-a7b1-cd66-67142c404c54","6578c430-8bbe-6274-bd71-5ecf46f365b2",{"name":"Hilt","origin":[7.18401,2.93149,7.65625],"color":0,"uuid":"24804561-810b-5643-1f7c-97ed09d75df7","export":true,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["10d0b2f9-cb0c-214a-ce9c-2f97aea76539","7c5fdbda-57b2-69b6-a052-5336a2f7ec79","9876234c-bb4d-9b11-e453-12d0df249deb","bcd66d9a-1bda-2bc5-a269-454e409bcaee","b2cae097-60d4-92bb-f4e5-ce12e4867528","0b23f0a2-80c8-ad9b-0f83-fd908718e04d","a71e2867-25a8-0b0f-c0cc-403d91dc053e","581e5017-a3ee-901a-9df8-4ddf26962747","e9f98aa0-9f80-66d1-ae2d-22cd3c49cf10","e1481c5d-960b-2510-b7ca-5296d12a0552","a8f2bd0c-1acf-f5d2-dac3-a0ce07db54fc","77056f1e-527a-d572-1c72-cb1cf6422d4c","13cd582d-ee6d-303c-9614-54bbff256428","ca0c9132-0d4e-69a5-5472-17c58f660ff5","a3bb6b12-afb7-50db-27e2-36387eb0a4bc","bc464bae-fb39-4cf3-9389-5fa8a45f162a","9e7c0b7d-f89e-0ed4-4c11-8c5620821ef1","15e1cb02-55bf-688d-46a5-903af937f9a5","2ff4d841-f530-5e9d-6186-cab25526df0f","45d5f161-6a1d-19f9-c2e1-9b129bd7e703","1960a837-267a-d947-f2be-f2f48ffbb1dc","0264fde3-fe19-78a2-14d3-c7f4af97faf7","44bb0c0a-9af4-fe14-f970-aeb11d6cc6f3","ec45e4cc-948d-8e22-a887-cb286e3a6b09","10b57a6f-4b71-c6de-c628-4fbef7f3a849","408c5dce-51b5-b42c-864b-6f9d5aeede7b","a0ded0c7-9b57-d1a6-5686-32a083a06d22","deb26481-489f-1632-2228-a4a9f4db3124","04f227c1-cee4-edb5-9345-deff6cbaaebc"]},{"name":"Blade","origin":[8,8,8],"color":0,"uuid":"701d3435-aef4-6075-9055-5b3face0326a","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["aaf6be8b-8fb8-c9bc-d036-ef1c8b4b0617","5fe78c5f-146c-4e77-f315-c5e154cd3a1a","f4418c8c-5a08-da6e-9ec2-3c00386c3a50","168df216-e3af-d609-99d5-f33e22012c4e","0320f5bf-b2ea-4f09-c302-a40fd345ce41","8c570363-1cc2-1421-1073-6126248e090a","a8c40b19-4bf1-dd36-515d-413a65829277","2eb6fd07-4f01-47ff-2c39-6b3077cb608c","28f4aaaf-ae1b-98a3-e171-468d028c0757","f162e734-c18e-80e1-0d4c-dc142234f57a","ff6f9988-9d70-7743-17f4-a05e3bc78af2","c7af71d2-ce0a-e299-b32d-670adfd1d49f","f30f2c0d-7d7a-bbd0-3a67-b4400f8ef030","8430a0fe-466b-ce60-645f-6018d5509c65","2c6a5511-9cf8-fdfb-4e6d-f5b84dba89ee","a3d40793-319c-a2fd-da0a-002153bbc94f","c1d605d6-6472-6a9d-f612-7d4e96a9c769","5562a70b-808f-df0c-4e93-d060e38f893d","0db55e06-410b-91e6-2177-7d63f2622cec","dd879046-a6b9-9cb9-c672-df5f8dd912c3","13d4a8b0-e03a-362d-a2ac-b1529fba2ccf","6b2e074c-7ab9-ba6e-1231-cf1d2cdd8fc4","5866df12-04e7-4900-a659-b274f9caaf66","f226869f-c486-11e1-46c7-640d86da010f","6f711156-90b9-d398-a32d-bdd4ecf9f170","1e15b0d7-e24d-a11d-dca0-1799f0168cf1","ce673388-a947-105a-fe4a-85bc6b3cb59e","dd09f9c2-46bb-c560-2b6b-33e99641640b","a365ecd6-6bf4-37bd-8bd0-2d67a1dc7829","448318d7-b506-c8e2-b57f-5b55dc1cbe19","6ad176ba-0a2e-f308-afcb-4748a13cd747","45709691-6197-6ee3-5de5-3be3534af6d0","3ba41b90-182f-3e15-5f06-031a0c0149c9","4956e53b-1e0d-0f09-9f72-48c6439b0617","a53b0386-99a1-2755-2ea9-570495955a48","6207db2e-9ecd-6531-8dbd-9c9073073266","ab2a7cbb-2517-196a-68c8-52f73f4cc66d","ec3c864b-be41-c108-c00e-49d3d311f69c","8420d65a-d51f-9983-f92e-85f7b3319600","eac95006-7afd-0aaf-b1d4-05fda6eb0544","8908bd30-0b86-a1a7-80f8-dd625da1762a","821ed96e-7dcd-0b1e-1394-3025b8f1c70a"]}]}],"textures":[{"path":"C:\\Users\\hawkt\\Documents\\GitHub\\cosmere\\src\\main\\resources\\assets\\cosmere\\textures\\item\\models\\shardblade_model\\edgedancer_honorblade.png","name":"edgedancer_honorblade.png","folder":"item/models/shardblade_model","namespace":"cosmere","id":"1","particle":false,"render_mode":"default","visible":true,"mode":"bitmap","saved":true,"uuid":"b64170c1-1677-2654-a944-9bfc682c0b97","relative_path":"../../src/main/resources/assets/cosmere/textures/item/models/shardblade_model/edgedancer_honorblade.png","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAPFJREFUWEdjnLN0638GJKArLwrmXX74GlmYIHv7yrlgNSuWzmSIiE6Hs89dvM9gbmPGiMsARlo5oKysgsFIX5GBlVcUp+UgR406YDQEMEKAYHLHoQA9F5CdCIe0A0BlAAiAyoEBCYGR6wDkBDggUTCoHACriOiaCLHVhKMOgGVJkqtjQiUhLLixqUNvjIDUEHRAsF8QSouIkAPwydPMAbDgJMZxyM0xokLg9+fXJIcAzBJCoUGUA6gZBcgOIjoRghwAyrPkAlDDEx8gmAjJiQJSHEvQASePnPqPr91OimXkqMXbZifHQFL1jDpgNARGQwAAN9ruIaZn+AwAAAAASUVORK5CYII="}],"display":{"thirdperson_righthand":{"rotation":[0,90,0],"translation":[0.5,8,0.75],"scale":[2.75,2.75,2.75]},"thirdperson_lefthand":{"rotation":[0,90,0],"translation":[0.5,8,0.75],"scale":[2.75,2.75,2.75]},"firstperson_righthand":{"rotation":[0,90,0],"translation":[0,6,0],"scale":[2.75,2.75,2.75]},"firstperson_lefthand":{"rotation":[0,90,0],"translation":[0,6,0],"scale":[2.75,2.75,2.75]},"ground":{"translation":[0,2,0]},"gui":{"rotation":[0,0,-45],"translation":[-2.75,-2.25,0]},"fixed":{"rotation":[0,0,45],"translation":[3,-2.25,0]}}} \ No newline at end of file diff --git a/blockbench/surgebinding/shardblades/honorblades/elsecaller_honorblade.bbmodel b/blockbench/surgebinding/shardblades/honorblades/elsecaller_honorblade.bbmodel new file mode 100644 index 000000000..7684eef8f --- /dev/null +++ b/blockbench/surgebinding/shardblades/honorblades/elsecaller_honorblade.bbmodel @@ -0,0 +1 @@ +{"meta":{"format_version":"4.5","model_format":"java_block","box_uv":false},"name":"elsecaller_honorblade","parent":"","ambientocclusion":true,"front_gui_light":false,"visible_box":[1,1,0],"variable_placeholders":"","variable_placeholder_buttons":[],"unhandled_root_fields":{},"resolution":{"width":32,"height":32},"elements":[{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7.53393,5.8374,7.9375],"to":[8.40893,11.8374,8.0625],"autouv":0,"color":2,"origin":[-0.09107,-0.6626,0.4375],"faces":{"north":{"uv":[0,0,1,6],"texture":0},"east":{"uv":[1,0,2,6],"texture":0},"south":{"uv":[2,0,3,6],"texture":0},"west":{"uv":[3,0,4,6],"texture":0},"up":{"uv":[6,3,5,2],"texture":0},"down":{"uv":[6,3,5,4],"texture":0}},"type":"cube","uuid":"a864ca85-44b7-9cfe-ef6c-6d647bb91282"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8.34643,7.3999,7.9375],"to":[8.47143,7.8374,8.0625],"autouv":0,"color":4,"rotation":[0,0,22.5],"origin":[8.69018,7.61865,8],"faces":{"north":{"uv":[12,14,13,15],"texture":0},"east":{"uv":[14,12,15,13],"texture":0},"south":{"uv":[13,14,14,15],"texture":0},"west":{"uv":[14,13,15,14],"texture":0},"up":{"uv":[15,15,14,14],"texture":0},"down":{"uv":[1,15,0,16],"texture":0}},"type":"cube","uuid":"231bc5a3-a122-a4e5-887f-8d4a7cb7201a"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8.09643,6.5874,7.9375],"to":[8.22143,7.3374,8.0625],"autouv":0,"color":7,"rotation":[0,0,22.5],"origin":[8.69018,7.61865,8],"faces":{"north":{"uv":[15,0,16,1],"texture":0},"east":{"uv":[1,15,2,16],"texture":0},"south":{"uv":[15,1,16,2],"texture":0},"west":{"uv":[2,15,3,16],"texture":0},"up":{"uv":[16,3,15,2],"texture":0},"down":{"uv":[4,15,3,16],"texture":0}},"type":"cube","uuid":"e4c09f27-70cc-0168-f8d2-eab2c1081f56"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7.9674,6.64499,7.9375],"to":[8.7174,6.76999,8.0625],"autouv":0,"color":0,"rotation":[0,0,-45],"origin":[8.3424,6.70749,8],"faces":{"north":{"uv":[15,3,16,4],"texture":0},"east":{"uv":[4,15,5,16],"texture":0},"south":{"uv":[15,4,16,5],"texture":0},"west":{"uv":[5,15,6,16],"texture":0},"up":{"uv":[16,6,15,5],"texture":0},"down":{"uv":[7,15,6,16],"texture":0}},"type":"cube","uuid":"e91142ae-41df-6615-7c0d-8e99300d6550"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8.2357,5.59636,7.9375],"to":[8.3607,6.47136,8.0625],"autouv":0,"color":5,"rotation":[0,0,22.5],"origin":[8.2982,6.22136,8],"faces":{"north":{"uv":[15,9,16,10],"texture":0},"east":{"uv":[10,15,11,16],"texture":0},"south":{"uv":[15,10,16,11],"texture":0},"west":{"uv":[11,15,12,16],"texture":0},"up":{"uv":[16,12,15,11],"texture":0},"down":{"uv":[13,15,12,16],"texture":0}},"type":"cube","uuid":"7630cc39-eb72-f994-136b-56b03ed9edc2"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8.28354,4.48087,7.9375],"to":[8.40854,5.10587,8.0625],"autouv":0,"color":6,"rotation":[0,0,22.5],"origin":[8.34604,4.98087,8],"faces":{"north":{"uv":[0,16,1,17],"texture":0},"east":{"uv":[16,0,17,1],"texture":0},"south":{"uv":[1,16,2,17],"texture":0},"west":{"uv":[16,1,17,2],"texture":0},"up":{"uv":[3,17,2,16],"texture":0},"down":{"uv":[17,2,16,3],"texture":0}},"type":"cube","uuid":"b52ee4af-ee8d-9847-c1e3-06871fa65a4d"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8.40854,4.79337,7.9375],"to":[8.53354,5.10587,8.0625],"autouv":0,"color":1,"rotation":[0,0,22.5],"origin":[8.34604,4.98087,8],"faces":{"north":{"uv":[25,23,26,24],"texture":0},"east":{"uv":[24,25,25,26],"texture":0},"south":{"uv":[25,24,26,25],"texture":0},"west":{"uv":[25,25,26,26],"texture":0},"up":{"uv":[1,27,0,26],"texture":0},"down":{"uv":[27,0,26,1],"texture":0}},"type":"cube","uuid":"2d9ba3e2-43c1-5e2e-75de-34d8521e6cd3"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7.75673,4.77871,7.9375],"to":[8.19423,5.34121,8.0625],"autouv":0,"color":0,"rotation":[0,0,22.5],"origin":[8.38173,5.02871,8],"faces":{"north":{"uv":[17,13,18,14],"texture":0},"east":{"uv":[14,17,15,18],"texture":0},"south":{"uv":[17,14,18,15],"texture":0},"west":{"uv":[15,17,16,18],"texture":0},"up":{"uv":[18,16,17,15],"texture":0},"down":{"uv":[17,17,16,18],"texture":0}},"type":"cube","uuid":"8a503cc6-486d-1a06-3c69-5545dede745f"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8.11218,4.38917,7.9375],"to":[8.23718,4.76417,8.0625],"autouv":0,"color":2,"rotation":[0,0,-22.5],"origin":[8.17468,4.57667,8],"faces":{"north":{"uv":[17,16,18,17],"texture":0},"east":{"uv":[17,17,18,18],"texture":0},"south":{"uv":[0,18,1,19],"texture":0},"west":{"uv":[18,0,19,1],"texture":0},"up":{"uv":[2,19,1,18],"texture":0},"down":{"uv":[19,1,18,2],"texture":0}},"type":"cube","uuid":"042a8a4f-b6de-1ee2-b794-2988317f4242"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8.46501,2.26126,7.9375],"to":[8.59001,2.44876,8.0625],"autouv":0,"color":3,"rotation":[0,0,-22.5],"origin":[8.52751,4.32376,8],"faces":{"north":{"uv":[23,16,24,17],"texture":0},"east":{"uv":[17,23,18,24],"texture":0},"south":{"uv":[23,17,24,18],"texture":0},"west":{"uv":[18,23,19,24],"texture":0},"up":{"uv":[24,19,23,18],"texture":0},"down":{"uv":[20,23,19,24],"texture":0}},"type":"cube","uuid":"40f168d7-cf8b-56c9-a347-aeed2809e993"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7.96365,2.37016,7.9375],"to":[8.08865,2.55766,8.0625],"autouv":0,"color":1,"origin":[8.02615,2.40141,8],"faces":{"north":{"uv":[5,24,6,25],"texture":0},"east":{"uv":[24,5,25,6],"texture":0},"south":{"uv":[6,24,7,25],"texture":0},"west":{"uv":[24,6,25,7],"texture":0},"up":{"uv":[8,25,7,24],"texture":0},"down":{"uv":[25,7,24,8],"texture":0}},"type":"cube","uuid":"a22496f1-5b13-7a08-3b0d-7a8c97967ac5"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8.00429,2.54088,7.9375],"to":[8.12929,2.60338,8.0625],"autouv":0,"color":2,"rotation":[0,0,22.5],"origin":[8.06679,2.44713,8],"faces":{"north":{"uv":[2,24,3,25],"texture":0},"east":{"uv":[24,2,25,3],"texture":0},"south":{"uv":[3,24,4,25],"texture":0},"west":{"uv":[24,3,25,4],"texture":0},"up":{"uv":[5,25,4,24],"texture":0},"down":{"uv":[25,4,24,5],"texture":0}},"type":"cube","uuid":"5ac9d399-6935-789b-fa7e-54edb0e959b0"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7.94449,2.33633,7.9375],"to":[8.06949,2.39883,8.0625],"autouv":0,"color":2,"rotation":[0,0,-22.5],"origin":[8.00699,2.33633,8],"faces":{"north":{"uv":[8,24,9,25],"texture":0},"east":{"uv":[24,8,25,9],"texture":0},"south":{"uv":[9,24,10,25],"texture":0},"west":{"uv":[24,9,25,10],"texture":0},"up":{"uv":[11,25,10,24],"texture":0},"down":{"uv":[25,10,24,11],"texture":0}},"type":"cube","uuid":"5381a28e-81e2-3c59-b68f-d3d6d81a04e8"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7.91385,2.06242,7.9375],"to":[8.03885,2.37492,8.0625],"autouv":0,"color":7,"rotation":[0,0,-45],"origin":[7.97635,2.31242,8],"faces":{"north":{"uv":[11,24,12,25],"texture":0},"east":{"uv":[24,11,25,12],"texture":0},"south":{"uv":[12,24,13,25],"texture":0},"west":{"uv":[24,12,25,13],"texture":0},"up":{"uv":[14,25,13,24],"texture":0},"down":{"uv":[25,13,24,14],"texture":0}},"type":"cube","uuid":"854259a9-b15b-5738-9b87-01221d335d33"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7.65626,2.09145,7.9375],"to":[7.84376,2.21645,8.0625],"autouv":0,"color":0,"origin":[7.68751,2.15395,8],"faces":{"north":{"uv":[14,24,15,25],"texture":0},"east":{"uv":[24,14,25,15],"texture":0},"south":{"uv":[15,24,16,25],"texture":0},"west":{"uv":[24,15,25,16],"texture":0},"up":{"uv":[17,25,16,24],"texture":0},"down":{"uv":[25,16,24,17],"texture":0}},"type":"cube","uuid":"ad46e00c-8195-e5e5-0493-2b766ea1e697"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7.63834,2.09029,7.9375],"to":[7.82584,2.21529,8.0625],"autouv":0,"color":2,"origin":[7.66959,2.15279,8],"faces":{"north":{"uv":[23,24,24,25],"texture":0},"east":{"uv":[24,23,25,24],"texture":0},"south":{"uv":[24,24,25,25],"texture":0},"west":{"uv":[0,25,1,26],"texture":0},"up":{"uv":[26,1,25,0],"texture":0},"down":{"uv":[2,25,1,26],"texture":0}},"type":"cube","uuid":"819b1733-73c1-a9ea-39a8-72a1a678fd1f"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8.40277,2.01087,7.9375],"to":[8.52777,2.26087,8.0625],"autouv":0,"color":4,"rotation":[0,0,-22.5],"origin":[8.46527,4.13587,8],"faces":{"north":{"uv":[23,22,24,23],"texture":0},"east":{"uv":[23,23,24,24],"texture":0},"south":{"uv":[0,24,1,25],"texture":0},"west":{"uv":[24,0,25,1],"texture":0},"up":{"uv":[2,25,1,24],"texture":0},"down":{"uv":[25,1,24,2],"texture":0}},"type":"cube","uuid":"e66268e4-8eb0-7d3c-df69-170e6cccb1a2"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7.61157,2.10983,7.9375],"to":[7.73657,2.22483,8.0625],"autouv":0,"color":6,"rotation":[0,0,22.5],"origin":[7.67407,2.16733,8],"faces":{"north":{"uv":[17,24,18,25],"texture":0},"east":{"uv":[24,17,25,18],"texture":0},"south":{"uv":[18,24,19,25],"texture":0},"west":{"uv":[24,18,25,19],"texture":0},"up":{"uv":[20,25,19,24],"texture":0},"down":{"uv":[25,19,24,20],"texture":0}},"type":"cube","uuid":"bf32bae4-ec45-91a4-a9af-6c8c45bf8cda"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7.58325,2.09587,7.9375],"to":[7.67325,2.17587,8.0625],"autouv":0,"color":2,"rotation":[0,0,-22.5],"origin":[7.64075,2.15837,8],"faces":{"north":{"uv":[25,1,26,2],"texture":0},"east":{"uv":[2,25,3,26],"texture":0},"south":{"uv":[25,2,26,3],"texture":0},"west":{"uv":[3,25,4,26],"texture":0},"up":{"uv":[26,4,25,3],"texture":0},"down":{"uv":[5,25,4,26],"texture":0}},"type":"cube","uuid":"a502622d-dcba-3098-8c88-21f01a443660"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7.68048,2.37967,7.9375],"to":[7.80548,2.44217,8.0625],"autouv":0,"color":0,"origin":[7.74298,2.41092,8],"faces":{"north":{"uv":[20,24,21,25],"texture":0},"east":{"uv":[24,20,25,21],"texture":0},"south":{"uv":[21,24,22,25],"texture":0},"west":{"uv":[24,21,25,22],"texture":0},"up":{"uv":[23,25,22,24],"texture":0},"down":{"uv":[25,22,24,23],"texture":0}},"type":"cube","uuid":"ba7d3155-e7a8-cff3-f16e-ddb06fd0b473"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7.96867,3.65359,7.9375],"to":[8.09367,4.02859,8.0625],"autouv":0,"color":6,"rotation":[0,0,-22.5],"origin":[8.03117,3.84109,8],"faces":{"north":{"uv":[23,13,24,14],"texture":0},"east":{"uv":[14,23,15,24],"texture":0},"south":{"uv":[23,14,24,15],"texture":0},"west":{"uv":[15,23,16,24],"texture":0},"up":{"uv":[24,16,23,15],"texture":0},"down":{"uv":[17,23,16,24],"texture":0}},"type":"cube","uuid":"b563642b-2fbb-094e-e916-d631c21caac7"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7.91067,4.1779,7.9375],"to":[8.16067,4.6779,8.0625],"autouv":0,"color":5,"origin":[8.03567,4.37953,8],"faces":{"north":{"uv":[6,22,7,23],"texture":0},"east":{"uv":[22,6,23,7],"texture":0},"south":{"uv":[7,22,8,23],"texture":0},"west":{"uv":[22,7,23,8],"texture":0},"up":{"uv":[9,23,8,22],"texture":0},"down":{"uv":[23,8,22,9],"texture":0}},"type":"cube","uuid":"a841a0b3-3a2a-05f0-0df9-5b26b7a7a676"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7.91067,3.9904,7.9375],"to":[8.16067,4.1779,8.0625],"autouv":0,"color":2,"origin":[8.03567,4.37953,8],"faces":{"north":{"uv":[7,26,8,27],"texture":0},"east":{"uv":[26,7,27,8],"texture":0},"south":{"uv":[8,26,9,27],"texture":0},"west":{"uv":[26,8,27,9],"texture":0},"up":{"uv":[10,27,9,26],"texture":0},"down":{"uv":[27,9,26,10],"texture":0}},"type":"cube","uuid":"9695783a-1824-cd5f-27d6-5f30ecc46342"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7.75224,2.5529,7.9375],"to":[8.06474,2.6154,8.0625],"autouv":0,"color":0,"origin":[8.50224,4.0529,8],"faces":{"north":{"uv":[25,4,26,5],"texture":0},"east":{"uv":[5,25,6,26],"texture":0},"south":{"uv":[25,5,26,6],"texture":0},"west":{"uv":[6,25,7,26],"texture":0},"up":{"uv":[26,7,25,6],"texture":0},"down":{"uv":[8,25,7,26],"texture":0}},"type":"cube","uuid":"7c8f5676-17e1-3c48-cdc0-b30b4d0af26c"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7.75224,2.6154,7.9375],"to":[8.06474,4.1779,8.0625],"autouv":0,"color":7,"origin":[8.50224,4.0529,8],"faces":{"north":{"uv":[4,0,5,2],"texture":0},"east":{"uv":[4,2,5,4],"texture":0},"south":{"uv":[4,4,5,6],"texture":0},"west":{"uv":[5,0,6,2],"texture":0},"up":{"uv":[26,11,25,10],"texture":0},"down":{"uv":[12,25,11,26],"texture":0}},"type":"cube","uuid":"52b1323f-38a8-efc2-50ba-bdeeec8aa5a5"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7.75224,4.1779,7.9375],"to":[8.00224,4.2404,8.0625],"autouv":0,"color":1,"origin":[8.50224,4.0529,8],"faces":{"north":{"uv":[25,7,26,8],"texture":0},"east":{"uv":[8,25,9,26],"texture":0},"south":{"uv":[25,8,26,9],"texture":0},"west":{"uv":[9,25,10,26],"texture":0},"up":{"uv":[26,10,25,9],"texture":0},"down":{"uv":[11,25,10,26],"texture":0}},"type":"cube","uuid":"c17ff2eb-cb60-99e3-2a4a-f90c1658d1e9"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8.03567,4.1779,7.9375],"to":[8.16067,4.2404,8.0625],"autouv":0,"color":5,"origin":[8.34817,4.0529,8],"faces":{"north":{"uv":[4,26,5,27],"texture":0},"east":{"uv":[26,4,27,5],"texture":0},"south":{"uv":[5,26,6,27],"texture":0},"west":{"uv":[26,5,27,6],"texture":0},"up":{"uv":[7,27,6,26],"texture":0},"down":{"uv":[27,6,26,7],"texture":0}},"type":"cube","uuid":"3f4ec980-d985-1d7f-0b17-718ec4674d89"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8.24046,5.07244,7.9375],"to":[8.49046,5.19744,8.0625],"autouv":0,"color":4,"origin":[8.30296,5.38494,8],"faces":{"north":{"uv":[3,16,4,17],"texture":0},"east":{"uv":[16,3,17,4],"texture":0},"south":{"uv":[4,16,5,17],"texture":0},"west":{"uv":[16,4,17,5],"texture":0},"up":{"uv":[6,17,5,16],"texture":0},"down":{"uv":[17,5,16,6],"texture":0}},"type":"cube","uuid":"1b43b70d-6465-36e7-6e6c-97a16c8ffd9a"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8.03567,5.07244,7.9375],"to":[8.16067,5.13494,8.0625],"autouv":0,"color":7,"origin":[8.34817,5.38494,8],"faces":{"north":{"uv":[17,10,18,11],"texture":0},"east":{"uv":[11,17,12,18],"texture":0},"south":{"uv":[17,11,18,12],"texture":0},"west":{"uv":[12,17,13,18],"texture":0},"up":{"uv":[18,13,17,12],"texture":0},"down":{"uv":[14,17,13,18],"texture":0}},"type":"cube","uuid":"e48692b4-73ac-772f-6fbc-14403b860927"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8.22375,5.09398,7.9375],"to":[8.34875,5.21898,8.0625],"autouv":0,"color":7,"rotation":[0,0,22.5],"origin":[8.28625,5.18773,8],"faces":{"north":{"uv":[6,16,7,17],"texture":0},"east":{"uv":[16,6,17,7],"texture":0},"south":{"uv":[7,16,8,17],"texture":0},"west":{"uv":[16,7,17,8],"texture":0},"up":{"uv":[9,17,8,16],"texture":0},"down":{"uv":[17,8,16,9],"texture":0}},"type":"cube","uuid":"0468edfb-bfb0-d4b6-c6ad-71d941011006"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8.20324,5.18717,7.9375],"to":[8.32824,5.24967,8.0625],"autouv":0,"color":2,"rotation":[0,0,45],"origin":[8.26574,5.21842,8],"faces":{"north":{"uv":[9,16,10,17],"texture":0},"east":{"uv":[16,9,17,10],"texture":0},"south":{"uv":[10,16,11,17],"texture":0},"west":{"uv":[16,10,17,11],"texture":0},"up":{"uv":[12,17,11,16],"texture":0},"down":{"uv":[17,11,16,12],"texture":0}},"type":"cube","uuid":"2089790d-555f-ab01-7eb3-9cca17cba469"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8.2038,5.18363,7.9375],"to":[8.2663,5.30863,8.0625],"autouv":0,"color":3,"rotation":[0,0,-22.5],"origin":[8.21694,5.24253,8],"faces":{"north":{"uv":[15,16,16,17],"texture":0},"east":{"uv":[16,15,17,16],"texture":0},"south":{"uv":[16,16,17,17],"texture":0},"west":{"uv":[0,17,1,18],"texture":0},"up":{"uv":[18,1,17,0],"texture":0},"down":{"uv":[2,17,1,18],"texture":0}},"type":"cube","uuid":"510a25f1-b5ec-6971-75bf-46ceda948017"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8.07289,5.18717,7.9375],"to":[8.19789,5.24967,8.0625],"autouv":0,"color":5,"rotation":[0,0,-45],"origin":[8.13539,5.21842,8],"faces":{"north":{"uv":[17,7,18,8],"texture":0},"east":{"uv":[8,17,9,18],"texture":0},"south":{"uv":[17,8,18,9],"texture":0},"west":{"uv":[9,17,10,18],"texture":0},"up":{"uv":[18,10,17,9],"texture":0},"down":{"uv":[11,17,10,18],"texture":0}},"type":"cube","uuid":"36d50681-0bec-b8ca-1222-48ba44e47a53"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8.13483,5.18363,7.9375],"to":[8.19733,5.30863,8.0625],"autouv":0,"color":0,"rotation":[0,0,22.5],"origin":[8.18418,5.24253,8],"faces":{"north":{"uv":[17,4,18,5],"texture":0},"east":{"uv":[5,17,6,18],"texture":0},"south":{"uv":[17,5,18,6],"texture":0},"west":{"uv":[6,17,7,18],"texture":0},"up":{"uv":[18,7,17,6],"texture":0},"down":{"uv":[8,17,7,18],"texture":0}},"type":"cube","uuid":"9a0779d4-3ec6-716d-ed16-dc240a287d0e"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8.05238,5.09398,7.9375],"to":[8.17738,5.21898,8.0625],"autouv":0,"color":6,"rotation":[0,0,-22.5],"origin":[8.11488,5.18773,8],"faces":{"north":{"uv":[17,1,18,2],"texture":0},"east":{"uv":[2,17,3,18],"texture":0},"south":{"uv":[17,2,18,3],"texture":0},"west":{"uv":[3,17,4,18],"texture":0},"up":{"uv":[18,4,17,3],"texture":0},"down":{"uv":[5,17,4,18],"texture":0}},"type":"cube","uuid":"05fbd1e0-186a-6e2b-4315-0a51ed8942e9"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8.16759,5.18363,7.9375],"to":[8.23009,5.30863,8.0625],"autouv":0,"color":6,"origin":[8.21694,5.24253,8],"faces":{"north":{"uv":[12,16,13,17],"texture":0},"east":{"uv":[16,12,17,13],"texture":0},"south":{"uv":[13,16,14,17],"texture":0},"west":{"uv":[16,13,17,14],"texture":0},"up":{"uv":[15,17,14,16],"texture":0},"down":{"uv":[17,14,16,15],"texture":0}},"type":"cube","uuid":"691b31d4-fe0c-9ab4-500f-f56626b3f56b"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8.47012,4.54285,7.9375],"to":[8.59512,5.66785,8.0625],"autouv":0,"color":5,"origin":[8.40762,5.98035,8],"faces":{"north":{"uv":[15,12,16,13],"texture":0},"east":{"uv":[13,15,14,16],"texture":0},"south":{"uv":[15,13,16,14],"texture":0},"west":{"uv":[14,15,15,16],"texture":0},"up":{"uv":[16,15,15,14],"texture":0},"down":{"uv":[16,15,15,16],"texture":0}},"type":"cube","uuid":"51200f80-0aa0-a41a-a4d4-a0a964eb4806"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7.59643,5.8374,7.9375],"to":[8.03393,6.7124,8.0625],"autouv":0,"color":7,"rotation":[0,0,-22.5],"origin":[7.62768,6.5874,8],"faces":{"north":{"uv":[13,1,14,2],"texture":0},"east":{"uv":[2,13,3,14],"texture":0},"south":{"uv":[13,2,14,3],"texture":0},"west":{"uv":[3,13,4,14],"texture":0},"up":{"uv":[14,4,13,3],"texture":0},"down":{"uv":[5,13,4,14],"texture":0}},"type":"cube","uuid":"eac97b3a-783b-2c85-4667-bc22dff7b9c5"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7.71394,5.42738,7.9375],"to":[7.77644,5.73988,8.0625],"autouv":0,"color":7,"rotation":[0,0,-45],"origin":[7.74519,6.30238,8],"faces":{"north":{"uv":[13,4,14,5],"texture":0},"east":{"uv":[5,13,6,14],"texture":0},"south":{"uv":[13,5,14,6],"texture":0},"west":{"uv":[6,13,7,14],"texture":0},"up":{"uv":[14,7,13,6],"texture":0},"down":{"uv":[8,13,7,14],"texture":0}},"type":"cube","uuid":"bbf50a4c-8539-6074-acfe-8bda85db77c2"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8.13273,5.18383,7.9375],"to":[8.63273,5.49633,8.0625],"autouv":0,"color":4,"rotation":[0,0,45],"origin":[7.66398,4.68383,8],"faces":{"north":{"uv":[13,7,14,8],"texture":0},"east":{"uv":[8,13,9,14],"texture":0},"south":{"uv":[13,8,14,9],"texture":0},"west":{"uv":[9,13,10,14],"texture":0},"up":{"uv":[14,10,13,9],"texture":0},"down":{"uv":[11,13,10,14],"texture":0}},"type":"cube","uuid":"f659af16-a35f-f5db-e54d-291c9da72f63"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8.94523,5.68383,7.9375],"to":[9.25773,5.87133,8.0625],"autouv":0,"color":6,"rotation":[0,0,45],"origin":[8.60148,4.30883,8],"faces":{"north":{"uv":[2,18,3,19],"texture":0},"east":{"uv":[18,2,19,3],"texture":0},"south":{"uv":[3,18,4,19],"texture":0},"west":{"uv":[18,3,19,4],"texture":0},"up":{"uv":[5,19,4,18],"texture":0},"down":{"uv":[19,4,18,5],"texture":0}},"type":"cube","uuid":"daed23ae-5cfd-c6d3-a187-560fbfe3d012"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7.76834,5.58831,7.9375],"to":[7.95584,5.65081,8.0625],"autouv":0,"color":0,"rotation":[0,0,-22.5],"origin":[7.86209,5.61956,8],"faces":{"north":{"uv":[5,18,6,19],"texture":0},"east":{"uv":[18,5,19,6],"texture":0},"south":{"uv":[6,18,7,19],"texture":0},"west":{"uv":[18,6,19,7],"texture":0},"up":{"uv":[8,19,7,18],"texture":0},"down":{"uv":[19,7,18,8],"texture":0}},"type":"cube","uuid":"9db5a3f0-d58c-c59c-5d0c-c20424b00295"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7.74925,5.17982,7.9375],"to":[7.93675,5.67982,8.0625],"autouv":0,"color":2,"origin":[7.85254,5.47557,8],"faces":{"north":{"uv":[11,18,12,19],"texture":0},"east":{"uv":[18,11,19,12],"texture":0},"south":{"uv":[12,18,13,19],"texture":0},"west":{"uv":[18,12,19,13],"texture":0},"up":{"uv":[14,19,13,18],"texture":0},"down":{"uv":[19,13,18,14],"texture":0}},"type":"cube","uuid":"8a676414-fc1d-281d-e6a4-7b992338f4ef"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7.74925,5.39632,7.9375],"to":[7.93675,5.45882,8.0625],"autouv":0,"color":1,"rotation":[0,0,22.5],"origin":[7.85254,5.47557,8],"faces":{"north":{"uv":[8,18,9,19],"texture":0},"east":{"uv":[18,8,19,9],"texture":0},"south":{"uv":[9,18,10,19],"texture":0},"west":{"uv":[18,9,19,10],"texture":0},"up":{"uv":[11,19,10,18],"texture":0},"down":{"uv":[19,10,18,11],"texture":0}},"type":"cube","uuid":"e52c551a-acc3-67a1-2281-c3b8f714305c"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8.16342,5.71461,7.9375],"to":[8.35092,5.90211,8.0625],"autouv":0,"color":4,"rotation":[0,0,-45],"origin":[8.13454,5.73768,8],"faces":{"north":{"uv":[19,4,20,5],"texture":0},"east":{"uv":[5,19,6,20],"texture":0},"south":{"uv":[19,5,20,6],"texture":0},"west":{"uv":[6,19,7,20],"texture":0},"up":{"uv":[20,7,19,6],"texture":0},"down":{"uv":[8,19,7,20],"texture":0}},"type":"cube","uuid":"144d831a-cc2b-1e95-7569-ac527d5bf504"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8.14764,5.6814,7.9375],"to":[8.21014,5.8689,8.0625],"autouv":0,"color":3,"rotation":[0,0,-22.5],"origin":[8.13454,5.73768,8],"faces":{"north":{"uv":[19,1,20,2],"texture":0},"east":{"uv":[2,19,3,20],"texture":0},"south":{"uv":[19,2,20,3],"texture":0},"west":{"uv":[3,19,4,20],"texture":0},"up":{"uv":[20,4,19,3],"texture":0},"down":{"uv":[5,19,4,20],"texture":0}},"type":"cube","uuid":"2d4ad98d-328c-83f8-7e98-7fbb455db844"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7.98376,5.71254,7.9375],"to":[8.04626,5.90004,8.0625],"autouv":0,"color":6,"rotation":[0,0,22.5],"origin":[8.13454,5.73768,8],"faces":{"north":{"uv":[17,18,18,19],"texture":0},"east":{"uv":[18,17,19,18],"texture":0},"south":{"uv":[18,18,19,19],"texture":0},"west":{"uv":[0,19,1,20],"texture":0},"up":{"uv":[20,1,19,0],"texture":0},"down":{"uv":[2,19,1,20],"texture":0}},"type":"cube","uuid":"3449a507-a5c0-7c7f-8291-6e4775aca6e1"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7.7501,5.68067,7.9375],"to":[8.5001,5.86817,8.0625],"autouv":0,"color":6,"origin":[8.13454,5.73768,8],"faces":{"north":{"uv":[14,18,15,19],"texture":0},"east":{"uv":[18,14,19,15],"texture":0},"south":{"uv":[15,18,16,19],"texture":0},"west":{"uv":[18,15,19,16],"texture":0},"up":{"uv":[17,19,16,18],"texture":0},"down":{"uv":[19,16,18,17],"texture":0}},"type":"cube","uuid":"9daa9b5a-f2b5-39fd-c0e1-43918792d38c"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8.22705,5.31501,7.9375],"to":[8.41455,5.62751,8.0625],"autouv":0,"color":6,"rotation":[0,0,-22.5],"origin":[8.21338,5.43732,8],"faces":{"north":{"uv":[3,20,4,21],"texture":0},"east":{"uv":[20,3,21,4],"texture":0},"south":{"uv":[4,20,5,21],"texture":0},"west":{"uv":[20,4,21,5],"texture":0},"up":{"uv":[6,21,5,20],"texture":0},"down":{"uv":[21,5,20,6],"texture":0}},"type":"cube","uuid":"815b9ee4-8428-f675-1f11-76b25cd1c8c3"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8.25095,5.30482,7.9375],"to":[8.50095,5.74232,8.0625],"autouv":0,"color":1,"origin":[8.21338,5.43732,8],"faces":{"north":{"uv":[0,20,1,21],"texture":0},"east":{"uv":[20,0,21,1],"texture":0},"south":{"uv":[1,20,2,21],"texture":0},"west":{"uv":[20,1,21,2],"texture":0},"up":{"uv":[3,21,2,20],"texture":0},"down":{"uv":[21,2,20,3],"texture":0}},"type":"cube","uuid":"00e860e0-5444-e067-6350-36008d42bec0"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8.29306,5.53149,7.9375],"to":[8.48056,5.59399,8.0625],"autouv":0,"color":6,"rotation":[0,0,22.5],"origin":[8.21338,5.43732,8],"faces":{"north":{"uv":[19,16,20,17],"texture":0},"east":{"uv":[17,19,18,20],"texture":0},"south":{"uv":[19,17,20,18],"texture":0},"west":{"uv":[18,19,19,20],"texture":0},"up":{"uv":[20,19,19,18],"texture":0},"down":{"uv":[20,19,19,20],"texture":0}},"type":"cube","uuid":"0c4870b8-2e3e-9698-9de4-89720bdc1d69"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8.04221,5.21814,7.9375],"to":[8.22971,5.40564,8.0625],"autouv":0,"color":2,"rotation":[0,0,22.5],"origin":[8.21338,5.43732,8],"faces":{"north":{"uv":[19,13,20,14],"texture":0},"east":{"uv":[14,19,15,20],"texture":0},"south":{"uv":[19,14,20,15],"texture":0},"west":{"uv":[15,19,16,20],"texture":0},"up":{"uv":[20,16,19,15],"texture":0},"down":{"uv":[17,19,16,20],"texture":0}},"type":"cube","uuid":"8ba03b98-4d85-aa8d-b06e-b5d428764e1f"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8.22498,5.38253,7.9375],"to":[8.41248,5.44503,8.0625],"autouv":0,"color":0,"rotation":[0,0,-45],"origin":[8.21338,5.43732,8],"faces":{"north":{"uv":[19,10,20,11],"texture":0},"east":{"uv":[11,19,12,20],"texture":0},"south":{"uv":[19,11,20,12],"texture":0},"west":{"uv":[12,19,13,20],"texture":0},"up":{"uv":[20,13,19,12],"texture":0},"down":{"uv":[14,19,13,20],"texture":0}},"type":"cube","uuid":"5acb53ed-902c-e5aa-36b7-31799ab7dc9e"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7.6251,5.17896,7.9375],"to":[8.5001,5.36646,8.0625],"autouv":0,"color":6,"origin":[8.21338,5.43732,8],"faces":{"north":{"uv":[19,7,20,8],"texture":0},"east":{"uv":[8,19,9,20],"texture":0},"south":{"uv":[19,8,20,9],"texture":0},"west":{"uv":[9,19,10,20],"texture":0},"up":{"uv":[20,10,19,9],"texture":0},"down":{"uv":[11,19,10,20],"texture":0}},"type":"cube","uuid":"39201e71-60e4-93b9-2ff0-f8e6ef48689c"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7.97391,5.2157,7.9375],"to":[8.03641,5.4032,8.0625],"autouv":0,"color":1,"rotation":[0,0,-22.5],"origin":[7.95716,5.319,8],"faces":{"north":{"uv":[9,20,10,21],"texture":0},"east":{"uv":[20,9,21,10],"texture":0},"south":{"uv":[10,20,11,21],"texture":0},"west":{"uv":[20,10,21,11],"texture":0},"up":{"uv":[12,21,11,20],"texture":0},"down":{"uv":[21,11,20,12],"texture":0}},"type":"cube","uuid":"e86ea45d-658f-d311-3203-e5d6a5f5096e"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7.81541,5.2157,7.9375],"to":[8.00291,5.4032,8.0625],"autouv":0,"color":3,"rotation":[0,0,-45],"origin":[7.95716,5.319,8],"faces":{"north":{"uv":[6,20,7,21],"texture":0},"east":{"uv":[20,6,21,7],"texture":0},"south":{"uv":[7,20,8,21],"texture":0},"west":{"uv":[20,7,21,8],"texture":0},"up":{"uv":[9,21,8,20],"texture":0},"down":{"uv":[21,8,20,9],"texture":0}},"type":"cube","uuid":"7d1b94fc-151b-4c23-a905-0b3ddb3053d9"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7.2704,5.5978,7.9375],"to":[7.5829,5.9103,8.0625],"autouv":0,"color":0,"rotation":[0,0,-22.5],"origin":[7.3954,5.62905,8],"faces":{"north":{"uv":[13,10,14,11],"texture":0},"east":{"uv":[11,13,12,14],"texture":0},"south":{"uv":[13,11,14,12],"texture":0},"west":{"uv":[12,13,13,14],"texture":0},"up":{"uv":[14,13,13,12],"texture":0},"down":{"uv":[14,13,13,14],"texture":0}},"type":"cube","uuid":"a61e02e5-83e3-cd1b-d369-2fba8d227590"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7.2079,5.5978,7.9375],"to":[7.2704,5.8478,8.0625],"autouv":0,"color":4,"rotation":[0,0,-22.5],"origin":[7.3954,5.62905,8],"faces":{"north":{"uv":[25,17,26,18],"texture":0},"east":{"uv":[18,25,19,26],"texture":0},"south":{"uv":[25,18,26,19],"texture":0},"west":{"uv":[19,25,20,26],"texture":0},"up":{"uv":[26,20,25,19],"texture":0},"down":{"uv":[21,25,20,26],"texture":0}},"type":"cube","uuid":"2f5e8533-3c9f-30b6-e3d6-c539a344b090"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7.1454,5.5978,7.9375],"to":[7.2079,5.6978,8.0625],"autouv":0,"color":0,"rotation":[0,0,-22.5],"origin":[7.3954,5.62905,8],"faces":{"north":{"uv":[25,20,26,21],"texture":0},"east":{"uv":[21,25,22,26],"texture":0},"south":{"uv":[25,21,26,22],"texture":0},"west":{"uv":[22,25,23,26],"texture":0},"up":{"uv":[26,23,25,22],"texture":0},"down":{"uv":[24,25,23,26],"texture":0}},"type":"cube","uuid":"39f6fa0b-a372-4064-00bb-37a345ac46d1"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7.10438,5.64326,7.9375],"to":[7.29188,5.70576,8.0625],"autouv":0,"color":1,"origin":[7.22938,5.67451,8],"faces":{"north":{"uv":[0,14,1,15],"texture":0},"east":{"uv":[14,0,15,1],"texture":0},"south":{"uv":[1,14,2,15],"texture":0},"west":{"uv":[14,1,15,2],"texture":0},"up":{"uv":[3,15,2,14],"texture":0},"down":{"uv":[15,2,14,3],"texture":0}},"type":"cube","uuid":"22f2ef78-dd57-8e5a-ed8b-5cb24bd9baf0"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7.60694,5.1407,7.9375],"to":[7.98194,5.3282,8.0625],"autouv":0,"color":1,"origin":[7.59273,5.2032,8],"faces":{"north":{"uv":[6,14,7,15],"texture":0},"east":{"uv":[14,6,15,7],"texture":0},"south":{"uv":[7,14,8,15],"texture":0},"west":{"uv":[14,7,15,8],"texture":0},"up":{"uv":[9,15,8,14],"texture":0},"down":{"uv":[15,8,14,9],"texture":0}},"type":"cube","uuid":"6b954294-b42d-ae72-5a2c-764024cb9cae"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7.57344,4.65979,7.9375],"to":[7.94844,5.22229,8.0625],"autouv":0,"color":6,"rotation":[0,0,-22.5],"origin":[7.60469,5.06604,8],"faces":{"north":{"uv":[9,14,10,15],"texture":0},"east":{"uv":[14,9,15,10],"texture":0},"south":{"uv":[10,14,11,15],"texture":0},"west":{"uv":[14,10,15,11],"texture":0},"up":{"uv":[12,15,11,14],"texture":0},"down":{"uv":[15,11,14,12],"texture":0}},"type":"cube","uuid":"022e3e34-5d02-8519-e491-d284eba4d546"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7.42036,4.64017,7.9375],"to":[7.54536,4.70267,8.0625],"autouv":0,"color":1,"origin":[7.45161,4.45267,8],"faces":{"north":{"uv":[18,20,19,21],"texture":0},"east":{"uv":[20,18,21,19],"texture":0},"south":{"uv":[19,20,20,21],"texture":0},"west":{"uv":[20,19,21,20],"texture":0},"up":{"uv":[21,21,20,20],"texture":0},"down":{"uv":[1,21,0,22],"texture":0}},"type":"cube","uuid":"9fb505aa-446f-2c0f-2e73-51c3aada68cf"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7.53742,4.49601,7.9375],"to":[7.59992,4.62101,8.0625],"autouv":0,"color":5,"origin":[7.56867,4.30851,8],"faces":{"north":{"uv":[21,6,22,7],"texture":0},"east":{"uv":[7,21,8,22],"texture":0},"south":{"uv":[21,7,22,8],"texture":0},"west":{"uv":[8,21,9,22],"texture":0},"up":{"uv":[22,9,21,8],"texture":0},"down":{"uv":[10,21,9,22],"texture":0}},"type":"cube","uuid":"dd49461e-20b4-30ec-76bd-48276c1a4716"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7.54563,4.49601,7.9375],"to":[7.60813,4.62101,8.0625],"autouv":0,"color":5,"origin":[7.57688,4.30851,8],"faces":{"north":{"uv":[21,12,22,13],"texture":0},"east":{"uv":[13,21,14,22],"texture":0},"south":{"uv":[21,13,22,14],"texture":0},"west":{"uv":[14,21,15,22],"texture":0},"up":{"uv":[22,15,21,14],"texture":0},"down":{"uv":[16,21,15,22],"texture":0}},"type":"cube","uuid":"c8e006f2-c4cf-4e61-a51e-d8105ae02325"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7.55997,4.56809,7.9375],"to":[7.62247,4.63059,8.0625],"autouv":0,"color":1,"rotation":[0,0,-22.5],"origin":[7.59122,4.59934,8],"faces":{"north":{"uv":[21,15,22,16],"texture":0},"east":{"uv":[16,21,17,22],"texture":0},"south":{"uv":[21,16,22,17],"texture":0},"west":{"uv":[17,21,18,22],"texture":0},"up":{"uv":[22,18,21,17],"texture":0},"down":{"uv":[19,21,18,22],"texture":0}},"type":"cube","uuid":"7ad9f37c-eb0e-0c3e-8bb3-2a37ebfe1c56"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7.84631,4.48382,7.9375],"to":[7.90881,4.60882,8.0625],"autouv":0,"color":7,"rotation":[0,0,-45],"origin":[7.88473,4.55111,8],"faces":{"north":{"uv":[15,22,16,23],"texture":0},"east":{"uv":[22,15,23,16],"texture":0},"south":{"uv":[16,22,17,23],"texture":0},"west":{"uv":[22,16,23,17],"texture":0},"up":{"uv":[18,23,17,22],"texture":0},"down":{"uv":[23,17,22,18],"texture":0}},"type":"cube","uuid":"4bcb0dc7-0f4b-a9ed-1a95-a1936d92a898"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7.86924,4.42509,7.9375],"to":[8.11924,4.55009,8.0625],"autouv":0,"color":2,"rotation":[0,0,22.5],"origin":[7.86445,4.44917,8],"faces":{"north":{"uv":[12,22,13,23],"texture":0},"east":{"uv":[22,12,23,13],"texture":0},"south":{"uv":[13,22,14,23],"texture":0},"west":{"uv":[22,13,23,14],"texture":0},"up":{"uv":[15,23,14,22],"texture":0},"down":{"uv":[23,14,22,15],"texture":0}},"type":"cube","uuid":"64df2072-8da3-4afc-dc46-4b3a3a6be8af"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7.87809,4.23168,7.9375],"to":[8.00309,4.35668,8.0625],"autouv":0,"color":1,"rotation":[0,0,-22.5],"origin":[7.90217,4.36147,8],"faces":{"north":{"uv":[21,22,22,23],"texture":0},"east":{"uv":[22,21,23,22],"texture":0},"south":{"uv":[22,22,23,23],"texture":0},"west":{"uv":[0,23,1,24],"texture":0},"up":{"uv":[24,1,23,0],"texture":0},"down":{"uv":[2,23,1,24],"texture":0}},"type":"cube","uuid":"9f147a04-2476-22cc-d990-3fd5b92ac48b"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7.87809,4.30376,7.9375],"to":[8.06559,4.55376,8.0625],"autouv":0,"color":2,"origin":[7.90217,4.36147,8],"faces":{"north":{"uv":[18,22,19,23],"texture":0},"east":{"uv":[22,18,23,19],"texture":0},"south":{"uv":[19,22,20,23],"texture":0},"west":{"uv":[22,19,23,20],"texture":0},"up":{"uv":[21,23,20,22],"texture":0},"down":{"uv":[23,20,22,21],"texture":0}},"type":"cube","uuid":"ac750d29-7c36-3db2-3a3d-bf3ff38eb22d"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7.78003,4.2682,7.9375],"to":[7.84253,4.3307,8.0625],"autouv":0,"color":5,"rotation":[0,0,-45],"origin":[7.79032,4.23011,8],"faces":{"north":{"uv":[23,4,24,5],"texture":0},"east":{"uv":[5,23,6,24],"texture":0},"south":{"uv":[23,5,24,6],"texture":0},"west":{"uv":[6,23,7,24],"texture":0},"up":{"uv":[24,7,23,6],"texture":0},"down":{"uv":[8,23,7,24],"texture":0}},"type":"cube","uuid":"39f5a99d-87b9-0e0b-767a-2cd9ea05609a"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7.75907,4.19169,7.9375],"to":[7.88407,4.25419,8.0625],"autouv":0,"color":0,"rotation":[0,0,22.5],"origin":[7.79032,4.23011,8],"faces":{"north":{"uv":[23,1,24,2],"texture":0},"east":{"uv":[2,23,3,24],"texture":0},"south":{"uv":[23,2,24,3],"texture":0},"west":{"uv":[3,23,4,24],"texture":0},"up":{"uv":[24,4,23,3],"texture":0},"down":{"uv":[5,23,4,24],"texture":0}},"type":"cube","uuid":"1d7ce41b-0b12-f1c8-6f23-945df248fd7d"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7.73189,4.44283,7.9375],"to":[7.79439,4.88033,8.0625],"autouv":0,"color":6,"rotation":[0,0,-22.5],"origin":[7.57564,4.59908,8],"faces":{"north":{"uv":[9,22,10,23],"texture":0},"east":{"uv":[22,9,23,10],"texture":0},"south":{"uv":[10,22,11,23],"texture":0},"west":{"uv":[22,10,23,11],"texture":0},"up":{"uv":[12,23,11,22],"texture":0},"down":{"uv":[23,11,22,12],"texture":0}},"type":"cube","uuid":"db2c366a-3ecd-deb0-6a20-75d53f99c4b4"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7.70865,4.49944,7.9375],"to":[7.77115,4.56194,8.0625],"autouv":0,"color":0,"origin":[7.6774,4.53069,8],"faces":{"north":{"uv":[23,10,24,11],"texture":0},"east":{"uv":[11,23,12,24],"texture":0},"south":{"uv":[23,11,24,12],"texture":0},"west":{"uv":[12,23,13,24],"texture":0},"up":{"uv":[24,13,23,12],"texture":0},"down":{"uv":[14,23,13,24],"texture":0}},"type":"cube","uuid":"0fa9f2d7-6ff6-2788-205e-660b5c3de371"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7.67203,4.49944,7.9375],"to":[7.79703,4.74944,8.0625],"autouv":0,"color":5,"rotation":[0,0,-45],"origin":[7.76578,4.53069,8],"faces":{"north":{"uv":[1,26,2,27],"texture":0},"east":{"uv":[26,1,27,2],"texture":0},"south":{"uv":[2,26,3,27],"texture":0},"west":{"uv":[26,2,27,3],"texture":0},"up":{"uv":[4,27,3,26],"texture":0},"down":{"uv":[27,3,26,4],"texture":0}},"type":"cube","uuid":"b819cd3c-5674-5dc7-d0ab-25d6d85a390b"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7.64724,4.37101,7.9375],"to":[7.70974,4.62101,8.0625],"autouv":0,"color":4,"origin":[7.67849,4.30851,8],"faces":{"north":{"uv":[0,22,1,23],"texture":0},"east":{"uv":[22,0,23,1],"texture":0},"south":{"uv":[1,22,2,23],"texture":0},"west":{"uv":[22,1,23,2],"texture":0},"up":{"uv":[3,23,2,22],"texture":0},"down":{"uv":[23,2,22,3],"texture":0}},"type":"cube","uuid":"b48b398f-a330-eed7-41e5-17698a7ab404"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7.6329,4.56809,7.9375],"to":[7.6954,4.63059,8.0625],"autouv":0,"color":1,"rotation":[0,0,22.5],"origin":[7.66415,4.59934,8],"faces":{"north":{"uv":[21,18,22,19],"texture":0},"east":{"uv":[19,21,20,22],"texture":0},"south":{"uv":[21,19,22,20],"texture":0},"west":{"uv":[20,21,21,22],"texture":0},"up":{"uv":[22,21,21,20],"texture":0},"down":{"uv":[22,21,21,22],"texture":0}},"type":"cube","uuid":"ed942121-dfe8-78a1-0960-2c7d8b3385d2"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7.54153,4.4736,7.9375],"to":[7.59153,4.5236,8.0625],"autouv":0,"color":6,"rotation":[0,0,45],"origin":[7.57278,4.50485,8],"faces":{"north":{"uv":[21,9,22,10],"texture":0},"east":{"uv":[10,21,11,22],"texture":0},"south":{"uv":[21,10,22,11],"texture":0},"west":{"uv":[11,21,12,22],"texture":0},"up":{"uv":[22,12,21,11],"texture":0},"down":{"uv":[13,21,12,22],"texture":0}},"type":"cube","uuid":"213b3f5e-7565-1eba-5a06-c9f42c749f9a"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7.65134,4.3486,7.9375],"to":[7.70134,4.3986,8.0625],"autouv":0,"color":6,"rotation":[0,0,45],"origin":[7.68259,4.37985,8],"faces":{"north":{"uv":[3,22,4,23],"texture":0},"east":{"uv":[22,3,23,4],"texture":0},"south":{"uv":[4,22,5,23],"texture":0},"west":{"uv":[22,4,23,5],"texture":0},"up":{"uv":[6,23,5,22],"texture":0},"down":{"uv":[23,5,22,6],"texture":0}},"type":"cube","uuid":"d2253bf4-7249-9af6-a180-7719e598b1ac"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7.4958,4.60892,7.9375],"to":[7.5583,4.67142,8.0625],"autouv":0,"color":6,"rotation":[0,0,-45],"origin":[7.52705,4.64017,8],"faces":{"north":{"uv":[21,0,22,1],"texture":0},"east":{"uv":[1,21,2,22],"texture":0},"south":{"uv":[21,1,22,2],"texture":0},"west":{"uv":[2,21,3,22],"texture":0},"up":{"uv":[22,3,21,2],"texture":0},"down":{"uv":[4,21,3,22],"texture":0}},"type":"cube","uuid":"6a92c34a-3f0b-4f0a-5496-4a556313b0b0"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7.52308,4.56809,7.9375],"to":[7.58558,4.63059,8.0625],"autouv":0,"color":6,"rotation":[0,0,22.5],"origin":[7.55433,4.59934,8],"faces":{"north":{"uv":[21,3,22,4],"texture":0},"east":{"uv":[4,21,5,22],"texture":0},"south":{"uv":[21,4,22,5],"texture":0},"west":{"uv":[5,21,6,22],"texture":0},"up":{"uv":[22,6,21,5],"texture":0},"down":{"uv":[7,21,6,22],"texture":0}},"type":"cube","uuid":"b1e43937-583c-e0a5-5a7f-2cafeab4de6f"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7.67286,5.29408,7.9375],"to":[7.92286,5.48158,8.0625],"autouv":0,"color":6,"rotation":[0,0,22.5],"origin":[7.61665,5.14545,8],"faces":{"north":{"uv":[3,14,4,15],"texture":0},"east":{"uv":[14,3,15,4],"texture":0},"south":{"uv":[4,14,5,15],"texture":0},"west":{"uv":[14,4,15,5],"texture":0},"up":{"uv":[6,15,5,14],"texture":0},"down":{"uv":[15,5,14,6],"texture":0}},"type":"cube","uuid":"2537bd5c-98e5-4db1-f2c1-ec9c2559cd51"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8.15893,11.8374,7.9375],"to":[8.40893,13.1499,8.0625],"autouv":0,"color":4,"origin":[-0.09107,-0.6626,0.4375],"faces":{"north":{"uv":[2,6,3,7],"texture":0},"east":{"uv":[6,2,7,3],"texture":0},"south":{"uv":[3,6,4,7],"texture":0},"west":{"uv":[6,3,7,4],"texture":0},"up":{"uv":[5,7,4,6],"texture":0},"down":{"uv":[7,4,6,5],"texture":0}},"type":"cube","uuid":"a888f7a0-598a-6d11-a4a8-d42f1991bb47"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8.19367,13.13022,7.9375],"to":[8.31867,13.25522,8.0625],"autouv":0,"color":7,"origin":[-0.18133,-1.18228,0.4375],"faces":{"north":{"uv":[6,10,7,11],"texture":0},"east":{"uv":[10,6,11,7],"texture":0},"south":{"uv":[7,10,8,11],"texture":0},"west":{"uv":[10,7,11,8],"texture":0},"up":{"uv":[9,11,8,10],"texture":0},"down":{"uv":[11,8,10,9],"texture":0}},"type":"cube","uuid":"0a260045-cb63-92f5-5c81-472a55c9168b"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7.66072,11.03732,7.9375],"to":[7.78572,12.16232,8.0625],"autouv":0,"color":1,"rotation":[0,0,-22.5],"origin":[7.72322,12.13107,8],"faces":{"north":{"uv":[5,4,6,5],"texture":0},"east":{"uv":[5,5,6,6],"texture":0},"south":{"uv":[0,6,1,7],"texture":0},"west":{"uv":[6,0,7,1],"texture":0},"up":{"uv":[2,7,1,6],"texture":0},"down":{"uv":[7,1,6,2],"texture":0}},"type":"cube","uuid":"5a79b2f9-07ab-9bac-317b-67c12e52ad5e"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7.21545,10.85901,7.9375],"to":[7.30545,10.94901,8.0625],"autouv":0,"color":4,"rotation":[0,0,45],"origin":[7.26045,10.90401,8],"faces":{"north":{"uv":[3,10,4,11],"texture":0},"east":{"uv":[10,3,11,4],"texture":0},"south":{"uv":[4,10,5,11],"texture":0},"west":{"uv":[10,4,11,5],"texture":0},"up":{"uv":[6,11,5,10],"texture":0},"down":{"uv":[11,5,10,6],"texture":0}},"type":"cube","uuid":"e102ec36-721c-c3b1-fd34-23b7494b0062"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8.468,7.26349,7.9375],"to":[8.558,7.35349,8.0625],"autouv":0,"color":6,"rotation":[0,0,-22.5],"origin":[8.513,7.30849,8],"faces":{"north":{"uv":[12,20,13,21],"texture":0},"east":{"uv":[20,12,21,13],"texture":0},"south":{"uv":[13,20,14,21],"texture":0},"west":{"uv":[20,13,21,14],"texture":0},"up":{"uv":[15,21,14,20],"texture":0},"down":{"uv":[21,14,20,15],"texture":0}},"type":"cube","uuid":"dabdd100-5370-943d-099c-a3df7058ac2a"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8.56176,6.39652,7.9375],"to":[8.65176,6.48652,8.0625],"autouv":0,"color":2,"origin":[8.60676,6.44152,8],"faces":{"north":{"uv":[15,20,16,21],"texture":0},"east":{"uv":[20,15,21,16],"texture":0},"south":{"uv":[16,20,17,21],"texture":0},"west":{"uv":[20,16,21,17],"texture":0},"up":{"uv":[18,21,17,20],"texture":0},"down":{"uv":[21,17,20,18],"texture":0}},"type":"cube","uuid":"61885867-b944-8d67-f50f-d82e1dd7b506"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7.66072,12.91232,7.9375],"to":[7.84822,13.28732,8.0625],"autouv":0,"color":6,"rotation":[0,0,-22.5],"origin":[7.72322,12.13107,8],"faces":{"north":{"uv":[0,10,1,11],"texture":0},"east":{"uv":[10,0,11,1],"texture":0},"south":{"uv":[1,10,2,11],"texture":0},"west":{"uv":[10,1,11,2],"texture":0},"up":{"uv":[3,11,2,10],"texture":0},"down":{"uv":[11,2,10,3],"texture":0}},"type":"cube","uuid":"aff7e209-31ea-6689-2897-06c6f567cc2e"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7.72543,12.11221,7.9375],"to":[8.35043,12.42471,8.0625],"autouv":0,"color":0,"rotation":[0,0,-45],"origin":[7.78793,12.20596,8],"faces":{"north":{"uv":[9,0,10,1],"texture":0},"east":{"uv":[1,9,2,10],"texture":0},"south":{"uv":[9,1,10,2],"texture":0},"west":{"uv":[2,9,3,10],"texture":0},"up":{"uv":[10,3,9,2],"texture":0},"down":{"uv":[4,9,3,10],"texture":0}},"type":"cube","uuid":"cedcb52e-64ff-dc17-6dd5-32521f3d6901"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7.91293,11.79971,7.9375],"to":[8.22543,12.11221,8.0625],"autouv":0,"color":0,"rotation":[0,0,-45],"origin":[7.78793,12.20596,8],"faces":{"north":{"uv":[25,11,26,12],"texture":0},"east":{"uv":[12,25,13,26],"texture":0},"south":{"uv":[25,12,26,13],"texture":0},"west":{"uv":[13,25,14,26],"texture":0},"up":{"uv":[26,14,25,13],"texture":0},"down":{"uv":[15,25,14,26],"texture":0}},"type":"cube","uuid":"1ad4c08b-3310-7f44-7c5b-259a71d23e28"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7.78793,11.98721,7.9375],"to":[7.91293,12.11221,8.0625],"autouv":0,"color":1,"rotation":[0,0,-45],"origin":[7.78793,12.20596,8],"faces":{"north":{"uv":[25,14,26,15],"texture":0},"east":{"uv":[15,25,16,26],"texture":0},"south":{"uv":[25,15,26,16],"texture":0},"west":{"uv":[16,25,17,26],"texture":0},"up":{"uv":[26,17,25,16],"texture":0},"down":{"uv":[18,25,17,26],"texture":0}},"type":"cube","uuid":"ecfef2bd-9f88-61c1-3d66-d3efc4557404"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7.81405,12.24483,7.9375],"to":[8.25155,12.74483,8.0625],"autouv":0,"color":4,"rotation":[0,0,-22.5],"origin":[7.87655,12.33858,8],"faces":{"north":{"uv":[9,3,10,4],"texture":0},"east":{"uv":[4,9,5,10],"texture":0},"south":{"uv":[9,4,10,5],"texture":0},"west":{"uv":[5,9,6,10],"texture":0},"up":{"uv":[10,6,9,5],"texture":0},"down":{"uv":[7,9,6,10],"texture":0}},"type":"cube","uuid":"fa35af67-1dc1-3b3c-6ff1-bafd2c5df2c7"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7.96445,12.68927,7.9375],"to":[8.15195,12.87677,8.0625],"autouv":0,"color":0,"origin":[8.02695,12.78302,8],"faces":{"north":{"uv":[9,6,10,7],"texture":0},"east":{"uv":[7,9,8,10],"texture":0},"south":{"uv":[9,7,10,8],"texture":0},"west":{"uv":[8,9,9,10],"texture":0},"up":{"uv":[10,9,9,8],"texture":0},"down":{"uv":[10,9,9,10],"texture":0}},"type":"cube","uuid":"1b27fedf-e65d-4fcd-2e9e-ee241fafe4b6"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7.56628,11.23288,7.9375],"to":[7.69128,11.35788,8.0625],"autouv":0,"color":3,"origin":[7.62878,11.29538,8],"faces":{"north":{"uv":[5,6,6,7],"texture":0},"east":{"uv":[6,5,7,6],"texture":0},"south":{"uv":[6,6,7,7],"texture":0},"west":{"uv":[0,7,1,8],"texture":0},"up":{"uv":[8,1,7,0],"texture":0},"down":{"uv":[2,7,1,8],"texture":0}},"type":"cube","uuid":"4ce1b343-f9ab-6a7b-8add-2107f556485b"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7.24474,10.98936,7.9375],"to":[7.36974,11.11436,8.0625],"autouv":0,"color":6,"rotation":[0,0,-22.5],"origin":[7.32158,11.12394,8],"faces":{"north":{"uv":[7,1,8,2],"texture":0},"east":{"uv":[2,7,3,8],"texture":0},"south":{"uv":[7,2,8,3],"texture":0},"west":{"uv":[3,7,4,8],"texture":0},"up":{"uv":[8,4,7,3],"texture":0},"down":{"uv":[5,7,4,8],"texture":0}},"type":"cube","uuid":"ecf349cb-3d72-f923-6bf8-e2831b044149"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7.19909,10.90401,7.9375],"to":[7.32409,11.02901,8.0625],"autouv":0,"color":5,"origin":[7.26159,10.96651,8],"faces":{"north":{"uv":[15,6,16,7],"texture":0},"east":{"uv":[7,15,8,16],"texture":0},"south":{"uv":[15,7,16,8],"texture":0},"west":{"uv":[8,15,9,16],"texture":0},"up":{"uv":[16,9,15,8],"texture":0},"down":{"uv":[10,15,9,16],"texture":0}},"type":"cube","uuid":"bc155c16-6ea8-0b02-59e9-27cfb7438988"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7.35962,11.20421,7.9375],"to":[7.60962,11.32921,8.0625],"autouv":0,"color":1,"rotation":[0,0,22.5],"origin":[7.48462,11.26671,8],"faces":{"north":{"uv":[0,8,1,9],"texture":0},"east":{"uv":[8,0,9,1],"texture":0},"south":{"uv":[1,8,2,9],"texture":0},"west":{"uv":[8,1,9,2],"texture":0},"up":{"uv":[3,9,2,8],"texture":0},"down":{"uv":[9,2,8,3],"texture":0}},"type":"cube","uuid":"caac0cee-8d79-6c8f-4d16-4f52bcc12c31"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7.42212,11.32921,7.9375],"to":[7.60962,11.39171,8.0625],"autouv":0,"color":5,"rotation":[0,0,22.5],"origin":[7.48462,11.26671,8],"faces":{"north":{"uv":[3,8,4,9],"texture":0},"east":{"uv":[8,3,9,4],"texture":0},"south":{"uv":[4,8,5,9],"texture":0},"west":{"uv":[8,4,9,5],"texture":0},"up":{"uv":[6,9,5,8],"texture":0},"down":{"uv":[9,5,8,6],"texture":0}},"type":"cube","uuid":"78923bc3-2562-5f1f-d647-4d322e4a74c6"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7.42212,11.39171,7.9375],"to":[7.60962,11.51671,8.0625],"autouv":0,"color":1,"origin":[7.48462,11.26671,8],"faces":{"north":{"uv":[6,8,7,9],"texture":0},"east":{"uv":[8,6,9,7],"texture":0},"south":{"uv":[7,8,8,9],"texture":0},"west":{"uv":[8,7,9,8],"texture":0},"up":{"uv":[9,9,8,8],"texture":0},"down":{"uv":[1,9,0,10],"texture":0}},"type":"cube","uuid":"458443ba-54c5-3e05-a433-234cb412e295"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[7.33116,11.07578,7.9375],"to":[7.45616,11.20078,8.0625],"autouv":0,"color":1,"rotation":[0,0,45],"origin":[7.32158,11.12394,8],"faces":{"north":{"uv":[7,4,8,5],"texture":0},"east":{"uv":[5,7,6,8],"texture":0},"south":{"uv":[7,5,8,6],"texture":0},"west":{"uv":[6,7,7,8],"texture":0},"up":{"uv":[8,7,7,6],"texture":0},"down":{"uv":[8,7,7,8],"texture":0}},"type":"cube","uuid":"9043c335-de67-865a-0809-f8ff08b737bf"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8.25655,12.58161,7.9375],"to":[8.50655,13.58161,8.0625],"autouv":0,"color":6,"rotation":[0,0,-22.5],"origin":[8.21774,13.10287,8],"faces":{"north":{"uv":[9,10,10,11],"texture":0},"east":{"uv":[10,9,11,10],"texture":0},"south":{"uv":[10,10,11,11],"texture":0},"west":{"uv":[0,11,1,12],"texture":0},"up":{"uv":[12,1,11,0],"texture":0},"down":{"uv":[2,11,1,12],"texture":0}},"type":"cube","uuid":"2fd4f8b9-94d5-9f8c-404a-8e9f678bf6fe"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8.05501,13.11035,7.9375],"to":[8.30501,13.61035,8.0625],"autouv":0,"color":3,"rotation":[0,0,-45],"origin":[8.21774,13.10287,8],"faces":{"north":{"uv":[11,1,12,2],"texture":0},"east":{"uv":[2,11,3,12],"texture":0},"south":{"uv":[11,2,12,3],"texture":0},"west":{"uv":[3,11,4,12],"texture":0},"up":{"uv":[12,4,11,3],"texture":0},"down":{"uv":[5,11,4,12],"texture":0}},"type":"cube","uuid":"69e036b6-90e9-5701-de2f-46902368aeb1"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8.31905,13.58161,7.9375],"to":[8.38155,13.69911,8.0625],"autouv":0,"color":4,"rotation":[0,0,-22.5],"origin":[8.21774,13.10287,8],"faces":{"north":{"uv":[11,4,12,5],"texture":0},"east":{"uv":[5,11,6,12],"texture":0},"south":{"uv":[11,5,12,6],"texture":0},"west":{"uv":[6,11,7,12],"texture":0},"up":{"uv":[12,7,11,6],"texture":0},"down":{"uv":[8,11,7,12],"texture":0}},"type":"cube","uuid":"585350b3-fa69-acd6-4b9f-7832cc18e425"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8.11751,13.86129,7.9375],"to":[8.18001,13.93129,8.0625],"autouv":0,"color":0,"rotation":[0,0,-45],"origin":[8.21774,13.10287,8],"faces":{"north":{"uv":[11,7,12,8],"texture":0},"east":{"uv":[8,11,9,12],"texture":0},"south":{"uv":[11,8,12,9],"texture":0},"west":{"uv":[9,11,10,12],"texture":0},"up":{"uv":[12,10,11,9],"texture":0},"down":{"uv":[11,11,10,12],"texture":0}},"type":"cube","uuid":"f1178140-5061-459d-91ca-a773590ac5ba"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8.38155,13.58161,7.9375],"to":[8.44405,13.88661,8.0625],"autouv":0,"color":6,"rotation":[0,0,-22.5],"origin":[8.21774,13.10287,8],"faces":{"north":{"uv":[11,10,12,11],"texture":0},"east":{"uv":[11,11,12,12],"texture":0},"south":{"uv":[0,12,1,13],"texture":0},"west":{"uv":[12,0,13,1],"texture":0},"up":{"uv":[2,13,1,12],"texture":0},"down":{"uv":[13,1,12,2],"texture":0}},"type":"cube","uuid":"77c88ade-4355-a744-bcd0-9e1eb1d4a876"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8.11751,13.61035,7.9375],"to":[8.18001,13.92285,8.0625],"autouv":0,"color":3,"rotation":[0,0,-45],"origin":[8.21774,13.10287,8],"faces":{"north":{"uv":[2,12,3,13],"texture":0},"east":{"uv":[12,2,13,3],"texture":0},"south":{"uv":[3,12,4,13],"texture":0},"west":{"uv":[12,3,13,4],"texture":0},"up":{"uv":[5,13,4,12],"texture":0},"down":{"uv":[13,4,12,5],"texture":0}},"type":"cube","uuid":"bfe53505-c1ff-d065-d0c6-fd9d1af426df"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8.77087,13.82914,7.9375],"to":[8.83287,13.88614,8.0625],"autouv":0,"color":1,"origin":[8.21774,13.10287,8],"faces":{"north":{"uv":[5,12,6,13],"texture":0},"east":{"uv":[12,5,13,6],"texture":0},"south":{"uv":[6,12,7,13],"texture":0},"west":{"uv":[12,6,13,7],"texture":0},"up":{"uv":[8,13,7,12],"texture":0},"down":{"uv":[13,7,12,8],"texture":0}},"type":"cube","uuid":"a5883587-1f30-fb69-3bec-511a5939d219"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8.05501,13.61035,7.9375],"to":[8.11751,14.04785,8.0625],"autouv":0,"color":6,"rotation":[0,0,-45],"origin":[8.21774,13.10287,8],"faces":{"north":{"uv":[8,12,9,13],"texture":0},"east":{"uv":[12,8,13,9],"texture":0},"south":{"uv":[9,12,10,13],"texture":0},"west":{"uv":[12,9,13,10],"texture":0},"up":{"uv":[11,13,10,12],"texture":0},"down":{"uv":[13,10,12,11],"texture":0}},"type":"cube","uuid":"2d11dba5-4df5-c192-da2a-43cd577871b1"},{"name":"cube","box_uv":false,"rescale":false,"locked":false,"from":[8.44405,13.58161,7.9375],"to":[8.50655,14.01161,8.0625],"autouv":0,"color":2,"rotation":[0,0,-22.5],"origin":[8.21774,13.10287,8],"faces":{"north":{"uv":[11,12,12,13],"texture":0},"east":{"uv":[12,11,13,12],"texture":0},"south":{"uv":[12,12,13,13],"texture":0},"west":{"uv":[0,13,1,14],"texture":0},"up":{"uv":[14,1,13,0],"texture":0},"down":{"uv":[2,13,1,14],"texture":0}},"type":"cube","uuid":"9c163ea9-77b9-308a-8035-9eeee863dc38"}],"outliner":["a864ca85-44b7-9cfe-ef6c-6d647bb91282","231bc5a3-a122-a4e5-887f-8d4a7cb7201a","e4c09f27-70cc-0168-f8d2-eab2c1081f56","e91142ae-41df-6615-7c0d-8e99300d6550","7630cc39-eb72-f994-136b-56b03ed9edc2","b52ee4af-ee8d-9847-c1e3-06871fa65a4d","2d9ba3e2-43c1-5e2e-75de-34d8521e6cd3","8a503cc6-486d-1a06-3c69-5545dede745f","042a8a4f-b6de-1ee2-b794-2988317f4242","40f168d7-cf8b-56c9-a347-aeed2809e993","a22496f1-5b13-7a08-3b0d-7a8c97967ac5","5ac9d399-6935-789b-fa7e-54edb0e959b0","5381a28e-81e2-3c59-b68f-d3d6d81a04e8","854259a9-b15b-5738-9b87-01221d335d33","ad46e00c-8195-e5e5-0493-2b766ea1e697","819b1733-73c1-a9ea-39a8-72a1a678fd1f","e66268e4-8eb0-7d3c-df69-170e6cccb1a2","bf32bae4-ec45-91a4-a9af-6c8c45bf8cda","a502622d-dcba-3098-8c88-21f01a443660","ba7d3155-e7a8-cff3-f16e-ddb06fd0b473","b563642b-2fbb-094e-e916-d631c21caac7","a841a0b3-3a2a-05f0-0df9-5b26b7a7a676","9695783a-1824-cd5f-27d6-5f30ecc46342","7c8f5676-17e1-3c48-cdc0-b30b4d0af26c","52b1323f-38a8-efc2-50ba-bdeeec8aa5a5","c17ff2eb-cb60-99e3-2a4a-f90c1658d1e9","3f4ec980-d985-1d7f-0b17-718ec4674d89","1b43b70d-6465-36e7-6e6c-97a16c8ffd9a","e48692b4-73ac-772f-6fbc-14403b860927","0468edfb-bfb0-d4b6-c6ad-71d941011006","2089790d-555f-ab01-7eb3-9cca17cba469","510a25f1-b5ec-6971-75bf-46ceda948017","36d50681-0bec-b8ca-1222-48ba44e47a53","9a0779d4-3ec6-716d-ed16-dc240a287d0e","05fbd1e0-186a-6e2b-4315-0a51ed8942e9","691b31d4-fe0c-9ab4-500f-f56626b3f56b","51200f80-0aa0-a41a-a4d4-a0a964eb4806","eac97b3a-783b-2c85-4667-bc22dff7b9c5","bbf50a4c-8539-6074-acfe-8bda85db77c2","f659af16-a35f-f5db-e54d-291c9da72f63","daed23ae-5cfd-c6d3-a187-560fbfe3d012","9db5a3f0-d58c-c59c-5d0c-c20424b00295","8a676414-fc1d-281d-e6a4-7b992338f4ef","e52c551a-acc3-67a1-2281-c3b8f714305c","144d831a-cc2b-1e95-7569-ac527d5bf504","2d4ad98d-328c-83f8-7e98-7fbb455db844","3449a507-a5c0-7c7f-8291-6e4775aca6e1","9daa9b5a-f2b5-39fd-c0e1-43918792d38c","815b9ee4-8428-f675-1f11-76b25cd1c8c3","00e860e0-5444-e067-6350-36008d42bec0","0c4870b8-2e3e-9698-9de4-89720bdc1d69","8ba03b98-4d85-aa8d-b06e-b5d428764e1f","5acb53ed-902c-e5aa-36b7-31799ab7dc9e","39201e71-60e4-93b9-2ff0-f8e6ef48689c","e86ea45d-658f-d311-3203-e5d6a5f5096e","7d1b94fc-151b-4c23-a905-0b3ddb3053d9","a61e02e5-83e3-cd1b-d369-2fba8d227590","2f5e8533-3c9f-30b6-e3d6-c539a344b090","39f6fa0b-a372-4064-00bb-37a345ac46d1","22f2ef78-dd57-8e5a-ed8b-5cb24bd9baf0","6b954294-b42d-ae72-5a2c-764024cb9cae","022e3e34-5d02-8519-e491-d284eba4d546","9fb505aa-446f-2c0f-2e73-51c3aada68cf","dd49461e-20b4-30ec-76bd-48276c1a4716","c8e006f2-c4cf-4e61-a51e-d8105ae02325","7ad9f37c-eb0e-0c3e-8bb3-2a37ebfe1c56","4bcb0dc7-0f4b-a9ed-1a95-a1936d92a898","64df2072-8da3-4afc-dc46-4b3a3a6be8af","9f147a04-2476-22cc-d990-3fd5b92ac48b","ac750d29-7c36-3db2-3a3d-bf3ff38eb22d","39f5a99d-87b9-0e0b-767a-2cd9ea05609a","1d7ce41b-0b12-f1c8-6f23-945df248fd7d","db2c366a-3ecd-deb0-6a20-75d53f99c4b4","0fa9f2d7-6ff6-2788-205e-660b5c3de371","b819cd3c-5674-5dc7-d0ab-25d6d85a390b","b48b398f-a330-eed7-41e5-17698a7ab404","ed942121-dfe8-78a1-0960-2c7d8b3385d2","213b3f5e-7565-1eba-5a06-c9f42c749f9a","d2253bf4-7249-9af6-a180-7719e598b1ac","6a92c34a-3f0b-4f0a-5496-4a556313b0b0","b1e43937-583c-e0a5-5a7f-2cafeab4de6f","2537bd5c-98e5-4db1-f2c1-ec9c2559cd51","a888f7a0-598a-6d11-a4a8-d42f1991bb47","0a260045-cb63-92f5-5c81-472a55c9168b","5a79b2f9-07ab-9bac-317b-67c12e52ad5e","e102ec36-721c-c3b1-fd34-23b7494b0062","dabdd100-5370-943d-099c-a3df7058ac2a","61885867-b944-8d67-f50f-d82e1dd7b506","aff7e209-31ea-6689-2897-06c6f567cc2e","cedcb52e-64ff-dc17-6dd5-32521f3d6901","1ad4c08b-3310-7f44-7c5b-259a71d23e28","ecfef2bd-9f88-61c1-3d66-d3efc4557404","fa35af67-1dc1-3b3c-6ff1-bafd2c5df2c7","1b27fedf-e65d-4fcd-2e9e-ee241fafe4b6","4ce1b343-f9ab-6a7b-8add-2107f556485b","ecf349cb-3d72-f923-6bf8-e2831b044149","bc155c16-6ea8-0b02-59e9-27cfb7438988","caac0cee-8d79-6c8f-4d16-4f52bcc12c31","78923bc3-2562-5f1f-d647-4d322e4a74c6","458443ba-54c5-3e05-a433-234cb412e295","9043c335-de67-865a-0809-f8ff08b737bf","2fd4f8b9-94d5-9f8c-404a-8e9f678bf6fe","69e036b6-90e9-5701-de2f-46902368aeb1","585350b3-fa69-acd6-4b9f-7832cc18e425","f1178140-5061-459d-91ca-a773590ac5ba","77c88ade-4355-a744-bcd0-9e1eb1d4a876","bfe53505-c1ff-d065-d0c6-fd9d1af426df","a5883587-1f30-fb69-3bec-511a5939d219","2d11dba5-4df5-c192-da2a-43cd577871b1","9c163ea9-77b9-308a-8035-9eeee863dc38"],"textures":[{"path":"C:\\Users\\hawkt\\Documents\\GitHub\\cosmere\\src\\surgebinding\\resources\\assets\\surgebinding\\textures\\item\\models\\shardblade_model\\elsecaller_honorblade.png","name":"elsecaller_honorblade.png","folder":"item/models/shardblade_model","namespace":"surgebinding","id":"1","particle":false,"render_mode":"default","render_sides":"auto","frame_time":1,"frame_order_type":"loop","frame_order":"","frame_interpolate":false,"visible":true,"mode":"bitmap","saved":true,"uuid":"b872bc41-8dd1-5483-8d9e-b03c0ce45076","relative_path":"../../src/surgebinding/resources/assets/surgebinding/textures/item/models/shardblade_model/elsecaller_honorblade.png","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAANBJREFUWEdjXLT7xH8GJLBn0y4wz8XPDVmYbPa1Jy/BerVkxBniXC0Y0Q1iHJQOoJbvQb4lKwRGHTCgIUB2csehkeQ0QE0HIFsOyt6LJtcRzoajDqBmCMDKgWfnLmINfpA8RklICwfgKoaHvwNAKV/KSB9nRUTzEBh1AKFSkOZRMOqA0RAYHiEA8wWsaQ2rK2DNdxAfVNrhA3jrgor5G1H6BdSujPD1CcDlACEHgFyP7Gty24vYOiUECyLkYMbWnKJGaGG00ahhKClmjDpgNAQAL+/bIYUm7asAAAAASUVORK5CYII="}],"display":{"thirdperson_righthand":{"rotation":[0,-90,0],"translation":[0,12.25,1],"scale":[3.1,3.1,3.1]},"thirdperson_lefthand":{"rotation":[0,90,0],"translation":[0,12.25,1],"scale":[3.1,3.1,3.1]},"firstperson_righthand":{"rotation":[0,-90,0],"translation":[0,7.25,0],"scale":[2.15,2.15,2.15]},"firstperson_lefthand":{"rotation":[0,90,0],"translation":[0,7.25,0],"scale":[2.15,2.15,2.15]},"ground":{"translation":[0,2.25,0]},"gui":{"rotation":[0,180,45],"translation":[0.5,0.5,0]},"fixed":{"rotation":[0,0,45],"translation":[-0.5,0.5,0]}}} \ No newline at end of file diff --git a/blockbench/surgebinding/shardblades/honorblades/lightweaver_honorblade.bbmodel b/blockbench/surgebinding/shardblades/honorblades/lightweaver_honorblade.bbmodel new file mode 100644 index 000000000..b9a70447e --- /dev/null +++ b/blockbench/surgebinding/shardblades/honorblades/lightweaver_honorblade.bbmodel @@ -0,0 +1 @@ +{"meta":{"format_version":"4.0","model_format":"java_block","box_uv":false},"name":"lightweaver_honorblade","parent":"","ambientocclusion":true,"front_gui_light":false,"visible_box":[1,1,0],"variable_placeholders":"","variable_placeholder_buttons":[],"resolution":{"width":32,"height":32},"elements":[{"name":"cube","rescale":false,"locked":false,"from":[7.667962216411603,10.664659219552538,7.9375],"to":[8.417962216411603,11.914659219552538,8.0625],"autouv":0,"color":2,"rotation":[0,0,-22.5],"origin":[8.292962216411603,9.914659219552538,7.9375],"faces":{"north":{"uv":[3,11,4,10],"texture":0},"east":{"uv":[4,11,5,10],"texture":0},"south":{"uv":[10,5,11,4],"texture":0},"west":{"uv":[5,11,6,10],"texture":0},"up":{"uv":[11,7,10,6],"texture":0},"down":{"uv":[11,5,10,6],"texture":0}},"type":"cube","uuid":"2d917e12-2ed8-828e-f5e7-a890c8aaa773"},{"name":"cube","rescale":false,"locked":false,"from":[9.775336687091059,4.950110972635214,7.9375],"to":[10.025336687091059,6.200110972635214,8.0625],"autouv":0,"color":2,"rotation":[0,0,22.5],"origin":[9.900336687091059,3.2001109726352137,7.9375],"faces":{"north":{"uv":[10,8,11,7],"texture":0},"east":{"uv":[8,11,9,10],"texture":0},"south":{"uv":[10,9,11,8],"texture":0},"west":{"uv":[9,11,10,10],"texture":0},"up":{"uv":[11,11,10,10],"texture":0},"down":{"uv":[11,9,10,10],"texture":0}},"type":"cube","uuid":"ceb22edb-0537-0f0d-64ac-399f83a112b8"},{"name":"cube","rescale":false,"locked":false,"from":[7.754118016066787,6.847793673634728,7.9375],"to":[8.504118016066787,13.597793673634728,8.0625],"autouv":0,"color":2,"origin":[-22.495881983933213,25.097793673634726,-22.1875],"faces":{"north":{"uv":[0,7,1,0],"texture":0},"east":{"uv":[1,7,2,0],"texture":0},"south":{"uv":[2,7,3,0],"texture":0},"west":{"uv":[3,7,4,0],"texture":0},"up":{"uv":[12,2,11,1],"texture":0},"down":{"uv":[12,0,11,1],"texture":0}},"type":"cube","uuid":"a0aa1214-8b73-c5b5-9c66-87153e7619ad"},{"name":"cube","rescale":false,"locked":false,"from":[14.84067520460513,10.95484322027709,7.9375],"to":[15.59067520460513,12.95484322027709,8.0625],"autouv":0,"color":2,"rotation":[0,0,22.5],"origin":[9.21567520460513,-4.545156779722923,7.9375],"faces":{"north":{"uv":[4,10,5,8],"texture":0},"east":{"uv":[5,10,6,8],"texture":0},"south":{"uv":[8,8,9,6],"texture":0},"west":{"uv":[8,10,9,8],"texture":0},"up":{"uv":[4,12,3,11],"texture":0},"down":{"uv":[12,2,11,3],"texture":0}},"type":"cube","uuid":"3bbed0ce-d529-4045-5489-4025aa0da45d"},{"name":"cube","rescale":false,"locked":false,"from":[8.423814022705695,11.714582855529477,7.9375],"to":[9.173814022705695,12.214582855529477,8.0625],"autouv":0,"color":2,"origin":[9.048814022705695,10.464582855529477,7.9375],"faces":{"north":{"uv":[11,4,12,3],"texture":0},"east":{"uv":[4,12,5,11],"texture":0},"south":{"uv":[11,5,12,4],"texture":0},"west":{"uv":[5,12,6,11],"texture":0},"up":{"uv":[7,12,6,11],"texture":0},"down":{"uv":[12,5,11,6],"texture":0}},"type":"cube","uuid":"30f5aab5-097d-ff01-9d4f-ad9f0613efd8"},{"name":"cube","rescale":false,"locked":false,"from":[8.425630493181195,4.996017150037373,7.9375],"to":[8.675630493181195,5.246017150037373,8.0625],"autouv":0,"color":2,"rotation":[0,0,-45],"origin":[8.550630493181195,4.246017150037373,7.9375],"faces":{"north":{"uv":[11,7,12,6],"texture":0},"east":{"uv":[7,12,8,11],"texture":0},"south":{"uv":[11,8,12,7],"texture":0},"west":{"uv":[8,12,9,11],"texture":0},"up":{"uv":[10,12,9,11],"texture":0},"down":{"uv":[12,8,11,9],"texture":0}},"type":"cube","uuid":"e1f6888e-eaf8-9c11-90f1-ce178b7e9caf"},{"name":"cube","rescale":false,"locked":false,"from":[7.816843200028824,3.8452283600789645,7.9375],"to":[8.316843200028824,4.3452283600789645,8.0625],"autouv":0,"color":2,"rotation":[0,0,-22.5],"origin":[8.234921099856415,3.878661133037875,7.9375],"faces":{"north":{"uv":[11,10,12,9],"texture":0},"east":{"uv":[10,12,11,11],"texture":0},"south":{"uv":[11,11,12,10],"texture":0},"west":{"uv":[11,12,12,11],"texture":0},"up":{"uv":[13,1,12,0],"texture":0},"down":{"uv":[1,12,0,13],"texture":0}},"type":"cube","uuid":"e0de9b37-7a19-95a2-a0b0-fb643a5e0395"},{"name":"cube","rescale":false,"locked":false,"from":[7.816843200028821,3.8495939059967856,7.9375],"to":[8.31684320002882,5.412093905996782,8.0625],"autouv":0,"color":2,"origin":[8.234921099856415,3.878661133037875,7.9375],"faces":{"north":{"uv":[9,2,10,0],"texture":0},"east":{"uv":[9,4,10,2],"texture":0},"south":{"uv":[9,6,10,4],"texture":0},"west":{"uv":[6,11,7,9],"texture":0},"up":{"uv":[13,2,12,1],"texture":0},"down":{"uv":[2,12,1,13],"texture":0}},"type":"cube","uuid":"6b8dfba5-e5f2-0f5c-a5e9-722c498c3144"},{"name":"cube","rescale":false,"locked":false,"from":[8.273349954724189,4.337422012279289,7.9375],"to":[9.023349954724186,5.337422012279289,8.0625],"autouv":0,"color":2,"rotation":[0,0,45],"origin":[8.523349954724189,4.462422012279289,7.9375],"faces":{"north":{"uv":[2,13,3,12],"texture":0},"east":{"uv":[12,3,13,2],"texture":0},"south":{"uv":[3,13,4,12],"texture":0},"west":{"uv":[12,4,13,3],"texture":0},"up":{"uv":[13,5,12,4],"texture":0},"down":{"uv":[5,12,4,13],"texture":0}},"type":"cube","uuid":"1a3417d9-08a8-3833-469c-517c245542f3"},{"name":"cube","rescale":false,"locked":false,"from":[8.640543614545965,4.582772971751604,7.9375],"to":[9.140543614545965,7.082772971751604,8.0625],"autouv":0,"color":2,"rotation":[0,0,22.5],"origin":[8.890543614545972,4.707772971751604,7.9375],"faces":{"north":{"uv":[6,3,7,0],"texture":0},"east":{"uv":[6,6,7,3],"texture":0},"south":{"uv":[6,9,7,6],"texture":0},"west":{"uv":[0,10,1,7],"texture":0},"up":{"uv":[13,6,12,5],"texture":0},"down":{"uv":[6,12,5,13],"texture":0}},"type":"cube","uuid":"7c2fcb56-4328-ca84-c403-dab558a2a598"},{"name":"cube","rescale":false,"locked":false,"from":[7.7062036730490675,12.367632746360956,7.9375],"to":[7.9562036730490675,13.367632746360956,8.0625],"autouv":0,"color":2,"origin":[-22.04379632695093,22.617632746360947,-22.1875],"faces":{"north":{"uv":[6,13,7,12],"texture":0},"east":{"uv":[12,7,13,6],"texture":0},"south":{"uv":[7,13,8,12],"texture":0},"west":{"uv":[12,8,13,7],"texture":0},"up":{"uv":[13,9,12,8],"texture":0},"down":{"uv":[9,12,8,13],"texture":0}},"type":"cube","uuid":"c70f5532-42bd-0952-0d6e-65698ea52919"},{"name":"cube","rescale":false,"locked":false,"from":[14.046944387459792,12.240576543473663,7.9375],"to":[14.296944387459792,14.428076543473663,8.0625],"autouv":0,"color":2,"rotation":[0,0,22.5],"origin":[8.671944387459796,-3.0094234565263562,7.9375],"faces":{"north":{"uv":[9,8,10,6],"texture":0},"east":{"uv":[7,11,8,9],"texture":0},"south":{"uv":[9,10,10,8],"texture":0},"west":{"uv":[0,12,1,10],"texture":0},"up":{"uv":[13,10,12,9],"texture":0},"down":{"uv":[10,12,9,13],"texture":0}},"type":"cube","uuid":"1d76ce52-f0a3-272f-45b3-30e29ba30a44"},{"name":"cube","rescale":false,"locked":false,"from":[7.222786986195693,13.571225397035223,7.9375],"to":[7.472786986195693,15.321225397035223,8.0625],"autouv":0,"color":2,"rotation":[0,0,45],"origin":[7.347786986195693,14.946225397035226,7.9375],"faces":{"north":{"uv":[10,2,11,0],"texture":0},"east":{"uv":[1,12,2,10],"texture":0},"south":{"uv":[2,12,3,10],"texture":0},"west":{"uv":[10,4,11,2],"texture":0},"up":{"uv":[13,11,12,10],"texture":0},"down":{"uv":[11,12,10,13],"texture":0}},"type":"cube","uuid":"c0753cd8-dc7c-d757-eb4e-ecb1171c17eb"},{"name":"cube","rescale":false,"locked":false,"from":[9.26363307450288,5.8956291026803616,7.9375],"to":[9.76363307450288,7.1456291026803616,8.0625],"autouv":0,"color":2,"rotation":[0,0,-22.5],"origin":[9.13863307450288,10.895629102680362,7.9375],"faces":{"north":{"uv":[11,13,12,12],"texture":0},"east":{"uv":[12,12,13,11],"texture":0},"south":{"uv":[12,13,13,12],"texture":0},"west":{"uv":[0,14,1,13],"texture":0},"up":{"uv":[2,14,1,13],"texture":0},"down":{"uv":[14,0,13,1],"texture":0}},"type":"cube","uuid":"11434974-9fe7-62bc-36d9-5e275ce642a9"},{"name":"cube","rescale":false,"locked":false,"from":[7.340700854241348,5.97839601107829,7.9375],"to":[7.590700854241348,6.22839601107829,8.0625],"autouv":0,"color":2,"origin":[7.465700854241344,5.22839601107829,7.9375],"faces":{"north":{"uv":[13,2,14,1],"texture":0},"east":{"uv":[2,14,3,13],"texture":0},"south":{"uv":[13,3,14,2],"texture":0},"west":{"uv":[3,14,4,13],"texture":0},"up":{"uv":[5,14,4,13],"texture":0},"down":{"uv":[14,3,13,4],"texture":0}},"type":"cube","uuid":"7bcf341d-e5a0-c6ae-6e52-d4f96b4cfd38"},{"name":"cube","rescale":false,"locked":false,"from":[7.357122212585995,5.868040674126307,7.9375],"to":[7.557122212585995,6.568040674126307,8.0625],"autouv":0,"color":2,"rotation":[0,0,-45],"origin":[7.482122212585995,5.943040674126307,7.9375],"faces":{"north":{"uv":[13,5,14,4],"texture":0},"east":{"uv":[5,14,6,13],"texture":0},"south":{"uv":[13,6,14,5],"texture":0},"west":{"uv":[6,14,7,13],"texture":0},"up":{"uv":[8,14,7,13],"texture":0},"down":{"uv":[14,6,13,7],"texture":0}},"type":"cube","uuid":"4dc4ea90-e8be-1fc6-14dd-140a1ad63ba5"},{"name":"cube","rescale":false,"locked":false,"from":[7.57766318175171,6.009052309512862,7.9375],"to":[7.777663181751709,6.209052309512861,8.0625],"autouv":0,"color":2,"rotation":[0,0,22.5],"origin":[7.677663181751711,6.10905230951286,7.9375],"faces":{"north":{"uv":[13,8,14,7],"texture":0},"east":{"uv":[8,14,9,13],"texture":0},"south":{"uv":[13,9,14,8],"texture":0},"west":{"uv":[9,14,10,13],"texture":0},"up":{"uv":[11,14,10,13],"texture":0},"down":{"uv":[14,9,13,10],"texture":0}},"type":"cube","uuid":"7707a3c7-dac6-463c-fe48-082a34f5ca18"},{"name":"cube","rescale":false,"locked":false,"from":[7.57766318175171,7.259052309512862,7.9375],"to":[7.777663181751709,7.459052309512861,8.0625],"autouv":0,"color":2,"rotation":[0,0,22.5],"origin":[7.677663181751711,7.35905230951286,7.9375],"faces":{"north":{"uv":[13,11,14,10],"texture":0},"east":{"uv":[11,14,12,13],"texture":0},"south":{"uv":[13,12,14,11],"texture":0},"west":{"uv":[12,14,13,13],"texture":0},"up":{"uv":[14,14,13,13],"texture":0},"down":{"uv":[14,12,13,13],"texture":0}},"type":"cube","uuid":"e9d7f0a5-73e9-65ae-4a07-2075402de615"},{"name":"cube","rescale":false,"locked":false,"from":[7.357122212585995,7.118040674126307,7.9375],"to":[7.557122212585995,7.818040674126307,8.0625],"autouv":0,"color":2,"rotation":[0,0,-45],"origin":[7.482122212585995,7.193040674126307,7.9375],"faces":{"north":{"uv":[0,15,1,14],"texture":0},"east":{"uv":[14,1,15,0],"texture":0},"south":{"uv":[1,15,2,14],"texture":0},"west":{"uv":[14,2,15,1],"texture":0},"up":{"uv":[15,3,14,2],"texture":0},"down":{"uv":[3,14,2,15],"texture":0}},"type":"cube","uuid":"801b4034-90b4-3089-4082-d791ca1d40e2"},{"name":"cube","rescale":false,"locked":false,"from":[7.340700854241348,7.22839601107829,7.9375],"to":[7.590700854241348,7.47839601107829,8.0625],"autouv":0,"color":2,"origin":[7.465700854241344,6.47839601107829,7.9375],"faces":{"north":{"uv":[3,15,4,14],"texture":0},"east":{"uv":[14,4,15,3],"texture":0},"south":{"uv":[4,15,5,14],"texture":0},"west":{"uv":[14,5,15,4],"texture":0},"up":{"uv":[15,6,14,5],"texture":0},"down":{"uv":[6,14,5,15],"texture":0}},"type":"cube","uuid":"ac8f88f1-4724-f94b-ee5c-31f353d7840b"},{"name":"cube","rescale":false,"locked":false,"from":[9.26363307450288,7.1456291026803616,7.9375],"to":[9.76363307450288,8.395629102680362,8.0625],"autouv":0,"color":2,"rotation":[0,0,-22.5],"origin":[9.13863307450288,12.145629102680362,7.9375],"faces":{"north":{"uv":[6,15,7,14],"texture":0},"east":{"uv":[14,7,15,6],"texture":0},"south":{"uv":[7,15,8,14],"texture":0},"west":{"uv":[14,8,15,7],"texture":0},"up":{"uv":[15,9,14,8],"texture":0},"down":{"uv":[9,14,8,15],"texture":0}},"type":"cube","uuid":"4940ac95-23f9-2c0c-6300-9408b8c32507"},{"name":"cube","rescale":false,"locked":false,"from":[9.072291358320339,10.183689336424715,7.9375],"to":[9.572291358320339,10.933689336424715,8.0625],"autouv":0,"color":2,"rotation":[0,0,-22.5],"origin":[8.947291358320339,14.683689336424715,7.9375],"faces":{"north":{"uv":[9,15,10,14],"texture":0},"east":{"uv":[14,10,15,9],"texture":0},"south":{"uv":[10,15,11,14],"texture":0},"west":{"uv":[14,11,15,10],"texture":0},"up":{"uv":[15,12,14,11],"texture":0},"down":{"uv":[12,14,11,15],"texture":0}},"type":"cube","uuid":"c8311606-5242-9ecd-2dbf-0106f0a345ff"},{"name":"cube","rescale":false,"locked":false,"from":[7.340700854241348,9.97839601107829,7.9375],"to":[7.590700854241348,10.47839601107829,8.0625],"autouv":0,"color":2,"origin":[7.465700854241344,9.22839601107829,7.9375],"faces":{"north":{"uv":[12,15,13,14],"texture":0},"east":{"uv":[14,13,15,12],"texture":0},"south":{"uv":[13,15,14,14],"texture":0},"west":{"uv":[14,14,15,13],"texture":0},"up":{"uv":[1,16,0,15],"texture":0},"down":{"uv":[15,14,14,15],"texture":0}},"type":"cube","uuid":"67e75152-59fe-afad-129c-773614bf9432"},{"name":"cube","rescale":false,"locked":false,"from":[7.357122212585995,9.868040674126307,7.9375],"to":[7.557122212585995,10.318040674126307,8.0625],"autouv":0,"color":2,"rotation":[0,0,-45],"origin":[7.482122212585995,9.943040674126307,7.9375],"faces":{"north":{"uv":[15,1,16,0],"texture":0},"east":{"uv":[1,16,2,15],"texture":0},"south":{"uv":[15,2,16,1],"texture":0},"west":{"uv":[2,16,3,15],"texture":0},"up":{"uv":[4,16,3,15],"texture":0},"down":{"uv":[16,2,15,3],"texture":0}},"type":"cube","uuid":"ed2267c5-75a8-c6f1-2335-35cd5b4ce65f"},{"name":"cube","rescale":false,"locked":false,"from":[7.57766318175171,10.009052309512862,7.9375],"to":[8.02766318175171,10.459052309512861,8.0625],"autouv":0,"color":2,"rotation":[0,0,22.5],"origin":[7.677663181751711,10.10905230951286,7.9375],"faces":{"north":{"uv":[15,4,16,3],"texture":0},"east":{"uv":[4,16,5,15],"texture":0},"south":{"uv":[15,5,16,4],"texture":0},"west":{"uv":[5,16,6,15],"texture":0},"up":{"uv":[7,16,6,15],"texture":0},"down":{"uv":[16,5,15,6],"texture":0}},"type":"cube","uuid":"4f36549d-0081-91d0-87ca-06a7dbaf6bc4"},{"name":"cube","rescale":false,"locked":false,"from":[7.57766318175171,8.759052309512862,7.9375],"to":[7.777663181751709,8.959052309512861,8.0625],"autouv":0,"color":2,"rotation":[0,0,22.5],"origin":[7.677663181751711,8.85905230951286,7.9375],"faces":{"north":{"uv":[15,7,16,6],"texture":0},"east":{"uv":[7,16,8,15],"texture":0},"south":{"uv":[15,8,16,7],"texture":0},"west":{"uv":[8,16,9,15],"texture":0},"up":{"uv":[10,16,9,15],"texture":0},"down":{"uv":[16,8,15,9],"texture":0}},"type":"cube","uuid":"c053d207-39fa-2eb1-0547-7ea1dd75dc30"},{"name":"cube","rescale":false,"locked":false,"from":[7.357122212585995,8.618040674126307,7.9375],"to":[7.557122212585995,9.318040674126307,8.0625],"autouv":0,"color":2,"rotation":[0,0,-45],"origin":[7.482122212585995,8.693040674126307,7.9375],"faces":{"north":{"uv":[15,10,16,9],"texture":0},"east":{"uv":[10,16,11,15],"texture":0},"south":{"uv":[15,11,16,10],"texture":0},"west":{"uv":[11,16,12,15],"texture":0},"up":{"uv":[13,16,12,15],"texture":0},"down":{"uv":[16,11,15,12],"texture":0}},"type":"cube","uuid":"70d85f1c-61d0-099a-f099-f4639a56347a"},{"name":"cube","rescale":false,"locked":false,"from":[7.340700854241348,8.72839601107829,7.9375],"to":[7.590700854241348,8.97839601107829,8.0625],"autouv":0,"color":2,"origin":[7.465700854241344,7.97839601107829,7.9375],"faces":{"north":{"uv":[15,13,16,12],"texture":0},"east":{"uv":[13,16,14,15],"texture":0},"south":{"uv":[15,14,16,13],"texture":0},"west":{"uv":[14,16,15,15],"texture":0},"up":{"uv":[16,16,15,15],"texture":0},"down":{"uv":[16,14,15,15],"texture":0}},"type":"cube","uuid":"28712949-8963-7c81-fd67-758adc8bf9f0"},{"name":"cube","rescale":false,"locked":false,"from":[9.26363307450288,8.645629102680362,7.9375],"to":[9.76363307450288,9.895629102680362,8.0625],"autouv":0,"color":2,"rotation":[0,0,-22.5],"origin":[9.13863307450288,13.645629102680362,7.9375],"faces":{"north":{"uv":[0,17,1,16],"texture":0},"east":{"uv":[16,1,17,0],"texture":0},"south":{"uv":[1,17,2,16],"texture":0},"west":{"uv":[16,2,17,1],"texture":0},"up":{"uv":[17,3,16,2],"texture":0},"down":{"uv":[3,16,2,17],"texture":0}},"type":"cube","uuid":"713e6a73-0fe6-08dc-2e1c-5bc29c2d8a5b"},{"name":"cube","rescale":false,"locked":false,"from":[8.596306844909176,10.84248357431971,7.9375],"to":[8.846306844909176,12.09248357431971,8.0625],"autouv":0,"color":2,"rotation":[0,0,-22.5],"origin":[9.471306844909169,14.34248357431971,7.9375],"faces":{"north":{"uv":[3,17,4,16],"texture":0},"east":{"uv":[16,4,17,3],"texture":0},"south":{"uv":[4,17,5,16],"texture":0},"west":{"uv":[16,5,17,4],"texture":0},"up":{"uv":[17,6,16,5],"texture":0},"down":{"uv":[6,16,5,17],"texture":0}},"type":"cube","uuid":"b0bc2feb-2294-599b-2403-19e5fa0216bd"},{"name":"cube","rescale":false,"locked":false,"from":[7.554490123811803,11.348082355758388,7.9375],"to":[7.804490123811803,11.848082355758388,8.0625],"autouv":0,"color":2,"origin":[7.679490123811799,11.473082355758388,7.9375],"faces":{"north":{"uv":[6,17,7,16],"texture":0},"east":{"uv":[16,7,17,6],"texture":0},"south":{"uv":[7,17,8,16],"texture":0},"west":{"uv":[16,8,17,7],"texture":0},"up":{"uv":[17,9,16,8],"texture":0},"down":{"uv":[9,16,8,17],"texture":0}},"type":"cube","uuid":"4f25f6d4-1876-eda3-929d-a6649ac1ee5c"},{"name":"cube","rescale":false,"locked":false,"from":[7.642878471460119,10.957917312813434,7.9375],"to":[8.142878471460119,11.207917312813434,8.0625],"autouv":0,"color":2,"rotation":[0,0,-45],"origin":[7.892878471460119,11.082917312813434,7.9375],"faces":{"north":{"uv":[9,17,10,16],"texture":0},"east":{"uv":[16,10,17,9],"texture":0},"south":{"uv":[10,17,11,16],"texture":0},"west":{"uv":[16,11,17,10],"texture":0},"up":{"uv":[17,12,16,11],"texture":0},"down":{"uv":[12,16,11,17],"texture":0}},"type":"cube","uuid":"386f308f-7aa0-d897-7c66-4f6e4b97d616"},{"name":"cube","rescale":false,"locked":false,"from":[9.342889408393436,4.780407853986533,7.9375],"to":[10.092889408393436,5.530407853986533,8.0625],"autouv":0,"color":2,"rotation":[0,0,-22.5],"origin":[9.217889408393436,9.530407853986533,7.9375],"faces":{"north":{"uv":[12,17,13,16],"texture":0},"east":{"uv":[16,13,17,12],"texture":0},"south":{"uv":[13,17,14,16],"texture":0},"west":{"uv":[16,14,17,13],"texture":0},"up":{"uv":[17,15,16,14],"texture":0},"down":{"uv":[15,16,14,17],"texture":0}},"type":"cube","uuid":"ffef2d04-5679-0098-2062-b0031ac37682"},{"name":"cube","rescale":false,"locked":false,"from":[7.265628046223171,4.240591254919012,7.9375],"to":[7.765628046223171,5.240591254919012,8.0625],"autouv":0,"color":2,"rotation":[0,0,-45],"origin":[7.515628046223171,4.740591254919012,7.9375],"faces":{"north":{"uv":[15,17,16,16],"texture":0},"east":{"uv":[16,16,17,15],"texture":0},"south":{"uv":[16,17,17,16],"texture":0},"west":{"uv":[0,18,1,17],"texture":0},"up":{"uv":[2,18,1,17],"texture":0},"down":{"uv":[18,0,17,1],"texture":0}},"type":"cube","uuid":"48901af9-304d-0ab3-af87-6f043b4dfafb"},{"name":"cube","rescale":false,"locked":false,"from":[6.985297960333259,4.313814559622374,7.9375],"to":[7.735297960333259,4.563814559622374,8.0625],"autouv":0,"color":2,"origin":[7.360297960333259,4.313814559622374,7.9375],"faces":{"north":{"uv":[17,2,18,1],"texture":0},"east":{"uv":[2,18,3,17],"texture":0},"south":{"uv":[17,3,18,2],"texture":0},"west":{"uv":[3,18,4,17],"texture":0},"up":{"uv":[5,18,4,17],"texture":0},"down":{"uv":[18,3,17,4],"texture":0}},"type":"cube","uuid":"005d5fe3-a319-069d-7444-a71e89abf62f"},{"name":"cube","rescale":false,"locked":false,"from":[7.004588214070626,4.160793214049372,7.9375],"to":[7.754588214070626,4.410793214049372,8.0625],"autouv":0,"color":2,"rotation":[0,0,-22.5],"origin":[7.379588214070626,4.285793214049372,7.9375],"faces":{"north":{"uv":[17,5,18,4],"texture":0},"east":{"uv":[5,18,6,17],"texture":0},"south":{"uv":[17,6,18,5],"texture":0},"west":{"uv":[6,18,7,17],"texture":0},"up":{"uv":[8,18,7,17],"texture":0},"down":{"uv":[18,6,17,7],"texture":0}},"type":"cube","uuid":"7cd1f07a-146e-5012-da92-756c297012d6"},{"name":"cube","rescale":false,"locked":false,"from":[7.678207609716722,4.026801985348557,7.9375],"to":[8.178207609716722,5.026801985348557,8.0625],"autouv":0,"color":2,"origin":[8.053207609716722,4.151801985348557,7.9375],"faces":{"north":{"uv":[17,8,18,7],"texture":0},"east":{"uv":[8,18,9,17],"texture":0},"south":{"uv":[17,9,18,8],"texture":0},"west":{"uv":[9,18,10,17],"texture":0},"up":{"uv":[11,18,10,17],"texture":0},"down":{"uv":[18,9,17,10],"texture":0}},"type":"cube","uuid":"491e63cc-31fa-5214-5b39-b02815feda72"},{"name":"cube","rescale":false,"locked":false,"from":[7.802640620496987,5.537054294895741,7.9375],"to":[8.302640620496987,6.287054294895741,8.0625],"autouv":0,"color":2,"origin":[8.052640620496987,5.662054294895748,7.9375],"faces":{"north":{"uv":[17,11,18,10],"texture":0},"east":{"uv":[11,18,12,17],"texture":0},"south":{"uv":[17,12,18,11],"texture":0},"west":{"uv":[12,18,13,17],"texture":0},"up":{"uv":[14,18,13,17],"texture":0},"down":{"uv":[18,12,17,13],"texture":0}},"type":"cube","uuid":"a9eac623-ed11-6666-6f37-f0562c420aa5"},{"name":"cube","rescale":false,"locked":false,"from":[7.569248727129509,4.073814559622376,7.9375],"to":[7.819248727129509,4.313814559622374,8.0625],"autouv":0,"color":2,"origin":[7.360297960333259,4.313814559622374,7.9375],"faces":{"north":{"uv":[17,14,18,13],"texture":0},"east":{"uv":[14,18,15,17],"texture":0},"south":{"uv":[17,15,18,14],"texture":0},"west":{"uv":[15,18,16,17],"texture":0},"up":{"uv":[17,18,16,17],"texture":0},"down":{"uv":[18,15,17,16],"texture":0}},"type":"cube","uuid":"934c80ae-7ea7-bf72-87f5-60447f538475"},{"name":"cube","rescale":false,"locked":false,"from":[14.84067520460513,10.95484322027709,7.9375],"to":[15.09067520460513,13.95484322027709,8.0625],"autouv":0,"color":2,"rotation":[0,0,22.5],"origin":[9.21567520460513,-4.545156779722923,7.9375],"faces":{"north":{"uv":[7,3,8,0],"texture":0},"east":{"uv":[1,10,2,7],"texture":0},"south":{"uv":[2,10,3,7],"texture":0},"west":{"uv":[3,10,4,7],"texture":0},"up":{"uv":[18,18,17,17],"texture":0},"down":{"uv":[18,16,17,17],"texture":0}},"type":"cube","uuid":"4be47d3c-731b-a22b-d74d-aa8723129160"},{"name":"cube","rescale":false,"locked":false,"from":[15.09067520460513,12.744669206613127,7.9375],"to":[15.34067520460513,13.494669206613127,8.0625],"autouv":0,"color":2,"rotation":[0,0,22.5],"origin":[9.21567520460513,-4.545156779722923,7.9375],"faces":{"north":{"uv":[0,19,1,18],"texture":0},"east":{"uv":[18,1,19,0],"texture":0},"south":{"uv":[1,19,2,18],"texture":0},"west":{"uv":[18,2,19,1],"texture":0},"up":{"uv":[19,3,18,2],"texture":0},"down":{"uv":[3,18,2,19],"texture":0}},"type":"cube","uuid":"2c95ceb1-1385-4856-37a6-540feafe8388"},{"name":"cube","rescale":false,"locked":false,"from":[8.117771331559698,5.769584999214713,7.9375],"to":[8.867771331559698,7.019584999214713,8.0625],"autouv":0,"color":2,"origin":[-22.1322286684403,24.269584999214707,-22.1875],"faces":{"north":{"uv":[3,19,4,18],"texture":0},"east":{"uv":[18,4,19,3],"texture":0},"south":{"uv":[4,19,5,18],"texture":0},"west":{"uv":[18,5,19,4],"texture":0},"up":{"uv":[19,6,18,5],"texture":0},"down":{"uv":[6,18,5,19],"texture":0}},"type":"cube","uuid":"d0d5a2d3-3bde-b533-7673-40f5ae913b09"},{"name":"cube","rescale":false,"locked":false,"from":[8.117771331559698,10.269584999214713,7.9375],"to":[8.867771331559698,11.519584999214713,8.0625],"autouv":0,"color":2,"origin":[-22.1322286684403,24.269584999214707,-22.1875],"faces":{"north":{"uv":[6,19,7,18],"texture":0},"east":{"uv":[18,7,19,6],"texture":0},"south":{"uv":[7,19,8,18],"texture":0},"west":{"uv":[18,8,19,7],"texture":0},"up":{"uv":[19,9,18,8],"texture":0},"down":{"uv":[9,18,8,19],"texture":0}},"type":"cube","uuid":"42f8bbf4-29b3-267c-91cb-f19182b84eb6"},{"name":"cube","rescale":false,"locked":false,"from":[7.9761002264986764,10.543686511785404,7.9375],"to":[8.226100226498676,11.043686511785404,8.0625],"autouv":0,"color":2,"rotation":[0,0,-22.5],"origin":[6.60110022649868,9.043686511785404,7.9375],"faces":{"north":{"uv":[9,19,10,18],"texture":0},"east":{"uv":[18,10,19,9],"texture":0},"south":{"uv":[10,19,11,18],"texture":0},"west":{"uv":[18,11,19,10],"texture":0},"up":{"uv":[19,12,18,11],"texture":0},"down":{"uv":[12,18,11,19],"texture":0}},"type":"cube","uuid":"edb58280-b6d5-b9f3-cb8c-9414eea20a3f"},{"name":"cube","rescale":false,"locked":false,"from":[13.484348393396221,5.053649944770198,7.9375],"to":[13.734348393396221,5.553649944770198,8.0625],"autouv":0,"color":2,"rotation":[0,0,22.5],"origin":[6.359348393396221,-6.196350055229807,7.9375],"faces":{"north":{"uv":[12,19,13,18],"texture":0},"east":{"uv":[18,13,19,12],"texture":0},"south":{"uv":[13,19,14,18],"texture":0},"west":{"uv":[18,14,19,13],"texture":0},"up":{"uv":[19,15,18,14],"texture":0},"down":{"uv":[15,18,14,19],"texture":0}},"type":"cube","uuid":"d88ee941-7058-525c-9a00-2186ce65e8a7"},{"name":"cube","rescale":false,"locked":false,"from":[7.9264296153771525,6.981524765470352,7.9375],"to":[8.676429615377153,10.481524765470352,8.0625],"autouv":0,"color":2,"origin":[-22.323570384622844,25.981524765470347,-22.1875],"faces":{"north":{"uv":[4,4,5,0],"texture":0},"east":{"uv":[4,8,5,4],"texture":0},"south":{"uv":[5,4,6,0],"texture":0},"west":{"uv":[5,8,6,4],"texture":0},"up":{"uv":[19,16,18,15],"texture":0},"down":{"uv":[16,18,15,19],"texture":0}},"type":"cube","uuid":"e75b9f49-c56e-8ce3-b85c-d16517b967f3"},{"name":"cube","rescale":false,"locked":false,"from":[14.049814396416814,14.428647728925489,7.9375],"to":[14.112314396416814,14.858647728925488,8.0625],"autouv":0,"color":2,"rotation":[0,0,22.5],"origin":[8.674814396416817,-3.016352271074531,7.9375],"faces":{"north":{"uv":[16,19,17,18],"texture":0},"east":{"uv":[18,17,19,16],"texture":0},"south":{"uv":[17,19,18,18],"texture":0},"west":{"uv":[18,18,19,17],"texture":0},"up":{"uv":[1,20,0,19],"texture":0},"down":{"uv":[19,18,18,19],"texture":0}},"type":"cube","uuid":"9c98364d-1042-cffb-8980-39b02b6749d6"},{"name":"cube","rescale":false,"locked":false,"from":[7.410286986195693,15.321225397035223,7.9375],"to":[7.472786986195693,15.758725397035223,8.0625],"autouv":0,"color":2,"rotation":[0,0,45],"origin":[7.347786986195693,14.946225397035226,7.9375],"faces":{"north":{"uv":[19,1,20,0],"texture":0},"east":{"uv":[1,20,2,19],"texture":0},"south":{"uv":[19,2,20,1],"texture":0},"west":{"uv":[2,20,3,19],"texture":0},"up":{"uv":[4,20,3,19],"texture":0},"down":{"uv":[20,2,19,3],"texture":0}},"type":"cube","uuid":"c6229668-e69b-52a7-21ec-9e35d031ef4f"},{"name":"cube","rescale":false,"locked":false,"from":[6.799651073280575,15.552138004397616,7.9375],"to":[6.8616510732805756,15.609138004397614,8.0625],"autouv":0,"color":2,"origin":[6.830901073280575,15.577888004397614,8],"faces":{"north":{"uv":[19,4,20,3],"texture":0},"east":{"uv":[4,20,5,19],"texture":0},"south":{"uv":[19,5,20,4],"texture":0},"west":{"uv":[5,20,6,19],"texture":0},"up":{"uv":[7,20,6,19],"texture":0},"down":{"uv":[20,5,19,6],"texture":0}},"type":"cube","uuid":"86451567-993f-e924-c4f8-fdfb3fa4ba96"},{"name":"cube","rescale":false,"locked":false,"from":[7.347786986195693,15.321225397035223,7.9375],"to":[7.410286986195693,15.633725397035223,8.0625],"autouv":0,"color":2,"rotation":[0,0,45],"origin":[7.347786986195693,14.946225397035226,7.9375],"faces":{"north":{"uv":[19,7,20,6],"texture":0},"east":{"uv":[7,20,8,19],"texture":0},"south":{"uv":[19,8,20,7],"texture":0},"west":{"uv":[8,20,9,19],"texture":0},"up":{"uv":[10,20,9,19],"texture":0},"down":{"uv":[20,8,19,9],"texture":0}},"type":"cube","uuid":"4f7644e1-da88-87cc-dbc9-bcba824d43f1"},{"name":"cube","rescale":false,"locked":false,"from":[14.112314396416814,14.428647728925489,7.9375],"to":[14.174814396416814,14.733647728925488,8.0625],"autouv":0,"color":2,"rotation":[0,0,22.5],"origin":[8.674814396416817,-3.016352271074531,7.9375],"faces":{"north":{"uv":[19,10,20,9],"texture":0},"east":{"uv":[10,20,11,19],"texture":0},"south":{"uv":[19,11,20,10],"texture":0},"west":{"uv":[11,20,12,19],"texture":0},"up":{"uv":[13,20,12,19],"texture":0},"down":{"uv":[20,11,19,12],"texture":0}},"type":"cube","uuid":"9e88b58a-390a-2c92-2424-b590332a013d"},{"name":"cube","rescale":false,"locked":false,"from":[7.347786986195693,15.572169206613127,7.9375],"to":[7.410286986195693,15.642169206613127,8.0625],"autouv":0,"color":2,"rotation":[0,0,45],"origin":[7.347786986195693,14.946225397035226,7.9375],"faces":{"north":{"uv":[19,13,20,12],"texture":0},"east":{"uv":[13,20,14,19],"texture":0},"south":{"uv":[19,14,20,13],"texture":0},"west":{"uv":[14,20,15,19],"texture":0},"up":{"uv":[16,20,15,19],"texture":0},"down":{"uv":[20,14,19,15],"texture":0}},"type":"cube","uuid":"da26afc4-6fbd-3d13-531e-faec20f4fe5f"},{"name":"cube","rescale":false,"locked":false,"from":[14.174814396416814,14.428647728925489,7.9375],"to":[14.237314396416814,14.546147728925488,8.0625],"autouv":0,"color":2,"rotation":[0,0,22.5],"origin":[8.674814396416817,-3.016352271074531,7.9375],"faces":{"north":{"uv":[19,16,20,15],"texture":0},"east":{"uv":[16,20,17,19],"texture":0},"south":{"uv":[19,17,20,16],"texture":0},"west":{"uv":[17,20,18,19],"texture":0},"up":{"uv":[19,20,18,19],"texture":0},"down":{"uv":[20,17,19,18],"texture":0}},"type":"cube","uuid":"0d677597-5300-22d2-4627-0c240656f884"},{"name":"cube","rescale":false,"locked":false,"from":[7.816843200028821,1.5995939059967856,7.8125],"to":[8.31684320002882,3.849593905996782,8.1875],"autouv":0,"color":2,"origin":[8.234921099856415,3.878661133037875,7.9375],"faces":{"north":{"uv":[7,6,8,3],"texture":0},"east":{"uv":[7,9,8,6],"texture":0},"south":{"uv":[8,3,9,0],"texture":0},"west":{"uv":[8,6,9,3],"texture":0},"up":{"uv":[20,20,19,19],"texture":0},"down":{"uv":[20,18,19,19],"texture":0}},"type":"cube","uuid":"58ef34f9-ecb1-ef84-9e2e-54f1c677f74c"},{"name":"cube","rescale":false,"locked":false,"from":[7.81684319885067,3.8209836958964036,7.893833236220841],"to":[8.31684319885067,4.2584836958964,7.956333236220841],"autouv":0,"color":2,"rotation":[22.5,0,0],"origin":[8.06684319885067,4.039733695896404,7.925083236220841],"faces":{"north":{"uv":[0,21,1,20],"texture":0},"east":{"uv":[20,1,21,0],"texture":0},"south":{"uv":[1,21,2,20],"texture":0},"west":{"uv":[20,2,21,1],"texture":0},"up":{"uv":[21,3,20,2],"texture":0},"down":{"uv":[3,20,2,21],"texture":0}},"type":"cube","uuid":"9593893a-614b-faa3-3383-183b99bc3e5c"},{"name":"cube","rescale":false,"locked":false,"from":[7.81684319885067,3.8209836958964036,8.043666763779159],"to":[8.31684319885067,4.2584836958964,8.106166763779159],"autouv":0,"color":2,"rotation":[-22.5,0,0],"origin":[8.06684319885067,4.039733695896404,8.074916763779159],"faces":{"north":{"uv":[3,21,4,20],"texture":0},"east":{"uv":[20,4,21,3],"texture":0},"south":{"uv":[4,21,5,20],"texture":0},"west":{"uv":[20,5,21,4],"texture":0},"up":{"uv":[21,6,20,5],"texture":0},"down":{"uv":[6,20,5,21],"texture":0}},"type":"cube","uuid":"76f724e3-5e13-b697-1ba1-25c471df2b05"},{"name":"cube","rescale":false,"locked":false,"from":[7.81684319885067,3.8209836958964036,7.981166763779159],"to":[8.31684319885067,4.1334836958964,8.043666763779159],"autouv":0,"color":2,"rotation":[-22.5,0,0],"origin":[8.06684319885067,4.039733695896404,8.074916763779159],"faces":{"north":{"uv":[6,21,7,20],"texture":0},"east":{"uv":[20,7,21,6],"texture":0},"south":{"uv":[7,21,8,20],"texture":0},"west":{"uv":[20,8,21,7],"texture":0},"up":{"uv":[21,9,20,8],"texture":0},"down":{"uv":[9,20,8,21],"texture":0}},"type":"cube","uuid":"ad3d1908-2f2b-317f-5e72-7bf3db4347c1"},{"name":"cube","rescale":false,"locked":false,"from":[7.81684319885067,3.8209836958964036,7.956333236220841],"to":[8.31684319885067,4.1334836958964,8.018833236220841],"autouv":0,"color":2,"rotation":[22.5,0,0],"origin":[8.06684319885067,4.039733695896404,7.925083236220841],"faces":{"north":{"uv":[9,21,10,20],"texture":0},"east":{"uv":[20,10,21,9],"texture":0},"south":{"uv":[10,21,11,20],"texture":0},"west":{"uv":[20,11,21,10],"texture":0},"up":{"uv":[21,12,20,11],"texture":0},"down":{"uv":[12,20,11,21],"texture":0}},"type":"cube","uuid":"6698b0f9-755d-6372-82a5-be2910e9162f"},{"name":"cube","rescale":false,"locked":false,"from":[7.531211642286399,4.355429507876439,7.9375],"to":[8.281211642286399,4.417929507876439,8.0625],"autouv":0,"color":2,"rotation":[0,0,-45],"origin":[7.343711642286399,4.199179507876439,8],"faces":{"north":{"uv":[12,21,13,20],"texture":0},"east":{"uv":[20,13,21,12],"texture":0},"south":{"uv":[13,21,14,20],"texture":0},"west":{"uv":[20,14,21,13],"texture":0},"up":{"uv":[21,15,20,14],"texture":0},"down":{"uv":[15,20,14,21],"texture":0}},"type":"cube","uuid":"f5418664-76b9-1a70-4d4b-e5790101b8a6"},{"name":"cube","rescale":false,"locked":false,"from":[8.289892821550964,1.2941651147403217,7.8125],"to":[8.414892821550964,1.6066651147403181,8.1875],"autouv":0,"color":2,"rotation":[0,0,22.5],"origin":[8.383642821550964,1.3566651147403181,8],"faces":{"north":{"uv":[15,21,16,20],"texture":0},"east":{"uv":[20,16,21,15],"texture":0},"south":{"uv":[16,21,17,20],"texture":0},"west":{"uv":[20,17,21,16],"texture":0},"up":{"uv":[21,18,20,17],"texture":0},"down":{"uv":[18,20,17,21],"texture":0}},"type":"cube","uuid":"cd0feb6f-a64e-078d-fe86-476b4dd955ca"},{"name":"cube","rescale":false,"locked":false,"from":[7.718793591051536,1.1066651147403217,7.8125],"to":[8.031293591051536,1.6066651147403181,8.1875],"autouv":0,"color":2,"rotation":[0,0,-22.5],"origin":[7.750043591051536,1.3566651147403181,8],"faces":{"north":{"uv":[18,21,19,20],"texture":0},"east":{"uv":[20,19,21,18],"texture":0},"south":{"uv":[19,21,20,20],"texture":0},"west":{"uv":[20,20,21,19],"texture":0},"up":{"uv":[1,22,0,21],"texture":0},"down":{"uv":[21,20,20,21],"texture":0}},"type":"cube","uuid":"ed151a05-205f-ae5b-8058-d0eb73495472"},{"name":"cube","rescale":false,"locked":false,"from":[8.159875155467729,1.0523723768406779,7.8125],"to":[8.409875155467729,1.3648723768406743,8.1875],"autouv":0,"color":2,"rotation":[0,0,-22.5],"origin":[7.816125155467729,1.1773723768406743,8],"faces":{"north":{"uv":[21,1,22,0],"texture":0},"east":{"uv":[1,22,2,21],"texture":0},"south":{"uv":[21,2,22,1],"texture":0},"west":{"uv":[2,22,3,21],"texture":0},"up":{"uv":[4,22,3,21],"texture":0},"down":{"uv":[22,2,21,3],"texture":0}},"type":"cube","uuid":"cce21215-7ab5-159d-5d1c-3719faab38c3"},{"name":"cube","rescale":false,"locked":false,"from":[7.625501497569286,1.0126540888739068,7.8125],"to":[7.750501497569286,1.1376540888739033,8.1875],"autouv":0,"color":2,"origin":[7.656751497569286,0.8876540888739033,8],"faces":{"north":{"uv":[21,4,22,3],"texture":0},"east":{"uv":[4,22,5,21],"texture":0},"south":{"uv":[21,5,22,4],"texture":0},"west":{"uv":[5,22,6,21],"texture":0},"up":{"uv":[7,22,6,21],"texture":0},"down":{"uv":[22,5,21,6],"texture":0}},"type":"cube","uuid":"75e67112-b6c7-c07c-c544-074b8f66efd9"},{"name":"cube","rescale":false,"locked":false,"from":[7.756513627426321,0.5713628281376675,7.8125],"to":[8.00651362742632,1.196362828137664,8.1875],"autouv":0,"color":2,"rotation":[0,0,45],"origin":[7.912763627426321,0.9463628281376639,8],"faces":{"north":{"uv":[21,7,22,6],"texture":0},"east":{"uv":[7,22,8,21],"texture":0},"south":{"uv":[21,8,22,7],"texture":0},"west":{"uv":[8,22,9,21],"texture":0},"up":{"uv":[10,22,9,21],"texture":0},"down":{"uv":[22,8,21,9],"texture":0}},"type":"cube","uuid":"e95e31f8-9f8f-e19c-74f2-5dc46b0dde65"},{"name":"cube","rescale":false,"locked":false,"from":[8.067443235810881,0.5707123506323111,7.8125],"to":[8.254943235810877,1.008212350632311,8.1875],"autouv":0,"color":2,"origin":[8.379943235810877,0.6019623506323111,8],"faces":{"north":{"uv":[21,10,22,9],"texture":0},"east":{"uv":[10,22,11,21],"texture":0},"south":{"uv":[21,11,22,10],"texture":0},"west":{"uv":[11,22,12,21],"texture":0},"up":{"uv":[13,22,12,21],"texture":0},"down":{"uv":[22,11,21,12],"texture":0}},"type":"cube","uuid":"c105fe53-bf9d-ba06-6ced-9f7905c43554"},{"name":"cube","rescale":false,"locked":false,"from":[7.904948347700474,1.2071691769615587,7.8125],"to":[8.186198347700474,1.2384191769615587,8.1875],"autouv":0,"color":2,"origin":[8.045573347700474,1.2071691769615587,7.90625],"faces":{"north":{"uv":[21,13,22,12],"texture":0},"east":{"uv":[13,22,14,21],"texture":0},"south":{"uv":[21,14,22,13],"texture":0},"west":{"uv":[14,22,15,21],"texture":0},"up":{"uv":[16,22,15,21],"texture":0},"down":{"uv":[22,14,21,15],"texture":0}},"type":"cube","uuid":"b4f48996-d658-782d-1e2f-d57dd6e74dbd"},{"name":"cube","rescale":false,"locked":false,"from":[7.9939083013742795,1.2000003660263463,7.8125],"to":[8.02515830137428,1.2312503660263463,8.1875],"autouv":0,"color":2,"rotation":[0,0,22.5],"origin":[8.00953330137428,1.2156253660263463,7.90625],"faces":{"north":{"uv":[21,16,22,15],"texture":0},"east":{"uv":[16,22,17,21],"texture":0},"south":{"uv":[21,17,22,16],"texture":0},"west":{"uv":[17,22,18,21],"texture":0},"up":{"uv":[19,22,18,21],"texture":0},"down":{"uv":[22,17,21,18],"texture":0}},"type":"cube","uuid":"0403ea07-0e88-dd55-1aee-1fb891a6843b"},{"name":"cube","rescale":false,"locked":false,"from":[7.900855025397416,1.1795853197001502,7.8125],"to":[8.057105025397416,1.2108353197001467,8.1875],"autouv":0,"color":2,"rotation":[0,0,45],"origin":[7.978980025397416,1.1952103197001538,7.90625],"faces":{"north":{"uv":[21,19,22,18],"texture":0},"east":{"uv":[19,22,20,21],"texture":0},"south":{"uv":[21,20,22,19],"texture":0},"west":{"uv":[20,22,21,21],"texture":0},"up":{"uv":[22,22,21,21],"texture":0},"down":{"uv":[22,20,21,21],"texture":0}},"type":"cube","uuid":"4ef7d81f-f877-8550-184b-d6304ce251e9"},{"name":"cube","rescale":false,"locked":false,"from":[7.929148051056259,1.1462886599850446,7.8125],"to":[7.960398051056259,1.1775386599850446,8.1875],"autouv":0,"color":2,"rotation":[0,0,-22.5],"origin":[7.958564979686965,1.1286169988335164,7.90625],"faces":{"north":{"uv":[0,23,1,22],"texture":0},"east":{"uv":[22,1,23,0],"texture":0},"south":{"uv":[1,23,2,22],"texture":0},"west":{"uv":[22,2,23,1],"texture":0},"up":{"uv":[23,3,22,2],"texture":0},"down":{"uv":[3,22,2,23],"texture":0}},"type":"cube","uuid":"73fb670c-8b5c-1de4-0449-1848ac6fb52b"},{"name":"cube","rescale":false,"locked":false,"from":[7.929148051032726,1.0796953379664256,7.8125],"to":[7.960398051032724,1.1109453379664256,8.1875],"autouv":0,"color":2,"rotation":[0,0,22.5],"origin":[7.95856497966343,1.1286169991179538,7.90625],"faces":{"north":{"uv":[3,23,4,22],"texture":0},"east":{"uv":[22,4,23,3],"texture":0},"south":{"uv":[4,23,5,22],"texture":0},"west":{"uv":[22,5,23,4],"texture":0},"up":{"uv":[23,6,22,5],"texture":0},"down":{"uv":[6,22,5,23],"texture":0}},"type":"cube","uuid":"227c4c63-ad76-448a-96bc-7125a8c0a326"},{"name":"cube","rescale":false,"locked":false,"from":[7.873271168728213,0.9879919991179538,7.8125],"to":[7.967021168728211,1.2692419991179538,8.1875],"autouv":0,"color":2,"origin":[7.95856497966343,1.1286169991179538,7.90625],"faces":{"north":{"uv":[6,23,7,22],"texture":0},"east":{"uv":[22,7,23,6],"texture":0},"south":{"uv":[7,23,8,22],"texture":0},"west":{"uv":[22,8,23,7],"texture":0},"up":{"uv":[23,9,22,8],"texture":0},"down":{"uv":[9,22,8,23],"texture":0}},"type":"cube","uuid":"e47733a9-8844-7e9a-0206-0587bf92c674"},{"name":"cube","rescale":false,"locked":false,"from":[7.9008550253738825,0.9838986782513235,7.8125],"to":[8.182105025373883,1.07764867825132,8.1875],"autouv":0,"color":2,"rotation":[0,0,-45],"origin":[7.9789800253738825,1.0620236782513164,7.90625],"faces":{"north":{"uv":[9,23,10,22],"texture":0},"east":{"uv":[22,10,23,9],"texture":0},"south":{"uv":[10,23,11,22],"texture":0},"west":{"uv":[22,11,23,10],"texture":0},"up":{"uv":[23,12,22,11],"texture":0},"down":{"uv":[12,22,11,23],"texture":0}},"type":"cube","uuid":"8c433c94-1325-b717-b0eb-fc90e80341eb"},{"name":"cube","rescale":false,"locked":false,"from":[7.993908301350746,1.0259836319251239,7.8125],"to":[8.025158301350746,1.0572336319251239,8.1875],"autouv":0,"color":2,"rotation":[0,0,-22.5],"origin":[8.009533301350746,1.0416086319251239,7.90625],"faces":{"north":{"uv":[12,23,13,22],"texture":0},"east":{"uv":[22,13,23,12],"texture":0},"south":{"uv":[13,23,14,22],"texture":0},"west":{"uv":[22,14,23,13],"texture":0},"up":{"uv":[23,15,22,14],"texture":0},"down":{"uv":[15,22,14,23],"texture":0}},"type":"cube","uuid":"dc22d4cb-3fcc-58db-0907-3187abab5aec"},{"name":"cube","rescale":false,"locked":false,"from":[7.904948347676939,1.0188148209899115,7.8125],"to":[8.186198347676939,1.0500648209899115,8.1875],"autouv":0,"color":2,"origin":[8.045573347676939,1.0500648209899115,7.90625],"faces":{"north":{"uv":[15,23,16,22],"texture":0},"east":{"uv":[22,16,23,15],"texture":0},"south":{"uv":[16,23,17,22],"texture":0},"west":{"uv":[22,17,23,16],"texture":0},"up":{"uv":[23,18,22,17],"texture":0},"down":{"uv":[18,22,17,23],"texture":0}},"type":"cube","uuid":"87c7ac49-ba97-be87-74b1-af93cf4083eb"},{"name":"cube","rescale":false,"locked":false,"from":[8.065988394003133,1.0259836319251239,7.8125],"to":[8.097238394003133,1.0572336319251239,8.1875],"autouv":0,"color":2,"rotation":[0,0,22.5],"origin":[8.081613394003133,1.0416086319251239,7.90625],"faces":{"north":{"uv":[18,23,19,22],"texture":0},"east":{"uv":[22,19,23,18],"texture":0},"south":{"uv":[19,23,20,22],"texture":0},"west":{"uv":[22,20,23,19],"texture":0},"up":{"uv":[23,21,22,20],"texture":0},"down":{"uv":[21,22,20,23],"texture":0}},"type":"cube","uuid":"6605236f-0541-891c-8936-f08ef6f7ff28"},{"name":"cube","rescale":false,"locked":false,"from":[8.034041669979997,0.9838986782513235,7.8125],"to":[8.190291669979997,1.07764867825132,8.1875],"autouv":0,"color":2,"rotation":[0,0,45],"origin":[8.112166669979997,1.0620236782513164,7.90625],"faces":{"north":{"uv":[21,23,22,22],"texture":0},"east":{"uv":[22,22,23,21],"texture":0},"south":{"uv":[22,23,23,22],"texture":0},"west":{"uv":[0,24,1,23],"texture":0},"up":{"uv":[2,24,1,23],"texture":0},"down":{"uv":[24,0,23,1],"texture":0}},"type":"cube","uuid":"2cda18be-3670-5b3e-a008-3b81da1d06b2"},{"name":"cube","rescale":false,"locked":false,"from":[8.130748644321155,1.0796953379664256,7.8125],"to":[8.161998644321153,1.1109453379664256,8.1875],"autouv":0,"color":2,"rotation":[0,0,-22.5],"origin":[8.13258171569045,1.1286169991179538,7.90625],"faces":{"north":{"uv":[23,2,24,1],"texture":0},"east":{"uv":[2,24,3,23],"texture":0},"south":{"uv":[23,3,24,2],"texture":0},"west":{"uv":[3,24,4,23],"texture":0},"up":{"uv":[5,24,4,23],"texture":0},"down":{"uv":[24,3,23,4],"texture":0}},"type":"cube","uuid":"18d301e3-ffd1-c8cf-3633-63e1cc230151"},{"name":"cube","rescale":false,"locked":false,"from":[8.130748644344688,1.1462886599850446,7.8125],"to":[8.161998644344688,1.1775386599850446,8.1875],"autouv":0,"color":2,"rotation":[0,0,22.5],"origin":[8.132581715713982,1.1286169988335164,7.90625],"faces":{"north":{"uv":[23,5,24,4],"texture":0},"east":{"uv":[5,24,6,23],"texture":0},"south":{"uv":[23,6,24,5],"texture":0},"west":{"uv":[6,24,7,23],"texture":0},"up":{"uv":[8,24,7,23],"texture":0},"down":{"uv":[24,6,23,7],"texture":0}},"type":"cube","uuid":"75b0e217-1e19-907a-7cd9-0238653b52dc"},{"name":"cube","rescale":false,"locked":false,"from":[8.124125526649202,0.9879919988335164,7.8125],"to":[8.217875526649202,1.2692419988335164,8.1875],"autouv":0,"color":2,"origin":[8.132581715713982,1.1286169988335164,7.90625],"faces":{"north":{"uv":[23,8,24,7],"texture":0},"east":{"uv":[8,24,9,23],"texture":0},"south":{"uv":[23,9,24,8],"texture":0},"west":{"uv":[9,24,10,23],"texture":0},"up":{"uv":[11,24,10,23],"texture":0},"down":{"uv":[24,9,23,10],"texture":0}},"type":"cube","uuid":"0bcc6ea2-ffb4-5a92-7822-41dfa442dd2e"},{"name":"cube","rescale":false,"locked":false,"from":[8.034041670003532,1.1795853197001502,7.8125],"to":[8.190291670003532,1.2733353197001467,8.1875],"autouv":0,"color":2,"rotation":[0,0,-45],"origin":[8.112166670003532,1.1952103197001538,7.90625],"faces":{"north":{"uv":[23,11,24,10],"texture":0},"east":{"uv":[11,24,12,23],"texture":0},"south":{"uv":[23,12,24,11],"texture":0},"west":{"uv":[12,24,13,23],"texture":0},"up":{"uv":[14,24,13,23],"texture":0},"down":{"uv":[24,12,23,13],"texture":0}},"type":"cube","uuid":"5c1f7566-a99e-9852-e639-834a92b2b6eb"},{"name":"cube","rescale":false,"locked":false,"from":[8.065988394026668,1.2000003660263463,7.8125],"to":[8.097238394026668,1.2312503660263463,8.1875],"autouv":0,"color":2,"rotation":[0,0,-22.5],"origin":[8.081613394026668,1.2156253660263463,7.90625],"faces":{"north":{"uv":[23,14,24,13],"texture":0},"east":{"uv":[14,24,15,23],"texture":0},"south":{"uv":[23,15,24,14],"texture":0},"west":{"uv":[15,24,16,23],"texture":0},"up":{"uv":[17,24,16,23],"texture":0},"down":{"uv":[24,15,23,16],"texture":0}},"type":"cube","uuid":"fa9dd43b-d968-1199-18c5-853a8d041206"},{"name":"cube","rescale":false,"locked":false,"from":[8.252547312185392,0.6308164240265857,7.8125],"to":[8.315047312185392,0.9308164240265864,8.1875],"autouv":0,"color":2,"origin":[8.221297312185392,0.7745664240265935,8],"faces":{"north":{"uv":[23,17,24,16],"texture":0},"east":{"uv":[17,24,18,23],"texture":0},"south":{"uv":[23,18,24,17],"texture":0},"west":{"uv":[18,24,19,23],"texture":0},"up":{"uv":[20,24,19,23],"texture":0},"down":{"uv":[24,18,23,19],"texture":0}},"type":"cube","uuid":"cffb03f0-6d1c-f858-d484-e5be9de0872d"},{"name":"cube","rescale":false,"locked":false,"from":[8.195408964537073,0.5953722531826653,7.8125],"to":[8.257908964537073,0.6803722531826661,8.1875],"autouv":0,"color":2,"rotation":[0,0,-45],"origin":[8.226658964537073,0.5866222531826661,8],"faces":{"north":{"uv":[23,20,24,19],"texture":0},"east":{"uv":[20,24,21,23],"texture":0},"south":{"uv":[23,21,24,20],"texture":0},"west":{"uv":[21,24,22,23],"texture":0},"up":{"uv":[23,24,22,23],"texture":0},"down":{"uv":[24,21,23,22],"texture":0}},"type":"cube","uuid":"2cc24f10-c292-ac32-d835-0c21cb8b0f0a"},{"name":"cube","rescale":false,"locked":false,"from":[8.18643177146476,1.1233815012197734,7.8125],"to":[8.43643177146476,1.3108815012197699,8.1875],"autouv":0,"color":2,"origin":[8.40518177146476,1.1546315012197699,8],"faces":{"north":{"uv":[23,23,24,22],"texture":0},"east":{"uv":[23,24,24,23],"texture":0},"south":{"uv":[0,25,1,24],"texture":0},"west":{"uv":[24,1,25,0],"texture":0},"up":{"uv":[25,2,24,1],"texture":0},"down":{"uv":[2,24,1,25],"texture":0}},"type":"cube","uuid":"196cc020-bc63-9142-0d5e-02765302f016"},{"name":"cube","rescale":false,"locked":false,"from":[8.239643107731803,0.5348469369555655,7.9375],"to":[8.364643107731803,1.097346936955562,8.0625],"autouv":0,"color":2,"origin":[8.458393107731801,0.941096936955562,8],"faces":{"north":{"uv":[2,25,3,24],"texture":0},"east":{"uv":[24,3,25,2],"texture":0},"south":{"uv":[3,25,4,24],"texture":0},"west":{"uv":[24,4,25,3],"texture":0},"up":{"uv":[25,5,24,4],"texture":0},"down":{"uv":[5,24,4,25],"texture":0}},"type":"cube","uuid":"f509a2aa-5be7-d22e-447b-32274a303822"},{"name":"cube","rescale":false,"locked":false,"from":[8.182001191330649,0.4743987524806581,7.9375],"to":[8.307001191330649,0.7243987524806546,8.0625],"autouv":0,"color":2,"rotation":[0,0,22.5],"origin":[8.338251191330649,0.5368987524806546,8],"faces":{"north":{"uv":[5,25,6,24],"texture":0},"east":{"uv":[24,6,25,5],"texture":0},"south":{"uv":[6,25,7,24],"texture":0},"west":{"uv":[24,7,25,6],"texture":0},"up":{"uv":[25,8,24,7],"texture":0},"down":{"uv":[8,24,7,25],"texture":0}},"type":"cube","uuid":"0816c30a-f52a-9788-caa8-1d86cadea9cb"},{"name":"cube","rescale":false,"locked":false,"from":[8.364316158647869,0.40991197117186395,7.9375],"to":[8.426816158647869,0.5349119711718604,8.0625],"autouv":0,"color":2,"rotation":[0,0,-22.5],"origin":[8.395566158647869,0.6911619711718604,8],"faces":{"north":{"uv":[8,25,9,24],"texture":0},"east":{"uv":[24,9,25,8],"texture":0},"south":{"uv":[9,25,10,24],"texture":0},"west":{"uv":[24,10,25,9],"texture":0},"up":{"uv":[25,11,24,10],"texture":0},"down":{"uv":[11,24,10,25],"texture":0}},"type":"cube","uuid":"88170da3-cc83-7e27-3b30-2ca476756fd1"},{"name":"cube","rescale":false,"locked":false,"from":[8.236060203792375,0.3859152964612864,7.9375],"to":[8.306060203792375,0.4559152964612867,8.0625],"autouv":0,"color":2,"rotation":[0,0,-45],"origin":[8.267310203792372,0.4246652964612867,8],"faces":{"north":{"uv":[11,25,12,24],"texture":0},"east":{"uv":[24,12,25,11],"texture":0},"south":{"uv":[12,25,13,24],"texture":0},"west":{"uv":[24,13,25,12],"texture":0},"up":{"uv":[25,14,24,13],"texture":0},"down":{"uv":[14,24,13,25],"texture":0}},"type":"cube","uuid":"eeb42185-8eda-aa87-7706-43b63f6a7b3b"},{"name":"cube","rescale":false,"locked":false,"from":[8.001406862344318,0.46898732509474605,7.9375],"to":[8.063906862344318,0.6564873250947425,8.0625],"autouv":0,"color":2,"origin":[7.970156862344317,0.5939873250947425,8],"faces":{"north":{"uv":[14,25,15,24],"texture":0},"east":{"uv":[24,15,25,14],"texture":0},"south":{"uv":[15,25,16,24],"texture":0},"west":{"uv":[24,16,25,15],"texture":0},"up":{"uv":[25,17,24,16],"texture":0},"down":{"uv":[17,24,16,25],"texture":0}},"type":"cube","uuid":"251e23b7-d18a-6f8e-ca32-96766ba64e4e"},{"name":"cube","rescale":false,"locked":false,"from":[7.944268514695999,0.4194314989189021,7.9375],"to":[8.006768514695999,0.6069314989188985,8.0625],"autouv":0,"color":2,"rotation":[0,0,45],"origin":[7.975518514695999,0.5131814989189021,8],"faces":{"north":{"uv":[17,25,18,24],"texture":0},"east":{"uv":[24,18,25,17],"texture":0},"south":{"uv":[18,25,19,24],"texture":0},"west":{"uv":[24,19,25,18],"texture":0},"up":{"uv":[25,20,24,19],"texture":0},"down":{"uv":[20,24,19,25],"texture":0}},"type":"cube","uuid":"69e799e0-703b-1f1c-3d27-75866f279b39"},{"name":"cube","rescale":false,"locked":false,"from":[7.8871301670476806,0.5573756727430652,7.9375],"to":[7.9496301670476806,0.7448756727430617,8.0625],"autouv":0,"color":2,"origin":[8.10588016704768,0.6823756727430617,8],"faces":{"north":{"uv":[20,25,21,24],"texture":0},"east":{"uv":[24,21,25,20],"texture":0},"south":{"uv":[21,25,22,24],"texture":0},"west":{"uv":[24,22,25,21],"texture":0},"up":{"uv":[25,23,24,22],"texture":0},"down":{"uv":[23,24,22,25],"texture":0}},"type":"cube","uuid":"fd3f641f-7be9-67b7-c67b-18525c58cc5a"},{"name":"cube","rescale":false,"locked":false,"from":[7.655435993223521,0.7890698465672248,7.9375],"to":[7.717935993223521,0.9765698465672212,8.0625],"autouv":0,"color":2,"origin":[7.874185993223521,0.9140698465672212,8],"faces":{"north":{"uv":[23,25,24,24],"texture":0},"east":{"uv":[24,24,25,23],"texture":0},"south":{"uv":[24,25,25,24],"texture":0},"west":{"uv":[0,26,1,25],"texture":0},"up":{"uv":[2,26,1,25],"texture":0},"down":{"uv":[26,0,25,1],"texture":0}},"type":"cube","uuid":"77f324b3-7cdc-d850-9951-12390a859f0c"},{"name":"cube","rescale":false,"locked":false,"from":[7.756768514695999,0.6069314989189021,7.9375],"to":[7.819268514695999,0.8569314989188985,8.0625],"autouv":0,"color":2,"rotation":[0,0,45],"origin":[7.788018514695999,0.7006814989189021,8],"faces":{"north":{"uv":[25,2,26,1],"texture":0},"east":{"uv":[2,26,3,25],"texture":0},"south":{"uv":[25,3,26,2],"texture":0},"west":{"uv":[3,26,4,25],"texture":0},"up":{"uv":[5,26,4,25],"texture":0},"down":{"uv":[26,3,25,4],"texture":0}},"type":"cube","uuid":"0f0b7625-b9e1-dca4-2606-072e5fccaa31"},{"name":"cube","rescale":false,"locked":false,"from":[7.813906862344317,0.656487325094746,7.9375],"to":[7.876406862344317,0.8439873250947425,8.0625],"autouv":0,"color":2,"origin":[7.782656862344317,0.7814873250947425,8],"faces":{"north":{"uv":[25,5,26,4],"texture":0},"east":{"uv":[5,26,6,25],"texture":0},"south":{"uv":[25,6,26,5],"texture":0},"west":{"uv":[6,26,7,25],"texture":0},"up":{"uv":[8,26,7,25],"texture":0},"down":{"uv":[26,6,25,7],"texture":0}},"type":"cube","uuid":"802ae7c0-24a1-f20f-045a-6c6b4df47cd3"},{"name":"cube","rescale":false,"locked":false,"from":[7.816843200028821,1.2245939059967856,7.8125],"to":[8.31684320002882,1.599593905996782,8.1875],"autouv":0,"color":2,"origin":[8.234921099856415,4.566161133037875,7.9375],"faces":{"north":{"uv":[25,8,26,7],"texture":0},"east":{"uv":[8,26,9,25],"texture":0},"south":{"uv":[25,9,26,8],"texture":0},"west":{"uv":[9,26,10,25],"texture":0},"up":{"uv":[11,26,10,25],"texture":0},"down":{"uv":[26,9,25,10],"texture":0}},"type":"cube","uuid":"7ffcaa13-4a85-d136-a1d6-d8f2d5cb29be"},{"name":"cube","rescale":false,"locked":false,"from":[7.87934321257368,4.606404089506112,7.875],"to":[8.37934321257368,4.668904089506109,8.125],"autouv":0,"color":2,"origin":[8.12934320630125,4.884248997751447,7.906250000000001],"faces":{"north":{"uv":[25,11,26,10],"texture":0},"east":{"uv":[11,26,12,25],"texture":0},"south":{"uv":[25,12,26,11],"texture":0},"west":{"uv":[12,26,13,25],"texture":0},"up":{"uv":[14,26,13,25],"texture":0},"down":{"uv":[26,12,25,13],"texture":0}},"type":"cube","uuid":"3a7631fd-36b1-4e3d-3c91-147ec71b7eae"},{"name":"cube","rescale":false,"locked":false,"from":[7.980782239220492,4.5896254363481965,7.875],"to":[8.105782239220488,5.0896254363481965,8.125],"autouv":0,"color":2,"rotation":[0,0,-22.5],"origin":[8.12934320630125,4.884248997751447,7.906250000000001],"faces":{"north":{"uv":[25,14,26,13],"texture":0},"east":{"uv":[14,26,15,25],"texture":0},"south":{"uv":[25,15,26,14],"texture":0},"west":{"uv":[15,26,16,25],"texture":0},"up":{"uv":[17,26,16,25],"texture":0},"down":{"uv":[26,15,25,16],"texture":0}},"type":"cube","uuid":"05a37a08-19f0-55a1-b108-0f32dd8c04a1"},{"name":"cube","rescale":false,"locked":false,"from":[8.15290417338201,4.589625436348198,7.875000000000002],"to":[8.27790417338201,5.089625436348198,8.124999999999998],"autouv":0,"color":2,"rotation":[0,0,22.5],"origin":[8.12934320630125,4.884248997751447,7.906250000000001],"faces":{"north":{"uv":[25,17,26,16],"texture":0},"east":{"uv":[17,26,18,25],"texture":0},"south":{"uv":[25,18,26,17],"texture":0},"west":{"uv":[18,26,19,25],"texture":0},"up":{"uv":[20,26,19,25],"texture":0},"down":{"uv":[26,18,25,19],"texture":0}},"type":"cube","uuid":"54a53c4e-cc00-a56f-5844-0fb761054b01"},{"name":"cube","rescale":false,"locked":false,"from":[8.262234473582906,5.0150955941224975,7.875000000000002],"to":[8.347234473582906,5.100095594122498,8.125000000000002],"autouv":0,"color":2,"rotation":[0,0,45],"origin":[8.12934320630125,4.884248997751447,7.906250000000001],"faces":{"north":{"uv":[25,20,26,19],"texture":0},"east":{"uv":[20,26,21,25],"texture":0},"south":{"uv":[25,21,26,20],"texture":0},"west":{"uv":[21,26,22,25],"texture":0},"up":{"uv":[23,26,22,25],"texture":0},"down":{"uv":[26,21,25,22],"texture":0}},"type":"cube","uuid":"470f45c6-b77e-e24e-2aa2-79f8fc5045f3"},{"name":"cube","rescale":false,"locked":false,"from":[8.09040417338201,4.652125436348198,7.875000000000002],"to":[8.15290417338201,4.964625436348198,8.124999999999998],"autouv":0,"color":2,"rotation":[0,0,22.5],"origin":[8.12934320630125,4.884248997751447,7.906250000000001],"faces":{"north":{"uv":[25,23,26,22],"texture":0},"east":{"uv":[23,26,24,25],"texture":0},"south":{"uv":[25,24,26,23],"texture":0},"west":{"uv":[24,26,25,25],"texture":0},"up":{"uv":[26,26,25,25],"texture":0},"down":{"uv":[26,24,25,25],"texture":0}},"type":"cube","uuid":"01333453-e3c7-9e2d-243f-e924a1b30417"},{"name":"cube","rescale":false,"locked":false,"from":[8.105782239220492,4.6521254363481965,7.875],"to":[8.230782239220488,4.9021254363481965,8.125],"autouv":0,"color":2,"rotation":[0,0,-22.5],"origin":[8.12934320630125,4.884248997751447,7.906250000000001],"faces":{"north":{"uv":[0,27,1,26],"texture":0},"east":{"uv":[26,1,27,0],"texture":0},"south":{"uv":[1,27,2,26],"texture":0},"west":{"uv":[26,2,27,1],"texture":0},"up":{"uv":[27,3,26,2],"texture":0},"down":{"uv":[3,26,2,27],"texture":0}},"type":"cube","uuid":"80e69820-72e9-a457-8ebd-e8abb5ad35b4"},{"name":"cube","rescale":false,"locked":false,"from":[7.94184321257368,4.668904089506112,7.875],"to":[8.31684321257368,4.731404089506109,8.125],"autouv":0,"color":2,"origin":[8.12934320630125,4.884248997751447,7.906250000000001],"faces":{"north":{"uv":[3,27,4,26],"texture":0},"east":{"uv":[26,4,27,3],"texture":0},"south":{"uv":[4,27,5,26],"texture":0},"west":{"uv":[26,5,27,4],"texture":0},"up":{"uv":[27,6,26,5],"texture":0},"down":{"uv":[6,26,5,27],"texture":0}},"type":"cube","uuid":"ae453de6-a1d7-2d4a-cbf2-34986025472a"},{"name":"cube","rescale":false,"locked":false,"from":[14.174814396416814,14.428647728925489,7.9375],"to":[14.237314396416814,14.546147728925488,8.0625],"autouv":0,"color":2,"rotation":[0,0,22.5],"origin":[8.674814396416817,-3.016352271074531,7.9375],"faces":{"north":{"uv":[19,16,20,15],"texture":0},"east":{"uv":[16,20,17,19],"texture":0},"south":{"uv":[19,17,20,16],"texture":0},"west":{"uv":[17,20,18,19],"texture":0},"up":{"uv":[19,20,18,19],"texture":0},"down":{"uv":[20,17,19,18],"texture":0}},"type":"cube","uuid":"a9268c84-cf78-9489-df75-4fe2f6f96668"},{"name":"cube","rescale":false,"locked":false,"from":[7.347786986195693,15.572169206613127,7.9375],"to":[7.410286986195693,15.642169206613127,8.0625],"autouv":0,"color":2,"rotation":[0,0,45],"origin":[7.347786986195693,14.946225397035226,7.9375],"faces":{"north":{"uv":[19,13,20,12],"texture":0},"east":{"uv":[13,20,14,19],"texture":0},"south":{"uv":[19,14,20,13],"texture":0},"west":{"uv":[14,20,15,19],"texture":0},"up":{"uv":[16,20,15,19],"texture":0},"down":{"uv":[20,14,19,15],"texture":0}},"type":"cube","uuid":"dfb19d96-4f30-c012-d736-e4b31e93cc6d"},{"name":"cube","rescale":false,"locked":false,"from":[14.112314396416814,14.428647728925489,7.9375],"to":[14.174814396416814,14.733647728925488,8.0625],"autouv":0,"color":2,"rotation":[0,0,22.5],"origin":[8.674814396416817,-3.016352271074531,7.9375],"faces":{"north":{"uv":[19,10,20,9],"texture":0},"east":{"uv":[10,20,11,19],"texture":0},"south":{"uv":[19,11,20,10],"texture":0},"west":{"uv":[11,20,12,19],"texture":0},"up":{"uv":[13,20,12,19],"texture":0},"down":{"uv":[20,11,19,12],"texture":0}},"type":"cube","uuid":"380b26f6-cfa0-9708-0ffa-76119d7aaea7"},{"name":"cube","rescale":false,"locked":false,"from":[7.347786986195693,15.321225397035223,7.9375],"to":[7.410286986195693,15.633725397035223,8.0625],"autouv":0,"color":2,"rotation":[0,0,45],"origin":[7.347786986195693,14.946225397035226,7.9375],"faces":{"north":{"uv":[19,7,20,6],"texture":0},"east":{"uv":[7,20,8,19],"texture":0},"south":{"uv":[19,8,20,7],"texture":0},"west":{"uv":[8,20,9,19],"texture":0},"up":{"uv":[10,20,9,19],"texture":0},"down":{"uv":[20,8,19,9],"texture":0}},"type":"cube","uuid":"85ce5307-9e06-9102-8d99-c37c846155e1"},{"name":"cube","rescale":false,"locked":false,"from":[6.799651073280575,15.552138004397616,7.9375],"to":[6.8616510732805756,15.609138004397614,8.0625],"autouv":0,"color":2,"origin":[6.830901073280575,15.577888004397614,8],"faces":{"north":{"uv":[19,4,20,3],"texture":0},"east":{"uv":[4,20,5,19],"texture":0},"south":{"uv":[19,5,20,4],"texture":0},"west":{"uv":[5,20,6,19],"texture":0},"up":{"uv":[7,20,6,19],"texture":0},"down":{"uv":[20,5,19,6],"texture":0}},"type":"cube","uuid":"74b2cad5-195b-7acf-deff-856de6cd59f0"},{"name":"cube","rescale":false,"locked":false,"from":[7.410286986195693,15.321225397035223,7.9375],"to":[7.472786986195693,15.758725397035223,8.0625],"autouv":0,"color":2,"rotation":[0,0,45],"origin":[7.347786986195693,14.946225397035226,7.9375],"faces":{"north":{"uv":[19,1,20,0],"texture":0},"east":{"uv":[1,20,2,19],"texture":0},"south":{"uv":[19,2,20,1],"texture":0},"west":{"uv":[2,20,3,19],"texture":0},"up":{"uv":[4,20,3,19],"texture":0},"down":{"uv":[20,2,19,3],"texture":0}},"type":"cube","uuid":"3c87c0b7-0a90-ec84-f641-1a80026fb70f"},{"name":"cube","rescale":false,"locked":false,"from":[14.049814396416814,14.428647728925489,7.9375],"to":[14.112314396416814,14.858647728925488,8.0625],"autouv":0,"color":2,"rotation":[0,0,22.5],"origin":[8.674814396416817,-3.016352271074531,7.9375],"faces":{"north":{"uv":[16,19,17,18],"texture":0},"east":{"uv":[18,17,19,16],"texture":0},"south":{"uv":[17,19,18,18],"texture":0},"west":{"uv":[18,18,19,17],"texture":0},"up":{"uv":[1,20,0,19],"texture":0},"down":{"uv":[19,18,18,19],"texture":0}},"type":"cube","uuid":"7be41990-ce88-5180-f499-045c618d98a7"},{"name":"cube","rescale":false,"locked":false,"from":[7.222786986195693,13.571225397035223,7.9375],"to":[7.472786986195693,15.321225397035223,8.0625],"autouv":0,"color":2,"rotation":[0,0,45],"origin":[7.347786986195693,14.946225397035226,7.9375],"faces":{"north":{"uv":[10,2,11,0],"texture":0},"east":{"uv":[1,12,2,10],"texture":0},"south":{"uv":[2,12,3,10],"texture":0},"west":{"uv":[10,4,11,2],"texture":0},"up":{"uv":[13,11,12,10],"texture":0},"down":{"uv":[11,12,10,13],"texture":0}},"type":"cube","uuid":"d6691ff1-1ea6-8c54-7c54-687b1a8374d1"},{"name":"cube","rescale":false,"locked":false,"from":[14.046944387459792,12.240576543473663,7.9375],"to":[14.296944387459792,14.428076543473663,8.0625],"autouv":0,"color":2,"rotation":[0,0,22.5],"origin":[8.671944387459796,-3.0094234565263562,7.9375],"faces":{"north":{"uv":[9,8,10,6],"texture":0},"east":{"uv":[7,11,8,9],"texture":0},"south":{"uv":[9,10,10,8],"texture":0},"west":{"uv":[0,12,1,10],"texture":0},"up":{"uv":[13,10,12,9],"texture":0},"down":{"uv":[10,12,9,13],"texture":0}},"type":"cube","uuid":"c86aea5b-f969-2b76-5d02-2d4cc398d678"}],"outliner":[{"name":"Everything","origin":[8,8,8],"color":0,"uuid":"97a2f285-36c3-3a57-3a0d-53a993f95aa5","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["2d917e12-2ed8-828e-f5e7-a890c8aaa773","edb58280-b6d5-b9f3-cb8c-9414eea20a3f","d88ee941-7058-525c-9a00-2186ce65e8a7","11434974-9fe7-62bc-36d9-5e275ce642a9","ffef2d04-5679-0098-2062-b0031ac37682","a9eac623-ed11-6666-6f37-f0562c420aa5","48901af9-304d-0ab3-af87-6f043b4dfafb","005d5fe3-a319-069d-7444-a71e89abf62f","934c80ae-7ea7-bf72-87f5-60447f538475","7cd1f07a-146e-5012-da92-756c297012d6","f5418664-76b9-1a70-4d4b-e5790101b8a6","491e63cc-31fa-5214-5b39-b02815feda72","7bcf341d-e5a0-c6ae-6e52-d4f96b4cfd38","4dc4ea90-e8be-1fc6-14dd-140a1ad63ba5","7707a3c7-dac6-463c-fe48-082a34f5ca18","4940ac95-23f9-2c0c-6300-9408b8c32507","ac8f88f1-4724-f94b-ee5c-31f353d7840b","801b4034-90b4-3089-4082-d791ca1d40e2","e9d7f0a5-73e9-65ae-4a07-2075402de615","713e6a73-0fe6-08dc-2e1c-5bc29c2d8a5b","28712949-8963-7c81-fd67-758adc8bf9f0","70d85f1c-61d0-099a-f099-f4639a56347a","c053d207-39fa-2eb1-0547-7ea1dd75dc30","4f36549d-0081-91d0-87ca-06a7dbaf6bc4","ed2267c5-75a8-c6f1-2335-35cd5b4ce65f","67e75152-59fe-afad-129c-773614bf9432","c8311606-5242-9ecd-2dbf-0106f0a345ff","386f308f-7aa0-d897-7c66-4f6e4b97d616","b0bc2feb-2294-599b-2403-19e5fa0216bd","4f25f6d4-1876-eda3-929d-a6649ac1ee5c","30f5aab5-097d-ff01-9d4f-ad9f0613efd8","a0aa1214-8b73-c5b5-9c66-87153e7619ad","d0d5a2d3-3bde-b533-7673-40f5ae913b09","e75b9f49-c56e-8ce3-b85c-d16517b967f3","42f8bbf4-29b3-267c-91cb-f19182b84eb6","c70f5532-42bd-0952-0d6e-65698ea52919","ceb22edb-0537-0f0d-64ac-399f83a112b8","e1f6888e-eaf8-9c11-90f1-ce178b7e9caf","e0de9b37-7a19-95a2-a0b0-fb643a5e0395","6b8dfba5-e5f2-0f5c-a5e9-722c498c3144","3a7631fd-36b1-4e3d-3c91-147ec71b7eae","ae453de6-a1d7-2d4a-cbf2-34986025472a","54a53c4e-cc00-a56f-5844-0fb761054b01","01333453-e3c7-9e2d-243f-e924a1b30417","470f45c6-b77e-e24e-2aa2-79f8fc5045f3","05a37a08-19f0-55a1-b108-0f32dd8c04a1","80e69820-72e9-a457-8ebd-e8abb5ad35b4","58ef34f9-ecb1-ef84-9e2e-54f1c677f74c","7ffcaa13-4a85-d136-a1d6-d8f2d5cb29be","cd0feb6f-a64e-078d-fe86-476b4dd955ca","196cc020-bc63-9142-0d5e-02765302f016","cce21215-7ab5-159d-5d1c-3719faab38c3","f509a2aa-5be7-d22e-447b-32274a303822","88170da3-cc83-7e27-3b30-2ca476756fd1","251e23b7-d18a-6f8e-ca32-96766ba64e4e","fd3f641f-7be9-67b7-c67b-18525c58cc5a","69e799e0-703b-1f1c-3d27-75866f279b39","802ae7c0-24a1-f20f-045a-6c6b4df47cd3","0f0b7625-b9e1-dca4-2606-072e5fccaa31","77f324b3-7cdc-d850-9951-12390a859f0c","0816c30a-f52a-9788-caa8-1d86cadea9cb","eeb42185-8eda-aa87-7706-43b63f6a7b3b","b4f48996-d658-782d-1e2f-d57dd6e74dbd","0403ea07-0e88-dd55-1aee-1fb891a6843b","4ef7d81f-f877-8550-184b-d6304ce251e9","73fb670c-8b5c-1de4-0449-1848ac6fb52b","87c7ac49-ba97-be87-74b1-af93cf4083eb","dc22d4cb-3fcc-58db-0907-3187abab5aec","8c433c94-1325-b717-b0eb-fc90e80341eb","e47733a9-8844-7e9a-0206-0587bf92c674","227c4c63-ad76-448a-96bc-7125a8c0a326","fa9dd43b-d968-1199-18c5-853a8d041206","5c1f7566-a99e-9852-e639-834a92b2b6eb","0bcc6ea2-ffb4-5a92-7822-41dfa442dd2e","75b0e217-1e19-907a-7cd9-0238653b52dc","18d301e3-ffd1-c8cf-3633-63e1cc230151","2cda18be-3670-5b3e-a008-3b81da1d06b2","6605236f-0541-891c-8936-f08ef6f7ff28","ed151a05-205f-ae5b-8058-d0eb73495472","e95e31f8-9f8f-e19c-74f2-5dc46b0dde65","c105fe53-bf9d-ba06-6ced-9f7905c43554","cffb03f0-6d1c-f858-d484-e5be9de0872d","2cc24f10-c292-ac32-d835-0c21cb8b0f0a","75e67112-b6c7-c07c-c544-074b8f66efd9","9593893a-614b-faa3-3383-183b99bc3e5c","6698b0f9-755d-6372-82a5-be2910e9162f","76f724e3-5e13-b697-1ba1-25c471df2b05","ad3d1908-2f2b-317f-5e72-7bf3db4347c1","7c2fcb56-4328-ca84-c403-dab558a2a598","1a3417d9-08a8-3833-469c-517c245542f3","3bbed0ce-d529-4045-5489-4025aa0da45d","4be47d3c-731b-a22b-d74d-aa8723129160","2c95ceb1-1385-4856-37a6-540feafe8388","c0753cd8-dc7c-d757-eb4e-ecb1171c17eb","c6229668-e69b-52a7-21ec-9e35d031ef4f","da26afc4-6fbd-3d13-531e-faec20f4fe5f","4f7644e1-da88-87cc-dbc9-bcba824d43f1","86451567-993f-e924-c4f8-fdfb3fa4ba96","1d76ce52-f0a3-272f-45b3-30e29ba30a44","9c98364d-1042-cffb-8980-39b02b6749d6","9e88b58a-390a-2c92-2424-b590332a013d","0d677597-5300-22d2-4627-0c240656f884","c86aea5b-f969-2b76-5d02-2d4cc398d678","d6691ff1-1ea6-8c54-7c54-687b1a8374d1","7be41990-ce88-5180-f499-045c618d98a7","3c87c0b7-0a90-ec84-f641-1a80026fb70f","74b2cad5-195b-7acf-deff-856de6cd59f0","85ce5307-9e06-9102-8d99-c37c846155e1","380b26f6-cfa0-9708-0ffa-76119d7aaea7","dfb19d96-4f30-c012-d736-e4b31e93cc6d","a9268c84-cf78-9489-df75-4fe2f6f96668"]}],"textures":[{"path":"C:\\Users\\hawkt\\Documents\\GitHub\\cosmere\\src\\surgebinding\\resources\\assets\\surgebinding\\textures\\item\\models\\shardblade_model\\lightweaver_honorblade.png","name":"lightweaver_honorblade.png","folder":"item/models/shardblade_model","namespace":"surgebinding","id":"0","particle":true,"render_mode":"default","visible":true,"mode":"bitmap","saved":true,"uuid":"27e3e37a-3ae7-d33e-92f4-6d4cbf413c64","relative_path":"../../src/surgebinding/resources/assets/surgebinding/textures/item/models/shardblade_model/lightweaver_honorblade.png","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAOZJREFUWEdjnFDf9p8BD3j24jODlAQvPiUociD16ACk/07TdIYp/x8zossxDnsHwEKPrBCABSclUTDqAIpDgJTgB6Vw9FwA01/QWIWRA0Dq8eYCUrMgLgeAzOma2T4EHUB06YOkEFsUkB0C1HIArjKAYBoYkg5AT4j46gGahMCoA7DlgpGVCAc0BEhtDVE9F5DlgLL0SrxtQmztO5gYNgtJaQ+CQ4BUB5BaOhIsiEYdAAsBUls+pEQFRQURckL7NmsJKfaiqMXWKQEnwhxGWay5AJcGsl2AQyPWdhq1LcFn3qgDRkMAAN3zFDCqtj2UAAAAAElFTkSuQmCC"}],"display":{"thirdperson_righthand":{"rotation":[0,90,0],"translation":[0,12,1.25],"scale":[2.65,2.65,2.65]},"thirdperson_lefthand":{"rotation":[0,-90,0],"translation":[0,12,1.25],"scale":[2.65,2.65,2.65]},"firstperson_righthand":{"rotation":[0,90,0],"translation":[0,7.75,0],"scale":[1.85,1.85,1.85]},"firstperson_lefthand":{"rotation":[0,-90,0],"translation":[0,7.75,0],"scale":[1.85,1.85,1.85]},"ground":{"translation":[0,3.75,0]},"gui":{"rotation":[0,0,-45],"translation":[1,1,0]},"fixed":{"rotation":[0,180,-45],"translation":[-2,2,0]}}} \ No newline at end of file diff --git a/blockbench/surgebinding/shardblades/honorblades/skybreaker_honorblade.bbmodel b/blockbench/surgebinding/shardblades/honorblades/skybreaker_honorblade.bbmodel new file mode 100644 index 000000000..6527b8e1f --- /dev/null +++ b/blockbench/surgebinding/shardblades/honorblades/skybreaker_honorblade.bbmodel @@ -0,0 +1 @@ +{"meta":{"format_version":"4.0","model_format":"java_block","box_uv":false},"name":"skybreaker_honorblade","parent":"","ambientocclusion":true,"front_gui_light":false,"visible_box":[1,1,0],"variable_placeholders":"","variable_placeholder_buttons":[],"resolution":{"width":32,"height":32},"elements":[{"name":"cube","rescale":false,"locked":false,"from":[8,7.4375,8],"to":[8.5,18.6875,8.125],"autouv":0,"color":1,"origin":[0.25,0,0.5],"faces":{"north":{"uv":[0,0,1,11],"texture":0},"east":{"uv":[1,0,2,11],"texture":0},"south":{"uv":[2,0,3,11],"texture":0},"west":{"uv":[3,0,4,11],"texture":0},"up":{"uv":[3,16,2,15],"texture":0},"down":{"uv":[16,2,15,3],"texture":0}},"type":"cube","uuid":"6d22e45e-fcb0-286a-7519-80aebd509978"},{"name":"cube","rescale":false,"locked":false,"from":[8.5625,7.5,8],"to":[9.0625,18.6875,8.125],"autouv":0,"color":3,"origin":[0.25,0,0.5],"faces":{"north":{"uv":[4,0,5,11],"texture":0},"east":{"uv":[5,0,6,11],"texture":0},"south":{"uv":[6,0,7,11],"texture":0},"west":{"uv":[7,0,8,11],"texture":0},"up":{"uv":[4,16,3,15],"texture":0},"down":{"uv":[16,3,15,4],"texture":0}},"type":"cube","uuid":"5dd99fb7-4030-8c12-769a-23e63187ad00"},{"name":"cube","rescale":false,"locked":false,"from":[8.59209,18.29556,8],"to":[8.84209,20.17056,8.125],"autouv":0,"color":7,"rotation":[0,0,22.5],"origin":[7.967089999999999,19.04556,8.0625],"faces":{"north":{"uv":[11,7,12,9],"texture":0},"east":{"uv":[8,11,9,13],"texture":0},"south":{"uv":[9,11,10,13],"texture":0},"west":{"uv":[11,9,12,11],"texture":0},"up":{"uv":[5,16,4,15],"texture":0},"down":{"uv":[16,4,15,5],"texture":0}},"type":"cube","uuid":"6d2f2554-2d33-7c43-06ff-9e328078a149"},{"name":"cube","rescale":false,"locked":false,"from":[4.90212,7.91565,7.9375],"to":[5.15212,10.35315,8.1875],"autouv":0,"color":1,"rotation":[0,0,22.5],"origin":[8.02712,18.16565,8.0625],"faces":{"north":{"uv":[10,11,11,13],"texture":0},"east":{"uv":[11,11,12,13],"texture":0},"south":{"uv":[12,0,13,2],"texture":0},"west":{"uv":[12,2,13,4],"texture":0},"up":{"uv":[6,16,5,15],"texture":0},"down":{"uv":[16,5,15,6],"texture":0}},"type":"cube","uuid":"97ca999b-e121-3f53-0c82-eb3c843d66cf"},{"name":"cube","rescale":false,"locked":false,"from":[8.13932,9.80706,7.983550000000001],"to":[8.35932,9.99456,8.108550000000001],"autouv":0,"color":1,"rotation":[-22.5,0,0],"origin":[8.24932,10.02581,8.046050000000001],"faces":{"north":{"uv":[6,15,7,16],"texture":0},"east":{"uv":[15,6,16,7],"texture":0},"south":{"uv":[7,15,8,16],"texture":0},"west":{"uv":[15,7,16,8],"texture":0},"up":{"uv":[9,16,8,15],"texture":0},"down":{"uv":[16,8,15,9],"texture":0}},"type":"cube","uuid":"3d55e5ae-43bc-58dc-fc76-9869c2f4b0fe"},{"name":"cube","rescale":false,"locked":false,"from":[8.13932,9.66013,7.9375],"to":[8.35932,9.84763,8.1875],"autouv":0,"color":3,"origin":[8.24932,9.75388,8.125],"faces":{"north":{"uv":[9,15,10,16],"texture":0},"east":{"uv":[15,9,16,10],"texture":0},"south":{"uv":[10,15,11,16],"texture":0},"west":{"uv":[15,10,16,11],"texture":0},"up":{"uv":[12,16,11,15],"texture":0},"down":{"uv":[16,11,15,12],"texture":0}},"type":"cube","uuid":"fd7d9729-4a36-7696-f9c5-5f5397cc73f7"},{"name":"cube","rescale":false,"locked":false,"from":[8.13932,9.81657,7.96862],"to":[8.35932,10.00407,8.09362],"autouv":0,"color":1,"rotation":[22.5,0,0],"origin":[8.24932,9.91032,8.03112],"faces":{"north":{"uv":[12,15,13,16],"texture":0},"east":{"uv":[15,12,16,13],"texture":0},"south":{"uv":[13,15,14,16],"texture":0},"west":{"uv":[15,13,16,14],"texture":0},"up":{"uv":[15,16,14,15],"texture":0},"down":{"uv":[16,14,15,15],"texture":0}},"type":"cube","uuid":"6eabdd8e-d43a-fb86-0cdb-d8f24bdd4ae4"},{"name":"cube","rescale":false,"locked":false,"from":[7.20653,7.09567,7.9375],"to":[9.29653,7.59567,8.1875],"autouv":0,"color":6,"origin":[7.64403,8.47067,8.0625],"faces":{"north":{"uv":[4,12,6,13],"texture":0},"east":{"uv":[15,15,16,16],"texture":0},"south":{"uv":[6,12,8,13],"texture":0},"west":{"uv":[16,0,17,1],"texture":0},"up":{"uv":[14,8,12,7],"texture":0},"down":{"uv":[14,8,12,9],"texture":0}},"type":"cube","uuid":"11b3f62a-d00f-30e3-a26b-6a83e1ab27ab"},{"name":"cube","rescale":false,"locked":false,"from":[7.814489999999999,7.08118,7.8125],"to":[8.74749,7.20618,8.3125],"autouv":0,"color":7,"origin":[15.84451,9.45618,7.6875],"faces":{"north":{"uv":[16,1,17,2],"texture":0},"east":{"uv":[2,16,3,17],"texture":0},"south":{"uv":[16,2,17,3],"texture":0},"west":{"uv":[3,16,4,17],"texture":0},"up":{"uv":[17,4,16,3],"texture":0},"down":{"uv":[5,16,4,17],"texture":0}},"type":"cube","uuid":"2173fcf7-4059-7d09-c79b-7473378a4a17"},{"name":"cube","rescale":false,"locked":false,"from":[8.02975,3.5615,7.8125],"to":[8.52975,7.124,8.3125],"autouv":0,"color":1,"origin":[8.34225,9.4365,8.0625],"faces":{"north":{"uv":[11,0,12,4],"texture":0},"east":{"uv":[1,11,2,15],"texture":0},"south":{"uv":[2,11,3,15],"texture":0},"west":{"uv":[3,11,4,15],"texture":0},"up":{"uv":[17,5,16,4],"texture":0},"down":{"uv":[6,16,5,17],"texture":0}},"type":"cube","uuid":"0c16b3c7-7e15-28c0-f6c7-1ba5bebe9490"},{"name":"cube","rescale":false,"locked":false,"from":[9.13492,7.20551,7.9375],"to":[9.57242,7.45551,8.1875],"autouv":0,"color":5,"rotation":[0,0,-45],"origin":[9.38492,7.33051,8.0625],"faces":{"north":{"uv":[16,5,17,6],"texture":0},"east":{"uv":[6,16,7,17],"texture":0},"south":{"uv":[16,6,17,7],"texture":0},"west":{"uv":[7,16,8,17],"texture":0},"up":{"uv":[17,8,16,7],"texture":0},"down":{"uv":[9,16,8,17],"texture":0}},"type":"cube","uuid":"8ecc6989-5c08-a262-1450-035d02e288fd"},{"name":"cube","rescale":false,"locked":false,"from":[9.41596,7.13057,7.9375],"to":[9.66596,7.38057,8.1875],"autouv":0,"color":4,"rotation":[0,0,-22.5],"origin":[9.54096,7.25557,8.0625],"faces":{"north":{"uv":[16,8,17,9],"texture":0},"east":{"uv":[9,16,10,17],"texture":0},"south":{"uv":[16,9,17,10],"texture":0},"west":{"uv":[10,16,11,17],"texture":0},"up":{"uv":[17,11,16,10],"texture":0},"down":{"uv":[12,16,11,17],"texture":0}},"type":"cube","uuid":"40816ee4-47ca-ee58-8269-512f3768b6ea"},{"name":"cube","rescale":false,"locked":false,"from":[10.25605,7.19822,7.9375],"to":[10.50605,7.44822,8.1875],"autouv":0,"color":7,"rotation":[0,0,-45],"origin":[10.38105,7.32322,8.0625],"faces":{"north":{"uv":[16,11,17,12],"texture":0},"east":{"uv":[12,16,13,17],"texture":0},"south":{"uv":[16,12,17,13],"texture":0},"west":{"uv":[13,16,14,17],"texture":0},"up":{"uv":[17,14,16,13],"texture":0},"down":{"uv":[15,16,14,17],"texture":0}},"type":"cube","uuid":"531e46c2-453d-c9d4-26fc-1c62c78743ba"},{"name":"cube","rescale":false,"locked":false,"from":[10.6525,7.55178,7.9375],"to":[10.9025,7.80178,8.1875],"autouv":0,"color":6,"rotation":[0,0,-45],"origin":[10.2775,7.67678,8.0625],"faces":{"north":{"uv":[16,14,17,15],"texture":0},"east":{"uv":[15,16,16,17],"texture":0},"south":{"uv":[16,15,17,16],"texture":0},"west":{"uv":[16,16,17,17],"texture":0},"up":{"uv":[18,1,17,0],"texture":0},"down":{"uv":[2,17,1,18],"texture":0}},"type":"cube","uuid":"2f2eee54-b502-6598-82dc-b267d7dce481"},{"name":"cube","rescale":false,"locked":false,"from":[10.38105,7.25,7.9375],"to":[10.63105,7.5,8.1875],"autouv":0,"color":5,"origin":[10.50605,7.375,8.0625],"faces":{"north":{"uv":[17,1,18,2],"texture":0},"east":{"uv":[2,17,3,18],"texture":0},"south":{"uv":[17,2,18,3],"texture":0},"west":{"uv":[3,17,4,18],"texture":0},"up":{"uv":[18,4,17,3],"texture":0},"down":{"uv":[5,17,4,18],"texture":0}},"type":"cube","uuid":"da03df4b-2612-b057-c9c5-bb14dde9d7ac"},{"name":"cube","rescale":false,"locked":false,"from":[10.25605,6.94822,7.9375],"to":[10.50605,7.19822,8.1875],"autouv":0,"color":1,"rotation":[0,0,45],"origin":[10.38105,7.07322,8.0625],"faces":{"north":{"uv":[17,4,18,5],"texture":0},"east":{"uv":[5,17,6,18],"texture":0},"south":{"uv":[17,5,18,6],"texture":0},"west":{"uv":[6,17,7,18],"texture":0},"up":{"uv":[18,7,17,6],"texture":0},"down":{"uv":[8,17,7,18],"texture":0}},"type":"cube","uuid":"782f5ef3-1ad8-76e1-1231-1782e7a2c142"},{"name":"cube","rescale":false,"locked":false,"from":[10.38105,6.89645,7.9375],"to":[10.63105,7.14645,8.1875],"autouv":0,"color":4,"origin":[10.50605,7.02145,8.0625],"faces":{"north":{"uv":[17,7,18,8],"texture":0},"east":{"uv":[8,17,9,18],"texture":0},"south":{"uv":[17,8,18,9],"texture":0},"west":{"uv":[9,17,10,18],"texture":0},"up":{"uv":[18,10,17,9],"texture":0},"down":{"uv":[11,17,10,18],"texture":0}},"type":"cube","uuid":"c7b86106-ad18-6867-e14c-31430c2a1d8f"},{"name":"cube","rescale":false,"locked":false,"from":[10.6525,6.59467,7.9375],"to":[10.9025,6.84467,8.1875],"autouv":0,"color":0,"rotation":[0,0,45],"origin":[10.2775,6.71967,8.0625],"faces":{"north":{"uv":[17,10,18,11],"texture":0},"east":{"uv":[11,17,12,18],"texture":0},"south":{"uv":[17,11,18,12],"texture":0},"west":{"uv":[12,17,13,18],"texture":0},"up":{"uv":[18,13,17,12],"texture":0},"down":{"uv":[14,17,13,18],"texture":0}},"type":"cube","uuid":"04df3f2c-68c7-1d5d-22bb-dbe0fdc9563c"},{"name":"cube","rescale":false,"locked":false,"from":[5.99395,7.19822,7.9375],"to":[6.24395,7.44822,8.1875],"autouv":0,"color":6,"rotation":[0,0,45],"origin":[6.11895,7.32322,8.0625],"faces":{"north":{"uv":[17,13,18,14],"texture":0},"east":{"uv":[14,17,15,18],"texture":0},"south":{"uv":[17,14,18,15],"texture":0},"west":{"uv":[15,17,16,18],"texture":0},"up":{"uv":[18,16,17,15],"texture":0},"down":{"uv":[17,17,16,18],"texture":0}},"type":"cube","uuid":"a4cc58fe-b942-cbd2-6e0f-5e2796c50c0b"},{"name":"cube","rescale":false,"locked":false,"from":[5.86895,7.25,7.9375],"to":[6.11895,7.5,8.1875],"autouv":0,"color":2,"origin":[5.99395,7.375,8.0625],"faces":{"north":{"uv":[17,16,18,17],"texture":0},"east":{"uv":[17,17,18,18],"texture":0},"south":{"uv":[18,0,19,1],"texture":0},"west":{"uv":[1,18,2,19],"texture":0},"up":{"uv":[19,2,18,1],"texture":0},"down":{"uv":[3,18,2,19],"texture":0}},"type":"cube","uuid":"bb431815-b97f-8785-9a26-72e7d42d4c83"},{"name":"cube","rescale":false,"locked":false,"from":[5.5975,7.55178,7.9375],"to":[5.8475,7.80178,8.1875],"autouv":0,"color":2,"rotation":[0,0,45],"origin":[6.2225,7.67678,8.0625],"faces":{"north":{"uv":[18,2,19,3],"texture":0},"east":{"uv":[3,18,4,19],"texture":0},"south":{"uv":[18,3,19,4],"texture":0},"west":{"uv":[4,18,5,19],"texture":0},"up":{"uv":[19,5,18,4],"texture":0},"down":{"uv":[6,18,5,19],"texture":0}},"type":"cube","uuid":"089e720b-9580-1114-6042-9c374631d4f1"},{"name":"cube","rescale":false,"locked":false,"from":[5.5975,6.59467,7.9375],"to":[5.8475,6.84467,8.1875],"autouv":0,"color":6,"rotation":[0,0,-45],"origin":[6.2225,6.71967,8.0625],"faces":{"north":{"uv":[18,5,19,6],"texture":0},"east":{"uv":[6,18,7,19],"texture":0},"south":{"uv":[18,6,19,7],"texture":0},"west":{"uv":[7,18,8,19],"texture":0},"up":{"uv":[19,8,18,7],"texture":0},"down":{"uv":[9,18,8,19],"texture":0}},"type":"cube","uuid":"ceb484ca-c1cf-2506-ac6b-d8abfa05e00d"},{"name":"cube","rescale":false,"locked":false,"from":[5.86895,6.89645,7.9375],"to":[6.11895,7.14645,8.1875],"autouv":0,"color":3,"origin":[5.99395,7.02145,8.0625],"faces":{"north":{"uv":[18,8,19,9],"texture":0},"east":{"uv":[9,18,10,19],"texture":0},"south":{"uv":[18,9,19,10],"texture":0},"west":{"uv":[10,18,11,19],"texture":0},"up":{"uv":[19,11,18,10],"texture":0},"down":{"uv":[12,18,11,19],"texture":0}},"type":"cube","uuid":"a897781b-2005-ab21-65ce-66868ccf89cd"},{"name":"cube","rescale":false,"locked":false,"from":[5.99395,6.94822,7.9375],"to":[6.24395,7.19822,8.1875],"autouv":0,"color":2,"rotation":[0,0,-45],"origin":[6.11895,7.07322,8.0625],"faces":{"north":{"uv":[18,11,19,12],"texture":0},"east":{"uv":[12,18,13,19],"texture":0},"south":{"uv":[18,12,19,13],"texture":0},"west":{"uv":[13,18,14,19],"texture":0},"up":{"uv":[19,14,18,13],"texture":0},"down":{"uv":[15,18,14,19],"texture":0}},"type":"cube","uuid":"7906c124-bef8-634f-e70d-d9af29a26476"},{"name":"cube","rescale":false,"locked":false,"from":[9.24533,7.07322,7.9375],"to":[10.80783,7.32322,8.1875],"autouv":0,"color":0,"origin":[9.87033,7.19822,8.0625],"faces":{"north":{"uv":[12,9,14,10],"texture":0},"east":{"uv":[18,14,19,15],"texture":0},"south":{"uv":[12,10,14,11],"texture":0},"west":{"uv":[15,18,16,19],"texture":0},"up":{"uv":[14,12,12,11],"texture":0},"down":{"uv":[14,12,12,13],"texture":0}},"type":"cube","uuid":"af71431a-6bcf-c19f-8b9f-80a3402d2d03"},{"name":"cube","rescale":false,"locked":false,"from":[6.93064,7.20551,7.9375],"to":[7.36814,7.45551,8.1875],"autouv":0,"color":1,"rotation":[0,0,45],"origin":[7.11814,7.33051,8.0625],"faces":{"north":{"uv":[18,15,19,16],"texture":0},"east":{"uv":[16,18,17,19],"texture":0},"south":{"uv":[18,16,19,17],"texture":0},"west":{"uv":[17,18,18,19],"texture":0},"up":{"uv":[19,18,18,17],"texture":0},"down":{"uv":[19,18,18,19],"texture":0}},"type":"cube","uuid":"4cb39891-a164-3e76-0b98-3a48e260e08a"},{"name":"cube","rescale":false,"locked":false,"from":[6.8371,7.13057,7.9375],"to":[7.0871,7.38057,8.1875],"autouv":0,"color":5,"rotation":[0,0,22.5],"origin":[6.9621,7.25557,8.0625],"faces":{"north":{"uv":[19,0,20,1],"texture":0},"east":{"uv":[1,19,2,20],"texture":0},"south":{"uv":[19,1,20,2],"texture":0},"west":{"uv":[2,19,3,20],"texture":0},"up":{"uv":[20,3,19,2],"texture":0},"down":{"uv":[4,19,3,20],"texture":0}},"type":"cube","uuid":"75b3731c-e12e-4309-4497-df7c92d72eb4"},{"name":"cube","rescale":false,"locked":false,"from":[7.912610000000001,6.58793,7.8125],"to":[8.16261,7.15043,8.3125],"autouv":0,"color":2,"rotation":[0,0,22.5],"origin":[8.03761,6.86918,8.0625],"faces":{"north":{"uv":[19,3,20,4],"texture":0},"east":{"uv":[4,19,5,20],"texture":0},"south":{"uv":[19,4,20,5],"texture":0},"west":{"uv":[5,19,6,20],"texture":0},"up":{"uv":[20,6,19,5],"texture":0},"down":{"uv":[7,19,6,20],"texture":0}},"type":"cube","uuid":"79919191-deeb-0880-1e19-217b865cbda1"},{"name":"cube","rescale":false,"locked":false,"from":[6.96184,2.68712,7.8125],"to":[7.21184,3.24962,8.3125],"autouv":0,"color":7,"rotation":[0,0,22.5],"origin":[7.08684,6.71837,8.0625],"faces":{"north":{"uv":[19,6,20,7],"texture":0},"east":{"uv":[7,19,8,20],"texture":0},"south":{"uv":[19,7,20,8],"texture":0},"west":{"uv":[8,19,9,20],"texture":0},"up":{"uv":[20,9,19,8],"texture":0},"down":{"uv":[10,19,9,20],"texture":0}},"type":"cube","uuid":"370be18f-5645-7817-b557-f8a9b666b62a"},{"name":"cube","rescale":false,"locked":false,"from":[7.912610000000001,2.97257,7.8125],"to":[8.16261,3.53507,8.3125],"autouv":0,"color":0,"rotation":[0,0,-22.5],"origin":[8.03761,3.25382,8.0625],"faces":{"north":{"uv":[19,9,20,10],"texture":0},"east":{"uv":[10,19,11,20],"texture":0},"south":{"uv":[19,10,20,11],"texture":0},"west":{"uv":[11,19,12,20],"texture":0},"up":{"uv":[20,12,19,11],"texture":0},"down":{"uv":[13,19,12,20],"texture":0}},"type":"cube","uuid":"6ba45eb0-fde4-e182-1227-89820385f8e1"},{"name":"cube","rescale":false,"locked":false,"from":[7.85281,2.84917,7.8125],"to":[8.10281,3.09917,8.3125],"autouv":0,"color":4,"rotation":[0,0,22.5],"origin":[7.97781,2.97417,8.0625],"faces":{"north":{"uv":[19,12,20,13],"texture":0},"east":{"uv":[13,19,14,20],"texture":0},"south":{"uv":[19,13,20,14],"texture":0},"west":{"uv":[14,19,15,20],"texture":0},"up":{"uv":[20,15,19,14],"texture":0},"down":{"uv":[16,19,15,20],"texture":0}},"type":"cube","uuid":"a4b64b0b-d532-9b3a-7d70-1fa8dd6ef8d5"},{"name":"cube","rescale":false,"locked":false,"from":[8.45669,2.84917,7.8125],"to":[8.70669,3.09917,8.3125],"autouv":0,"color":1,"rotation":[0,0,-22.5],"origin":[8.58169,2.97417,8.0625],"faces":{"north":{"uv":[19,15,20,16],"texture":0},"east":{"uv":[16,19,17,20],"texture":0},"south":{"uv":[19,16,20,17],"texture":0},"west":{"uv":[17,19,18,20],"texture":0},"up":{"uv":[20,18,19,17],"texture":0},"down":{"uv":[19,19,18,20],"texture":0}},"type":"cube","uuid":"c6cbdeb0-ad83-0cca-384f-c2c968d1c48b"},{"name":"cube","rescale":false,"locked":false,"from":[8.02975,2.97257,8.17964],"to":[8.52975,3.53507,8.42964],"autouv":0,"color":2,"rotation":[-22.5,0,0],"origin":[8.27975,3.25382,8.30464],"faces":{"north":{"uv":[19,18,20,19],"texture":0},"east":{"uv":[19,19,20,20],"texture":0},"south":{"uv":[20,0,21,1],"texture":0},"west":{"uv":[1,20,2,21],"texture":0},"up":{"uv":[21,2,20,1],"texture":0},"down":{"uv":[3,20,2,21],"texture":0}},"type":"cube","uuid":"94604700-ba0e-7e2b-5415-4ce0f95c5e21"},{"name":"cube","rescale":false,"locked":false,"from":[8.02975,2.97257,7.69536],"to":[8.52975,3.53507,7.945360000000001],"autouv":0,"color":3,"rotation":[22.5,0,0],"origin":[8.27975,3.25382,7.820360000000001],"faces":{"north":{"uv":[20,2,21,3],"texture":0},"east":{"uv":[3,20,4,21],"texture":0},"south":{"uv":[20,3,21,4],"texture":0},"west":{"uv":[4,20,5,21],"texture":0},"up":{"uv":[21,5,20,4],"texture":0},"down":{"uv":[6,20,5,21],"texture":0}},"type":"cube","uuid":"98d55817-14b2-e0f7-712e-7ad1fb98a76b"},{"name":"cube","rescale":false,"locked":false,"from":[8.02975,2.80397,8.466660000000001],"to":[8.52975,3.05397,8.71666],"autouv":0,"color":2,"rotation":[22.5,0,0],"origin":[8.27975,3.52272,8.59166],"faces":{"north":{"uv":[20,5,21,6],"texture":0},"east":{"uv":[6,20,7,21],"texture":0},"south":{"uv":[20,6,21,7],"texture":0},"west":{"uv":[7,20,8,21],"texture":0},"up":{"uv":[21,8,20,7],"texture":0},"down":{"uv":[9,20,8,21],"texture":0}},"type":"cube","uuid":"222c92a0-dce1-7901-9df6-2546c1574036"},{"name":"cube","rescale":false,"locked":false,"from":[8.02975,2.84917,7.63556],"to":[8.52975,3.09917,7.88556],"autouv":0,"color":3,"rotation":[-22.5,0,0],"origin":[8.27975,2.97417,7.76056],"faces":{"north":{"uv":[20,8,21,9],"texture":0},"east":{"uv":[9,20,10,21],"texture":0},"south":{"uv":[20,9,21,10],"texture":0},"west":{"uv":[10,20,11,21],"texture":0},"up":{"uv":[21,11,20,10],"texture":0},"down":{"uv":[12,20,11,21],"texture":0}},"type":"cube","uuid":"ff712ec9-ca05-b931-44f7-294a3f6f3d6b"},{"name":"cube","rescale":false,"locked":false,"from":[8.02975,2.81085,7.69291],"to":[8.52975,3.06085,8.43291],"autouv":0,"color":7,"origin":[8.27975,2.93585,7.817910000000001],"faces":{"north":{"uv":[20,11,21,12],"texture":0},"east":{"uv":[12,20,13,21],"texture":0},"south":{"uv":[20,12,21,13],"texture":0},"west":{"uv":[13,20,14,21],"texture":0},"up":{"uv":[21,14,20,13],"texture":0},"down":{"uv":[15,20,14,21],"texture":0}},"type":"cube","uuid":"1a791508-350d-d602-59e1-416c67b06555"},{"name":"cube","rescale":false,"locked":false,"from":[7.909749999999999,2.81085,7.812909999999999],"to":[8.64975,3.06085,8.312909999999999],"autouv":0,"color":3,"origin":[8.27975,2.93585,8.062909999999999],"faces":{"north":{"uv":[20,14,21,15],"texture":0},"east":{"uv":[15,20,16,21],"texture":0},"south":{"uv":[20,15,21,16],"texture":0},"west":{"uv":[16,20,17,21],"texture":0},"up":{"uv":[21,17,20,16],"texture":0},"down":{"uv":[18,20,17,21],"texture":0}},"type":"cube","uuid":"9845136e-5070-d7ed-f10c-081783b613f2"},{"name":"cube","rescale":false,"locked":false,"from":[8.3969,6.58793,7.8125],"to":[8.6469,7.15043,8.3125],"autouv":0,"color":4,"rotation":[0,0,-22.5],"origin":[8.5219,6.86918,8.0625],"faces":{"north":{"uv":[20,17,21,18],"texture":0},"east":{"uv":[18,20,19,21],"texture":0},"south":{"uv":[20,18,21,19],"texture":0},"west":{"uv":[19,20,20,21],"texture":0},"up":{"uv":[21,20,20,19],"texture":0},"down":{"uv":[21,20,20,21],"texture":0}},"type":"cube","uuid":"53cd344d-4803-084c-708a-7c3187b20172"},{"name":"cube","rescale":false,"locked":false,"from":[5.69217,7.07322,7.9375],"to":[9.25467,7.32322,8.1875],"autouv":0,"color":5,"origin":[6.69217,7.19822,8.0625],"faces":{"north":{"uv":[4,11,8,12],"texture":0},"east":{"uv":[21,0,22,1],"texture":0},"south":{"uv":[11,4,15,5],"texture":0},"west":{"uv":[1,21,2,22],"texture":0},"up":{"uv":[15,6,11,5],"texture":0},"down":{"uv":[15,6,11,7],"texture":0}},"type":"cube","uuid":"074a2bc1-f5e7-066f-1d80-986de116b3b9"},{"name":"cube","rescale":false,"locked":false,"from":[7.55578,7.47647,7.9375],"to":[7.80578,9.91397,8.1875],"autouv":0,"color":6,"rotation":[0,0,-22.5],"origin":[7.68078,8.41397,8.0625],"faces":{"north":{"uv":[13,0,14,2],"texture":0},"east":{"uv":[13,2,14,4],"texture":0},"south":{"uv":[4,13,5,15],"texture":0},"west":{"uv":[5,13,6,15],"texture":0},"up":{"uv":[22,2,21,1],"texture":0},"down":{"uv":[3,21,2,22],"texture":0}},"type":"cube","uuid":"4e858ef0-1e0e-3635-90d8-37c07208c361"},{"name":"cube","rescale":false,"locked":false,"from":[7.80578,7.47647,7.9375],"to":[8.05578,9.41397,8.1875],"autouv":0,"color":2,"rotation":[0,0,-22.5],"origin":[7.68078,8.41397,8.0625],"faces":{"north":{"uv":[6,13,7,15],"texture":0},"east":{"uv":[7,13,8,15],"texture":0},"south":{"uv":[8,13,9,15],"texture":0},"west":{"uv":[9,13,10,15],"texture":0},"up":{"uv":[22,3,21,2],"texture":0},"down":{"uv":[4,21,3,22],"texture":0}},"type":"cube","uuid":"38a6ddd8-b8da-0896-123d-9fa3e22f4111"},{"name":"cube","rescale":false,"locked":false,"from":[8.05578,7.53897,7.9375],"to":[8.30578,9.16397,8.1875],"autouv":0,"color":4,"rotation":[0,0,-22.5],"origin":[7.68078,8.41397,8.0625],"faces":{"north":{"uv":[10,13,11,15],"texture":0},"east":{"uv":[11,13,12,15],"texture":0},"south":{"uv":[12,13,13,15],"texture":0},"west":{"uv":[13,13,14,15],"texture":0},"up":{"uv":[22,4,21,3],"texture":0},"down":{"uv":[5,21,4,22],"texture":0}},"type":"cube","uuid":"34e220b2-da0c-c490-1ba7-4b78b3e59406"},{"name":"cube","rescale":false,"locked":false,"from":[8.42371,7.19092,7.9375],"to":[8.67371,9.31592,8.1875],"autouv":0,"color":6,"rotation":[0,0,22.5],"origin":[7.92371,8.34717,8.0625],"faces":{"north":{"uv":[14,0,15,2],"texture":0},"east":{"uv":[14,2,15,4],"texture":0},"south":{"uv":[14,7,15,9],"texture":0},"west":{"uv":[14,9,15,11],"texture":0},"up":{"uv":[22,5,21,4],"texture":0},"down":{"uv":[6,21,5,22],"texture":0}},"type":"cube","uuid":"27430ac5-5b0b-61c2-ddee-e51a41bf91d4"},{"name":"cube","rescale":false,"locked":false,"from":[8.17371,7.31592,7.9375],"to":[8.42371,8.37842,8.1875],"autouv":0,"color":6,"rotation":[0,0,22.5],"origin":[7.92371,8.34717,8.0625],"faces":{"north":{"uv":[21,5,22,6],"texture":0},"east":{"uv":[6,21,7,22],"texture":0},"south":{"uv":[21,6,22,7],"texture":0},"west":{"uv":[7,21,8,22],"texture":0},"up":{"uv":[22,8,21,7],"texture":0},"down":{"uv":[9,21,8,22],"texture":0}},"type":"cube","uuid":"001bde30-51db-151b-76e1-fd055921827d"},{"name":"cube","rescale":false,"locked":false,"from":[7.9615100000000005,7.49749,7.9375],"to":[8.52401,8.55999,8.1875],"autouv":0,"color":3,"origin":[8.46151,8.02874,8.0625],"faces":{"north":{"uv":[21,8,22,9],"texture":0},"east":{"uv":[9,21,10,22],"texture":0},"south":{"uv":[21,9,22,10],"texture":0},"west":{"uv":[10,21,11,22],"texture":0},"up":{"uv":[22,11,21,10],"texture":0},"down":{"uv":[12,21,11,22],"texture":0}},"type":"cube","uuid":"4d98146c-bb6d-fa9d-17a9-a5c3e3f09960"},{"name":"cube","rescale":false,"locked":false,"from":[7.814489999999999,6.63955,8.08887],"to":[8.74749,7.26455,8.21387],"autouv":0,"color":2,"rotation":[-22.5,0,0],"origin":[8.09574,7.1708,6.83887],"faces":{"north":{"uv":[21,11,22,12],"texture":0},"east":{"uv":[12,21,13,22],"texture":0},"south":{"uv":[21,12,22,13],"texture":0},"west":{"uv":[13,21,14,22],"texture":0},"up":{"uv":[22,14,21,13],"texture":0},"down":{"uv":[15,21,14,22],"texture":0}},"type":"cube","uuid":"6e9a71bf-841e-d66a-6d7e-86e6163b8830"},{"name":"cube","rescale":false,"locked":false,"from":[7.814489999999999,7.1561,7.93929],"to":[8.74749,7.7811,8.06429],"autouv":0,"color":5,"rotation":[22.5,0,0],"origin":[8.28099,7.49985,8.00179],"faces":{"north":{"uv":[21,14,22,15],"texture":0},"east":{"uv":[15,21,16,22],"texture":0},"south":{"uv":[21,15,22,16],"texture":0},"west":{"uv":[16,21,17,22],"texture":0},"up":{"uv":[22,17,21,16],"texture":0},"down":{"uv":[18,21,17,22],"texture":0}},"type":"cube","uuid":"4a87b4a3-9638-312a-1a7b-446b47fe595a"},{"name":"cube","rescale":false,"locked":false,"from":[7.89756,19.09287,8],"to":[8.21006,20.03037,8.125],"autouv":0,"color":4,"rotation":[0,0,22.5],"origin":[8.33506,20.28037,8.0625],"faces":{"north":{"uv":[21,17,22,18],"texture":0},"east":{"uv":[18,21,19,22],"texture":0},"south":{"uv":[21,18,22,19],"texture":0},"west":{"uv":[19,21,20,22],"texture":0},"up":{"uv":[22,20,21,19],"texture":0},"down":{"uv":[21,21,20,22],"texture":0}},"type":"cube","uuid":"d2205b91-d037-977c-e507-0b921038f537"},{"name":"cube","rescale":false,"locked":false,"from":[8.28994,19.09287,8],"to":[8.60244,20.03037,8.125],"autouv":0,"color":1,"rotation":[0,0,-22.5],"origin":[8.16494,20.28037,8.0625],"faces":{"north":{"uv":[21,20,22,21],"texture":0},"east":{"uv":[21,21,22,22],"texture":0},"south":{"uv":[0,22,1,23],"texture":0},"west":{"uv":[22,0,23,1],"texture":0},"up":{"uv":[2,23,1,22],"texture":0},"down":{"uv":[23,1,22,2],"texture":0}},"type":"cube","uuid":"63834e45-a47f-ac5e-ecb5-bcaae7ca7cac"},{"name":"cube","rescale":false,"locked":false,"from":[8.14191,19.07267,8],"to":[8.36191,20.13517,8.125],"autouv":0,"color":0,"origin":[8.76062,19.91642,8.0625],"faces":{"north":{"uv":[2,22,3,23],"texture":0},"east":{"uv":[22,2,23,3],"texture":0},"south":{"uv":[3,22,4,23],"texture":0},"west":{"uv":[22,3,23,4],"texture":0},"up":{"uv":[5,23,4,22],"texture":0},"down":{"uv":[23,4,22,5],"texture":0}},"type":"cube","uuid":"1ddf7104-16cc-a410-0c7e-7d4a64bad67b"},{"name":"cube","rescale":false,"locked":false,"from":[7.6875,18.6875,8],"to":[8.8125,19.125,8.125],"autouv":0,"color":5,"origin":[8.5,20.09375,8.0625],"faces":{"north":{"uv":[5,22,6,23],"texture":0},"east":{"uv":[22,5,23,6],"texture":0},"south":{"uv":[6,22,7,23],"texture":0},"west":{"uv":[22,6,23,7],"texture":0},"up":{"uv":[8,23,7,22],"texture":0},"down":{"uv":[23,7,22,8],"texture":0}},"type":"cube","uuid":"884e4473-6934-03a6-7172-6f7989bd1678"},{"name":"cube","rescale":false,"locked":false,"from":[6.93112,18.14176,8],"to":[7.18112,20.01676,8.125],"autouv":0,"color":0,"rotation":[0,0,-22.5],"origin":[8.55612,17.14176,8.0625],"faces":{"north":{"uv":[14,11,15,13],"texture":0},"east":{"uv":[14,13,15,15],"texture":0},"south":{"uv":[15,0,16,2],"texture":0},"west":{"uv":[1,15,2,17],"texture":0},"up":{"uv":[9,23,8,22],"texture":0},"down":{"uv":[23,8,22,9],"texture":0}},"type":"cube","uuid":"43a1699d-93e2-b0f4-a26b-f488bbb3830a"},{"name":"cube","rescale":false,"locked":false,"from":[8.95898,19.7039,8],"to":[9.08398,19.8289,8.125],"autouv":0,"color":0,"rotation":[0,0,-45],"origin":[9.42773,21.0164,7.3125],"faces":{"north":{"uv":[9,22,10,23],"texture":0},"east":{"uv":[22,9,23,10],"texture":0},"south":{"uv":[10,22,11,23],"texture":0},"west":{"uv":[22,10,23,11],"texture":0},"up":{"uv":[12,23,11,22],"texture":0},"down":{"uv":[23,11,22,12],"texture":0}},"type":"cube","uuid":"0ba1f030-7b2b-ddde-eae9-ab29d1726129"},{"name":"cube","rescale":false,"locked":false,"from":[9.28577,19.89963,8],"to":[9.41077,20.02463,8.125],"autouv":0,"color":0,"rotation":[0,0,-45],"origin":[9.34827,21.52463,8.0625],"faces":{"north":{"uv":[12,22,13,23],"texture":0},"east":{"uv":[22,12,23,13],"texture":0},"south":{"uv":[13,22,14,23],"texture":0},"west":{"uv":[22,13,23,14],"texture":0},"up":{"uv":[15,23,14,22],"texture":0},"down":{"uv":[23,14,22,15],"texture":0}},"type":"cube","uuid":"79739960-1137-4b17-540a-773247324838"},{"name":"cube","rescale":false,"locked":false,"from":[8.24342,20.38316,8],"to":[8.25342,20.50816,8.125],"autouv":0,"color":5,"origin":[8.75215,20.66441,8.0625],"faces":{"north":{"uv":[0,0,0,1],"texture":0},"east":{"uv":[15,22,16,23],"texture":0},"south":{"uv":[0,0,0,1],"texture":0},"west":{"uv":[22,15,23,16],"texture":0},"up":{"uv":[0,1,0,0],"texture":0},"down":{"uv":[0,0,0,1],"texture":0}},"type":"cube","uuid":"c803f590-3f1a-3d4c-6fd0-d73cbd746155"},{"name":"cube","rescale":false,"locked":false,"from":[7.4375,7.5,8],"to":[7.9375,18.6875,8.125],"autouv":0,"color":5,"origin":[0.25,0,0.5],"faces":{"north":{"uv":[8,0,9,11],"texture":0},"east":{"uv":[9,0,10,11],"texture":0},"south":{"uv":[10,0,11,11],"texture":0},"west":{"uv":[0,11,1,22],"texture":0},"up":{"uv":[17,23,16,22],"texture":0},"down":{"uv":[23,16,22,17],"texture":0}},"type":"cube","uuid":"99c4fa7e-79c7-8091-a67c-344daae5d9aa"}],"outliner":[{"name":"Everything","origin":[8,8,8],"color":0,"uuid":"78b5fc5e-9e51-5696-c780-681926d9908f","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"Blade","origin":[8,8,8],"color":0,"uuid":"82b1f2ce-512d-9a8a-0008-a1659119d73b","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["6d22e45e-fcb0-286a-7519-80aebd509978","5dd99fb7-4030-8c12-769a-23e63187ad00","6d2f2554-2d33-7c43-06ff-9e328078a149","97ca999b-e121-3f53-0c82-eb3c843d66cf","3d55e5ae-43bc-58dc-fc76-9869c2f4b0fe","fd7d9729-4a36-7696-f9c5-5f5397cc73f7","6eabdd8e-d43a-fb86-0cdb-d8f24bdd4ae4","11b3f62a-d00f-30e3-a26b-6a83e1ab27ab","2173fcf7-4059-7d09-c79b-7473378a4a17","0c16b3c7-7e15-28c0-f6c7-1ba5bebe9490","8ecc6989-5c08-a262-1450-035d02e288fd","40816ee4-47ca-ee58-8269-512f3768b6ea","531e46c2-453d-c9d4-26fc-1c62c78743ba","2f2eee54-b502-6598-82dc-b267d7dce481","da03df4b-2612-b057-c9c5-bb14dde9d7ac","782f5ef3-1ad8-76e1-1231-1782e7a2c142","c7b86106-ad18-6867-e14c-31430c2a1d8f","04df3f2c-68c7-1d5d-22bb-dbe0fdc9563c","a4cc58fe-b942-cbd2-6e0f-5e2796c50c0b","bb431815-b97f-8785-9a26-72e7d42d4c83","089e720b-9580-1114-6042-9c374631d4f1","ceb484ca-c1cf-2506-ac6b-d8abfa05e00d","a897781b-2005-ab21-65ce-66868ccf89cd","7906c124-bef8-634f-e70d-d9af29a26476","af71431a-6bcf-c19f-8b9f-80a3402d2d03","4cb39891-a164-3e76-0b98-3a48e260e08a","75b3731c-e12e-4309-4497-df7c92d72eb4","79919191-deeb-0880-1e19-217b865cbda1","370be18f-5645-7817-b557-f8a9b666b62a","6ba45eb0-fde4-e182-1227-89820385f8e1","a4b64b0b-d532-9b3a-7d70-1fa8dd6ef8d5","c6cbdeb0-ad83-0cca-384f-c2c968d1c48b","94604700-ba0e-7e2b-5415-4ce0f95c5e21","98d55817-14b2-e0f7-712e-7ad1fb98a76b","222c92a0-dce1-7901-9df6-2546c1574036","ff712ec9-ca05-b931-44f7-294a3f6f3d6b","1a791508-350d-d602-59e1-416c67b06555","9845136e-5070-d7ed-f10c-081783b613f2","53cd344d-4803-084c-708a-7c3187b20172","074a2bc1-f5e7-066f-1d80-986de116b3b9","4e858ef0-1e0e-3635-90d8-37c07208c361","38a6ddd8-b8da-0896-123d-9fa3e22f4111","34e220b2-da0c-c490-1ba7-4b78b3e59406","27430ac5-5b0b-61c2-ddee-e51a41bf91d4","001bde30-51db-151b-76e1-fd055921827d","4d98146c-bb6d-fa9d-17a9-a5c3e3f09960","6e9a71bf-841e-d66a-6d7e-86e6163b8830","4a87b4a3-9638-312a-1a7b-446b47fe595a","d2205b91-d037-977c-e507-0b921038f537","63834e45-a47f-ac5e-ecb5-bcaae7ca7cac","1ddf7104-16cc-a410-0c7e-7d4a64bad67b","884e4473-6934-03a6-7172-6f7989bd1678","43a1699d-93e2-b0f4-a26b-f488bbb3830a","0ba1f030-7b2b-ddde-eae9-ab29d1726129","79739960-1137-4b17-540a-773247324838","c803f590-3f1a-3d4c-6fd0-d73cbd746155","99c4fa7e-79c7-8091-a67c-344daae5d9aa"]}]}],"textures":[{"path":"C:\\Users\\hawkt\\Documents\\GitHub\\cosmere\\src\\main\\resources\\assets\\cosmere\\textures\\item\\models\\shardblade_model\\skybreaker_honorblade.png","name":"skybreaker_honorblade.png","folder":"item/models/shardblade_model","namespace":"cosmere","id":"1","particle":false,"render_mode":"default","visible":true,"mode":"bitmap","saved":true,"uuid":"28b3c326-dde4-27de-b924-da8627689d39","relative_path":"../../src/main/resources/assets/cosmere/textures/item/models/shardblade_model/skybreaker_honorblade.png","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAQZJREFUWEdjXLnj8H8GIsGu1UsYdC2d4aolZSQZnj95jqL7zIFDDCYOdgwguXAPW0ZCRjNS6gB0R41sB1w+vpfh509W2kUBenyD4hk5CujuAPQENuAOACVAEKBZLgAZjh4NyKEw6oChGwKgrAQDyEUtSAyU1bDFPa5iGKSWnf03g1toDPFF8aB2AK7KhG4hQBcHoFuCL6/jq15huYDkNAAyFDkdgPjoiZFQvQ6SJ9sB5PoY3VEgB5Die5B+cINkUDkAVKPBAKhuJxWQFQKbl6wk1R4M9SCLYYDYQoisKEAOIWRXgCxFBsQ0SOEOoNT7xFqGzR6CzWZKHUdI/6gDRkNgNARGQwAAnssQMNeXREEAAAAASUVORK5CYII="}],"display":{"thirdperson_righthand":{"rotation":[0,90,0],"translation":[-0.5,4.25,1.75],"scale":[2.5,2.5,2.5]},"thirdperson_lefthand":{"rotation":[0,90,0],"translation":[-0.5,4.25,0.5],"scale":[2.5,2.5,2.5]},"firstperson_righthand":{"rotation":[0,90,0],"translation":[0,1,0],"scale":[2.5,2.5,2.5]},"firstperson_lefthand":{"rotation":[0,90,0],"translation":[0,1,-0.5],"scale":[2.5,2.5,2.5]},"ground":{"translation":[0,1,0]},"gui":{"rotation":[0,0,-45],"translation":[-1.5,-1.5,0]},"fixed":{"rotation":[0,0,45],"translation":[0,0,-0.25]}}} \ No newline at end of file diff --git a/blockbench/surgebinding/shardblades/honorblades/stoneward_honorblade.bbmodel b/blockbench/surgebinding/shardblades/honorblades/stoneward_honorblade.bbmodel new file mode 100644 index 000000000..e1c5c9670 --- /dev/null +++ b/blockbench/surgebinding/shardblades/honorblades/stoneward_honorblade.bbmodel @@ -0,0 +1 @@ +{"meta":{"format_version":"4.0","model_format":"java_block","box_uv":false},"name":"stoneward_honorblade","parent":"","ambientocclusion":true,"front_gui_light":false,"visible_box":[1,1,0],"variable_placeholders":"","variable_placeholder_buttons":[],"resolution":{"width":32,"height":32},"elements":[{"name":"cube","rescale":false,"locked":false,"from":[7.5,2.7026233662309913,7.96875],"to":[8.5,14.952623366230991,8.03125],"autouv":0,"color":7,"origin":[0,-2.0473766337690087,0.34375],"faces":{"north":{"uv":[0,0,1,12],"texture":0},"east":{"uv":[1,0,2,12],"texture":0},"south":{"uv":[2,0,3,12],"texture":0},"west":{"uv":[3,0,4,12],"texture":0},"up":{"uv":[7,3,6,2],"texture":0},"down":{"uv":[7,3,6,4],"texture":0}},"type":"cube","uuid":"1a25b29c-161f-7fd0-d653-a3858a123662"},{"name":"cube","rescale":false,"locked":false,"from":[9.21969668103388,14.59812240527037,7.96875],"to":[9.28219668103388,15.78562240527037,8.03125],"autouv":0,"color":7,"rotation":[0,0,-22.5],"origin":[9.25094668103388,19.09812240527037,8.09375],"faces":{"north":{"uv":[4,6,5,7],"texture":0},"east":{"uv":[6,4,7,5],"texture":0},"south":{"uv":[5,6,6,7],"texture":0},"west":{"uv":[6,5,7,6],"texture":0},"up":{"uv":[7,7,6,6],"texture":0},"down":{"uv":[8,2,7,3],"texture":0}},"type":"cube","uuid":"6f8d47ea-84dd-056d-ddeb-7a6e3fa3a402"},{"name":"cube","rescale":false,"locked":false,"from":[8.21266047664225,14.89546798139816,7.96875],"to":[8.27516047664225,16.08296798139816,8.03125],"autouv":0,"color":7,"rotation":[0,0,22.5],"origin":[8.24391047664225,15.48921798139816,8.09375],"faces":{"north":{"uv":[7,3,8,4],"texture":0},"east":{"uv":[4,7,5,8],"texture":0},"south":{"uv":[7,4,8,5],"texture":0},"west":{"uv":[5,7,6,8],"texture":0},"up":{"uv":[8,6,7,5],"texture":0},"down":{"uv":[7,7,6,8],"texture":0}},"type":"cube","uuid":"84f5877d-35a4-6f1b-49d7-fba9e94e4191"},{"name":"cube","rescale":false,"locked":false,"from":[7.571311026137773,15.852667215818485,7.96875],"to":[7.6353110261377735,15.916667215818485,8.03125],"autouv":0,"color":7,"rotation":[0,0,45],"origin":[7.602561026137773,16.446417215818485,8.09375],"faces":{"north":{"uv":[7,6,8,7],"texture":0},"east":{"uv":[7,7,8,8],"texture":0},"south":{"uv":[8,0,9,1],"texture":0},"west":{"uv":[8,1,9,2],"texture":0},"up":{"uv":[9,3,8,2],"texture":0},"down":{"uv":[9,3,8,4],"texture":0}},"type":"cube","uuid":"6c601535-44c0-b733-c337-caa194738470"},{"name":"cube","rescale":false,"locked":false,"from":[7.969999999999999,14.895467981398156,7.96875],"to":[8.032499999999999,16.020467981398156,8.03125],"autouv":0,"color":7,"origin":[7.756089523357749,15.489217981398156,8.09375],"faces":{"north":{"uv":[4,8,5,9],"texture":0},"east":{"uv":[8,4,9,5],"texture":0},"south":{"uv":[5,8,6,9],"texture":0},"west":{"uv":[8,5,9,6],"texture":0},"up":{"uv":[7,9,6,8],"texture":0},"down":{"uv":[9,6,8,7],"texture":0}},"type":"cube","uuid":"e6e911f6-2e0d-ca3d-371b-062e3d350fbe"},{"name":"cube","rescale":false,"locked":false,"from":[9.28219668103388,14.59812240527037,7.96875],"to":[9.34469668103388,15.72312240527037,8.03125],"autouv":0,"color":7,"rotation":[0,0,-22.5],"origin":[9.25094668103388,19.09812240527037,8.09375],"faces":{"north":{"uv":[7,8,8,9],"texture":0},"east":{"uv":[8,7,9,8],"texture":0},"south":{"uv":[8,8,9,9],"texture":0},"west":{"uv":[9,0,10,1],"texture":0},"up":{"uv":[10,2,9,1],"texture":0},"down":{"uv":[10,2,9,3],"texture":0}},"type":"cube","uuid":"5e3b53ad-7847-e28a-8636-52ac4fcb4dd2"},{"name":"cube","rescale":false,"locked":false,"from":[8.15016047664225,14.89546798139816,7.96875],"to":[8.21266047664225,16.02046798139816,8.03125],"autouv":0,"color":7,"rotation":[0,0,22.5],"origin":[8.24391047664225,15.48921798139816,8.09375],"faces":{"north":{"uv":[9,3,10,4],"texture":0},"east":{"uv":[4,9,5,10],"texture":0},"south":{"uv":[9,4,10,5],"texture":0},"west":{"uv":[5,9,6,10],"texture":0},"up":{"uv":[10,6,9,5],"texture":0},"down":{"uv":[7,9,6,10],"texture":0}},"type":"cube","uuid":"c05ae858-64dc-df4a-5c6f-6c5cc37224a0"},{"name":"cube","rescale":false,"locked":false,"from":[9.34469668103388,14.59812240527037,7.96875],"to":[9.40719668103388,15.53562240527037,8.03125],"autouv":0,"color":7,"rotation":[0,0,-22.5],"origin":[9.25094668103388,19.09812240527037,8.09375],"faces":{"north":{"uv":[9,6,10,7],"texture":0},"east":{"uv":[7,9,8,10],"texture":0},"south":{"uv":[9,7,10,8],"texture":0},"west":{"uv":[8,9,9,10],"texture":0},"up":{"uv":[10,9,9,8],"texture":0},"down":{"uv":[10,9,9,10],"texture":0}},"type":"cube","uuid":"e2956b93-677d-8fea-af0a-fd7004c398f9"},{"name":"cube","rescale":false,"locked":false,"from":[8.08766047664225,14.89546798139816,7.96875],"to":[8.15016047664225,15.83296798139816,8.03125],"autouv":0,"color":7,"rotation":[0,0,22.5],"origin":[8.24391047664225,15.48921798139816,8.09375],"faces":{"north":{"uv":[10,0,11,1],"texture":0},"east":{"uv":[10,1,11,2],"texture":0},"south":{"uv":[10,2,11,3],"texture":0},"west":{"uv":[10,3,11,4],"texture":0},"up":{"uv":[5,11,4,10],"texture":0},"down":{"uv":[11,4,10,5],"texture":0}},"type":"cube","uuid":"ffe08a15-889d-c6b7-9425-240429623a89"},{"name":"cube","rescale":false,"locked":false,"from":[9.40719668103388,14.59812240527037,7.96875],"to":[9.53219668103388,15.53562240527037,8.03125],"autouv":0,"color":7,"rotation":[0,0,-22.5],"origin":[9.25094668103388,19.09812240527037,8.09375],"faces":{"north":{"uv":[5,10,6,11],"texture":0},"east":{"uv":[10,5,11,6],"texture":0},"south":{"uv":[6,10,7,11],"texture":0},"west":{"uv":[10,6,11,7],"texture":0},"up":{"uv":[8,11,7,10],"texture":0},"down":{"uv":[11,7,10,8],"texture":0}},"type":"cube","uuid":"a1a34b26-bff3-17a2-7ec9-e3565ff3f7ac"},{"name":"cube","rescale":false,"locked":false,"from":[7.962660476642251,14.89546798139816,7.96875],"to":[8.08766047664225,15.83296798139816,8.03125],"autouv":0,"color":7,"rotation":[0,0,22.5],"origin":[8.24391047664225,15.48921798139816,8.09375],"faces":{"north":{"uv":[8,10,9,11],"texture":0},"east":{"uv":[10,8,11,9],"texture":0},"south":{"uv":[9,10,10,11],"texture":0},"west":{"uv":[10,9,11,10],"texture":0},"up":{"uv":[11,11,10,10],"texture":0},"down":{"uv":[12,0,11,1],"texture":0}},"type":"cube","uuid":"f2066fe5-e1ed-c35c-e08b-d2dceb510f14"},{"name":"cube","rescale":false,"locked":false,"from":[9.53219668103388,14.59812240527037,7.96875],"to":[9.65719668103388,15.28562240527037,8.03125],"autouv":0,"color":7,"rotation":[0,0,-22.5],"origin":[9.25094668103388,19.09812240527037,8.09375],"faces":{"north":{"uv":[11,1,12,2],"texture":0},"east":{"uv":[11,2,12,3],"texture":0},"south":{"uv":[11,3,12,4],"texture":0},"west":{"uv":[4,11,5,12],"texture":0},"up":{"uv":[12,5,11,4],"texture":0},"down":{"uv":[6,11,5,12],"texture":0}},"type":"cube","uuid":"aa9389dd-b461-40cb-5666-b3b64814ab4c"},{"name":"cube","rescale":false,"locked":false,"from":[7.837660476642251,14.89546798139816,7.96875],"to":[7.962660476642251,15.70796798139816,8.03125],"autouv":0,"color":7,"rotation":[0,0,22.5],"origin":[8.24391047664225,15.48921798139816,8.09375],"faces":{"north":{"uv":[11,5,12,6],"texture":0},"east":{"uv":[6,11,7,12],"texture":0},"south":{"uv":[11,6,12,7],"texture":0},"west":{"uv":[7,11,8,12],"texture":0},"up":{"uv":[12,8,11,7],"texture":0},"down":{"uv":[9,11,8,12],"texture":0}},"type":"cube","uuid":"b71587b1-3da2-09e3-7ddb-34175dda2c8a"},{"name":"cube","rescale":false,"locked":false,"from":[7.511631908177477,2.1378096358382663,7.90625],"to":[7.636631908177477,2.7003096358382663,8.09375],"autouv":0,"color":7,"rotation":[0,0,-22.5],"origin":[7.542881908177477,2.5128096358382663,8],"faces":{"north":{"uv":[11,8,12,9],"texture":0},"east":{"uv":[9,11,10,12],"texture":0},"south":{"uv":[11,9,12,10],"texture":0},"west":{"uv":[10,11,11,12],"texture":0},"up":{"uv":[12,11,11,10],"texture":0},"down":{"uv":[12,11,11,12],"texture":0}},"type":"cube","uuid":"3efa2dba-ca05-6373-d446-4c4c993c23ab"},{"name":"cube","rescale":false,"locked":false,"from":[7.305625621040568,2.349227350361084,7.90625],"to":[7.430625621040568,2.724227350361084,8.09375],"autouv":0,"color":7,"rotation":[0,0,22.5],"origin":[7.399375621040568,2.536727350361084,8],"faces":{"north":{"uv":[0,12,1,13],"texture":0},"east":{"uv":[12,0,13,1],"texture":0},"south":{"uv":[1,12,2,13],"texture":0},"west":{"uv":[12,1,13,2],"texture":0},"up":{"uv":[3,13,2,12],"texture":0},"down":{"uv":[13,2,12,3],"texture":0}},"type":"cube","uuid":"bc029dad-dc31-2c6d-f2f1-75fc63a2cfe6"},{"name":"cube","rescale":false,"locked":false,"from":[8.56937437895943,2.349227350361084,7.90625],"to":[8.63187437895943,2.724227350361084,8.09375],"autouv":0,"color":7,"rotation":[0,0,-22.5],"origin":[8.60062437895943,2.536727350361084,8],"faces":{"north":{"uv":[3,12,4,13],"texture":0},"east":{"uv":[12,3,13,4],"texture":0},"south":{"uv":[4,12,5,13],"texture":0},"west":{"uv":[12,4,13,5],"texture":0},"up":{"uv":[6,13,5,12],"texture":0},"down":{"uv":[13,5,12,6],"texture":0}},"type":"cube","uuid":"0d201426-e10a-11b7-031a-9e3df6133f68"},{"name":"cube","rescale":false,"locked":false,"from":[8.559336039583256,2.313275775819476,7.90625],"to":[8.684336039583256,2.750775775819476,8.09375],"autouv":0,"color":7,"rotation":[0,0,-22.5],"origin":[8.528871235390977,2.5247684930996748,8],"faces":{"north":{"uv":[6,12,7,13],"texture":0},"east":{"uv":[12,6,13,7],"texture":0},"south":{"uv":[7,12,8,13],"texture":0},"west":{"uv":[12,7,13,8],"texture":0},"up":{"uv":[9,13,8,12],"texture":0},"down":{"uv":[13,8,12,9],"texture":0}},"type":"cube","uuid":"b62d3443-5d99-e13e-0392-d461296ef3be"},{"name":"cube","rescale":false,"locked":false,"from":[8.364253518110777,2.1661786889073964,7.90625],"to":[8.489253518110777,2.7286786889073964,8.09375],"autouv":0,"color":7,"rotation":[0,0,22.5],"origin":[8.528871235390977,2.5247684930996748,8],"faces":{"north":{"uv":[9,12,10,13],"texture":0},"east":{"uv":[12,9,13,10],"texture":0},"south":{"uv":[10,12,11,13],"texture":0},"west":{"uv":[12,10,13,11],"texture":0},"up":{"uv":[12,13,11,12],"texture":0},"down":{"uv":[13,11,12,12],"texture":0}},"type":"cube","uuid":"cf92ed7a-4b28-efd4-3264-c18d5e695308"},{"name":"cube","rescale":false,"locked":false,"from":[8.425868091822522,2.3253096358382663,7.90625],"to":[8.488368091822522,2.7003096358382663,8.09375],"autouv":0,"color":7,"rotation":[0,0,22.5],"origin":[8.457118091822522,2.5128096358382663,8],"faces":{"north":{"uv":[12,12,13,13],"texture":0},"east":{"uv":[0,13,1,14],"texture":0},"south":{"uv":[13,0,14,1],"texture":0},"west":{"uv":[1,13,2,14],"texture":0},"up":{"uv":[14,2,13,1],"texture":0},"down":{"uv":[3,13,2,14],"texture":0}},"type":"cube","uuid":"36a76881-9833-b17d-8c9d-c2d775c2f5ac"},{"name":"cube","rescale":false,"locked":false,"from":[8.6354273154667,2.7622458586918954,7.96875],"to":[8.7604273154667,3.2622458586918945,8.03125],"autouv":0,"color":7,"origin":[8.6666773154667,2.5747458586918963,8],"faces":{"north":{"uv":[13,2,14,3],"texture":0},"east":{"uv":[3,13,4,14],"texture":0},"south":{"uv":[13,3,14,4],"texture":0},"west":{"uv":[4,13,5,14],"texture":0},"up":{"uv":[14,5,13,4],"texture":0},"down":{"uv":[6,13,5,14],"texture":0}},"type":"cube","uuid":"5a5a8345-4799-ace5-f0f8-dc3c513cfa0f"},{"name":"cube","rescale":false,"locked":false,"from":[8.634287705265278,3.2244945961387934,7.96875],"to":[8.724287705265278,3.3144945961387933,8.03125],"autouv":0,"color":7,"rotation":[0,0,45],"origin":[8.696787705265278,3.2869945961387934,8],"faces":{"north":{"uv":[13,5,14,6],"texture":0},"east":{"uv":[6,13,7,14],"texture":0},"south":{"uv":[13,6,14,7],"texture":0},"west":{"uv":[7,13,8,14],"texture":0},"up":{"uv":[14,8,13,7],"texture":0},"down":{"uv":[9,13,8,14],"texture":0}},"type":"cube","uuid":"05ea32bb-e73d-19f1-a533-786bdd127a74"},{"name":"cube","rescale":false,"locked":false,"from":[8.61812562104057,1.849227350361084,7.90625],"to":[8.74312562104057,2.224227350361084,8.09375],"autouv":0,"color":7,"rotation":[0,0,22.5],"origin":[7.399375621040568,2.536727350361084,8],"faces":{"north":{"uv":[13,8,14,9],"texture":0},"east":{"uv":[9,13,10,14],"texture":0},"south":{"uv":[13,9,14,10],"texture":0},"west":{"uv":[10,13,11,14],"texture":0},"up":{"uv":[14,11,13,10],"texture":0},"down":{"uv":[12,13,11,14],"texture":0}},"type":"cube","uuid":"b93fb66d-f5fa-db34-c3da-86f37f4294d9"},{"name":"cube","rescale":false,"locked":false,"from":[8.686753994219051,2.274055599439766,7.90625],"to":[8.936753994219051,2.399055599439766,8.09375],"autouv":0,"color":7,"rotation":[0,0,45],"origin":[8.749253994219051,2.305305599439766,8],"faces":{"north":{"uv":[13,11,14,12],"texture":0},"east":{"uv":[12,13,13,14],"texture":0},"south":{"uv":[13,12,14,13],"texture":0},"west":{"uv":[13,13,14,14],"texture":0},"up":{"uv":[1,15,0,14],"texture":0},"down":{"uv":[15,0,14,1],"texture":0}},"type":"cube","uuid":"3bd08016-90b9-946c-83fd-b8aaaeaff252"},{"name":"cube","rescale":false,"locked":false,"from":[7.0632460057809485,2.274055599439766,7.90625],"to":[7.3132460057809485,2.399055599439766,8.09375],"autouv":0,"color":7,"rotation":[0,0,-45],"origin":[7.2507460057809485,2.305305599439766,8],"faces":{"north":{"uv":[1,14,2,15],"texture":0},"east":{"uv":[14,1,15,2],"texture":0},"south":{"uv":[2,14,3,15],"texture":0},"west":{"uv":[14,2,15,3],"texture":0},"up":{"uv":[4,15,3,14],"texture":0},"down":{"uv":[15,3,14,4],"texture":0}},"type":"cube","uuid":"11a00ca3-9daf-b893-8c0e-dbb20cc8b03b"},{"name":"cube","rescale":false,"locked":false,"from":[7.256874378959431,1.849227350361084,7.90625],"to":[7.381874378959431,2.224227350361084,8.09375],"autouv":0,"color":7,"rotation":[0,0,-22.5],"origin":[8.60062437895943,2.536727350361084,8],"faces":{"north":{"uv":[4,14,5,15],"texture":0},"east":{"uv":[14,4,15,5],"texture":0},"south":{"uv":[5,14,6,15],"texture":0},"west":{"uv":[14,5,15,6],"texture":0},"up":{"uv":[7,15,6,14],"texture":0},"down":{"uv":[15,6,14,7],"texture":0}},"type":"cube","uuid":"aa0b706e-5954-d4c0-0667-42f6c58ff9a7"},{"name":"cube","rescale":false,"locked":false,"from":[7.239572684533298,2.7622458586918954,7.96875],"to":[7.364572684533298,3.2622458586918945,8.03125],"autouv":0,"color":7,"origin":[7.333322684533298,2.5747458586918963,8],"faces":{"north":{"uv":[7,14,8,15],"texture":0},"east":{"uv":[14,7,15,8],"texture":0},"south":{"uv":[8,14,9,15],"texture":0},"west":{"uv":[14,8,15,9],"texture":0},"up":{"uv":[10,15,9,14],"texture":0},"down":{"uv":[15,9,14,10],"texture":0}},"type":"cube","uuid":"ade0b65a-d168-4118-2bda-3bd4dd2a18a9"},{"name":"cube","rescale":false,"locked":false,"from":[7.2407122947347204,3.2244945961387934,7.96875],"to":[7.33071229473472,3.3144945961387933,8.03125],"autouv":0,"color":7,"rotation":[0,0,45],"origin":[7.3032122947347204,3.2869945961387934,8],"faces":{"north":{"uv":[10,14,11,15],"texture":0},"east":{"uv":[14,10,15,11],"texture":0},"south":{"uv":[11,14,12,15],"texture":0},"west":{"uv":[14,11,15,12],"texture":0},"up":{"uv":[13,15,12,14],"texture":0},"down":{"uv":[15,12,14,13],"texture":0}},"type":"cube","uuid":"6fdee024-9113-db83-c886-7f66f53ec2bf"},{"name":"cube","rescale":false,"locked":false,"from":[7.5,2.0151233662309913,7.90625],"to":[8.5,2.7026233662309913,8.09375],"autouv":0,"color":7,"origin":[0,-2.0473766337690087,0.34375],"faces":{"north":{"uv":[13,14,14,15],"texture":0},"east":{"uv":[14,13,15,14],"texture":0},"south":{"uv":[14,14,15,15],"texture":0},"west":{"uv":[0,15,1,16],"texture":0},"up":{"uv":[16,1,15,0],"texture":0},"down":{"uv":[2,15,1,16],"texture":0}},"type":"cube","uuid":"e3a95859-bdc4-0d0d-294c-087b64203b77"},{"name":"cube","rescale":false,"locked":false,"from":[7.239572684533298,2.0122458586918954,7.90625],"to":[7.364572684533298,2.7622458586918945,8.09375],"autouv":0,"color":7,"origin":[7.333322684533298,2.5747458586918963,8],"faces":{"north":{"uv":[15,1,16,2],"texture":0},"east":{"uv":[2,15,3,16],"texture":0},"south":{"uv":[15,2,16,3],"texture":0},"west":{"uv":[3,15,4,16],"texture":0},"up":{"uv":[16,4,15,3],"texture":0},"down":{"uv":[5,15,4,16],"texture":0}},"type":"cube","uuid":"06b23318-a6cd-ecf8-cada-fbe12fdd251e"},{"name":"cube","rescale":false,"locked":false,"from":[8.6354273154667,2.0122458586918954,7.90625],"to":[8.7604273154667,2.7622458586918945,8.09375],"autouv":0,"color":7,"origin":[8.6666773154667,2.5747458586918963,8],"faces":{"north":{"uv":[15,4,16,5],"texture":0},"east":{"uv":[5,15,6,16],"texture":0},"south":{"uv":[15,5,16,6],"texture":0},"west":{"uv":[6,15,7,16],"texture":0},"up":{"uv":[16,7,15,6],"texture":0},"down":{"uv":[8,15,7,16],"texture":0}},"type":"cube","uuid":"0db0a2a5-d31d-c303-52a9-aedac42c23c6"},{"name":"cube","rescale":false,"locked":false,"from":[8.6354273154667,2.7288781199492895,8.01150095074366],"to":[8.7604273154667,2.8538781199492895,8.07400095074366],"autouv":0,"color":7,"rotation":[22.5,0,0],"origin":[8.2604273154667,3.010128119949286,8.04275095074366],"faces":{"north":{"uv":[15,7,16,8],"texture":0},"east":{"uv":[8,15,9,16],"texture":0},"south":{"uv":[15,8,16,9],"texture":0},"west":{"uv":[9,15,10,16],"texture":0},"up":{"uv":[16,10,15,9],"texture":0},"down":{"uv":[11,15,10,16],"texture":0}},"type":"cube","uuid":"4741091d-3613-8582-69da-ac8a6ce0fd57"},{"name":"cube","rescale":false,"locked":false,"from":[8.6354273154667,2.7288781199492895,7.92599904925634],"to":[8.7604273154667,2.8538781199492895,7.98849904925634],"autouv":0,"color":7,"rotation":[-22.5,0,0],"origin":[8.2604273154667,3.010128119949286,7.95724904925634],"faces":{"north":{"uv":[15,10,16,11],"texture":0},"east":{"uv":[11,15,12,16],"texture":0},"south":{"uv":[15,11,16,12],"texture":0},"west":{"uv":[12,15,13,16],"texture":0},"up":{"uv":[16,13,15,12],"texture":0},"down":{"uv":[14,15,13,16],"texture":0}},"type":"cube","uuid":"54eb5fc9-a1c8-e00a-a1bb-6023ed5ac32b"},{"name":"cube","rescale":false,"locked":false,"from":[8.6354273154667,2.8583643138989654,7.9381597369492045],"to":[8.7604273154667,2.9223643138989654,8.002159736949205],"autouv":0,"color":7,"rotation":[-45,0,0],"origin":[8.6979273154667,2.9208643138989654,8.000659736949205],"faces":{"north":{"uv":[15,13,16,14],"texture":0},"east":{"uv":[14,15,15,16],"texture":0},"south":{"uv":[15,14,16,15],"texture":0},"west":{"uv":[15,15,16,16],"texture":0},"up":{"uv":[1,17,0,16],"texture":0},"down":{"uv":[17,0,16,1],"texture":0}},"type":"cube","uuid":"a5254e77-7168-2072-2c3d-ba372f365c39"},{"name":"cube","rescale":false,"locked":false,"from":[7.2395726845333,2.7288781199492895,7.92599904925634],"to":[7.3645726845333,2.8538781199492895,7.98849904925634],"autouv":0,"color":7,"rotation":[-22.5,0,0],"origin":[7.7395726845333,3.010128119949286,7.95724904925634],"faces":{"north":{"uv":[1,16,2,17],"texture":0},"east":{"uv":[16,1,17,2],"texture":0},"south":{"uv":[2,16,3,17],"texture":0},"west":{"uv":[16,2,17,3],"texture":0},"up":{"uv":[4,17,3,16],"texture":0},"down":{"uv":[17,3,16,4],"texture":0}},"type":"cube","uuid":"9c11d091-9eb5-47e7-2932-a7294ae1ddcf"},{"name":"cube","rescale":false,"locked":false,"from":[7.2395726845333,2.8583643138989654,7.9381597369492045],"to":[7.3645726845333,2.9223643138989654,8.002159736949205],"autouv":0,"color":7,"rotation":[-45,0,0],"origin":[7.3020726845333,2.9208643138989654,8.000659736949205],"faces":{"north":{"uv":[4,16,5,17],"texture":0},"east":{"uv":[16,4,17,5],"texture":0},"south":{"uv":[5,16,6,17],"texture":0},"west":{"uv":[16,5,17,6],"texture":0},"up":{"uv":[7,17,6,16],"texture":0},"down":{"uv":[17,6,16,7],"texture":0}},"type":"cube","uuid":"0ed2bb5b-73ef-e62d-bc09-ec95dae6eaba"},{"name":"cube","rescale":false,"locked":false,"from":[7.2395726845333,2.7288781199492895,8.01150095074366],"to":[7.3645726845333,2.8538781199492895,8.07400095074366],"autouv":0,"color":7,"rotation":[22.5,0,0],"origin":[7.7395726845333,3.010128119949286,8.04275095074366],"faces":{"north":{"uv":[7,16,8,17],"texture":0},"east":{"uv":[16,7,17,8],"texture":0},"south":{"uv":[8,16,9,17],"texture":0},"west":{"uv":[16,8,17,9],"texture":0},"up":{"uv":[10,17,9,16],"texture":0},"down":{"uv":[17,9,16,10],"texture":0}},"type":"cube","uuid":"ec4e3586-a67f-edd0-728c-145a0d1e2c4a"},{"name":"cube","rescale":false,"locked":false,"from":[8.33224904925634,2.6692556274883827,7.90625],"to":[8.39474904925634,3.8567556274883827,8.09375],"autouv":0,"color":7,"rotation":[0,0,22.5],"origin":[8.36349904925634,2.950505627488381,8],"faces":{"north":{"uv":[10,16,11,17],"texture":0},"east":{"uv":[16,10,17,11],"texture":0},"south":{"uv":[11,16,12,17],"texture":0},"west":{"uv":[16,11,17,12],"texture":0},"up":{"uv":[13,17,12,16],"texture":0},"down":{"uv":[17,12,16,13],"texture":0}},"type":"cube","uuid":"0a81776b-a76c-0fd9-4422-d0684d79162e"},{"name":"cube","rescale":false,"locked":false,"from":[7.712880666096341,2.647846746007181,7.90625],"to":[7.775380666096341,3.835346746007181,8.09375],"autouv":0,"color":7,"rotation":[0,0,-22.5],"origin":[7.744130666096341,3.210346746007181,8],"faces":{"north":{"uv":[13,16,14,17],"texture":0},"east":{"uv":[16,13,17,14],"texture":0},"south":{"uv":[14,16,15,17],"texture":0},"west":{"uv":[16,14,17,15],"texture":0},"up":{"uv":[16,17,15,16],"texture":0},"down":{"uv":[17,15,16,16],"texture":0}},"type":"cube","uuid":"12ba5de9-4920-46fd-f94f-cb9fddcb3451"},{"name":"cube","rescale":false,"locked":false,"from":[7.2604273154667,2.0122458586918954,7.90625],"to":[8.7604273154667,2.1997458586918945,8.09375],"autouv":0,"color":7,"origin":[8.6666773154667,2.5747458586918963,8],"faces":{"north":{"uv":[4,0,6,1],"texture":0},"east":{"uv":[16,16,17,17],"texture":0},"south":{"uv":[4,1,6,2],"texture":0},"west":{"uv":[0,17,1,18],"texture":0},"up":{"uv":[6,3,4,2],"texture":0},"down":{"uv":[6,3,4,4],"texture":0}},"type":"cube","uuid":"67fb5729-3249-13f9-a243-49d4bcf039f2"},{"name":"cube","rescale":false,"locked":false,"from":[7.2604273154667,2.0122458586918954,7.90625],"to":[8.7604273154667,2.3872458586918945,8.09375],"autouv":0,"color":7,"origin":[8.6666773154667,2.5747458586918963,8],"faces":{"north":{"uv":[4,4,6,5],"texture":0},"east":{"uv":[17,0,18,1],"texture":0},"south":{"uv":[4,5,6,6],"texture":0},"west":{"uv":[1,17,2,18],"texture":0},"up":{"uv":[8,1,6,0],"texture":0},"down":{"uv":[8,1,6,2],"texture":0}},"type":"cube","uuid":"9d89c0a5-7d01-b34d-e4dd-31b19c676c7a"},{"name":"cube","rescale":false,"locked":false,"from":[8.387741045859425,1.9381139505144214,7.90625],"to":[8.762741045859425,2.1256139505144205,8.09375],"autouv":0,"color":7,"rotation":[0,0,22.5],"origin":[8.575241045859425,1.9693639505144196,8],"faces":{"north":{"uv":[17,1,18,2],"texture":0},"east":{"uv":[2,17,3,18],"texture":0},"south":{"uv":[17,2,18,3],"texture":0},"west":{"uv":[3,17,4,18],"texture":0},"up":{"uv":[18,4,17,3],"texture":0},"down":{"uv":[5,17,4,18],"texture":0}},"type":"cube","uuid":"02363300-58f3-1d15-b1ab-ec8458d19f58"},{"name":"cube","rescale":false,"locked":false,"from":[7.237258954140575,1.9381139505144214,7.90625],"to":[7.612258954140575,2.1256139505144205,8.09375],"autouv":0,"color":7,"rotation":[0,0,-22.5],"origin":[7.424758954140575,1.9693639505144196,8],"faces":{"north":{"uv":[17,4,18,5],"texture":0},"east":{"uv":[5,17,6,18],"texture":0},"south":{"uv":[17,5,18,6],"texture":0},"west":{"uv":[6,17,7,18],"texture":0},"up":{"uv":[18,7,17,6],"texture":0},"down":{"uv":[8,17,7,18],"texture":0}},"type":"cube","uuid":"73890902-6f29-f41a-74c2-c56657dd7188"},{"name":"cube","rescale":false,"locked":false,"from":[7.9139724907749684,1.868739571554988,7.90625],"to":[8.413972490774968,2.056239571554987,8.09375],"autouv":0,"color":7,"origin":[8.226472490774968,1.899989571554988,8],"faces":{"north":{"uv":[17,7,18,8],"texture":0},"east":{"uv":[8,17,9,18],"texture":0},"south":{"uv":[17,8,18,9],"texture":0},"west":{"uv":[9,17,10,18],"texture":0},"up":{"uv":[18,10,17,9],"texture":0},"down":{"uv":[11,17,10,18],"texture":0}},"type":"cube","uuid":"ed6ef288-f538-bbed-3b4d-4fac4afe8080"},{"name":"cube","rescale":false,"locked":false,"from":[7.586027509225032,1.868739571554988,7.90625],"to":[7.961027509225032,2.056239571554987,8.09375],"autouv":0,"color":7,"origin":[7.773527509225032,1.899989571554988,8],"faces":{"north":{"uv":[17,10,18,11],"texture":0},"east":{"uv":[11,17,12,18],"texture":0},"south":{"uv":[17,11,18,12],"texture":0},"west":{"uv":[12,17,13,18],"texture":0},"up":{"uv":[18,13,17,12],"texture":0},"down":{"uv":[14,17,13,18],"texture":0}},"type":"cube","uuid":"fab03b76-6e67-9510-7e47-2844e000ec80"},{"name":"cube","rescale":false,"locked":false,"from":[7.875,0.11873957155498793,7.90625],"to":[8.125,1.868739571554987,8.09375],"autouv":0,"color":7,"origin":[8.226472490774968,1.899989571554988,8],"faces":{"north":{"uv":[17,13,18,14],"texture":0},"east":{"uv":[14,17,15,18],"texture":0},"south":{"uv":[17,14,18,15],"texture":0},"west":{"uv":[15,17,16,18],"texture":0},"up":{"uv":[18,16,17,15],"texture":0},"down":{"uv":[17,17,16,18],"texture":0}},"type":"cube","uuid":"8c675f4a-cc40-f328-d884-306e1fbbd18a"},{"name":"cube","rescale":false,"locked":false,"from":[7.875,0.05623957155498793,7.90625],"to":[8.125,0.11873957155498704,8.09375],"autouv":0,"color":7,"origin":[8.226472490774968,1.587489571554988,8],"faces":{"north":{"uv":[17,16,18,17],"texture":0},"east":{"uv":[17,17,18,18],"texture":0},"south":{"uv":[0,18,1,19],"texture":0},"west":{"uv":[18,0,19,1],"texture":0},"up":{"uv":[2,19,1,18],"texture":0},"down":{"uv":[19,1,18,2],"texture":0}},"type":"cube","uuid":"03e553e6-c97d-85e0-6c0d-74430de29cc3"},{"name":"cube","rescale":false,"locked":false,"from":[8.029002194063954,-0.17466527735653603,7.90625],"to":[8.091502194063954,0.07533472264346308,8.09375],"autouv":0,"color":7,"rotation":[0,0,-22.5],"origin":[8.060252194063954,-0.01841527735653603,8],"faces":{"north":{"uv":[2,18,3,19],"texture":0},"east":{"uv":[18,2,19,3],"texture":0},"south":{"uv":[3,18,4,19],"texture":0},"west":{"uv":[18,3,19,4],"texture":0},"up":{"uv":[5,19,4,18],"texture":0},"down":{"uv":[19,4,18,5],"texture":0}},"type":"cube","uuid":"14e52bb6-bca6-0887-685a-3b38122a76bc"},{"name":"cube","rescale":false,"locked":false,"from":[8.029002194063954,-0.11216527735653603,7.90625],"to":[8.091502194063954,0.07533472264346308,8.09375],"autouv":0,"color":7,"rotation":[0,0,-22.5],"origin":[8.060252194063954,-0.01841527735653603,8],"faces":{"north":{"uv":[5,18,6,19],"texture":0},"east":{"uv":[18,5,19,6],"texture":0},"south":{"uv":[6,18,7,19],"texture":0},"west":{"uv":[18,6,19,7],"texture":0},"up":{"uv":[8,19,7,18],"texture":0},"down":{"uv":[19,7,18,8],"texture":0}},"type":"cube","uuid":"ca573590-5e53-d357-d2ed-ab3440b894a2"},{"name":"cube","rescale":false,"locked":false,"from":[7.908497805936046,-0.17466527735653603,7.90625],"to":[7.970997805936046,0.07533472264346308,8.09375],"autouv":0,"color":7,"rotation":[0,0,22.5],"origin":[7.939747805936046,-0.01841527735653603,8],"faces":{"north":{"uv":[8,18,9,19],"texture":0},"east":{"uv":[18,8,19,9],"texture":0},"south":{"uv":[9,18,10,19],"texture":0},"west":{"uv":[18,9,19,10],"texture":0},"up":{"uv":[11,19,10,18],"texture":0},"down":{"uv":[19,10,18,11],"texture":0}},"type":"cube","uuid":"96d00843-5399-c3a6-2829-441c86039aab"},{"name":"cube","rescale":false,"locked":false,"from":[7.983615030676274,-0.2059803115728327,7.90625],"to":[8.023615030676273,-0.16598031157283266,8.09375],"autouv":0,"color":7,"rotation":[0,0,-45],"origin":[8.014865030676273,-0.17473031157283359,8],"faces":{"north":{"uv":[11,18,12,19],"texture":0},"east":{"uv":[18,11,19,12],"texture":0},"south":{"uv":[12,18,13,19],"texture":0},"west":{"uv":[18,12,19,13],"texture":0},"up":{"uv":[14,19,13,18],"texture":0},"down":{"uv":[19,13,18,14],"texture":0}},"type":"cube","uuid":"1ce242ce-4c8e-414b-16ff-6874e4089977"},{"name":"cube","rescale":false,"locked":false,"from":[7.966502194063954,-0.11216527735653603,7.90625],"to":[8.029002194063954,0.07533472264346308,8.09375],"autouv":0,"color":7,"rotation":[0,0,-22.5],"origin":[8.060252194063954,-0.01841527735653603,8],"faces":{"north":{"uv":[14,18,15,19],"texture":0},"east":{"uv":[18,14,19,15],"texture":0},"south":{"uv":[15,18,16,19],"texture":0},"west":{"uv":[18,15,19,16],"texture":0},"up":{"uv":[17,19,16,18],"texture":0},"down":{"uv":[19,16,18,17],"texture":0}},"type":"cube","uuid":"34437d0d-9577-f633-c49a-4dae3e60ac4f"},{"name":"cube","rescale":false,"locked":false,"from":[7.970997805936046,-0.11216527735653603,7.90625],"to":[8.033497805936046,0.07533472264346308,8.09375],"autouv":0,"color":7,"rotation":[0,0,22.5],"origin":[7.939747805936046,-0.01841527735653603,8],"faces":{"north":{"uv":[17,18,18,19],"texture":0},"east":{"uv":[18,17,19,18],"texture":0},"south":{"uv":[18,18,19,19],"texture":0},"west":{"uv":[0,19,1,20],"texture":0},"up":{"uv":[20,1,19,0],"texture":0},"down":{"uv":[2,19,1,20],"texture":0}},"type":"cube","uuid":"fc88134f-0f42-79ef-8975-c5639c458f4f"},{"name":"cube","rescale":false,"locked":false,"from":[8.26974904925634,2.6692556274883827,7.90625],"to":[8.33224904925634,3.7942556274883827,8.09375],"autouv":0,"color":7,"rotation":[0,0,22.5],"origin":[8.36349904925634,2.950505627488381,8],"faces":{"north":{"uv":[19,1,20,2],"texture":0},"east":{"uv":[2,19,3,20],"texture":0},"south":{"uv":[19,2,20,3],"texture":0},"west":{"uv":[3,19,4,20],"texture":0},"up":{"uv":[20,4,19,3],"texture":0},"down":{"uv":[5,19,4,20],"texture":0}},"type":"cube","uuid":"8123734c-7915-8719-5e2d-a10931a8bffc"},{"name":"cube","rescale":false,"locked":false,"from":[7.775380666096341,2.647846746007181,7.90625],"to":[7.837880666096341,3.772846746007181,8.09375],"autouv":0,"color":7,"rotation":[0,0,-22.5],"origin":[7.744130666096341,3.210346746007181,8],"faces":{"north":{"uv":[19,4,20,5],"texture":0},"east":{"uv":[5,19,6,20],"texture":0},"south":{"uv":[19,5,20,6],"texture":0},"west":{"uv":[6,19,7,20],"texture":0},"up":{"uv":[20,7,19,6],"texture":0},"down":{"uv":[8,19,7,20],"texture":0}},"type":"cube","uuid":"8c077306-415d-e41e-c3a4-6a04a5c5e17b"},{"name":"cube","rescale":false,"locked":false,"from":[7.837880666096341,2.647846746007181,7.90625],"to":[7.900380666096341,3.710346746007181,8.09375],"autouv":0,"color":7,"rotation":[0,0,-22.5],"origin":[7.744130666096341,3.210346746007181,8],"faces":{"north":{"uv":[19,7,20,8],"texture":0},"east":{"uv":[8,19,9,20],"texture":0},"south":{"uv":[19,8,20,9],"texture":0},"west":{"uv":[9,19,10,20],"texture":0},"up":{"uv":[20,10,19,9],"texture":0},"down":{"uv":[11,19,10,20],"texture":0}},"type":"cube","uuid":"2d524267-7d8c-5abf-32c5-28066a025b05"},{"name":"cube","rescale":false,"locked":false,"from":[7.900380666096341,2.647846746007181,7.90625],"to":[7.962880666096341,3.647846746007181,8.09375],"autouv":0,"color":7,"rotation":[0,0,-22.5],"origin":[7.744130666096341,3.210346746007181,8],"faces":{"north":{"uv":[19,10,20,11],"texture":0},"east":{"uv":[11,19,12,20],"texture":0},"south":{"uv":[19,11,20,12],"texture":0},"west":{"uv":[12,19,13,20],"texture":0},"up":{"uv":[20,13,19,12],"texture":0},"down":{"uv":[14,19,13,20],"texture":0}},"type":"cube","uuid":"3aa71614-6224-4d28-a85a-572cb167c059"},{"name":"cube","rescale":false,"locked":false,"from":[8.20724904925634,2.6692556274883827,7.90625],"to":[8.26974904925634,3.7317556274883827,8.09375],"autouv":0,"color":7,"rotation":[0,0,22.5],"origin":[8.36349904925634,2.950505627488381,8],"faces":{"north":{"uv":[19,13,20,14],"texture":0},"east":{"uv":[14,19,15,20],"texture":0},"south":{"uv":[19,14,20,15],"texture":0},"west":{"uv":[15,19,16,20],"texture":0},"up":{"uv":[20,16,19,15],"texture":0},"down":{"uv":[17,19,16,20],"texture":0}},"type":"cube","uuid":"fbac8a94-31b1-2f96-1c65-4af6fbdf7904"},{"name":"cube","rescale":false,"locked":false,"from":[8.14474904925634,2.6692556274883827,7.90625],"to":[8.20724904925634,3.6692556274883827,8.09375],"autouv":0,"color":7,"rotation":[0,0,22.5],"origin":[8.36349904925634,2.950505627488381,8],"faces":{"north":{"uv":[19,16,20,17],"texture":0},"east":{"uv":[17,19,18,20],"texture":0},"south":{"uv":[19,17,20,18],"texture":0},"west":{"uv":[18,19,19,20],"texture":0},"up":{"uv":[20,19,19,18],"texture":0},"down":{"uv":[20,19,19,20],"texture":0}},"type":"cube","uuid":"aa78352e-c647-01c6-e07b-ed8d305a758d"},{"name":"cube","rescale":false,"locked":false,"from":[7.75,2.5776233662309913,7.90625],"to":[8.25,3.2651233662309913,8.09375],"autouv":0,"color":7,"origin":[0,-2.0473766337690087,0.34375],"faces":{"north":{"uv":[0,20,1,21],"texture":0},"east":{"uv":[20,0,21,1],"texture":0},"south":{"uv":[1,20,2,21],"texture":0},"west":{"uv":[20,1,21,2],"texture":0},"up":{"uv":[3,21,2,20],"texture":0},"down":{"uv":[21,2,20,3],"texture":0}},"type":"cube","uuid":"71c51111-deb5-ab91-93bb-a9bdab4e94d5"},{"name":"cube","rescale":false,"locked":false,"from":[7.967380749757703,3.768480311088144,7.90625],"to":[8.030380749757704,3.8314803110881446,8.09375],"autouv":0,"color":7,"rotation":[0,0,-45],"origin":[7.998630749757703,3.799730311088144,8],"faces":{"north":{"uv":[3,20,4,21],"texture":0},"east":{"uv":[20,3,21,4],"texture":0},"south":{"uv":[4,20,5,21],"texture":0},"west":{"uv":[20,4,21,5],"texture":0},"up":{"uv":[6,21,5,20],"texture":0},"down":{"uv":[21,5,20,6],"texture":0}},"type":"cube","uuid":"3bc0287e-7925-c597-b207-88fde8b6f764"},{"name":"cube","rescale":false,"locked":false,"from":[7.979376863121702,2.623929031484364,7.90625],"to":[8.041876863121702,3.748929031484364,8.09375],"autouv":0,"color":7,"origin":[8.198126863121702,3.186429031484364,8],"faces":{"north":{"uv":[6,20,7,21],"texture":0},"east":{"uv":[20,6,21,7],"texture":0},"south":{"uv":[7,20,8,21],"texture":0},"west":{"uv":[20,7,21,8],"texture":0},"up":{"uv":[9,21,8,20],"texture":0},"down":{"uv":[21,8,20,9],"texture":0}},"type":"cube","uuid":"b6552a71-ed0a-3bf2-19e3-a7ccc3d6056d"}],"outliner":["1a25b29c-161f-7fd0-d653-a3858a123662","e3a95859-bdc4-0d0d-294c-087b64203b77","71c51111-deb5-ab91-93bb-a9bdab4e94d5","0a81776b-a76c-0fd9-4422-d0684d79162e","3bc0287e-7925-c597-b207-88fde8b6f764","8123734c-7915-8719-5e2d-a10931a8bffc","b6552a71-ed0a-3bf2-19e3-a7ccc3d6056d","fbac8a94-31b1-2f96-1c65-4af6fbdf7904","aa78352e-c647-01c6-e07b-ed8d305a758d","12ba5de9-4920-46fd-f94f-cb9fddcb3451","2d524267-7d8c-5abf-32c5-28066a025b05","3aa71614-6224-4d28-a85a-572cb167c059","8c077306-415d-e41e-c3a4-6a04a5c5e17b","4741091d-3613-8582-69da-ac8a6ce0fd57","a5254e77-7168-2072-2c3d-ba372f365c39","54eb5fc9-a1c8-e00a-a1bb-6023ed5ac32b","ec4e3586-a67f-edd0-728c-145a0d1e2c4a","0ed2bb5b-73ef-e62d-bc09-ec95dae6eaba","9c11d091-9eb5-47e7-2932-a7294ae1ddcf","3efa2dba-ca05-6373-d446-4c4c993c23ab","bc029dad-dc31-2c6d-f2f1-75fc63a2cfe6","b93fb66d-f5fa-db34-c3da-86f37f4294d9","3bd08016-90b9-946c-83fd-b8aaaeaff252","36a76881-9833-b17d-8c9d-c2d775c2f5ac","0d201426-e10a-11b7-031a-9e3df6133f68","5a5a8345-4799-ace5-f0f8-dc3c513cfa0f","0db0a2a5-d31d-c303-52a9-aedac42c23c6","9d89c0a5-7d01-b34d-e4dd-31b19c676c7a","67fb5729-3249-13f9-a243-49d4bcf039f2","02363300-58f3-1d15-b1ab-ec8458d19f58","ed6ef288-f538-bbed-3b4d-4fac4afe8080","8c675f4a-cc40-f328-d884-306e1fbbd18a","03e553e6-c97d-85e0-6c0d-74430de29cc3","ca573590-5e53-d357-d2ed-ab3440b894a2","14e52bb6-bca6-0887-685a-3b38122a76bc","34437d0d-9577-f633-c49a-4dae3e60ac4f","1ce242ce-4c8e-414b-16ff-6874e4089977","96d00843-5399-c3a6-2829-441c86039aab","fc88134f-0f42-79ef-8975-c5639c458f4f","fab03b76-6e67-9510-7e47-2844e000ec80","73890902-6f29-f41a-74c2-c56657dd7188","ade0b65a-d168-4118-2bda-3bd4dd2a18a9","06b23318-a6cd-ecf8-cada-fbe12fdd251e","aa0b706e-5954-d4c0-0667-42f6c58ff9a7","11a00ca3-9daf-b893-8c0e-dbb20cc8b03b","05ea32bb-e73d-19f1-a533-786bdd127a74","6fdee024-9113-db83-c886-7f66f53ec2bf","cf92ed7a-4b28-efd4-3264-c18d5e695308","b62d3443-5d99-e13e-0392-d461296ef3be","6f8d47ea-84dd-056d-ddeb-7a6e3fa3a402","84f5877d-35a4-6f1b-49d7-fba9e94e4191","6c601535-44c0-b733-c337-caa194738470","e6e911f6-2e0d-ca3d-371b-062e3d350fbe","5e3b53ad-7847-e28a-8636-52ac4fcb4dd2","c05ae858-64dc-df4a-5c6f-6c5cc37224a0","e2956b93-677d-8fea-af0a-fd7004c398f9","ffe08a15-889d-c6b7-9425-240429623a89","a1a34b26-bff3-17a2-7ec9-e3565ff3f7ac","f2066fe5-e1ed-c35c-e08b-d2dceb510f14","aa9389dd-b461-40cb-5666-b3b64814ab4c","b71587b1-3da2-09e3-7ddb-34175dda2c8a"],"textures":[{"path":"C:\\Users\\hawkt\\Documents\\GitHub\\cosmere\\src\\surgebinding\\resources\\assets\\surgebinding\\textures\\item\\models\\shardblade_model\\stoneward_blade.png","name":"stoneward_honorblade.png","folder":"item/models/shardblade_model","namespace":"surgebinding","id":"0","particle":true,"render_mode":"default","visible":true,"mode":"bitmap","saved":false,"uuid":"80894fab-59e9-1e6c-67f0-a6406782627b","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAOtJREFUWEdjLC0r/8+ABF68fInMZZAQF0fho8vDJKt5n4CZrZ9lGBYvXMCIogkPh5GaDgBZDgJUcQC6z2GewBcCow4YHiFAKPXSPA0Magfg8j3I0aBygCppAF8IEOMAUsoAkF0YBdGgdAA+nyMXxaQWw+AQiI1PQKkLcIUAGwsjg4i8KsOzu7ewKoGlAZKjgFgH4IsaTQ0NhqCne0iuiEgKgVEHoIcAcpogty1AURSA4h0GQPFPTmME7IAbOS5E5QJCRTTFDoAVo8RYhE8NTbIhqYaS4gmiG4+kGEqK2lEHjIbAaAiMhsBoCAAAUxPOIaCu9GgAAAAASUVORK5CYII=","relative_path":"../../src/surgebinding/resources/assets/surgebinding/textures/item/models/shardblade_model/stoneward_blade.png"}],"display":{"thirdperson_righthand":{"rotation":[0,90,0],"translation":[0,17,1],"scale":[2.7,2.7,2.7]},"thirdperson_lefthand":{"rotation":[0,90,0],"translation":[0,17,1],"scale":[2.7,2.7,2.7]},"firstperson_righthand":{"rotation":[0,90,0],"translation":[0,13,0],"scale":[2,2,2]},"firstperson_lefthand":{"rotation":[0,90,0],"translation":[0,13,0],"scale":[2,2,2]},"ground":{"translation":[0,5,0]},"gui":{"rotation":[0,0,-45]},"fixed":{"rotation":[0,0,45],"translation":[-1,1,0]}}} \ No newline at end of file diff --git a/blockbench/surgebinding/shardblades/honorblades/truthwatcher_honorblade.bbmodel b/blockbench/surgebinding/shardblades/honorblades/truthwatcher_honorblade.bbmodel new file mode 100644 index 000000000..ed44c79df --- /dev/null +++ b/blockbench/surgebinding/shardblades/honorblades/truthwatcher_honorblade.bbmodel @@ -0,0 +1 @@ +{"meta":{"format_version":"4.0","model_format":"java_block","box_uv":false},"name":"truthwatcher_honorblade","parent":"","ambientocclusion":true,"front_gui_light":false,"visible_box":[1,1,0],"variable_placeholders":"","variable_placeholder_buttons":[],"resolution":{"width":32,"height":32},"elements":[{"name":"cube","rescale":false,"locked":false,"from":[7.766454208578765,6.734533493205166,7.927500001830085],"to":[8.346454208578765,11.809533493205167,8.000000001830085],"autouv":0,"color":6,"origin":[8.056454208578765,8.112033493205168,7.963750001830085],"faces":{"north":{"uv":[0,0,1,4],"texture":0},"east":{"uv":[1,0,2,4],"texture":0},"south":{"uv":[2,0,3,4],"texture":0},"west":{"uv":[3,0,4,4],"texture":0},"up":{"uv":[5,3,4,2],"texture":0},"down":{"uv":[4,4,3,5],"texture":0}},"type":"cube","uuid":"7fcdd37c-7cf4-ba8c-89b1-57c196b92898"},{"name":"cube","rescale":false,"locked":false,"from":[8.302457276036481,11.948863829042363,7.927500001830085],"to":[8.44745727603648,12.528863829042363,8.000000001830085],"autouv":0,"color":6,"rotation":[0,0,-22.5],"origin":[8.374957276036481,12.238863829042362,7.667022002274318],"faces":{"north":{"uv":[4,3,5,4],"texture":0},"east":{"uv":[4,4,5,5],"texture":0},"south":{"uv":[5,0,6,1],"texture":0},"west":{"uv":[5,1,6,2],"texture":0},"up":{"uv":[6,3,5,2],"texture":0},"down":{"uv":[4,5,3,6],"texture":0}},"type":"cube","uuid":"17c6f610-a8bc-ef21-50c0-92151ea3235e"},{"name":"cube","rescale":false,"locked":false,"from":[8.408812096749099,12.507375764454187,7.927500001830085],"to":[8.553812096749098,13.159875764454187,8.000000001830085],"autouv":0,"color":6,"origin":[7.103812096749101,11.999875764454188,7.667022002274318],"faces":{"north":{"uv":[5,3,6,4],"texture":0},"east":{"uv":[4,5,5,6],"texture":0},"south":{"uv":[5,4,6,5],"texture":0},"west":{"uv":[5,5,6,6],"texture":0},"up":{"uv":[1,7,0,6],"texture":0},"down":{"uv":[7,0,6,1],"texture":0}},"type":"cube","uuid":"e5747439-c245-63c3-b949-051f3063b0a8"},{"name":"cube","rescale":false,"locked":false,"from":[8.03838095988705,11.726601554541318,7.927500001830085],"to":[8.18338095988705,13.18820155454132,8.000000001830085],"autouv":0,"color":6,"rotation":[0,0,-22.5],"origin":[8.110880959887048,12.45160155454132,7.667022002274318],"faces":{"north":{"uv":[1,6,2,7],"texture":0},"east":{"uv":[6,1,7,2],"texture":0},"south":{"uv":[2,6,3,7],"texture":0},"west":{"uv":[6,2,7,3],"texture":0},"up":{"uv":[4,7,3,6],"texture":0},"down":{"uv":[7,3,6,4],"texture":0}},"type":"cube","uuid":"431019d9-5982-314b-08b2-8736f857c02f"},{"name":"cube","rescale":false,"locked":false,"from":[8.28993296194357,13.06546855941482,7.927500001830085],"to":[8.45117296194357,13.226708559414817,8.000000001830085],"autouv":0,"color":6,"rotation":[0,0,45],"origin":[8.388532961943572,13.23656855941482,7.667022002274318],"faces":{"north":{"uv":[4,6,5,7],"texture":0},"east":{"uv":[6,4,7,5],"texture":0},"south":{"uv":[5,6,6,7],"texture":0},"west":{"uv":[6,5,7,6],"texture":0},"up":{"uv":[7,7,6,6],"texture":0},"down":{"uv":[1,7,0,8],"texture":0}},"type":"cube","uuid":"545420ec-0073-6e7b-6fb3-a025bcbc472e"},{"name":"cube","rescale":false,"locked":false,"from":[8.407916737529426,12.47904434462417,7.927500001830085],"to":[8.552916737529426,13.131544344624169,8.000000001830085],"autouv":0,"color":6,"origin":[7.465416737529425,11.97154434462417,7.667022002274318],"faces":{"north":{"uv":[7,0,8,1],"texture":0},"east":{"uv":[1,7,2,8],"texture":0},"south":{"uv":[7,1,8,2],"texture":0},"west":{"uv":[2,7,3,8],"texture":0},"up":{"uv":[8,3,7,2],"texture":0},"down":{"uv":[4,7,3,8],"texture":0}},"type":"cube","uuid":"02de76f2-fc9a-a858-4a20-784e2d8dfffc"},{"name":"cube","rescale":false,"locked":false,"from":[8.135989982957668,11.691976232399956,7.927500001830085],"to":[8.280989982957667,13.141976232399957,8.000000001830085],"autouv":0,"color":6,"rotation":[0,0,-22.5],"origin":[8.208489982957667,12.416976232399957,7.667022002274318],"faces":{"north":{"uv":[7,3,8,4],"texture":0},"east":{"uv":[4,7,5,8],"texture":0},"south":{"uv":[7,4,8,5],"texture":0},"west":{"uv":[5,7,6,8],"texture":0},"up":{"uv":[8,6,7,5],"texture":0},"down":{"uv":[7,7,6,8],"texture":0}},"type":"cube","uuid":"a48a29e1-14b6-b0c9-2ffb-a941f19c1b51"},{"name":"cube","rescale":false,"locked":false,"from":[8.20145420531529,11.809533442317106,7.927500001830085],"to":[8.34645420531529,12.679533442317105,8.000000001830085],"autouv":0,"color":6,"origin":[7.4764542053152905,12.389533442317106,7.667022002274318],"faces":{"north":{"uv":[7,6,8,7],"texture":0},"east":{"uv":[7,7,8,8],"texture":0},"south":{"uv":[0,8,1,9],"texture":0},"west":{"uv":[8,0,9,1],"texture":0},"up":{"uv":[2,9,1,8],"texture":0},"down":{"uv":[9,1,8,2],"texture":0}},"type":"cube","uuid":"2ad7875e-f5a1-7cff-398f-b0603ea2022e"},{"name":"cube","rescale":false,"locked":false,"from":[7.438255813739566,6.048818736439409,7.855000000101551],"to":[7.822505813739569,6.781068736439408,8.07250000010155],"autouv":0,"color":6,"rotation":[0,0,-22.5],"origin":[7.4853808137395665,5.9328187364394065,7.97462500010155],"faces":{"north":{"uv":[2,8,3,9],"texture":0},"east":{"uv":[8,2,9,3],"texture":0},"south":{"uv":[3,8,4,9],"texture":0},"west":{"uv":[8,3,9,4],"texture":0},"up":{"uv":[5,9,4,8],"texture":0},"down":{"uv":[9,4,8,5],"texture":0}},"type":"cube","uuid":"f4b03409-a886-6d21-053a-45662bdbfd24"},{"name":"cube","rescale":false,"locked":false,"from":[8.580402603417964,5.555818736439408,7.855000000101551],"to":[8.674652603417965,7.433568736439408,8.07250000010155],"autouv":0,"color":6,"rotation":[0,0,22.5],"origin":[8.627527603417965,5.9328187364394065,7.97462500010155],"faces":{"north":{"uv":[0,4,1,6],"texture":0},"east":{"uv":[4,0,5,2],"texture":0},"south":{"uv":[1,4,2,6],"texture":0},"west":{"uv":[2,4,3,6],"texture":0},"up":{"uv":[6,9,5,8],"texture":0},"down":{"uv":[9,5,8,6],"texture":0}},"type":"cube","uuid":"0e73108b-e0af-c115-cbb6-4afa04c96e31"},{"name":"cube","rescale":false,"locked":false,"from":[7.7001116858863305,5.501579631007179,7.855000000101551],"to":[8.374361685886331,6.023579631007179,8.07250000010155],"autouv":0,"color":6,"origin":[8.32723668588633,5.740829631007176,7.97462500010155],"faces":{"north":{"uv":[6,8,7,9],"texture":0},"east":{"uv":[8,6,9,7],"texture":0},"south":{"uv":[7,8,8,9],"texture":0},"west":{"uv":[8,7,9,8],"texture":0},"up":{"uv":[9,9,8,8],"texture":0},"down":{"uv":[1,9,0,10],"texture":0}},"type":"cube","uuid":"6494fcf6-e656-9aae-2211-fca8e68ceda6"},{"name":"cube","rescale":false,"locked":false,"from":[8.721087080389196,5.414050109432855,7.855000000101551],"to":[8.815337080389195,5.602550109432855,8.07250000010155],"autouv":0,"color":6,"origin":[8.768212080389198,5.319800109432854,7.97462500010155],"faces":{"north":{"uv":[9,0,10,1],"texture":0},"east":{"uv":[1,9,2,10],"texture":0},"south":{"uv":[9,1,10,2],"texture":0},"west":{"uv":[2,9,3,10],"texture":0},"up":{"uv":[10,3,9,2],"texture":0},"down":{"uv":[4,9,3,10],"texture":0}},"type":"cube","uuid":"445930fe-1a7c-9d40-b060-3f5d701b854d"},{"name":"cube","rescale":false,"locked":false,"from":[8.609296162857563,5.410561004000626,7.855000000101551],"to":[8.703546162857561,6.824311004000625,8.07250000010155],"autouv":0,"color":6,"rotation":[0,0,22.5],"origin":[8.656421162857564,5.693311004000629,7.97462500010155],"faces":{"north":{"uv":[9,3,10,4],"texture":0},"east":{"uv":[4,9,5,10],"texture":0},"south":{"uv":[9,4,10,5],"texture":0},"west":{"uv":[5,9,6,10],"texture":0},"up":{"uv":[10,6,9,5],"texture":0},"down":{"uv":[7,9,6,10],"texture":0}},"type":"cube","uuid":"cc961bd8-c9e5-dd1c-eb41-9d955b1aa90c"},{"name":"cube","rescale":false,"locked":false,"from":[8.026641843984098,5.544662237727799,7.855000000101551],"to":[8.338391843984098,5.733162237727798,8.07250000010155],"autouv":0,"color":6,"rotation":[0,0,22.5],"origin":[8.479766843984097,5.780287237727794,7.97462500010155],"faces":{"north":{"uv":[9,6,10,7],"texture":0},"east":{"uv":[7,9,8,10],"texture":0},"south":{"uv":[9,7,10,8],"texture":0},"west":{"uv":[8,9,9,10],"texture":0},"up":{"uv":[10,9,9,8],"texture":0},"down":{"uv":[10,9,9,10],"texture":0}},"type":"cube","uuid":"657a7a88-457d-052c-223f-f2d4cac3f5cf"},{"name":"cube","rescale":false,"locked":false,"from":[8.374361685886331,6.023579631007179,7.855000000101551],"to":[8.56286168588633,6.117829631007179,8.07250000010155],"autouv":0,"color":6,"origin":[8.421486685886329,5.8350796310071775,7.97462500010155],"faces":{"north":{"uv":[0,10,1,11],"texture":0},"east":{"uv":[10,0,11,1],"texture":0},"south":{"uv":[1,10,2,11],"texture":0},"west":{"uv":[10,1,11,2],"texture":0},"up":{"uv":[3,11,2,10],"texture":0},"down":{"uv":[11,2,10,3],"texture":0}},"type":"cube","uuid":"4b59b0fb-199b-2b33-66b7-ce6e13a6cb56"},{"name":"cube","rescale":false,"locked":false,"from":[8.405089734077398,5.344855932065383,7.855000000101551],"to":[8.499339734077397,5.605855932065383,8.07250000010155],"autouv":0,"color":6,"rotation":[0,0,45],"origin":[8.4522147340774,5.439105932065384,7.97462500010155],"faces":{"north":{"uv":[3,10,4,11],"texture":0},"east":{"uv":[10,3,11,4],"texture":0},"south":{"uv":[4,10,5,11],"texture":0},"west":{"uv":[10,4,11,5],"texture":0},"up":{"uv":[6,11,5,10],"texture":0},"down":{"uv":[11,5,10,6],"texture":0}},"type":"cube","uuid":"4a16c70b-a37d-2dcc-5546-92a604a16b9c"},{"name":"cube","rescale":false,"locked":false,"from":[8.20761168588633,6.023579631007179,7.855000000101551],"to":[8.54111168588633,6.190329631007179,8.07250000010155],"autouv":0,"color":6,"rotation":[0,0,45],"origin":[8.421486685886329,6.070704631007182,7.97462500010155],"faces":{"north":{"uv":[6,10,7,11],"texture":0},"east":{"uv":[10,6,11,7],"texture":0},"south":{"uv":[7,10,8,11],"texture":0},"west":{"uv":[10,7,11,8],"texture":0},"up":{"uv":[9,11,8,10],"texture":0},"down":{"uv":[11,8,10,9],"texture":0}},"type":"cube","uuid":"ff5f2333-efd9-2b46-e094-7743620d391a"},{"name":"cube","rescale":false,"locked":false,"from":[8.207951218797641,4.87999183581298,7.855000000101551],"to":[8.519701218797639,5.430991835812982,8.07250000010155],"autouv":0,"color":6,"rotation":[0,0,-22.5],"origin":[8.472576218797641,5.3367418358129814,7.97462500010155],"faces":{"north":{"uv":[9,10,10,11],"texture":0},"east":{"uv":[10,9,11,10],"texture":0},"south":{"uv":[10,10,11,11],"texture":0},"west":{"uv":[0,11,1,12],"texture":0},"up":{"uv":[12,1,11,0],"texture":0},"down":{"uv":[2,11,1,12],"texture":0}},"type":"cube","uuid":"14306ebc-afbe-e1e3-576e-de6765c0a734"},{"name":"cube","rescale":false,"locked":false,"from":[7.48623426945423,5.869522719032128,7.855000000101551],"to":[8.087984269454228,6.058022719032127,8.07250000010155],"autouv":0,"color":6,"origin":[7.533359269454229,6.036272719032129,7.97462500010155],"faces":{"north":{"uv":[11,1,12,2],"texture":0},"east":{"uv":[2,11,3,12],"texture":0},"south":{"uv":[11,2,12,3],"texture":0},"west":{"uv":[3,11,4,12],"texture":0},"up":{"uv":[12,4,11,3],"texture":0},"down":{"uv":[5,11,4,12],"texture":0}},"type":"cube","uuid":"4e2a3a71-ba81-5794-103a-cbef63d4b08d"},{"name":"cube","rescale":false,"locked":false,"from":[7.61157649023406,5.8386256100745815,7.855000000101551],"to":[7.705826490234059,6.027125610074581,8.07250000010155],"autouv":0,"color":6,"rotation":[0,0,-45],"origin":[7.586201490234059,6.005375610074583,7.97462500010155],"faces":{"north":{"uv":[11,4,12,5],"texture":0},"east":{"uv":[5,11,6,12],"texture":0},"south":{"uv":[11,5,12,6],"texture":0},"west":{"uv":[6,11,7,12],"texture":0},"up":{"uv":[12,7,11,6],"texture":0},"down":{"uv":[8,11,7,12],"texture":0}},"type":"cube","uuid":"a57c2a89-899c-e3e1-9e3b-5c34f0e69029"},{"name":"cube","rescale":false,"locked":false,"from":[7.647268446024457,5.7870436133216545,7.855000000101551],"to":[7.7415184460244575,6.0697936133216555,8.07250000010155],"autouv":0,"color":6,"origin":[8.854393446024456,5.975543613321657,7.97462500010155],"faces":{"north":{"uv":[11,7,12,8],"texture":0},"east":{"uv":[8,11,9,12],"texture":0},"south":{"uv":[11,8,12,9],"texture":0},"west":{"uv":[9,11,10,12],"texture":0},"up":{"uv":[12,10,11,9],"texture":0},"down":{"uv":[11,11,10,12],"texture":0}},"type":"cube","uuid":"44722f81-027e-5a4c-01c3-34bc9e6df505"},{"name":"cube","rescale":false,"locked":false,"from":[7.59675375280425,5.438839101163078,7.855000000101551],"to":[7.981003752804249,5.8158391011630775,8.07250000010155],"autouv":0,"color":6,"rotation":[0,0,-22.5],"origin":[7.643878752804248,5.674464101163078,7.97462500010155],"faces":{"north":{"uv":[11,10,12,11],"texture":0},"east":{"uv":[11,11,12,12],"texture":0},"south":{"uv":[0,12,1,13],"texture":0},"west":{"uv":[12,0,13,1],"texture":0},"up":{"uv":[2,13,1,12],"texture":0},"down":{"uv":[13,1,12,2],"texture":0}},"type":"cube","uuid":"20cd3cd7-1c15-d704-3003-46bdb3fdb40e"},{"name":"cube","rescale":false,"locked":false,"from":[7.510171146083629,5.286308943065309,7.855000000101551],"to":[7.89442114608363,5.4748089430653115,8.07250000010155],"autouv":0,"color":6,"origin":[7.55729614608363,6.040308943065312,7.97462500010155],"faces":{"north":{"uv":[2,12,3,13],"texture":0},"east":{"uv":[12,2,13,3],"texture":0},"south":{"uv":[3,12,4,13],"texture":0},"west":{"uv":[12,3,13,4],"texture":0},"up":{"uv":[5,13,4,12],"texture":0},"down":{"uv":[13,4,12,5],"texture":0}},"type":"cube","uuid":"3a6e7d32-ee14-c852-af59-f1cd5e1489d4"},{"name":"cube","rescale":false,"locked":false,"from":[8.326546162857563,5.881811004000626,7.855000000101551],"to":[8.420796162857563,6.918561004000626,8.07250000010155],"autouv":0,"color":6,"rotation":[0,0,22.5],"origin":[8.656421162857564,5.693311004000629,7.97462500010155],"faces":{"north":{"uv":[5,12,6,13],"texture":0},"east":{"uv":[12,5,13,6],"texture":0},"south":{"uv":[6,12,7,13],"texture":0},"west":{"uv":[12,6,13,7],"texture":0},"up":{"uv":[8,13,7,12],"texture":0},"down":{"uv":[13,7,12,8],"texture":0}},"type":"cube","uuid":"a7ee9f63-a6b8-6cae-15b4-01d189cd2703"},{"name":"cube","rescale":false,"locked":false,"from":[8.08581837788305,5.937184798520688,7.855000000101551],"to":[8.180068377883053,7.082684798520688,8.07250000010155],"autouv":0,"color":6,"origin":[8.132943377883048,6.201809798520687,7.97462500010155],"faces":{"north":{"uv":[8,12,9,13],"texture":0},"east":{"uv":[12,8,13,9],"texture":0},"south":{"uv":[9,12,10,13],"texture":0},"west":{"uv":[12,9,13,10],"texture":0},"up":{"uv":[11,13,10,12],"texture":0},"down":{"uv":[13,10,12,11],"texture":0}},"type":"cube","uuid":"46b24161-07c7-bbc7-2a09-fe484ffb810f"},{"name":"cube","rescale":false,"locked":false,"from":[8.008115460949881,5.43625845556998,7.854999998403266],"to":[8.04726546094988,5.47540845556998,8.072499998403266],"autouv":0,"color":6,"origin":[8.027690457216245,5.337848284544912,7.947074998286588],"faces":{"north":{"uv":[11,12,12,13],"texture":0},"east":{"uv":[12,11,13,12],"texture":0},"south":{"uv":[12,12,13,13],"texture":0},"west":{"uv":[0,13,1,14],"texture":0},"up":{"uv":[14,1,13,0],"texture":0},"down":{"uv":[2,13,1,14],"texture":0}},"type":"cube","uuid":"e973a618-7692-d2b5-837c-a8b588040b3f"},{"name":"cube","rescale":false,"locked":false,"from":[7.935615457216244,5.436258455103275,7.854999998169913],"to":[8.047265457216245,5.475408455103276,8.072499998169913],"autouv":0,"color":6,"rotation":[0,0,-22.5],"origin":[8.027690457216245,5.337848284544912,7.947074998286588],"faces":{"north":{"uv":[13,1,14,2],"texture":0},"east":{"uv":[2,13,3,14],"texture":0},"south":{"uv":[13,2,14,3],"texture":0},"west":{"uv":[3,13,4,14],"texture":0},"up":{"uv":[14,4,13,3],"texture":0},"down":{"uv":[5,13,4,14],"texture":0}},"type":"cube","uuid":"b0eaf9d6-c51b-a381-6e9d-8d7fa675e5d4"},{"name":"cube","rescale":false,"locked":false,"from":[7.863115457216244,5.436258455103276,7.854999998169913],"to":[8.119765457216243,5.5479084551032765,8.072499998169913],"autouv":0,"color":6,"rotation":[0,0,-45],"origin":[8.027690457216245,5.337848284544912,7.947074998286588],"faces":{"north":{"uv":[13,4,14,5],"texture":0},"east":{"uv":[5,13,6,14],"texture":0},"south":{"uv":[13,5,14,6],"texture":0},"west":{"uv":[6,13,7,14],"texture":0},"up":{"uv":[14,7,13,6],"texture":0},"down":{"uv":[8,13,7,14],"texture":0}},"type":"cube","uuid":"a791413e-1800-2631-8b25-b4368311314e"},{"name":"cube","rescale":false,"locked":false,"from":[7.935615457216244,5.436258455103275,7.854999998169913],"to":[8.119765457216246,5.5479084551032765,8.072499998169913],"autouv":0,"color":6,"rotation":[0,0,22.5],"origin":[8.027690457216245,5.337848284544912,7.947074998286588],"faces":{"north":{"uv":[13,7,14,8],"texture":0},"east":{"uv":[8,13,9,14],"texture":0},"south":{"uv":[13,8,14,9],"texture":0},"west":{"uv":[9,13,10,14],"texture":0},"up":{"uv":[14,10,13,9],"texture":0},"down":{"uv":[11,13,10,14],"texture":0}},"type":"cube","uuid":"e2f7d95e-7b45-0ac4-d2eb-f1dbea2075b5"},{"name":"cube","rescale":false,"locked":false,"from":[7.9356154572162465,5.436258455103276,7.854999998169913],"to":[8.047265457216245,5.5479084551032765,8.072499998169913],"autouv":0,"color":6,"rotation":[0,0,45],"origin":[8.027690457216245,5.337848284544912,7.947074998286588],"faces":{"north":{"uv":[13,10,14,11],"texture":0},"east":{"uv":[11,13,12,14],"texture":0},"south":{"uv":[13,11,14,12],"texture":0},"west":{"uv":[12,13,13,14],"texture":0},"up":{"uv":[14,13,13,12],"texture":0},"down":{"uv":[14,13,13,14],"texture":0}},"type":"cube","uuid":"08a476a2-af2d-f67c-ede2-6e3d8b3e1dba"},{"name":"cube","rescale":false,"locked":false,"from":[7.9356154572162465,5.200288113986549,7.854999998169913],"to":[8.119765457216246,5.239438113986548,8.072499998169913],"autouv":0,"color":6,"rotation":[0,0,-45],"origin":[8.027690457216245,5.337848284544912,7.947074998286588],"faces":{"north":{"uv":[0,14,1,15],"texture":0},"east":{"uv":[14,0,15,1],"texture":0},"south":{"uv":[1,14,2,15],"texture":0},"west":{"uv":[14,1,15,2],"texture":0},"up":{"uv":[3,15,2,14],"texture":0},"down":{"uv":[15,2,14,3],"texture":0}},"type":"cube","uuid":"2a2c1534-b65f-f3e6-d2a7-64207c44e4be"},{"name":"cube","rescale":false,"locked":false,"from":[8.008115457216245,5.200288113986549,7.854999998169913],"to":[8.047265457216245,5.23943811398655,8.072499998169913],"autouv":0,"color":6,"rotation":[0,0,-22.5],"origin":[8.027690457216245,5.337848284544912,7.947074998286588],"faces":{"north":{"uv":[3,14,4,15],"texture":0},"east":{"uv":[14,3,15,4],"texture":0},"south":{"uv":[4,14,5,15],"texture":0},"west":{"uv":[14,4,15,5],"texture":0},"up":{"uv":[6,15,5,14],"texture":0},"down":{"uv":[15,5,14,6],"texture":0}},"type":"cube","uuid":"ab5f788d-2582-58cb-793c-e1a6cdc57968"},{"name":"cube","rescale":false,"locked":false,"from":[8.008115457216245,5.200288113986549,7.854999998169913],"to":[8.047265457216245,5.239438113986548,8.072499998169913],"autouv":0,"color":6,"rotation":[0,0,45],"origin":[8.027690457216245,5.337848284544912,7.947074998286588],"faces":{"north":{"uv":[6,14,7,15],"texture":0},"east":{"uv":[14,6,15,7],"texture":0},"south":{"uv":[7,14,8,15],"texture":0},"west":{"uv":[14,7,15,8],"texture":0},"up":{"uv":[9,15,8,14],"texture":0},"down":{"uv":[15,8,14,9],"texture":0}},"type":"cube","uuid":"66ef70bd-1d39-8681-e89f-82a6bbce87a9"},{"name":"cube","rescale":false,"locked":false,"from":[8.008115457216245,5.200288113986549,7.854999998169913],"to":[8.192265457216246,5.23943811398655,8.072499998169913],"autouv":0,"color":6,"rotation":[0,0,22.5],"origin":[8.027690457216245,5.337848284544912,7.947074998286588],"faces":{"north":{"uv":[9,14,10,15],"texture":0},"east":{"uv":[14,9,15,10],"texture":0},"south":{"uv":[10,14,11,15],"texture":0},"west":{"uv":[14,10,15,11],"texture":0},"up":{"uv":[12,15,11,14],"texture":0},"down":{"uv":[15,11,14,12],"texture":0}},"type":"cube","uuid":"0e251fc8-f0fe-ef79-38f4-0bfeab657cf6"},{"name":"cube","rescale":false,"locked":false,"from":[7.863115460949881,5.127788113519845,7.854999998403266],"to":[8.19226546094988,5.239438113519845,8.072499998403266],"autouv":0,"color":6,"origin":[8.027690457216245,5.337848284544912,7.947074998286588],"faces":{"north":{"uv":[12,14,13,15],"texture":0},"east":{"uv":[14,12,15,13],"texture":0},"south":{"uv":[13,14,14,15],"texture":0},"west":{"uv":[14,13,15,14],"texture":0},"up":{"uv":[15,15,14,14],"texture":0},"down":{"uv":[1,15,0,16],"texture":0}},"type":"cube","uuid":"173111b2-e616-40ea-f6de-47b81f1fd55e"},{"name":"cube","rescale":false,"locked":false,"from":[8.126100627774608,5.318273284544912,7.854999998169913],"to":[8.165250627774608,5.357423284544911,8.072499998169913],"autouv":0,"color":6,"rotation":[0,0,22.5],"origin":[8.027690457216245,5.337848284544912,7.947074998286588],"faces":{"north":{"uv":[15,0,16,1],"texture":0},"east":{"uv":[1,15,2,16],"texture":0},"south":{"uv":[15,1,16,2],"texture":0},"west":{"uv":[2,15,3,16],"texture":0},"up":{"uv":[16,3,15,2],"texture":0},"down":{"uv":[4,15,3,16],"texture":0}},"type":"cube","uuid":"44ea0d81-6224-0848-f689-830198b450f6"},{"name":"cube","rescale":false,"locked":false,"from":[8.126100631508244,5.3182732864117295,7.854999998403266],"to":[8.165250631508243,5.502423286411731,8.072499998403266],"autouv":0,"color":6,"origin":[8.027690457216245,5.337848284544912,7.947074998286588],"faces":{"north":{"uv":[15,3,16,4],"texture":0},"east":{"uv":[4,15,5,16],"texture":0},"south":{"uv":[15,4,16,5],"texture":0},"west":{"uv":[5,15,6,16],"texture":0},"up":{"uv":[16,6,15,5],"texture":0},"down":{"uv":[7,15,6,16],"texture":0}},"type":"cube","uuid":"1c9a6844-43ae-4558-f3ea-8ea198f34cc5"},{"name":"cube","rescale":false,"locked":false,"from":[8.126100627774608,5.245773284544912,7.854999998169913],"to":[8.237750627774606,5.502423284544913,8.072499998169913],"autouv":0,"color":6,"rotation":[0,0,-22.5],"origin":[8.027690457216245,5.337848284544912,7.947074998286588],"faces":{"north":{"uv":[15,6,16,7],"texture":0},"east":{"uv":[7,15,8,16],"texture":0},"south":{"uv":[15,7,16,8],"texture":0},"west":{"uv":[8,15,9,16],"texture":0},"up":{"uv":[16,9,15,8],"texture":0},"down":{"uv":[10,15,9,16],"texture":0}},"type":"cube","uuid":"32ca1dee-c2ea-8bf6-e5a2-41d860e9c3b4"},{"name":"cube","rescale":false,"locked":false,"from":[7.8176302866578835,5.318273284544912,7.854999998169913],"to":[7.929280286657883,5.4299232845449135,8.072499998169913],"autouv":0,"color":6,"rotation":[0,0,22.5],"origin":[8.027690457216245,5.337848284544912,7.947074998286588],"faces":{"north":{"uv":[15,9,16,10],"texture":0},"east":{"uv":[10,15,11,16],"texture":0},"south":{"uv":[15,10,16,11],"texture":0},"west":{"uv":[11,15,12,16],"texture":0},"up":{"uv":[16,12,15,11],"texture":0},"down":{"uv":[13,15,12,16],"texture":0}},"type":"cube","uuid":"c713686d-ecb6-2f15-7a13-59b4a7564d16"},{"name":"cube","rescale":false,"locked":false,"from":[7.890130282924247,5.3182732864117295,7.854999998403266],"to":[7.929280282924246,5.3574232864117315,8.072499998403266],"autouv":0,"color":6,"origin":[8.027690457216245,5.337848284544912,7.947074998286588],"faces":{"north":{"uv":[15,12,16,13],"texture":0},"east":{"uv":[13,15,14,16],"texture":0},"south":{"uv":[15,13,16,14],"texture":0},"west":{"uv":[14,15,15,16],"texture":0},"up":{"uv":[16,15,15,14],"texture":0},"down":{"uv":[16,15,15,16],"texture":0}},"type":"cube","uuid":"4944ef43-dd53-5769-0f2e-06ff56f8842d"},{"name":"cube","rescale":false,"locked":false,"from":[7.8901302866578815,5.245773284544912,7.854999998169913],"to":[7.929280286657883,5.357423284544911,8.072499998169913],"autouv":0,"color":6,"rotation":[0,0,-22.5],"origin":[8.027690457216245,5.337848284544912,7.947074998286588],"faces":{"north":{"uv":[0,16,1,17],"texture":0},"east":{"uv":[16,0,17,1],"texture":0},"south":{"uv":[1,16,2,17],"texture":0},"west":{"uv":[16,1,17,2],"texture":0},"up":{"uv":[3,17,2,16],"texture":0},"down":{"uv":[17,2,16,3],"texture":0}},"type":"cube","uuid":"d94b037d-1ee5-2048-02be-63d13c098f11"},{"name":"cube","rescale":false,"locked":false,"from":[7.800755813739566,6.266318736439409,7.855000000101551],"to":[8.040005813739569,6.418568736439408,8.07250000010155],"autouv":0,"color":6,"rotation":[0,0,-22.5],"origin":[7.4853808137395665,5.9328187364394065,7.97462500010155],"faces":{"north":{"uv":[3,16,4,17],"texture":0},"east":{"uv":[16,3,17,4],"texture":0},"south":{"uv":[4,16,5,17],"texture":0},"west":{"uv":[16,4,17,5],"texture":0},"up":{"uv":[6,17,5,16],"texture":0},"down":{"uv":[17,5,16,6],"texture":0}},"type":"cube","uuid":"c36f2603-b796-fac1-3099-417595c8a0d4"},{"name":"cube","rescale":false,"locked":false,"from":[7.800755813739566,6.411318736439409,7.855000000101551],"to":[7.967505813739569,6.563568736439407,8.07250000010155],"autouv":0,"color":6,"rotation":[0,0,-22.5],"origin":[7.4853808137395665,5.9328187364394065,7.97462500010155],"faces":{"north":{"uv":[6,16,7,17],"texture":0},"east":{"uv":[16,6,17,7],"texture":0},"south":{"uv":[7,16,8,17],"texture":0},"west":{"uv":[16,7,17,8],"texture":0},"up":{"uv":[9,17,8,16],"texture":0},"down":{"uv":[17,8,16,9],"texture":0}},"type":"cube","uuid":"c12f9e42-9873-a25f-caec-fa5b0e9d3145"},{"name":"cube","rescale":false,"locked":false,"from":[7.982648576003929,5.926505403502902,7.855000000101551],"to":[8.149398576003934,7.0937554035029,8.07250000010155],"autouv":0,"color":6,"origin":[8.066023576003932,6.292630403502903,7.963750000101551],"faces":{"north":{"uv":[9,16,10,17],"texture":0},"east":{"uv":[16,9,17,10],"texture":0},"south":{"uv":[10,16,11,17],"texture":0},"west":{"uv":[16,10,17,11],"texture":0},"up":{"uv":[12,17,11,16],"texture":0},"down":{"uv":[17,11,16,12],"texture":0}},"type":"cube","uuid":"b514b95a-7eac-9449-6fc7-76c3f2d2fb88"},{"name":"cube","rescale":false,"locked":false,"from":[7.620799481074417,5.2743984271098245,7.855000001830085],"to":[7.954299481074418,5.368648427109825,8.072500001830086],"autouv":0,"color":6,"rotation":[0,0,-22.5],"origin":[7.6425494810744175,5.321523427109822,7.963750001830085],"faces":{"north":{"uv":[12,16,13,17],"texture":0},"east":{"uv":[16,12,17,13],"texture":0},"south":{"uv":[13,16,14,17],"texture":0},"west":{"uv":[16,13,17,14],"texture":0},"up":{"uv":[15,17,14,16],"texture":0},"down":{"uv":[17,14,16,15],"texture":0}},"type":"cube","uuid":"51cd10da-4039-cc9f-3617-e94c5ff207c5"},{"name":"cube","rescale":false,"locked":false,"from":[7.501008099868439,4.732168993899144,7.854999999669417],"to":[7.812758099868438,5.254168993899143,8.072499999669416],"autouv":0,"color":6,"rotation":[0,0,-45],"origin":[7.548133099868437,4.920668993899144,7.9637499996694165],"faces":{"north":{"uv":[15,16,16,17],"texture":0},"east":{"uv":[16,15,17,16],"texture":0},"south":{"uv":[16,16,17,17],"texture":0},"west":{"uv":[0,17,1,18],"texture":0},"up":{"uv":[18,1,17,0],"texture":0},"down":{"uv":[2,17,1,18],"texture":0}},"type":"cube","uuid":"202ccf05-4ce7-39fc-114a-c93fa4f84661"},{"name":"cube","rescale":false,"locked":false,"from":[8.428745775849617,5.465919112487326,7.855000001830085],"to":[8.68974577584962,5.560169112487326,8.072500001830086],"autouv":0,"color":6,"rotation":[0,0,-22.5],"origin":[7.145495775849618,5.513044112487323,7.963750001830085],"faces":{"north":{"uv":[17,1,18,2],"texture":0},"east":{"uv":[2,17,3,18],"texture":0},"south":{"uv":[17,2,18,3],"texture":0},"west":{"uv":[3,17,4,18],"texture":0},"up":{"uv":[18,4,17,3],"texture":0},"down":{"uv":[5,17,4,18],"texture":0}},"type":"cube","uuid":"05642918-531a-6796-7ce8-ec92ab6fcef6"},{"name":"cube","rescale":false,"locked":false,"from":[7.84873426945423,6.014522719032128,7.855000000101551],"to":[8.087984269454228,6.203022719032127,8.07250000010155],"autouv":0,"color":6,"origin":[7.533359269454229,6.036272719032129,7.97462500010155],"faces":{"north":{"uv":[17,4,18,5],"texture":0},"east":{"uv":[5,17,6,18],"texture":0},"south":{"uv":[17,5,18,6],"texture":0},"west":{"uv":[6,17,7,18],"texture":0},"up":{"uv":[18,7,17,6],"texture":0},"down":{"uv":[8,17,7,18],"texture":0}},"type":"cube","uuid":"2e545b89-7b1b-a112-aa7e-475a21d62f27"},{"name":"cube","rescale":false,"locked":false,"from":[7.671561884559387,5.2404800734917245,7.855000001830085],"to":[7.715061884559389,5.334730073491725,8.072500001830086],"autouv":0,"color":6,"rotation":[0,0,-45],"origin":[7.693311884559388,5.287605073491725,7.963750001830085],"faces":{"north":{"uv":[17,7,18,8],"texture":0},"east":{"uv":[8,17,9,18],"texture":0},"south":{"uv":[17,8,18,9],"texture":0},"west":{"uv":[9,17,10,18],"texture":0},"up":{"uv":[18,10,17,9],"texture":0},"down":{"uv":[11,17,10,18],"texture":0}},"type":"cube","uuid":"bf11f4a5-72c0-a83e-21c6-0ef38f537915"},{"name":"cube","rescale":false,"locked":false,"from":[7.680105238177486,5.215092670006753,7.855000001830085],"to":[7.7743552381774865,5.331092670006755,8.072500001830086],"autouv":0,"color":6,"rotation":[0,0,22.5],"origin":[7.7272302381774844,5.236842670006753,7.963750001830085],"faces":{"north":{"uv":[17,10,18,11],"texture":0},"east":{"uv":[11,17,12,18],"texture":0},"south":{"uv":[17,11,18,12],"texture":0},"west":{"uv":[12,17,13,18],"texture":0},"up":{"uv":[18,13,17,12],"texture":0},"down":{"uv":[14,17,13,18],"texture":0}},"type":"cube","uuid":"d78368a3-81e9-e63d-3448-310312dd10d0"},{"name":"cube","rescale":false,"locked":false,"from":[7.692015780060996,4.937714332423163,7.855000001830085],"to":[7.931265780060997,5.271214332423165,8.072500001830086],"autouv":0,"color":6,"origin":[7.739140780060994,5.176964332423164,7.963750001830085],"faces":{"north":{"uv":[17,13,18,14],"texture":0},"east":{"uv":[14,17,15,18],"texture":0},"south":{"uv":[17,14,18,15],"texture":0},"west":{"uv":[15,17,16,18],"texture":0},"up":{"uv":[18,16,17,15],"texture":0},"down":{"uv":[17,17,16,18],"texture":0}},"type":"cube","uuid":"f3ab51af-7c56-d29c-8368-873391aee391"},{"name":"cube","rescale":false,"locked":false,"from":[7.680105238177486,5.095335994839573,7.855000001830085],"to":[7.7743552381774865,5.1388359948395745,8.072500001830086],"autouv":0,"color":6,"rotation":[0,0,-22.5],"origin":[7.7272302381774844,5.117085994839574,7.963750001830085],"faces":{"north":{"uv":[17,16,18,17],"texture":0},"east":{"uv":[17,17,18,18],"texture":0},"south":{"uv":[0,18,1,19],"texture":0},"west":{"uv":[18,0,19,1],"texture":0},"up":{"uv":[2,19,1,18],"texture":0},"down":{"uv":[19,1,18,2],"texture":0}},"type":"cube","uuid":"9bc32b3a-6cc9-93e5-f5a3-d2bf26b76231"},{"name":"cube","rescale":false,"locked":false,"from":[7.708086893547144,4.728186400752715,7.855],"to":[7.853086893547144,4.800686400752714,8.0725],"autouv":0,"color":6,"rotation":[0,0,22.5],"origin":[7.816836893547144,4.7644364007527145,8.036250001830085],"faces":{"north":{"uv":[2,18,3,19],"texture":0},"east":{"uv":[18,2,19,3],"texture":0},"south":{"uv":[3,18,4,19],"texture":0},"west":{"uv":[18,3,19,4],"texture":0},"up":{"uv":[5,19,4,18],"texture":0},"down":{"uv":[19,4,18,5],"texture":0}},"type":"cube","uuid":"45ab8afe-281c-9dcb-06df-adf1579e1900"},{"name":"cube","rescale":false,"locked":false,"from":[7.438255813739566,6.048818736439409,7.855000000101551],"to":[7.532505813739569,7.433568736439408,8.07250000010155],"autouv":0,"color":6,"rotation":[0,0,-22.5],"origin":[7.4853808137395665,5.9328187364394065,7.97462500010155],"faces":{"north":{"uv":[5,18,6,19],"texture":0},"east":{"uv":[18,5,19,6],"texture":0},"south":{"uv":[6,18,7,19],"texture":0},"west":{"uv":[18,6,19,7],"texture":0},"up":{"uv":[8,19,7,18],"texture":0},"down":{"uv":[19,7,18,8],"texture":0}},"type":"cube","uuid":"3bb5b80e-0a79-192e-3684-a2c15b7d6f3d"},{"name":"cube","rescale":false,"locked":false,"from":[8.353315392789044,4.94858387116286,7.855000001830085],"to":[8.447565392789045,5.1370838711628615,8.072500001830086],"autouv":0,"color":6,"rotation":[0,0,22.5],"origin":[8.400440392789044,5.042833871162861,7.963750001830085],"faces":{"north":{"uv":[8,18,9,19],"texture":0},"east":{"uv":[18,8,19,9],"texture":0},"south":{"uv":[9,18,10,19],"texture":0},"west":{"uv":[18,9,19,10],"texture":0},"up":{"uv":[11,19,10,18],"texture":0},"down":{"uv":[19,10,18,11],"texture":0}},"type":"cube","uuid":"8a75d56f-faea-3e20-ccc3-23c6c5753c6a"},{"name":"cube","rescale":false,"locked":false,"from":[8.341404850905533,5.08096220874645,7.855000001830085],"to":[8.435654850905536,5.1244622087464515,8.072500001830086],"autouv":0,"color":6,"origin":[8.388529850905535,5.102712208746451,7.963750001830085],"faces":{"north":{"uv":[11,18,12,19],"texture":0},"east":{"uv":[18,11,19,12],"texture":0},"south":{"uv":[12,18,13,19],"texture":0},"west":{"uv":[18,12,19,13],"texture":0},"up":{"uv":[14,19,13,18],"texture":0},"down":{"uv":[19,13,18,14],"texture":0}},"type":"cube","uuid":"0d400aa5-c481-16c0-be4d-c9d5744c5ab3"},{"name":"cube","rescale":false,"locked":false,"from":[8.353315392789044,5.14084054633004,7.855000001830085],"to":[8.447565392789045,5.184340546330041,8.072500001830086],"autouv":0,"color":6,"rotation":[0,0,-22.5],"origin":[8.400440392789044,5.1625905463300406,7.963750001830085],"faces":{"north":{"uv":[14,18,15,19],"texture":0},"east":{"uv":[18,14,19,15],"texture":0},"south":{"uv":[15,18,16,19],"texture":0},"west":{"uv":[18,15,19,16],"texture":0},"up":{"uv":[17,19,16,18],"texture":0},"down":{"uv":[19,16,18,17],"texture":0}},"type":"cube","uuid":"7941dc6f-8605-8613-ad18-42558f592355"},{"name":"cube","rescale":false,"locked":false,"from":[8.387233746407144,4.9703214676778895,7.855000001830085],"to":[8.481483746407145,5.013821467677891,8.072500001830086],"autouv":0,"color":6,"rotation":[0,0,45],"origin":[8.434358746407142,4.99207146767789,7.963750001830085],"faces":{"north":{"uv":[17,18,18,19],"texture":0},"east":{"uv":[18,17,19,18],"texture":0},"south":{"uv":[18,18,19,19],"texture":0},"west":{"uv":[0,19,1,20],"texture":0},"up":{"uv":[20,1,19,0],"texture":0},"down":{"uv":[2,19,1,20],"texture":0}},"type":"cube","uuid":"a31253f0-8e21-491c-c266-ffcbebcfc417"},{"name":"cube","rescale":false,"locked":false,"from":[7.5752306497805115,4.871373066326116,7.855000001830085],"to":[8.923730649780513,4.965623066326118,8.072500001830086],"autouv":0,"color":6,"origin":[8.648230649780512,4.918498066326115,7.963750001830085],"faces":{"north":{"uv":[19,1,20,2],"texture":0},"east":{"uv":[2,19,3,20],"texture":0},"south":{"uv":[19,2,20,3],"texture":0},"west":{"uv":[3,19,4,20],"texture":0},"up":{"uv":[20,4,19,3],"texture":0},"down":{"uv":[5,19,4,20],"texture":0}},"type":"cube","uuid":"8996c7f8-43d4-5101-8fde-52e989ffa609"},{"name":"cube","rescale":false,"locked":false,"from":[8.88989299884626,4.767265605438082,7.855000001830085],"to":[9.005892998846262,4.8615156054380835,8.072500001830086],"autouv":0,"color":6,"rotation":[0,0,45],"origin":[8.839142998846262,4.814390605438082,7.963750001830085],"faces":{"north":{"uv":[19,4,20,5],"texture":0},"east":{"uv":[5,19,6,20],"texture":0},"south":{"uv":[19,5,20,6],"texture":0},"west":{"uv":[6,19,7,20],"texture":0},"up":{"uv":[20,7,19,6],"texture":0},"down":{"uv":[8,19,7,20],"texture":0}},"type":"cube","uuid":"7b2d3405-7fb3-601e-39b6-60c7d04e5ed9"},{"name":"cube","rescale":false,"locked":false,"from":[8.706232103448649,4.791171050095734,7.855000001830085],"to":[8.89473210344865,4.885421050095735,8.072500001830086],"autouv":0,"color":6,"rotation":[0,0,22.5],"origin":[8.836732103448648,4.838296050095734,7.963750001830085],"faces":{"north":{"uv":[19,7,20,8],"texture":0},"east":{"uv":[8,19,9,20],"texture":0},"south":{"uv":[19,8,20,9],"texture":0},"west":{"uv":[9,19,10,20],"texture":0},"up":{"uv":[20,10,19,9],"texture":0},"down":{"uv":[11,19,10,20],"texture":0}},"type":"cube","uuid":"ebc93b0f-267b-6422-c7b4-0e86cc0709a1"},{"name":"cube","rescale":false,"locked":false,"from":[8.110699787195635,4.744818040393882,7.855000001830085],"to":[8.734199787195635,4.839068040393883,8.072500001830086],"autouv":0,"color":6,"origin":[8.458699787195634,4.791943040393881,7.963750001830085],"faces":{"north":{"uv":[19,10,20,11],"texture":0},"east":{"uv":[11,19,12,20],"texture":0},"south":{"uv":[19,11,20,12],"texture":0},"west":{"uv":[12,19,13,20],"texture":0},"up":{"uv":[20,13,19,12],"texture":0},"down":{"uv":[14,19,13,20],"texture":0}},"type":"cube","uuid":"dc92c871-b65f-51ec-6d14-9a591a7e4289"},{"name":"cube","rescale":false,"locked":false,"from":[7.4581997871956345,4.744818040393882,7.855000001830085],"to":[7.936699787195636,4.839068040393883,8.072500001830086],"autouv":0,"color":6,"origin":[8.458699787195634,4.791943040393881,7.963750001830085],"faces":{"north":{"uv":[19,13,20,14],"texture":0},"east":{"uv":[14,19,15,20],"texture":0},"south":{"uv":[19,14,20,15],"texture":0},"west":{"uv":[15,19,16,20],"texture":0},"up":{"uv":[20,16,19,15],"texture":0},"down":{"uv":[17,19,16,20],"texture":0}},"type":"cube","uuid":"e57a86fc-5538-e5db-9a2b-92789f58e5f2"},{"name":"cube","rescale":false,"locked":false,"from":[7.893199787195634,4.672318040393883,7.855000001830085],"to":[8.183199787195633,5.179818040393883,8.072500001830086],"autouv":0,"color":6,"origin":[8.458699787195634,4.791943040393881,7.963750001830085],"faces":{"north":{"uv":[19,16,20,17],"texture":0},"east":{"uv":[17,19,18,20],"texture":0},"south":{"uv":[19,17,20,18],"texture":0},"west":{"uv":[18,19,19,20],"texture":0},"up":{"uv":[20,19,19,18],"texture":0},"down":{"uv":[20,19,19,20],"texture":0}},"type":"cube","uuid":"82f67c6c-0674-886e-bea1-79485d55ab7f"},{"name":"cube","rescale":false,"locked":false,"from":[7.604360099145295,4.643162348082509,7.855],"to":[7.749360099145295,4.715662348082509,8.0725],"autouv":0,"color":6,"rotation":[0,0,45],"origin":[7.676860099145295,4.679412348082509,8.036250001830085],"faces":{"north":{"uv":[0,20,1,21],"texture":0},"east":{"uv":[20,0,21,1],"texture":0},"south":{"uv":[1,20,2,21],"texture":0},"west":{"uv":[20,1,21,2],"texture":0},"up":{"uv":[3,21,2,20],"texture":0},"down":{"uv":[21,2,20,3],"texture":0}},"type":"cube","uuid":"10a4d8fc-7019-fb10-28c0-617c15714d4d"},{"name":"cube","rescale":false,"locked":false,"from":[7.424458320898323,4.500426186734193,7.855],"to":[7.641958320898323,4.645426186734192,8.0725],"autouv":0,"color":6,"rotation":[0,0,-22.5],"origin":[7.605708320898323,4.572926186734192,8.036250001830085],"faces":{"north":{"uv":[3,20,4,21],"texture":0},"east":{"uv":[20,3,21,4],"texture":0},"south":{"uv":[4,20,5,21],"texture":0},"west":{"uv":[20,4,21,5],"texture":0},"up":{"uv":[6,21,5,20],"texture":0},"down":{"uv":[21,5,20,6],"texture":0}},"type":"cube","uuid":"6fb04c2c-fffb-b4f1-a580-598fbf76a49f"},{"name":"cube","rescale":false,"locked":false,"from":[7.244556542651351,4.430190025385876,7.855],"to":[7.607056542651351,4.575190025385877,8.0725],"autouv":0,"color":6,"rotation":[0,0,45],"origin":[7.53455654265135,4.466440025385876,8.036250001830085],"faces":{"north":{"uv":[6,20,7,21],"texture":0},"east":{"uv":[20,6,21,7],"texture":0},"south":{"uv":[7,20,8,21],"texture":0},"west":{"uv":[20,7,21,8],"texture":0},"up":{"uv":[9,21,8,20],"texture":0},"down":{"uv":[21,8,20,9],"texture":0}},"type":"cube","uuid":"67201ebc-968c-09a6-2b06-9044c1b2020f"},{"name":"cube","rescale":false,"locked":false,"from":[7.364061617612053,4.370427187233415,7.854999999669417],"to":[7.530811617612054,4.805427187233415,8.072499999669416],"autouv":0,"color":6,"rotation":[0,0,-22.5],"origin":[7.411186617612053,4.769177187233415,7.9637499996694165],"faces":{"north":{"uv":[9,20,10,21],"texture":0},"east":{"uv":[20,9,21,10],"texture":0},"south":{"uv":[10,20,11,21],"texture":0},"west":{"uv":[20,10,21,11],"texture":0},"up":{"uv":[12,21,11,20],"texture":0},"down":{"uv":[21,11,20,12],"texture":0}},"type":"cube","uuid":"a411a3b4-954f-641e-5924-b49cf1b5e992"},{"name":"cube","rescale":false,"locked":false,"from":[7.215053775855303,4.056314179733263,7.854999999669417],"to":[7.309303775855303,4.418814179733263,8.072499999669416],"autouv":0,"color":6,"origin":[7.262178775855303,4.201314179733263,7.9637499996694165],"faces":{"north":{"uv":[12,20,13,21],"texture":0},"east":{"uv":[20,12,21,13],"texture":0},"south":{"uv":[13,20,14,21],"texture":0},"west":{"uv":[20,13,21,14],"texture":0},"up":{"uv":[15,21,14,20],"texture":0},"down":{"uv":[21,14,20,15],"texture":0}},"type":"cube","uuid":"170d018a-0b4b-c4d4-9a27-b5dbac5c0f19"},{"name":"cube","rescale":false,"locked":false,"from":[7.304048380499233,3.9271556107394003,7.854999999669417],"to":[7.3982983804992335,4.434655610739401,8.072499999669416],"autouv":0,"color":6,"origin":[7.351173380499231,4.0721556107394,7.9637499996694165],"faces":{"north":{"uv":[15,20,16,21],"texture":0},"east":{"uv":[20,15,21,16],"texture":0},"south":{"uv":[16,20,17,21],"texture":0},"west":{"uv":[20,16,21,17],"texture":0},"up":{"uv":[18,21,17,20],"texture":0},"down":{"uv":[21,17,20,18],"texture":0}},"type":"cube","uuid":"d00cada8-7da7-2182-5ece-8b4e0f94f1e4"},{"name":"cube","rescale":false,"locked":false,"from":[7.177868396148586,3.873487708782889,7.854999999669417],"to":[7.3446183961485865,4.134487708782891,8.072499999669416],"autouv":0,"color":6,"rotation":[0,0,-22.5],"origin":[7.182199699588946,3.9656791779149074,7.9637499996694165],"faces":{"north":{"uv":[18,20,19,21],"texture":0},"east":{"uv":[20,18,21,19],"texture":0},"south":{"uv":[19,20,20,21],"texture":0},"west":{"uv":[20,19,21,20],"texture":0},"up":{"uv":[21,21,20,20],"texture":0},"down":{"uv":[1,21,0,22],"texture":0}},"type":"cube","uuid":"2a9977a6-bd04-4469-9bc9-d5794a95c1df"},{"name":"cube","rescale":false,"locked":false,"from":[7.1133309013314285,3.8956397301641026,7.854999999669417],"to":[7.22933090133143,3.989889730164104,8.072499999669416],"autouv":0,"color":6,"rotation":[0,0,45],"origin":[7.182199699588946,3.9656791779149074,7.9637499996694165],"faces":{"north":{"uv":[21,0,22,1],"texture":0},"east":{"uv":[1,21,2,22],"texture":0},"south":{"uv":[21,1,22,2],"texture":0},"west":{"uv":[2,21,3,22],"texture":0},"up":{"uv":[22,3,21,2],"texture":0},"down":{"uv":[4,21,3,22],"texture":0}},"type":"cube","uuid":"7eef93a0-e575-f207-3119-779179db3aec"},{"name":"cube","rescale":false,"locked":false,"from":[7.132789514321804,3.8951864121559927,7.854999999669417],"to":[7.176289514321805,3.9894364121559933,8.072499999669416],"autouv":0,"color":6,"rotation":[0,0,22.5],"origin":[7.182199699588946,3.9656791779149074,7.9637499996694165],"faces":{"north":{"uv":[21,3,22,4],"texture":0},"east":{"uv":[4,21,5,22],"texture":0},"south":{"uv":[21,4,22,5],"texture":0},"west":{"uv":[5,21,6,22],"texture":0},"up":{"uv":[22,6,21,5],"texture":0},"down":{"uv":[7,21,6,22],"texture":0}},"type":"cube","uuid":"964dcc0c-5843-f752-c2b5-a7daeee4ed99"},{"name":"cube","rescale":false,"locked":false,"from":[7.083959139778898,3.8744695408883345,7.854999999669417],"to":[7.1999591397789,3.968719540888335,8.072499999669416],"autouv":0,"color":6,"origin":[7.182199699588946,3.9656791779149074,7.9637499996694165],"faces":{"north":{"uv":[21,6,22,7],"texture":0},"east":{"uv":[7,21,8,22],"texture":0},"south":{"uv":[21,7,22,8],"texture":0},"west":{"uv":[8,21,9,22],"texture":0},"up":{"uv":[22,9,21,8],"texture":0},"down":{"uv":[10,21,9,22],"texture":0}},"type":"cube","uuid":"d057e5ee-8de0-83d3-3257-890c450874f2"},{"name":"cube","rescale":false,"locked":false,"from":[7.011459138699701,3.7936890575373923,7.854999999669417],"to":[7.156459138699701,3.938689057537392,8.072499999669416],"autouv":0,"color":6,"rotation":[0,0,-45],"origin":[7.083959138699701,3.866189057537392,7.9637499996694165],"faces":{"north":{"uv":[21,9,22,10],"texture":0},"east":{"uv":[10,21,11,22],"texture":0},"south":{"uv":[21,10,22,11],"texture":0},"west":{"uv":[11,21,12,22],"texture":0},"up":{"uv":[22,12,21,11],"texture":0},"down":{"uv":[13,21,12,22],"texture":0}},"type":"cube","uuid":"c08189a5-c046-e504-b1f1-36f9e9468ee0"},{"name":"cube","rescale":false,"locked":false,"from":[7.16370286351378,3.8049456380395945,7.854999999669417],"to":[7.27158286351378,3.971695638039595,8.072499999669416],"autouv":0,"color":6,"rotation":[0,0,22.5],"origin":[7.285613048780918,3.8754384037985083,7.9637499996694165],"faces":{"north":{"uv":[21,12,22,13],"texture":0},"east":{"uv":[13,21,14,22],"texture":0},"south":{"uv":[21,13,22,14],"texture":0},"west":{"uv":[14,21,15,22],"texture":0},"up":{"uv":[22,15,21,14],"texture":0},"down":{"uv":[16,21,15,22],"texture":0}},"type":"cube","uuid":"d8c6adb5-2fde-fc39-5426-44e4e1063841"},{"name":"cube","rescale":false,"locked":false,"from":[7.25116544642643,3.781860735073624,7.854999999669417],"to":[7.367165446426432,3.876110735073625,8.072499999669416],"autouv":0,"color":6,"rotation":[0,0,45],"origin":[7.247534244683946,3.851900182824429,7.9637499996694165],"faces":{"north":{"uv":[21,15,22,16],"texture":0},"east":{"uv":[16,21,17,22],"texture":0},"south":{"uv":[21,16,22,17],"texture":0},"west":{"uv":[17,21,18,22],"texture":0},"up":{"uv":[22,18,21,17],"texture":0},"down":{"uv":[19,21,18,22],"texture":0}},"type":"cube","uuid":"59e4d667-44ff-9840-3481-f8849aab9191"},{"name":"cube","rescale":false,"locked":false,"from":[7.274037353093026,3.9253970525866118,7.854999999669417],"to":[7.368287353093026,3.9688970525866134,8.072499999669416],"autouv":0,"color":6,"rotation":[0,0,-22.5],"origin":[7.278368656533384,3.8725885217186296,7.9637499996694165],"faces":{"north":{"uv":[21,18,22,19],"texture":0},"east":{"uv":[19,21,20,22],"texture":0},"south":{"uv":[21,19,22,20],"texture":0},"west":{"uv":[20,21,21,22],"texture":0},"up":{"uv":[22,21,21,20],"texture":0},"down":{"uv":[22,21,21,22],"texture":0}},"type":"cube","uuid":"d8775af4-c84e-d4ea-cc26-e01b00488616"},{"name":"cube","rescale":false,"locked":false,"from":[7.083959139563968,3.763658572536807,7.854999999669417],"to":[7.19995913956397,3.8579085725368074,8.072499999669416],"autouv":0,"color":6,"origin":[7.141959139563969,3.810783572536807,7.9637499996694165],"faces":{"north":{"uv":[0,22,1,23],"texture":0},"east":{"uv":[22,0,23,1],"texture":0},"south":{"uv":[1,22,2,23],"texture":0},"west":{"uv":[22,1,23,2],"texture":0},"up":{"uv":[3,23,2,22],"texture":0},"down":{"uv":[23,2,22,3],"texture":0}},"type":"cube","uuid":"b6a4351c-ebd8-92e8-4a69-82b3c90ea308"},{"name":"cube","rescale":false,"locked":false,"from":[7.893199787195634,2.9323180403938824,7.855000001830085],"to":[8.183199787195633,3.004818040393883,8.072500001830086],"autouv":0,"color":6,"origin":[8.458699787195634,4.791943040393881,7.963750001830085],"faces":{"north":{"uv":[3,22,4,23],"texture":0},"east":{"uv":[22,3,23,4],"texture":0},"south":{"uv":[4,22,5,23],"texture":0},"west":{"uv":[22,4,23,5],"texture":0},"up":{"uv":[6,23,5,22],"texture":0},"down":{"uv":[23,5,22,6],"texture":0}},"type":"cube","uuid":"c79d87ff-39b6-ee77-f9da-326687a3a5dc"},{"name":"cube","rescale":false,"locked":false,"from":[7.932057229690594,2.736968443313068,7.855000001830085],"to":[8.077057229690594,2.9544684433130683,8.072500001830086],"autouv":0,"color":6,"rotation":[0,0,22.5],"origin":[7.968307229690594,2.8457184433130687,7.963750001830085],"faces":{"north":{"uv":[6,22,7,23],"texture":0},"east":{"uv":[22,6,23,7],"texture":0},"south":{"uv":[7,22,8,23],"texture":0},"west":{"uv":[22,7,23,8],"texture":0},"up":{"uv":[9,23,8,22],"texture":0},"down":{"uv":[23,8,22,9],"texture":0}},"type":"cube","uuid":"96c4b33a-caaa-eae8-9b65-d61057e6816f"},{"name":"cube","rescale":false,"locked":false,"from":[7.9993423343294685,2.736968443313068,7.855000001830085],"to":[8.144342334329469,2.9544684433130683,8.072500001830086],"autouv":0,"color":6,"rotation":[0,0,-22.5],"origin":[8.108092334329468,2.8457184433130687,7.963750001830085],"faces":{"north":{"uv":[9,22,10,23],"texture":0},"east":{"uv":[22,9,23,10],"texture":0},"south":{"uv":[10,22,11,23],"texture":0},"west":{"uv":[22,10,23,11],"texture":0},"up":{"uv":[12,23,11,22],"texture":0},"down":{"uv":[23,11,22,12],"texture":0}},"type":"cube","uuid":"0794976b-cdf3-4a16-bc22-8dd71f10a8e1"},{"name":"cube","rescale":false,"locked":false,"from":[7.976433433735041,2.731374242072677,7.855000001830085],"to":[8.04893343373504,2.9488742420726775,8.072500001830086],"autouv":0,"color":6,"origin":[8.469433433735041,4.808499242072676,7.963750001830085],"faces":{"north":{"uv":[12,22,13,23],"texture":0},"east":{"uv":[22,12,23,13],"texture":0},"south":{"uv":[13,22,14,23],"texture":0},"west":{"uv":[22,13,23,14],"texture":0},"up":{"uv":[15,23,14,22],"texture":0},"down":{"uv":[23,14,22,15],"texture":0}},"type":"cube","uuid":"c20d34d5-70b2-4249-c6ff-81d1310731bc"},{"name":"cube","rescale":false,"locked":false,"from":[8.027466157941575,2.731374242072677,7.855000001830085],"to":[8.099966157941575,2.9488742420726775,8.072500001830086],"autouv":0,"color":6,"origin":[8.520466157941575,4.808499242072676,7.963750001830085],"faces":{"north":{"uv":[15,22,16,23],"texture":0},"east":{"uv":[22,15,23,16],"texture":0},"south":{"uv":[16,22,17,23],"texture":0},"west":{"uv":[22,16,23,17],"texture":0},"up":{"uv":[18,23,17,22],"texture":0},"down":{"uv":[23,17,22,18],"texture":0}},"type":"cube","uuid":"b13e5498-503d-884f-eda4-ef5b6b0bf53a"},{"name":"cube","rescale":false,"locked":false,"from":[7.893199787195634,3.004818040393883,7.855000001830085],"to":[8.183199787195633,4.672318040393883,8.072500001830086],"autouv":0,"color":6,"origin":[8.458699787195634,4.791943040393881,7.963750001830085],"faces":{"north":{"uv":[18,22,19,23],"texture":0},"east":{"uv":[22,18,23,19],"texture":0},"south":{"uv":[19,22,20,23],"texture":0},"west":{"uv":[22,19,23,20],"texture":0},"up":{"uv":[21,23,20,22],"texture":0},"down":{"uv":[23,20,22,21],"texture":0}},"type":"cube","uuid":"f259d71a-0c25-44d3-9795-dee16f22e1e3"},{"name":"cube","rescale":false,"locked":false,"from":[7.510755813739566,6.773818736439409,7.855000000101551],"to":[7.605005813739568,7.3610687364394085,8.07250000010155],"autouv":0,"color":6,"rotation":[0,0,-22.5],"origin":[7.4853808137395665,5.9328187364394065,7.97462500010155],"faces":{"north":{"uv":[21,22,22,23],"texture":0},"east":{"uv":[22,21,23,22],"texture":0},"south":{"uv":[22,22,23,23],"texture":0},"west":{"uv":[0,23,1,24],"texture":0},"up":{"uv":[24,1,23,0],"texture":0},"down":{"uv":[2,23,1,24],"texture":0}},"type":"cube","uuid":"501942ea-e6d8-5b21-dacb-b6d887fc4cde"},{"name":"cube","rescale":false,"locked":false,"from":[8.498348138056196,6.8310843768296206,7.855000000101551],"to":[8.592598138056196,7.331334376829622,8.07250000010155],"autouv":0,"color":6,"rotation":[0,0,22.5],"origin":[8.617973138056195,5.97558437682962,7.97462500010155],"faces":{"north":{"uv":[23,1,24,2],"texture":0},"east":{"uv":[2,23,3,24],"texture":0},"south":{"uv":[23,2,24,3],"texture":0},"west":{"uv":[3,23,4,24],"texture":0},"up":{"uv":[24,4,23,3],"texture":0},"down":{"uv":[5,23,4,24],"texture":0}},"type":"cube","uuid":"a38542f4-1399-962c-2f05-38029034e22a"},{"name":"cube","rescale":false,"locked":false,"from":[7.583255813739566,6.773818736439409,7.855000000101551],"to":[7.677505813739569,7.288568736439409,8.07250000010155],"autouv":0,"color":6,"rotation":[0,0,-22.5],"origin":[7.4853808137395665,5.9328187364394065,7.97462500010155],"faces":{"north":{"uv":[23,4,24,5],"texture":0},"east":{"uv":[5,23,6,24],"texture":0},"south":{"uv":[23,5,24,6],"texture":0},"west":{"uv":[6,23,7,24],"texture":0},"up":{"uv":[24,7,23,6],"texture":0},"down":{"uv":[8,23,7,24],"texture":0}},"type":"cube","uuid":"41087dcf-1332-c7d2-bf22-50e0ca5d53ab"},{"name":"cube","rescale":false,"locked":false,"from":[7.530699787195634,4.817318040393882,7.855000001830085],"to":[8.806699787195635,4.911568040393884,8.072500001830086],"autouv":0,"color":6,"origin":[8.458699787195634,4.791943040393881,7.963750001830085],"faces":{"north":{"uv":[23,7,24,8],"texture":0},"east":{"uv":[8,23,9,24],"texture":0},"south":{"uv":[23,8,24,9],"texture":0},"west":{"uv":[9,23,10,24],"texture":0},"up":{"uv":[24,10,23,9],"texture":0},"down":{"uv":[11,23,10,24],"texture":0}},"type":"cube","uuid":"c47a13b9-1503-71dc-6e45-5e0f2621b7b2"},{"name":"cube","rescale":false,"locked":false,"from":[7.46205654265135,4.430190025385876,7.855],"to":[7.607056542651351,4.647690025385876,8.0725],"autouv":0,"color":6,"rotation":[0,0,45],"origin":[7.53455654265135,4.466440025385876,8.036250001830085],"faces":{"north":{"uv":[23,10,24,11],"texture":0},"east":{"uv":[11,23,12,24],"texture":0},"south":{"uv":[23,11,24,12],"texture":0},"west":{"uv":[12,23,13,24],"texture":0},"up":{"uv":[24,13,23,12],"texture":0},"down":{"uv":[14,23,13,24],"texture":0}},"type":"cube","uuid":"87469b32-a1da-575e-4609-11cb3c5be684"},{"name":"cube","rescale":false,"locked":false,"from":[8.018869097825235,7.320119523621209,7.855000001830085],"to":[8.07686909782523,7.3781195236212085,8.072500001830086],"autouv":0,"color":6,"rotation":[0,0,45],"origin":[8.065994097825232,7.352744523621208,7.963750001830085],"faces":{"north":{"uv":[23,13,24,14],"texture":0},"east":{"uv":[14,23,15,24],"texture":0},"south":{"uv":[23,14,24,15],"texture":0},"west":{"uv":[15,23,16,24],"texture":0},"up":{"uv":[24,16,23,15],"texture":0},"down":{"uv":[17,23,16,24],"texture":0}},"type":"cube","uuid":"e71333c7-f55d-0b9a-ec06-ba9836e42f0a"},{"name":"cube","rescale":false,"locked":false,"from":[8.2638120967491,12.289875764454187,7.927500001830085],"to":[8.408812096749099,12.942375764454187,8.000000001830085],"autouv":0,"color":6,"origin":[7.103812096749101,11.999875764454188,7.667022002274318],"faces":{"north":{"uv":[23,16,24,17],"texture":0},"east":{"uv":[17,23,18,24],"texture":0},"south":{"uv":[23,17,24,18],"texture":0},"west":{"uv":[18,23,19,24],"texture":0},"up":{"uv":[24,19,23,18],"texture":0},"down":{"uv":[20,23,19,24],"texture":0}},"type":"cube","uuid":"b945cc67-250c-7283-3960-a59df5f4d9a3"},{"name":"cube","rescale":false,"locked":false,"from":[7.98395420531529,11.809533442317106,7.927500001830085],"to":[8.20145420531529,12.244533442317104,8.000000001830085],"autouv":0,"color":6,"origin":[7.4764542053152905,12.389533442317106,7.667022002274318],"faces":{"north":{"uv":[23,19,24,20],"texture":0},"east":{"uv":[20,23,21,24],"texture":0},"south":{"uv":[23,20,24,21],"texture":0},"west":{"uv":[21,23,22,24],"texture":0},"up":{"uv":[24,22,23,21],"texture":0},"down":{"uv":[23,23,22,24],"texture":0}},"type":"cube","uuid":"130916f8-5cee-43e4-aea0-4480aa3eb2cf"}],"outliner":["7fcdd37c-7cf4-ba8c-89b1-57c196b92898","f4b03409-a886-6d21-053a-45662bdbfd24","3bb5b80e-0a79-192e-3684-a2c15b7d6f3d","501942ea-e6d8-5b21-dacb-b6d887fc4cde","41087dcf-1332-c7d2-bf22-50e0ca5d53ab","c36f2603-b796-fac1-3099-417595c8a0d4","c12f9e42-9873-a25f-caec-fa5b0e9d3145","b514b95a-7eac-9449-6fc7-76c3f2d2fb88","0e73108b-e0af-c115-cbb6-4afa04c96e31","e71333c7-f55d-0b9a-ec06-ba9836e42f0a","a38542f4-1399-962c-2f05-38029034e22a","6494fcf6-e656-9aae-2211-fca8e68ceda6","cc961bd8-c9e5-dd1c-eb41-9d955b1aa90c","a7ee9f63-a6b8-6cae-15b4-01d189cd2703","46b24161-07c7-bbc7-2a09-fe484ffb810f","4b59b0fb-199b-2b33-66b7-ce6e13a6cb56","ff5f2333-efd9-2b46-e094-7743620d391a","657a7a88-457d-052c-223f-f2d4cac3f5cf","14306ebc-afbe-e1e3-576e-de6765c0a734","4a16c70b-a37d-2dcc-5546-92a604a16b9c","445930fe-1a7c-9d40-b060-3f5d701b854d","4e2a3a71-ba81-5794-103a-cbef63d4b08d","2e545b89-7b1b-a112-aa7e-475a21d62f27","e973a618-7692-d2b5-837c-a8b588040b3f","b0eaf9d6-c51b-a381-6e9d-8d7fa675e5d4","a791413e-1800-2631-8b25-b4368311314e","44ea0d81-6224-0848-f689-830198b450f6","08a476a2-af2d-f67c-ede2-6e3d8b3e1dba","e2f7d95e-7b45-0ac4-d2eb-f1dbea2075b5","173111b2-e616-40ea-f6de-47b81f1fd55e","1c9a6844-43ae-4558-f3ea-8ea198f34cc5","32ca1dee-c2ea-8bf6-e5a2-41d860e9c3b4","d94b037d-1ee5-2048-02be-63d13c098f11","4944ef43-dd53-5769-0f2e-06ff56f8842d","c713686d-ecb6-2f15-7a13-59b4a7564d16","0e251fc8-f0fe-ef79-38f4-0bfeab657cf6","66ef70bd-1d39-8681-e89f-82a6bbce87a9","ab5f788d-2582-58cb-793c-e1a6cdc57968","2a2c1534-b65f-f3e6-d2a7-64207c44e4be","3a6e7d32-ee14-c852-af59-f1cd5e1489d4","51cd10da-4039-cc9f-3617-e94c5ff207c5","bf11f4a5-72c0-a83e-21c6-0ef38f537915","d78368a3-81e9-e63d-3448-310312dd10d0","f3ab51af-7c56-d29c-8368-873391aee391","9bc32b3a-6cc9-93e5-f5a3-d2bf26b76231","d057e5ee-8de0-83d3-3257-890c450874f2","c08189a5-c046-e504-b1f1-36f9e9468ee0","964dcc0c-5843-f752-c2b5-a7daeee4ed99","7eef93a0-e575-f207-3119-779179db3aec","2a9977a6-bd04-4469-9bc9-d5794a95c1df","d8775af4-c84e-d4ea-cc26-e01b00488616","59e4d667-44ff-9840-3481-f8849aab9191","d8c6adb5-2fde-fc39-5426-44e4e1063841","b6a4351c-ebd8-92e8-4a69-82b3c90ea308","7941dc6f-8605-8613-ad18-42558f592355","0d400aa5-c481-16c0-be4d-c9d5744c5ab3","8a75d56f-faea-3e20-ccc3-23c6c5753c6a","a31253f0-8e21-491c-c266-ffcbebcfc417","05642918-531a-6796-7ce8-ec92ab6fcef6","8996c7f8-43d4-5101-8fde-52e989ffa609","dc92c871-b65f-51ec-6d14-9a591a7e4289","e57a86fc-5538-e5db-9a2b-92789f58e5f2","c47a13b9-1503-71dc-6e45-5e0f2621b7b2","82f67c6c-0674-886e-bea1-79485d55ab7f","c79d87ff-39b6-ee77-f9da-326687a3a5dc","f259d71a-0c25-44d3-9795-dee16f22e1e3","c20d34d5-70b2-4249-c6ff-81d1310731bc","b13e5498-503d-884f-eda4-ef5b6b0bf53a","96c4b33a-caaa-eae8-9b65-d61057e6816f","0794976b-cdf3-4a16-bc22-8dd71f10a8e1","7b2d3405-7fb3-601e-39b6-60c7d04e5ed9","ebc93b0f-267b-6422-c7b4-0e86cc0709a1","44722f81-027e-5a4c-01c3-34bc9e6df505","20cd3cd7-1c15-d704-3003-46bdb3fdb40e","202ccf05-4ce7-39fc-114a-c93fa4f84661","45ab8afe-281c-9dcb-06df-adf1579e1900","10a4d8fc-7019-fb10-28c0-617c15714d4d","67201ebc-968c-09a6-2b06-9044c1b2020f","87469b32-a1da-575e-4609-11cb3c5be684","6fb04c2c-fffb-b4f1-a580-598fbf76a49f","a57c2a89-899c-e3e1-9e3b-5c34f0e69029","a48a29e1-14b6-b0c9-2ffb-a941f19c1b51","431019d9-5982-314b-08b2-8736f857c02f","545420ec-0073-6e7b-6fb3-a025bcbc472e","17c6f610-a8bc-ef21-50c0-92151ea3235e","e5747439-c245-63c3-b949-051f3063b0a8","b945cc67-250c-7283-3960-a59df5f4d9a3","02de76f2-fc9a-a858-4a20-784e2d8dfffc","a411a3b4-954f-641e-5924-b49cf1b5e992","170d018a-0b4b-c4d4-9a27-b5dbac5c0f19","d00cada8-7da7-2182-5ece-8b4e0f94f1e4","2ad7875e-f5a1-7cff-398f-b0603ea2022e","130916f8-5cee-43e4-aea0-4480aa3eb2cf"],"textures":[{"path":"C:\\Users\\hawkt\\Documents\\GitHub\\cosmere\\src\\surgebinding\\resources\\assets\\surgebinding\\textures\\item\\models\\shardblade_model\\truthwatcher_honorblade.png","name":"truthwatcher_honorblade.png","folder":"item/models/shardblade_model","namespace":"surgebinding","id":"0","particle":true,"render_mode":"default","visible":true,"mode":"bitmap","saved":true,"uuid":"72047660-5b40-6087-ccfe-7201d508c4cf","relative_path":"../../src/surgebinding/resources/assets/surgebinding/textures/item/models/shardblade_model/truthwatcher_honorblade.png","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAMhJREFUWEdjzKiY+J8BCbx8/JhBXFYWWYgBJEYuWL+0hxGfXsZB5wB011Lie5BZJIcAtRzw1vATg/B5PsIOCIwugacB9LgHOYbcEBg6DkBPhHSPgkHjAHLjGlceJysNkFvYYNM36oDREBgNgUERAlpvtBlmdOTjbw8gV0bULgcG1AHK4qwMX9gkBi4ERh0ASk+gBg5JiRCUdcgFZs+E4VrvvvwNZhNqD4LUMFIjF2BryoEMJ+R7sAPI9TG19I06YDQERkNgwEMAAG+mtyFmDitrAAAAAElFTkSuQmCC"}],"display":{"thirdperson_righthand":{"rotation":[0,-90,0],"translation":[-0.25,14.75,2],"scale":[4,4,4]},"thirdperson_lefthand":{"rotation":[0,90,0],"translation":[0.25,14.75,2],"scale":[4,4,4]},"firstperson_righthand":{"rotation":[0,-90,0],"translation":[0,11.5,0],"scale":[3,3,3]},"firstperson_lefthand":{"rotation":[0,90,0],"translation":[0,11.5,0],"scale":[3,3,3]},"gui":{"rotation":[0,180,45],"scale":[1.35,1.35,1.35]},"fixed":{"rotation":[0,0,45],"scale":[1.15,1.15,1.15]}}} \ No newline at end of file diff --git a/blockbench/surgebinding/shardblades/honorblades/willshaper_honorblade.bbmodel b/blockbench/surgebinding/shardblades/honorblades/willshaper_honorblade.bbmodel new file mode 100644 index 000000000..7c9058acb --- /dev/null +++ b/blockbench/surgebinding/shardblades/honorblades/willshaper_honorblade.bbmodel @@ -0,0 +1 @@ +{"meta":{"format_version":"4.0","model_format":"java_block","box_uv":false},"name":"willshaper_honorblade","parent":"","ambientocclusion":true,"front_gui_light":false,"visible_box":[1,1,0],"variable_placeholders":"","variable_placeholder_buttons":[],"resolution":{"width":64,"height":64},"elements":[{"name":"cube","rescale":false,"locked":false,"from":[8,13.75,7],"to":[8.25,24,8],"autouv":0,"color":2,"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[0,0,1,10],"texture":0},"east":{"uv":[1,0,2,10],"texture":0},"south":{"uv":[2,0,3,10],"texture":0},"west":{"uv":[3,0,4,10],"texture":0},"up":{"uv":[20,21,19,20],"texture":0},"down":{"uv":[21,19,20,20],"texture":0}},"type":"cube","uuid":"059ac81f-4de1-09d5-cb0c-2b8bef33f1f8"},{"name":"cube","rescale":false,"locked":false,"from":[8,13.75,8.25],"to":[8.25,24,9.25],"autouv":0,"color":2,"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[4,0,5,10],"texture":0},"east":{"uv":[5,0,6,10],"texture":0},"south":{"uv":[6,0,7,10],"texture":0},"west":{"uv":[7,0,8,10],"texture":0},"up":{"uv":[21,21,20,20],"texture":0},"down":{"uv":[1,21,0,22],"texture":0}},"type":"cube","uuid":"91ef9d1e-fc68-59c2-1676-cf2288f213cf"},{"name":"cube","rescale":false,"locked":false,"from":[8,24,7],"to":[8.25,25.9375,8],"autouv":0,"color":2,"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[11,11,12,13],"texture":0},"east":{"uv":[1,12,2,14],"texture":0},"south":{"uv":[12,1,13,3],"texture":0},"west":{"uv":[2,12,3,14],"texture":0},"up":{"uv":[22,1,21,0],"texture":0},"down":{"uv":[2,21,1,22],"texture":0}},"type":"cube","uuid":"19b63a7a-97d1-d96c-ef86-245cdaadda03"},{"name":"cube","rescale":false,"locked":false,"from":[8,23.746354318042293,5.474837046086822],"to":[8.25,24.746354318042293,5.724837046086822],"autouv":0,"color":2,"rotation":[22.5,0,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[6,22,7,23],"texture":0},"east":{"uv":[22,6,23,7],"texture":0},"south":{"uv":[7,22,8,23],"texture":0},"west":{"uv":[22,7,23,8],"texture":0},"up":{"uv":[9,23,8,22],"texture":0},"down":{"uv":[23,8,22,9],"texture":0}},"type":"cube","uuid":"66f2a4e5-de8d-701a-d7a2-179a9b853988"},{"name":"cube","rescale":false,"locked":false,"from":[8,23.746354318042293,10.525162953913178],"to":[8.25,24.746354318042293,10.775162953913178],"autouv":0,"color":2,"rotation":[-22.5,0,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[29,5,30,6],"texture":0},"east":{"uv":[6,29,7,30],"texture":0},"south":{"uv":[29,6,30,7],"texture":0},"west":{"uv":[7,29,8,30],"texture":0},"up":{"uv":[30,8,29,7],"texture":0},"down":{"uv":[9,29,8,30],"texture":0}},"type":"cube","uuid":"46051293-5506-5da8-0e2a-d576b5889442"},{"name":"cube","rescale":false,"locked":false,"from":[8,24.923879532511286,6.61731656763491],"to":[8.25,25.173879532511286,7.05481656763491],"autouv":0,"color":2,"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[21,15,22,16],"texture":0},"east":{"uv":[16,21,17,22],"texture":0},"south":{"uv":[21,16,22,17],"texture":0},"west":{"uv":[17,21,18,22],"texture":0},"up":{"uv":[22,18,21,17],"texture":0},"down":{"uv":[19,21,18,22],"texture":0}},"type":"cube","uuid":"f830cb1f-9f11-ee2a-5ec9-b0a69a3dba8d"},{"name":"cube","rescale":false,"locked":false,"from":[8,24.923879532511286,9.19518343236509],"to":[8.25,25.173879532511286,9.63268343236509],"autouv":0,"color":2,"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[0,22,1,23],"texture":0},"east":{"uv":[22,0,23,1],"texture":0},"south":{"uv":[1,22,2,23],"texture":0},"west":{"uv":[22,1,23,2],"texture":0},"up":{"uv":[3,23,2,22],"texture":0},"down":{"uv":[23,2,22,3],"texture":0}},"type":"cube","uuid":"26dfee6f-15bc-ecc2-1d15-54a9be9f49c5"},{"name":"cube","rescale":false,"locked":false,"from":[8,21.131464675113936,16.064069341102087],"to":[8.25,21.631464675113936,16.376569341102087],"autouv":0,"color":2,"rotation":[-45,0,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[25,17,26,18],"texture":0},"east":{"uv":[18,25,19,26],"texture":0},"south":{"uv":[25,18,26,19],"texture":0},"west":{"uv":[19,25,20,26],"texture":0},"up":{"uv":[26,20,25,19],"texture":0},"down":{"uv":[21,25,20,26],"texture":0}},"type":"cube","uuid":"258d0429-9609-00c6-559d-e3d2cee8bee2"},{"name":"cube","rescale":false,"locked":false,"from":[8,21.131464675113936,-0.12656934110208629],"to":[8.25,21.631464675113936,0.18593065889791371],"autouv":0,"color":2,"rotation":[45,0,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[29,2,30,3],"texture":0},"east":{"uv":[3,29,4,30],"texture":0},"south":{"uv":[29,3,30,4],"texture":0},"west":{"uv":[4,29,5,30],"texture":0},"up":{"uv":[30,5,29,4],"texture":0},"down":{"uv":[6,29,5,30],"texture":0}},"type":"cube","uuid":"cc2ab22a-4a78-bf55-aeb4-620ebdb4c3d0"},{"name":"cube","rescale":false,"locked":false,"from":[8,24.937696034224835,5.0715555636486345],"to":[8.25,25.437696034224835,5.3215555636486345],"autouv":0,"color":2,"rotation":[22.5,0,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[25,20,26,21],"texture":0},"east":{"uv":[21,25,22,26],"texture":0},"south":{"uv":[25,21,26,22],"texture":0},"west":{"uv":[22,25,23,26],"texture":0},"up":{"uv":[26,23,25,22],"texture":0},"down":{"uv":[24,25,23,26],"texture":0}},"type":"cube","uuid":"64664265-f4e7-5b7e-4f8b-77199ca303cb"},{"name":"cube","rescale":false,"locked":false,"from":[8,24.937696034224835,10.928444436351366],"to":[8.25,25.437696034224835,11.178444436351366],"autouv":0,"color":2,"rotation":[-22.5,0,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[25,23,26,24],"texture":0},"east":{"uv":[24,25,25,26],"texture":0},"south":{"uv":[25,24,26,25],"texture":0},"west":{"uv":[25,25,26,26],"texture":0},"up":{"uv":[1,27,0,26],"texture":0},"down":{"uv":[27,0,26,1],"texture":0}},"type":"cube","uuid":"900c4a07-680b-cac2-cdc4-a8c65945cc23"},{"name":"cube","rescale":false,"locked":false,"from":[8,21.59183650816866,-0.4341799654490037],"to":[8.25,22.09183650816866,-0.18417996544900372],"autouv":0,"color":2,"rotation":[45,0,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[1,26,2,27],"texture":0},"east":{"uv":[26,1,27,2],"texture":0},"south":{"uv":[2,26,3,27],"texture":0},"west":{"uv":[26,2,27,3],"texture":0},"up":{"uv":[4,27,3,26],"texture":0},"down":{"uv":[27,3,26,4],"texture":0}},"type":"cube","uuid":"5720d666-e143-0838-0bae-1159cb0348a4"},{"name":"cube","rescale":false,"locked":false,"from":[8,21.59183650816866,16.434179965449005],"to":[8.25,22.09183650816866,16.684179965449005],"autouv":0,"color":2,"rotation":[-45,0,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[28,28,29,29],"texture":0},"east":{"uv":[0,29,1,30],"texture":0},"south":{"uv":[29,0,30,1],"texture":0},"west":{"uv":[1,29,2,30],"texture":0},"up":{"uv":[30,2,29,1],"texture":0},"down":{"uv":[3,29,2,30],"texture":0}},"type":"cube","uuid":"9d733618-c992-f7fc-cf8a-7912e7e60917"},{"name":"cube","rescale":false,"locked":false,"from":[8,25.945478526565566,7.078888444807727],"to":[8.25,26.757978526565566,7.203888444807728],"autouv":0,"color":2,"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[4,26,5,27],"texture":0},"east":{"uv":[26,4,27,5],"texture":0},"south":{"uv":[5,26,6,27],"texture":0},"west":{"uv":[26,5,27,6],"texture":0},"up":{"uv":[7,27,6,26],"texture":0},"down":{"uv":[27,6,26,7],"texture":0}},"type":"cube","uuid":"db8f0198-0ed4-5b5f-6cde-c5b086b9c36f"},{"name":"cube","rescale":false,"locked":false,"from":[8,25.74452269197129,11.438219631652643],"to":[8.25,26.24452269197129,11.688219631652643],"autouv":0,"color":2,"rotation":[-22.5,0,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[25,26,26,27],"texture":0},"east":{"uv":[26,25,27,26],"texture":0},"south":{"uv":[26,26,27,27],"texture":0},"west":{"uv":[0,27,1,28],"texture":0},"up":{"uv":[28,1,27,0],"texture":0},"down":{"uv":[2,27,1,28],"texture":0}},"type":"cube","uuid":"967d3499-331e-8730-b718-f2b93ebc8c6a"},{"name":"cube","rescale":false,"locked":false,"from":[8,22.228060284862618,-0.8255532546612345],"to":[8.25,22.353060284862618,-0.6380532546612345],"autouv":0,"color":2,"rotation":[45,0,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[27,1,28,2],"texture":0},"east":{"uv":[2,27,3,28],"texture":0},"south":{"uv":[27,2,28,3],"texture":0},"west":{"uv":[3,27,4,28],"texture":0},"up":{"uv":[28,4,27,3],"texture":0},"down":{"uv":[5,27,4,28],"texture":0}},"type":"cube","uuid":"e318df64-be63-0ba6-d6c1-95afad7912e1"},{"name":"cube","rescale":false,"locked":false,"from":[8,25.08008734750973,2.549944970003744],"to":[8.25,25.26758734750973,2.674944970003744],"autouv":0,"color":2,"rotation":[22.5,0,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[27,4,28,5],"texture":0},"east":{"uv":[5,27,6,28],"texture":0},"south":{"uv":[27,5,28,6],"texture":0},"west":{"uv":[6,27,7,28],"texture":0},"up":{"uv":[28,7,27,6],"texture":0},"down":{"uv":[8,27,7,28],"texture":0}},"type":"cube","uuid":"337ec886-7785-a19a-5e80-974da328652d"},{"name":"cube","rescale":false,"locked":false,"from":[8,24.015619888052925,15.168143163989203],"to":[8.25,24.140619888052925,15.668143163989203],"autouv":0,"color":2,"rotation":[-45,0,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[27,7,28,8],"texture":0},"east":{"uv":[8,27,9,28],"texture":0},"south":{"uv":[27,8,28,9],"texture":0},"west":{"uv":[9,27,10,28],"texture":0},"up":{"uv":[28,10,27,9],"texture":0},"down":{"uv":[11,27,10,28],"texture":0}},"type":"cube","uuid":"3d1b00a6-48d8-aa37-bdaf-3f8465076649"},{"name":"cube","rescale":false,"locked":false,"from":[8,26.20738720988434,11.60061525060479],"to":[8.25,26.33238720988434,12.10061525060479],"autouv":0,"color":2,"rotation":[-22.5,0,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[27,10,28,11],"texture":0},"east":{"uv":[11,27,12,28],"texture":0},"south":{"uv":[27,11,28,12],"texture":0},"west":{"uv":[12,27,13,28],"texture":0},"up":{"uv":[28,13,27,12],"texture":0},"down":{"uv":[14,27,13,28],"texture":0}},"type":"cube","uuid":"8c54d9b2-74be-8b59-351b-a47e0cb690b6"},{"name":"cube","rescale":false,"locked":false,"from":[8,25.882978526565566,9.046111555192272],"to":[8.25,26.757978526565566,9.171111555192272],"autouv":0,"color":2,"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[7,26,8,27],"texture":0},"east":{"uv":[26,7,27,8],"texture":0},"south":{"uv":[8,26,9,27],"texture":0},"west":{"uv":[26,8,27,9],"texture":0},"up":{"uv":[10,27,9,26],"texture":0},"down":{"uv":[27,9,26,10],"texture":0}},"type":"cube","uuid":"a5f77d05-f2e8-9b90-c150-cadc96655638"},{"name":"cube","rescale":false,"locked":false,"from":[8,25.74452269197129,4.561780368347355],"to":[8.25,26.24452269197129,4.811780368347355],"autouv":0,"color":2,"rotation":[22.5,0,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[10,26,11,27],"texture":0},"east":{"uv":[26,10,27,11],"texture":0},"south":{"uv":[11,26,12,27],"texture":0},"west":{"uv":[26,11,27,12],"texture":0},"up":{"uv":[13,27,12,26],"texture":0},"down":{"uv":[27,12,26,13],"texture":0}},"type":"cube","uuid":"1a64d875-0d4f-1ba3-466b-4582e714607e"},{"name":"cube","rescale":false,"locked":false,"from":[8,23.77513494648901,0.7840214069651645],"to":[8.25,24.08763494648901,0.9090214069651645],"autouv":0,"color":2,"rotation":[45,0,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[13,26,14,27],"texture":0},"east":{"uv":[26,13,27,14],"texture":0},"south":{"uv":[14,26,15,27],"texture":0},"west":{"uv":[26,14,27,15],"texture":0},"up":{"uv":[16,27,15,26],"texture":0},"down":{"uv":[27,15,26,16],"texture":0}},"type":"cube","uuid":"e2577143-b699-994a-2217-79b6e5b24f77"},{"name":"cube","rescale":false,"locked":false,"from":[8,25.080087347509725,13.575055029996257],"to":[8.25,25.205087347509725,13.700055029996257],"autouv":0,"color":2,"rotation":[-22.5,0,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[16,26,17,27],"texture":0},"east":{"uv":[26,16,27,17],"texture":0},"south":{"uv":[17,26,18,27],"texture":0},"west":{"uv":[26,17,27,18],"texture":0},"up":{"uv":[19,27,18,26],"texture":0},"down":{"uv":[27,18,26,19],"texture":0}},"type":"cube","uuid":"11f599a8-c96b-9a7c-097a-44be7ab8f008"},{"name":"cube","rescale":false,"locked":false,"from":[8,24.015619888052925,0.5818568360108001],"to":[8.25,24.140619888052925,1.0818568360108],"autouv":0,"color":2,"rotation":[45,0,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[19,26,20,27],"texture":0},"east":{"uv":[26,19,27,20],"texture":0},"south":{"uv":[20,26,21,27],"texture":0},"west":{"uv":[26,20,27,21],"texture":0},"up":{"uv":[22,27,21,26],"texture":0},"down":{"uv":[27,21,26,22],"texture":0}},"type":"cube","uuid":"1265254e-bfdf-8750-8ea1-0511fdffabc0"},{"name":"cube","rescale":false,"locked":false,"from":[8,26.207387209884338,4.149384749395213],"to":[8.25,26.332387209884338,4.649384749395213],"autouv":0,"color":2,"rotation":[22.5,0,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[22,26,23,27],"texture":0},"east":{"uv":[26,22,27,23],"texture":0},"south":{"uv":[23,26,24,27],"texture":0},"west":{"uv":[26,23,27,24],"texture":0},"up":{"uv":[25,27,24,26],"texture":0},"down":{"uv":[27,24,26,25],"texture":0}},"type":"cube","uuid":"7127684a-445e-aa66-b997-76f444be3d25"},{"name":"cube","rescale":false,"locked":false,"from":[8,26.867082351599255,7.465896188102144],"to":[8.25,26.992082351599255,7.965896188102144],"autouv":0,"color":2,"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[27,13,28,14],"texture":0},"east":{"uv":[14,27,15,28],"texture":0},"south":{"uv":[27,14,28,15],"texture":0},"west":{"uv":[15,27,16,28],"texture":0},"up":{"uv":[28,16,27,15],"texture":0},"down":{"uv":[17,27,16,28],"texture":0}},"type":"cube","uuid":"bc118094-8e4e-610d-4adb-ba9a2abb26fd"},{"name":"cube","rescale":false,"locked":false,"from":[8,26.80458235159925,7.909103811897857],"to":[8.25,26.99208235159925,8.784103811897857],"autouv":0,"color":2,"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[13,28,14,29],"texture":0},"east":{"uv":[28,13,29,14],"texture":0},"south":{"uv":[14,28,15,29],"texture":0},"west":{"uv":[28,14,29,15],"texture":0},"up":{"uv":[16,29,15,28],"texture":0},"down":{"uv":[29,15,28,16],"texture":0}},"type":"cube","uuid":"63bd73ca-6196-d498-c53f-fa25046e64e8"},{"name":"cube","rescale":false,"locked":false,"from":[8,25.92958235159925,7.159103811897857],"to":[8.25,26.86708235159925,8.034103811897857],"autouv":0,"color":2,"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[16,28,17,29],"texture":0},"east":{"uv":[28,16,29,17],"texture":0},"south":{"uv":[17,28,18,29],"texture":0},"west":{"uv":[28,17,29,18],"texture":0},"up":{"uv":[19,29,18,28],"texture":0},"down":{"uv":[29,18,28,19],"texture":0}},"type":"cube","uuid":"02ce42dc-766f-278c-9f84-871497548c17"},{"name":"cube","rescale":false,"locked":false,"from":[8,24.611379532511286,9.19518343236509],"to":[8.25,25.173879532511286,9.38268343236509],"autouv":0,"color":2,"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[3,22,4,23],"texture":0},"east":{"uv":[22,3,23,4],"texture":0},"south":{"uv":[4,22,5,23],"texture":0},"west":{"uv":[22,4,23,5],"texture":0},"up":{"uv":[6,23,5,22],"texture":0},"down":{"uv":[23,5,22,6],"texture":0}},"type":"cube","uuid":"3a8efb55-1b2b-01bd-2ec2-dcedc5967f6c"},{"name":"cube","rescale":false,"locked":false,"from":[8,24.611379532511286,6.86731656763491],"to":[8.25,25.173879532511286,7.05481656763491],"autouv":0,"color":2,"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[21,18,22,19],"texture":0},"east":{"uv":[19,21,20,22],"texture":0},"south":{"uv":[21,19,22,20],"texture":0},"west":{"uv":[20,21,21,22],"texture":0},"up":{"uv":[22,21,21,20],"texture":0},"down":{"uv":[22,21,21,22],"texture":0}},"type":"cube","uuid":"e237e1b6-e960-c682-2163-5780198c1f1b"},{"name":"cube","rescale":false,"locked":false,"from":[8,25.92958235159925,8.2216],"to":[8.25,26.86708235159925,9.0966],"autouv":0,"color":2,"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[25,28,26,29],"texture":0},"east":{"uv":[28,25,29,26],"texture":0},"south":{"uv":[26,28,27,29],"texture":0},"west":{"uv":[28,26,29,27],"texture":0},"up":{"uv":[28,29,27,28],"texture":0},"down":{"uv":[29,27,28,28],"texture":0}},"type":"cube","uuid":"813930e9-32bf-01c3-d98f-d5ceb4f319c0"},{"name":"cube","rescale":false,"locked":false,"from":[8,25.42988969404661,3.504310529057382],"to":[8.25,25.92988969404661,3.629310529057382],"autouv":0,"color":2,"rotation":[22.5,0,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[27,16,28,17],"texture":0},"east":{"uv":[17,27,18,28],"texture":0},"south":{"uv":[27,17,28,18],"texture":0},"west":{"uv":[18,27,19,28],"texture":0},"up":{"uv":[28,19,27,18],"texture":0},"down":{"uv":[20,27,19,28],"texture":0}},"type":"cube","uuid":"27c4576f-9123-3769-66d1-d7f9ce653784"},{"name":"cube","rescale":false,"locked":false,"from":[8,25.42770694080326,12.625959103426027],"to":[8.25,25.92770694080326,12.750959103426027],"autouv":0,"color":2,"rotation":[-22.5,0,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[27,19,28,20],"texture":0},"east":{"uv":[20,27,21,28],"texture":0},"south":{"uv":[27,20,28,21],"texture":0},"west":{"uv":[21,27,22,28],"texture":0},"up":{"uv":[28,22,27,21],"texture":0},"down":{"uv":[23,27,22,28],"texture":0}},"type":"cube","uuid":"2efd09db-aa24-28f0-3821-9eeb02478250"},{"name":"cube","rescale":false,"locked":false,"from":[8,25.061569879073932,12.267193385583752],"to":[8.25,25.561569879073932,12.392193385583752],"autouv":0,"color":2,"rotation":[-22.5,0,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[27,22,28,23],"texture":0},"east":{"uv":[23,27,24,28],"texture":0},"south":{"uv":[27,23,28,24],"texture":0},"west":{"uv":[24,27,25,28],"texture":0},"up":{"uv":[28,25,27,24],"texture":0},"down":{"uv":[26,27,25,28],"texture":0}},"type":"cube","uuid":"d87f2264-9063-1eba-7fbe-c26925b56487"},{"name":"cube","rescale":false,"locked":false,"from":[8,25.063752632317275,3.8630762468996567],"to":[8.25,25.563752632317275,3.9880762468996567],"autouv":0,"color":2,"rotation":[22.5,0,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[27,25,28,26],"texture":0},"east":{"uv":[26,27,27,28],"texture":0},"south":{"uv":[27,26,28,27],"texture":0},"west":{"uv":[27,27,28,28],"texture":0},"up":{"uv":[1,29,0,28],"texture":0},"down":{"uv":[29,0,28,1],"texture":0}},"type":"cube","uuid":"f17df3e6-5dd4-6bd4-5082-608e263644c2"},{"name":"cube","rescale":false,"locked":false,"from":[8,25.92958235159925,7.909103811897857],"to":[8.25,26.11708235159925,8.284103811897857],"autouv":0,"color":2,"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[19,28,20,29],"texture":0},"east":{"uv":[28,19,29,20],"texture":0},"south":{"uv":[20,28,21,29],"texture":0},"west":{"uv":[28,20,29,21],"texture":0},"up":{"uv":[22,29,21,28],"texture":0},"down":{"uv":[29,21,28,22],"texture":0}},"type":"cube","uuid":"c5373715-7770-1a3d-a20c-c5e207aefab9"},{"name":"cube","rescale":false,"locked":false,"from":[8,12.002274175855073,7.843351696139607],"to":[8.25,13.002274175855073,8.343351696139607],"autouv":0,"color":2,"rotation":[22.5,0,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[9,22,10,23],"texture":0},"east":{"uv":[22,9,23,10],"texture":0},"south":{"uv":[10,22,11,23],"texture":0},"west":{"uv":[22,10,23,11],"texture":0},"up":{"uv":[12,23,11,22],"texture":0},"down":{"uv":[23,11,22,12],"texture":0}},"type":"cube","uuid":"0e33edef-bae5-5baf-4958-943e0daf02d1"},{"name":"cube","rescale":false,"locked":false,"from":[8,11.526664270663058,6.712987425726183],"to":[8.25,12.339164270663058,7.462987425726183],"autouv":0,"color":2,"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[31,1,32,2],"texture":0},"east":{"uv":[2,31,3,32],"texture":0},"south":{"uv":[31,2,32,3],"texture":0},"west":{"uv":[3,31,4,32],"texture":0},"up":{"uv":[32,4,31,3],"texture":0},"down":{"uv":[5,31,4,32],"texture":0}},"type":"cube","uuid":"1799603f-1848-ba0d-9997-e8d83fcd5c75"},{"name":"cube","rescale":false,"locked":false,"from":[8,11.251622055689651,8.154281984936244],"to":[8.25,11.501622055689651,8.904281984936244],"autouv":0,"color":2,"rotation":[22.5,0,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[29,8,30,9],"texture":0},"east":{"uv":[9,29,10,30],"texture":0},"south":{"uv":[29,9,30,10],"texture":0},"west":{"uv":[10,29,11,30],"texture":0},"up":{"uv":[30,11,29,10],"texture":0},"down":{"uv":[12,29,11,30],"texture":0}},"type":"cube","uuid":"781146b7-42fa-227a-a9b0-f0455e66f567"},{"name":"cube","rescale":false,"locked":false,"from":[8,10.251622055689653,8.654281984936242],"to":[8.25,11.501622055689653,9.404281984936242],"autouv":0,"color":2,"rotation":[22.5,0,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[14,24,15,25],"texture":0},"east":{"uv":[24,14,25,15],"texture":0},"south":{"uv":[15,24,16,25],"texture":0},"west":{"uv":[24,15,25,16],"texture":0},"up":{"uv":[17,25,16,24],"texture":0},"down":{"uv":[25,16,24,17],"texture":0}},"type":"cube","uuid":"dd84ff8f-6d0d-c1cf-f3a8-e06c48615ee1"},{"name":"cube","rescale":false,"locked":false,"from":[8,8.969581032056304,7.006799118543838],"to":[8.25,9.532081032056304,9.131799118543839],"autouv":0,"color":2,"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[29,20,30,21],"texture":0},"east":{"uv":[13,9,15,10],"texture":0},"south":{"uv":[21,29,22,30],"texture":0},"west":{"uv":[10,13,12,14],"texture":0},"up":{"uv":[14,12,13,10],"texture":0},"down":{"uv":[13,13,12,15],"texture":0}},"type":"cube","uuid":"0c8cb8b8-3b4a-f30e-b2a0-c899f3c93dcc"},{"name":"cube","rescale":false,"locked":false,"from":[8,14.869280335130545,9.292424443142856],"to":[8.25,15.494280335130545,9.542424443142856],"autouv":0,"color":2,"rotation":[-22.5,0,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[12,22,13,23],"texture":0},"east":{"uv":[22,12,23,13],"texture":0},"south":{"uv":[13,22,14,23],"texture":0},"west":{"uv":[22,13,23,14],"texture":0},"up":{"uv":[15,23,14,22],"texture":0},"down":{"uv":[23,14,22,15],"texture":0}},"type":"cube","uuid":"97b7131a-8f84-8e59-63a2-6893f51f42cf"},{"name":"cube","rescale":false,"locked":false,"from":[8,14.869280335130545,6.707575556857145],"to":[8.25,15.494280335130545,6.957575556857145],"autouv":0,"color":2,"rotation":[22.5,0,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[15,22,16,23],"texture":0},"east":{"uv":[22,15,23,16],"texture":0},"south":{"uv":[16,22,17,23],"texture":0},"west":{"uv":[22,16,23,17],"texture":0},"up":{"uv":[18,23,17,22],"texture":0},"down":{"uv":[23,17,22,18],"texture":0}},"type":"cube","uuid":"95f8af5b-6084-a414-0eac-1b31ca2ee8b2"},{"name":"cube","rescale":false,"locked":false,"from":[8,13.953210531704185,6.82228285238076],"to":[8.25,14.453210531704185,7.19728285238076],"autouv":0,"color":2,"rotation":[45,0,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[18,22,19,23],"texture":0},"east":{"uv":[22,18,23,19],"texture":0},"south":{"uv":[19,22,20,23],"texture":0},"west":{"uv":[22,19,23,20],"texture":0},"up":{"uv":[21,23,20,22],"texture":0},"down":{"uv":[23,20,22,21],"texture":0}},"type":"cube","uuid":"b15a0530-8d15-b4bf-f32d-aa3bde573fa5"},{"name":"cube","rescale":false,"locked":false,"from":[8,14.684506843151084,6.455104893224182],"to":[8.25,15.184506843151084,7.017604893224182],"autouv":0,"color":2,"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[23,7,24,8],"texture":0},"east":{"uv":[8,23,9,24],"texture":0},"south":{"uv":[23,8,24,9],"texture":0},"west":{"uv":[9,23,10,24],"texture":0},"up":{"uv":[24,10,23,9],"texture":0},"down":{"uv":[11,23,10,24],"texture":0}},"type":"cube","uuid":"5ade488e-6a88-99bc-f972-fd7efbb61088"},{"name":"cube","rescale":false,"locked":false,"from":[8,13.953210531704185,8.99021714761924],"to":[8.25,14.453210531704185,9.42771714761924],"autouv":0,"color":2,"rotation":[-45,0,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[23,4,24,5],"texture":0},"east":{"uv":[5,23,6,24],"texture":0},"south":{"uv":[23,5,24,6],"texture":0},"west":{"uv":[6,23,7,24],"texture":0},"up":{"uv":[24,7,23,6],"texture":0},"down":{"uv":[8,23,7,24],"texture":0}},"type":"cube","uuid":"ad8febed-c539-b85a-790c-5d8aedb3846d"},{"name":"cube","rescale":false,"locked":false,"from":[8,14.684506843151084,9.23239510677582],"to":[8.25,15.184506843151084,9.79489510677582],"autouv":0,"color":2,"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[11,24,12,25],"texture":0},"east":{"uv":[24,11,25,12],"texture":0},"south":{"uv":[12,24,13,25],"texture":0},"west":{"uv":[24,12,25,13],"texture":0},"up":{"uv":[14,25,13,24],"texture":0},"down":{"uv":[25,13,24,14],"texture":0}},"type":"cube","uuid":"18a0259c-d698-eeba-9ba6-1c888f59ee95"},{"name":"cube","rescale":false,"locked":false,"from":[8,14.59848318492054,6.456860621960999],"to":[8.25,15.34848318492054,6.956860621960999],"autouv":0,"color":2,"rotation":[-22.5,0,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[21,22,22,23],"texture":0},"east":{"uv":[22,21,23,22],"texture":0},"south":{"uv":[22,22,23,23],"texture":0},"west":{"uv":[0,23,1,24],"texture":0},"up":{"uv":[24,1,23,0],"texture":0},"down":{"uv":[2,23,1,24],"texture":0}},"type":"cube","uuid":"84669351-9f2a-7908-d401-a8acfdfb956a"},{"name":"cube","rescale":false,"locked":false,"from":[8,14.59848318492054,9.293139378039003],"to":[8.25,15.34848318492054,9.793139378039003],"autouv":0,"color":2,"rotation":[22.5,0,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[23,1,24,2],"texture":0},"east":{"uv":[2,23,3,24],"texture":0},"south":{"uv":[23,2,24,3],"texture":0},"west":{"uv":[3,23,4,24],"texture":0},"up":{"uv":[24,4,23,3],"texture":0},"down":{"uv":[5,23,4,24],"texture":0}},"type":"cube","uuid":"926db8fb-b3ad-8c22-225a-b90cf353f994"},{"name":"cube","rescale":false,"locked":false,"from":[8,14.76833579947028,6.42556287500932],"to":[8.25,15.26833579947028,6.67556287500932],"autouv":0,"color":2,"rotation":[-45,0,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[5,24,6,25],"texture":0},"east":{"uv":[24,5,25,6],"texture":0},"south":{"uv":[6,24,7,25],"texture":0},"west":{"uv":[24,6,25,7],"texture":0},"up":{"uv":[8,25,7,24],"texture":0},"down":{"uv":[25,7,24,8],"texture":0}},"type":"cube","uuid":"e5632bcb-ca69-60ee-130c-3758e9430f6c"},{"name":"cube","rescale":false,"locked":false,"from":[8,14.768335799470282,9.57443712499068],"to":[8.25,15.268335799470282,9.82443712499068],"autouv":0,"color":2,"rotation":[45,0,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[8,24,9,25],"texture":0},"east":{"uv":[24,8,25,9],"texture":0},"south":{"uv":[9,24,10,25],"texture":0},"west":{"uv":[24,9,25,10],"texture":0},"up":{"uv":[11,25,10,24],"texture":0},"down":{"uv":[25,10,24,11],"texture":0}},"type":"cube","uuid":"0159f959-b828-b318-6750-ebab6350057f"},{"name":"cube","rescale":false,"locked":false,"from":[8,13.138043803174346,8.404329141908729],"to":[8.25,13.763043803174346,9.154329141908729],"autouv":0,"color":2,"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[31,28,32,29],"texture":0},"east":{"uv":[29,31,30,32],"texture":0},"south":{"uv":[31,29,32,30],"texture":0},"west":{"uv":[30,31,31,32],"texture":0},"up":{"uv":[32,31,31,30],"texture":0},"down":{"uv":[32,31,31,32],"texture":0}},"type":"cube","uuid":"4a453d62-c11d-77f2-bb01-d1a55e22ba45"},{"name":"cube","rescale":false,"locked":false,"from":[8,10.251622055689653,6.84571801506376],"to":[8.25,11.439122055689653,7.59571801506376],"autouv":0,"color":2,"rotation":[-22.5,0,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[31,13,32,14],"texture":0},"east":{"uv":[14,31,15,32],"texture":0},"south":{"uv":[31,14,32,15],"texture":0},"west":{"uv":[15,31,16,32],"texture":0},"up":{"uv":[32,16,31,15],"texture":0},"down":{"uv":[17,31,16,32],"texture":0}},"type":"cube","uuid":"84e0e865-d5ea-a4d5-3adf-044a5ca4fa42"},{"name":"cube","rescale":false,"locked":false,"from":[8,11.251622055689651,7.345718015063758],"to":[8.25,11.501622055689651,8.095718015063758],"autouv":0,"color":2,"rotation":[-22.5,0,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[31,10,32,11],"texture":0},"east":{"uv":[11,31,12,32],"texture":0},"south":{"uv":[31,11,32,12],"texture":0},"west":{"uv":[12,31,13,32],"texture":0},"up":{"uv":[32,13,31,12],"texture":0},"down":{"uv":[14,31,13,32],"texture":0}},"type":"cube","uuid":"aab4de5c-6941-a1ce-5201-47943bdc0e9c"},{"name":"cube","rescale":false,"locked":false,"from":[8,11.526664270663058,8.974512574273819],"to":[8.25,12.339164270663058,9.537012574273819],"autouv":0,"color":2,"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[31,7,32,8],"texture":0},"east":{"uv":[8,31,9,32],"texture":0},"south":{"uv":[31,8,32,9],"texture":0},"west":{"uv":[9,31,10,32],"texture":0},"up":{"uv":[32,10,31,9],"texture":0},"down":{"uv":[11,31,10,32],"texture":0}},"type":"cube","uuid":"a1eb77ce-52f5-5d29-b4ec-a5275823dff7"},{"name":"cube","rescale":false,"locked":false,"from":[8,12.002274175855073,7.906648303860395],"to":[8.25,13.002274175855073,8.406648303860395],"autouv":0,"color":2,"rotation":[-22.5,0,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[31,4,32,5],"texture":0},"east":{"uv":[5,31,6,32],"texture":0},"south":{"uv":[31,5,32,6],"texture":0},"west":{"uv":[6,31,7,32],"texture":0},"up":{"uv":[32,7,31,6],"texture":0},"down":{"uv":[8,31,7,32],"texture":0}},"type":"cube","uuid":"1f1320ab-9f66-3030-8c85-9aedc03b18ea"},{"name":"cube","rescale":false,"locked":false,"from":[8,9.001622055689653,9.15428198493624],"to":[8.25,10.251622055689653,9.40428198493624],"autouv":0,"color":2,"rotation":[22.5,0,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[29,14,30,15],"texture":0},"east":{"uv":[15,29,16,30],"texture":0},"south":{"uv":[29,15,30,16],"texture":0},"west":{"uv":[16,29,17,30],"texture":0},"up":{"uv":[30,17,29,16],"texture":0},"down":{"uv":[18,29,17,30],"texture":0}},"type":"cube","uuid":"8e23bceb-c83c-518b-1977-25783383d583"},{"name":"cube","rescale":false,"locked":false,"from":[8,10.001622055689653,8.654281984936242],"to":[8.25,10.251622055689653,9.154281984936242],"autouv":0,"color":2,"rotation":[22.5,0,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[29,11,30,12],"texture":0},"east":{"uv":[12,29,13,30],"texture":0},"south":{"uv":[29,12,30,13],"texture":0},"west":{"uv":[13,29,14,30],"texture":0},"up":{"uv":[30,14,29,13],"texture":0},"down":{"uv":[15,29,14,30],"texture":0}},"type":"cube","uuid":"81d52259-60d3-02c3-7c2d-0c30127904c5"},{"name":"cube","rescale":false,"locked":false,"from":[8,10.001622055689653,7.09571801506376],"to":[8.25,10.251622055689653,7.59571801506376],"autouv":0,"color":2,"rotation":[-22.5,0,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[31,22,32,23],"texture":0},"east":{"uv":[23,31,24,32],"texture":0},"south":{"uv":[31,23,32,24],"texture":0},"west":{"uv":[24,31,25,32],"texture":0},"up":{"uv":[32,25,31,24],"texture":0},"down":{"uv":[26,31,25,32],"texture":0}},"type":"cube","uuid":"7a7b4547-bf44-424b-ce58-12021b8d02bc"},{"name":"cube","rescale":false,"locked":false,"from":[8,9.001622055689657,6.845718015063759],"to":[8.25,10.251622055689657,7.095718015063759],"autouv":0,"color":2,"rotation":[-22.5,0,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[31,16,32,17],"texture":0},"east":{"uv":[17,31,18,32],"texture":0},"south":{"uv":[31,17,32,18],"texture":0},"west":{"uv":[18,31,19,32],"texture":0},"up":{"uv":[32,19,31,18],"texture":0},"down":{"uv":[20,31,19,32],"texture":0}},"type":"cube","uuid":"f58480cd-8f23-0b2a-f5bb-165916c572bc"},{"name":"cube","rescale":false,"locked":false,"from":[8,8.969581032056306,8.993200881456161],"to":[8.25,9.219581032056306,9.243200881456161],"autouv":0,"color":2,"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[31,25,32,26],"texture":0},"east":{"uv":[26,31,27,32],"texture":0},"south":{"uv":[31,26,32,27],"texture":0},"west":{"uv":[27,31,28,32],"texture":0},"up":{"uv":[32,28,31,27],"texture":0},"down":{"uv":[29,31,28,32],"texture":0}},"type":"cube","uuid":"80a8d346-6c5d-a3ce-cd94-8752e4a10a78"},{"name":"cube","rescale":false,"locked":false,"from":[8,9.097292913780926,9.63525186806406],"to":[8.25,9.222292913780926,9.76025186806406],"autouv":0,"color":2,"rotation":[22.5,0,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[29,25,30,26],"texture":0},"east":{"uv":[26,29,27,30],"texture":0},"south":{"uv":[29,26,30,27],"texture":0},"west":{"uv":[27,29,28,30],"texture":0},"up":{"uv":[30,28,29,27],"texture":0},"down":{"uv":[29,29,28,30],"texture":0}},"type":"cube","uuid":"d8d75db3-2cfc-e016-d6ac-dd2b4ee26d89"},{"name":"cube","rescale":false,"locked":false,"from":[8,10.173313198315027,11.83676740270272],"to":[8.25,10.360813198315027,12.27426740270272],"autouv":0,"color":2,"rotation":[45,0,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[29,28,30,29],"texture":0},"east":{"uv":[29,29,30,30],"texture":0},"south":{"uv":[0,30,1,31],"texture":0},"west":{"uv":[30,0,31,1],"texture":0},"up":{"uv":[2,31,1,30],"texture":0},"down":{"uv":[31,1,30,2],"texture":0}},"type":"cube","uuid":"63d01008-5fc0-3f1d-b285-1650136a537c"},{"name":"cube","rescale":false,"locked":false,"from":[8,9.432911811164775,5.146745859658681],"to":[8.25,9.557911811164777,5.271745859658681],"autouv":0,"color":2,"rotation":[-22.5,0,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[2,30,3,31],"texture":0},"east":{"uv":[30,2,31,3],"texture":0},"south":{"uv":[3,30,4,31],"texture":0},"west":{"uv":[30,3,31,4],"texture":0},"up":{"uv":[5,31,4,30],"texture":0},"down":{"uv":[31,4,30,5],"texture":0}},"type":"cube","uuid":"96bf67a5-6db1-2eda-081c-eaee2c83317b"},{"name":"cube","rescale":false,"locked":false,"from":[8,8.469581032056304,7.006799118543838],"to":[8.25,8.594581032056304,9.256799118543839],"autouv":0,"color":2,"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[29,24,30,25],"texture":0},"east":{"uv":[13,12,15,13],"texture":0},"south":{"uv":[25,29,26,30],"texture":0},"west":{"uv":[13,13,15,14],"texture":0},"up":{"uv":[15,2,14,0],"texture":0},"down":{"uv":[2,14,1,16],"texture":0}},"type":"cube","uuid":"677cd886-e256-9729-6010-d6e4eb539209"},{"name":"cube","rescale":false,"locked":false,"from":[8,8.720584195523058,10.01196058632193],"to":[8.25,8.84558419552306,10.13696058632193],"autouv":0,"color":2,"rotation":[22.5,0,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[11,30,12,31],"texture":0},"east":{"uv":[30,11,31,12],"texture":0},"south":{"uv":[12,30,13,31],"texture":0},"west":{"uv":[30,12,31,13],"texture":0},"up":{"uv":[14,31,13,30],"texture":0},"down":{"uv":[31,13,30,14],"texture":0}},"type":"cube","uuid":"a5aed3e6-889e-81f2-4cec-a035adfdb06d"},{"name":"cube","rescale":false,"locked":false,"from":[8,8.72058419552306,6.113039413678072],"to":[8.25,8.845584195523061,6.238039413678072],"autouv":0,"color":2,"rotation":[-22.5,0,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[29,30,30,31],"texture":0},"east":{"uv":[30,29,31,30],"texture":0},"south":{"uv":[30,30,31,31],"texture":0},"west":{"uv":[0,31,1,32],"texture":0},"up":{"uv":[32,1,31,0],"texture":0},"down":{"uv":[2,31,1,32],"texture":0}},"type":"cube","uuid":"625b7e4e-ea4f-abdc-69f3-e80712084ae1"},{"name":"cube","rescale":false,"locked":false,"from":[8,9.432911811164775,10.978254140341317],"to":[8.25,9.682911811164777,11.103254140341317],"autouv":0,"color":2,"rotation":[22.5,0,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[20,30,21,31],"texture":0},"east":{"uv":[30,20,31,21],"texture":0},"south":{"uv":[21,30,22,31],"texture":0},"west":{"uv":[30,21,31,22],"texture":0},"up":{"uv":[23,31,22,30],"texture":0},"down":{"uv":[31,22,30,23],"texture":0}},"type":"cube","uuid":"960a8bb5-17b2-f03c-f736-adfece65e106"},{"name":"cube","rescale":false,"locked":false,"from":[8,10.17331319831503,4.225732597297281],"to":[8.25,10.29831319831503,4.350732597297283],"autouv":0,"color":2,"rotation":[-45,0,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[17,30,18,31],"texture":0},"east":{"uv":[30,17,31,18],"texture":0},"south":{"uv":[18,30,19,31],"texture":0},"west":{"uv":[30,18,31,19],"texture":0},"up":{"uv":[20,31,19,30],"texture":0},"down":{"uv":[31,19,30,20],"texture":0}},"type":"cube","uuid":"2d9571f6-2166-e640-6c35-d48fac3fb227"},{"name":"cube","rescale":false,"locked":false,"from":[8,9.097292913780928,6.427248131935938],"to":[8.25,9.222292913780928,6.61474813193594],"autouv":0,"color":2,"rotation":[-22.5,0,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[14,30,15,31],"texture":0},"east":{"uv":[30,14,31,15],"texture":0},"south":{"uv":[15,30,16,31],"texture":0},"west":{"uv":[30,15,31,16],"texture":0},"up":{"uv":[17,31,16,30],"texture":0},"down":{"uv":[31,16,30,17],"texture":0}},"type":"cube","uuid":"59c5653f-f616-fc2d-8ac3-17e43014ea1c"},{"name":"cube","rescale":false,"locked":false,"from":[8,24,8.25],"to":[8.25,25.9375,9.25],"autouv":0,"color":2,"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[3,12,4,14],"texture":0},"east":{"uv":[12,3,13,5],"texture":0},"south":{"uv":[4,12,5,14],"texture":0},"west":{"uv":[12,5,13,7],"texture":0},"up":{"uv":[22,15,21,14],"texture":0},"down":{"uv":[16,21,15,22],"texture":0}},"type":"cube","uuid":"102a51ed-3347-0ee2-3257-3e54d1102215"},{"name":"cube","rescale":false,"locked":false,"from":[8,25.75,8],"to":[8.25,25.9375,8.125],"autouv":0,"color":2,"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[21,1,22,2],"texture":0},"east":{"uv":[2,21,3,22],"texture":0},"south":{"uv":[21,2,22,3],"texture":0},"west":{"uv":[3,21,4,22],"texture":0},"up":{"uv":[22,4,21,3],"texture":0},"down":{"uv":[5,21,4,22],"texture":0}},"type":"cube","uuid":"72b194c2-b58e-a539-be3b-f436a2dffdcc"},{"name":"cube","rescale":false,"locked":false,"from":[8,24.682624638526317,3.890776565372718],"to":[8.25,24.932624638526317,4.015776565372718],"autouv":0,"color":2,"rotation":[22.5,0,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[21,8,22,9],"texture":0},"east":{"uv":[9,21,10,22],"texture":0},"south":{"uv":[21,9,22,10],"texture":0},"west":{"uv":[10,21,11,22],"texture":0},"up":{"uv":[22,11,21,10],"texture":0},"down":{"uv":[12,21,11,22],"texture":0}},"type":"cube","uuid":"45633967-ef39-d238-bbfc-48cd728cf52e"},{"name":"cube","rescale":false,"locked":false,"from":[8,25.75,8.125],"to":[8.25,25.9375,8.25],"autouv":0,"color":2,"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[21,5,22,6],"texture":0},"east":{"uv":[6,21,7,22],"texture":0},"south":{"uv":[21,6,22,7],"texture":0},"west":{"uv":[7,21,8,22],"texture":0},"up":{"uv":[22,8,21,7],"texture":0},"down":{"uv":[9,21,8,22],"texture":0}},"type":"cube","uuid":"d534a59b-307e-39e2-af87-9dd7ffe79ede"},{"name":"cube","rescale":false,"locked":false,"from":[8,24.682624638526317,12.234223434627282],"to":[8.25,24.932624638526317,12.359223434627282],"autouv":0,"color":2,"rotation":[-22.5,0,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[21,11,22,12],"texture":0},"east":{"uv":[12,21,13,22],"texture":0},"south":{"uv":[21,12,22,13],"texture":0},"west":{"uv":[13,21,14,22],"texture":0},"up":{"uv":[22,14,21,13],"texture":0},"down":{"uv":[15,21,14,22],"texture":0}},"type":"cube","uuid":"1ecb0f23-7303-916b-aa51-5975bcbad16d"},{"name":"cube","rescale":false,"locked":false,"from":[8,15.25,8],"to":[8.25,25.5625,8.25],"autouv":0,"color":2,"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[8,0,9,10],"texture":0},"east":{"uv":[9,0,10,10],"texture":0},"south":{"uv":[0,10,1,20],"texture":0},"west":{"uv":[10,0,11,10],"texture":0},"up":{"uv":[22,5,21,4],"texture":0},"down":{"uv":[6,21,5,22],"texture":0}},"type":"cube","uuid":"f2dd83f2-2e77-9928-9e9c-aeef40a64a1e"},{"name":"cube","rescale":false,"locked":false,"from":[8,14.741796588894125,8.23045005088057],"to":[8.25,15.241796588894125,8.35545005088057],"autouv":0,"color":2,"rotation":[-22.5,0,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[10,28,11,29],"texture":0},"east":{"uv":[28,10,29,11],"texture":0},"south":{"uv":[11,28,12,29],"texture":0},"west":{"uv":[28,11,29,12],"texture":0},"up":{"uv":[13,29,12,28],"texture":0},"down":{"uv":[29,12,28,13],"texture":0}},"type":"cube","uuid":"186bf66c-05eb-2e3c-34ad-fc896d257a37"},{"name":"cube","rescale":false,"locked":false,"from":[8,14.741796588894125,7.89454994911943],"to":[8.25,15.241796588894125,8.01954994911943],"autouv":0,"color":2,"rotation":[22.5,0,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[7,28,8,29],"texture":0},"east":{"uv":[28,7,29,8],"texture":0},"south":{"uv":[8,28,9,29],"texture":0},"west":{"uv":[28,8,29,9],"texture":0},"up":{"uv":[10,29,9,28],"texture":0},"down":{"uv":[29,9,28,10],"texture":0}},"type":"cube","uuid":"772ac167-8c44-a1d9-0a38-35064bcbe72e"},{"name":"cube","rescale":false,"locked":false,"from":[8,14.375527680729755,7.808138451570204],"to":[8.25,14.875527680729755,7.933138451570204],"autouv":0,"color":2,"rotation":[-22.5,0,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[4,28,5,29],"texture":0},"east":{"uv":[28,4,29,5],"texture":0},"south":{"uv":[5,28,6,29],"texture":0},"west":{"uv":[28,5,29,6],"texture":0},"up":{"uv":[7,29,6,28],"texture":0},"down":{"uv":[29,6,28,7],"texture":0}},"type":"cube","uuid":"6d5a9538-cdc9-7322-6870-18125fd1432e"},{"name":"cube","rescale":false,"locked":false,"from":[8,14.375527680729752,8.316861548429797],"to":[8.25,14.875527680729752,8.441861548429797],"autouv":0,"color":2,"rotation":[22.5,0,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[1,28,2,29],"texture":0},"east":{"uv":[28,1,29,2],"texture":0},"south":{"uv":[2,28,3,29],"texture":0},"west":{"uv":[28,2,29,3],"texture":0},"up":{"uv":[4,29,3,28],"texture":0},"down":{"uv":[29,3,28,4],"texture":0}},"type":"cube","uuid":"bf7b7f1f-d536-dc7e-5fde-2f5f38ef6ec6"},{"name":"cube","rescale":false,"locked":false,"from":[8,13.75,8],"to":[8.25,14.5,8.25],"autouv":0,"color":2,"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[2,24,3,25],"texture":0},"east":{"uv":[24,2,25,3],"texture":0},"south":{"uv":[3,24,4,25],"texture":0},"west":{"uv":[24,3,25,4],"texture":0},"up":{"uv":[5,25,4,24],"texture":0},"down":{"uv":[25,4,24,5],"texture":0}},"type":"cube","uuid":"d6389958-fd63-2560-e280-c596aa9a94f4"},{"name":"cube","rescale":false,"locked":false,"from":[8,13.138043803174346,7.095670858091273],"to":[8.25,13.763043803174346,7.845670858091273],"autouv":0,"color":2,"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[23,10,24,11],"texture":0},"east":{"uv":[11,23,12,24],"texture":0},"south":{"uv":[23,11,24,12],"texture":0},"west":{"uv":[12,23,13,24],"texture":0},"up":{"uv":[24,13,23,12],"texture":0},"down":{"uv":[14,23,13,24],"texture":0}},"type":"cube","uuid":"f984762d-f879-1e3f-6b8c-9d0d945199ba"},{"name":"cube","rescale":false,"locked":false,"from":[8,13.78126683641434,8.804038130706953],"to":[8.25,14.03126683641434,8.929038130706953],"autouv":0,"color":2,"rotation":[45,0,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[23,13,24,14],"texture":0},"east":{"uv":[14,23,15,24],"texture":0},"south":{"uv":[23,14,24,15],"texture":0},"west":{"uv":[15,23,16,24],"texture":0},"up":{"uv":[24,16,23,15],"texture":0},"down":{"uv":[17,23,16,24],"texture":0}},"type":"cube","uuid":"f08d99c0-8a3f-8b74-1f23-57bfce8a4b70"},{"name":"cube","rescale":false,"locked":false,"from":[8,14.208043573857822,9.10581486815044],"to":[8.25,14.333043573857823,9.35581486815044],"autouv":0,"color":2,"rotation":[45,0,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[23,19,24,20],"texture":0},"east":{"uv":[20,23,21,24],"texture":0},"south":{"uv":[23,20,24,21],"texture":0},"west":{"uv":[21,23,22,24],"texture":0},"up":{"uv":[24,22,23,21],"texture":0},"down":{"uv":[23,23,22,24],"texture":0}},"type":"cube","uuid":"b26e4165-136d-fda8-5088-50efc2df9000"},{"name":"cube","rescale":false,"locked":false,"from":[8,13.4794901411177,9.10581482600359],"to":[8.25,13.604490141117703,9.35581482600359],"autouv":0,"color":2,"rotation":[45,0,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[23,22,24,23],"texture":0},"east":{"uv":[23,23,24,24],"texture":0},"south":{"uv":[0,24,1,25],"texture":0},"west":{"uv":[24,0,25,1],"texture":0},"up":{"uv":[2,25,1,24],"texture":0},"down":{"uv":[25,1,24,2],"texture":0}},"type":"cube","uuid":"c38fe2f7-99c5-d21d-7d53-376e67330911"},{"name":"cube","rescale":false,"locked":false,"from":[8,11.208946728616016,7.249999999999998],"to":[8.25,13.146446728616016,8.999999999999998],"autouv":0,"color":2,"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[12,9,13,11],"texture":0},"east":{"uv":[1,10,3,12],"texture":0},"south":{"uv":[12,11,13,13],"texture":0},"west":{"uv":[3,10,5,12],"texture":0},"up":{"uv":[14,3,13,1],"texture":0},"down":{"uv":[14,3,13,5],"texture":0}},"type":"cube","uuid":"c592cf25-0578-8b09-8849-7297a9134edf"},{"name":"cube","rescale":false,"locked":false,"from":[8,13.781266878561187,9.532591563447072],"to":[8.25,14.031266878561187,9.657591563447074],"autouv":0,"color":2,"rotation":[45,0,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[23,16,24,17],"texture":0},"east":{"uv":[17,23,18,24],"texture":0},"south":{"uv":[23,17,24,18],"texture":0},"west":{"uv":[18,23,19,24],"texture":0},"up":{"uv":[24,19,23,18],"texture":0},"down":{"uv":[20,23,19,24],"texture":0}},"type":"cube","uuid":"300d7fd9-6ea0-0cf0-2c09-aa1aacd47366"},{"name":"cube","rescale":false,"locked":false,"from":[8,10.488535908703696,9.324201353153626],"to":[8.25,11.551035908703696,9.574201353153626],"autouv":0,"color":2,"rotation":[22.5,0,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[17,24,18,25],"texture":0},"east":{"uv":[24,17,25,18],"texture":0},"south":{"uv":[18,24,19,25],"texture":0},"west":{"uv":[24,18,25,19],"texture":0},"up":{"uv":[20,25,19,24],"texture":0},"down":{"uv":[25,19,24,20],"texture":0}},"type":"cube","uuid":"de46f135-a23f-17aa-8573-945dae658fb3"},{"name":"cube","rescale":false,"locked":false,"from":[8,10.488535901810481,6.675798613175042],"to":[8.25,11.551035901810481,6.925798613175042],"autouv":0,"color":2,"rotation":[-22.5,0,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[25,14,26,15],"texture":0},"east":{"uv":[15,25,16,26],"texture":0},"south":{"uv":[25,15,26,16],"texture":0},"west":{"uv":[16,25,17,26],"texture":0},"up":{"uv":[26,17,25,16],"texture":0},"down":{"uv":[18,25,17,26],"texture":0}},"type":"cube","uuid":"e20a9215-aaf8-aeab-11ad-ded842a10d04"},{"name":"cube","rescale":false,"locked":false,"from":[8,10.90178013848264,6.131828167412438],"to":[8.25,11.02678013848264,6.256828167412437],"autouv":0,"color":2,"rotation":[-22.5,0,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[20,24,21,25],"texture":0},"east":{"uv":[24,20,25,21],"texture":0},"south":{"uv":[21,24,22,25],"texture":0},"west":{"uv":[24,21,25,22],"texture":0},"up":{"uv":[23,25,22,24],"texture":0},"down":{"uv":[25,22,24,23],"texture":0}},"type":"cube","uuid":"973194c4-8eae-8d06-cdb7-6cab0f66d86a"},{"name":"cube","rescale":false,"locked":false,"from":[8,10.365224746664378,7.736643158102292],"to":[8.25,10.740224746664378,7.924143158102291],"autouv":0,"color":2,"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[25,8,26,9],"texture":0},"east":{"uv":[9,25,10,26],"texture":0},"south":{"uv":[25,9,26,10],"texture":0},"west":{"uv":[10,25,11,26],"texture":0},"up":{"uv":[26,11,25,10],"texture":0},"down":{"uv":[12,25,11,26],"texture":0}},"type":"cube","uuid":"6cd5fdfc-3142-45aa-8752-ee22012a88f8"},{"name":"cube","rescale":false,"locked":false,"from":[8,10.36522472741042,8.325856813427377],"to":[8.25,10.74022472741042,8.513356813427375],"autouv":0,"color":2,"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[25,11,26,12],"texture":0},"east":{"uv":[12,25,13,26],"texture":0},"south":{"uv":[25,12,26,13],"texture":0},"west":{"uv":[13,25,14,26],"texture":0},"up":{"uv":[26,14,25,13],"texture":0},"down":{"uv":[15,25,14,26],"texture":0}},"type":"cube","uuid":"f037ddc2-b7e1-81b4-4b8e-47dcde844b3f"},{"name":"cube","rescale":false,"locked":false,"from":[8,10.901780109799176,9.993171813652577],"to":[8.25,11.026780109799176,10.118171813652575],"autouv":0,"color":2,"rotation":[22.5,0,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[25,2,26,3],"texture":0},"east":{"uv":[3,25,4,26],"texture":0},"south":{"uv":[25,3,26,4],"texture":0},"west":{"uv":[4,25,5,26],"texture":0},"up":{"uv":[26,5,25,4],"texture":0},"down":{"uv":[6,25,5,26],"texture":0}},"type":"cube","uuid":"ff9ed4b8-e783-e316-6147-b1353519a0c6"},{"name":"cube","rescale":false,"locked":false,"from":[8,11.804576623385243,4.70108997416857],"to":[8.25,11.992076623385243,4.826089974168569],"autouv":0,"color":2,"rotation":[-45,0,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[23,24,24,25],"texture":0},"east":{"uv":[24,23,25,24],"texture":0},"south":{"uv":[24,24,25,25],"texture":0},"west":{"uv":[0,25,1,26],"texture":0},"up":{"uv":[26,1,25,0],"texture":0},"down":{"uv":[2,25,1,26],"texture":0}},"type":"cube","uuid":"4e304fc9-4c65-2d8c-a101-81efe3b80b51"},{"name":"cube","rescale":false,"locked":false,"from":[8,11.588171672513313,4.917494897811294],"to":[8.25,11.713171672513312,5.104994897811294],"autouv":0,"color":2,"rotation":[-45,0,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[25,5,26,6],"texture":0},"east":{"uv":[6,25,7,26],"texture":0},"south":{"uv":[25,6,26,7],"texture":0},"west":{"uv":[7,25,8,26],"texture":0},"up":{"uv":[26,8,25,7],"texture":0},"down":{"uv":[9,25,8,26],"texture":0}},"type":"cube","uuid":"22c0f41b-b36b-0029-564f-a831370601e0"},{"name":"cube","rescale":false,"locked":false,"from":[8,10.286351457452149,6.997866934796246],"to":[8.25,10.411351457452149,9.247866934796246],"autouv":0,"color":2,"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[25,1,26,2],"texture":0},"east":{"uv":[13,5,15,6],"texture":0},"south":{"uv":[2,25,3,26],"texture":0},"west":{"uv":[13,6,15,7],"texture":0},"up":{"uv":[14,9,13,7],"texture":0},"down":{"uv":[10,13,9,15],"texture":0}},"type":"cube","uuid":"6a9cc613-84bf-4673-be19-dc3f138dd91b"},{"name":"cube","rescale":false,"locked":false,"from":[8,9.501622055689653,9.15428198493624],"to":[8.25,10.751622055689653,10.15428198493624],"autouv":0,"color":2,"rotation":[22.5,0,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[29,17,30,18],"texture":0},"east":{"uv":[18,29,19,30],"texture":0},"south":{"uv":[29,18,30,19],"texture":0},"west":{"uv":[19,29,20,30],"texture":0},"up":{"uv":[30,20,29,19],"texture":0},"down":{"uv":[21,29,20,30],"texture":0}},"type":"cube","uuid":"fd561926-e9c3-65a6-219b-4b3486ab36a3"},{"name":"cube","rescale":false,"locked":false,"from":[8,9.501622055689657,6.095718015063759],"to":[8.25,10.751622055689657,7.095718015063759],"autouv":0,"color":2,"rotation":[-22.5,0,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[31,19,32,20],"texture":0},"east":{"uv":[20,31,21,32],"texture":0},"south":{"uv":[31,20,32,21],"texture":0},"west":{"uv":[21,31,22,32],"texture":0},"up":{"uv":[32,22,31,21],"texture":0},"down":{"uv":[23,31,22,32],"texture":0}},"type":"cube","uuid":"0bb03b21-0674-daee-3efb-fb9ab63c6d7a"},{"name":"cube","rescale":false,"locked":false,"from":[8,9.532081032056304,8.006799118543839],"to":[8.25,9.719581032056304,8.256799118543839],"autouv":0,"color":2,"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[29,21,30,22],"texture":0},"east":{"uv":[22,29,23,30],"texture":0},"south":{"uv":[29,22,30,23],"texture":0},"west":{"uv":[23,29,24,30],"texture":0},"up":{"uv":[30,24,29,23],"texture":0},"down":{"uv":[25,29,24,30],"texture":0}},"type":"cube","uuid":"23f1c35a-456d-255c-baf8-84abf62eac35"},{"name":"cube","rescale":false,"locked":false,"from":[8,8.467872313798434,7.508507836801705],"to":[8.25,8.967872313798436,8.133507836801705],"autouv":0,"color":2,"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[8,30,9,31],"texture":0},"east":{"uv":[30,8,31,9],"texture":0},"south":{"uv":[9,30,10,31],"texture":0},"west":{"uv":[30,9,31,10],"texture":0},"up":{"uv":[11,31,10,30],"texture":0},"down":{"uv":[31,10,30,11],"texture":0}},"type":"cube","uuid":"4527fb1a-a62b-355f-e890-3c45e3c7e2c1"},{"name":"cube","rescale":false,"locked":false,"from":[8,8.467872313798436,8.116492163198295],"to":[8.25,8.967872313798438,8.741492163198295],"autouv":0,"color":2,"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[26,30,27,31],"texture":0},"east":{"uv":[30,26,31,27],"texture":0},"south":{"uv":[27,30,28,31],"texture":0},"west":{"uv":[30,27,31,28],"texture":0},"up":{"uv":[29,31,28,30],"texture":0},"down":{"uv":[31,28,30,29],"texture":0}},"type":"cube","uuid":"c4cc70f1-6320-f791-b982-e63c99730ca7"},{"name":"cube","rescale":false,"locked":false,"from":[7.75,8.219581032056304,6.756799118543838],"to":[8.5,8.469581032056304,9.506799118543839],"autouv":0,"color":2,"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[11,9,12,10],"texture":0},"east":{"uv":[9,10,12,11],"texture":0},"south":{"uv":[2,14,3,15],"texture":0},"west":{"uv":[11,0,14,1],"texture":0},"up":{"uv":[12,4,11,1],"texture":0},"down":{"uv":[12,4,11,7],"texture":0}},"type":"cube","uuid":"5a04c837-ea7d-f63a-69d1-ad5e77528864"},{"name":"cube","rescale":false,"locked":false,"from":[8.42360571299605,8.469581032056304,8.37281061149133],"to":[8.67360571299605,8.594581032056304,9.12281061149133],"autouv":0,"color":2,"rotation":[0,-22.5,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[13,20,14,21],"texture":0},"east":{"uv":[20,13,21,14],"texture":0},"south":{"uv":[14,20,15,21],"texture":0},"west":{"uv":[20,14,21,15],"texture":0},"up":{"uv":[16,21,15,20],"texture":0},"down":{"uv":[21,15,20,16],"texture":0}},"type":"cube","uuid":"4514ac51-343c-676c-cf2e-8d4151892d9f"},{"name":"cube","rescale":false,"locked":false,"from":[7.581598107046776,8.469581032056304,7.139752521432209],"to":[7.831598107046776,8.594581032056304,7.889752521432209],"autouv":0,"color":2,"rotation":[0,-22.5,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[10,20,11,21],"texture":0},"east":{"uv":[20,10,21,11],"texture":0},"south":{"uv":[11,20,12,21],"texture":0},"west":{"uv":[20,11,21,12],"texture":0},"up":{"uv":[13,21,12,20],"texture":0},"down":{"uv":[21,12,20,13],"texture":0}},"type":"cube","uuid":"d6f6e6dc-ddac-96ce-1062-8aee12d11a6d"},{"name":"cube","rescale":false,"locked":false,"from":[8.418401892953224,8.469581032056304,7.139752521432209],"to":[8.668401892953224,8.594581032056304,7.889752521432209],"autouv":0,"color":2,"rotation":[0,22.5,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[1,20,2,21],"texture":0},"east":{"uv":[20,1,21,2],"texture":0},"south":{"uv":[2,20,3,21],"texture":0},"west":{"uv":[20,2,21,3],"texture":0},"up":{"uv":[4,21,3,20],"texture":0},"down":{"uv":[21,3,20,4],"texture":0}},"type":"cube","uuid":"f03f0c31-0614-4df3-0771-bf12865fa5a2"},{"name":"cube","rescale":false,"locked":false,"from":[7.57639428700395,8.469581032056304,8.372810611491332],"to":[7.82639428700395,8.594581032056304,9.122810611491332],"autouv":0,"color":2,"rotation":[0,22.5,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[16,20,17,21],"texture":0},"east":{"uv":[20,16,21,17],"texture":0},"south":{"uv":[17,20,18,21],"texture":0},"west":{"uv":[20,17,21,18],"texture":0},"up":{"uv":[19,21,18,20],"texture":0},"down":{"uv":[21,18,20,19],"texture":0}},"type":"cube","uuid":"a4c401d8-cdd0-debf-b219-d2e6a31c2040"},{"name":"cube","rescale":false,"locked":false,"from":[8.037012574273819,8.469581032056304,7.6888894691603715],"to":[8.537012574273819,8.594581032056304,8.563889469160372],"autouv":0,"color":2,"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[7,20,8,21],"texture":0},"east":{"uv":[20,7,21,8],"texture":0},"south":{"uv":[8,20,9,21],"texture":0},"west":{"uv":[20,8,21,9],"texture":0},"up":{"uv":[10,21,9,20],"texture":0},"down":{"uv":[21,9,20,10],"texture":0}},"type":"cube","uuid":"98fbda9e-30fc-b640-bb28-32f6727c9f85"},{"name":"cube","rescale":false,"locked":false,"from":[7.712987425726183,8.469581032056304,7.699708767927301],"to":[8.212987425726183,8.594581032056304,8.574708767927302],"autouv":0,"color":2,"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[4,20,5,21],"texture":0},"east":{"uv":[20,4,21,5],"texture":0},"south":{"uv":[5,20,6,21],"texture":0},"west":{"uv":[20,5,21,6],"texture":0},"up":{"uv":[7,21,6,20],"texture":0},"down":{"uv":[21,6,20,7],"texture":0}},"type":"cube","uuid":"da74fb0a-7f5d-050e-1a2e-15bc791e2f12"},{"name":"cube","rescale":false,"locked":false,"from":[7.75,8.387137264959643,10.413253581866172],"to":[8.5,8.512137264959643,10.538253581866172],"autouv":0,"color":2,"rotation":[22.5,0,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[6,14,7,15],"texture":0},"east":{"uv":[7,14,8,15],"texture":0},"south":{"uv":[14,7,15,8],"texture":0},"west":{"uv":[8,14,9,15],"texture":0},"up":{"uv":[15,9,14,8],"texture":0},"down":{"uv":[11,14,10,15],"texture":0}},"type":"cube","uuid":"d761714d-97e6-6ff5-617b-42cf908a021a"},{"name":"cube","rescale":false,"locked":false,"from":[7.75,9.867928237259395,12.654476634501943],"to":[8.5,10.117928237259395,12.841976634501943],"autouv":0,"color":2,"rotation":[45,0,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[14,10,15,11],"texture":0},"east":{"uv":[11,14,12,15],"texture":0},"south":{"uv":[14,11,15,12],"texture":0},"west":{"uv":[13,14,14,15],"texture":0},"up":{"uv":[15,15,14,14],"texture":0},"down":{"uv":[16,0,15,1],"texture":0}},"type":"cube","uuid":"c2193e29-a7c3-aa8d-e9d8-5aef899ee7bc"},{"name":"cube","rescale":false,"locked":false,"from":[7.75,8.219627686201564,8.071007836801705],"to":[8.5,8.344627686201564,8.196007836801705],"autouv":0,"color":2,"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[15,1,16,2],"texture":0},"east":{"uv":[2,15,3,16],"texture":0},"south":{"uv":[15,2,16,3],"texture":0},"west":{"uv":[3,15,4,16],"texture":0},"up":{"uv":[16,4,15,3],"texture":0},"down":{"uv":[5,15,4,16],"texture":0}},"type":"cube","uuid":"01cf428d-d9ff-47bf-0418-8327c2078025"},{"name":"cube","rescale":false,"locked":false,"from":[7.75,8.75733436683895,5.350758132450041],"to":[8.5,8.88233436683895,5.475758132450041],"autouv":0,"color":2,"rotation":[-22.5,0,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[15,4,16,5],"texture":0},"east":{"uv":[5,15,6,16],"texture":0},"south":{"uv":[15,5,16,6],"texture":0},"west":{"uv":[6,15,7,16],"texture":0},"up":{"uv":[16,7,15,6],"texture":0},"down":{"uv":[8,15,7,16],"texture":0}},"type":"cube","uuid":"020b1ae4-8f1f-1ce9-5368-f59966795043"},{"name":"cube","rescale":false,"locked":false,"from":[7.75,8.763845983217507,10.789962300124037],"to":[8.5,8.888845983217507,10.914962300124037],"autouv":0,"color":2,"rotation":[22.5,0,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[15,7,16,8],"texture":0},"east":{"uv":[8,15,9,16],"texture":0},"south":{"uv":[15,8,16,9],"texture":0},"west":{"uv":[9,15,10,16],"texture":0},"up":{"uv":[16,10,15,9],"texture":0},"down":{"uv":[11,15,10,16],"texture":0}},"type":"cube","uuid":"8f5df839-9429-fc86-191d-dc95d084332a"},{"name":"cube","rescale":false,"locked":false,"from":[7.75,9.855896339067968,3.420055263689485],"to":[8.5,10.105896339067968,3.607555263689485],"autouv":0,"color":2,"rotation":[-45,0,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[15,10,16,11],"texture":0},"east":{"uv":[11,15,12,16],"texture":0},"south":{"uv":[15,11,16,12],"texture":0},"west":{"uv":[12,15,13,16],"texture":0},"up":{"uv":[16,13,15,12],"texture":0},"down":{"uv":[14,15,13,16],"texture":0}},"type":"cube","uuid":"e00989db-00e7-ff9c-eb08-dd09f263a974"},{"name":"cube","rescale":false,"locked":false,"from":[7.75,8.380625648581086,5.727466850707907],"to":[8.5,8.505625648581086,5.852466850707907],"autouv":0,"color":2,"rotation":[-22.5,0,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[15,13,16,14],"texture":0},"east":{"uv":[14,15,15,16],"texture":0},"south":{"uv":[15,14,16,15],"texture":0},"west":{"uv":[15,15,16,16],"texture":0},"up":{"uv":[17,1,16,0],"texture":0},"down":{"uv":[2,16,1,17],"texture":0}},"type":"cube","uuid":"3c88186b-3fc7-fe79-9af3-51789a685ebd"},{"name":"cube","rescale":false,"locked":false,"from":[7.75,7.842918967943695,8.447716555059568],"to":[8.5,7.967918967943695,8.572716555059568],"autouv":0,"color":2,"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[16,1,17,2],"texture":0},"east":{"uv":[2,16,3,17],"texture":0},"south":{"uv":[16,2,17,3],"texture":0},"west":{"uv":[3,16,4,17],"texture":0},"up":{"uv":[17,4,16,3],"texture":0},"down":{"uv":[5,16,4,17],"texture":0}},"type":"cube","uuid":"217a65e2-13f1-7a88-b0a3-b726efce57d0"},{"name":"cube","rescale":false,"locked":false,"from":[7.75,8.387137264959641,11.166671018381901],"to":[8.5,8.512137264959641,11.291671018381901],"autouv":0,"color":2,"rotation":[22.5,0,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[16,4,17,5],"texture":0},"east":{"uv":[5,16,6,17],"texture":0},"south":{"uv":[16,5,17,6],"texture":0},"west":{"uv":[6,16,7,17],"texture":0},"up":{"uv":[17,7,16,6],"texture":0},"down":{"uv":[8,16,7,17],"texture":0}},"type":"cube","uuid":"78c85009-86a4-24a7-f9bf-b7738c7143c5"},{"name":"cube","rescale":false,"locked":false,"from":[7.75,9.867928237259395,13.470394071017672],"to":[8.5,10.117928237259395,13.657894071017672],"autouv":0,"color":2,"rotation":[45,0,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[16,7,17,8],"texture":0},"east":{"uv":[8,16,9,17],"texture":0},"south":{"uv":[16,8,17,9],"texture":0},"west":{"uv":[9,16,10,17],"texture":0},"up":{"uv":[17,10,16,9],"texture":0},"down":{"uv":[11,16,10,17],"texture":0}},"type":"cube","uuid":"e126a3d7-7225-1b29-dbf1-85b5984774a7"},{"name":"cube","rescale":false,"locked":false,"from":[7.75,8.00391693032322,5.350758132450041],"to":[8.5,8.12891693032322,5.475758132450041],"autouv":0,"color":2,"rotation":[-22.5,0,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[16,10,17,11],"texture":0},"east":{"uv":[11,16,12,17],"texture":0},"south":{"uv":[16,11,17,12],"texture":0},"west":{"uv":[12,16,13,17],"texture":0},"up":{"uv":[17,13,16,12],"texture":0},"down":{"uv":[14,16,13,17],"texture":0}},"type":"cube","uuid":"ad845a49-c4d6-d149-db1d-f6bda2ddbe95"},{"name":"cube","rescale":false,"locked":false,"from":[7.75,8.010428546701776,10.789962300124037],"to":[8.5,8.135428546701776,10.914962300124037],"autouv":0,"color":2,"rotation":[22.5,0,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[17,0,18,1],"texture":0},"east":{"uv":[1,17,2,18],"texture":0},"south":{"uv":[17,1,18,2],"texture":0},"west":{"uv":[2,17,3,18],"texture":0},"up":{"uv":[18,3,17,2],"texture":0},"down":{"uv":[4,17,3,18],"texture":0}},"type":"cube","uuid":"9b98f40b-6238-79cf-3cc6-1d1e6997f095"},{"name":"cube","rescale":false,"locked":false,"from":[7.75,7.466210249685829,8.071007836801705],"to":[8.5,7.591210249685829,8.196007836801705],"autouv":0,"color":2,"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[16,13,17,14],"texture":0},"east":{"uv":[14,16,15,17],"texture":0},"south":{"uv":[16,14,17,15],"texture":0},"west":{"uv":[15,16,16,17],"texture":0},"up":{"uv":[17,16,16,15],"texture":0},"down":{"uv":[17,16,16,17],"texture":0}},"type":"cube","uuid":"f8568ed0-f18f-5650-e2d3-a4a270d24692"},{"name":"cube","rescale":false,"locked":false,"from":[7.75,9.855896339067971,2.6041378271737514],"to":[8.5,10.105896339067971,2.7916378271737505],"autouv":0,"color":2,"rotation":[-45,0,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[17,3,18,4],"texture":0},"east":{"uv":[4,17,5,18],"texture":0},"south":{"uv":[17,4,18,5],"texture":0},"west":{"uv":[5,17,6,18],"texture":0},"up":{"uv":[18,6,17,5],"texture":0},"down":{"uv":[7,17,6,18],"texture":0}},"type":"cube","uuid":"8917a6e1-6295-3d04-6101-79bb8554786f"},{"name":"cube","rescale":false,"locked":false,"from":[7.75,8.380625648581086,4.9740494141921765],"to":[8.5,8.505625648581086,5.0990494141921765],"autouv":0,"color":2,"rotation":[-22.5,0,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[17,6,18,7],"texture":0},"east":{"uv":[7,17,8,18],"texture":0},"south":{"uv":[17,7,18,8],"texture":0},"west":{"uv":[8,17,9,18],"texture":0},"up":{"uv":[18,9,17,8],"texture":0},"down":{"uv":[10,17,9,18],"texture":0}},"type":"cube","uuid":"90920f48-476d-6708-9286-93e49a45ebbb"},{"name":"cube","rescale":false,"locked":false,"from":[7.75,7.407081032056304,6.756799118543838],"to":[8.5,8.219581032056304,7.819299118543839],"autouv":0,"color":2,"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[17,9,18,10],"texture":0},"east":{"uv":[10,17,11,18],"texture":0},"south":{"uv":[17,10,18,11],"texture":0},"west":{"uv":[11,17,12,18],"texture":0},"up":{"uv":[18,12,17,11],"texture":0},"down":{"uv":[13,17,12,18],"texture":0}},"type":"cube","uuid":"79e21d7d-3765-076f-9b06-ebe9a5024523"},{"name":"cube","rescale":false,"locked":false,"from":[7.75,7.407081032056304,8.456799166227555],"to":[8.5,8.219581032056304,9.506799166227555],"autouv":0,"color":2,"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[17,12,18,13],"texture":0},"east":{"uv":[13,17,14,18],"texture":0},"south":{"uv":[17,13,18,14],"texture":0},"west":{"uv":[14,17,15,18],"texture":0},"up":{"uv":[18,15,17,14],"texture":0},"down":{"uv":[16,17,15,18],"texture":0}},"type":"cube","uuid":"3ef608f8-3929-91a5-a3c1-8b8269081e69"},{"name":"cube","rescale":false,"locked":false,"from":[7.75,7.407081032056302,7.819299118543839],"to":[8.5,7.594581032056302,8.506799118543839],"autouv":0,"color":2,"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[17,15,18,16],"texture":0},"east":{"uv":[16,17,17,18],"texture":0},"south":{"uv":[17,16,18,17],"texture":0},"west":{"uv":[17,17,18,18],"texture":0},"up":{"uv":[19,1,18,0],"texture":0},"down":{"uv":[2,18,1,19],"texture":0}},"type":"cube","uuid":"7c9e70e7-b015-d24d-e82d-2217f3ed6fb6"},{"name":"cube","rescale":false,"locked":false,"from":[8,7.657081032056304,9.456799166227555],"to":[8.25,8.219581032056304,10.756799166227555],"autouv":0,"color":2,"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[18,1,19,2],"texture":0},"east":{"uv":[2,18,3,19],"texture":0},"south":{"uv":[18,2,19,3],"texture":0},"west":{"uv":[3,18,4,19],"texture":0},"up":{"uv":[19,4,18,3],"texture":0},"down":{"uv":[5,18,4,19],"texture":0}},"type":"cube","uuid":"a1645fda-ca2d-cc5a-cedf-7c71c716ea74"},{"name":"cube","rescale":false,"locked":false,"from":[8,7.657081032056304,5.493200833772445],"to":[8.25,8.219581032056304,6.793200833772445],"autouv":0,"color":2,"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[18,4,19,5],"texture":0},"east":{"uv":[5,18,6,19],"texture":0},"south":{"uv":[18,5,19,6],"texture":0},"west":{"uv":[6,18,7,19],"texture":0},"up":{"uv":[19,7,18,6],"texture":0},"down":{"uv":[8,18,7,19],"texture":0}},"type":"cube","uuid":"26ef26a3-954d-e31c-00e4-49edf1892d3a"},{"name":"cube","rescale":false,"locked":false,"from":[8,8.348095410646147,11.067060274295383],"to":[8.25,8.848095410646147,11.379560274295383],"autouv":0,"color":2,"rotation":[45,0,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[18,7,19,8],"texture":0},"east":{"uv":[8,18,9,19],"texture":0},"south":{"uv":[18,8,19,9],"texture":0},"west":{"uv":[9,18,10,19],"texture":0},"up":{"uv":[19,10,18,9],"texture":0},"down":{"uv":[11,18,10,19],"texture":0}},"type":"cube","uuid":"7e950d24-3eb8-c9d2-48ce-d2e8d554011a"},{"name":"cube","rescale":false,"locked":false,"from":[8,11.172273853114964,1.0632661544009334],"to":[8.25,11.672273853114964,1.3757661544009334],"autouv":0,"color":2,"rotation":[-45,0,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[18,10,19,11],"texture":0},"east":{"uv":[11,18,12,19],"texture":0},"south":{"uv":[18,11,19,12],"texture":0},"west":{"uv":[12,18,13,19],"texture":0},"up":{"uv":[19,13,18,12],"texture":0},"down":{"uv":[14,18,13,19],"texture":0}},"type":"cube","uuid":"2366cca0-a890-f422-e563-95cf483a3519"},{"name":"cube","rescale":false,"locked":false,"from":[8,11.172273853114962,14.874233845599068],"to":[8.25,11.672273853114962,15.186733845599068],"autouv":0,"color":2,"rotation":[45,0,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[18,13,19,14],"texture":0},"east":{"uv":[14,18,15,19],"texture":0},"south":{"uv":[18,14,19,15],"texture":0},"west":{"uv":[15,18,16,19],"texture":0},"up":{"uv":[19,16,18,15],"texture":0},"down":{"uv":[17,18,16,19],"texture":0}},"type":"cube","uuid":"6b7434df-69db-5bb2-3e2e-1d712656ccfe"},{"name":"cube","rescale":false,"locked":false,"from":[8,8.348095410646147,4.870439725704618],"to":[8.25,8.848095410646147,5.182939725704618],"autouv":0,"color":2,"rotation":[-45,0,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[18,16,19,17],"texture":0},"east":{"uv":[17,18,18,19],"texture":0},"south":{"uv":[18,17,19,18],"texture":0},"west":{"uv":[18,18,19,19],"texture":0},"up":{"uv":[20,1,19,0],"texture":0},"down":{"uv":[2,19,1,20],"texture":0}},"type":"cube","uuid":"fa067a2a-2067-2b9d-f10d-a28bbc228eb4"},{"name":"cube","rescale":false,"locked":false,"from":[8.418401892953224,7.282081032056304,7.139752521432209],"to":[8.668401892953224,7.407081032056304,7.889752521432209],"autouv":0,"color":2,"rotation":[0,22.5,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[19,1,20,2],"texture":0},"east":{"uv":[2,19,3,20],"texture":0},"south":{"uv":[19,2,20,3],"texture":0},"west":{"uv":[3,19,4,20],"texture":0},"up":{"uv":[20,4,19,3],"texture":0},"down":{"uv":[5,19,4,20],"texture":0}},"type":"cube","uuid":"91f56369-9ee5-d2d0-34cb-69f452a4de72"},{"name":"cube","rescale":false,"locked":false,"from":[8.037012574273819,7.282081032056304,7.6888894691603715],"to":[8.537012574273819,7.407081032056304,8.563889469160372],"autouv":0,"color":2,"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[19,4,20,5],"texture":0},"east":{"uv":[5,19,6,20],"texture":0},"south":{"uv":[19,5,20,6],"texture":0},"west":{"uv":[6,19,7,20],"texture":0},"up":{"uv":[20,7,19,6],"texture":0},"down":{"uv":[8,19,7,20],"texture":0}},"type":"cube","uuid":"ebf5158c-28cf-7d7a-fcd4-1e8ae7b434e4"},{"name":"cube","rescale":false,"locked":false,"from":[8.42360571299605,7.282081032056304,8.37281061149133],"to":[8.67360571299605,7.407081032056304,9.12281061149133],"autouv":0,"color":2,"rotation":[0,-22.5,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[19,7,20,8],"texture":0},"east":{"uv":[8,19,9,20],"texture":0},"south":{"uv":[19,8,20,9],"texture":0},"west":{"uv":[9,19,10,20],"texture":0},"up":{"uv":[20,10,19,9],"texture":0},"down":{"uv":[11,19,10,20],"texture":0}},"type":"cube","uuid":"d9d9d69a-d1e2-816e-1b8f-5c84e3cfde41"},{"name":"cube","rescale":false,"locked":false,"from":[7.581598107046776,7.282081032056304,7.139752521432209],"to":[7.831598107046776,7.407081032056304,7.889752521432209],"autouv":0,"color":2,"rotation":[0,-22.5,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[19,10,20,11],"texture":0},"east":{"uv":[11,19,12,20],"texture":0},"south":{"uv":[19,11,20,12],"texture":0},"west":{"uv":[12,19,13,20],"texture":0},"up":{"uv":[20,13,19,12],"texture":0},"down":{"uv":[14,19,13,20],"texture":0}},"type":"cube","uuid":"04887239-0370-b0f6-8b75-bca91e4aebb5"},{"name":"cube","rescale":false,"locked":false,"from":[7.712987425726183,7.282081032056304,7.699708767927301],"to":[8.212987425726183,7.407081032056304,8.574708767927302],"autouv":0,"color":2,"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[19,13,20,14],"texture":0},"east":{"uv":[14,19,15,20],"texture":0},"south":{"uv":[19,14,20,15],"texture":0},"west":{"uv":[15,19,16,20],"texture":0},"up":{"uv":[20,16,19,15],"texture":0},"down":{"uv":[17,19,16,20],"texture":0}},"type":"cube","uuid":"dc977537-e912-9a8e-bdbd-7c9d48da1089"},{"name":"cube","rescale":false,"locked":false,"from":[7.57639428700395,7.282081032056304,8.372810611491332],"to":[7.82639428700395,7.407081032056304,9.122810611491332],"autouv":0,"color":2,"rotation":[0,22.5,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[19,16,20,17],"texture":0},"east":{"uv":[17,19,18,20],"texture":0},"south":{"uv":[19,17,20,18],"texture":0},"west":{"uv":[18,19,19,20],"texture":0},"up":{"uv":[20,19,19,18],"texture":0},"down":{"uv":[20,19,19,20],"texture":0}},"type":"cube","uuid":"d5dc4328-1e8e-152e-6a5c-4ee2b702df23"},{"name":"cube","rescale":false,"locked":false,"from":[8,7.282081032056304,7.006799118543838],"to":[8.25,7.407081032056304,9.256799118543839],"autouv":0,"color":2,"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[0,20,1,21],"texture":0},"east":{"uv":[11,7,13,8],"texture":0},"south":{"uv":[20,0,21,1],"texture":0},"west":{"uv":[11,8,13,9],"texture":0},"up":{"uv":[10,13,9,11],"texture":0},"down":{"uv":[11,11,10,13],"texture":0}},"type":"cube","uuid":"67813357-643d-4903-9280-bebdc49b87e3"},{"name":"cube","rescale":false,"locked":false,"from":[7.875,3.469581032056304,7.881799118543839],"to":[8.375,7.407081032056304,8.381799118543839],"autouv":0,"color":2,"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[5,10,6,14],"texture":0},"east":{"uv":[6,10,7,14],"texture":0},"south":{"uv":[7,10,8,14],"texture":0},"west":{"uv":[8,10,9,14],"texture":0},"up":{"uv":[28,33,27,32],"texture":0},"down":{"uv":[33,27,32,28],"texture":0}},"type":"cube","uuid":"b00d3be1-d914-2885-4fcd-5ca3555863c2"},{"name":"cube","rescale":false,"locked":false,"from":[7.875,2.844581032056304,7.881799118543839],"to":[8.375,3.344581032056304,8.381799118543839],"autouv":0,"color":2,"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[0,32,1,33],"texture":0},"east":{"uv":[32,0,33,1],"texture":0},"south":{"uv":[1,32,2,33],"texture":0},"west":{"uv":[32,1,33,2],"texture":0},"up":{"uv":[3,33,2,32],"texture":0},"down":{"uv":[33,2,32,3],"texture":0}},"type":"cube","uuid":"72e7a271-253b-d96e-1597-43c7b1f6387e"},{"name":"cube","rescale":false,"locked":false,"from":[7.875,6.226775067086502,-0.2971378284911257],"to":[8.375,6.726775067086502,0.2028621715088743],"autouv":0,"color":2,"rotation":[-45,0,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[6,32,7,33],"texture":0},"east":{"uv":[32,6,33,7],"texture":0},"south":{"uv":[7,32,8,33],"texture":0},"west":{"uv":[32,7,33,8],"texture":0},"up":{"uv":[9,33,8,32],"texture":0},"down":{"uv":[33,8,32,9],"texture":0}},"type":"cube","uuid":"051dcc8f-637c-1dc4-b72a-c64a84fc932e"},{"name":"cube","rescale":false,"locked":false,"from":[7.875,6.580328457679777,-0.6506912190844005],"to":[8.375,7.080328457679777,-0.15069121908440053],"autouv":0,"color":2,"rotation":[-45,0,0],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[3,32,4,33],"texture":0},"east":{"uv":[32,3,33,4],"texture":0},"south":{"uv":[4,32,5,33],"texture":0},"west":{"uv":[32,4,33,5],"texture":0},"up":{"uv":[6,33,5,32],"texture":0},"down":{"uv":[33,5,32,6],"texture":0}},"type":"cube","uuid":"802bbd39-5f38-78bd-9bb7-21c701dc8ca3"},{"name":"cube","rescale":false,"locked":false,"from":[-0.6554989219128391,6.585136160508215,7.881799118543839],"to":[-0.1554989219128391,7.085136160508215,8.381799118543839],"autouv":0,"color":2,"rotation":[0,0,45],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[9,32,10,33],"texture":0},"east":{"uv":[32,9,33,10],"texture":0},"south":{"uv":[10,32,11,33],"texture":0},"west":{"uv":[32,10,33,11],"texture":0},"up":{"uv":[12,33,11,32],"texture":0},"down":{"uv":[33,11,32,12],"texture":0}},"type":"cube","uuid":"cf103805-efaa-5f6e-d93b-46b46c37b28e"},{"name":"cube","rescale":false,"locked":false,"from":[-0.30194553131956425,6.23158276991494,7.881799118543839],"to":[0.19805446868043575,6.73158276991494,8.381799118543839],"autouv":0,"color":2,"rotation":[0,0,45],"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[12,32,13,33],"texture":0},"east":{"uv":[32,12,33,13],"texture":0},"south":{"uv":[13,32,14,33],"texture":0},"west":{"uv":[32,13,33,14],"texture":0},"up":{"uv":[15,33,14,32],"texture":0},"down":{"uv":[33,14,32,15],"texture":0}},"type":"cube","uuid":"1951e5af-69c3-639e-8927-121ff802ef66"},{"name":"cube","rescale":false,"locked":false,"from":[7.875,3.198134422649577,8.235352509137114],"to":[8.375,3.698134422649577,8.735352509137114],"autouv":0,"color":2,"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[24,32,25,33],"texture":0},"east":{"uv":[32,24,33,25],"texture":0},"south":{"uv":[25,32,26,33],"texture":0},"west":{"uv":[32,25,33,26],"texture":0},"up":{"uv":[27,33,26,32],"texture":0},"down":{"uv":[33,26,32,27],"texture":0}},"type":"cube","uuid":"40578921-c85b-6b28-7b2d-f964605cb036"},{"name":"cube","rescale":false,"locked":false,"from":[7.875,3.198134422649578,7.528245727950564],"to":[8.375,3.698134422649578,8.028245727950564],"autouv":0,"color":2,"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[18,32,19,33],"texture":0},"east":{"uv":[32,18,33,19],"texture":0},"south":{"uv":[19,32,20,33],"texture":0},"west":{"uv":[32,19,33,20],"texture":0},"up":{"uv":[21,33,20,32],"texture":0},"down":{"uv":[33,20,32,21],"texture":0}},"type":"cube","uuid":"18729503-8d87-0adc-284e-db7bfe8025fb"},{"name":"cube","rescale":false,"locked":false,"from":[7.521446609406727,3.198134422649578,7.881799118543839],"to":[8.021446609406727,3.698134422649578,8.381799118543839],"autouv":0,"color":2,"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[15,32,16,33],"texture":0},"east":{"uv":[32,15,33,16],"texture":0},"south":{"uv":[16,32,17,33],"texture":0},"west":{"uv":[32,16,33,17],"texture":0},"up":{"uv":[18,33,17,32],"texture":0},"down":{"uv":[33,17,32,18],"texture":0}},"type":"cube","uuid":"a9805523-0c64-736d-0821-0399fa226bd7"},{"name":"cube","rescale":false,"locked":false,"from":[8.228553390593273,3.198134422649578,7.881799118543839],"to":[8.728553390593273,3.698134422649578,8.381799118543839],"autouv":0,"color":2,"origin":[8.125,15.01208169182778,8.125],"faces":{"north":{"uv":[21,32,22,33],"texture":0},"east":{"uv":[32,21,33,22],"texture":0},"south":{"uv":[22,32,23,33],"texture":0},"west":{"uv":[32,22,33,23],"texture":0},"up":{"uv":[24,33,23,32],"texture":0},"down":{"uv":[33,23,32,24],"texture":0}},"type":"cube","uuid":"e1e96b05-e914-4a24-b9ff-614c95ae69d2"}],"outliner":[{"name":"Everything","origin":[8,8,8],"color":0,"uuid":"bfb93112-a515-df18-2dfa-f8cb70383400","export":true,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"Handle","origin":[8,8,8],"color":0,"uuid":"13a2cda8-e3d4-22e1-3369-fc490ccc8964","export":true,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["72e7a271-253b-d96e-1597-43c7b1f6387e","802bbd39-5f38-78bd-9bb7-21c701dc8ca3","051dcc8f-637c-1dc4-b72a-c64a84fc932e","cf103805-efaa-5f6e-d93b-46b46c37b28e","1951e5af-69c3-639e-8927-121ff802ef66","a9805523-0c64-736d-0821-0399fa226bd7","18729503-8d87-0adc-284e-db7bfe8025fb","e1e96b05-e914-4a24-b9ff-614c95ae69d2","40578921-c85b-6b28-7b2d-f964605cb036","b00d3be1-d914-2885-4fcd-5ca3555863c2"]},{"name":"Hilt","origin":[8.125,9.094581032056304,7.256799118543838],"color":0,"uuid":"a79ae4c2-19e8-67ce-d943-2f82c60e3cd1","export":true,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["5a04c837-ea7d-f63a-69d1-ad5e77528864","d761714d-97e6-6ff5-617b-42cf908a021a","c2193e29-a7c3-aa8d-e9d8-5aef899ee7bc","01cf428d-d9ff-47bf-0418-8327c2078025","020b1ae4-8f1f-1ce9-5368-f59966795043","8f5df839-9429-fc86-191d-dc95d084332a","e00989db-00e7-ff9c-eb08-dd09f263a974","3c88186b-3fc7-fe79-9af3-51789a685ebd","217a65e2-13f1-7a88-b0a3-b726efce57d0","78c85009-86a4-24a7-f9bf-b7738c7143c5","e126a3d7-7225-1b29-dbf1-85b5984774a7","ad845a49-c4d6-d149-db1d-f6bda2ddbe95","f8568ed0-f18f-5650-e2d3-a4a270d24692","9b98f40b-6238-79cf-3cc6-1d1e6997f095","8917a6e1-6295-3d04-6101-79bb8554786f","90920f48-476d-6708-9286-93e49a45ebbb","79e21d7d-3765-076f-9b06-ebe9a5024523","3ef608f8-3929-91a5-a3c1-8b8269081e69","7c9e70e7-b015-d24d-e82d-2217f3ed6fb6","a1645fda-ca2d-cc5a-cedf-7c71c716ea74","26ef26a3-954d-e31c-00e4-49edf1892d3a","7e950d24-3eb8-c9d2-48ce-d2e8d554011a","2366cca0-a890-f422-e563-95cf483a3519","6b7434df-69db-5bb2-3e2e-1d712656ccfe","fa067a2a-2067-2b9d-f10d-a28bbc228eb4","91f56369-9ee5-d2d0-34cb-69f452a4de72","ebf5158c-28cf-7d7a-fcd4-1e8ae7b434e4","d9d9d69a-d1e2-816e-1b8f-5c84e3cfde41","04887239-0370-b0f6-8b75-bca91e4aebb5","dc977537-e912-9a8e-bdbd-7c9d48da1089","d5dc4328-1e8e-152e-6a5c-4ee2b702df23","67813357-643d-4903-9280-bebdc49b87e3","f03f0c31-0614-4df3-0771-bf12865fa5a2","da74fb0a-7f5d-050e-1a2e-15bc791e2f12","98fbda9e-30fc-b640-bb28-32f6727c9f85","d6f6e6dc-ddac-96ce-1062-8aee12d11a6d","4514ac51-343c-676c-cf2e-8d4151892d9f","a4c401d8-cdd0-debf-b219-d2e6a31c2040"]},{"name":"Blade","origin":[0,0,0],"color":0,"uuid":"c57a0f4d-8cb5-ed9b-326c-ef8f23c367a8","export":true,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["059ac81f-4de1-09d5-cb0c-2b8bef33f1f8","91ef9d1e-fc68-59c2-1676-cf2288f213cf","19b63a7a-97d1-d96c-ef86-245cdaadda03","72b194c2-b58e-a539-be3b-f436a2dffdcc","f2dd83f2-2e77-9928-9e9c-aeef40a64a1e","d534a59b-307e-39e2-af87-9dd7ffe79ede","45633967-ef39-d238-bbfc-48cd728cf52e","1ecb0f23-7303-916b-aa51-5975bcbad16d","102a51ed-3347-0ee2-3257-3e54d1102215","f830cb1f-9f11-ee2a-5ec9-b0a69a3dba8d","e237e1b6-e960-c682-2163-5780198c1f1b","26dfee6f-15bc-ecc2-1d15-54a9be9f49c5","3a8efb55-1b2b-01bd-2ec2-dcedc5967f6c","66f2a4e5-de8d-701a-d7a2-179a9b853988","0e33edef-bae5-5baf-4958-943e0daf02d1","97b7131a-8f84-8e59-63a2-6893f51f42cf","95f8af5b-6084-a414-0eac-1b31ca2ee8b2","b15a0530-8d15-b4bf-f32d-aa3bde573fa5","84669351-9f2a-7908-d401-a8acfdfb956a","926db8fb-b3ad-8c22-225a-b90cf353f994","ad8febed-c539-b85a-790c-5d8aedb3846d","5ade488e-6a88-99bc-f972-fd7efbb61088","f984762d-f879-1e3f-6b8c-9d0d945199ba","f08d99c0-8a3f-8b74-1f23-57bfce8a4b70","300d7fd9-6ea0-0cf0-2c09-aa1aacd47366","b26e4165-136d-fda8-5088-50efc2df9000","c38fe2f7-99c5-d21d-7d53-376e67330911","d6389958-fd63-2560-e280-c596aa9a94f4","c592cf25-0578-8b09-8849-7297a9134edf","e5632bcb-ca69-60ee-130c-3758e9430f6c","0159f959-b828-b318-6750-ebab6350057f","18a0259c-d698-eeba-9ba6-1c888f59ee95","dd84ff8f-6d0d-c1cf-f3a8-e06c48615ee1","de46f135-a23f-17aa-8573-945dae658fb3","973194c4-8eae-8d06-cdb7-6cab0f66d86a","4e304fc9-4c65-2d8c-a101-81efe3b80b51","6a9cc613-84bf-4673-be19-dc3f138dd91b","ff9ed4b8-e783-e316-6147-b1353519a0c6","22c0f41b-b36b-0029-564f-a831370601e0","6cd5fdfc-3142-45aa-8752-ee22012a88f8","f037ddc2-b7e1-81b4-4b8e-47dcde844b3f","e20a9215-aaf8-aeab-11ad-ded842a10d04","258d0429-9609-00c6-559d-e3d2cee8bee2","64664265-f4e7-5b7e-4f8b-77199ca303cb","900c4a07-680b-cac2-cdc4-a8c65945cc23","5720d666-e143-0838-0bae-1159cb0348a4","db8f0198-0ed4-5b5f-6cde-c5b086b9c36f","a5f77d05-f2e8-9b90-c150-cadc96655638","1a64d875-0d4f-1ba3-466b-4582e714607e","e2577143-b699-994a-2217-79b6e5b24f77","11f599a8-c96b-9a7c-097a-44be7ab8f008","1265254e-bfdf-8750-8ea1-0511fdffabc0","7127684a-445e-aa66-b997-76f444be3d25","967d3499-331e-8730-b718-f2b93ebc8c6a","e318df64-be63-0ba6-d6c1-95afad7912e1","337ec886-7785-a19a-5e80-974da328652d","3d1b00a6-48d8-aa37-bdaf-3f8465076649","8c54d9b2-74be-8b59-351b-a47e0cb690b6","bc118094-8e4e-610d-4adb-ba9a2abb26fd","27c4576f-9123-3769-66d1-d7f9ce653784","2efd09db-aa24-28f0-3821-9eeb02478250","d87f2264-9063-1eba-7fbe-c26925b56487","f17df3e6-5dd4-6bd4-5082-608e263644c2","bf7b7f1f-d536-dc7e-5fde-2f5f38ef6ec6","6d5a9538-cdc9-7322-6870-18125fd1432e","772ac167-8c44-a1d9-0a38-35064bcbe72e","186bf66c-05eb-2e3c-34ad-fc896d257a37","63bd73ca-6196-d498-c53f-fa25046e64e8","02ce42dc-766f-278c-9f84-871497548c17","c5373715-7770-1a3d-a20c-c5e207aefab9","813930e9-32bf-01c3-d98f-d5ceb4f319c0","9d733618-c992-f7fc-cf8a-7912e7e60917","cc2ab22a-4a78-bf55-aeb4-620ebdb4c3d0","46051293-5506-5da8-0e2a-d576b5889442","781146b7-42fa-227a-a9b0-f0455e66f567","81d52259-60d3-02c3-7c2d-0c30127904c5","8e23bceb-c83c-518b-1977-25783383d583","fd561926-e9c3-65a6-219b-4b3486ab36a3","0c8cb8b8-3b4a-f30e-b2a0-c899f3c93dcc","23f1c35a-456d-255c-baf8-84abf62eac35","677cd886-e256-9729-6010-d6e4eb539209","d8d75db3-2cfc-e016-d6ac-dd2b4ee26d89","63d01008-5fc0-3f1d-b285-1650136a537c","96bf67a5-6db1-2eda-081c-eaee2c83317b","4527fb1a-a62b-355f-e890-3c45e3c7e2c1","a5aed3e6-889e-81f2-4cec-a035adfdb06d","59c5653f-f616-fc2d-8ac3-17e43014ea1c","2d9571f6-2166-e640-6c35-d48fac3fb227","960a8bb5-17b2-f03c-f736-adfece65e106","c4cc70f1-6320-f791-b982-e63c99730ca7","625b7e4e-ea4f-abdc-69f3-e80712084ae1","1799603f-1848-ba0d-9997-e8d83fcd5c75","1f1320ab-9f66-3030-8c85-9aedc03b18ea","a1eb77ce-52f5-5d29-b4ec-a5275823dff7","aab4de5c-6941-a1ce-5201-47943bdc0e9c","84e0e865-d5ea-a4d5-3adf-044a5ca4fa42","f58480cd-8f23-0b2a-f5bb-165916c572bc","0bb03b21-0674-daee-3efb-fb9ab63c6d7a","7a7b4547-bf44-424b-ce58-12021b8d02bc","80a8d346-6c5d-a3ce-cd94-8752e4a10a78","4a453d62-c11d-77f2-bb01-d1a55e22ba45"]}]}],"textures":[{"path":"Z:\\Repo\\Minecraft\\2021\\CosmereProject\\_cosmere\\src\\main\\resources\\assets\\cosmere\\textures\\item\\models\\shardblade_model\\willshaper_honorblade.png","name":"willshaper_honorblade.png","folder":"item/models/shardblade_model","namespace":"cosmere","id":"0","particle":true,"render_mode":"default","visible":true,"mode":"bitmap","saved":true,"uuid":"bb0ef1fb-157e-888a-fdb8-208ac617d052","relative_path":"../../src/main/resources/assets/cosmere/textures/item/models/shardblade_model/willshaper_honorblade.png","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAAXNSR0IArs4c6QAAAf5JREFUeF7tmT1OAzEQhbPXSEXLJVLQp0cUiAohcQEqRInokRAVokDpaahQxB0QDUWqHIICkCWMHGt3Z2yF8TN+qZKsf2a+eTP+2e7u5vFrovys1m+qljvTXVU7N970/XNy/HDWqTr8QaMuFYB3bgyGFoDz5+PllQCaUoBTTqgQKqDWFHD5O1QHmqgBuQCqTwHnuIuwdhWIHfYrmf+/uhqQCkBauqsDEOZ3Tg2oIgXuF9cbgZvN9n5/N7ERGgKgib5PEUn60DVAAiCdCTTLYFUADvdPNwL67wBoHPJtpCVQmwKeKMQqIAGQ8jl+rkkBAvghQAUgHIaYAsqrLk0tSMl/iBuhi/Mr9Z2gBCDVeQgAKXeCEoCc5xBFMMfw3D7hYai6W+Fcp/v6QW+Fw9uenLweAxXvKKt6L9CUArbp7NhYzRXBGIY7ej8vn8q/Ggt3g+GJz39PrQXxeEMqODqZF3Pe2ZT0bjA3Lfpuhv1/sADCau0d10Y1bN+noHDs4gD8VjhV4rlqiPsVB3B7cLm1s4AEZbFeFi14ffYVLUASMIvnBGBBGXkOKgA5Oha2UQEWlJHnoAKQo2NhGxVgQRl5DioAOToWtlEBFpSR56ACkKNjYRsVYEEZeQ4qADk6FrZRARaUkeegApCjY2EbFWBBGXkOKgA5Oha2UQEWlJHn+AbpJZJQU95GKwAAAABJRU5ErkJggg=="}],"display":{"thirdperson_righthand":{"translation":[0,2.5,1],"scale":[1.7,1.7,1.7]},"thirdperson_lefthand":{"translation":[0,2.5,0.25],"scale":[1.7,1.7,1.7]},"firstperson_righthand":{"scale":[1.7,1.7,1.7]},"firstperson_lefthand":{"scale":[1.7,1.7,1.7]},"ground":{"translation":[0,1.25,0]},"gui":{"rotation":[90,45,-90],"translation":[-5.25,-5,0]},"fixed":{"rotation":[-90,45,90],"translation":[5.5,-5.25,-0.75]}}} \ No newline at end of file diff --git a/blockbench/surgebinding/shardblades/honorblades/windrunner_honorblade.bbmodel b/blockbench/surgebinding/shardblades/honorblades/windrunner_honorblade.bbmodel new file mode 100644 index 000000000..c7e3884c9 --- /dev/null +++ b/blockbench/surgebinding/shardblades/honorblades/windrunner_honorblade.bbmodel @@ -0,0 +1 @@ +{"meta":{"format_version":"4.0","model_format":"java_block","box_uv":false},"name":"windrunner_honorblade","parent":"","ambientocclusion":true,"front_gui_light":false,"visible_box":[1,1,0],"variable_placeholders":"","variable_placeholder_buttons":[],"resolution":{"width":32,"height":32},"elements":[{"name":"cube","rescale":false,"locked":false,"from":[7.5,7.5,7.5],"to":[8.5,11.4375,7.5625],"autouv":0,"color":6,"origin":[0.5,-0.5625,-1.4375],"faces":{"north":{"uv":[4,0,5,4],"texture":0},"east":{"uv":[4,4,5,8],"texture":0},"south":{"uv":[0,5,1,9],"texture":0},"west":{"uv":[5,0,6,4],"texture":0},"up":{"uv":[8,3,7,2],"texture":0},"down":{"uv":[4,7,3,8],"texture":0}},"type":"cube","uuid":"43ffcd79-7852-55cb-a06d-b5ecf3f7a160"},{"name":"cube","rescale":false,"locked":false,"from":[7.5,11.4375,7.5],"to":[8.5,16.4375,7.5625],"autouv":0,"color":6,"origin":[8,13.9375,7.53125],"faces":{"north":{"uv":[0,0,1,5],"texture":0},"east":{"uv":[1,0,2,5],"texture":0},"south":{"uv":[2,0,3,5],"texture":0},"west":{"uv":[3,0,4,5],"texture":0},"up":{"uv":[8,4,7,3],"texture":0},"down":{"uv":[8,4,7,5],"texture":0}},"type":"cube","uuid":"4e8bb05b-fde4-5aa7-2408-b758480845dc"},{"name":"cube","rescale":false,"locked":false,"from":[7.686584186964501,16.375522051732826,7.5],"to":[8.3115841869645,17.375522051732826,7.5625],"autouv":0,"color":6,"rotation":[0,0,-22.5],"origin":[7.749084186964501,16.875522051732826,7.53125],"faces":{"north":{"uv":[7,5,8,6],"texture":0},"east":{"uv":[7,6,8,7],"texture":0},"south":{"uv":[7,7,8,8],"texture":0},"west":{"uv":[8,0,9,1],"texture":0},"up":{"uv":[9,2,8,1],"texture":0},"down":{"uv":[9,2,8,3],"texture":0}},"type":"cube","uuid":"5fbabca0-7189-430e-5c75-1199dd2af60d"},{"name":"cube","rescale":false,"locked":false,"from":[8.217930996782524,17.170738749280403,7.5],"to":[8.530430996782524,18.045738749280403,7.5625],"autouv":0,"color":6,"rotation":[0,0,-45],"origin":[8.280430996782524,17.670738749280403,7.53125],"faces":{"north":{"uv":[3,8,4,9],"texture":0},"east":{"uv":[8,3,9,4],"texture":0},"south":{"uv":[4,8,5,9],"texture":0},"west":{"uv":[8,4,9,5],"texture":0},"up":{"uv":[6,9,5,8],"texture":0},"down":{"uv":[9,5,8,6],"texture":0}},"type":"cube","uuid":"4ab60f7f-7c92-1d06-21c5-65a97da70afd"},{"name":"cube","rescale":false,"locked":false,"from":[8.014796417389404,17.258469176967992,7.5],"to":[8.389796417389404,18.008469176967992,7.5625],"autouv":0,"color":6,"rotation":[0,0,-22.5],"origin":[7.8272964173894035,16.883469176967992,7.53125],"faces":{"north":{"uv":[6,8,7,9],"texture":0},"east":{"uv":[8,6,9,7],"texture":0},"south":{"uv":[7,8,8,9],"texture":0},"west":{"uv":[8,7,9,8],"texture":0},"up":{"uv":[9,9,8,8],"texture":0},"down":{"uv":[1,9,0,10],"texture":0}},"type":"cube","uuid":"0e6c2d20-acca-e609-a538-1d547b12869c"},{"name":"cube","rescale":false,"locked":false,"from":[8,16.4375,7.5],"to":[8.5,17.0625,7.5625],"autouv":0,"color":6,"origin":[8.4375,16.9375,7.53125],"faces":{"north":{"uv":[9,0,10,1],"texture":0},"east":{"uv":[1,9,2,10],"texture":0},"south":{"uv":[9,1,10,2],"texture":0},"west":{"uv":[2,9,3,10],"texture":0},"up":{"uv":[10,3,9,2],"texture":0},"down":{"uv":[4,9,3,10],"texture":0}},"type":"cube","uuid":"32185799-84c1-78eb-8b6f-cb1251ca244c"},{"name":"cube","rescale":false,"locked":false,"from":[8.997260138691251,17.564768866152576,7.5],"to":[9.122260138691251,18.189768866152576,7.5625],"autouv":0,"color":6,"rotation":[0,0,-45],"origin":[9.059760138691251,18.064768866152576,7.53125],"faces":{"north":{"uv":[9,3,10,4],"texture":0},"east":{"uv":[4,9,5,10],"texture":0},"south":{"uv":[9,4,10,5],"texture":0},"west":{"uv":[5,9,6,10],"texture":0},"up":{"uv":[10,6,9,5],"texture":0},"down":{"uv":[7,9,6,10],"texture":0}},"type":"cube","uuid":"fb99e15b-18ad-efc9-2878-df7f0a547137"},{"name":"cube","rescale":false,"locked":false,"from":[8.487259346681782,18.05119721145011,7.5],"to":[9.174759346681782,18.17619721145011,7.5625],"autouv":0,"color":6,"rotation":[0,0,22.5],"origin":[8.98725934668178,18.11369721145011,7.53125],"faces":{"north":{"uv":[9,6,10,7],"texture":0},"east":{"uv":[7,9,8,10],"texture":0},"south":{"uv":[9,7,10,8],"texture":0},"west":{"uv":[8,9,9,10],"texture":0},"up":{"uv":[10,9,9,8],"texture":0},"down":{"uv":[10,9,9,10],"texture":0}},"type":"cube","uuid":"2503eb5a-9ec6-b4cb-0c1c-f8dcabdb1015"},{"name":"cube","rescale":false,"locked":false,"from":[9.116312836230378,18.11935799010086,7.5],"to":[9.219312836230378,18.22235799010086,7.5625],"autouv":0,"color":6,"rotation":[0,0,-22.5],"origin":[9.178812836230378,18.18185799010086,7.53125],"faces":{"north":{"uv":[0,10,1,11],"texture":0},"east":{"uv":[10,0,11,1],"texture":0},"south":{"uv":[1,10,2,11],"texture":0},"west":{"uv":[10,1,11,2],"texture":0},"up":{"uv":[3,11,2,10],"texture":0},"down":{"uv":[11,2,10,3],"texture":0}},"type":"cube","uuid":"bad0995d-53be-2388-f411-58cc62ca895d"},{"name":"cube","rescale":false,"locked":false,"from":[7.279983040076592,6.393900048439583,7.4375],"to":[7.404983040076592,7.518900048439583,7.625],"autouv":0,"color":6,"rotation":[0,0,-22.5],"origin":[7.342483040076592,6.956400048439583,7.53125],"faces":{"north":{"uv":[3,10,4,11],"texture":0},"east":{"uv":[10,3,11,4],"texture":0},"south":{"uv":[4,10,5,11],"texture":0},"west":{"uv":[10,4,11,5],"texture":0},"up":{"uv":[6,11,5,10],"texture":0},"down":{"uv":[11,5,10,6],"texture":0}},"type":"cube","uuid":"e59bb81f-795f-9b7f-2138-f75447f01a46"},{"name":"cube","rescale":false,"locked":false,"from":[8.595016959923408,6.393900048439583,7.4375],"to":[8.720016959923408,7.518900048439583,7.625],"autouv":0,"color":6,"rotation":[0,0,22.5],"origin":[8.657516959923408,6.956400048439583,7.53125],"faces":{"north":{"uv":[6,10,7,11],"texture":0},"east":{"uv":[10,6,11,7],"texture":0},"south":{"uv":[7,10,8,11],"texture":0},"west":{"uv":[10,7,11,8],"texture":0},"up":{"uv":[9,11,8,10],"texture":0},"down":{"uv":[11,8,10,9],"texture":0}},"type":"cube","uuid":"7d591036-ffde-a0af-3bcf-700f5d75240c"},{"name":"cube","rescale":false,"locked":false,"from":[7.04960492079799,6.508620960485201,7.4375],"to":[7.11210492079799,6.633620960485201,7.625],"autouv":0,"color":6,"rotation":[0,0,45],"origin":[7.26835492079799,6.571120960485201,7.53125],"faces":{"north":{"uv":[9,10,10,11],"texture":0},"east":{"uv":[10,9,11,10],"texture":0},"south":{"uv":[10,10,11,11],"texture":0},"west":{"uv":[0,11,1,12],"texture":0},"up":{"uv":[12,1,11,0],"texture":0},"down":{"uv":[2,11,1,12],"texture":0}},"type":"cube","uuid":"d6016dc1-a998-a8fb-ad63-bc754b8e4b9b"},{"name":"cube","rescale":false,"locked":false,"from":[7.187757440865409,6.4105155220832355,7.4375],"to":[7.662757440865408,6.5355155220832355,7.625],"autouv":0,"color":6,"origin":[7.281507440865409,6.4730155220832355,7.53125],"faces":{"north":{"uv":[11,1,12,2],"texture":0},"east":{"uv":[2,11,3,12],"texture":0},"south":{"uv":[11,2,12,3],"texture":0},"west":{"uv":[3,11,4,12],"texture":0},"up":{"uv":[12,4,11,3],"texture":0},"down":{"uv":[5,11,4,12],"texture":0}},"type":"cube","uuid":"235894cf-11e3-d80c-a250-0a0fcb9ee540"},{"name":"cube","rescale":false,"locked":false,"from":[7.370369134192251,6.386623820961816,7.4375],"to":[7.470369134192251,6.511623820961816,7.625],"autouv":0,"color":6,"rotation":[0,0,-22.5],"origin":[7.420369134192251,6.449123820961816,7.53125],"faces":{"north":{"uv":[11,4,12,5],"texture":0},"east":{"uv":[5,11,6,12],"texture":0},"south":{"uv":[11,5,12,6],"texture":0},"west":{"uv":[6,11,7,12],"texture":0},"up":{"uv":[12,7,11,6],"texture":0},"down":{"uv":[8,11,7,12],"texture":0}},"type":"cube","uuid":"452b69bc-3ef1-a0a6-4ee7-8b9c6baecf36"},{"name":"cube","rescale":false,"locked":false,"from":[7.409694910393664,6.31858601251448,7.4375],"to":[7.634694910393663,6.44358601251448,7.625],"autouv":0,"color":6,"rotation":[0,0,-45],"origin":[7.522194910393663,6.38108601251448,7.53125],"faces":{"north":{"uv":[11,7,12,8],"texture":0},"east":{"uv":[8,11,9,12],"texture":0},"south":{"uv":[11,8,12,9],"texture":0},"west":{"uv":[9,11,10,12],"texture":0},"up":{"uv":[12,10,11,9],"texture":0},"down":{"uv":[11,11,10,12],"texture":0}},"type":"cube","uuid":"ce05c1e9-987f-ea87-5640-884bb0d2835a"},{"name":"cube","rescale":false,"locked":false,"from":[7.527732718840999,6.229260236313069,7.4375],"to":[7.652732718840999,6.329260236313068,7.625],"autouv":0,"color":6,"rotation":[0,0,22.5],"origin":[7.590232718840999,6.279260236313068,7.53125],"faces":{"north":{"uv":[11,10,12,11],"texture":0},"east":{"uv":[11,11,12,12],"texture":0},"south":{"uv":[0,12,1,13],"texture":0},"west":{"uv":[12,0,13,1],"texture":0},"up":{"uv":[2,13,1,12],"texture":0},"down":{"uv":[13,1,12,2],"texture":0}},"type":"cube","uuid":"35edc684-7527-5f1d-436d-61047e66b2a0"},{"name":"cube","rescale":false,"locked":false,"from":[7.527732718840999,5.989036851149498,7.4375],"to":[7.652732718840999,6.089036851149499,7.625],"autouv":0,"color":6,"rotation":[0,0,-22.5],"origin":[7.590232718840999,6.039036851149499,7.53125],"faces":{"north":{"uv":[2,12,3,13],"texture":0},"east":{"uv":[12,2,13,3],"texture":0},"south":{"uv":[3,12,4,13],"texture":0},"west":{"uv":[12,3,13,4],"texture":0},"up":{"uv":[5,13,4,12],"texture":0},"down":{"uv":[13,4,12,5],"texture":0}},"type":"cube","uuid":"f14ef729-5c63-4bf2-50f3-2cea11cf1b4d"},{"name":"cube","rescale":false,"locked":false,"from":[7.409694910393664,5.812211074948086,7.4375],"to":[7.634694910393663,5.999711074948086,7.625],"autouv":0,"color":6,"rotation":[0,0,45],"origin":[7.522194910393663,5.937211074948086,7.53125],"faces":{"north":{"uv":[5,12,6,13],"texture":0},"east":{"uv":[12,5,13,6],"texture":0},"south":{"uv":[6,12,7,13],"texture":0},"west":{"uv":[12,6,13,7],"texture":0},"up":{"uv":[8,13,7,12],"texture":0},"down":{"uv":[13,7,12,8],"texture":0}},"type":"cube","uuid":"4e702943-4542-b590-df79-0a3e9a73afe3"},{"name":"cube","rescale":false,"locked":false,"from":[7.370369134192251,5.80667326650075,7.4375],"to":[7.470369134192251,5.93167326650075,7.625],"autouv":0,"color":6,"rotation":[0,0,22.5],"origin":[7.420369134192251,5.86917326650075,7.53125],"faces":{"north":{"uv":[8,12,9,13],"texture":0},"east":{"uv":[12,8,13,9],"texture":0},"south":{"uv":[9,12,10,13],"texture":0},"west":{"uv":[12,9,13,10],"texture":0},"up":{"uv":[11,13,10,12],"texture":0},"down":{"uv":[13,10,12,11],"texture":0}},"type":"cube","uuid":"04e657fc-fab3-47bd-f011-d2037dad6cb4"},{"name":"cube","rescale":false,"locked":false,"from":[7.125257440865409,5.782781565379331,7.4375],"to":[7.412757440865408,5.907781565379331,7.625],"autouv":0,"color":6,"origin":[7.281507440865409,5.845281565379331,7.53125],"faces":{"north":{"uv":[11,12,12,13],"texture":0},"east":{"uv":[12,11,13,12],"texture":0},"south":{"uv":[12,12,13,13],"texture":0},"west":{"uv":[0,13,1,14],"texture":0},"up":{"uv":[14,1,13,0],"texture":0},"down":{"uv":[2,13,1,14],"texture":0}},"type":"cube","uuid":"d8d67a50-1986-d9a5-879f-7f006210b363"},{"name":"cube","rescale":false,"locked":false,"from":[7.551624419962419,5.796648543731283,7.4375],"to":[8.489124419962419,6.521648543731283,7.625],"autouv":0,"color":6,"origin":[7.614124419962419,6.159148543731284,7.53125],"faces":{"north":{"uv":[13,1,14,2],"texture":0},"east":{"uv":[2,13,3,14],"texture":0},"south":{"uv":[13,2,14,3],"texture":0},"west":{"uv":[3,13,4,14],"texture":0},"up":{"uv":[14,4,13,3],"texture":0},"down":{"uv":[5,13,4,14],"texture":0}},"type":"cube","uuid":"2fd361b0-0612-7610-f850-c19f366a4504"},{"name":"cube","rescale":false,"locked":false,"from":[7.028319972827271,5.874711074948088,7.4375],"to":[7.253319972827271,5.999711074948088,7.625],"autouv":0,"color":6,"rotation":[0,0,-45],"origin":[7.07831997282727,5.937211074948088,7.53125],"faces":{"north":{"uv":[13,4,14,5],"texture":0},"east":{"uv":[5,13,6,14],"texture":0},"south":{"uv":[13,5,14,6],"texture":0},"west":{"uv":[6,13,7,14],"texture":0},"up":{"uv":[14,7,13,6],"texture":0},"down":{"uv":[8,13,7,14],"texture":0}},"type":"cube","uuid":"4b126dad-3fb5-aa41-8a81-5d795364c350"},{"name":"cube","rescale":false,"locked":false,"from":[7.130145749028683,5.806673266500752,7.4375],"to":[7.230145749028683,5.931673266500752,7.625],"autouv":0,"color":6,"rotation":[0,0,-22.5],"origin":[7.180145749028682,5.869173266500752,7.53125],"faces":{"north":{"uv":[13,7,14,8],"texture":0},"east":{"uv":[8,13,9,14],"texture":0},"south":{"uv":[13,8,14,9],"texture":0},"west":{"uv":[9,13,10,14],"texture":0},"up":{"uv":[14,10,13,9],"texture":0},"down":{"uv":[11,13,10,14],"texture":0}},"type":"cube","uuid":"22e8a883-0b35-9f70-ee44-866609739f21"},{"name":"cube","rescale":false,"locked":false,"from":[7.369322894256864,6.434199113142261,7.4375],"to":[7.469322894256863,6.559199113142261,7.625],"autouv":0,"color":6,"rotation":[0,0,22.5],"origin":[7.419322894256863,5.871699113142261,7.53125],"faces":{"north":{"uv":[13,10,14,11],"texture":0},"east":{"uv":[11,13,12,14],"texture":0},"south":{"uv":[13,11,14,12],"texture":0},"west":{"uv":[12,13,13,14],"texture":0},"up":{"uv":[14,13,13,12],"texture":0},"down":{"uv":[14,13,13,14],"texture":0}},"type":"cube","uuid":"f348e706-e719-d1bd-a816-93afddb5d809"},{"name":"cube","rescale":false,"locked":false,"from":[6.971046722208039,5.78899559802476,7.4375],"to":[7.196046722208038,5.91399559802476,7.625],"autouv":0,"color":6,"rotation":[0,0,-22.5],"origin":[7.0210467222080375,5.85149559802476,7.53125],"faces":{"north":{"uv":[0,14,1,15],"texture":0},"east":{"uv":[14,0,15,1],"texture":0},"south":{"uv":[1,14,2,15],"texture":0},"west":{"uv":[14,1,15,2],"texture":0},"up":{"uv":[3,15,2,14],"texture":0},"down":{"uv":[15,2,14,3],"texture":0}},"type":"cube","uuid":"7c71d34e-5ca2-bbf0-ec44-491cbc29487b"},{"name":"cube","rescale":false,"locked":false,"from":[6.971046722208039,5.586779000267601,7.4375],"to":[7.196046722208038,5.711779000267601,7.625],"autouv":0,"color":6,"rotation":[0,0,22.5],"origin":[7.0210467222080375,5.649279000267601,7.53125],"faces":{"north":{"uv":[3,14,4,15],"texture":0},"east":{"uv":[14,3,15,4],"texture":0},"south":{"uv":[4,14,5,15],"texture":0},"west":{"uv":[14,4,15,5],"texture":0},"up":{"uv":[6,15,5,14],"texture":0},"down":{"uv":[15,5,14,6],"texture":0}},"type":"cube","uuid":"8b09751e-3737-14e0-1d89-334766fa3901"},{"name":"cube","rescale":false,"locked":false,"from":[7.028319972827271,5.501063523344273,7.4375],"to":[7.190819972827271,5.626063523344273,7.625],"autouv":0,"color":6,"rotation":[0,0,45],"origin":[7.07831997282727,5.563563523344273,7.53125],"faces":{"north":{"uv":[6,14,7,15],"texture":0},"east":{"uv":[14,6,15,7],"texture":0},"south":{"uv":[7,14,8,15],"texture":0},"west":{"uv":[14,7,15,8],"texture":0},"up":{"uv":[9,15,8,14],"texture":0},"down":{"uv":[15,8,14,9],"texture":0}},"type":"cube","uuid":"4e8af88f-3d06-e925-e5e0-c631bd7cea6c"},{"name":"cube","rescale":false,"locked":false,"from":[6.950935031116369,5.68788729914618,7.4375],"to":[7.425935031116369,5.81288729914618,7.625],"autouv":0,"color":6,"origin":[7.000935031116369,5.75038729914618,7.53125],"faces":{"north":{"uv":[9,14,10,15],"texture":0},"east":{"uv":[14,9,15,10],"texture":0},"south":{"uv":[10,14,11,15],"texture":0},"west":{"uv":[14,10,15,11],"texture":0},"up":{"uv":[12,15,11,14],"texture":0},"down":{"uv":[15,11,14,12],"texture":0}},"type":"cube","uuid":"f1528cb6-4a9a-2ed0-8d2f-e6b41765d4d9"},{"name":"cube","rescale":false,"locked":false,"from":[7.131573007105752,5.561926017149641,7.4375],"to":[7.194073007105752,5.686926017149641,7.625],"autouv":0,"color":6,"rotation":[0,0,22.5],"origin":[7.162823007105752,5.624426017149641,7.53125],"faces":{"north":{"uv":[12,14,13,15],"texture":0},"east":{"uv":[14,12,15,13],"texture":0},"south":{"uv":[13,14,14,15],"texture":0},"west":{"uv":[14,13,15,14],"texture":0},"up":{"uv":[15,15,14,14],"texture":0},"down":{"uv":[1,15,0,16],"texture":0}},"type":"cube","uuid":"298d83ae-30e1-b791-1bc4-c1598ed0618b"},{"name":"cube","rescale":false,"locked":false,"from":[7.153111957019548,5.578642403629093,7.4375],"to":[7.340611957019548,5.703642403629093,7.625],"autouv":0,"color":6,"origin":[7.246861957019548,5.641142403629095,7.53125],"faces":{"north":{"uv":[15,0,16,1],"texture":0},"east":{"uv":[1,15,2,16],"texture":0},"south":{"uv":[15,1,16,2],"texture":0},"west":{"uv":[2,15,3,16],"texture":0},"up":{"uv":[16,3,15,2],"texture":0},"down":{"uv":[4,15,3,16],"texture":0}},"type":"cube","uuid":"963cd8bd-6c89-04bf-a343-8a7aa4a1221e"},{"name":"cube","rescale":false,"locked":false,"from":[7.299650906933344,5.561926017149641,7.4375],"to":[7.424650906933344,5.749426017149641,7.625],"autouv":0,"color":6,"rotation":[0,0,-22.5],"origin":[7.330900906933344,5.624426017149641,7.53125],"faces":{"north":{"uv":[15,3,16,4],"texture":0},"east":{"uv":[4,15,5,16],"texture":0},"south":{"uv":[15,4,16,5],"texture":0},"west":{"uv":[5,15,6,16],"texture":0},"up":{"uv":[16,6,15,5],"texture":0},"down":{"uv":[7,15,6,16],"texture":0}},"type":"cube","uuid":"e00b33e9-c3bf-c65d-d45f-efc6d894f3a4"},{"name":"cube","rescale":false,"locked":false,"from":[7.308395688537743,5.514321776018356,7.4375],"to":[7.495895688537743,5.639321776018356,7.625],"autouv":0,"color":6,"rotation":[0,0,-45],"origin":[7.402145688537743,5.576821776018356,7.53125],"faces":{"north":{"uv":[15,6,16,7],"texture":0},"east":{"uv":[7,15,8,16],"texture":0},"south":{"uv":[15,7,16,8],"texture":0},"west":{"uv":[8,15,9,16],"texture":0},"up":{"uv":[16,9,15,8],"texture":0},"down":{"uv":[10,15,9,16],"texture":0}},"type":"cube","uuid":"99f9c9e3-c1a4-5b65-551b-c1543f989125"},{"name":"cube","rescale":false,"locked":false,"from":[7.387249929669029,5.474326994413957,7.4375],"to":[7.512249929669029,5.536826994413957,7.625],"autouv":0,"color":6,"rotation":[0,0,22.5],"origin":[7.449749929669029,5.505576994413957,7.53125],"faces":{"north":{"uv":[15,9,16,10],"texture":0},"east":{"uv":[10,15,11,16],"texture":0},"south":{"uv":[15,10,16,11],"texture":0},"west":{"uv":[11,15,12,16],"texture":0},"up":{"uv":[16,12,15,11],"texture":0},"down":{"uv":[13,15,12,16],"texture":0}},"type":"cube","uuid":"cff98ff6-d722-007f-7c21-fc57b2aa1c23"},{"name":"cube","rescale":false,"locked":false,"from":[7.403966316148482,5.20278804450016,7.4375],"to":[8.028966316148482,5.82778804450016,7.625],"autouv":0,"color":6,"origin":[7.466466316148482,5.42153804450016,7.53125],"faces":{"north":{"uv":[15,12,16,13],"texture":0},"east":{"uv":[13,15,14,16],"texture":0},"south":{"uv":[15,13,16,14],"texture":0},"west":{"uv":[14,15,15,16],"texture":0},"up":{"uv":[16,15,15,14],"texture":0},"down":{"uv":[16,15,15,16],"texture":0}},"type":"cube","uuid":"2894ea7a-3444-4308-905d-049a15fadc2a"},{"name":"cube","rescale":false,"locked":false,"from":[7.387249929669029,4.9312490945863665,7.4375],"to":[7.824749929669029,5.3687490945863665,7.625],"autouv":0,"color":6,"rotation":[0,0,-22.5],"origin":[7.449749929669029,5.337499094586365,7.53125],"faces":{"north":{"uv":[0,16,1,17],"texture":0},"east":{"uv":[16,0,17,1],"texture":0},"south":{"uv":[1,16,2,17],"texture":0},"west":{"uv":[16,1,17,2],"texture":0},"up":{"uv":[3,17,2,16],"texture":0},"down":{"uv":[17,2,16,3],"texture":0}},"type":"cube","uuid":"6530d2ab-a8ac-f50d-857c-67b9225722cc"},{"name":"cube","rescale":false,"locked":false,"from":[7.236542314488755,4.611090749026473,7.4375],"to":[7.424042314488755,4.986090749026473,7.625],"autouv":0,"color":6,"origin":[7.299042314488755,4.954840749026473,7.53125],"faces":{"north":{"uv":[3,16,4,17],"texture":0},"east":{"uv":[16,3,17,4],"texture":0},"south":{"uv":[4,16,5,17],"texture":0},"west":{"uv":[16,4,17,5],"texture":0},"up":{"uv":[6,17,5,16],"texture":0},"down":{"uv":[17,5,16,6],"texture":0}},"type":"cube","uuid":"b333a2cc-90be-d8f4-de51-87a4ec0b3ca6"},{"name":"cube","rescale":false,"locked":false,"from":[8.7210879281967,6.443919139445349,7.4375],"to":[8.8460879281967,6.568919139445349,7.625],"autouv":0,"color":6,"rotation":[0,0,-22.5],"origin":[8.7523379281967,6.506419139445349,7.53125],"faces":{"north":{"uv":[6,16,7,17],"texture":0},"east":{"uv":[16,6,17,7],"texture":0},"south":{"uv":[7,16,8,17],"texture":0},"west":{"uv":[16,7,17,8],"texture":0},"up":{"uv":[9,17,8,16],"texture":0},"down":{"uv":[17,8,16,9],"texture":0}},"type":"cube","uuid":"eb2e565d-fdc3-9687-bde1-1ce4cd574b8e"},{"name":"cube","rescale":false,"locked":false,"from":[8.574548978282905,6.4606355259248005,7.4375],"to":[8.762048978282905,6.5856355259248005,7.625],"autouv":0,"color":6,"origin":[8.668298978282905,6.523135525924802,7.53125],"faces":{"north":{"uv":[9,16,10,17],"texture":0},"east":{"uv":[16,9,17,10],"texture":0},"south":{"uv":[10,16,11,17],"texture":0},"west":{"uv":[16,10,17,11],"texture":0},"up":{"uv":[12,17,11,16],"texture":0},"down":{"uv":[17,11,16,12],"texture":0}},"type":"cube","uuid":"5632bfa1-aad0-f8ec-b580-f46080b1b62c"},{"name":"cube","rescale":false,"locked":false,"from":[8.490510028369108,6.443919139445349,7.4375],"to":[8.615510028369108,6.568919139445349,7.625],"autouv":0,"color":6,"rotation":[0,0,22.5],"origin":[8.584260028369108,6.506419139445349,7.53125],"faces":{"north":{"uv":[12,16,13,17],"texture":0},"east":{"uv":[16,12,17,13],"texture":0},"south":{"uv":[13,16,14,17],"texture":0},"west":{"uv":[16,13,17,14],"texture":0},"up":{"uv":[15,17,14,16],"texture":0},"down":{"uv":[17,14,16,15],"texture":0}},"type":"cube","uuid":"1ccce188-afce-31bc-66cd-47ce82943db9"},{"name":"cube","rescale":false,"locked":false,"from":[8.48176524676471,6.396314898314063,7.4375],"to":[8.54426524676471,6.521314898314063,7.625],"autouv":0,"color":6,"rotation":[0,0,45],"origin":[8.51301524676471,6.458814898314063,7.53125],"faces":{"north":{"uv":[15,16,16,17],"texture":0},"east":{"uv":[16,15,17,16],"texture":0},"south":{"uv":[16,16,17,17],"texture":0},"west":{"uv":[0,17,1,18],"texture":0},"up":{"uv":[18,1,17,0],"texture":0},"down":{"uv":[2,17,1,18],"texture":0}},"type":"cube","uuid":"7dfba8e0-0bc4-efe0-6826-e556de3fb4fa"},{"name":"cube","rescale":false,"locked":false,"from":[8.402911005633424,6.293820116709664,7.4375],"to":[8.527911005633424,6.481320116709664,7.625],"autouv":0,"color":6,"rotation":[0,0,-22.5],"origin":[8.465411005633424,6.387570116709664,7.53125],"faces":{"north":{"uv":[17,1,18,2],"texture":0},"east":{"uv":[2,17,3,18],"texture":0},"south":{"uv":[17,2,18,3],"texture":0},"west":{"uv":[3,17,4,18],"texture":0},"up":{"uv":[18,4,17,3],"texture":0},"down":{"uv":[5,17,4,18],"texture":0}},"type":"cube","uuid":"3a7ef315-e57c-9900-ee0d-ba857524fd1a"},{"name":"cube","rescale":false,"locked":false,"from":[8.38619461915397,6.272281166795867,7.4375],"to":[8.51119461915397,6.334781166795867,7.625],"autouv":0,"color":6,"origin":[8.44869461915397,6.303531166795867,7.53125],"faces":{"north":{"uv":[17,4,18,5],"texture":0},"east":{"uv":[5,17,6,18],"texture":0},"south":{"uv":[17,5,18,6],"texture":0},"west":{"uv":[6,17,7,18],"texture":0},"up":{"uv":[18,7,17,6],"texture":0},"down":{"uv":[8,17,7,18],"texture":0}},"type":"cube","uuid":"d42c1edc-557c-426a-6a7b-381bbcca894e"},{"name":"cube","rescale":false,"locked":false,"from":[8.904983040076592,5.206400048439583,7.375],"to":[9.029983040076592,7.518900048439583,7.6875],"autouv":0,"color":0,"rotation":[0,0,-45],"origin":[7.342483040076592,6.956400048439583,7.53125],"faces":{"north":{"uv":[1,5,2,7],"texture":0},"east":{"uv":[2,5,3,7],"texture":0},"south":{"uv":[3,5,4,7],"texture":0},"west":{"uv":[5,4,6,6],"texture":0},"up":{"uv":[18,8,17,7],"texture":0},"down":{"uv":[9,17,8,18],"texture":0}},"type":"cube","uuid":"91762a52-146a-b5e5-9171-9879b6eebda1"},{"name":"cube","rescale":false,"locked":false,"from":[8.845084950098006,6.1242932672530355,7.375],"to":[8.970084950098006,6.2492932672530355,7.6875],"autouv":0,"color":0,"origin":[8.907584950098006,6.1867932672530355,7.53125],"faces":{"north":{"uv":[17,8,18,9],"texture":0},"east":{"uv":[9,17,10,18],"texture":0},"south":{"uv":[17,9,18,10],"texture":0},"west":{"uv":[10,17,11,18],"texture":0},"up":{"uv":[18,11,17,10],"texture":0},"down":{"uv":[12,17,11,18],"texture":0}},"type":"cube","uuid":"f4a271dd-6552-951e-7a37-7e21b70f8cd9"},{"name":"cube","rescale":false,"locked":false,"from":[8.959900518604115,5.21398256991206,7.375],"to":[9.084900518604115,7.52648256991206,7.6875],"autouv":0,"color":0,"rotation":[0,0,-45],"origin":[7.3349005186041145,6.96398256991206,7.53125],"faces":{"north":{"uv":[6,0,7,2],"texture":0},"east":{"uv":[6,2,7,4],"texture":0},"south":{"uv":[6,4,7,6],"texture":0},"west":{"uv":[5,6,6,8],"texture":0},"up":{"uv":[18,12,17,11],"texture":0},"down":{"uv":[13,17,12,18],"texture":0}},"type":"cube","uuid":"0e7c5690-24e5-391f-474a-a4ef49949d46"},{"name":"cube","rescale":false,"locked":false,"from":[8.402911005633424,6.12574221688207,7.4375],"to":[8.527911005633424,6.31324221688207,7.625],"autouv":0,"color":6,"rotation":[0,0,22.5],"origin":[8.465411005633424,6.21949221688207,7.53125],"faces":{"north":{"uv":[17,12,18,13],"texture":0},"east":{"uv":[13,17,14,18],"texture":0},"south":{"uv":[17,13,18,14],"texture":0},"west":{"uv":[14,17,15,18],"texture":0},"up":{"uv":[18,15,17,14],"texture":0},"down":{"uv":[16,17,15,18],"texture":0}},"type":"cube","uuid":"ad18ed02-1471-7bab-c15a-70a20515cede"},{"name":"cube","rescale":false,"locked":false,"from":[8.48176524676471,6.085747435277671,7.4375],"to":[8.54426524676471,6.210747435277671,7.625],"autouv":0,"color":6,"rotation":[0,0,-45],"origin":[8.51301524676471,6.148247435277671,7.53125],"faces":{"north":{"uv":[17,15,18,16],"texture":0},"east":{"uv":[16,17,17,18],"texture":0},"south":{"uv":[17,16,18,17],"texture":0},"west":{"uv":[17,17,18,18],"texture":0},"up":{"uv":[1,19,0,18],"texture":0},"down":{"uv":[19,0,18,1],"texture":0}},"type":"cube","uuid":"a831ae71-17b6-b104-c69d-d145ef6890af"},{"name":"cube","rescale":false,"locked":false,"from":[8.490510028369108,5.788143194146386,7.4375],"to":[8.678010028369108,6.163143194146386,7.625],"autouv":0,"color":6,"rotation":[0,0,-22.5],"origin":[8.584260028369108,6.100643194146386,7.53125],"faces":{"north":{"uv":[1,18,2,19],"texture":0},"east":{"uv":[18,1,19,2],"texture":0},"south":{"uv":[2,18,3,19],"texture":0},"west":{"uv":[18,2,19,3],"texture":0},"up":{"uv":[4,19,3,18],"texture":0},"down":{"uv":[19,3,18,4],"texture":0}},"type":"cube","uuid":"15e28743-2069-8d8d-db65-e08e6ff130c5"},{"name":"cube","rescale":false,"locked":false,"from":[8.637048978282905,6.021426807666934,7.4375],"to":[8.762048978282905,6.146426807666934,7.625],"autouv":0,"color":6,"origin":[8.668298978282905,6.083926807666934,7.53125],"faces":{"north":{"uv":[4,18,5,19],"texture":0},"east":{"uv":[18,4,19,5],"texture":0},"south":{"uv":[5,18,6,19],"texture":0},"west":{"uv":[18,5,19,6],"texture":0},"up":{"uv":[7,19,6,18],"texture":0},"down":{"uv":[19,6,18,7],"texture":0}},"type":"cube","uuid":"7fcab545-d7fa-95d5-db87-5891a6da7939"},{"name":"cube","rescale":false,"locked":false,"from":[7.2099005186041145,4.489108835759145,7.375],"to":[7.3349005186041145,4.614108835759145,7.6875],"autouv":0,"color":0,"origin":[7.959900518604115,4.551608835759145,7.53125],"faces":{"north":{"uv":[7,18,8,19],"texture":0},"east":{"uv":[18,7,19,8],"texture":0},"south":{"uv":[8,18,9,19],"texture":0},"west":{"uv":[18,8,19,9],"texture":0},"up":{"uv":[10,19,9,18],"texture":0},"down":{"uv":[19,9,18,10],"texture":0}},"type":"cube","uuid":"8c237b69-2394-3af2-7f61-b83e8e82364b"},{"name":"cube","rescale":false,"locked":false,"from":[8.028966316148482,5.57778804450016,7.4375],"to":[8.341466316148482,5.82778804450016,7.625],"autouv":0,"color":6,"origin":[7.466466316148482,5.42153804450016,7.53125],"faces":{"north":{"uv":[10,18,11,19],"texture":0},"east":{"uv":[18,10,19,11],"texture":0},"south":{"uv":[11,18,12,19],"texture":0},"west":{"uv":[18,11,19,12],"texture":0},"up":{"uv":[13,19,12,18],"texture":0},"down":{"uv":[19,12,18,13],"texture":0}},"type":"cube","uuid":"be79755f-1b3d-e447-6ea4-9e4c03214d4d"},{"name":"cube","rescale":false,"locked":false,"from":[8.028966316148482,5.39028804450016,7.4375],"to":[8.216466316148482,5.57778804450016,7.625],"autouv":0,"color":6,"origin":[7.466466316148482,5.42153804450016,7.53125],"faces":{"north":{"uv":[13,18,14,19],"texture":0},"east":{"uv":[18,13,19,14],"texture":0},"south":{"uv":[14,18,15,19],"texture":0},"west":{"uv":[18,14,19,15],"texture":0},"up":{"uv":[16,19,15,18],"texture":0},"down":{"uv":[19,15,18,16],"texture":0}},"type":"cube","uuid":"e1546bac-64f8-999e-d258-2ab3315b0946"},{"name":"cube","rescale":false,"locked":false,"from":[8.341466316148482,5.70278804450016,7.4375],"to":[8.403966316148482,5.82778804450016,7.625],"autouv":0,"color":6,"origin":[7.466466316148482,5.42153804450016,7.53125],"faces":{"north":{"uv":[16,18,17,19],"texture":0},"east":{"uv":[18,16,19,17],"texture":0},"south":{"uv":[17,18,18,19],"texture":0},"west":{"uv":[18,17,19,18],"texture":0},"up":{"uv":[19,19,18,18],"texture":0},"down":{"uv":[1,19,0,20],"texture":0}},"type":"cube","uuid":"b740110d-2845-2cec-5d84-5430b4118e3f"},{"name":"cube","rescale":false,"locked":false,"from":[7.424042314488755,4.798590749026473,7.4375],"to":[7.549042314488755,4.986090749026473,7.625],"autouv":0,"color":6,"origin":[7.299042314488755,4.954840749026473,7.53125],"faces":{"north":{"uv":[19,0,20,1],"texture":0},"east":{"uv":[1,19,2,20],"texture":0},"south":{"uv":[19,1,20,2],"texture":0},"west":{"uv":[2,19,3,20],"texture":0},"up":{"uv":[20,3,19,2],"texture":0},"down":{"uv":[4,19,3,20],"texture":0}},"type":"cube","uuid":"76fe93d4-98ad-d5f9-1c51-9f919ba4a6e7"},{"name":"cube","rescale":false,"locked":false,"from":[7.404983040076592,6.456400048439583,7.4375],"to":[7.842483040076592,7.518900048439583,7.625],"autouv":0,"color":6,"rotation":[0,0,-22.5],"origin":[7.342483040076592,6.956400048439583,7.53125],"faces":{"north":{"uv":[19,3,20,4],"texture":0},"east":{"uv":[4,19,5,20],"texture":0},"south":{"uv":[19,4,20,5],"texture":0},"west":{"uv":[5,19,6,20],"texture":0},"up":{"uv":[20,6,19,5],"texture":0},"down":{"uv":[7,19,6,20],"texture":0}},"type":"cube","uuid":"7a7a1385-a09c-f18c-ca34-8fc99c73e134"},{"name":"cube","rescale":false,"locked":false,"from":[8.282516959923408,6.518900048439583,7.4375],"to":[8.595016959923408,7.518900048439583,7.625],"autouv":0,"color":6,"rotation":[0,0,22.5],"origin":[8.657516959923408,6.956400048439583,7.53125],"faces":{"north":{"uv":[19,6,20,7],"texture":0},"east":{"uv":[7,19,8,20],"texture":0},"south":{"uv":[19,7,20,8],"texture":0},"west":{"uv":[8,19,9,20],"texture":0},"up":{"uv":[20,9,19,8],"texture":0},"down":{"uv":[10,19,9,20],"texture":0}},"type":"cube","uuid":"ed3d2c96-d24b-589a-c3b6-4885e02067ae"},{"name":"cube","rescale":false,"locked":false,"from":[8.487259346681782,17.92619721145011,7.5],"to":[8.862259346681782,18.05119721145011,7.5625],"autouv":0,"color":6,"rotation":[0,0,22.5],"origin":[8.98725934668178,18.11369721145011,7.53125],"faces":{"north":{"uv":[19,9,20,10],"texture":0},"east":{"uv":[10,19,11,20],"texture":0},"south":{"uv":[19,10,20,11],"texture":0},"west":{"uv":[11,19,12,20],"texture":0},"up":{"uv":[20,12,19,11],"texture":0},"down":{"uv":[13,19,12,20],"texture":0}},"type":"cube","uuid":"abb0e84d-92be-11cb-c338-14b861583f1e"},{"name":"cube","rescale":false,"locked":false,"from":[8.862259346681782,17.98869721145011,7.5],"to":[8.924759346681782,18.05119721145011,7.5625],"autouv":0,"color":6,"rotation":[0,0,22.5],"origin":[8.98725934668178,18.11369721145011,7.53125],"faces":{"north":{"uv":[19,12,20,13],"texture":0},"east":{"uv":[13,19,14,20],"texture":0},"south":{"uv":[19,13,20,14],"texture":0},"west":{"uv":[14,19,15,20],"texture":0},"up":{"uv":[20,15,19,14],"texture":0},"down":{"uv":[16,19,15,20],"texture":0}},"type":"cube","uuid":"6206fee9-e3a3-2e35-2b57-eec9256b37a9"},{"name":"cube","rescale":false,"locked":false,"from":[7.5,6.5,7.4375],"to":[8.5,7.5,7.625],"autouv":0,"color":6,"origin":[0.5,-0.5625,-1.4375],"faces":{"north":{"uv":[19,15,20,16],"texture":0},"east":{"uv":[16,19,17,20],"texture":0},"south":{"uv":[19,16,20,17],"texture":0},"west":{"uv":[17,19,18,20],"texture":0},"up":{"uv":[20,18,19,17],"texture":0},"down":{"uv":[19,19,18,20],"texture":0}},"type":"cube","uuid":"4aafc78a-f67a-e7b9-80bb-0c1502edc4a3"},{"name":"cube","rescale":false,"locked":false,"from":[7.5,7.449980908994235,7.626462951573522],"to":[8.5,7.6199809089942345,7.688962951573522],"autouv":0,"color":6,"rotation":[22.5,0,0],"origin":[8,7.949980908994235,7.657712951573522],"faces":{"north":{"uv":[19,18,20,19],"texture":0},"east":{"uv":[19,19,20,20],"texture":0},"south":{"uv":[0,20,1,21],"texture":0},"west":{"uv":[20,0,21,1],"texture":0},"up":{"uv":[2,21,1,20],"texture":0},"down":{"uv":[21,1,20,2],"texture":0}},"type":"cube","uuid":"0e9f8cff-2b56-e353-f216-4937dbb86523"},{"name":"cube","rescale":false,"locked":false,"from":[7.5,7.480904848911525,7.5290021928247945],"to":[8.5,7.650904848911525,7.5915021928247945],"autouv":0,"color":6,"rotation":[-22.5,0,0],"origin":[8,7.574654848911525,7.5602521928247945],"faces":{"north":{"uv":[2,20,3,21],"texture":0},"east":{"uv":[20,2,21,3],"texture":0},"south":{"uv":[3,20,4,21],"texture":0},"west":{"uv":[20,3,21,4],"texture":0},"up":{"uv":[5,21,4,20],"texture":0},"down":{"uv":[21,4,20,5],"texture":0}},"type":"cube","uuid":"696099f8-000a-63c9-206d-96815e09fac0"},{"name":"cube","rescale":false,"locked":false,"from":[9.084900518604115,5.96398256991206,7.375],"to":[9.209900518604115,6.77648256991206,7.6875],"autouv":0,"color":0,"rotation":[0,0,-45],"origin":[7.3349005186041145,6.96398256991206,7.53125],"faces":{"north":{"uv":[5,20,6,21],"texture":0},"east":{"uv":[20,5,21,6],"texture":0},"south":{"uv":[6,20,7,21],"texture":0},"west":{"uv":[20,6,21,7],"texture":0},"up":{"uv":[8,21,7,20],"texture":0},"down":{"uv":[21,7,20,8],"texture":0}},"type":"cube","uuid":"08332cc7-ba4c-5d3a-6464-311999aedafe"},{"name":"cube","rescale":false,"locked":false,"from":[8.443777312858685,5.522356254410557,7.375],"to":[8.568777312858685,5.897356254410557,7.6875],"autouv":0,"color":0,"rotation":[0,0,-22.5],"origin":[8.506277312858685,5.616106254410557,7.53125],"faces":{"north":{"uv":[8,20,9,21],"texture":0},"east":{"uv":[20,8,21,9],"texture":0},"south":{"uv":[9,20,10,21],"texture":0},"west":{"uv":[20,9,21,10],"texture":0},"up":{"uv":[11,21,10,20],"texture":0},"down":{"uv":[21,10,20,11],"texture":0}},"type":"cube","uuid":"d586d55c-9d9f-a852-cc61-3d713832043d"},{"name":"cube","rescale":false,"locked":false,"from":[7.561837531446592,4.8904164729984645,7.375],"to":[7.936837531446592,5.0154164729984645,7.6875],"autouv":0,"color":0,"rotation":[0,0,22.5],"origin":[7.843087531446592,4.9529164729984645,7.53125],"faces":{"north":{"uv":[11,20,12,21],"texture":0},"east":{"uv":[20,11,21,12],"texture":0},"south":{"uv":[12,20,13,21],"texture":0},"west":{"uv":[20,12,21,13],"texture":0},"up":{"uv":[14,21,13,20],"texture":0},"down":{"uv":[21,13,20,14],"texture":0}},"type":"cube","uuid":"f23794a9-6fa7-3cb8-1e1d-d0cb8f6aa98a"},{"name":"cube","rescale":false,"locked":false,"from":[7.94668690817522,4.918756877681929,7.375],"to":[8.25918690817522,5.356256877681929,7.6875],"autouv":0,"color":0,"origin":[8.19668690817522,5.262506877681929,7.53125],"faces":{"north":{"uv":[14,20,15,21],"texture":0},"east":{"uv":[20,14,21,15],"texture":0},"south":{"uv":[15,20,16,21],"texture":0},"west":{"uv":[20,15,21,16],"texture":0},"up":{"uv":[17,21,16,20],"texture":0},"down":{"uv":[21,16,20,17],"texture":0}},"type":"cube","uuid":"5f7f350d-3f57-0e8c-d27c-364d1559ef49"},{"name":"cube","rescale":false,"locked":false,"from":[7.88418690817522,3.106256877681929,7.3125],"to":[8.32168690817522,3.168756877681929,7.75],"autouv":0,"color":0,"origin":[8.19668690817522,5.262506877681929,7.53125],"faces":{"north":{"uv":[17,20,18,21],"texture":0},"east":{"uv":[20,17,21,18],"texture":0},"south":{"uv":[18,20,19,21],"texture":0},"west":{"uv":[20,18,21,19],"texture":0},"up":{"uv":[20,21,19,20],"texture":0},"down":{"uv":[21,19,20,20],"texture":0}},"type":"cube","uuid":"2cf3225a-457a-021b-8324-0dc1549247ca"},{"name":"cube","rescale":false,"locked":false,"from":[7.94668690817522,3.043756877681929,7.375],"to":[8.25918690817522,3.106256877681929,7.6875],"autouv":0,"color":0,"origin":[8.19668690817522,5.262506877681929,7.53125],"faces":{"north":{"uv":[20,20,21,21],"texture":0},"east":{"uv":[0,21,1,22],"texture":0},"south":{"uv":[21,0,22,1],"texture":0},"west":{"uv":[1,21,2,22],"texture":0},"up":{"uv":[22,2,21,1],"texture":0},"down":{"uv":[3,21,2,22],"texture":0}},"type":"cube","uuid":"0ec80aa5-c4d7-ba0d-8226-e321bd6b78dd"},{"name":"cube","rescale":false,"locked":false,"from":[7.94668690817522,3.168756877681929,7.375],"to":[8.25918690817522,4.918756877681929,7.6875],"autouv":0,"color":0,"origin":[8.19668690817522,5.262506877681929,7.53125],"faces":{"north":{"uv":[6,6,7,8],"texture":0},"east":{"uv":[7,0,8,2],"texture":0},"south":{"uv":[1,7,2,9],"texture":0},"west":{"uv":[2,7,3,9],"texture":0},"up":{"uv":[22,3,21,2],"texture":0},"down":{"uv":[4,21,3,22],"texture":0}},"type":"cube","uuid":"b00d4cb9-840e-93f5-d74d-b8b3f1fb2f55"}],"outliner":[{"name":"Everything","origin":[8,8,8],"color":0,"uuid":"1b8f0c38-e22f-926e-99f4-b3333b8e04fb","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"Hilt","origin":[8,8,8],"color":0,"uuid":"63564cb1-f0cb-b8c8-ced4-dff67821bc50","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["91762a52-146a-b5e5-9171-9879b6eebda1","0e7c5690-24e5-391f-474a-a4ef49949d46","08332cc7-ba4c-5d3a-6464-311999aedafe","d586d55c-9d9f-a852-cc61-3d713832043d","f23794a9-6fa7-3cb8-1e1d-d0cb8f6aa98a","8c237b69-2394-3af2-7f61-b83e8e82364b","f4a271dd-6552-951e-7a37-7e21b70f8cd9"]},{"name":"Blade","origin":[8,8,8],"color":0,"uuid":"d8d0195d-0dfb-ec81-da9d-c0aefc1d6688","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["43ffcd79-7852-55cb-a06d-b5ecf3f7a160","4aafc78a-f67a-e7b9-80bb-0c1502edc4a3","0e9f8cff-2b56-e353-f216-4937dbb86523","696099f8-000a-63c9-206d-96815e09fac0","e59bb81f-795f-9b7f-2138-f75447f01a46","7a7a1385-a09c-f18c-ca34-8fc99c73e134","d6016dc1-a998-a8fb-ad63-bc754b8e4b9b","235894cf-11e3-d80c-a250-0a0fcb9ee540","2fd361b0-0612-7610-f850-c19f366a4504","452b69bc-3ef1-a0a6-4ee7-8b9c6baecf36","ce05c1e9-987f-ea87-5640-884bb0d2835a","35edc684-7527-5f1d-436d-61047e66b2a0","d8d67a50-1986-d9a5-879f-7f006210b363","04e657fc-fab3-47bd-f011-d2037dad6cb4","f348e706-e719-d1bd-a816-93afddb5d809","4e702943-4542-b590-df79-0a3e9a73afe3","f14ef729-5c63-4bf2-50f3-2cea11cf1b4d","22e8a883-0b35-9f70-ee44-866609739f21","4b126dad-3fb5-aa41-8a81-5d795364c350","7c71d34e-5ca2-bbf0-ec44-491cbc29487b","f1528cb6-4a9a-2ed0-8d2f-e6b41765d4d9","4e8af88f-3d06-e925-e5e0-c631bd7cea6c","298d83ae-30e1-b791-1bc4-c1598ed0618b","e00b33e9-c3bf-c65d-d45f-efc6d894f3a4","99f9c9e3-c1a4-5b65-551b-c1543f989125","cff98ff6-d722-007f-7c21-fc57b2aa1c23","2894ea7a-3444-4308-905d-049a15fadc2a","be79755f-1b3d-e447-6ea4-9e4c03214d4d","b740110d-2845-2cec-5d84-5430b4118e3f","e1546bac-64f8-999e-d258-2ab3315b0946","6530d2ab-a8ac-f50d-857c-67b9225722cc","b333a2cc-90be-d8f4-de51-87a4ec0b3ca6","76fe93d4-98ad-d5f9-1c51-9f919ba4a6e7","963cd8bd-6c89-04bf-a343-8a7aa4a1221e","d42c1edc-557c-426a-6a7b-381bbcca894e","3a7ef315-e57c-9900-ee0d-ba857524fd1a","7dfba8e0-0bc4-efe0-6826-e556de3fb4fa","1ccce188-afce-31bc-66cd-47ce82943db9","5632bfa1-aad0-f8ec-b580-f46080b1b62c","7fcab545-d7fa-95d5-db87-5891a6da7939","15e28743-2069-8d8d-db65-e08e6ff130c5","a831ae71-17b6-b104-c69d-d145ef6890af","ad18ed02-1471-7bab-c15a-70a20515cede","eb2e565d-fdc3-9687-bde1-1ce4cd574b8e","8b09751e-3737-14e0-1d89-334766fa3901","7d591036-ffde-a0af-3bcf-700f5d75240c","ed3d2c96-d24b-589a-c3b6-4885e02067ae","4e8bb05b-fde4-5aa7-2408-b758480845dc","5fbabca0-7189-430e-5c75-1199dd2af60d","32185799-84c1-78eb-8b6f-cb1251ca244c","0e6c2d20-acca-e609-a538-1d547b12869c","4ab60f7f-7c92-1d06-21c5-65a97da70afd","2503eb5a-9ec6-b4cb-0c1c-f8dcabdb1015","abb0e84d-92be-11cb-c338-14b861583f1e","6206fee9-e3a3-2e35-2b57-eec9256b37a9","bad0995d-53be-2388-f411-58cc62ca895d","fb99e15b-18ad-efc9-2878-df7f0a547137"]},{"name":"Handle","origin":[8,8,8],"color":0,"uuid":"f60e402a-428a-54eb-ecd1-2d2ae969313e","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["5f7f350d-3f57-0e8c-d27c-364d1559ef49","b00d4cb9-840e-93f5-d74d-b8b3f1fb2f55","2cf3225a-457a-021b-8324-0dc1549247ca","0ec80aa5-c4d7-ba0d-8226-e321bd6b78dd"]}]}],"textures":[{"path":"C:\\Users\\hawkt\\Documents\\GitHub\\cosmere\\src\\surgebinding\\resources\\assets\\surgebinding\\textures\\item\\models\\shardblade_model\\windrunner_honorblade.png","name":"windrunner_honorblade.png","folder":"item/models/shardblade_model","namespace":"surgebinding","id":"0","particle":true,"render_mode":"default","visible":true,"mode":"bitmap","saved":true,"uuid":"92f62cc9-c166-9129-3f0c-1adc4fb80062","relative_path":"../../src/surgebinding/resources/assets/surgebinding/textures/item/models/shardblade_model/windrunner_honorblade.png","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAOxJREFUWEdjLGzs+8+ABbB8fcmgrqXHcPXhS2zSeMVeiOgzLM92ZiRGI+OgdsAfbnFiPIGhRltenCElIZryECDXAf31RURZDnI51igAxT8I0M0BMAthllLiAJDe7q5O0kIAmwPIzQFkOQCUaEAAluVIzYLIIUYVB5Ca9Cl2AKkWoqsfFA6A5RiyooAaITCgDkD2wICEwKgDhncIIBfTMJ/iq6SomgjR6whisitVHUCMhdhKRZJrQ1xFKzkOeCLvRnR7ENwgiZy6F94odeZ+QXRTihzHYdNDdMOBWhaimzPqgNEQGA2B0RAY8BAAAL0QvSGONcN2AAAAAElFTkSuQmCC"}],"display":{"thirdperson_righthand":{"rotation":[0,-90,0],"translation":[-1.25,8.5,0.5],"scale":[2.7,2.7,2.7]},"thirdperson_lefthand":{"rotation":[0,90,0],"translation":[1.25,8.5,0.5],"scale":[2.7,2.7,2.7]},"firstperson_righthand":{"rotation":[0,-90,0],"translation":[0,8.5,0],"scale":[2.7,2.7,2.7]},"firstperson_lefthand":{"rotation":[0,90,0],"translation":[0,8.5,0],"scale":[2.7,2.7,2.7]},"ground":{"translation":[0,1.25,0],"scale":[1.5,1.5,1.5]},"gui":{"rotation":[0,180,45],"translation":[-0.5,-0.5,0]},"fixed":{"rotation":[0,0,45]}}} \ No newline at end of file diff --git a/blockbench/master_sword.bbmodel b/blockbench/surgebinding/shardblades/master_sword.bbmodel similarity index 100% rename from blockbench/master_sword.bbmodel rename to blockbench/surgebinding/shardblades/master_sword.bbmodel diff --git a/blockbench/surgebinding/shardblades/nightblood.bbmodel b/blockbench/surgebinding/shardblades/nightblood.bbmodel new file mode 100644 index 000000000..3fbf0eaf1 --- /dev/null +++ b/blockbench/surgebinding/shardblades/nightblood.bbmodel @@ -0,0 +1 @@ +{"meta":{"format_version":"4.0","model_format":"java_block","box_uv":false},"name":"nightblood","parent":"","ambientocclusion":true,"front_gui_light":false,"visible_box":[1,1,0],"variable_placeholders":"","variable_placeholder_buttons":[],"resolution":{"width":16,"height":16},"elements":[{"name":"cube","rescale":false,"locked":false,"from":[7.625,3.8926777045368484,7.96875],"to":[8.375,11.330177704536847,8.03125],"autouv":0,"color":7,"origin":[7.375,3.8301777045368484,7.03125],"faces":{"north":{"uv":[0,0,1,7],"texture":0},"east":{"uv":[1,0,2,7],"texture":0},"south":{"uv":[2,0,3,7],"texture":0},"west":{"uv":[3,0,4,7],"texture":0},"up":{"uv":[6,3,5,2],"texture":0},"down":{"uv":[6,3,5,4],"texture":0}},"type":"cube","uuid":"6291eddc-960a-543e-a32f-f0ed85ea4dbc"},{"name":"cube","rescale":false,"locked":false,"from":[9.34469668103388,10.97567674357623,7.96875],"to":[9.40719668103388,11.85067674357623,8.03125],"autouv":0,"color":7,"rotation":[0,0,-22.5],"origin":[9.37594668103388,15.475676743576226,8.09375],"faces":{"north":{"uv":[5,4,6,5],"texture":0},"east":{"uv":[5,5,6,6],"texture":0},"south":{"uv":[6,0,7,1],"texture":0},"west":{"uv":[6,1,7,2],"texture":0},"up":{"uv":[7,3,6,2],"texture":0},"down":{"uv":[7,3,6,4],"texture":0}},"type":"cube","uuid":"fdcb4ee7-84b5-b7b3-4af5-0187e8a673ed"},{"name":"cube","rescale":false,"locked":false,"from":[8.08766047664225,11.273022319704015,7.96875],"to":[8.15016047664225,12.148022319704015,8.03125],"autouv":0,"color":7,"rotation":[0,0,22.5],"origin":[8.11891047664225,11.866772319704015,8.09375],"faces":{"north":{"uv":[4,6,5,7],"texture":0},"east":{"uv":[6,4,7,5],"texture":0},"south":{"uv":[5,6,6,7],"texture":0},"west":{"uv":[6,5,7,6],"texture":0},"up":{"uv":[7,7,6,6],"texture":0},"down":{"uv":[1,7,0,8],"texture":0}},"type":"cube","uuid":"9aaf8893-2232-d5ad-7931-f6ca17db2afb"},{"name":"cube","rescale":false,"locked":false,"from":[7.969999999999999,11.273022319704012,7.96875],"to":[8.032499999999999,12.085522319704012,8.03125],"autouv":0,"color":7,"origin":[6.068589523357749,11.866772319704012,8.09375],"faces":{"north":{"uv":[7,0,8,1],"texture":0},"east":{"uv":[1,7,2,8],"texture":0},"south":{"uv":[7,1,8,2],"texture":0},"west":{"uv":[2,7,3,8],"texture":0},"up":{"uv":[8,3,7,2],"texture":0},"down":{"uv":[4,7,3,8],"texture":0}},"type":"cube","uuid":"9499959e-46e1-433b-ff50-95a907fb1341"},{"name":"cube","rescale":false,"locked":false,"from":[7.570849345714407,11.94645894717711,7.96875],"to":[7.627849345714408,12.003458947177112,8.03125],"autouv":0,"color":7,"rotation":[0,0,45],"origin":[7.602099345714407,12.54020894717711,8.09375],"faces":{"north":{"uv":[15,12,16,13],"texture":0},"east":{"uv":[13,15,14,16],"texture":0},"south":{"uv":[15,13,16,14],"texture":0},"west":{"uv":[14,15,15,16],"texture":0},"up":{"uv":[16,15,15,14],"texture":0},"down":{"uv":[16,15,15,16],"texture":0}},"type":"cube","uuid":"346f5a65-469b-dbe2-7dc2-62d7d759c975"},{"name":"cube","rescale":false,"locked":false,"from":[8.02516047664225,11.273022319704015,7.96875],"to":[8.08766047664225,12.085522319704015,8.03125],"autouv":0,"color":7,"rotation":[0,0,22.5],"origin":[8.11891047664225,11.866772319704015,8.09375],"faces":{"north":{"uv":[7,3,8,4],"texture":0},"east":{"uv":[4,7,5,8],"texture":0},"south":{"uv":[7,4,8,5],"texture":0},"west":{"uv":[5,7,6,8],"texture":0},"up":{"uv":[8,6,7,5],"texture":0},"down":{"uv":[7,7,6,8],"texture":0}},"type":"cube","uuid":"d284bce6-b5e1-9eec-9e50-2ef60f2cae20"},{"name":"cube","rescale":false,"locked":false,"from":[7.962660476642251,11.273022319704015,7.96875],"to":[8.02516047664225,12.023022319704015,8.03125],"autouv":0,"color":7,"rotation":[0,0,22.5],"origin":[8.11891047664225,11.866772319704015,8.09375],"faces":{"north":{"uv":[7,6,8,7],"texture":0},"east":{"uv":[7,7,8,8],"texture":0},"south":{"uv":[0,8,1,9],"texture":0},"west":{"uv":[8,0,9,1],"texture":0},"up":{"uv":[2,9,1,8],"texture":0},"down":{"uv":[9,1,8,2],"texture":0}},"type":"cube","uuid":"42f3ad83-a518-e3e8-1ef0-195838ed7e58"},{"name":"cube","rescale":false,"locked":false,"from":[7.900160476642251,11.273022319704015,7.96875],"to":[7.962660476642251,11.960522319704015,8.03125],"autouv":0,"color":7,"rotation":[0,0,22.5],"origin":[8.11891047664225,11.866772319704015,8.09375],"faces":{"north":{"uv":[2,8,3,9],"texture":0},"east":{"uv":[8,2,9,3],"texture":0},"south":{"uv":[3,8,4,9],"texture":0},"west":{"uv":[8,3,9,4],"texture":0},"up":{"uv":[5,9,4,8],"texture":0},"down":{"uv":[9,4,8,5],"texture":0}},"type":"cube","uuid":"f716cd2f-35d2-208a-af38-547aa8f1a897"},{"name":"cube","rescale":false,"locked":false,"from":[9.40719668103388,10.97567674357623,7.96875],"to":[9.46969668103388,11.78817674357623,8.03125],"autouv":0,"color":7,"rotation":[0,0,-22.5],"origin":[9.37594668103388,15.475676743576226,8.09375],"faces":{"north":{"uv":[5,8,6,9],"texture":0},"east":{"uv":[8,5,9,6],"texture":0},"south":{"uv":[6,8,7,9],"texture":0},"west":{"uv":[8,6,9,7],"texture":0},"up":{"uv":[8,9,7,8],"texture":0},"down":{"uv":[9,7,8,8],"texture":0}},"type":"cube","uuid":"18e04445-3e64-be48-4cdb-c27441a2965f"},{"name":"cube","rescale":false,"locked":false,"from":[9.46969668103388,10.97567674357623,7.96875],"to":[9.53219668103388,11.72567674357623,8.03125],"autouv":0,"color":7,"rotation":[0,0,-22.5],"origin":[9.37594668103388,15.475676743576226,8.09375],"faces":{"north":{"uv":[8,8,9,9],"texture":0},"east":{"uv":[0,9,1,10],"texture":0},"south":{"uv":[9,0,10,1],"texture":0},"west":{"uv":[1,9,2,10],"texture":0},"up":{"uv":[10,2,9,1],"texture":0},"down":{"uv":[3,9,2,10],"texture":0}},"type":"cube","uuid":"2aa45e6d-97df-06c0-6d62-761926580241"},{"name":"cube","rescale":false,"locked":false,"from":[9.53219668103388,10.97567674357623,7.96875],"to":[9.59469668103388,11.66317674357623,8.03125],"autouv":0,"color":7,"rotation":[0,0,-22.5],"origin":[9.37594668103388,15.475676743576226,8.09375],"faces":{"north":{"uv":[9,2,10,3],"texture":0},"east":{"uv":[3,9,4,10],"texture":0},"south":{"uv":[9,3,10,4],"texture":0},"west":{"uv":[4,9,5,10],"texture":0},"up":{"uv":[10,5,9,4],"texture":0},"down":{"uv":[6,9,5,10],"texture":0}},"type":"cube","uuid":"397dbe05-ca0e-8cf3-dd13-ad24976b71d8"},{"name":"cube","rescale":false,"locked":false,"from":[7.844999999999999,11.273022319704012,7.96875],"to":[8.157499999999999,11.585522319704012,8.03125],"autouv":0,"color":7,"origin":[6.068589523357749,11.866772319704012,8.09375],"faces":{"north":{"uv":[9,5,10,6],"texture":0},"east":{"uv":[6,9,7,10],"texture":0},"south":{"uv":[9,6,10,7],"texture":0},"west":{"uv":[7,9,8,10],"texture":0},"up":{"uv":[10,8,9,7],"texture":0},"down":{"uv":[9,9,8,10],"texture":0}},"type":"cube","uuid":"2b45bce9-0a7a-e149-5025-047b9008af02"},{"name":"cube","rescale":false,"locked":false,"from":[7.5,3.8301777045368484,7.84375],"to":[8.5,3.8926777045368484,8.15625],"autouv":0,"color":5,"origin":[7.375,3.8301777045368484,7.03125],"faces":{"north":{"uv":[9,8,10,9],"texture":0},"east":{"uv":[9,9,10,10],"texture":0},"south":{"uv":[0,10,1,11],"texture":0},"west":{"uv":[10,0,11,1],"texture":0},"up":{"uv":[2,11,1,10],"texture":0},"down":{"uv":[11,1,10,2],"texture":0}},"type":"cube","uuid":"92cd20e6-b241-47aa-2fda-9b2f8dc5d57e"},{"name":"cube","rescale":false,"locked":false,"from":[7.975682043967124,3.8964689652730873,7.90625],"to":[8.163182043967124,3.9589689652730873,8.09375],"autouv":0,"color":5,"rotation":[0,0,-45],"origin":[8.069432043967124,3.927718965273087,8],"faces":{"north":{"uv":[2,10,3,11],"texture":0},"east":{"uv":[10,2,11,3],"texture":0},"south":{"uv":[3,10,4,11],"texture":0},"west":{"uv":[10,3,11,4],"texture":0},"up":{"uv":[5,11,4,10],"texture":0},"down":{"uv":[11,4,10,5],"texture":0}},"type":"cube","uuid":"f421e599-f39e-b4e8-46a3-03499d0b25b0"},{"name":"cube","rescale":false,"locked":false,"from":[7.75,3.5176777045368484,7.90625],"to":[7.9375,3.5801777045368484,8.09375],"autouv":0,"color":5,"rotation":[0,0,45],"origin":[7.4375,3.8614277045368484,8],"faces":{"north":{"uv":[5,10,6,11],"texture":0},"east":{"uv":[10,5,11,6],"texture":0},"south":{"uv":[6,10,7,11],"texture":0},"west":{"uv":[10,6,11,7],"texture":0},"up":{"uv":[8,11,7,10],"texture":0},"down":{"uv":[11,7,10,8],"texture":0}},"type":"cube","uuid":"bea093d8-0453-4081-791d-781a21553a20"},{"name":"cube","rescale":false,"locked":false,"from":[7.367798671956636,3.803881225405008,7.90625],"to":[7.492798671956636,3.866381225405008,8.09375],"autouv":0,"color":5,"rotation":[0,0,22.5],"origin":[7.430298671956636,3.835131225405008,8],"faces":{"north":{"uv":[8,10,9,11],"texture":0},"east":{"uv":[10,8,11,9],"texture":0},"south":{"uv":[9,10,10,11],"texture":0},"west":{"uv":[10,9,11,10],"texture":0},"up":{"uv":[11,11,10,10],"texture":0},"down":{"uv":[1,11,0,12],"texture":0}},"type":"cube","uuid":"d3b22e26-d16d-1efd-be98-d9381623d4eb"},{"name":"cube","rescale":false,"locked":false,"from":[7.276101376482948,4.023898185328416,7.90625],"to":[7.526101376482948,4.086398185328416,8.09375],"autouv":0,"color":5,"rotation":[0,0,-22.5],"origin":[7.026101376482948,4.055148185328416,8],"faces":{"north":{"uv":[11,0,12,1],"texture":0},"east":{"uv":[1,11,2,12],"texture":0},"south":{"uv":[11,1,12,2],"texture":0},"west":{"uv":[2,11,3,12],"texture":0},"up":{"uv":[12,3,11,2],"texture":0},"down":{"uv":[4,11,3,12],"texture":0}},"type":"cube","uuid":"b52f861a-21dc-ae0a-042b-2abad0e29d1e"},{"name":"cube","rescale":false,"locked":false,"from":[7.086529623875691,3.817383536227451,7.90625],"to":[7.399029623875691,3.942383536227451,8.09375],"autouv":0,"color":5,"rotation":[0,0,-45],"origin":[7.274029623875691,3.8486335362274504,8],"faces":{"north":{"uv":[11,3,12,4],"texture":0},"east":{"uv":[4,11,5,12],"texture":0},"south":{"uv":[11,4,12,5],"texture":0},"west":{"uv":[5,11,6,12],"texture":0},"up":{"uv":[12,6,11,5],"texture":0},"down":{"uv":[7,11,6,12],"texture":0}},"type":"cube","uuid":"8c93a661-4911-bcf8-c7b1-3f99bf083cbf"},{"name":"cube","rescale":false,"locked":false,"from":[7.040615748648506,4.016318757027634,7.90625],"to":[7.468115748648506,4.078818757027634,8.09375],"autouv":0,"color":5,"rotation":[0,0,-45],"origin":[7.165615748648506,4.047568757027634,8],"faces":{"north":{"uv":[11,6,12,7],"texture":0},"east":{"uv":[7,11,8,12],"texture":0},"south":{"uv":[11,7,12,8],"texture":0},"west":{"uv":[8,11,9,12],"texture":0},"up":{"uv":[12,9,11,8],"texture":0},"down":{"uv":[10,11,9,12],"texture":0}},"type":"cube","uuid":"d0aee474-a5b3-0dbf-189e-0757b3459b76"},{"name":"cube","rescale":false,"locked":false,"from":[7.057176964575066,3.959184005004146,7.90625],"to":[7.119676964575066,4.139184005004146,8.09375],"autouv":0,"color":5,"rotation":[0,0,22.5],"origin":[7.088426964575066,4.115434005004146,8],"faces":{"north":{"uv":[11,9,12,10],"texture":0},"east":{"uv":[10,11,11,12],"texture":0},"south":{"uv":[11,10,12,11],"texture":0},"west":{"uv":[11,11,12,12],"texture":0},"up":{"uv":[1,13,0,12],"texture":0},"down":{"uv":[13,0,12,1],"texture":0}},"type":"cube","uuid":"fe8c00e2-ae23-7a93-eee1-225ecf998691"},{"name":"cube","rescale":false,"locked":false,"from":[7.875,2.2676777045368484,7.90625],"to":[8.125,3.8301777045368475,8.09375],"autouv":0,"color":7,"origin":[7.375,3.8301777045368484,7.03125],"faces":{"north":{"uv":[4,0,5,2],"texture":0},"east":{"uv":[4,2,5,4],"texture":0},"south":{"uv":[4,4,5,6],"texture":0},"west":{"uv":[5,0,6,2],"texture":0},"up":{"uv":[2,13,1,12],"texture":0},"down":{"uv":[13,1,12,2],"texture":0}},"type":"cube","uuid":"72b64f3d-590e-b3e3-84f6-c627ab7bafc5"},{"name":"cube","rescale":false,"locked":false,"from":[8.880323035424933,3.959184005004146,7.90625],"to":[8.942823035424933,4.139184005004146,8.09375],"autouv":0,"color":5,"rotation":[0,0,-22.5],"origin":[8.911573035424933,4.115434005004146,8],"faces":{"north":{"uv":[2,12,3,13],"texture":0},"east":{"uv":[12,2,13,3],"texture":0},"south":{"uv":[3,12,4,13],"texture":0},"west":{"uv":[12,3,13,4],"texture":0},"up":{"uv":[5,13,4,12],"texture":0},"down":{"uv":[13,4,12,5],"texture":0}},"type":"cube","uuid":"2eb2f1a5-c506-1234-e780-8d04b88e99d1"},{"name":"cube","rescale":false,"locked":false,"from":[8.719384251351494,4.016318757027634,7.90625],"to":[8.959384251351494,4.078818757027634,8.09375],"autouv":0,"color":5,"rotation":[0,0,45],"origin":[8.834384251351494,4.047568757027634,8],"faces":{"north":{"uv":[5,12,6,13],"texture":0},"east":{"uv":[12,5,13,6],"texture":0},"south":{"uv":[6,12,7,13],"texture":0},"west":{"uv":[12,6,13,7],"texture":0},"up":{"uv":[8,13,7,12],"texture":0},"down":{"uv":[13,7,12,8],"texture":0}},"type":"cube","uuid":"c6bfc854-7776-db0f-e2b0-fa3edd39f77d"},{"name":"cube","rescale":false,"locked":false,"from":[8.600970376124309,3.817383536227451,7.90625],"to":[8.913470376124309,3.942383536227451,8.09375],"autouv":0,"color":5,"rotation":[0,0,45],"origin":[8.725970376124309,3.8486335362274504,8],"faces":{"north":{"uv":[8,12,9,13],"texture":0},"east":{"uv":[12,8,13,9],"texture":0},"south":{"uv":[9,12,10,13],"texture":0},"west":{"uv":[12,9,13,10],"texture":0},"up":{"uv":[11,13,10,12],"texture":0},"down":{"uv":[13,10,12,11],"texture":0}},"type":"cube","uuid":"f8380540-0e3c-5ede-9dbc-24d5f703fcc9"},{"name":"cube","rescale":false,"locked":false,"from":[8.473898623517051,4.023898185328416,7.90625],"to":[8.723898623517051,4.086398185328416,8.09375],"autouv":0,"color":5,"rotation":[0,0,22.5],"origin":[8.973898623517051,4.055148185328416,8],"faces":{"north":{"uv":[11,12,12,13],"texture":0},"east":{"uv":[12,11,13,12],"texture":0},"south":{"uv":[12,12,13,13],"texture":0},"west":{"uv":[0,13,1,14],"texture":0},"up":{"uv":[14,1,13,0],"texture":0},"down":{"uv":[2,13,1,14],"texture":0}},"type":"cube","uuid":"59ad8a08-4fcb-29ba-26c6-1a7414a3c82b"},{"name":"cube","rescale":false,"locked":false,"from":[8.507201328043365,3.803881225405008,7.90625],"to":[8.632201328043365,3.866381225405008,8.09375],"autouv":0,"color":5,"rotation":[0,0,-22.5],"origin":[8.569701328043365,3.835131225405008,8],"faces":{"north":{"uv":[13,1,14,2],"texture":0},"east":{"uv":[2,13,3,14],"texture":0},"south":{"uv":[13,2,14,3],"texture":0},"west":{"uv":[3,13,4,14],"texture":0},"up":{"uv":[14,4,13,3],"texture":0},"down":{"uv":[5,13,4,14],"texture":0}},"type":"cube","uuid":"2a56070d-024f-fcdd-98b2-b0aced7b0630"},{"name":"cube","rescale":false,"locked":false,"from":[7.050466996959902,4.125417286364543,7.90625],"to":[7.090466996959902,4.165417286364543,8.09375],"autouv":0,"color":5,"origin":[7.076716996959902,4.156667286364542,8],"faces":{"north":{"uv":[13,4,14,5],"texture":0},"east":{"uv":[5,13,6,14],"texture":0},"south":{"uv":[13,5,14,6],"texture":0},"west":{"uv":[6,13,7,14],"texture":0},"up":{"uv":[14,7,13,6],"texture":0},"down":{"uv":[8,13,7,14],"texture":0}},"type":"cube","uuid":"35abf57d-8cce-561b-2ebb-c6dc1b410afe"},{"name":"cube","rescale":false,"locked":false,"from":[7.054739227990442,4.0466628222102035,7.90625],"to":[7.294739227990442,4.076662822210204,8.09375],"autouv":0,"color":5,"rotation":[0,0,-45],"origin":[7.179739227990442,4.0779128222102035,8],"faces":{"north":{"uv":[13,7,14,8],"texture":0},"east":{"uv":[8,13,9,14],"texture":0},"south":{"uv":[13,8,14,9],"texture":0},"west":{"uv":[9,13,10,14],"texture":0},"up":{"uv":[14,10,13,9],"texture":0},"down":{"uv":[11,13,10,14],"texture":0}},"type":"cube","uuid":"0e5d7be7-6536-9c7e-d5ed-d854454df61e"},{"name":"cube","rescale":false,"locked":false,"from":[8.705260772009558,4.0466628222102035,7.90625],"to":[8.945260772009558,4.076662822210204,8.09375],"autouv":0,"color":5,"rotation":[0,0,45],"origin":[8.820260772009558,4.0779128222102035,8],"faces":{"north":{"uv":[13,10,14,11],"texture":0},"east":{"uv":[11,13,12,14],"texture":0},"south":{"uv":[13,11,14,12],"texture":0},"west":{"uv":[12,13,13,14],"texture":0},"up":{"uv":[14,13,13,12],"texture":0},"down":{"uv":[14,13,13,14],"texture":0}},"type":"cube","uuid":"abf4a75f-35b5-98ec-0021-1a9979a7023d"},{"name":"cube","rescale":false,"locked":false,"from":[8.909533003040098,4.125417286364543,7.90625],"to":[8.949533003040099,4.165417286364543,8.09375],"autouv":0,"color":5,"origin":[8.923283003040098,4.156667286364542,8],"faces":{"north":{"uv":[0,14,1,15],"texture":0},"east":{"uv":[14,0,15,1],"texture":0},"south":{"uv":[1,14,2,15],"texture":0},"west":{"uv":[14,1,15,2],"texture":0},"up":{"uv":[3,15,2,14],"texture":0},"down":{"uv":[15,2,14,3],"texture":0}},"type":"cube","uuid":"77c6f491-e8f7-0bcc-dd26-b99a3a52efc9"},{"name":"cube","rescale":false,"locked":false,"from":[8.483283613520546,3.8301777045368484,7.865288949913796],"to":[8.670783613520546,3.8926777045368484,7.927788949913796],"autouv":0,"color":5,"rotation":[0,-22.5,0],"origin":[8.545783613520546,3.8614277045368484,7.896538949913796],"faces":{"north":{"uv":[3,14,4,15],"texture":0},"east":{"uv":[14,3,15,4],"texture":0},"south":{"uv":[4,14,5,15],"texture":0},"west":{"uv":[14,4,15,5],"texture":0},"up":{"uv":[6,15,5,14],"texture":0},"down":{"uv":[15,5,14,6],"texture":0}},"type":"cube","uuid":"74d6e756-db21-8d15-86d1-ee9d62890dab"},{"name":"cube","rescale":false,"locked":false,"from":[8.483283613520546,3.8301777045368484,8.072211050086203],"to":[8.670783613520546,3.8926777045368484,8.134711050086203],"autouv":0,"color":5,"rotation":[0,22.5,0],"origin":[8.545783613520546,3.8614277045368484,8.103461050086203],"faces":{"north":{"uv":[6,14,7,15],"texture":0},"east":{"uv":[14,6,15,7],"texture":0},"south":{"uv":[7,14,8,15],"texture":0},"west":{"uv":[14,7,15,8],"texture":0},"up":{"uv":[9,15,8,14],"texture":0},"down":{"uv":[15,8,14,9],"texture":0}},"type":"cube","uuid":"eaa0af3d-7f6b-5ecf-8277-15cf0e867ba4"},{"name":"cube","rescale":false,"locked":false,"from":[7.3292163864794535,3.8301777045368484,7.865288949913796],"to":[7.5167163864794535,3.8926777045368484,7.927788949913796],"autouv":0,"color":5,"rotation":[0,22.5,0],"origin":[7.4542163864794535,3.8614277045368484,7.896538949913796],"faces":{"north":{"uv":[9,14,10,15],"texture":0},"east":{"uv":[14,9,15,10],"texture":0},"south":{"uv":[10,14,11,15],"texture":0},"west":{"uv":[14,10,15,11],"texture":0},"up":{"uv":[12,15,11,14],"texture":0},"down":{"uv":[15,11,14,12],"texture":0}},"type":"cube","uuid":"8190dd9c-86d4-ea07-8123-10e9aca59b7e"},{"name":"cube","rescale":false,"locked":false,"from":[7.3292163864794535,3.8301777045368484,8.072211050086203],"to":[7.5167163864794535,3.8926777045368484,8.134711050086203],"autouv":0,"color":5,"rotation":[0,-22.5,0],"origin":[7.4542163864794535,3.8614277045368484,8.103461050086203],"faces":{"north":{"uv":[12,14,13,15],"texture":0},"east":{"uv":[14,12,15,13],"texture":0},"south":{"uv":[13,14,14,15],"texture":0},"west":{"uv":[14,13,15,14],"texture":0},"up":{"uv":[15,15,14,14],"texture":0},"down":{"uv":[1,15,0,16],"texture":0}},"type":"cube","uuid":"b23e0513-1056-e55d-717b-fc4276213a45"},{"name":"cube","rescale":false,"locked":false,"from":[7.940371346626149,3.9589689652730873,7.90625],"to":[8.127871346626149,3.983968965273087,8.09375],"autouv":0,"color":5,"rotation":[0,0,-45],"origin":[8.034121346626149,3.927718965273087,8],"faces":{"north":{"uv":[15,0,16,1],"texture":0},"east":{"uv":[1,15,2,16],"texture":0},"south":{"uv":[15,1,16,2],"texture":0},"west":{"uv":[2,15,3,16],"texture":0},"up":{"uv":[16,3,15,2],"texture":0},"down":{"uv":[4,15,3,16],"texture":0}},"type":"cube","uuid":"a9d01f4f-b055-5e97-fce7-92c45f9506d1"},{"name":"cube","rescale":false,"locked":false,"from":[7.9375,3.8926777045368484,7.90625],"to":[8.0625,3.9551777045368484,8.09375],"autouv":0,"color":5,"origin":[7.375,3.8301777045368484,7.03125],"faces":{"north":{"uv":[15,3,16,4],"texture":0},"east":{"uv":[4,15,5,16],"texture":0},"south":{"uv":[15,4,16,5],"texture":0},"west":{"uv":[5,15,6,16],"texture":0},"up":{"uv":[16,6,15,5],"texture":0},"down":{"uv":[7,15,6,16],"texture":0}},"type":"cube","uuid":"6d779acb-7a0b-baf5-31e8-cdbb94a4dde9"},{"name":"cube","rescale":false,"locked":false,"from":[7.875,2.1426777045368484,7.90625],"to":[8.125,2.2676777045368475,8.09375],"autouv":0,"color":7,"origin":[7.375,3.8301777045368484,7.03125],"faces":{"north":{"uv":[15,6,16,7],"texture":0},"east":{"uv":[7,15,8,16],"texture":0},"south":{"uv":[15,7,16,8],"texture":0},"west":{"uv":[8,15,9,16],"texture":0},"up":{"uv":[16,9,15,8],"texture":0},"down":{"uv":[10,15,9,16],"texture":0}},"type":"cube","uuid":"20daf91a-de2f-396a-e4ec-33e805f8c071"},{"name":"cube","rescale":false,"locked":false,"from":[7.9375,2.0801777045368484,7.96875],"to":[8.0625,2.1426777045368475,8.03125],"autouv":0,"color":7,"origin":[7.375,3.8301777045368484,7.03125],"faces":{"north":{"uv":[15,9,16,10],"texture":0},"east":{"uv":[10,15,11,16],"texture":0},"south":{"uv":[15,10,16,11],"texture":0},"west":{"uv":[11,15,12,16],"texture":0},"up":{"uv":[16,12,15,11],"texture":0},"down":{"uv":[13,15,12,16],"texture":0}},"type":"cube","uuid":"a766e755-7039-0fc0-d922-5eb1f026eca2"}],"outliner":["6291eddc-960a-543e-a32f-f0ed85ea4dbc","72b64f3d-590e-b3e3-84f6-c627ab7bafc5","20daf91a-de2f-396a-e4ec-33e805f8c071","a766e755-7039-0fc0-d922-5eb1f026eca2","92cd20e6-b241-47aa-2fda-9b2f8dc5d57e","6d779acb-7a0b-baf5-31e8-cdbb94a4dde9","74d6e756-db21-8d15-86d1-ee9d62890dab","eaa0af3d-7f6b-5ecf-8277-15cf0e867ba4","b23e0513-1056-e55d-717b-fc4276213a45","8190dd9c-86d4-ea07-8123-10e9aca59b7e","b52f861a-21dc-ae0a-042b-2abad0e29d1e","d0aee474-a5b3-0dbf-189e-0757b3459b76","0e5d7be7-6536-9c7e-d5ed-d854454df61e","35abf57d-8cce-561b-2ebb-c6dc1b410afe","77c6f491-e8f7-0bcc-dd26-b99a3a52efc9","abf4a75f-35b5-98ec-0021-1a9979a7023d","8c93a661-4911-bcf8-c7b1-3f99bf083cbf","fe8c00e2-ae23-7a93-eee1-225ecf998691","d3b22e26-d16d-1efd-be98-d9381623d4eb","2a56070d-024f-fcdd-98b2-b0aced7b0630","59ad8a08-4fcb-29ba-26c6-1a7414a3c82b","f8380540-0e3c-5ede-9dbc-24d5f703fcc9","c6bfc854-7776-db0f-e2b0-fa3edd39f77d","2eb2f1a5-c506-1234-e780-8d04b88e99d1","f421e599-f39e-b4e8-46a3-03499d0b25b0","a9d01f4f-b055-5e97-fce7-92c45f9506d1","bea093d8-0453-4081-791d-781a21553a20","346f5a65-469b-dbe2-7dc2-62d7d759c975","9499959e-46e1-433b-ff50-95a907fb1341","2b45bce9-0a7a-e149-5025-047b9008af02","9aaf8893-2232-d5ad-7931-f6ca17db2afb","d284bce6-b5e1-9eec-9e50-2ef60f2cae20","42f3ad83-a518-e3e8-1ef0-195838ed7e58","f716cd2f-35d2-208a-af38-547aa8f1a897","fdcb4ee7-84b5-b7b3-4af5-0187e8a673ed","18e04445-3e64-be48-4cdb-c27441a2965f","2aa45e6d-97df-06c0-6d62-761926580241","397dbe05-ca0e-8cf3-dd13-ad24976b71d8"],"textures":[{"path":"C:\\Users\\hawkt\\Documents\\GitHub\\cosmere\\src\\surgebinding\\resources\\assets\\surgebinding\\textures\\item\\models\\shardblade_model\\nightblood.png","name":"nightblood.png","folder":"item/models/shardblade_model","namespace":"surgebinding","id":"0","particle":true,"render_mode":"default","visible":true,"mode":"bitmap","saved":true,"uuid":"eeb3b5a6-0d31-41e9-596d-1d3b69b475e2","relative_path":"../../src/surgebinding/resources/assets/surgebinding/textures/item/models/shardblade_model/nightblood.png","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAG9JREFUOE9jZGBg+M+ABJSlJMG8u8+eIwszdM5Yj8KHcRhJNWBWUxZDWt00uGFYDUC3HaSaJBcMcQOwBjUpYUATA3DFAMgyjGjE5gK8BnTOWI+SEnF5AZc4I1UMQE+exLqiPCOQgSIXDJwBIJthAACwP0nB7MHmNQAAAABJRU5ErkJggg=="}],"display":{"thirdperson_righthand":{"rotation":[0,90,0],"translation":[0,13,1],"scale":[3,3,3]},"thirdperson_lefthand":{"rotation":[0,90,0],"translation":[0,13,1],"scale":[3,3,3]},"firstperson_righthand":{"rotation":[0,-90,0],"translation":[0,9.5,0],"scale":[2,2,2]},"firstperson_lefthand":{"rotation":[0,90,0],"translation":[0,9.5,0],"scale":[2,2,2]},"gui":{"rotation":[0,0,-45],"translation":[0.75,0.75,0],"scale":[1.25,1.25,1.25]},"fixed":{"rotation":[0,0,45],"translation":[-1,1,0],"scale":[1.5,1.5,1.5]}}} \ No newline at end of file diff --git a/blockbench/surgebinding/shardblades/shardblade.java b/blockbench/surgebinding/shardblades/shardblade.java new file mode 100644 index 000000000..e46fed0c8 --- /dev/null +++ b/blockbench/surgebinding/shardblades/shardblade.java @@ -0,0 +1,85 @@ +// Made with Blockbench 4.12.2 +// Exported for Minecraft version 1.17 or later with Mojang mappings +// Paste this class into your mod and generate all required imports + + +public class shardblade extends EntityModel { + // This layer location should be baked with EntityRendererProvider.Context in the entity renderer and passed into this model's constructor + public static final ModelLayerLocation LAYER_LOCATION = new ModelLayerLocation(new ResourceLocation("modid", "shardblade"), "main"); + private final ModelPart root; + private final ModelPart blade; + private final ModelPart blade_guide; + private final ModelPart blade_1; + private final ModelPart blade_2; + private final ModelPart handle; + private final ModelPart handle_guide; + private final ModelPart handle_1; + private final ModelPart pommel; + private final ModelPart pommel_guide; + private final ModelPart pommel_1; + private final ModelPart cross_guard; + private final ModelPart crossguard_guide; + private final ModelPart crossguard_1; + + public shardblade(ModelPart root) { + this.root = root.getChild("root"); + this.blade = this.root.getChild("blade"); + this.blade_guide = this.blade.getChild("blade_guide"); + this.blade_1 = this.blade.getChild("blade_1"); + this.blade_2 = this.blade.getChild("blade_2"); + this.handle = this.root.getChild("handle"); + this.handle_guide = this.handle.getChild("handle_guide"); + this.handle_1 = this.handle.getChild("handle_1"); + this.pommel = this.root.getChild("pommel"); + this.pommel_guide = this.pommel.getChild("pommel_guide"); + this.pommel_1 = this.pommel.getChild("pommel_1"); + this.cross_guard = this.root.getChild("cross_guard"); + this.crossguard_guide = this.cross_guard.getChild("crossguard_guide"); + this.crossguard_1 = this.cross_guard.getChild("crossguard_1"); + } + + public static LayerDefinition createBodyLayer() { + MeshDefinition meshdefinition = new MeshDefinition(); + PartDefinition partdefinition = meshdefinition.getRoot(); + + PartDefinition root = partdefinition.addOrReplaceChild("root", CubeListBuilder.create(), PartPose.offset(0.0F, 24.0F, 0.0F)); + + PartDefinition blade = root.addOrReplaceChild("blade", CubeListBuilder.create(), PartPose.offset(0.0F, 0.0F, 0.0F)); + + PartDefinition blade_guide = blade.addOrReplaceChild("blade_guide", CubeListBuilder.create().texOffs(19, 3).addBox(-2.5F, -45.0F, -0.5F, 5.0F, 28.0F, 1.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, 0.0F, 0.0F)); + + PartDefinition blade_1 = blade.addOrReplaceChild("blade_1", CubeListBuilder.create().texOffs(0, 3).addBox(-0.5F, -45.0F, -0.5F, 1.0F, 28.0F, 1.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, 0.0F, 0.0F)); + + PartDefinition blade_2 = blade.addOrReplaceChild("blade_2", CubeListBuilder.create().texOffs(19, 3).addBox(-2.5F, -45.0F, -0.5F, 5.0F, 28.0F, 1.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, 0.0F, 0.0F)); + + PartDefinition handle = root.addOrReplaceChild("handle", CubeListBuilder.create(), PartPose.offset(0.0F, 0.0F, 0.0F)); + + PartDefinition handle_guide = handle.addOrReplaceChild("handle_guide", CubeListBuilder.create().texOffs(4, 8).addBox(-0.5F, -16.0F, -0.5F, 1.0F, 7.0F, 1.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, 0.0F, 0.0F)); + + PartDefinition handle_1 = handle.addOrReplaceChild("handle_1", CubeListBuilder.create().texOffs(4, 8).addBox(-0.5F, -16.0F, -0.5F, 1.0F, 7.0F, 1.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, 0.0F, 0.0F)); + + PartDefinition pommel = root.addOrReplaceChild("pommel", CubeListBuilder.create(), PartPose.offset(0.0F, 0.0F, 0.0F)); + + PartDefinition pommel_guide = pommel.addOrReplaceChild("pommel_guide", CubeListBuilder.create().texOffs(4, 3).addBox(-1.5F, -9.0F, -1.5F, 3.0F, 2.0F, 3.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, 0.0F, 0.0F)); + + PartDefinition pommel_1 = pommel.addOrReplaceChild("pommel_1", CubeListBuilder.create().texOffs(4, 3).addBox(-1.5F, -9.0F, -1.5F, 3.0F, 2.0F, 3.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, 0.0F, 0.0F)); + + PartDefinition cross_guard = root.addOrReplaceChild("cross_guard", CubeListBuilder.create(), PartPose.offset(0.0F, 0.0F, 0.0F)); + + PartDefinition crossguard_guide = cross_guard.addOrReplaceChild("crossguard_guide", CubeListBuilder.create().texOffs(0, 0).addBox(-4.5F, -17.0F, -1.0F, 9.0F, 1.0F, 2.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, 0.0F, 0.0F)); + + PartDefinition crossguard_1 = cross_guard.addOrReplaceChild("crossguard_1", CubeListBuilder.create().texOffs(0, 0).addBox(-4.5F, -17.0F, -1.0F, 9.0F, 1.0F, 2.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, 0.0F, 0.0F)); + + return LayerDefinition.create(meshdefinition, 32, 32); + } + + @Override + public void setupAnim(Trident entity, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch) { + + } + + @Override + public void renderToBuffer(PoseStack poseStack, VertexConsumer vertexConsumer, int packedLight, int packedOverlay, float red, float green, float blue, float alpha) { + root.render(poseStack, vertexConsumer, packedLight, packedOverlay, red, green, blue, alpha); + } +} \ No newline at end of file diff --git a/blockbench/test_blade.bbmodel b/blockbench/surgebinding/shardblades/test_blade.bbmodel similarity index 100% rename from blockbench/test_blade.bbmodel rename to blockbench/surgebinding/shardblades/test_blade.bbmodel diff --git a/blockbench/surgebinding/shardplate/armortest.bbmodel b/blockbench/surgebinding/shardplate/armortest.bbmodel new file mode 100644 index 000000000..3e8280886 --- /dev/null +++ b/blockbench/surgebinding/shardplate/armortest.bbmodel @@ -0,0 +1 @@ +{"meta":{"format_version":"4.0","model_format":"modded_entity","box_uv":true},"name":"custom_model","model_identifier":"","modded_entity_version":"1.17","modded_entity_flip_y":true,"visible_box":[1,1,0],"variable_placeholders":"","variable_placeholder_buttons":[],"resolution":{"width":64,"height":64},"elements":[{"name":"Hat Layer","rescale":false,"locked":false,"from":[-4,24,-4],"to":[4,32,4],"autouv":0,"color":0,"inflate":0.75,"origin":[0,0,0],"faces":{"north":{"uv":[8,8,16,16],"texture":0},"east":{"uv":[0,8,8,16],"texture":0},"south":{"uv":[24,8,32,16],"texture":0},"west":{"uv":[16,8,24,16],"texture":0},"up":{"uv":[16,8,8,0],"texture":0},"down":{"uv":[24,0,16,8],"texture":0}},"type":"cube","uuid":"d35cc904-52d6-d031-2b13-a26880e307e6"},{"name":"Body Layer","rescale":false,"locked":false,"from":[-4,12,-2],"to":[4,24,2],"autouv":0,"color":0,"inflate":0.6,"origin":[0,0,0],"uv_offset":[16,16],"faces":{"north":{"uv":[20,20,28,32],"texture":0},"east":{"uv":[16,20,20,32],"texture":0},"south":{"uv":[32,20,40,32],"texture":0},"west":{"uv":[28,20,32,32],"texture":0},"up":{"uv":[28,20,20,16],"texture":0},"down":{"uv":[36,16,28,20],"texture":0}},"type":"cube","uuid":"2857310a-3ab4-a38f-da73-7d6e15ee048d"},{"name":"Right Arm Layer","rescale":false,"locked":false,"from":[4,12,-2],"to":[8,24,2],"autouv":0,"color":0,"inflate":0.6,"origin":[0,0,0],"uv_offset":[40,16],"faces":{"north":{"uv":[44,20,48,32],"texture":0},"east":{"uv":[40,20,44,32],"texture":0},"south":{"uv":[52,20,56,32],"texture":0},"west":{"uv":[48,20,52,32],"texture":0},"up":{"uv":[48,20,44,16],"texture":0},"down":{"uv":[52,16,48,20],"texture":0}},"type":"cube","uuid":"a9b4480d-1a2d-5e59-f54e-0a16c1255392"},{"name":"Left Arm Layer","rescale":false,"locked":false,"from":[-8,12,-2],"to":[-4,24,2],"autouv":0,"color":0,"inflate":0.6,"origin":[0,0,0],"uv_offset":[32,48],"faces":{"north":{"uv":[36,52,40,64],"texture":0},"east":{"uv":[32,52,36,64],"texture":0},"south":{"uv":[44,52,48,64],"texture":0},"west":{"uv":[40,52,44,64],"texture":0},"up":{"uv":[40,52,36,48],"texture":0},"down":{"uv":[44,48,40,52],"texture":0}},"type":"cube","uuid":"fc79becc-9f62-da06-794e-6bc5f7102606"},{"name":"Right Leg Layer","rescale":false,"locked":false,"from":[-0.10000000000000009,0,-2],"to":[3.9,12,2],"autouv":0,"color":0,"inflate":0.6,"origin":[0,0,0],"uv_offset":[0,16],"faces":{"north":{"uv":[4,20,8,32],"texture":0},"east":{"uv":[0,20,4,32],"texture":0},"south":{"uv":[12,20,16,32],"texture":0},"west":{"uv":[8,20,12,32],"texture":0},"up":{"uv":[8,20,4,16],"texture":0},"down":{"uv":[12,16,8,20],"texture":0}},"type":"cube","uuid":"f792015f-7747-c1f3-1373-81e64431b991"},{"name":"Left Leg Layer","rescale":false,"locked":false,"from":[-3.9,0,-2],"to":[0.10000000000000009,12,2],"autouv":0,"color":0,"inflate":0.6,"origin":[0,0,0],"uv_offset":[16,48],"faces":{"north":{"uv":[20,52,24,64],"texture":0},"east":{"uv":[16,52,20,64],"texture":0},"south":{"uv":[28,52,32,64],"texture":0},"west":{"uv":[24,52,28,64],"texture":0},"up":{"uv":[24,52,20,48],"texture":0},"down":{"uv":[28,48,24,52],"texture":0}},"type":"cube","uuid":"1aaae0f9-7e31-505b-bc59-c2bb9c87900b"},{"name":"cube","rescale":false,"locked":false,"from":[-3.9999999999999996,-0.5999999999999999,-4.700000000000001],"to":[0,1.4000000000000008,-2.6999999999999997],"autouv":0,"color":4,"origin":[0,0,0],"uv_offset":[18,28],"faces":{"north":{"uv":[20,30,24,32],"texture":0},"east":{"uv":[18,30,20,32],"texture":0},"south":{"uv":[26,30,30,32],"texture":0},"west":{"uv":[24,30,26,32],"texture":0},"up":{"uv":[24,30,20,28],"texture":0},"down":{"uv":[28,28,24,30],"texture":0}},"type":"cube","uuid":"959d20cc-c533-0b06-c039-643c482e4056"},{"name":"cube","rescale":false,"locked":false,"from":[4.440892098500626e-16,-0.5999999999999999,-4.700000000000001],"to":[4,1.4000000000000008,-2.6999999999999997],"autouv":0,"color":4,"origin":[0,0,0],"uv_offset":[18,28],"faces":{"north":{"uv":[20,30,24,32],"texture":0},"east":{"uv":[18,30,20,32],"texture":0},"south":{"uv":[26,30,30,32],"texture":0},"west":{"uv":[24,30,26,32],"texture":0},"up":{"uv":[24,30,20,28],"texture":0},"down":{"uv":[28,28,24,30],"texture":0}},"type":"cube","uuid":"e18419e0-0ce2-0408-a741-7d2ab691254b"},{"name":"cube","rescale":false,"locked":false,"from":[3,32.148109566702814,-0.6733695108353892],"to":[5,38.148109566702814,1.3266304891646108],"autouv":0,"color":5,"rotation":[12.5,0,0],"origin":[4,32.148109566702814,0.3266304891646108],"uv_offset":[4,24],"faces":{"north":{"uv":[6,26,8,32],"texture":0},"east":{"uv":[4,26,6,32],"texture":0},"south":{"uv":[10,26,12,32],"texture":0},"west":{"uv":[8,26,10,32],"texture":0},"up":{"uv":[8,26,6,24],"texture":0},"down":{"uv":[10,24,8,26],"texture":0}},"type":"cube","uuid":"08df9c29-559d-3f63-6b42-e6c27b28e22f"},{"name":"cube","rescale":false,"locked":false,"from":[-5,32.148109566702814,-0.6733695108353892],"to":[-3,38.148109566702814,1.3266304891646108],"autouv":0,"color":5,"rotation":[12.5,0,0],"origin":[4,32.148109566702814,0.3266304891646108],"uv_offset":[4,24],"faces":{"north":{"uv":[6,26,8,32],"texture":0},"east":{"uv":[4,26,6,32],"texture":0},"south":{"uv":[10,26,12,32],"texture":0},"west":{"uv":[8,26,10,32],"texture":0},"up":{"uv":[8,26,6,24],"texture":0},"down":{"uv":[10,24,8,26],"texture":0}},"type":"cube","uuid":"2617b06f-333d-959a-58b1-0a6797e7ba26"}],"outliner":[{"name":"head","origin":[0,24,0],"color":0,"uuid":"8ac143a0-9f1d-0404-0627-f87dfb1046c8","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["d35cc904-52d6-d031-2b13-a26880e307e6","08df9c29-559d-3f63-6b42-e6c27b28e22f","2617b06f-333d-959a-58b1-0a6797e7ba26"]},{"name":"body","origin":[0,24,0],"color":0,"uuid":"dfd6a81e-51a0-affb-c4f6-9d6aa916b12c","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["2857310a-3ab4-a38f-da73-7d6e15ee048d"]},{"name":"rightArm","origin":[5,22,0],"color":0,"uuid":"865fd55c-5fd5-cbe1-1179-b80b4e75c195","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["a9b4480d-1a2d-5e59-f54e-0a16c1255392"]},{"name":"leftArm","origin":[-5,22,0],"color":0,"uuid":"8586836b-dcb3-324c-82bb-fbec060a0e2b","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["fc79becc-9f62-da06-794e-6bc5f7102606"]},{"name":"rightLeg","origin":[1.9,12,0],"color":0,"uuid":"aeec2aac-7ab0-609b-24ee-6625a5086e43","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["f792015f-7747-c1f3-1373-81e64431b991","e18419e0-0ce2-0408-a741-7d2ab691254b"]},{"name":"leftLeg","origin":[-1.9,12,0],"color":0,"uuid":"febcc10f-eb8c-d600-4cc8-7fcbf06bf155","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["1aaae0f9-7e31-505b-bc59-c2bb9c87900b","959d20cc-c533-0b06-c039-643c482e4056"]}],"textures":[{"path":"Z:\\Repo\\Minecraft\\2021\\CosmereProject\\_cosmere\\src\\main\\resources\\assets\\cosmere\\textures\\item\\models\\shardplate.png","name":"shardplate.png","folder":"","namespace":"","id":"0","particle":false,"render_mode":"default","visible":true,"mode":"bitmap","saved":true,"uuid":"af4f61b5-0593-e339-fce8-3cd0d52aa7a6","relative_path":"../../src/main/resources/assets/cosmere/textures/item/models/shardplate.png","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAAXNSR0IArs4c6QAAAidJREFUeF7tW71KxEAQ3oCgkN4LRERR8AFsrre0s/ER7H0O7wqtrO4JtPIhDsHuGkHwBwM5sb3CSlmSg9y47mTdLLtJvmuumGQz+fab2W+ys5Fgfnez12/dJZPRlXaEm8lFxD3Dp511TgIw3N9S+jh9ehcSgHSQKO3ZPBcAAAxACLBhhhzgEQF2dpAEu74MHuUj7TqfzM60BL2+v9Ta104/tfaNvTHLQpcREkkAhoNN9To//xASgJ0kVtpf8oWQAMS720r74vlNSADW0wOl/St7FACgDQw4PywYcJsVE3mSFv/jh54woPcAIAd0PQnqlpnOL4P05Wn9T+t9rrx1/f3A1j/6vr9ESFX60nq/Tn3vWjrb+gcACAJKBlSv6XwI0FqAJj2q9am2P45LVVSiZpo0uVqBG5/zj5PaK7XAlGh/qvWptpdaXjq4rCXo/TTeuPHo9dz43Hh1ag0AUK0GwQCEwGr9XyfGkAOQBLEKYBmEDig/qrZWCFUVWO+ksMtv7m0Y2+umRAgAAYAQZsGnD2CAT/RDeDYYEMIs+PQBDPCJfgjPBgNCmAWfPoABPtEP4dlgQAiz4NOHxhlgu39ve78pmE4AWJ4vsO0v+M/9AMAQAScMaLK/wLQ/wfD9hTUArvsLbPf/OUAaAeCvfQHbvcU693MNEACAQQAM4CjC2V02WCAEyHkEVY8ScoDleQPkAC7GOTtyQOXMUdNdZkiCbUmCLvsLXEvhH3DxfIynINy/AAAAAElFTkSuQmCC"}]} \ No newline at end of file diff --git a/blockbench/surgebinding/shardplate/windrunner_shardplate.bbmodel b/blockbench/surgebinding/shardplate/windrunner_shardplate.bbmodel new file mode 100644 index 000000000..20f1f2d8d --- /dev/null +++ b/blockbench/surgebinding/shardplate/windrunner_shardplate.bbmodel @@ -0,0 +1 @@ +{"meta":{"format_version":"4.5","model_format":"modded_entity","box_uv":true},"name":"windrunner_shardplate","model_identifier":"","modded_entity_version":"1.17","modded_entity_flip_y":true,"visible_box":[1,1,0],"variable_placeholders":"","variable_placeholder_buttons":[],"unhandled_root_fields":{},"resolution":{"width":64,"height":64},"elements":[{"name":"head","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[3,30,1],"to":[5,39,3],"autouv":0,"color":0,"origin":[-4,32.25,-4.4008594721985315],"uv_offset":[0,52],"faces":{"north":{"uv":[2,54,4,63],"texture":0},"east":{"uv":[0,54,2,63],"texture":0},"south":{"uv":[6,54,8,63],"texture":0},"west":{"uv":[4,54,6,63],"texture":0},"up":{"uv":[4,54,2,52],"texture":0},"down":{"uv":[6,52,4,54],"texture":0}},"type":"cube","uuid":"b002df4b-982f-6698-4530-6777419094b1"},{"name":"head","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-5,30,1],"to":[-3,39,3],"autouv":0,"color":0,"shade":false,"origin":[4,32.25,-4.4008594721985315],"uv_offset":[50,33],"faces":{"north":{"uv":[52,35,54,44],"texture":0},"east":{"uv":[50,35,52,44],"texture":0},"south":{"uv":[56,35,58,44],"texture":0},"west":{"uv":[54,35,56,44],"texture":0},"up":{"uv":[54,35,52,33],"texture":0},"down":{"uv":[56,33,54,35],"texture":0}},"type":"cube","uuid":"ca5b0099-f326-e9be-f7a4-f75a697089ff"},{"name":"body","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-4,20.25,-2.5],"to":[4,23.25,2.5],"autouv":0,"color":0,"inflate":0.75,"origin":[0,20,0],"uv_offset":[19,23],"faces":{"north":{"uv":[24,28,32,31],"texture":0},"east":{"uv":[19,28,24,31],"texture":0},"south":{"uv":[37,28,45,31],"texture":0},"west":{"uv":[32,28,37,31],"texture":0},"up":{"uv":[32,28,24,23],"texture":0},"down":{"uv":[40,23,32,28],"texture":0}},"type":"cube","uuid":"21361b6f-36c2-e4a6-4920-c9592a2139fa"},{"name":"left_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-8.631453255015217,12.25,-2],"to":[-4.6314532550152165,23.25,2],"autouv":0,"color":0,"inflate":0.7,"origin":[-7.5625,21.20535085180349,0],"uv_offset":[32,31],"faces":{"north":{"uv":[36,35,40,46],"texture":0},"east":{"uv":[32,35,36,46],"texture":0},"south":{"uv":[44,35,48,46],"texture":0},"west":{"uv":[40,35,44,46],"texture":0},"up":{"uv":[40,35,36,31],"texture":0},"down":{"uv":[44,31,40,35],"texture":0}},"type":"cube","uuid":"e042d47f-9667-466c-e88e-c7fde61608cc"},{"name":"right_leg","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[0.3499998092651371,2.3500003814697266,-2.0999999046325684],"to":[4.349999809265137,11.600000381469727,1.9000000953674316],"autouv":0,"color":0,"inflate":0.4,"origin":[-5.550000190734863,2.3500003814697266,-0.09999990463256836],"uv_offset":[16,31],"faces":{"north":{"uv":[20,35,24,44.25],"texture":0},"east":{"uv":[16,35,20,44.25],"texture":0},"south":{"uv":[28,35,32,44.25],"texture":0},"west":{"uv":[24,35,28,44.25],"texture":0},"up":{"uv":[24,35,20,31],"texture":0},"down":{"uv":[28,31,24,35],"texture":0}},"type":"cube","uuid":"122abd76-b55b-0064-ce5f-f25b87b24b44"},{"name":"left_leg","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-4.349999809265137,2.3500003814697266,-2.0999999046325684],"to":[-0.3499998092651371,11.600000381469727,1.9000000953674316],"autouv":0,"color":0,"inflate":0.4,"origin":[0.05000019073486328,1.1000003814697266,0.15000009536743164],"uv_offset":[0,28],"faces":{"north":{"uv":[4,32,8,41.25],"texture":0},"east":{"uv":[0,32,4,41.25],"texture":0},"south":{"uv":[12,32,16,41.25],"texture":0},"west":{"uv":[8,32,12,41.25],"texture":0},"up":{"uv":[8,32,4,28],"texture":0},"down":{"uv":[12,28,8,32],"texture":0}},"type":"cube","uuid":"c2186918-6630-2e17-c48c-1bce9b871e67"},{"name":"head","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-4,24.25,-4],"to":[4,32.25,4],"autouv":0,"color":0,"inflate":0.6,"origin":[0,8.25,0],"faces":{"north":{"uv":[8,8,16,16],"texture":0},"east":{"uv":[0,8,8,16],"texture":0},"south":{"uv":[24,8,32,16],"texture":0},"west":{"uv":[16,8,24,16],"texture":0},"up":{"uv":[16,8,8,0],"texture":0},"down":{"uv":[24,0,16,8],"texture":0}},"type":"cube","uuid":"6d555f9c-97d0-306f-046e-fb10605b5f86"},{"name":"right_leg","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-4.5,0.5,-2.25],"to":[-0.5,5.5,2],"autouv":0,"color":0,"inflate":0.5,"origin":[12,2,-0.5],"uv_offset":[0,43],"faces":{"north":{"uv":[4.25,47.25,8.25,52.25],"texture":0},"east":{"uv":[0,47.25,4.25,52.25],"texture":0},"south":{"uv":[12.5,47.25,16.5,52.25],"texture":0},"west":{"uv":[8.25,47.25,12.5,52.25],"texture":0},"up":{"uv":[8.25,47.25,4.25,43],"texture":0},"down":{"uv":[12.25,43,8.25,47.25],"texture":0}},"type":"cube","uuid":"ee0a26a5-900b-c258-da4e-4158ed1c686c"},{"name":"left_leg","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[0.5,0.5,-2.25],"to":[4.5,5.5,2],"autouv":0,"color":0,"inflate":0.5,"origin":[12,0,-0.5],"uv_offset":[40,15],"faces":{"north":{"uv":[44.25,19.25,48.25,24.25],"texture":0},"east":{"uv":[40,19.25,44.25,24.25],"texture":0},"south":{"uv":[52.5,19.25,56.5,24.25],"texture":0},"west":{"uv":[48.25,19.25,52.5,24.25],"texture":0},"up":{"uv":[48.25,19.25,44.25,15],"texture":0},"down":{"uv":[52.25,15,48.25,19.25],"texture":0}},"type":"cube","uuid":"d32790f8-f4b2-b5a7-7dca-dd3b3eef3046"},{"name":"right_leg","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[1.0499999999999998,0.5,-4.75],"to":[4.05,2.5,-2.7500000000000018],"autouv":0,"color":0,"inflate":0.5,"origin":[12,2,1.25],"uv_offset":[24,0],"faces":{"north":{"uv":[26,1.9999999999999982,29,3.9999999999999982],"texture":0},"east":{"uv":[24,1.9999999999999982,26,3.9999999999999982],"texture":0},"south":{"uv":[30.999999999999996,1.9999999999999982,34,3.9999999999999982],"texture":0},"west":{"uv":[29,1.9999999999999982,30.999999999999996,3.9999999999999982],"texture":0},"up":{"uv":[29,1.9999999999999982,26,0],"texture":0},"down":{"uv":[32,0,29,1.9999999999999982],"texture":0}},"type":"cube","uuid":"14063cb8-2b20-9acc-d65f-4ff8159b0eed"},{"name":"left_leg","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-3.75,0.5,-4.75],"to":[-0.75,2.5,-2.7500000000000018],"autouv":0,"color":0,"shade":false,"inflate":0.5,"origin":[12,2,1.25],"uv_offset":[20,16],"faces":{"north":{"uv":[22,18,25,20],"texture":0},"east":{"uv":[20,18,22,20],"texture":0},"south":{"uv":[26.999999999999996,18,29.999999999999996,20],"texture":0},"west":{"uv":[25,18,26.999999999999996,20],"texture":0},"up":{"uv":[25,18,22,16],"texture":0},"down":{"uv":[28,16,25,18],"texture":0}},"type":"cube","uuid":"0ab2f58f-a37c-5229-93f2-12744c4b3ec8"},{"name":"left_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-10.904292394295352,22.385009909527326,-2],"to":[-7.904292394295352,24.385009909527326,2],"autouv":0,"color":0,"inflate":0.7,"rotation":[0,0,-35.00000000000008],"origin":[-7.5625,21.20535085180349,0],"uv_offset":[30,46],"faces":{"north":{"uv":[34,50,37,52],"texture":0},"east":{"uv":[30,50,34,52],"texture":0},"south":{"uv":[41,50,44,52],"texture":0},"west":{"uv":[37,50,41,52],"texture":0},"up":{"uv":[37,50,34,46],"texture":0},"down":{"uv":[40,46,37,50],"texture":0}},"type":"cube","uuid":"e9381235-b974-d2c6-89c8-8777acd34eb2"},{"name":"left_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-9.197185613108802,22.904616690713873,-3],"to":[-8.197185613108802,23.904616690713873,3],"autouv":0,"color":0,"inflate":0.7,"rotation":[0,0,-35.00000000000008],"origin":[-7.5625,21.20535085180349,0],"uv_offset":[42,40],"faces":{"north":{"uv":[48,46,49,47],"texture":0},"east":{"uv":[42,46,48,47],"texture":0},"south":{"uv":[55,46,56,47],"texture":0},"west":{"uv":[49,46,55,47],"texture":0},"up":{"uv":[49,46,48,40],"texture":0},"down":{"uv":[50,40,49,46],"texture":0}},"type":"cube","uuid":"65325c5c-c1b5-e88e-21ec-33d0b97c8752"},{"name":"left_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-10.19306974638002,20.97624949963873,-2],"to":[-7.19306974638002,22.97624949963873,2],"autouv":0,"color":0,"inflate":0.7,"rotation":[0,0,-12.500000000000098],"origin":[-7.5625,21.20535085180349,0],"uv_offset":[16,46],"faces":{"north":{"uv":[20,50,23,52],"texture":0},"east":{"uv":[16,50,20,52],"texture":0},"south":{"uv":[27,50,30,52],"texture":0},"west":{"uv":[23,50,27,52],"texture":0},"up":{"uv":[23,50,20,46],"texture":0},"down":{"uv":[26,46,23,50],"texture":0}},"type":"cube","uuid":"c9b91a6f-163e-948c-ced8-58470ec84a8e"},{"name":"left_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-6.229996452256966,17.789953994876633,-2],"to":[-3.229996452256966,18.789953994876633,2],"autouv":0,"color":0,"inflate":0.7,"rotation":[0,0,122.50000000000028],"origin":[-7.5625,21.20535085180349,0],"uv_offset":[48,5],"faces":{"north":{"uv":[52,9,55,10],"texture":0},"east":{"uv":[48,9,52,10],"texture":0},"south":{"uv":[59,9,62,10],"texture":0},"west":{"uv":[55,9,59,10],"texture":0},"up":{"uv":[55,9,52,5],"texture":0},"down":{"uv":[58,5,55,9],"texture":0}},"type":"cube","uuid":"62738bd1-73e1-2e32-b3b6-d651ba190fea"},{"name":"body","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-4,12.5,-2],"to":[4,20.5,2],"autouv":0,"color":0,"inflate":0.75,"origin":[0.9375,20,0],"uv_offset":[0,16],"faces":{"north":{"uv":[4,20,12,28],"texture":0},"east":{"uv":[0,20,4,28],"texture":0},"south":{"uv":[16,20,24,28],"texture":0},"west":{"uv":[12,20,16,28],"texture":0},"up":{"uv":[12,20,4,16],"texture":0},"down":{"uv":[20,16,12,20],"texture":0}},"type":"cube","uuid":"59f0a8b7-8cbb-f1ad-52e5-f8e20af40e29"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[3.440844317566186,18.17427889484787,-2],"to":[6.440844317566187,19.17427889484787,2],"autouv":0,"color":0,"inflate":0.7,"rotation":[0,0,-122.50000000000034],"origin":[7.5625,21.45535084723148,0],"uv_offset":[48,0],"faces":{"north":{"uv":[52,4,55,5],"texture":0},"east":{"uv":[48,4,52,5],"texture":0},"south":{"uv":[59,4,62,5],"texture":0},"west":{"uv":[55,4,59,5],"texture":0},"up":{"uv":[55,4,52,0],"texture":0},"down":{"uv":[58,0,55,4],"texture":0}},"type":"cube","uuid":"54c0a238-1c89-8a0b-9340-56e435aa982d"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[7.13895984190593,20.982175488823096,-2],"to":[10.138959841905928,22.982175488823096,2],"autouv":0,"color":0,"inflate":0.7,"rotation":[0,0,12.500000000000068],"origin":[7.5625,21.45535084723148,0],"uv_offset":[44,47],"faces":{"north":{"uv":[48,51,51,53],"texture":0},"east":{"uv":[44,51,48,53],"texture":0},"south":{"uv":[55,51,58,53],"texture":0},"west":{"uv":[51,51,55,53],"texture":0},"up":{"uv":[51,51,48,47],"texture":0},"down":{"uv":[54,47,51,51],"texture":0}},"type":"cube","uuid":"03f5d566-5a5b-fe22-5990-b640c98da77f"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[8.05379150139864,22.94982867132444,-3],"to":[9.05379150139864,23.94982867132444,3],"autouv":0,"color":0,"inflate":0.7,"rotation":[0,0,34.99999999999996],"origin":[7.5625,21.45535084723148,0],"uv_offset":[24,16],"faces":{"north":{"uv":[30,22,31,23],"texture":0},"east":{"uv":[24,22,30,23],"texture":0},"south":{"uv":[37,22,38,23],"texture":0},"west":{"uv":[31,22,37,23],"texture":0},"up":{"uv":[31,22,30,16],"texture":0},"down":{"uv":[32,16,31,22],"texture":0}},"type":"cube","uuid":"baeb99fe-ca1a-0808-7743-1ec8d50f8c8f"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[7.760898282585188,22.430221890137894,-2],"to":[10.76089828258519,24.430221890137894,2],"autouv":0,"color":0,"inflate":0.7,"rotation":[0,0,34.99999999999996],"origin":[7.5625,21.45535084723148,0],"uv_offset":[44,27],"faces":{"north":{"uv":[48,31,51,33],"texture":0},"east":{"uv":[44,31,48,33],"texture":0},"south":{"uv":[55,31,58,33],"texture":0},"west":{"uv":[51,31,55,33],"texture":0},"up":{"uv":[51,31,48,27],"texture":0},"down":{"uv":[54,27,51,31],"texture":0}},"type":"cube","uuid":"2338e5bc-ab95-b1b0-ef19-8248b7dfbf99"},{"name":"right_arm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[4.631453151683319,12.249999999999998,-2],"to":[8.631453151683319,23.25,2],"autouv":0,"color":0,"inflate":0.7,"rotation":[0,0,1.7493050748049344e-14],"origin":[7.5625,21.45535084723148,0],"uv_offset":[32,0],"faces":{"north":{"uv":[36,4,40,15.000000000000002],"texture":0},"east":{"uv":[32,4,36,15.000000000000002],"texture":0},"south":{"uv":[44,4,48,15.000000000000002],"texture":0},"west":{"uv":[40,4,44,15.000000000000002],"texture":0},"up":{"uv":[40,4,36,0],"texture":0},"down":{"uv":[44,0,40,4],"texture":0}},"type":"cube","uuid":"9536782a-9a28-fdbc-9595-1bd5316ab086"}],"outliner":[{"name":"head","origin":[0,23.5,0],"color":0,"uuid":"2b698a7d-4d4f-d6d9-9d21-3a5bb88e7c62","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["6d555f9c-97d0-306f-046e-fb10605b5f86","b002df4b-982f-6698-4530-6777419094b1","ca5b0099-f326-e9be-f7a4-f75a697089ff"]},{"name":"body","origin":[0,24,0],"color":0,"uuid":"ad276e09-ba52-6e01-6f9d-fe56ddb88897","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"chestplate","origin":[0,24,0],"color":0,"uuid":"6201da04-4e7c-0702-edbd-8630b8793752","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["21361b6f-36c2-e4a6-4920-c9592a2139fa","59f0a8b7-8cbb-f1ad-52e5-f8e20af40e29"]}]},{"name":"right_arm","origin":[5,22,0],"color":0,"uuid":"0c3572fe-3313-4577-2838-da43add548a4","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["9536782a-9a28-fdbc-9595-1bd5316ab086","2338e5bc-ab95-b1b0-ef19-8248b7dfbf99","baeb99fe-ca1a-0808-7743-1ec8d50f8c8f","03f5d566-5a5b-fe22-5990-b640c98da77f","54c0a238-1c89-8a0b-9340-56e435aa982d"]},{"name":"left_arm","origin":[-5,22,0],"color":0,"uuid":"5c3a2dcc-ff55-493c-94b6-90c3dfcd062d","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["e042d47f-9667-466c-e88e-c7fde61608cc","65325c5c-c1b5-e88e-21ec-33d0b97c8752","e9381235-b974-d2c6-89c8-8777acd34eb2","c9b91a6f-163e-948c-ced8-58470ec84a8e","62738bd1-73e1-2e32-b3b6-d651ba190fea"]},{"name":"right_leg","origin":[1.9,12,0],"color":0,"uuid":"af275c7b-208d-48dd-2c75-61d7616a897d","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"rightleg","origin":[0,0,0],"color":0,"uuid":"28b1d9a6-530b-5f73-f3ef-d30feb05c71d","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["122abd76-b55b-0064-ce5f-f25b87b24b44"]},{"name":"right_boot","origin":[0,0,0],"color":0,"uuid":"127606c3-0673-21b5-38ef-625abc9e2169","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"leftboot_outside","origin":[0,0,0],"color":0,"uuid":"fb8b11ee-455f-f7a4-40dc-01d7af22ba16","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["d32790f8-f4b2-b5a7-7dca-dd3b3eef3046"]},{"name":"rightboot_tip","origin":[0,0,0],"color":0,"uuid":"71c16bee-07ac-bb12-7357-2eac80161f2e","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["14063cb8-2b20-9acc-d65f-4ff8159b0eed"]}]}]},{"name":"left_leg","origin":[-1.9,12,0],"color":0,"uuid":"b0b90a65-8603-c09b-ba0c-4b5754895ee9","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"leftleg","origin":[0,0,0],"color":0,"uuid":"cc272c7d-d912-78d4-0938-eb9428b74c77","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["c2186918-6630-2e17-c48c-1bce9b871e67"]},{"name":"left_boot","origin":[0,0,0],"color":0,"uuid":"c7f278ba-d323-3b1b-3a8c-5ef24f8ce65f","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"rightboot_outside","origin":[0,0,0],"color":0,"uuid":"906de9a2-ff50-1466-fd61-840522ecc61d","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["ee0a26a5-900b-c258-da4e-4158ed1c686c"]},{"name":"leftboot_tip","origin":[0,0,0],"color":0,"uuid":"6c56f343-af4f-686b-810f-bf2f1eb99600","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["0ab2f58f-a37c-5229-93f2-12744c4b3ec8"]}]}]},{"name":"hat","origin":[0,0,0],"color":0,"uuid":"15b6d2e1-ebe3-dc4f-c944-2900b81c836b","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[]}],"textures":[{"path":"E:\\COSMERE MODELS\\shardplate.png","name":"shardplate.png","folder":"block","namespace":"","id":"0","particle":false,"render_mode":"default","render_sides":"auto","frame_time":1,"frame_order_type":"loop","frame_order":"","frame_interpolate":false,"visible":true,"mode":"bitmap","saved":false,"uuid":"0ebb5047-868d-daf4-4a14-9a95f6ebb5a1","source":"data:image/png;base64,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","relative_path":"E:/COSMERE MODELS/shardplate.png"}]} \ No newline at end of file diff --git a/blockbench/spren_fire.bbmodel b/blockbench/surgebinding/spren_fire.bbmodel similarity index 100% rename from blockbench/spren_fire.bbmodel rename to blockbench/surgebinding/spren_fire.bbmodel diff --git a/build.gradle b/build.gradle index 17cc97ebf..ab8375cde 100644 --- a/build.gradle +++ b/build.gradle @@ -1,239 +1,888 @@ +// This file was adapted from the Mekanism project, obtained 19/8/22 +// https://github.com/mekanism/Mekanism/blob/351554253dd69cbda96dfd6f00b8747b51122235/build.gradle +// Special thank you to pupnewfster (Sara) of the Mekanism Team +// +// Changes involve: +// replacing mod and sub-mod names, and using different mod dependencies and versions +// Changelog scraping via teamcity powershell script +// Setting up gradle with the ability to use mixins in all sourcesets [main,allomancy,feruchemy,hemalurgy,sandmastery,surgebinding] +// Removed jar that contains all mods in one, as I couldn't make it play nicely with mixins. +// That meant I didn't need the groovy-script MergeJars +// + + +import com.modrinth.minotaur.TaskModrinthUpload +import com.modrinth.minotaur.dependencies.ModDependency +import groovy.json.JsonOutput +import groovy.json.JsonSlurper +import net.darkhax.curseforgegradle.TaskPublishCurseForge +import net.darkhax.curseforgegradle.UploadArtifact +import net.minecraftforge.gradle.common.util.RunConfig +import net.minecraftforge.gradle.userdev.tasks.RenameJarInPlace + buildscript { - repositories { - maven { url = 'https://maven.minecraftforge.net/' } - maven { url = 'https://repo.spongepowered.org/repository/maven-public' } - jcenter() - mavenCentral() - } - dependencies { - classpath group: 'net.minecraftforge.gradle', name: 'ForgeGradle', version: '4.1.+', changing: true - classpath group: 'org.spongepowered', name: 'mixingradle', version: '0.7-SNAPSHOT' - } -} -apply plugin: 'net.minecraftforge.gradle' -apply plugin: 'org.spongepowered.mixin' -apply plugin: 'eclipse' -apply plugin: 'maven-publish' - -ext.configFile = file('gradle.properties') -ext.config = parseConfig(configFile) - -version = "${forge_version}-${mod_version}-b${build_number}" -group = 'net.cosmere.mod' // http://maven.apache.org/guides/mini/guide-naming-conventions.html -archivesBaseName = "${project.jar_name}" - -// Process resources on build -processResources { - // This will ensure that this task is redone when the versions change. - inputs.property 'version', project.version + repositories { + maven { url = 'https://repo.spongepowered.org/repository/maven-public' } + } + dependencies { + classpath group: 'org.spongepowered', name: 'mixingradle', version: '0.7-SNAPSHOT' + } +} - // Replace stuff in mods.toml, nothing else - from(sourceSets.main.resources.srcDirs) { - include 'META-INF/mods.toml' +plugins { + id 'org.ajoberstar.grgit.service' version '5.2.0' + id 'net.darkhax.curseforgegradle' version '1.1.16' + id "com.modrinth.minotaur" version "2.+" + id 'java' + id 'eclipse' + id 'idea' + id 'maven-publish' + id 'net.minecraftforge.gradle' version '[6.0,6.2)' + //id 'net.neoforged.gradle' version '[6.0.18,6.2)' + id 'org.parchmentmc.librarian.forgegradle' version '1.+' + id 'org.spongepowered.mixin' version '0.7.+' +} - // Replace version - expand 'version': project.version - } +tasks.named('wrapper', Wrapper).configure { + //Define wrapper values here so as to not have to always do so when updating gradlew.properties + gradleVersion = '8.4' + distributionType = Wrapper.DistributionType.ALL +} - // Copy everything else except the mods.toml - from(sourceSets.main.resources.srcDirs) { - exclude 'META-INF/mods.toml' - } +defaultTasks 'build' + +idea { + module { + //Exclude specific directories from being managed + for (String excludeDirName in ["run", "runGameTests", "out", "logs", "gradle"]) { + excludeDirs.add(new File(projectDir, excludeDirName)) + } + } } -sourceCompatibility = targetCompatibility = compileJava.sourceCompatibility = compileJava.targetCompatibility = '1.8' // Need this here so eclipse task generates correctly. +def build_number = System.env.BUILD_NUMBER ?: 1 +def full_mod_version = mod_version + "." + build_number +def release_type = System.env.TC_RELEASE_TYPE ?: "alpha" + +ext { + secondaryModules = [ + 'allomancy', + 'feruchemy', + 'hemalurgy', + 'surgebinding', + 'sandmastery', + 'awakening', + 'aondor', + 'aviar', + 'soulforgery', + 'example', + 'cosmeretools'] + + extraTypes = ['datagen', 'gameTest'] + jsonPatterns = ["**/*.json", "**/*.mcmeta"] + //version properties here automatically update versions in all the mods.toml files + //we want that because updating every time something changes is tedious + versionProperties = [ + "version" : full_mod_version, + "mc_version" : minecraft_version_range, + "forge_version" : forge_version_range, + "loader_version" : loader_version_range, + "patchouli_version": patchouli_version_range, + "jade_version" : jade_version_range, + "jei_version" : jei_version_range, + "curios_version" : curios_version_range + ] +} -// Include resources generated by data generators. sourceSets { - main.resources.srcDirs += 'src/main/generated' + api { + //API is code only and does not have resources. + resources.srcDirs = [] + } + main { + resources { + include '**/**' + // copy everything else, but blender and bbmodel files. + exclude '**/*.blend' + exclude '**/*.bbmodel' + //Add the generated main module resources + srcDirs += ['src/datagen/generated/cosmere'] + //But exclude the cache of the generated data from what gets built + exclude '.cache' + } + compileClasspath += api.output + runtimeClasspath += api.output + } + test { + //The test module has no resources + resources.srcDirs = [] + //Add the api to the output, all other ones that need to will get added via setupExtraSourceSets + compileClasspath += api.output + runtimeClasspath += api.output + } } -minecraft { - mappings channel: "${mappings_type}", version: "${mappings_version}" - // accessTransformer = file('build/resources/main/META-INF/accesstransformer.cfg') - runs { - client { - property 'mixin.env.remapRefMap', 'true' - property 'mixin.env.refMapRemappingFile', "${projectDir}/build/createSrgToMcp/output.srg" +//Add all extra source sets that the main sourceSet should have +setupExtraSourceSets(sourceSets.main) - workingDirectory project.file('run') - arg "-mixin.config=cosmere.mixins.json" +configurations { + //Make sure all our sub source set stuff extends the proper base methods so that + // they can see all the dependencies we have in dependencies including forge + extendConfigurations(implementation, apiImplementation, testImplementation) + extendConfigurations(compileOnly, apiCompileOnly, testCompileOnly) + extendConfigurations(runtimeOnly, apiRuntimeOnly) +} + +//Create sourceSets and configurations for each of the additional modules in src/$name and adds a reference to +// the corresponding data gen's resource directory excluding the cache. It also adds the api and main cosmere +// module to the dependencies of the source set we are setting up, and sets up all extra source sets that are +// based on the primary added source set +for (def name : secondaryModules) { + def sourceSet = sourceSets.create(name) + sourceSet.resources { + //Add the generated module resources + srcDirs += ["src/datagen/generated/${name}"] + //But exclude the cache of the generated data from what gets built + exclude '.cache' + } + sourceSet.compileClasspath += sourceSets.api.output + sourceSet.compileClasspath += sourceSets.main.output + //Create all secondary sourceSets for this module + setupExtraSourceSets(sourceSet) +} + +//Setup the UPDATE_SOURCESET property in case we are doing any remappings +project.ext."UPDATE_SOURCESETS" = project.sourceSets.collect { it.name }.join(';') + + +def setupExtraSourceSets(SourceSet base) +{ + project.sourceSets.test.compileClasspath += base.output + project.sourceSets.test.runtimeClasspath += base.output + //Setup and extend configurations for alternate modules. First by making the implementation, compileOnly, runtimeOnly equivalents + // for those modules extend the main ones + def baseImplementation = project.configurations.maybeCreate(base.getTaskName(null, "implementation")) + def baseCompileOnly = project.configurations.maybeCreate(base.getTaskName(null, "compileOnly")) + def baseRuntimeOnly = project.configurations.maybeCreate(base.getTaskName(null, "runtimeOnly")) + if (base != project.sourceSets.main) { + // If this is a secondary module then make the base tasks extend the builtin ones + baseImplementation.extendsFrom(project.configurations.getByName("implementation")) + baseCompileOnly.extendsFrom(project.configurations.getByName("compileOnly")) + baseRuntimeOnly.extendsFrom(project.configurations.getByName("runtimeOnly")) + } + //And then setup and have all the extra sourceSets have their configurations extend the ones for the base module so that they can + // properly access the dependency + for (String extraType : extraTypes) { + //Setup a source set in extraType/$name + def extraSourceSet = setupExtraSourceSet(base, extraType) + //And then setup the configurations for it + project.configurations.maybeCreate(extraSourceSet.getTaskName(null, "implementation")).extendsFrom(baseImplementation) + project.configurations.maybeCreate(extraSourceSet.getTaskName(null, "compileOnly")).extendsFrom(baseCompileOnly) + project.configurations.maybeCreate(extraSourceSet.getTaskName(null, "runtimeOnly")).extendsFrom(baseRuntimeOnly) + } +} + +SourceSet setupExtraSourceSet(SourceSet baseSourceSet, String extra) +{ + def name = baseSourceSet.getName() + def extraSourceSet = sourceSets.create(baseSourceSet.getTaskName(extra, null)) + extraSourceSet.java.srcDirs = ["src/${extra}/${name}/java"] + //Resources folder for if we have anything get created by our annotation processors or in the case of game tests, for any nbt presets + extraSourceSet.resources.srcDirs = ["src/${extra}/${name}/resources"] + extraSourceSet.compileClasspath += project.sourceSets.api.output + extraSourceSet.compileClasspath += project.sourceSets.main.output + if (baseSourceSet != project.sourceSets.main) { + //If the base sourceSet is main it already is the extra source set and has a reference to the base one from before this if statement + extraSourceSet.compileClasspath += getExtraSourceSet(project.sourceSets.main, extra).output + extraSourceSet.compileClasspath += baseSourceSet.output + } + return extraSourceSet +} + +static void extendConfigurations(Configuration base, Configuration... configurations) +{ + for (def configuration : configurations) { + configuration.extendsFrom(base) + } +} - property 'forge.logging.console.level', 'debug' +SourceSet getExtraSourceSet(String base, String name) +{ + return getExtraSourceSet(project.sourceSets.getByName(base), name) +} - mods { - cosmere { - source sourceSets.main - } - } - } +SourceSet getExtraSourceSet(SourceSet base, String name) +{ + return project.sourceSets.getByName(base.getTaskName(name, null)) +} - server { - properties 'mixin.env.disableRefMap': 'true' - workingDirectory project.file('run') +//Update book build number +processResources { + // Exclude datagenerator .cache directory + exclude '.cache' + + filesMatching('data/cosmere/patchouli_books/guide/book.json') { + filter { + it.replaceAll("buildNumber", "${build_number}") + } + } +} - property 'forge.logging.console.level', 'debug' +setupTasks(sourceSets.main) +for (def name : secondaryModules) { + setupTasks(sourceSets.getByName(name)) +} - mods { - cosmere { - source sourceSets.main - } - } - } +def setupTasks(SourceSet sourceSet) +{ + def sourceSetName = sourceSet.name + def compileTask = tasks.named(sourceSet.getCompileJavaTaskName(), JavaCompile) + def replaceResourceTask = tasks.register(sourceSet.getTaskName("replace", "resources"), Copy, { + setGroup("replace resources") + outputs.upToDateWhen { false } + def modsToml = copySpec { + from(sourceSet.resources) { + include "META-INF/mods.toml" + expand versionProperties + } + } + def packMcMeta = copySpec { + from(sourceSet.resources) { + include "pack.mcmeta" + // I don't want to auto-replace pack format values since I don't want + // to adopt the datagen core mod pack filter suppressor in mekanism + //expand packProperties + } + } + //Copy it into the build dir + with(modsToml, packMcMeta) + into "$buildDir/resources/${sourceSetName}/" + //If IntelliJ's output dir exists, copy it there as well + def intellijPath = sourceSet == project.sourceSets.main ? "production" : sourceSetName + if (new File("$rootDir/out/${intellijPath}/resources/").exists()) { + copy { + with(modsToml, packMcMeta) + into "$rootDir/out/${intellijPath}/resources/" + } + } + //If Eclipse's output dir exists, copy it there as well + if (new File("$rootDir/bin/${sourceSetName}/").exists()) { + copy { + with(modsToml, packMcMeta) + into "$rootDir/bin/${sourceSetName}/" + } + } + }) + //Set the various variables/settings for the different process resources tasks + tasks.named(sourceSet.getProcessResourcesTaskName(), ProcessResources).configure { + setGroup("process resources") + duplicatesStrategy(DuplicatesStrategy.FAIL) + exclude('META-INF/mods.toml', 'pack.mcmeta') + from("${projectDir}") { include 'logo.png' } + //Depend on the compile task so that we can map the computer methods as needed + dependsOn(compileTask) + finalizedBy(replaceResourceTask) + doLast { + fileTree(dir: getOutputs().getFiles().getAsPath(), includes: jsonPatterns).each { + File file -> file.setText(JsonOutput.toJson(new JsonSlurper().parse(file))) + } + } + } + tasks.named(sourceSet.getCompileJavaTaskName(), JavaCompile).configure { setGroup("compile") } + for (def extraType : extraTypes) { + def extraSourceSet = getExtraSourceSet(sourceSet, extraType) + tasks.named(extraSourceSet.getProcessResourcesTaskName(), ProcessResources).configure { + setGroup("process resources") + dependsOn(compileTask) + } + tasks.named(extraSourceSet.getCompileJavaTaskName(), JavaCompile).configure { setGroup("compile") } + } + //Make the various classes tasks depend on the corresponding replaceResources tasks in addition to the default processResources tasks they depend on + tasks.named(sourceSet.getClassesTaskName()).configure { dependsOn(replaceResourceTask) } +} - data { - properties 'mixin.env.disableRefMap': 'true' - workingDirectory project.file('run') +archivesBaseName = "Cosmere" +group = 'leaf.cosmere' +version = "${minecraft_version}-${forge_version}-" + full_mod_version - // Recommended logging data for a userdev environment - property 'forge.logging.markers', 'SCAN,REGISTRIES,REGISTRYDUMP' - // Recommended logging level for the console - property 'forge.logging.console.level', 'debug' +java { + toolchain { + languageVersion.set(JavaLanguageVersion.of("${java_version}")) + //vendor.set(JvmVendorSpec.JETBRAINS) + } + withSourcesJar() +} - args '--mod', 'cosmere', '--all', '--output', file('src/main/generated/'), '--existing', file('src/main/resources/') +println "Java: ${System.getProperty 'java.version'}, JVM: ${System.getProperty 'java.vm.version'} (${System.getProperty 'java.vendor'}), Arch: ${System.getProperty 'os.arch'}" - mods { - cosmere { - source sourceSets.main - } - } - } - } - accessTransformer = file('src/main/resources/META-INF/accesstransformer.cfg') +minecraft { + mappings channel: "${mappings_channel}", version: "${mappings_version}" + + accessTransformers.from(file('src/main/resources/META-INF/accesstransformer.cfg'), + file('src/allomancy/resources/META-INF/accesstransformer.cfg'), + file('src/surgebinding/resources/META-INF/accesstransformer.cfg')) + + runs { + client { + setupRunConfig(it, true) + //The below if statements are to add args to your gradle.properties file in user home + // (for me on windows, I created gradle.properties in %userprofile%\.gradle) + // (DO NOT add them directly to the gradle.properties file for this project) + if (project.hasProperty('mc_uuid')) { + //Your uuid without any dashes in the middle + args '--uuid', project.getProperty('mc_uuid') + } + if (project.hasProperty('mc_username')) { + //Your username/display name, this is the name that shows up in chat + // Note: This is not your email, even if you have a Mojang account + args '--username', project.getProperty('mc_username') + } + if (project.hasProperty('mc_accessToken')) { + //Your access token, you can find it in your '.minecraft/launcher_accounts.json' file + args '--accessToken', project.getProperty('mc_accessToken') + } + } + server { setupRunConfig(it, true) } + gameTestServer { setupRunConfig(it, true, "runGameTests") } + data { + setupRunConfig(it, false) + environment 'target', 'fmluserdevdata' + + args '--all', '--output', file('src/datagen/generated/'), + '--mod', 'cosmere', '--existing', file('src/main/resources/') + + mods.named("cosmere").configure { source((SourceSet) sourceSets.datagenMain) } + for (def name : secondaryModules) { + def modName = "${name}" + def extra = getExtraSourceSet(name, 'datagen') + mods.named(modName).configure { source(extra) } + args '--mod', modName, '--existing', file("src/${name}/resources/") + } + } + } } -mixin { - add sourceSets.main, "cosmere.refmap.json" +def setupRunConfig(RunConfig runConfig, boolean supportsGameTests, String directory = "run") +{ + runConfig.workingDirectory(file(directory)) + //This fixes Mixin application problems from other mods because their refMaps are SRG-based, but we're in a MCP env + runConfig.property 'mixin.env.remapRefMap', 'true' + runConfig.property 'mixin.env.refMapRemappingFile', "${projectDir}/build/createSrgToMcp/output.srg" + if (supportsGameTests) { + //Specify all our mods as domains to look for game tests + runConfig.property 'forge.enabledGameTestNamespaces', 'cosmere,allomancy,feruchemy,hemalurgy,surgebinding,sandmastery,cosmeretools' + } + + if (project.hasProperty('forge_force_ansi')) { + //Force ansi if declared as a gradle variable, as the auto detection doesn't detect IntelliJ properly + // or eclipse's plugin that adds support for ansi escape in console + runConfig.jvmArg("-Dterminal.ansi=${project.getProperty('forge_force_ansi')}") + } + + runConfig.mods.register("cosmere").configure { + sources((SourceSet[]) [sourceSets.main, sourceSets.api]) + if (supportsGameTests) source((SourceSet) sourceSets.gameTestMain) + } + for (def name : secondaryModules) { + def base = sourceSets.getByName(name) + def extra = supportsGameTests ? getExtraSourceSet(base, 'gameTest') : null + runConfig.mods.register("${name}").configure { + source(base) + if (supportsGameTests) source(extra) + } + } } + repositories { - maven { - // location of the maven that hosts JEI files - url "https://dvs1.progwml6.com/files/maven/" - } - maven { - //used for patchouli - url "https://maven.blamejared.com/" - } - maven { - //curio - url = "https://maven.theillusivec4.top/" - } - maven { - //HWYLA - url "https://maven.tehnut.info" - } - maven { - url "https://www.cursemaven.com" - content { - includeGroup "curse.maven" - } - } - mavenCentral() + maven { + // location of the maven that hosts JEI files + url "https://dvs1.progwml6.com/files/maven/" + } + maven { + //used for patchouli + url "https://maven.blamejared.com/" + } + maven { + //curio + url "https://maven.theillusivec4.top/" + } + maven { + //curios + url 'https://modmaven.dev/' + } + maven { + url "https://www.cursemaven.com" + content { + includeGroup "curse.maven" + } + } + + whenObjectAdded { +//ForgeGradle adds these in an afterEvaluate, so we need to catch them as they're added and exclude mod artifacts/groups + if (it instanceof MavenArtifactRepository) { + def url = it.url.toString() + if (url == 'https://maven.minecraftforge.net/' || url == 'https://libraries.minecraft.net/' || url == 'https://repo.maven.apache.org/maven2/') { + try { + it.content { + excludeGroup 'curse.maven' + excludeGroup 'mezz.jei' + excludeGroup 'top.theillusivec4.curios' + excludeGroup 'vazkii.patchouli' + } + println("Adding exclusions to ${url}") + } catch (Exception ignored) { + //oh well + } + } + } + } } dependencies { - minecraft "net.minecraftforge:forge:${forge_version}" + //minecraft "net.neoforged:forge:${minecraft_version}-${forge_version}" + minecraft "net.minecraftforge:forge:${minecraft_version}-${forge_version}" + + annotationProcessor 'org.spongepowered:mixin:0.8.5:processor' + + apiAnnotationProcessor 'org.spongepowered:mixin:0.8.5:processor' + allomancyAnnotationProcessor 'org.spongepowered:mixin:0.8.5:processor' + feruchemyAnnotationProcessor 'org.spongepowered:mixin:0.8.5:processor' + hemalurgyAnnotationProcessor 'org.spongepowered:mixin:0.8.5:processor' + surgebindingAnnotationProcessor 'org.spongepowered:mixin:0.8.5:processor' + sandmasteryAnnotationProcessor 'org.spongepowered:mixin:0.8.5:processor' + aviarAnnotationProcessor 'org.spongepowered:mixin:0.8.5:processor' + awakeningAnnotationProcessor 'org.spongepowered:mixin:0.8.5:processor' + aondorAnnotationProcessor 'org.spongepowered:mixin:0.8.5:processor' + soulforgeryAnnotationProcessor 'org.spongepowered:mixin:0.8.5:processor' + cosmeretoolsAnnotationProcessor 'org.spongepowered:mixin:0.8.5:processor' + + compileOnly fg.deobf("mezz.jei:jei-${minecraft_version}-common-api:${jei_version}") + compileOnly fg.deobf("mezz.jei:jei-${minecraft_version}-forge-api:${jei_version}") + runtimeOnly fg.deobf("mezz.jei:jei-${minecraft_version}-forge:${jei_version}") - annotationProcessor 'org.spongepowered:mixin:0.8.2:processor' + compileOnly fg.deobf("curse.maven:jade-api-324717:${jade_api_id}") + runtimeOnly fg.deobf("curse.maven:jade-324717:${jade_id}") - compileOnly fg.deobf("mezz.jei:jei-${jei_version}:api") - runtimeOnly fg.deobf("mezz.jei:jei-${jei_version}") + //runtimeOnly fg.deobf("curse.maven:soulhome-574511:${soulhome_id}") - compileOnly fg.deobf("top.theillusivec4.curios:curios-forge:${curios_version}:api") - runtimeOnly fg.deobf("top.theillusivec4.curios:curios-forge:${curios_version}") + runtimeOnly fg.deobf("top.theillusivec4.curios:curios-forge:${curios_version}") + compileOnly fg.deobf("top.theillusivec4.curios:curios-forge:${curios_version}:api") - compileOnly fg.deobf("vazkii.patchouli:Patchouli:${patchouli_version}:api") - runtimeOnly fg.deobf("vazkii.patchouli:Patchouli:${patchouli_version}") + compileOnly fg.deobf("vazkii.patchouli:Patchouli:${patchouli_version}-FORGE:api") + runtimeOnly fg.deobf("vazkii.patchouli:Patchouli:${patchouli_version}-FORGE") - compileOnly fg.deobf("mcp.mobius.waila:Hwyla:${hwyla_version}:api") - runtimeOnly fg.deobf("mcp.mobius.waila:Hwyla:${hwyla_version}") +} - //modname-modid-fileid? - implementation fg.deobf("curse.maven:appleskin-248787:3035787") - //implementation fg.deobf("curse.maven:ctm-267602:2642375") +mixin { + // MixinGradle Settings + add sourceSets.main, 'mixins.cosmere.refmap.json' + add sourceSets.api, 'mixins.cosmere.api.refmap.json' + add sourceSets.allomancy, 'mixins.cosmere.allomancy.refmap.json' + add sourceSets.feruchemy, 'mixins.cosmere.feruchemy.refmap.json' + add sourceSets.hemalurgy, 'mixins.cosmere.hemalurgy.refmap.json' + add sourceSets.surgebinding, 'mixins.cosmere.surgebinding.refmap.json' + add sourceSets.sandmastery, 'mixins.cosmere.sandmastery.refmap.json' + add sourceSets.aviar, 'mixins.cosmere.aviar.refmap.json' + add sourceSets.awakening, 'mixins.cosmere.awakening.refmap.json' + add sourceSets.aondor, 'mixins.cosmere.aondor.refmap.json' + add sourceSets.soulforgery, 'mixins.cosmere.soulforgery.refmap.json' + add sourceSets.cosmeretools, 'mixins.cosmere.cosmeretools.refmap.json' + + config 'cosmere.mixins.json' + //config 'cosmere.mixins.api.json' + config 'allomancy.mixins.json' + config 'feruchemy.mixins.json' + config 'hemalurgy.mixins.json' + config 'surgebinding.mixins.json' + config 'sandmastery.mixins.json' + config 'aviar.mixins.json' + config 'awakening.mixins.json' + config 'aondor.mixins.json' + config 'soulforgery.mixins.json' + config 'cosmeretools.mixins.json' } -// Example for how to get properties into the manifest for reading by the runtime.. -jar { - manifest { - attributes([ - "Specification-Title" : "cosmere", - "Specification-Vendor" : "cosmere", - "Specification-Version" : "1", // We are version 1 of ourselves - "Implementation-Title" : project.name, - "Implementation-Version" : "${version}", - "Implementation-Vendor" : "cosmere", - "Implementation-Timestamp": new Date().format("yyyy-MM-dd'T'HH:mm:ssZ"), - "MixinConfigs" : "cosmere.mixins.json" - ]) - } +def getManifestAttributes(String title) +{ + return [ + "Specification-Title" : title, + "Specification-Vendor" : "Cosmere", + "Specification-Version" : "${project.ext.versionProperties["version"]}", + "Implementation-Title" : title, + "Implementation-Version" : "${project.ext.versionProperties["version"]}", + "Implementation-Vendor" : "Cosmere", + "Implementation-Timestamp": new Date().format("yyyy-MM-dd'T'HH:mm:ssZ"), + "Automatic-Module-Name" : title.toLowerCase(Locale.ROOT), + "MixinConfigs" : "${title.toLowerCase(Locale.ROOT)}.mixins.json" + ] } -processResources { - // Exclude datagenerator .cache directory - exclude '.cache' - - filesMatching('data/cosmere/patchouli_books/guide/book.json') { - filter { - it.replaceAll("buildNumber", config.build_number) - } - } -} - -/** - * Increments the buildnumber in your config file, and saves it - * Note: The doFirst is important, without it the build number - * will be incremented every time tasks are configured, i.e every - * time gradle is run on this project. - */ -task incrementBuildNumber { - doFirst { - config.build_number = (config.build_number.toString().toInteger()) + 1 - configFile.withWriter { - config.toProperties().store(it, "") - } - } -} - -def parseConfig(File config) { - if(config.exists()){ - config.withReader { - def prop = new Properties() - prop.load(it) - return (new ConfigSlurper().parse(prop)) - } - } else { - return null - } -} - -def reobfFile = file("$buildDir/reobfJar/output.jar") -def reobfArtifact = artifacts.add('default', reobfFile) { - type 'jar' - builtBy 'reobfJar' -} - -publishing { - publications { - mavenJava(MavenPublication) { - artifact reobfArtifact - } - } - repositories { - maven { - url "file:///${project.projectDir}/mcmodsrepo" - } - } -} - -// Prevent Mixin annotation processor from getting into IDEA's annotation processor settings -if (System.getProperty("idea.sync.active") == "true") { - afterEvaluate { - tasks.withType(JavaCompile).all { - it.options.annotationProcessorPath = files() - } - } +tasks.named('jar', Jar).configure { + duplicatesStrategy(DuplicatesStrategy.FAIL) + from([sourceSets.api.output, sourceSets.main.output]) + manifest.attributes(getManifestAttributes("Cosmere")) +} + +tasks.named('sourcesJar', Jar).configure { + dependsOn( + classes, + apiClasses, + allomancyClasses, + feruchemyClasses, + hemalurgyClasses, + surgebindingClasses, + sandmasteryClasses, + aviarClasses, + awakeningClasses, + aondorClasses, + soulforgeryClasses, + cosmeretoolsClasses, + ) + duplicatesStrategy(DuplicatesStrategy.FAIL) + //Note: Already contains main source set's sources by default + from( + sourceSets.api.allJava, + sourceSets.allomancy.allJava, + sourceSets.feruchemy.allJava, + sourceSets.hemalurgy.allJava, + sourceSets.surgebinding.allJava, + sourceSets.sandmastery.allJava, + sourceSets.aviar.allJava, + sourceSets.awakening.allJava, + sourceSets.aondor.allJava, + sourceSets.soulforgery.allJava, + sourceSets.cosmeretools.allJava, + ) + manifest.attributes(getManifestAttributes("Cosmere")) +} + +def secondaryJar(SourceSet sourceSet, String title) +{ + return tasks.register(sourceSet.getJarTaskName(), Jar, { + duplicatesStrategy(DuplicatesStrategy.FAIL) + archiveClassifier.set(sourceSet.name) + from sourceSet.output + if (!title.isEmpty()) { + def filename = "${title}-${project.version}.jar" + //basically don't add cosmere if it already has cosmere in it + final def prependTitle = (title.contains("Cosmere") ? "" : "Cosmere") + filename + archiveFileName.set(prependTitle) + } + manifest.attributes(getManifestAttributes(title.isEmpty() ? "Cosmere" : title)) + }) +} + +def apiJar = secondaryJar(sourceSets.api, '') +def allomancyJar = secondaryJar(sourceSets.allomancy, 'Allomancy') +def feruchemyJar = secondaryJar(sourceSets.feruchemy, 'Feruchemy') +def hemalurgyJar = secondaryJar(sourceSets.hemalurgy, 'Hemalurgy') +def surgebindingJar = secondaryJar(sourceSets.surgebinding, 'Surgebinding') +def sandmasteryJar = secondaryJar(sourceSets.sandmastery, 'Sandmastery') +def awakeningJar = secondaryJar(sourceSets.awakening, 'Awakening') +def aondorJar = secondaryJar(sourceSets.aondor, 'AonDor') +def aviarJar = secondaryJar(sourceSets.aviar, 'Aviar') +def soulforgeryJar = secondaryJar(sourceSets.soulforgery, 'SoulForgery') +def exampleJar = secondaryJar(sourceSets.example, 'Example') +def cosmeretoolsJar = secondaryJar(sourceSets.cosmeretools, 'CosmereTools') + +tasks.withType(JavaCompile).configureEach({ + options.encoding = 'UTF-8' + options.compilerArgs.addAll(["-Xmaxerrs", "100000"]) +}) + +artifacts { + archives apiJar + archives jar + archives allomancyJar + archives hemalurgyJar + archives feruchemyJar + archives surgebindingJar + archives sandmasteryJar + archives sourcesJar + archives awakeningJar + archives aondorJar + archives aviarJar + archives soulforgeryJar + archives exampleJar + archives cosmeretoolsJar +} + + +createReobf(sourceSets.api) +for (def name : secondaryModules) { + createReobf(sourceSets.getByName(name)) +} + +def createReobf(SourceSet sourceSet) +{ + def reobfTask = createReobf(sourceSet.getJarTaskName()) + reobfTask.configure { libraries.from(sourceSet.compileClasspath) } + tasks.named(sourceSet.getJarTaskName()).configure(task -> task.finalizedBy(reobfTask)) + return reobfTask +} + +def createReobf(String name) +{ + def reobfExtension = (NamedDomainObjectContainer) extensions.getByName("reobf") + //using maybeCreate instead of Register, as mixin environment gets confused. + return reobfExtension.maybeCreate(name) +} + +afterEvaluate { + tasks.named('jar', Jar).configure { finalizedBy(tasks.named('reobfJar', RenameJarInPlace)) } +} + + +tasks.withType(GenerateModuleMetadata) { + //Disable Gradle 7 module metadata generation as it does not play nicely with FG + enabled = false +} + + +clean { + def filteredDelete = new HashSet<>() + for (def toDelete : getDelete()) { + for (def f : file(toDelete).listFiles()) { + if (f.getName() == "generated") { + for (def generated : file(f).listFiles()) { + if (generated.getName() != "data" && generated.getName() != "META-INF") { + filteredDelete.add(generated) + } + } + } else if (f.getName() != "fg_cache") { + filteredDelete.add(f) + } + } + } + setDelete(filteredDelete) +} + +def resolvedChangelog = null + +//closure to generate the changelog once, and only when needed by CurseGradle +def changeLogResolver = { -> + String generatedChangelog; + + //autogenerated log via teamcity, which uses a generic powershell script to generate a changelog + def autogeneratedChangelog = project.file("docs/changelog_Cosmere_${build_number}.txt") + if (autogeneratedChangelog.exists()) { + //Add any version specific changelog stuff + def changelogText = autogeneratedChangelog.getText() + generatedChangelog = "$changelogText" + } else { + generatedChangelog = "Unable to generate changelog :(" + } + + //add hand written log to put at the top + def releaseNotesFile = project.file("docs/release_${build_number}.txt") + if (releaseNotesFile.exists()) { + //Add any version specific changelog stuff + def releaseNotes = releaseNotesFile.getText() + generatedChangelog = "$releaseNotes \n\n $generatedChangelog" + } + + + generatedChangelog = + "Cosmere and related sub module mods are considered to be in an alpha state! You have been warned :)" + + "\n\n$generatedChangelog" + resolvedChangelog = generatedChangelog + return generatedChangelog +} + +if (System.getenv("CURSEFORGE_API_TOKEN") != null || project.hasProperty('curseforge_api_token')) { + println "Enabling Curseforge config" + tasks.register("curseforge", TaskPublishCurseForge, { task -> + setGroup("publishing") + setDescription("Upload to CurseForge") + + apiToken = System.getenv("CURSEFORGE_API_TOKEN") ?: project.findProperty("curseforge_api_token") + + def changelog = changeLogResolver.call() + + //Main Project + task.upload(475343, jar) { main -> + setGenericCurseArtifactData(main, changelog, release_type) + //Include the API jar as a secondary file to the main file + withAdditionalFile(apiJar) + //Add optional deps + addOptional( + 'jade', + 'curios', + 'patchouli', + 'jei', + 'allomancer', + 'feruchemist', + 'hemalurgy', + 'surgebinding', + 'sandmastery', + 'aviar', + 'cosmere-tools' + ) + } + + //Secondary modules/projects + uploadSecondaryCurseProject(task, 678468, changelog, allomancyJar, release_type) + uploadSecondaryCurseProject(task, 678466, changelog, feruchemyJar, release_type) + uploadSecondaryCurseProject(task, 678469, changelog, hemalurgyJar, release_type) + uploadSecondaryCurseProject(task, 624998, changelog, surgebindingJar, release_type) + uploadSecondaryCurseProject(task, 695387, changelog, sandmasteryJar, release_type) + uploadSecondaryCurseProject(task, 822584, changelog, aviarJar, release_type) + uploadSecondaryCurseProject(task, 990661, changelog, cosmeretoolsJar, release_type) + + //not yet ready + //uploadSecondaryCurseProject(task, 822581, changelog, aondorJar) + //uploadSecondaryCurseProject(task, 822580, changelog, awakeningJar) + //uploadSecondaryCurseProject(task, 822593, changelog, soulforgeryJar) + //uploadSecondaryCurseProject(task, 822596, changelog, bloodsealingJar) + }) +} + +void setGenericCurseArtifactData(UploadArtifact artifact, String changelog, String release_type) +{ + artifact.changelog = changelog + artifact.changelogType = 'text' + artifact.releaseType = "${release_type}" + artifact.addModLoader("Forge") + artifact.addModLoader("NeoForge") +} + +void uploadSecondaryCurseProject(TaskPublishCurseForge task, long projectId, String changelog, TaskProvider sourceSetJar, String release_type) +{ + task.upload(projectId, sourceSetJar) { artifact -> + setGenericCurseArtifactData(artifact, changelog, release_type) + addRequirement('cosmere') + addOptional( + 'jade', + 'curios', + 'patchouli', + 'jei', + 'allomancer', + 'feruchemist', + 'hemalurgy', + 'surgebinding', + 'sandmastery', + 'aviar', + 'cosmere-tools' + ) + addIncompatibility( + 'hemalurgy-lego-allomancy' + ) + } +} + +if (System.getenv("MODRINTH_API_TOKEN") != null || project.hasProperty('modrinth_api_token')) { + println "Enabling Modrinth config" + def allomancyModrinth = createSecondaryModrinthUpload("allomancy", "u1pejmgA", allomancyJar) + def feruchemyModrinth = createSecondaryModrinthUpload("feruchemy", "OX40vFNo", feruchemyJar) + def hemalurgyModrinth = createSecondaryModrinthUpload("hemalurgy", "McOcm9tD", hemalurgyJar) + def surgebindingModrinth = createSecondaryModrinthUpload("surgebinding", "ohwrIsCO", surgebindingJar) + def sandmasteryModrinth = createSecondaryModrinthUpload("sandmastery", "9EJFLSYm", sandmasteryJar) + def aviarModrinth = createSecondaryModrinthUpload("aviar", "75FFkvaX", aviarJar) + def cosmeretoolsModrinth = createSecondaryModrinthUpload("tools", "T0u6rdso", cosmeretoolsJar) + + //not yet ready + //def aondorModrinth = createSecondaryModrinthUpload("aondor", "E92whAPB", aondorJar) + //def awakeningModrinth = createSecondaryModrinthUpload("awakening", "WZZ5m3YI", awakeningJar) + //def soulforgeryModrinth = createSecondaryModrinthUpload("soulforgery", "26ErEJqz", soulforgeryJar) + //def bloodsealingModrinth = createSecondaryModrinthUpload("bloodsealing", "lmdH7wUj", bloodsealingJar) + + tasks.named('modrinth').configure { + dependsOn(jar, apiJar) + finalizedBy( + allomancyModrinth, + feruchemyModrinth, + hemalurgyModrinth, + surgebindingModrinth, + sandmasteryModrinth, + aviarModrinth, + cosmeretoolsModrinth + ) + } + + modrinth { + if (System.getenv("MODRINTH_API_TOKEN") == null) { + //Defaults to modrinth_api_token so we only have to check for a token via gradle properties if there isn't a system property + getToken().value((String) project.findProperty("modrinth_api_token")) + } else { + token = System.getenv("MODRINTH_API_TOKEN") + } + projectId = "SEABTDiK" + versionNumber = "${full_mod_version}" + versionType = "${release_type}" + loaders.addAll("forge", "neoforge") + gameVersions = ["1.20.1"] // Must be an array, even with only one version + changelog = changeLogResolver.call() + uploadFile = jar + getAdditionalFiles().value([apiJar.get()]) + //Note: Can't use nested dependency configuration as we have no way to clear it for the secondary uploads + getDependencies().value([ + new ModDependency("vvuO3ImH", "required"),//Curios + new ModDependency("nU0bVIaL", "optional"),//Patchouli + new ModDependency("nvQzSEkH", "optional"),//Jade + new ModDependency("u6dRKJwZ", "optional"),//JEI + new ModDependency("u1pejmgA", "optional"),//allomancy + new ModDependency("OX40vFNo", "optional"),//feruchemy + new ModDependency("McOcm9tD", "optional"),//hemalurgy + new ModDependency("ohwrIsCO", "optional"),//surgebinding + new ModDependency("9EJFLSYm", "optional"),//sandmastery + new ModDependency("75FFkvaX", "optional"),//aviar + new ModDependency("T0u6rdso", "optional"),//cosmeretools + ]) + } +} + +def createSecondaryModrinthUpload(String output, String targetProjectId, TaskProvider sourceSetJar) +{ + return tasks.register("${output}Modrinth", TaskModrinthUpload, { + setGroup("publishing") + setDescription("Upload ${output} to Modrinth") + dependsOn(tasks.named("modrinth"), sourceSetJar) + doFirst { + //Run in do first to change the configured extension values before it starts applying + modrinth { + projectId = targetProjectId + uploadFile = sourceSetJar.get() + gameVersions = ["1.20.1"] // Must be an array, even with only one version + //Clear additional upload files as this is a modification of what things are set to from before + getAdditionalFiles().empty() + + //Mark that the addon requires the build of Cosmere that we just uploaded (and override it to clear all optional dependencies) + //todo fix this because it doesn't appear to work anymore. fails on .getId() as some other version is null?? +/* def generalCosmereDependency = + (tasks.modrinth.newVersion == null || tasks.modrinth.newVersion.getId() == null) //If we failed to find the upload version + // just set it to Cosmere in general + ? new ModDependency("SEABTDiK", "required") + // else use the specific version + : new VersionDependency(tasks.modrinth.newVersion.getId(), "required")*/ + + getDependencies().value([ + new ModDependency("SEABTDiK", "required"),//generalCosmereDependency, + new ModDependency("vvuO3ImH", "required"),//Curios + new ModDependency("nU0bVIaL", "optional"),//Patchouli + new ModDependency("nvQzSEkH", "optional"),//Jade + new ModDependency("u6dRKJwZ", "optional"),//JEI + new ModDependency("u1pejmgA", "optional"),//allomancy + new ModDependency("OX40vFNo", "optional"),//feruchemy + new ModDependency("McOcm9tD", "optional"),//hemalurgy + new ModDependency("ohwrIsCO", "optional"),//surgebinding + new ModDependency("9EJFLSYm", "optional"),//sandmastery + new ModDependency("75FFkvaX", "optional"),//aviar + new ModDependency("T0u6rdso", "optional"),//cosmeretools + ]) + } + println "Updated Modrinth extension" + } + }) +} + +tasks.register('publishToModSites') { + if (System.getenv("MODRINTH_API_TOKEN") != null || project.hasProperty('modrinth_api_token')) { + publishToModSites.dependsOn tasks.named("modrinth") + } + if (System.getenv("CURSEFORGE_API_TOKEN") != null || project.hasProperty('curseforge_api_token')) { + publishToModSites.dependsOn tasks.named("curseforge") + } } \ No newline at end of file diff --git a/crowdin.yml b/crowdin.yml new file mode 100644 index 000000000..553f49eb1 --- /dev/null +++ b/crowdin.yml @@ -0,0 +1,853 @@ +project_identifier: cosmere +api_key_env: CROWDIN_API_KEY +commit_message: "[Translations]" +base_path: . +files: + - source: /src/datagen/generated/cosmere/assets/cosmere/lang/en_us.json + translation: /src/main/resources/assets/cosmere/lang/%locale_with_underscore%.json + languages_mapping: + locale_with_underscore: + af: af_za + ar: ar_sa + ast: ast_es + az: az_az + ba: ba_ru + be: be_by + bg: bg_bg + br-FR: br_fr + bs: bs_ba + ca: ca_es + cs: cs_cz + cy: cy_gb + da: da_dk + de-AT: de_at + de-CH: de_ch + de: de_de + el: el_gr + en-AU: en_au + en-CA: en_ca + en-GB: en_gb + en-NZ: en_nz + en-PT: en_pt + en-US: en_us + en-ZA: en_za + eo: eo_uy + es-AR: es_ar + es-CL: es_cl + es-ES: es_es + es-MX: es_mx + es-UY: es_uy + es-VE: es_ve + et: et_ee + eu: eu_es + fa: fa_ir + fi: fi_fi + fil: fil_ph + fo: fo_fo + fr-CA: fr_ca + fr: fr_fr + fra-DE: fra_de + fy-NL: fy_nl + ga-IE: ga_ie + gd: gd_gb + gl: gl_es + got: got_de + gv: gv_im + haw: haw_us + he: he_il + hi: hi_in + hr: hr_hr + hu: hu_hu + hy-AM: hy_am + id: id_id + ig: ig_ng + ido: io_en + is: is_is + it: it_it + ja: ja_jp + jbo: jbo_en + ka: ka_ge + kab: kab_kab + kk: kk_kz + kn: kn_in + ko: ko_kr + kw: kw_gb + la-LA: la_va + lb: lb_lu + li: li_li + lol: lol_us + lt: lt_lt + lv: lv_lv + mi: mi_nz + mk: mk_mk + mn: mn_mn + moh: moh_ca + ms: ms_my + mt: mt_mt + nb: nb_no + nds: nds_de + nl-BE: nl_be + nl: nl_nl + nn-NO: nn_no + #no: nn_no + oc: oc_fr + oj: oj_ca + pl: pl_pl + pt-BR: pt_br + pt-PT: pt_pt + qya-AA: qya_aa + ro: ro_ro + ru: ru_ru + sk: sk_sk + sl: sl_si + so: so_so + sq: sq_al + sr: sr_sp + sr-CS: sr_cs + sv-SE: sv_se + ta: ta_in + th: th_th + tl: tl_ph + tlh-AA: tlh_aa + tr: tr_tr + tt-RU: tt_ru + tzl: tzl_tzl + uk: uk_ua + val-ES: val_es + vec: vec_it + vi: vi_vn + yi: yi_de + yo: yo_ng + zh-CN: zh_cn + zh-TW: zh_tw + zh-HK: zh_hk + fur-IT: fur_it + ry: ry_ua + - source: >- + /src/datagen/generated/allomancy/assets/allomancy/lang/en_us.json + translation: >- + /src/allomancy/resources/assets/allomancy/lang/%locale_with_underscore%.json + languages_mapping: + locale_with_underscore: + af: af_za + ar: ar_sa + ast: ast_es + az: az_az + ba: ba_ru + be: be_by + bg: bg_bg + br-FR: br_fr + bs: bs_ba + ca: ca_es + cs: cs_cz + cy: cy_gb + da: da_dk + de-AT: de_at + de-CH: de_ch + de: de_de + el: el_gr + en-AU: en_au + en-CA: en_ca + en-GB: en_gb + en-NZ: en_nz + en-PT: en_pt + en-US: en_us + en-ZA: en_za + eo: eo_uy + es-AR: es_ar + es-CL: es_cl + es-ES: es_es + es-MX: es_mx + es-UY: es_uy + es-VE: es_ve + et: et_ee + eu: eu_es + fa: fa_ir + fi: fi_fi + fil: fil_ph + fo: fo_fo + fr-CA: fr_ca + fr: fr_fr + fra-DE: fra_de + fy-NL: fy_nl + ga-IE: ga_ie + gd: gd_gb + gl: gl_es + got: got_de + gv: gv_im + haw: haw_us + he: he_il + hi: hi_in + hr: hr_hr + hu: hu_hu + hy-AM: hy_am + id: id_id + ig: ig_ng + ido: io_en + is: is_is + it: it_it + ja: ja_jp + jbo: jbo_en + ka: ka_ge + kab: kab_kab + kk: kk_kz + kn: kn_in + ko: ko_kr + kw: kw_gb + la-LA: la_va + lb: lb_lu + li: li_li + lol: lol_us + lt: lt_lt + lv: lv_lv + mi: mi_nz + mk: mk_mk + mn: mn_mn + moh: moh_ca + ms: ms_my + mt: mt_mt + nb: nb_no + nds: nds_de + nl-BE: nl_be + nl: nl_nl + nn-NO: nn_no + #no: nn_no + oc: oc_fr + oj: oj_ca + pl: pl_pl + pt-BR: pt_br + pt-PT: pt_pt + qya-AA: qya_aa + ro: ro_ro + ru: ru_ru + sk: sk_sk + sl: sl_si + so: so_so + sq: sq_al + sr: sr_sp + sr-CS: sr_cs + sv-SE: sv_se + ta: ta_in + th: th_th + tl: tl_ph + tlh-AA: tlh_aa + tr: tr_tr + tt-RU: tt_ru + tzl: tzl_tzl + uk: uk_ua + val-ES: val_es + vec: vec_it + vi: vi_vn + yi: yi_de + yo: yo_ng + zh-CN: zh_cn + zh-TW: zh_tw + zh-HK: zh_hk + fur-IT: fur_it + ry: ry_ua + - source: >- + /src/datagen/generated/feruchemy/assets/feruchemy/lang/en_us.json + translation: >- + /src/feruchemy/resources/assets/feruchemy/lang/%locale_with_underscore%.json + languages_mapping: + locale_with_underscore: + af: af_za + ar: ar_sa + ast: ast_es + az: az_az + ba: ba_ru + be: be_by + bg: bg_bg + br-FR: br_fr + bs: bs_ba + ca: ca_es + cs: cs_cz + cy: cy_gb + da: da_dk + de-AT: de_at + de-CH: de_ch + de: de_de + el: el_gr + en-AU: en_au + en-CA: en_ca + en-GB: en_gb + en-NZ: en_nz + en-PT: en_pt + en-US: en_us + en-ZA: en_za + eo: eo_uy + es-AR: es_ar + es-CL: es_cl + es-ES: es_es + es-MX: es_mx + es-UY: es_uy + es-VE: es_ve + et: et_ee + eu: eu_es + fa: fa_ir + fi: fi_fi + fil: fil_ph + fo: fo_fo + fr-CA: fr_ca + fr: fr_fr + fra-DE: fra_de + fy-NL: fy_nl + ga-IE: ga_ie + gd: gd_gb + gl: gl_es + got: got_de + gv: gv_im + haw: haw_us + he: he_il + hi: hi_in + hr: hr_hr + hu: hu_hu + hy-AM: hy_am + id: id_id + ig: ig_ng + ido: io_en + is: is_is + it: it_it + ja: ja_jp + jbo: jbo_en + ka: ka_ge + kab: kab_kab + kk: kk_kz + kn: kn_in + ko: ko_kr + kw: kw_gb + la-LA: la_va + lb: lb_lu + li: li_li + lol: lol_us + lt: lt_lt + lv: lv_lv + mi: mi_nz + mk: mk_mk + mn: mn_mn + moh: moh_ca + ms: ms_my + mt: mt_mt + nb: nb_no + nds: nds_de + nl-BE: nl_be + nl: nl_nl + nn-NO: nn_no + #no: nn_no + oc: oc_fr + oj: oj_ca + pl: pl_pl + pt-BR: pt_br + pt-PT: pt_pt + qya-AA: qya_aa + ro: ro_ro + ru: ru_ru + sk: sk_sk + sl: sl_si + so: so_so + sq: sq_al + sr: sr_sp + sr-CS: sr_cs + sv-SE: sv_se + ta: ta_in + th: th_th + tl: tl_ph + tlh-AA: tlh_aa + tr: tr_tr + tt-RU: tt_ru + tzl: tzl_tzl + uk: uk_ua + val-ES: val_es + vec: vec_it + vi: vi_vn + yi: yi_de + yo: yo_ng + zh-CN: zh_cn + zh-TW: zh_tw + zh-HK: zh_hk + fur-IT: fur_it + ry: ry_ua + - source: /src/datagen/generated/hemalurgy/assets/hemalurgy/lang/en_us.json + translation: >- + /src/hemalurgy/resources/assets/hemalurgy/lang/%locale_with_underscore%.json + languages_mapping: + locale_with_underscore: + af: af_za + ar: ar_sa + ast: ast_es + az: az_az + ba: ba_ru + be: be_by + bg: bg_bg + br-FR: br_fr + bs: bs_ba + ca: ca_es + cs: cs_cz + cy: cy_gb + da: da_dk + de-AT: de_at + de-CH: de_ch + de: de_de + el: el_gr + en-AU: en_au + en-CA: en_ca + en-GB: en_gb + en-NZ: en_nz + en-PT: en_pt + en-US: en_us + en-ZA: en_za + eo: eo_uy + es-AR: es_ar + es-CL: es_cl + es-ES: es_es + es-MX: es_mx + es-UY: es_uy + es-VE: es_ve + et: et_ee + eu: eu_es + fa: fa_ir + fi: fi_fi + fil: fil_ph + fo: fo_fo + fr-CA: fr_ca + fr: fr_fr + fra-DE: fra_de + fy-NL: fy_nl + ga-IE: ga_ie + gd: gd_gb + gl: gl_es + got: got_de + gv: gv_im + haw: haw_us + he: he_il + hi: hi_in + hr: hr_hr + hu: hu_hu + hy-AM: hy_am + id: id_id + ig: ig_ng + ido: io_en + is: is_is + it: it_it + ja: ja_jp + jbo: jbo_en + ka: ka_ge + kab: kab_kab + kk: kk_kz + kn: kn_in + ko: ko_kr + kw: kw_gb + la-LA: la_va + lb: lb_lu + li: li_li + lol: lol_us + lt: lt_lt + lv: lv_lv + mi: mi_nz + mk: mk_mk + mn: mn_mn + moh: moh_ca + ms: ms_my + mt: mt_mt + nb: nb_no + nds: nds_de + nl-BE: nl_be + nl: nl_nl + nn-NO: nn_no + #no: nn_no + oc: oc_fr + oj: oj_ca + pl: pl_pl + pt-BR: pt_br + pt-PT: pt_pt + qya-AA: qya_aa + ro: ro_ro + ru: ru_ru + sk: sk_sk + sl: sl_si + so: so_so + sq: sq_al + sr: sr_sp + sr-CS: sr_cs + sv-SE: sv_se + ta: ta_in + th: th_th + tl: tl_ph + tlh-AA: tlh_aa + tr: tr_tr + tt-RU: tt_ru + tzl: tzl_tzl + uk: uk_ua + val-ES: val_es + vec: vec_it + vi: vi_vn + yi: yi_de + yo: yo_ng + zh-CN: zh_cn + zh-TW: zh_tw + zh-HK: zh_hk + fur-IT: fur_it + ry: ry_ua + - source: /src/datagen/generated/aviar/assets/aviar/lang/en_us.json + translation: >- + /src/aviar/resources/assets/aviar/lang/%locale_with_underscore%.json + languages_mapping: + locale_with_underscore: + af: af_za + ar: ar_sa + ast: ast_es + az: az_az + ba: ba_ru + be: be_by + bg: bg_bg + br-FR: br_fr + bs: bs_ba + ca: ca_es + cs: cs_cz + cy: cy_gb + da: da_dk + de-AT: de_at + de-CH: de_ch + de: de_de + el: el_gr + en-AU: en_au + en-CA: en_ca + en-GB: en_gb + en-NZ: en_nz + en-PT: en_pt + en-US: en_us + en-ZA: en_za + eo: eo_uy + es-AR: es_ar + es-CL: es_cl + es-ES: es_es + es-MX: es_mx + es-UY: es_uy + es-VE: es_ve + et: et_ee + eu: eu_es + fa: fa_ir + fi: fi_fi + fil: fil_ph + fo: fo_fo + fr-CA: fr_ca + fr: fr_fr + fra-DE: fra_de + fy-NL: fy_nl + ga-IE: ga_ie + gd: gd_gb + gl: gl_es + got: got_de + gv: gv_im + haw: haw_us + he: he_il + hi: hi_in + hr: hr_hr + hu: hu_hu + hy-AM: hy_am + id: id_id + ig: ig_ng + ido: io_en + is: is_is + it: it_it + ja: ja_jp + jbo: jbo_en + ka: ka_ge + kab: kab_kab + kk: kk_kz + kn: kn_in + ko: ko_kr + kw: kw_gb + la-LA: la_va + lb: lb_lu + li: li_li + lol: lol_us + lt: lt_lt + lv: lv_lv + mi: mi_nz + mk: mk_mk + mn: mn_mn + moh: moh_ca + ms: ms_my + mt: mt_mt + nb: nb_no + nds: nds_de + nl-BE: nl_be + nl: nl_nl + nn-NO: nn_no + #no: nn_no + oc: oc_fr + oj: oj_ca + pl: pl_pl + pt-BR: pt_br + pt-PT: pt_pt + qya-AA: qya_aa + ro: ro_ro + ru: ru_ru + sk: sk_sk + sl: sl_si + so: so_so + sq: sq_al + sr: sr_sp + sr-CS: sr_cs + sv-SE: sv_se + ta: ta_in + th: th_th + tl: tl_ph + tlh-AA: tlh_aa + tr: tr_tr + tt-RU: tt_ru + tzl: tzl_tzl + uk: uk_ua + val-ES: val_es + vec: vec_it + vi: vi_vn + yi: yi_de + yo: yo_ng + zh-CN: zh_cn + zh-TW: zh_tw + zh-HK: zh_hk + fur-IT: fur_it + ry: ry_ua + - source: /src/datagen/generated/surgebinding/assets/surgebinding/lang/en_us.json + translation: >- + /src/surgebinding/resources/assets/surgebinding/lang/%locale_with_underscore%.json + languages_mapping: + locale_with_underscore: + af: af_za + ar: ar_sa + ast: ast_es + az: az_az + ba: ba_ru + be: be_by + bg: bg_bg + br-FR: br_fr + bs: bs_ba + ca: ca_es + cs: cs_cz + cy: cy_gb + da: da_dk + de-AT: de_at + de-CH: de_ch + de: de_de + el: el_gr + en-AU: en_au + en-CA: en_ca + en-GB: en_gb + en-NZ: en_nz + en-PT: en_pt + en-US: en_us + en-ZA: en_za + eo: eo_uy + es-AR: es_ar + es-CL: es_cl + es-ES: es_es + es-MX: es_mx + es-UY: es_uy + es-VE: es_ve + et: et_ee + eu: eu_es + fa: fa_ir + fi: fi_fi + fil: fil_ph + fo: fo_fo + fr-CA: fr_ca + fr: fr_fr + fra-DE: fra_de + fy-NL: fy_nl + ga-IE: ga_ie + gd: gd_gb + gl: gl_es + got: got_de + gv: gv_im + haw: haw_us + he: he_il + hi: hi_in + hr: hr_hr + hu: hu_hu + hy-AM: hy_am + id: id_id + ig: ig_ng + ido: io_en + is: is_is + it: it_it + ja: ja_jp + jbo: jbo_en + ka: ka_ge + kab: kab_kab + kk: kk_kz + kn: kn_in + ko: ko_kr + kw: kw_gb + la-LA: la_va + lb: lb_lu + li: li_li + lol: lol_us + lt: lt_lt + lv: lv_lv + mi: mi_nz + mk: mk_mk + mn: mn_mn + moh: moh_ca + ms: ms_my + mt: mt_mt + nb: nb_no + nds: nds_de + nl-BE: nl_be + nl: nl_nl + nn-NO: nn_no + #no: nn_no + oc: oc_fr + oj: oj_ca + pl: pl_pl + pt-BR: pt_br + pt-PT: pt_pt + qya-AA: qya_aa + ro: ro_ro + ru: ru_ru + sk: sk_sk + sl: sl_si + so: so_so + sq: sq_al + sr: sr_sp + sr-CS: sr_cs + sv-SE: sv_se + ta: ta_in + th: th_th + tl: tl_ph + tlh-AA: tlh_aa + tr: tr_tr + tt-RU: tt_ru + tzl: tzl_tzl + uk: uk_ua + val-ES: val_es + vec: vec_it + vi: vi_vn + yi: yi_de + yo: yo_ng + zh-CN: zh_cn + zh-TW: zh_tw + zh-HK: zh_hk + fur-IT: fur_it + ry: ry_ua + - source: /src/datagen/generated/sandmastery/assets/sandmastery/lang/en_us.json + translation: >- + /src/sandmastery/resources/assets/sandmastery/lang/%locale_with_underscore%.json + languages_mapping: + locale_with_underscore: + af: af_za + ar: ar_sa + ast: ast_es + az: az_az + ba: ba_ru + be: be_by + bg: bg_bg + br-FR: br_fr + bs: bs_ba + ca: ca_es + cs: cs_cz + cy: cy_gb + da: da_dk + de-AT: de_at + de-CH: de_ch + de: de_de + el: el_gr + en-AU: en_au + en-CA: en_ca + en-GB: en_gb + en-NZ: en_nz + en-PT: en_pt + en-US: en_us + en-ZA: en_za + eo: eo_uy + es-AR: es_ar + es-CL: es_cl + es-ES: es_es + es-MX: es_mx + es-UY: es_uy + es-VE: es_ve + et: et_ee + eu: eu_es + fa: fa_ir + fi: fi_fi + fil: fil_ph + fo: fo_fo + fr-CA: fr_ca + fr: fr_fr + fra-DE: fra_de + fy-NL: fy_nl + ga-IE: ga_ie + gd: gd_gb + gl: gl_es + got: got_de + gv: gv_im + haw: haw_us + he: he_il + hi: hi_in + hr: hr_hr + hu: hu_hu + hy-AM: hy_am + id: id_id + ig: ig_ng + ido: io_en + is: is_is + it: it_it + ja: ja_jp + jbo: jbo_en + ka: ka_ge + kab: kab_kab + kk: kk_kz + kn: kn_in + ko: ko_kr + kw: kw_gb + la-LA: la_va + lb: lb_lu + li: li_li + lol: lol_us + lt: lt_lt + lv: lv_lv + mi: mi_nz + mk: mk_mk + mn: mn_mn + moh: moh_ca + ms: ms_my + mt: mt_mt + nb: nb_no + nds: nds_de + nl-BE: nl_be + nl: nl_nl + nn-NO: nn_no + #no: nn_no + oc: oc_fr + oj: oj_ca + pl: pl_pl + pt-BR: pt_br + pt-PT: pt_pt + qya-AA: qya_aa + ro: ro_ro + ru: ru_ru + sk: sk_sk + sl: sl_si + so: so_so + sq: sq_al + sr: sr_sp + sr-CS: sr_cs + sv-SE: sv_se + ta: ta_in + th: th_th + tl: tl_ph + tlh-AA: tlh_aa + tr: tr_tr + tt-RU: tt_ru + tzl: tzl_tzl + uk: uk_ua + val-ES: val_es + vec: vec_it + vi: vi_vn + yi: yi_de + yo: yo_ng + zh-CN: zh_cn + zh-TW: zh_tw + zh-HK: zh_hk + fur-IT: fur_it + ry: ry_ua diff --git a/docs/Changelog.md b/docs/Changelog.md new file mode 100644 index 000000000..cb4d4d05c --- /dev/null +++ b/docs/Changelog.md @@ -0,0 +1,424 @@ +The Cosmere Project - For 1.19 Minecraft + +B57 - 1.19.2 + +Shadesmar dimension +Roshar dimension +Mod split into sub-modules, Allomancy, Feruchemy, Hemalurgy, Surgebinding, with Cosmere serving as the core mod that ties everything together + + + +B56 - 1.19.2 - More breaking changed~! + +Updated to the newer forge version which has breaking changes with earlier versions of 1.19 forge. + + +B55 - 1.18.2 + +Fix exception error that happens when iron spiking mob that doesn't have an attack attribute. + + +B53 - 1.18.2 + +Some very basic shardblade summon/dismiss. Creative mode only. +Some partial fixes for f-nicrosil again. No it's not really fixed and isn't really ready for public use. +A-Aluminum drains all metals and then itself. +A-Boost effect acts similar to a-aluminum for draining metals. +Fix for dust tag recipes, I'd written 'dust' instead of 'dusts' +Fixed starting base values not actually being applied properly. Applies to new players only. +New players start with a vial full of their allomantic metal and a ring of their feruchemical metal. +Buffed f-zinc. Was 1.1 per tap/store, now is 1.15. +Iron spikes reduce xp gain rate. +Stopped luck spikes displaying as percentage. No more '-300% luck' visuals when it means -3. +A-Copper can choose to affect self only if they're at Mode1. Mode2 will start copper cloud, mode 3 will flare cloud for range. +Many new honorblade models, courtesy of Hawktrav + +B52 - 1.19 - BREAKING CHANGES! + +Updated forge version to `1.19-41.0.64`, which has many breaking changes across +Shortened power registry names (would break former saves, if forge was not already breaking those) + + +B52 - 1.18.2 + +Halve vial drinking time +Fix bug where amount of metal from vial is not calculated properly +Fix allomancy boost effect not draining metals properly. +Burn time is now based on metal type, so some burn longer than others. +Burn time stat tracking per metal. +Ported 1.18 patchouli changes to 1.19 + + +1.18.2-B50/1.19-B51 + +Atium spikes prefer stealing atium powers +Fix consuming lerasium/lerasatium via vial not granting powers. +Fix feru-nicrosil preventing the player from storing identity. +Fixed crash related to consuming nuggets directly +Fix being able to spam nuggets directly, rather than consuming via vial. +Creative menu has vials filled with the 16 metals +Menu listed ingested metals in correct order +Check powers can be used on self w/o admin perm +Mousing over results from commands can list base and total strength of powers. +Added summon_metalborn cheat command + + +B49 + +F-Atium - increase/decrease health, speed, damage, knockback etc. based on tap amount. (needs testing) +Zinc feruchemy multiplies current xp gain rate, rather than adds to it. +Cleaned up attribute system, fixes bug where allomancy boost affect was changing size attribute directly +Stop nicrosil disabling itself during feruchemical storage. +Stop cats and llamas generating with powers (catquisitors and mistborn llamas are made, not born) +Updated patchouli documentation (Thanks Luke! 🎉) +Allow bonus rolls on cosmere loot tables again +Don't rename mobs based on starting powers (because bronze allomancy should be valuable) +Temporarily make honorblades use the test shardblade model (no more huge pink and black cube from missing model). +Ability to make blend from raw, dust or ingots. No more having to keep raw materials around just in case. Temporary till we have fabrial machines. +Electrum ingots can be used for piglin bartering (needs testing) +Feru cadmium gets minor speed buff for highly oxygenated blood +Fix menu not drawing single powers correctly (eg having all allomancy but only one feruchemical power) +Stop god metal spikes from generating as loot in loot chests +Catquisitors will reign supreme +The mistborn llamas may be our only hope + + +B48 + +Updated patchouli documentation for allomancy. +Fix chromium spikes having weird values from loot chests +hide flashing icons in hud. +Feruchemy effects are now 'neutral'. Should stop corail tombstone mod giving you "Storing Cadmium V" and making you suffocate. +Change feruchemy tap cost to be mode^1.5 instead of mode^2. Shouldn't be so devastating to tap high amounts now. +Stop spiritwebs being attached to creepers/skeletons and other such mobs. Things should run a little smoother now. +Storing enough brass will extinguish yourself if you're on fire. Requires mode 4, or Store Brass IV effect. +Feru nicrosil maybe sorta working? Though only if you actually have feru nicrosil, no medallions yet. +Hopefully fixing various effects stuttering that happens on slower connections +Atium feruchemy inverted, so you store size, becoming smaller when storing, larger when tapping. +Fix other people not seeing size changes from atium + + +B47 + +New textures! +Metalminds now able to be filled twice as much +Copper, tin and chromium spikes found in loot chests properly invested +stop nicrosilminds from loot chests being filled + + +B46 + +Fix servers not booting + + +B45 + +Fix misting/ferring names being lower case. +Fix bronze allomancy hwyla tooltip show powers a mob has. Players still only show what's active. +F-tin should no longer cutting out on laggy connections +Double bendalloy tap cost if player full and only tapping for saturation +Fix bottle to vial recipe +Zero bonus rolls on injected loot +Make pillager metalborn rarer +Fix coin pouch 'take' animation, playing even when full. +Fix clients not calling on mode change, when modes change. +Fix potential crash in single player mode when trying to get player names. +Cats now have decent night vision to steal. +Very early implementation of feru atium, which stores 'smallness'. Expect it to change. + + +B44 + +Fix tapping gold only healing one hp regardless of tap amount +Crafting filled vials now take into account how much metal was in the vial before. +Copper/Bronze allomancy checks strength +Fix nicrosil crash +Tin store now affects render distance. +Brass store has reduceable fire damage +Fix some menu radial button icon overlap +Lerasatium spikes get all powers at 50% of donors strength. +Hide cosmere curios when invisible potion effect applied +Fix F-Zinc being inverted. +Spawned mob metalborn have ferring/misting names if they only have one power +Fix deactivate manifestations not clearing modes on client +Strength in metal dependent on how you got it. Misting/twinborn are slightly stronger than full feruchemist/mistborn. God metal granting powers grant 'ancient' strength. +A-Bronze now competes against copper cloud effect in order to make entities and see information in hwyla. +Mode increase/decrease affected by shift/ctrl. +Wearing gold metalminds/spikes makes piglins neutral. + + +B43 + +Allomantic tin now has does incremental night vision improvement, rather than doing the potion effect. +HWYLA limited to bronze allomancy and what's active +Fix feruchemy bronze not storing to metalmind. +Fixed a bug where manifestation strength was incorrect +Made it so Feruchemical strength actually matters. Dictates how much you can store/tap. +Fix feruchemical iron to increase gravity. +Fix bands of mourning creative item not granting powers + + +B42 + +Fix icons not rendering when certain other mods are installed. +Fix metalminds from loot chests incorrectly listing themselves as unsealed instead of unkeyed. + + +B41 + +Changed compound amount to be dependent on allomantic strength and mode. +Tidied up player clone code for when player dies or returns from the end. +Feruchemical copper now stores full levels, rather than xp points. +Updated cosmere to build against forge version 40.1.30 +Renamed lynch to linch. +Spikes available in more chests. +Fix creative mode lerasium spikes containing powers, they've been moved to lerasatium spikes. +Clear iron/steel push pull list when turning off powers. +Fix crash from trying to use the guide book when patchouli is not installed. + + +B40 + +Curio spike and bracelet rendering again! Yay :D +Allomancy boost fix. Was accidentally making weaker instead of stronger. +Allow tapping aluminum at a larger rate, so it's faster to drain and re-use. +Fix spikes not auto equipping from mods like corail tombstone. +Adding more stuff to the default iron/steel whitelist + + +B39 + +Fix hemalurgic spikes not stealing powers properly + + +B38 + +Make allo bendalloy only slow people around you +fix feru gold storing not working when health was full. +fix feru bendalloy for real this time. +Better menu handling for over 16 powers +Better menu information for what powers are active. +fix mobs getting reinitialized on being reloaded, gaining powers when they shouldn't. +fix metalworking table not dropping when broken +fix hemalurgy not actually taking powers from player entities. + + +B37 + +Buffed compounding attribute gain amount. +Added death by spike localisation. +Fixed mod blocks being slow to mine. Should be faster with correct tool. +Fixed tapping1 gold not doing anything. +Fixed storing gold not updating health properly. +Fixed feru gold removing from metalmind even when fully healthy +Made feru gold reduce harmful effect timer each time gold tap effect ticks. +Fixed a bunch of effects not running at tap 1 or two +Fixed feru bendalloy not giving saturation. + + +B36 + +Fixed hemalurgic spikes constantly damaging when used as feruchemical storage. +Fixed aluminum feruchemy so it can't make unkeyed metalminds. +Some progress towards fixing nicrosil metalminds. +Some set up for proper advancements. Currently not triggering correctly. Does not have correct localisation. +Attempts at making metal traders not so imbalanced. + +B35 + +Fix commands not working on server. +Fixed bug that crashed players trying to use the coin pouch or allomantic iron/steel. + +B34 + +Fixed server crashing due to Cosmere. Duralumin feruchemy was trying to run client side code on the server, for hiding a nameplate while storing oops + +B33 + +Coinshots can now shoot coins! Crouch and right click a coin pouch to open pouch inventory and add metal nuggets. +Then hold your allomancy push keybind and use (right click) the coin pouch. You'll shoot out a projectile that you'll automatically be pushing against. +If you have allomantic iron, you can pull those projectiles directly back into your coin pouch or inventory. + +B32 + +Fix feruchemy not working with completely empty metalminds. +Fix bands of mourning, storing when full caused it to overflow and start from 0 again. + +B31 + +Tapping feruchemical bronze will reset time since sleep timer. +Fixing bug that caused powers not to persist through death. +Lerasium spikes now steal attributes, like they are supposed to. Lerasatium spikes steal all powers. +Decreased spiritweb nbt save size by a bunch. +Better spike tooltips. +Iron/Steel tries to approximate which non-mod items and entities contain metal. +Iron/Steel can push and pull mob and item entities. +Allomancy mode lists off, burning and flaring modes when selected power. + +B30 + +Fixed brass feruchemy not letting player set others on fire at high burn rates. +Buffed electrum feruchemy to be more noticeable. +Changed copper allomancy effect name from "Burning Copper", to "Copper Cloud". +Fixed and updated patchouli documentation. Hemalurgy now has better descriptions. +Fixed cosmere fortune bonus. +Fix looting event crash when there's a null damage source. +Make Cosmere's ores half as common, because they were ridiculously common. + + +B29 + +Fixing deepslate ore, no more pink texture or missing name. Also potentially better ore spawn frequency so it actually appears in deepslate. + +B28 + +First build on 1.18.2. Spike/Metalmind rendering temporarily broken. Potentially other things too + +B27 + +Fixed crash related to bronze allomancy checking if an entity should be glowing + +B26 + +This build contains breaking changes. Players, metalminds and spikes will not load related powers that were saved to them. +Removed accidental character left in village_blacksmith loot table json. +Hemalurgic Tin, Copper, Chromium, Aluminum spikes implemented. +Added Bands Of Mourning creative item. Grants allomancy & feruchemy. +Fixed metal vial amounts. Made nuggets annoying to eat, to encourage vial use. +Prep work for Roshar. +Gem stone item added (not yet available via world gen). Gemstones charge when outside in thunderstorms. Charge faster when not in player inventory. + + +B25 +Fixed some loot chests not being injected into +Implemented ability for partially charged unsealed metalminds to be found in loot chests. +Updated metal trader potential trades, now sets costs, amounts, trades per day and xp per trade based on item rarity. +Updated a lot of loot chest loot. Look for hemalurgically charged spikes, invested metalminds and atium/lerasium beads and raw ore in various chests. Still checking that I've got the loot tables working correctly, but I was able to get things to show up rarely in chests. + + + +B24 + +Fixed creative mode spikes to only contain their correct powers, not both allomancy and feruchemy. +Added localisation for spike tooltips. No more 'cosmere.trueself'. +Non-scroll wheel based power mode increase/decrease +Wandering trader and several Illager types added to list of potential metalborn mobs. +Boosted ore spawn rate. Was closer to diamond, now is near iron levels of distribution +Fixed some item tagging, so raw ore items from other mods should be more compatible. +Fixed iron spike tool tip so it doesn't list empty power. Now lists attack damage granted. +Updated a lot of the loot chest tables to have a chance of adding items from Cosmere, like ores in the mineshaft or lerasium nuggets in rarer loot chests. + +B23 + +Duralumin feruchemy tapping gives Hero of the Village effect. +Fixed a crash related to bronze feruchemy. Player can now sleep at night anywhere properly. +Cleaned up a bunch of scripts. +Swapped the bendalloy and cadmium effects, so cadmium speeds up things around you, implying you're really slow and bendalloy slows things around you, implying that you're faster. + +B22 + +Remove curse of binding from spikes. +Fix bracelet curio render location. +Consume minecraft:iron/gold nuggets. +Lerasium & Lerasatium can be consumed to gain powers. +Added missing localisation for hemalurgic spike creative mode tab. +Fixed bronze allomancy glow effect. + + +B21 + +Fixed Mixin related crash + +B20 + +Localisation should now use "manifestation type - metal type" instead of the name of the manifestation for allomancy and feruchemy. Eg "Feruchemical Steel" instead of Steelrunner. +Fixed some balancing of the metalminds, so that it's 1000 capacity per ingot used to make it. + +B19 + +The creative mode menu now has a more comprehensive list of hemalurgic spikes with the abilities that they can steal +Remove our own Gold/Iron Nuggets from being created. +Added metalmind descriptions to JEI/NEI +Stop the game crashing when patchouli isn't installed, oops +Shortened allomancy guide book listings, as it doesn't create extra pages for you if you throw too much at it. +Use pewter nugget for allomancy icon in guide book for now. Was metal vial which has no icon yet. +Made iron pulling quite a bit stronger (0.064, was 0.008) + +B18 + +Bumped forge version to 36.2.0 +Changed Gold feruchemy to have lower hearts when storing and then regen-like effect when tapping. +Prep for cosmere related loot to start showing up in chests +Making allomancy last longer than a few seconds per bead. now lasts between 60-180 seconds. Easier for testing till we adjust burn rates by metal. +Fixed a bug in logic for hemalurgy spikes being used as metalminds when equipped. No more constant damage every time the item nbt updates! +Fixed a bug where allomancy users would gain more metals when burning instead of less. oops. +Fixed a bug in feruchemy where the game would stop trying to store attributes in the next metalmind when the first one was full. +Fixing a bug with chromium allomancy causing a full crash of the game oops. + + +B17 + +Added a creative mode only shard blade to test a model that was created using blockbench. +Fixing some bugs related to soothing and rioting. May have to look into updating the entity goals, since it doesn't seem to affect passive mobs +Initial framework for patchouli datagen provider. Wont have to make a couple hundred json completely by hand anymore +Initial framework for advancement datagen provider. +Visual updates to ring/bracelet png. + +B16 + +Auto select a power if none are selected. Only really relevant for first time joining world. +Fixed crash from mousing over creative debug hemalurgy spike that gives all powers in inventory. +Spikes now show up in more varied locations based on curio slot. +Remove key bind check on most allomancy + + +B15 + +Adding nuggets to bottles/vials that can then be consumed. +Iron/steel sight. Steel pushing set up. Iron pushing not yet implemented. +Starting to use allomantic/feruchemical strength that the user either starts with or steals with feruchemy. +Duralumin/Nicrosil initial framework set up, though untested. +Fixed a bug where player powers were not persisting across death. +Big spiritweb menu refactor, now I actually understand what's going on there. + +B14 + +Adding illagers and witches to possible powered individuals. +Adding electrum feruchemy. Not sure how happy I am with it. Reduces/increases damage taken a small amount. Any suggestions on what storing/tapping determination could do would be appreciated. +Have also removed annoying mode change message and updated the debug text so it says selected power and what mode the selected power is in. +Big refactor to convert to using attributes instead of capability to track what powers you currently have access to. + +B13 + +All feruchemy basically done except for nicrosil and electrum. +Players are twinborn at a minimum, or they are granted either full allomancy or full feruchemy. +Fine tuned feruchemical bronze storing, so it doesn’t spam chat with sleep messages. +Fine tuned brass feruchemy, so that tapping brass actually does something. Sets others on fire if tapping enough when attacking. Sets self on fire if tapping too much. + +B12 + +Following 1.17 style of ore blocks dropping raw ore, rather than the block itself. +Raw ore is affected by fortune. +Alloys are made out of raw ore for the most part. Recipes are visible in the JEI mod. +Fixed up tin feruchemy so it provides zoom instead of night vision. +Fixed night vision in tin allomancy so it doesn’t spam flash the screen on low night vision timer left. + +B11 + +World generation done! You can find the new ores out in the world now. +Zinc feruchemy gives more experience when tapping, less experience when storing. +Gold feruchemy acts more like poison and regeneration, except the reduced health is dependent on how much health you are storing. +Storing identity with duralumin will hide your nameplate if you’re storing enough. Visibility to mobs is also dependent on how much you’re storing + +B9 + +Ore blocks exist but not generating in the world + +B8 and below. + +Initial commit, never kept track of what the build had then really. +Some feruchemy, +basic gui, +swallowing metal for allomancy etc. +Hemalurgy initial pass too. +Compounding also is in there. diff --git a/docs/release_57.txt b/docs/release_57.txt new file mode 100644 index 000000000..512673c2c --- /dev/null +++ b/docs/release_57.txt @@ -0,0 +1,3 @@ +Cosmere successfully split into several submods! +Allomancy, Feruchemy, Hemalurgy, Surgebinding +They each have their own project page and are designed to be modular, with Cosmere mod serving to connect them together. \ No newline at end of file diff --git a/docs/release_64.txt b/docs/release_64.txt new file mode 100644 index 000000000..c11fb324d --- /dev/null +++ b/docs/release_64.txt @@ -0,0 +1,3 @@ +Sandmastery has been added to the Cosmere Suite! + +Other commits for this updated mod suite version: \ No newline at end of file diff --git a/docs/release_69.txt b/docs/release_69.txt new file mode 100644 index 000000000..1ef1067d7 --- /dev/null +++ b/docs/release_69.txt @@ -0,0 +1,40 @@ +Good News Everyone! + +Welcome to build 69 (nice). This is primarily a TLC (tender loving care) update for the physical metals of the allomancy mod. + +- Allomantic Iron and Steel big overhaul! Thanks to Gerbagel, we've had huge improvements to performance. It now scans for metal on a completely different thread, which by itself is amazing. On top of that, we've revamped how it draws on the screen, single lines for groups of metal in world next to eachother, blocks should be outlined in blue and all together running smoothly. +- Tin also gets some love, in addition to helping improve your vision at night (which now smoothly transitions as you change burn modes), we have added some visual effects to the world. While burning, you will see sculk particles towards you for sounds in the world, as well as a note icon at the position where the sound is coming from. This is a work in progress, please provide feedback after you've tried it out. On top of that, I've added the beginnings of The Mists, available only in the overworld and happening only on nights of prime numbers (should reset every 100 days). Tin will help you see through the mists, but it's still a work in progress. +- Pewter! Finally, after all this time, it takes your strength in the metal into account when improving your different stats. No more having to share with potion effects. There's also delayed damage, so maybe don't stop burning pewter after a fight till your body has had some time to recover. This is separate from your normal health. The more damage that pewter mitigates, the more damage you will have to deal with when you stop burning pewter. Again, feedback requested. + +This leads us into another big change, we no longer use the mob effects system! This gives us a lot more control over how powers add and subtract from your attributes, and means people will no longer have an idea of what powers your using by looking at the effects you have in Jade. It does also mean that old worlds will have issues, and it's not something we can fix. Sorry about that. Use old worlds at your own risk. + +Other than the physical metals TLC, we have other changes too! +- Bronze and Copper have had some pretty significant changes to how they work. Like the fact that they actually work now. Copper should now more accurately protect from bronze, and multiple copper clouds can pool their strength together to help defend against it. Bronze should also be giving a proper thump sound when there's someone nearby with powers too. +- There's also a way to get bronze now too, but it's not easy. Hope you like the Warden. +- Zinc, brass, cadmium and electrum should now be more efficient in how they scan for entities nearby (Thanks Gerbagel!). This is a performance change only, my bad code for how they work has remained the same. +- Hope you are prepared for Koloss! Thanks to Hawk, these friendly fellows (to illagers only) are now in the mod and head out on patrols regularly. They come in three different sizes from small to huge. +- Feruchemical nicrosil has had sooooooome fixes. You won't be able to compound right now, but you can store and tap your investiture, letting someone else use your powers for a time, or make yourself twice as strong in your own powers. It should now also properly give and take away your powers based on store and tap and not last forever oops. It's a work in progress, but it's a start. +- Lerasium was too common, so now the rates have been drastically lowered. More changes to come in future as we're still unhappy with how it works at the moment. +- Max strength increased from 20 to 32. Thanks to the above performance improvements, I'm happier to increase the max strength. Give it a good stress test, and let me know if you find any issues. +- With help from AngelOfCreation, from discord, we now have more spike locations! Spikes are going to more closely follow canon, in that certain spike metals go into certain bind points. God metal spikes can go in any slot. Check out the official hemalurgy poster and this wob for more details: https://wob.coppermind.net/events/377/#e12283 + +Unrelated to the metallic arts: + +- Thanks to Gerbagel, we've got some visual improvements to the spiritweb menu, feruchemy even tells you how much of each attribute you have stored. Exciting! +- We've also added configs! We're in the process of adding more to it, but feel free to take a look and customise as you like. Some things are server side only, others client side only, all should have it listed in the name. Please be understanding that not all suggestions for configs can go in these files, due to software limitations or that they would instead need to be datapacks. +- Some general improvements across the board for the guide book! Special thanks go to Luke for helping out with this. It's not quite where I want it yet, but every update I'm hoping to improve it a little bit more, it's important to me that people can use it as a point of truth on how the mod works at that exact moment. + +Other than that, there's some small changes for surgebinding: +- Feel free to take a peek at the chull entity (Thanks Hawk for the model and texture). They don't do much yet, but you can feed them wheat and ride them around! +- As well as the cryptic and a few new plants that we will be using in the future (Thanks goes to Eliot and the stormcraft team for donating their assets). +- Fixed a bug where gemstones would float in the world that isn't roshar. How'd that even happen? + +Sand Mastery! +- Hope you like drinking, as there's now the ability to make a qido, a type of water bottle. This will be the resource needed for your sand mastery based abilities. + +Some known issues (unfortunately): +- Incompatible with old worlds! Unfortunately by changing the way we handle the mob effects, we had to change the way we store the data. This means that old worlds will not work with this update. Sorry about that. Use old worlds at your own risk. +- Occasionally the metal sight and tin sight will bug out and not draw on top of other blocks or things in the way. This is due to another mod in your pack. If you figure out which one, let me know so we can fix our compatibility with it :) +- Some things may declare themselves as containing metal when they shouldn't. Please provide latest.log file in a bug report in discord, or on the github. + +Other commits for this updated mod suite version: \ No newline at end of file diff --git a/docs/release_77.txt b/docs/release_77.txt new file mode 100644 index 000000000..69323937f --- /dev/null +++ b/docs/release_77.txt @@ -0,0 +1,30 @@ +Good News Everyone! + +Welcome to build 73 and most importantly, Aviar! + +[Aviar](https://coppermind.net/wiki/Aviar) are companion birds that grant different abilities to the player based on their breed. As this mod is part of the Cosmere Mod Suite, it uses the [Cosmere library mod](https://legacy.curseforge.com/minecraft/mc-mods/cosmere).  + +## Disclaimer! + +Because we only know about 2 breeds of aviar in the canon lore (and because we can pretend that minecraft parrots are different breeds from those on Patji), the abilities granted in the mod may not completely be canon accurate. We plan to update this over time as more lore becomes available, or learn how to better convert aviar abilities to satisfying minecraft gameplay. + +## How To: +To get an aviar, you will need two things. + +The fruit of patji, which can be rarely found in the wandering trader's list of trades. It's expensive! Costing both emeralds and a nether star, but this is a very rare, off-world piece of fruit we are talking about here! +A minecraft parrot. The breed of which determines what bonus you will get when the companion is nearby. +Once you have both, right-click the fruit of patji on the parrot to convert it into an Aviar. + +And that's it! You will now passively get a bonus when they are nearby. "But what bonuses will I get?", I hear you ask. Well here you go, depending on the breed, you will get one of the following per companion. + +[list] +[*] Cognitive concealment (hide from the Warden or other players when using your other Cosmere based abilities). +[*] Increased block fortune and entity looting. +[*] Doubled XP gain. +[*] Decrease damage from all sources by +[*] See what mobs are targeting you (makes them glow), as a sort of potentially hostile life-sense. +[/list] + +Should you need any extra info, such as what each breed grants what power, check out the ars arcanum guide book when you're in game. Each player is given one on entering a world for the first time :) + +Other commits for this updated mod suite version: \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index e64c08f66..119c4283e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,15 +1,31 @@ # -#Fri May 21 17:55:17 NZST 2021 -mappings_version=20210309-1.16.5 -forge_version=1.16.5-36.1.0 +# File updated ~ 20 - 11 - 2024 ~ Leaf +# +org.gradle.jvmargs=-Xmx3G org.gradle.daemon=false -mappings_type=snapshot -jar_name=Cosmere-Mod -minecraft_version=1.16.5 -org.gradle.jvmargs=-Xmx8G -jei_version=1.16.4\:7.6.0.62 -hwyla_version=1.10.11-B78_1.16.2 -curios_version=1.16.5-4.0.5.1 -mod_version=0.3.1 -build_number=16 -patchouli_version=1.16.4-50 +java_version=17 +# Minecraft/Forge +minecraft_version=1.20.1 +forge_version=47.3.0 +#mod +mod_version=0.7 +# Mappings +mappings_channel=parchment +mappings_version=2023.09.03-1.20.1 +# mods.toml version settings +loader_version_range=[47,) +forge_version_range=[47,) +minecraft_version_range=[1.20.1,1.21) +# mods.toml dependency version settings +patchouli_version_range=[1.20.1-84,) +curios_version_range=[5.2.0+1.20.1,) +jei_version_range=[15.2.0.20,) +jade_version_range=[11.2.2,) +#Mod dependencies +# https://maven.theillusivec4.top/top/theillusivec4/curios/curios-forge/ +curios_version=5.10.0+1.20.1 +patchouli_version=1.20.1-84 +jade_api_id=4712550 +jade_id=4711195 +soulhome_id=4856432 +jei_version=15.2.0.27 diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 0d4a95168..7f93135c4 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 1c4bcc29e..8838ba97b 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,7 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.8.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-all.zip +networkTimeout=10000 +validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index cccdd3d51..aeb74cbb4 100644 --- a/gradlew +++ b/gradlew @@ -1,78 +1,126 @@ -#!/usr/bin/env sh +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ############################################################################## -## -## Gradle start up script for UN*X -## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# ############################################################################## # Attempt to set APP_HOME + # Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null - -APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS="" +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" +MAX_FD=maximum warn () { echo "$*" -} +} >&2 die () { echo echo "$*" echo exit 1 -} +} >&2 # OS specific support (must be 'true' or 'false'). cygwin=false msys=false darwin=false nonstop=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; - NONSTOP* ) - nonstop=true - ;; +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; esac CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + # Determine the Java command to use to start the JVM. if [ -n "$JAVA_HOME" ] ; then if [ -x "$JAVA_HOME/jre/sh/java" ] ; then # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" + JAVACMD=$JAVA_HOME/jre/sh/java else - JAVACMD="$JAVA_HOME/bin/java" + JAVACMD=$JAVA_HOME/bin/java fi if [ ! -x "$JAVACMD" ] ; then die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME @@ -81,7 +129,7 @@ Please set the JAVA_HOME variable in your environment to match the location of your Java installation." fi else - JAVACMD="java" + JAVACMD=java which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the @@ -89,84 +137,109 @@ location of your Java installation." fi # Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac fi -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) -# For Cygwin, switch paths to Windows format before running java -if $cygwin ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - JAVACMD=`cygpath --unix "$JAVACMD"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) fi - i=$((i+1)) + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg done - case $i in - (0) set -- ;; - (1) set -- "$args0" ;; - (2) set -- "$args0" "$args1" ;; - (3) set -- "$args0" "$args1" "$args2" ;; - (4) set -- "$args0" "$args1" "$args2" "$args3" ;; - (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; - esac fi -# Escape application args -save () { - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done - echo " " -} -APP_ARGS=$(save "$@") - -# Collect all arguments for the java command, following the shell quoting and substitution rules -eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" -# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong -if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then - cd "$(dirname "$0")" +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" fi +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat index f9553162f..93e3f59f1 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -1,4 +1,20 @@ -@if "%DEBUG%" == "" @echo off +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%"=="" @echo off @rem ########################################################################## @rem @rem Gradle startup script for Windows @@ -9,19 +25,23 @@ if "%OS%"=="Windows_NT" setlocal set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS= +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" @rem Find java.exe if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init +if %ERRORLEVEL% equ 0 goto execute echo. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. @@ -35,7 +55,7 @@ goto fail set JAVA_HOME=%JAVA_HOME:"=% set JAVA_EXE=%JAVA_HOME%/bin/java.exe -if exist "%JAVA_EXE%" goto init +if exist "%JAVA_EXE%" goto execute echo. echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% @@ -45,38 +65,26 @@ echo location of your Java installation. goto fail -:init -@rem Get command-line arguments, handling Windows variants - -if not "%OS%" == "Windows_NT" goto win9xME_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* - :execute @rem Setup the command line set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + @rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* :end @rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd +if %ERRORLEVEL% equ 0 goto mainEnd :fail rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% :mainEnd if "%OS%"=="Windows_NT" endlocal diff --git a/src/main/resources/cosmere_icon.png b/logo.png similarity index 100% rename from src/main/resources/cosmere_icon.png rename to logo.png diff --git a/logs/latest.log b/logs/latest.log deleted file mode 100644 index e69de29bb..000000000 diff --git a/settings.gradle b/settings.gradle new file mode 100644 index 000000000..da4c9573b --- /dev/null +++ b/settings.gradle @@ -0,0 +1,32 @@ +pluginManagement { + repositories { + gradlePluginPortal() + /*maven { + name "NeoForge" + url "https://maven.neoforged.net/releases/" + }*/ + maven { + name = 'MinecraftForge' + url = 'https://maven.minecraftforge.net/' + } + maven { + name 'parchment' + url 'https://maven.parchmentmc.org' + } + } + + resolutionStrategy { + eachPlugin { + if (requested.id.toString() == "org.spongepowered.mixin") { + useModule("org.spongepowered:mixingradle:${requested.version}") + } + if (requested.id.toString() == "net.minecraftforge.gradle") { + useModule("${requested.id}:ForgeGradle:${requested.version}") + } + } + } +} + +plugins { + id 'org.gradle.toolchains.foojay-resolver-convention' version '0.7.0' +} diff --git a/src/allomancy/java/leaf/cosmere/allomancy/client/AllomancyKeybindings.java b/src/allomancy/java/leaf/cosmere/allomancy/client/AllomancyKeybindings.java new file mode 100644 index 000000000..50c634d14 --- /dev/null +++ b/src/allomancy/java/leaf/cosmere/allomancy/client/AllomancyKeybindings.java @@ -0,0 +1,68 @@ +/* + * File updated ~ 8 - 10 - 2022 ~ Leaf + */ + +package leaf.cosmere.allomancy.client; + +import leaf.cosmere.allomancy.common.Allomancy; +import leaf.cosmere.allomancy.common.manifestation.AllomancyManifestation; +import leaf.cosmere.api.Metals; +import leaf.cosmere.client.Keybindings; +import leaf.cosmere.api.Activator; +import net.minecraft.client.KeyMapping; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.client.event.RegisterKeyMappingsEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.common.Mod.EventBusSubscriber.Bus; +import org.lwjgl.glfw.GLFW; +import leaf.cosmere.api.EnumUtils; +import java.util.function.Function; + +import java.util.Arrays; +import java.util.Map; +import java.util.stream.Collectors; + +import static leaf.cosmere.allomancy.common.registries.AllomancyManifestations.ALLOMANCY_POWERS; +import static leaf.cosmere.api.Constants.Strings.*; + +@Mod.EventBusSubscriber(value = Dist.CLIENT, modid = Allomancy.MODID, bus = Bus.MOD) +public class AllomancyKeybindings +{ + public static KeyMapping ALLOMANCY_STEEL_PUSH; + public static KeyMapping ALLOMANCY_IRON_PULL; + public static KeyMapping ALLOMANCY_SOOTHE; + public static KeyMapping ALLOMANCY_RIOT; + + + public static final Map ALLOMANCY_POWER = + Arrays.stream(EnumUtils.METAL_TYPES) + .filter(Metals.MetalType::hasAssociatedManifestation) + .collect(Collectors.toMap( + Function.identity(), + metalType -> + new KeyMapping(KEY_ALLOMANCY + metalType.getName(),GLFW.GLFW_KEY_UNKNOWN,KEYS_ACTIVATE_CATEGORY) + )); + + @SubscribeEvent + public static void register(RegisterKeyMappingsEvent event) + { + event.register(ALLOMANCY_STEEL_PUSH = new KeyMapping(KEY_ALLOMANCY_STEEL_PUSH, GLFW.GLFW_KEY_TAB, KEYS_CATEGORY)); + event.register(ALLOMANCY_IRON_PULL = new KeyMapping(KEY_ALLOMANCY_IRON_PULL, GLFW.GLFW_KEY_R, KEYS_CATEGORY)); + event.register(ALLOMANCY_SOOTHE = new KeyMapping(KEY_ALLOMANCY_SOOTHE, GLFW.GLFW_KEY_UNKNOWN, KEYS_CATEGORY)); + event.register(ALLOMANCY_RIOT = new KeyMapping(KEY_ALLOMANCY_RIOT, GLFW.GLFW_KEY_UNKNOWN, KEYS_CATEGORY)); + + + + for (Metals.MetalType metalType: ALLOMANCY_POWER.keySet()) + { + KeyMapping key = ALLOMANCY_POWER.get(metalType); + AllomancyManifestation manifest = ALLOMANCY_POWERS.get(metalType).getManifestation(); + event.register(key); + Activator entry = new Activator(key, manifest); + entry.setCategory("allomancy"); + Keybindings.activators.add(entry); + } + } + +} diff --git a/src/allomancy/java/leaf/cosmere/allomancy/client/eventHandlers/AllomancyClientEvents.java b/src/allomancy/java/leaf/cosmere/allomancy/client/eventHandlers/AllomancyClientEvents.java new file mode 100644 index 000000000..96baad45e --- /dev/null +++ b/src/allomancy/java/leaf/cosmere/allomancy/client/eventHandlers/AllomancyClientEvents.java @@ -0,0 +1,70 @@ +/* + * File updated ~ 8 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.allomancy.client.eventHandlers; + +import leaf.cosmere.allomancy.common.Allomancy; +import leaf.cosmere.allomancy.common.capabilities.world.IScadrial; +import leaf.cosmere.allomancy.common.capabilities.world.ScadrialCapability; +import leaf.cosmere.allomancy.common.manifestation.AllomancyIronSteel; +import leaf.cosmere.allomancy.common.manifestation.AllomancyTin; +import net.minecraft.client.Minecraft; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.material.FogType; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.client.event.RecipesUpdatedEvent; +import net.minecraftforge.client.event.ViewportEvent; +import net.minecraftforge.client.event.sound.PlaySoundEvent; +import net.minecraftforge.common.util.LazyOptional; +import net.minecraftforge.eventbus.api.EventPriority; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; + +import java.util.Optional; + +@Mod.EventBusSubscriber(modid = Allomancy.MODID, value = Dist.CLIENT) +public class AllomancyClientEvents +{ + @SubscribeEvent(priority = EventPriority.HIGHEST) + public static void onRecipesUpdated(final RecipesUpdatedEvent event) + { + AllomancyIronSteel.invalidateWhitelist(); + } + + @SubscribeEvent + public static void onRenderFog(ViewportEvent.RenderFog event) + { + final Minecraft mc = Minecraft.getInstance(); + Player player = mc.player; + Level level = mc.level; + + //check dimension - + if (player == null || event.getCamera().getFluidInCamera() != FogType.NONE) + { + return; + } + + //check capability + // todo - check this only happens to whatever dimension scadrial is attached to. currently overworld. + LazyOptional cap = ScadrialCapability.get(level); + final Optional resolve = cap.resolve(); + + if (!cap.isPresent() || resolve.isEmpty()) + { + return; + } + + //must exist + ScadrialCapability scadrial = (ScadrialCapability) resolve.get(); + + scadrial.tickFog(event, player); + } + + @SubscribeEvent + public static void onPlaySoundEvent(PlaySoundEvent event) + { + AllomancyTin.onSound(event); + } +} diff --git a/src/allomancy/java/leaf/cosmere/allomancy/client/eventHandlers/AllomancyModClientEvents.java b/src/allomancy/java/leaf/cosmere/allomancy/client/eventHandlers/AllomancyModClientEvents.java new file mode 100644 index 000000000..344f8d170 --- /dev/null +++ b/src/allomancy/java/leaf/cosmere/allomancy/client/eventHandlers/AllomancyModClientEvents.java @@ -0,0 +1,86 @@ +/* + * File updated ~ 20 - 11 - 2024 ~ Leaf + */ + +package leaf.cosmere.allomancy.client.eventHandlers; + +import leaf.cosmere.allomancy.client.gui.CoinPouchContainerScreen; +import leaf.cosmere.allomancy.client.render.AllomancyLayerDefinitions; +import leaf.cosmere.allomancy.client.render.AllomancyRenderers; +import leaf.cosmere.allomancy.client.render.model.MistcloakModel; +import leaf.cosmere.allomancy.common.Allomancy; +import leaf.cosmere.allomancy.common.coinpouch.CoinPouchContainerMenu; +import leaf.cosmere.allomancy.common.registries.AllomancyEntityTypes; +import leaf.cosmere.allomancy.common.registries.AllomancyMenuTypes; +import leaf.cosmere.api.CosmereAPI; +import net.minecraft.client.gui.screens.MenuScreens; +import net.minecraft.client.renderer.entity.ThrownItemRenderer; +import net.minecraft.core.registries.Registries; +import net.minecraft.world.inventory.MenuType; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.client.event.EntityRenderersEvent; +import net.minecraftforge.eventbus.api.EventPriority; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; +import net.minecraftforge.registries.RegisterEvent; + +@Mod.EventBusSubscriber(modid = Allomancy.MODID, value = Dist.CLIENT, bus = Mod.EventBusSubscriber.Bus.MOD) +public class AllomancyModClientEvents +{ + + @SubscribeEvent + public static void init(final FMLClientSetupEvent event) + { + AllomancyRenderers.register(); + CosmereAPI.logger.info("Allomancy client setup complete!"); + } + + @SubscribeEvent(priority = EventPriority.LOW) + public static void registerContainers(RegisterEvent event) + { + event.register(Registries.MENU, helper -> + { + MenuScreens.register((MenuType) AllomancyMenuTypes.COIN_POUCH.get(), CoinPouchContainerScreen::new); + CosmereAPI.logger.info("Allomancy registered menutypes!"); + }); + } + + @SubscribeEvent + public static void RegisterRenderers(EntityRenderersEvent.RegisterRenderers event) + { + event.registerEntityRenderer(AllomancyEntityTypes.COIN_PROJECTILE.get(), ThrownItemRenderer::new); + } + + @SubscribeEvent + public static void registerLayers(final EntityRenderersEvent.RegisterLayerDefinitions evt) + { + //shardplate + evt.registerLayerDefinition(AllomancyLayerDefinitions.MISTCLOAK, MistcloakModel::createBodyLayer); + } + + /* todo - re setup power icon registration + //special thank you to the chisels and bits team who have an example of how to register other sprites + @SubscribeEvent + public static void registerIconTextures(TextureStitchEvent.Pre event) + { + final TextureAtlas map = event.getAtlas(); + if (!map.location().equals(InventoryMenu.BLOCK_ATLAS)) + { + return; + } + + event.addSprite(Allomancy.rl("icon/allomancy")); + + for (final Metals.MetalType metalType : EnumUtils.METAL_TYPES) + { + if (!metalType.hasAssociatedManifestation()) + { + continue; + } + + String metalToLower = metalType.toString().toLowerCase(Locale.ROOT); + event.addSprite(Allomancy.rl("icon/allomancy/" + metalToLower)); + } + }*/ +} diff --git a/src/allomancy/java/leaf/cosmere/allomancy/client/gui/CoinPouchContainerScreen.java b/src/allomancy/java/leaf/cosmere/allomancy/client/gui/CoinPouchContainerScreen.java new file mode 100644 index 000000000..643732269 --- /dev/null +++ b/src/allomancy/java/leaf/cosmere/allomancy/client/gui/CoinPouchContainerScreen.java @@ -0,0 +1,67 @@ +/* + * File updated ~ 10 - 8 - 2024 ~ Leaf + */ + +package leaf.cosmere.allomancy.client.gui; + +import com.mojang.blaze3d.systems.RenderSystem; +import leaf.cosmere.allomancy.common.Allomancy; +import leaf.cosmere.allomancy.common.coinpouch.CoinPouchContainerMenu; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.Font; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; +import net.minecraft.client.renderer.GameRenderer; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.player.Inventory; + + +public class CoinPouchContainerScreen extends AbstractContainerScreen +{ + final ResourceLocation resourceLocation = new ResourceLocation(Allomancy.MODID, "textures/gui/coin_pouch.png"); + + public CoinPouchContainerScreen(CoinPouchContainerMenu container, Inventory playerInv, Component title) + { + super(container, playerInv, title); + minecraft = Minecraft.getInstance(); + } + + @Override + protected void init() + { + this.imageHeight = 140; + this.imageWidth = 193; + + super.init(); + } + + @Override + public void render(GuiGraphics guiGraphics, int x, int y, float partialTicks) + { + this.renderBackground(guiGraphics); + super.render(guiGraphics, x, y, partialTicks); + this.renderTooltip(guiGraphics, x, y); + } + + @Override + protected void renderBg(GuiGraphics guiGraphics, float partialTicks, int mouseX, int mouseY) + { + RenderSystem.setShader(GameRenderer::getPositionTexShader); + RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); + RenderSystem.setShaderTexture(0, resourceLocation); + + int xPos = (width - imageWidth) / 2; + int yPos = (height / 2) - (imageHeight / 2); + guiGraphics.blit(resourceLocation, xPos, yPos, 0, 0, imageWidth, imageHeight); + + } + + @Override + protected void renderLabels(GuiGraphics guiGraphics, int mouseX, int mouseY) + { + //write the name of the itemstack + guiGraphics.drawString(this.font, this.title.getString(), this.titleLabelX, this.titleLabelY, 4210752, false); + } + +} diff --git a/src/allomancy/java/leaf/cosmere/allomancy/client/metalScanning/BlockScanResult.java b/src/allomancy/java/leaf/cosmere/allomancy/client/metalScanning/BlockScanResult.java new file mode 100644 index 000000000..fe60b9d17 --- /dev/null +++ b/src/allomancy/java/leaf/cosmere/allomancy/client/metalScanning/BlockScanResult.java @@ -0,0 +1,88 @@ +/* + * File updated ~ 5 - 4 - 2023 ~ Leaf + */ + +package leaf.cosmere.allomancy.client.metalScanning; + + +import net.minecraft.core.BlockPos; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.Vec3; + +import javax.annotation.Nullable; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Set; + +/* + * Largely based on Scannable, so we can use their concept of block clusters + * Obtained at 5 - 4 - 2023 + * https://github.com/MightyPirates/Scannable/blob/d543d2ee6181d5d61010b64a1824096141c81fcd/src/main/java/li/cil/scannable/client/scanning/ScanResultProviderBlock.java + */ +public final class BlockScanResult +{ + private AABB bounds; + @Nullable + private BlockScanResult parent; + private final Set blocks; + + public BlockScanResult(final BlockPos pos) + { + bounds = new AABB(pos); + blocks = new HashSet<>(); + blocks.add(pos); + } + + boolean isRoot() + { + return parent == null; + } + + public BlockScanResult getRoot() + { + if (parent != null) + { + return parent.getRoot(); + } + return this; + } + + public void setRoot(final BlockScanResult root) + { + if (root == this) + { + return; + } + + assert parent == null; + + root.bounds = root.bounds.minmax(bounds); + root.blocks.addAll(blocks); + blocks.clear(); + parent = root; + } + + public void add(final BlockPos pos) + { + assert parent == null : "Trying to add to non-root node."; + bounds = bounds.minmax(new AABB(pos)); + blocks.add(pos); + } + + @Nullable + public AABB getRenderBounds() + { + return bounds; + } + + public Vec3 getPosition() + { + return bounds.getCenter(); + } + + public ArrayList getBlocks() + { + return new ArrayList<>(blocks); + } + +} \ No newline at end of file diff --git a/src/allomancy/java/leaf/cosmere/allomancy/client/metalScanning/IronSteelLinesThread.java b/src/allomancy/java/leaf/cosmere/allomancy/client/metalScanning/IronSteelLinesThread.java new file mode 100644 index 000000000..ca476010c --- /dev/null +++ b/src/allomancy/java/leaf/cosmere/allomancy/client/metalScanning/IronSteelLinesThread.java @@ -0,0 +1,454 @@ +/* + * File updated ~ 16 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.allomancy.client.metalScanning; + +import leaf.cosmere.allomancy.common.manifestation.AllomancyIronSteel; +import leaf.cosmere.api.CosmereAPI; +import leaf.cosmere.api.CosmereTags; +import leaf.cosmere.api.IHasMetalType; +import leaf.cosmere.api.Metals; +import leaf.cosmere.api.helpers.EntityHelper; +import net.minecraft.client.Minecraft; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Vec3i; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.BlockTags; +import net.minecraft.tags.TagKey; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.Vec3; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; + +import java.util.Arrays; +import java.util.ConcurrentModificationException; +import java.util.Objects; +import java.util.concurrent.atomic.AtomicReference; +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReentrantLock; + +import static leaf.cosmere.allomancy.common.manifestation.AllomancyIronSteel.containsMetal; +import static leaf.cosmere.allomancy.common.manifestation.AllomancyIronSteel.entityContainsMetal; + +public class IronSteelLinesThread implements Runnable +{ + private static IronSteelLinesThread INSTANCE; + private static Thread t; + private static final Lock lock = new ReentrantLock(); + private static ScanResult scanResult = new ScanResult(); + private static Vec3 closestMetalObjectInLookVector; + private final double tolerance = 1.8D; + private static int scanRange = 0; + private static boolean isStopping = false; + + + TagKey aluminumOre; + TagKey aluminumStorage; + // these two below may or may not work, better to keep them than remove + TagKey aluminumSheet; + TagKey aluminumWire; + + public static IronSteelLinesThread getInstance() + { + if (INSTANCE == null) + { + INSTANCE = new IronSteelLinesThread(); + } + + return INSTANCE; + } + + private IronSteelLinesThread() + { + aluminumOre = CosmereTags.Blocks.METAL_ORE_BLOCK_TAGS.get(Metals.MetalType.ALUMINUM); + aluminumStorage = CosmereTags.Blocks.METAL_BLOCK_TAGS.get(Metals.MetalType.ALUMINUM); +// these two below may or may not work, better to keep them than remove + aluminumSheet = BlockTags.create(new ResourceLocation("sheetmetals/aluminum")); + aluminumWire = BlockTags.create(new ResourceLocation("wires/aluminum")); + } + + + //creates new thread if needed + public static void startThread() + { + getInstance().start(); + } + + //stops and kills thread + public static void stopThread(boolean restart) + { + if (INSTANCE != null) + { + INSTANCE.stop(); + INSTANCE = null; + if (restart) + { + startThread(); + } + } + } + + public ScanResult requestScanResult() + { + lock.lock(); + try + { + return scanResult; + } + catch (Exception e) + { + e.printStackTrace(); + lock.unlock(); + return new ScanResult(); // empty ScanResult so it doesn't crash + } + } + + public int getWeight() + { + if (scanResult.hasTargetedCluster) + { + return scanResult.targetedCluster.getBlocks().size(); + } + return 1; + } + + public void releaseScanResult() + { + lock.unlock(); + } + + public void setScanRange(int range) + { + scanRange = range; + } + + public Vec3 getClosestMetalObject() + { + if (closestMetalObjectInLookVector == null) + { + return null; + } + + // return copy adjusted for center + return new Vec3(closestMetalObjectInLookVector.x(), closestMetalObjectInLookVector.y(), closestMetalObjectInLookVector.z()); + } + + public void start() + { + if (t == null || isStopping) + { + CosmereAPI.logger.info("Starting lines thread"); + t = new Thread(this, "lines_thread"); + isStopping = false; + t.start(); + } + } + + public void stop() + { + if (t != null && !isStopping) + { + isStopping = true; + } + } + + private void setScanResult(ScanResult result) + { + scanResult = result; + } + + private void setClosestMetalObject(Vec3 vector) + { + closestMetalObjectInLookVector = vector; + } + + private Vec3i toVec3i(Vec3 vector) + { + if (vector == null) + { + return null; + } + + return new Vec3i((int) vector.x(), (int) vector.y(), (int) vector.z()); + } + + // this should be threaded to avoid lag spikes on the render thread when flaring metals + @Override + @OnlyIn(Dist.CLIENT) + public void run() + { + final Minecraft mc = Minecraft.getInstance(); + boolean restartThread = false; + while (!isStopping) + { + try + { + AtomicReference closestMetalThingLookedAt = new AtomicReference<>(null); + ScanResult nextScan; + LocalPlayer playerEntity = mc.player; + nextScan = new ScanResult(); + // todo: add configurable tick rate for this thread + + //find all the things that we want to draw a line to from the player + //metal blocks + { + BlockPos.withinManhattanStream(playerEntity.blockPosition(), scanRange, scanRange, scanRange) + .filter(blockPos -> + { + Block block = playerEntity.level().getBlockState(blockPos).getBlock(); + final boolean validMetalBlock = block instanceof IHasMetalType iHasMetalType && iHasMetalType.getMetalType() != Metals.MetalType.ALUMINUM; + boolean isGood = validMetalBlock || containsMetal(block); + + if (isGood) + { + Player player = Minecraft.getInstance().player; + Level level = Minecraft.getInstance().level; + // if level is null, the player has no world loaded, so stop + if (player == null || mc.level == null) + { + stopThread(false); + return false; + } + isGood = !isBlockObscured(blockPos, player, level); + + if (isGood) + { + // compare player look vector to directional vector + closestMetalThingLookedAt.set(compareVectors(blockPos, player, closestMetalThingLookedAt.get())); + } + } + + return isGood; + }) + .forEach(blockPos -> nextScan.addBlock(blockPos.immutable(), closestMetalThingLookedAt.get())); + + Vec3 possibleClosestMetalObject = nextScan.finalizeClusters(); + if (possibleClosestMetalObject != null) + { + closestMetalThingLookedAt.set(possibleClosestMetalObject); + } + } + + //entities with metal armor/tools + { + EntityHelper.getEntitiesInRange(playerEntity, scanRange, false).forEach(entity -> + { + try + { + Player player = Minecraft.getInstance().player; + Level level = Minecraft.getInstance().level; + // if level is null, the player has no world loaded, so stop + if (player == null || mc.level == null) + { + stopThread(false); + return; + } + if (entityContainsMetal(entity) + && !isEntityObscured(entity, player, level)) + { + nextScan.foundEntities.add( + entity.position().add( + 0, + entity.getBoundingBox().getYsize() / 2, + 0)); + closestMetalThingLookedAt.set(compareVectors(entity.position().add(0, entity.getBoundingBox().getYsize() / 2, 0), player, closestMetalThingLookedAt.get())); + } + } + catch (ConcurrentModificationException coModE) + { + // we can ignore this safely, probably + // if this comes back to bite us, I, Gerbagel, take no responsibility + } + }); + } + + if (lock.tryLock()) + { + setScanResult(nextScan); + setClosestMetalObject(closestMetalThingLookedAt.get()); + lock.unlock(); + } + } + catch (Exception e) + { + CosmereAPI.logger.info("Unexpected exception in lines thread: \n" + Arrays.toString(e.getStackTrace())); + restartThread = true; + + break; + } + } + stopThread(restartThread); + } + + private boolean isBlockObscured(BlockPos blockPos, Player player, Level level) + { + boolean isObscured; + Vec3 currVec = player.getEyePosition(); + currVec = currVec.add(-1D, 0D, 0D); + Vec3 endPos = blockPos.getCenter(); + endPos = endPos.add(-1D, 0D, 0D); + Vec3 endFloorVec = new Vec3(Math.floor(endPos.x), Math.floor(endPos.y), Math.floor(endPos.z)); + double resistance = 0.0F; + + // linear interpolation to see if the block is obscured by blocks + int loopTimes = (int) Math.ceil(currVec.distanceTo(endPos)); + for (int i = 0; i < loopTimes; i++) + { + BlockState bState = Objects.requireNonNull(level.getBlockState(new BlockPos(toVec3i(currVec)))); + Vec3 currFloorVec = new Vec3(Math.floor(currVec.x), Math.floor(currVec.y), Math.floor(currVec.z)); + + if (currFloorVec.equals(endFloorVec) || resistance >= 1.0F) + { + break; + } + + Block currBlock = bState.getBlock(); + + if (bState.is(aluminumOre) + || bState.is(aluminumStorage) + || bState.is(aluminumSheet) + || bState.is(aluminumWire) + || (currBlock instanceof IHasMetalType iHasMetalType && iHasMetalType.getMetalType() == Metals.MetalType.DURALUMIN)) + { + // aluminum completely blocks steelsight + resistance += 1.0F; + } + else + { + resistance += AllomancyIronSteel.getResistance(bState); + } + + double distance = currVec.distanceTo(endPos); + currVec = currVec.lerp(endPos, 1.0F / distance); + } + + isObscured = resistance >= 1.0F; + return isObscured; + } + + private boolean isEntityObscured(Entity entity, Player player, Level level) + { + double resistance = 0.0F; + try + { + Vec3 currVec = player.getEyePosition(); + currVec = currVec.add(-0.75D, 0D, 0D); + Vec3 endPos = entity.position(); + endPos = endPos.add(-0.75D, 0D, 0D); + + // linear interpolation to see if the entity is obscured by blocks + int loopTimes = (int) Math.ceil(currVec.distanceTo(endPos)); + for (int i = 0; i < loopTimes; i++) + { + BlockState bState = Objects.requireNonNull(level.getBlockState(new BlockPos(toVec3i(currVec)))); + + final boolean pastEntity = (player.getEyePosition().distanceTo(currVec) >= player.getEyePosition().distanceTo(endPos)); + + if (pastEntity || resistance >= 1.0F) + { + break; + } + + Block currBlock = level.getBlockState(new BlockPos(toVec3i(currVec))).getBlock(); + + if (bState.is(aluminumOre) || bState.is(aluminumStorage) || bState.is(aluminumSheet) || bState.is(aluminumWire) || (currBlock instanceof IHasMetalType iHasMetalType && iHasMetalType.getMetalType() == Metals.MetalType.DURALUMIN)) + { + // aluminum completely blocks steelsight + resistance += 1.0F; + } + else + { + resistance += AllomancyIronSteel.getResistance(bState); + } + + double distance = currVec.distanceTo(endPos); + currVec = currVec.lerp(endPos, 1.0F / distance); + + } + } + catch (Exception e) + { + e.printStackTrace(); + resistance = 100.0F; // just to be sure :) + } + + if (resistance < 1.0F) + { + //entity is not obscured, can be added to the list + return false; + } + + //entity obscured + return true; + } + + private Vec3 compareVectors(BlockPos blockPos, Player player, Vec3 currentClosestMetalObject) + { + Vec3 lookVector = player.getLookAngle(); + Vec3 vectorToPos = blockPos.getCenter().subtract(player.getEyePosition()); + Vec3 playerPos = player.getEyePosition(); + vectorToPos = vectorToPos.normalize(); + + double dynamicTolerance = tolerance / playerPos.distanceTo(blockPos.getCenter()); + + if (vectorToPos.distanceTo(lookVector) < dynamicTolerance) + { + if (currentClosestMetalObject == null) + { + return blockPos.getCenter(); + } + + Vec3 currentVector = currentClosestMetalObject.subtract(player.getEyePosition()); + currentVector = currentVector.normalize(); + + if (vectorToPos.distanceTo(lookVector) > currentVector.distanceTo(lookVector)) + { + return currentClosestMetalObject; + } + else + { + return blockPos.getCenter(); + } + } + + return currentClosestMetalObject; + } + + private Vec3 compareVectors(Vec3 pos, Player player, Vec3 currentClosestMetalObject) + { + Vec3 lookVector = player.getLookAngle(); + Vec3 vectorToPos = pos.subtract(player.getEyePosition()); + Vec3 playerPos = player.getEyePosition(); + vectorToPos = vectorToPos.normalize(); + + double dynamicTolerance = tolerance / playerPos.distanceTo(pos); + + if (vectorToPos.distanceTo(lookVector) < dynamicTolerance) + { + if (currentClosestMetalObject == null) + { + return pos; + } + + Vec3 currentVector = currentClosestMetalObject.subtract(player.getEyePosition()); + currentVector = currentVector.normalize(); + + if (vectorToPos.distanceTo(lookVector) > currentVector.distanceTo(lookVector)) + { + return currentClosestMetalObject; + } + else + { + return pos; + } + } + + return currentClosestMetalObject; + } +} diff --git a/src/allomancy/java/leaf/cosmere/allomancy/client/metalScanning/ScanResult.java b/src/allomancy/java/leaf/cosmere/allomancy/client/metalScanning/ScanResult.java new file mode 100644 index 000000000..ffa9d3bc1 --- /dev/null +++ b/src/allomancy/java/leaf/cosmere/allomancy/client/metalScanning/ScanResult.java @@ -0,0 +1,132 @@ +/* + * File updated ~ 7 - 6 - 2023 ~ Leaf + */ + +package leaf.cosmere.allomancy.client.metalScanning; + +import net.minecraft.core.BlockPos; +import net.minecraft.world.phys.Vec3; + +import javax.annotation.Nullable; +import java.util.*; + +/* + * Largely based on Scannable, so we can use their concept of block clusters + * Obtained at 5 - 4 - 2023 + * https://github.com/MightyPirates/Scannable/blob/d543d2ee6181d5d61010b64a1824096141c81fcd/src/main/java/li/cil/scannable/client/scanning/ScanResultProviderBlock.java + */ +public final class ScanResult +{ + public final List foundEntities = new ArrayList<>(); + public final List foundBlocks = new ArrayList<>(); + public BlockScanResult targetedCluster = null; + public boolean hasTargetedCluster = false; + + public final List clusterResults = new ArrayList<>(); + private final Map clusters = new HashMap<>(); + + public List clusterCenters = new ArrayList<>(); + + + public void Clear() + { + foundEntities.clear(); + foundBlocks.clear(); + clusterResults.clear(); + clusters.clear(); + } + + public void addBlock(BlockPos blockPos, Vec3 currentClosestMetalObject) + { + foundBlocks.add(blockPos); + + //Has a cluster been made nearby already? + if (!tryAddToCluster(clusters, blockPos, currentClosestMetalObject)) + { + //if not, make a new cluster + final BlockScanResult result = new BlockScanResult(blockPos); + clusters.put(blockPos, result); + clusterResults.add(result); + } + } + + private boolean tryAddToCluster(final Map clusters, final BlockPos pos, Vec3 currentClosestMetalObject) + { + BlockScanResult root = null; + + List directions = getNeighbors(pos); + + for (BlockPos direction : directions) + { + root = tryAddToCluster(clusters, pos, direction, root); + } + + if (root != null && currentClosestMetalObject != null) + { + if (targetedCluster != root && root.getBlocks().contains(BlockPos.containing(currentClosestMetalObject))) + { + targetedCluster = root; + hasTargetedCluster = true; + } + } + + return root != null; + } + + @Nullable + private BlockScanResult tryAddToCluster(final Map clusters, final BlockPos pos, final BlockPos clusterPos, @Nullable BlockScanResult root) + { + final BlockScanResult cluster = clusters.get(clusterPos); + if (cluster == null) + { + return root; + } + + if (root == null) + { + root = cluster.getRoot(); + root.add(pos); + clusters.put(pos, root); + } + else + { + cluster.getRoot().setRoot(root); + } + + return root; + } + + private static List getNeighbors(BlockPos start) + { + List neighbors = new ArrayList<>(); + + for (int x = -1; x <= 1; x++) + { + for (int y = -1; y <= 1; y++) + { + for (int z = -1; z <= 1; z++) + { + // Skip the start block + if (x == 0 && y == 0 && z == 0) + { + continue; + } + neighbors.add(start.offset(x, y, z)); + } + } + } + + return neighbors; + } + + public Vec3 finalizeClusters() + { + clusterCenters = clusterResults.stream().map(BlockScanResult::getPosition).toList(); + + if (hasTargetedCluster) + { + return targetedCluster.getPosition(); + } + return null; + } +} diff --git a/src/allomancy/java/leaf/cosmere/allomancy/client/render/AllomancyLayerDefinitions.java b/src/allomancy/java/leaf/cosmere/allomancy/client/render/AllomancyLayerDefinitions.java new file mode 100644 index 000000000..a42005f60 --- /dev/null +++ b/src/allomancy/java/leaf/cosmere/allomancy/client/render/AllomancyLayerDefinitions.java @@ -0,0 +1,13 @@ +/* + * File updated ~ 5 - 8 - 2023 ~ Leaf + */ + +package leaf.cosmere.allomancy.client.render; + +import leaf.cosmere.allomancy.common.Allomancy; +import net.minecraft.client.model.geom.ModelLayerLocation; + +public class AllomancyLayerDefinitions +{ + public static final ModelLayerLocation MISTCLOAK = new ModelLayerLocation(Allomancy.rl("mistcloak"), "mistcloak"); +} diff --git a/src/allomancy/java/leaf/cosmere/allomancy/client/render/AllomancyRenderers.java b/src/allomancy/java/leaf/cosmere/allomancy/client/render/AllomancyRenderers.java new file mode 100644 index 000000000..259053d21 --- /dev/null +++ b/src/allomancy/java/leaf/cosmere/allomancy/client/render/AllomancyRenderers.java @@ -0,0 +1,24 @@ +/* + * File updated ~ 7 - 8 - 2023 ~ Leaf + */ + +package leaf.cosmere.allomancy.client.render; + +import leaf.cosmere.allomancy.client.render.renderer.MistcloakRenderer; +import leaf.cosmere.allomancy.common.registries.AllomancyItems; +import top.theillusivec4.curios.api.client.CuriosRendererRegistry; +import top.theillusivec4.curios.api.client.ICurioRenderer; + +import java.util.function.Supplier; + +public class AllomancyRenderers +{ + + public static void register() + { + final Supplier mistcloak = MistcloakRenderer::new; + CuriosRendererRegistry.register(AllomancyItems.MISTCLOAK.get(), mistcloak); + } + + +} diff --git a/src/allomancy/java/leaf/cosmere/allomancy/client/render/model/MistcloakModel.java b/src/allomancy/java/leaf/cosmere/allomancy/client/render/model/MistcloakModel.java new file mode 100644 index 000000000..8611eef1a --- /dev/null +++ b/src/allomancy/java/leaf/cosmere/allomancy/client/render/model/MistcloakModel.java @@ -0,0 +1,266 @@ +/* + * File updated ~ 14 - 8 - 2023 ~ Leaf + */ + +package leaf.cosmere.allomancy.client.render.model; + +// Made with Blockbench 4.3.1 +// Exported for Minecraft version 1.17 - 1.18 with Mojang mappings +// Paste this class into your mod and generate all required imports + + +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import leaf.cosmere.allomancy.common.Allomancy; +import net.minecraft.client.model.HumanoidModel; +import net.minecraft.client.model.geom.ModelPart; +import net.minecraft.client.model.geom.PartPose; +import net.minecraft.client.model.geom.builders.*; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.entity.ItemRenderer; +import net.minecraft.client.renderer.texture.OverlayTexture; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.decoration.ArmorStand; + +public class MistcloakModel extends HumanoidModel +{ + private static final ResourceLocation TEXTURE = Allomancy.rl("textures/models/armor/mistcloak.png"); + + private final ModelPart Root; + private final ModelPart hat; + private final ModelPart left_leg; + private final ModelPart right_leg; + private final ModelPart head; + private final ModelPart body; + private final ModelPart left_arm; + private final ModelPart right_arm; + + public MistcloakModel(ModelPart root) + { + super(root, RenderType::entityCutoutNoCull); + + this.Root = root; + this.hat = root.getChild("hat"); + this.left_leg = root.getChild("left_leg"); + this.right_leg = root.getChild("right_leg"); + this.head = root.getChild("head"); + this.body = root.getChild("body"); + this.left_arm = root.getChild("left_arm"); + this.right_arm = root.getChild("right_arm"); + } + + public static LayerDefinition createBodyLayer() + { + MeshDefinition meshdefinition = new MeshDefinition(); + PartDefinition partdefinition = meshdefinition.getRoot(); + + PartDefinition hat = partdefinition.addOrReplaceChild("hat", CubeListBuilder.create().texOffs(24, 0).addBox(4.0F, -8.0F, -4.0F, 0.125F, 8.0F, 8.0F, new CubeDeformation(0.0F)) + .texOffs(0, 24).addBox(-4.125F, -8.0F, -4.0F, 0.125F, 8.0F, 8.0F, new CubeDeformation(0.0F)) + .texOffs(16, 37).addBox(-4.125F, -8.0F, 4.0F, 8.25F, 8.0F, 0.0625F, new CubeDeformation(0.0F)) + .texOffs(2, 8).addBox(-4.125F, -8.0F, -4.0625F, 1.0F, 8.0F, 0.0625F, new CubeDeformation(0.0F)) + .texOffs(16, 0).addBox(-4.125F, -8.0625F, -4.0625F, 8.25F, 0.0625F, 8.125F, new CubeDeformation(0.0F)) + .texOffs(0, 8).addBox(3.125F, -8.0F, -4.0625F, 1.0F, 8.0F, 0.0625F, new CubeDeformation(0.0F)) + .texOffs(36, 48).addBox(-3.125F, -8.0F, -4.0625F, 6.25F, 1.0F, 0.0625F, new CubeDeformation(0.0F)) + .texOffs(36, 47).addBox(-3.125F, -8.0F, -4.0625F, 6.25F, 1.0F, 0.0625F, new CubeDeformation(0.0F)) + .texOffs(2, 0).addBox(-4.125F, -8.0F, -4.0625F, 1.0F, 8.0F, 0.0625F, new CubeDeformation(0.0F)) + .texOffs(0, 0).addBox(-4.125F, -8.0625F, -4.0625F, 8.25F, 0.0625F, 8.125F, new CubeDeformation(0.0F)) + .texOffs(0, 0).addBox(3.125F, -8.0F, -4.0625F, 1.0F, 8.0F, 0.0625F, new CubeDeformation(0.0F)) + .texOffs(16, 21).addBox(4.0F, -8.0F, -4.0F, 0.125F, 8.0F, 8.0F, new CubeDeformation(0.0F)) + .texOffs(0, 16).addBox(-4.125F, -8.0F, -4.0F, 0.125F, 8.0F, 8.0F, new CubeDeformation(0.0F)) + .texOffs(0, 16).addBox(-4.125F, 0.0F, -4.0625F, 8.25F, 0.0625F, 8.125F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, 24.0F, 0.0F)); + + PartDefinition left_leg = partdefinition.addOrReplaceChild("left_leg", CubeListBuilder.create(), PartPose.offset(0.0F, 24.0F, 0.0F)); + + PartDefinition right_leg = partdefinition.addOrReplaceChild("right_leg", CubeListBuilder.create(), PartPose.offset(0.0F, 24.0F, 0.0F)); + + PartDefinition head = partdefinition.addOrReplaceChild("head", CubeListBuilder.create(), PartPose.offset(0.0F, 24.0F, 0.0F)); + + PartDefinition body = partdefinition.addOrReplaceChild("body", CubeListBuilder.create().texOffs(20, 20).addBox(-4.0F, -8.4745F, -2.5423F, 8.0F, 5.0F, 4.0F, new CubeDeformation(0.0F)) + .texOffs(0, 8).addBox(-4.125F, -8.4745F, -4.6048F, 8.25F, 0.0625F, 8.125F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, 32.4745F, 0.5423F)); + + PartDefinition body_r1 = body.addOrReplaceChild("body_r1", CubeListBuilder.create().texOffs(0, 0).addBox(6.0F, -1.1684F, 1.7913F, 1.0F, 0.25F, 6.0F, new CubeDeformation(0.0F)) + .texOffs(11, 24).addBox(5.0F, -1.1684F, 2.7913F, 1.0F, 0.25F, 5.0F, new CubeDeformation(0.0F)) + .texOffs(0, 12).addBox(8.0F, -1.1059F, -1.2087F, 1.0F, 0.1875F, 4.0F, new CubeDeformation(0.0F)) + .texOffs(30, 16).addBox(8.0F, -1.0434F, -10.2087F, 1.0F, 0.125F, 4.0F, new CubeDeformation(0.0F)) + .texOffs(29, 44).addBox(8.0F, -1.1059F, -6.2087F, 1.0F, 0.1875F, 5.0F, new CubeDeformation(0.0F)) + .texOffs(13, 24).addBox(8.0F, -1.1684F, 2.7913F, 1.0F, 0.25F, 5.0F, new CubeDeformation(0.0F)) + .texOffs(34, 41).addBox(7.0F, -1.1059F, -4.2087F, 1.0F, 0.1875F, 6.0F, new CubeDeformation(0.0F)) + .texOffs(0, 6).addBox(7.0F, -1.1684F, 1.7913F, 1.0F, 0.25F, 6.0F, new CubeDeformation(0.0F)) + .texOffs(18, 45).addBox(7.0F, -1.0434F, -9.2087F, 1.0F, 0.125F, 5.0F, new CubeDeformation(0.0F)) + .texOffs(0, 12).addBox(9.0F, -1.1684F, 1.7913F, 1.0F, 0.25F, 6.0F, new CubeDeformation(0.0F)) + .texOffs(36, 41).addBox(9.0F, -1.1059F, -4.2087F, 1.0F, 0.1875F, 6.0F, new CubeDeformation(0.0F)) + .texOffs(20, 45).addBox(9.0F, -1.0434F, -9.2087F, 1.0F, 0.125F, 5.0F, new CubeDeformation(0.0F)) + .texOffs(22, 45).addBox(2.0F, -1.0434F, -9.2087F, 1.0F, 0.125F, 5.0F, new CubeDeformation(0.0F)) + .texOffs(38, 41).addBox(2.0F, -1.1059F, -4.2087F, 1.0F, 0.1875F, 6.0F, new CubeDeformation(0.0F)) + .texOffs(0, 18).addBox(2.0F, -1.1684F, 1.7913F, 1.0F, 0.25F, 6.0F, new CubeDeformation(0.0F)) + .texOffs(24, 45).addBox(4.0F, -1.0434F, -9.2087F, 1.0F, 0.125F, 5.0F, new CubeDeformation(0.0F)) + .texOffs(38, 27).addBox(4.0F, -1.1684F, 1.7913F, 1.0F, 0.25F, 6.0F, new CubeDeformation(0.0F)) + .texOffs(40, 41).addBox(4.0F, -1.1059F, -4.2087F, 1.0F, 0.1875F, 6.0F, new CubeDeformation(0.0F)) + .texOffs(39, 7).addBox(3.0F, -1.1684F, 2.7913F, 1.0F, 0.25F, 5.0F, new CubeDeformation(0.0F)) + .texOffs(0, 45).addBox(3.0F, -1.1059F, -6.2087F, 1.0F, 0.1875F, 5.0F, new CubeDeformation(0.0F)) + .texOffs(36, 20).addBox(3.0F, -1.0434F, -10.2087F, 1.0F, 0.125F, 4.0F, new CubeDeformation(0.0F)) + .texOffs(0, 16).addBox(3.0F, -1.1059F, -1.2087F, 1.0F, 0.1875F, 4.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-6.0F, -0.611F, -2.0574F, 1.4835F, 0.0F, 0.0F)); + + PartDefinition body_r2 = body.addOrReplaceChild("body_r2", CubeListBuilder.create().texOffs(23, 29).addBox(0.0F, -0.1563F, -10.25F, 1.0F, 0.25F, 9.0F, new CubeDeformation(0.0F)) + .texOffs(25, 38).addBox(0.0F, -0.0938F, -1.25F, 1.0F, 0.1875F, 7.0F, new CubeDeformation(0.0F)) + .texOffs(6, 40).addBox(0.0F, -0.0313F, 5.75F, 1.0F, 0.125F, 7.0F, new CubeDeformation(0.0F)) + .texOffs(42, 27).addBox(1.0F, -0.0938F, -2.25F, 1.0F, 0.1875F, 6.0F, new CubeDeformation(0.0F)) + .texOffs(30, 29).addBox(1.0F, -0.1563F, -10.25F, 1.0F, 0.25F, 8.0F, new CubeDeformation(0.0F)) + .texOffs(44, 20).addBox(1.0F, -0.0313F, 3.75F, 1.0F, 0.125F, 6.0F, new CubeDeformation(0.0F)) + .texOffs(26, 45).addBox(3.0F, -0.0313F, 1.75F, 1.0F, 0.125F, 5.0F, new CubeDeformation(0.0F)) + .texOffs(40, 27).addBox(3.0F, -0.1563F, -10.25F, 1.0F, 0.25F, 6.0F, new CubeDeformation(0.0F)) + .texOffs(42, 41).addBox(3.0F, -0.0938F, -4.25F, 1.0F, 0.1875F, 6.0F, new CubeDeformation(0.0F)) + .texOffs(41, 0).addBox(2.0F, -0.0313F, 0.5F, 1.0F, 0.125F, 7.0F, new CubeDeformation(0.0F)) + .texOffs(39, 0).addBox(2.0F, -0.0938F, -6.5F, 1.0F, 0.1875F, 7.0F, new CubeDeformation(0.0F)) + .texOffs(44, 47).addBox(2.0F, -0.1563F, -10.25F, 1.0F, 0.25F, 3.75F, new CubeDeformation(0.0F)) + .texOffs(0, 22).addBox(-3.0F, -0.1563F, -10.25F, 1.0F, 0.25F, 2.0F, new CubeDeformation(0.0F)) + .texOffs(39, 20).addBox(-3.0F, -0.0938F, -8.25F, 1.0F, 0.1875F, 7.0F, new CubeDeformation(0.0F)) + .texOffs(41, 7).addBox(-3.0F, -0.0313F, -1.25F, 1.0F, 0.125F, 7.0F, new CubeDeformation(0.0F)) + .texOffs(44, 0).addBox(-4.0F, -0.0938F, -4.25F, 1.0F, 0.1875F, 6.0F, new CubeDeformation(0.0F)) + .texOffs(30, 41).addBox(-4.0F, -0.1563F, -10.25F, 1.0F, 0.25F, 6.0F, new CubeDeformation(0.0F)) + .texOffs(45, 26).addBox(-4.0F, -0.0313F, 1.75F, 1.0F, 0.125F, 5.0F, new CubeDeformation(0.0F)) + .texOffs(45, 31).addBox(-2.0F, -0.0313F, 1.75F, 1.0F, 0.125F, 5.0F, new CubeDeformation(0.0F)) + .texOffs(32, 41).addBox(-2.0F, -0.1563F, -10.25F, 1.0F, 0.25F, 6.0F, new CubeDeformation(0.0F)) + .texOffs(44, 6).addBox(-2.0F, -0.0938F, -4.25F, 1.0F, 0.1875F, 6.0F, new CubeDeformation(0.0F)) + .texOffs(41, 20).addBox(-1.0F, -0.0313F, 3.75F, 1.0F, 0.125F, 7.0F, new CubeDeformation(0.0F)) + .texOffs(0, 40).addBox(-1.0F, -0.0938F, -3.25F, 1.0F, 0.1875F, 7.0F, new CubeDeformation(0.0F)) + .texOffs(37, 0).addBox(-1.0F, -0.1563F, -10.25F, 1.0F, 0.25F, 7.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(0.0F, 1.6469F, 3.0837F, -1.3963F, 0.0F, 0.0F)); + + PartDefinition left_arm = partdefinition.addOrReplaceChild("left_arm", CubeListBuilder.create().texOffs(36, 33).addBox(-2.836F, -6.3344F, -2.2414F, 4.0F, 4.0F, 4.0F, new CubeDeformation(0.0F)), PartPose.offset(6.836F, 30.3344F, 0.2414F)); + + PartDefinition left_arm_r1 = left_arm.addOrReplaceChild("left_arm_r1", CubeListBuilder.create().texOffs(0, 16).addBox(-2.0F, -1.1684F, 5.7913F, 1.0F, 0.25F, 2.0F, new CubeDeformation(0.0F)) + .texOffs(37, 20).addBox(-2.0F, -1.1059F, -1.2087F, 1.0F, 0.1875F, 7.0F, new CubeDeformation(0.0F)) + .texOffs(2, 40).addBox(-2.0F, -1.0434F, -8.2087F, 1.0F, 0.125F, 7.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-0.836F, 1.5291F, -1.7565F, 1.4835F, 0.0F, 0.0F)); + + PartDefinition left_arm_r2 = left_arm.addOrReplaceChild("left_arm_r2", CubeListBuilder.create().texOffs(35, 7).addBox(0.5F, -0.1563F, 2.75F, 1.0F, 0.25F, 5.0F, new CubeDeformation(0.0F)) + .texOffs(3, 47).addBox(0.5F, -0.0313F, -4.25F, 1.0F, 0.125F, 4.0F, new CubeDeformation(0.0F)) + .texOffs(49, 0).addBox(0.5F, -0.0938F, -0.25F, 1.0F, 0.1875F, 3.0F, new CubeDeformation(0.0F)) + .texOffs(33, 0).addBox(-0.5F, -0.1563F, 0.75F, 1.0F, 0.25F, 7.0F, new CubeDeformation(0.0F)) + .texOffs(26, 16).addBox(-0.5F, -0.0938F, -3.25F, 1.0F, 0.1875F, 4.0F, new CubeDeformation(0.0F)) + .texOffs(49, 15).addBox(-0.5F, -0.0313F, -6.25F, 1.0F, 0.125F, 3.0F, new CubeDeformation(0.0F)) + .texOffs(26, 29).addBox(-1.5F, -0.1563F, -0.25F, 1.0F, 0.25F, 8.0F, new CubeDeformation(0.0F)) + .texOffs(49, 3).addBox(-1.5F, -0.0938F, -3.25F, 1.0F, 0.1875F, 3.0F, new CubeDeformation(0.0F)) + .texOffs(5, 47).addBox(-1.5F, -0.0313F, -7.25F, 1.0F, 0.125F, 4.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-0.336F, 1.3997F, -2.7612F, 1.4835F, 0.0F, 0.0F)); + + PartDefinition left_arm_r3 = left_arm.addOrReplaceChild("left_arm_r3", CubeListBuilder.create().texOffs(51, 26).addBox(-3.0F, -2.0313F, 8.5F, 2.0F, 0.125F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(42, 49).addBox(-5.0F, -2.0938F, 8.5F, 2.0F, 0.1875F, 1.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(0.6034F, 2.9033F, -7.7414F, 0.0F, 0.0F, 1.3963F)); + + PartDefinition left_arm_r4 = left_arm.addOrReplaceChild("left_arm_r4", CubeListBuilder.create().texOffs(49, 50).addBox(-8.5F, -2.1563F, 8.5F, 4.0F, 0.25F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(51, 27).addBox(-0.5F, -2.0313F, 7.5F, 2.0F, 0.125F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(14, 50).addBox(-5.5F, -2.0938F, 7.5F, 5.0F, 0.1875F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(40, 50).addBox(-8.5F, -2.1563F, 7.5F, 3.0F, 0.25F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(49, 36).addBox(-8.5F, -2.1563F, 6.5F, 5.0F, 0.25F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(20, 51).addBox(-3.5F, -2.0938F, 6.5F, 3.0F, 0.1875F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(51, 23).addBox(-0.5F, -2.0313F, 6.5F, 3.0F, 0.125F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(51, 28).addBox(-1.5F, -2.0313F, 5.5F, 2.0F, 0.125F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(51, 21).addBox(-4.5F, -2.0938F, 5.5F, 3.0F, 0.1875F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 51).addBox(-8.5F, -2.1563F, 5.5F, 4.0F, 0.25F, 1.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(0.5165F, 2.4109F, -7.7414F, 0.0F, 0.0F, 1.3963F)); + + PartDefinition left_arm_r5 = left_arm.addOrReplaceChild("left_arm_r5", CubeListBuilder.create().texOffs(36, 29).addBox(6.0F, -0.0313F, -3.25F, 1.0F, 0.125F, 4.0F, new CubeDeformation(0.0F)) + .texOffs(38, 20).addBox(7.0F, -0.0313F, -4.25F, 1.0F, 0.125F, 4.0F, new CubeDeformation(0.0F)) + .texOffs(46, 14).addBox(7.0F, -0.0938F, -6.25F, 1.0F, 0.1875F, 2.0F, new CubeDeformation(0.0F)) + .texOffs(0, 20).addBox(6.0F, -0.0938F, -7.25F, 1.0F, 0.1875F, 4.0F, new CubeDeformation(0.0F)) + .texOffs(0, 0).addBox(7.0F, -0.1563F, -10.25F, 1.0F, 0.25F, 4.0F, new CubeDeformation(0.0F)) + .texOffs(0, 40).addBox(6.0F, -0.1563F, -10.25F, 1.0F, 0.25F, 3.0F, new CubeDeformation(0.0F)) + .texOffs(0, 40).addBox(4.0F, -0.1563F, -10.25F, 1.0F, 0.25F, 5.0F, new CubeDeformation(0.0F)) + .texOffs(0, 4).addBox(5.0F, -0.1563F, -10.25F, 1.0F, 0.25F, 4.0F, new CubeDeformation(0.0F)) + .texOffs(10, 45).addBox(5.0F, -0.0938F, -6.25F, 1.0F, 0.1875F, 5.0F, new CubeDeformation(0.0F)) + .texOffs(20, 16).addBox(4.0F, -0.0938F, -5.25F, 1.0F, 0.1875F, 4.0F, new CubeDeformation(0.0F)) + .texOffs(12, 45).addBox(4.0F, -0.0938F, -1.25F, 1.0F, 0.1875F, 5.0F, new CubeDeformation(0.0F)) + .texOffs(38, 29).addBox(5.0F, -0.0313F, -1.25F, 1.0F, 0.125F, 4.0F, new CubeDeformation(0.0F)) + .texOffs(44, 33).addBox(4.0F, -0.0313F, 3.75F, 1.0F, 0.125F, 4.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-6.836F, 3.787F, 3.3846F, -1.3963F, 0.0F, 0.0F)); + + PartDefinition right_arm = partdefinition.addOrReplaceChild("right_arm", CubeListBuilder.create().texOffs(36, 12).addBox(-1.164F, -6.2307F, -2.2232F, 4.0F, 4.0F, 4.0F, new CubeDeformation(0.0F)), PartPose.offset(-6.836F, 30.2307F, 0.2232F)); + + PartDefinition right_arm_r1 = right_arm.addOrReplaceChild("right_arm_r1", CubeListBuilder.create().texOffs(7, 47).addBox(0.5F, -0.0313F, -7.25F, 1.0F, 0.125F, 4.0F, new CubeDeformation(0.0F)) + .texOffs(49, 6).addBox(0.5F, -0.0938F, -3.25F, 1.0F, 0.1875F, 3.0F, new CubeDeformation(0.0F)) + .texOffs(28, 29).addBox(0.5F, -0.1563F, -0.25F, 1.0F, 0.25F, 8.0F, new CubeDeformation(0.0F)) + .texOffs(49, 18).addBox(-0.5F, -0.0313F, -6.25F, 1.0F, 0.125F, 3.0F, new CubeDeformation(0.0F)) + .texOffs(28, 16).addBox(-0.5F, -0.0938F, -3.25F, 1.0F, 0.1875F, 4.0F, new CubeDeformation(0.0F)) + .texOffs(35, 0).addBox(-0.5F, -0.1563F, 0.75F, 1.0F, 0.25F, 7.0F, new CubeDeformation(0.0F)) + .texOffs(49, 9).addBox(-1.5F, -0.0938F, -0.25F, 1.0F, 0.1875F, 3.0F, new CubeDeformation(0.0F)) + .texOffs(9, 47).addBox(-1.5F, -0.0313F, -4.25F, 1.0F, 0.125F, 4.0F, new CubeDeformation(0.0F)) + .texOffs(37, 7).addBox(-1.5F, -0.1563F, 2.75F, 1.0F, 0.25F, 5.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(0.336F, 1.5034F, -2.743F, 1.4835F, 0.0F, 0.0F)); + + PartDefinition right_arm_r2 = right_arm.addOrReplaceChild("right_arm_r2", CubeListBuilder.create().texOffs(4, 40).addBox(1.0F, -1.0434F, -8.2087F, 1.0F, 0.125F, 7.0F, new CubeDeformation(0.0F)) + .texOffs(27, 37).addBox(1.0F, -1.1059F, -1.2087F, 1.0F, 0.1875F, 7.0F, new CubeDeformation(0.0F)) + .texOffs(0, 18).addBox(1.0F, -1.1684F, 5.7913F, 1.0F, 0.25F, 2.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(0.836F, 1.6327F, -1.7383F, 1.4835F, 0.0F, 0.0F)); + + PartDefinition right_arm_r3 = right_arm.addOrReplaceChild("right_arm_r3", CubeListBuilder.create().texOffs(24, 50).addBox(4.5F, -2.1563F, -6.5F, 4.0F, 0.25F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(8, 51).addBox(1.5F, -2.0938F, -6.5F, 3.0F, 0.1875F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(51, 24).addBox(-0.5F, -2.0313F, -6.5F, 2.0F, 0.125F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(51, 22).addBox(-2.5F, -2.0313F, -7.5F, 3.0F, 0.125F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(14, 51).addBox(0.5F, -2.0938F, -7.5F, 3.0F, 0.1875F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(32, 49).addBox(3.5F, -2.1563F, -7.5F, 5.0F, 0.25F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 50).addBox(5.5F, -2.1563F, -8.5F, 3.0F, 0.25F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(49, 49).addBox(0.5F, -2.0938F, -8.5F, 5.0F, 0.1875F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(51, 25).addBox(-1.5F, -2.0313F, -8.5F, 2.0F, 0.125F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(32, 50).addBox(4.5F, -2.1563F, -9.5F, 4.0F, 0.25F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 49).addBox(2.5F, -2.0938F, -9.5F, 2.0F, 0.1875F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(26, 51).addBox(0.5F, -2.0313F, -9.5F, 2.0F, 0.125F, 1.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-0.5165F, 2.5146F, 7.2768F, 0.0F, 0.0F, -1.3963F)); + + PartDefinition right_arm_r4 = right_arm.addOrReplaceChild("right_arm_r4", CubeListBuilder.create().texOffs(49, 12).addBox(-8.0F, -0.0313F, -5.25F, 1.0F, 0.125F, 3.0F, new CubeDeformation(0.0F)) + .texOffs(0, 46).addBox(-8.0F, -0.0938F, -8.25F, 1.0F, 0.1875F, 3.0F, new CubeDeformation(0.0F)) + .texOffs(0, 20).addBox(-8.0F, -0.1563F, -10.25F, 1.0F, 0.25F, 2.0F, new CubeDeformation(0.0F)) + .texOffs(22, 16).addBox(-5.0F, -0.0938F, -5.25F, 1.0F, 0.1875F, 4.0F, new CubeDeformation(0.0F)) + .texOffs(46, 12).addBox(-5.0F, -0.0313F, 3.75F, 1.0F, 0.125F, 4.0F, new CubeDeformation(0.0F)) + .texOffs(14, 45).addBox(-5.0F, -0.0938F, -1.25F, 1.0F, 0.1875F, 5.0F, new CubeDeformation(0.0F)) + .texOffs(41, 7).addBox(-5.0F, -0.1563F, -10.25F, 1.0F, 0.25F, 5.0F, new CubeDeformation(0.0F)) + .texOffs(46, 41).addBox(-6.0F, -0.0313F, -1.25F, 1.0F, 0.125F, 4.0F, new CubeDeformation(0.0F)) + .texOffs(16, 45).addBox(-6.0F, -0.0938F, -6.25F, 1.0F, 0.1875F, 5.0F, new CubeDeformation(0.0F)) + .texOffs(0, 8).addBox(-6.0F, -0.1563F, -10.25F, 1.0F, 0.25F, 4.0F, new CubeDeformation(0.0F)) + .texOffs(46, 45).addBox(-7.0F, -0.0313F, -3.25F, 1.0F, 0.125F, 4.0F, new CubeDeformation(0.0F)) + .texOffs(24, 16).addBox(-7.0F, -0.0938F, -7.25F, 1.0F, 0.1875F, 4.0F, new CubeDeformation(0.0F)) + .texOffs(0, 43).addBox(-7.0F, -0.1563F, -10.25F, 1.0F, 0.25F, 3.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(6.836F, 3.8907F, 3.4029F, -1.3963F, 0.0F, 0.0F)); + + return LayerDefinition.create(meshdefinition, 64, 64); + + } + + @Override + public void renderToBuffer(PoseStack poseStack, VertexConsumer vertexConsumer, int packedLight, int packedOverlay, float red, float green, float blue, float alpha) + { + head.render(poseStack, vertexConsumer, packedLight, packedOverlay, red, green, blue, alpha); + } + + @Override + public void setupAnim(LivingEntity entity, float pLimbSwing, float pLimbSwingAmount, float pAgeInTicks, float pNetHeadYaw, float pHeadPitch) + { + if (entity instanceof ArmorStand) + { + super.setupAnim(entity, 0, 0, 0, 0, 0); + } + else + { + super.setupAnim(entity, pLimbSwing, pLimbSwingAmount, pAgeInTicks, pNetHeadYaw, pHeadPitch); + } + } + + public void render(PoseStack matrixStack, MultiBufferSource buffer, int light) + { + VertexConsumer vertexBuilder = ItemRenderer.getFoilBuffer(buffer, renderType(TEXTURE), false, false); + + this.hat.visible = false; + this.head.visible = true; + this.body.visible = true; + this.rightArm.visible = true; + this.leftArm.visible = true; + + this.rightLeg.visible = false; + this.leftLeg.visible = false; + + + Root.render( + matrixStack, + vertexBuilder, + light, + OverlayTexture.NO_OVERLAY, + 1, + 1, + 1, + 1 + ); + } +} \ No newline at end of file diff --git a/src/allomancy/java/leaf/cosmere/allomancy/client/render/renderer/MistcloakRenderer.java b/src/allomancy/java/leaf/cosmere/allomancy/client/render/renderer/MistcloakRenderer.java new file mode 100644 index 000000000..9575b5102 --- /dev/null +++ b/src/allomancy/java/leaf/cosmere/allomancy/client/render/renderer/MistcloakRenderer.java @@ -0,0 +1,61 @@ +/* + * File updated ~ 7 - 8 - 2023 ~ Leaf + */ + +package leaf.cosmere.allomancy.client.render.renderer; + +import com.mojang.blaze3d.vertex.PoseStack; +import leaf.cosmere.allomancy.client.render.AllomancyLayerDefinitions; +import leaf.cosmere.allomancy.client.render.model.MistcloakModel; +import net.minecraft.client.Minecraft; +import net.minecraft.client.model.EntityModel; +import net.minecraft.client.model.geom.ModelPart; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.entity.RenderLayerParent; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.item.ItemStack; +import top.theillusivec4.curios.api.SlotContext; +import top.theillusivec4.curios.api.client.ICurioRenderer; + +public class MistcloakRenderer implements ICurioRenderer +{ + public MistcloakModel model; + + public MistcloakRenderer() + { + final ModelPart modelPart = Minecraft.getInstance().getEntityModels().bakeLayer(AllomancyLayerDefinitions.MISTCLOAK); + model = new MistcloakModel(modelPart); + } + + @Override + public > void render( + ItemStack stack, + SlotContext slotContext, + PoseStack matrixStack, + RenderLayerParent renderLayerParent, + MultiBufferSource renderTypeBuffer, + int light, float limbSwing, + float limbSwingAmount, + float partialTicks, + float ageInTicks, + float netHeadYaw, + float headPitch) + { + + LivingEntity entity = slotContext.entity(); + + MobEffectInstance effectInstance = entity.getEffect(MobEffects.INVISIBILITY); + if (effectInstance != null && effectInstance.getDuration() > 0) + { + return; + } + + this.model.prepareMobModel(entity, limbSwing, limbSwingAmount, partialTicks); + this.model.setupAnim(entity, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch); + + ICurioRenderer.followBodyRotations(entity, this.model); + this.model.render(matrixStack, renderTypeBuffer, light); + } +} diff --git a/src/allomancy/java/leaf/cosmere/allomancy/common/Allomancy.java b/src/allomancy/java/leaf/cosmere/allomancy/common/Allomancy.java new file mode 100644 index 000000000..982d0f473 --- /dev/null +++ b/src/allomancy/java/leaf/cosmere/allomancy/common/Allomancy.java @@ -0,0 +1,130 @@ +/* + * File updated ~ 10 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.allomancy.common; + +import leaf.cosmere.allomancy.common.capabilities.AllomancySpiritwebSubmodule; +import leaf.cosmere.allomancy.common.capabilities.world.IScadrial; +import leaf.cosmere.allomancy.common.config.AllomancyConfigs; +import leaf.cosmere.allomancy.common.network.AllomancyPacketHandler; +import leaf.cosmere.allomancy.common.registries.*; +import leaf.cosmere.api.CosmereAPI; +import leaf.cosmere.api.IModModule; +import leaf.cosmere.api.ISpiritwebSubmodule; +import leaf.cosmere.api.Version; +import leaf.cosmere.common.Cosmere; +import leaf.cosmere.common.config.CosmereModConfig; +import net.minecraft.resources.ResourceLocation; +import net.minecraftforge.common.capabilities.RegisterCapabilitiesEvent; +import net.minecraftforge.eventbus.api.IEventBus; +import net.minecraftforge.fml.ModLoadingContext; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.config.ModConfig; +import net.minecraftforge.fml.event.config.ModConfigEvent; +import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; +import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; + +@Mod(Allomancy.MODID) +public class Allomancy implements IModModule +{ + public static final String MODID = "allomancy"; + public static Allomancy instance; + public final Version versionNumber; + private final AllomancyPacketHandler packetHandler; + + public Allomancy() + { + Cosmere.addModule(instance = this); + AllomancyConfigs.registerConfigs(ModLoadingContext.get()); + + IEventBus modBus = FMLJavaModLoadingContext.get().getModEventBus(); + modBus.addListener(this::onConfigLoad); + modBus.addListener(this::onConfigReload); + modBus.addListener(this::commonSetup); + modBus.addListener(this::onAddCaps); + + AllomancyItems.ITEMS.register(modBus); + AllomancyAttributes.ATTRIBUTES.register(modBus); + AllomancyEffects.EFFECTS.register(modBus); + AllomancyEffects.MOB_EFFECTS.register(modBus); + AllomancyEntityTypes.ENTITY_TYPES.register(modBus); + AllomancyManifestations.MANIFESTATIONS.register(modBus); + AllomancyMenuTypes.MENU_TYPES.register(modBus); + AllomancyRecipes.RECIPE_SERIALIZERS.register(modBus); + AllomancyStats.STATS.register(modBus); + AllomancyCreativeTabs.CREATIVE_TABS.register(modBus); + + //Set our version number to match the mods.toml file, which matches the one in our build.gradle + versionNumber = new Version(ModLoadingContext.get().getActiveContainer()); + packetHandler = new AllomancyPacketHandler(); + } + + public static ResourceLocation rl(String path) + { + return new ResourceLocation(Allomancy.MODID, path); + } + + @Override + public Version getVersion() + { + return versionNumber; + } + + @Override + public String getName() + { + return "Allomancy"; + } + + @Override + public ISpiritwebSubmodule makeSubmodule() + { + return new AllomancySpiritwebSubmodule(); + } + + public static AllomancyPacketHandler packetHandler() + { + return instance.packetHandler; + } + + private void onConfigLoad(ModConfigEvent configEvent) + { + ModConfig config = configEvent.getConfig(); + if (config.getModId().equals(MODID) && config instanceof CosmereModConfig cosmereModConfig) + { + cosmereModConfig.clearCache(); + } + } + + private void onConfigReload(ModConfigEvent.Reloading configEvent) + { + ModConfig config = configEvent.getConfig(); + if (config.getModId().equals(MODID) && config instanceof CosmereModConfig cosmereModConfig) + { + cosmereModConfig.clearCache(); + if (cosmereModConfig.getSpec() == AllomancyConfigs.CLIENT.getConfigSpec()) + { + } + } + } + + private void commonSetup(FMLCommonSetupEvent event) + { + CosmereAPI.logger.info("Cosmere: Allomancy module Version {} initializing...", versionNumber); + + event.enqueueWork(() -> + { + //AllomancyEntityTypes.PrepareEntityAttributes(); + AllomancyStats.initStatEntries(); + }); + + + packetHandler.initialize(); + } + + private void onAddCaps(RegisterCapabilitiesEvent capabilitiesEvent) + { + capabilitiesEvent.register(IScadrial.class); + } +} \ No newline at end of file diff --git a/src/allomancy/java/leaf/cosmere/allomancy/common/capabilities/AllomancySpiritwebSubmodule.java b/src/allomancy/java/leaf/cosmere/allomancy/common/capabilities/AllomancySpiritwebSubmodule.java new file mode 100644 index 000000000..d7929594b --- /dev/null +++ b/src/allomancy/java/leaf/cosmere/allomancy/common/capabilities/AllomancySpiritwebSubmodule.java @@ -0,0 +1,379 @@ +/* + * File updated ~ 5 - 3 - 2025 ~ Leaf + */ + +package leaf.cosmere.allomancy.common.capabilities; + +import com.mojang.blaze3d.vertex.PoseStack; +import leaf.cosmere.allomancy.client.metalScanning.IronSteelLinesThread; +import leaf.cosmere.allomancy.client.metalScanning.ScanResult; +import leaf.cosmere.allomancy.common.Allomancy; +import leaf.cosmere.allomancy.common.config.AllomancyConfigs; +import leaf.cosmere.allomancy.common.items.MetalVialItem; +import leaf.cosmere.allomancy.common.manifestation.*; +import leaf.cosmere.allomancy.common.registries.AllomancyItems; +import leaf.cosmere.allomancy.common.registries.AllomancyManifestations; +import leaf.cosmere.api.EnumUtils; +import leaf.cosmere.api.ISpiritwebSubmodule; +import leaf.cosmere.api.Manifestations; +import leaf.cosmere.api.Metals; +import leaf.cosmere.api.helpers.CompoundNBTHelper; +import leaf.cosmere.api.helpers.DrawHelper; +import leaf.cosmere.api.helpers.PlayerHelper; +import leaf.cosmere.api.manifestation.Manifestation; +import leaf.cosmere.api.spiritweb.ISpiritweb; +import net.minecraft.client.Minecraft; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.phys.Vec3; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.client.event.RenderLevelStageEvent; + +import java.awt.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +public class AllomancySpiritwebSubmodule implements ISpiritwebSubmodule +{ + final String INGESTED_KEY = "ingested_metals"; + final String PEWTER_DELAYED_DAMAGE_KEY = "pewter_delayed_damage"; + private CompoundTag moduleTag = null; + + //metals ingested + public final Map METALS_INGESTED = + Arrays.stream(EnumUtils.METAL_TYPES) + .collect(Collectors.toMap(Function.identity(), type -> 0)); + + private float pewterDelayedDamage = 0; + + public static AllomancySpiritwebSubmodule getSubmodule(ISpiritweb data) + { + return (AllomancySpiritwebSubmodule) data.getSubmodule(Manifestations.ManifestationTypes.ALLOMANCY); + } + + @Override + public void tickClient(ISpiritweb spiritweb) + { + //todo fix this, why am I only calling apply effect tick on the client for iron/steel? + + //Iron allomancy + { + AllomancyIronSteel iron = (AllomancyIronSteel) AllomancyManifestations.ALLOMANCY_POWERS.get(Metals.MetalType.IRON).get(); + final boolean ironActive = iron.isActive(spiritweb); + + if (ironActive && !iron.isCompounding(spiritweb)) + { + iron.applyEffectTick(spiritweb); + } + } + + //steel allomancy + { + AllomancyIronSteel steel = (AllomancyIronSteel) AllomancyManifestations.ALLOMANCY_POWERS.get(Metals.MetalType.STEEL).get(); + final boolean steelActive = steel.isActive(spiritweb); + + if (steelActive && !steel.isCompounding(spiritweb)) + { + steel.applyEffectTick(spiritweb); + } + } + + //tin allomancy + { + AllomancyTin tin = (AllomancyTin) AllomancyManifestations.ALLOMANCY_POWERS.get(Metals.MetalType.TIN).get(); + final boolean tinActive = tin.isActive(spiritweb); + + if (tinActive && !tin.isCompounding(spiritweb)) + { + tin.applyEffectTick(spiritweb); + } + } + + //brass allomancy + { + AllomancyBrass brass = (AllomancyBrass) AllomancyManifestations.ALLOMANCY_POWERS.get(Metals.MetalType.BRASS).get(); + final boolean brassActive = brass.isActive(spiritweb); + + if (brassActive && !brass.isCompounding(spiritweb)) + { + brass.applyEffectTick(spiritweb); + } + } + + //zinc allomancy + { + AllomancyZinc zinc = (AllomancyZinc) AllomancyManifestations.ALLOMANCY_POWERS.get(Metals.MetalType.ZINC).get(); + final boolean zincActive = zinc.isActive(spiritweb); + + if (zincActive && !zinc.isCompounding(spiritweb)) + { + zinc.applyEffectTick(spiritweb); + } + } + } + + @Override + public void tickServer(ISpiritweb spiritweb) + { + //tick metals + if (spiritweb.getLiving().tickCount % 1200 == 0) + { + //metals can't stay in your system forever, y'know? + for (Metals.MetalType metalType : EnumUtils.METAL_TYPES) + { + Integer metalIngestAmount = METALS_INGESTED.get(metalType); + if (metalIngestAmount > 0) + { + //todo decide how and when we poison the user for eating large amounts of metal, that sure ain't safe champ. + //even if the user is immune to metal poisoning, it's still not safe to eat a bunch of metal. + //IIRC, it's safe until you start to digest it, that's why Kelsier recommends Vin burns off all her metals before sleeping. -Rose + //^^ To that effect, maybe have a counter that increments up when you have a metal ingested and increments slightly slower down over time when burning or faster when empty. When it's too high the player gets worse and worse? -Rose + + //todo, decide what's appropriate for reducing ingested metal amounts + METALS_INGESTED.put(metalType, metalIngestAmount - 1); + } + } + } + } + + @Override + public void deserialize(ISpiritweb spiritweb) + { + final CompoundTag compoundTag = spiritweb.getCompoundTag(); + + CompoundTag ingestedMetals;// = compoundTag.getCompound("ingested_metals"); + + moduleTag = CompoundNBTHelper.getOrCreate(compoundTag, Allomancy.MODID); + + //backwards compat, todo remove later in 1.20+ port + if (compoundTag.contains(INGESTED_KEY)) + { + ingestedMetals = compoundTag.getCompound(INGESTED_KEY); + } + else + { + ingestedMetals = CompoundNBTHelper.getOrCreate(moduleTag, INGESTED_KEY); + } + + for (Metals.MetalType metalType : EnumUtils.METAL_TYPES) + { + final String metalKey = metalType.getName(); + if (ingestedMetals.contains(metalKey)) + { + final int ingestedMetalAmount = ingestedMetals.getInt(metalKey); + METALS_INGESTED.put(metalType, ingestedMetalAmount); + } + else + { + METALS_INGESTED.put(metalType, 0); + } + } + + pewterDelayedDamage = CompoundNBTHelper.getFloat(moduleTag, PEWTER_DELAYED_DAMAGE_KEY, 0f); + } + + @Override + public void serialize(ISpiritweb spiritweb) + { + final CompoundTag compoundTag = spiritweb.getCompoundTag(); + moduleTag = CompoundNBTHelper.getOrCreate(compoundTag, Allomancy.MODID); + + //replace old ingested tag with new one + final CompoundTag ingestedMetals = new CompoundTag(); + for (Metals.MetalType metalType : EnumUtils.METAL_TYPES) + { + final Integer ingestedMetalAmount = METALS_INGESTED.get(metalType); + if (ingestedMetalAmount > 0) + { + ingestedMetals.putInt(metalType.getName(), ingestedMetalAmount); + } + } + + //todo remove in 1.20+ port + //remove old ingested tag if exists + if (compoundTag.contains(INGESTED_KEY)) + { + compoundTag.remove(INGESTED_KEY); + } + + //put it in the new place + moduleTag.put(INGESTED_KEY, ingestedMetals); + moduleTag.putFloat(PEWTER_DELAYED_DAMAGE_KEY, pewterDelayedDamage); + + compoundTag.put(Allomancy.MODID, moduleTag); + } + + @Override + public void resetOnDeath(ISpiritweb spiritweb) + { + pewterDelayedDamage = 0f; + } + + @Override + public void drainInvestiture(ISpiritweb data, double strength) + { + //for the purpose of allomantic aluminum and chromium, we're going to drain all the metals from the user. + // I realise it doesn't quite fit for a-duralumin + + for (Metals.MetalType metalType : EnumUtils.METAL_TYPES) + { + int ingestedMetalAmount = getIngestedMetal(metalType); + + //if metal exists + if (ingestedMetalAmount > 0) + { + //drain metals that are actively being burned + if (data.canTickManifestation(Manifestations.ManifestationTypes.ALLOMANCY.getManifestation(metalType.getID()))) + { + final int amountToAdjust = + ingestedMetalAmount > 30 ? (ingestedMetalAmount / 2) : ingestedMetalAmount; + adjustIngestedMetal( + metalType, + -amountToAdjust, //take amount away + true); + + } + } + } + } + + @Override + public void renderWorldEffects(ISpiritweb spiritweb, RenderLevelStageEvent event) + { + AllomancyIronSteel ironAllomancy = (AllomancyIronSteel) AllomancyManifestations.ALLOMANCY_POWERS.get(Metals.MetalType.IRON).get(); + AllomancyIronSteel steelAllomancy = (AllomancyIronSteel) AllomancyManifestations.ALLOMANCY_POWERS.get(Metals.MetalType.STEEL).get(); + AllomancyTin tinAllomancy = (AllomancyTin) AllomancyManifestations.ALLOMANCY_POWERS.get(Metals.MetalType.TIN).get(); + + PoseStack viewModelStack = event.getPoseStack(); + + //if user has iron or steel manifestation + if (spiritweb.hasManifestation(ironAllomancy) || spiritweb.hasManifestation(steelAllomancy)) + { + //is zero if the manifestation is not active. + int range = Math.max(ironAllomancy.getRange(spiritweb), steelAllomancy.getRange(spiritweb)); + + if (range > 0) + { + Minecraft.getInstance().getProfiler().push("cosmere-getDrawLines"); + //todo - does this mean it's wrong on the first check? probably doesn't matter + IronSteelLinesThread.getInstance().setScanRange(range); + ScanResult scanResult = IronSteelLinesThread.getInstance().requestScanResult(); + Vec3 closestMetalObject = IronSteelLinesThread.getInstance().getClosestMetalObject(); + + Vec3 originPoint = spiritweb.getLiving().getLightProbePosition(Minecraft.getInstance().getFrameTime()).add(0, -1, 0); + + final Boolean drawMetalLines = AllomancyConfigs.CLIENT.drawMetalLines.get(); + if (drawMetalLines && !scanResult.foundEntities.isEmpty()) + { + DrawHelper.drawLinesFromPoint(viewModelStack, originPoint, range, Color.BLUE, scanResult.foundEntities, closestMetalObject); + } + if (drawMetalLines && !scanResult.clusterResults.isEmpty()) + { + DrawHelper.drawLinesFromPoint(viewModelStack, originPoint, range, Color.BLUE, scanResult.clusterCenters, closestMetalObject); + } + if (AllomancyConfigs.CLIENT.drawMetalBoxes.get() && !scanResult.foundBlocks.isEmpty()) + { + if (scanResult.hasTargetedCluster) + { + DrawHelper.drawBlocksAtPoint(viewModelStack, Color.BLUE, scanResult.foundBlocks, range, closestMetalObject, scanResult.targetedCluster.getBlocks()); + } + else + { + DrawHelper.drawBlocksAtPoint(viewModelStack, Color.BLUE, scanResult.foundBlocks, range, closestMetalObject, new ArrayList<>()); + } + } + + Minecraft.getInstance().getProfiler().pop(); + + IronSteelLinesThread.getInstance().releaseScanResult(); + } + } + + if (spiritweb.hasManifestation(tinAllomancy)) + { + viewModelStack.last().pose().get(event.getPoseStack().last().pose()); // not sure that get() is right here + + Minecraft.getInstance().getProfiler().push("cosmere-getDrawSoundIndicator"); + DrawHelper.drawSquareAtPoint(viewModelStack, Color.WHITE, AllomancyTin.getTinSoundList(), spiritweb.getLiving().getEyePosition()); + Minecraft.getInstance().getProfiler().pop(); + } + } + + @Override + @OnlyIn(Dist.CLIENT) + public void collectMenuInfo(List m_infoText) + { + for (Metals.MetalType metalType : EnumUtils.METAL_TYPES) + { + int value = METALS_INGESTED.get(metalType); + + if (value > 0) + { + //todo localisation check + final String text = "A. " + metalType.getName() + ": " + value; + m_infoText.add(text); + } + } + } + + @Override + public void GiveStartingItem(Player player) + { + ItemStack itemStack = new ItemStack(AllomancyItems.METAL_VIAL.get()); + for (int i = 0; i < 16; i++) + { + MetalVialItem.addMetals(itemStack, i, 1); + } + PlayerHelper.addItem(player, itemStack); + } + + @Override + public void GiveStartingItem(Player player, Manifestation manifestation) + { + if (manifestation instanceof AllomancyManifestation allomancyManifestation) + { + ItemStack itemStack = new ItemStack(AllomancyItems.METAL_VIAL.get()); + MetalVialItem.addMetals(itemStack, allomancyManifestation.getMetalType().getID(), 16); + PlayerHelper.addItem(player, itemStack); + } + } + + public int getIngestedMetal(Metals.MetalType metalType) + { + return METALS_INGESTED.get(metalType); + } + + public boolean adjustIngestedMetal(Metals.MetalType metalType, int amountToAdjust, boolean doAdjust) + { + int ingestedMetal = getIngestedMetal(metalType); + + final int newValue = ingestedMetal + amountToAdjust; + if (newValue >= 0) + { + if (doAdjust) + { + METALS_INGESTED.put(metalType, newValue); + } + + return true; + } + + return false; + } + + public float getPewterDelayedDamage() + { + return pewterDelayedDamage; + } + + public void setPewterDelayedDamage(float pewterDelayedDamage) + { + this.pewterDelayedDamage = pewterDelayedDamage; + } +} diff --git a/src/allomancy/java/leaf/cosmere/allomancy/common/capabilities/world/IScadrial.java b/src/allomancy/java/leaf/cosmere/allomancy/common/capabilities/world/IScadrial.java new file mode 100644 index 000000000..3afd1c1ca --- /dev/null +++ b/src/allomancy/java/leaf/cosmere/allomancy/common/capabilities/world/IScadrial.java @@ -0,0 +1,19 @@ +/* + * File updated ~ 8 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.allomancy.common.capabilities.world; + +import net.minecraft.nbt.CompoundTag; +import net.minecraft.world.entity.player.Player; +import net.minecraftforge.client.event.ViewportEvent; +import net.minecraftforge.common.util.INBTSerializable; + +public interface IScadrial extends INBTSerializable +{ + float getMistNearDistance(); + + float getMistFarDistance(); + + void tickFog(ViewportEvent.RenderFog event, Player player); +} diff --git a/src/allomancy/java/leaf/cosmere/allomancy/common/capabilities/world/ScadrialCapability.java b/src/allomancy/java/leaf/cosmere/allomancy/common/capabilities/world/ScadrialCapability.java new file mode 100644 index 000000000..86fe05f63 --- /dev/null +++ b/src/allomancy/java/leaf/cosmere/allomancy/common/capabilities/world/ScadrialCapability.java @@ -0,0 +1,259 @@ +/* + * File updated ~ 8 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.allomancy.common.capabilities.world; + +import com.mojang.blaze3d.shaders.FogShape; +import com.mojang.blaze3d.systems.RenderSystem; +import leaf.cosmere.allomancy.common.manifestation.AllomancyManifestation; +import leaf.cosmere.allomancy.common.registries.AllomancyManifestations; +import leaf.cosmere.api.Metals; +import leaf.cosmere.api.math.Easing; +import leaf.cosmere.api.spiritweb.ISpiritweb; +import leaf.cosmere.common.cap.entity.SpiritwebCapability; +import leaf.cosmere.common.fog.FogManager; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.util.Mth; +import net.minecraft.world.entity.ai.attributes.RangedAttribute; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.Level; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.client.event.ViewportEvent; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.capabilities.CapabilityManager; +import net.minecraftforge.common.capabilities.CapabilityToken; +import net.minecraftforge.common.util.LazyOptional; + +import javax.annotation.Nonnull; + +public class ScadrialCapability implements IScadrial +{ + //Injection + public static final Capability CAPABILITY = CapabilityManager.get(new CapabilityToken<>() + { + }); + + Level level; + + CompoundTag nbt = null; + + public ScadrialCapability(Level level) + { + this.level = level; + } + + @Nonnull + public static LazyOptional get(Level level) + { + return level != null ? level.getCapability(ScadrialCapability.CAPABILITY, null) + : LazyOptional.empty(); + } + + + @Override + public CompoundTag serializeNBT() + { + if (nbt == null) + { + nbt = new CompoundTag(); + } + + return nbt; + } + + @Override + public void deserializeNBT(CompoundTag nbt) + { + this.nbt = nbt; + } + + private boolean isMistNight() + { + int day = (int) (level.getDayTime() / 24000L % 2147483647L); + + //todo - decide how we want to pick misty nights. Right now is prime numbers. + if (day < 2) + { + return false; + } + if (day % 2 == 0) + { + return day == 2; + } + for (int i = 3; i * i <= day; i += 2) + { + if (day % i == 0) + { + return false; + } + } + + return true; + } + + @Override + public float getMistNearDistance() + { + + final long timeOfDay = level.getDayTime() % 24000L; + + final float easeTime = 3500; + final float fogInStartTime = 11500; + final float fogInEndTime = fogInStartTime + easeTime; + final float fogOutStartTime = 20499; + final float fogOutEndTime = fogOutStartTime + easeTime; + + if (timeOfDay <= fogInStartTime || timeOfDay >= fogOutEndTime) + { + return 0.9f;//basically put the fog as far away as possible + } + + float i; + + //if time is more than start time, and less than end time + if (timeOfDay < fogInEndTime) + { + final float percentageThroughFogTransition = (timeOfDay - fogInStartTime) / easeTime; + i = Easing.easeOutQuad(percentageThroughFogTransition); + } + //if time is after fog in, and before fog out + //basically the default state for The Mists surrounding the player + else if (timeOfDay < fogOutStartTime) + { + //max strength? + //todo config? do we even want people to have control over it? + //this means it should be as close as it can possibly be. + return 0f; + } + else // start decreasing mists level + { + final float percentageThroughFogTransition = (timeOfDay - fogOutStartTime) / easeTime; + //invert the value so that the mists ease away + i = 1 - Easing.easeInQuad(percentageThroughFogTransition); + } + + + //1 means it's pushed back as far as possible + //0.1 means it's as close as it can be + return (float) Mth.lerp(i, 0.9f, 0.0f); + } + + @Override + public float getMistFarDistance() + { + + final long timeOfDay = level.getDayTime() % 24000L; + + final float easeTime = 3500; + final float fogInStartTime = 12500; + final float fogInEndTime = fogInStartTime + easeTime; + final float fogOutStartTime = 19500; + + if (timeOfDay <= fogInStartTime) + { + return 1;//basically put the fog as far away as possible + } + + float i; + + //if time is more than start time, and less than end time + if (timeOfDay < fogInEndTime) + { + final float percentageThroughFogTransition = (timeOfDay - fogInStartTime) / easeTime; + i = Easing.easeOutQuad(percentageThroughFogTransition); + } + //if time is after fog in, and before fog out + //basically the default state for The Mists surrounding the player + else if (timeOfDay < fogOutStartTime) + { + //max strength? + //todo config? do we even want people to have control over it? + //this means it should be as close as it can possibly be. + return 0.1f; + } + else // start decreasing mists level + { + final float percentageThroughFogTransition = (timeOfDay - fogOutStartTime) / easeTime; + //invert the value so that the mists ease away + i = 1 - Easing.easeInQuad(percentageThroughFogTransition); + } + + + //1 means it's pushed back as far as possible + //0.1 means it's as close as it can be + return (float) Mth.lerp(i, 1f, 0.1f); + } + + @Override + @OnlyIn(Dist.CLIENT) + public void tickFog(ViewportEvent.RenderFog event, Player player) + { + //once again, special thank you to the fog looks good now team - it helped a lot without requiring another dependency + //https://github.com/birsy/Fog-Looks-Good-Now/blob/main/src/main/java/birsy/foglooksgoodnow/client/ClientEvents.java + FogManager densityManager = FogManager.getDensityManager(); + + //this checks time of day, don't bring the mists in until it's night + //near plane moves first + final float mistNearDistance = this.getMistNearDistance(); + //far plane moves after that + final float mistFarDistance = this.getMistFarDistance(); + float startFogDistance = 0.9f; + float endFogDistance = 1f; + + if (isMistNight()) + { + //if it's nighttime, we want to make the mists more dense + //except when they are burning tin, in which case we want to make them less dense right out to render distance + //check burning tin, if it even exists + float tinAlloVal = 0; + { + final LazyOptional iSpiritwebLazyOptional = SpiritwebCapability.get(player); + + if (iSpiritwebLazyOptional.isPresent()) + { + var spiritweb = iSpiritwebLazyOptional.resolve(); + final AllomancyManifestation tinAllomancy = AllomancyManifestations.ALLOMANCY_POWERS.get(Metals.MetalType.TIN).get(); + //if tin allomancy exists in this mod pack and it's currently active + if (spiritweb.isPresent() && spiritweb.get() instanceof SpiritwebCapability data && tinAllomancy != null && tinAllomancy.isMetalBurning(data)) + { + //burning or flaring strength + double currentBurnStrength = tinAllomancy.getStrength(data, false) * data.getMode(tinAllomancy); + final RangedAttribute attribute = (RangedAttribute) tinAllomancy.getAttribute(); + double maxTinFlareStrengthPossible = attribute.getMaxValue() * 2; + + //tin takes actual strength into account, as compared to total possible strength including flaring. + //todo - move the min/max night vision to config, ideally server side that gets synced to client + tinAlloVal = (float) Mth.lerp(currentBurnStrength / maxTinFlareStrengthPossible, 0.0f, 0.95f); + } + } + } + + //a low mist distance means it is closer, so we add tin allo value to it to push it further away. + startFogDistance = Mth.clamp(mistNearDistance + tinAlloVal, 0.0f, 1.0f); + endFogDistance = Mth.clamp(mistFarDistance + tinAlloVal, 0.0f, 1.0f); + } + + //that said, we are probably never going to otherwise want it to be less than 0.1 at night. + densityManager.fogStart.setDefaultValue(startFogDistance); + densityManager.fogEnd.setDefaultValue(endFogDistance); + + float renderDistance = event.getRenderer().getRenderDistance(); + + // render distance matters a bit here, obviously beefier computers will have a more pronounced effect. + // hopefully not too bad on low render distance, but there may not be much we can do about it. + final float pShaderFogStart = renderDistance * densityManager.fogStart.get((float) event.getPartialTick()); + final float pShaderFogEnd = renderDistance * densityManager.fogEnd.get((float) event.getPartialTick()); + + //but end fog is what actually matters + //if fog is at 1, it's as far away as it can be + //if fog is at 0, they're basically blind, + // which todo - maybe we can transition to using that instead of blindness, just means moving this to cosmere instead of allomancy + RenderSystem.setShaderFogStart(pShaderFogStart); + RenderSystem.setShaderFogEnd(pShaderFogEnd); + + //should probably test cylinder at some point. + RenderSystem.setShaderFogShape(FogShape.SPHERE); + } +} diff --git a/src/allomancy/java/leaf/cosmere/allomancy/common/coinpouch/CoinPouchContainerMenu.java b/src/allomancy/java/leaf/cosmere/allomancy/common/coinpouch/CoinPouchContainerMenu.java new file mode 100644 index 000000000..a55a0c7c7 --- /dev/null +++ b/src/allomancy/java/leaf/cosmere/allomancy/common/coinpouch/CoinPouchContainerMenu.java @@ -0,0 +1,122 @@ +/* + * File updated ~ 10 - 10 - 2022 ~ Leaf + */ + +package leaf.cosmere.allomancy.common.coinpouch; + +import leaf.cosmere.allomancy.common.registries.AllomancyMenuTypes; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.inventory.AbstractContainerMenu; +import net.minecraft.world.inventory.ClickType; +import net.minecraft.world.inventory.Slot; +import net.minecraft.world.item.ItemStack; +import net.minecraftforge.common.capabilities.ForgeCapabilities; +import net.minecraftforge.items.IItemHandlerModifiable; +import org.jetbrains.annotations.NotNull; + +public class CoinPouchContainerMenu extends AbstractContainerMenu +{ + + public static CoinPouchContainerMenu fromNetwork(int windowId, Inventory inv, FriendlyByteBuf buf) + { + InteractionHand hand = buf.readBoolean() ? InteractionHand.MAIN_HAND : InteractionHand.OFF_HAND; + return new CoinPouchContainerMenu(windowId, inv, inv.player.getItemInHand(hand)); + } + + private final ItemStack pouch; + + public CoinPouchContainerMenu(int windowId, Inventory playerInv, ItemStack pouch) + { + super(AllomancyMenuTypes.COIN_POUCH.get(), windowId); + this.pouch = pouch; + int i; + int j; + + IItemHandlerModifiable pouchInv = (IItemHandlerModifiable) pouch.getCapability(ForgeCapabilities.ITEM_HANDLER).orElse(null); + + int invStart = 0; + + //Bag inventory slots + for (i = 0; i < 2; ++i) + { + for (j = 0; j < 9; ++j) + { + int k = j + i * 9; + addSlot(new CoinPouchSlot(pouchInv, k, 8 + j * 18, 18 + i * 18)); + } + } + + //Player Inventory slots + for (i = 0; i < 3; ++i) + { + for (j = 0; j < 9; ++j) + { + addSlot(new Slot(playerInv, j + i * 9 + 9, 8 + j * 18, 41 + 17 + (i + invStart) * 18)); + } + } + + //Player hotbar slots + for (i = 0; i < 9; ++i) + { + addSlot(new Slot(playerInv, i, 8 + i * 18, 45 + 17 + (3 + invStart) * 18)); + } + + } + + @Override + public boolean stillValid(@NotNull Player player) + { + ItemStack main = player.getMainHandItem(); + ItemStack off = player.getOffhandItem(); + return !main.isEmpty() && main == pouch || !off.isEmpty() && off == pouch; + } + + @Override + public ItemStack quickMoveStack(@NotNull Player playerIn, int index) + { + ItemStack itemstack = ItemStack.EMPTY; + int maxSlots = 18; + + Slot slot = this.slots.get(index); + if (slot.hasItem()) + { + ItemStack itemstack1 = slot.getItem(); + itemstack = itemstack1.copy(); + + if (index < maxSlots) + { + if (!this.moveItemStackTo(itemstack1, maxSlots, this.slots.size(), true)) + { + return ItemStack.EMPTY; + } + } + else if (!this.moveItemStackTo(itemstack1, 0, maxSlots, false)) + { + return ItemStack.EMPTY; + } + + if (itemstack1.isEmpty()) + { + slot.set(ItemStack.EMPTY); + } + else + { + slot.setChanged(); + } + } + return itemstack; + } + + @Override + public void clicked(int slot, int dragType, @NotNull ClickType clickTypeIn, @NotNull Player player) + { + if (!(slot >= 0 && getSlot(slot).getItem() == player.getItemInHand(InteractionHand.MAIN_HAND))) + { + super.clicked(slot, dragType, clickTypeIn, player); + } + + } +} diff --git a/src/allomancy/java/leaf/cosmere/allomancy/common/coinpouch/CoinPouchInventory.java b/src/allomancy/java/leaf/cosmere/allomancy/common/coinpouch/CoinPouchInventory.java new file mode 100644 index 000000000..a28769a1a --- /dev/null +++ b/src/allomancy/java/leaf/cosmere/allomancy/common/coinpouch/CoinPouchInventory.java @@ -0,0 +1,54 @@ +/* + * File updated ~ 8 - 10 - 2022 ~ Leaf + */ + +package leaf.cosmere.allomancy.common.coinpouch; + +import leaf.cosmere.allomancy.common.items.CoinPouchItem; +import net.minecraft.core.Direction; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.world.item.ItemStack; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.capabilities.ForgeCapabilities; +import net.minecraftforge.common.capabilities.ICapabilityProvider; +import net.minecraftforge.common.util.INBTSerializable; +import net.minecraftforge.common.util.LazyOptional; +import net.minecraftforge.items.IItemHandler; +import net.minecraftforge.items.ItemStackHandler; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +public class CoinPouchInventory implements ICapabilityProvider, INBTSerializable +{ + private final IItemHandler inv = new ItemStackHandler(18) + { + @Override + public boolean isItemValid(int slot, @Nonnull ItemStack stack) + { + return !stack.isEmpty() && CoinPouchItem.SUPPORTED_PROJECTILES.test(stack); + } + }; + + private final LazyOptional opt = LazyOptional.of(() -> inv); + + @Nonnull + @Override + public LazyOptional getCapability(@Nonnull Capability capability, @Nullable Direction facing) + { + return ForgeCapabilities.ITEM_HANDLER.orEmpty(capability, opt); + } + + @Override + public CompoundTag serializeNBT() + { + return ((ItemStackHandler) inv).serializeNBT(); + } + + @Override + public void deserializeNBT(CompoundTag nbt) + { + ((ItemStackHandler) inv).deserializeNBT(nbt); + } + +} \ No newline at end of file diff --git a/src/allomancy/java/leaf/cosmere/allomancy/common/coinpouch/CoinPouchSlot.java b/src/allomancy/java/leaf/cosmere/allomancy/common/coinpouch/CoinPouchSlot.java new file mode 100644 index 000000000..6bea98106 --- /dev/null +++ b/src/allomancy/java/leaf/cosmere/allomancy/common/coinpouch/CoinPouchSlot.java @@ -0,0 +1,33 @@ +/* + * File updated ~ 8 - 10 - 2022 ~ Leaf + */ + +package leaf.cosmere.allomancy.common.coinpouch; + +import leaf.cosmere.allomancy.common.items.CoinPouchItem; +import net.minecraft.world.item.ItemStack; +import net.minecraftforge.items.IItemHandler; +import net.minecraftforge.items.IItemHandlerModifiable; +import net.minecraftforge.items.SlotItemHandler; +import org.jetbrains.annotations.NotNull; + +public class CoinPouchSlot extends SlotItemHandler +{ + public CoinPouchSlot(IItemHandlerModifiable inv, int index, int x, int y) + { + super((IItemHandler) inv, index, x, y); + } + + @Override + public boolean mayPlace(@NotNull ItemStack stack) + { + final boolean test = CoinPouchItem.SUPPORTED_PROJECTILES.test(stack); + return test; + } + + @Override + public void setChanged() + { + container.setChanged(); + } +} diff --git a/src/allomancy/java/leaf/cosmere/allomancy/common/commands/AllomancyCommands.java b/src/allomancy/java/leaf/cosmere/allomancy/common/commands/AllomancyCommands.java new file mode 100644 index 000000000..05b224888 --- /dev/null +++ b/src/allomancy/java/leaf/cosmere/allomancy/common/commands/AllomancyCommands.java @@ -0,0 +1,23 @@ +/* + * File updated ~ 13 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.allomancy.common.commands; + +import com.mojang.brigadier.CommandDispatcher; +import leaf.cosmere.allomancy.common.commands.subcommands.FillMetalReservesCommand; +import leaf.cosmere.common.Cosmere; +import net.minecraft.commands.CommandSourceStack; +import net.minecraft.commands.Commands; + + +public class AllomancyCommands +{ + + public static void register(CommandDispatcher dispatcher) + { + dispatcher.register(Commands.literal(Cosmere.MODID) + .then(FillMetalReservesCommand.register(dispatcher)) + ); + } +} diff --git a/src/allomancy/java/leaf/cosmere/allomancy/common/commands/subcommands/FillMetalReservesCommand.java b/src/allomancy/java/leaf/cosmere/allomancy/common/commands/subcommands/FillMetalReservesCommand.java new file mode 100644 index 000000000..65dac247c --- /dev/null +++ b/src/allomancy/java/leaf/cosmere/allomancy/common/commands/subcommands/FillMetalReservesCommand.java @@ -0,0 +1,73 @@ +/* + * File updated ~ 20 - 11 - 2024 ~ Leaf + */ + +package leaf.cosmere.allomancy.common.commands.subcommands; + +import com.mojang.brigadier.CommandDispatcher; +import com.mojang.brigadier.builder.ArgumentBuilder; +import com.mojang.brigadier.context.CommandContext; +import com.mojang.brigadier.exceptions.CommandSyntaxException; +import leaf.cosmere.allomancy.common.capabilities.AllomancySpiritwebSubmodule; +import leaf.cosmere.api.EnumUtils; +import leaf.cosmere.api.Manifestations; +import leaf.cosmere.api.Metals; +import leaf.cosmere.api.manifestation.Manifestation; +import leaf.cosmere.common.cap.entity.SpiritwebCapability; +import leaf.cosmere.common.commands.subcommands.ModCommand; +import net.minecraft.commands.CommandSourceStack; +import net.minecraft.commands.Commands; +import net.minecraft.commands.arguments.EntityArgument; +import net.minecraft.server.level.ServerPlayer; + +import java.util.Collection; + +public class FillMetalReservesCommand extends ModCommand +{ + public static ArgumentBuilder register(CommandDispatcher dispatcher) + { + return Commands.literal("fill_metal_reserves") + .requires(context -> context.hasPermission(2)) + .executes(FillMetalReservesCommand::fillReserves) + .then(Commands.argument("target", EntityArgument.players()) + .requires(context -> context.hasPermission(2)) + .executes(FillMetalReservesCommand::fillReserves)); + } + + private static int fillReserves(CommandContext context) throws CommandSyntaxException + { + Collection players = getPlayers(context, 3); + + for (ServerPlayer player : players) + { + SpiritwebCapability.get(player).ifPresent((spiritweb) -> + { + AllomancySpiritwebSubmodule asm = AllomancySpiritwebSubmodule.getSubmodule(spiritweb); + + for (Metals.MetalType metalType : EnumUtils.METAL_TYPES) + { + //I know it's not feruchemy, but it's the same list of metals + if (metalType.hasFeruchemicalEffect()) + { + final int metalTypeID = metalType.getID(); + final Manifestation manifestation = Manifestations.ManifestationTypes.ALLOMANCY.getManifestation(metalTypeID); + if (spiritweb.hasManifestation(manifestation)) + { + asm.adjustIngestedMetal(metalType, 999999, true); + } + } + } + spiritweb.syncToClients(null); + }); + } + + return SINGLE_SUCCESS; + } + + @Override + public int run(CommandContext context) throws CommandSyntaxException + { + return SINGLE_SUCCESS; + } + +} \ No newline at end of file diff --git a/src/allomancy/java/leaf/cosmere/allomancy/common/compat/hwyla/BronzeSeekerTooltip.java b/src/allomancy/java/leaf/cosmere/allomancy/common/compat/hwyla/BronzeSeekerTooltip.java new file mode 100644 index 000000000..f06ee7bef --- /dev/null +++ b/src/allomancy/java/leaf/cosmere/allomancy/common/compat/hwyla/BronzeSeekerTooltip.java @@ -0,0 +1,69 @@ +/* + * File updated ~ 12 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.allomancy.common.compat.hwyla; + +import leaf.cosmere.allomancy.common.Allomancy; +import leaf.cosmere.allomancy.common.manifestation.AllomancyBronze; +import leaf.cosmere.allomancy.common.registries.AllomancyManifestations; +import leaf.cosmere.api.Metals; +import leaf.cosmere.api.manifestation.Manifestation; +import leaf.cosmere.common.cap.entity.SpiritwebCapability; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import snownee.jade.api.EntityAccessor; +import snownee.jade.api.IEntityComponentProvider; +import snownee.jade.api.ITooltip; +import snownee.jade.api.config.IPluginConfig; + +public class BronzeSeekerTooltip implements IEntityComponentProvider +{ + static final BronzeSeekerTooltip INSTANCE = new BronzeSeekerTooltip(); + + @Override + public ResourceLocation getUid() + { + return Allomancy.rl("bronze_seeker_tooltip"); + } + + @Override + public void appendTooltip(ITooltip tooltip, EntityAccessor accessor, IPluginConfig iPluginConfig) + { + final boolean playerCreativeMode = accessor.getPlayer().isCreative(); + //check the entity we are trying to + SpiritwebCapability.get(accessor.getPlayer()).ifPresent(clientPlayer -> + { + AllomancyBronze allomancyBronze = (AllomancyBronze) AllomancyManifestations.ALLOMANCY_POWERS.get(Metals.MetalType.BRONZE).get(); + if (allomancyBronze.isMetalBurning(clientPlayer) || playerCreativeMode) + { + //check the entity we are trying to + final LivingEntity targetEntity = (LivingEntity) accessor.getEntity(); + + if (!AllomancyBronze.isValidSeekTarget(clientPlayer, targetEntity)) + { + return; + } + + SpiritwebCapability.get(targetEntity).ifPresent(targetSpiritweb -> + { + final boolean targetIsPlayer = targetSpiritweb.getLiving() instanceof Player; + + //show all manifestations, including hemalurgic based ones. + for (Manifestation manifestation : targetSpiritweb.getAvailableManifestations()) + { + //if player is creative mode + //or target is a mob + //or player has this manifestation active + if (playerCreativeMode || !targetIsPlayer || manifestation.isActive(targetSpiritweb)) + { + tooltip.add(manifestation.getTextComponent()); + } + } + }); + } + }); + } + +} diff --git a/src/allomancy/java/leaf/cosmere/allomancy/common/compat/hwyla/HwylaCompat.java b/src/allomancy/java/leaf/cosmere/allomancy/common/compat/hwyla/HwylaCompat.java new file mode 100644 index 000000000..b50fe907f --- /dev/null +++ b/src/allomancy/java/leaf/cosmere/allomancy/common/compat/hwyla/HwylaCompat.java @@ -0,0 +1,20 @@ +/* + * File updated ~ 8 - 10 - 2023 ~ Leaf + */ + +package leaf.cosmere.allomancy.common.compat.hwyla; + +import net.minecraft.world.entity.LivingEntity; +import snownee.jade.api.IWailaClientRegistration; +import snownee.jade.api.IWailaPlugin; +import snownee.jade.api.WailaPlugin; + +@WailaPlugin +public class HwylaCompat implements IWailaPlugin +{ + @Override + public void registerClient(IWailaClientRegistration registration) + { + registration.registerEntityComponent(BronzeSeekerTooltip.INSTANCE, LivingEntity.class); + } +} diff --git a/src/allomancy/java/leaf/cosmere/allomancy/common/config/AllomancyClientConfig.java b/src/allomancy/java/leaf/cosmere/allomancy/common/config/AllomancyClientConfig.java new file mode 100644 index 000000000..cffb21306 --- /dev/null +++ b/src/allomancy/java/leaf/cosmere/allomancy/common/config/AllomancyClientConfig.java @@ -0,0 +1,56 @@ +/* + * File updated ~ 4 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.allomancy.common.config; + +import leaf.cosmere.common.config.ICosmereConfig; +import net.minecraftforge.common.ForgeConfigSpec; +import net.minecraftforge.fml.config.ModConfig.Type; + +public class AllomancyClientConfig implements ICosmereConfig +{ + private final ForgeConfigSpec configSpec; + public final ForgeConfigSpec.BooleanValue drawMetalLines; + public final ForgeConfigSpec.BooleanValue drawMetalBoxes; + public final ForgeConfigSpec.BooleanValue canHearRain; + + AllomancyClientConfig() + { + ForgeConfigSpec.Builder builder = new ForgeConfigSpec.Builder(); + builder.comment("Client Config. This config only exists on the client").push("Allomancy"); + + drawMetalLines = builder.comment("Iron/Steel vision draws metal lines between the user and the source of metal").define("drawMetalLines", true); + drawMetalBoxes = builder.comment("Iron/Steel vision draws a blue box overlay over blocks that contain metal").define("drawMetalBoxes", true); + canHearRain = builder.comment("Allomantic Tin picks up rain sounds, generating a sculk particle to player and showing an image at position of sound").define("canHearRain", true); + + builder.pop(); + configSpec = builder.build(); + } + + @Override + public String getFileName() + { + return "AllomancyClient"; + } + + @Override + public ForgeConfigSpec getConfigSpec() + { + return configSpec; + } + + @Override + public Type getConfigType() + { + return Type.CLIENT; + } + + @Override + public void clearCache() + { + drawMetalBoxes.clearCache(); + drawMetalLines.clearCache(); + canHearRain.clearCache(); + } +} \ No newline at end of file diff --git a/src/allomancy/java/leaf/cosmere/allomancy/common/config/AllomancyConfigs.java b/src/allomancy/java/leaf/cosmere/allomancy/common/config/AllomancyConfigs.java new file mode 100644 index 000000000..077af708e --- /dev/null +++ b/src/allomancy/java/leaf/cosmere/allomancy/common/config/AllomancyConfigs.java @@ -0,0 +1,28 @@ +/* + * File updated ~ 7 - 6 - 2023 ~ Leaf + */ + +package leaf.cosmere.allomancy.common.config; + +import leaf.cosmere.common.config.CosmereConfigHelper; +import net.minecraftforge.fml.ModContainer; +import net.minecraftforge.fml.ModLoadingContext; + +public class AllomancyConfigs +{ + private AllomancyConfigs() + { + + } + + public static final AllomancyServerConfig SERVER = new AllomancyServerConfig(); + public static final AllomancyClientConfig CLIENT = new AllomancyClientConfig(); + + public static void registerConfigs(ModLoadingContext modLoadingContext) + { + ModContainer modContainer = modLoadingContext.getActiveContainer(); + CosmereConfigHelper.registerConfig(modContainer, SERVER); + CosmereConfigHelper.registerConfig(modContainer, CLIENT); + } + +} diff --git a/src/allomancy/java/leaf/cosmere/allomancy/common/config/AllomancyServerConfig.java b/src/allomancy/java/leaf/cosmere/allomancy/common/config/AllomancyServerConfig.java new file mode 100644 index 000000000..01d4dff52 --- /dev/null +++ b/src/allomancy/java/leaf/cosmere/allomancy/common/config/AllomancyServerConfig.java @@ -0,0 +1,62 @@ +/* + * File updated ~ 7 - 6 - 2023 ~ Leaf + */ + +package leaf.cosmere.allomancy.common.config; + +import leaf.cosmere.common.config.ICosmereConfig; +import net.minecraftforge.common.ForgeConfigSpec; +import net.minecraftforge.fml.config.ModConfig.Type; + +public class AllomancyServerConfig implements ICosmereConfig +{ + + private final ForgeConfigSpec configSpec; + + public final ForgeConfigSpec.DoubleValue IRON_STEEL_RANGE; + public final ForgeConfigSpec.DoubleValue PUSH_PULL_WEIGHT; + public final ForgeConfigSpec.DoubleValue MAX_PUSH_PULL_WEIGHT; + + // Boost amount for Duralumin and Nicrosil + //public final ForgeConfigSpec.DoubleValue boostAmount; + + + AllomancyServerConfig() + { + ForgeConfigSpec.Builder builder = new ForgeConfigSpec.Builder(); + builder.comment("Allomancy Config. This config is synced between server and client.").push("allomancy"); + + //can't modify registry objects like that + //boostAmount = builder.comment("Boost amount for Duralumin and Nicrosil").defineInRange("boostAmount", 0.334D, 0D, 1D); + + // max 10 might seem low, but the scanning thread chugs so hard at 10 that it's unusable and I doubt anyone will try it except for fun >> Gerbagel + IRON_STEEL_RANGE = builder.comment("Multiplier for iron and steel range. At base strength (9) the range is 9 while burning and 18 while flaring").defineInRange("ironSteelRange", 1.0D, 0D, 10.0D); + + PUSH_PULL_WEIGHT = builder.comment("Push/pull weight adjustment per block.").defineInRange("pushPullWeight", 0.05D, 0.01D, 100.0D); + MAX_PUSH_PULL_WEIGHT = builder.comment("Maximum pull/push weight adjustment. At 1.0 (default), push/pull power maxes out at 2 times (20 blocks)").defineInRange("maxPushPullWeight", 1.0D, 0D, 999999.0D); + + builder.pop(); + configSpec = builder.build(); + } + + @Override + public String getFileName() + { + return "AllomancyServer"; + } + + @Override + public ForgeConfigSpec getConfigSpec() + { + return configSpec; + } + + @Override + public Type getConfigType() + { + return Type.SERVER; + } + + @Override + public void clearCache() { } +} \ No newline at end of file diff --git a/src/allomancy/java/leaf/cosmere/allomancy/common/effects/AllomancyBoostEffect.java b/src/allomancy/java/leaf/cosmere/allomancy/common/effects/AllomancyBoostEffect.java new file mode 100644 index 000000000..d5e2ba167 --- /dev/null +++ b/src/allomancy/java/leaf/cosmere/allomancy/common/effects/AllomancyBoostEffect.java @@ -0,0 +1,77 @@ +/* + * File updated ~ 20 - 11 - 2024 ~ Leaf + */ + +package leaf.cosmere.allomancy.common.effects; + +import leaf.cosmere.allomancy.common.capabilities.AllomancySpiritwebSubmodule; +import leaf.cosmere.allomancy.common.registries.AllomancyAttributes; +import leaf.cosmere.api.EnumUtils; +import leaf.cosmere.api.Manifestations; +import leaf.cosmere.api.Metals; +import leaf.cosmere.api.cosmereEffect.CosmereEffect; +import leaf.cosmere.api.spiritweb.ISpiritweb; +import net.minecraft.world.entity.ai.attributes.AttributeModifier; + +public class AllomancyBoostEffect extends CosmereEffect +{ + public AllomancyBoostEffect() + { + super(); + + for (Metals.MetalType metalType : EnumUtils.METAL_TYPES) + { + if (metalType.hasAssociatedManifestation() && AllomancyAttributes.ALLOMANCY_ATTRIBUTES.containsKey(metalType)) + { + addAttributeModifier( + AllomancyAttributes.ALLOMANCY_ATTRIBUTES.get(metalType).get(), + 0.223,// todo config - Need to figure out an alternative to config boost amount //AllomancyConfigs.SERVER.boostAmount.get(), + AttributeModifier.Operation.MULTIPLY_TOTAL); + //todo boost other manifestation types + + } + } + //todo boost other manifestation types + + } + + @Override + protected int getTickOffset() + { + return Metals.MetalType.NICROSIL.getID(); + } + + @Override + public void applyEffectTick(ISpiritweb data, double strength) + { + //todo boost metal drain balancing + + AllomancySpiritwebSubmodule allo = AllomancySpiritwebSubmodule.getSubmodule(data); + + for (Metals.MetalType metalType : EnumUtils.METAL_TYPES) + { + if (!metalType.hasAssociatedManifestation() || metalType == Metals.MetalType.DURALUMIN) + { + continue; + } + + int ingestedMetalAmount = allo.getIngestedMetal(metalType); + + //if metal exists + if (ingestedMetalAmount > 0) + { + //drain metals that are actively being burned + if (data.canTickManifestation(Manifestations.ManifestationTypes.ALLOMANCY.getManifestation(metalType.getID()))) + { + final int amountToAdjust = + ingestedMetalAmount > 30 ? (ingestedMetalAmount / 2) : ingestedMetalAmount; + allo.adjustIngestedMetal( + metalType, + -amountToAdjust, //take amount away + true); + + } + } + } + } +} diff --git a/src/allomancy/java/leaf/cosmere/allomancy/common/effects/BrassStunEffect.java b/src/allomancy/java/leaf/cosmere/allomancy/common/effects/BrassStunEffect.java new file mode 100644 index 000000000..1a29714c1 --- /dev/null +++ b/src/allomancy/java/leaf/cosmere/allomancy/common/effects/BrassStunEffect.java @@ -0,0 +1,35 @@ +package leaf.cosmere.allomancy.common.effects; + +import net.minecraft.world.effect.MobEffect; +import net.minecraft.world.effect.MobEffectCategory; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.Mob; +import net.minecraft.world.entity.ai.attributes.AttributeMap; + +public class BrassStunEffect extends MobEffect +{ + public BrassStunEffect(MobEffectCategory category, int color) + { + super(category, color); + } + + @Override + public void addAttributeModifiers(LivingEntity pLivingEntity, AttributeMap pAttributeMap, int pAmplifier) + { + if (pLivingEntity instanceof Mob mob) + { + mob.setNoAi(true); + } + super.addAttributeModifiers(pLivingEntity, pAttributeMap, pAmplifier); + } + + @Override + public void removeAttributeModifiers(LivingEntity pLivingEntity, AttributeMap pAttributeMap, int pAmplifier) + { + if (pLivingEntity instanceof Mob mob) + { + mob.setNoAi(false); + } + super.removeAttributeModifiers(pLivingEntity, pAttributeMap, pAmplifier); + } +} diff --git a/src/allomancy/java/leaf/cosmere/allomancy/common/effects/CopperCloudEffect.java b/src/allomancy/java/leaf/cosmere/allomancy/common/effects/CopperCloudEffect.java new file mode 100644 index 000000000..85a4c0437 --- /dev/null +++ b/src/allomancy/java/leaf/cosmere/allomancy/common/effects/CopperCloudEffect.java @@ -0,0 +1,21 @@ +/* + * File updated ~ 29 - 10 - 2023 ~ Leaf + */ + +package leaf.cosmere.allomancy.common.effects; + +import leaf.cosmere.api.cosmereEffect.CosmereEffect; +import leaf.cosmere.common.registry.AttributesRegistry; +import net.minecraft.world.entity.ai.attributes.AttributeModifier; + +public class CopperCloudEffect extends CosmereEffect +{ + public CopperCloudEffect() + { + super(); + addAttributeModifier( + AttributesRegistry.COGNITIVE_CONCEALMENT.get(), + 1, + AttributeModifier.Operation.ADDITION); + } +} diff --git a/src/allomancy/java/leaf/cosmere/allomancy/common/effects/PewterBurnEffect.java b/src/allomancy/java/leaf/cosmere/allomancy/common/effects/PewterBurnEffect.java new file mode 100644 index 000000000..e90e947d1 --- /dev/null +++ b/src/allomancy/java/leaf/cosmere/allomancy/common/effects/PewterBurnEffect.java @@ -0,0 +1,51 @@ +/* + * File updated ~ 8 - 1 - 2025 ~ Leaf + */ + +package leaf.cosmere.allomancy.common.effects; + +import leaf.cosmere.api.cosmereEffect.CosmereEffect; +import leaf.cosmere.common.registry.AttributesRegistry; +import net.minecraft.world.entity.ai.attributes.AttributeModifier; +import net.minecraft.world.entity.ai.attributes.Attributes; + +public class PewterBurnEffect extends CosmereEffect +{ + public PewterBurnEffect() + { + super(); + + //equivalent to a speed potion for misting of 8 strength, double for flaring. + addAttributeModifier( + Attributes.MOVEMENT_SPEED, + 0.0125D, + AttributeModifier.Operation.MULTIPLY_TOTAL); + + //equivalent to a haste potion for misting of 8 strength, double for flaring. + addAttributeModifier( + Attributes.ATTACK_SPEED, + 0.0125D, + AttributeModifier.Operation.MULTIPLY_TOTAL); + + //3 damage at 8 strength, double for flare + addAttributeModifier( + Attributes.ATTACK_DAMAGE, + 0.375D, + AttributeModifier.Operation.ADDITION); + + //0.25 knock back at 8 strength, double for flare + addAttributeModifier( + Attributes.ATTACK_KNOCKBACK, + 0.03125D, + AttributeModifier.Operation.ADDITION); + + //damage resistance + //0.125 * 9 = 1.125 + addAttributeModifier( + AttributesRegistry.DETERMINATION.get(),//please forgive me for my sins anime god + 0.125D, + AttributeModifier.Operation.ADDITION); + + } + +} diff --git a/src/allomancy/java/leaf/cosmere/allomancy/common/entities/CoinProjectile.java b/src/allomancy/java/leaf/cosmere/allomancy/common/entities/CoinProjectile.java new file mode 100644 index 000000000..ff2f0b80d --- /dev/null +++ b/src/allomancy/java/leaf/cosmere/allomancy/common/entities/CoinProjectile.java @@ -0,0 +1,43 @@ +/* + * File updated ~ 8 - 10 - 2022 ~ Leaf + */ + +package leaf.cosmere.allomancy.common.entities; + +import leaf.cosmere.allomancy.common.registries.AllomancyEntityTypes; +import leaf.cosmere.api.Metals; +import leaf.cosmere.common.registry.ItemsRegistry; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.projectile.AbstractArrow; +import net.minecraft.world.entity.projectile.ItemSupplier; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; + +public class CoinProjectile extends AbstractArrow implements ItemSupplier +{ + private ItemStack projectileStack = ItemsRegistry.METAL_NUGGETS.get(Metals.MetalType.COPPER).get().getDefaultInstance(); + + public CoinProjectile(Level level, LivingEntity livingEntity, ItemStack itemStack) + { + super(AllomancyEntityTypes.COIN_PROJECTILE.get(), livingEntity, level); + this.projectileStack = itemStack.copy(); + } + + public CoinProjectile(EntityType coinProjectileEntityType, Level level) + { + super(coinProjectileEntityType, level); + } + + @Override + protected ItemStack getPickupItem() + { + return projectileStack; + } + + @Override + public ItemStack getItem() + { + return projectileStack; + } +} diff --git a/src/allomancy/java/leaf/cosmere/allomancy/common/eventHandlers/AllomancyCapabilitiesHandler.java b/src/allomancy/java/leaf/cosmere/allomancy/common/eventHandlers/AllomancyCapabilitiesHandler.java new file mode 100644 index 000000000..554f96271 --- /dev/null +++ b/src/allomancy/java/leaf/cosmere/allomancy/common/eventHandlers/AllomancyCapabilitiesHandler.java @@ -0,0 +1,88 @@ +/* + * File updated ~ 5 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.allomancy.common.eventHandlers; + +import leaf.cosmere.allomancy.common.Allomancy; +import leaf.cosmere.allomancy.common.capabilities.world.IScadrial; +import leaf.cosmere.allomancy.common.capabilities.world.ScadrialCapability; +import leaf.cosmere.api.Constants; +import net.minecraft.core.Direction; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.server.MinecraftServer; +import net.minecraft.world.level.Level; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.capabilities.ICapabilitySerializable; +import net.minecraftforge.common.util.LazyOptional; +import net.minecraftforge.event.AttachCapabilitiesEvent; +import net.minecraftforge.event.TickEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; + +import javax.annotation.Nonnull; + +@Mod.EventBusSubscriber(modid = Allomancy.MODID, bus = Mod.EventBusSubscriber.Bus.FORGE) +public class AllomancyCapabilitiesHandler +{ + @SubscribeEvent + public static void attachWorldCapabilities(AttachCapabilitiesEvent event) + { + Level level = event.getObject(); + + //todo move this to scadrial when that dimension is set up + if (event.getObject().dimension() == Level.OVERWORLD) //.location().toString().contains("overworld")) + { + event.addCapability(Constants.Resources.SCADRIAL_CAP, new ICapabilitySerializable() + { + final ScadrialCapability scadrial = new ScadrialCapability(level); + final LazyOptional scadrialInstance = LazyOptional.of(() -> scadrial); + + @Nonnull + @Override + public LazyOptional getCapability(@Nonnull Capability cap, @javax.annotation.Nullable Direction side) + { + return cap == ScadrialCapability.CAPABILITY ? (LazyOptional) scadrialInstance + : LazyOptional.empty(); + } + + @Override + public CompoundTag serializeNBT() + { + return scadrial.serializeNBT(); + } + + @Override + public void deserializeNBT(CompoundTag nbt) + { + scadrial.deserializeNBT(nbt); + } + }); + } + + } + + + @SubscribeEvent + public static void onWorldTick(TickEvent.LevelTickEvent event) + { + Level level = event.level; + if (event.phase == TickEvent.Phase.END && event.side.isServer() && event.level.dimension() == Level.OVERWORLD) + { + MinecraftServer server = level.getServer(); + if (server != null && server.getPlayerList().getPlayerCount() == 0) + { + return; + } + + ScadrialCapability.get(level).ifPresent(iScadrial -> + { + //todo change things so that mists aren't always out every night. + + }); + + } + + } + +} diff --git a/src/allomancy/java/leaf/cosmere/allomancy/common/eventHandlers/AllomancyCommonEvents.java b/src/allomancy/java/leaf/cosmere/allomancy/common/eventHandlers/AllomancyCommonEvents.java new file mode 100644 index 000000000..c5abcd8b9 --- /dev/null +++ b/src/allomancy/java/leaf/cosmere/allomancy/common/eventHandlers/AllomancyCommonEvents.java @@ -0,0 +1,63 @@ +/* + * File updated ~ 15 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.allomancy.common.eventHandlers; + + +import leaf.cosmere.allomancy.client.metalScanning.IronSteelLinesThread; +import leaf.cosmere.allomancy.common.Allomancy; +import leaf.cosmere.allomancy.common.commands.AllomancyCommands; +import leaf.cosmere.allomancy.common.manifestation.AllomancyEntityThread; +import leaf.cosmere.allomancy.common.registries.AllomancyItems; +import leaf.cosmere.common.registry.VillagerProfessionRegistry; +import net.minecraft.world.entity.npc.VillagerTrades; +import net.minecraft.world.item.ItemStack; +import net.minecraftforge.common.BasicItemListing; +import net.minecraftforge.event.RegisterCommandsEvent; +import net.minecraftforge.event.server.ServerStartedEvent; +import net.minecraftforge.event.server.ServerStoppingEvent; +import net.minecraftforge.event.village.VillagerTradesEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; + +import java.util.List; + +@Mod.EventBusSubscriber(modid = Allomancy.MODID, bus = Mod.EventBusSubscriber.Bus.FORGE) +public class AllomancyCommonEvents +{ + @SubscribeEvent + public static void registerCommands(RegisterCommandsEvent event) + { + AllomancyCommands.register(event.getDispatcher()); + } + + @SubscribeEvent + public static void registerTrades(VillagerTradesEvent event) + { + if (event.getType() == VillagerProfessionRegistry.METAL_TRADER.get()) + { + final List tradesForLevel = event.getTrades().get(3); + ItemStack itemStackForSale = new ItemStack(AllomancyItems.METAL_VIAL.get()); + tradesForLevel.add(new BasicItemListing( + 3, + itemStackForSale, + 8, + 2)); + } + } + + @SubscribeEvent + public static void onServerStartingEvent(ServerStartedEvent event) + { + AllomancyEntityThread.serverShutdown = false; + } + + @SubscribeEvent + public static void onServerStoppingEvent(ServerStoppingEvent event) + { + // tell threads it's time to stop + AllomancyEntityThread.serverShutdown = true; + IronSteelLinesThread.stopThread(false); + } +} \ No newline at end of file diff --git a/src/allomancy/java/leaf/cosmere/allomancy/common/eventHandlers/AllomancyEntityEventHandler.java b/src/allomancy/java/leaf/cosmere/allomancy/common/eventHandlers/AllomancyEntityEventHandler.java new file mode 100644 index 000000000..36239b467 --- /dev/null +++ b/src/allomancy/java/leaf/cosmere/allomancy/common/eventHandlers/AllomancyEntityEventHandler.java @@ -0,0 +1,114 @@ +/* + * File updated ~ 5 - 3 - 2025 ~ Leaf + */ + +package leaf.cosmere.allomancy.common.eventHandlers; + +import leaf.cosmere.allomancy.common.Allomancy; +import leaf.cosmere.allomancy.common.items.CoinPouchItem; +import leaf.cosmere.allomancy.common.manifestation.AllomancyAtium; +import leaf.cosmere.allomancy.common.manifestation.AllomancyChromium; +import leaf.cosmere.allomancy.common.manifestation.AllomancyNicrosil; +import leaf.cosmere.allomancy.common.manifestation.AllomancyPewter; +import leaf.cosmere.allomancy.common.utils.MiscHelper; +import leaf.cosmere.api.Metals; +import leaf.cosmere.common.items.GodMetalAlloyNuggetItem; +import leaf.cosmere.common.items.GodMetalNuggetItem; +import leaf.cosmere.common.items.MetalNuggetItem; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.item.ItemStack; +import net.minecraftforge.event.entity.living.LivingAttackEvent; +import net.minecraftforge.event.entity.living.LivingEntityUseItemEvent; +import net.minecraftforge.event.entity.living.LivingHurtEvent; +import net.minecraftforge.event.entity.player.EntityItemPickupEvent; +import net.minecraftforge.event.entity.player.PlayerInteractEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; + +@Mod.EventBusSubscriber(modid = Allomancy.MODID, bus = Mod.EventBusSubscriber.Bus.FORGE) +public class AllomancyEntityEventHandler +{ + + + @SubscribeEvent + public static void onEntityItemPickUp(EntityItemPickupEvent event) + { + if (CoinPouchItem.onPickupItem(event.getItem(), event.getEntity())) + { + event.setCanceled(true); + } + } + + + @SubscribeEvent + public static void onEntityInteract(PlayerInteractEvent.EntityInteract event) + { + if (!(event.getTarget() instanceof LivingEntity target)) + { + return; + } + + ItemStack stack = event.getEntity().getMainHandItem(); + if (!stack.isEmpty()) + { + if (stack.getItem() instanceof MetalNuggetItem metalNuggetItem) + { + // Don't alloy for consuming normal metal nuggets + if (!(stack.getItem() instanceof GodMetalAlloyNuggetItem) && !(stack.getItem() instanceof GodMetalNuggetItem)) + { + return; + } + // Only consume the nugget if it contains Lerasium + if (metalNuggetItem.getMetalType().isGodMetal() && metalNuggetItem.getMetalType() != Metals.MetalType.LERASIUM) + { + return; + } + + MiscHelper.consumeNugget(target, stack, 1); + stack.shrink(1); + } + } + else + { + + } + } + + + @SubscribeEvent + public static void onFinishUsingItem(LivingEntityUseItemEvent.Finish event) + { + if (event.isCanceled()) + { + return; + } + final LivingEntity livingEntity = event.getEntity(); + + if (event.getItem().getItem() instanceof MetalNuggetItem metalNuggetItem) + { + // Only consume the nugget if it contains Lerasium + if (metalNuggetItem.getMetalType().isGodMetal() && metalNuggetItem.getMetalType() != Metals.MetalType.LERASIUM) + { + return; + } + MiscHelper.consumeNugget(livingEntity, event.getItem(), 1); + } + } + + + //Attack event happens first + @SubscribeEvent + public static void onLivingAttackEvent(LivingAttackEvent event) + { + AllomancyAtium.onLivingAttackEvent(event); + } + + //then living hurt event + @SubscribeEvent + public static void onLivingHurtEvent(LivingHurtEvent event) + { + AllomancyNicrosil.onLivingHurtEvent(event); + AllomancyPewter.onLivingHurtEvent(event); + AllomancyChromium.onLivingHurtEvent(event); + } +} diff --git a/src/allomancy/java/leaf/cosmere/allomancy/common/eventHandlers/AllomancyModBusEventHandler.java b/src/allomancy/java/leaf/cosmere/allomancy/common/eventHandlers/AllomancyModBusEventHandler.java new file mode 100644 index 000000000..ef0e90b09 --- /dev/null +++ b/src/allomancy/java/leaf/cosmere/allomancy/common/eventHandlers/AllomancyModBusEventHandler.java @@ -0,0 +1,38 @@ +/* + * File updated ~ 20 - 11 - 2024 ~ Leaf + */ + +package leaf.cosmere.allomancy.common.eventHandlers; + +import leaf.cosmere.allomancy.common.Allomancy; +import leaf.cosmere.allomancy.common.registries.AllomancyAttributes; +import leaf.cosmere.api.EnumUtils; +import leaf.cosmere.api.Metals; +import leaf.cosmere.common.eventHandlers.ModBusEventHandler; +import net.minecraft.world.entity.EntityType; +import net.minecraftforge.event.entity.EntityAttributeModificationEvent; +import net.minecraftforge.eventbus.api.EventPriority; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; + + +@Mod.EventBusSubscriber(modid = Allomancy.MODID, bus = Mod.EventBusSubscriber.Bus.MOD) +public class AllomancyModBusEventHandler +{ + @SubscribeEvent(priority = EventPriority.HIGH) + public static void onEntityAttributeModificationEvent(EntityAttributeModificationEvent event) + { + for (EntityType entityType : ModBusEventHandler.ENTITIES_THAT_CAN_HAVE_POWERS) + { + for (Metals.MetalType metalType : EnumUtils.METAL_TYPES) + { + if (metalType.hasAssociatedManifestation() && AllomancyAttributes.ALLOMANCY_ATTRIBUTES.containsKey(metalType)) + { + event.add(entityType, AllomancyAttributes.ALLOMANCY_ATTRIBUTES.get(metalType).get()); + } + } + } + + event.add(EntityType.WARDEN, AllomancyAttributes.ALLOMANCY_ATTRIBUTES.get(Metals.MetalType.BRONZE).get()); + } +} diff --git a/src/allomancy/java/leaf/cosmere/allomancy/common/items/CoinPouchItem.java b/src/allomancy/java/leaf/cosmere/allomancy/common/items/CoinPouchItem.java new file mode 100644 index 000000000..dc689d6fe --- /dev/null +++ b/src/allomancy/java/leaf/cosmere/allomancy/common/items/CoinPouchItem.java @@ -0,0 +1,285 @@ +/* + * File updated ~ 17 - 3 - 2024 ~ Leaf + */ + +package leaf.cosmere.allomancy.common.items; + +import leaf.cosmere.allomancy.client.AllomancyKeybindings; +import leaf.cosmere.allomancy.common.Allomancy; +import leaf.cosmere.allomancy.common.coinpouch.CoinPouchContainerMenu; +import leaf.cosmere.allomancy.common.coinpouch.CoinPouchInventory; +import leaf.cosmere.allomancy.common.entities.CoinProjectile; +import leaf.cosmere.allomancy.common.manifestation.AllomancyIronSteel; +import leaf.cosmere.allomancy.common.network.packets.PlayerShootProjectileMessage; +import leaf.cosmere.allomancy.common.registries.AllomancyItems; +import leaf.cosmere.allomancy.common.registries.AllomancyManifestations; +import leaf.cosmere.api.CosmereTags; +import leaf.cosmere.api.IHasMetalType; +import leaf.cosmere.api.Metals; +import leaf.cosmere.common.cap.entity.SpiritwebCapability; +import leaf.cosmere.common.registry.ItemsRegistry; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.chat.Component; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.MenuProvider; +import net.minecraft.world.SimpleMenuProvider; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.item.ItemEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.entity.projectile.AbstractArrow; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.ProjectileWeaponItem; +import net.minecraft.world.item.Rarity; +import net.minecraft.world.item.enchantment.EnchantmentHelper; +import net.minecraft.world.item.enchantment.Enchantments; +import net.minecraft.world.level.Level; +import net.minecraftforge.common.Tags; +import net.minecraftforge.common.capabilities.ForgeCapabilities; +import net.minecraftforge.common.capabilities.ICapabilityProvider; +import net.minecraftforge.items.IItemHandlerModifiable; +import net.minecraftforge.network.NetworkHooks; + +import java.util.function.Predicate; + +public class CoinPouchItem extends ProjectileWeaponItem +{ + public static final Predicate SUPPORTED_PROJECTILES = (itemStack) -> + { + // todo: fix copper nugget tagging + final boolean isNugget = itemStack.is(Tags.Items.NUGGETS) || itemStack.getItem() == ItemsRegistry.METAL_NUGGETS.get(Metals.MetalType.COPPER).asItem(); // don't know why copper nuggets aren't tagged + final boolean containsMetal = itemStack.is(CosmereTags.Items.CONTAINS_METAL); + final boolean isUncommonMetal = (itemStack.getItem() instanceof IHasMetalType metalType) && metalType.getMetalType().getRarity() != Rarity.COMMON; + return isNugget && containsMetal && !isUncommonMetal; + }; + + public CoinPouchItem(Properties properties) + { + super(properties); + } + + @Override + public Predicate getAllSupportedProjectiles() + { + return SUPPORTED_PROJECTILES; + } + + @Override + public int getDefaultProjectileRange() + { + return 8; + } + + @Override + public int getUseDuration(ItemStack itemStack) + { + return 600; + } + + + public InteractionResultHolder use(Level level, Player player, InteractionHand interactionHand) + { + ItemStack coinPouchStack = player.getItemInHand(interactionHand); + + //only allow opening pouch when it's in the main hand. + if (interactionHand == InteractionHand.MAIN_HAND && player.isCrouching()) + { + //open inventory + if (!player.level().isClientSide && player instanceof ServerPlayer) + { + MenuProvider container = new SimpleMenuProvider((windowID, playerInv, plyr) -> new CoinPouchContainerMenu(windowID, playerInv, coinPouchStack), Component.translatable("item.allomancy.coin_pouch")); + NetworkHooks.openScreen((ServerPlayer) player, container, buf -> buf.writeBoolean(true)); + } + } + else if (player.level().isClientSide && AllomancyKeybindings.ALLOMANCY_STEEL_PUSH.isDown()) + { + //assume they wanna shoot a projectile + //so let them tell the server + Allomancy.packetHandler().sendToServer(new PlayerShootProjectileMessage()); + } + return InteractionResultHolder.consume(coinPouchStack); + } + + public void shoot(Player player, ItemStack coinPouchStack) + { + SpiritwebCapability.get(player).ifPresent((data) -> + { + final AllomancyIronSteel steelManifestation = (AllomancyIronSteel) AllomancyManifestations.ALLOMANCY_POWERS.get(Metals.MetalType.STEEL).get(); + + if (steelManifestation.isActive(data) && steelManifestation.getMode(data) > 0) + { + final boolean playerCreativeMode = player.getAbilities().instabuild; + final boolean infiniteAmmo = playerCreativeMode || EnchantmentHelper.getItemEnchantmentLevel(Enchantments.INFINITY_ARROWS, coinPouchStack) > 0; + + ItemStack ammo = getProjectile(player, coinPouchStack); + + if (!ammo.isEmpty() || infiniteAmmo) + { + final ItemStack stackToShoot = ammo.copy().split(1); + if (!infiniteAmmo) + { + ammo.shrink(1); + } + //shoot? + + if (!player.level().isClientSide) + { + AbstractArrow coinProjectile = new CoinProjectile(player.level(), player, stackToShoot); + coinProjectile.setCritArrow(true); + coinProjectile.shootFromRotation( + player, + player.getXRot(), + player.getYRot(), + 0.0F, + 3.0F, + 1.0F); + + coinProjectile.pickup = infiniteAmmo + ? AbstractArrow.Pickup.DISALLOWED + : AbstractArrow.Pickup.ALLOWED; + + player.level().addFreshEntity(coinProjectile); + + steelManifestation.trackValidEntity(data, coinProjectile); + } + + player.level().playSound( + null, + player.getX(), + player.getY(), + player.getZ(), + SoundEvents.ARROW_SHOOT, + SoundSource.PLAYERS, + 1.0F, + 1.0F / (player.level().getRandom().nextFloat() * 0.4F + 1.2F) + 1 * 0.5F); + + } + } + }); + } + + @Override + public ICapabilityProvider initCapabilities(ItemStack stack, CompoundTag oldCapNbt) + { + final CoinPouchInventory coinPouchInventory = new CoinPouchInventory(); + + if (oldCapNbt != null) + { + coinPouchInventory.deserializeNBT(oldCapNbt); // todo check if this breaks things? + } + + return coinPouchInventory; + } + + + public ItemStack getProjectile(Player player, ItemStack coinPouchStack) + { + if (!(coinPouchStack.getItem() instanceof ProjectileWeaponItem)) + { + return ItemStack.EMPTY; + } + else + { + IItemHandlerModifiable bagInv = getBagInv(coinPouchStack); + Predicate predicate = ((ProjectileWeaponItem) coinPouchStack.getItem()).getSupportedHeldProjectiles(); + + for (int i = 0; i < bagInv.getSlots(); ++i) + { + ItemStack stackInSlot = bagInv.getStackInSlot(i); + if (predicate.test(stackInSlot)) + { + return net.minecraftforge.common.ForgeHooks.getProjectile(player, coinPouchStack, stackInSlot); + } + } + + return net.minecraftforge.common.ForgeHooks.getProjectile( + player, + coinPouchStack, + player.getAbilities().instabuild + ? new ItemStack(ItemsRegistry.METAL_NUGGETS.get(Metals.MetalType.COPPER)) + : ItemStack.EMPTY); + } + } + + private static IItemHandlerModifiable getBagInv(ItemStack coinPouchStack) + { + return (IItemHandlerModifiable) coinPouchStack.getCapability(ForgeCapabilities.ITEM_HANDLER).orElse(null); + } + + public static boolean onPickupItem(Entity entity, Player player) + { + //icky + ItemEntity itemEntity = entity instanceof ItemEntity ? (ItemEntity) entity : null; + CoinProjectile coinProjectile = entity instanceof CoinProjectile ? (CoinProjectile) entity : null; + + final boolean isItemEntity = itemEntity != null; + final boolean isCoinProjectile = coinProjectile != null; + + if (!isItemEntity && !isCoinProjectile) + { + return false; + } + + ItemStack entityStack; + + if (isItemEntity) + { + entityStack = itemEntity.getItem(); + } + else //ick, why do these classes not share an item provider type + { + entityStack = coinProjectile.getItem(); + } + + int originalCount = entityStack.getCount(); + + if (CoinPouchItem.SUPPORTED_PROJECTILES.test(entityStack)) + { + for (int i = 0; i < player.getInventory().getContainerSize(); i++) + { + ItemStack bag = player.getInventory().getItem(i); + if (!bag.isEmpty() && bag.is(AllomancyItems.COIN_POUCH.get())) + { + IItemHandlerModifiable bagInv = getBagInv(bag); + + for (int j = 0; j < bagInv.getSlots(); j++) + { + entityStack = bagInv.insertItem(j, entityStack, false); + + if (entityStack.isEmpty()) + { + break; + } + } + + if (player.getInventory().add(-1, entityStack)) + { + //great, we fit it all. + } + + final int amountTaken = originalCount - entityStack.getCount(); + if (amountTaken > 0) + { + if (isItemEntity) + { + //here's what we couldn't fit (if any) + itemEntity.setItem(entityStack); + //do the take animation where the entity flies into the player + player.take(itemEntity, amountTaken); + } + else// if (isCoinProjectile) + { + //coin projectiles are always stack size 1 (?) so should be fine to delete if we get here. + coinProjectile.discard(); + } + return true; + } + } + } + } + return false; + } +} diff --git a/src/allomancy/java/leaf/cosmere/allomancy/common/items/MetalVialItem.java b/src/allomancy/java/leaf/cosmere/allomancy/common/items/MetalVialItem.java new file mode 100644 index 000000000..ae01f1c57 --- /dev/null +++ b/src/allomancy/java/leaf/cosmere/allomancy/common/items/MetalVialItem.java @@ -0,0 +1,284 @@ +/* + * File updated ~ 11 - 8 - 2024 ~ Leaf + */ + +package leaf.cosmere.allomancy.common.items; + +import leaf.cosmere.allomancy.common.registries.AllomancyItems; +import leaf.cosmere.allomancy.common.utils.MiscHelper; +import leaf.cosmere.api.IHasMetalType; +import leaf.cosmere.api.Metals; +import leaf.cosmere.api.helpers.CompoundNBTHelper; +import leaf.cosmere.api.helpers.PlayerHelper; +import leaf.cosmere.api.text.TextHelper; +import leaf.cosmere.common.items.BaseItem; +import leaf.cosmere.common.items.GodMetalNuggetItem; +import leaf.cosmere.common.registry.ItemsRegistry; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.chat.Component; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.*; +import net.minecraft.world.level.Level; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; + +import javax.annotation.Nonnull; +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +import static leaf.cosmere.api.Constants.Strings.CONTAINED_METALS; + +public class MetalVialItem extends BaseItem implements IHasMetalType +{ + private static final String metal_ids = "metalIDs"; + private static final String metal_amounts = "metalAmounts"; + private static final int MAX_METALS_COUNT = 16; + + + public void addFilled(CreativeModeTab.Output output) + { + final ItemStack filled = new ItemStack(this); + for (int i = 0; i < 16; i++) + { + addMetals(filled, i, 1); + } + output.accept(filled); + } + + private static CompoundTag getContainedMetalsTag(ItemStack stack) + { + return stack.getOrCreateTagElement("metals_contained"); + } + + public static boolean isFull(ItemStack stack) + { + return containedMetalCount(stack) >= getMaxFillCount(stack); + } + + public static int getMaxFillCount(ItemStack stack) + { + final CompoundTag stackTags = stack.getOrCreateTag(); + final String max_count = "max_count"; + return stackTags.contains(max_count) ? stackTags.getInt(max_count) : MAX_METALS_COUNT; + } + + @Nonnull + @Override + public UseAnim getUseAnimation(ItemStack stack) + { + return UseAnim.DRINK; + } + + @Override + public int getUseDuration(ItemStack stack) + { + //same drink time as normal potions + return 16; + } + + + @Nonnull + @Override + public InteractionResultHolder use(Level world, Player player, @Nonnull InteractionHand hand) + { + ItemStack stack = player.getItemInHand(hand); + if (player.canEat(true) && containedMetalCount(player.getItemInHand(hand)) > 0) + { + player.startUsingItem(hand); + return InteractionResultHolder.consume(stack); + } + return InteractionResultHolder.pass(stack); + } + + + @Override + public ItemStack finishUsingItem(ItemStack stack, Level worldIn, LivingEntity entityLiving) + { + if (worldIn.isClientSide) + { + return stack; + } + + Player playerentity = entityLiving instanceof Player ? (Player) entityLiving : null; + + //for each metal in the vial + Map metalsInVial = getStoredMetalsMap(getContainedMetalsTag(stack)); + + metalsInVial.forEach((metalId, amount) -> + { + ItemStack newStack; + if(Metals.MetalType.valueOf(metalId).isPresent()) + { + Metals.MetalType metalType = Metals.MetalType.valueOf(metalId).get(); + if(metalType.isGodMetal()) + { + newStack = new ItemStack(ItemsRegistry.GOD_METAL_NUGGETS.get(metalType).asItem(), amount); + GodMetalNuggetItem item = (GodMetalNuggetItem) newStack.getItem(); + item.writeMetalAlloySizeNbtData(newStack, item.getMaxSize()); + } + else + { + switch(metalType) + { + case IRON: + newStack = new ItemStack(Items.IRON_NUGGET, amount); + break; + case GOLD: + newStack = new ItemStack(Items.GOLD_NUGGET, amount); + break; + default: + newStack = new ItemStack(ItemsRegistry.METAL_NUGGETS.get(metalType).asItem(), amount); + break; + } + + } + MiscHelper.consumeNugget(entityLiving, newStack, amount); + } + }); + + + if (playerentity == null || !playerentity.getAbilities().instabuild) + { + if (stack.isEmpty()) + { + return new ItemStack(AllomancyItems.METAL_VIAL.get()); + } + + if (playerentity != null) + { + if (stack.getCount() > 1) + { + //split 1 off the stack, if more than one + //drain that new stack + ItemStack splitStack = stack.split(1); + emptyMetals(splitStack); + + PlayerHelper.addItem(playerentity, splitStack); + } + else + { + emptyMetals(stack); + } + } + } + + return stack; + } + + public static int containedMetalCount(ItemStack stack) + { + int count = 0; + int[] metalAmounts = CompoundNBTHelper.getIntArray(getContainedMetalsTag(stack), metal_amounts); + + for (int metalCount : metalAmounts) + count += metalCount; + + return count; + } + + public static void addMetals(ItemStack stack, int metalID, int count) + { + if (!(stack.getItem() instanceof MetalVialItem)) + { + return; + } + + //todo refactor this? seems so convoluted compared to what I'm used to + + //get and add + CompoundTag nbt = getContainedMetalsTag(stack); + + Map sorted = getStoredMetalsMap(nbt); + + if (sorted.containsKey(metalID)) + { + count += sorted.get(metalID); + } + + sorted.put(metalID, count); + List keys = new ArrayList<>(sorted.keySet()); + List values = new ArrayList<>(sorted.values()); + + CompoundNBTHelper.setIntArray(nbt, metal_ids, keys); + CompoundNBTHelper.setIntArray(nbt, metal_amounts, values); + } + + private static Map getStoredMetalsMap(CompoundTag nbt) + { + int[] metalIDs = CompoundNBTHelper.getIntArray(nbt, metal_ids); + int[] metalAmounts = CompoundNBTHelper.getIntArray(nbt, metal_amounts); + + Map sorted = IntStream.range(0, metalIDs.length).boxed() + .collect(Collectors.toMap( + i -> metalIDs[i], i -> metalAmounts[i], + (i, j) -> i, LinkedHashMap::new)); + return sorted; + } + + public void emptyMetals(ItemStack stack) + { + CompoundTag nbt = getContainedMetalsTag(stack); + nbt.remove(metal_ids); + nbt.remove(metal_amounts); + } + + @Override + public boolean isBarVisible(ItemStack stack) + { + return true; + } + + @Override + public int getBarWidth(ItemStack stack) + { + return getBarWidth(containedMetalCount(stack), MAX_METALS_COUNT); + } + + @Override + public int getBarColor(ItemStack stack) + { + return getBarColour(containedMetalCount(stack), MAX_METALS_COUNT); + } + + @Override + @OnlyIn(Dist.CLIENT) + public void appendHoverText(ItemStack stack, Level worldIn, List tooltip, TooltipFlag flagIn) + { + Map sorted = getStoredMetalsMap(getContainedMetalsTag(stack)); + tooltip.add(TextHelper.createTranslatedText(CONTAINED_METALS)); + sorted.entrySet().stream().forEach(metalInfo -> + { + // MetalName x Value + String metalName = Metals.MetalType.valueOf(metalInfo.getKey()).get().getName(); + + String metalTranslation = String.format("item.cosmere.%s_nugget", metalName); + tooltip.add(TextHelper.createTranslatedText(metalTranslation).append(TextHelper.createText(String.format(": x%s", metalInfo.getValue())))); + + }); + + tooltip.add(TextHelper.createText(String.format("%s / %s", containedMetalCount(stack), MAX_METALS_COUNT))); + + } + + @Override + public Metals.MetalType getMetalType() + { + return Metals.MetalType.IRON; + } + + public static void addMetals(ItemStack newMetalVialStack, ItemStack oldMetalVialStack) + { + Map sorted = getStoredMetalsMap(getContainedMetalsTag(oldMetalVialStack)); + for (Integer metalID : sorted.keySet()) + { + addMetals(newMetalVialStack, metalID, sorted.get(metalID)); + } + } +} diff --git a/src/allomancy/java/leaf/cosmere/allomancy/common/items/MistcloakItem.java b/src/allomancy/java/leaf/cosmere/allomancy/common/items/MistcloakItem.java new file mode 100644 index 000000000..1805423a1 --- /dev/null +++ b/src/allomancy/java/leaf/cosmere/allomancy/common/items/MistcloakItem.java @@ -0,0 +1,65 @@ +/* + * File updated ~ 7 - 8 - 2023 ~ Leaf + */ + +package leaf.cosmere.allomancy.common.items; + +import leaf.cosmere.allomancy.common.Allomancy; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.item.ArmorItem; +import net.minecraft.world.item.ArmorMaterial; +import net.minecraft.world.item.ItemStack; + +import javax.annotation.Nonnull; + +public class MistcloakItem extends ArmorItem +{ + public MistcloakItem(ArmorMaterial material, Type type, Properties properties) + { + super(material, type, properties); + } + + //todo increase dodge chance while in the mists + + @Nonnull + @Override + public final String getArmorTexture(ItemStack stack, Entity entity, EquipmentSlot slot, String type) + { + return Allomancy.MODID + ":" + "textures/models/armor/mistcloak.png"; + } + +/* If we were to not use curios, this is what we would attempt to use. + There's a weird interaction with some vanilla code that gets run afterward, resetting some of the values we set + Ideally don't deal with it. + @OnlyIn(Dist.CLIENT) + @Override + public void initializeClient(Consumer consumer) + { + consumer.accept(new IClientItemExtensions() + { + @Nullable + @Override + public HumanoidModel getHumanoidArmorModel(LivingEntity livingEntity, ItemStack itemStack, EquipmentSlot equipmentSlot, HumanoidModel original) + { + Optional armorModel = CosmereRenderers.getRenderer(itemStack.getItem()); + + if (armorModel.isPresent() && armorModel.get() instanceof MistcloakRenderer armorRenderer) + { + var model = armorRenderer.model; + model.hat.visible = false; + model.head.visible = true; + model.body.visible = true; + + model.rightArm.visible = false; + model.leftArm.visible = false; + model.rightLeg.visible = false; + model.leftLeg.visible = false; + + return model; + } + return null; + } + }); + }*/ +} diff --git a/src/allomancy/java/leaf/cosmere/allomancy/common/manifestation/AllomancyAluminum.java b/src/allomancy/java/leaf/cosmere/allomancy/common/manifestation/AllomancyAluminum.java new file mode 100644 index 000000000..ca3cbabac --- /dev/null +++ b/src/allomancy/java/leaf/cosmere/allomancy/common/manifestation/AllomancyAluminum.java @@ -0,0 +1,73 @@ +/* + * File updated ~ 5 - 3 - 2025 ~ Leaf + */ + +package leaf.cosmere.allomancy.common.manifestation; + +import leaf.cosmere.allomancy.common.capabilities.AllomancySpiritwebSubmodule; +import leaf.cosmere.api.EnumUtils; +import leaf.cosmere.api.Manifestations; +import leaf.cosmere.api.Metals; +import leaf.cosmere.api.spiritweb.ISpiritweb; +import leaf.cosmere.common.cap.entity.SpiritwebCapability; + +public class AllomancyAluminum extends AllomancyManifestation +{ + public AllomancyAluminum(Metals.MetalType metalType) + { + super(metalType); + } + + @Override + protected void applyEffectTick(ISpiritweb data) + { + //passive active ability, if any + if (isActiveTick(data)) + { + int drainedCount = 0; + + //drain all metals + for (Metals.MetalType metalType : EnumUtils.METAL_TYPES) + { + if (metalType == Metals.MetalType.ALUMINUM) + { + continue; + } + + if (drainMetal(data, metalType)) + { + drainedCount++; + } + } + + if (drainedCount <= 0) + { + drainMetal(data, Metals.MetalType.ALUMINUM); + } + + data.syncToClients(null); + } + } + + private boolean drainMetal(ISpiritweb data, Metals.MetalType metalType) + { + //todo move this to the drain investiture effect? + AllomancySpiritwebSubmodule allo = (AllomancySpiritwebSubmodule) ((SpiritwebCapability) data).getSubmodule(Manifestations.ManifestationTypes.ALLOMANCY); + + int ingestedMetalAmount = allo.getIngestedMetal(metalType); + + if (ingestedMetalAmount > 0) + { + final int amountToAdjust = ingestedMetalAmount > 30 ? (ingestedMetalAmount / 2) : ingestedMetalAmount; + allo.adjustIngestedMetal( + metalType, + -amountToAdjust, //take the amount away + true); + return true; + } + + return false; + } + + +} diff --git a/src/allomancy/java/leaf/cosmere/allomancy/common/manifestation/AllomancyAtium.java b/src/allomancy/java/leaf/cosmere/allomancy/common/manifestation/AllomancyAtium.java new file mode 100644 index 000000000..fc8db7bf5 --- /dev/null +++ b/src/allomancy/java/leaf/cosmere/allomancy/common/manifestation/AllomancyAtium.java @@ -0,0 +1,96 @@ +/* + * File updated ~ 10 - 1 - 2023 ~ Leaf + */ + +package leaf.cosmere.allomancy.common.manifestation; + +import leaf.cosmere.allomancy.common.registries.AllomancyAttributes; +import leaf.cosmere.allomancy.common.registries.AllomancyManifestations; +import leaf.cosmere.api.Metals; +import leaf.cosmere.api.spiritweb.ISpiritweb; +import leaf.cosmere.common.cap.entity.SpiritwebCapability; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.ai.attributes.Attribute; +import net.minecraftforge.common.util.LazyOptional; +import net.minecraftforge.event.entity.living.LivingAttackEvent; + +public class AllomancyAtium extends AllomancyManifestation +{ + public AllomancyAtium(Metals.MetalType metalType) + { + super(metalType); + + + } + + @Override + public Attribute getAttribute() + { + return AllomancyAttributes.ALLOMANCY_ATTRIBUTES.get(Metals.MetalType.ELECTRUM).getAttribute(); + } + + @Override + protected void applyEffectTick(ISpiritweb data) + { + //Reveals Your Future + { + //todo + data.runInvestiturePull(this); + + } + } + + + public static void onLivingAttackEvent(LivingAttackEvent event) + { + if (event.isCanceled()) + { + return; + } + + SpiritwebCapability.get(event.getEntity()).ifPresent((targetData) -> + { + AllomancyManifestation atium = AllomancyManifestations.ALLOMANCY_POWERS.get(Metals.MetalType.ATIUM).get(); + AllomancyManifestation electrum = AllomancyManifestations.ALLOMANCY_POWERS.get(Metals.MetalType.ELECTRUM).get(); + + if (atium.isActive(targetData)) + { + //target is burning atium, so may automatically cancel damage. + //check that attacker is not also burning atium or electrum + + + //if the attacker is capable of burning atium + if (event.getSource().getEntity() instanceof LivingEntity attackerLiving) + { + final LazyOptional iSpiritwebLazyOptional = SpiritwebCapability.get(attackerLiving); + + if (iSpiritwebLazyOptional.isPresent()) + { + iSpiritwebLazyOptional.ifPresent((attackerData) -> + { + if (atium.isActive(attackerData) || electrum.isActive(attackerData)) + { + //contested, prevents automatically dodging. + } + else + { + //attacker is not burning contesting metals. + event.setCanceled(true); + } + }); + } + else + { + //attacker has no spiritweb + event.setCanceled(true); + } + } + else + { + //attacker is not living + //atium isn't going to prevent damage from swimming in lava for example. + } + } + }); + } +} diff --git a/src/allomancy/java/leaf/cosmere/allomancy/common/manifestation/AllomancyBendalloy.java b/src/allomancy/java/leaf/cosmere/allomancy/common/manifestation/AllomancyBendalloy.java new file mode 100644 index 000000000..65a6bdada --- /dev/null +++ b/src/allomancy/java/leaf/cosmere/allomancy/common/manifestation/AllomancyBendalloy.java @@ -0,0 +1,153 @@ +/* + * File updated ~ 15 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.allomancy.common.manifestation; + +import leaf.cosmere.api.CosmereAPI; +import leaf.cosmere.api.Metals; +import leaf.cosmere.api.helpers.EffectsHelper; +import leaf.cosmere.api.helpers.EntityHelper; +import leaf.cosmere.api.investiture.InvHelpers; +import leaf.cosmere.api.spiritweb.ISpiritweb; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.world.entity.LivingEntity; + +import java.util.Arrays; +import java.util.ConcurrentModificationException; +import java.util.HashMap; +import java.util.List; + +public class AllomancyBendalloy extends AllomancyManifestation +{ + private static final HashMap playerThreadMap = new HashMap<>(); + + public AllomancyBendalloy(Metals.MetalType metalType) + { + super(metalType); + } + + + @Override + protected void applyEffectTick(ISpiritweb data) + { + if (AllomancyEntityThread.serverShutdown) + { + //don't start up new threads if the server is shutting down + return; + } + + int mode = getMode(data); + String uuid = data.getLiving().getStringUUID(); + + // data processing + { + // this is the only way to check if the player is still online, thanks forge devs + if (data.getLiving().level().getServer().getPlayerList().getPlayer(data.getLiving().getUUID()) == null) + { + return; + } + + double invest = data.runInvestiturePull(this); + //Slows Down Time for the entities around the user + if (playerThreadMap.get(uuid) == null) + { + playerThreadMap.put(uuid, new BendalloyThread(data)); + } + List entitiesToAffect = playerThreadMap.get(uuid).requestEntityList(); + for (LivingEntity e : entitiesToAffect) + { + e.addEffect(EffectsHelper.getNewEffect(MobEffects.MOVEMENT_SLOWDOWN, InvHelpers.InvMath.beuToPower(invest))); + } + + + //todo slow tile entities? not sure how to do that. cadmium just calls tick more often. + + } + } + + @Override + public void onModeChange(ISpiritweb data, int lastMode) + { + String uuid = data.getLiving().getStringUUID(); + if (getMode(data) <= 0) + { + playerThreadMap.remove(uuid); + } + + super.onModeChange(data, lastMode); + } + + @Override + public boolean tick(ISpiritweb data) + { + // data thread management + { + String uuid = data.getLiving().getStringUUID(); + if (!playerThreadMap.containsKey(uuid)) + { + playerThreadMap.put(uuid, new BendalloyThread(data)); + } + + playerThreadMap.entrySet().removeIf(entry -> !entry.getValue().isRunning || AllomancyEntityThread.serverShutdown || entry.getValue() == null); + } + + return super.tick(data); + } + + class BendalloyThread extends AllomancyEntityThread + { + public BendalloyThread(ISpiritweb data) + { + super(data); + + Thread t = new Thread(this, "bendalloy_thread_" + data.getLiving().getDisplayName().getString()); + t.start(); + } + + @Override + public void run() + { + List newEntityList; + while (true) + { + int mode = getMode(data); + if (serverShutdown) + { + break; + } + + if (mode <= 0) + { + break; + } + + try + { + if (lock.tryLock()) + { + int range = getRange(data); + + newEntityList = EntityHelper.getLivingEntitiesInRange(data.getLiving(), range, false); + setEntityList(newEntityList); + lock.unlock(); + } + // sleep thread for 1 tick (50ms) + Thread.sleep(50); + } + catch (Exception e) + { + CosmereAPI.logger.debug(Arrays.toString(e.getStackTrace())); + + if (e instanceof ConcurrentModificationException) + { + lock.unlock(); + } + + break; + } + } + isRunning = false; + } + } +} diff --git a/src/allomancy/java/leaf/cosmere/allomancy/common/manifestation/AllomancyBrass.java b/src/allomancy/java/leaf/cosmere/allomancy/common/manifestation/AllomancyBrass.java new file mode 100644 index 000000000..57049910f --- /dev/null +++ b/src/allomancy/java/leaf/cosmere/allomancy/common/manifestation/AllomancyBrass.java @@ -0,0 +1,250 @@ +/* + * File updated ~ 15 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.allomancy.common.manifestation; + +import leaf.cosmere.allomancy.client.AllomancyKeybindings; +import leaf.cosmere.allomancy.common.Allomancy; +import leaf.cosmere.allomancy.common.network.packets.EntityAllomancyActivateMessage; +import leaf.cosmere.allomancy.common.registries.AllomancyEffects; +import leaf.cosmere.api.CosmereAPI; +import leaf.cosmere.api.Metals; +import leaf.cosmere.api.helpers.EffectsHelper; +import leaf.cosmere.api.helpers.EntityHelper; +import leaf.cosmere.api.helpers.PlayerHelper; +import leaf.cosmere.api.spiritweb.ISpiritweb; +import leaf.cosmere.client.Keybindings; +import leaf.cosmere.common.config.CosmereConfigs; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.Mob; +import net.minecraft.world.phys.EntityHitResult; +import net.minecraft.world.phys.HitResult; + +import java.util.*; + +public class AllomancyBrass extends AllomancyManifestation +{ + public static final HashMap playerThreadMap = new HashMap<>(); + + public AllomancyBrass(Metals.MetalType metalType) + { + super(metalType); + } + + //Dampens Emotions + @Override + public void applyEffectTick(ISpiritweb data) + { + if (data.getLiving().level().isClientSide()) + { + if (isActiveTick(data)) + { + boolean isSingleTarget = (AllomancyKeybindings.ALLOMANCY_SOOTHE.isDown() || (Keybindings.MANIFESTATION_USE_ACTIVE.isDown()) && data.getSelectedManifestation().equals(getManifestation())); + int singleTargetEntityId = 0; + + if (isSingleTarget) + { + HitResult ray = PlayerHelper.pickWithRange(data.getLiving(), (int) Math.floor(getRange(data) * CosmereConfigs.SERVER_CONFIG.EMOTIONAL_POWERS_SINGLE_TARGET_RANGE_MULTIPLIER.get())); + if (ray instanceof EntityHitResult entityHitResult) + { + singleTargetEntityId = entityHitResult.getEntity().getId(); + } + } + + Allomancy.packetHandler().sendToServer(new EntityAllomancyActivateMessage(Metals.MetalType.BRASS, isSingleTarget, singleTargetEntityId)); + } + } + else + { + performEffectServer(data); + } + } + + private void performEffectServer(ISpiritweb data) + { + int mode = getMode(data); + String uuid = data.getLiving().getStringUUID(); + AllomancyBrass.BrassThread playerThread = playerThreadMap.get(data.getLiving().getStringUUID()); + boolean isSingleTarget = false; + + + if (playerThread != null) + { + isSingleTarget = playerThread.isSingleTarget; + } + + // data processing + { + // this is the only way to check if the player is still online, thanks forge devs + if (data.getLiving().level().getServer().getPlayerList().getPlayer(data.getLiving().getUUID()) == null) + { + return; + } + + //todo, replace x * mode with config based value + double allomanticStrength = getStrength(data, false); + + double investiture = data.runInvestiturePull(this); + + if (playerThreadMap.get(uuid) == null) + { + playerThreadMap.put(uuid, new BrassThread(data)); + } + + // don 't remove old code comments yet, still testing + List entitiesToAffect = new ArrayList<>(); + + if (isSingleTarget) + { + if (data.getLiving().level().getEntity(playerThreadMap.get(uuid).singleTargetEntityID) instanceof LivingEntity entity) + { + entitiesToAffect.add(entity); + } + } + else + { + entitiesToAffect.addAll(playerThreadMap.get(uuid).requestEntityList()); + } + + for (LivingEntity e : entitiesToAffect) + { + + if (e instanceof Mob mob) + { + /* + switch (mode) + { + case 2: + if (allomanticStrength > 15) + mob.addEffect(EffectsHelper.getNewEffect( + AllomancyEffects.ALLOMANTIC_BRASS_STUN.getMobEffect(), + 0, // no amplification system in place + 20 * 5 + )); + mob.setTarget(null); + case 1: + mob.setAggressive(false); + default://stop angry targets from attacking things + mob.setLastHurtByMob(null); + } + */ + if(investiture >= beuGrantAmount(data, 2)) + { + if (allomanticStrength > 15) + mob.addEffect(EffectsHelper.getNewEffect( + AllomancyEffects.ALLOMANTIC_BRASS_STUN.getMobEffect(), + 0, // no amplification system in place + 20 * 5 + )); + mob.setTarget(null); + } + if(investiture >= beuGrantAmount(data, 1)) + { + mob.setAggressive(false); + } + if(investiture >= beuGrantAmount(data, 0)) + { + mob.setLastHurtByMob(null); + } + } + + + } + + if (!isSingleTarget) + { + playerThreadMap.get(uuid).releaseEntityList(); + } + } + } + + @Override + public void onModeChange(ISpiritweb data, int lastMode) + { + String uuid = data.getLiving().getStringUUID(); + if (getMode(data) <= 0) + { + playerThreadMap.remove(uuid); + } + + super.onModeChange(data, lastMode); + } + + @Override + public boolean tick(ISpiritweb data) + { + // data thread management + { + String uuid = data.getLiving().getStringUUID(); + if (!playerThreadMap.containsKey(uuid)) + { + playerThreadMap.put(uuid, new BrassThread(data)); + } + + playerThreadMap.entrySet().removeIf(entry -> !entry.getValue().isRunning || AllomancyEntityThread.serverShutdown || entry.getValue() == null); + } + + return super.tick(data); + } + + public class BrassThread extends AllomancyEntityThread + { + public boolean isSingleTarget = false; + public int singleTargetEntityID = 0; + + public BrassThread(ISpiritweb data) + { + super(data); + + Thread t = new Thread(this, "brass_thread_" + data.getLiving().getDisplayName().getString()); + t.start(); + } + + @Override + public void run() + { + List newEntityList; + while (true) + { + int mode = getMode(data); + if (serverShutdown) + { + break; + } + + if (mode <= 0) + { + break; + } + + try + { + if (lock.tryLock()) + { + int range = getRange(data); + + newEntityList = EntityHelper.getLivingEntitiesInRange(data.getLiving(), range, true); + setEntityList(newEntityList); + lock.unlock(); + } + + // sleep thread for 1 tick (50ms) + Thread.sleep(50); + } + catch (Exception e) + { + CosmereAPI.logger.debug(Arrays.toString(e.getStackTrace())); + + if (e instanceof ConcurrentModificationException) + { + lock.unlock(); + } + + break; + } + } + isRunning = false; + } + } +} diff --git a/src/allomancy/java/leaf/cosmere/allomancy/common/manifestation/AllomancyBronze.java b/src/allomancy/java/leaf/cosmere/allomancy/common/manifestation/AllomancyBronze.java new file mode 100644 index 000000000..7837478b8 --- /dev/null +++ b/src/allomancy/java/leaf/cosmere/allomancy/common/manifestation/AllomancyBronze.java @@ -0,0 +1,144 @@ +/* + * File updated ~ 16 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.allomancy.common.manifestation; + +import leaf.cosmere.allomancy.common.registries.AllomancyManifestations; +import leaf.cosmere.api.Metals; +import leaf.cosmere.api.helpers.EntityHelper; +import leaf.cosmere.api.manifestation.Manifestation; +import leaf.cosmere.api.spiritweb.ISpiritweb; +import leaf.cosmere.common.cap.entity.SpiritwebCapability; +import leaf.cosmere.common.eventHandlers.ModBusEventHandler; +import leaf.cosmere.common.registry.AttributesRegistry; +import net.minecraft.network.protocol.game.ClientboundSoundPacket; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.util.Mth; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.ai.attributes.Attribute; +import net.minecraft.world.entity.ai.attributes.AttributeMap; +import net.minecraft.world.entity.player.Player; + +import java.util.Arrays; +import java.util.List; + +public class AllomancyBronze extends AllomancyManifestation +{ + public AllomancyBronze(Metals.MetalType metalType) + { + super(metalType); + } + + @Override + protected void applyEffectTick(ISpiritweb data) + { + LivingEntity livingEntity = data.getLiving(); + boolean isActiveTick = isActiveTick(data); + //Detects Allomantic Pulses + + //passive active ability, if any + if (livingEntity instanceof ServerPlayer playerEntity && isActiveTick) + { + int distance = getRange(data); + List entitiesToCheckForAllomancy = EntityHelper.getLivingEntitiesInRange(livingEntity, distance, false); + + for (LivingEntity targetEntity : entitiesToCheckForAllomancy) + { + if (AllomancyBronze.isValidSeekTarget(data, targetEntity)) + { + seekTarget(playerEntity, targetEntity); + } + //does not meet requirements for seeking. + //either not using bronze, not in range, or not strong enough, or target has no powers + } + } + } + + private void seekTarget(ServerPlayer seekerPlayer, LivingEntity targetEntity) + { + SpiritwebCapability.get(targetEntity).ifPresent(targetSpiritweb -> + { + //show all manifestations, including hemalurgic based ones. + for (Manifestation manifestation : targetSpiritweb.getAvailableManifestations()) + { + //since this is running on the server specifically. + if (!(targetEntity instanceof Player) || targetSpiritweb.canTickManifestation(manifestation)) + { + //found one + //play thump sound + //todo, make it so the sounds are spread out based on power id. + //that would potentially be too much scanning though, since we are trying not to do stuff every frame + final float pitch = Mth.lerp(manifestation.getPowerID() / 16f, 0.5F, 2.0F); + seekerPlayer.connection.send( + new ClientboundSoundPacket( + SoundEvents.NOTE_BLOCK_BASEDRUM, + SoundSource.NEUTRAL, + targetEntity.getX(), + targetEntity.getY(), + targetEntity.getZ(), + 64.0f, + pitch, + targetEntity.getRandom().nextLong() + ) + ); + + break; + } + + } + }); + } + + + public static boolean isValidSeekTarget(ISpiritweb seeker, LivingEntity potentialConcealed) + { + //can't get anything from entities that don't have powers + if (!Arrays.stream(ModBusEventHandler.ENTITIES_THAT_CAN_HAVE_POWERS).anyMatch(test -> test == potentialConcealed.getType())) + { + return false; + } + + + final AllomancyManifestation bronzeAllomancyManifestation = AllomancyManifestations.ALLOMANCY_POWERS.get(Metals.MetalType.BRONZE).get(); + //if the player does not have bronze, early exit + if (!bronzeAllomancyManifestation.isAllomanticBurn(seeker)) + { + //powers not active, don't bother + return false; + } + //do not multiply strength by mode here, flaring doesn't help you pierce copper, and copper flare doesn't increase cognitive concealment + //maybe dedicating a high-enough amount of investiture can overcome this? + final double bronzeStrength = bronzeAllomancyManifestation.getStrength(seeker, false); + + //todo range to config + //get allomantic strength of + double range = bronzeAllomancyManifestation.getRange(seeker); + final boolean inRangeOfBronze = seeker.getLiving().distanceTo(potentialConcealed) < range; + if (!inRangeOfBronze) + { + //target isn't even in range, nope + return false; + } + //if target has copper and it's active, early exit + final AttributeMap targetAttributes = potentialConcealed.getAttributes(); + double concealmentStrength = 0; + final Attribute cognitiveConcealmentAttr = AttributesRegistry.COGNITIVE_CONCEALMENT.get(); + if (targetAttributes.hasAttribute(cognitiveConcealmentAttr)) + { + concealmentStrength = targetAttributes.getValue(cognitiveConcealmentAttr); + } + + //do they have more concealment than the player has bronze strength? + if (concealmentStrength >= bronzeStrength) + { + //target has more concealment than the seeker has strength + return false; + } + + //seeking successful + return true; + } +} diff --git a/src/allomancy/java/leaf/cosmere/allomancy/common/manifestation/AllomancyCadmium.java b/src/allomancy/java/leaf/cosmere/allomancy/common/manifestation/AllomancyCadmium.java new file mode 100644 index 000000000..334e9fffa --- /dev/null +++ b/src/allomancy/java/leaf/cosmere/allomancy/common/manifestation/AllomancyCadmium.java @@ -0,0 +1,186 @@ +/* + * File updated ~ 15 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.allomancy.common.manifestation; + +import leaf.cosmere.api.CosmereAPI; +import leaf.cosmere.api.Metals; +import leaf.cosmere.api.helpers.EntityHelper; +import leaf.cosmere.api.spiritweb.ISpiritweb; +import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.state.BlockState; + +import java.util.Arrays; +import java.util.ConcurrentModificationException; +import java.util.HashMap; +import java.util.List; + +public class AllomancyCadmium extends AllomancyManifestation +{ + private static final HashMap playerThreadMap = new HashMap<>(); + + public AllomancyCadmium(Metals.MetalType metalType) + { + super(metalType); + } + + @Override + protected void applyEffectTick(ISpiritweb data) + { + int mode = getMode(data); + String uuid = data.getLiving().getStringUUID(); + + // data processing + { + // this is the only way to check if the player is still online, thanks forge devs + if (data.getLiving().level().getServer().getPlayerList().getPlayer(data.getLiving().getUUID()) == null) + { + return; + } + + if (playerThreadMap.get(uuid) == null) + { + playerThreadMap.put(uuid, new CadmiumThread(data)); + } + //tick entities around user + int range = getRange(data); + int x = (int) (data.getLiving().getX() + (data.getLiving().getRandomX(range * 2 + 1) - range)); + int z = (int) (data.getLiving().getZ() + (data.getLiving().getRandomZ(range * 2 + 1) - range)); + + for (int i = 4; i > -2; i--) + { + int y = data.getLiving().blockPosition().getY() + i; + BlockPos pos = new BlockPos(x, y, z); + Level world = data.getLiving().level(); + + if (world.isEmptyBlock(pos)) + { + continue; + } + + BlockState state = world.getBlockState(pos); + state.randomTick((ServerLevel) world, pos, world.random); + + break; + } + + //todo tick living entities? + + List entitiesToCheck = playerThreadMap.get(uuid).requestEntityList(); + + for (LivingEntity e : entitiesToCheck) + { + try + { + e.aiStep(); + } + catch (Exception err) + { + if (!(err instanceof NullPointerException)) + { + err.printStackTrace(); + } + } + } + playerThreadMap.get(uuid).releaseEntityList(); + } + } + + @Override + public void onModeChange(ISpiritweb data, int lastMode) + { + String uuid = data.getLiving().getStringUUID(); + if (getMode(data) <= 0) + { + playerThreadMap.remove(uuid); + } + + super.onModeChange(data, lastMode); + } + + @Override + public boolean tick(ISpiritweb data) + { + // data thread management + { + String uuid = data.getLiving().getStringUUID(); + if (!playerThreadMap.containsKey(uuid)) + { + playerThreadMap.put(uuid, new CadmiumThread(data)); + } + + playerThreadMap.entrySet().removeIf(entry -> !entry.getValue().isRunning || AllomancyEntityThread.serverShutdown || entry.getValue() == null); + } + + return super.tick(data); + } + + class CadmiumThread extends AllomancyEntityThread + { + + public CadmiumThread(ISpiritweb data) + { + super(data); + + Thread t = new Thread(this, "cadmium_thread_" + data.getLiving().getDisplayName()); + t.start(); + } + + @Override + public void run() + { + List newEntityList; + //Speeds Up Time for everything around the user, implying the user is slower + while (true) + { + if (serverShutdown) + { + break; + } + try + { + int mode = getMode(data); + + // check if cadmium is off or compounding + if (mode <= 0) + { + break; + } + + // this is the only way to check if the player is still online, thanks forge devs + if (data.getLiving().level().getServer().getPlayerList().getPlayer(data.getLiving().getUUID()) == null) + { + break; + } + + if (lock.tryLock()) + { + int range = getRange(data); + + newEntityList = EntityHelper.getLivingEntitiesInRange(data.getLiving(), range, true); + setEntityList(newEntityList); + lock.unlock(); + } + // sleep thread for 1 tick (50ms) + Thread.sleep(50); + } + catch (Exception e) + { + CosmereAPI.logger.debug(Arrays.toString(e.getStackTrace())); + + if (e instanceof ConcurrentModificationException) + { + lock.unlock(); + } + + break; + } + } + isRunning = false; + } + } +} diff --git a/src/allomancy/java/leaf/cosmere/allomancy/common/manifestation/AllomancyChromium.java b/src/allomancy/java/leaf/cosmere/allomancy/common/manifestation/AllomancyChromium.java new file mode 100644 index 000000000..35badcb7b --- /dev/null +++ b/src/allomancy/java/leaf/cosmere/allomancy/common/manifestation/AllomancyChromium.java @@ -0,0 +1,66 @@ +/* + * File updated ~ 5 - 3 - 2025 ~ Leaf + */ + +package leaf.cosmere.allomancy.common.manifestation; + +import leaf.cosmere.allomancy.common.registries.AllomancyManifestations; +import leaf.cosmere.api.Metals; +import leaf.cosmere.api.cosmereEffect.CosmereEffectInstance; +import leaf.cosmere.api.helpers.EffectsHelper; +import leaf.cosmere.common.cap.entity.SpiritwebCapability; +import leaf.cosmere.common.registry.CosmereEffectsRegistry; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraftforge.event.entity.living.LivingHurtEvent; + +public class AllomancyChromium extends AllomancyManifestation +{ + public AllomancyChromium(Metals.MetalType metalType) + { + super(metalType); + } + + public static void onLivingHurtEvent(LivingHurtEvent event) + { + if (event.isCanceled()) + { + return; + } + + Entity trueSource = event.getSource().getEntity(); + LivingEntity targetEntity = event.getEntity(); + if (trueSource instanceof Player trueSourcePlayer) + { + SpiritwebCapability.get(trueSourcePlayer).ifPresent(player -> + { + final AllomancyManifestation aChromium = AllomancyManifestations.ALLOMANCY_POWERS.get(Metals.MetalType.CHROMIUM).get(); + if (aChromium.isActive(player)) + { + SpiritwebCapability.get(targetEntity).ifPresent(targetISpiritweb -> + { + final SpiritwebCapability targetSpiritweb = (SpiritwebCapability) targetISpiritweb; + if (targetSpiritweb.getLiving() != null) + { + /*AllomancySpiritwebSubmodule allo = (AllomancySpiritwebSubmodule) targetSpiritweb.getSubmodule(Manifestations.ManifestationTypes.ALLOMANCY); + for (Metals.MetalType metalType : EnumUtils.METAL_TYPES) + { + float drainAmount = allo.getIngestedMetal(metalType) * 0.1f; + allo.adjustIngestedMetal(metalType, (int) -drainAmount, true); + }*/ + + CosmereEffectInstance newEffect = EffectsHelper.getNewEffect( + CosmereEffectsRegistry.DRAIN_INVESTITURE.get(), + targetEntity, + (aChromium.getStrength(player, false)) + ); + + targetSpiritweb.addEffect(newEffect, trueSourcePlayer); + } + }); + } + }); + } + } +} diff --git a/src/allomancy/java/leaf/cosmere/allomancy/common/manifestation/AllomancyCopper.java b/src/allomancy/java/leaf/cosmere/allomancy/common/manifestation/AllomancyCopper.java new file mode 100644 index 000000000..960c5540a --- /dev/null +++ b/src/allomancy/java/leaf/cosmere/allomancy/common/manifestation/AllomancyCopper.java @@ -0,0 +1,100 @@ +/* + * File updated ~ 16 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.allomancy.common.manifestation; + +import leaf.cosmere.allomancy.common.registries.AllomancyEffects; +import leaf.cosmere.api.Metals; +import leaf.cosmere.api.helpers.EffectsHelper; +import leaf.cosmere.api.helpers.EntityHelper; +import leaf.cosmere.api.spiritweb.ISpiritweb; +import leaf.cosmere.common.cap.entity.SpiritwebCapability; +import net.minecraft.util.Mth; +import net.minecraft.world.entity.LivingEntity; + +import java.util.List; + +public class AllomancyCopper extends AllomancyManifestation +{ + public AllomancyCopper(Metals.MetalType metalType) + { + super(metalType); + } + + @Override + public int modeMax(ISpiritweb data) + { + //1 for affecting self + //2 for cloud effect + //3 for flaring + + return 3; + } + + @Override + public int getRange(ISpiritweb data) + { + if (!isActive(data)) + { + return 0; + } + + //get allomantic strength + double allomanticStrength = getStrength(data, false); + + //mode minus one, because copper has special mode stuff. + final int mode = getMode(data); + int i = switch (mode) + { + case 1, 2 -> 1; + case 3 -> 2; + default -> 0; + }; + + return Mth.floor(allomanticStrength * i); + } + + @Override + protected void applyEffectTick(ISpiritweb data) + { + LivingEntity livingEntity = data.getLiving(); + boolean isActiveTick = isActiveTick(data); + + //Hides Allomantic Pulses + if (isActiveTick) + { + //do not multiply strength by mode here, flaring doesn't increase cognitive concealment and bronze flare doesn't increase pierce strength + final int actionableStrength = Mth.floor(getStrength(data, false)); + switch (getMode(data)) + { + case 1: + data.addEffect( + EffectsHelper.getNewEffect( + AllomancyEffects.ALLOMANTIC_COPPER.get(), + data.getLiving(), + actionableStrength + )); + break; + case 2: + case 3: + List entitiesToApplyEffect = EntityHelper.getLivingEntitiesInRange(livingEntity, getRange(data), true); + + for (LivingEntity target : entitiesToApplyEffect) + { + SpiritwebCapability.get(target).ifPresent(targetSpiritweb -> + { + targetSpiritweb.addEffect(EffectsHelper.getNewEffect( + AllomancyEffects.ALLOMANTIC_COPPER.get(), + data.getLiving(), + actionableStrength + )); + + }); + } + break; + } + + } + } +} diff --git a/src/allomancy/java/leaf/cosmere/allomancy/common/manifestation/AllomancyDuralumin.java b/src/allomancy/java/leaf/cosmere/allomancy/common/manifestation/AllomancyDuralumin.java new file mode 100644 index 000000000..4ef368997 --- /dev/null +++ b/src/allomancy/java/leaf/cosmere/allomancy/common/manifestation/AllomancyDuralumin.java @@ -0,0 +1,37 @@ +/* + * File updated ~ 7 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.allomancy.common.manifestation; + +import leaf.cosmere.allomancy.common.registries.AllomancyEffects; +import leaf.cosmere.api.Metals; +import leaf.cosmere.api.cosmereEffect.CosmereEffectInstance; +import leaf.cosmere.api.helpers.EffectsHelper; +import leaf.cosmere.api.spiritweb.ISpiritweb; + +public class AllomancyDuralumin extends AllomancyManifestation +{ + public AllomancyDuralumin(Metals.MetalType metalType) + { + super(metalType); + } + + //Enhances Current Metals Burned + @Override + public void applyEffectTick(ISpiritweb data) + { + boolean isActiveTick = isActiveTick(data); + + if (isActiveTick) + { + //apply the effect regardless, because duralumin is currently active. + CosmereEffectInstance newEffect = EffectsHelper.getNewEffect( + AllomancyEffects.ALLOMANCY_BOOST.get(), + data.getLiving(), + getStrength(data, false) + ); + data.addEffect(newEffect); + } + } +} diff --git a/src/allomancy/java/leaf/cosmere/allomancy/common/manifestation/AllomancyElectrum.java b/src/allomancy/java/leaf/cosmere/allomancy/common/manifestation/AllomancyElectrum.java new file mode 100644 index 000000000..43e994d22 --- /dev/null +++ b/src/allomancy/java/leaf/cosmere/allomancy/common/manifestation/AllomancyElectrum.java @@ -0,0 +1,27 @@ +/* + * File updated ~ 8 - 10 - 2022 ~ Leaf + */ + +package leaf.cosmere.allomancy.common.manifestation; + +import leaf.cosmere.api.Metals; +import leaf.cosmere.api.spiritweb.ISpiritweb; + +public class AllomancyElectrum extends AllomancyManifestation +{ + public AllomancyElectrum(Metals.MetalType metalType) + { + super(metalType); + } + + @Override + protected void applyEffectTick(ISpiritweb data) + { + //Reveals Your Future + { + //todo + } + } + //add client side stuff + +} diff --git a/src/allomancy/java/leaf/cosmere/allomancy/common/manifestation/AllomancyEntityThread.java b/src/allomancy/java/leaf/cosmere/allomancy/common/manifestation/AllomancyEntityThread.java new file mode 100644 index 000000000..afb4bf5c7 --- /dev/null +++ b/src/allomancy/java/leaf/cosmere/allomancy/common/manifestation/AllomancyEntityThread.java @@ -0,0 +1,60 @@ +/* + * File updated ~ 9 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.allomancy.common.manifestation; + +import leaf.cosmere.api.CosmereAPI; +import leaf.cosmere.api.spiritweb.ISpiritweb; +import net.minecraft.world.entity.LivingEntity; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReentrantLock; + +public class AllomancyEntityThread implements Runnable +{ + private final List entityList = new ArrayList<>(); + public final Lock localLock = new ReentrantLock(); + public static boolean serverShutdown = false; + public static final Lock lock = new ReentrantLock(); + public final ISpiritweb data; + public boolean isRunning = true; + + public AllomancyEntityThread(ISpiritweb data) + { + this.data = data; + } + + public List requestEntityList() + { + localLock.lock(); + try + { + return new ArrayList<>(entityList); + } + catch (Exception e) + { + CosmereAPI.logger.info(Arrays.toString(e.getStackTrace())); + } + + // empty return in case of exception + return new ArrayList<>(); + } + + public void releaseEntityList() + { + localLock.unlock(); + } + + public void setEntityList(List newList) + { + entityList.clear(); + entityList.addAll(newList); + } + + @Override + public void run() {} +} diff --git a/src/allomancy/java/leaf/cosmere/allomancy/common/manifestation/AllomancyGold.java b/src/allomancy/java/leaf/cosmere/allomancy/common/manifestation/AllomancyGold.java new file mode 100644 index 000000000..1430680c9 --- /dev/null +++ b/src/allomancy/java/leaf/cosmere/allomancy/common/manifestation/AllomancyGold.java @@ -0,0 +1,27 @@ +/* + * File updated ~ 8 - 10 - 2022 ~ Leaf + */ + +package leaf.cosmere.allomancy.common.manifestation; + +import leaf.cosmere.api.Metals; +import leaf.cosmere.api.spiritweb.ISpiritweb; + +public class AllomancyGold extends AllomancyManifestation +{ + public AllomancyGold(Metals.MetalType metalType) + { + super(metalType); + } + + @Override + protected void applyEffectTick(ISpiritweb data) + { + //Reveals Your Past Self + { + //todo + } + } + //add client side stuff + +} diff --git a/src/allomancy/java/leaf/cosmere/allomancy/common/manifestation/AllomancyIronSteel.java b/src/allomancy/java/leaf/cosmere/allomancy/common/manifestation/AllomancyIronSteel.java new file mode 100644 index 000000000..2643c04bc --- /dev/null +++ b/src/allomancy/java/leaf/cosmere/allomancy/common/manifestation/AllomancyIronSteel.java @@ -0,0 +1,653 @@ +/* + * File updated ~ 30 - 4 - 2025 ~ Leaf + */ + +package leaf.cosmere.allomancy.common.manifestation; + +import leaf.cosmere.allomancy.client.metalScanning.IronSteelLinesThread; +import leaf.cosmere.allomancy.common.Allomancy; +import leaf.cosmere.allomancy.common.config.AllomancyConfigs; +import leaf.cosmere.allomancy.common.entities.CoinProjectile; +import leaf.cosmere.allomancy.common.items.CoinPouchItem; +import leaf.cosmere.api.CosmereAPI; +import leaf.cosmere.api.CosmereTags; +import leaf.cosmere.api.Metals; +import leaf.cosmere.api.helpers.CodecHelper; +import leaf.cosmere.api.helpers.RegistryHelper; +import leaf.cosmere.api.math.VectorHelper; +import leaf.cosmere.api.spiritweb.ISpiritweb; +import leaf.cosmere.common.cap.entity.SpiritwebCapability; +import leaf.cosmere.common.network.packets.SyncPushPullMessage; +import net.minecraft.client.Minecraft; +import net.minecraft.core.BlockPos; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.NbtOps; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.BlockTags; +import net.minecraft.tags.TagKey; +import net.minecraft.util.Mth; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.item.ItemEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.BlockItem; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.crafting.Ingredient; +import net.minecraft.world.item.crafting.Recipe; +import net.minecraft.world.item.crafting.RecipeManager; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.Vec3; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; + +import java.util.*; + +public class AllomancyIronSteel extends AllomancyManifestation +{ + public static final HashMap, Double> materialResistanceMap = initHashMap(); + + private final boolean isPush; + private static Set s_whiteList = null; + private static Set s_blackList = null; + + public AllomancyIronSteel(Metals.MetalType metalType) + { + super(metalType); + this.isPush = metalType == Metals.MetalType.STEEL; + } + + private static HashMap, Double> initHashMap() + { + HashMap, Double> output = new HashMap<>(); + + output.put(BlockTags.MINEABLE_WITH_PICKAXE, 0.5); + output.put(BlockTags.MINEABLE_WITH_SHOVEL, 0.2); + output.put(BlockTags.MINEABLE_WITH_AXE, 0.25); + + return output; + } + + public static Double getResistance(BlockState blockState) + { + Double retValue = 0D; + + for (TagKey tagKey : materialResistanceMap.keySet()) + { + if (blockState.is(tagKey)) + { + retValue = materialResistanceMap.get(tagKey); + break; + } + } + + return retValue; + } + + @Override + public void applyEffectTick(ISpiritweb data) + { + if (data.getLiving().level().isClientSide) + { + performEffectClient(data); + } + else + { + performEffectServer(data); + } + } + + @Override + public void onModeChange(ISpiritweb cap, int lastMode) + { + if (cap.getLiving().level().isClientSide) + { + + super.onModeChange(cap, lastMode); + + if (getMode(cap) != 0) + { + if (getMode(cap) > 0) + { + IronSteelLinesThread.startThread(); + } + else if (getMode(cap) <= 0) + { + IronSteelLinesThread.stopThread(false); + } + return; + } + + SpiritwebCapability data = (SpiritwebCapability) cap; + + List blocks = isPush ? data.pushBlocks : data.pullBlocks; + List entities = isPush ? data.pushEntities : data.pullEntities; + + blocks.clear(); + entities.clear(); + } + } + + @OnlyIn(Dist.CLIENT) + private void performEffectClient(ISpiritweb cap) + { + boolean hasChanged = false; + SpiritwebCapability data = (SpiritwebCapability) cap; + List blocks = isPush ? data.pushBlocks : data.pullBlocks; + List entities = isPush ? data.pushEntities : data.pullEntities; + + if (s_whiteList == null) + { + createWhitelist(cap.getLiving()); + } + + //Pushes/Pulls on Nearby Metals + if (getKeyBinding().isDown()) + { + final Minecraft mc = Minecraft.getInstance(); + Player player = mc.player; + Level level = mc.level; + + boolean hitEntity = false; + Entity entityHitResult = null; + + Vec3 closestMetalObjectVec3 = IronSteelLinesThread.getInstance().getClosestMetalObject(); + BlockPos closestMetalObject = null; + if (closestMetalObjectVec3 != null) + { + closestMetalObject = BlockPos.containing(closestMetalObjectVec3); + } + + if (closestMetalObject != null) + { + BlockState blockAtPos = level.getBlockState(closestMetalObject); + + if (blockAtPos.isAir()) + { + try + { + AABB aabb = new AABB(closestMetalObject); + Entity firstMetalEntity = null; + for (Entity ent : level.getEntities(player, aabb, potentialEntityHit -> !potentialEntityHit.isSpectator())) + { + if (entityContainsMetal(ent)) + { + firstMetalEntity = ent; + break; + } + } + hitEntity = firstMetalEntity != null && entityContainsMetal(firstMetalEntity); + if (hitEntity) + { + entityHitResult = firstMetalEntity; + } + } + catch (Exception e) + { + e.printStackTrace(); + hitEntity = false; + } + } + + if (hitEntity) + { + //tracks entity if it meets requirements + //eg must contain metal + hasChanged = trackValidEntity(data, entityHitResult); + } + else + { + blocks.add(closestMetalObject); + + if (blocks.size() > 5) + { + blocks.remove(0); + } + hasChanged = true; + } + } + } + else + { + //clear list + if (!blocks.isEmpty()) + { + blocks.clear(); + hasChanged = true; + } + if (!entities.isEmpty()) + { + entities.clear(); + hasChanged = true; + } + + } + + //sync the move things. + //we don't let the spirit web sync from client back to server, so this is needed. + if (hasChanged) + { + CompoundTag nbt = new CompoundTag(); + CodecHelper.BlockPosListCodec.encodeStart(NbtOps.INSTANCE, blocks) + .resultOrPartial(CosmereAPI.logger::error) + .ifPresent(inbt1 -> nbt.put(isPush ? "pushBlocks" : "pullBlocks", inbt1)); + nbt.putIntArray(isPush ? "pushEntities" : "pullEntities", entities); + nbt.putInt("weight", IronSteelLinesThread.getInstance().getWeight()); + Allomancy.packetHandler().sendToServer(new SyncPushPullMessage(nbt)); + } + } + + + public boolean trackValidEntity(ISpiritweb cap, Entity entity) + { + //perform the entity move thing. + SpiritwebCapability data = (SpiritwebCapability) cap; + List entities = isPush ? data.pushEntities : data.pullEntities; + + if (!entities.contains(entity.getId()) && entityContainsMetal(entity)) + { + entities.add(entity.getId()); + if (entities.size() > 5) + { + entities.remove(0); + } + return true; + } + + return false; + } + + private void performEffectServer(ISpiritweb cap) + { + if (cap.getLiving().tickCount % 3 == 0) + { + return; + } + + //perform the entity move thing. + SpiritwebCapability data = (SpiritwebCapability) cap; + //todo change this. We shouldn't be setting data on the manifestation base + List blocks = isPush ? data.pushBlocks : data.pullBlocks; + List entities = isPush ? data.pushEntities : data.pullEntities; + + if (!blocks.isEmpty()) + { + pushpullBlocks(data); + } + if (!entities.isEmpty()) + { + pushpullEntities(data); + } + } + + private void pushpullEntities(SpiritwebCapability data) + { + List entities = isPush ? data.pushEntities : data.pullEntities; + int weight = data.pushPullWeight; + for (int i = entities.size() - 1; i >= 0; i--) + { + int entityID = entities.get(i); + final LivingEntity dataLiving = data.getLiving(); + Entity targetEntity = dataLiving.level().getEntity(entityID); + if (targetEntity != null) + { + if (targetEntity.blockPosition().closerThan(dataLiving.blockPosition(), getRange(data))) + { + //move small things + if (targetEntity instanceof ItemEntity itemEntity) + { + // pick up item if pulling + if (dataLiving instanceof Player player && !isPush) + { + itemEntity.playerTouch(player); + } + else + { + moveEntityTowards(itemEntity, dataLiving.blockPosition(), weight); + } + } + //affect both entities + else if (targetEntity instanceof LivingEntity livingEntity) + { + moveEntityTowards(livingEntity, dataLiving.blockPosition(), weight); + moveEntityTowards(dataLiving, livingEntity.blockPosition(), weight); + dataLiving.hurtMarked = true; + } + //affect entity who is doing the push/pull + else + { + if (isPush) + { + moveEntityTowards(dataLiving, targetEntity.blockPosition(), weight); + } + //if not push, then check if we should pull coin projectiles back to player + else if (dataLiving instanceof Player player && targetEntity instanceof CoinProjectile coinProjectile) + { + CoinPouchItem.onPickupItem(coinProjectile, player); + } + } + } + } + else + { + //remove entities the level couldn't find + entities.remove(i); + } + } + } + + private void moveEntityTowards(Entity entity, BlockPos toMoveTo, int weight) + { + Vec3 blockCenter = toMoveTo.getCenter(); + + Vec3 direction = VectorHelper.getDirection( + blockCenter, + entity.blockPosition().getCenter(),//use entity block position, so we can do things like hover directly over a block more easily + (isPush ? -1f : 2f)); + + //todo, clean up all the unnecessary calculations once we find what feels good at run time + Vec3 normalize = direction.normalize(); + + double shortenFactor = isPush ? 0.2 : 0.4; + Vec3 add = entity.getDeltaMovement().add(normalize.multiply(shortenFactor, shortenFactor, shortenFactor)); + + // cannot have flat multiplier; can get ridiculous + double adjustedWeight = 1d + Math.min(AllomancyConfigs.SERVER.MAX_PUSH_PULL_WEIGHT.get(), (weight - 1) * AllomancyConfigs.SERVER.PUSH_PULL_WEIGHT.get()); + + //get flung off rides + entity.stopRiding(); + //don't let the motion go crazy large + entity.setDeltaMovement(VectorHelper.ClampMagnitude(add, 1).multiply(adjustedWeight, adjustedWeight, adjustedWeight)); + //hurt marked true means it will tell clients that they are moving. + entity.hurtMarked = true; + + //let people get damaged but not too much? + //todo check what a good max fall distance would be + //todo add to config + if (entity instanceof Player player) + { + //doesn't really work, because entity may not be pushing anymore and so this wont get hit. + player.fallDistance = Math.min(player.fallDistance, 1); + } + } + + private void pushpullBlocks(SpiritwebCapability data) + { + List blocks = isPush ? data.pushBlocks : data.pullBlocks; + int weight = data.pushPullWeight; + int blockListCount = blocks.size(); + + if (blockListCount == 0) + { + return; + } + + LivingEntity living = data.getLiving(); + + for (int i = blockListCount - 1; i >= 0; i--) + { + BlockPos blockPos = blocks.get(i); + if (!isPush && blockPos.distManhattan(living.blockPosition()) < 2) + { + //stop shoving the user into the block + continue; + } + //if the entity is in range of being able to push or pull from + double maxDistance = getRange(data); + if (blockPos.closerThan(living.blockPosition(), maxDistance)) + { + moveEntityTowards(living, blockPos, weight); + } + else + { + //we don't want to remove blocks that are out of distance + //in case we are still holding the button down and get back into range + //blocks.remove(i); + } + } + living.hurtMarked = true; + } + + public static boolean entityContainsMetal(Entity entity) + { + if (containsMetal(entity)) + { + return true; + } + + if (entity instanceof LivingEntity livingEntity) + { + if (containsMetal(livingEntity.getMainHandItem()) || containsMetal(livingEntity.getOffhandItem())) + { + return true; + } + + for (ItemStack itemStack : livingEntity.getArmorSlots()) + { + if (containsMetal(itemStack.getItem())) + { + return true; + } + } + + /* //probably overkill, todo decide if we want this. + if (livingEntity instanceof Player) + { + Player player = ((Player) livingEntity); + for (ItemStack itemStack : player.getInventory().items) + { + if (containsMetal(itemStack.getItem().getRegistryName().getPath())) + { + return true; + } + } + }*/ + return false; + } + else if (entity instanceof ItemEntity itemEntity) + { + ItemStack stack = (itemEntity).getItem(); + Item item = stack.getItem(); + + if (item instanceof BlockItem blockItem && containsMetal(blockItem.getBlock())) + { + return true; + } + + final boolean validMetalItem = containsMetal(item); + return validMetalItem; + } + else if (entity instanceof CoinProjectile coinProjectile) + { + return true; + } + + return false; + } + + public static boolean containsMetal(ItemStack itemStack) + { + return containsMetal(itemStack.getItem()); + } + + public static boolean containsMetal(Item item) + { + if (item.builtInRegistryHolder().is(CosmereTags.Items.CONTAINS_METAL)) + { + return true; + } + if (s_whiteList == null) + { + return false; + } + return s_whiteList.contains(RegistryHelper.get(item).getPath()); + } + + + public static boolean containsMetal(Block block) + { + if (block.builtInRegistryHolder().is(CosmereTags.Blocks.CONTAINS_METAL)) + { + return true; + } + if (s_whiteList == null) + { + return false; + } + return s_whiteList.contains(RegistryHelper.get(block).getPath()); + } + + public static boolean containsMetal(Entity entity) + { + if (entity.getType().is(CosmereTags.EntityTypes.CONTAINS_METAL)) + { + return true; + } + if (s_whiteList == null) + { + return false; + } + return s_whiteList.contains(RegistryHelper.get(entity).getPath()); + } + + public static void invalidateWhitelist() + { + s_whiteList = null; + } + + //client side is the only time this gets initialized. + private static void createWhitelist(Entity entity) + { + if (s_whiteList != null) + { + return; + } + + //generate blacklist + //reset each time, because it's not working properly for some reason + { + // would have used Items here, but it's ridiculously hard to get item IDs for blocks for no reason + s_blackList = new HashSet<>(); + s_blackList.add(RegistryHelper.get(Blocks.AIR).getPath()); + s_blackList.add(RegistryHelper.get(Blocks.WATER).getPath()); + s_blackList.add(RegistryHelper.get(Blocks.LAVA).getPath()); + s_blackList.add(RegistryHelper.get(Blocks.GRASS_BLOCK).getPath()); + s_blackList.add(RegistryHelper.get(Blocks.FARMLAND).getPath()); + s_blackList.add(RegistryHelper.get(Blocks.GLASS).getPath()); + s_blackList.add(RegistryHelper.get(Blocks.GLASS_PANE).getPath()); + s_blackList.add(RegistryHelper.get(Blocks.BLACK_BED).getPath()); + s_blackList.add(RegistryHelper.get(Blocks.BROWN_BED).getPath()); + s_blackList.add(RegistryHelper.get(Blocks.BLUE_BED).getPath()); + s_blackList.add(RegistryHelper.get(Blocks.RED_BED).getPath()); + s_blackList.add(RegistryHelper.get(Blocks.CYAN_BED).getPath()); + s_blackList.add(RegistryHelper.get(Blocks.GRAY_BED).getPath()); + s_blackList.add(RegistryHelper.get(Blocks.GREEN_BED).getPath()); + s_blackList.add(RegistryHelper.get(Blocks.LIGHT_BLUE_BED).getPath()); + s_blackList.add(RegistryHelper.get(Blocks.LIGHT_GRAY_BED).getPath()); + s_blackList.add(RegistryHelper.get(Blocks.LIME_BED).getPath()); + s_blackList.add(RegistryHelper.get(Blocks.MAGENTA_BED).getPath()); + s_blackList.add(RegistryHelper.get(Blocks.ORANGE_BED).getPath()); + s_blackList.add(RegistryHelper.get(Blocks.PINK_BED).getPath()); + s_blackList.add(RegistryHelper.get(Blocks.PURPLE_BED).getPath()); + s_blackList.add(RegistryHelper.get(Blocks.WHITE_BED).getPath()); + s_blackList.add(RegistryHelper.get(Blocks.YELLOW_BED).getPath()); + s_blackList.add(RegistryHelper.get(Blocks.TORCH).getPath()); + s_blackList.add(RegistryHelper.get(Blocks.SHULKER_BOX).getPath()); + s_blackList.add(RegistryHelper.get(Blocks.ICE).getPath()); + s_blackList.add(RegistryHelper.get(Blocks.BLUE_ICE).getPath()); + s_blackList.add(RegistryHelper.get(Blocks.FROSTED_ICE).getPath()); + s_blackList.add(RegistryHelper.get(Blocks.PACKED_ICE).getPath()); + s_blackList.add(RegistryHelper.get(Items.DIAMOND).getPath()); + s_blackList.add(RegistryHelper.get(Items.EMERALD).getPath()); + s_blackList.add(RegistryHelper.get(Items.AIR).getPath()); + s_blackList.add("philosophers_stone");//problem child + } + for (var itemInList : s_blackList) + { + CosmereAPI.logger.info("[MetalWhitelist] %s has been blacklisted from containing metal".formatted(itemInList)); + } + + s_whiteList = new HashSet<>(); + + final TagKey containsMetal = CosmereTags.Items.CONTAINS_METAL; + final RecipeManager recipeManager = entity.level().getRecipeManager(); + final Collection> recipes = recipeManager.getRecipes(); + + for (var recipe : recipes) + { + final ItemStack resultItem = recipe.getResultItem(entity.level().registryAccess()); + + // check if is blacklisted, and if is, skip + //if it says result item is never null, ignore it, + //we have one confirmed bug report that it _can_ be null + // https://github.com/leafreynolds/cosmere/issues/58 + if (resultItem == null || resultItem.isEmpty() || s_blackList.contains(RegistryHelper.get(resultItem.getItem()).getPath())) + { + continue; + } + + if (resultItem.is(containsMetal)) + { + continue; + } + + CheckRecipeForMetal(containsMetal, recipe, resultItem); + } + } + + + public static void CheckRecipeForMetal(TagKey containsMetal, Recipe recipe, ItemStack resultItemStack) + { + for (Ingredient ingredient : recipe.getIngredients()) + { + for (ItemStack ingredientStack : ingredient.getItems()) + { + final Item ingredientItem = ingredientStack.getItem(); + final ResourceLocation ingredientItemRL = RegistryHelper.get(ingredientItem); + if (s_blackList.contains(ingredientItemRL.getPath())) + { + continue; + } + + if (ingredientStack.is(containsMetal)) + { + //found one + final Item resultItem = resultItemStack.getItem(); + final ResourceLocation resultItemRL = RegistryHelper.get(resultItem); + // final Holder.Reference itemReference = resultItem.builtInRegistryHolder(); + // List> allTags = itemReference.tags().collect(Collectors.toList()); + // allTags.add(CosmereTags.Items.CONTAINS_METAL); + // itemReference.bindTags(allTags); + + CosmereAPI.logger.info("[MetalWhitelist] %s has been identified as containing metal, thanks to %s in recipe" + .formatted(resultItemRL, ingredientItemRL)); + + s_whiteList.add(resultItemRL.getPath()); + return; + } + } + } + } + + @Override + public int getRange(ISpiritweb data) + { + if (!isActive(data)) + { + return 0; + } + + //get allomantic strength + double allomanticStrength = getStrength(data, false); + + //no range if compounding. + final double potentialRange = Math.max(getMode(data), 0) * allomanticStrength; + return Mth.floor(potentialRange * AllomancyConfigs.SERVER.IRON_STEEL_RANGE.get()); + } +} + diff --git a/src/allomancy/java/leaf/cosmere/allomancy/common/manifestation/AllomancyMalatium.java b/src/allomancy/java/leaf/cosmere/allomancy/common/manifestation/AllomancyMalatium.java new file mode 100644 index 000000000..07accdfff --- /dev/null +++ b/src/allomancy/java/leaf/cosmere/allomancy/common/manifestation/AllomancyMalatium.java @@ -0,0 +1,27 @@ +/* + * File updated ~ 8 - 10 - 2022 ~ Leaf + */ + +package leaf.cosmere.allomancy.common.manifestation; + +import leaf.cosmere.api.Metals; +import leaf.cosmere.api.spiritweb.ISpiritweb; + +public class AllomancyMalatium extends AllomancyManifestation +{ + public AllomancyMalatium(Metals.MetalType metalType) + { + super(metalType); + } + + @Override + protected void applyEffectTick(ISpiritweb data) + { + //Reveals other's past + { + //todo + } + } + //add client side stuff + +} diff --git a/src/allomancy/java/leaf/cosmere/allomancy/common/manifestation/AllomancyManifestation.java b/src/allomancy/java/leaf/cosmere/allomancy/common/manifestation/AllomancyManifestation.java new file mode 100644 index 000000000..f5d0c4fc3 --- /dev/null +++ b/src/allomancy/java/leaf/cosmere/allomancy/common/manifestation/AllomancyManifestation.java @@ -0,0 +1,340 @@ +/* + * File updated ~ 7 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.allomancy.common.manifestation; + +import leaf.cosmere.allomancy.client.AllomancyKeybindings; +import leaf.cosmere.allomancy.common.capabilities.AllomancySpiritwebSubmodule; +import leaf.cosmere.allomancy.common.registries.AllomancyStats; +import leaf.cosmere.api.*; +import leaf.cosmere.api.investiture.*; +import leaf.cosmere.api.manifestation.Manifestation; +import leaf.cosmere.api.spiritweb.ISpiritweb; +import leaf.cosmere.common.cap.entity.SpiritwebCapability; +import leaf.cosmere.common.charge.MetalmindChargeHelper; +import net.minecraft.client.KeyMapping; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.stats.Stat; +import net.minecraft.stats.StatFormatter; +import net.minecraft.stats.Stats; +import net.minecraft.util.Mth; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.item.ItemStack; + +public class AllomancyManifestation extends Manifestation implements IHasMetalType, IInvCreator +{ + private final Metals.MetalType metalType; + + public AllomancyManifestation(Metals.MetalType metalType) + { + super(Manifestations.ManifestationTypes.ALLOMANCY); + this.metalType = metalType; + } + + + @Override + public int getPowerID() + { + return metalType.getID(); + } + + @Override + public boolean modeWraps(ISpiritweb data) + { + return true; + } + + @Override + public Metals.MetalType getMetalType() + { + return this.metalType; + } + + //active or not active + @Override + public int modeMax(ISpiritweb data) + { + //1 for burning + //2 for flaring + return 2; + } + + @Override + public void onModeChange(ISpiritweb data, int lastMode) + { + super.onModeChange(data, lastMode); + + if (Mth.abs(getMode(data)) != 0) + { + //don't reset stats while burning + return; + } + + if (data.getLiving() instanceof ServerPlayer serverPlayer) + { + serverPlayer.resetStat(Stats.CUSTOM.get(getBurnTimeStat())); + } + } + + @Override + public int modeMin(ISpiritweb data) + { + final ResourceLocation feruchemyRL = new ResourceLocation("feruchemy", getRegistryName().getPath()); + final Manifestation feruchemy = CosmereAPI.manifestationRegistry().getValue(feruchemyRL); + if (data.hasManifestation(feruchemy)) + { + //compounding + return -2; + } + + return 0; + } + + @Override + public boolean isActive(ISpiritweb data) + { + return super.isActive(data) && isMetalBurning(data); + } + + public boolean isCompounding(ISpiritweb data) + { + return isMetalBurning(data) && getMode(data) < 0; + } + + public boolean isAllomanticBurn(ISpiritweb data) + { + return isMetalBurning(data) && getMode(data) > 0; + } + + //A metal is considered burning if the user has the power and can afford the next tick of burning. + public boolean isMetalBurning(ISpiritweb data) + { + //absolute value, because compounding uses negative modes. + int modeAbs = Mth.abs(getMode(data)); + AllomancySpiritwebSubmodule allo = (AllomancySpiritwebSubmodule) data.getSubmodule(Manifestations.ManifestationTypes.ALLOMANCY); + + //make sure the user can afford the cost of burning this metal + while (modeAbs > 0) + { + //if not then try reduce the amount that they are burning + + if (allo.adjustIngestedMetal(metalType, -modeAbs, false)) + { + return true; + } + else + { + //todo fix this to work for compounding, + modeAbs--; + //set that mode back to the capability. + data.setMode(this, modeAbs); + //if it hits zero then return out + //try again at a lower burn rate. + } + } + return false; + } + + //is flaring, in either normal burn or compounding + protected boolean isFlaring(ISpiritweb data) + { + int mode = getMode(data); + final int absMode = Mth.abs(mode); + return absMode > 1; + } + + @Override + public boolean tick(ISpiritweb data) + { + if (!isActive(data)) + { + return false; + } + + int mode = getMode(data); + final int cost = Mth.abs(mode); + + AllomancySpiritwebSubmodule allo = (AllomancySpiritwebSubmodule) data.getSubmodule(Manifestations.ManifestationTypes.ALLOMANCY); + + //don't check every tick. + LivingEntity livingEntity = data.getLiving(); + boolean isActiveTick = isActiveTick(data); + allo.adjustIngestedMetal(metalType, -cost, isActiveTick); + if(isActiveTick) + { + newInvest(data); + } + + if (isActiveTick && livingEntity instanceof ServerPlayer serverPlayer) + { + serverPlayer.awardStat(getBurnTimeStat()); + } + + //if burning normally, do allomancy + if (mode > 0) + { + //todo: rewrite all applyEffectTick() methods to pull from investiture sources. + + applyEffectTick(data); + return true; + } + //else funnel all that power to feruchemy attribute + //but only if active tick + else if (isActiveTick) + { + tickCompounding(data, cost); + return true; + } + + return false; + } + + private void tickCompounding(ISpiritweb data, int allomanticSecondsUsed) + { + //if we get to this point, we are in an active burn state. + //check for compound. + final Manifestation feruchemyManifestation = CosmereAPI.manifestationRegistry().getValue(new ResourceLocation("feruchemy", getRegistryName().getPath())); + + //player has feruchemy in same metal + if (data.hasManifestation(feruchemyManifestation)) + { + //TODO config variable + //eg 10 base, * 2 for flaring mode = 20 + //or from spike 7 * 2 = 14 + //then add the config value + //max should be around 30. 50 was way too much + + final double compoundStrength = getStrength(data, false) * Mth.abs(allomanticSecondsUsed); + int secondsOfFeruchemyToAdd = (int) (Mth.abs((float) Math.floor(compoundStrength)) - 5); // all this just because Mth#absFloor was removed... + + if (secondsOfFeruchemyToAdd > 0) + { + final ItemStack metalmindStack = + MetalmindChargeHelper.adjustMetalmindChargeExact( + data, + metalType, + secondsOfFeruchemyToAdd, + true, + true); + + if (!metalmindStack.isEmpty()) + { + //compound successful + } + } + } + } + + private ResourceLocation getBurnTimeStat() + { + final ResourceLocation resourceLocation = AllomancyStats.ALLOMANCY_BURN_TIME.get(this.metalType).get(); + //force set this stat to be time related, which happens in the get function + Stat doot = Stats.CUSTOM.get(resourceLocation, StatFormatter.TIME); + return resourceLocation; + } + + protected KeyMapping getKeyBinding() + { + if (getMetalType().isPullMetal()) + { + return AllomancyKeybindings.ALLOMANCY_IRON_PULL; + } + else if (getMetalType().isPushMetal()) + { + return AllomancyKeybindings.ALLOMANCY_STEEL_PUSH; + } + + return null; + } + + + public int getRange(ISpiritweb data) + { + if (!isActive(data)) + { + return 0; + } + + //get allomantic strength + double allomanticStrength = getStrength(data, false); + + //no range if compounding. + final int mode = Math.max(getMode(data), 0); + return Mth.floor(allomanticStrength * mode); + } + + @Override + public double maxInvestitureDraw(ISpiritweb data) + { + return (int) ((10 * getStrength(data,false)) + minInvestitureDraw(data)); + } + + @Override + public double minInvestitureDraw(ISpiritweb data) + { + if(isFlaring(data)) + { + return 100; + } + return 50; + } + + + public final Manifestation[] appManifestComp = Manifestations.ManifestArrayBuilder.getAllMetal(this.getMetalType()); + + public int beuGrantAmount(ISpiritweb web, int mode) + { + double strength = getStrength(web, false); + double baseStrength = getStrength(web, true); + + int beu = 50 + Mth.floor(strength) + Mth.floor(baseStrength); + beu *= Math.abs(mode); + + return beu; + } + + public int beuGrantAmount(ISpiritweb web) + { + return beuGrantAmount(web, getMode(web)); + } + + @Override + public KineticInvestiture newInvest(ISpiritweb data) + { + + //gets investiture + int beu = beuGrantAmount(data); + + Manifestation[] appManifest; + if(isCompounding(data)) + { + appManifest = appManifestComp; + } + else + { + appManifest = Manifestations.ManifestArrayBuilder.getArray(this); + } + KineticInvestiture sub = new KineticInvestiture( + data, + InvHelpers.Shard.PRESERVATION, + beu, + appManifest); + sub.setPriority(5); + return sub; + } + + @Override + public KineticInvestiture newInvest(ISpiritweb data, double beu, double decay) + { + return newInvest(data); + } + + @Override + public KineticInvestiture newInvest(ISpiritweb data, double beu) + { + return newInvest(data); + } + +} diff --git a/src/allomancy/java/leaf/cosmere/allomancy/common/manifestation/AllomancyNicrosil.java b/src/allomancy/java/leaf/cosmere/allomancy/common/manifestation/AllomancyNicrosil.java new file mode 100644 index 000000000..76c436fa1 --- /dev/null +++ b/src/allomancy/java/leaf/cosmere/allomancy/common/manifestation/AllomancyNicrosil.java @@ -0,0 +1,84 @@ +/* + * File updated ~ 7 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.allomancy.common.manifestation; + +import leaf.cosmere.allomancy.common.registries.AllomancyEffects; +import leaf.cosmere.allomancy.common.registries.AllomancyManifestations; +import leaf.cosmere.api.Metals; +import leaf.cosmere.api.cosmereEffect.CosmereEffectInstance; +import leaf.cosmere.api.helpers.EffectsHelper; +import leaf.cosmere.api.spiritweb.ISpiritweb; +import leaf.cosmere.common.cap.entity.SpiritwebCapability; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraftforge.event.entity.living.LivingHurtEvent; + +public class AllomancyNicrosil extends AllomancyManifestation +{ + public AllomancyNicrosil(Metals.MetalType metalType) + { + super(metalType); + } + + //active or not active + @Override + public int modeMax(ISpiritweb data) + { + return 1; + } + + @Override + public int modeMin(ISpiritweb data) + { + return 0; + } + + @Override + public boolean modeWraps(ISpiritweb data) + { + return false; + } + + //Enhances Allomantic Burn of Target + public static void onLivingHurtEvent(LivingHurtEvent event) + { + if (event.isCanceled()) + { + return; + } + + Entity trueSource = event.getSource().getEntity(); + if (trueSource instanceof Player trueSourcePlayer) + { + SpiritwebCapability.get(trueSourcePlayer).ifPresent(iSpiritweb -> + { + ItemStack itemInHand = iSpiritweb.getLiving().getMainHandItem(); + + if (itemInHand.isEmpty()) + { + AllomancyNicrosil alloNicrosil = (AllomancyNicrosil) AllomancyManifestations.ALLOMANCY_POWERS.get(Metals.MetalType.NICROSIL).get(); + + //if manifestation is active and has nicrosil metal to burn + if (alloNicrosil.isActive(iSpiritweb)) + { + //valid set up found. + CosmereEffectInstance newEffect = EffectsHelper.getNewEffect( + AllomancyEffects.ALLOMANCY_BOOST.get(), + iSpiritweb.getLiving(), + (alloNicrosil.getStrength(iSpiritweb, false)) + ); + + //apply to the hit entity + SpiritwebCapability.get(event.getEntity()).ifPresent(target -> + { + target.addEffect(newEffect, trueSourcePlayer); + }); + } + } + }); + } + } +} diff --git a/src/allomancy/java/leaf/cosmere/allomancy/common/manifestation/AllomancyPewter.java b/src/allomancy/java/leaf/cosmere/allomancy/common/manifestation/AllomancyPewter.java new file mode 100644 index 000000000..0102614f7 --- /dev/null +++ b/src/allomancy/java/leaf/cosmere/allomancy/common/manifestation/AllomancyPewter.java @@ -0,0 +1,107 @@ +/* + * File updated ~ 15 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.allomancy.common.manifestation; + +import leaf.cosmere.allomancy.common.capabilities.AllomancySpiritwebSubmodule; +import leaf.cosmere.allomancy.common.registries.AllomancyDamageTypesRegistry; +import leaf.cosmere.allomancy.common.registries.AllomancyEffects; +import leaf.cosmere.allomancy.common.registries.AllomancyManifestations; +import leaf.cosmere.api.Manifestations; +import leaf.cosmere.api.Metals; +import leaf.cosmere.api.helpers.EffectsHelper; +import leaf.cosmere.api.spiritweb.ISpiritweb; +import leaf.cosmere.common.cap.entity.SpiritwebCapability; +import net.minecraft.world.entity.LivingEntity; +import net.minecraftforge.event.entity.living.LivingHurtEvent; + +//Increases Physical Abilities +public class AllomancyPewter extends AllomancyManifestation +{ + public AllomancyPewter(Metals.MetalType metalType) + { + super(metalType); + } + + @Override + protected void applyEffectTick(ISpiritweb data) + { + LivingEntity livingEntity = data.getLiving(); + + //if we're here, we already know we are not compounding and have already 'paid' for the effect + //if (!isCompounding(data)) + { + final double strength = getStrength(data, false); + //flaring gets extra out of the effect + int actionableStrength = (int) Math.round(strength) * getMode(data); + data.addEffect(EffectsHelper.getNewEffect(AllomancyEffects.ALLOMANTIC_PEWTER.getEffect(), livingEntity, actionableStrength)); + } + + AllomancySpiritwebSubmodule asm = AllomancySpiritwebSubmodule.getSubmodule(data); + + //todo come back to this, maybe configs, maybe fine tuning how often it reduces + if (asm.getPewterDelayedDamage() > 0 && getActiveTick(data) % 1200 == 0) + { + asm.setPewterDelayedDamage(asm.getPewterDelayedDamage() - 1); + } + } + + @Override + public void onModeChange(ISpiritweb data, int lastMode) + { + super.onModeChange(data, lastMode); + + if (data.getLiving().level().isClientSide || data.getMode(this) > 0) + { + return; + } + + data.removeEffect(EffectsHelper.getEffectUUID(AllomancyEffects.ALLOMANTIC_PEWTER.getEffect(), data.getLiving())); + + + AllomancySpiritwebSubmodule asm = AllomancySpiritwebSubmodule.getSubmodule(data); + float delayedDamage = asm.getPewterDelayedDamage(); + data.getLiving().hurt(AllomancyDamageTypesRegistry.PEWTER_DELAYED_DAMAGE.source(data.getLiving().level()), delayedDamage); + asm.setPewterDelayedDamage(0); + + } + + public static void onLivingHurtEvent(LivingHurtEvent event) + { + if (event.isCanceled()) + { + return; + } + + LivingEntity livingEntity = event.getEntity(); + + SpiritwebCapability.get(livingEntity).ifPresent(data -> + { + AllomancyPewter pewter = (AllomancyPewter) AllomancyManifestations.ALLOMANCY_POWERS.get(Metals.MetalType.PEWTER).get(); + if (pewter.isAllomanticBurn(data)) + { + float damage = event.getAmount(); + //todo pewter damage reduction config + //half by default? + float damageReductionMultiplier = 0.5f; + + + if (damage > livingEntity.getHealth() && pewter.isFlaring(data)) + { + //prevent death by flaring + damageReductionMultiplier = 0.1f; + } + + + final float newDamageAmount = damage * damageReductionMultiplier; + final float delayedDamage = damage - newDamageAmount; + + event.setAmount(damage - newDamageAmount); + AllomancySpiritwebSubmodule asm = (AllomancySpiritwebSubmodule) data.getSubmodule(Manifestations.ManifestationTypes.ALLOMANCY); + asm.setPewterDelayedDamage(asm.getPewterDelayedDamage() + delayedDamage); + } + + }); + } +} diff --git a/src/allomancy/java/leaf/cosmere/allomancy/common/manifestation/AllomancyTin.java b/src/allomancy/java/leaf/cosmere/allomancy/common/manifestation/AllomancyTin.java new file mode 100644 index 000000000..fe380fa45 --- /dev/null +++ b/src/allomancy/java/leaf/cosmere/allomancy/common/manifestation/AllomancyTin.java @@ -0,0 +1,166 @@ +/* + * File updated ~ 7 - 10 - 2023 ~ Leaf + */ + +package leaf.cosmere.allomancy.common.manifestation; + +import leaf.cosmere.allomancy.common.config.AllomancyConfigs; +import leaf.cosmere.allomancy.common.registries.AllomancyManifestations; +import leaf.cosmere.api.Metals; +import leaf.cosmere.api.helpers.EffectsHelper; +import leaf.cosmere.api.spiritweb.ISpiritweb; +import leaf.cosmere.common.cap.entity.SpiritwebCapability; +import net.minecraft.client.Minecraft; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.client.resources.sounds.SoundInstance; +import net.minecraft.core.particles.VibrationParticleOption; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.gameevent.PositionSource; +import net.minecraft.world.level.gameevent.PositionSourceType; +import net.minecraft.world.phys.Vec3; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.client.event.sound.PlaySoundEvent; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Optional; + +public class AllomancyTin extends AllomancyManifestation +{ + private static final HashMap soundPosMap = new HashMap<>(); + + public AllomancyTin(Metals.MetalType metalType) + { + super(metalType); + } + + public static ArrayList getTinSoundList() + { + return new ArrayList<>(soundPosMap.keySet()); + } + + @Override + public void onModeChange(ISpiritweb data, int lastMode) { + super.onModeChange(data, lastMode); + + if (data.getLiving().level().isClientSide()) + { + int mode = getMode(data); + + if (mode <= 0) + { + soundPosMap.clear(); + } + } + } + + @Override + public void applyEffectTick(ISpiritweb data) + { + final LivingEntity living = data.getLiving(); + //allomantic tin allows you to see through investiture based hindrances + //I would say that the darkness from a warden definitely counts. + if (living.hasEffect(MobEffects.DARKNESS)) + { + living.removeEffect(MobEffects.DARKNESS); + } + + //todo re-evaluate if this is fun or interesting. We want there to be drawbacks to powers too. + final int blockLighting = living.getFeetBlockState().getLightEmission(); + if (blockLighting > 14) + { + living.addEffect(EffectsHelper.getNewEffect(MobEffects.BLINDNESS, blockLighting - 14)); + } + else if (blockLighting < 8 && living.hasEffect(MobEffects.BLINDNESS)) + { + living.removeEffect(MobEffects.BLINDNESS); + } + + // show particles from sound origins towards player burning tin + if (living.level().isClientSide() && living instanceof LocalPlayer) + { + soundPosMap.entrySet().removeIf(entry -> entry.getValue() <= 0); + + Vec3 playerPos = new Vec3(living.position().x, living.position().y, living.position().z); + Vec3 lookAngle = living.getLookAngle(); + playerPos = playerPos.add(lookAngle.x, 1.2D, lookAngle.z); + + AbsolutePositionSource playerSource = new AbsolutePositionSource(playerPos); + for (Vec3 v : soundPosMap.keySet()) + { + // only make particles for 3 ticks + if (soundPosMap.get(v) > 18) + { + VibrationParticleOption vib = new VibrationParticleOption(playerSource, 10); + living.level().addParticle(vib, v.x, v.y, v.z, 1D, 1D, 1D); + } + + soundPosMap.put(v, soundPosMap.get(v)-1); + } + } + } + + @OnlyIn(Dist.CLIENT) + public static void onSound(PlaySoundEvent event) + { + if (Minecraft.getInstance().level == null) + return; + + SoundInstance eventSound = event.getSound(); + AllomancyTin tinAllomancy = (AllomancyTin) AllomancyManifestations.ALLOMANCY_POWERS.get(Metals.MetalType.TIN).get(); + + if ((eventSound == null)) + { + return; + } + + Player localPlayer = Minecraft.getInstance().player; + + SpiritwebCapability.get(localPlayer).ifPresent(playerSpiritweb -> + { + // if is rain and config is not enabled, return + if (event.getName().equals("weather.rain") && !AllomancyConfigs.CLIENT.canHearRain.get()) + return; + + boolean isBronzeSound = event.getName().equals("block.note_block.basedrum"); + if (tinAllomancy.isActive(playerSpiritweb) && !isBronzeSound) + { + //todo make the entity glow or something to the user? + Vec3 soundPos = new Vec3(event.getSound().getX(), event.getSound().getY(), event.getSound().getZ()); + double distance = localPlayer.position().distanceTo(soundPos); + int range = tinAllomancy.getRange(playerSpiritweb); + + if (distance < range) + { + soundPosMap.put(soundPos, 20); // timer in ticks + } + } + }); + } + + static class AbsolutePositionSource implements PositionSource + { + private Vec3 pos; + + public AbsolutePositionSource(Vec3 pos) + { + this.pos = pos; + } + + @Override + public Optional getPosition(Level pLevel) + { + return Optional.of(pos); + } + + @Override + public PositionSourceType getType() + { + return PositionSourceType.ENTITY; + } + } +} diff --git a/src/allomancy/java/leaf/cosmere/allomancy/common/manifestation/AllomancyZinc.java b/src/allomancy/java/leaf/cosmere/allomancy/common/manifestation/AllomancyZinc.java new file mode 100644 index 000000000..dbb02a786 --- /dev/null +++ b/src/allomancy/java/leaf/cosmere/allomancy/common/manifestation/AllomancyZinc.java @@ -0,0 +1,226 @@ +/* + * File updated ~ 15 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.allomancy.common.manifestation; + +import leaf.cosmere.allomancy.client.AllomancyKeybindings; +import leaf.cosmere.allomancy.common.Allomancy; +import leaf.cosmere.allomancy.common.network.packets.EntityAllomancyActivateMessage; +import leaf.cosmere.api.CosmereAPI; +import leaf.cosmere.api.Metals; +import leaf.cosmere.api.helpers.EntityHelper; +import leaf.cosmere.api.helpers.PlayerHelper; +import leaf.cosmere.api.math.MathHelper; +import leaf.cosmere.api.spiritweb.ISpiritweb; +import leaf.cosmere.client.Keybindings; +import leaf.cosmere.common.config.CosmereConfigs; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.Mob; +import net.minecraft.world.phys.EntityHitResult; +import net.minecraft.world.phys.HitResult; + +import java.util.*; + +public class AllomancyZinc extends AllomancyManifestation +{ + public static final HashMap playerThreadMap = new HashMap<>(); + + public AllomancyZinc(Metals.MetalType metalType) + { + super(metalType); + } + + //Inflames Emotions + //make hostiles target you but also make non-hostiles target hostiles? + @Override + public void applyEffectTick(ISpiritweb data) + { + if (data.getLiving().level().isClientSide()) + { + if (isActiveTick(data)) + { + boolean isSingleTarget = AllomancyKeybindings.ALLOMANCY_RIOT.isDown() || (Keybindings.MANIFESTATION_USE_ACTIVE.isDown() && data.getSelectedManifestation().equals(getManifestation())); + int singleTargetEntityId = 0; + + if (isSingleTarget) + { + HitResult ray = PlayerHelper.pickWithRange(data.getLiving(), (int) Math.floor(getRange(data) * CosmereConfigs.SERVER_CONFIG.EMOTIONAL_POWERS_SINGLE_TARGET_RANGE_MULTIPLIER.get())); + if (ray instanceof EntityHitResult entityHitResult) + { + singleTargetEntityId = entityHitResult.getEntity().getId(); + } + } + + Allomancy.packetHandler().sendToServer(new EntityAllomancyActivateMessage(Metals.MetalType.ZINC, isSingleTarget, singleTargetEntityId)); + } + } + else + { + performEffectServer(data); + } + } + + private void performEffectServer(ISpiritweb data) + { + int mode = getMode(data); + String uuid = data.getLiving().getStringUUID(); + AllomancyZinc.ZincThread playerThread = playerThreadMap.get(data.getLiving().getStringUUID()); + boolean isSingleTarget = false; + if (playerThread != null) + { + isSingleTarget = playerThread.isSingleTarget; + } + + // data processing + { + // this is the only way to check if the player is still online, thanks forge devs + if (data.getLiving().level().getServer().getPlayerList().getPlayer(data.getLiving().getUUID()) == null) + { + return; + } + + if (playerThreadMap.get(uuid) == null) + { + playerThreadMap.put(uuid, new ZincThread(data)); + } + List entitiesToAffect = new ArrayList<>(); + + if (isSingleTarget) + { + if (data.getLiving().level().getEntity(playerThreadMap.get(uuid).singleTargetEntityID) instanceof LivingEntity entity) + { + entitiesToAffect.add(entity); + } + } + else + { + entitiesToAffect = playerThreadMap.get(uuid).requestEntityList(); + } + + for (LivingEntity e : entitiesToAffect) + { + if (e instanceof Mob mob) + { + + //mob.targetSelector.enableFlag(Goal.Flag.TARGET); + mob.setNoAi(false); + + switch (mode) + { + case 3: + if (mob.getTarget() == null) + { + LivingEntity attackTarget = entitiesToAffect.get(MathHelper.RANDOM.nextInt(entitiesToAffect.size())); + mob.setTarget(attackTarget); + } + case 2: + if (mob.getLastHurtByMob() == null) + { + mob.setLastHurtByMob(mob.getTarget() != null + ? mob.getTarget() + : entitiesToAffect.get(MathHelper.RANDOM.nextInt(entitiesToAffect.size()))); + } + case 1: + default: + mob.setAggressive(true); + } + } + } + + if (!isSingleTarget) + { + playerThreadMap.get(uuid).releaseEntityList(); + } + } + } + + @Override + public void onModeChange(ISpiritweb data, int lastMode) + { + String uuid = data.getLiving().getStringUUID(); + if (getMode(data) <= 0) + { + playerThreadMap.remove(uuid); + } + + super.onModeChange(data, lastMode); + } + + @Override + public boolean tick(ISpiritweb data) + { + // data thread management + { + String uuid = data.getLiving().getStringUUID(); + if (!playerThreadMap.containsKey(uuid)) + { + playerThreadMap.put(uuid, new ZincThread(data)); + } + + playerThreadMap.entrySet().removeIf(entry -> !entry.getValue().isRunning || AllomancyEntityThread.serverShutdown || entry.getValue() == null); + } + + return super.tick(data); + } + + public class ZincThread extends AllomancyEntityThread + { + public boolean isSingleTarget = false; + public int singleTargetEntityID = 0; + + public ZincThread(ISpiritweb data) + { + super(data); + + Thread t = new Thread(this, "zinc_thread_" + data.getLiving().getDisplayName().getString()); + t.start(); + } + + @Override + public void run() + { + List newEntityList; + while (true) + { + int mode = getMode(data); + if (serverShutdown) + { + break; + } + + if (mode <= 0) + { + break; + } + + try + { + if (lock.tryLock()) + { + int range = getRange(data); + + newEntityList = EntityHelper.getLivingEntitiesInRange(data.getLiving(), range, true); + setEntityList(newEntityList); + lock.unlock(); + } + + // sleep thread for 1 tick (50ms) + Thread.sleep(50); + } + catch (Exception e) + { + CosmereAPI.logger.debug(Arrays.toString(e.getStackTrace())); + + if (e instanceof ConcurrentModificationException) + { + lock.unlock(); + } + + break; + } + } + isRunning = false; + } + } +} diff --git a/src/allomancy/java/leaf/cosmere/allomancy/common/network/AllomancyPacketHandler.java b/src/allomancy/java/leaf/cosmere/allomancy/common/network/AllomancyPacketHandler.java new file mode 100644 index 000000000..6d27c9734 --- /dev/null +++ b/src/allomancy/java/leaf/cosmere/allomancy/common/network/AllomancyPacketHandler.java @@ -0,0 +1,34 @@ +/* + * File updated ~ 8 - 10 - 2022 ~ Leaf + */ + +package leaf.cosmere.allomancy.common.network; + +import leaf.cosmere.allomancy.common.Allomancy; +import leaf.cosmere.allomancy.common.network.packets.EntityAllomancyActivateMessage; +import leaf.cosmere.allomancy.common.network.packets.PlayerShootProjectileMessage; +import leaf.cosmere.common.Cosmere; +import leaf.cosmere.common.network.BasePacketHandler; +import leaf.cosmere.common.network.packets.SyncPushPullMessage; +import net.minecraftforge.network.simple.SimpleChannel; + +public class AllomancyPacketHandler extends BasePacketHandler +{ + private final SimpleChannel NETWORK_CHANNEL = createChannel(Cosmere.rl(Allomancy.MODID), Allomancy.instance.versionNumber); + + @Override + protected SimpleChannel getChannel() + { + return NETWORK_CHANNEL; + } + + @Override + public void initialize() + { + registerClientToServer(PlayerShootProjectileMessage.class, PlayerShootProjectileMessage::decode); + registerClientToServer(SyncPushPullMessage.class, SyncPushPullMessage::decode); + registerClientToServer(EntityAllomancyActivateMessage.class, EntityAllomancyActivateMessage::decode); + } + + +} diff --git a/src/allomancy/java/leaf/cosmere/allomancy/common/network/packets/EntityAllomancyActivateMessage.java b/src/allomancy/java/leaf/cosmere/allomancy/common/network/packets/EntityAllomancyActivateMessage.java new file mode 100644 index 000000000..e1e24430e --- /dev/null +++ b/src/allomancy/java/leaf/cosmere/allomancy/common/network/packets/EntityAllomancyActivateMessage.java @@ -0,0 +1,78 @@ +package leaf.cosmere.allomancy.common.network.packets; + +import leaf.cosmere.allomancy.common.manifestation.AllomancyBrass; +import leaf.cosmere.allomancy.common.manifestation.AllomancyZinc; +import leaf.cosmere.api.Metals; +import leaf.cosmere.common.cap.entity.SpiritwebCapability; +import leaf.cosmere.common.network.ICosmerePacket; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.server.MinecraftServer; +import net.minecraft.server.level.ServerPlayer; +import net.minecraftforge.network.NetworkEvent; + +public class EntityAllomancyActivateMessage implements ICosmerePacket +{ + public CompoundTag data; + + public EntityAllomancyActivateMessage(Metals.MetalType metalType, boolean isSingleTarget, int singleTargetEntityID) + { + data = new CompoundTag(); + data.putInt("metalID", metalType.getID()); + data.putBoolean("isSingleTarget", isSingleTarget); + data.putInt("singleTargetEntityID", singleTargetEntityID); + } + + public static EntityAllomancyActivateMessage decode(FriendlyByteBuf buf) + { + CompoundTag data = buf.readNbt(); + Metals.MetalType metalType = Metals.MetalType.valueOf(data.getInt("metalID")).get(); + boolean isSingleTarget = data.getBoolean("isSingleTarget"); + int singleTargetEntityID = data.getInt("singleTargetEntityID"); + + return new EntityAllomancyActivateMessage(metalType, isSingleTarget, singleTargetEntityID); + } + + @Override + public void handle(NetworkEvent.Context context) + { + ServerPlayer player = context.getSender(); + MinecraftServer server = player.getServer(); + server.submitAsync(() -> SpiritwebCapability.get(player).ifPresent((cap) -> { + if (!data.isEmpty()) + { + Metals.MetalType metalType = Metals.MetalType.valueOf(data.getInt("metalID")).get(); + boolean isSingleTarget = data.getBoolean("isSingleTarget"); + int singleTargetEntityID = data.getInt("singleTargetEntityID"); + + switch (metalType) + { + case BRASS: + AllomancyBrass.BrassThread brassThread = AllomancyBrass.playerThreadMap.get(player.getStringUUID()); + brassThread.isSingleTarget = isSingleTarget; + if (isSingleTarget) + { + brassThread.singleTargetEntityID = singleTargetEntityID; + } + break; + case ZINC: + AllomancyZinc.ZincThread zincThread = AllomancyZinc.playerThreadMap.get(player.getStringUUID()); + zincThread.isSingleTarget = isSingleTarget; + if (isSingleTarget) + { + zincThread.singleTargetEntityID = singleTargetEntityID; + } + break; + default: + break; + } + } + })); + } + + @Override + public void encode(FriendlyByteBuf buf) + { + buf.writeNbt(data); + } +} \ No newline at end of file diff --git a/src/allomancy/java/leaf/cosmere/allomancy/common/network/packets/PlayerShootProjectileMessage.java b/src/allomancy/java/leaf/cosmere/allomancy/common/network/packets/PlayerShootProjectileMessage.java new file mode 100644 index 000000000..60177e06c --- /dev/null +++ b/src/allomancy/java/leaf/cosmere/allomancy/common/network/packets/PlayerShootProjectileMessage.java @@ -0,0 +1,54 @@ +/* + * File updated ~ 8 - 10 - 2022 ~ Leaf + */ + +package leaf.cosmere.allomancy.common.network.packets; + +import leaf.cosmere.allomancy.common.registries.AllomancyItems; +import leaf.cosmere.common.cap.entity.SpiritwebCapability; +import leaf.cosmere.common.network.ICosmerePacket; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.server.MinecraftServer; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.item.ItemStack; +import net.minecraftforge.network.NetworkEvent; + +public class PlayerShootProjectileMessage implements ICosmerePacket +{ + public PlayerShootProjectileMessage() + { + //empty + } + + @Override + public void encode(FriendlyByteBuf buf) + { + //empty + } + + public static PlayerShootProjectileMessage decode(FriendlyByteBuf buf) + { + return new PlayerShootProjectileMessage(); + } + + @Override + public void handle(NetworkEvent.Context context) + { + ServerPlayer player = context.getSender(); + MinecraftServer server = player.getServer(); + server.submitAsync(() -> SpiritwebCapability.get(player).ifPresent((cap) -> + { + for (int i = 0; i < player.getInventory().getContainerSize(); i++) + { + ItemStack bag = player.getInventory().getItem(i); + if (!bag.isEmpty() && bag.is(AllomancyItems.COIN_POUCH.get())) + { + AllomancyItems.COIN_POUCH.get().shoot(player, bag); + + return; + } + } + })); + } + +} diff --git a/src/allomancy/java/leaf/cosmere/allomancy/common/recipes/VialMixingRecipe.java b/src/allomancy/java/leaf/cosmere/allomancy/common/recipes/VialMixingRecipe.java new file mode 100644 index 000000000..36f397712 --- /dev/null +++ b/src/allomancy/java/leaf/cosmere/allomancy/common/recipes/VialMixingRecipe.java @@ -0,0 +1,186 @@ +/* + * File updated ~ 20 - 12 - 2024 ~ Leaf + */ + +package leaf.cosmere.allomancy.common.recipes; + +import leaf.cosmere.allomancy.common.Allomancy; +import leaf.cosmere.allomancy.common.items.MetalVialItem; +import leaf.cosmere.allomancy.common.registries.AllomancyItems; +import leaf.cosmere.allomancy.common.registries.AllomancyRecipes; +import leaf.cosmere.api.EnumUtils; +import leaf.cosmere.api.IHasSize; +import leaf.cosmere.api.Metals; +import net.minecraft.core.RegistryAccess; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.TagKey; +import net.minecraft.world.inventory.CraftingContainer; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.crafting.CraftingBookCategory; +import net.minecraft.world.item.crafting.CustomRecipe; +import net.minecraft.world.item.crafting.Ingredient; +import net.minecraft.world.item.crafting.RecipeSerializer; +import net.minecraft.world.level.Level; +import net.minecraftforge.common.Tags; + +import javax.annotation.Nonnull; +import java.util.Optional; + +//not to be confused with the vile mixing recipe, +// where you just make gross things +public class VialMixingRecipe extends CustomRecipe +{ + private static final Ingredient INGREDIENT_BOTTLE = Ingredient.of(Items.GLASS_BOTTLE, AllomancyItems.METAL_VIAL.get()); + + public VialMixingRecipe(ResourceLocation loc, CraftingBookCategory pCategory) + { + super(loc, pCategory); + } + + @Override + public boolean matches(CraftingContainer inv, @Nonnull Level world) + { + boolean hasNugget = false; + ItemStack vialStack = null; + int bottleAmount = 0; + int nuggetTotal = 0; + MetalVialItem metalVialItem = AllomancyItems.METAL_VIAL.get(); + + for (int i = 0; i < inv.getContainerSize(); i++) + { + ItemStack stack = inv.getItem(i); + if (stack.isEmpty()) + { + continue; + } + + if (INGREDIENT_BOTTLE.test(stack)) + { + //only one allowed + if (vialStack != null) + { + return false; + } + + vialStack = stack; + //if is vial and not bottle, check it for contained metals. + if (vialStack.is(metalVialItem)) + { + bottleAmount = MetalVialItem.containedMetalCount(vialStack); + } + } + else if (testForViableNugget(stack).isPresent()) + { + //but multiple nuggets allowed + hasNugget = true; + nuggetTotal++; + } + else if (stack.isEmpty()) + { + //ignore empty slots + } + else + { + //if its not a vial, bottle, or nugget, then its not a valid recipe + return false; + } + } + + if (vialStack == null) + { + //no vialStack, no service + return false; + } + + if (bottleAmount + nuggetTotal > MetalVialItem.getMaxFillCount(vialStack)) + { + return false; + } + + //check how full the vialStack is, but only if its the vial + //minecraft bottles can be inherently empty + if (vialStack.getItem() == AllomancyItems.METAL_VIAL.get()) + { + return hasNugget && !MetalVialItem.isFull(vialStack); + } + + + return hasNugget; + } + + private Optional> testForViableNugget(ItemStack stack) + { + for (Metals.MetalType value : EnumUtils.METAL_TYPES) + { + TagKey metalNuggetTag = value.getMetalNuggetTag(); + if (stack.is(metalNuggetTag)) + { + if(stack.getItem() instanceof IHasSize sizeItem) + { + int size = sizeItem.readMetalAlloySizeNbtData(stack); + if(size < sizeItem.getMaxSize()) return Optional.empty(); + } + return Optional.of(metalNuggetTag); + } + } + + return Optional.empty(); + } + + + @Override + public ItemStack assemble(CraftingContainer inv, RegistryAccess pRegistryAccess) + { + MetalVialItem metalVial = AllomancyItems.METAL_VIAL.get(); + ItemStack itemstack = new ItemStack(metalVial); + + for (int i = 0; i < inv.getContainerSize(); ++i) + { + ItemStack stackInSlot = inv.getItem(i); + if (stackInSlot.isEmpty()) + { + continue; + } + + if (stackInSlot.is(Tags.Items.NUGGETS)) + { + for (Metals.MetalType metalType : EnumUtils.METAL_TYPES) + { + if (stackInSlot.is(metalType.getMetalNuggetTag())) + { + MetalVialItem.addMetals(itemstack, metalType.getID(), 1); + break; + } + } + } + else if (stackInSlot.is(metalVial)) + { + MetalVialItem.addMetals(itemstack, stackInSlot); + } + } + return itemstack; + } + + @Override + public boolean canCraftInDimensions(int width, int height) + { + //if you can fit 2 items, the bottle and a metal, you can combine + return width * height > 1; + } + + @Override + public @Nonnull ResourceLocation getId() + { + return Allomancy.rl("vial_mix"); + } + + @Override + public @Nonnull RecipeSerializer getSerializer() + { + return AllomancyRecipes.VIAL_MIX.get(); + } + + +} diff --git a/src/allomancy/java/leaf/cosmere/allomancy/common/registries/AllomancyAttributes.java b/src/allomancy/java/leaf/cosmere/allomancy/common/registries/AllomancyAttributes.java new file mode 100644 index 000000000..caa560dfe --- /dev/null +++ b/src/allomancy/java/leaf/cosmere/allomancy/common/registries/AllomancyAttributes.java @@ -0,0 +1,37 @@ +/* + * File updated ~ 20 - 11 - 2024 ~ Leaf + */ + +package leaf.cosmere.allomancy.common.registries; + +import leaf.cosmere.allomancy.common.Allomancy; +import leaf.cosmere.api.EnumUtils; +import leaf.cosmere.api.Metals; +import leaf.cosmere.common.registration.impl.AttributeDeferredRegister; +import leaf.cosmere.common.registration.impl.AttributeRegistryObject; +import net.minecraft.world.entity.ai.attributes.Attribute; + +import java.util.Arrays; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +public class AllomancyAttributes +{ + public static final AttributeDeferredRegister ATTRIBUTES = new AttributeDeferredRegister(Allomancy.MODID); + + public static final Map> ALLOMANCY_ATTRIBUTES = + Arrays.stream(EnumUtils.METAL_TYPES) + .filter(metalType -> metalType != Metals.MetalType.ATIUM && metalType.hasAssociatedManifestation()) + .collect(Collectors.toMap( + Function.identity(), + type -> + ATTRIBUTES.register( + type.getName(), + Allomancy.MODID, + 0, + 0, + 16 + ))); + +} diff --git a/src/allomancy/java/leaf/cosmere/allomancy/common/registries/AllomancyCreativeTabs.java b/src/allomancy/java/leaf/cosmere/allomancy/common/registries/AllomancyCreativeTabs.java new file mode 100644 index 000000000..3d5450519 --- /dev/null +++ b/src/allomancy/java/leaf/cosmere/allomancy/common/registries/AllomancyCreativeTabs.java @@ -0,0 +1,84 @@ +/* + * File updated ~ 10 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.allomancy.common.registries; + +import leaf.cosmere.allomancy.common.Allomancy; +import leaf.cosmere.common.registration.impl.CreativeTabDeferredRegister; +import leaf.cosmere.common.registration.impl.CreativeTabRegistryObject; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceKey; +import net.minecraft.world.item.CreativeModeTab; +import net.minecraft.world.item.CreativeModeTabs; +import net.minecraftforge.event.BuildCreativeModeTabContentsEvent; + +public class AllomancyCreativeTabs +{ + public static final CreativeTabDeferredRegister CREATIVE_TABS = new CreativeTabDeferredRegister(Allomancy.MODID, AllomancyCreativeTabs::addToExistingTabs); + + + public static final CreativeTabRegistryObject ITEMS = + CREATIVE_TABS.registerMain( + Component.translatable("tabs." + Allomancy.MODID + ".items"), + AllomancyItems.COIN_POUCH, + builder -> + builder.withSearchBar()//Allow our tabs to be searchable for convenience purposes + .displayItems((displayParameters, output) -> + { + CreativeTabDeferredRegister.addToDisplay(AllomancyItems.ITEMS, output); + AllomancyItems.METAL_VIAL.get().addFilled(output); + //CreativeTabDeferredRegister.addToDisplay(AllomancyBlocks.BLOCKS, output); + }) + ); + + + private static void addToExistingTabs(BuildCreativeModeTabContentsEvent event) + { + ResourceKey tabKey = event.getTabKey(); + if (tabKey == CreativeModeTabs.BUILDING_BLOCKS) + { + //CreativeTabDeferredRegister.addToDisplay(event, BlocksRegistry.METALWORKING_TABLE); + } + else if (tabKey == CreativeModeTabs.NATURAL_BLOCKS) + { + /*for (var ore : BlocksRegistry.METAL_ORE.values()) + { + CreativeTabDeferredRegister.addToDisplay(event, ore); + } + for (var ore : BlocksRegistry.METAL_ORE_DEEPSLATE.values()) + { + CreativeTabDeferredRegister.addToDisplay(event, ore); + }*/ + } + else if (tabKey == CreativeModeTabs.FUNCTIONAL_BLOCKS) + { + + } + else if (tabKey == CreativeModeTabs.REDSTONE_BLOCKS) + { + + } + else if (tabKey == CreativeModeTabs.TOOLS_AND_UTILITIES) + { + + } + else if (tabKey == CreativeModeTabs.COMBAT) + { + + } + else if (tabKey == CreativeModeTabs.FOOD_AND_DRINKS) + { + //ItemsRegistry.SOME_FOOD.get().addItems(event); + } + else if (tabKey == CreativeModeTabs.SPAWN_EGGS) + { + + } + else if (tabKey == CreativeModeTabs.INGREDIENTS) + { + + } + } + +} diff --git a/src/allomancy/java/leaf/cosmere/allomancy/common/registries/AllomancyDamageTypesRegistry.java b/src/allomancy/java/leaf/cosmere/allomancy/common/registries/AllomancyDamageTypesRegistry.java new file mode 100644 index 000000000..257188e37 --- /dev/null +++ b/src/allomancy/java/leaf/cosmere/allomancy/common/registries/AllomancyDamageTypesRegistry.java @@ -0,0 +1,71 @@ +package leaf.cosmere.allomancy.common.registries; + +import leaf.cosmere.allomancy.common.Allomancy; +import leaf.cosmere.api.text.IHasTranslationKey; +import leaf.cosmere.common.Cosmere; +import leaf.cosmere.common.registry.CosmereDamageTypesRegistry; +import net.minecraft.core.RegistryAccess; +import net.minecraft.core.registries.Registries; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.damagesource.DamageType; +import net.minecraft.world.level.Level; +import org.jetbrains.annotations.NotNull; + +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + +public class AllomancyDamageTypesRegistry extends CosmereDamageTypesRegistry +{ + public static final Map INTERNAL_DAMAGE_TYPES = new HashMap<>(); + public static final Map DAMAGE_TYPES = Collections.unmodifiableMap(INTERNAL_DAMAGE_TYPES); + + public static final AllomancyDamageType PEWTER_DELAYED_DAMAGE = new AllomancyDamageType("pewter_delayed_damage", 0.1f); + + public record AllomancyDamageType(ResourceKey key, float exhaustion) implements IHasTranslationKey + { + public AllomancyDamageType + { + INTERNAL_DAMAGE_TYPES.put(key.location().toString(), this); + } + + private AllomancyDamageType(String name) + { + this(name, 0); + } + + private AllomancyDamageType(String name, float exhaustion) + { + this(ResourceKey.create(Registries.DAMAGE_TYPE, Allomancy.rl(name)), exhaustion); + } + + public String getMsgId() + { + return registryName().getNamespace() + "." + registryName().getPath(); + } + + public ResourceLocation registryName() + { + return key.location(); + } + + @NotNull + @Override + public String getTranslationKey() + { + return "death.attack." + getMsgId(); + } + + public DamageSource source(Level level) + { + return source(level.registryAccess()); + } + + public DamageSource source(RegistryAccess registryAccess) + { + return new DamageSource(registryAccess.registryOrThrow(Registries.DAMAGE_TYPE).getHolderOrThrow(key)); + } + } +} \ No newline at end of file diff --git a/src/allomancy/java/leaf/cosmere/allomancy/common/registries/AllomancyEffects.java b/src/allomancy/java/leaf/cosmere/allomancy/common/registries/AllomancyEffects.java new file mode 100644 index 000000000..8323470c0 --- /dev/null +++ b/src/allomancy/java/leaf/cosmere/allomancy/common/registries/AllomancyEffects.java @@ -0,0 +1,40 @@ +/* + * File updated ~ 27 - 10 - 2023 ~ Leaf + */ + +package leaf.cosmere.allomancy.common.registries; + +import leaf.cosmere.allomancy.common.Allomancy; +import leaf.cosmere.allomancy.common.effects.AllomancyBoostEffect; +import leaf.cosmere.allomancy.common.effects.BrassStunEffect; +import leaf.cosmere.allomancy.common.effects.CopperCloudEffect; +import leaf.cosmere.allomancy.common.effects.PewterBurnEffect; +import leaf.cosmere.common.registration.impl.CosmereEffectDeferredRegister; +import leaf.cosmere.common.registration.impl.CosmereEffectRegistryObject; +import leaf.cosmere.common.registration.impl.MobEffectDeferredRegister; +import leaf.cosmere.common.registration.impl.MobEffectRegistryObject; +import net.minecraft.world.effect.MobEffectCategory; + +public class AllomancyEffects +{ + + public static final CosmereEffectDeferredRegister EFFECTS = new CosmereEffectDeferredRegister(Allomancy.MODID); + public static final MobEffectDeferredRegister MOB_EFFECTS = new MobEffectDeferredRegister(Allomancy.MODID); + + public static final CosmereEffectRegistryObject ALLOMANTIC_COPPER = EFFECTS.register( + "copper_cloud", + CopperCloudEffect::new); + + public static final CosmereEffectRegistryObject ALLOMANCY_BOOST = EFFECTS.register( + "allomancy_boost", + AllomancyBoostEffect::new); + + public static final CosmereEffectRegistryObject ALLOMANTIC_PEWTER = EFFECTS.register( + "allomantic_pewter", + PewterBurnEffect::new); + + public static final MobEffectRegistryObject ALLOMANTIC_BRASS_STUN = MOB_EFFECTS.register( + "allomantic_brass_stun", + () -> new BrassStunEffect(MobEffectCategory.HARMFUL, 0)); + +} diff --git a/src/allomancy/java/leaf/cosmere/allomancy/common/registries/AllomancyEntityTypes.java b/src/allomancy/java/leaf/cosmere/allomancy/common/registries/AllomancyEntityTypes.java new file mode 100644 index 000000000..d95215545 --- /dev/null +++ b/src/allomancy/java/leaf/cosmere/allomancy/common/registries/AllomancyEntityTypes.java @@ -0,0 +1,26 @@ +/* + * File updated ~ 8 - 10 - 2022 ~ Leaf + */ + +package leaf.cosmere.allomancy.common.registries; + +import leaf.cosmere.allomancy.common.Allomancy; +import leaf.cosmere.allomancy.common.entities.CoinProjectile; +import leaf.cosmere.common.registration.impl.EntityTypeDeferredRegister; +import leaf.cosmere.common.registration.impl.EntityTypeRegistryObject; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.MobCategory; + +public class AllomancyEntityTypes +{ + public static final EntityTypeDeferredRegister ENTITY_TYPES = new EntityTypeDeferredRegister(Allomancy.MODID); + + public static final EntityTypeRegistryObject COIN_PROJECTILE = + ENTITY_TYPES.register( + "coin_projectile", + EntityType.Builder.of(CoinProjectile::new, MobCategory.MISC) + .sized(0.5F, 0.5F) + .clientTrackingRange(4) + .updateInterval(20)); + +} diff --git a/src/allomancy/java/leaf/cosmere/allomancy/common/registries/AllomancyItems.java b/src/allomancy/java/leaf/cosmere/allomancy/common/registries/AllomancyItems.java new file mode 100644 index 000000000..eece04a4a --- /dev/null +++ b/src/allomancy/java/leaf/cosmere/allomancy/common/registries/AllomancyItems.java @@ -0,0 +1,26 @@ +/* + * File updated ~ 5 - 8 - 2023 ~ Leaf + */ + +package leaf.cosmere.allomancy.common.registries; + +import leaf.cosmere.allomancy.common.Allomancy; +import leaf.cosmere.allomancy.common.items.CoinPouchItem; +import leaf.cosmere.allomancy.common.items.MetalVialItem; +import leaf.cosmere.allomancy.common.items.MistcloakItem; +import leaf.cosmere.common.properties.PropTypes; +import leaf.cosmere.common.registration.impl.ItemDeferredRegister; +import leaf.cosmere.common.registration.impl.ItemRegistryObject; +import net.minecraft.world.item.ArmorItem; +import net.minecraft.world.item.ArmorMaterials; + +public class AllomancyItems +{ + public static final ItemDeferredRegister ITEMS = new ItemDeferredRegister(Allomancy.MODID); + + public static final ItemRegistryObject COIN_POUCH = ITEMS.register("coin_pouch", () -> new CoinPouchItem(PropTypes.Items.ONE.get())); + + public static final ItemRegistryObject METAL_VIAL = ITEMS.register("metal_vial", MetalVialItem::new); + public static final ItemRegistryObject MISTCLOAK = ITEMS.register("mistcloak", () -> new MistcloakItem(ArmorMaterials.LEATHER, ArmorItem.Type.HELMET, PropTypes.Items.ONE.get())); + +} diff --git a/src/allomancy/java/leaf/cosmere/allomancy/common/registries/AllomancyManifestations.java b/src/allomancy/java/leaf/cosmere/allomancy/common/registries/AllomancyManifestations.java new file mode 100644 index 000000000..01a9176a1 --- /dev/null +++ b/src/allomancy/java/leaf/cosmere/allomancy/common/registries/AllomancyManifestations.java @@ -0,0 +1,83 @@ +/* + * File updated ~ 20 - 11 - 2024 ~ Leaf + */ + +package leaf.cosmere.allomancy.common.registries; + +import leaf.cosmere.allomancy.common.Allomancy; +import leaf.cosmere.allomancy.common.manifestation.*; +import leaf.cosmere.api.EnumUtils; +import leaf.cosmere.api.Metals; +import leaf.cosmere.common.registration.impl.ManifestationDeferredRegister; +import leaf.cosmere.common.registration.impl.ManifestationRegistryObject; + +import java.util.Arrays; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +public class AllomancyManifestations +{ + public static final ManifestationDeferredRegister MANIFESTATIONS = new ManifestationDeferredRegister(Allomancy.MODID); + + + // Allomancy + public static final Map> ALLOMANCY_POWERS = + Arrays.stream(EnumUtils.METAL_TYPES) + .filter(Metals.MetalType::hasAssociatedManifestation) + .collect(Collectors.toMap( + Function.identity(), + metalType -> + MANIFESTATIONS.register( + metalType.getName(), + () -> makeAllomancyManifestation(metalType))//get the specific instance of the manifestation for allomancy + )); + + + private static AllomancyManifestation makeAllomancyManifestation(Metals.MetalType metalType) + { + switch (metalType) + { + case IRON: + case STEEL: + return new AllomancyIronSteel(metalType); + case TIN: + return new AllomancyTin(metalType); + case PEWTER://done? + return new AllomancyPewter(metalType); + case ZINC://done? + return new AllomancyZinc(metalType); + case BRASS://done? + return new AllomancyBrass(metalType); + case COPPER://done? + return new AllomancyCopper(metalType); + case BRONZE://done? + return new AllomancyBronze(metalType); + case ALUMINUM:// done? + return new AllomancyAluminum(metalType); + case DURALUMIN: + return new AllomancyDuralumin(metalType); + case CHROMIUM://done? + return new AllomancyChromium(metalType); + case NICROSIL: + return new AllomancyNicrosil(metalType); + case CADMIUM: + return new AllomancyCadmium(metalType); + case BENDALLOY://done? + return new AllomancyBendalloy(metalType); + case GOLD://shows your past //todo + return new AllomancyGold(metalType); + case ELECTRUM://shows your future // todo + return new AllomancyElectrum(metalType); + case ATIUM://prevents taking damage from others + return new AllomancyAtium(metalType); + case MALATIUM://shows other's past // todo + return new AllomancyMalatium(metalType); + } + + //others aren't valid allomancy manifestations... for now. + return new AllomancyManifestation(metalType); + } + + +} diff --git a/src/allomancy/java/leaf/cosmere/allomancy/common/registries/AllomancyMenuTypes.java b/src/allomancy/java/leaf/cosmere/allomancy/common/registries/AllomancyMenuTypes.java new file mode 100644 index 000000000..badcf9f25 --- /dev/null +++ b/src/allomancy/java/leaf/cosmere/allomancy/common/registries/AllomancyMenuTypes.java @@ -0,0 +1,21 @@ +/* + * File updated ~ 8 - 10 - 2022 ~ Leaf + */ + +package leaf.cosmere.allomancy.common.registries; + +import leaf.cosmere.allomancy.common.Allomancy; +import leaf.cosmere.allomancy.common.coinpouch.CoinPouchContainerMenu; +import leaf.cosmere.common.registration.impl.MenuTypeDeferredRegister; +import leaf.cosmere.common.registration.impl.MenuTypeRegistryObject; +import net.minecraft.world.inventory.MenuType; +import net.minecraftforge.common.extensions.IForgeMenuType; + +public class AllomancyMenuTypes +{ + public static final MenuTypeDeferredRegister MENU_TYPES = new MenuTypeDeferredRegister(Allomancy.MODID); + public static final MenuTypeRegistryObject> COIN_POUCH = MENU_TYPES.register( + "coin_pouch", + () -> IForgeMenuType.create(CoinPouchContainerMenu::fromNetwork)); + +} diff --git a/src/allomancy/java/leaf/cosmere/allomancy/common/registries/AllomancyRecipes.java b/src/allomancy/java/leaf/cosmere/allomancy/common/registries/AllomancyRecipes.java new file mode 100644 index 000000000..f74c55660 --- /dev/null +++ b/src/allomancy/java/leaf/cosmere/allomancy/common/registries/AllomancyRecipes.java @@ -0,0 +1,20 @@ +/* + * File updated ~ 10 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.allomancy.common.registries; + +import leaf.cosmere.allomancy.common.Allomancy; +import leaf.cosmere.allomancy.common.recipes.VialMixingRecipe; +import leaf.cosmere.common.registration.impl.RecipeSerializerDeferredRegister; +import leaf.cosmere.common.registration.impl.RecipeSerializerRegistryObject; +import net.minecraft.world.item.crafting.SimpleCraftingRecipeSerializer; + +// for the non-json based recipes +public class AllomancyRecipes +{ + public static final RecipeSerializerDeferredRegister RECIPE_SERIALIZERS = new RecipeSerializerDeferredRegister(Allomancy.MODID); + + public static final RecipeSerializerRegistryObject VIAL_MIX = + RECIPE_SERIALIZERS.register("crafting_vial_mix", () -> new SimpleCraftingRecipeSerializer<>(VialMixingRecipe::new)); +} diff --git a/src/allomancy/java/leaf/cosmere/allomancy/common/registries/AllomancyStats.java b/src/allomancy/java/leaf/cosmere/allomancy/common/registries/AllomancyStats.java new file mode 100644 index 000000000..e49bbb239 --- /dev/null +++ b/src/allomancy/java/leaf/cosmere/allomancy/common/registries/AllomancyStats.java @@ -0,0 +1,40 @@ +/* + * File updated ~ 20 - 11 - 2024 ~ Leaf + */ + +package leaf.cosmere.allomancy.common.registries; + +import leaf.cosmere.allomancy.common.Allomancy; +import leaf.cosmere.api.EnumUtils; +import leaf.cosmere.api.Metals; +import leaf.cosmere.common.registration.impl.StatDeferredRegister; +import leaf.cosmere.common.registration.impl.StatRegistryObject; +import net.minecraft.stats.StatFormatter; +import net.minecraft.stats.Stats; + +import java.util.Arrays; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +public class AllomancyStats +{ + public static final StatDeferredRegister STATS = new StatDeferredRegister(Allomancy.MODID); + + public static final Map ALLOMANCY_BURN_TIME = + Arrays.stream(EnumUtils.METAL_TYPES) + .filter(Metals.MetalType::hasAssociatedManifestation) + .collect(Collectors.toMap( + Function.identity(), + metalType -> STATS.register("time_since_started_burning_" + metalType.getName()) + )); + + + public static void initStatEntries() + { + for (StatRegistryObject value : ALLOMANCY_BURN_TIME.values()) + { + Stats.CUSTOM.get(value.get(), StatFormatter.TIME); + } + } +} diff --git a/src/allomancy/java/leaf/cosmere/allomancy/common/utils/MiscHelper.java b/src/allomancy/java/leaf/cosmere/allomancy/common/utils/MiscHelper.java new file mode 100644 index 000000000..32e90c575 --- /dev/null +++ b/src/allomancy/java/leaf/cosmere/allomancy/common/utils/MiscHelper.java @@ -0,0 +1,86 @@ +/* + * File updated ~ 29 - 10 - 2023 ~ Leaf + */ + +package leaf.cosmere.allomancy.common.utils; + +import leaf.cosmere.allomancy.common.capabilities.AllomancySpiritwebSubmodule; +import leaf.cosmere.api.*; +import leaf.cosmere.api.text.TextHelper; +import leaf.cosmere.common.cap.entity.SpiritwebCapability; +import leaf.cosmere.common.items.GodMetalNuggetItem; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.ai.attributes.Attribute; +import net.minecraft.world.entity.animal.horse.Llama; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; + +import java.util.ArrayList; + +public class MiscHelper +{ + + public static void consumeNugget(LivingEntity livingEntity, ItemStack itemStack, int amount) + { + if (livingEntity.level().isClientSide) + { + return; + } + + if (itemStack.getItem() instanceof IGrantsBaseAttributes attributeItem && itemStack.getItem() instanceof IHasSize sizeItem) + { + Integer size = sizeItem.readMetalAlloySizeNbtData(itemStack); + if (size != null) + { + ArrayList attributes = attributeItem.determineBaseAttributes(itemStack); + attributeItem.grantBaseAttributes(livingEntity, attributes, size); + } + + //https://www.theoryland.com/intvmain.php?i=977#43 + if (itemStack.getItem() instanceof GodMetalNuggetItem godItem) + { + if (godItem.getMetalType() == Metals.MetalType.LERASIUM) + { + if (livingEntity instanceof Llama && !livingEntity.hasCustomName()) + { + //todo translations + livingEntity.setCustomName(TextHelper.createTranslatedText("Mistborn Llama")); + } + } + else if (godItem.getMetalType() == Metals.MetalType.ATIUM) + { + eatMetal(godItem.getMetalType(), livingEntity, amount); + } + } + } + else if (itemStack.getItem() instanceof IHasMetalType metalItem) + { + eatMetal(metalItem.getMetalType(), livingEntity, amount); + } + else if (itemStack.getItem() == Items.IRON_NUGGET) + { + eatMetal(Metals.MetalType.IRON, livingEntity, amount); + } + else if (itemStack.getItem() == Items.GOLD_NUGGET) + { + eatMetal(Metals.MetalType.GOLD, livingEntity, amount); + } + } + + private static void eatMetal(Metals.MetalType metalType, LivingEntity livingEntity, int amount) + { + SpiritwebCapability.get(livingEntity).ifPresent(iSpiritweb -> + { + SpiritwebCapability spiritweb = (SpiritwebCapability) iSpiritweb; + if (metalType.hasAssociatedManifestation()) //ignore metals without manifestations, that's handled in feruchemy + { + //add to metal stored + final int addAmount = metalType.getAllomancyBurnTimeSeconds() * amount; + AllomancySpiritwebSubmodule allo = (AllomancySpiritwebSubmodule) spiritweb.getSubmodule(Manifestations.ManifestationTypes.ALLOMANCY); + allo.adjustIngestedMetal(metalType, addAmount, true); + } + }); + } + + +} diff --git a/src/allomancy/java/leaf/cosmere/allomancy/mixin/EntityMixin.java b/src/allomancy/java/leaf/cosmere/allomancy/mixin/EntityMixin.java new file mode 100644 index 000000000..053078a60 --- /dev/null +++ b/src/allomancy/java/leaf/cosmere/allomancy/mixin/EntityMixin.java @@ -0,0 +1,83 @@ +/* + * File updated ~ 20 - 12 - 2024 ~ Leaf + */ + +package leaf.cosmere.allomancy.mixin; + +import leaf.cosmere.allomancy.common.manifestation.AllomancyBronze; +import leaf.cosmere.api.CosmereAPI; +import leaf.cosmere.api.manifestation.Manifestation; +import leaf.cosmere.common.cap.entity.SpiritwebCapability; +import net.minecraft.client.Minecraft; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(Entity.class) +public class EntityMixin +{ + @Inject(method = "isCurrentlyGlowing", at = @At("RETURN"), cancellable = true) + private void handleIsGlowing(CallbackInfoReturnable cir) + { + Entity e = (Entity) (Object) this; + + final boolean isServerSide = !(e.level().isClientSide); + final boolean isInanimateEntity = !(e instanceof LivingEntity); + if (isServerSide || isInanimateEntity || cir.getReturnValue()) + { + return; + } + + if (!(Minecraft.getInstance().getCameraEntity() instanceof Player clientPlayer)) + { + return; + } + + LivingEntity target = (LivingEntity) e; + + SpiritwebCapability.get(clientPlayer).ifPresent(playerSpiritweb -> + { + if (!AllomancyBronze.isValidSeekTarget(playerSpiritweb, target)) + { + //close out of consumer, does not meet requirements for seeking. + //either not using bronze, not in range, or not strong enough + return; + } + + //okay, now we can actually check if they have powers we care about + SpiritwebCapability.get(target).ifPresent(targetSpiritweb -> + { + boolean found = false; + + for (Manifestation manifestation : CosmereAPI.manifestationRegistry()) + { + final boolean targetIsPlayer = target instanceof Player; + + //if target is not a player and has any manifestations at all + if (!targetIsPlayer && targetSpiritweb.hasManifestation(manifestation)) + { + found = true; + break; + } + //if target is player and has any active manifestations, + else if (targetIsPlayer && manifestation.isActive(targetSpiritweb)) + { + found = true; + break; + } + } + + if (found) + { + cir.setReturnValue(true); + } + }); + }); + } + +} + diff --git a/logs/debug.log b/src/allomancy/resources/META-INF/accesstransformer.cfg similarity index 100% rename from logs/debug.log rename to src/allomancy/resources/META-INF/accesstransformer.cfg diff --git a/src/allomancy/resources/META-INF/mods.toml b/src/allomancy/resources/META-INF/mods.toml new file mode 100644 index 000000000..d168c7e7b --- /dev/null +++ b/src/allomancy/resources/META-INF/mods.toml @@ -0,0 +1,43 @@ +modLoader = "javafml" +loaderVersion = "${loader_version}" +issueTrackerURL = "https://github.com/leafreynolds/Cosmere/issues" +license = "MIT" + +[[mods]] +modId = "allomancy" +version = "${version}" +displayName = "Cosmere: Allomancy" +displayURL = "https://www.curseforge.com/minecraft/mc-mods/cosmere" +authors = "Leafy" +credits = ''' + +Hawktrav - Various models and textures +Luke13234 - Who wrote much of the Ars Arcanum guide book entries. +Gerbagel - Many visual and performance improvements across iron/steel/zinc/brass/cadmium/bendalloy + +Special thanks go to: +Ridanisaurus - For many item and block textures. +''' +logoFile = "logo.png" +description = '''Allomancy module for Cosmere.''' + +[[dependencies.allomancy]] +modId = "cosmere" +mandatory = true +versionRange = "[${version}]" +ordering = "AFTER" +side = "BOTH" + +[[dependencies.allomancy]] +modId = "feruchemy" +mandatory = false +versionRange = "[${version}]" +ordering = "BEFORE" +side = "BOTH" + +[[dependencies.allomancy]] +modId = "hemalurgy" +mandatory = false +versionRange = "[${version}]" +ordering = "BEFORE" +side = "BOTH" \ No newline at end of file diff --git a/src/allomancy/resources/allomancy.mixins.json b/src/allomancy/resources/allomancy.mixins.json new file mode 100644 index 000000000..c53ffdf00 --- /dev/null +++ b/src/allomancy/resources/allomancy.mixins.json @@ -0,0 +1,15 @@ +{ + "required": true, + "minVersion": "0.8", + "package": "leaf.cosmere.allomancy.mixin", + "compatibilityLevel": "JAVA_17", + "refmap": "mixins.cosmere.allomancy.refmap.json", + "mixins": [ + ], + "client": [ + "EntityMixin" + ], + "injectors": { + "defaultRequire": 1 + } +} \ No newline at end of file diff --git a/src/allomancy/resources/assets/allomancy/atlases/icons.json b/src/allomancy/resources/assets/allomancy/atlases/icons.json new file mode 100644 index 000000000..ac714fc6d --- /dev/null +++ b/src/allomancy/resources/assets/allomancy/atlases/icons.json @@ -0,0 +1,9 @@ +{ + "sources": [ + { + "type": "directory", + "source": "icon/allomancy", + "prefix": "" + } + ] +} \ No newline at end of file diff --git a/src/allomancy/resources/assets/allomancy/lang/es_es.json b/src/allomancy/resources/assets/allomancy/lang/es_es.json new file mode 100644 index 000000000..afd668435 --- /dev/null +++ b/src/allomancy/resources/assets/allomancy/lang/es_es.json @@ -0,0 +1,143 @@ +{ + "advancements.allomancy.allomancy.aluminum.description": "Descripción de la prueba: Aluminio Alomántico", + "advancements.allomancy.allomancy.aluminum.title": "Aluminio Alomántico", + "advancements.allomancy.allomancy.atium.description": "Descripción de la prueba: Alomantic Atium", + "advancements.allomancy.allomancy.atium.title": "Atium Alomántico", + "advancements.allomancy.allomancy.bendalloy.description": "Descripción de la prueba: Alomántico Bendalloy", + "advancements.allomancy.allomancy.bendalloy.title": "Alomántico Bendalloy", + "advancements.allomancy.allomancy.brass.description": "Descripción de la prueba: Latón Alomántico", + "advancements.allomancy.allomancy.brass.title": "Latón Alomántico", + "advancements.allomancy.allomancy.bronze.description": "Descripción de la prueba: Bronce Alomántico", + "advancements.allomancy.allomancy.bronze.title": "Bronce Alomántico", + "advancements.allomancy.allomancy.cadmium.description": "Descripción de la prueba: Cádmio Alomántico", + "advancements.allomancy.allomancy.cadmium.title": "Cádmio Alomántico", + "advancements.allomancy.allomancy.chromium.description": "Descripción de la prueba: Cromo Alomántico", + "advancements.allomancy.allomancy.chromium.title": "Cromo Alomántico", + "advancements.allomancy.allomancy.copper.description": "Descripción de la prueba: Cobre Alomántico", + "advancements.allomancy.allomancy.copper.title": "Cobre Alomántico", + "advancements.allomancy.allomancy.description": "Descripción de la prueba: Alomancia", + "advancements.allomancy.allomancy.duralumin.description": "Descripción de la prueba: Duralumin Alomántico", + "advancements.allomancy.allomancy.duralumin.title": "Duralumin Alomántico", + "advancements.allomancy.allomancy.electrum.description": "Descripción de la prueba: Alomántico de Electrum", + "advancements.allomancy.allomancy.electrum.title": "Allomantic Electrum", + "advancements.allomancy.allomancy.gold.description": "Test description: Allomantic Gold", + "advancements.allomancy.allomancy.gold.title": "Allomantic Gold", + "advancements.allomancy.allomancy.iron.description": "Test description: Allomantic Iron", + "advancements.allomancy.allomancy.iron.title": "Allomantic Iron", + "advancements.allomancy.allomancy.nicrosil.description": "Test description: Allomantic Nicrosil", + "advancements.allomancy.allomancy.nicrosil.title": "Allomantic Nicrosil", + "advancements.allomancy.allomancy.pewter.description": "Test description: Allomantic Pewter", + "advancements.allomancy.allomancy.pewter.title": "Allomantic Pewter", + "advancements.allomancy.allomancy.steel.description": "Test description: Allomantic Steel", + "advancements.allomancy.allomancy.steel.title": "Allomantic Steel", + "advancements.allomancy.allomancy.tin.description": "Test description: Allomantic Tin", + "advancements.allomancy.allomancy.tin.title": "Allomantic Tin", + "advancements.allomancy.allomancy.title": "Allomancy", + "advancements.allomancy.allomancy.zinc.description": "Test description: Allomantic Zinc", + "advancements.allomancy.allomancy.zinc.title": "Allomantic Zinc", + "allomancy.aluminum_gnat": "Aluminum Gnat", + "allomancy.augur": "Augur", + "allomancy.coinshot": "Coinshot", + "allomancy.duralumin_gnat": "Duralumin Gnat", + "allomancy.leecher": "Leecher", + "allomancy.lurcher": "Lurcher", + "allomancy.nicroburst": "Nicroburst", + "allomancy.oracle": "Oracle", + "allomancy.pulser": "Pulser", + "allomancy.rioter": "Rioter", + "allomancy.seeker": "Seeker", + "allomancy.seer": "Seer", + "allomancy.slider": "Slider", + "allomancy.smoker": "Smoker", + "allomancy.soother": "Soother", + "allomancy.thug": "Thug", + "allomancy.tineye": "Tineye", + "config.jade.plugin_allomancy.bronze_seeker_tooltip": "Seeker Tooltip", + "death.attack.pewter_delayed_damage": "%1$s stopped burning pewter and succumbed to their wounds", + "death.attack.pewter_delayed_damage.player": "%1$s stopped burning pewter while fighting %2$s and succumbed to their wounds", + "effect.allomancy.allomancy_boost": "Allomancy Boost", + "effect.allomancy.allomantic_pewter": "Allomantic Pewter", + "effect.allomancy.copper_cloud": "Copper Cloud", + "entity.allomancy.coin_projectile": "Coin Projectile", + "entry.aluminum": "Aluminum - Aluminum Gnat", + "entry.atium": "Atium - Seer", + "entry.bendalloy": "Bendalloy - Slider", + "entry.brass": "Brass - Soother", + "entry.bronze": "Bronze - Seeker", + "entry.cadmium": "Cadmium - Pulser", + "entry.chromium": "Chromium - Leecher", + "entry.copper": "Copper - Smoker", + "entry.duralumin": "Duralumin - Duralumin Gnat", + "entry.electrum": "Electrum - Oracle", + "entry.gold": "Gold - Augur", + "entry.harmonium": "Harmonium - Misting Harmonium", + "entry.iron": "Iron - Lurcher", + "entry.lead": "Lead - Misting Lead", + "entry.lerasatium": "Lerasatium - Misting Lerasatium", + "entry.lerasium": "Lerasium - Mistborn", + "entry.malatium": "Malatium - Misting Malatium", + "entry.nickel": "Nickel - Misting Nickel", + "entry.nicrosil": "Nicrosil - Nicroburst", + "entry.pewter": "Pewter - Thug", + "entry.silver": "Silver - Misting Silver", + "entry.steel": "Steel - Coinshot", + "entry.tin": "Tin - Tineye", + "entry.zinc": "Zinc - Rioter", + "item.allomancy.coin_pouch": "Coin Pouch", + "item.allomancy.metal_vial": "Metal Vial", + "item.allomancy.mistcloak": "Mistcloak", + "key.cosmere.allomancy.pull": "Pull", + "key.cosmere.allomancy.push": "Push", + "manifestation.allomancy.aluminum": "Allomantic Aluminum", + "manifestation.allomancy.aluminum.description": "Users can burn aluminum", + "manifestation.allomancy.atium": "Allomantic Atium", + "manifestation.allomancy.atium.description": "Users can burn atium", + "manifestation.allomancy.bendalloy": "Allomantic Bendalloy", + "manifestation.allomancy.bendalloy.description": "Users can burn bendalloy", + "manifestation.allomancy.brass": "Allomantic Brass", + "manifestation.allomancy.brass.description": "Users can burn brass", + "manifestation.allomancy.bronze": "Allomantic Bronze", + "manifestation.allomancy.bronze.description": "Users can burn bronze", + "manifestation.allomancy.cadmium": "Allomantic Cadmium", + "manifestation.allomancy.cadmium.description": "Users can burn cadmium", + "manifestation.allomancy.chromium": "Allomantic Chromium", + "manifestation.allomancy.chromium.description": "Users can burn chromium", + "manifestation.allomancy.copper": "Allomantic Copper", + "manifestation.allomancy.copper.description": "Users can burn copper", + "manifestation.allomancy.duralumin": "Allomantic Duralumin", + "manifestation.allomancy.duralumin.description": "Users can burn duralumin", + "manifestation.allomancy.electrum": "Allomantic Electrum", + "manifestation.allomancy.electrum.description": "Users can burn electrum", + "manifestation.allomancy.gold": "Allomantic Gold", + "manifestation.allomancy.gold.description": "Users can burn gold", + "manifestation.allomancy.iron": "Allomantic Iron", + "manifestation.allomancy.iron.description": "Users can burn iron", + "manifestation.allomancy.nicrosil": "Allomantic Nicrosil", + "manifestation.allomancy.nicrosil.description": "Users can burn nicrosil", + "manifestation.allomancy.pewter": "Allomantic Pewter", + "manifestation.allomancy.pewter.description": "Users can burn pewter", + "manifestation.allomancy.steel": "Allomantic Steel", + "manifestation.allomancy.steel.description": "Users can burn steel", + "manifestation.allomancy.tin": "Allomantic Tin", + "manifestation.allomancy.tin.description": "Users can burn tin", + "manifestation.allomancy.zinc": "Allomantic Zinc", + "manifestation.allomancy.zinc.description": "Users can burn zinc", + "stat.minecraft.time_since_started_burning_aluminum": "Time since started burning aluminum", + "stat.minecraft.time_since_started_burning_atium": "Time since started burning atium", + "stat.minecraft.time_since_started_burning_bendalloy": "Time since started burning bendalloy", + "stat.minecraft.time_since_started_burning_brass": "Time since started burning brass", + "stat.minecraft.time_since_started_burning_bronze": "Time since started burning bronze", + "stat.minecraft.time_since_started_burning_cadmium": "Time since started burning cadmium", + "stat.minecraft.time_since_started_burning_chromium": "Time since started burning chromium", + "stat.minecraft.time_since_started_burning_copper": "Time since started burning copper", + "stat.minecraft.time_since_started_burning_duralumin": "Time since started burning duralumin", + "stat.minecraft.time_since_started_burning_electrum": "Time since started burning electrum", + "stat.minecraft.time_since_started_burning_gold": "Time since started burning gold", + "stat.minecraft.time_since_started_burning_iron": "Time since started burning iron", + "stat.minecraft.time_since_started_burning_nicrosil": "Time since started burning nicrosil", + "stat.minecraft.time_since_started_burning_pewter": "Time since started burning pewter", + "stat.minecraft.time_since_started_burning_steel": "Time since started burning steel", + "stat.minecraft.time_since_started_burning_tin": "Time since started burning tin", + "stat.minecraft.time_since_started_burning_zinc": "Time since started burning zinc", + "tooltip.cosmere.metals.contained": "Contained Metals:" +} \ No newline at end of file diff --git a/src/allomancy/resources/assets/allomancy/lang/sv_se.json b/src/allomancy/resources/assets/allomancy/lang/sv_se.json new file mode 100644 index 000000000..95c3a0649 --- /dev/null +++ b/src/allomancy/resources/assets/allomancy/lang/sv_se.json @@ -0,0 +1,143 @@ +{ + "advancements.allomancy.allomancy.aluminum.description": "Test description: Allomantic Aluminum", + "advancements.allomancy.allomancy.aluminum.title": "Allomantic Aluminum", + "advancements.allomancy.allomancy.atium.description": "Test description: Allomantic Atium", + "advancements.allomancy.allomancy.atium.title": "Allomantic Atium", + "advancements.allomancy.allomancy.bendalloy.description": "Test description: Allomantic Bendalloy", + "advancements.allomancy.allomancy.bendalloy.title": "Allomantic Bendalloy", + "advancements.allomancy.allomancy.brass.description": "Test description: Allomantic Brass", + "advancements.allomancy.allomancy.brass.title": "Allomantic Brass", + "advancements.allomancy.allomancy.bronze.description": "Test description: Allomantic Bronze", + "advancements.allomancy.allomancy.bronze.title": "Allomantic Bronze", + "advancements.allomancy.allomancy.cadmium.description": "Test description: Allomantic Cadmium", + "advancements.allomancy.allomancy.cadmium.title": "Allomantic Cadmium", + "advancements.allomancy.allomancy.chromium.description": "Test description: Allomantic Chromium", + "advancements.allomancy.allomancy.chromium.title": "Allomantic Chromium", + "advancements.allomancy.allomancy.copper.description": "Test description: Allomantic Copper", + "advancements.allomancy.allomancy.copper.title": "Allomantic Copper", + "advancements.allomancy.allomancy.description": "Test description: Allomancy", + "advancements.allomancy.allomancy.duralumin.description": "Test description: Allomantic Duralumin", + "advancements.allomancy.allomancy.duralumin.title": "Allomantic Duralumin", + "advancements.allomancy.allomancy.electrum.description": "Test description: Allomantic Electrum", + "advancements.allomancy.allomancy.electrum.title": "Allomantic Electrum", + "advancements.allomancy.allomancy.gold.description": "Test description: Allomantic Gold", + "advancements.allomancy.allomancy.gold.title": "Allomantic Gold", + "advancements.allomancy.allomancy.iron.description": "Test description: Allomantic Iron", + "advancements.allomancy.allomancy.iron.title": "Allomantic Iron", + "advancements.allomancy.allomancy.nicrosil.description": "Test description: Allomantic Nicrosil", + "advancements.allomancy.allomancy.nicrosil.title": "Allomantic Nicrosil", + "advancements.allomancy.allomancy.pewter.description": "Test description: Allomantic Pewter", + "advancements.allomancy.allomancy.pewter.title": "Allomantic Pewter", + "advancements.allomancy.allomancy.steel.description": "Test description: Allomantic Steel", + "advancements.allomancy.allomancy.steel.title": "Allomantic Steel", + "advancements.allomancy.allomancy.tin.description": "Test description: Allomantic Tin", + "advancements.allomancy.allomancy.tin.title": "Allomantic Tin", + "advancements.allomancy.allomancy.title": "Allomancy", + "advancements.allomancy.allomancy.zinc.description": "Test description: Allomantic Zinc", + "advancements.allomancy.allomancy.zinc.title": "Allomantic Zinc", + "allomancy.aluminum_gnat": "Aluminum Gnat", + "allomancy.augur": "Augur", + "allomancy.coinshot": "Coinshot", + "allomancy.duralumin_gnat": "Duralumin Gnat", + "allomancy.leecher": "Leecher", + "allomancy.lurcher": "Lurcher", + "allomancy.nicroburst": "Nicroburst", + "allomancy.oracle": "Oracle", + "allomancy.pulser": "Pulser", + "allomancy.rioter": "Rioter", + "allomancy.seeker": "Seeker", + "allomancy.seer": "Seer", + "allomancy.slider": "Slider", + "allomancy.smoker": "Smoker", + "allomancy.soother": "Soother", + "allomancy.thug": "Thug", + "allomancy.tineye": "Tineye", + "config.jade.plugin_allomancy.bronze_seeker_tooltip": "Seeker Tooltip", + "death.attack.pewter_delayed_damage": "%1$s stopped burning pewter and succumbed to their wounds", + "death.attack.pewter_delayed_damage.player": "%1$s stopped burning pewter while fighting %2$s and succumbed to their wounds", + "effect.allomancy.allomancy_boost": "Allomancy Boost", + "effect.allomancy.allomantic_pewter": "Allomantic Pewter", + "effect.allomancy.copper_cloud": "Copper Cloud", + "entity.allomancy.coin_projectile": "Coin Projectile", + "entry.aluminum": "Aluminum - Aluminum Gnat", + "entry.atium": "Atium - Seer", + "entry.bendalloy": "Bendalloy - Slider", + "entry.brass": "Brass - Soother", + "entry.bronze": "Bronze - Seeker", + "entry.cadmium": "Cadmium - Pulser", + "entry.chromium": "Chromium - Leecher", + "entry.copper": "Copper - Smoker", + "entry.duralumin": "Duralumin - Duralumin Gnat", + "entry.electrum": "Electrum - Oracle", + "entry.gold": "Gold - Augur", + "entry.harmonium": "Harmonium - Misting Harmonium", + "entry.iron": "Iron - Lurcher", + "entry.lead": "Lead - Misting Lead", + "entry.lerasatium": "Lerasatium - Misting Lerasatium", + "entry.lerasium": "Lerasium - Mistborn", + "entry.malatium": "Malatium - Misting Malatium", + "entry.nickel": "Nickel - Misting Nickel", + "entry.nicrosil": "Nicrosil - Nicroburst", + "entry.pewter": "Pewter - Thug", + "entry.silver": "Silver - Misting Silver", + "entry.steel": "Steel - Coinshot", + "entry.tin": "Tin - Tineye", + "entry.zinc": "Zinc - Rioter", + "item.allomancy.coin_pouch": "Coin Pouch", + "item.allomancy.metal_vial": "Metal Vial", + "item.allomancy.mistcloak": "Mistcloak", + "key.cosmere.allomancy.pull": "Pull", + "key.cosmere.allomancy.push": "Push", + "manifestation.allomancy.aluminum": "Allomantic Aluminum", + "manifestation.allomancy.aluminum.description": "Users can burn aluminum", + "manifestation.allomancy.atium": "Allomantic Atium", + "manifestation.allomancy.atium.description": "Users can burn atium", + "manifestation.allomancy.bendalloy": "Allomantic Bendalloy", + "manifestation.allomancy.bendalloy.description": "Users can burn bendalloy", + "manifestation.allomancy.brass": "Allomantic Brass", + "manifestation.allomancy.brass.description": "Users can burn brass", + "manifestation.allomancy.bronze": "Allomantic Bronze", + "manifestation.allomancy.bronze.description": "Users can burn bronze", + "manifestation.allomancy.cadmium": "Allomantic Cadmium", + "manifestation.allomancy.cadmium.description": "Users can burn cadmium", + "manifestation.allomancy.chromium": "Allomantic Chromium", + "manifestation.allomancy.chromium.description": "Users can burn chromium", + "manifestation.allomancy.copper": "Allomantic Copper", + "manifestation.allomancy.copper.description": "Users can burn copper", + "manifestation.allomancy.duralumin": "Allomantic Duralumin", + "manifestation.allomancy.duralumin.description": "Users can burn duralumin", + "manifestation.allomancy.electrum": "Allomantic Electrum", + "manifestation.allomancy.electrum.description": "Users can burn electrum", + "manifestation.allomancy.gold": "Allomantic Gold", + "manifestation.allomancy.gold.description": "Users can burn gold", + "manifestation.allomancy.iron": "Allomantic Iron", + "manifestation.allomancy.iron.description": "Users can burn iron", + "manifestation.allomancy.nicrosil": "Allomantic Nicrosil", + "manifestation.allomancy.nicrosil.description": "Users can burn nicrosil", + "manifestation.allomancy.pewter": "Allomantic Pewter", + "manifestation.allomancy.pewter.description": "Users can burn pewter", + "manifestation.allomancy.steel": "Allomantic Steel", + "manifestation.allomancy.steel.description": "Users can burn steel", + "manifestation.allomancy.tin": "Allomantic Tin", + "manifestation.allomancy.tin.description": "Users can burn tin", + "manifestation.allomancy.zinc": "Allomantic Zinc", + "manifestation.allomancy.zinc.description": "Users can burn zinc", + "stat.minecraft.time_since_started_burning_aluminum": "Time since started burning aluminum", + "stat.minecraft.time_since_started_burning_atium": "Time since started burning atium", + "stat.minecraft.time_since_started_burning_bendalloy": "Time since started burning bendalloy", + "stat.minecraft.time_since_started_burning_brass": "Time since started burning brass", + "stat.minecraft.time_since_started_burning_bronze": "Time since started burning bronze", + "stat.minecraft.time_since_started_burning_cadmium": "Time since started burning cadmium", + "stat.minecraft.time_since_started_burning_chromium": "Time since started burning chromium", + "stat.minecraft.time_since_started_burning_copper": "Time since started burning copper", + "stat.minecraft.time_since_started_burning_duralumin": "Time since started burning duralumin", + "stat.minecraft.time_since_started_burning_electrum": "Time since started burning electrum", + "stat.minecraft.time_since_started_burning_gold": "Time since started burning gold", + "stat.minecraft.time_since_started_burning_iron": "Time since started burning iron", + "stat.minecraft.time_since_started_burning_nicrosil": "Time since started burning nicrosil", + "stat.minecraft.time_since_started_burning_pewter": "Time since started burning pewter", + "stat.minecraft.time_since_started_burning_steel": "Time since started burning steel", + "stat.minecraft.time_since_started_burning_tin": "Time since started burning tin", + "stat.minecraft.time_since_started_burning_zinc": "Time since started burning zinc", + "tooltip.cosmere.metals.contained": "Contained Metals:" +} \ No newline at end of file diff --git a/src/allomancy/resources/assets/allomancy/textures/gui/coin_pouch.png b/src/allomancy/resources/assets/allomancy/textures/gui/coin_pouch.png new file mode 100644 index 000000000..8c22ca4d8 Binary files /dev/null and b/src/allomancy/resources/assets/allomancy/textures/gui/coin_pouch.png differ diff --git a/src/allomancy/resources/assets/allomancy/textures/gui/hud_background.png b/src/allomancy/resources/assets/allomancy/textures/gui/hud_background.png new file mode 100644 index 000000000..a2d364d7b Binary files /dev/null and b/src/allomancy/resources/assets/allomancy/textures/gui/hud_background.png differ diff --git a/src/allomancy/resources/assets/allomancy/textures/icon/allomancy.png b/src/allomancy/resources/assets/allomancy/textures/icon/allomancy.png new file mode 100644 index 000000000..d12083114 Binary files /dev/null and b/src/allomancy/resources/assets/allomancy/textures/icon/allomancy.png differ diff --git a/src/allomancy/resources/assets/allomancy/textures/icon/allomancy/aluminum.png b/src/allomancy/resources/assets/allomancy/textures/icon/allomancy/aluminum.png new file mode 100644 index 000000000..27423af09 Binary files /dev/null and b/src/allomancy/resources/assets/allomancy/textures/icon/allomancy/aluminum.png differ diff --git a/src/allomancy/resources/assets/allomancy/textures/icon/allomancy/atium.png b/src/allomancy/resources/assets/allomancy/textures/icon/allomancy/atium.png new file mode 100644 index 000000000..23f7a3323 Binary files /dev/null and b/src/allomancy/resources/assets/allomancy/textures/icon/allomancy/atium.png differ diff --git a/src/allomancy/resources/assets/allomancy/textures/icon/allomancy/bendalloy.png b/src/allomancy/resources/assets/allomancy/textures/icon/allomancy/bendalloy.png new file mode 100644 index 000000000..fda2e9d73 Binary files /dev/null and b/src/allomancy/resources/assets/allomancy/textures/icon/allomancy/bendalloy.png differ diff --git a/src/allomancy/resources/assets/allomancy/textures/icon/allomancy/brass.png b/src/allomancy/resources/assets/allomancy/textures/icon/allomancy/brass.png new file mode 100644 index 000000000..98352eeab Binary files /dev/null and b/src/allomancy/resources/assets/allomancy/textures/icon/allomancy/brass.png differ diff --git a/src/allomancy/resources/assets/allomancy/textures/icon/allomancy/bronze.png b/src/allomancy/resources/assets/allomancy/textures/icon/allomancy/bronze.png new file mode 100644 index 000000000..ded62cffb Binary files /dev/null and b/src/allomancy/resources/assets/allomancy/textures/icon/allomancy/bronze.png differ diff --git a/src/allomancy/resources/assets/allomancy/textures/icon/allomancy/cadmium.png b/src/allomancy/resources/assets/allomancy/textures/icon/allomancy/cadmium.png new file mode 100644 index 000000000..d6a7f30af Binary files /dev/null and b/src/allomancy/resources/assets/allomancy/textures/icon/allomancy/cadmium.png differ diff --git a/src/allomancy/resources/assets/allomancy/textures/icon/allomancy/chromium.png b/src/allomancy/resources/assets/allomancy/textures/icon/allomancy/chromium.png new file mode 100644 index 000000000..1dfba5295 Binary files /dev/null and b/src/allomancy/resources/assets/allomancy/textures/icon/allomancy/chromium.png differ diff --git a/src/allomancy/resources/assets/allomancy/textures/icon/allomancy/copper.png b/src/allomancy/resources/assets/allomancy/textures/icon/allomancy/copper.png new file mode 100644 index 000000000..d07ba7f2b Binary files /dev/null and b/src/allomancy/resources/assets/allomancy/textures/icon/allomancy/copper.png differ diff --git a/src/allomancy/resources/assets/allomancy/textures/icon/allomancy/duralumin.png b/src/allomancy/resources/assets/allomancy/textures/icon/allomancy/duralumin.png new file mode 100644 index 000000000..f5de288f6 Binary files /dev/null and b/src/allomancy/resources/assets/allomancy/textures/icon/allomancy/duralumin.png differ diff --git a/src/allomancy/resources/assets/allomancy/textures/icon/allomancy/electrum.png b/src/allomancy/resources/assets/allomancy/textures/icon/allomancy/electrum.png new file mode 100644 index 000000000..ec6eb4c8d Binary files /dev/null and b/src/allomancy/resources/assets/allomancy/textures/icon/allomancy/electrum.png differ diff --git a/src/allomancy/resources/assets/allomancy/textures/icon/allomancy/gold.png b/src/allomancy/resources/assets/allomancy/textures/icon/allomancy/gold.png new file mode 100644 index 000000000..e97cf7583 Binary files /dev/null and b/src/allomancy/resources/assets/allomancy/textures/icon/allomancy/gold.png differ diff --git a/src/allomancy/resources/assets/allomancy/textures/icon/allomancy/iron.png b/src/allomancy/resources/assets/allomancy/textures/icon/allomancy/iron.png new file mode 100644 index 000000000..a5f584a9d Binary files /dev/null and b/src/allomancy/resources/assets/allomancy/textures/icon/allomancy/iron.png differ diff --git a/src/allomancy/resources/assets/allomancy/textures/icon/allomancy/lerasium.png b/src/allomancy/resources/assets/allomancy/textures/icon/allomancy/lerasium.png new file mode 100644 index 000000000..218e1b398 Binary files /dev/null and b/src/allomancy/resources/assets/allomancy/textures/icon/allomancy/lerasium.png differ diff --git a/src/main/resources/assets/cosmere/textures/icon/allomancy/malatium.png b/src/allomancy/resources/assets/allomancy/textures/icon/allomancy/malatium.png similarity index 100% rename from src/main/resources/assets/cosmere/textures/icon/allomancy/malatium.png rename to src/allomancy/resources/assets/allomancy/textures/icon/allomancy/malatium.png diff --git a/src/allomancy/resources/assets/allomancy/textures/icon/allomancy/nicrosil.png b/src/allomancy/resources/assets/allomancy/textures/icon/allomancy/nicrosil.png new file mode 100644 index 000000000..e2825a5a6 Binary files /dev/null and b/src/allomancy/resources/assets/allomancy/textures/icon/allomancy/nicrosil.png differ diff --git a/src/allomancy/resources/assets/allomancy/textures/icon/allomancy/pewter.png b/src/allomancy/resources/assets/allomancy/textures/icon/allomancy/pewter.png new file mode 100644 index 000000000..e0cd4fd19 Binary files /dev/null and b/src/allomancy/resources/assets/allomancy/textures/icon/allomancy/pewter.png differ diff --git a/src/allomancy/resources/assets/allomancy/textures/icon/allomancy/steel.png b/src/allomancy/resources/assets/allomancy/textures/icon/allomancy/steel.png new file mode 100644 index 000000000..bf2364fb4 Binary files /dev/null and b/src/allomancy/resources/assets/allomancy/textures/icon/allomancy/steel.png differ diff --git a/src/allomancy/resources/assets/allomancy/textures/icon/allomancy/tin.png b/src/allomancy/resources/assets/allomancy/textures/icon/allomancy/tin.png new file mode 100644 index 000000000..f8f1bcd7c Binary files /dev/null and b/src/allomancy/resources/assets/allomancy/textures/icon/allomancy/tin.png differ diff --git a/src/allomancy/resources/assets/allomancy/textures/icon/allomancy/zinc.png b/src/allomancy/resources/assets/allomancy/textures/icon/allomancy/zinc.png new file mode 100644 index 000000000..0c9850da9 Binary files /dev/null and b/src/allomancy/resources/assets/allomancy/textures/icon/allomancy/zinc.png differ diff --git a/src/allomancy/resources/assets/allomancy/textures/item/coin_pouch.png b/src/allomancy/resources/assets/allomancy/textures/item/coin_pouch.png new file mode 100644 index 000000000..3c13f9f65 Binary files /dev/null and b/src/allomancy/resources/assets/allomancy/textures/item/coin_pouch.png differ diff --git a/src/allomancy/resources/assets/allomancy/textures/item/metal_vial.png b/src/allomancy/resources/assets/allomancy/textures/item/metal_vial.png new file mode 100644 index 000000000..798bf6f3c Binary files /dev/null and b/src/allomancy/resources/assets/allomancy/textures/item/metal_vial.png differ diff --git a/src/allomancy/resources/assets/allomancy/textures/item/metal_vial_shavings.png b/src/allomancy/resources/assets/allomancy/textures/item/metal_vial_shavings.png new file mode 100644 index 000000000..74fa34f85 Binary files /dev/null and b/src/allomancy/resources/assets/allomancy/textures/item/metal_vial_shavings.png differ diff --git a/src/allomancy/resources/assets/allomancy/textures/item/mistcloak.png b/src/allomancy/resources/assets/allomancy/textures/item/mistcloak.png new file mode 100644 index 000000000..8a88dacd3 Binary files /dev/null and b/src/allomancy/resources/assets/allomancy/textures/item/mistcloak.png differ diff --git a/src/allomancy/resources/assets/allomancy/textures/mob_effect/copper_cloud.png b/src/allomancy/resources/assets/allomancy/textures/mob_effect/copper_cloud.png new file mode 100644 index 000000000..282879cf3 Binary files /dev/null and b/src/allomancy/resources/assets/allomancy/textures/mob_effect/copper_cloud.png differ diff --git a/src/allomancy/resources/assets/allomancy/textures/models/armor/mistcloak.png b/src/allomancy/resources/assets/allomancy/textures/models/armor/mistcloak.png new file mode 100644 index 000000000..c40529f02 Binary files /dev/null and b/src/allomancy/resources/assets/allomancy/textures/models/armor/mistcloak.png differ diff --git a/src/allomancy/resources/pack.mcmeta b/src/allomancy/resources/pack.mcmeta new file mode 100644 index 000000000..5ebb41ae5 --- /dev/null +++ b/src/allomancy/resources/pack.mcmeta @@ -0,0 +1,6 @@ +{ + "pack": { + "description": "Resources used for Cosmere Allomancy", + "pack_format": 15 + } +} \ No newline at end of file diff --git a/src/aondor/java/leaf/cosmere/aondor/client/AonDorForgeClientEvents.java b/src/aondor/java/leaf/cosmere/aondor/client/AonDorForgeClientEvents.java new file mode 100644 index 000000000..2f691d299 --- /dev/null +++ b/src/aondor/java/leaf/cosmere/aondor/client/AonDorForgeClientEvents.java @@ -0,0 +1,15 @@ +/* + * File updated ~ 30 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.aondor.client; + +import leaf.cosmere.common.Cosmere; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.fml.common.Mod; + +@Mod.EventBusSubscriber(modid = Cosmere.MODID, value = Dist.CLIENT) +public class AonDorForgeClientEvents +{ + +} diff --git a/src/aondor/java/leaf/cosmere/aondor/client/AonDorKeybindings.java b/src/aondor/java/leaf/cosmere/aondor/client/AonDorKeybindings.java new file mode 100644 index 000000000..b3e1e78d3 --- /dev/null +++ b/src/aondor/java/leaf/cosmere/aondor/client/AonDorKeybindings.java @@ -0,0 +1,35 @@ +/* + * File updated ~ 30 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.aondor.client; + +import com.mojang.blaze3d.platform.InputConstants; +import leaf.cosmere.aondor.common.AonDor; +import leaf.cosmere.client.settings.KeyConflictContext; +import net.minecraft.client.KeyMapping; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.client.event.RegisterKeyMappingsEvent; +import net.minecraftforge.client.settings.KeyModifier; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.common.Mod.EventBusSubscriber.Bus; + +@Mod.EventBusSubscriber(value = Dist.CLIENT, modid = AonDor.MODID, bus = Bus.MOD) +public class AonDorKeybindings +{ + + //public static KeyMapping AONDOR_KEYBINDING; + + @SubscribeEvent + public static void register(RegisterKeyMappingsEvent event) + { + //event.register((AONDOR_KEYBINDING = new KeyMapping("name", GLFW.GLFW_KEY_G, KEYS_CATEGORY))); + + } + + public static KeyMapping createKeybinding(String description, KeyModifier keyModifier, int keyCode, String category) + { + return new KeyMapping(description, KeyConflictContext.DEFAULT, keyModifier, InputConstants.Type.KEYSYM.getOrCreate(keyCode), category); + } +} diff --git a/src/aondor/java/leaf/cosmere/aondor/client/render/AonDorLayerDefinitions.java b/src/aondor/java/leaf/cosmere/aondor/client/render/AonDorLayerDefinitions.java new file mode 100644 index 000000000..16623d764 --- /dev/null +++ b/src/aondor/java/leaf/cosmere/aondor/client/render/AonDorLayerDefinitions.java @@ -0,0 +1,13 @@ +/* + * File updated ~ 30 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.aondor.client.render; + +import leaf.cosmere.aondor.common.AonDor; +import net.minecraft.client.model.geom.ModelLayerLocation; + +public class AonDorLayerDefinitions +{ + public static final ModelLayerLocation AONDOR = new ModelLayerLocation(AonDor.rl("aondor_mob_model"), "aondor_mob_model"); +} diff --git a/src/aondor/java/leaf/cosmere/aondor/client/render/AonDorRenderers.java b/src/aondor/java/leaf/cosmere/aondor/client/render/AonDorRenderers.java new file mode 100644 index 000000000..b34ae950f --- /dev/null +++ b/src/aondor/java/leaf/cosmere/aondor/client/render/AonDorRenderers.java @@ -0,0 +1,16 @@ +/* + * File updated ~ 30 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.aondor.client.render; + +public class AonDorRenderers +{ + + public static void register() + { + //EntityRenderers.register(AonDorEntityTypes.AONDOR_ENTITY.get(), AonDorEntityRenderer::new); + } + + +} diff --git a/src/aondor/java/leaf/cosmere/aondor/common/AonDor.java b/src/aondor/java/leaf/cosmere/aondor/common/AonDor.java new file mode 100644 index 000000000..863522c1d --- /dev/null +++ b/src/aondor/java/leaf/cosmere/aondor/common/AonDor.java @@ -0,0 +1,122 @@ +/* + * File updated ~ 30 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.aondor.common; + +import leaf.cosmere.aondor.common.capabilities.AonDorSpiritwebSubmodule; +import leaf.cosmere.aondor.common.config.AonDorConfigs; +import leaf.cosmere.aondor.common.registries.*; +import leaf.cosmere.api.CosmereAPI; +import leaf.cosmere.api.IModModule; +import leaf.cosmere.api.ISpiritwebSubmodule; +import leaf.cosmere.api.Version; +import leaf.cosmere.common.Cosmere; +import leaf.cosmere.common.config.CosmereModConfig; +import net.minecraft.resources.ResourceLocation; +import net.minecraftforge.eventbus.api.IEventBus; +import net.minecraftforge.fml.ModLoadingContext; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.config.ModConfig; +import net.minecraftforge.fml.event.config.ModConfigEvent; +import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; +import net.minecraftforge.fml.event.lifecycle.InterModEnqueueEvent; +import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; + +@Mod(AonDor.MODID) +public class AonDor implements IModModule +{ + public static final String MODID = "aondor"; + + public static AonDor instance; + + public final Version versionNumber; + + public AonDor() + { + Cosmere.addModule(instance = this); + IEventBus modBus = FMLJavaModLoadingContext.get().getModEventBus(); + + AonDorConfigs.registerConfigs(ModLoadingContext.get()); + + modBus.addListener(this::commonSetup); + modBus.addListener(this::onConfigLoad); + modBus.addListener(this::onConfigReload); + modBus.addListener(this::imcQueue); + + AonDorAttributes.ATTRIBUTES.register(modBus); + AonDorBiomes.BIOMES.register(modBus); + AonDorBiomeModifiers.BIOME_MODIFIER_SERIALIZERS.register(modBus); + AonDorBlocks.BLOCKS.register(modBus); + AonDorEffects.EFFECTS.register(modBus); + AonDorFeatures.CONFIGURED_FEATURES.register(modBus); + AonDorFeatures.PLACED_FEATURES.register(modBus); + AonDorEntityTypes.ENTITY_TYPES.register(modBus); + AonDorItems.ITEMS.register(modBus); + AonDorManifestations.MANIFESTATIONS.register(modBus); + AonDorMenuTypes.MENU_TYPES.register(modBus); + AonDorRecipes.SPECIAL_RECIPES.register(modBus); + AonDorStats.STATS.register(modBus); + + versionNumber = new Version(ModLoadingContext.get().getActiveContainer()); + } + + public static ResourceLocation rl(String path) + { + return new ResourceLocation(AonDor.MODID, path); + } + + private void commonSetup(FMLCommonSetupEvent event) + { + CosmereAPI.logger.info("Cosmere: AonDor module Version {} initializing...", versionNumber); + + event.enqueueWork(() -> + { + //AllomancyEntityTypes.PrepareEntityAttributes(); + AonDorStats.initStatEntries(); + }); + + + //packetHandler.initialize(); + } + + private void imcQueue(InterModEnqueueEvent event) + { + } + + @Override + public Version getVersion() + { + return versionNumber; + } + + @Override + public String getName() + { + return "AonDor"; + } + + @Override + public ISpiritwebSubmodule makeSubmodule() + { + return new AonDorSpiritwebSubmodule(); + } + + private void onConfigLoad(ModConfigEvent configEvent) + { + ModConfig config = configEvent.getConfig(); + if (config.getModId().equals(MODID) && config instanceof CosmereModConfig cosmereModConfig) + { + cosmereModConfig.clearCache(); + } + } + + private void onConfigReload(ModConfigEvent.Reloading configEvent) + { + ModConfig config = configEvent.getConfig(); + if (config.getModId().equals(MODID) && config instanceof CosmereModConfig cosmereModConfig) + { + cosmereModConfig.clearCache(); + } + } +} \ No newline at end of file diff --git a/src/aondor/java/leaf/cosmere/aondor/common/capabilities/AonDorSpiritwebSubmodule.java b/src/aondor/java/leaf/cosmere/aondor/common/capabilities/AonDorSpiritwebSubmodule.java new file mode 100644 index 000000000..a0fa4caf0 --- /dev/null +++ b/src/aondor/java/leaf/cosmere/aondor/common/capabilities/AonDorSpiritwebSubmodule.java @@ -0,0 +1,70 @@ +/* + * File updated ~ 5 - 3 - 2025 ~ Leaf + */ + +package leaf.cosmere.aondor.common.capabilities; + +import leaf.cosmere.api.ISpiritwebSubmodule; +import leaf.cosmere.api.manifestation.Manifestation; +import leaf.cosmere.api.spiritweb.ISpiritweb; +import net.minecraft.world.entity.player.Player; +import net.minecraftforge.client.event.RenderLevelStageEvent; + +import java.util.List; + +public class AonDorSpiritwebSubmodule implements ISpiritwebSubmodule +{ + @Override + public void serialize(ISpiritweb spiritweb) + { + + } + + @Override + public void deserialize(ISpiritweb spiritweb) + { + + } + + @Override + public void tickClient(ISpiritweb spiritweb) + { + + } + + @Override + public void tickServer(ISpiritweb spiritweb) + { + + } + + @Override + public void collectMenuInfo(List m_infoText) + { + + } + + @Override + public void renderWorldEffects(ISpiritweb spiritweb, RenderLevelStageEvent event) + { + + } + + @Override + public void GiveStartingItem(Player player) + { + + } + + @Override + public void GiveStartingItem(Player player, Manifestation manifestation) + { + + } + + @Override + public void drainInvestiture(ISpiritweb data, double strength) + { + + } +} diff --git a/src/aondor/java/leaf/cosmere/aondor/common/commands/AonDorCommands.java b/src/aondor/java/leaf/cosmere/aondor/common/commands/AonDorCommands.java new file mode 100644 index 000000000..4c653921a --- /dev/null +++ b/src/aondor/java/leaf/cosmere/aondor/common/commands/AonDorCommands.java @@ -0,0 +1,23 @@ +/* + * File updated ~ 30 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.aondor.common.commands; + +import com.mojang.brigadier.CommandDispatcher; +import leaf.cosmere.aondor.common.commands.subcommands.AonDorCommand; +import leaf.cosmere.common.Cosmere; +import net.minecraft.commands.CommandSourceStack; +import net.minecraft.commands.Commands; + + +public class AonDorCommands +{ + + public static void register(CommandDispatcher dispatcher) + { + dispatcher.register(Commands.literal(Cosmere.MODID) + .then(AonDorCommand.register(dispatcher)) + ); + } +} diff --git a/src/aondor/java/leaf/cosmere/aondor/common/commands/subcommands/AonDorCommand.java b/src/aondor/java/leaf/cosmere/aondor/common/commands/subcommands/AonDorCommand.java new file mode 100644 index 000000000..920e4e070 --- /dev/null +++ b/src/aondor/java/leaf/cosmere/aondor/common/commands/subcommands/AonDorCommand.java @@ -0,0 +1,50 @@ +/* + * File updated ~ 30 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.aondor.common.commands.subcommands; + +import com.mojang.brigadier.CommandDispatcher; +import com.mojang.brigadier.builder.ArgumentBuilder; +import com.mojang.brigadier.context.CommandContext; +import com.mojang.brigadier.exceptions.CommandSyntaxException; +import leaf.cosmere.api.text.TextHelper; +import leaf.cosmere.common.commands.subcommands.ModCommand; +import net.minecraft.commands.CommandSourceStack; +import net.minecraft.commands.Commands; +import net.minecraft.commands.arguments.EntityArgument; +import net.minecraft.server.level.ServerPlayer; + +import java.util.Collection; + +public class AonDorCommand extends ModCommand +{ + public static ArgumentBuilder register(CommandDispatcher dispatcher) + { + return Commands.literal("aondorTest") + .requires(context -> context.hasPermission(2)) + .executes(AonDorCommand::aondorTest) + .then(Commands.argument("target", EntityArgument.players()) + .requires(context -> context.hasPermission(2)) + .executes(AonDorCommand::aondorTest)); + } + + private static int aondorTest(CommandContext context) throws CommandSyntaxException + { + Collection players = getPlayers(context, 3); + + for (ServerPlayer player : players) + { + player.displayClientMessage(TextHelper.createText("Test Received"), false); + } + + return SINGLE_SUCCESS; + } + + @Override + public int run(CommandContext context) throws CommandSyntaxException + { + return SINGLE_SUCCESS; + } + +} \ No newline at end of file diff --git a/src/aondor/java/leaf/cosmere/aondor/common/config/AonDorConfigs.java b/src/aondor/java/leaf/cosmere/aondor/common/config/AonDorConfigs.java new file mode 100644 index 000000000..a1453a7aa --- /dev/null +++ b/src/aondor/java/leaf/cosmere/aondor/common/config/AonDorConfigs.java @@ -0,0 +1,20 @@ +/* + * File updated ~ 30 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.aondor.common.config; + +import leaf.cosmere.common.config.CosmereConfigHelper; +import net.minecraftforge.fml.ModContainer; +import net.minecraftforge.fml.ModLoadingContext; + +public class AonDorConfigs +{ + public static final AonDorServerConfig SERVER = new AonDorServerConfig(); + + public static void registerConfigs(ModLoadingContext modLoadingContext) + { + ModContainer modContainer = modLoadingContext.getActiveContainer(); + CosmereConfigHelper.registerConfig(modContainer, SERVER); + } +} diff --git a/src/aondor/java/leaf/cosmere/aondor/common/config/AonDorServerConfig.java b/src/aondor/java/leaf/cosmere/aondor/common/config/AonDorServerConfig.java new file mode 100644 index 000000000..a1e6b0bcf --- /dev/null +++ b/src/aondor/java/leaf/cosmere/aondor/common/config/AonDorServerConfig.java @@ -0,0 +1,54 @@ +/* + * File updated ~ 30 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.aondor.common.config; + +import leaf.cosmere.common.config.ICosmereConfig; +import net.minecraftforge.common.ForgeConfigSpec; +import net.minecraftforge.fml.config.ModConfig.Type; + +public class AonDorServerConfig implements ICosmereConfig +{ + + private final ForgeConfigSpec configSpec; + + public final ForgeConfigSpec.IntValue AONDOR; + + + AonDorServerConfig() + { + ForgeConfigSpec.Builder builder = new ForgeConfigSpec.Builder(); + builder.comment("AonDor Config. This config is synced between server and client.").push("AonDor"); + + AONDOR = builder.comment("AonDor.").defineInRange("aondor", 0, 0, 100); + + + builder.pop(); + configSpec = builder.build(); + } + + @Override + public String getFileName() + { + return "AonDorServer"; + } + + @Override + public ForgeConfigSpec getConfigSpec() + { + return configSpec; + } + + @Override + public Type getConfigType() + { + return Type.SERVER; + } + + @Override + public void clearCache() + { + AONDOR.clearCache(); + } +} \ No newline at end of file diff --git a/src/aondor/java/leaf/cosmere/aondor/common/eventHandlers/AonDorCommonForgeEvents.java b/src/aondor/java/leaf/cosmere/aondor/common/eventHandlers/AonDorCommonForgeEvents.java new file mode 100644 index 000000000..54c8d93c0 --- /dev/null +++ b/src/aondor/java/leaf/cosmere/aondor/common/eventHandlers/AonDorCommonForgeEvents.java @@ -0,0 +1,61 @@ +/* + * File updated ~ 30 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.aondor.common.eventHandlers; + +import leaf.cosmere.aondor.common.AonDor; +import leaf.cosmere.aondor.common.commands.AonDorCommands; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.item.ItemStack; +import net.minecraftforge.event.RegisterCommandsEvent; +import net.minecraftforge.event.entity.player.PlayerInteractEvent; +import net.minecraftforge.event.server.ServerStartedEvent; +import net.minecraftforge.event.server.ServerStoppingEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; + +@Mod.EventBusSubscriber(modid = AonDor.MODID, bus = Mod.EventBusSubscriber.Bus.FORGE) +public class AonDorCommonForgeEvents +{ + + + @SubscribeEvent + public static void onEntityInteract(PlayerInteractEvent.EntityInteract event) + { + if (!(event.getTarget() instanceof LivingEntity target)) + { + return; + } + + ItemStack stack = event.getEntity().getMainHandItem(); + if (!stack.isEmpty()) + { + //if (stack.getItem() instanceof AonDorItem aondorItem) + //{ + // + //} + } + } + + + @SubscribeEvent + public static void registerCommands(RegisterCommandsEvent event) + { + AonDorCommands.register(event.getDispatcher()); + } + + + @SubscribeEvent + public static void onServerStartingEvent(ServerStartedEvent event) + { + + } + + @SubscribeEvent + public static void onServerStoppingEvent(ServerStoppingEvent event) + { + + } + +} diff --git a/src/aondor/java/leaf/cosmere/aondor/common/eventHandlers/AonDorCommonModEvents.java b/src/aondor/java/leaf/cosmere/aondor/common/eventHandlers/AonDorCommonModEvents.java new file mode 100644 index 000000000..e43c9e897 --- /dev/null +++ b/src/aondor/java/leaf/cosmere/aondor/common/eventHandlers/AonDorCommonModEvents.java @@ -0,0 +1,15 @@ +/* + * File updated ~ 30 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.aondor.common.eventHandlers; + +import leaf.cosmere.aondor.common.AonDor; +import net.minecraftforge.fml.common.Mod; + + +@Mod.EventBusSubscriber(modid = AonDor.MODID, bus = Mod.EventBusSubscriber.Bus.MOD) +public class AonDorCommonModEvents +{ + +} diff --git a/src/aondor/java/leaf/cosmere/aondor/common/registries/AonDorAttributes.java b/src/aondor/java/leaf/cosmere/aondor/common/registries/AonDorAttributes.java new file mode 100644 index 000000000..71e22926c --- /dev/null +++ b/src/aondor/java/leaf/cosmere/aondor/common/registries/AonDorAttributes.java @@ -0,0 +1,15 @@ +/* + * File updated ~ 30 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.aondor.common.registries; + +import leaf.cosmere.common.registration.impl.AttributeDeferredRegister; +import leaf.cosmere.aondor.common.AonDor; + +public class AonDorAttributes +{ + + public static final AttributeDeferredRegister ATTRIBUTES = new AttributeDeferredRegister(AonDor.MODID); + +} diff --git a/src/aondor/java/leaf/cosmere/aondor/common/registries/AonDorBiomeModifiers.java b/src/aondor/java/leaf/cosmere/aondor/common/registries/AonDorBiomeModifiers.java new file mode 100644 index 000000000..9b5840691 --- /dev/null +++ b/src/aondor/java/leaf/cosmere/aondor/common/registries/AonDorBiomeModifiers.java @@ -0,0 +1,15 @@ +/* + * File updated ~ 30 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.aondor.common.registries; + +import leaf.cosmere.common.registration.impl.BiomeModifierSerializerDeferredRegister; +import leaf.cosmere.aondor.common.AonDor; + +public class AonDorBiomeModifiers +{ + public static final BiomeModifierSerializerDeferredRegister BIOME_MODIFIER_SERIALIZERS = new BiomeModifierSerializerDeferredRegister(AonDor.MODID); + + +} diff --git a/src/aondor/java/leaf/cosmere/aondor/common/registries/AonDorBiomes.java b/src/aondor/java/leaf/cosmere/aondor/common/registries/AonDorBiomes.java new file mode 100644 index 000000000..70ee3d352 --- /dev/null +++ b/src/aondor/java/leaf/cosmere/aondor/common/registries/AonDorBiomes.java @@ -0,0 +1,15 @@ +/* + * File updated ~ 30 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.aondor.common.registries; + +import leaf.cosmere.aondor.common.AonDor; +import leaf.cosmere.common.registration.impl.BiomeDeferredRegister; + +public class AonDorBiomes +{ + public static final BiomeDeferredRegister BIOMES = new BiomeDeferredRegister(AonDor.MODID); + + //public static final BiomeRegistryObject AONDOR_BIOME = BIOMES.register("aondor_biome", OverworldBiomes::stonyPeaks); +} diff --git a/src/aondor/java/leaf/cosmere/aondor/common/registries/AonDorBlocks.java b/src/aondor/java/leaf/cosmere/aondor/common/registries/AonDorBlocks.java new file mode 100644 index 000000000..f3a868319 --- /dev/null +++ b/src/aondor/java/leaf/cosmere/aondor/common/registries/AonDorBlocks.java @@ -0,0 +1,17 @@ +/* + * File updated ~ 30 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.aondor.common.registries; + +import leaf.cosmere.aondor.common.AonDor; +import leaf.cosmere.common.registration.impl.BlockDeferredRegister; + +public class AonDorBlocks +{ + public static final BlockDeferredRegister BLOCKS = new BlockDeferredRegister(AonDor.MODID); + + //public static final BlockRegistryObject AONDOR_BLOCK = BLOCKS.register("aondor", BaseBlock::new); + + +} diff --git a/src/aondor/java/leaf/cosmere/aondor/common/registries/AonDorEffects.java b/src/aondor/java/leaf/cosmere/aondor/common/registries/AonDorEffects.java new file mode 100644 index 000000000..1e76379d1 --- /dev/null +++ b/src/aondor/java/leaf/cosmere/aondor/common/registries/AonDorEffects.java @@ -0,0 +1,16 @@ +/* + * File updated ~ 30 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.aondor.common.registries; + +import leaf.cosmere.common.registration.impl.CosmereEffectDeferredRegister; +import leaf.cosmere.aondor.common.AonDor; + +public class AonDorEffects +{ + + public static final CosmereEffectDeferredRegister EFFECTS = new CosmereEffectDeferredRegister(AonDor.MODID); + + +} diff --git a/src/aondor/java/leaf/cosmere/aondor/common/registries/AonDorEntityTypes.java b/src/aondor/java/leaf/cosmere/aondor/common/registries/AonDorEntityTypes.java new file mode 100644 index 000000000..8c2cb6aa8 --- /dev/null +++ b/src/aondor/java/leaf/cosmere/aondor/common/registries/AonDorEntityTypes.java @@ -0,0 +1,13 @@ +/* + * File updated ~ 30 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.aondor.common.registries; + +import leaf.cosmere.common.registration.impl.EntityTypeDeferredRegister; +import leaf.cosmere.aondor.common.AonDor; + +public class AonDorEntityTypes +{ + public static final EntityTypeDeferredRegister ENTITY_TYPES = new EntityTypeDeferredRegister(AonDor.MODID); +} diff --git a/src/aondor/java/leaf/cosmere/aondor/common/registries/AonDorFeatures.java b/src/aondor/java/leaf/cosmere/aondor/common/registries/AonDorFeatures.java new file mode 100644 index 000000000..6d91dd727 --- /dev/null +++ b/src/aondor/java/leaf/cosmere/aondor/common/registries/AonDorFeatures.java @@ -0,0 +1,17 @@ +/* + * File updated ~ 4 - 9 - 2024 ~ Leaf + */ + +package leaf.cosmere.aondor.common.registries; + +import leaf.cosmere.aondor.common.AonDor; +import leaf.cosmere.common.registration.impl.ConfiguredFeatureDeferredRegister; +import leaf.cosmere.common.registration.impl.PlacedFeatureDeferredRegister; + +public class AonDorFeatures +{ + public static final ConfiguredFeatureDeferredRegister CONFIGURED_FEATURES = new ConfiguredFeatureDeferredRegister(AonDor.MODID); + public static final PlacedFeatureDeferredRegister PLACED_FEATURES = new PlacedFeatureDeferredRegister(AonDor.MODID); + + +} diff --git a/src/aondor/java/leaf/cosmere/aondor/common/registries/AonDorItems.java b/src/aondor/java/leaf/cosmere/aondor/common/registries/AonDorItems.java new file mode 100644 index 000000000..2267c2f6f --- /dev/null +++ b/src/aondor/java/leaf/cosmere/aondor/common/registries/AonDorItems.java @@ -0,0 +1,14 @@ +/* + * File updated ~ 30 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.aondor.common.registries; + +import leaf.cosmere.common.registration.impl.ItemDeferredRegister; +import leaf.cosmere.aondor.common.AonDor; + +public class AonDorItems +{ + public static final ItemDeferredRegister ITEMS = new ItemDeferredRegister(AonDor.MODID); + +} diff --git a/src/aondor/java/leaf/cosmere/aondor/common/registries/AonDorManifestations.java b/src/aondor/java/leaf/cosmere/aondor/common/registries/AonDorManifestations.java new file mode 100644 index 000000000..e353c6afb --- /dev/null +++ b/src/aondor/java/leaf/cosmere/aondor/common/registries/AonDorManifestations.java @@ -0,0 +1,18 @@ +/* + * File updated ~ 30 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.aondor.common.registries; + +import leaf.cosmere.aondor.common.AonDor; +import leaf.cosmere.api.manifestation.Manifestation; +import leaf.cosmere.common.registration.impl.ManifestationDeferredRegister; +import leaf.cosmere.common.registration.impl.ManifestationRegistryObject; + +public class AonDorManifestations +{ + public static final ManifestationDeferredRegister MANIFESTATIONS = new ManifestationDeferredRegister(AonDor.MODID); + + public static final ManifestationRegistryObject AONDOR_MANIFESTATION = MANIFESTATIONS.register("aondor", Manifestation::new); + +} diff --git a/src/aondor/java/leaf/cosmere/aondor/common/registries/AonDorMenuTypes.java b/src/aondor/java/leaf/cosmere/aondor/common/registries/AonDorMenuTypes.java new file mode 100644 index 000000000..3fe02a3d1 --- /dev/null +++ b/src/aondor/java/leaf/cosmere/aondor/common/registries/AonDorMenuTypes.java @@ -0,0 +1,14 @@ +/* + * File updated ~ 30 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.aondor.common.registries; + +import leaf.cosmere.common.registration.impl.MenuTypeDeferredRegister; +import leaf.cosmere.aondor.common.AonDor; + +public class AonDorMenuTypes +{ + public static final MenuTypeDeferredRegister MENU_TYPES = new MenuTypeDeferredRegister(AonDor.MODID); + +} diff --git a/src/aondor/java/leaf/cosmere/aondor/common/registries/AonDorRecipes.java b/src/aondor/java/leaf/cosmere/aondor/common/registries/AonDorRecipes.java new file mode 100644 index 000000000..9d4d81572 --- /dev/null +++ b/src/aondor/java/leaf/cosmere/aondor/common/registries/AonDorRecipes.java @@ -0,0 +1,15 @@ +/* + * File updated ~ 30 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.aondor.common.registries; + +import leaf.cosmere.common.registration.impl.RecipeSerializerDeferredRegister; +import leaf.cosmere.aondor.common.AonDor; + +// for the non-json based recipes +public class AonDorRecipes +{ + public static final RecipeSerializerDeferredRegister SPECIAL_RECIPES = new RecipeSerializerDeferredRegister(AonDor.MODID); + +} diff --git a/src/aondor/java/leaf/cosmere/aondor/common/registries/AonDorStats.java b/src/aondor/java/leaf/cosmere/aondor/common/registries/AonDorStats.java new file mode 100644 index 000000000..d3f7ff44d --- /dev/null +++ b/src/aondor/java/leaf/cosmere/aondor/common/registries/AonDorStats.java @@ -0,0 +1,25 @@ +/* + * File updated ~ 30 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.aondor.common.registries; + +import leaf.cosmere.common.registration.impl.StatDeferredRegister; +import leaf.cosmere.common.registration.impl.StatRegistryObject; +import leaf.cosmere.aondor.common.AonDor; +import net.minecraft.stats.StatFormatter; +import net.minecraft.stats.Stats; + +public class AonDorStats +{ + public static final StatDeferredRegister STATS = new StatDeferredRegister(AonDor.MODID); + + + public static void initStatEntries() + { + for (StatRegistryObject value : STATS.getAllItems()) + { + Stats.CUSTOM.get(value.get(), StatFormatter.TIME); + } + } +} diff --git a/src/aondor/java/leaf/cosmere/aondor/mixin/EntityMixin.java b/src/aondor/java/leaf/cosmere/aondor/mixin/EntityMixin.java new file mode 100644 index 000000000..bae5827bc --- /dev/null +++ b/src/aondor/java/leaf/cosmere/aondor/mixin/EntityMixin.java @@ -0,0 +1,15 @@ +/* + * File updated ~ 30 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.aondor.mixin; + +import net.minecraft.world.entity.Entity; +import org.spongepowered.asm.mixin.Mixin; + +@Mixin(Entity.class) +public class EntityMixin +{ + +} + diff --git a/src/aondor/resources/META-INF/mods.toml b/src/aondor/resources/META-INF/mods.toml new file mode 100644 index 000000000..e4fe8228f --- /dev/null +++ b/src/aondor/resources/META-INF/mods.toml @@ -0,0 +1,23 @@ +modLoader = "javafml" +loaderVersion = "${loader_version}" +issueTrackerURL = "https://github.com/leafreynolds/Cosmere/issues" +license = "MIT" + +[[mods]] +modId = "aondor" +version = "${version}" +displayName = "Cosmere: AonDor" +displayURL = "https://www.curseforge.com/minecraft/mc-mods/cosmere" +authors = "Leaf" +credits = ''' + +''' +logoFile = "logo.png" +description = '''AonDor module for Cosmere.''' + +[[dependencies.aondor]] +modId = "cosmere" +mandatory = true +versionRange = "[${version}]" +ordering = "AFTER" +side = "BOTH" diff --git a/src/aondor/resources/aondor.mixins.json b/src/aondor/resources/aondor.mixins.json new file mode 100644 index 000000000..5d57638d9 --- /dev/null +++ b/src/aondor/resources/aondor.mixins.json @@ -0,0 +1,15 @@ +{ + "required": true, + "minVersion": "0.8", + "package": "leaf.cosmere.aondor.mixin", + "compatibilityLevel": "JAVA_17", + "refmap": "mixins.cosmere.aondor.refmap.json", + "mixins": [ + "EntityMixin" + ], + "client": [ + ], + "injectors": { + "defaultRequire": 1 + } +} \ No newline at end of file diff --git a/src/aondor/resources/assets/aondor/atlases/icons.json b/src/aondor/resources/assets/aondor/atlases/icons.json new file mode 100644 index 000000000..387dbb121 --- /dev/null +++ b/src/aondor/resources/assets/aondor/atlases/icons.json @@ -0,0 +1,9 @@ +{ + "sources": [ + { + "type": "directory", + "source": "icon/aondor", + "prefix": "" + } + ] +} \ No newline at end of file diff --git a/src/aondor/resources/assets/aondor/textures/icon/aondor/placeholder.txt b/src/aondor/resources/assets/aondor/textures/icon/aondor/placeholder.txt new file mode 100644 index 000000000..05704751d --- /dev/null +++ b/src/aondor/resources/assets/aondor/textures/icon/aondor/placeholder.txt @@ -0,0 +1 @@ +Icons go here later :) \ No newline at end of file diff --git a/src/aondor/resources/pack.mcmeta b/src/aondor/resources/pack.mcmeta new file mode 100644 index 000000000..7b4dc53a1 --- /dev/null +++ b/src/aondor/resources/pack.mcmeta @@ -0,0 +1,6 @@ +{ + "pack": { + "description": "Resources used for Cosmere AonDor", + "pack_format": 15 + } +} \ No newline at end of file diff --git a/src/api/java/leaf/cosmere/api/Activator.java b/src/api/java/leaf/cosmere/api/Activator.java new file mode 100644 index 000000000..2f11ab3d0 --- /dev/null +++ b/src/api/java/leaf/cosmere/api/Activator.java @@ -0,0 +1,44 @@ +package leaf.cosmere.api; + +import leaf.cosmere.api.manifestation.Manifestation; +import net.minecraft.client.KeyMapping; + +public class Activator +{ + + public KeyMapping keyMapping; + public Manifestation manifest; + public String name; + public String category; + + public Activator(KeyMapping key, Manifestation manifestation) + { + keyMapping = key; + manifest = manifestation; + + } + + public void setCategory(String category) + { + this.category = category; + name = manifest.getName(); + + } + + public KeyMapping getKeyMapping() + { + return keyMapping; + } + public Manifestation getManifestation() {return manifest;} + + public String getCategory() {return category;} + + public String getKeyName() + { + return "key.cosmere." + getCategory() + "." + name; + } + public String translator() + { + return name + "_" + category; + } +} diff --git a/src/api/java/leaf/cosmere/api/Constants.java b/src/api/java/leaf/cosmere/api/Constants.java new file mode 100644 index 000000000..ee2c15368 --- /dev/null +++ b/src/api/java/leaf/cosmere/api/Constants.java @@ -0,0 +1,149 @@ +/* + * File updated ~ 4 - 2 - 2025 ~ Leaf + * File updated ~ 2 - 5 - 2025 ~ SoaringEaqle + */ + +package leaf.cosmere.api; + +import net.minecraft.ChatFormatting; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.MutableComponent; +import net.minecraft.resources.ResourceLocation; + +import java.util.UUID; + +public class Constants +{ + public static class Resources + { + + public static final ResourceLocation JEI = new ResourceLocation(CosmereAPI.COSMERE_MODID, "jei"); + public static final ResourceLocation JEI_FERUCHEMY = new ResourceLocation("feruchemy", "jei"); + public static final ResourceLocation JEI_HEMALURGY = new ResourceLocation("hemalurgy", "jei"); + public static final ResourceLocation SPIRITWEB_CAP = new ResourceLocation(CosmereAPI.COSMERE_MODID, "spiritweb"); + public static final ResourceLocation ROSHAR_CAP = new ResourceLocation("surgebinding", "roshar"); + public static final ResourceLocation SCADRIAL_CAP = new ResourceLocation("allomancy", "scadrial"); + public static final ResourceLocation HEMALURGY_WORLD_CAP = new ResourceLocation("hemalurgy", "world_cap"); + public static final ResourceLocation INV_CONTAINER_CAP = new ResourceLocation(CosmereAPI.COSMERE_MODID, "i_container"); + } + + public static class Suffix + { + public static final MutableComponent INVESTITURE_UNITS = Component.literal(" IU").withStyle(ChatFormatting.RESET); + public static final MutableComponent STORMLIGHT_UNITS = Component.literal(" SU").withStyle(ChatFormatting.RESET); + } + + public static class NBT + { + + public static final String CHARGE_LEVEL = "charge_level"; + + public static final String ATTUNED_PLAYER = "attuned_player"; + public static final String ATTUNED_PLAYER_NAME = "attuned_player_name"; + + public static final UUID UNKEYED_UUID = UUID.fromString("422fc419-1e39-4eac-ac01-6fc98512c122"); + public static final UUID FERU_NICROSIL_UUID = UUID.fromString("5199248a-4a6e-4891-bc2a-1f3c0fcb5191"); + public static final UUID ALUMINUM_UUID = UUID.fromString("8da98b83-be5e-4b34-b51e-5fdd79700893"); + } + + //todo rename this when I remember the word + public static class RegNameStubs + { + public static final String BLOCK = "_block"; + public static final String RAW = "raw_"; + public static final String ORE = "_ore"; + public static final String DEEPSLATE = "deepslate_"; + public static final String BLEND = "_blend"; + + public static final String METALMIND = "_metalmind"; + + public static final String BRACELET = "_bracelet"; + public static final String RING = "_ring"; + public static final String NECKLACE = "_necklace"; + public static final String INGOT = "_ingot"; + public static final String NUGGET = "_nugget"; + public static final String SPIKE = "_spike"; + + + public static final String CHIP = "_chip"; + public static final String MARK = "_mark"; + public static final String BROAM = "_broam"; + } + + + public static class Gui + { + public static final int NONE = 0; + public static final int GUIDE = 1; + } + + public static class Strings + { + public static final String KEYS_CATEGORY = "keys.cosmere.main"; + public static final String KEYS_ACTIVATE_CATEGORY = "keys.cosmere.activators"; + + //keybind builder + public static final String KEY_ALLOMANCY = "key.cosmere.allomancy."; + public static final String KEY_FERUCHEMY = "key.cosmere.feruchemy."; + public static final String KEY_STORMLIGHT = "key.cosmere.stormlight."; + + public static final String KEY_ACTIVATE = "key.cosmere.powers.activate"; + public static final String KEY_SAVE_ACTIVATOR = "key.cosmere.powers.save"; + + public static final String KEY_MANIFESTATION_MODE_INCREASE = "key.cosmere.powers.mode.increase"; + public static final String KEY_MANIFESTATION_MODE_DECREASE = "key.cosmere.powers.mode.decrease"; + + public static final String KEY_MANIFESTATION_NEXT = "key.cosmere.powers.next"; + public static final String KEY_MANIFESTATION_PREVIOUS = "key.cosmere.powers.previous"; + + public static final String KEY_MANIFESTATION_USE_ACTIVE = "key.cosmere.powers.use"; + + public static final String KEY_DEACTIVATE_ALL_POWERS = "key.cosmere.powers.toggle"; + public static final String KEY_MANIFESTATION_MENU = "key.cosmere.powers.menu"; + + public static final String KEY_ALLOMANCY_STEEL_PUSH = "key.cosmere.allomancy.push"; + public static final String KEY_ALLOMANCY_IRON_PULL = "key.cosmere.allomancy.pull"; + public static final String KEY_ALLOMANCY_SOOTHE = "key.cosmere.allomancy.soothe"; + public static final String KEY_ALLOMANCY_RIOT = "key.cosmere.allomancy.riot"; + + public static final String KEY_SHARDBLADE = "key.cosmere.stormlight.shardblade"; + public static final String KEY_REQUEST_STORMLIGHT = "key.cosmere.stormlight.request_stormlight"; + public static final String KEY_DISPATCH_STORMLIGHT = "key.cosmere.stormlight.dispatch_stormlight"; + public static final String TOOLTIP_ITEM_INFO = "tooltip.item.info."; + public static final String CONTAINED_POWERS_FOUND = "tooltip.cosmere.power.found"; + + public static final String POWER_INVALID = "argument.cosmere.power.invalid"; + public static final String POWER_SET_SUCCESS = "command.cosmere.power.set.success"; + public static final String POWER_CLEAR_SUCCESS = "command.cosmere.power.clear.success"; + public static final String POWER_SET_FAIL = "command.cosmere.power.set.fail"; + public static final String POWER_MODE_SET = "power.cosmere.mode.set"; + public static final String POWER_ACTIVE = "power.cosmere.toggle.active"; + public static final String POWER_INACTIVE = "power.cosmere.toggle.inactive"; + + + public static final String POWERS_FOUND = "command.cosmere.power.found"; + public static final String POWER_STRENGTH = "command.cosmere.power.strength"; + public static final String SET_EYE_HEIGHT_SUCCESS = "command.cosmere.eyeheight.set.success"; + public static final String EFFECTS_FOUND = "command.cosmere.effects.found"; + public static final String EFFECTS_CLEAR = "command.cosmere.effects.clear"; + + + public static final String CONTAINED_METALS = "tooltip.cosmere.metals.contained"; + + + public static final String PATCHOULI_NOT_INSTALLED = "tooltip.cosmere.patchouli.not_installed"; + } + + public static class Translations + { + public static final MutableComponent TOOLTIP_HOLD_SHIFT = Component.translatable(Strings.TOOLTIP_ITEM_INFO + "shift"); + public static final MutableComponent TOOLTIP_CONTROL = Component.translatable(Strings.TOOLTIP_ITEM_INFO + "control"); + public static final MutableComponent TOOLTIP_SHIFT_AND_CONTROL = Component.translatable(Strings.TOOLTIP_ITEM_INFO + "shift_control"); + + + public static final MutableComponent POWER_ACTIVE = Component.translatable(Strings.POWER_ACTIVE); + public static final MutableComponent POWER_INACTIVE = Component.translatable(Strings.POWER_INACTIVE); + + } + +} diff --git a/src/api/java/leaf/cosmere/api/CosmereAPI.java b/src/api/java/leaf/cosmere/api/CosmereAPI.java new file mode 100644 index 000000000..31c679876 --- /dev/null +++ b/src/api/java/leaf/cosmere/api/CosmereAPI.java @@ -0,0 +1,76 @@ +/* + * File updated ~ 8 - 10 - 2023 ~ Leaf + */ + +package leaf.cosmere.api; + +import com.mojang.logging.LogUtils; +import leaf.cosmere.api.cosmereEffect.CosmereEffect; +import leaf.cosmere.api.manifestation.Manifestation; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraftforge.common.util.Lazy; +import net.minecraftforge.registries.IForgeRegistry; +import net.minecraftforge.registries.RegistryManager; +import org.jetbrains.annotations.NotNull; +import org.slf4j.Logger; + +public class CosmereAPI +{ + private CosmereAPI() + { + } + + public static final String COSMERE_MODID = "cosmere"; + + public static final Logger logger = LogUtils.getLogger(); + + @NotNull + private static Lazy>> registryKey(@SuppressWarnings("unused") @NotNull Class compileTimeTypeValidator, @NotNull String path) + { + return Lazy.of(() -> ResourceKey.createRegistryKey(new ResourceLocation(COSMERE_MODID, path))); + } + + @NotNull + private static final Lazy>> MANIFESTATION_REGISTRY_NAME = registryKey(Manifestation.class, "manifestation"); + private static IForgeRegistry MANIFESTATION_REGISTRY; + + @NotNull + public static ResourceKey> manifestationRegistryName() + { + return MANIFESTATION_REGISTRY_NAME.get(); + } + + + @NotNull + public static IForgeRegistry manifestationRegistry() + { + if (MANIFESTATION_REGISTRY == null) + { + MANIFESTATION_REGISTRY = RegistryManager.ACTIVE.getRegistry(manifestationRegistryName()); + } + return MANIFESTATION_REGISTRY; + } + + @NotNull + private static final Lazy>> COSMERE_EFFECT_REGISTRY_NAME = registryKey(CosmereEffect.class, "cosmere_effect"); + private static IForgeRegistry COSMERE_EFFECT_REGISTRY; + + @NotNull + public static ResourceKey> cosmereEffectRegistryName() + { + return COSMERE_EFFECT_REGISTRY_NAME.get(); + } + + + @NotNull + public static IForgeRegistry cosmereEffectRegistry() + { + if (COSMERE_EFFECT_REGISTRY == null) + { + COSMERE_EFFECT_REGISTRY = RegistryManager.ACTIVE.getRegistry(cosmereEffectRegistryName()); + } + return COSMERE_EFFECT_REGISTRY; + } +} \ No newline at end of file diff --git a/src/api/java/leaf/cosmere/api/CosmereTags.java b/src/api/java/leaf/cosmere/api/CosmereTags.java new file mode 100644 index 000000000..f49278a9d --- /dev/null +++ b/src/api/java/leaf/cosmere/api/CosmereTags.java @@ -0,0 +1,212 @@ +/* + * File updated ~ 20 - 11 - 2024 ~ Leaf + */ + +package leaf.cosmere.api; + +import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.BlockTags; +import net.minecraft.tags.ItemTags; +import net.minecraft.tags.TagKey; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.item.Item; +import net.minecraft.world.level.biome.Biome; +import net.minecraft.world.level.block.Block; +import net.minecraftforge.registries.ForgeRegistries; +import top.theillusivec4.curios.api.CuriosApi; + +import java.util.Arrays; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +public class CosmereTags +{ + + public static class Items + { + public static final TagKey CURIO_ANY = makeItem(CuriosApi.MODID, "curio"); + public static final TagKey CURIO_BACK = makeItem(CuriosApi.MODID, "back"); + public static final TagKey CURIO_BELT = makeItem(CuriosApi.MODID, "belt"); + public static final TagKey CURIO_BODY = makeItem(CuriosApi.MODID, "body"); + public static final TagKey CURIO_BRACELET = makeItem(CuriosApi.MODID, "bracelet"); + public static final TagKey CURIO_CHARM = makeItem(CuriosApi.MODID, "charm"); + public static final TagKey CURIO_HEAD = makeItem(CuriosApi.MODID, "head"); + public static final TagKey CURIO_HANDS = makeItem(CuriosApi.MODID, "hands"); + public static final TagKey CURIO_NECKLACE = makeItem(CuriosApi.MODID, "necklace"); + public static final TagKey CURIO_RING = makeItem(CuriosApi.MODID, "ring"); + public static final TagKey CURIO_LEGS = makeItem(CuriosApi.MODID, "legs"); + public static final TagKey CURIO_FEET = makeItem(CuriosApi.MODID, "feet"); + + + public static final TagKey CURIO_EYES = makeItem(CuriosApi.MODID, "eyes"); + public static final TagKey CURIO_LINCHPIN = makeItem(CuriosApi.MODID, "linchpin"); + public static final TagKey CURIO_PHYSICAL = makeItem(CuriosApi.MODID, "physical"); + public static final TagKey CURIO_MENTAL = makeItem(CuriosApi.MODID, "mental"); + public static final TagKey CURIO_TEMPORAL = makeItem(CuriosApi.MODID, "temporal"); + public static final TagKey CURIO_SPIRITUAL = makeItem(CuriosApi.MODID, "spiritual"); + + public static final TagKey CONTAINS_METAL = makeItem("cosmere", "contains_metal"); + + public static final TagKey METAL_SPIKE = makeItem("cosmere", "spike"); + + public static final Map> METAL_RAW_TAGS = + Arrays.stream(EnumUtils.METAL_TYPES) + .collect(Collectors.toMap( + Function.identity(), + type -> forgeItemTag("raw_materials/" + type.getName()))); + + public static final Map> METAL_ORE_TAGS = + Arrays.stream(EnumUtils.METAL_TYPES) + .collect(Collectors.toMap( + Function.identity(), + type -> forgeItemTag("ores/" + type.getName()))); + + public static final Map> METAL_DUST_TAGS = + Arrays.stream(EnumUtils.METAL_TYPES) + .collect(Collectors.toMap( + Function.identity(), + type -> forgeItemTag("dusts/" + type.getName()))); + + public static final Map> METAL_NUGGET_TAGS = + Arrays.stream(EnumUtils.METAL_TYPES) + .collect(Collectors.toMap( + Function.identity(), + type -> forgeItemTag("nuggets/" + type.getName()))); + + public static final Map>> GOD_METAL_ALLOY_NUGGET_TAGS = + Arrays.stream(new Metals.MetalType[]{Metals.MetalType.LERASIUM, Metals.MetalType.LERASATIUM}) + .collect(Collectors.toMap( + Function.identity(), // key: god metal + god -> Arrays.stream(EnumUtils.METAL_TYPES) + .filter(base -> !base.isGodMetal()) + .collect(Collectors.toMap( + Function.identity(), // key: base metal + base -> forgeItemTag("nuggets/" + god.getName() + "_" + base.getName() + "_alloy") + )) + )); + + public static final Map> METAL_INGOT_TAGS = + Arrays.stream(EnumUtils.METAL_TYPES) + .collect(Collectors.toMap( + Function.identity(), + type -> forgeItemTag("ingots/" + type.getName()))); + + public static final Map> METAL_BLOCK_ITEM_TAGS = + Arrays.stream(EnumUtils.METAL_TYPES) + .collect(Collectors.toMap( + Function.identity(), + type -> forgeItemTag("storage_blocks/" + type.getName()))); + + public static final Map> GEM_BLOCK_ITEM_TAGS = + Arrays.stream(EnumUtils.GEMSTONE_TYPES) + .collect(Collectors.toMap( + Function.identity(), + type -> forgeItemTag("storage_blocks/" + type.getName()))); + + + public static final Map> GEM_TAGS = + Arrays.stream(EnumUtils.GEMSTONE_TYPES) + .collect(Collectors.toMap( + Function.identity(), + type -> forgeItemTag("gems/" + type.getName()))); + + + public static TagKey makeItem(String domain, String path) + { + return ItemTags.create(new ResourceLocation(domain, path)); + } + + public static TagKey makeItem(ResourceLocation resourceLocation) + { + return ItemTags.create(resourceLocation); + } + + private static TagKey forgeItemTag(String name) + { + final ResourceLocation forgeTagToMake = new ResourceLocation("forge", name); + return makeItem(forgeTagToMake); + } + } + + public static class Blocks + { + + public static final TagKey DRAGON_PROOF = makeBlock("minecraft", "dragon_immune"); + public static final TagKey WITHER_PROOF = makeBlock("minecraft", "wither_immune"); + + public static final TagKey CONTAINS_METAL = makeBlock("cosmere", "contains_metal"); + + public static final Map> METAL_ORE_BLOCK_TAGS = + Arrays.stream(EnumUtils.METAL_TYPES) + //.filter(Metals.MetalType::hasOre) + .collect(Collectors.toMap( + Function.identity(), + type -> forgeTag("ores/" + type.getName()))); + + public static final Map> METAL_BLOCK_TAGS = + Arrays.stream(EnumUtils.METAL_TYPES) + .collect(Collectors.toMap( + Function.identity(), + type -> forgeTag("storage_blocks/" + type.getName()))); + + public static final Map> GEM_ORE_BLOCK_TAGS = + Arrays.stream(EnumUtils.GEMSTONE_TYPES) + .collect(Collectors.toMap( + Function.identity(), + type -> forgeTag("ores/" + type.getName()))); + + public static final Map> GEM_BLOCK_TAGS = + Arrays.stream(EnumUtils.GEMSTONE_TYPES) + .collect(Collectors.toMap( + Function.identity(), + type -> forgeTag("storage_blocks/" + type.getName()))); + + public static TagKey makeBlock(String domain, String path) + { + return BlockTags.create(new ResourceLocation(domain, path)); + } + + public static TagKey makeBlock(ResourceLocation resourceLocation) + { + return BlockTags.create(resourceLocation); + } + + private static TagKey forgeTag(String name) + { + final ResourceLocation forgeTagToMake = new ResourceLocation("forge", name); + return makeBlock(forgeTagToMake); + } + + } + + + public static class Biomes + { + //todo move to surgebinding module + public static final TagKey IS_ROSHAR = create(new ResourceLocation("surgebinding", "is_roshar")); + public static final TagKey IS_SHADESMAR = create(new ResourceLocation(CosmereAPI.COSMERE_MODID, "is_shadesmar")); + + public static final TagKey SPAWN_ORES = create(new ResourceLocation(CosmereAPI.COSMERE_MODID, "spawn_ores")); + + private static TagKey create(ResourceLocation resourceLocation) + { + return TagKey.create(ForgeRegistries.BIOMES.getRegistryKey(), resourceLocation); + } + } + + public static class EntityTypes + { + public static final TagKey> CONTAINS_METAL = create("cosmere", "contains_metal"); + + private static TagKey> create(String namespace, String path) + { + return create(new ResourceLocation(namespace, path)); + } + + private static TagKey> create(ResourceLocation resourceLocation) + { + return TagKey.create(ForgeRegistries.ENTITY_TYPES.getRegistryKey(), resourceLocation); + } + } +} diff --git a/src/api/java/leaf/cosmere/api/EnumUtils.java b/src/api/java/leaf/cosmere/api/EnumUtils.java new file mode 100644 index 000000000..46a7a239f --- /dev/null +++ b/src/api/java/leaf/cosmere/api/EnumUtils.java @@ -0,0 +1,27 @@ +/* + * File updated ~ 15 - 9 - 2025 ~ Soar + */ + +package leaf.cosmere.api; + +import leaf.cosmere.api.investiture.InvHelpers; +import net.minecraft.core.Direction; + +//constant static enum arrays for enums in api that get used often. Save memory allocation where possible +public class EnumUtils +{ + //cosmere + public static final Metals.MetalType[] METAL_TYPES = Metals.MetalType.values(); + + //roshar + public static final Roshar.RadiantOrder[] RADIANT_ORDERS = Roshar.RadiantOrder.values(); + public static final Roshar.Gemstone[] GEMSTONE_TYPES = Roshar.Gemstone.values(); + public static final Roshar.GemSize[] GEM_SIZES = Roshar.GemSize.values(); + public static final Roshar.Surges[] SURGES = Roshar.Surges.values(); + + //investiture + public static final InvHelpers.Shard[] SHARDS = InvHelpers.Shard.values(); + + //yes I know it's a vanilla enum + public static final Direction[] DIRECTIONS = Direction.values(); +} diff --git a/src/api/java/leaf/cosmere/api/IGrantsBaseAttributes.java b/src/api/java/leaf/cosmere/api/IGrantsBaseAttributes.java new file mode 100644 index 000000000..76e4396f2 --- /dev/null +++ b/src/api/java/leaf/cosmere/api/IGrantsBaseAttributes.java @@ -0,0 +1,14 @@ +package leaf.cosmere.api; + +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.ai.attributes.Attribute; +import net.minecraft.world.item.ItemStack; + +import java.util.ArrayList; + +public interface IGrantsBaseAttributes +{ + ArrayList determineBaseAttributes(ItemStack itemStack); + + void grantBaseAttributes(LivingEntity livingEntity, ArrayList attributes, int strength); +} diff --git a/src/api/java/leaf/cosmere/api/IHasColour.java b/src/api/java/leaf/cosmere/api/IHasColour.java new file mode 100644 index 000000000..7018c406c --- /dev/null +++ b/src/api/java/leaf/cosmere/api/IHasColour.java @@ -0,0 +1,17 @@ +/* + * File updated ~ 8 - 10 - 2022 ~ Leaf + */ + +package leaf.cosmere.api; + +import java.awt.*; + +public interface IHasColour +{ + Color getColour(); + + default int getColourValue() + { + return getColour().getRGB(); + } +} diff --git a/src/api/java/leaf/cosmere/api/IHasGemType.java b/src/api/java/leaf/cosmere/api/IHasGemType.java new file mode 100644 index 000000000..a28e6866a --- /dev/null +++ b/src/api/java/leaf/cosmere/api/IHasGemType.java @@ -0,0 +1,18 @@ +/* + * File updated ~ 8 - 10 - 2022 ~ Leaf + */ + +package leaf.cosmere.api; + +import java.awt.*; + +public interface IHasGemType extends IHasColour +{ + Roshar.Gemstone getGemType(); + + default Color getColour() + { + return getGemType().getColor(); + } + +} diff --git a/src/api/java/leaf/cosmere/api/IHasMetalType.java b/src/api/java/leaf/cosmere/api/IHasMetalType.java new file mode 100644 index 000000000..e4d1413dd --- /dev/null +++ b/src/api/java/leaf/cosmere/api/IHasMetalType.java @@ -0,0 +1,18 @@ +/* + * File updated ~ 8 - 10 - 2022 ~ Leaf + */ + +package leaf.cosmere.api; + +import java.awt.*; + +public interface IHasMetalType extends IHasColour +{ + Metals.MetalType getMetalType(); + + default Color getColour() + { + return getMetalType().getColor(); + } + +} diff --git a/src/api/java/leaf/cosmere/api/IHasSize.java b/src/api/java/leaf/cosmere/api/IHasSize.java new file mode 100644 index 000000000..e34cfe58c --- /dev/null +++ b/src/api/java/leaf/cosmere/api/IHasSize.java @@ -0,0 +1,27 @@ +package leaf.cosmere.api; + +import net.minecraft.nbt.CompoundTag; +import net.minecraft.world.item.ItemStack; + +public interface IHasSize +{ + int getMaxSize(); + + int getMinSize(); + + default Integer readMetalAlloySizeNbtData(ItemStack itemStack) + { + CompoundTag nbt = itemStack.getOrCreateTag(); + if(nbt.contains("nuggetSize")) return nbt.getInt("nuggetSize"); + writeMetalAlloySizeNbtData(itemStack, getMaxSize()); + return getMaxSize(); + } + + default boolean writeMetalAlloySizeNbtData(ItemStack itemStack, int size) + { + CompoundTag nbt = itemStack.getOrCreateTag(); + if (size > getMaxSize() || size < getMinSize()) return false; + nbt.putInt("nuggetSize", size); + return true; + } +} diff --git a/src/api/java/leaf/cosmere/api/IModModule.java b/src/api/java/leaf/cosmere/api/IModModule.java new file mode 100644 index 000000000..33e96f5fa --- /dev/null +++ b/src/api/java/leaf/cosmere/api/IModModule.java @@ -0,0 +1,17 @@ +/* + * File updated ~ 8 - 10 - 2022 ~ Leaf + */ + +package leaf.cosmere.api; + +import javax.annotation.Nullable; + +public interface IModModule +{ + Version getVersion(); + + String getName(); + + @Nullable + ISpiritwebSubmodule makeSubmodule(); +} \ No newline at end of file diff --git a/src/api/java/leaf/cosmere/api/ISpiritwebSubmodule.java b/src/api/java/leaf/cosmere/api/ISpiritwebSubmodule.java new file mode 100644 index 000000000..8230c69d5 --- /dev/null +++ b/src/api/java/leaf/cosmere/api/ISpiritwebSubmodule.java @@ -0,0 +1,59 @@ +/* + * File updated ~ 5 - 3 - 2025 ~ Leaf + */ + +package leaf.cosmere.api; + +import leaf.cosmere.api.manifestation.Manifestation; +import leaf.cosmere.api.spiritweb.ISpiritweb; +import net.minecraft.world.entity.player.Player; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.client.event.RenderLevelStageEvent; + +import java.util.List; + +public interface ISpiritwebSubmodule +{ + default void deserialize(ISpiritweb spiritweb) + { + } + + default void serialize(ISpiritweb spiritweb) + { + } + + default void tickClient(ISpiritweb spiritweb) + { + } + + default void tickServer(ISpiritweb spiritweb) + { + } + + @OnlyIn(Dist.CLIENT) + default void renderWorldEffects(ISpiritweb spiritweb, RenderLevelStageEvent event) + { + } + + default void collectMenuInfo(List m_infoText) + { + } + + //give a random starting item from this power set + default void GiveStartingItem(Player player) + { + } + + //give a specific starting item based on the manifestation passed in + default void GiveStartingItem(Player player, Manifestation manifestation) + { + } + + default void resetOnDeath(ISpiritweb spiritweb) + { + + } + + void drainInvestiture(ISpiritweb data, double strength); +} diff --git a/src/api/java/leaf/cosmere/api/InterpolatedValue.java b/src/api/java/leaf/cosmere/api/InterpolatedValue.java new file mode 100644 index 000000000..aee4c58e0 --- /dev/null +++ b/src/api/java/leaf/cosmere/api/InterpolatedValue.java @@ -0,0 +1,89 @@ +/* + * File updated ~ 5 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.api; + + +import net.minecraft.util.Mth; + +public class InterpolatedValue +{ + public float defaultValue; + + private float interpolationSpeed; + private float previousValue; + private float currentValue; + + public InterpolatedValue(float defaultValue, float interpolationSpeed) + { + this.defaultValue = defaultValue; + this.currentValue = defaultValue; + this.interpolationSpeed = interpolationSpeed; + } + + public InterpolatedValue(float defaultValue) + { + this(defaultValue, 0.05f); + } + + public void set(float value) + { + this.previousValue = this.currentValue; + this.currentValue = value; + } + + public void set(double value) + { + this.previousValue = this.currentValue; + this.currentValue = (float) value; + } + + public void setDefaultValue(float value) + { + this.defaultValue = value; + } + + public void setDefaultValue(double value) + { + this.defaultValue = (float) value; + } + + public void setInterpolationSpeed(double value) + { + this.interpolationSpeed = (float) value; + } + + public void interpolate(float value, float interpolationSpeed) + { + this.set(Float.isNaN(value) ? Mth.lerp(interpolationSpeed, currentValue, defaultValue) + : Mth.lerp(interpolationSpeed, currentValue, value)); + } + + public void interpolate(double value, float interpolationSpeed) + { + this.set(Double.isNaN(value) ? Mth.lerp(interpolationSpeed, currentValue, defaultValue) + : Mth.lerp(interpolationSpeed, currentValue, value)); + } + + public void interpolate(float value) + { + this.interpolate(value, this.interpolationSpeed); + } + + public void interpolate(double value) + { + this.interpolate(value, this.interpolationSpeed); + } + + public void interpolate() + { + this.set(Mth.lerp(interpolationSpeed, currentValue, defaultValue)); + } + + public float get(float partialTick) + { + final float lerp = Mth.lerp(partialTick, previousValue, currentValue); + return (lerp < 0.0001f ? 0 : lerp); + } +} diff --git a/src/api/java/leaf/cosmere/api/Manifestations.java b/src/api/java/leaf/cosmere/api/Manifestations.java new file mode 100644 index 000000000..7da2de545 --- /dev/null +++ b/src/api/java/leaf/cosmere/api/Manifestations.java @@ -0,0 +1,173 @@ +/* + * File updated ~ 19 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.api; + +import leaf.cosmere.api.manifestation.Manifestation; +import net.minecraft.resources.ResourceLocation; + +import java.util.Arrays; +import java.util.Locale; +import java.util.Optional; + +public class Manifestations +{ + public final static int ALLOMANCY_ID = 1; + public final static int FERUCHEMY_ID = 2; + public final static int HEMALURGY_ID = 7;//yes I know. Didn't add this till way later and now I'm too afraid to change it... todo: change it + public final static int SURGEBINDING_ID = 3; + public final static int AONDOR_ID = 4; + public final static int AWAKENING_ID = 5; + public final static int SANDMASTERY_ID = 6; + public final static int AVIAR_ID = 8; + + public enum ManifestationTypes + { + NONE(0), + //Allomancy Section + ALLOMANCY(ALLOMANCY_ID), + + //Feruchemy Section + FERUCHEMY(FERUCHEMY_ID), + + //Hemalurgy Section + HEMALURGY(HEMALURGY_ID), + + //Knight Radiant Section + SURGEBINDING(SURGEBINDING_ID), + + // AonDor + AON_DOR(AONDOR_ID), + + // AonDor + AWAKENING(AWAKENING_ID), + + // Taldain's Sand Mastery + SANDMASTERY(SANDMASTERY_ID), + + // Aviar + AVIAR(AVIAR_ID); + + + ManifestationTypes(int id) + { + this.id = id; + } + + final int id; + + public int getID() + { + return id; + } + + + public static Optional valueOf(int value) + { + return Arrays.stream(values()) + .filter(powerTypes -> powerTypes.id == value) + .findFirst(); + } + + + public String getName() + { + return this.name().toLowerCase(Locale.ROOT); + } + + public Manifestation getManifestation(int powerID) + { + switch (this) + { + case ALLOMANCY: + case FERUCHEMY: + Optional metalType = Metals.MetalType.valueOf(powerID); + if (metalType.isPresent()) + { + return CosmereAPI.manifestationRegistry().getValue(new ResourceLocation(this.getName(), metalType.get().getName())); + } + break; + case SURGEBINDING: + Optional value = Roshar.Surges.valueOf(powerID); + if (value.isPresent()) + { + return CosmereAPI.manifestationRegistry().getValue(new ResourceLocation(this.getName(), value.get().getName())); + } + break; + case AON_DOR: + break; + case AWAKENING: + break; + case SANDMASTERY: + Optional masteryStyle = Taldain.Mastery.valueOf(powerID); + if (masteryStyle.isPresent()) + { + return CosmereAPI.manifestationRegistry().getValue(new ResourceLocation(this.getName(), masteryStyle.get().getName())); + } + break; + } + return CosmereAPI.manifestationRegistry().getValue(new ResourceLocation("cosmere", "none")); + } + } + public static class ManifestArrayBuilder + { + public static Manifestation[] getAll() + { + return (Manifestation[]) CosmereAPI.manifestationRegistry().getValues().toArray(); + } + + public static Manifestation[] getAllType(ManifestationTypes manifestationTypes) + { + int values; + switch (manifestationTypes) + { + case ALLOMANCY: + case FERUCHEMY: + { + values = 16; + break; + } + case SURGEBINDING: + { + values = 10; + break; + } + case SANDMASTERY: + { + values = 5; + break; + } + default: + { + values = 1; + break; + } + + } + Manifestation[] manifests = new Manifestation[values]; + for(int i = 0; i < values; i++) + { + manifests[i] = manifestationTypes.getManifestation(i); + } + return manifests; + } + + public static Manifestation[] getAllMetal(Metals.MetalType metal) + { + + + + int id = metal.getID(); + return new Manifestation[]{ManifestationTypes.ALLOMANCY.getManifestation(id), + ManifestationTypes.FERUCHEMY.getManifestation(id) + }; + } + + public static Manifestation[] getArray(Manifestation manifest) + { + return new Manifestation[]{manifest}; + } + } + +} diff --git a/src/api/java/leaf/cosmere/api/Metals.java b/src/api/java/leaf/cosmere/api/Metals.java new file mode 100644 index 000000000..4fda7e3ba --- /dev/null +++ b/src/api/java/leaf/cosmere/api/Metals.java @@ -0,0 +1,1086 @@ +/* + * File updated ~ 20 - 11 - 2024 ~ Leaf + */ + +package leaf.cosmere.api; + +import leaf.cosmere.api.helpers.TimeHelper; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.tags.TagKey; +import net.minecraft.util.Mth; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.ai.attributes.Attribute; +import net.minecraft.world.entity.ai.attributes.AttributeInstance; +import net.minecraft.world.entity.ai.attributes.AttributeMap; +import net.minecraft.world.entity.ai.attributes.Attributes; +import net.minecraft.world.entity.animal.Cat; +import net.minecraft.world.entity.animal.CatVariant; +import net.minecraft.world.entity.animal.Pufferfish; +import net.minecraft.world.entity.animal.Rabbit; +import net.minecraft.world.entity.boss.enderdragon.EnderDragon; +import net.minecraft.world.entity.boss.wither.WitherBoss; +import net.minecraft.world.entity.monster.Phantom; +import net.minecraft.world.entity.monster.WitherSkeleton; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.*; +import net.minecraft.world.item.crafting.Ingredient; +import net.minecraftforge.registries.ForgeRegistries; +import org.jetbrains.annotations.NotNull; + +import java.awt.*; +import java.util.Arrays; +import java.util.Collection; +import java.util.Locale; +import java.util.Optional; +import java.util.stream.Collectors; + +/* + * All hope abandon ye who enter here. + * ,, + * W () + * |->< v + * | )(\/ + * You've found the monolith metal script! + * It ain't pretty, but I also don't really care :D -Leaf + */ + +public class Metals +{ + + public enum MetalType implements Tier, ArmorMaterial + { + //Physical/Physical + IRON(0, 0, 0, 0, 0, 0),//ignore tier data + STEEL(1, 3, 1024, 8f, 4f, 8),//alloy of iron and carbon (coal/charcoal) 1/4 ? + TIN(2, 0, 159, 6f, 1.2f, 10), + PEWTER(3, 2, 202, 5f, 3f, 10),//alloy of tin and lead 4/1 + + //Mental/Cognitive + ZINC(4, 2, 276, 16f, 0.5f, 12), + BRASS(5, 2, 142, 10f, 0f, 16),//alloy of zinc and copper 50/50 ? + COPPER(6, 2, 131, 9f, 2.0f, 32), + BRONZE(7, 2, 400, 8f, 1.8f, 16),//alloy of copper and tin? 3/1 ? + + //Enhancement/spiritual + ALUMINUM(8, 0, 50, 8f, 1f, -100), + DURALUMIN(9, 2, 1500, 6f, 5.8f, 28),//alloy of aluminum and copper 4/1 + CHROMIUM(10, 2, 1500, 5f, 2.8f, 10), + NICROSIL(11, 2, 1250, 3f, 3.8f, 28),//alloy of chromium and nickel 1/3 + + //temporal/hybrid + CADMIUM(12, 2, 32, 12f, 1f, 20), + BENDALLOY(13, 2, 60, 6f, 2f, 16),//alloy of 70% lead, 20% tin, and 10% cadmium by mass + GOLD(14, 0, 0, 0, 0, 0),//ignore tier data + ELECTRUM(15, 2, 45, 17f, 0f, 20),//alloy of gold and silver 1/1 + + //god metals + ATIUM(16, 3, 3000, 14f, 6f, 1), + LERASIUM(17, 3, 6000, 12f, 4.8f, 0), + HARMONIUM(18, 3, 1, 99f, 16f, 0), + + //god metal alloys + MALATIUM(19, 3, 300, 10f, 2.8f, 3),//atium and gold? + LERASATIUM(20, 3, 5000, 12f, 4.3f, 0),// atium and lerasium + + + //non-allomantic metals + + NICKEL(21, 2, 350, 6f, 1.8f, 14), + LEAD(22, 2, 16, 6f, 12f, 2), + SILVER(23, 2, 32, 12f, 0f, 15); + + private final int id; + + private final int level; + private final int uses; + private final float speed; + private final float damage; + private final int enchantmentValue; + + MetalType(int id, int level, int uses, float speed, float damage, int enchantmentValue) + { + this.id = id; + this.level = level; + this.uses = uses; + this.speed = speed; + this.damage = damage; + this.enchantmentValue = enchantmentValue; + } + + public static Optional valueOf(int value) + { + return Arrays.stream(values()) + .filter(metalType -> metalType.id == value) + .findFirst(); + } + + public int getID() + { + return id; + } + + public String getName() + { + return name().toLowerCase(Locale.ROOT); + } + + public Rarity getRarity() + { + switch (this) + { + case ATIUM: + case MALATIUM: + return Rarity.RARE; + case LERASIUM: + case LERASATIUM: + case HARMONIUM: + return Rarity.EPIC; + default: + return Rarity.COMMON; + } + } + + public boolean isGodMetal() + { + switch (this) + { + case ATIUM: + case LERASIUM: + case LERASATIUM: + case HARMONIUM: + return true; + default: + return false; + } + } + + public boolean hasAssociatedManifestation() + { + switch (this) + { + //case ATIUM: + case MALATIUM: + case LERASIUM: //these are mistborn, but its handled by giving access to all other metals + case LERASATIUM: //these are feruchemists, but its handled by giving access to all other metals + case HARMONIUM: //different way of melding preservation and ruin. No idea what it does + case NICKEL: + case SILVER: + case LEAD: + return false; + default: + return true; + } + } + + public boolean hasHemalurgicEffect() + { + switch (this) + { + case MALATIUM: + case HARMONIUM: + case NICKEL: + case LEAD: + case SILVER: + return false; + default: + return true; + } + } + + public boolean isPhysicalSpike() + { + switch (this) + { + case IRON: + case STEEL: + case TIN: + case PEWTER: + case ATIUM: + case LERASIUM: + case LERASATIUM: + return true; + default: + return false; + } + } + + public boolean isMentalSpike() + { + switch (this) + { + case ZINC: + case BRASS: + case COPPER: + case BRONZE: + case ATIUM: + case LERASIUM: + case LERASATIUM: + return true; + default: + return false; + } + } + + public boolean isSpiritualSpike() + { + switch (this) + { + case CHROMIUM: + case NICROSIL: + case ALUMINUM: + case DURALUMIN: + case ATIUM: + case LERASIUM: + case LERASATIUM: + return true; + default: + return false; + } + } + + public boolean isTemporalSpike() + { + switch (this) + { + case CADMIUM: + case BENDALLOY: + case GOLD: + case ELECTRUM: + case ATIUM: + case LERASIUM: + case LERASATIUM: + return true; + default: + return false; + } + } + + public boolean hasFeruchemicalEffect() + { + switch (this) + { + case LERASIUM://no idea what lerasium would do + case MALATIUM: + case LERASATIUM: + case HARMONIUM: + case NICKEL: + case SILVER: + case LEAD: + return false; + default: + return true; + } + } + + public boolean hasOre() + { + switch (this) + { + //case IRON: // covered by minecraft + case TIN: + //case COPPER: // covered by minecraft + case ZINC: + case ALUMINUM: + case CHROMIUM: + //case GOLD: // covered by minecraft + case CADMIUM: + case NICKEL: + case SILVER: + case LEAD: + return true; + default: + return false; + } + } + + public boolean isAlloy() + { + switch (this) + { + case STEEL: + case PEWTER: + case BRASS: + case BRONZE: + case DURALUMIN: + case NICROSIL: + case BENDALLOY: + case ELECTRUM: + return true; + default: + return false; + } + } + + //Used for metals that exist in the base minecraft + //note: copper can't be here, too many exceptions + public boolean hasMaterialItem() + { + switch (this) + { + case IRON: + case GOLD: + //case COPPER: + return false; + default: + return true; + } + } + + public TagKey getMetalRawTag() + { + return CosmereTags.Items.METAL_RAW_TAGS.get(this); + } + + public TagKey getMetalBlendTag() + { + return CosmereTags.Items.METAL_DUST_TAGS.get(this); + } + + public TagKey getMetalIngotTag() + { + return CosmereTags.Items.METAL_INGOT_TAGS.get(this); + } + + public TagKey getMetalNuggetTag() + { + return CosmereTags.Items.METAL_NUGGET_TAGS.get(this); + } + + public TagKey getGodMetalAlloyNuggetTag(MetalType alloyedMetalType) + { + return CosmereTags.Items.GOD_METAL_ALLOY_NUGGET_TAGS.get(this).get(alloyedMetalType); + } + + + public Color getColor() + { + switch (this) + { + default: + case IRON: + return MetalColor.IRON; + case STEEL: + return MetalColor.STEEL; + case TIN: + return MetalColor.TIN; + case PEWTER: + return MetalColor.PEWTER; + case ALUMINUM: + return MetalColor.ALUMINUM; + case DURALUMIN: + return MetalColor.DURALUMIN; + case CHROMIUM: + return MetalColor.CHROMIUM; + case NICROSIL: + return MetalColor.NICROSIL; + case ZINC: + return MetalColor.ZINC; + case BRASS: + return MetalColor.BRASS; + case COPPER: + return MetalColor.COPPER; + case BRONZE: + return MetalColor.BRONZE; + case GOLD: + return MetalColor.GOLD; + case ELECTRUM: + return MetalColor.ELECTRUM; + case CADMIUM: + return MetalColor.CADMIUM; + case BENDALLOY: + return MetalColor.BENDALLOY; + case LERASIUM: + return MetalColor.LERASIUM; + case ATIUM: + return MetalColor.ATIUM; + case MALATIUM: + return MetalColor.MALATIUM; + case LERASATIUM: + return MetalColor.LERASATIUM; + case HARMONIUM: + return MetalColor.HARMONIUM; + case NICKEL: + return MetalColor.NICKEL; + case LEAD: + return MetalColor.LEAD; + case SILVER: + return MetalColor.SILVER; + } + } + + public int getColorValue() + { + return getColor().getRGB(); + } + + public String getFerringName() + { + switch (this) + { + case IRON: + return FerringNames.IRON; + case STEEL: + return FerringNames.STEEL; + case TIN: + return FerringNames.TIN; + case PEWTER: + return FerringNames.PEWTER; + case ALUMINUM: + return FerringNames.ALUMINUM; + case DURALUMIN: + return FerringNames.DURALUMIN; + case CHROMIUM: + return FerringNames.CHROMIUM; + case NICROSIL: + return FerringNames.NICROSIL; + case ZINC: + return FerringNames.ZINC; + case BRASS: + return FerringNames.BRASS; + case COPPER: + return FerringNames.COPPER; + case BRONZE: + return FerringNames.BRONZE; + case GOLD: + return FerringNames.GOLD; + case ELECTRUM: + return FerringNames.ELECTRUM; + case CADMIUM: + return FerringNames.CADMIUM; + case BENDALLOY: + return FerringNames.BENDALLOY; + case ATIUM: + return FerringNames.ATIUM; + case LERASATIUM: + return FerringNames.ALL; + default: + case LERASIUM: + case MALATIUM: + return "ferring_" + this.getName(); + } + } + + public boolean isPushMetal() + { + switch (this) + { + case STEEL: + case PEWTER: + case BRASS: + case BRONZE: + case DURALUMIN: + case NICROSIL: + case BENDALLOY: + case ELECTRUM: + return true; + default: + return false; + } + } + + public boolean isPullMetal() + { + switch (this) + { + case IRON: + case TIN: + case ALUMINUM: + case CHROMIUM: + case ZINC: + case COPPER: + case GOLD: + case CADMIUM: + return true; + default: + return false; + } + } + + public String getMistingName() + { + switch (this) + { + case IRON: + return MistingNames.IRON; + + case STEEL: + return MistingNames.STEEL; + + case TIN: + return MistingNames.TIN; + + case PEWTER: + return MistingNames.PEWTER; + + case ALUMINUM: + return MistingNames.ALUMINUM; + + case DURALUMIN: + return MistingNames.DURALUMIN; + + case CHROMIUM: + return MistingNames.CHROMIUM; + + case NICROSIL: + return MistingNames.NICROSIL; + + case ZINC: + return MistingNames.ZINC; + + case BRASS: + return MistingNames.BRASS; + + case COPPER: + return MistingNames.COPPER; + + case BRONZE: + return MistingNames.BRONZE; + + case GOLD: + return MistingNames.GOLD; + + case ELECTRUM: + return MistingNames.ELECTRUM; + + case CADMIUM: + return MistingNames.CADMIUM; + + case BENDALLOY: + return MistingNames.BENDALLOY; + + case ATIUM: + return MistingNames.ATIUM; + + case LERASIUM: + return MistingNames.ALL; + + default: + case MALATIUM: + case LERASATIUM: + return "misting_" + this.getName(); + + } + } + + public Collection getHemalurgyStealWhitelist() + { + switch (this) + { + case STEEL: + //Steals a physical allomantic power + //Iron//Steel//Tin//Pewter + case PEWTER: + //Steals a physical feruchemical power + //Iron//Steel//Tin//Pewter + return Arrays.asList( + MetalType.IRON, + MetalType.STEEL, + MetalType.TIN, + MetalType.PEWTER); + case BRASS: + //Steals a cognitive feruchemical power + //Zinc//Brass//Copper//Bronze + case BRONZE: + //Steals a Mental Allomantic power + //Zinc//Brass//Copper//Bronze + return Arrays.asList( + MetalType.ZINC, + MetalType.BRASS, + MetalType.COPPER, + MetalType.BRONZE); + case CADMIUM: + //Steals a Temporal Allomantic power + //Cadmium//Bendalloy//Gold//Electrum + case GOLD: + //Steals a Hybrid Feruchemical power + //Cadmium//Bendalloy//Gold//Electrum + return Arrays.asList( + MetalType.CADMIUM, + MetalType.BENDALLOY, + MetalType.GOLD, + MetalType.ELECTRUM); + case BENDALLOY: + //Steals a Spiritual Feruchemical power + //Chromium//Nicrosil//Aluminum//Duralumin + case ELECTRUM: + //Steals an Enhancement Allomantic power + //Chromium//Nicrosil//Aluminum//Duralumin + return Arrays.asList( + MetalType.CHROMIUM, + MetalType.NICROSIL, + MetalType.ALUMINUM, + MetalType.DURALUMIN); + case ATIUM: + case LERASIUM: + return Arrays.stream(MetalType.values()).filter(MetalType::hasAssociatedManifestation).collect(Collectors.toList()); + case MALATIUM: + case LERASATIUM: + break; + } + + return null; + } + + @SuppressWarnings("DuplicateBranchesInSwitch") + public int getAllomancyBurnTimeSeconds() + { + //todo convert to config item + double burnTimeInSeconds = switch (this) + { + case IRON, STEEL -> TimeHelper.MinutesToSeconds(5); + case TIN -> TimeHelper.MinutesToSeconds(15); + case PEWTER -> TimeHelper.MinutesToSeconds(2.5); + case ZINC, BRASS -> TimeHelper.MinutesToSeconds(5); + case COPPER -> TimeHelper.MinutesToSeconds(10); + case BRONZE -> TimeHelper.MinutesToSeconds(7.5); + case ALUMINUM, DURALUMIN, CHROMIUM, NICROSIL -> + TimeHelper.MinutesToSeconds(0.5);//these have special rules that make it burn out fast + case CADMIUM -> TimeHelper.MinutesToSeconds(7.5); + case BENDALLOY -> TimeHelper.MinutesToSeconds(2.5); + case GOLD, ELECTRUM -> TimeHelper.MinutesToSeconds(2.5); + case ATIUM -> TimeHelper.MinutesToSeconds(0.5f); + case MALATIUM -> TimeHelper.MinutesToSeconds(1); + default -> 99; + }; + return Mth.floor(burnTimeInSeconds); + } + + public double getEntityAbilityStrength(LivingEntity killedEntity, Player playerEntity) + { + //Steals non-manifestation based abilities. traits inherent to an entity? + double strengthToAdd = 0; + switch (this) + { + case IRON: + //steals physical strength + //don't steal modified values, only base value + //todo decide how much strength is reasonable to steal and how much goes to waste + //currently will try 70% + final AttributeMap attributes = killedEntity.getAttributes(); + if (attributes.hasAttribute(Attributes.ATTACK_DAMAGE)) + { + strengthToAdd = attributes.getBaseValue(Attributes.ATTACK_DAMAGE) * 0.7D; + } + break; + case TIN: + //Steals senses + + //can track you on a huge island, even underground. + if (killedEntity instanceof EnderDragon) + { + strengthToAdd = 0.77; + } + //Literally hunt players at night + else if (killedEntity instanceof Phantom) + { + strengthToAdd = 0.66; + } + else if (killedEntity instanceof Player) + { + strengthToAdd = 0.25; + } + else if (killedEntity instanceof Cat) + { + strengthToAdd = 0.5; + } + else + { + final AttributeInstance attribute = killedEntity.getAttribute(Attributes.FOLLOW_RANGE); + + if (attribute != null) + { + //ghasts have 100 base follow range, + //most others have 16-40 + final int hemalurgicDecay = 150; + strengthToAdd = attribute.getBaseValue() / hemalurgicDecay; + } + else + { + //at this point, who cares. + strengthToAdd = 0.10; + } + } + break; + case COPPER: + //Steals mental fortitude, memory, and intelligence + //increase base xp gain rate + final float potentialRewardRate = killedEntity.getExperienceReward() / 150f; + + if (killedEntity instanceof Player) + { + //todo do better + final Attribute xpAttribute = ForgeRegistries.ATTRIBUTES.getValue(new ResourceLocation(CosmereAPI.COSMERE_MODID, Metals.MetalType.COPPER.getName())); + if (xpAttribute != null) + { + final AttributeInstance attribute = killedEntity.getAttribute(xpAttribute); + if (attribute != null) + { + //70% strength to spike + strengthToAdd = attribute.getValue() * 0.70; + //25% remaining on player + final double newBaseValue = attribute.getValue() * 0.25; + attribute.setBaseValue(((int) (newBaseValue * 100)) / 100f); + } + else + { + strengthToAdd = potentialRewardRate; + } + } + } + else if (killedEntity instanceof EnderDragon dragonEntity) + { + //dragon doesn't reward xp in a typical way + strengthToAdd = + dragonEntity.getDragonFight() != null && !dragonEntity.getDragonFight().hasPreviouslyKilledDragon() + ? 1 //give first person to kill dragon a full rate increase spike + : 0.33;//else similar to wither rate. + } + else + { + strengthToAdd = potentialRewardRate; + } + break; + case ZINC: + //Steals emotional fortitude + //todo figure out what that means + break; + case ALUMINUM: + //done else where. + break; + case DURALUMIN://todo hemalurgic connection/identity + //Steals Connection/Identity + break; + case CHROMIUM: + //Might steal destiny + //so we could add some permanent luck? + + if (killedEntity instanceof Rabbit) + { + strengthToAdd = 0.25; + } + else if (killedEntity instanceof WitherSkeleton) + { + strengthToAdd = -1; + } + else if (killedEntity instanceof WitherBoss) + { + strengthToAdd = -3; + } + else if (killedEntity instanceof Pufferfish) + { + strengthToAdd = -0.5; + } + else if (killedEntity instanceof Cat cat) + { + final CatVariant catType = cat.getVariant(); + if (catType.texture().getPath().contains("black"))//all black + { + strengthToAdd = -5; + } + else if (catType.texture().getPath().contains("white"))//white + { + strengthToAdd = 1; + } + } + break; + case NICROSIL://todo hemalurgic investiture + //Steals Investiture + break; + } + return strengthToAdd; + } + + public String getShortHemalurgicUseString() + { + switch (this) + { + case IRON: + return "Steals physical strength."; + case STEEL: + return "Steals a physical allomantic power."; + //Iron//Steel//Tin//Pewter + case TIN: + return "Steals senses."; + case PEWTER: + return "Steals a physical feruchemical power."; + //Iron//Steel//Tin//Pewter + case ZINC: + return "Steals emotional fortitude."; + case BRASS: + return "Steals a cognitive feruchemical power."; + //Zinc//Brass//Copper//Bronze + case COPPER: + return "Steals mental fortitude, memory, and intelligence."; + case BRONZE: + return "Steals a Mental Allomantic power."; + //Zinc//Brass//Copper//Bronze + case ALUMINUM: + return "Removes all powers."; + case DURALUMIN: + return "Steals Connection/Identity."; + case CHROMIUM: + return "Might steal destiny..."; + case NICROSIL: + return "Steals Investiture."; + case CADMIUM: + return "Steals a Temporal Allomantic power."; + //Cadmium//Bendalloy//Gold//Electrum + case GOLD: + return "Steals a Hybrid Feruchemical power."; + //Cadmium//Bendalloy//Gold//Electrum + case BENDALLOY: + return "Steals a Spiritual Feruchemical power."; + //Chromium//Nicrosil//Aluminum//Duralumin + case ELECTRUM: + return "Steals an Enhancement Allomantic power."; + //Chromium//Nicrosil//Aluminum//Duralumin + case ATIUM: + return "Steals an Allomantic or Feruchemical power. Must be refined."; + case LERASIUM: + return "Steals all powers..."; + } + + return "Unknown..."; + } + + + public String getFeruchemyMetalmindUse() + { + switch (this) + { + case IRON: + return "Stores Weight. Less weight slows descent. A Skimmer Ferring using this will decrease the pull of gravity on them in exchange for increasing it later."; + case STEEL: + return "Stores Physical Speed. A Steelrunner Ferring using this will be physically slower now in exchange for being faster later."; + case TIN: + return "Stores Eyesight senses. Tapping will zoom in."; + case PEWTER: + return "Stores Strength. A Brute Ferring using this will lessen the size of his muscles to increase them later."; + case ZINC: + return "Stores Mental Speed. A Sparker Ferring storing zinc will gain experience very slowly in exchange for gaining experience faster later."; + case BRASS: + return "Stores Warmth. Firesoul Ferrings using this will cool themselves in exchange for being able to warm themselves later by tapping the metalmind."; + case COPPER: + return "Stores Experience. An Archivist Ferring using this will be able to store experience inside copper, then withdraw it later from the metal."; + case BRONZE: + return "Stores Wakefulness. A Sentry Ferring using this will sleep or be drowsier now in exchange for staying awake longer later."; + case ALUMINUM: + return "Stores Identity. Trueself Ferrings can store their spiritual sense of self within an aluminum metalmind."; + case DURALUMIN: + return "Stores Connection. A Connector Ferring can store spiritual connection inside a metalmind, reducing outside awareness during active storage. Tapping not yet implemented.";//todo change when tapping works + case CHROMIUM: + return "Stores Fortune. A Spinner Ferring will become unlucky during active storage in exchange for increased fortune later."; + case NICROSIL: + return "Stores Investiture. Little is known about Soulbearer Ferrings. (Not yet implemented)"; + case CADMIUM: + return "Stores Breath. A Gasper Ferring may hyperventilate while storing breath in exchange for eliminating or reducing the need to breathe later on."; + case GOLD: + return "Stores Health. A Bloodmaker Ferring using this will feel sick now in exchange for increased regeneration and healing later."; + case ELECTRUM: + return "Stores Determination. A Pinnacle Ferring using this will take more damage in exchange for taking less damage later."; + case BENDALLOY: + return "Stores Energy. A Subsumer Ferring using this can consume large quantities of food and store the calories in the metalmind, in exchange for the ability to forgo eating later."; + case ATIUM: + return "Stores Height. Atium ferrings become smaller during active storage, and can tap it later to be come larger."; + } + + return "Unknown..."; + } + + @Override + public int getUses() + { + return this.uses; + } + + @Override + public float getSpeed() + { + return this.speed; + } + + @Override + public float getAttackDamageBonus() + { + return this.damage; + } + + @Override + public int getLevel() + { + return this.level; + } + + @Override + public int getEnchantmentValue() + { + return this.enchantmentValue; + } + + @Override + public @NotNull Ingredient getRepairIngredient() + { + return Ingredient.of(getMetalIngotTag()); + } + + @Override + public SoundEvent getEquipSound() + { + return SoundEvents.ARMOR_EQUIP_IRON; + } + + @Override + public float getToughness() + { + return 0; + } + + @Override + public float getKnockbackResistance() + { + return 0; + } + + @Override + public int getDurabilityForType(ArmorItem.Type pType) + { + float multiplier = switch (pType) + { + default -> 0.0F; + case HELMET -> 0.3F; + case CHESTPLATE -> 0.5F; + case LEGGINGS -> 0.4F; + case BOOTS -> 0.25F; + }; + + return Mth.floor(getUses() * multiplier); + } + + @Override + public int getDefenseForType(ArmorItem.Type pType) + { + return getLevel() + switch (pType) + { + default -> 0; + case HELMET, BOOTS -> 0; + case LEGGINGS -> 3; + case CHESTPLATE -> 4; + }; + } + + //todo do something better than sticking this in enum api + public Item getNugget() + { + if (!hasMaterialItem()) + { + switch (this) + { + case IRON: + return Items.IRON_NUGGET; + case GOLD: + return Items.GOLD_NUGGET; + } + } + + var resourceLoc = new ResourceLocation(CosmereAPI.COSMERE_MODID, getName() + Constants.RegNameStubs.NUGGET); + return ForgeRegistries.ITEMS.getValue(resourceLoc); + } + + public String getTranslationKey() + { + return "metal.cosmere." + this.getName(); + } + } + + private static class MetalColor + { + + //Iron(0.560f,0.579f,0.580f) + public static final Color IRON = Color.decode("#f2f2f2"); + public static final Color STEEL = Color.decode("#737173"); + public static final Color TIN = Color.decode("#b0c9c3"); + public static final Color PEWTER = Color.decode("#a9a1a1"); + //Aluminium(0.913f,0.921f,0.925f) + public static final Color ALUMINUM = Color.decode("#819393"); + public static final Color DURALUMIN = Color.decode("#7a8f90"); + //Chromium(0.550f,0.556f,0.554f) + public static final Color CHROMIUM = Color.decode("#595959"); + public static final Color NICROSIL = Color.decode("#9296b6"); + public static final Color ZINC = Color.decode("#d9debc"); + public static final Color BRASS = Color.decode("#fed679"); + //Copper(0.955f,0.637f,0.538f) + public static final Color COPPER = Color.decode("#c15a36"); + public static final Color BRONZE = Color.decode("#8c5b30"); + //Gold(1.000f,0.766f,0.336f) + public static final Color GOLD = Color.decode("#faf25e"); + public static final Color ELECTRUM = Color.decode("#b29988"); + public static final Color CADMIUM = Color.decode("#a94934"); + public static final Color BENDALLOY = Color.decode("#6d4c22"); + + //new Color(0.860f, 0.870f, 0.880f); + public static final Color LERASIUM = Color.decode("#e0e3d6"); + public static final Color ATIUM = Color.decode("#363434"); + + //godmetal/metal alloys + public static final Color MALATIUM = Color.decode("#e0e3d6"); + + + //god metal only alloys + public static final Color HARMONIUM = Color.decode("#9895aa"); + + // made up + public static final Color LERASATIUM = Color.decode("#73788a"); + + //non-special + public static final Color NICKEL = Color.decode("#c4c091"); + public static final Color LEAD = Color.decode("#312f50"); + public static final Color SILVER = Color.decode("#d3e5eb"); + } + + private static class FerringNames + { + public static final String ALL = "feruchemist"; + public static final String IRON = "skimmer"; + public static final String STEEL = "steelrunner"; + public static final String TIN = "windwhisperer"; + public static final String PEWTER = "brute"; + public static final String ALUMINUM = "trueself"; + public static final String DURALUMIN = "connector"; + public static final String CHROMIUM = "spinner"; + public static final String NICROSIL = "soulbearer"; + public static final String ZINC = "sparker"; + public static final String BRASS = "firesoul"; + public static final String COPPER = "archivist"; + public static final String BRONZE = "sentry"; + public static final String GOLD = "bloodmaker"; + public static final String ELECTRUM = "pinnacle"; + public static final String CADMIUM = "gasper"; + public static final String BENDALLOY = "subsumer"; + public static final String ATIUM = "elderling"; + } + + private static class MistingNames + { + public static final String ALL = "mistborn"; + public static final String IRON = "lurcher"; + public static final String STEEL = "coinshot"; + public static final String TIN = "tineye"; + public static final String PEWTER = "thug"; + public static final String ALUMINUM = "aluminum_gnat"; + public static final String DURALUMIN = "duralumin_gnat"; + public static final String CHROMIUM = "leecher"; + public static final String NICROSIL = "nicroburst"; + public static final String ZINC = "rioter"; + public static final String BRASS = "soother"; + public static final String COPPER = "smoker"; + public static final String BRONZE = "seeker"; + public static final String GOLD = "augur"; + public static final String ELECTRUM = "oracle"; + public static final String CADMIUM = "pulser"; + public static final String BENDALLOY = "slider"; + public static final String ATIUM = "seer"; + + } +} diff --git a/src/api/java/leaf/cosmere/api/Roshar.java b/src/api/java/leaf/cosmere/api/Roshar.java new file mode 100644 index 000000000..e068c4069 --- /dev/null +++ b/src/api/java/leaf/cosmere/api/Roshar.java @@ -0,0 +1,309 @@ +/* + * File updated ~ 14 - 1 - 2025 ~ Leaf + */ + +package leaf.cosmere.api; + +import net.minecraft.world.item.Tier; +import net.minecraft.world.item.crafting.Ingredient; + +import java.awt.*; +import java.util.Arrays; +import java.util.Locale; +import java.util.Optional; + +public class Roshar +{ + public enum GemSize + { + BROAM, + MARK, + CHIP; + + public float getChargeModifier() + { + return switch (this) + { + case BROAM -> 1f; + case MARK -> 0.5f; + case CHIP -> 0.1f; + }; + } + } + + public enum Surges + { + ADHESION(0), + GRAVITATION(1), + DIVISION(2), + ABRASION(3), + PROGRESSION(4), + ILLUMINATION(5), + TRANSFORMATION(6), + TRANSPORTATION(7), + COHESION(8), + TENSION(9); + + private final int id; + + Surges(int id) + { + this.id = id; + } + + public static Optional valueOf(int value) + { + return Arrays.stream(values()) + .filter(surge -> surge.id == value) + .findFirst(); + } + + public int getID() + { + return id; + } + + public String getName() + { + return name().toLowerCase(Locale.ROOT); + } + } + + //https://coppermind.net/wiki/Gemstone + public enum Gemstone implements Tier + { + SAPPHIRE(0), + SMOKESTONE(1), + RUBY(2), + DIAMOND(3), + EMERALD(4), + GARNET(5), + ZIRCON(6), + AMETHYST(7), + TOPAZ(8), + HELIODOR(9); + + + private final int id; + + Gemstone(int id) + { + this.id = id; + } + + public static Optional valueOf(int value) + { + return Arrays.stream(values()) + .filter(gemType -> gemType.id == value) + .findFirst(); + } + + public int getID() + { + return id; + } + + public String getName() + { + return name().toLowerCase(Locale.ROOT); + } + + + public RadiantOrder getAssociatedOrder() + { + return switch (this) + { + case SAPPHIRE -> RadiantOrder.WINDRUNNER; + case SMOKESTONE -> RadiantOrder.SKYBREAKER; + case RUBY -> RadiantOrder.DUSTBRINGER; + case DIAMOND -> RadiantOrder.EDGEDANCER; + case EMERALD -> RadiantOrder.TRUTHWATCHER; + case GARNET -> RadiantOrder.LIGHTWEAVER; + case ZIRCON -> RadiantOrder.ELSECALLER; + case AMETHYST -> RadiantOrder.WILLSHAPER; + case TOPAZ -> RadiantOrder.STONEWARD; + case HELIODOR -> RadiantOrder.BONDSMITH; + }; + } + + public int getColorValue() + { + return getColor().getRGB(); + } + + public Color getColor() + { + return switch (this) + { + case SAPPHIRE -> GemColours.SAPPHIRE; + case SMOKESTONE -> GemColours.SMOKESTONE; + case RUBY -> GemColours.RUBY; + case DIAMOND -> GemColours.DIAMOND; + case EMERALD -> GemColours.EMERALD; + case GARNET -> GemColours.GARNET; + case ZIRCON -> GemColours.ZIRCON; + case AMETHYST -> GemColours.AMETHYST; + case TOPAZ -> GemColours.TOPAZ; + case HELIODOR -> GemColours.HELIODOR; + }; + } + + + @Override + public int getUses() + { + return 0; + } + + @Override + public float getSpeed() + { + return 0; + } + + @Override + public float getAttackDamageBonus() + { + return 0; + } + + @Override + public int getLevel() + { + return 0; + } + + @Override + public int getEnchantmentValue() + { + return 0; + } + + @Override + public Ingredient getRepairIngredient() + { + return null; + } + + } + + private static class GemColours + { + public static final Color SAPPHIRE = Color.decode("#3991f3"); + public static final Color SMOKESTONE = Color.decode("#c0a6b3"); + public static final Color RUBY = Color.decode("#b40502"); + public static final Color DIAMOND = Color.decode("#f5faf3"); + public static final Color EMERALD = Color.decode("#52b984"); + public static final Color GARNET = Color.decode("#e03935"); + public static final Color ZIRCON = Color.decode("#3ab7bb"); + public static final Color AMETHYST = Color.decode("#c975e4"); + public static final Color TOPAZ = Color.decode("#e3681a"); + public static final Color HELIODOR = Color.decode("#f3dd25"); + } + + + public enum RadiantOrder + { + WINDRUNNER(Gemstone.SAPPHIRE), + SKYBREAKER(Gemstone.SMOKESTONE), + DUSTBRINGER(Gemstone.RUBY), + EDGEDANCER(Gemstone.DIAMOND), + TRUTHWATCHER(Gemstone.EMERALD), + LIGHTWEAVER(Gemstone.GARNET), + ELSECALLER(Gemstone.ZIRCON), + WILLSHAPER(Gemstone.AMETHYST), + STONEWARD(Gemstone.TOPAZ), + BONDSMITH(Gemstone.HELIODOR); + + + private final Gemstone gemstone; + + RadiantOrder(Gemstone gemstone) + { + this.gemstone = gemstone; + } + + public static Optional valueOf(int value) + { + return Arrays.stream(EnumUtils.RADIANT_ORDERS) + .filter(order -> order.getID() == value) + .findFirst(); + } + + public int getID() + { + return gemstone.getID(); + } + + public String getName() + { + return name().toLowerCase(Locale.ROOT); + } + + public Surges getFirstSurge() + { + switch (this) + { + default: + case WINDRUNNER://Adhesion & Gravitation + return Surges.ADHESION; + case SKYBREAKER://Gravitation & Division + return Surges.GRAVITATION; + case DUSTBRINGER://Division & Abrasion + return Surges.DIVISION; + case EDGEDANCER://Abrasion & Progression + return Surges.ABRASION; + case TRUTHWATCHER://Progression & Illumination + return Surges.PROGRESSION; + case LIGHTWEAVER://Illumination & Transformation + return Surges.ILLUMINATION; + case ELSECALLER:// Transformation & Transportation + return Surges.TRANSFORMATION; + case WILLSHAPER://Transportation & Cohesion + return Surges.TRANSPORTATION; + case STONEWARD://Cohesion & Tension + return Surges.COHESION; + case BONDSMITH://Tension & Adhesion + return Surges.TENSION; + } + } + + public Surges getSecondSurge() + { + switch (this) + { + default: + case WINDRUNNER://Adhesion & Gravitation + return Surges.GRAVITATION; + case SKYBREAKER://Gravitation & Division + return Surges.DIVISION; + case DUSTBRINGER://Division & Abrasion + return Surges.ABRASION; + case EDGEDANCER://Abrasion & Progression + return Surges.PROGRESSION; + case TRUTHWATCHER://Progression & Illumination + return Surges.ILLUMINATION; + case LIGHTWEAVER://Illumination & Transformation + return Surges.TRANSFORMATION; + case ELSECALLER://Transformation & Transportation + return Surges.TRANSPORTATION; + case WILLSHAPER://Transportation & Cohesion + return Surges.COHESION; + case STONEWARD://Cohesion & Tension + return Surges.TENSION; + case BONDSMITH://Tension & Adhesion + return Surges.ADHESION; + } + } + + public int getColorValue() + { + return getColor().getRGB(); + } + + public Color getColor() + { + return gemstone.getColor(); + } + } +} \ No newline at end of file diff --git a/src/api/java/leaf/cosmere/api/Taldain.java b/src/api/java/leaf/cosmere/api/Taldain.java new file mode 100644 index 000000000..bd0628b89 --- /dev/null +++ b/src/api/java/leaf/cosmere/api/Taldain.java @@ -0,0 +1,47 @@ +/* + * File updated ~ 8 - 10 - 2022 ~ Leaf + */ + +package leaf.cosmere.api; + +import java.util.Arrays; +import java.util.Locale; +import java.util.Optional; + +public class Taldain +{ + public enum Mastery + { + ELEVATE(0), + PLATFORM(1), +// STAIR(2), + LAUNCH(3), + PROJECTILE(4), +// WALL(5), +// SHIELD(6), +// BUILDING(7), +// DECOY(8), + CUSHION(9); + + private final int id; + + Mastery(int id) { this.id = id; } + + public static Optional valueOf(int value) + { + return Arrays.stream(values()) + .filter(investiture -> investiture.id == value) + .findFirst(); + } + + public int getID() + { + return id; + } + + public String getName() + { + return name().toLowerCase(Locale.ROOT); + } + } +} \ No newline at end of file diff --git a/src/api/java/leaf/cosmere/api/Version.java b/src/api/java/leaf/cosmere/api/Version.java new file mode 100644 index 000000000..295d227b1 --- /dev/null +++ b/src/api/java/leaf/cosmere/api/Version.java @@ -0,0 +1,121 @@ +/* + * File updated ~ 8 - 10 - 2022 ~ Leaf + */ + +package leaf.cosmere.api; + +import net.minecraftforge.fml.ModContainer; +import org.apache.maven.artifact.versioning.ArtifactVersion; + + +public class Version +{ + + public int major; + + public int minor; + + public int build; + + public Version(int majorNum, int minorNum, int buildNum) + { + major = majorNum; + minor = minorNum; + build = buildNum; + } + + public Version(ArtifactVersion artifactVersion) + { + this(artifactVersion.getMajorVersion(), artifactVersion.getMinorVersion(), artifactVersion.getIncrementalVersion()); + } + + public Version(ModContainer container) + { + this(container.getModInfo().getVersion()); + } + + public static Version get(String s) + { + String[] split = s.replace('.', ':').split(":"); + if (split.length != 3) + { + return null; + } + for (String i : split) + { + for (char c : i.toCharArray()) + { + if (!Character.isDigit(c)) + { + return null; + } + } + } + + int[] digits = new int[3]; + for (int i = 0; i < 3; i++) + { + digits[i] = Integer.parseInt(split[i]); + } + return new Version(digits[0], digits[1], digits[2]); + } + + public void reset() + { + major = 0; + minor = 0; + build = 0; + } + + public byte comparedState(Version version) + { + if (version.major > major) + { + return -1; + } + else if (version.major == major) + { + if (version.minor > minor) + { + return -1; + } + else if (version.minor == minor) + { + return (byte) Integer.compare(build, version.build); + } + return 1; + } + return 1; + } + + @Override + public String toString() + { + if (major == 0 && minor == 0 && build == 0) + { + return ""; + } + return major + "." + minor + "." + build; + } + + @Override + public int hashCode() + { + int result = 1; + result = 31 * result + build; + result = 31 * result + major; + result = 31 * result + minor; + return result; + } + + @Override + public boolean equals(Object obj) + { + if (obj == null || getClass() != obj.getClass()) + { + return false; + } + Version other = (Version) obj; + return build == other.build && major == other.major && minor == other.minor; + } +} \ No newline at end of file diff --git a/src/api/java/leaf/cosmere/api/cosmereEffect/AttributeModifierInfo.java b/src/api/java/leaf/cosmere/api/cosmereEffect/AttributeModifierInfo.java new file mode 100644 index 000000000..ce350e851 --- /dev/null +++ b/src/api/java/leaf/cosmere/api/cosmereEffect/AttributeModifierInfo.java @@ -0,0 +1,72 @@ +/* + * File updated ~ 29 - 10 - 2023 ~ Leaf + */ + +package leaf.cosmere.api.cosmereEffect; + +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.Tag; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.ai.attributes.Attribute; +import net.minecraft.world.entity.ai.attributes.AttributeModifier; +import net.minecraftforge.registries.ForgeRegistries; + +public class AttributeModifierInfo +{ + private final Attribute attribute; + private double amountPerPointOfStrength; + private AttributeModifier.Operation operation; + + public AttributeModifierInfo(Attribute attribute, double amountPerPointOfStrength, AttributeModifier.Operation operation) + { + this.attribute = attribute; + this.amountPerPointOfStrength = amountPerPointOfStrength; + this.operation = operation; + } + + public Attribute getAttribute() + { + return attribute; + } + + public double getAmount() + { + return amountPerPointOfStrength; + } + + public AttributeModifier.Operation getOperation() + { + return operation; + } + + public void update(double strength, AttributeModifier.Operation operation) + { + this.amountPerPointOfStrength = strength; + this.operation = operation; + } + + public Tag save(CompoundTag compoundTag) + { + compoundTag.putString("attribute_id", ForgeRegistries.ATTRIBUTES.getKey(attribute).toString()); + compoundTag.putDouble("amount", amountPerPointOfStrength); + compoundTag.putInt("operation", operation.toValue()); + + return compoundTag; + } + + public static AttributeModifierInfo load(CompoundTag tag) + { + final ResourceLocation attributeID = new ResourceLocation(tag.getString("attribute_id")); + //check if this attribute still exists in the registry. Maybe a mod got uninstalled + if (ForgeRegistries.ATTRIBUTES.containsKey(attributeID)) + { + Attribute attribute = ForgeRegistries.ATTRIBUTES.getValue(attributeID); + double amount = tag.getDouble("amount"); + AttributeModifier.Operation op = AttributeModifier.Operation.fromValue(tag.getInt("operation")); + + return new AttributeModifierInfo(attribute, amount, op); + } + + return null; + } +} diff --git a/src/api/java/leaf/cosmere/api/cosmereEffect/CosmereEffect.java b/src/api/java/leaf/cosmere/api/cosmereEffect/CosmereEffect.java new file mode 100644 index 000000000..ff4f5b68d --- /dev/null +++ b/src/api/java/leaf/cosmere/api/cosmereEffect/CosmereEffect.java @@ -0,0 +1,92 @@ +/* + * File updated ~ 8 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.api.cosmereEffect; + +import com.google.common.collect.Maps; +import leaf.cosmere.api.providers.ICosmereEffectProvider; +import leaf.cosmere.api.spiritweb.ISpiritweb; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.ai.attributes.Attribute; +import net.minecraft.world.entity.ai.attributes.AttributeModifier; + +import java.util.Map; + +/* + * How we want effects to work: + * - An effect can have a unique source on an instance basis (player, allomantic grenade etc), rather than only allowing one instance of an effect at a time. This would let us stack effects, ie multiple people using copper clouds to prevent seekers finding a group. + * - An effect may have a ticking effect (like how regeneration works?) + * - An effect needs a timer, so we can set for how long it lasts for (it can be renewed as often as needed) + * - An effect should be able to have any number of attribute changes, and should clean up after itself when finished. + * - We don't want it to show up in jade tooltips + * - An effect should have a strength associated with it, so it knows how much to scale up the attribute changes, or be available for use with the ticking effect + * + * Because of that, we can't use the vanilla mob effects at all + * Even specially separating it away from the list on living entities. Those effects will never allow a situation like above where I want + * players to be able to use multiple copper clouds together. Effects only let attributes benefit once per type of effect + * + */ +public abstract class CosmereEffect implements ICosmereEffectProvider +{ + + //each effect cannot have multiple modifications to the same attribute, but could theoretically modify all attributes + private final Map attributeModifiers = Maps.newHashMap(); + + protected CosmereEffect() + { + } + + public Map getAttributeModifiers() + { + return this.attributeModifiers; + } + + public CosmereEffect addAttributeModifier(Attribute attribute, double amount, AttributeModifier.Operation operation) + { + AttributeModifierInfo attributeModifier = new AttributeModifierInfo(attribute, amount, operation); + this.attributeModifiers.put(attribute, attributeModifier); + return this; + } + + protected int getTickToCheck(ISpiritweb data) + { + return data.getLiving().tickCount + this.getTickOffset(); + } + + protected int getTickOffset() + { + //offset the tick check + //ie entity tick count + this offset = tick to check against active tick + return 0; + } + + protected int getActiveTick() + { + //every 20 ticks, or 1 second + return 20; + } + + protected boolean isActiveTick(ISpiritweb data) + { + return getTickToCheck(data) % getActiveTick() == 0; + } + + + public void applyEffectTick(ISpiritweb data, double strength) + { + } + + @Override + public CosmereEffect getEffect() + { + return this; + } + + @Override + public String getTranslationKey() + { + ResourceLocation regName = getRegistryName(); + return "effect." + regName.getNamespace() + "." + regName.getPath(); + } +} diff --git a/src/api/java/leaf/cosmere/api/cosmereEffect/CosmereEffectInstance.java b/src/api/java/leaf/cosmere/api/cosmereEffect/CosmereEffectInstance.java new file mode 100644 index 000000000..8a08dba8f --- /dev/null +++ b/src/api/java/leaf/cosmere/api/cosmereEffect/CosmereEffectInstance.java @@ -0,0 +1,295 @@ +/* + * File updated ~ 20 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.api.cosmereEffect; + +import com.google.common.collect.Maps; +import leaf.cosmere.api.CosmereAPI; +import leaf.cosmere.api.helpers.EffectsHelper; +import leaf.cosmere.api.providers.ICosmereEffectProvider; +import leaf.cosmere.api.spiritweb.ISpiritweb; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.ListTag; +import net.minecraft.nbt.Tag; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.ai.attributes.Attribute; +import net.minecraft.world.entity.ai.attributes.AttributeInstance; +import net.minecraft.world.entity.ai.attributes.AttributeMap; +import net.minecraft.world.entity.ai.attributes.AttributeModifier; +import org.jetbrains.annotations.NotNull; + +import javax.annotation.Nullable; +import java.util.Map; +import java.util.UUID; + +/* + * An instance knows what effect it is associated with + * An instance has a UUID, so that an entity can benefit from the same effect multiple times (unlike mob effects) + * An instance has a strength, so that the attribute increase can reflect the source it came from + * An instance has a timer, such that it can end + * An instance will clean any attribute and effect changes when the timer is finished + */ +public class CosmereEffectInstance implements ICosmereEffectProvider +{ + + private CosmereEffect effect; + //uuid is based on the uuid of the source entity's uuid that the effect is coming from, + the resource location of the power + // ie: effectSource.getStringUUID() + effect.getRegistryName() + private UUID uuid; + private double strength; + + /** + * Time remaining on this cosmere effect in ticks + * There are 20 ticks in a second (generally) + */ + private int duration; + + private final Map dynamicAttributeModifiers = Maps.newHashMap(); + + public CosmereEffectInstance() + { + } + + public CosmereEffectInstance(CosmereEffect effect, UUID uuid, double strength, int duration) + { + this.effect = effect; + this.uuid = uuid; + this.strength = strength; + this.duration = duration; + } + + public UUID getUUID() + { + return uuid; + } + + public CosmereEffect getEffect() + { + return effect; + } + + public int getDuration() + { + return this.duration; + } + + public double getStrength() + { + return this.strength; + } + + public Tag save(CompoundTag compoundTag) + { + compoundTag.putString("effect_id", getEffect().getRegistryName().toString()); + compoundTag.putUUID("uuid", uuid); + compoundTag.putDouble("strength", strength); + compoundTag.putInt("duration", duration); + + if (!this.dynamicAttributeModifiers.isEmpty()) + { + ListTag listtag = new ListTag(); + + for (AttributeModifierInfo info : this.dynamicAttributeModifiers.values()) + { + listtag.add(info.save(new CompoundTag())); + } + + compoundTag.put("dynamic_attributes", listtag); + } + + return compoundTag; + } + + @Nullable + public static CosmereEffectInstance load(CompoundTag compoundtag) + { + final ResourceLocation effectID = new ResourceLocation(compoundtag.getString("effect_id")); + + if (CosmereAPI.cosmereEffectRegistry().containsKey(effectID)) + { + final CosmereEffectInstance effectInstance = new CosmereEffectInstance(); + + effectInstance.effect = CosmereAPI.cosmereEffectRegistry().getValue(effectID); + effectInstance.uuid = compoundtag.getUUID("uuid"); + effectInstance.strength = compoundtag.getDouble("strength"); + effectInstance.duration = compoundtag.getInt("duration"); + + if (compoundtag.contains("dynamic_attributes")) + { + ListTag listtag = (ListTag) compoundtag.get("dynamic_attributes"); + + for (int i = 0; i < listtag.size(); ++i) + { + CompoundTag attributeTag = listtag.getCompound(i); + AttributeModifierInfo ami = AttributeModifierInfo.load(attributeTag); + + if (ami != null) + { + effectInstance.dynamicAttributeModifiers.put(ami.getAttribute(), ami); + } + } + } + + return effectInstance; + } + + return null; + } + + public boolean tick(ISpiritweb data) + { + if (this.duration > 0) + { + if (this.effect.isActiveTick(data)) + { + this.effect.applyEffectTick(data, this.strength); + } + + this.decreaseDuration(); + } + + return this.duration > 0; + } + + private void decreaseDuration() + { + --this.duration; + } + + public void applyAttributeModifiers(LivingEntity livingEntity, AttributeMap pAttributeMap) + { + for (Map.Entry entry : this.getEffect().getAttributeModifiers().entrySet()) + { + AttributeInstance attributeinstance = pAttributeMap.getInstance(entry.getKey()); + if (attributeinstance != null) + { + AttributeModifierInfo attributeModifierInfo = entry.getValue(); + + final UUID effectInstanceUUID = getUUID(); + attributeinstance.removeModifier(effectInstanceUUID); + attributeinstance.addPermanentModifier( + new AttributeModifier( + effectInstanceUUID, + String.format("%s - %s: %s", this.getRegistryName(), getStrength(), effectInstanceUUID.toString()), + this.getAttributeModifierValue(getStrength(), attributeModifierInfo), + attributeModifierInfo.getOperation() + ) + ); + } + } + + for (Map.Entry entry : dynamicAttributeModifiers.entrySet()) + { + AttributeInstance attributeinstance = pAttributeMap.getInstance(entry.getKey()); + if (attributeinstance != null) + { + AttributeModifierInfo attributeModifierInfo = entry.getValue(); + + final UUID effectInstanceUUID = getUUID(); + attributeinstance.removeModifier(effectInstanceUUID); + attributeinstance.addPermanentModifier( + new AttributeModifier( + effectInstanceUUID, + String.format("%s - %s: %s", this.getRegistryName(), getStrength(), effectInstanceUUID.toString()), + this.getAttributeModifierValue(getStrength(), attributeModifierInfo), + attributeModifierInfo.getOperation() + ) + ); + } + } + } + + public void removeAttributeModifiers(AttributeMap attributeMap) + { + //remove attribute modifiers from effect + for (Map.Entry entry : this.getEffect().getAttributeModifiers().entrySet()) + { + AttributeInstance attributeinstance = attributeMap.getInstance(entry.getKey()); + if (attributeinstance != null) + { + attributeinstance.removeModifier(uuid); + } + } + + //remove dynamic attribute changes specific to this instance; + for (Map.Entry entry : dynamicAttributeModifiers.entrySet()) + { + AttributeInstance attributeinstance = attributeMap.getInstance(entry.getKey()); + if (attributeinstance != null) + { + attributeinstance.removeModifier(uuid); + } + } + } + + public double getAttributeModifierValue(double strength, AttributeModifierInfo modifier) + { + return modifier.getAmount() * strength; + } + + //reuse memory where possible + public void setDynamicAttribute(Attribute attribute, double strength, AttributeModifier.Operation operation) + { + AttributeModifierInfo ami; + if (dynamicAttributeModifiers.containsKey(attribute)) + { + ami = dynamicAttributeModifiers.get(attribute); + ami.update(strength, operation); + } + else + { + ami = new AttributeModifierInfo(attribute, strength, operation); + } + + dynamicAttributeModifiers.put(attribute, ami); + } + + public void removeDynamicAttribute(Attribute attribute) + { + dynamicAttributeModifiers.remove(attribute); + } + + public void setDuration(int duration) + { + this.duration = duration; + } + + private void setStrength(double strength) + { + this.strength = strength; + } + + @NotNull + public static CosmereEffectInstance getOrCreateEffect(CosmereEffect cosmereEffect, ISpiritweb data, LivingEntity sourceEntity, double strength) + { + return getOrCreateEffect(cosmereEffect, data, sourceEntity.getStringUUID(), strength); + } + + public static CosmereEffectInstance getOrCreateEffect(CosmereEffect cosmereEffect, ISpiritweb data, String uuid, double strength) + { + final CosmereEffect effect = cosmereEffect; + CosmereEffectInstance effectInstance = data.getEffect(EffectsHelper.getEffectUUID(effect, uuid)); + + //if no effect with this UUID was found, we know we need to make one + if (effectInstance == null) + { + effectInstance = EffectsHelper.getNewEffect(effect, data.getLiving(), strength); + } + else + { + //remove the current instance of this effect's attributes from the data + data.removeEffect(effectInstance.getUUID()); + //reset the duration + effectInstance.setDuration(93); + effectInstance.setStrength(strength); + } + return effectInstance; + } + + public Map getDynamicModifiers() + { + return dynamicAttributeModifiers; + } +} diff --git a/src/api/java/leaf/cosmere/api/helpers/CodecHelper.java b/src/api/java/leaf/cosmere/api/helpers/CodecHelper.java new file mode 100644 index 000000000..763112898 --- /dev/null +++ b/src/api/java/leaf/cosmere/api/helpers/CodecHelper.java @@ -0,0 +1,16 @@ +/* + * File updated ~ 8 - 10 - 2022 ~ Leaf + */ + +package leaf.cosmere.api.helpers; + +import com.mojang.serialization.Codec; +import net.minecraft.core.BlockPos; + +import java.util.List; + +public class CodecHelper +{ + public static Codec> BlockPosListCodec = Codec.list(BlockPos.CODEC); + +} diff --git a/src/api/java/leaf/cosmere/api/helpers/CompoundNBTHelper.java b/src/api/java/leaf/cosmere/api/helpers/CompoundNBTHelper.java new file mode 100644 index 000000000..7e512cb01 --- /dev/null +++ b/src/api/java/leaf/cosmere/api/helpers/CompoundNBTHelper.java @@ -0,0 +1,259 @@ +/* + * File updated ~ 15 - 10 - 2022 ~ Leaf + */ + +package leaf.cosmere.api.helpers; + +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.ListTag; +import net.minecraft.nbt.Tag; + +import javax.annotation.Nullable; +import java.util.List; +import java.util.UUID; + +public final class CompoundNBTHelper +{ + + private static final int[] EMPTY_INT_ARRAY = new int[0]; + + + public static void set(CompoundTag compoundTag, String tag, Tag nbt) + { + compoundTag.put(tag, nbt); + } + + public static void setBoolean(CompoundTag compoundTag, String tag, boolean b) + { + compoundTag.putBoolean(tag, b); + } + + public static void setByte(CompoundTag compoundTag, String tag, byte b) + { + compoundTag.putByte(tag, b); + } + + public static void setShort(CompoundTag compoundTag, String tag, short s) + { + compoundTag.putShort(tag, s); + } + + public static void setInt(CompoundTag compoundTag, String tag, int i) + { + compoundTag.putInt(tag, i); + } + + public static void setIntArray(CompoundTag compoundTag, String tag, int[] val) + { + compoundTag.putIntArray(tag, val); + } + + public static void setIntArray(CompoundTag compoundTag, String tag, List val) + { + compoundTag.putIntArray(tag, val); + } + + public static void setLong(CompoundTag compoundTag, String tag, long l) + { + compoundTag.putLong(tag, l); + } + + public static void setFloat(CompoundTag compoundTag, String tag, float f) + { + compoundTag.putFloat(tag, f); + } + + public static void setDouble(CompoundTag compoundTag, String tag, double d) + { + compoundTag.putDouble(tag, d); + } + + public static void setCompound(CompoundTag compoundTag, String tag, CompoundTag cmp) + { + if (!tag.equalsIgnoreCase("ench")) // not override the enchantments + { + compoundTag.put(tag, cmp); + } + } + + public static void setString(CompoundTag compoundTag, String tag, String s) + { + compoundTag.putString(tag, s); + } + + public static void setUuid(CompoundTag compoundTag, String tag, UUID value) + { + compoundTag.putUUID(tag, value); + } + + public static void setList(CompoundTag compoundTag, String tag, ListTag list) + { + compoundTag.put(tag, list); + } + + public static void removeEntry(CompoundTag compoundTag, String tag) + { + compoundTag.remove(tag); + } + + // GETTERS + + public static boolean verifyExistance(CompoundTag compoundTag, String tag) + { + return compoundTag != null && compoundTag.contains(tag); + } + + @Nullable + public static Tag get(CompoundTag compoundTag, String tag) + { + return verifyExistance(compoundTag, tag) ? compoundTag.get(tag) : null; + } + + public static boolean getBoolean(CompoundTag compoundTag, String tag, boolean defaultExpected) + { + return verifyExistance(compoundTag, tag) ? compoundTag.getBoolean(tag) : defaultExpected; + } + + public static byte getByte(CompoundTag compoundTag, String tag, byte defaultExpected) + { + return verifyExistance(compoundTag, tag) ? compoundTag.getByte(tag) : defaultExpected; + } + + public static short getShort(CompoundTag compoundTag, String tag, short defaultExpected) + { + return verifyExistance(compoundTag, tag) ? compoundTag.getShort(tag) : defaultExpected; + } + + public static int getInt(CompoundTag compoundTag, String tag, int defaultExpected) + { + return verifyExistance(compoundTag, tag) ? compoundTag.getInt(tag) : defaultExpected; + } + + public static int[] getIntArray(CompoundTag compoundTag, String tag) + { + return verifyExistance(compoundTag, tag) ? compoundTag.getIntArray(tag) : EMPTY_INT_ARRAY; + } + + public static long getLong(CompoundTag compoundTag, String tag, long defaultExpected) + { + return verifyExistance(compoundTag, tag) ? compoundTag.getLong(tag) : defaultExpected; + } + + public static float getFloat(CompoundTag compoundTag, String tag, float defaultExpected) + { + return verifyExistance(compoundTag, tag) ? compoundTag.getFloat(tag) : defaultExpected; + } + + public static double getDouble(CompoundTag compoundTag, String tag, double defaultExpected) + { + return verifyExistance(compoundTag, tag) ? compoundTag.getDouble(tag) : defaultExpected; + } + + /** + * If nullifyOnFail is true it'll return null if it doesn't find any + * compounds, otherwise it'll return a new one. + **/ + public static CompoundTag getCompound(CompoundTag compoundTag, String tag, boolean nullifyOnFail) + { + return verifyExistance(compoundTag, tag) ? compoundTag.getCompound(tag) + : nullifyOnFail ? null : new CompoundTag(); + } + + public static String getString(CompoundTag compoundTag, String tag, String defaultExpected) + { + return verifyExistance(compoundTag, tag) ? compoundTag.getString(tag) : defaultExpected; + } + + @Nullable + public static UUID getUuid(CompoundTag compoundTag, String tag) + { + return verifyExistance(compoundTag, tag + "Most") && verifyExistance(compoundTag, tag + "Least") + ? compoundTag.getUUID(tag) : null; + } + + public static ListTag getList(CompoundTag compoundTag, String tag, int objtype, boolean nullifyOnFail) + { + return verifyExistance(compoundTag, tag) ? compoundTag.getList(tag, objtype) + : nullifyOnFail ? null : new ListTag(); + } + + /** + * Returns true if the `target` tag contains all of the tags and values present in the `template` tag. Recurses into + * compound tags and matches all template keys and values; recurses into list tags and matches the template against + * the first elements of target. Empty lists and compounds in the template will match target lists and compounds of + * any size. + */ + public static boolean matchTag(@Nullable Tag template, @Nullable Tag target) + { + if (template instanceof CompoundTag && target instanceof CompoundTag) + { + return matchTagCompound((CompoundTag) template, (CompoundTag) target); + } + else if (template instanceof ListTag && target instanceof ListTag) + { + return matchTagList((ListTag) template, (ListTag) target); + } + else + { + return template == null || (target != null && target.equals(template)); + } + } + + private static boolean matchTagCompound(CompoundTag template, CompoundTag target) + { + if (template.size() > target.size()) + { + return false; + } + + for (String key : template.getAllKeys()) + { + if (!matchTag(template.get(key), target.get(key))) + { + return false; + } + } + + return true; + } + + private static boolean matchTagList(ListTag template, ListTag target) + { + if (template.size() > target.size()) + { + return false; + } + + for (int i = 0; i < template.size(); i++) + { + if (!matchTag(template.get(i), target.get(i))) + { + return false; + } + } + + return true; + } + + public static void renameTag(CompoundTag nbt, String oldName, String newName) + { + Tag tag = nbt.get(oldName); + if (tag != null) + { + nbt.remove(oldName); + nbt.put(newName, tag); + } + } + + public static CompoundTag getOrCreate(CompoundTag nbt, String key) + { + if (verifyExistance(nbt, key)) + { + return nbt.getCompound(key); + } + final CompoundTag pValue = new CompoundTag(); + nbt.put(key, pValue); + return pValue; + + } +} diff --git a/src/api/java/leaf/cosmere/api/helpers/DrawHelper.java b/src/api/java/leaf/cosmere/api/helpers/DrawHelper.java new file mode 100644 index 000000000..acdf5640b --- /dev/null +++ b/src/api/java/leaf/cosmere/api/helpers/DrawHelper.java @@ -0,0 +1,379 @@ +/* + * File updated ~ 12 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.api.helpers; + +import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.blaze3d.vertex.DefaultVertexFormat; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import com.mojang.blaze3d.vertex.VertexFormat; +import com.mojang.math.Axis; +import net.minecraft.core.Vec3i; +import org.joml.Matrix3f; +import org.joml.Matrix4f; +import org.joml.Quaternionf; +import org.joml.Vector3f; +import leaf.cosmere.api.CosmereAPI; +import net.minecraft.Util; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GameRenderer; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderStateShard; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.texture.OverlayTexture; +import net.minecraft.core.BlockPos; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.phys.Vec3; + +import java.awt.*; +import java.util.ArrayList; +import java.util.List; +import java.util.OptionalDouble; +import java.util.function.BiFunction; +import java.util.function.Supplier; + +public class DrawHelper +{ + + //Draw our allomancy lines + public static void drawLinesFromPoint(PoseStack poseStack, Vec3 originPoint, float range, Color color, List lineEndPositions, Vec3 highlightVector) + { + poseStack.pushPose(); + + //move where the line is in the world. otherwise it is drawn around origin 0,0,0 I think? + Vec3 view = Minecraft.getInstance().gameRenderer.getMainCamera().getPosition(); + + RenderSystem.disableDepthTest(); + RenderSystem.setShaderColor(1, 1, 1, 1); + + poseStack.translate(-view.x, -view.y, -view.z); + + //Tell the render system we're about to draw our lines + //Use our line settings, special thanks to chisels and bits showing how that works. + final MultiBufferSource.BufferSource bufferSource = Minecraft.getInstance().renderBuffers().bufferSource(); + final VertexConsumer bufferIn = bufferSource.getBuffer(CosmereAPIRenderTypes.LINE_OVERLAY.get()); + + //For all found things, draw the line + for (Vec3 endPos : lineEndPositions) + { + Color finalColor = color; + + if (highlightVector != null) + { + if (endPos.equals(highlightVector)) + { + finalColor = Color.decode("#66b2ff"); + } + } + + int alpha = (int) Math.max(0, Math.floor((1 - (originPoint.distanceTo(endPos) / range)) * finalColor.getAlpha())); // distance dims the lines until out of range + Matrix4f matrix = poseStack.last().pose(); + final Matrix3f normal = poseStack.last().normal(); + + bufferIn.vertex(matrix, (float) originPoint.x(), (float) originPoint.y(), (float) originPoint.z()) + .color(finalColor.getRed(), finalColor.getGreen(), finalColor.getBlue(), alpha) + .normal(normal, 0, 1, 0) + .endVertex(); + + bufferIn.vertex(matrix, (float) endPos.x(), (float) endPos.y(), (float) endPos.z()) + .color(finalColor.getRed(), finalColor.getGreen(), finalColor.getBlue(), alpha) + .normal(normal, 0, 1, 0) + .endVertex(); + } + + bufferSource.endBatch(CosmereAPIRenderTypes.LINE_OVERLAY.get()); + poseStack.popPose(); + RenderSystem.enableDepthTest(); + } + + public static void drawSquareAtPoint(PoseStack pStack, Color color, List squarePosList, Vec3 destinationVec) + { + pStack.pushPose(); + Vec3 view = Minecraft.getInstance().gameRenderer.getMainCamera().getPosition(); + + RenderSystem.disableDepthTest(); + RenderSystem.setShaderColor(1, 1, 1, 1); + + pStack.translate(-view.x, -view.y, -view.z); + + RenderSystem.setShader(GameRenderer::getPositionTexShader); + + // set up texture and buffer + final ResourceLocation icon = new ResourceLocation("minecraft", "textures/particle/note.png"); + final RenderType RENDER_TYPE = CosmereAPIRenderTypes.SQUARE_TEX_OVERLAY(icon); + final MultiBufferSource.BufferSource bufferSource = Minecraft.getInstance().renderBuffers().bufferSource(); + final VertexConsumer bufferIn = bufferSource.getBuffer(RENDER_TYPE); + + final float size = 0.3F; + for (Vec3 pos : squarePosList) + { + Vec3 directionalVec = pos.subtract(destinationVec).normalize(); + + Matrix4f matrix4f = pStack.last().pose(); + Matrix3f matrix3f = pStack.last().normal(); + + double pitch = Math.asin(-directionalVec.y); + double yaw = Math.atan2(directionalVec.x, directionalVec.z); + + Quaternionf rotQuat = Axis.YP.rotationDegrees((float) Math.toDegrees(yaw)); + rotQuat.mul(Axis.XP.rotationDegrees((float) Math.toDegrees(pitch) + 90)); + + float[] vertices = { + -size, 0, -size, + -size, 0, size, + size, 0, size, + size, 0, -size + }; + + float[] textureCoords = { + 1.0F, 0.0F, + 1.0F, 1.0F, + 0.0F, 1.0F, + 0.0F, 0.0F, + }; + + for (int i = 0; i < vertices.length; i += 3) + { + float vertexX = vertices[i]; + float vertexY = vertices[i + 1]; + float vertexZ = vertices[i + 2]; + + Vector3f rotQuatVec = new Vector3f(vertexX, vertexY, vertexZ); + rotQuatVec.rotate(rotQuat); + + float finalX = (float) (rotQuatVec.x() + pos.x()); + float finalY = (float) (rotQuatVec.y() + pos.y()); + float finalZ = (float) (rotQuatVec.z() + pos.z()); + + int textureUCoord = (int) textureCoords[i / 3 * 2]; + int textureVCoord = (int) textureCoords[i / 3 * 2 + 1]; + + squareTexVertex(bufferIn, matrix4f, matrix3f, 1, finalX, finalY, finalZ, textureUCoord, textureVCoord, color); + } + } + + bufferSource.endBatch(RENDER_TYPE); + pStack.popPose(); + RenderSystem.enableDepthTest(); + } + + //copied from DragonFireballRenderer.java + private static void squareTexVertex(VertexConsumer vertexConsumer, Matrix4f matrix4f, Matrix3f matrix3f, int uv2, float pX, float pY, float pZ, int pU, int pV, Color color) + { + vertexConsumer.vertex(matrix4f, pX, pY, pZ) + .uv((float) pU, (float) pV).color(color.getRed(), color.getGreen(), color.getBlue(), 127) + .overlayCoords(OverlayTexture.NO_OVERLAY).uv2(uv2) + .normal(matrix3f, 0.0F, 1.0F, 0.0F) + .endVertex(); + } + + public static void drawBlocksAtPoint(PoseStack poseStack, Color color, List blockPosList, float range, Vec3 highlightVector, ArrayList targetedClusterBlockList) + { + poseStack.pushPose(); + + //move where the line is in the world. otherwise it is drawn around origin 0,0,0 I think? + Vec3 view = Minecraft.getInstance().gameRenderer.getMainCamera().getPosition(); + + RenderSystem.disableDepthTest(); + RenderSystem.setShaderColor(1, 1, 1, 1); + + + poseStack.translate(-view.x, -view.y, -view.z); + + //Tell the render system we're about to draw our lines + //Use our line settings, special thanks to chisels and bits showing how that works. + final VertexConsumer bufferIn = Minecraft.getInstance().renderBuffers().bufferSource().getBuffer(CosmereAPIRenderTypes.BLOCK_OVERLAY.get()); + + Matrix4f matrix = poseStack.last().pose(); + //For all found things, draw the line + for (BlockPos blockPos : blockPosList) + { + Color finalColor = color; + if (highlightVector != null) + { + if (targetedClusterBlockList.contains(blockPos)) + { + finalColor = Color.decode("#66b2ff"); + } + else if (blockPos.getCenter().equals(highlightVector)) + { + finalColor = Color.decode("#66b2ff"); + } + } + + float alphaPercent = (float) Math.max(0f, (1.0f - (view.distanceTo(blockPos.getCenter()) / range))); + + renderColoredBlock(poseStack, bufferIn, finalColor, alphaPercent, blockPos); + } + + //we are meant to end batches... but if I don't, then the boxes draw over other boxes. + Minecraft.getInstance().renderBuffers().bufferSource().endBatch(CosmereAPIRenderTypes.BLOCK_OVERLAY.get()); + poseStack.popPose(); + RenderSystem.enableDepthTest(); + } + + + protected static void renderColoredBlock(PoseStack poseStack, VertexConsumer builder, Color color, float alphaPercent, BlockPos pos) + { + renderBoxSolid( + poseStack, + builder, + pos, + color.getRed() / 255f, + color.getGreen() / 255f, + color.getBlue() / 255f, + 0.15f * alphaPercent); + } + + protected static void renderBoxSolid(PoseStack poseStack, VertexConsumer builder, BlockPos pos, float r, float g, float b, float alpha) + { + double x = pos.getX() - 0.001; + double y = pos.getY() - 0.001; + double z = pos.getZ() - 0.001; + double xEnd = pos.getX() + 1.0015; + double yEnd = pos.getY() + 1.0015; + double zEnd = pos.getZ() + 1.0015; + + renderBoxSolid(poseStack, builder, x, y, z, xEnd, yEnd, zEnd, r, g, b, alpha); + } + + protected static void renderBoxSolid(PoseStack poseStack, VertexConsumer builder, double x, double y, double z, double xEnd, double yEnd, double zEnd, float red, float green, float blue, float alpha) + { + float startX = (float) x; + float startY = (float) y; + float startZ = (float) z; + float endX = (float) xEnd; + float endY = (float) yEnd; + float endZ = (float) zEnd; + + Matrix4f matrix = poseStack.last().pose(); + final Matrix3f normal = poseStack.last().normal(); + + //down + builder.vertex(matrix, startX, startY, startZ).color(red, green, blue, alpha).normal(normal, 0, 1, 0).endVertex(); + builder.vertex(matrix, endX, startY, startZ).color(red, green, blue, alpha).normal(normal, 0, 1, 0).endVertex(); + builder.vertex(matrix, endX, startY, endZ).color(red, green, blue, alpha).normal(normal, 0, 1, 0).endVertex(); + builder.vertex(matrix, startX, startY, endZ).color(red, green, blue, alpha).normal(normal, 0, 1, 0).endVertex(); + + //up + builder.vertex(matrix, startX, endY, startZ).color(red, green, blue, alpha).normal(normal, 0, 1, 0).endVertex(); + builder.vertex(matrix, startX, endY, endZ).color(red, green, blue, alpha).normal(normal, 0, 1, 0).endVertex(); + builder.vertex(matrix, endX, endY, endZ).color(red, green, blue, alpha).normal(normal, 0, 1, 0).endVertex(); + builder.vertex(matrix, endX, endY, startZ).color(red, green, blue, alpha).normal(normal, 0, 1, 0).endVertex(); + + //east + builder.vertex(matrix, startX, startY, startZ).color(red, green, blue, alpha).normal(normal, 0, 1, 0).endVertex(); + builder.vertex(matrix, startX, endY, startZ).color(red, green, blue, alpha).normal(normal, 0, 1, 0).endVertex(); + builder.vertex(matrix, endX, endY, startZ).color(red, green, blue, alpha).normal(normal, 0, 1, 0).endVertex(); + builder.vertex(matrix, endX, startY, startZ).color(red, green, blue, alpha).normal(normal, 0, 1, 0).endVertex(); + + //west + builder.vertex(matrix, startX, startY, endZ).color(red, green, blue, alpha).normal(normal, 0, 1, 0).endVertex(); + builder.vertex(matrix, endX, startY, endZ).color(red, green, blue, alpha).normal(normal, 0, 1, 0).endVertex(); + builder.vertex(matrix, endX, endY, endZ).color(red, green, blue, alpha).normal(normal, 0, 1, 0).endVertex(); + builder.vertex(matrix, startX, endY, endZ).color(red, green, blue, alpha).normal(normal, 0, 1, 0).endVertex(); + + //south + builder.vertex(matrix, endX, startY, startZ).color(red, green, blue, alpha).normal(normal, 0, 1, 0).endVertex(); + builder.vertex(matrix, endX, endY, startZ).color(red, green, blue, alpha).normal(normal, 0, 1, 0).endVertex(); + builder.vertex(matrix, endX, endY, endZ).color(red, green, blue, alpha).normal(normal, 0, 1, 0).endVertex(); + builder.vertex(matrix, endX, startY, endZ).color(red, green, blue, alpha).normal(normal, 0, 1, 0).endVertex(); + + //north + builder.vertex(matrix, startX, startY, startZ).color(red, green, blue, alpha).normal(normal, 0, 1, 0).endVertex(); + builder.vertex(matrix, startX, startY, endZ).color(red, green, blue, alpha).normal(normal, 0, 1, 0).endVertex(); + builder.vertex(matrix, startX, endY, endZ).color(red, green, blue, alpha).normal(normal, 0, 1, 0).endVertex(); + builder.vertex(matrix, startX, endY, startZ).color(red, green, blue, alpha).normal(normal, 0, 1, 0).endVertex(); + } + + //Special thanks to Chisels and Bits for showing how this works + public enum CosmereAPIRenderTypes + { + LINE_OVERLAY(() -> Internal.LINE_OVERLAY), + BLOCK_OVERLAY(() -> Internal.BLOCK_OVERLAY); + + private final Supplier typeSupplier; + + CosmereAPIRenderTypes(final Supplier typeSupplier) + { + this.typeSupplier = typeSupplier; + } + + public RenderType get() + { + return typeSupplier.get(); + } + + public static RenderType SQUARE_TEX_OVERLAY(ResourceLocation icon) + { + return Internal.SQUARE_OVERLAY.apply(icon, true); + } + + private static class Internal extends RenderType + { + private static final RenderType LINE_OVERLAY = RenderType.create(CosmereAPI.COSMERE_MODID + ":lines", + DefaultVertexFormat.POSITION_COLOR_NORMAL, + VertexFormat.Mode.LINES, + 256, + false, + false, + CompositeState.builder() + .setShaderState(RENDERTYPE_LINES_SHADER) + .setLineState(new LineStateShard(OptionalDouble.of(2.5d))) + .setLayeringState(VIEW_OFFSET_Z_LAYERING) + .setTransparencyState(TRANSLUCENT_TRANSPARENCY) + .setOutputState(TRANSLUCENT_TARGET) + .setWriteMaskState(COLOR_WRITE) + .setCullState(NO_CULL) + .setDepthTestState(RenderStateShard.NO_DEPTH_TEST) + .createCompositeState(false)); + + private static final RenderType BLOCK_OVERLAY = create(CosmereAPI.COSMERE_MODID + ":block_render", + DefaultVertexFormat.POSITION_COLOR_NORMAL, + VertexFormat.Mode.QUADS, + 25565, + false, + false, + RenderType.CompositeState.builder() + .setShaderState(RenderStateShard.POSITION_COLOR_SHADER) + .setTextureState(NO_TEXTURE) + .setLayeringState(VIEW_OFFSET_Z_LAYERING) // view_offset_z_layering + .setTransparencyState(TRANSLUCENT_TRANSPARENCY) + .setOutputState(TRANSLUCENT_TARGET) + .setWriteMaskState(COLOR_WRITE) + .setCullState(NO_CULL) + .setDepthTestState(RenderStateShard.NO_DEPTH_TEST) + .createCompositeState(false)); + + private static final BiFunction SQUARE_OVERLAY = Util.memoize((icon, createComposite) -> + { + return create(CosmereAPI.COSMERE_MODID + ":square_render", + DefaultVertexFormat.POSITION_TEX, + VertexFormat.Mode.QUADS, + 25565, + false, + false, + RenderType.CompositeState.builder() + .setShaderState(RenderStateShard.POSITION_TEX_SHADER) + .setTextureState(new RenderStateShard.TextureStateShard(icon, false, false)) + .setLayeringState(VIEW_OFFSET_Z_LAYERING) // view_offset_z_layering + .setTransparencyState(TRANSLUCENT_TRANSPARENCY) + .setOutputState(TRANSLUCENT_TARGET) + .setWriteMaskState(COLOR_WRITE) + .setCullState(NO_CULL) + .setDepthTestState(RenderStateShard.NO_DEPTH_TEST) + .createCompositeState(createComposite)); + }); + + + private Internal(String name, VertexFormat fmt, VertexFormat.Mode glMode, int size, boolean doCrumbling, boolean depthSorting, Runnable onEnable, Runnable onDisable) + { + super(name, fmt, glMode, size, doCrumbling, depthSorting, onEnable, onDisable); + throw new IllegalStateException("This class must not be instantiated"); + } + } + } + +} diff --git a/src/api/java/leaf/cosmere/api/helpers/EffectsHelper.java b/src/api/java/leaf/cosmere/api/helpers/EffectsHelper.java new file mode 100644 index 000000000..3160e6d7d --- /dev/null +++ b/src/api/java/leaf/cosmere/api/helpers/EffectsHelper.java @@ -0,0 +1,80 @@ +/* + * File updated ~ 20 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.api.helpers; + +import leaf.cosmere.api.cosmereEffect.CosmereEffect; +import leaf.cosmere.api.cosmereEffect.CosmereEffectInstance; +import net.minecraft.world.effect.MobEffect; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.entity.Entity; +import org.jetbrains.annotations.NotNull; + +import java.util.UUID; + +public class EffectsHelper +{ + public static MobEffectInstance getNewEffect(MobEffect effect, int amplifier) + { + MobEffectInstance effectInstance = new MobEffectInstance( + effect, + 63, + Math.max(0, amplifier), + true, //usually means came from outside player means, eg beacon? if true, hides icon in non-inv gui + false, // definitely don't want particles. + true); // show icon though + + return effectInstance; + } + + public static MobEffectInstance getNewEffect(MobEffect effect, int amplifier, int duration) + { + MobEffectInstance effectInstance = new MobEffectInstance( + effect, + duration, + Math.max(0, amplifier), + true, //usually means came from outside player means, eg beacon? if true, hides icon in non-inv gui + false, // definitely don't want particles. + true); // show icon though + return effectInstance; + } + + public static CosmereEffectInstance getNewEffect(CosmereEffect effect, Entity effectSource, double strength) + { + return getNewEffect(effect, effectSource, strength, 93); + } + + public static CosmereEffectInstance getNewEffect(CosmereEffect effect, Entity effectSource, double strength, int duration) + { + //generate uuid based on the effect, and the source it comes from + //surely nothing will go wrong with this, right? then we can have multiple effects from the same source entity + UUID uuid = getEffectUUID(effect, effectSource); + return getNewEffect(effect, uuid, strength, duration); + } + + @NotNull + public static UUID getEffectUUID(CosmereEffect effect, Entity effectSource) + { + return getEffectUUID(effect, effectSource.getStringUUID()); + } + + @NotNull + public static UUID getEffectUUID(CosmereEffect effect, String uuidSource) + { + String sourceAndEffect = uuidSource + effect.getRegistryName(); + UUID uuid = UUID.nameUUIDFromBytes(sourceAndEffect.getBytes()); + return uuid; + } + + public static CosmereEffectInstance getNewEffect(CosmereEffect effect, UUID uuid, double strength, int duration) + { + CosmereEffectInstance effectInstance = new CosmereEffectInstance( + effect, + uuid, + Math.max(0, strength), + duration); + + return effectInstance; + } +} diff --git a/src/api/java/leaf/cosmere/api/helpers/EntityHelper.java b/src/api/java/leaf/cosmere/api/helpers/EntityHelper.java new file mode 100644 index 000000000..035ac246d --- /dev/null +++ b/src/api/java/leaf/cosmere/api/helpers/EntityHelper.java @@ -0,0 +1,44 @@ +/* + * File updated ~ 1 - 5 - 2024 ~ Leaf + */ + +package leaf.cosmere.api.helpers; + +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.ai.attributes.Attribute; +import net.minecraft.world.entity.ai.attributes.AttributeMap; +import net.minecraft.world.phys.AABB; + +import java.util.List; + +public class EntityHelper +{ + public static List getLivingEntitiesInRange(LivingEntity livingEntity, int range, boolean includeSelf) + { + AABB areaOfEffect = new AABB(livingEntity.blockPosition()).inflate(range, range, range); + return livingEntity.level().getEntitiesOfClass(LivingEntity.class, areaOfEffect, e -> includeSelf || e != livingEntity); + } + + public static List getEntitiesInRange(Entity entity, int range, boolean includeSelf) + { + AABB areaOfEffect = new AABB(entity.blockPosition()).inflate(range, range, range); + return entity.level().getEntitiesOfClass(Entity.class, areaOfEffect, e -> includeSelf || e != entity); + } + + public static double getAttributeValue(LivingEntity entity, Attribute attribute) + { + return getAttributeValue(entity, attribute, 0); + } + + public static double getAttributeValue(LivingEntity entity, Attribute attribute, double defaultStrength) + { + final AttributeMap attributes = entity.getAttributes(); + if (attributes.hasAttribute(attribute)) + { + return attributes.getValue(attribute); + } + + return defaultStrength; + } +} diff --git a/src/api/java/leaf/cosmere/api/helpers/InventoryHelper.java b/src/api/java/leaf/cosmere/api/helpers/InventoryHelper.java new file mode 100644 index 000000000..f389683cd --- /dev/null +++ b/src/api/java/leaf/cosmere/api/helpers/InventoryHelper.java @@ -0,0 +1,19 @@ +/* + * File updated ~ 8 - 10 - 2022 ~ Leaf + */ + +package leaf.cosmere.api.helpers; + +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.item.ItemStack; + +public class InventoryHelper +{ + + public static void swapStack(Inventory inv, int stack1, int stack2) + { + ItemStack tempStack = inv.getItem(stack2); + inv.setItem(stack2, inv.getItem(stack1)); + inv.setItem(stack1, tempStack); + } +} diff --git a/src/api/java/leaf/cosmere/api/helpers/PlayerHelper.java b/src/api/java/leaf/cosmere/api/helpers/PlayerHelper.java new file mode 100644 index 000000000..59d7956b1 --- /dev/null +++ b/src/api/java/leaf/cosmere/api/helpers/PlayerHelper.java @@ -0,0 +1,79 @@ +/* + * File updated ~ 8 - 10 - 2022 ~ Leaf + */ + +package leaf.cosmere.api.helpers; + +import com.mojang.authlib.GameProfile; +import net.minecraft.client.Minecraft; +import net.minecraft.server.MinecraftServer; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.item.ItemEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.entity.projectile.ProjectileUtil; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.EntityHitResult; +import net.minecraft.world.phys.HitResult; +import net.minecraft.world.phys.Vec3; + +import java.util.Optional; +import java.util.UUID; + +public class PlayerHelper +{ + public static String getPlayerName(UUID id, MinecraftServer server) + { + if (server != null) + { + final Optional gameProfile = server.getProfileCache().get(id); + if (gameProfile.isPresent()) + { + return gameProfile.get().getName(); + } + } + return "OFFLINE Player"; + } + + //Basically a modified copy of the pick function in GameRenderer.java, but with the ability to set pick distance + public static HitResult pickWithRange(LivingEntity player, int range) + { + final Minecraft minecraft = Minecraft.getInstance(); + minecraft.getProfiler().push("cosmere-pick"); + + float partialTicks = minecraft.getFrameTime(); + + HitResult hitResult = player.pick(range, partialTicks, false); + Vec3 eyePosition = player.getEyePosition(partialTicks); + double distToBlock = hitResult.getLocation().distanceToSqr(eyePosition); + + Vec3 viewVector = player.getViewVector(1.0F); + Vec3 viewVectorFromEyes = eyePosition.add(viewVector.x * (double) range, viewVector.y * (double) range, viewVector.z * (double) range); + + AABB aabb = player.getBoundingBox().expandTowards(viewVector.scale(range)).inflate(1.0D, 1.0D, 1.0D); + EntityHitResult entityHitResult = ProjectileUtil.getEntityHitResult(player, eyePosition, viewVectorFromEyes, aabb, potentialEntityHit -> !potentialEntityHit.isSpectator(), distToBlock); + + if (entityHitResult != null) + { + Vec3 entityHitResultLocation = entityHitResult.getLocation(); + double distToEntity = eyePosition.distanceToSqr(entityHitResultLocation); + if (distToEntity < distToBlock) + { + hitResult = entityHitResult; + } + } + + minecraft.getProfiler().pop(); + return hitResult; + } + + + public static void addItem(Player player, ItemStack stack) + { + if (!player.addItem(stack) && !player.level().isClientSide) + { + ItemEntity entity = new ItemEntity(player.getCommandSenderWorld(), player.position().x(), player.position().y(), player.position().z(), stack); + player.getCommandSenderWorld().addFreshEntity(entity); + } + } +} diff --git a/src/api/java/leaf/cosmere/api/helpers/RegistryHelper.java b/src/api/java/leaf/cosmere/api/helpers/RegistryHelper.java new file mode 100644 index 000000000..c137f4fd4 --- /dev/null +++ b/src/api/java/leaf/cosmere/api/helpers/RegistryHelper.java @@ -0,0 +1,129 @@ +/* + * File updated ~ 8 - 10 - 2022 ~ Leaf + */ + +package leaf.cosmere.api.helpers; + +import net.minecraft.core.Registry; +import net.minecraft.core.particles.ParticleType; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.inventory.MenuType; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.crafting.RecipeSerializer; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.material.Fluid; +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.IForgeRegistry; +import org.jetbrains.annotations.Nullable; + +import java.util.Optional; + + +public class RegistryHelper +{ + private RegistryHelper() + { + + } + + public static ResourceLocation get(Item item) + { + return ForgeRegistries.ITEMS.getKey(item); + } + + public static ResourceLocation get(Entity entity) + { + return ForgeRegistries.ENTITY_TYPES.getKey(entity.getType()); + } + + public static ResourceLocation get(Block block) + { + return ForgeRegistries.BLOCKS.getKey(block); + } + + public static ResourceLocation get(EntityType test) + { + return ForgeRegistries.ENTITY_TYPES.getKey(test); + } + + public static ResourceLocation getName(MenuType element) + { + return getName(ForgeRegistries.MENU_TYPES, element); + } + + public static ResourceLocation getName(ParticleType element) + { + return getName(ForgeRegistries.PARTICLE_TYPES, element); + } + + public static ResourceLocation getName(Item element) + { + return getName(ForgeRegistries.ITEMS, element); + } + + public static String getPath(Item element) + { + return getName(element).getPath(); + } + + public static ResourceLocation getName(Block element) + { + return getName(ForgeRegistries.BLOCKS, element); + } + + public static String getNamespace(Block element) + { + return getName(element).getNamespace(); + } + + public static String getPath(Block element) + { + return getName(element).getPath(); + } + + public static ResourceLocation getName(Fluid element) + { + return getName(ForgeRegistries.FLUIDS, element); + } + + public static ResourceLocation getName(BlockEntityType element) + { + return getName(ForgeRegistries.BLOCK_ENTITY_TYPES, element); + } + + public static ResourceLocation getName(EntityType element) + { + return getName(ForgeRegistries.ENTITY_TYPES, element); + } + + public static ResourceLocation getName(RecipeSerializer element) + { + return getName(ForgeRegistries.RECIPE_SERIALIZERS, element); + } + + private static ResourceLocation getName(IForgeRegistry registry, T element) + { + return registry.getKey(element); + } + + @Nullable + @SuppressWarnings({"unchecked", "rawtypes"}) + public static ResourceLocation getNameGeneric(Object element) + { + for (Registry registry : BuiltInRegistries.REGISTRY) + { + //Note: We have to use getResourceKey as getKey for defaulted registries returns the default key + Optional> resourceKey = ((Registry) registry).getResourceKey(element); + if (resourceKey.isPresent()) + { + return resourceKey.get().location(); + } + } + return null; + } +} diff --git a/src/api/java/leaf/cosmere/api/helpers/StackNBTHelper.java b/src/api/java/leaf/cosmere/api/helpers/StackNBTHelper.java new file mode 100644 index 000000000..33a0e09a3 --- /dev/null +++ b/src/api/java/leaf/cosmere/api/helpers/StackNBTHelper.java @@ -0,0 +1,268 @@ +/* + * File updated ~ 8 - 10 - 2022 ~ Leaf + */ + +package leaf.cosmere.api.helpers; + + +import com.google.gson.JsonObject; +import com.mojang.serialization.Dynamic; +import com.mojang.serialization.JsonOps; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.ListTag; +import net.minecraft.nbt.NbtOps; +import net.minecraft.nbt.Tag; +import net.minecraft.world.item.ItemStack; + +import javax.annotation.Nullable; +import java.util.UUID; + +public final class StackNBTHelper +{ + + private static final int[] EMPTY_INT_ARRAY = new int[0]; + + // SETTERS /////////////////////////////////////////////////////////////////// + + public static void set(ItemStack stack, String tag, Tag nbt) + { + stack.getOrCreateTag().put(tag, nbt); + } + + public static void setBoolean(ItemStack stack, String tag, boolean b) + { + stack.getOrCreateTag().putBoolean(tag, b); + } + + public static void setByte(ItemStack stack, String tag, byte b) + { + stack.getOrCreateTag().putByte(tag, b); + } + + public static void setShort(ItemStack stack, String tag, short s) + { + stack.getOrCreateTag().putShort(tag, s); + } + + public static void setInt(ItemStack stack, String tag, int i) + { + stack.getOrCreateTag().putInt(tag, i); + } + + public static void setIntArray(ItemStack stack, String tag, int[] val) + { + stack.getOrCreateTag().putIntArray(tag, val); + } + + public static void setLong(ItemStack stack, String tag, long l) + { + stack.getOrCreateTag().putLong(tag, l); + } + + public static void setFloat(ItemStack stack, String tag, float f) + { + stack.getOrCreateTag().putFloat(tag, f); + } + + public static void setDouble(ItemStack stack, String tag, double d) + { + stack.getOrCreateTag().putDouble(tag, d); + } + + public static void setCompound(ItemStack stack, String tag, CompoundTag cmp) + { + if (!tag.equalsIgnoreCase("ench")) // not override the enchantments + { + stack.getOrCreateTag().put(tag, cmp); + } + } + + public static void setString(ItemStack stack, String tag, String s) + { + stack.getOrCreateTag().putString(tag, s); + } + + public static void setUuid(ItemStack stack, String tag, UUID value) + { + stack.getOrCreateTag().putUUID(tag, value); + } + + public static void setList(ItemStack stack, String tag, ListTag list) + { + stack.getOrCreateTag().put(tag, list); + } + + public static void removeEntry(ItemStack stack, String tag) + { + stack.getOrCreateTag().remove(tag); + } + + // GETTERS /////////////////////////////////////////////////////////////////// + + public static boolean verifyExistance(ItemStack stack, String tag) + { + return !stack.isEmpty() && stack.getOrCreateTag().contains(tag); + } + + @Nullable + public static Tag get(ItemStack stack, String tag) + { + return verifyExistance(stack, tag) ? stack.getOrCreateTag().get(tag) : null; + } + + public static boolean getBoolean(ItemStack stack, String tag, boolean defaultExpected) + { + return verifyExistance(stack, tag) ? stack.getOrCreateTag().getBoolean(tag) : defaultExpected; + } + + public static byte getByte(ItemStack stack, String tag, byte defaultExpected) + { + return verifyExistance(stack, tag) ? stack.getOrCreateTag().getByte(tag) : defaultExpected; + } + + public static short getShort(ItemStack stack, String tag, short defaultExpected) + { + return verifyExistance(stack, tag) ? stack.getOrCreateTag().getShort(tag) : defaultExpected; + } + + public static int getInt(ItemStack stack, String tag, int defaultExpected) + { + return verifyExistance(stack, tag) ? stack.getOrCreateTag().getInt(tag) : defaultExpected; + } + + public static int[] getIntArray(ItemStack stack, String tag) + { + return verifyExistance(stack, tag) ? stack.getOrCreateTag().getIntArray(tag) : EMPTY_INT_ARRAY; + } + + public static long getLong(ItemStack stack, String tag, long defaultExpected) + { + return verifyExistance(stack, tag) ? stack.getOrCreateTag().getLong(tag) : defaultExpected; + } + + public static float getFloat(ItemStack stack, String tag, float defaultExpected) + { + return verifyExistance(stack, tag) ? stack.getOrCreateTag().getFloat(tag) : defaultExpected; + } + + public static double getDouble(ItemStack stack, String tag, double defaultExpected) + { + return verifyExistance(stack, tag) ? stack.getOrCreateTag().getDouble(tag) : defaultExpected; + } + + /** + * If nullifyOnFail is true it'll return null if it doesn't find any + * compounds, otherwise it'll return a new one. + **/ + public static CompoundTag getCompound(ItemStack stack, String tag, boolean nullifyOnFail) + { + return verifyExistance(stack, tag) ? stack.getOrCreateTag().getCompound(tag) + : nullifyOnFail ? null : new CompoundTag(); + } + + public static String getString(ItemStack stack, String tag, String defaultExpected) + { + return verifyExistance(stack, tag) ? stack.getOrCreateTag().getString(tag) : defaultExpected; + } + + @Nullable + public static UUID getUuid(ItemStack stack, String tag) + { + return verifyExistance(stack, tag) + ? stack.getOrCreateTag().getUUID(tag) + : null; + } + + public static ListTag getList(ItemStack stack, String tag, int objtype, boolean nullifyOnFail) + { + return verifyExistance(stack, tag) ? stack.getOrCreateTag().getList(tag, objtype) + : nullifyOnFail ? null : new ListTag(); + } + + /** + * Serializes the given stack such that {@link net.minecraft.item.crafting.ShapedRecipe#deserializeItem} + * would be able to read the result back + */ + public static JsonObject serializeStack(ItemStack stack) + { + CompoundTag nbt = stack.save(new CompoundTag()); + byte c = nbt.getByte("Count"); + if (c != 1) + { + nbt.putByte("count", c); + } + nbt.remove("Count"); + renameTag(nbt, "id", "item"); + renameTag(nbt, "tag", "nbt"); + Dynamic dyn = new Dynamic<>(NbtOps.INSTANCE, nbt); + return dyn.convert(JsonOps.INSTANCE).getValue().getAsJsonObject(); + } + + /** + * Returns true if the `target` tag contains all of the tags and values present in the `template` tag. Recurses into + * compound tags and matches all template keys and values; recurses into list tags and matches the template against + * the first elements of target. Empty lists and compounds in the template will match target lists and compounds of + * any size. + */ + public static boolean matchTag(@Nullable Tag template, @Nullable Tag target) + { + if (template instanceof CompoundTag && target instanceof CompoundTag) + { + return matchTagCompound((CompoundTag) template, (CompoundTag) target); + } + else if (template instanceof ListTag && target instanceof ListTag) + { + return matchTagList((ListTag) template, (ListTag) target); + } + else + { + return template == null || (target != null && target.equals(template)); + } + } + + private static boolean matchTagCompound(CompoundTag template, CompoundTag target) + { + if (template.size() > target.size()) + { + return false; + } + + for (String key : template.getAllKeys()) + { + if (!matchTag(template.get(key), target.get(key))) + { + return false; + } + } + + return true; + } + + private static boolean matchTagList(ListTag template, ListTag target) + { + if (template.size() > target.size()) + { + return false; + } + + for (int i = 0; i < template.size(); i++) + { + if (!matchTag(template.get(i), target.get(i))) + { + return false; + } + } + + return true; + } + + public static void renameTag(CompoundTag nbt, String oldName, String newName) + { + Tag tag = nbt.get(oldName); + if (tag != null) + { + nbt.remove(oldName); + nbt.put(newName, tag); + } + } +} diff --git a/src/api/java/leaf/cosmere/api/helpers/TimeHelper.java b/src/api/java/leaf/cosmere/api/helpers/TimeHelper.java new file mode 100644 index 000000000..a393df4c9 --- /dev/null +++ b/src/api/java/leaf/cosmere/api/helpers/TimeHelper.java @@ -0,0 +1,74 @@ +/* + * File updated ~ 12 - 10 - 2022 ~ Leaf + */ + +package leaf.cosmere.api.helpers; + +import net.minecraft.client.Minecraft; +import net.minecraft.resources.ResourceKey; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.level.Level; + +import javax.swing.text.html.parser.Entity; + +public class TimeHelper +{ + public static double MinutesToSeconds(double minutes) + { + return minutes * 60; + } + public static int SecondsToTicks(double seconds) + { + return (int)(seconds * 20); + } + + public static double TicksToSeconds(int ticks) + { + return (double) ticks / 20.0; + } + + public static double SecondsToMinutes(double seconds) + { + return seconds / 60; + } + + public static long getTick(ResourceKey pDimension) + { + return Minecraft.getInstance().level.getServer().getLevel(pDimension).getGameTime(); + } + + public static long getTick(LivingEntity entity) + { + return entity.tickCount; + } + + public static boolean isNthTick(long tick, int n, double ofNumSeconds) + { + return tick % SecondsToTicks(ofNumSeconds) == n; + } + + public static boolean isNthTick(ResourceKey pDimension, int n, double ofNumSeconds) + { + return isNthTick(getTick(pDimension), n, ofNumSeconds); + } + + public static boolean isNthTick(LivingEntity entity, int n, double ofNumSeconds) + { + return isNthTick(getTick(entity), n, ofNumSeconds); + } + + public static boolean isNthTick(long tick, int n) + { + return isNthTick(tick, n, 1D); + } + + public static boolean isNthTick(ResourceKey pDimension, int n) + { + return isNthTick(pDimension, n, 1D); + } + + public static boolean isNthTick(LivingEntity entity, int n) + { + return isNthTick(entity, n, 1D); + } +} diff --git a/src/api/java/leaf/cosmere/api/investiture/IInvCreator.java b/src/api/java/leaf/cosmere/api/investiture/IInvCreator.java new file mode 100644 index 000000000..08dd1c203 --- /dev/null +++ b/src/api/java/leaf/cosmere/api/investiture/IInvCreator.java @@ -0,0 +1,16 @@ +package leaf.cosmere.api.investiture; + +import leaf.cosmere.api.Manifestations; +import leaf.cosmere.api.manifestation.Manifestation; +import leaf.cosmere.api.spiritweb.ISpiritweb; + +public interface IInvCreator +{ + + KineticInvestiture newInvest(ISpiritweb data); + + KineticInvestiture newInvest(ISpiritweb data, double beu, double decay); + + KineticInvestiture newInvest(ISpiritweb data, double beu); + +} diff --git a/src/api/java/leaf/cosmere/api/investiture/IInvestiture.java b/src/api/java/leaf/cosmere/api/investiture/IInvestiture.java new file mode 100644 index 000000000..dc0cebe7e --- /dev/null +++ b/src/api/java/leaf/cosmere/api/investiture/IInvestiture.java @@ -0,0 +1,26 @@ +package leaf.cosmere.api.investiture; + +import leaf.cosmere.api.manifestation.Manifestation; +import leaf.cosmere.api.spiritweb.ISpiritweb; +import net.minecraft.nbt.CompoundTag; + +public interface IInvestiture +{ + double getBEU(); + + void setBEU(double beu); + + Manifestation[] getApplicableManifestations(); + + InvHelpers.Shard getShard(); + + ISpiritweb getContainer(); + + double getCurrentMaxDraw(); + + void calculateCurrentMaxDraw(); + + CompoundTag serializeNBT(); + void deserializeNBT(CompoundTag nbt); + +} diff --git a/src/api/java/leaf/cosmere/api/investiture/InvHelpers.java b/src/api/java/leaf/cosmere/api/investiture/InvHelpers.java new file mode 100644 index 000000000..9aa137419 --- /dev/null +++ b/src/api/java/leaf/cosmere/api/investiture/InvHelpers.java @@ -0,0 +1,236 @@ +/* +* File updated ~ 15 - 9 - 25 ~ Soar + */ + +package leaf.cosmere.api.investiture; + +import leaf.cosmere.api.EnumUtils; +import leaf.cosmere.api.Manifestations; +import leaf.cosmere.api.manifestation.Manifestation; +import net.minecraft.client.Minecraft; +import net.minecraftforge.eventbus.api.SubscribeEvent; + +import java.util.Arrays; +import java.util.HashSet; +import java.util.Locale; +import java.util.Optional; + +public class InvHelpers +{ + public enum Shard + { + NONE(0), + AUTONOMY(1), + RUIN(2), + PRESERVATION(16), + HARMONY(17), + HONOR(10), + CULTIVATION(3), + ODIUM(9), + RETRIBUTION(18), + ENDOWMENT(4), + VIRTUOSITY(5), + INVENTION(6), + VALOR(7), + WHIMSY(8), + REASON(11), + DEVOTION(12), + DOMINION(13), + AMBITION(14), + MERCY(15), + DOR(19), + AETHER(20), + PURE(21); + + + final int id; + + Shard(int number) + { + this.id = number; + } + + public static Optional valueOf(int value) + { + return Arrays.stream(values()) + .filter(shard -> shard.id == value) + .findFirst(); + } + + public int getID() + { + return id; + } + + public String getName() + { + return name().toLowerCase(Locale.ROOT); + } + + public Shard[] getComponentShards() + { + return switch (this) + { + case DOR -> new Shard[]{DEVOTION, DOMINION}; + case HARMONY -> new Shard[]{RUIN, PRESERVATION}; + case RETRIBUTION -> new Shard[]{HONOR, ODIUM}; + case PURE -> EnumUtils.SHARDS; + default -> new Shard[]{this}; + + }; + } + + public Manifestations.ManifestationTypes getManifestationType() + { + return switch (this) + { + case HARMONY -> Manifestations.ManifestationTypes.FERUCHEMY; + case PRESERVATION -> Manifestations.ManifestationTypes.ALLOMANCY; + case RUIN -> Manifestations.ManifestationTypes.HEMALURGY; + case AUTONOMY -> Manifestations.ManifestationTypes.SANDMASTERY; + case DOR -> Manifestations.ManifestationTypes.AON_DOR; + case ENDOWMENT -> Manifestations.ManifestationTypes.AWAKENING; + case HONOR, ODIUM, RETRIBUTION, CULTIVATION -> Manifestations.ManifestationTypes.SURGEBINDING; + default -> Manifestations.ManifestationTypes.NONE; + }; + } + + public static Shard getShardOfManifest(Manifestation manifestation) + { + return getShardOfManifest(manifestation.getManifestationType()); + } + + public static Shard getShardOfManifest(Manifestations.ManifestationTypes manifestationT) + { + return switch (manifestationT) + { + case ALLOMANCY -> PRESERVATION; + case HEMALURGY -> RUIN; + case SANDMASTERY -> AUTONOMY; + case AON_DOR -> DOR; + case AWAKENING -> ENDOWMENT; + case SURGEBINDING -> HONOR; + default -> NONE; + }; + } + } + // All possible sources for gaining kinetic investiture + public enum InvestitureSource + { + DIRECT(0), + MISTS(1), + GEMSTONE(2), + HIGHSTORM(3), + SELF(4), + LUHEL_BOND(5), + NAHEL_BOND(6), + //Hemalurgy + LIFEFORCE(7), + PERPENDICULARITY(8); + + final int id; + + InvestitureSource(int id) + { + this.id = id; + } + + public static Optional valueOf(int value) + { + return Arrays.stream(values()) + .filter(shard -> shard.id == value) + .findFirst(); + } + + public int getID() + { + return id; + } + + public String getName() + { + return name().toLowerCase(Locale.ROOT); + } + + } + + public static class InvMath + { + public static double beuToStrength(double beu) + { + return beu /Constants.beuStrengthRatio; + } + + public static int strengthToBEU(double strength) + { + return (int) (strength*Constants.beuStrengthRatio); + } + + public static int beuToPower(double beu) + { + return (int) (beu/Constants.beuPowerRatio); + } + + public static double powerToBEU(int power) + { + return power * Constants.beuPowerRatio; + } + + } + + public static class Constants + { + //Tick Counters + //containers clean up. + public static final int containerTick = 39; + //investiture is transfered. + public static final int transferTick = 19; + + //KineticInvestiture objects decay + //KineticInvestiture calculates next second's max investiture drain. + public static final int investitureTick = 2; + + + + public static final int beuStrengthRatio = 15; + public static final int beuPowerRatio = 20; + } + + public static class TransferHelper + { + public static HashSet transferers = new HashSet<>(); + + public static void addTransferer(Transferer transferer) + { + transferers.add(transferer); + } + + protected static void removeTransferer(Transferer transferer) + { + transferers.remove(transferer); + } + + public static void transferAll() + { + for(Transferer transferer: transferers) + { + transferer.transfer(); + } + } + + public static void clean() + { + transferers.removeIf(transferer -> transferer.getInvestIn() == null || transferer.getInvestOut() == null); + } + + @SubscribeEvent + public static void tick() + { + if(Minecraft.getInstance().level.getServer().getTickCount() % 40 == 19) + { + transferAll(); + clean(); + } + } + } +} diff --git a/src/api/java/leaf/cosmere/api/investiture/KineticInvestiture.java b/src/api/java/leaf/cosmere/api/investiture/KineticInvestiture.java new file mode 100644 index 000000000..838f73124 --- /dev/null +++ b/src/api/java/leaf/cosmere/api/investiture/KineticInvestiture.java @@ -0,0 +1,286 @@ +/* +* File updated ~ 15 - 9 - 25 ~ Soar + */ + +package leaf.cosmere.api.investiture; + +import leaf.cosmere.api.CosmereAPI; +import leaf.cosmere.api.manifestation.Manifestation; +import leaf.cosmere.api.spiritweb.ISpiritweb; +import net.minecraft.nbt.CompoundTag; + +import javax.annotation.Nonnull; + +public class KineticInvestiture implements IInvestiture +{ + + private ISpiritweb container; + private InvHelpers.Shard shard; + private Manifestation[] applicableManifestations; + private int priority = 1; + private double beu; + private double decayRate; + private double currentMaxDraw; + + private CompoundTag nbt; + + + public KineticInvestiture(@Nonnull ISpiritweb container, + InvHelpers.Shard shard, + double beu, + Manifestation[] applicableManifestations, + double decayRate) + { + + this.beu = beu; + this.applicableManifestations = applicableManifestations; + this.container = container; + this.container.mergeOrAddInvestiture(this); + this.decayRate = decayRate; + this.shard = shard; + } + + public KineticInvestiture(@Nonnull ISpiritweb container, + InvHelpers.Shard shard, + double beu, + Manifestation[] applicableManifestations) + { + + this.beu = beu; + this.applicableManifestations = applicableManifestations; + this.container = container; + this.container.mergeOrAddInvestiture(this); + this.shard = shard; + this.decayRate = 0; + } + + + public double getBEU() + { + return beu; + } + + public void setBEU(double beu) + { + this.beu = beu; + } + + /* + public int removeBEU(int remove) + + { + if (remove > beu) + { + int ret = remove - beu; + beu = 0; + return ret; + } + else + { + beu -= remove; + return 0; + } + } + */ + + public void addBEU(double add) + { + beu += add; + } + + public double removeBEU(double remove) + { + return removeBEU(remove, false); + } + + public double removeBEU(double remove, boolean upToCurrent) + { + if (remove > beu) + { + double out = beu; + beu = 0; + return out; + } + else if (upToCurrent && remove > currentMaxDraw) + { + beu -= currentMaxDraw; + return currentMaxDraw; + } + else + { + beu -= remove; + return remove; + } + } + + public double drain() + { + double temp = beu; + beu = 0; + return temp; + } + + public double getDecayRate() + { + return decayRate; + } + + public void setDecayRate(double decayRate) + { + this.decayRate = decayRate; + } + + public void decay() + { + beu -= decayRate; + } + + public int getPriority(){return priority;} + + public void setPriority(int priority) + { + this.priority = priority; + } + + public Manifestation[] getApplicableManifestations() + { + return applicableManifestations; + } + + @Override + public InvHelpers.Shard getShard() + { + return shard; + } + + + public ISpiritweb getContainer() + { + return container; + } + + public double getCurrentMaxDraw() + { + return currentMaxDraw; + } + @Override + public void calculateCurrentMaxDraw() + { + int x = 0; + for(Manifestation manifest: applicableManifestations) + { + if(container != null && manifest.isActive(container)) + { + x++; + } + } + currentMaxDraw = beu/x; + } + + + + public boolean isUsable(Manifestation manifest1) + { + for(Manifestation manifest: applicableManifestations) + { + if(manifest.equals(manifest1)) + { + return true; + } + } + return false; + } + + public boolean merge(KineticInvestiture other) + { + if(this == other) + { + return false; + } + if(this.getPriority() == other.getPriority() + && this.shard == other.shard + && this.getContainer().equals(other.getContainer())) + { + this.beu += other.getBEU(); + other.setBEU(0); + return true; + } + return false; + } + + + + + public void reattach() + { + if(!container.hasInvestiture(this)) + { + container.mergeOrAddInvestiture(this); + } + } + + public CompoundTag serializeNBT() + { + if (this.nbt == null) + { + this.nbt = new CompoundTag(); + } + nbt.putString("shard", shard.getName().toLowerCase()); + nbt.putInt("manifestations_length", applicableManifestations.length); + final CompoundTag manifestationNBT = new CompoundTag(); + for (int i = 0; i < applicableManifestations.length; i++) + { + manifestationNBT.putInt(applicableManifestations[i].getRegistryName().toString(), i); + } + nbt.put("manifestations", manifestationNBT); + nbt.putInt("priority", priority); + nbt.putDouble("decay_rate", decayRate); + nbt.putDouble("beu", beu); + + return nbt; + } + + public void deserializeNBT(CompoundTag nbt) + { + this.nbt = nbt; + decayRate = nbt.getDouble("decay_rate"); + beu = nbt.getDouble("beu"); + shard = InvHelpers.Shard.valueOf(nbt.getString("shard")); + priority = nbt.getInt("priority"); + applicableManifestations = new Manifestation[nbt.getInt("manifestations_length")]; + CompoundTag manifestNBT = nbt.getCompound("manifestations"); + for (Manifestation manifestation : CosmereAPI.manifestationRegistry()) + { + final String manifestationLoc = manifestation.getRegistryName().toString(); + + if (manifestNBT.contains(manifestationLoc)) + { + applicableManifestations[manifestNBT.getInt(manifestationLoc)] = manifestation; + } + } + + + } + + public static KineticInvestiture buildFromNBT(CompoundTag nbt, ISpiritweb data) + { + Manifestation[] array = new Manifestation[nbt.getInt("manifestations_length")]; + CompoundTag manifestNBT = nbt.getCompound("manifestations"); + for (Manifestation manifestation : CosmereAPI.manifestationRegistry()) + { + final String manifestationLoc = manifestation.getRegistryName().toString(); + + if (manifestNBT.contains(manifestationLoc)) + { + array[manifestNBT.getInt(manifestationLoc)] = manifestation; + } + } + KineticInvestiture invest = new KineticInvestiture(data, + InvHelpers.Shard.valueOf(nbt.getString("shard")), + nbt.getDouble("beu"),array, nbt.getDouble("decay_rate")); + invest.nbt = nbt; + invest.setPriority(nbt.getInt("priority")); + return invest; + + } +} diff --git a/src/api/java/leaf/cosmere/api/investiture/Transferer.java b/src/api/java/leaf/cosmere/api/investiture/Transferer.java new file mode 100644 index 000000000..8c82df75f --- /dev/null +++ b/src/api/java/leaf/cosmere/api/investiture/Transferer.java @@ -0,0 +1,104 @@ +package leaf.cosmere.api.investiture; + +import leaf.cosmere.api.manifestation.Manifestation; + +public class Transferer +{ + protected KineticInvestiture investIn; + protected KineticInvestiture investOut; + private int rate; + private int cycles = Integer.MAX_VALUE; + private int cycNum = 0; + + private double killAmount; + + public Transferer(KineticInvestiture investIn, IInfuseContainer containerOut, int transfeRate, double decayRate, int cycles, double killPoint) + { + this(investIn, containerOut, transfeRate, decayRate); + this.cycles = cycles; + this.killAmount = Math.min(killPoint, containerOut.getMaxBEU()); + } + public Transferer(KineticInvestiture investIn, IInfuseContainer containerOut, int transferRate, double decayRate) + { + this.investIn = investIn; + InvHelpers.Shard shard = investIn.getShard(); + Manifestation[] man = investIn.getApplicableManifestations(); + this.investOut = new KineticInvestiture(containerOut, shard, source, investIn.removeBEU(transferRate), man, decayRate); + rate = transferRate; + InvHelpers.TransferHelper.addTransferer(this); + this.killAmount = containerOut.getMaxBEU(); + } + + public Transferer(KineticInvestiture investIn, IInvContainer containerOut, int transferRate) + { + this(investIn, containerOut, transferRate, 0); + } + + protected Transferer(KineticInvestiture investIn, KineticInvestiture investOut, int transferRate, int cycles, double killPoint) + { + this.investOut = investOut; + this.investIn = investIn; + this.rate = transferRate; + this.cycles = cycles; + this.killAmount = killPoint; + } + + protected Transferer(KineticInvestiture investIn, KineticInvestiture investOut, int transferRate) + { + this(investIn, investOut, transferRate, Integer.MAX_VALUE, investOut.getContainer().getMaxBEU()); + } + + public void transfer() + { + int transfer1; + if((cycNum + 1) * rate > killAmount) + { + transfer1 = ((cycNum + 1) * rate) - killAmount; + } + else + { + transfer1 = rate; + } + cycNum++; + investOut.addBEU(investIn.removeBEU(transfer1)); + investIn.reattach(); + if (cycNum == cycles || cycNum * rate >= killAmount) + { + endTransfer(); + } + } + + public int getRate() + { + return rate; + } + + public KineticInvestiture getInvestIn() + { + return investIn; + } + + public KineticInvestiture getInvestOut() + { + return investOut; + } + + public void setKillAmount(double amount) + { + killAmount = amount; + } + + public void endTransfer() + { + investIn = null; + investOut = null; + InvHelpers.TransferHelper.removeTransferer(this); + } + public void clean() + { + if(investIn.getBEU() == 0) + { + investIn = null; + } + } +} diff --git a/src/api/java/leaf/cosmere/api/manifestation/Manifestation.java b/src/api/java/leaf/cosmere/api/manifestation/Manifestation.java new file mode 100644 index 000000000..b5e973236 --- /dev/null +++ b/src/api/java/leaf/cosmere/api/manifestation/Manifestation.java @@ -0,0 +1,159 @@ +/* + * File updated ~ 19 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.api.manifestation; + +import leaf.cosmere.api.CosmereAPI; +import leaf.cosmere.api.investiture.IInvestiture; +import leaf.cosmere.api.investiture.KineticInvestiture; +import leaf.cosmere.api.Manifestations; +import leaf.cosmere.api.providers.IManifestationProvider; +import leaf.cosmere.api.spiritweb.ISpiritweb; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.ai.attributes.Attribute; +import net.minecraft.world.entity.ai.attributes.AttributeInstance; +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.IForgeRegistry; +import org.checkerframework.checker.units.qual.K; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Set; + +public class Manifestation implements IManifestationProvider +{ + final protected Manifestations.ManifestationTypes manifestationType; + + + + public Manifestation() + { + this.manifestationType = Manifestations.ManifestationTypes.NONE; + } + + public Manifestation(Manifestations.ManifestationTypes manifestationType) + { + this.manifestationType = manifestationType; + } + + public Manifestations.ManifestationTypes getManifestationType() + { + return manifestationType; + } + + public int getPowerID() + { + return 0; + } + + public int getActiveTick(ISpiritweb data) + { + return data.getLiving().tickCount + getPowerID(); + } + + public boolean isActiveTick(ISpiritweb data) + { + return getActiveTick(data) % 20 == 0; + } + + public void onModeChange(ISpiritweb data, int lastMode) + { + + } + + public int getMode(ISpiritweb data) + { + return data.getMode(this); + } + + public int getModeModifier(ISpiritweb data, Manifestation manifestation, int requestedModifier) + { + return requestedModifier; + } + + public int modeMax(ISpiritweb data) + { + return 0; + } + + public int modeMin(ISpiritweb data) + { + return 0; + } + + public boolean modeWraps(ISpiritweb data) + { + return false; + } + + /** + * @param data : spiritweb of whatever entity that's using this manifestation + * @return true if this manifestation should trigger a {@link net.minecraft.world.level.gameevent.GameEvent} for sculk sensors and wardens to pick up + * @see leaf.cosmere.common.cap.entity.SpiritwebCapability#tick() + */ + @SuppressWarnings("JavadocReference") + public boolean tick(ISpiritweb data) + { + return false; + } + + protected void applyEffectTick(ISpiritweb data) + { + + } + + public boolean isActive(ISpiritweb data) + { + return data.canTickManifestation(this); + } + + public double getStrength(ISpiritweb cap, boolean getBaseStrength) + { + AttributeInstance attribute = cap.getLiving().getAttribute(getAttribute()); + if (attribute != null) + { + return getBaseStrength ? attribute.getBaseValue() : attribute.getValue(); + } + return 0; + } + + @Override + public ResourceLocation getRegistryName() + { + //May be null if called before the object is registered + IForgeRegistry registry = CosmereAPI.manifestationRegistry(); + return registry == null ? null : registry.getKey(this); + } + + @Override + public String getTranslationKey() + { + ResourceLocation regName = getRegistryName(); + return "manifestation." + regName.getNamespace() + "." + regName.getPath(); + } + + @Override + public Manifestation getManifestation() + { + return this; + } + + + public Attribute getAttribute() + { + return ForgeRegistries.ATTRIBUTES.getValue(getRegistryName()); + } + + + public double maxInvestitureDraw(ISpiritweb data) + { + return 0; + } + + public double minInvestitureDraw(ISpiritweb data) + { + return 0; + } + +} \ No newline at end of file diff --git a/src/api/java/leaf/cosmere/api/math/Easing.java b/src/api/java/leaf/cosmere/api/math/Easing.java new file mode 100644 index 000000000..64038eaf3 --- /dev/null +++ b/src/api/java/leaf/cosmere/api/math/Easing.java @@ -0,0 +1,29 @@ +/* + * File updated ~ 5 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.api.math; + +public class Easing +{ + + public static float easeInQuad(float x) + { + return x * x; + } + + public static float easeOutQuad(float x) + { + return 1 - (1 - x) * (1 - x); + } + + public static float easeInCubic(float x) + { + return x * x * x; + } + + public static float easeOutCubic(float x) + { + return (float) (1 - Math.pow(1 - x, 3)); + } +} diff --git a/src/api/java/leaf/cosmere/api/math/MathHelper.java b/src/api/java/leaf/cosmere/api/math/MathHelper.java new file mode 100644 index 000000000..4926dcaff --- /dev/null +++ b/src/api/java/leaf/cosmere/api/math/MathHelper.java @@ -0,0 +1,70 @@ +/* + * File updated ~ 18 - 8 - 2023 ~ Leaf + */ + +package leaf.cosmere.api.math; + +import net.minecraft.util.Mth; + +import java.util.Random; + +public class MathHelper +{ + public final static Random RANDOM = new Random(); + + //inclusive + public static int randomInt(int min, int max) + { + return RANDOM.nextInt((max - min) + 1) + min; + } + + // 1 out of how many. + public static boolean chance(int chance) + { + return MathHelper.randomInt(1, chance) % chance == 0; + } + + public static boolean randomBool() + { + return RANDOM.nextBoolean(); + } + + public static float InverseLerp(float a, float b, float value) + { + if (a != b) + { + return clamp01((value - a) / (b - a)); + } + else + { + return 0.0f; + } + } + + public static float clamp01(final float f) + { + return Mth.clamp(f, 0.0f, 1.0f); + } + + + public static boolean inTriangle( + final double x1, + final double y1, + final double x2, + final double y2, + final double x3, + final double y3, + final double x, + final double y) + { + final double ab = (x1 - x) * (y2 - y) - (x2 - x) * (y1 - y); + final double bc = (x2 - x) * (y3 - y) - (x3 - x) * (y2 - y); + final double ca = (x3 - x) * (y1 - y) - (x1 - x) * (y3 - y); + return sign(ab) == sign(bc) && sign(bc) == sign(ca); + } + + public static int sign(final double n) + { + return n > 0 ? 1 : -1; + } +} diff --git a/src/api/java/leaf/cosmere/api/math/Vector2.java b/src/api/java/leaf/cosmere/api/math/Vector2.java new file mode 100644 index 000000000..f9118c575 --- /dev/null +++ b/src/api/java/leaf/cosmere/api/math/Vector2.java @@ -0,0 +1,58 @@ +/* + * File updated ~ 8 - 10 - 2022 ~ Leaf + */ + +package leaf.cosmere.api.math; + +import net.minecraft.util.Mth; +import net.minecraft.world.phys.Vec2; + +public class Vector2 +{ + public static final Vector2 ZERO = new Vector2(0.0F, 0.0F); + public static final Vector2 ONE = new Vector2(1.0F, 1.0F); + + public float x = 0; + public float y = 0; + + public Vector2(float xIn, float yIn) + { + this.x = xIn; + this.y = yIn; + } + + public boolean equals(Vec2 other) + { + return this.x == other.x && this.y == other.y; + } + + public static final float Deg2Rad = 0.01745329f; + + public Vector2 Rotate(float degrees) + { + float sin = Mth.sin(degrees * Deg2Rad); + float cos = Mth.cos(degrees * Deg2Rad); + + float tx = this.x; + float ty = this.y; + this.x = (cos * tx) - (sin * ty); + this.y = (sin * tx) + (cos * ty); + + return this; + } + + public Vector2 oldRotate(float delta) + { + x = this.x * Mth.cos(delta) - this.y * Mth.sin(delta); + y = this.x * Mth.sin(delta) + this.y * Mth.cos(delta); + return this; + } + + public static Vector2 Rotate(Vector2 v, float delta) + { + return new Vector2( + v.x * Mth.cos(delta) - v.y * Mth.sin(delta), + v.x * Mth.sin(delta) + v.y * Mth.cos(delta) + ); + } +} diff --git a/src/api/java/leaf/cosmere/api/math/VectorHelper.java b/src/api/java/leaf/cosmere/api/math/VectorHelper.java new file mode 100644 index 000000000..84b56089c --- /dev/null +++ b/src/api/java/leaf/cosmere/api/math/VectorHelper.java @@ -0,0 +1,108 @@ +/* + * File updated ~ 8 - 10 - 2022 ~ Leaf + */ + +package leaf.cosmere.api.math; + +import net.minecraft.core.Vec3i; +import net.minecraft.util.Mth; +import net.minecraft.world.phys.Vec3; + +//Unity's vector3 code is a great resource for vector math +//https://github.com/Unity-Technologies/UnityCsReference/blob/master/Runtime/Export/Math/Vector3.cs +public class VectorHelper +{ + public static final float kEpsilon = 0.00001F; + + // Makes this vector have a magnitude of 1. + public static Vec3 Normalize(Vec3 vec) + { + float mag = Magnitude(vec); + if (mag > kEpsilon) + { + vec = divide(vec, mag); + } + else + { + vec = Vec3.ZERO; + } + + return vec; + } + + // + public static float Magnitude(Vec3 vector) + { + return Mth.sqrt((float) (vector.x() * vector.x() + vector.y() * vector.y() + vector.z() * vector.z())); + } + + + public static Vec3 divide(Vec3 a, float d) + { + return new Vec3(a.x() / d, a.y() / d, a.x() / d); + } + + + // Moves a point /current/ in a straight line towards a /target/ point. + public static Vec3 moveTowards(Vec3 current, Vec3i target, float maxDistanceDelta) + { + // avoid vector ops because current scripting backends are terrible at inlining + double toVector_x = target.getX() - current.x; + double toVector_y = target.getY() - current.y; + double toVector_z = target.getZ() - current.z; + + double sqdist = toVector_x * toVector_x + toVector_y * toVector_y + toVector_z * toVector_z; + + if (sqdist == 0 || (maxDistanceDelta >= 0 && sqdist <= maxDistanceDelta * maxDistanceDelta)) + { + return new Vec3(target.getX(), target.getY(), target.getZ()); + } + float dist = (float) Math.sqrt(sqdist); + + return new Vec3(current.x + toVector_x / dist * maxDistanceDelta, + current.y + toVector_y / dist * maxDistanceDelta, + current.z + toVector_z / dist * maxDistanceDelta); + } + + + // Moves a point /current/ in a straight line towards a /target/ point. + public static Vec3 getDirection(Vec3 target, Vec3 current, float multiplicationFactor) + { + double toVector_x = target.x() - current.x; + double toVector_y = target.y() - current.y; + double toVector_z = target.z() - current.z; + + return new Vec3( + toVector_x * multiplicationFactor, + toVector_y * multiplicationFactor, + toVector_z * multiplicationFactor); + } + + + // Returns a copy of /vector/ with its magnitude clamped to /maxLength/. + public static Vec3 ClampMagnitude(Vec3 vector, float maxLength) + { + double sqrMag = SqrMagnitude(vector); + if (sqrMag > maxLength * maxLength) + { + float mag = (float) Math.sqrt(sqrMag); + //these intermediate variables force the intermediate result to be + //of float precision. without this, the intermediate result can be of higher + //precision, which changes behavior. + double normalized_x = vector.x / mag; + double normalized_y = vector.y / mag; + double normalized_z = vector.z / mag; + return new Vec3(normalized_x * maxLength, + normalized_y * maxLength, + normalized_z * maxLength); + } + return vector; + } + + + public static double SqrMagnitude(Vec3 vector) + { + return vector.x * vector.x + vector.y * vector.y + vector.z * vector.z; + } + +} diff --git a/src/api/java/leaf/cosmere/api/math/XPHelper.java b/src/api/java/leaf/cosmere/api/math/XPHelper.java new file mode 100644 index 000000000..3bc8d80cb --- /dev/null +++ b/src/api/java/leaf/cosmere/api/math/XPHelper.java @@ -0,0 +1,66 @@ +/* + * File updated ~ 12 - 10 - 2022 ~ Leaf + */ + +package leaf.cosmere.api.math; + +import net.minecraft.util.Mth; +import net.minecraft.world.entity.player.Player; + +public class XPHelper +{ + + /** + * A copy of the related function in Player, except without the call to forge event + * see {@link Player#giveExperiencePoints} + */ + public static void giveExperiencePoints(Player player, int points) + { + player.increaseScore(points); + player.experienceProgress += (float) points / (float) player.getXpNeededForNextLevel(); + player.totalExperience = Mth.clamp(player.totalExperience + points, 0, Integer.MAX_VALUE); + + while (player.experienceProgress < 0.0F) + { + float f = player.experienceProgress * (float) player.getXpNeededForNextLevel(); + if (player.experienceLevel > 0) + { + player.giveExperienceLevels(-1); + player.experienceProgress = 1.0F + f / (float) player.getXpNeededForNextLevel(); + } + else + { + player.giveExperienceLevels(-1); + player.experienceProgress = 0.0F; + } + } + + while (player.experienceProgress >= 1.0F) + { + player.experienceProgress = (player.experienceProgress - 1.0F) * (float) player.getXpNeededForNextLevel(); + player.giveExperienceLevels(1); + player.experienceProgress /= (float) player.getXpNeededForNextLevel(); + } + } + + + /** + * A way to see xp needed for a specific level + * see {@link Player#getXpNeededForNextLevel}#() + */ + public static int getXpNeededForNextLevel(int playerLevel) + { + if (playerLevel >= 30) + { + return 112 + (playerLevel - 30) * 9; + } + else if (playerLevel >= 15) + { + return 37 + (playerLevel - 15) * 5; + } + else + { + return 7 + playerLevel * 2; + } + } +} diff --git a/src/api/java/leaf/cosmere/api/providers/IAttributeProvider.java b/src/api/java/leaf/cosmere/api/providers/IAttributeProvider.java new file mode 100644 index 000000000..248c8d3ab --- /dev/null +++ b/src/api/java/leaf/cosmere/api/providers/IAttributeProvider.java @@ -0,0 +1,29 @@ +/* + * File updated ~ 8 - 10 - 2022 ~ Leaf + */ + +package leaf.cosmere.api.providers; + +import net.minecraft.MethodsReturnNonnullByDefault; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.ai.attributes.Attribute; +import net.minecraftforge.registries.ForgeRegistries; + +@MethodsReturnNonnullByDefault +public interface IAttributeProvider extends IBaseProvider +{ + + Attribute getAttribute(); + + @Override + default ResourceLocation getRegistryName() + { + return ForgeRegistries.ATTRIBUTES.getKey(getAttribute()); + } + + @Override + default String getTranslationKey() + { + return getAttribute().getDescriptionId(); + } +} \ No newline at end of file diff --git a/src/api/java/leaf/cosmere/api/providers/IBaseProvider.java b/src/api/java/leaf/cosmere/api/providers/IBaseProvider.java new file mode 100644 index 000000000..f08f383b0 --- /dev/null +++ b/src/api/java/leaf/cosmere/api/providers/IBaseProvider.java @@ -0,0 +1,30 @@ +/* + * File updated ~ 8 - 10 - 2022 ~ Leaf + */ + +package leaf.cosmere.api.providers; + +import leaf.cosmere.api.text.IHasTextComponent; +import leaf.cosmere.api.text.IHasTranslationKey; +import net.minecraft.MethodsReturnNonnullByDefault; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; + +@MethodsReturnNonnullByDefault +public interface IBaseProvider extends IHasTextComponent, IHasTranslationKey +{ + ResourceLocation getRegistryName(); + + default String getName() + { + return getRegistryName().getPath(); + } + + + @Override + default Component getTextComponent() + { + return Component.translatable(getTranslationKey()); + } + +} \ No newline at end of file diff --git a/src/api/java/leaf/cosmere/api/providers/IBlockProvider.java b/src/api/java/leaf/cosmere/api/providers/IBlockProvider.java new file mode 100644 index 000000000..9ae77cbad --- /dev/null +++ b/src/api/java/leaf/cosmere/api/providers/IBlockProvider.java @@ -0,0 +1,30 @@ +/* + * File updated ~ 8 - 10 - 2022 ~ Leaf + */ + +package leaf.cosmere.api.providers; + +import net.minecraft.MethodsReturnNonnullByDefault; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.block.Block; +import net.minecraftforge.registries.ForgeRegistries; + +@MethodsReturnNonnullByDefault +public interface IBlockProvider extends IItemProvider +{ + + Block getBlock(); + + @Override + default ResourceLocation getRegistryName() + { + //Make sure to use the block's registry name in case it somehow doesn't match + return ForgeRegistries.BLOCKS.getKey(getBlock()); + } + + @Override + default String getTranslationKey() + { + return getBlock().getDescriptionId(); + } +} \ No newline at end of file diff --git a/src/api/java/leaf/cosmere/api/providers/ICosmereEffectProvider.java b/src/api/java/leaf/cosmere/api/providers/ICosmereEffectProvider.java new file mode 100644 index 000000000..d2c5928fa --- /dev/null +++ b/src/api/java/leaf/cosmere/api/providers/ICosmereEffectProvider.java @@ -0,0 +1,26 @@ +/* + * File updated ~ 28 - 10 - 2023 ~ Leaf + */ + +package leaf.cosmere.api.providers; + +import leaf.cosmere.api.CosmereAPI; +import leaf.cosmere.api.cosmereEffect.CosmereEffect; +import net.minecraft.resources.ResourceLocation; + +public interface ICosmereEffectProvider extends IBaseProvider +{ + CosmereEffect getEffect(); + + @Override + default ResourceLocation getRegistryName() + { + return CosmereAPI.cosmereEffectRegistry().getKey(getEffect()); + } + + @Override + default String getTranslationKey() + { + return getEffect().getTranslationKey(); + } +} diff --git a/src/api/java/leaf/cosmere/api/providers/IEntityTypeProvider.java b/src/api/java/leaf/cosmere/api/providers/IEntityTypeProvider.java new file mode 100644 index 000000000..ba56f62b9 --- /dev/null +++ b/src/api/java/leaf/cosmere/api/providers/IEntityTypeProvider.java @@ -0,0 +1,37 @@ +/* + * File updated ~ 8 - 10 - 2022 ~ Leaf + */ + +package leaf.cosmere.api.providers; + +import net.minecraft.MethodsReturnNonnullByDefault; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.EntityType; +import net.minecraftforge.registries.ForgeRegistries; + +@MethodsReturnNonnullByDefault +public interface IEntityTypeProvider extends IBaseProvider +{ + + EntityType getEntityType(); + + @Override + default ResourceLocation getRegistryName() + { + return ForgeRegistries.ENTITY_TYPES.getKey(getEntityType()); + } + + @Override + default Component getTextComponent() + { + return getEntityType().getDescription(); + } + + @Override + default String getTranslationKey() + { + return getEntityType().getDescriptionId(); + } + +} \ No newline at end of file diff --git a/src/api/java/leaf/cosmere/api/providers/IItemProvider.java b/src/api/java/leaf/cosmere/api/providers/IItemProvider.java new file mode 100644 index 000000000..fc4cfa63a --- /dev/null +++ b/src/api/java/leaf/cosmere/api/providers/IItemProvider.java @@ -0,0 +1,45 @@ +/* + * File updated ~ 8 - 10 - 2022 ~ Leaf + */ + +package leaf.cosmere.api.providers; + +import net.minecraft.MethodsReturnNonnullByDefault; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.ItemLike; +import net.minecraftforge.registries.ForgeRegistries; + +@MethodsReturnNonnullByDefault +public interface IItemProvider extends IBaseProvider, ItemLike +{ + + /** + * Creates an item stack of size one using the item this provider represents. + */ + default ItemStack getItemStack() + { + return getItemStack(1); + } + + /** + * Creates an item stack of the given size using the item this provider represents. + * + * @param size Size of the stack. + */ + default ItemStack getItemStack(int size) + { + return new ItemStack(asItem(), size); + } + + @Override + default ResourceLocation getRegistryName() + { + return ForgeRegistries.ITEMS.getKey(asItem()); + } + + default String getTranslationKey() + { + return asItem().getDescriptionId(); + } +} \ No newline at end of file diff --git a/src/api/java/leaf/cosmere/api/providers/IManifestationProvider.java b/src/api/java/leaf/cosmere/api/providers/IManifestationProvider.java new file mode 100644 index 000000000..cf4a434f2 --- /dev/null +++ b/src/api/java/leaf/cosmere/api/providers/IManifestationProvider.java @@ -0,0 +1,27 @@ +/* + * File updated ~ 8 - 10 - 2022 ~ Leaf + */ + +package leaf.cosmere.api.providers; + +import leaf.cosmere.api.CosmereAPI; +import leaf.cosmere.api.manifestation.Manifestation; +import net.minecraft.resources.ResourceLocation; + +public interface IManifestationProvider extends IBaseProvider +{ + Manifestation getManifestation(); + + @Override + default ResourceLocation getRegistryName() + { + return CosmereAPI.manifestationRegistry().getKey(getManifestation()); + } + + + @Override + default String getTranslationKey() + { + return getManifestation().getTranslationKey(); + } +} diff --git a/src/api/java/leaf/cosmere/api/providers/IMobEffectProvider.java b/src/api/java/leaf/cosmere/api/providers/IMobEffectProvider.java new file mode 100644 index 000000000..d849e2a1a --- /dev/null +++ b/src/api/java/leaf/cosmere/api/providers/IMobEffectProvider.java @@ -0,0 +1,29 @@ +/* + * File updated ~ 8 - 10 - 2022 ~ Leaf + */ + +package leaf.cosmere.api.providers; + +import net.minecraft.MethodsReturnNonnullByDefault; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.effect.MobEffect; +import net.minecraftforge.registries.ForgeRegistries; + +@MethodsReturnNonnullByDefault +public interface IMobEffectProvider extends IBaseProvider +{ + + MobEffect getMobEffect(); + + @Override + default ResourceLocation getRegistryName() + { + return ForgeRegistries.MOB_EFFECTS.getKey(getMobEffect()); + } + + @Override + default String getTranslationKey() + { + return getMobEffect().getDescriptionId(); + } +} \ No newline at end of file diff --git a/src/api/java/leaf/cosmere/api/spiritweb/ISpiritweb.java b/src/api/java/leaf/cosmere/api/spiritweb/ISpiritweb.java new file mode 100644 index 000000000..cbf9ad396 --- /dev/null +++ b/src/api/java/leaf/cosmere/api/spiritweb/ISpiritweb.java @@ -0,0 +1,126 @@ +/* + * File updated ~ 29 - 10 - 2023 ~ Leaf + * File updated ~ 2 - 5 - 2025 ~ SoaringEaqle + */ + +package leaf.cosmere.api.spiritweb; + +import leaf.cosmere.api.ISpiritwebSubmodule; +import leaf.cosmere.api.Manifestations; +import leaf.cosmere.api.cosmereEffect.CosmereEffect; +import leaf.cosmere.api.cosmereEffect.CosmereEffectInstance; +import leaf.cosmere.api.investiture.IInvestiture; +import leaf.cosmere.api.investiture.KineticInvestiture; +import leaf.cosmere.api.manifestation.Manifestation; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; +import net.minecraftforge.client.event.RenderLevelStageEvent; +import net.minecraftforge.common.util.INBTSerializable; +import net.minecraftforge.event.entity.player.PlayerEvent; + +import javax.annotation.Nullable; +import java.util.*; + +public interface ISpiritweb extends INBTSerializable +{ + void tick(); + + LivingEntity getLiving(); + + boolean hasManifestation(Manifestation manifestation); + + boolean hasManifestation(Manifestation manifestation, boolean ignoreTemporaryPower); + + void giveManifestation(Manifestation manifestation, int i); + + void removeManifestation(Manifestation manifestation); + + Manifestation getSelectedManifestation(); + + boolean canTickManifestation(Manifestation manifestation); + + int nextMode(Manifestation manifestation); + + int previousMode(Manifestation manifestation); + + void setMode(Manifestation manifestation, int mode); + + int getMode(Manifestation manifestation); + + void syncToClients(@Nullable ServerPlayer serverPlayerEntity); + + void deactivateCurrentManifestation(); + + void deactivateManifestations(); + + void clearManifestations(); + + List getAvailableManifestations(); + + List getAvailableManifestations(boolean ignoreTemporaryPower); + + HashMap getManifestations(); + + HashMap getManifestations(boolean ignoreTemporaryPower, boolean ignoreInactivePower); + + String changeManifestation(int dir); + + void renderWorldEffects(RenderLevelStageEvent event); + + void setSelectedManifestation(Manifestation manifestation); + + + void onPlayerClone(PlayerEvent.Clone event, ISpiritweb oldSpiritWeb); + + CompoundTag getCompoundTag(); + + ISpiritwebSubmodule getSubmodule(Manifestations.ManifestationTypes manifestationType); + + Map getSubmodules(); + + void tickEffects(); + + void addEffect(CosmereEffectInstance newEffect); + + void addEffect(CosmereEffectInstance newEffect, @Nullable Entity sourceEntity); + + void onEffectAdded(CosmereEffectInstance newEffect, Entity sourceEntity); + + void onEffectUpdated(CosmereEffectInstance cosmereEffectInstance, boolean forced, Entity entity); + + void removeEffect(UUID uuid); + + void onEffectRemoved(CosmereEffectInstance cosmereEffectInstance); + + int totalStrengthOfEffect(CosmereEffect cosmereEffect); + + CosmereEffectInstance getEffect(UUID uuid); + + boolean hasEffect(CosmereEffect effect); + + Set> getEffects(); + + KineticInvestiture findInvestiture(Manifestation[] appManifest); + + //double currentBEUDraw(List list); + + double runInvestiturePull(Manifestation manifestation); + + double currentBEUDraw(List list); + double currentBEU(); + + double getMaxBEU(); + void setMaxBEU(double maxBEU); + + HashSet availableInvestitures(Manifestation manifest); + + void mergeOrAddInvestiture(IInvestiture invest); + + void clean(); + + boolean hasInvestiture(IInvestiture investiture); + + +} diff --git a/src/api/java/leaf/cosmere/api/text/IHasTextComponent.java b/src/api/java/leaf/cosmere/api/text/IHasTextComponent.java new file mode 100644 index 000000000..9b2d3048c --- /dev/null +++ b/src/api/java/leaf/cosmere/api/text/IHasTextComponent.java @@ -0,0 +1,14 @@ +/* + * File updated ~ 8 - 10 - 2022 ~ Leaf + */ + +package leaf.cosmere.api.text; + +import net.minecraft.MethodsReturnNonnullByDefault; +import net.minecraft.network.chat.Component; + +@MethodsReturnNonnullByDefault +public interface IHasTextComponent +{ + Component getTextComponent(); +} \ No newline at end of file diff --git a/src/api/java/leaf/cosmere/api/text/IHasTranslationKey.java b/src/api/java/leaf/cosmere/api/text/IHasTranslationKey.java new file mode 100644 index 000000000..f16e92c01 --- /dev/null +++ b/src/api/java/leaf/cosmere/api/text/IHasTranslationKey.java @@ -0,0 +1,13 @@ +/* + * File updated ~ 8 - 10 - 2022 ~ Leaf + */ + +package leaf.cosmere.api.text; + +import net.minecraft.MethodsReturnNonnullByDefault; + +@MethodsReturnNonnullByDefault +public interface IHasTranslationKey +{ + String getTranslationKey(); +} \ No newline at end of file diff --git a/src/api/java/leaf/cosmere/api/text/StringHelper.java b/src/api/java/leaf/cosmere/api/text/StringHelper.java new file mode 100644 index 000000000..4b548419d --- /dev/null +++ b/src/api/java/leaf/cosmere/api/text/StringHelper.java @@ -0,0 +1,27 @@ +/* + * File updated ~ 8 - 10 - 2022 ~ Leaf + */ + +package leaf.cosmere.api.text; + +import java.util.Arrays; +import java.util.Locale; +import java.util.stream.Collectors; + +public class StringHelper +{ + + public static String fixCapitalisation(String text) + { + String original = text.trim().replace(" ", "").replace("_", " ").replace("/", "."); + String output = Arrays.stream(original.split("\\s+")).map(t -> t.substring(0, 1).toUpperCase() + t.substring(1)).collect(Collectors.joining(" ")); + return output; + } + + //Basically the opposite, make string suitable for path + public static String fixPath(String text) + { + String output = text.trim().toLowerCase(Locale.ROOT).replace(" ", "").replace(" ", "_").replace("/", "."); + return output; + } +} diff --git a/src/api/java/leaf/cosmere/api/text/TextHelper.java b/src/api/java/leaf/cosmere/api/text/TextHelper.java new file mode 100644 index 000000000..5432161c6 --- /dev/null +++ b/src/api/java/leaf/cosmere/api/text/TextHelper.java @@ -0,0 +1,61 @@ +/* + * File updated ~ 8 - 10 - 2022 ~ Leaf + */ + +package leaf.cosmere.api.text; + +import leaf.cosmere.api.helpers.PlayerHelper; +import net.minecraft.ChatFormatting; +import net.minecraft.network.chat.ClickEvent; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.HoverEvent; +import net.minecraft.network.chat.MutableComponent; +import net.minecraft.server.MinecraftServer; +import net.minecraft.server.level.ServerLevel; + +import java.util.UUID; + +public class TextHelper +{ + public static MutableComponent getPlayerTextObject(ServerLevel world, UUID id) + { + return getPlayerTextObject(world.getServer(), id); + } + + public static MutableComponent getPlayerTextObject(MinecraftServer server, UUID id) + { + String playerName = PlayerHelper.getPlayerName(id, server); + return createTextComponentWithTip(playerName, id.toString()); + } + + public static MutableComponent createTextComponentWithTip(String text, String tooltipText) + { + //Always surround tool tip items with brackets + MutableComponent textComponent = Component.literal("[" + text + "]"); + textComponent.withStyle(style -> style.applyFormat(ChatFormatting.GREEN)//color tool tip items green + .withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, Component.literal(tooltipText))) + .withClickEvent(new ClickEvent(ClickEvent.Action.COPY_TO_CLIPBOARD, tooltipText))); + return textComponent; + } + + public static MutableComponent createTextWithTooltip(MutableComponent translation, MutableComponent description) + { + //Always surround tool tip items with brackets + translation.withStyle(style -> + { + return style.withColor(ChatFormatting.GREEN)//color tool tip items green + .withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, description)); + }); + return translation; + } + + public static MutableComponent createTranslatedText(String s, Object... a) + { + return Component.translatable(s, a); + } + + public static MutableComponent createText(Object s) + { + return Component.literal(s.toString()); + } +} diff --git a/src/aviar/java/leaf/cosmere/aviar/client/AviarForgeClientEvents.java b/src/aviar/java/leaf/cosmere/aviar/client/AviarForgeClientEvents.java new file mode 100644 index 000000000..b55e07329 --- /dev/null +++ b/src/aviar/java/leaf/cosmere/aviar/client/AviarForgeClientEvents.java @@ -0,0 +1,15 @@ +/* + * File updated ~ 20 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.aviar.client; + +import leaf.cosmere.common.Cosmere; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.fml.common.Mod; + +@Mod.EventBusSubscriber(modid = Cosmere.MODID, value = Dist.CLIENT) +public class AviarForgeClientEvents +{ + +} diff --git a/src/aviar/java/leaf/cosmere/aviar/client/AviarKeybindings.java b/src/aviar/java/leaf/cosmere/aviar/client/AviarKeybindings.java new file mode 100644 index 000000000..10645089a --- /dev/null +++ b/src/aviar/java/leaf/cosmere/aviar/client/AviarKeybindings.java @@ -0,0 +1,35 @@ +/* + * File updated ~ 19 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.aviar.client; + +import com.mojang.blaze3d.platform.InputConstants; +import leaf.cosmere.client.settings.KeyConflictContext; +import leaf.cosmere.aviar.common.Aviar; +import net.minecraft.client.KeyMapping; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.client.event.RegisterKeyMappingsEvent; +import net.minecraftforge.client.settings.KeyModifier; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.common.Mod.EventBusSubscriber.Bus; + +@Mod.EventBusSubscriber(value = Dist.CLIENT, modid = Aviar.MODID, bus = Bus.MOD) +public class AviarKeybindings +{ + + //public static KeyMapping AVIAR_KEYBINDING; + + @SubscribeEvent + public static void register(RegisterKeyMappingsEvent event) + { + //event.register((AVIAR_KEYBINDING = new KeyMapping("name", GLFW.GLFW_KEY_G, KEYS_CATEGORY))); + + } + + public static KeyMapping createKeybinding(String description, KeyModifier keyModifier, int keyCode, String category) + { + return new KeyMapping(description, KeyConflictContext.DEFAULT, keyModifier, InputConstants.Type.KEYSYM.getOrCreate(keyCode), category); + } +} diff --git a/src/aviar/java/leaf/cosmere/aviar/client/AviarModClientEvents.java b/src/aviar/java/leaf/cosmere/aviar/client/AviarModClientEvents.java new file mode 100644 index 000000000..8c27c30ae --- /dev/null +++ b/src/aviar/java/leaf/cosmere/aviar/client/AviarModClientEvents.java @@ -0,0 +1,51 @@ +/* + * File updated ~ 20 - 12 - 2024 ~ Leaf + */ + +package leaf.cosmere.aviar.client; + +import leaf.cosmere.api.CosmereAPI; +import leaf.cosmere.aviar.client.render.layers.AviarOnShoulderLayer; +import leaf.cosmere.aviar.common.Aviar; +import leaf.cosmere.aviar.common.registries.AviarEntityTypes; +import net.minecraft.client.renderer.entity.EntityRenderer; +import net.minecraft.client.renderer.entity.EntityRenderers; +import net.minecraft.client.renderer.entity.LivingEntityRenderer; +import net.minecraft.client.renderer.entity.ParrotRenderer; +import net.minecraft.world.entity.player.Player; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.client.event.EntityRenderersEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; + +@Mod.EventBusSubscriber(modid = Aviar.MODID, value = Dist.CLIENT, bus = Mod.EventBusSubscriber.Bus.MOD) +public class AviarModClientEvents +{ + @SubscribeEvent + public static void init(final FMLClientSetupEvent event) + { + //register the parrot as a normal rendering mob entity + EntityRenderers.register(AviarEntityTypes.AVIAR_ENTITY.get(), ParrotRenderer::new); + CosmereAPI.logger.info("Cosmere Aviar mod client setup complete!"); + } + + @SubscribeEvent + public static void addLayers(EntityRenderersEvent.AddLayers evt) + { + //add parrot layers to the player model + addPlayerLayer(evt, "default"); + addPlayerLayer(evt, "slim"); + } + + @SuppressWarnings({"rawtypes", "unchecked"}) + private static void addPlayerLayer(EntityRenderersEvent.AddLayers evt, String skin) + { + EntityRenderer renderer = evt.getSkin(skin); + + if (renderer instanceof LivingEntityRenderer livingRenderer) + { + livingRenderer.addLayer(new AviarOnShoulderLayer(livingRenderer, evt.getEntityModels())); + } + } +} diff --git a/src/aviar/java/leaf/cosmere/aviar/client/render/layers/AviarOnShoulderLayer.java b/src/aviar/java/leaf/cosmere/aviar/client/render/layers/AviarOnShoulderLayer.java new file mode 100644 index 000000000..047172300 --- /dev/null +++ b/src/aviar/java/leaf/cosmere/aviar/client/render/layers/AviarOnShoulderLayer.java @@ -0,0 +1,63 @@ +/* + * File updated ~ 20 - 12 - 2024 ~ Leaf + */ + +package leaf.cosmere.aviar.client.render.layers; + +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import leaf.cosmere.aviar.common.registries.AviarEntityTypes; +import net.minecraft.client.model.ParrotModel; +import net.minecraft.client.model.PlayerModel; +import net.minecraft.client.model.geom.EntityModelSet; +import net.minecraft.client.model.geom.ModelLayers; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.entity.ParrotRenderer; +import net.minecraft.client.renderer.entity.RenderLayerParent; +import net.minecraft.client.renderer.entity.layers.RenderLayer; +import net.minecraft.client.renderer.texture.OverlayTexture; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.animal.Parrot; +import net.minecraft.world.entity.player.Player; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; + +@OnlyIn(Dist.CLIENT) +public class AviarOnShoulderLayer extends RenderLayer> +{ + private final ParrotModel model; + + public AviarOnShoulderLayer(RenderLayerParent> pRenderer, EntityModelSet entityModelSet) + { + super(pRenderer); + this.model = new ParrotModel(entityModelSet.bakeLayer(ModelLayers.PARROT)); + } + + public void render(PoseStack pMatrixStack, MultiBufferSource pBuffer, int pPackedLight, T pLivingEntity, float pLimbSwing, float pLimbSwingAmount, float pPartialTicks, float pAgeInTicks, float pNetHeadYaw, float pHeadPitch) + { + this.render(pMatrixStack, pBuffer, pPackedLight, pLivingEntity, pLimbSwing, pLimbSwingAmount, pNetHeadYaw, pHeadPitch, true); + this.render(pMatrixStack, pBuffer, pPackedLight, pLivingEntity, pLimbSwing, pLimbSwingAmount, pNetHeadYaw, pHeadPitch, false); + } + + private void render(PoseStack pMatrixStack, MultiBufferSource pBuffer, int pPackedLight, T pLivingEntity, float pLimbSwing, float pLimbSwingAmount, float pNetHeadYaw, float pHeadPitch, boolean pLeftShoulder) + { + CompoundTag compoundtag = + pLeftShoulder + ? pLivingEntity.getShoulderEntityLeft() + : pLivingEntity.getShoulderEntityRight(); + + EntityType.byString(compoundtag.getString("id")).filter((entityType) -> + { + return entityType == AviarEntityTypes.AVIAR_ENTITY.get(); + }).ifPresent((entityType) -> + { + pMatrixStack.pushPose(); + pMatrixStack.translate(pLeftShoulder ? 0.4F : -0.4F, pLivingEntity.isCrouching() ? -1.3F : -1.5F, 0.0F); + Parrot.Variant variant = Parrot.Variant.byId(compoundtag.getInt("Variant")); + VertexConsumer vertexconsumer = pBuffer.getBuffer(this.model.renderType(ParrotRenderer.getVariantTexture(variant))); + this.model.renderOnShoulder(pMatrixStack, vertexconsumer, pPackedLight, OverlayTexture.NO_OVERLAY, pLimbSwing, pLimbSwingAmount, pNetHeadYaw, pHeadPitch, pLivingEntity.tickCount); + pMatrixStack.popPose(); + }); + } +} \ No newline at end of file diff --git a/src/aviar/java/leaf/cosmere/aviar/common/Aviar.java b/src/aviar/java/leaf/cosmere/aviar/common/Aviar.java new file mode 100644 index 000000000..752e73571 --- /dev/null +++ b/src/aviar/java/leaf/cosmere/aviar/common/Aviar.java @@ -0,0 +1,122 @@ +/* + * File updated ~ 20 - 12 - 2024 ~ Leaf + */ + +package leaf.cosmere.aviar.common; + +import leaf.cosmere.api.CosmereAPI; +import leaf.cosmere.api.IModModule; +import leaf.cosmere.api.ISpiritwebSubmodule; +import leaf.cosmere.api.Version; +import leaf.cosmere.aviar.common.capabilities.AviarSpiritwebSubmodule; +import leaf.cosmere.aviar.common.config.AviarConfigs; +import leaf.cosmere.aviar.common.registries.*; +import leaf.cosmere.common.Cosmere; +import leaf.cosmere.common.config.CosmereModConfig; +import net.minecraft.resources.ResourceLocation; +import net.minecraftforge.eventbus.api.IEventBus; +import net.minecraftforge.fml.ModLoadingContext; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.config.ModConfig; +import net.minecraftforge.fml.event.config.ModConfigEvent; +import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; +import net.minecraftforge.fml.event.lifecycle.InterModEnqueueEvent; +import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; + +@Mod(Aviar.MODID) +public class Aviar implements IModModule +{ + public static final String MODID = "aviar"; + + public static Aviar instance; + + public final Version versionNumber; + + public Aviar() + { + Cosmere.addModule(instance = this); + IEventBus modBus = FMLJavaModLoadingContext.get().getModEventBus(); + + AviarConfigs.registerConfigs(ModLoadingContext.get()); + + modBus.addListener(this::commonSetup); + modBus.addListener(this::onConfigLoad); + modBus.addListener(this::onConfigReload); + modBus.addListener(this::imcQueue); + + AviarAttributes.ATTRIBUTES.register(modBus); + AviarBiomes.BIOMES.register(modBus); + AviarBiomeModifiers.BIOME_MODIFIER_SERIALIZERS.register(modBus); + AviarBlocks.BLOCKS.register(modBus); + AviarEffects.EFFECTS.register(modBus); + AviarFeatures.CONFIGURED_FEATURES.register(modBus); + AviarFeatures.PLACED_FEATURES.register(modBus); + AviarEntityTypes.ENTITY_TYPES.register(modBus); + AviarItems.ITEMS.register(modBus); + AviarManifestations.MANIFESTATIONS.register(modBus); + AviarMenuTypes.MENU_TYPES.register(modBus); + AviarRecipes.SPECIAL_RECIPES.register(modBus); + AviarStats.STATS.register(modBus); + AviarCreativeTabs.CREATIVE_TABS.register(modBus); + + versionNumber = new Version(ModLoadingContext.get().getActiveContainer()); + } + + public static ResourceLocation rl(String path) + { + return new ResourceLocation(Aviar.MODID, path); + } + + private void commonSetup(FMLCommonSetupEvent event) + { + CosmereAPI.logger.info("Cosmere: Aviar module Version {} initializing...", versionNumber); + + event.enqueueWork(() -> + { + AviarStats.initStatEntries(); + }); + + + //packetHandler.initialize(); + } + + private void imcQueue(InterModEnqueueEvent event) + { + } + + @Override + public Version getVersion() + { + return versionNumber; + } + + @Override + public String getName() + { + return "Aviar"; + } + + @Override + public ISpiritwebSubmodule makeSubmodule() + { + return new AviarSpiritwebSubmodule(); + } + + private void onConfigLoad(ModConfigEvent configEvent) + { + ModConfig config = configEvent.getConfig(); + if (config.getModId().equals(MODID) && config instanceof CosmereModConfig cosmereModConfig) + { + cosmereModConfig.clearCache(); + } + } + + private void onConfigReload(ModConfigEvent.Reloading configEvent) + { + ModConfig config = configEvent.getConfig(); + if (config.getModId().equals(MODID) && config instanceof CosmereModConfig cosmereModConfig) + { + cosmereModConfig.clearCache(); + } + } +} \ No newline at end of file diff --git a/src/aviar/java/leaf/cosmere/aviar/common/capabilities/AviarSpiritwebSubmodule.java b/src/aviar/java/leaf/cosmere/aviar/common/capabilities/AviarSpiritwebSubmodule.java new file mode 100644 index 000000000..87c4f7b59 --- /dev/null +++ b/src/aviar/java/leaf/cosmere/aviar/common/capabilities/AviarSpiritwebSubmodule.java @@ -0,0 +1,62 @@ +/* + * File updated ~ 5 - 3 - 2025 ~ Leaf + */ + +package leaf.cosmere.aviar.common.capabilities; + +import leaf.cosmere.api.ISpiritwebSubmodule; +import leaf.cosmere.api.Manifestations; +import leaf.cosmere.api.spiritweb.ISpiritweb; +import leaf.cosmere.aviar.common.entity.AviarBird; +import leaf.cosmere.aviar.common.registries.AviarEntityTypes; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.animal.Parrot; +import net.minecraft.world.entity.player.Player; + +public class AviarSpiritwebSubmodule implements ISpiritwebSubmodule +{ + @Override + public void tickServer(ISpiritweb spiritweb) + { + if (spiritweb.getLiving() instanceof Player player) + { + final int tickOffset = Manifestations.ManifestationTypes.AVIAR.getID(); + if ((player.tickCount + tickOffset) % 20 != 0) + { + return; + } + + //tick any aviar bonds from being on shoulder + final CompoundTag shoulderEntityLeft = player.getShoulderEntityLeft(); + if (!shoulderEntityLeft.isEmpty()) + { + tickAviar(player, shoulderEntityLeft); + } + + final CompoundTag shoulderEntityRight = player.getShoulderEntityRight(); + if (!shoulderEntityRight.isEmpty()) + { + tickAviar(player, shoulderEntityRight); + } + + } + } + + @Override + public void drainInvestiture(ISpiritweb data, double strength) + { + //todo should this disrupt the bond? + } + + private void tickAviar(Player player, CompoundTag compoundtag) + { + EntityType.byString(compoundtag.getString("id")) + .filter((entityType) -> entityType == AviarEntityTypes.AVIAR_ENTITY.get()) + .ifPresent((entityType) -> + { + final Parrot.Variant variant = Parrot.Variant.byId(compoundtag.getInt("Variant")); + AviarBird.tickBond(player, variant, compoundtag.getUUID("UUID").toString()); + }); + } +} diff --git a/src/aviar/java/leaf/cosmere/aviar/common/commands/AviarCommands.java b/src/aviar/java/leaf/cosmere/aviar/common/commands/AviarCommands.java new file mode 100644 index 000000000..75720422f --- /dev/null +++ b/src/aviar/java/leaf/cosmere/aviar/common/commands/AviarCommands.java @@ -0,0 +1,23 @@ +/* + * File updated ~ 19 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.aviar.common.commands; + +import com.mojang.brigadier.CommandDispatcher; +import leaf.cosmere.common.Cosmere; +import leaf.cosmere.aviar.common.commands.subcommands.AviarCommand; +import net.minecraft.commands.CommandSourceStack; +import net.minecraft.commands.Commands; + + +public class AviarCommands +{ + + public static void register(CommandDispatcher dispatcher) + { + dispatcher.register(Commands.literal(Cosmere.MODID) + .then(AviarCommand.register(dispatcher)) + ); + } +} diff --git a/src/aviar/java/leaf/cosmere/aviar/common/commands/subcommands/AviarCommand.java b/src/aviar/java/leaf/cosmere/aviar/common/commands/subcommands/AviarCommand.java new file mode 100644 index 000000000..5dcab142a --- /dev/null +++ b/src/aviar/java/leaf/cosmere/aviar/common/commands/subcommands/AviarCommand.java @@ -0,0 +1,50 @@ +/* + * File updated ~ 19 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.aviar.common.commands.subcommands; + +import com.mojang.brigadier.CommandDispatcher; +import com.mojang.brigadier.builder.ArgumentBuilder; +import com.mojang.brigadier.context.CommandContext; +import com.mojang.brigadier.exceptions.CommandSyntaxException; +import leaf.cosmere.api.text.TextHelper; +import leaf.cosmere.common.commands.subcommands.ModCommand; +import net.minecraft.commands.CommandSourceStack; +import net.minecraft.commands.Commands; +import net.minecraft.commands.arguments.EntityArgument; +import net.minecraft.server.level.ServerPlayer; + +import java.util.Collection; + +public class AviarCommand extends ModCommand +{ + public static ArgumentBuilder register(CommandDispatcher dispatcher) + { + return Commands.literal("aviarTest") + .requires(context -> context.hasPermission(2)) + .executes(AviarCommand::aviarTest) + .then(Commands.argument("target", EntityArgument.players()) + .requires(context -> context.hasPermission(2)) + .executes(AviarCommand::aviarTest)); + } + + private static int aviarTest(CommandContext context) throws CommandSyntaxException + { + Collection players = getPlayers(context, 3); + + for (ServerPlayer player : players) + { + player.displayClientMessage(TextHelper.createText("Test Received"), false); + } + + return SINGLE_SUCCESS; + } + + @Override + public int run(CommandContext context) throws CommandSyntaxException + { + return SINGLE_SUCCESS; + } + +} \ No newline at end of file diff --git a/src/aviar/java/leaf/cosmere/aviar/common/config/AviarConfigs.java b/src/aviar/java/leaf/cosmere/aviar/common/config/AviarConfigs.java new file mode 100644 index 000000000..77def3cf2 --- /dev/null +++ b/src/aviar/java/leaf/cosmere/aviar/common/config/AviarConfigs.java @@ -0,0 +1,20 @@ +/* + * File updated ~ 19 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.aviar.common.config; + +import leaf.cosmere.common.config.CosmereConfigHelper; +import net.minecraftforge.fml.ModContainer; +import net.minecraftforge.fml.ModLoadingContext; + +public class AviarConfigs +{ + public static final AviarServerConfig SERVER = new AviarServerConfig(); + + public static void registerConfigs(ModLoadingContext modLoadingContext) + { + ModContainer modContainer = modLoadingContext.getActiveContainer(); + CosmereConfigHelper.registerConfig(modContainer, SERVER); + } +} diff --git a/src/aviar/java/leaf/cosmere/aviar/common/config/AviarServerConfig.java b/src/aviar/java/leaf/cosmere/aviar/common/config/AviarServerConfig.java new file mode 100644 index 000000000..8f1c4bd76 --- /dev/null +++ b/src/aviar/java/leaf/cosmere/aviar/common/config/AviarServerConfig.java @@ -0,0 +1,54 @@ +/* + * File updated ~ 20 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.aviar.common.config; + +import leaf.cosmere.common.config.ICosmereConfig; +import net.minecraftforge.common.ForgeConfigSpec; +import net.minecraftforge.fml.config.ModConfig.Type; + +public class AviarServerConfig implements ICosmereConfig +{ + + private final ForgeConfigSpec configSpec; + + public final ForgeConfigSpec.DoubleValue AVIAR_BONUS_RANGE; + + + AviarServerConfig() + { + ForgeConfigSpec.Builder builder = new ForgeConfigSpec.Builder(); + builder.comment("Aviar Config. This config is synced between server and client.").push("aviar"); + + AVIAR_BONUS_RANGE = builder.comment("How far away the player the tamed aviar can be and still get a bonus").defineInRange("aviar_bonus_range", 15d, 1d, 20d); + + + builder.pop(); + configSpec = builder.build(); + } + + @Override + public String getFileName() + { + return "AviarServer"; + } + + @Override + public ForgeConfigSpec getConfigSpec() + { + return configSpec; + } + + @Override + public Type getConfigType() + { + return Type.SERVER; + } + + @Override + public void clearCache() + { + AVIAR_BONUS_RANGE.clearCache(); + } +} \ No newline at end of file diff --git a/src/aviar/java/leaf/cosmere/aviar/common/effects/AviarBondEffect.java b/src/aviar/java/leaf/cosmere/aviar/common/effects/AviarBondEffect.java new file mode 100644 index 000000000..aadcec133 --- /dev/null +++ b/src/aviar/java/leaf/cosmere/aviar/common/effects/AviarBondEffect.java @@ -0,0 +1,15 @@ +/* + * File updated ~ 19 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.aviar.common.effects; + +import leaf.cosmere.api.cosmereEffect.CosmereEffect; + +public class AviarBondEffect extends CosmereEffect +{ + public AviarBondEffect() + { + super(); + } +} diff --git a/src/aviar/java/leaf/cosmere/aviar/common/entity/AviarBird.java b/src/aviar/java/leaf/cosmere/aviar/common/entity/AviarBird.java new file mode 100644 index 000000000..59ac6517c --- /dev/null +++ b/src/aviar/java/leaf/cosmere/aviar/common/entity/AviarBird.java @@ -0,0 +1,113 @@ +/* + * File updated ~ 21 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.aviar.common.entity; + +import leaf.cosmere.api.Manifestations; +import leaf.cosmere.api.cosmereEffect.CosmereEffectInstance; +import leaf.cosmere.aviar.common.config.AviarConfigs; +import leaf.cosmere.aviar.common.items.PatjisFruitItem; +import leaf.cosmere.aviar.common.registries.AviarAttributes; +import leaf.cosmere.aviar.common.registries.AviarEffects; +import leaf.cosmere.common.cap.entity.SpiritwebCapability; +import leaf.cosmere.common.registry.AttributesRegistry; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.entity.AgeableMob; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.ai.attributes.Attribute; +import net.minecraft.world.entity.ai.attributes.AttributeModifier; +import net.minecraft.world.entity.animal.Parrot; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import org.jetbrains.annotations.Nullable; + +public class AviarBird extends Parrot +{ + public AviarBird(EntityType pEntityType, Level pLevel) + { + super(pEntityType, pLevel); + } + + + @Override + public boolean isFood(ItemStack pStack) + { + return pStack.getItem() instanceof PatjisFruitItem; + } + + @Nullable + @Override + public AgeableMob getBreedOffspring(ServerLevel pLevel, AgeableMob pOtherParent) + { + AviarBird otherParent = (AviarBird) pOtherParent; + Parrot baby = EntityType.PARROT.create(pLevel); + if (baby != null) + { + baby.setVariant(this.random.nextBoolean() ? this.getVariant() : otherParent.getVariant()); + } + return baby; + } + + private void setOffspringAttributes(AviarBird parentOne, AgeableMob parentTwo) + { + //todo - if breeding stats down the line, this is where they would be set + } + + @Override + public void tick() + { + super.tick(); + + //only once per tick, offloaded to be on different ticks to other mods in suite + final int tickOffset = Manifestations.ManifestationTypes.AVIAR.getID(); + if ((this.tickCount + tickOffset) % 20 != 0) + { + return; + } + + final LivingEntity owner = this.getOwner(); + final double range = AviarConfigs.SERVER.AVIAR_BONUS_RANGE.get(); + + if (owner == null || this.distanceTo(owner) > range) + { + return; + } + + tickBond(owner, this.getVariant(), this.getStringUUID()); + } + + public static void tickBond(LivingEntity livingEntity, Variant variant, String aviarUUID) + { + //if owner exists and has spiritweb + SpiritwebCapability.get(livingEntity).ifPresent(data -> + { + final Attribute attribute = switch (variant) + { + //todo decide on finalized attributes changed + // note: I'm unsure if these are the same as the IDs in the previous version // Gerbagel + default -> AttributesRegistry.COGNITIVE_CONCEALMENT.get(); + case BLUE -> AttributesRegistry.COSMERE_FORTUNE.get(); + case GREEN -> AttributesRegistry.XP_RATE_ATTRIBUTE.get(); + case YELLOW_BLUE -> AttributesRegistry.DETERMINATION.get(); + case GRAY -> AviarAttributes.HOSTILE_LIFE_SENSE.get(); + }; + + //todo config + double strength = switch (variant) + { + default -> 10;//cognitive concealment + case BLUE -> 1;//cosmere fortune + case GREEN -> 1;//xp gain + case YELLOW_BLUE -> 5;//determination + case GRAY -> 2;//hostile life sense + }; + + final CosmereEffectInstance effectInstance = CosmereEffectInstance.getOrCreateEffect(AviarEffects.AVIAR_BOND_EFFECT.get(), data, aviarUUID, 1); + effectInstance.setDynamicAttribute(attribute, strength, AttributeModifier.Operation.ADDITION); + + data.addEffect(effectInstance); + }); + } +} diff --git a/src/aviar/java/leaf/cosmere/aviar/common/eventHandlers/AviarCommonForgeEvents.java b/src/aviar/java/leaf/cosmere/aviar/common/eventHandlers/AviarCommonForgeEvents.java new file mode 100644 index 000000000..e9cc39d80 --- /dev/null +++ b/src/aviar/java/leaf/cosmere/aviar/common/eventHandlers/AviarCommonForgeEvents.java @@ -0,0 +1,83 @@ +/* + * File updated ~ 20 - 3 - 2024 ~ Leaf + */ + +package leaf.cosmere.aviar.common.eventHandlers; + +import leaf.cosmere.aviar.common.Aviar; +import leaf.cosmere.aviar.common.commands.AviarCommands; +import leaf.cosmere.aviar.common.registries.AviarItems; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraftforge.common.BasicItemListing; +import net.minecraftforge.event.RegisterCommandsEvent; +import net.minecraftforge.event.entity.player.PlayerInteractEvent; +import net.minecraftforge.event.server.ServerStartedEvent; +import net.minecraftforge.event.server.ServerStoppingEvent; +import net.minecraftforge.event.village.WandererTradesEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; + +@Mod.EventBusSubscriber(modid = Aviar.MODID, bus = Mod.EventBusSubscriber.Bus.FORGE) +public class AviarCommonForgeEvents +{ + + + @SubscribeEvent + public static void onEntityInteract(PlayerInteractEvent.EntityInteract event) + { + if (!(event.getTarget() instanceof LivingEntity target)) + { + return; + } + + ItemStack stack = event.getEntity().getMainHandItem(); + if (!stack.isEmpty()) + { + //if (stack.getItem() instanceof AviarItem aviarItem) + //{ + // + //} + } + } + + + @SubscribeEvent + public static void registerCommands(RegisterCommandsEvent event) + { + AviarCommands.register(event.getDispatcher()); + } + + + @SubscribeEvent + public static void onServerStartingEvent(ServerStartedEvent event) + { + + } + + @SubscribeEvent + public static void onServerStoppingEvent(ServerStoppingEvent event) + { + + } + + @SubscribeEvent + public static void registerTrades(WandererTradesEvent event) + { + final ItemStack price = new ItemStack(Items.EMERALD, 16); + final ItemStack price2 = new ItemStack(Items.NETHER_STAR); + final ItemStack forSale = new ItemStack(AviarItems.PATJIS_FRUIT); + + event.getGenericTrades().add( + new BasicItemListing( + price, + price2, + forSale, + 1, + 8, + 1 + ) + ); + } +} diff --git a/src/aviar/java/leaf/cosmere/aviar/common/eventHandlers/AviarCommonModEvents.java b/src/aviar/java/leaf/cosmere/aviar/common/eventHandlers/AviarCommonModEvents.java new file mode 100644 index 000000000..66566e0a2 --- /dev/null +++ b/src/aviar/java/leaf/cosmere/aviar/common/eventHandlers/AviarCommonModEvents.java @@ -0,0 +1,39 @@ +/* + * File updated ~ 21 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.aviar.common.eventHandlers; + +import leaf.cosmere.aviar.common.Aviar; +import leaf.cosmere.aviar.common.entity.AviarBird; +import leaf.cosmere.aviar.common.registries.AviarAttributes; +import leaf.cosmere.aviar.common.registries.AviarEntityTypes; +import leaf.cosmere.common.registry.AttributesRegistry; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.ai.attributes.AttributeSupplier; +import net.minecraftforge.event.entity.EntityAttributeCreationEvent; +import net.minecraftforge.event.entity.EntityAttributeModificationEvent; +import net.minecraftforge.eventbus.api.EventPriority; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; + + +@Mod.EventBusSubscriber(modid = Aviar.MODID, bus = Mod.EventBusSubscriber.Bus.MOD) +public class AviarCommonModEvents +{ + + @SubscribeEvent(priority = EventPriority.HIGH) + public static void onEntityAttributeModificationEvent(EntityAttributeModificationEvent event) + { + event.add(EntityType.PLAYER, AviarAttributes.HOSTILE_LIFE_SENSE.getAttribute()); + } + + + @SubscribeEvent + public static void entityAttributeEvent(EntityAttributeCreationEvent event) + { + final AttributeSupplier.Builder attributes = AviarBird.createAttributes(); + final AttributeSupplier.Builder add = attributes.add(AttributesRegistry.COGNITIVE_CONCEALMENT.get(), 5); + event.put(AviarEntityTypes.AVIAR_ENTITY.get(), add.build()); + } +} diff --git a/src/aviar/java/leaf/cosmere/aviar/common/items/PatjisFruitItem.java b/src/aviar/java/leaf/cosmere/aviar/common/items/PatjisFruitItem.java new file mode 100644 index 000000000..05d2fe2c3 --- /dev/null +++ b/src/aviar/java/leaf/cosmere/aviar/common/items/PatjisFruitItem.java @@ -0,0 +1,75 @@ +/* + * File updated ~ 5 - 6 - 2024 ~ Leaf + */ + +package leaf.cosmere.aviar.common.items; + +import leaf.cosmere.aviar.common.entity.AviarBird; +import leaf.cosmere.aviar.common.registries.AviarEntityTypes; +import net.minecraft.core.particles.ParticleTypes; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.animal.Parrot; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; + +import java.util.function.Supplier; + +public class PatjisFruitItem extends Item +{ + public PatjisFruitItem(Supplier property) + { + super(property.get()); + } + + @Override + public InteractionResult interactLivingEntity(ItemStack itemStack, Player player, LivingEntity target, InteractionHand hand) + { + //if parrot or aviar + if (hand == InteractionHand.MAIN_HAND && (target instanceof Parrot parrot)) + { + if (!(parrot instanceof AviarBird)) + { + if (!player.level().isClientSide) + { + //convert parrot to aviar + AviarBird birb = AviarEntityTypes.AVIAR_ENTITY.get().create(target.level()); + + if (birb == null) + { + return InteractionResult.FAIL; + } + + //make it the same kind of parrot + birb.restoreFrom(parrot); + + birb.moveTo(birb.getX(), birb.getY(), birb.getZ(), birb.getYRot(), birb.getXRot()); + birb.setDeltaMovement(parrot.getDeltaMovement()); + + parrot.remove(Entity.RemovalReason.DISCARDED); + birb.level().addFreshEntity(birb); + + //todo replace sound + birb.playSound(SoundEvents.PARROT_IMITATE_ENDER_DRAGON, 1.0F, 1.0F); + + for (int i = 0; i < 3; ++i) + { + double d0 = birb.getRandom().nextGaussian() * 0.02D; + double d1 = birb.getRandom().nextGaussian() * 0.02D; + double d2 = birb.getRandom().nextGaussian() * 0.02D; + birb.level().addParticle(ParticleTypes.HEART, birb.getRandomX(1.0D), birb.getRandomY() + 0.5D, birb.getRandomZ(1.0D), d0, d1, d2); + } + itemStack.shrink(1); + } + return InteractionResult.sidedSuccess(player.level().isClientSide); + } + + } + + return InteractionResult.PASS; + } +} diff --git a/src/aviar/java/leaf/cosmere/aviar/common/registries/AviarAttributes.java b/src/aviar/java/leaf/cosmere/aviar/common/registries/AviarAttributes.java new file mode 100644 index 000000000..3911cbc95 --- /dev/null +++ b/src/aviar/java/leaf/cosmere/aviar/common/registries/AviarAttributes.java @@ -0,0 +1,25 @@ +/* + * File updated ~ 21 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.aviar.common.registries; + +import leaf.cosmere.aviar.common.Aviar; +import leaf.cosmere.common.Cosmere; +import leaf.cosmere.common.registration.impl.AttributeDeferredRegister; +import leaf.cosmere.common.registration.impl.AttributeRegistryObject; +import net.minecraft.world.entity.ai.attributes.Attribute; + +public class AviarAttributes +{ + + public static final AttributeDeferredRegister ATTRIBUTES = new AttributeDeferredRegister(Aviar.MODID); + + public static final AttributeRegistryObject HOSTILE_LIFE_SENSE = + ATTRIBUTES.register( + "hostile_life_sense", + Cosmere.MODID, + 0, + 0, + 10); +} diff --git a/src/aviar/java/leaf/cosmere/aviar/common/registries/AviarBiomeModifiers.java b/src/aviar/java/leaf/cosmere/aviar/common/registries/AviarBiomeModifiers.java new file mode 100644 index 000000000..3d8fa92ec --- /dev/null +++ b/src/aviar/java/leaf/cosmere/aviar/common/registries/AviarBiomeModifiers.java @@ -0,0 +1,15 @@ +/* + * File updated ~ 19 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.aviar.common.registries; + +import leaf.cosmere.common.registration.impl.BiomeModifierSerializerDeferredRegister; +import leaf.cosmere.aviar.common.Aviar; + +public class AviarBiomeModifiers +{ + public static final BiomeModifierSerializerDeferredRegister BIOME_MODIFIER_SERIALIZERS = new BiomeModifierSerializerDeferredRegister(Aviar.MODID); + + +} diff --git a/src/aviar/java/leaf/cosmere/aviar/common/registries/AviarBiomes.java b/src/aviar/java/leaf/cosmere/aviar/common/registries/AviarBiomes.java new file mode 100644 index 000000000..6f6eb5be4 --- /dev/null +++ b/src/aviar/java/leaf/cosmere/aviar/common/registries/AviarBiomes.java @@ -0,0 +1,15 @@ +/* + * File updated ~ 19 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.aviar.common.registries; + +import leaf.cosmere.common.registration.impl.BiomeDeferredRegister; +import leaf.cosmere.aviar.common.Aviar; + +public class AviarBiomes +{ + public static final BiomeDeferredRegister BIOMES = new BiomeDeferredRegister(Aviar.MODID); + + //public static final BiomeRegistryObject AVIAR_BIOME = BIOMES.register("aviar_biome", OverworldBiomes::stonyPeaks); +} diff --git a/src/aviar/java/leaf/cosmere/aviar/common/registries/AviarBlocks.java b/src/aviar/java/leaf/cosmere/aviar/common/registries/AviarBlocks.java new file mode 100644 index 000000000..a3cd846e9 --- /dev/null +++ b/src/aviar/java/leaf/cosmere/aviar/common/registries/AviarBlocks.java @@ -0,0 +1,17 @@ +/* + * File updated ~ 19 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.aviar.common.registries; + +import leaf.cosmere.aviar.common.Aviar; +import leaf.cosmere.common.registration.impl.BlockDeferredRegister; + +public class AviarBlocks +{ + public static final BlockDeferredRegister BLOCKS = new BlockDeferredRegister(Aviar.MODID); + + //public static final BlockRegistryObject AVIAR_BLOCK = BLOCKS.register("aviar", BaseBlock::new); + + +} diff --git a/src/aviar/java/leaf/cosmere/aviar/common/registries/AviarCreativeTabs.java b/src/aviar/java/leaf/cosmere/aviar/common/registries/AviarCreativeTabs.java new file mode 100644 index 000000000..f791726b4 --- /dev/null +++ b/src/aviar/java/leaf/cosmere/aviar/common/registries/AviarCreativeTabs.java @@ -0,0 +1,86 @@ +/* + * File updated ~ 20 - 12 - 2024 ~ Leaf + */ + +package leaf.cosmere.aviar.common.registries; + +import leaf.cosmere.aviar.common.Aviar; +import leaf.cosmere.common.registration.impl.CreativeTabDeferredRegister; +import leaf.cosmere.common.registration.impl.CreativeTabRegistryObject; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceKey; +import net.minecraft.world.item.CreativeModeTab; +import net.minecraft.world.item.CreativeModeTabs; +import net.minecraftforge.event.BuildCreativeModeTabContentsEvent; + +public class AviarCreativeTabs +{ + public static final CreativeTabDeferredRegister CREATIVE_TABS = new CreativeTabDeferredRegister(Aviar.MODID, AviarCreativeTabs::addToExistingTabs); + + + public static final CreativeTabRegistryObject ITEMS = + CREATIVE_TABS.registerMain( + Component.translatable("tabs." + Aviar.MODID + ".items"), + AviarItems.PATJIS_FRUIT, + builder -> + builder.withSearchBar()//Allow our tabs to be searchable for convenience purposes + .displayItems((displayParameters, output) -> + { + CreativeTabDeferredRegister.addToDisplay(AviarItems.ITEMS, output); + //AviarItems.METAL_VIAL.get().addFilled(output); + //CreativeTabDeferredRegister.addToDisplay(AllomancyBlocks.BLOCKS, output); + }) + ); + + + private static void addToExistingTabs(BuildCreativeModeTabContentsEvent event) + { + ResourceKey tabKey = event.getTabKey(); + if (tabKey == CreativeModeTabs.BUILDING_BLOCKS) + { + //CreativeTabDeferredRegister.addToDisplay(event, BlocksRegistry.METALWORKING_TABLE); + } + else if (tabKey == CreativeModeTabs.NATURAL_BLOCKS) + { + /*for (var ore : BlocksRegistry.METAL_ORE.values()) + { + CreativeTabDeferredRegister.addToDisplay(event, ore); + } + for (var ore : BlocksRegistry.METAL_ORE_DEEPSLATE.values()) + { + CreativeTabDeferredRegister.addToDisplay(event, ore); + }*/ + } + else if (tabKey == CreativeModeTabs.FUNCTIONAL_BLOCKS) + { + + } + else if (tabKey == CreativeModeTabs.REDSTONE_BLOCKS) + { + + } + else if (tabKey == CreativeModeTabs.TOOLS_AND_UTILITIES) + { + + } + else if (tabKey == CreativeModeTabs.COMBAT) + { + + } + else if (tabKey == CreativeModeTabs.FOOD_AND_DRINKS) + { + //ItemsRegistry.SOME_FOOD.get().addItems(event); + CreativeTabDeferredRegister.addToDisplay(event, AviarItems.PATJIS_FRUIT); + } + else if (tabKey == CreativeModeTabs.SPAWN_EGGS) + { + CreativeTabDeferredRegister.addToDisplay(event, AviarItems.AVIAR_BIRD_EGG); + + } + else if (tabKey == CreativeModeTabs.INGREDIENTS) + { + + } + } + +} diff --git a/src/aviar/java/leaf/cosmere/aviar/common/registries/AviarEffects.java b/src/aviar/java/leaf/cosmere/aviar/common/registries/AviarEffects.java new file mode 100644 index 000000000..90235b75a --- /dev/null +++ b/src/aviar/java/leaf/cosmere/aviar/common/registries/AviarEffects.java @@ -0,0 +1,21 @@ +/* + * File updated ~ 19 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.aviar.common.registries; + +import leaf.cosmere.aviar.common.Aviar; +import leaf.cosmere.aviar.common.effects.AviarBondEffect; +import leaf.cosmere.common.registration.impl.CosmereEffectDeferredRegister; +import leaf.cosmere.common.registration.impl.CosmereEffectRegistryObject; + +public class AviarEffects +{ + + public static final CosmereEffectDeferredRegister EFFECTS = new CosmereEffectDeferredRegister(Aviar.MODID); + + public static final CosmereEffectRegistryObject AVIAR_BOND_EFFECT = EFFECTS.register( + "aviar_bond_effect", + AviarBondEffect::new); + +} diff --git a/src/aviar/java/leaf/cosmere/aviar/common/registries/AviarEntityTypes.java b/src/aviar/java/leaf/cosmere/aviar/common/registries/AviarEntityTypes.java new file mode 100644 index 000000000..4f8323c2c --- /dev/null +++ b/src/aviar/java/leaf/cosmere/aviar/common/registries/AviarEntityTypes.java @@ -0,0 +1,28 @@ +/* + * File updated ~ 19 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.aviar.common.registries; + +import leaf.cosmere.aviar.common.Aviar; +import leaf.cosmere.aviar.common.entity.AviarBird; +import leaf.cosmere.common.registration.impl.EntityTypeDeferredRegister; +import leaf.cosmere.common.registration.impl.EntityTypeRegistryObject; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.MobCategory; + +public class AviarEntityTypes +{ + public static final EntityTypeDeferredRegister ENTITY_TYPES = new EntityTypeDeferredRegister(Aviar.MODID); + + public static final EntityTypeRegistryObject AVIAR_ENTITY = + ENTITY_TYPES.register( + "aviar", + EntityType.Builder.of(AviarBird::new, MobCategory.CREATURE) + .setShouldReceiveVelocityUpdates(false) + .setUpdateInterval(1) + .setTrackingRange(8) + .sized(0.5F, 0.9F) + .clientTrackingRange(8) + ); +} diff --git a/src/aviar/java/leaf/cosmere/aviar/common/registries/AviarFeatures.java b/src/aviar/java/leaf/cosmere/aviar/common/registries/AviarFeatures.java new file mode 100644 index 000000000..ad942dc13 --- /dev/null +++ b/src/aviar/java/leaf/cosmere/aviar/common/registries/AviarFeatures.java @@ -0,0 +1,16 @@ +/* + * File updated ~ 4 - 9 - 2024 ~ Leaf + */ + +package leaf.cosmere.aviar.common.registries; + +import leaf.cosmere.aviar.common.Aviar; +import leaf.cosmere.common.registration.impl.ConfiguredFeatureDeferredRegister; +import leaf.cosmere.common.registration.impl.PlacedFeatureDeferredRegister; + +public class AviarFeatures +{ + public static final ConfiguredFeatureDeferredRegister CONFIGURED_FEATURES = new ConfiguredFeatureDeferredRegister(Aviar.MODID); + public static final PlacedFeatureDeferredRegister PLACED_FEATURES = new PlacedFeatureDeferredRegister(Aviar.MODID); + +} diff --git a/src/aviar/java/leaf/cosmere/aviar/common/registries/AviarItems.java b/src/aviar/java/leaf/cosmere/aviar/common/registries/AviarItems.java new file mode 100644 index 000000000..895f4d093 --- /dev/null +++ b/src/aviar/java/leaf/cosmere/aviar/common/registries/AviarItems.java @@ -0,0 +1,26 @@ +/* + * File updated ~ 19 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.aviar.common.registries; + +import leaf.cosmere.aviar.common.Aviar; +import leaf.cosmere.aviar.common.items.PatjisFruitItem; +import leaf.cosmere.common.properties.PropTypes; +import leaf.cosmere.common.registration.impl.ItemDeferredRegister; +import leaf.cosmere.common.registration.impl.ItemRegistryObject; +import net.minecraftforge.common.ForgeSpawnEggItem; + +public class AviarItems +{ + public static final ItemDeferredRegister ITEMS = new ItemDeferredRegister(Aviar.MODID); + + //Items + public static final ItemRegistryObject PATJIS_FRUIT = ITEMS.register("fruit_of_patji", () -> new PatjisFruitItem(PropTypes.Items.SIXTEEN)); + + + //Eggs + public static final ItemRegistryObject AVIAR_BIRD_EGG = ITEMS.registerSpawnEgg(AviarEntityTypes.AVIAR_ENTITY, 0x6c482f, 0x8a1a08); + + +} diff --git a/src/aviar/java/leaf/cosmere/aviar/common/registries/AviarManifestations.java b/src/aviar/java/leaf/cosmere/aviar/common/registries/AviarManifestations.java new file mode 100644 index 000000000..df7d873d6 --- /dev/null +++ b/src/aviar/java/leaf/cosmere/aviar/common/registries/AviarManifestations.java @@ -0,0 +1,18 @@ +/* + * File updated ~ 19 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.aviar.common.registries; + +import leaf.cosmere.api.manifestation.Manifestation; +import leaf.cosmere.common.registration.impl.ManifestationDeferredRegister; +import leaf.cosmere.common.registration.impl.ManifestationRegistryObject; +import leaf.cosmere.aviar.common.Aviar; + +public class AviarManifestations +{ + public static final ManifestationDeferredRegister MANIFESTATIONS = new ManifestationDeferredRegister(Aviar.MODID); + + public static final ManifestationRegistryObject AVIAR_MANIFESTATION = MANIFESTATIONS.register("aviar", Manifestation::new); + +} diff --git a/src/aviar/java/leaf/cosmere/aviar/common/registries/AviarMenuTypes.java b/src/aviar/java/leaf/cosmere/aviar/common/registries/AviarMenuTypes.java new file mode 100644 index 000000000..8c665dd2a --- /dev/null +++ b/src/aviar/java/leaf/cosmere/aviar/common/registries/AviarMenuTypes.java @@ -0,0 +1,14 @@ +/* + * File updated ~ 19 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.aviar.common.registries; + +import leaf.cosmere.common.registration.impl.MenuTypeDeferredRegister; +import leaf.cosmere.aviar.common.Aviar; + +public class AviarMenuTypes +{ + public static final MenuTypeDeferredRegister MENU_TYPES = new MenuTypeDeferredRegister(Aviar.MODID); + +} diff --git a/src/aviar/java/leaf/cosmere/aviar/common/registries/AviarRecipes.java b/src/aviar/java/leaf/cosmere/aviar/common/registries/AviarRecipes.java new file mode 100644 index 000000000..bbce33f97 --- /dev/null +++ b/src/aviar/java/leaf/cosmere/aviar/common/registries/AviarRecipes.java @@ -0,0 +1,15 @@ +/* + * File updated ~ 19 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.aviar.common.registries; + +import leaf.cosmere.common.registration.impl.RecipeSerializerDeferredRegister; +import leaf.cosmere.aviar.common.Aviar; + +// for the non-json based recipes +public class AviarRecipes +{ + public static final RecipeSerializerDeferredRegister SPECIAL_RECIPES = new RecipeSerializerDeferredRegister(Aviar.MODID); + +} diff --git a/src/aviar/java/leaf/cosmere/aviar/common/registries/AviarStats.java b/src/aviar/java/leaf/cosmere/aviar/common/registries/AviarStats.java new file mode 100644 index 000000000..dbe785e36 --- /dev/null +++ b/src/aviar/java/leaf/cosmere/aviar/common/registries/AviarStats.java @@ -0,0 +1,25 @@ +/* + * File updated ~ 19 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.aviar.common.registries; + +import leaf.cosmere.common.registration.impl.StatDeferredRegister; +import leaf.cosmere.common.registration.impl.StatRegistryObject; +import leaf.cosmere.aviar.common.Aviar; +import net.minecraft.stats.StatFormatter; +import net.minecraft.stats.Stats; + +public class AviarStats +{ + public static final StatDeferredRegister STATS = new StatDeferredRegister(Aviar.MODID); + + + public static void initStatEntries() + { + for (StatRegistryObject value : STATS.getAllItems()) + { + Stats.CUSTOM.get(value.get(), StatFormatter.TIME); + } + } +} diff --git a/src/aviar/java/leaf/cosmere/aviar/mixin/EntityMixin.java b/src/aviar/java/leaf/cosmere/aviar/mixin/EntityMixin.java new file mode 100644 index 000000000..434f56e16 --- /dev/null +++ b/src/aviar/java/leaf/cosmere/aviar/mixin/EntityMixin.java @@ -0,0 +1,55 @@ +/* + * File updated ~ 9 - 1 - 2025 ~ Leaf + */ + +package leaf.cosmere.aviar.mixin; + +import leaf.cosmere.aviar.common.registries.AviarAttributes; +import net.minecraft.client.Minecraft; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.Mob; +import net.minecraft.world.entity.ai.attributes.Attribute; +import net.minecraft.world.entity.ai.attributes.AttributeInstance; +import net.minecraft.world.entity.player.Player; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(Entity.class) +public class EntityMixin +{ + + @Inject(method = "isCurrentlyGlowing", at = @At("RETURN"), cancellable = true) + private void handleIsGlowing(CallbackInfoReturnable cir) + { + Entity e = (Entity) (Object) this; + + final boolean isServerSide = !(e.level().isClientSide); + final boolean isInanimateEntity = !(e instanceof LivingEntity); + + if (!(Minecraft.getInstance().getCameraEntity() instanceof Player clientPlayer)) + { + return; + } + + if (isServerSide || isInanimateEntity || cir.getReturnValue()) + { + return; + } + + LivingEntity target = (LivingEntity) e; + + if (target instanceof Mob mob && mob.getTarget() == clientPlayer) + { + final Attribute attribute = AviarAttributes.HOSTILE_LIFE_SENSE.get(); + final AttributeInstance attributeInstance = clientPlayer.getAttribute(attribute); + if (attributeInstance != null && attributeInstance.getValue() >= 1) + { + cir.setReturnValue(true); + } + } + } +} + diff --git a/src/aviar/resources/META-INF/mods.toml b/src/aviar/resources/META-INF/mods.toml new file mode 100644 index 000000000..91e8481d0 --- /dev/null +++ b/src/aviar/resources/META-INF/mods.toml @@ -0,0 +1,25 @@ +modLoader = "javafml" +loaderVersion = "${loader_version}" +issueTrackerURL = "https://github.com/leafreynolds/Cosmere/issues" +license = "MIT" + +[[mods]] +modId = "aviar" +version = "${version}" +displayName = "Cosmere: Aviar" +displayURL = "https://www.curseforge.com/minecraft/mc-mods/cosmere" +authors = "Leaf" +credits = ''' + +Special thanks go to: +Ridanisaurus - For many item and block textures. +''' +logoFile = "logo.png" +description = '''Aviar module for Cosmere.''' + +[[dependencies.aviar]] +modId = "cosmere" +mandatory = true +versionRange = "[${version}]" +ordering = "AFTER" +side = "BOTH" diff --git a/src/aviar/resources/assets/aviar/lang/es_es.json b/src/aviar/resources/assets/aviar/lang/es_es.json new file mode 100644 index 000000000..146e941c9 --- /dev/null +++ b/src/aviar/resources/assets/aviar/lang/es_es.json @@ -0,0 +1,5 @@ +{ + "entity.aviar.aviar": "Aviar", + "item.aviar.aviar_spawn_egg": "Aviar Spawn Egg", + "item.aviar.fruit_of_patji": "Fruit Of Patji" +} \ No newline at end of file diff --git a/src/aviar/resources/assets/aviar/lang/sv_se.json b/src/aviar/resources/assets/aviar/lang/sv_se.json new file mode 100644 index 000000000..146e941c9 --- /dev/null +++ b/src/aviar/resources/assets/aviar/lang/sv_se.json @@ -0,0 +1,5 @@ +{ + "entity.aviar.aviar": "Aviar", + "item.aviar.aviar_spawn_egg": "Aviar Spawn Egg", + "item.aviar.fruit_of_patji": "Fruit Of Patji" +} \ No newline at end of file diff --git a/src/aviar/resources/assets/aviar/textures/item/fruit_of_patji.png b/src/aviar/resources/assets/aviar/textures/item/fruit_of_patji.png new file mode 100644 index 000000000..95f86562b Binary files /dev/null and b/src/aviar/resources/assets/aviar/textures/item/fruit_of_patji.png differ diff --git a/src/aviar/resources/aviar.mixins.json b/src/aviar/resources/aviar.mixins.json new file mode 100644 index 000000000..ecf5a79b7 --- /dev/null +++ b/src/aviar/resources/aviar.mixins.json @@ -0,0 +1,15 @@ +{ + "required": true, + "minVersion": "0.8", + "package": "leaf.cosmere.aviar.mixin", + "compatibilityLevel": "JAVA_17", + "refmap": "mixins.cosmere.aviar.refmap.json", + "mixins": [ + ], + "client": [ + "EntityMixin" + ], + "injectors": { + "defaultRequire": 1 + } +} \ No newline at end of file diff --git a/src/aviar/resources/pack.mcmeta b/src/aviar/resources/pack.mcmeta new file mode 100644 index 000000000..d755a1e74 --- /dev/null +++ b/src/aviar/resources/pack.mcmeta @@ -0,0 +1,6 @@ +{ + "pack": { + "description": "Resources used for Cosmere Aviar", + "pack_format": 15 + } +} \ No newline at end of file diff --git a/src/awakening/java/leaf/cosmere/awakening/client/AwakeningForgeClientEvents.java b/src/awakening/java/leaf/cosmere/awakening/client/AwakeningForgeClientEvents.java new file mode 100644 index 000000000..7df042cc5 --- /dev/null +++ b/src/awakening/java/leaf/cosmere/awakening/client/AwakeningForgeClientEvents.java @@ -0,0 +1,15 @@ +/* + * File updated ~ 30 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.awakening.client; + +import leaf.cosmere.common.Cosmere; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.fml.common.Mod; + +@Mod.EventBusSubscriber(modid = Cosmere.MODID, value = Dist.CLIENT) +public class AwakeningForgeClientEvents +{ + +} diff --git a/src/awakening/java/leaf/cosmere/awakening/client/AwakeningKeybindings.java b/src/awakening/java/leaf/cosmere/awakening/client/AwakeningKeybindings.java new file mode 100644 index 000000000..16707cd4f --- /dev/null +++ b/src/awakening/java/leaf/cosmere/awakening/client/AwakeningKeybindings.java @@ -0,0 +1,35 @@ +/* + * File updated ~ 30 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.awakening.client; + +import com.mojang.blaze3d.platform.InputConstants; +import leaf.cosmere.client.settings.KeyConflictContext; +import leaf.cosmere.awakening.common.Awakening; +import net.minecraft.client.KeyMapping; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.client.event.RegisterKeyMappingsEvent; +import net.minecraftforge.client.settings.KeyModifier; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.common.Mod.EventBusSubscriber.Bus; + +@Mod.EventBusSubscriber(value = Dist.CLIENT, modid = Awakening.MODID, bus = Bus.MOD) +public class AwakeningKeybindings +{ + + //public static KeyMapping AWAKENING_KEYBINDING; + + @SubscribeEvent + public static void register(RegisterKeyMappingsEvent event) + { + //event.register((AWAKENING_KEYBINDING = new KeyMapping("name", GLFW.GLFW_KEY_G, KEYS_CATEGORY))); + + } + + public static KeyMapping createKeybinding(String description, KeyModifier keyModifier, int keyCode, String category) + { + return new KeyMapping(description, KeyConflictContext.DEFAULT, keyModifier, InputConstants.Type.KEYSYM.getOrCreate(keyCode), category); + } +} diff --git a/src/awakening/java/leaf/cosmere/awakening/client/render/AwakeningLayerDefinitions.java b/src/awakening/java/leaf/cosmere/awakening/client/render/AwakeningLayerDefinitions.java new file mode 100644 index 000000000..86fadcc06 --- /dev/null +++ b/src/awakening/java/leaf/cosmere/awakening/client/render/AwakeningLayerDefinitions.java @@ -0,0 +1,13 @@ +/* + * File updated ~ 30 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.awakening.client.render; + +import leaf.cosmere.awakening.common.Awakening; +import net.minecraft.client.model.geom.ModelLayerLocation; + +public class AwakeningLayerDefinitions +{ + public static final ModelLayerLocation AWAKENING = new ModelLayerLocation(Awakening.rl("awakening_mob_model"), "awakening_mob_model"); +} diff --git a/src/awakening/java/leaf/cosmere/awakening/client/render/AwakeningRenderers.java b/src/awakening/java/leaf/cosmere/awakening/client/render/AwakeningRenderers.java new file mode 100644 index 000000000..7621d91af --- /dev/null +++ b/src/awakening/java/leaf/cosmere/awakening/client/render/AwakeningRenderers.java @@ -0,0 +1,16 @@ +/* + * File updated ~ 30 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.awakening.client.render; + +public class AwakeningRenderers +{ + + public static void register() + { + //EntityRenderers.register(AwakeningEntityTypes.AWAKENING_ENTITY.get(), AwakeningEntityRenderer::new); + } + + +} diff --git a/src/awakening/java/leaf/cosmere/awakening/common/Awakening.java b/src/awakening/java/leaf/cosmere/awakening/common/Awakening.java new file mode 100644 index 000000000..27bce364b --- /dev/null +++ b/src/awakening/java/leaf/cosmere/awakening/common/Awakening.java @@ -0,0 +1,122 @@ +/* + * File updated ~ 20 - 12 - 2024 ~ Leaf + */ + +package leaf.cosmere.awakening.common; + +import leaf.cosmere.api.CosmereAPI; +import leaf.cosmere.api.IModModule; +import leaf.cosmere.api.ISpiritwebSubmodule; +import leaf.cosmere.api.Version; +import leaf.cosmere.awakening.common.capabilities.AwakeningSpiritwebSubmodule; +import leaf.cosmere.awakening.common.config.AwakeningConfigs; +import leaf.cosmere.awakening.common.registries.*; +import leaf.cosmere.common.Cosmere; +import leaf.cosmere.common.config.CosmereModConfig; +import net.minecraft.resources.ResourceLocation; +import net.minecraftforge.eventbus.api.IEventBus; +import net.minecraftforge.fml.ModLoadingContext; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.config.ModConfig; +import net.minecraftforge.fml.event.config.ModConfigEvent; +import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; +import net.minecraftforge.fml.event.lifecycle.InterModEnqueueEvent; +import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; + +@Mod(Awakening.MODID) +public class Awakening implements IModModule +{ + public static final String MODID = "awakening"; + + public static Awakening instance; + + public final Version versionNumber; + + public Awakening() + { + Cosmere.addModule(instance = this); + IEventBus modBus = FMLJavaModLoadingContext.get().getModEventBus(); + + AwakeningConfigs.registerConfigs(ModLoadingContext.get()); + + modBus.addListener(this::commonSetup); + modBus.addListener(this::onConfigLoad); + modBus.addListener(this::onConfigReload); + modBus.addListener(this::imcQueue); + + AwakeningAttributes.ATTRIBUTES.register(modBus); + AwakeningBiomes.BIOMES.register(modBus); + AwakeningBiomeModifiers.BIOME_MODIFIER_SERIALIZERS.register(modBus); + AwakeningBlocks.BLOCKS.register(modBus); + //AwakeningEffects.EFFECTS.register(modBus); + AwakeningFeatures.CONFIGURED_FEATURES.register(modBus); + AwakeningFeatures.PLACED_FEATURES.register(modBus); + AwakeningEntityTypes.ENTITY_TYPES.register(modBus); + AwakeningItems.ITEMS.register(modBus); + AwakeningManifestations.MANIFESTATIONS.register(modBus); + AwakeningMenuTypes.MENU_TYPES.register(modBus); + AwakeningRecipes.SPECIAL_RECIPES.register(modBus); + AwakeningStats.STATS.register(modBus); + + versionNumber = new Version(ModLoadingContext.get().getActiveContainer()); + } + + public static ResourceLocation rl(String path) + { + return new ResourceLocation(Awakening.MODID, path); + } + + private void commonSetup(FMLCommonSetupEvent event) + { + CosmereAPI.logger.info("Cosmere: Awakening module Version {} initializing...", versionNumber); + + event.enqueueWork(() -> + { + //AllomancyEntityTypes.PrepareEntityAttributes(); + AwakeningStats.initStatEntries(); + }); + + + //packetHandler.initialize(); + } + + private void imcQueue(InterModEnqueueEvent event) + { + } + + @Override + public Version getVersion() + { + return versionNumber; + } + + @Override + public String getName() + { + return "Awakening"; + } + + @Override + public ISpiritwebSubmodule makeSubmodule() + { + return new AwakeningSpiritwebSubmodule(); + } + + private void onConfigLoad(ModConfigEvent configEvent) + { + ModConfig config = configEvent.getConfig(); + if (config.getModId().equals(MODID) && config instanceof CosmereModConfig cosmereModConfig) + { + cosmereModConfig.clearCache(); + } + } + + private void onConfigReload(ModConfigEvent.Reloading configEvent) + { + ModConfig config = configEvent.getConfig(); + if (config.getModId().equals(MODID) && config instanceof CosmereModConfig cosmereModConfig) + { + cosmereModConfig.clearCache(); + } + } +} \ No newline at end of file diff --git a/src/awakening/java/leaf/cosmere/awakening/common/capabilities/AwakeningSpiritwebSubmodule.java b/src/awakening/java/leaf/cosmere/awakening/common/capabilities/AwakeningSpiritwebSubmodule.java new file mode 100644 index 000000000..999c6efd5 --- /dev/null +++ b/src/awakening/java/leaf/cosmere/awakening/common/capabilities/AwakeningSpiritwebSubmodule.java @@ -0,0 +1,70 @@ +/* + * File updated ~ 5 - 3 - 2025 ~ Leaf + */ + +package leaf.cosmere.awakening.common.capabilities; + +import leaf.cosmere.api.ISpiritwebSubmodule; +import leaf.cosmere.api.manifestation.Manifestation; +import leaf.cosmere.api.spiritweb.ISpiritweb; +import net.minecraft.world.entity.player.Player; +import net.minecraftforge.client.event.RenderLevelStageEvent; + +import java.util.List; + +public class AwakeningSpiritwebSubmodule implements ISpiritwebSubmodule +{ + @Override + public void serialize(ISpiritweb spiritweb) + { + + } + + @Override + public void deserialize(ISpiritweb spiritweb) + { + + } + + @Override + public void tickClient(ISpiritweb spiritweb) + { + + } + + @Override + public void tickServer(ISpiritweb spiritweb) + { + + } + + @Override + public void collectMenuInfo(List m_infoText) + { + + } + + @Override + public void renderWorldEffects(ISpiritweb spiritweb, RenderLevelStageEvent event) + { + + } + + @Override + public void GiveStartingItem(Player player) + { + + } + + @Override + public void GiveStartingItem(Player player, Manifestation manifestation) + { + + } + + @Override + public void drainInvestiture(ISpiritweb data, double strength) + { + //todo can breaths be drained? + } +} diff --git a/src/awakening/java/leaf/cosmere/awakening/common/commands/AwakeningCommands.java b/src/awakening/java/leaf/cosmere/awakening/common/commands/AwakeningCommands.java new file mode 100644 index 000000000..2453caa00 --- /dev/null +++ b/src/awakening/java/leaf/cosmere/awakening/common/commands/AwakeningCommands.java @@ -0,0 +1,23 @@ +/* + * File updated ~ 30 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.awakening.common.commands; + +import com.mojang.brigadier.CommandDispatcher; +import leaf.cosmere.common.Cosmere; +import leaf.cosmere.awakening.common.commands.subcommands.AwakeningCommand; +import net.minecraft.commands.CommandSourceStack; +import net.minecraft.commands.Commands; + + +public class AwakeningCommands +{ + + public static void register(CommandDispatcher dispatcher) + { + dispatcher.register(Commands.literal(Cosmere.MODID) + .then(AwakeningCommand.register(dispatcher)) + ); + } +} diff --git a/src/awakening/java/leaf/cosmere/awakening/common/commands/subcommands/AwakeningCommand.java b/src/awakening/java/leaf/cosmere/awakening/common/commands/subcommands/AwakeningCommand.java new file mode 100644 index 000000000..9cd558891 --- /dev/null +++ b/src/awakening/java/leaf/cosmere/awakening/common/commands/subcommands/AwakeningCommand.java @@ -0,0 +1,50 @@ +/* + * File updated ~ 30 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.awakening.common.commands.subcommands; + +import com.mojang.brigadier.CommandDispatcher; +import com.mojang.brigadier.builder.ArgumentBuilder; +import com.mojang.brigadier.context.CommandContext; +import com.mojang.brigadier.exceptions.CommandSyntaxException; +import leaf.cosmere.api.text.TextHelper; +import leaf.cosmere.common.commands.subcommands.ModCommand; +import net.minecraft.commands.CommandSourceStack; +import net.minecraft.commands.Commands; +import net.minecraft.commands.arguments.EntityArgument; +import net.minecraft.server.level.ServerPlayer; + +import java.util.Collection; + +public class AwakeningCommand extends ModCommand +{ + public static ArgumentBuilder register(CommandDispatcher dispatcher) + { + return Commands.literal("awakeningTest") + .requires(context -> context.hasPermission(2)) + .executes(AwakeningCommand::awakeningTest) + .then(Commands.argument("target", EntityArgument.players()) + .requires(context -> context.hasPermission(2)) + .executes(AwakeningCommand::awakeningTest)); + } + + private static int awakeningTest(CommandContext context) throws CommandSyntaxException + { + Collection players = getPlayers(context, 3); + + for (ServerPlayer player : players) + { + player.displayClientMessage(TextHelper.createText("Test Received"), false); + } + + return SINGLE_SUCCESS; + } + + @Override + public int run(CommandContext context) throws CommandSyntaxException + { + return SINGLE_SUCCESS; + } + +} \ No newline at end of file diff --git a/src/awakening/java/leaf/cosmere/awakening/common/config/AwakeningConfigs.java b/src/awakening/java/leaf/cosmere/awakening/common/config/AwakeningConfigs.java new file mode 100644 index 000000000..bbfdfe3b5 --- /dev/null +++ b/src/awakening/java/leaf/cosmere/awakening/common/config/AwakeningConfigs.java @@ -0,0 +1,20 @@ +/* + * File updated ~ 30 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.awakening.common.config; + +import leaf.cosmere.common.config.CosmereConfigHelper; +import net.minecraftforge.fml.ModContainer; +import net.minecraftforge.fml.ModLoadingContext; + +public class AwakeningConfigs +{ + public static final AwakeningServerConfig SERVER = new AwakeningServerConfig(); + + public static void registerConfigs(ModLoadingContext modLoadingContext) + { + ModContainer modContainer = modLoadingContext.getActiveContainer(); + CosmereConfigHelper.registerConfig(modContainer, SERVER); + } +} diff --git a/src/awakening/java/leaf/cosmere/awakening/common/config/AwakeningServerConfig.java b/src/awakening/java/leaf/cosmere/awakening/common/config/AwakeningServerConfig.java new file mode 100644 index 000000000..adefff4ea --- /dev/null +++ b/src/awakening/java/leaf/cosmere/awakening/common/config/AwakeningServerConfig.java @@ -0,0 +1,54 @@ +/* + * File updated ~ 30 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.awakening.common.config; + +import leaf.cosmere.common.config.ICosmereConfig; +import net.minecraftforge.common.ForgeConfigSpec; +import net.minecraftforge.fml.config.ModConfig.Type; + +public class AwakeningServerConfig implements ICosmereConfig +{ + + private final ForgeConfigSpec configSpec; + + public final ForgeConfigSpec.IntValue AWAKENING; + + + AwakeningServerConfig() + { + ForgeConfigSpec.Builder builder = new ForgeConfigSpec.Builder(); + builder.comment("Awakening Config. This config is synced between server and client.").push("Awakening"); + + AWAKENING = builder.comment("Awakening.").defineInRange("awakening", 0, 0, 100); + + + builder.pop(); + configSpec = builder.build(); + } + + @Override + public String getFileName() + { + return "AwakeningServer"; + } + + @Override + public ForgeConfigSpec getConfigSpec() + { + return configSpec; + } + + @Override + public Type getConfigType() + { + return Type.SERVER; + } + + @Override + public void clearCache() + { + AWAKENING.clearCache(); + } +} \ No newline at end of file diff --git a/src/awakening/java/leaf/cosmere/awakening/common/eventHandlers/AwakeningCommonForgeEvents.java b/src/awakening/java/leaf/cosmere/awakening/common/eventHandlers/AwakeningCommonForgeEvents.java new file mode 100644 index 000000000..6add3fa54 --- /dev/null +++ b/src/awakening/java/leaf/cosmere/awakening/common/eventHandlers/AwakeningCommonForgeEvents.java @@ -0,0 +1,61 @@ +/* + * File updated ~ 30 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.awakening.common.eventHandlers; + +import leaf.cosmere.awakening.common.Awakening; +import leaf.cosmere.awakening.common.commands.AwakeningCommands; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.item.ItemStack; +import net.minecraftforge.event.RegisterCommandsEvent; +import net.minecraftforge.event.entity.player.PlayerInteractEvent; +import net.minecraftforge.event.server.ServerStartedEvent; +import net.minecraftforge.event.server.ServerStoppingEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; + +@Mod.EventBusSubscriber(modid = Awakening.MODID, bus = Mod.EventBusSubscriber.Bus.FORGE) +public class AwakeningCommonForgeEvents +{ + + + @SubscribeEvent + public static void onEntityInteract(PlayerInteractEvent.EntityInteract event) + { + if (!(event.getTarget() instanceof LivingEntity target)) + { + return; + } + + ItemStack stack = event.getEntity().getMainHandItem(); + if (!stack.isEmpty()) + { + //if (stack.getItem() instanceof AwakeningItem awakeningItem) + //{ + // + //} + } + } + + + @SubscribeEvent + public static void registerCommands(RegisterCommandsEvent event) + { + AwakeningCommands.register(event.getDispatcher()); + } + + + @SubscribeEvent + public static void onServerStartingEvent(ServerStartedEvent event) + { + + } + + @SubscribeEvent + public static void onServerStoppingEvent(ServerStoppingEvent event) + { + + } + +} diff --git a/src/awakening/java/leaf/cosmere/awakening/common/eventHandlers/AwakeningCommonModEvents.java b/src/awakening/java/leaf/cosmere/awakening/common/eventHandlers/AwakeningCommonModEvents.java new file mode 100644 index 000000000..03652f054 --- /dev/null +++ b/src/awakening/java/leaf/cosmere/awakening/common/eventHandlers/AwakeningCommonModEvents.java @@ -0,0 +1,15 @@ +/* + * File updated ~ 30 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.awakening.common.eventHandlers; + +import leaf.cosmere.awakening.common.Awakening; +import net.minecraftforge.fml.common.Mod; + + +@Mod.EventBusSubscriber(modid = Awakening.MODID, bus = Mod.EventBusSubscriber.Bus.MOD) +public class AwakeningCommonModEvents +{ + +} diff --git a/src/awakening/java/leaf/cosmere/awakening/common/registries/AwakeningAttributes.java b/src/awakening/java/leaf/cosmere/awakening/common/registries/AwakeningAttributes.java new file mode 100644 index 000000000..d3e82e73d --- /dev/null +++ b/src/awakening/java/leaf/cosmere/awakening/common/registries/AwakeningAttributes.java @@ -0,0 +1,15 @@ +/* + * File updated ~ 30 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.awakening.common.registries; + +import leaf.cosmere.common.registration.impl.AttributeDeferredRegister; +import leaf.cosmere.awakening.common.Awakening; + +public class AwakeningAttributes +{ + + public static final AttributeDeferredRegister ATTRIBUTES = new AttributeDeferredRegister(Awakening.MODID); + +} diff --git a/src/awakening/java/leaf/cosmere/awakening/common/registries/AwakeningBiomeModifiers.java b/src/awakening/java/leaf/cosmere/awakening/common/registries/AwakeningBiomeModifiers.java new file mode 100644 index 000000000..014ef27a8 --- /dev/null +++ b/src/awakening/java/leaf/cosmere/awakening/common/registries/AwakeningBiomeModifiers.java @@ -0,0 +1,15 @@ +/* + * File updated ~ 30 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.awakening.common.registries; + +import leaf.cosmere.common.registration.impl.BiomeModifierSerializerDeferredRegister; +import leaf.cosmere.awakening.common.Awakening; + +public class AwakeningBiomeModifiers +{ + public static final BiomeModifierSerializerDeferredRegister BIOME_MODIFIER_SERIALIZERS = new BiomeModifierSerializerDeferredRegister(Awakening.MODID); + + +} diff --git a/src/awakening/java/leaf/cosmere/awakening/common/registries/AwakeningBiomes.java b/src/awakening/java/leaf/cosmere/awakening/common/registries/AwakeningBiomes.java new file mode 100644 index 000000000..67c09d013 --- /dev/null +++ b/src/awakening/java/leaf/cosmere/awakening/common/registries/AwakeningBiomes.java @@ -0,0 +1,15 @@ +/* + * File updated ~ 30 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.awakening.common.registries; + +import leaf.cosmere.common.registration.impl.BiomeDeferredRegister; +import leaf.cosmere.awakening.common.Awakening; + +public class AwakeningBiomes +{ + public static final BiomeDeferredRegister BIOMES = new BiomeDeferredRegister(Awakening.MODID); + + //public static final BiomeRegistryObject AWAKENING_BIOME = BIOMES.register("awakening_biome", OverworldBiomes::stonyPeaks); +} diff --git a/src/awakening/java/leaf/cosmere/awakening/common/registries/AwakeningBlocks.java b/src/awakening/java/leaf/cosmere/awakening/common/registries/AwakeningBlocks.java new file mode 100644 index 000000000..0063c6701 --- /dev/null +++ b/src/awakening/java/leaf/cosmere/awakening/common/registries/AwakeningBlocks.java @@ -0,0 +1,17 @@ +/* + * File updated ~ 30 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.awakening.common.registries; + +import leaf.cosmere.common.registration.impl.BlockDeferredRegister; +import leaf.cosmere.awakening.common.Awakening; + +public class AwakeningBlocks +{ + public static final BlockDeferredRegister BLOCKS = new BlockDeferredRegister(Awakening.MODID); + + //public static final BlockRegistryObject AWAKENING_BLOCK = BLOCKS.register("awakening", BaseBlock::new); + + +} diff --git a/src/awakening/java/leaf/cosmere/awakening/common/registries/AwakeningEffects.java b/src/awakening/java/leaf/cosmere/awakening/common/registries/AwakeningEffects.java new file mode 100644 index 000000000..fb66859bf --- /dev/null +++ b/src/awakening/java/leaf/cosmere/awakening/common/registries/AwakeningEffects.java @@ -0,0 +1,13 @@ +/* + * File updated ~ 20 - 12 - 2024 ~ Leaf + */ + +package leaf.cosmere.awakening.common.registries; + +public class AwakeningEffects +{ + + //public static final CosmereEffectDeferredRegister EFFECTS = new CosmereEffectDeferredRegister(Awakening.MODID); + + +} diff --git a/src/awakening/java/leaf/cosmere/awakening/common/registries/AwakeningEntityTypes.java b/src/awakening/java/leaf/cosmere/awakening/common/registries/AwakeningEntityTypes.java new file mode 100644 index 000000000..baa920ce2 --- /dev/null +++ b/src/awakening/java/leaf/cosmere/awakening/common/registries/AwakeningEntityTypes.java @@ -0,0 +1,13 @@ +/* + * File updated ~ 30 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.awakening.common.registries; + +import leaf.cosmere.common.registration.impl.EntityTypeDeferredRegister; +import leaf.cosmere.awakening.common.Awakening; + +public class AwakeningEntityTypes +{ + public static final EntityTypeDeferredRegister ENTITY_TYPES = new EntityTypeDeferredRegister(Awakening.MODID); +} diff --git a/src/awakening/java/leaf/cosmere/awakening/common/registries/AwakeningFeatures.java b/src/awakening/java/leaf/cosmere/awakening/common/registries/AwakeningFeatures.java new file mode 100644 index 000000000..a9e955ddd --- /dev/null +++ b/src/awakening/java/leaf/cosmere/awakening/common/registries/AwakeningFeatures.java @@ -0,0 +1,16 @@ +/* + * File updated ~ 4 - 9 - 2024 ~ Leaf + */ + +package leaf.cosmere.awakening.common.registries; + +import leaf.cosmere.awakening.common.Awakening; +import leaf.cosmere.common.registration.impl.ConfiguredFeatureDeferredRegister; +import leaf.cosmere.common.registration.impl.PlacedFeatureDeferredRegister; + +public class AwakeningFeatures +{ + public static final ConfiguredFeatureDeferredRegister CONFIGURED_FEATURES = new ConfiguredFeatureDeferredRegister(Awakening.MODID); + public static final PlacedFeatureDeferredRegister PLACED_FEATURES = new PlacedFeatureDeferredRegister(Awakening.MODID); + +} diff --git a/src/awakening/java/leaf/cosmere/awakening/common/registries/AwakeningItems.java b/src/awakening/java/leaf/cosmere/awakening/common/registries/AwakeningItems.java new file mode 100644 index 000000000..bf99ef77c --- /dev/null +++ b/src/awakening/java/leaf/cosmere/awakening/common/registries/AwakeningItems.java @@ -0,0 +1,14 @@ +/* + * File updated ~ 30 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.awakening.common.registries; + +import leaf.cosmere.common.registration.impl.ItemDeferredRegister; +import leaf.cosmere.awakening.common.Awakening; + +public class AwakeningItems +{ + public static final ItemDeferredRegister ITEMS = new ItemDeferredRegister(Awakening.MODID); + +} diff --git a/src/awakening/java/leaf/cosmere/awakening/common/registries/AwakeningManifestations.java b/src/awakening/java/leaf/cosmere/awakening/common/registries/AwakeningManifestations.java new file mode 100644 index 000000000..c9a34b0a8 --- /dev/null +++ b/src/awakening/java/leaf/cosmere/awakening/common/registries/AwakeningManifestations.java @@ -0,0 +1,18 @@ +/* + * File updated ~ 30 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.awakening.common.registries; + +import leaf.cosmere.api.manifestation.Manifestation; +import leaf.cosmere.common.registration.impl.ManifestationDeferredRegister; +import leaf.cosmere.common.registration.impl.ManifestationRegistryObject; +import leaf.cosmere.awakening.common.Awakening; + +public class AwakeningManifestations +{ + public static final ManifestationDeferredRegister MANIFESTATIONS = new ManifestationDeferredRegister(Awakening.MODID); + + public static final ManifestationRegistryObject AWAKENING_MANIFESTATION = MANIFESTATIONS.register("awakening", Manifestation::new); + +} diff --git a/src/awakening/java/leaf/cosmere/awakening/common/registries/AwakeningMenuTypes.java b/src/awakening/java/leaf/cosmere/awakening/common/registries/AwakeningMenuTypes.java new file mode 100644 index 000000000..a07fd562f --- /dev/null +++ b/src/awakening/java/leaf/cosmere/awakening/common/registries/AwakeningMenuTypes.java @@ -0,0 +1,14 @@ +/* + * File updated ~ 30 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.awakening.common.registries; + +import leaf.cosmere.common.registration.impl.MenuTypeDeferredRegister; +import leaf.cosmere.awakening.common.Awakening; + +public class AwakeningMenuTypes +{ + public static final MenuTypeDeferredRegister MENU_TYPES = new MenuTypeDeferredRegister(Awakening.MODID); + +} diff --git a/src/awakening/java/leaf/cosmere/awakening/common/registries/AwakeningRecipes.java b/src/awakening/java/leaf/cosmere/awakening/common/registries/AwakeningRecipes.java new file mode 100644 index 000000000..8a3c20273 --- /dev/null +++ b/src/awakening/java/leaf/cosmere/awakening/common/registries/AwakeningRecipes.java @@ -0,0 +1,15 @@ +/* + * File updated ~ 30 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.awakening.common.registries; + +import leaf.cosmere.common.registration.impl.RecipeSerializerDeferredRegister; +import leaf.cosmere.awakening.common.Awakening; + +// for the non-json based recipes +public class AwakeningRecipes +{ + public static final RecipeSerializerDeferredRegister SPECIAL_RECIPES = new RecipeSerializerDeferredRegister(Awakening.MODID); + +} diff --git a/src/awakening/java/leaf/cosmere/awakening/common/registries/AwakeningStats.java b/src/awakening/java/leaf/cosmere/awakening/common/registries/AwakeningStats.java new file mode 100644 index 000000000..72f3f36af --- /dev/null +++ b/src/awakening/java/leaf/cosmere/awakening/common/registries/AwakeningStats.java @@ -0,0 +1,25 @@ +/* + * File updated ~ 30 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.awakening.common.registries; + +import leaf.cosmere.common.registration.impl.StatDeferredRegister; +import leaf.cosmere.common.registration.impl.StatRegistryObject; +import leaf.cosmere.awakening.common.Awakening; +import net.minecraft.stats.StatFormatter; +import net.minecraft.stats.Stats; + +public class AwakeningStats +{ + public static final StatDeferredRegister STATS = new StatDeferredRegister(Awakening.MODID); + + + public static void initStatEntries() + { + for (StatRegistryObject value : STATS.getAllItems()) + { + Stats.CUSTOM.get(value.get(), StatFormatter.TIME); + } + } +} diff --git a/src/awakening/java/leaf/cosmere/awakening/mixin/EntityMixin.java b/src/awakening/java/leaf/cosmere/awakening/mixin/EntityMixin.java new file mode 100644 index 000000000..af88e8a32 --- /dev/null +++ b/src/awakening/java/leaf/cosmere/awakening/mixin/EntityMixin.java @@ -0,0 +1,15 @@ +/* + * File updated ~ 30 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.awakening.mixin; + +import net.minecraft.world.entity.Entity; +import org.spongepowered.asm.mixin.Mixin; + +@Mixin(Entity.class) +public class EntityMixin +{ + +} + diff --git a/src/awakening/resources/META-INF/mods.toml b/src/awakening/resources/META-INF/mods.toml new file mode 100644 index 000000000..1986a4ec9 --- /dev/null +++ b/src/awakening/resources/META-INF/mods.toml @@ -0,0 +1,25 @@ +modLoader = "javafml" +loaderVersion = "${loader_version}" +issueTrackerURL = "https://github.com/leafreynolds/Cosmere/issues" +license = "MIT" + +[[mods]] +modId = "awakening" +version = "${version}" +displayName = "Cosmere: Awakening" +displayURL = "https://www.curseforge.com/minecraft/mc-mods/cosmere" +authors = "Leaf" +credits = ''' + +Special thanks go to: +Ridanisaurus - For many item and block textures. +''' +logoFile = "logo.png" +description = '''Awakening module for Cosmere.''' + +[[dependencies.awakening]] +modId = "cosmere" +mandatory = true +versionRange = "[${version}]" +ordering = "AFTER" +side = "BOTH" diff --git a/src/awakening/resources/assets/awakening/atlases/icons.json b/src/awakening/resources/assets/awakening/atlases/icons.json new file mode 100644 index 000000000..a84e50b93 --- /dev/null +++ b/src/awakening/resources/assets/awakening/atlases/icons.json @@ -0,0 +1,9 @@ +{ + "sources": [ + { + "type": "directory", + "source": "icon/awakening", + "prefix": "" + } + ] +} \ No newline at end of file diff --git a/src/awakening/resources/awakening.mixins.json b/src/awakening/resources/awakening.mixins.json new file mode 100644 index 000000000..ad87e0999 --- /dev/null +++ b/src/awakening/resources/awakening.mixins.json @@ -0,0 +1,15 @@ +{ + "required": true, + "minVersion": "0.8", + "package": "leaf.cosmere.awakening.mixin", + "compatibilityLevel": "JAVA_17", + "refmap": "mixins.cosmere.awakening.refmap.json", + "mixins": [ + "EntityMixin" + ], + "client": [ + ], + "injectors": { + "defaultRequire": 1 + } +} \ No newline at end of file diff --git a/src/awakening/resources/pack.mcmeta b/src/awakening/resources/pack.mcmeta new file mode 100644 index 000000000..0a39f46e0 --- /dev/null +++ b/src/awakening/resources/pack.mcmeta @@ -0,0 +1,6 @@ +{ + "pack": { + "description": "Resources used for Cosmere Awakening", + "pack_format": 15 + } +} \ No newline at end of file diff --git a/src/cosmeretools/java/leaf/cosmere/tools/client/ToolsForgeClientEvents.java b/src/cosmeretools/java/leaf/cosmere/tools/client/ToolsForgeClientEvents.java new file mode 100644 index 000000000..93ca391ee --- /dev/null +++ b/src/cosmeretools/java/leaf/cosmere/tools/client/ToolsForgeClientEvents.java @@ -0,0 +1,15 @@ +/* + * File updated ~ 22 - 3 - 2024 ~ Leaf + */ + +package leaf.cosmere.tools.client; + +import leaf.cosmere.tools.common.CosmereTools; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.fml.common.Mod; + +@Mod.EventBusSubscriber(modid = CosmereTools.MODID, value = Dist.CLIENT) +public class ToolsForgeClientEvents +{ + +} diff --git a/src/cosmeretools/java/leaf/cosmere/tools/client/ToolsKeybindings.java b/src/cosmeretools/java/leaf/cosmere/tools/client/ToolsKeybindings.java new file mode 100644 index 000000000..d2ba138c8 --- /dev/null +++ b/src/cosmeretools/java/leaf/cosmere/tools/client/ToolsKeybindings.java @@ -0,0 +1,35 @@ +/* + * File updated ~ 22 - 3 - 2024 ~ Leaf + */ + +package leaf.cosmere.tools.client; + +import com.mojang.blaze3d.platform.InputConstants; +import leaf.cosmere.client.settings.KeyConflictContext; +import leaf.cosmere.tools.common.CosmereTools; +import net.minecraft.client.KeyMapping; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.client.event.RegisterKeyMappingsEvent; +import net.minecraftforge.client.settings.KeyModifier; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.common.Mod.EventBusSubscriber.Bus; + +@Mod.EventBusSubscriber(value = Dist.CLIENT, modid = CosmereTools.MODID, bus = Bus.MOD) +public class ToolsKeybindings +{ + + //public static KeyMapping TOOLS_KEYBINDING; + + @SubscribeEvent + public static void register(RegisterKeyMappingsEvent event) + { + //event.register((TOOLS_KEYBINDING = new KeyMapping("name", GLFW.GLFW_KEY_G, KEYS_CATEGORY))); + + } + + public static KeyMapping createKeybinding(String description, KeyModifier keyModifier, int keyCode, String category) + { + return new KeyMapping(description, KeyConflictContext.DEFAULT, keyModifier, InputConstants.Type.KEYSYM.getOrCreate(keyCode), category); + } +} diff --git a/src/cosmeretools/java/leaf/cosmere/tools/client/render/ToolsLayerDefinitions.java b/src/cosmeretools/java/leaf/cosmere/tools/client/render/ToolsLayerDefinitions.java new file mode 100644 index 000000000..78ced9dc6 --- /dev/null +++ b/src/cosmeretools/java/leaf/cosmere/tools/client/render/ToolsLayerDefinitions.java @@ -0,0 +1,9 @@ +/* + * File updated ~ 3 - 4 - 2024 ~ Leaf + */ + +package leaf.cosmere.tools.client.render; + +public class ToolsLayerDefinitions +{ +} diff --git a/src/cosmeretools/java/leaf/cosmere/tools/client/render/ToolsRenderers.java b/src/cosmeretools/java/leaf/cosmere/tools/client/render/ToolsRenderers.java new file mode 100644 index 000000000..0ba119ce8 --- /dev/null +++ b/src/cosmeretools/java/leaf/cosmere/tools/client/render/ToolsRenderers.java @@ -0,0 +1,16 @@ +/* + * File updated ~ 22 - 3 - 2024 ~ Leaf + */ + +package leaf.cosmere.tools.client.render; + +public class ToolsRenderers +{ + + public static void register() + { + //EntityRenderers.register(ToolsEntityTypes.TOOLS_ENTITY.get(), ToolsEntityRenderer::new); + } + + +} diff --git a/src/cosmeretools/java/leaf/cosmere/tools/common/CosmereTools.java b/src/cosmeretools/java/leaf/cosmere/tools/common/CosmereTools.java new file mode 100644 index 000000000..6b003c519 --- /dev/null +++ b/src/cosmeretools/java/leaf/cosmere/tools/common/CosmereTools.java @@ -0,0 +1,123 @@ +/* + * File updated ~ 10 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.tools.common; + +import leaf.cosmere.api.CosmereAPI; +import leaf.cosmere.api.IModModule; +import leaf.cosmere.api.ISpiritwebSubmodule; +import leaf.cosmere.api.Version; +import leaf.cosmere.common.Cosmere; +import leaf.cosmere.common.config.CosmereModConfig; +import leaf.cosmere.tools.common.capabilities.ToolsSpiritwebSubmodule; +import leaf.cosmere.tools.common.config.ToolsConfigs; +import leaf.cosmere.tools.common.registries.*; +import net.minecraft.resources.ResourceLocation; +import net.minecraftforge.eventbus.api.IEventBus; +import net.minecraftforge.fml.ModLoadingContext; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.config.ModConfig; +import net.minecraftforge.fml.event.config.ModConfigEvent; +import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; +import net.minecraftforge.fml.event.lifecycle.InterModEnqueueEvent; +import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; + +@Mod(CosmereTools.MODID) +public class CosmereTools implements IModModule +{ + public static final String MODID = "cosmeretools"; + + public static CosmereTools instance; + + public final Version versionNumber; + + public CosmereTools() + { + Cosmere.addModule(instance = this); + IEventBus modBus = FMLJavaModLoadingContext.get().getModEventBus(); + + ToolsConfigs.registerConfigs(ModLoadingContext.get()); + + modBus.addListener(this::commonSetup); + modBus.addListener(this::onConfigLoad); + modBus.addListener(this::onConfigReload); + modBus.addListener(this::imcQueue); + + ToolsAttributes.ATTRIBUTES.register(modBus); + ToolsBiomes.BIOMES.register(modBus); + ToolsBiomeModifiers.BIOME_MODIFIER_SERIALIZERS.register(modBus); + ToolsBlocks.BLOCKS.register(modBus); + ToolsEffects.EFFECTS.register(modBus); + ToolsFeatures.CONFIGURED_FEATURES.register(modBus); + ToolsFeatures.PLACED_FEATURES.register(modBus); + ToolsEntityTypes.ENTITY_TYPES.register(modBus); + ToolsItems.ITEMS.register(modBus); + ToolsManifestations.MANIFESTATIONS.register(modBus); + ToolsMenuTypes.MENU_TYPES.register(modBus); + ToolsRecipes.SPECIAL_RECIPES.register(modBus); + ToolsStats.STATS.register(modBus); + ToolsCreativeTabs.CREATIVE_TABS.register(modBus); + + versionNumber = new Version(ModLoadingContext.get().getActiveContainer()); + } + + public static ResourceLocation rl(String path) + { + return new ResourceLocation(CosmereTools.MODID, path); + } + + private void commonSetup(FMLCommonSetupEvent event) + { + CosmereAPI.logger.info("Cosmere: Tools module Version {} initializing...", versionNumber); + + event.enqueueWork(() -> + { + //AllomancyEntityTypes.PrepareEntityAttributes(); + ToolsStats.initStatEntries(); + }); + + + //packetHandler.initialize(); + } + + private void imcQueue(InterModEnqueueEvent event) + { + } + + @Override + public Version getVersion() + { + return versionNumber; + } + + @Override + public String getName() + { + return "Cosmere: Tools"; + } + + @Override + public ISpiritwebSubmodule makeSubmodule() + { + return new ToolsSpiritwebSubmodule(); + } + + private void onConfigLoad(ModConfigEvent configEvent) + { + ModConfig config = configEvent.getConfig(); + if (config.getModId().equals(MODID) && config instanceof CosmereModConfig cosmereModConfig) + { + cosmereModConfig.clearCache(); + } + } + + private void onConfigReload(ModConfigEvent.Reloading configEvent) + { + ModConfig config = configEvent.getConfig(); + if (config.getModId().equals(MODID) && config instanceof CosmereModConfig cosmereModConfig) + { + cosmereModConfig.clearCache(); + } + } +} \ No newline at end of file diff --git a/src/cosmeretools/java/leaf/cosmere/tools/common/capabilities/ToolsSpiritwebSubmodule.java b/src/cosmeretools/java/leaf/cosmere/tools/common/capabilities/ToolsSpiritwebSubmodule.java new file mode 100644 index 000000000..3c026acb2 --- /dev/null +++ b/src/cosmeretools/java/leaf/cosmere/tools/common/capabilities/ToolsSpiritwebSubmodule.java @@ -0,0 +1,70 @@ +/* + * File updated ~ 5 - 3 - 2025 ~ Leaf + */ + +package leaf.cosmere.tools.common.capabilities; + +import leaf.cosmere.api.ISpiritwebSubmodule; +import leaf.cosmere.api.manifestation.Manifestation; +import leaf.cosmere.api.spiritweb.ISpiritweb; +import net.minecraft.world.entity.player.Player; +import net.minecraftforge.client.event.RenderLevelStageEvent; + +import java.util.List; + +public class ToolsSpiritwebSubmodule implements ISpiritwebSubmodule +{ + @Override + public void serialize(ISpiritweb spiritweb) + { + + } + + @Override + public void deserialize(ISpiritweb spiritweb) + { + + } + + @Override + public void tickClient(ISpiritweb spiritweb) + { + + } + + @Override + public void tickServer(ISpiritweb spiritweb) + { + + } + + @Override + public void collectMenuInfo(List m_infoText) + { + + } + + @Override + public void renderWorldEffects(ISpiritweb spiritweb, RenderLevelStageEvent event) + { + + } + + @Override + public void GiveStartingItem(Player player) + { + + } + + @Override + public void GiveStartingItem(Player player, Manifestation manifestation) + { + + } + + @Override + public void drainInvestiture(ISpiritweb data, double strength) + { + // what did you expect to see here? + } +} diff --git a/src/cosmeretools/java/leaf/cosmere/tools/common/commands/ToolsCommands.java b/src/cosmeretools/java/leaf/cosmere/tools/common/commands/ToolsCommands.java new file mode 100644 index 000000000..e912c3cce --- /dev/null +++ b/src/cosmeretools/java/leaf/cosmere/tools/common/commands/ToolsCommands.java @@ -0,0 +1,23 @@ +/* + * File updated ~ 22 - 3 - 2024 ~ Leaf + */ + +package leaf.cosmere.tools.common.commands; + +import com.mojang.brigadier.CommandDispatcher; +import leaf.cosmere.common.Cosmere; +import leaf.cosmere.tools.common.commands.subcommands.ToolsCommand; +import net.minecraft.commands.CommandSourceStack; +import net.minecraft.commands.Commands; + + +public class ToolsCommands +{ + + public static void register(CommandDispatcher dispatcher) + { + dispatcher.register(Commands.literal(Cosmere.MODID) + .then(ToolsCommand.register(dispatcher)) + ); + } +} diff --git a/src/cosmeretools/java/leaf/cosmere/tools/common/commands/subcommands/ToolsCommand.java b/src/cosmeretools/java/leaf/cosmere/tools/common/commands/subcommands/ToolsCommand.java new file mode 100644 index 000000000..6f47ebb06 --- /dev/null +++ b/src/cosmeretools/java/leaf/cosmere/tools/common/commands/subcommands/ToolsCommand.java @@ -0,0 +1,50 @@ +/* + * File updated ~ 22 - 3 - 2024 ~ Leaf + */ + +package leaf.cosmere.tools.common.commands.subcommands; + +import com.mojang.brigadier.CommandDispatcher; +import com.mojang.brigadier.builder.ArgumentBuilder; +import com.mojang.brigadier.context.CommandContext; +import com.mojang.brigadier.exceptions.CommandSyntaxException; +import leaf.cosmere.api.text.TextHelper; +import leaf.cosmere.common.commands.subcommands.ModCommand; +import net.minecraft.commands.CommandSourceStack; +import net.minecraft.commands.Commands; +import net.minecraft.commands.arguments.EntityArgument; +import net.minecraft.server.level.ServerPlayer; + +import java.util.Collection; + +public class ToolsCommand extends ModCommand +{ + public static ArgumentBuilder register(CommandDispatcher dispatcher) + { + return Commands.literal("toolsTest") + .requires(context -> context.hasPermission(2)) + .executes(ToolsCommand::toolsTest) + .then(Commands.argument("target", EntityArgument.players()) + .requires(context -> context.hasPermission(2)) + .executes(ToolsCommand::toolsTest)); + } + + private static int toolsTest(CommandContext context) throws CommandSyntaxException + { + Collection players = getPlayers(context, 3); + + for (ServerPlayer player : players) + { + player.displayClientMessage(TextHelper.createText("Test Received"), false); + } + + return SINGLE_SUCCESS; + } + + @Override + public int run(CommandContext context) throws CommandSyntaxException + { + return SINGLE_SUCCESS; + } + +} \ No newline at end of file diff --git a/src/cosmeretools/java/leaf/cosmere/tools/common/config/ToolsConfigs.java b/src/cosmeretools/java/leaf/cosmere/tools/common/config/ToolsConfigs.java new file mode 100644 index 000000000..d7d420109 --- /dev/null +++ b/src/cosmeretools/java/leaf/cosmere/tools/common/config/ToolsConfigs.java @@ -0,0 +1,20 @@ +/* + * File updated ~ 22 - 3 - 2024 ~ Leaf + */ + +package leaf.cosmere.tools.common.config; + +import leaf.cosmere.common.config.CosmereConfigHelper; +import net.minecraftforge.fml.ModContainer; +import net.minecraftforge.fml.ModLoadingContext; + +public class ToolsConfigs +{ + public static final ToolsServerConfig SERVER = new ToolsServerConfig(); + + public static void registerConfigs(ModLoadingContext modLoadingContext) + { + ModContainer modContainer = modLoadingContext.getActiveContainer(); + CosmereConfigHelper.registerConfig(modContainer, SERVER); + } +} diff --git a/src/cosmeretools/java/leaf/cosmere/tools/common/config/ToolsServerConfig.java b/src/cosmeretools/java/leaf/cosmere/tools/common/config/ToolsServerConfig.java new file mode 100644 index 000000000..288a40735 --- /dev/null +++ b/src/cosmeretools/java/leaf/cosmere/tools/common/config/ToolsServerConfig.java @@ -0,0 +1,54 @@ +/* + * File updated ~ 22 - 3 - 2024 ~ Leaf + */ + +package leaf.cosmere.tools.common.config; + +import leaf.cosmere.common.config.ICosmereConfig; +import net.minecraftforge.common.ForgeConfigSpec; +import net.minecraftforge.fml.config.ModConfig.Type; + +public class ToolsServerConfig implements ICosmereConfig +{ + + private final ForgeConfigSpec configSpec; + + public final ForgeConfigSpec.IntValue TOOLS; + + + ToolsServerConfig() + { + ForgeConfigSpec.Builder builder = new ForgeConfigSpec.Builder(); + builder.comment("Tools Config. This config is synced between server and client.").push("Tools"); + + TOOLS = builder.comment("Tools.").defineInRange("tools", 0, 0, 100); + + + builder.pop(); + configSpec = builder.build(); + } + + @Override + public String getFileName() + { + return "ToolsServer"; + } + + @Override + public ForgeConfigSpec getConfigSpec() + { + return configSpec; + } + + @Override + public Type getConfigType() + { + return Type.SERVER; + } + + @Override + public void clearCache() + { + TOOLS.clearCache(); + } +} \ No newline at end of file diff --git a/src/cosmeretools/java/leaf/cosmere/tools/common/eventHandlers/ToolsCommonForgeEvents.java b/src/cosmeretools/java/leaf/cosmere/tools/common/eventHandlers/ToolsCommonForgeEvents.java new file mode 100644 index 000000000..ca76c32d1 --- /dev/null +++ b/src/cosmeretools/java/leaf/cosmere/tools/common/eventHandlers/ToolsCommonForgeEvents.java @@ -0,0 +1,61 @@ +/* + * File updated ~ 22 - 3 - 2024 ~ Leaf + */ + +package leaf.cosmere.tools.common.eventHandlers; + +import leaf.cosmere.tools.common.CosmereTools; +import leaf.cosmere.tools.common.commands.ToolsCommands; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.item.ItemStack; +import net.minecraftforge.event.RegisterCommandsEvent; +import net.minecraftforge.event.entity.player.PlayerInteractEvent; +import net.minecraftforge.event.server.ServerStartedEvent; +import net.minecraftforge.event.server.ServerStoppingEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; + +@Mod.EventBusSubscriber(modid = CosmereTools.MODID, bus = Mod.EventBusSubscriber.Bus.FORGE) +public class ToolsCommonForgeEvents +{ + + + @SubscribeEvent + public static void onEntityInteract(PlayerInteractEvent.EntityInteract event) + { + if (!(event.getTarget() instanceof LivingEntity target)) + { + return; + } + + ItemStack stack = event.getEntity().getMainHandItem(); + if (!stack.isEmpty()) + { + //if (stack.getItem() instanceof ToolsItem toolsItem) + //{ + // + //} + } + } + + + @SubscribeEvent + public static void registerCommands(RegisterCommandsEvent event) + { + ToolsCommands.register(event.getDispatcher()); + } + + + @SubscribeEvent + public static void onServerStartingEvent(ServerStartedEvent event) + { + + } + + @SubscribeEvent + public static void onServerStoppingEvent(ServerStoppingEvent event) + { + + } + +} diff --git a/src/cosmeretools/java/leaf/cosmere/tools/common/eventHandlers/ToolsCommonModEvents.java b/src/cosmeretools/java/leaf/cosmere/tools/common/eventHandlers/ToolsCommonModEvents.java new file mode 100644 index 000000000..3a41ab056 --- /dev/null +++ b/src/cosmeretools/java/leaf/cosmere/tools/common/eventHandlers/ToolsCommonModEvents.java @@ -0,0 +1,15 @@ +/* + * File updated ~ 22 - 3 - 2024 ~ Leaf + */ + +package leaf.cosmere.tools.common.eventHandlers; + +import leaf.cosmere.tools.common.CosmereTools; +import net.minecraftforge.fml.common.Mod; + + +@Mod.EventBusSubscriber(modid = CosmereTools.MODID, bus = Mod.EventBusSubscriber.Bus.MOD) +public class ToolsCommonModEvents +{ + +} diff --git a/src/cosmeretools/java/leaf/cosmere/tools/common/items/TArmorItem.java b/src/cosmeretools/java/leaf/cosmere/tools/common/items/TArmorItem.java new file mode 100644 index 000000000..aa0f2c5b9 --- /dev/null +++ b/src/cosmeretools/java/leaf/cosmere/tools/common/items/TArmorItem.java @@ -0,0 +1,68 @@ +/* + * File updated ~ 3 - 4 - 2024 ~ Leaf + */ + +package leaf.cosmere.tools.common.items; + +import leaf.cosmere.api.IHasMetalType; +import leaf.cosmere.api.Metals; +import leaf.cosmere.tools.common.CosmereTools; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.item.ArmorItem; +import net.minecraft.world.item.DyeableLeatherItem; +import net.minecraft.world.item.ItemStack; + +import javax.annotation.Nonnull; + +// we use the DyeableLeatherItem interface to get free tinting, +// and then redirect requests for the overlay to a blank texture so it can't do anything with it +public class TArmorItem extends ArmorItem implements IHasMetalType, DyeableLeatherItem +{ + Metals.MetalType metalType; + + public TArmorItem(Metals.MetalType metalType, Type pSlot, Properties pProperties) + { + super(metalType, pSlot, pProperties); + this.metalType = metalType; + } + + @Override + public Metals.MetalType getMetalType() + { + return metalType; + } + + @Override + public boolean hasCustomColor(ItemStack pStack) + { + return true; + } + + @Override + public int getColor(ItemStack pStack) + { + return metalType.getColorValue(); + } + + @Override + public void clearColor(ItemStack pStack) + { + } + + @Override + public void setColor(ItemStack pStack, int pColor) + { + } + + @Nonnull + @Override + public final String getArmorTexture(ItemStack stack, Entity entity, EquipmentSlot slot, String type) + { + return type != null && type.contains("overlay") + ? CosmereTools.MODID + ":" + "textures/models/armor/armor_overlay.png"//blank texture + : (CosmereTools.MODID + ":" + "textures/models/armor/armor_layer_%s.png")//following minecraft style, + .formatted( + slot == EquipmentSlot.LEGS ? 2 : 1);//where leggings are separate from the other pieces + } +} diff --git a/src/cosmeretools/java/leaf/cosmere/tools/common/items/TAxeItem.java b/src/cosmeretools/java/leaf/cosmere/tools/common/items/TAxeItem.java new file mode 100644 index 000000000..ef1a4c326 --- /dev/null +++ b/src/cosmeretools/java/leaf/cosmere/tools/common/items/TAxeItem.java @@ -0,0 +1,26 @@ +/* + * File updated ~ 23 - 3 - 2024 ~ Leaf + */ + +package leaf.cosmere.tools.common.items; + +import leaf.cosmere.api.IHasMetalType; +import leaf.cosmere.api.Metals; +import net.minecraft.world.item.AxeItem; + +public class TAxeItem extends AxeItem implements IHasMetalType +{ + Metals.MetalType metalType; + + public TAxeItem(Metals.MetalType metalType, float pAttackDamageModifier, float pAttackSpeedModifier, Properties pProperties) + { + super(metalType, pAttackDamageModifier, pAttackSpeedModifier, pProperties); + this.metalType = metalType; + } + + @Override + public Metals.MetalType getMetalType() + { + return metalType; + } +} diff --git a/src/cosmeretools/java/leaf/cosmere/tools/common/items/THoeItem.java b/src/cosmeretools/java/leaf/cosmere/tools/common/items/THoeItem.java new file mode 100644 index 000000000..f48eadbec --- /dev/null +++ b/src/cosmeretools/java/leaf/cosmere/tools/common/items/THoeItem.java @@ -0,0 +1,26 @@ +/* + * File updated ~ 23 - 3 - 2024 ~ Leaf + */ + +package leaf.cosmere.tools.common.items; + +import leaf.cosmere.api.IHasMetalType; +import leaf.cosmere.api.Metals; +import net.minecraft.world.item.HoeItem; + +public class THoeItem extends HoeItem implements IHasMetalType +{ + Metals.MetalType metalType; + + public THoeItem(Metals.MetalType metalType, int pAttackDamageModifier, float pAttackSpeedModifier, Properties pProperties) + { + super(metalType, pAttackDamageModifier, pAttackSpeedModifier, pProperties); + this.metalType = metalType; + } + + @Override + public Metals.MetalType getMetalType() + { + return metalType; + } +} diff --git a/src/cosmeretools/java/leaf/cosmere/tools/common/items/TPickaxeItem.java b/src/cosmeretools/java/leaf/cosmere/tools/common/items/TPickaxeItem.java new file mode 100644 index 000000000..6289e0ba6 --- /dev/null +++ b/src/cosmeretools/java/leaf/cosmere/tools/common/items/TPickaxeItem.java @@ -0,0 +1,26 @@ +/* + * File updated ~ 23 - 3 - 2024 ~ Leaf + */ + +package leaf.cosmere.tools.common.items; + +import leaf.cosmere.api.IHasMetalType; +import leaf.cosmere.api.Metals; +import net.minecraft.world.item.PickaxeItem; + +public class TPickaxeItem extends PickaxeItem implements IHasMetalType +{ + Metals.MetalType metalType; + + public TPickaxeItem(Metals.MetalType metalType, int pAttackDamageModifier, float pAttackSpeedModifier, Properties pProperties) + { + super(metalType, pAttackDamageModifier, pAttackSpeedModifier, pProperties); + this.metalType = metalType; + } + + @Override + public Metals.MetalType getMetalType() + { + return metalType; + } +} diff --git a/src/cosmeretools/java/leaf/cosmere/tools/common/items/TShovelItem.java b/src/cosmeretools/java/leaf/cosmere/tools/common/items/TShovelItem.java new file mode 100644 index 000000000..b08acfba2 --- /dev/null +++ b/src/cosmeretools/java/leaf/cosmere/tools/common/items/TShovelItem.java @@ -0,0 +1,26 @@ +/* + * File updated ~ 23 - 3 - 2024 ~ Leaf + */ + +package leaf.cosmere.tools.common.items; + +import leaf.cosmere.api.IHasMetalType; +import leaf.cosmere.api.Metals; +import net.minecraft.world.item.ShovelItem; + +public class TShovelItem extends ShovelItem implements IHasMetalType +{ + Metals.MetalType metalType; + + public TShovelItem(Metals.MetalType metalType, float pAttackDamageModifier, float pAttackSpeedModifier, Properties pProperties) + { + super(metalType, pAttackDamageModifier, pAttackSpeedModifier, pProperties); + this.metalType = metalType; + } + + @Override + public Metals.MetalType getMetalType() + { + return metalType; + } +} diff --git a/src/cosmeretools/java/leaf/cosmere/tools/common/items/TSwordItem.java b/src/cosmeretools/java/leaf/cosmere/tools/common/items/TSwordItem.java new file mode 100644 index 000000000..cad522b31 --- /dev/null +++ b/src/cosmeretools/java/leaf/cosmere/tools/common/items/TSwordItem.java @@ -0,0 +1,26 @@ +/* + * File updated ~ 23 - 3 - 2024 ~ Leaf + */ + +package leaf.cosmere.tools.common.items; + +import leaf.cosmere.api.IHasMetalType; +import leaf.cosmere.api.Metals; +import net.minecraft.world.item.SwordItem; + +public class TSwordItem extends SwordItem implements IHasMetalType +{ + Metals.MetalType metalType; + + public TSwordItem(Metals.MetalType metalType, int pAttackDamageModifier, float pAttackSpeedModifier, Properties pProperties) + { + super(metalType, pAttackDamageModifier, pAttackSpeedModifier, pProperties); + this.metalType = metalType; + } + + @Override + public Metals.MetalType getMetalType() + { + return metalType; + } +} diff --git a/src/cosmeretools/java/leaf/cosmere/tools/common/registries/ToolsAttributes.java b/src/cosmeretools/java/leaf/cosmere/tools/common/registries/ToolsAttributes.java new file mode 100644 index 000000000..6b6503bb0 --- /dev/null +++ b/src/cosmeretools/java/leaf/cosmere/tools/common/registries/ToolsAttributes.java @@ -0,0 +1,15 @@ +/* + * File updated ~ 22 - 3 - 2024 ~ Leaf + */ + +package leaf.cosmere.tools.common.registries; + +import leaf.cosmere.common.registration.impl.AttributeDeferredRegister; +import leaf.cosmere.tools.common.CosmereTools; + +public class ToolsAttributes +{ + + public static final AttributeDeferredRegister ATTRIBUTES = new AttributeDeferredRegister(CosmereTools.MODID); + +} diff --git a/src/cosmeretools/java/leaf/cosmere/tools/common/registries/ToolsBiomeModifiers.java b/src/cosmeretools/java/leaf/cosmere/tools/common/registries/ToolsBiomeModifiers.java new file mode 100644 index 000000000..295e3fe5f --- /dev/null +++ b/src/cosmeretools/java/leaf/cosmere/tools/common/registries/ToolsBiomeModifiers.java @@ -0,0 +1,15 @@ +/* + * File updated ~ 22 - 3 - 2024 ~ Leaf + */ + +package leaf.cosmere.tools.common.registries; + +import leaf.cosmere.common.registration.impl.BiomeModifierSerializerDeferredRegister; +import leaf.cosmere.tools.common.CosmereTools; + +public class ToolsBiomeModifiers +{ + public static final BiomeModifierSerializerDeferredRegister BIOME_MODIFIER_SERIALIZERS = new BiomeModifierSerializerDeferredRegister(CosmereTools.MODID); + + +} diff --git a/src/cosmeretools/java/leaf/cosmere/tools/common/registries/ToolsBiomes.java b/src/cosmeretools/java/leaf/cosmere/tools/common/registries/ToolsBiomes.java new file mode 100644 index 000000000..c659c5773 --- /dev/null +++ b/src/cosmeretools/java/leaf/cosmere/tools/common/registries/ToolsBiomes.java @@ -0,0 +1,15 @@ +/* + * File updated ~ 22 - 3 - 2024 ~ Leaf + */ + +package leaf.cosmere.tools.common.registries; + +import leaf.cosmere.common.registration.impl.BiomeDeferredRegister; +import leaf.cosmere.tools.common.CosmereTools; + +public class ToolsBiomes +{ + public static final BiomeDeferredRegister BIOMES = new BiomeDeferredRegister(CosmereTools.MODID); + + //public static final BiomeRegistryObject TOOLS_BIOME = BIOMES.register("tools_biome", OverworldBiomes::stonyPeaks); +} diff --git a/src/cosmeretools/java/leaf/cosmere/tools/common/registries/ToolsBlocks.java b/src/cosmeretools/java/leaf/cosmere/tools/common/registries/ToolsBlocks.java new file mode 100644 index 000000000..d7efd7c5d --- /dev/null +++ b/src/cosmeretools/java/leaf/cosmere/tools/common/registries/ToolsBlocks.java @@ -0,0 +1,17 @@ +/* + * File updated ~ 22 - 3 - 2024 ~ Leaf + */ + +package leaf.cosmere.tools.common.registries; + +import leaf.cosmere.common.registration.impl.BlockDeferredRegister; +import leaf.cosmere.tools.common.CosmereTools; + +public class ToolsBlocks +{ + public static final BlockDeferredRegister BLOCKS = new BlockDeferredRegister(CosmereTools.MODID); + + //public static final BlockRegistryObject TOOLS_BLOCK = BLOCKS.register("tools", BaseBlock::new); + + +} diff --git a/src/cosmeretools/java/leaf/cosmere/tools/common/registries/ToolsCreativeTabs.java b/src/cosmeretools/java/leaf/cosmere/tools/common/registries/ToolsCreativeTabs.java new file mode 100644 index 000000000..68ce7eb1b --- /dev/null +++ b/src/cosmeretools/java/leaf/cosmere/tools/common/registries/ToolsCreativeTabs.java @@ -0,0 +1,107 @@ +/* + * File updated ~ 20 - 11 - 2024 ~ Leaf + */ + +package leaf.cosmere.tools.common.registries; + +import leaf.cosmere.api.EnumUtils; +import leaf.cosmere.common.registration.impl.CreativeTabDeferredRegister; +import leaf.cosmere.common.registration.impl.CreativeTabRegistryObject; +import leaf.cosmere.tools.common.CosmereTools; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceKey; +import net.minecraft.world.item.CreativeModeTab; +import net.minecraft.world.item.CreativeModeTabs; +import net.minecraftforge.event.BuildCreativeModeTabContentsEvent; + +public class ToolsCreativeTabs +{ + public static final CreativeTabDeferredRegister CREATIVE_TABS = new CreativeTabDeferredRegister(CosmereTools.MODID, ToolsCreativeTabs::addToExistingTabs); + + + public static final CreativeTabRegistryObject ITEMS = + CREATIVE_TABS.registerMain( + Component.translatable("tabs." + CosmereTools.MODID + ".items"), + ToolsItems.METAL_PICKAXES.entrySet().stream().findAny().get().getValue(), + builder -> + builder.withSearchBar()//Allow our tabs to be searchable for convenience purposes + .displayItems((displayParameters, output) -> + { + CreativeTabDeferredRegister.addToDisplay(ToolsItems.ITEMS, output); + //CreativeTabDeferredRegister.addToDisplay(AllomancyBlocks.BLOCKS, output); + }) + ); + + + private static void addToExistingTabs(BuildCreativeModeTabContentsEvent event) + { + ResourceKey tabKey = event.getTabKey(); + if (tabKey == CreativeModeTabs.BUILDING_BLOCKS) + { + //CreativeTabDeferredRegister.addToDisplay(event, BlocksRegistry.METALWORKING_TABLE); + } + else if (tabKey == CreativeModeTabs.NATURAL_BLOCKS) + { + /*for (var ore : BlocksRegistry.METAL_ORE.values()) + { + CreativeTabDeferredRegister.addToDisplay(event, ore); + } + for (var ore : BlocksRegistry.METAL_ORE_DEEPSLATE.values()) + { + CreativeTabDeferredRegister.addToDisplay(event, ore); + }*/ + } + else if (tabKey == CreativeModeTabs.FUNCTIONAL_BLOCKS) + { + + } + else if (tabKey == CreativeModeTabs.REDSTONE_BLOCKS) + { + + } + else if (tabKey == CreativeModeTabs.TOOLS_AND_UTILITIES) + { + for (var metalType : EnumUtils.METAL_TYPES) + { + if (!metalType.hasMaterialItem()) + { + continue; + } + + CreativeTabDeferredRegister.addToDisplay(event, ToolsItems.METAL_PICKAXES.get(metalType)); + CreativeTabDeferredRegister.addToDisplay(event, ToolsItems.METAL_SHOVEL.get(metalType)); + CreativeTabDeferredRegister.addToDisplay(event, ToolsItems.METAL_AXES.get(metalType)); + CreativeTabDeferredRegister.addToDisplay(event, ToolsItems.METAL_HOE.get(metalType)); + } + } + else if (tabKey == CreativeModeTabs.COMBAT) + { + for (var metalType : EnumUtils.METAL_TYPES) + { + if (!metalType.hasMaterialItem()) + { + continue; + } + + CreativeTabDeferredRegister.addToDisplay(event, ToolsItems.METAL_SWORDS.get(metalType)); + CreativeTabDeferredRegister.addToDisplay(event, ToolsItems.METAL_HELMETS.get(metalType)); + CreativeTabDeferredRegister.addToDisplay(event, ToolsItems.METAL_CHESTPLATES.get(metalType)); + CreativeTabDeferredRegister.addToDisplay(event, ToolsItems.METAL_LEGGINGS.get(metalType)); + CreativeTabDeferredRegister.addToDisplay(event, ToolsItems.METAL_BOOTS.get(metalType)); + } + } + else if (tabKey == CreativeModeTabs.FOOD_AND_DRINKS) + { + //ItemsRegistry.SOME_FOOD.get().addItems(event); + } + else if (tabKey == CreativeModeTabs.SPAWN_EGGS) + { + + } + else if (tabKey == CreativeModeTabs.INGREDIENTS) + { + + } + } + +} diff --git a/src/cosmeretools/java/leaf/cosmere/tools/common/registries/ToolsEffects.java b/src/cosmeretools/java/leaf/cosmere/tools/common/registries/ToolsEffects.java new file mode 100644 index 000000000..d4363cbab --- /dev/null +++ b/src/cosmeretools/java/leaf/cosmere/tools/common/registries/ToolsEffects.java @@ -0,0 +1,16 @@ +/* + * File updated ~ 22 - 3 - 2024 ~ Leaf + */ + +package leaf.cosmere.tools.common.registries; + +import leaf.cosmere.common.registration.impl.CosmereEffectDeferredRegister; +import leaf.cosmere.tools.common.CosmereTools; + +public class ToolsEffects +{ + + public static final CosmereEffectDeferredRegister EFFECTS = new CosmereEffectDeferredRegister(CosmereTools.MODID); + + +} diff --git a/src/cosmeretools/java/leaf/cosmere/tools/common/registries/ToolsEntityTypes.java b/src/cosmeretools/java/leaf/cosmere/tools/common/registries/ToolsEntityTypes.java new file mode 100644 index 000000000..3c8a19e74 --- /dev/null +++ b/src/cosmeretools/java/leaf/cosmere/tools/common/registries/ToolsEntityTypes.java @@ -0,0 +1,13 @@ +/* + * File updated ~ 22 - 3 - 2024 ~ Leaf + */ + +package leaf.cosmere.tools.common.registries; + +import leaf.cosmere.common.registration.impl.EntityTypeDeferredRegister; +import leaf.cosmere.tools.common.CosmereTools; + +public class ToolsEntityTypes +{ + public static final EntityTypeDeferredRegister ENTITY_TYPES = new EntityTypeDeferredRegister(CosmereTools.MODID); +} diff --git a/src/cosmeretools/java/leaf/cosmere/tools/common/registries/ToolsFeatures.java b/src/cosmeretools/java/leaf/cosmere/tools/common/registries/ToolsFeatures.java new file mode 100644 index 000000000..7ee4ab9dc --- /dev/null +++ b/src/cosmeretools/java/leaf/cosmere/tools/common/registries/ToolsFeatures.java @@ -0,0 +1,15 @@ +/* + * File updated ~ 4 - 9 - 2024 ~ Leaf + */ + +package leaf.cosmere.tools.common.registries; + +import leaf.cosmere.common.registration.impl.ConfiguredFeatureDeferredRegister; +import leaf.cosmere.common.registration.impl.PlacedFeatureDeferredRegister; +import leaf.cosmere.tools.common.CosmereTools; + +public class ToolsFeatures +{ + public static final ConfiguredFeatureDeferredRegister CONFIGURED_FEATURES = new ConfiguredFeatureDeferredRegister(CosmereTools.MODID); + public static final PlacedFeatureDeferredRegister PLACED_FEATURES = new PlacedFeatureDeferredRegister(CosmereTools.MODID); +} diff --git a/src/cosmeretools/java/leaf/cosmere/tools/common/registries/ToolsItems.java b/src/cosmeretools/java/leaf/cosmere/tools/common/registries/ToolsItems.java new file mode 100644 index 000000000..46c105a06 --- /dev/null +++ b/src/cosmeretools/java/leaf/cosmere/tools/common/registries/ToolsItems.java @@ -0,0 +1,150 @@ +/* + * File updated ~ 20 - 11 - 2024 ~ Leaf + */ + +package leaf.cosmere.tools.common.registries; + +import leaf.cosmere.api.EnumUtils; +import leaf.cosmere.api.Metals; +import leaf.cosmere.common.registration.impl.ItemDeferredRegister; +import leaf.cosmere.common.registration.impl.ItemRegistryObject; +import leaf.cosmere.tools.common.CosmereTools; +import leaf.cosmere.tools.common.items.*; +import net.minecraft.world.item.ArmorItem; +import net.minecraft.world.item.Item; + +import java.util.Arrays; +import java.util.Map; +import java.util.function.Function; +import java.util.function.Supplier; +import java.util.stream.Collectors; + +public class ToolsItems +{ + public static final ItemDeferredRegister ITEMS = new ItemDeferredRegister(CosmereTools.MODID); + public static final Supplier TOOL = () -> new Item.Properties(); + + public static final Map> METAL_PICKAXES = + Arrays.stream(EnumUtils.METAL_TYPES) + .filter(Metals.MetalType::hasMaterialItem) + .collect(Collectors.toMap( + Function.identity(), + type -> ITEMS.register( + type.getName() + "_pickaxe", + () -> new TPickaxeItem( + type, + 1, + -2.8F, + TOOL.get().rarity(type.getRarity()) + ) + ))); + + public static final Map> METAL_AXES = + Arrays.stream(EnumUtils.METAL_TYPES) + .filter(Metals.MetalType::hasMaterialItem) + .collect(Collectors.toMap( + Function.identity(), + type -> ITEMS.register( + type.getName() + "_axe", + () -> new TAxeItem( + type, + 5, + -3.1F, + TOOL.get().rarity(type.getRarity()) + ) + ))); + + + public static final Map> METAL_SHOVEL = + Arrays.stream(EnumUtils.METAL_TYPES) + .filter(Metals.MetalType::hasMaterialItem) + .collect(Collectors.toMap( + Function.identity(), + type -> ITEMS.register( + type.getName() + "_shovel", + () -> new TShovelItem( + type, + 1.5f, + -3.0F, + TOOL.get().rarity(type.getRarity()) + ) + ))); + + + public static final Map> METAL_HOE = + Arrays.stream(EnumUtils.METAL_TYPES) + .filter(Metals.MetalType::hasMaterialItem) + .collect(Collectors.toMap( + Function.identity(), + type -> ITEMS.register( + type.getName() + "_hoe", + () -> new THoeItem( + type, + 0, + -3.0F, + TOOL.get().rarity(type.getRarity()) + ) + ))); + + + public static final Map> METAL_SWORDS = + Arrays.stream(EnumUtils.METAL_TYPES) + .filter(Metals.MetalType::hasMaterialItem) + .collect(Collectors.toMap( + Function.identity(), + type -> ITEMS.register( + type.getName() + "_sword", + () -> new TSwordItem( + type, + 3, + -2.4F, + TOOL.get().rarity(type.getRarity()) + ) + ))); + + + public static final Map> METAL_HELMETS = + Arrays.stream(EnumUtils.METAL_TYPES) + .filter(Metals.MetalType::hasMaterialItem) + .collect(Collectors.toMap( + Function.identity(), + type -> ITEMS.register( + type.getName() + "_helmet", + () -> new TArmorItem(type, ArmorItem.Type.HELMET, (new Item.Properties()).rarity(type.getRarity()) + )))); + + + public static final Map> METAL_CHESTPLATES = + Arrays.stream(EnumUtils.METAL_TYPES) + .filter(Metals.MetalType::hasMaterialItem) + .collect(Collectors.toMap( + Function.identity(), + type -> ITEMS.register( + type.getName() + "_chestplate", + () -> new TArmorItem(type, ArmorItem.Type.CHESTPLATE, (new Item.Properties()).rarity(type.getRarity()) + )))); + + + public static final Map> METAL_LEGGINGS = + Arrays.stream(EnumUtils.METAL_TYPES) + .filter(Metals.MetalType::hasMaterialItem) + .collect(Collectors.toMap( + Function.identity(), + type -> ITEMS.register( + type.getName() + "_leggings", + () -> new TArmorItem(type, ArmorItem.Type.LEGGINGS, (new Item.Properties()).rarity(type.getRarity()) + )))); + + + public static final Map> METAL_BOOTS = + Arrays.stream(EnumUtils.METAL_TYPES) + .filter(Metals.MetalType::hasMaterialItem) + .collect(Collectors.toMap( + Function.identity(), + type -> ITEMS.register( + type.getName() + "_boots", + () -> new TArmorItem(type, ArmorItem.Type.BOOTS, (new Item.Properties()).rarity(type.getRarity()) + )))); + + +} diff --git a/src/cosmeretools/java/leaf/cosmere/tools/common/registries/ToolsManifestations.java b/src/cosmeretools/java/leaf/cosmere/tools/common/registries/ToolsManifestations.java new file mode 100644 index 000000000..0807b8b77 --- /dev/null +++ b/src/cosmeretools/java/leaf/cosmere/tools/common/registries/ToolsManifestations.java @@ -0,0 +1,18 @@ +/* + * File updated ~ 22 - 3 - 2024 ~ Leaf + */ + +package leaf.cosmere.tools.common.registries; + +import leaf.cosmere.api.manifestation.Manifestation; +import leaf.cosmere.common.registration.impl.ManifestationDeferredRegister; +import leaf.cosmere.common.registration.impl.ManifestationRegistryObject; +import leaf.cosmere.tools.common.CosmereTools; + +public class ToolsManifestations +{ + public static final ManifestationDeferredRegister MANIFESTATIONS = new ManifestationDeferredRegister(CosmereTools.MODID); + + public static final ManifestationRegistryObject TOOLS_MANIFESTATION = MANIFESTATIONS.register("tools", Manifestation::new); + +} diff --git a/src/cosmeretools/java/leaf/cosmere/tools/common/registries/ToolsMenuTypes.java b/src/cosmeretools/java/leaf/cosmere/tools/common/registries/ToolsMenuTypes.java new file mode 100644 index 000000000..25cdacef8 --- /dev/null +++ b/src/cosmeretools/java/leaf/cosmere/tools/common/registries/ToolsMenuTypes.java @@ -0,0 +1,14 @@ +/* + * File updated ~ 22 - 3 - 2024 ~ Leaf + */ + +package leaf.cosmere.tools.common.registries; + +import leaf.cosmere.common.registration.impl.MenuTypeDeferredRegister; +import leaf.cosmere.tools.common.CosmereTools; + +public class ToolsMenuTypes +{ + public static final MenuTypeDeferredRegister MENU_TYPES = new MenuTypeDeferredRegister(CosmereTools.MODID); + +} diff --git a/src/cosmeretools/java/leaf/cosmere/tools/common/registries/ToolsRecipes.java b/src/cosmeretools/java/leaf/cosmere/tools/common/registries/ToolsRecipes.java new file mode 100644 index 000000000..d600a070a --- /dev/null +++ b/src/cosmeretools/java/leaf/cosmere/tools/common/registries/ToolsRecipes.java @@ -0,0 +1,15 @@ +/* + * File updated ~ 22 - 3 - 2024 ~ Leaf + */ + +package leaf.cosmere.tools.common.registries; + +import leaf.cosmere.common.registration.impl.RecipeSerializerDeferredRegister; +import leaf.cosmere.tools.common.CosmereTools; + +// for the non-json based recipes +public class ToolsRecipes +{ + public static final RecipeSerializerDeferredRegister SPECIAL_RECIPES = new RecipeSerializerDeferredRegister(CosmereTools.MODID); + +} diff --git a/src/cosmeretools/java/leaf/cosmere/tools/common/registries/ToolsStats.java b/src/cosmeretools/java/leaf/cosmere/tools/common/registries/ToolsStats.java new file mode 100644 index 000000000..2d10394d4 --- /dev/null +++ b/src/cosmeretools/java/leaf/cosmere/tools/common/registries/ToolsStats.java @@ -0,0 +1,25 @@ +/* + * File updated ~ 22 - 3 - 2024 ~ Leaf + */ + +package leaf.cosmere.tools.common.registries; + +import leaf.cosmere.common.registration.impl.StatDeferredRegister; +import leaf.cosmere.common.registration.impl.StatRegistryObject; +import leaf.cosmere.tools.common.CosmereTools; +import net.minecraft.stats.StatFormatter; +import net.minecraft.stats.Stats; + +public class ToolsStats +{ + public static final StatDeferredRegister STATS = new StatDeferredRegister(CosmereTools.MODID); + + + public static void initStatEntries() + { + for (StatRegistryObject value : STATS.getAllItems()) + { + Stats.CUSTOM.get(value.get(), StatFormatter.TIME); + } + } +} diff --git a/src/cosmeretools/java/leaf/cosmere/tools/mixin/EntityMixin.java b/src/cosmeretools/java/leaf/cosmere/tools/mixin/EntityMixin.java new file mode 100644 index 000000000..1b57ac135 --- /dev/null +++ b/src/cosmeretools/java/leaf/cosmere/tools/mixin/EntityMixin.java @@ -0,0 +1,15 @@ +/* + * File updated ~ 22 - 3 - 2024 ~ Leaf + */ + +package leaf.cosmere.tools.mixin; + +import net.minecraft.world.entity.Entity; +import org.spongepowered.asm.mixin.Mixin; + +@Mixin(Entity.class) +public class EntityMixin +{ + +} + diff --git a/src/cosmeretools/resources/META-INF/mods.toml b/src/cosmeretools/resources/META-INF/mods.toml new file mode 100644 index 000000000..93362a8b6 --- /dev/null +++ b/src/cosmeretools/resources/META-INF/mods.toml @@ -0,0 +1,25 @@ +modLoader = "javafml" +loaderVersion = "${loader_version}" +issueTrackerURL = "https://github.com/leafreynolds/Cosmere/issues" +license = "MIT" + +[[mods]] +modId = "cosmeretools" +version = "${version}" +displayName = "Cosmere: Tools" +displayURL = "https://www.curseforge.com/minecraft/mc-mods/cosmere-tools" +authors = "Leaf" +credits = ''' + +Special thanks go to: +Ridanisaurus - For many item and block textures. +''' +logoFile = "logo.png" +description = '''Tools module for Cosmere.''' + +[[dependencies.cosmeretools]] +modId = "cosmere" +mandatory = true +versionRange = "[${version}]" +ordering = "AFTER" +side = "BOTH" diff --git a/src/cosmeretools/resources/assets/cosmeretools/atlases/icons.json b/src/cosmeretools/resources/assets/cosmeretools/atlases/icons.json new file mode 100644 index 000000000..f21860a70 --- /dev/null +++ b/src/cosmeretools/resources/assets/cosmeretools/atlases/icons.json @@ -0,0 +1,9 @@ +{ + "sources": [ + { + "type": "directory", + "source": "icon/cosmeretools", + "prefix": "" + } + ] +} \ No newline at end of file diff --git a/src/cosmeretools/resources/assets/cosmeretools/textures/icon/cosmeretools/placeholder.txt b/src/cosmeretools/resources/assets/cosmeretools/textures/icon/cosmeretools/placeholder.txt new file mode 100644 index 000000000..05704751d --- /dev/null +++ b/src/cosmeretools/resources/assets/cosmeretools/textures/icon/cosmeretools/placeholder.txt @@ -0,0 +1 @@ +Icons go here later :) \ No newline at end of file diff --git a/src/cosmeretools/resources/assets/cosmeretools/textures/item/metal_axe.png b/src/cosmeretools/resources/assets/cosmeretools/textures/item/metal_axe.png new file mode 100644 index 000000000..bf273f1cb Binary files /dev/null and b/src/cosmeretools/resources/assets/cosmeretools/textures/item/metal_axe.png differ diff --git a/src/cosmeretools/resources/assets/cosmeretools/textures/item/metal_axe_0.png b/src/cosmeretools/resources/assets/cosmeretools/textures/item/metal_axe_0.png new file mode 100644 index 000000000..2e6c66b15 Binary files /dev/null and b/src/cosmeretools/resources/assets/cosmeretools/textures/item/metal_axe_0.png differ diff --git a/src/cosmeretools/resources/assets/cosmeretools/textures/item/metal_hoe.png b/src/cosmeretools/resources/assets/cosmeretools/textures/item/metal_hoe.png new file mode 100644 index 000000000..0413147b7 Binary files /dev/null and b/src/cosmeretools/resources/assets/cosmeretools/textures/item/metal_hoe.png differ diff --git a/src/cosmeretools/resources/assets/cosmeretools/textures/item/metal_hoe_0.png b/src/cosmeretools/resources/assets/cosmeretools/textures/item/metal_hoe_0.png new file mode 100644 index 000000000..91c54dc4d Binary files /dev/null and b/src/cosmeretools/resources/assets/cosmeretools/textures/item/metal_hoe_0.png differ diff --git a/src/cosmeretools/resources/assets/cosmeretools/textures/item/metal_pickaxe.png b/src/cosmeretools/resources/assets/cosmeretools/textures/item/metal_pickaxe.png new file mode 100644 index 000000000..bbe13ab5c Binary files /dev/null and b/src/cosmeretools/resources/assets/cosmeretools/textures/item/metal_pickaxe.png differ diff --git a/src/cosmeretools/resources/assets/cosmeretools/textures/item/metal_pickaxe_0.png b/src/cosmeretools/resources/assets/cosmeretools/textures/item/metal_pickaxe_0.png new file mode 100644 index 000000000..91c54dc4d Binary files /dev/null and b/src/cosmeretools/resources/assets/cosmeretools/textures/item/metal_pickaxe_0.png differ diff --git a/src/cosmeretools/resources/assets/cosmeretools/textures/item/metal_shovel.png b/src/cosmeretools/resources/assets/cosmeretools/textures/item/metal_shovel.png new file mode 100644 index 000000000..ba10863be Binary files /dev/null and b/src/cosmeretools/resources/assets/cosmeretools/textures/item/metal_shovel.png differ diff --git a/src/cosmeretools/resources/assets/cosmeretools/textures/item/metal_shovel_0.png b/src/cosmeretools/resources/assets/cosmeretools/textures/item/metal_shovel_0.png new file mode 100644 index 000000000..75554f689 Binary files /dev/null and b/src/cosmeretools/resources/assets/cosmeretools/textures/item/metal_shovel_0.png differ diff --git a/src/cosmeretools/resources/assets/cosmeretools/textures/item/metal_sword.png b/src/cosmeretools/resources/assets/cosmeretools/textures/item/metal_sword.png new file mode 100644 index 000000000..875546213 Binary files /dev/null and b/src/cosmeretools/resources/assets/cosmeretools/textures/item/metal_sword.png differ diff --git a/src/cosmeretools/resources/assets/cosmeretools/textures/item/metal_sword_0.png b/src/cosmeretools/resources/assets/cosmeretools/textures/item/metal_sword_0.png new file mode 100644 index 000000000..87612685f Binary files /dev/null and b/src/cosmeretools/resources/assets/cosmeretools/textures/item/metal_sword_0.png differ diff --git a/src/cosmeretools/resources/assets/cosmeretools/textures/models/armor/armor_layer_1.png b/src/cosmeretools/resources/assets/cosmeretools/textures/models/armor/armor_layer_1.png new file mode 100644 index 000000000..1da5d2637 Binary files /dev/null and b/src/cosmeretools/resources/assets/cosmeretools/textures/models/armor/armor_layer_1.png differ diff --git a/src/cosmeretools/resources/assets/cosmeretools/textures/models/armor/armor_layer_2.png b/src/cosmeretools/resources/assets/cosmeretools/textures/models/armor/armor_layer_2.png new file mode 100644 index 000000000..3170869e4 Binary files /dev/null and b/src/cosmeretools/resources/assets/cosmeretools/textures/models/armor/armor_layer_2.png differ diff --git a/src/cosmeretools/resources/assets/cosmeretools/textures/models/armor/armor_overlay.png b/src/cosmeretools/resources/assets/cosmeretools/textures/models/armor/armor_overlay.png new file mode 100644 index 000000000..c97e520a6 Binary files /dev/null and b/src/cosmeretools/resources/assets/cosmeretools/textures/models/armor/armor_overlay.png differ diff --git a/src/cosmeretools/resources/cosmeretools.mixins.json b/src/cosmeretools/resources/cosmeretools.mixins.json new file mode 100644 index 000000000..b324a5ca2 --- /dev/null +++ b/src/cosmeretools/resources/cosmeretools.mixins.json @@ -0,0 +1,15 @@ +{ + "required": true, + "minVersion": "0.8", + "package": "leaf.cosmere.tools.mixin", + "compatibilityLevel": "JAVA_17", + "refmap": "mixins.cosmere.cosmeretools.refmap.json", + "mixins": [ + "EntityMixin" + ], + "client": [ + ], + "injectors": { + "defaultRequire": 1 + } +} \ No newline at end of file diff --git a/src/cosmeretools/resources/pack.mcmeta b/src/cosmeretools/resources/pack.mcmeta new file mode 100644 index 000000000..9bce70cc6 --- /dev/null +++ b/src/cosmeretools/resources/pack.mcmeta @@ -0,0 +1,6 @@ +{ + "pack": { + "description": "Resources used for Cosmere Tools", + "pack_format": 15 + } +} \ No newline at end of file diff --git a/src/datagen/allomancy/java/leaf/cosmere/allomancy/AllomancyDataGenerator.java b/src/datagen/allomancy/java/leaf/cosmere/allomancy/AllomancyDataGenerator.java new file mode 100644 index 000000000..26f54954a --- /dev/null +++ b/src/datagen/allomancy/java/leaf/cosmere/allomancy/AllomancyDataGenerator.java @@ -0,0 +1,36 @@ +/* + * File updated ~ 8 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.allomancy; + +import leaf.cosmere.allomancy.common.Allomancy; +import leaf.cosmere.allomancy.patchouli.AllomancyPatchouliGen; +import net.minecraft.data.DataGenerator; +import net.minecraft.data.PackOutput; +import net.minecraftforge.common.data.ExistingFileHelper; +import net.minecraftforge.data.event.GatherDataEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod.EventBusSubscriber; +import net.minecraftforge.fml.common.Mod.EventBusSubscriber.Bus; + +@EventBusSubscriber(modid = Allomancy.MODID, bus = Bus.MOD) +public class AllomancyDataGenerator +{ + @SubscribeEvent + public static void gatherData(GatherDataEvent event) + { + DataGenerator generator = event.getGenerator(); + PackOutput packOutput = generator.getPackOutput(); + ExistingFileHelper existingFileHelper = event.getExistingFileHelper(); + + generator.addProvider(true, new AllomancyEngLangGen(packOutput)); + generator.addProvider(true, new AllomancyItemModelsGen(packOutput, existingFileHelper)); + generator.addProvider(true, new AllomancyRecipeGen(packOutput, existingFileHelper)); + generator.addProvider(true, new AllomancyPatchouliGen(packOutput)); + generator.addProvider(true, new AllomancyTagProvider(packOutput, event.getLookupProvider(), existingFileHelper)); + + generator.addProvider(true, new AllomancyDatapackRegistryProvider(packOutput, event.getLookupProvider())); + } + +} \ No newline at end of file diff --git a/src/datagen/allomancy/java/leaf/cosmere/allomancy/AllomancyDatapackRegistryProvider.java b/src/datagen/allomancy/java/leaf/cosmere/allomancy/AllomancyDatapackRegistryProvider.java new file mode 100644 index 000000000..dc18d659a --- /dev/null +++ b/src/datagen/allomancy/java/leaf/cosmere/allomancy/AllomancyDatapackRegistryProvider.java @@ -0,0 +1,29 @@ +package leaf.cosmere.allomancy; + +import leaf.cosmere.BaseDatapackRegistryProvider; +import leaf.cosmere.allomancy.common.Allomancy; +import leaf.cosmere.allomancy.common.registries.AllomancyDamageTypesRegistry; +import net.minecraft.core.HolderLookup; +import net.minecraft.core.RegistrySetBuilder; +import net.minecraft.core.registries.Registries; +import net.minecraft.data.PackOutput; +import net.minecraft.world.damagesource.DamageType; + +import java.util.concurrent.CompletableFuture; + +public class AllomancyDatapackRegistryProvider extends BaseDatapackRegistryProvider +{ + protected AllomancyDatapackRegistryProvider(PackOutput output, CompletableFuture lookupProvider) + { + super(output, lookupProvider, BUILDER, Allomancy.MODID); + } + + private static final RegistrySetBuilder BUILDER = new RegistrySetBuilder() + .add(Registries.DAMAGE_TYPE, context -> + { + for (AllomancyDamageTypesRegistry.AllomancyDamageType damageType : AllomancyDamageTypesRegistry.DAMAGE_TYPES.values()) + { + context.register(damageType.key(), new DamageType(damageType.getMsgId(), damageType.exhaustion())); + } + }); +} diff --git a/src/datagen/allomancy/java/leaf/cosmere/allomancy/AllomancyEngLangGen.java b/src/datagen/allomancy/java/leaf/cosmere/allomancy/AllomancyEngLangGen.java new file mode 100644 index 000000000..92106c343 --- /dev/null +++ b/src/datagen/allomancy/java/leaf/cosmere/allomancy/AllomancyEngLangGen.java @@ -0,0 +1,236 @@ +/* + * File updated ~ 20 - 11 - 2024 ~ Leaf + */ + +package leaf.cosmere.allomancy; + +import leaf.cosmere.allomancy.common.Allomancy; +import leaf.cosmere.allomancy.common.manifestation.AllomancyManifestation; +import leaf.cosmere.allomancy.common.registries.AllomancyAttributes; +import leaf.cosmere.allomancy.common.registries.AllomancyEffects; +import leaf.cosmere.allomancy.common.registries.AllomancyEntityTypes; +import leaf.cosmere.allomancy.common.registries.AllomancyManifestations; +import leaf.cosmere.api.EnumUtils; +import leaf.cosmere.api.Manifestations; +import leaf.cosmere.api.Metals; +import leaf.cosmere.api.helpers.RegistryHelper; +import leaf.cosmere.api.providers.IAttributeProvider; +import leaf.cosmere.api.providers.ICosmereEffectProvider; +import leaf.cosmere.api.providers.IEntityTypeProvider; +import leaf.cosmere.api.providers.IMobEffectProvider; +import leaf.cosmere.api.text.StringHelper; +import leaf.cosmere.common.registration.impl.ManifestationRegistryObject; +import net.minecraft.data.PackOutput; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.Item; +import net.minecraftforge.common.data.LanguageProvider; +import net.minecraftforge.registries.ForgeRegistries; + +import java.util.Arrays; +import java.util.Locale; + +import static leaf.cosmere.allomancy.common.registries.AllomancyAttributes.ALLOMANCY_ATTRIBUTES; +import static leaf.cosmere.api.Constants.Strings.*; + +public class AllomancyEngLangGen extends LanguageProvider +{ + final String advancementTitleFormat = "advancements.allomancy.%s.title"; + final String advancementDescriptionFormat = "advancements.allomancy.%s.description"; + + public AllomancyEngLangGen(PackOutput output) + { + super(output, Allomancy.MODID, "en_us"); + } + + @Override + protected void addTranslations() + { + addItemsAndBlocks(); + addEntities(); + addAdvancements(); + addManifestations(); + addAttributes(); + addPatchouli(); + addTooltips(); + addCreativeTabs(); + addDamageSources(); + addMobEffects(); + addCurioIdentifiers(); + addConfigs(); + addCommands(); + addKeybindings(); + addStats(); + + } + + + private void addItemsAndBlocks() + { + //Items and Blocks + for (Item item : ForgeRegistries.ITEMS.getValues()) + { + final ResourceLocation registryName = RegistryHelper.get(item); + if (registryName.getNamespace().contentEquals(Allomancy.MODID)) + { + String localisedString = StringHelper.fixCapitalisation(registryName.getPath()); + + add(item.getDescriptionId(), localisedString); + } + } + } + + private void addEntities() + { + //Entities + for (IEntityTypeProvider type : AllomancyEntityTypes.ENTITY_TYPES.getAllEntityTypes()) + { + final ResourceLocation id = type.getRegistryName(); + add(type.getEntityType().getDescriptionId(), StringHelper.fixCapitalisation(id.getPath())); + } + } + + private void addAdvancements() + { + //innate + Manifestations.ManifestationTypes value = Manifestations.ManifestationTypes.ALLOMANCY; + { + add(String.format(advancementTitleFormat, value.getName()), StringHelper.fixCapitalisation(value.getName())); + add(String.format(advancementDescriptionFormat, value.getName()), "Test description: " + StringHelper.fixCapitalisation(value.getName())); + } + } + + private void addManifestations() + { + for (ManifestationRegistryObject manifestationRegistryObject : AllomancyManifestations.ALLOMANCY_POWERS.values()) + { + AllomancyManifestation manifestation = manifestationRegistryObject.getManifestation(); + + //power type + String key = manifestation.getTranslationKey(); + + //description + String name; + String description; + + + String tabName = manifestation.getManifestationType().getName(); + String metalName = Metals.MetalType.valueOf(manifestation.getPowerID()).get().toString().toLowerCase(Locale.ROOT); + + name = "Allomantic " + metalName; + description = "Users can burn " + metalName; + add(String.format(advancementTitleFormat, tabName + "." + metalName), StringHelper.fixCapitalisation(name)); + add(String.format(advancementDescriptionFormat, tabName + "." + metalName), "Test description: " + StringHelper.fixCapitalisation(name)); + + //Name + add(key, StringHelper.fixCapitalisation(name)); + + //todo decide about manifestation descriptions? + final ResourceLocation regName = manifestation.getRegistryName(); + add("manifestation." + regName.getNamespace() + "." + regName.getPath() + ".description", description); + } + + + //work through each metal and generate localisation for related things. + for (Metals.MetalType metalType : EnumUtils.METAL_TYPES) + { + if (metalType.hasAssociatedManifestation()) + { + final String mistingName = metalType.getMistingName(); + add("allomancy." + mistingName, StringHelper.fixCapitalisation(mistingName)); + } + } + } + + private void addAttributes() + { + //Attributes + ALLOMANCY_ATTRIBUTES.forEach((metalType, registryObject) -> + { + final String descriptionId = registryObject.getAttribute().getDescriptionId(); + + String name = "Allomantic " + metalType.getName(); + // Attributes are the powers themselves, they need their own names. + add(descriptionId, StringHelper.fixCapitalisation(name)); + }); + } + + private void addPatchouli() + { + //work through each metal and generate localisation for related things. + for (Metals.MetalType metalType : EnumUtils.METAL_TYPES) + { + final String name = metalType.getName(); + final String mistingName = metalType.getMistingName(); + String a = name + " - " + mistingName; + String aKey = metalType.getName(); + String allomancyGuide = "entry." + aKey; + add(allomancyGuide, StringHelper.fixCapitalisation(a)); + } + } + + private void addTooltips() + { + add("tooltip.cosmere.metals.contained", "Contained Metals:"); + } + + private void addCreativeTabs() + { + //ItemGroups/Tabs + add("tabs.allomancy.items", "Allomancy"); + } + + private void addDamageSources() + { + //Damage Sources + add("death.attack.allomancy.pewter_delayed_damage", "%1$s stopped burning pewter and succumbed to their wounds"); + add("death.attack.allomancy.pewter_delayed_damage.player", "%1$s stopped burning pewter while fighting %2$s and succumbed to their wounds"); + } + + private void addMobEffects() + { + // + for (ICosmereEffectProvider effect : AllomancyEffects.EFFECTS.getEffectsInRegistry()) + { + add(effect.getEffect().getTranslationKey(), StringHelper.fixCapitalisation(effect.getRegistryName().getPath())); + } + + for (IMobEffectProvider effect : AllomancyEffects.MOB_EFFECTS.getAllMobEffects()) + { + add(effect.getMobEffect().getDescriptionId(), StringHelper.fixCapitalisation(effect.getRegistryName().getPath())); + } + } + + private void addCurioIdentifiers() + { + + } + + private void addConfigs() + { + add("config.jade.plugin_allomancy.bronze_seeker_tooltip", "Seeker Tooltip"); + } + + private void addCommands() + { + } + + private void addKeybindings() + { + //KeyBindings + add(KEY_ALLOMANCY_STEEL_PUSH, "Push"); + add(KEY_ALLOMANCY_IRON_PULL, "Pull"); + add(KEY_ALLOMANCY_RIOT, "Riot"); + add(KEY_ALLOMANCY_SOOTHE, "Soothe"); + } + + private void addStats() + { + //stats + Arrays.stream(EnumUtils.METAL_TYPES) + .filter(Metals.MetalType::hasAssociatedManifestation).forEach(metalType -> + add( + "stat.minecraft.time_since_started_burning_" + metalType.getName(), + "Time since started burning " + metalType.getName() + )); + } +} diff --git a/src/datagen/allomancy/java/leaf/cosmere/allomancy/AllomancyItemModelsGen.java b/src/datagen/allomancy/java/leaf/cosmere/allomancy/AllomancyItemModelsGen.java new file mode 100644 index 000000000..02984491b --- /dev/null +++ b/src/datagen/allomancy/java/leaf/cosmere/allomancy/AllomancyItemModelsGen.java @@ -0,0 +1,62 @@ +/* + * File updated ~ 8 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.allomancy; + +import leaf.cosmere.allomancy.common.Allomancy; +import leaf.cosmere.allomancy.common.registries.AllomancyItems; +import leaf.cosmere.api.helpers.RegistryHelper; +import leaf.cosmere.api.providers.IItemProvider; +import net.minecraft.data.PackOutput; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.BlockItem; +import net.minecraft.world.item.Item; +import net.minecraftforge.client.model.generators.ItemModelBuilder; +import net.minecraftforge.client.model.generators.ItemModelProvider; +import net.minecraftforge.client.model.generators.ModelFile; +import net.minecraftforge.common.data.ExistingFileHelper; + +import java.util.function.Supplier; + +public class AllomancyItemModelsGen extends ItemModelProvider +{ + + public AllomancyItemModelsGen(PackOutput generator, ExistingFileHelper existingFileHelper) + { + super(generator, Allomancy.MODID, existingFileHelper); + } + + @Override + protected void registerModels() + { + for (IItemProvider itemRegistryObject : AllomancyItems.ITEMS.getAllItems()) + { + String path = itemRegistryObject.getRegistryName().getPath(); + Item item = itemRegistryObject.asItem(); + + //blocks have their own model rules + if (item instanceof BlockItem) + { + continue; + } + + //else normal item texture rules apply + simpleItem(path, path); + } + + } + + public String getPath(Supplier itemSupplier) + { + ResourceLocation location = RegistryHelper.get(itemSupplier.get()); + return location.getPath(); + } + + public ItemModelBuilder simpleItem(String path, String texturePath) + { + return this.getBuilder(path) + .parent(new ModelFile.UncheckedModelFile("item/generated")) + .texture("layer0", modLoc("item/" + texturePath)); + } +} \ No newline at end of file diff --git a/src/datagen/allomancy/java/leaf/cosmere/allomancy/AllomancyRecipeGen.java b/src/datagen/allomancy/java/leaf/cosmere/allomancy/AllomancyRecipeGen.java new file mode 100644 index 000000000..cece80ce1 --- /dev/null +++ b/src/datagen/allomancy/java/leaf/cosmere/allomancy/AllomancyRecipeGen.java @@ -0,0 +1,50 @@ +/* + * File updated ~ 4 - 1 - 2025 ~ Leaf + */ + +package leaf.cosmere.allomancy; + +import leaf.cosmere.BaseRecipeProvider; +import leaf.cosmere.allomancy.common.Allomancy; +import leaf.cosmere.allomancy.common.registries.AllomancyItems; +import leaf.cosmere.allomancy.common.registries.AllomancyRecipes; +import net.minecraft.data.PackOutput; +import net.minecraft.data.recipes.*; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.Items; +import net.minecraftforge.common.Tags; +import net.minecraftforge.common.crafting.conditions.IConditionBuilder; +import net.minecraftforge.common.data.ExistingFileHelper; + +import java.util.function.Consumer; + +public class AllomancyRecipeGen extends BaseRecipeProvider implements IConditionBuilder +{ + public AllomancyRecipeGen(PackOutput output, ExistingFileHelper existingFileHelper) + { + super(output, existingFileHelper, Allomancy.MODID); + } + + @Override + protected void addRecipes(Consumer consumer) + { + ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS, AllomancyItems.METAL_VIAL.get()).define('X', Items.IRON_NUGGET).define('Y', Items.GLASS).pattern("X").pattern("Y").unlockedBy("has_material", has(Items.GLASS)).save(consumer); + + ShapelessRecipeBuilder.shapeless(RecipeCategory.TOOLS, AllomancyItems.COIN_POUCH.get(), 1) + .unlockedBy("has_item", has(Tags.Items.LEATHER)) + .requires(Tags.Items.LEATHER) + .requires(Tags.Items.STRING) + .save(consumer); + + SpecialRecipeBuilder + .special(AllomancyRecipes.VIAL_MIX.get()) + .save(consumer, Allomancy.rl("vial_mixing").toString()); + + } + + @Override + protected ResourceLocation makeRL(String path) + { + return Allomancy.rl(path); + } +} diff --git a/src/datagen/allomancy/java/leaf/cosmere/allomancy/AllomancyTagProvider.java b/src/datagen/allomancy/java/leaf/cosmere/allomancy/AllomancyTagProvider.java new file mode 100644 index 000000000..c8ab75f9f --- /dev/null +++ b/src/datagen/allomancy/java/leaf/cosmere/allomancy/AllomancyTagProvider.java @@ -0,0 +1,30 @@ +/* + * File updated ~ 8 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.allomancy; + +import leaf.cosmere.allomancy.common.Allomancy; +import leaf.cosmere.allomancy.common.registries.AllomancyItems; +import leaf.cosmere.api.CosmereTags; +import leaf.cosmere.tag.BaseTagProvider; +import net.minecraft.core.HolderLookup; +import net.minecraft.data.PackOutput; +import net.minecraftforge.common.data.ExistingFileHelper; + +import javax.annotation.Nullable; +import java.util.concurrent.CompletableFuture; + +public class AllomancyTagProvider extends BaseTagProvider +{ + public AllomancyTagProvider(PackOutput packOutput, CompletableFuture lookupProvider, @Nullable ExistingFileHelper existingFileHelper) + { + super(packOutput, lookupProvider, Allomancy.MODID, existingFileHelper); + } + + @Override + protected void registerTags(HolderLookup.Provider registries) + { + getItemBuilder(CosmereTags.Items.CURIO_HEAD).add(AllomancyItems.MISTCLOAK.asItem()); + } +} \ No newline at end of file diff --git a/src/datagen/allomancy/java/leaf/cosmere/allomancy/patchouli/AllomancyPatchouliGen.java b/src/datagen/allomancy/java/leaf/cosmere/allomancy/patchouli/AllomancyPatchouliGen.java new file mode 100644 index 000000000..d4471e676 --- /dev/null +++ b/src/datagen/allomancy/java/leaf/cosmere/allomancy/patchouli/AllomancyPatchouliGen.java @@ -0,0 +1,61 @@ +/* + * File updated ~ 9 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.allomancy.patchouli; + +import leaf.cosmere.allomancy.common.Allomancy; +import leaf.cosmere.api.CosmereAPI; +import leaf.cosmere.patchouli.data.PatchouliProvider; +import net.minecraft.data.PackOutput; + +// +// In-Game Documentation generator +// +public class AllomancyPatchouliGen extends PatchouliProvider +{ + public AllomancyPatchouliGen(PackOutput generatorIn) + { + super(generatorIn, CosmereAPI.COSMERE_MODID); + } + + @Override + protected void collectInfoForBook() + { + //dynamically figure out all the things we wanna generate categories/entries for? + //------------------------------------------// + // Categories // + //------------------------------------------// + // - Basics // + // - Manifestations (parent category?) // + // - Feruchemy // + // - Allomancy // + // - Hemalurgy // + // - Curios // + // - Machines ? // + // - Challenges ? // + // - // + // - // + // - // + // - // + // - // + //------------------------------------------// + + PatchouliAllomancyCategory.collect(this.categories, this.entries); + + + } + + /** + * Gets a name for this provider, to use in logging. + */ + public String getName() + { + return "PatchouliGeneration"; + } + + +} + + + diff --git a/src/datagen/allomancy/java/leaf/cosmere/allomancy/patchouli/PatchouliAllomancyCategory.java b/src/datagen/allomancy/java/leaf/cosmere/allomancy/patchouli/PatchouliAllomancyCategory.java new file mode 100644 index 000000000..be283c407 --- /dev/null +++ b/src/datagen/allomancy/java/leaf/cosmere/allomancy/patchouli/PatchouliAllomancyCategory.java @@ -0,0 +1,251 @@ +/* + * File updated ~ 10 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.allomancy.patchouli; + +import leaf.cosmere.allomancy.common.manifestation.AllomancyManifestation; +import leaf.cosmere.allomancy.common.registries.AllomancyManifestations; +import leaf.cosmere.api.Constants; +import leaf.cosmere.api.Metals; +import leaf.cosmere.api.text.StringHelper; +import leaf.cosmere.common.registration.impl.ManifestationRegistryObject; +import leaf.cosmere.patchouli.data.BookStuff; +import leaf.cosmere.patchouli.data.PatchouliTextFormat; + +import java.util.ArrayList; +import java.util.List; + +public class PatchouliAllomancyCategory +{ + public static void collect(List categories, List entries) + { + BookStuff.Category allomancyCategory = new BookStuff.Category( + "allomancy", + "Despite first documentation only occurring approximately one thousand years before the Catacendre, Allomancy has been explored in far greater detail than it's older counterparts. The art requires consuming a piece of metal, then burning it for an effect.", + "cosmere:pewter_nugget"); + categories.add(allomancyCategory); + allomancyCategory.sortnum = 1; + + // Start a page list + List pages = new ArrayList<>(); + + { // Allomancy Basics Entry + BookStuff.Entry allomancyBasics = new BookStuff.Entry("allomancy_basics", allomancyCategory, "allomancy:metal_vial"); + allomancyBasics.priority = true; + + BookStuff.Page firstPage = new BookStuff.TextPage(); + firstPage.setTitle("Allomancy (For Dummies)"); + firstPage.setText( + "Here is where I shall explain Allomancy, a system of Investiture native to Scadrial. " + + "Despite first documentation only occurring approximately one thousand years before the Catacendre, Allomancy has been explored in much greater detail than it's two older counterparts."); + pages.add(firstPage); + BookStuff.Page secondPage = new BookStuff.TextPage(); + secondPage.setTitle("Allomancy (For Dummies)"); + secondPage.setText( + "The art requires consuming a piece of metal, upon which time you can \"%s\" it. ".formatted(PatchouliTextFormat.Thing("Burn")) + + "Those who are genetically gifted with a singular allomantic ability are generally referred to as a \"%s\". ".formatted(PatchouliTextFormat.Thing("Misting")) + + "For someone who has access to all sixteen abilities, they are referred to as a \"%s\".".formatted(PatchouliTextFormat.Thing("Mistborn")) + + " Someone being born a Mistborn is extremely rare, but not unheard of."); + pages.add(secondPage); + + pages.add(new BookStuff.CraftingPage("allomancy:metal_vial")); + allomancyBasics.pages = pages.toArray(BookStuff.Page[]::new); + pages.clear(); + entries.add(allomancyBasics); + } + + { // coin pouch + BookStuff.Entry coinPouchEntry = new BookStuff.Entry("coin_pouch", allomancyCategory, "allomancy:coin_pouch"); + coinPouchEntry.priority = true; + + BookStuff.Page firstPage = new BookStuff.TextPage(); + firstPage.setTitle("Coin Pouch"); + firstPage.setText( + "The coin pouch is the most common way of ammo for your steelpushing abilities. " + + "Crouch (" + PatchouliTextFormat.Keybind("key.sneak") + ") and use (" + PatchouliTextFormat.Keybind("key.use") + ") to add metal nuggets to it." + + " Don't crouch if you want to shoot ammo with steelpushes. Hold the steelpush keybind (" + PatchouliTextFormat.Keybind("key.cosmere.allomancy.push") + ") and then tap (" + PatchouliTextFormat.Keybind("key.use") + ") to shoot. " + + "If it gets stuck in a block, you will automatically get pushed away." + + "If you hit a mob and keep pushing both you and the mob will be pushed away relative to your respective weights." + ); + pages.add(firstPage); + + pages.add(new BookStuff.CraftingPage("allomancy:coin_pouch")); + pages.add(new BookStuff.RelationsPage("", "cosmere:allomancy/allomantic_steel")); // links to cosmere book, coin_pouch entry + coinPouchEntry.pages = pages.toArray(BookStuff.Page[]::new); + pages.clear(); + entries.add(coinPouchEntry); + } + + //allomancy + for (ManifestationRegistryObject manifestationRegistryObject : AllomancyManifestations.ALLOMANCY_POWERS.values()) + { + AllomancyManifestation manifestation = manifestationRegistryObject.get(); + Metals.MetalType metalType = manifestation.getMetalType(); + + if (!metalType.hasFeruchemicalEffect()) + { + continue; + } + + String metalName = metalType.getName(); + + String namespace = metalType.hasMaterialItem() ? "cosmere:" : "minecraft:"; + String itemFullName = namespace + metalType.getName() + Constants.RegNameStubs.NUGGET; + + BookStuff.Entry entryForThisPower = new BookStuff.Entry( + "allomantic_" + metalName, + allomancyCategory, + itemFullName); + entryForThisPower.sortnum = metalType.getID(); + + pages.clear(); + String mistingName = StringHelper.fixCapitalisation(metalType.getMistingName()); + String[] physicalMetals = { + "cosmere:allomancy/allomantic_steel", + "cosmere:allomancy/allomantic_iron", + "cosmere:allomancy/allomantic_pewter", + "cosmere:allomancy/allomantic_tin" + }; + String[] mentalMetals = { + "cosmere:allomancy/allomantic_zinc", + "cosmere:allomancy/allomantic_brass", + "cosmere:allomancy/allomantic_copper", + "cosmere:allomancy/allomantic_bronze" + }; + String[] enhancementMetals = { + "cosmere:allomancy/allomantic_aluminum", + "cosmere:allomancy/allomantic_duralumin", + "cosmere:allomancy/allomantic_chromium", + "cosmere:allomancy/allomantic_nicrosil" + }; + String[] temporalMetals = { + "cosmere:allomancy/allomantic_cadmium", + "cosmere:allomancy/allomantic_bendalloy", + "cosmere:allomancy/allomantic_gold", + "cosmere:allomancy/allomantic_electrum" + }; + + switch (metalType) + { + case IRON: + pages.add(new BookStuff.TextPage("A misting who burns " + PatchouliTextFormat.Thing(metalName) + " is known as a \"" + PatchouliTextFormat.Thing(mistingName) + "\"." + + " Burning Iron allows you to pull metal objects towards you." + + "$(br2)Iron is the external pulling metal and one of four physical metals (Alongside Steel, Pewter, and Tin) ")); + pages.add(new BookStuff.TextPage("Ironpulling is affected by the normal laws of physics. If a lurcher were to pull on something that weighs more than them, they'd be pulled towards it. If they pulled on something lighter, the object would move. If both were of similar weight, they'd both move." + + " A lurcher can pull on items that contain metal by pressing " + PatchouliTextFormat.Keybind("key.cosmere.allomancy.pull"))); + pages.add(new BookStuff.RelationsPage("", "The physical metals:",physicalMetals)); + break; + case STEEL: + pages.add(new BookStuff.TextPage("A misting who burns " + PatchouliTextFormat.Thing(metalName) + " is known as a \"" + PatchouliTextFormat.Thing(mistingName) + "\". Steel is an Allomantic metal and an alloy of Iron. When burnt, Steel allows the user to push against nearby metal objects. Steelpushing is affected by the laws of physics. If a coinshot were to push on something that weighs more than them, they'd be pushed away. ")); + pages.add(new BookStuff.TextPage("If they pushed on something lighter, the object would move. Clever use of Steelpushing can lead to a pseudo flight through use of small metal objects, such as coins or nuggets. Many coinshots generally carry around a pouch of coins, for ease of access. A Coinshot can access their abilities by pressing " + PatchouliTextFormat.Keybind("key.cosmere.allomancy.push") + + " Steel is the external pushing metal and one of four physical metals (alongside Iron, Pewter, and Tin)")); + //pages.add(new BookStuff.CraftingPage("allomancy:coin_pouch")); -- redirect to coin pouch page instead. + pages.add(new BookStuff.RelationsPage("", "cosmere:allomancy/coin_pouch")); // links to cosmere book, coin_pouch entry + pages.add(new BookStuff.RelationsPage("", "The physical metals:",physicalMetals)); + break; + case TIN: + pages.add(new BookStuff.TextPage("A misting who burns " + PatchouliTextFormat.Thing(metalName) + " is known as a \"" + PatchouliTextFormat.Thing(mistingName) + "\". " + + "In allomancy, Tin heightens the senses to super human levels. It allows you to see clearly in the dark, and the mists. There might be more here to discover..." + + " Tin is the internal pulling metal and one of four physical metals (alongside Iron, Pewter, and Steel)")); + pages.add(new BookStuff.RelationsPage("", "The physical metals:",physicalMetals)); + break; + case PEWTER: + pages.add(new BookStuff.TextPage("A misting who burns" + PatchouliTextFormat.Thing(metalName) + " is known as a \"" + PatchouliTextFormat.Thing(mistingName) + "\". " + + "While burning pewter, a pewterarm becomes faster, considerably stronger, and more resistant to punishment. However, they need to be careful because if they run out of pewter to burn, they will immediately feel all the pain they were shrugging off. This can mean instant death in extreme cases. Pewter is the internal pushing metal and one of the four physical metals (alongside Tin, Iron, and Steel)" + + " [Do note that there isn't currently a way to tell how much damage you take when you stop burning pewter, be cautious.]")); + pages.add(new BookStuff.RelationsPage("", "The physical metals:",physicalMetals)); + //"The major problem with pewter is that when it runs out, a large portion of the pain and injury that you resisted using the pewter hits you at once, potentially resulting in death. $(#f00)(NYI)$()"; + break; + case ZINC: + pages.add(new BookStuff.TextPage("A misting who burns " + PatchouliTextFormat.Thing(metalName) + " is known as a \"" + PatchouliTextFormat.Thing(mistingName) + "\". " + + "A creature being manipulated by a rioter will act far more aggressive, turning even the most pacified of animals into bloodthirsty beasts." + " A rioter can use their powers by pressing either " + PatchouliTextFormat.Keybind("key.cosmere.allomacy.riot") + " or " + PatchouliTextFormat.Keybind("key.cosmere.manifestation.use.active") + ".")); + pages.add(new BookStuff.TextPage("Rioters have reported recently that their allomancy has been acting different, resulting in creatures that seem confused. (This feature is bugged.) " + + "Zinc is the external pulling metal and one of four mental metals (alongside Brass, Copper, and Bronze)")); + pages.add(new BookStuff.RelationsPage("", "The mental metals:",mentalMetals)); + break; + case BRASS: + pages.add(new BookStuff.TextPage("A misting who burns " + PatchouliTextFormat.Thing(metalName) + " is known as a \"" + PatchouliTextFormat.Thing(mistingName) + "\". " + + "A creature being manipulated by a soother will act far more pacified, reducing their willingness to engage in combat." + + " A soother can use their powers by pressing either " + PatchouliTextFormat.Keybind("k:cosmere.allomacy.soothe") + " or " + PatchouliTextFormat.Keybind("key.cosmere.manifestation.use.active") + ".")); + pages.add(new BookStuff.TextPage("Soothers have reported recently that their allomancy has been acting different, resulting in creatures that seem confused. (This feature is bugged.) " + + "Brass is the external pushing metal and one of four mental metals (alongside Zinc, Copper, and Bronze)")); + pages.add(new BookStuff.RelationsPage("", "The mental metals:",mentalMetals)); + break; + case COPPER: + pages.add(new BookStuff.TextPage("A misting who burns " + PatchouliTextFormat.Thing(metalName) + "is known as a \"" + PatchouliTextFormat.Thing(mistingName) + "\". " + + "$(br)A smoker burning copper generates a 'coppercloud,' which hides Allomancy from being detected by Bronze. Although I've never witnessed it, I've heard that a seeker of considerable strength could pierce a coppercloud. More research is required." + + "$(br)Copper is the internal pulling metal and one of four mental metals (alongside Zinc, Brass, and Bronze)")); + pages.add(new BookStuff.RelationsPage("", "The mental metals:",mentalMetals)); + break; + case BRONZE: + pages.add(new BookStuff.TextPage("A misting who burns " + PatchouliTextFormat.Thing(metalName) + " is known as a \"" + PatchouliTextFormat.Thing(mistingName) + "\". " + + "A seeker burning bronze is able to detect the nearby use of allomancy or feruchemy. A skilled seeker is capable of detecting what specific abilities are being used. Keep in mind that a smoker can neutralise the ability for a seeker to track allomancy or feruchemy. " + + "Bronze is the internal pushing metal and one of four mental metals (alongside Brass, Copper, and Zinc)")); + pages.add(new BookStuff.TextPage("[If you use the Jade mod, it shows you the metal the creature is burning, though you can do this on sound alone]")); + //"Copper neutralises the ability for a Seeker to track allomancy by hiding it in a copper cloud, but extremely powerful Seekers or Mistborn, may still be able to pierce said shields."; + pages.add(new BookStuff.RelationsPage("", "The mental metals:",mentalMetals)); + break; + case ALUMINUM: + pages.add(new BookStuff.TextPage("A misting who can only burn " + PatchouliTextFormat.Thing(metalName) + " is known as an $(br)\"" + PatchouliTextFormat.Thing(mistingName) + "\" as they gain no discernible effect from burning their metal." + + "$(br)Burning aluminum will wipe all their metal reserves, including aluminum." + "I have heard rumors that an Aluminum Gnat of considerable power could clear the effects of other sources of investiture or impurities from their bodies, " + + "but this has not been confirmed to me. (Not yet implemented)" + + "$(br)Aluminum is the internal pulling metal and one of four enhancement metals (alongside Duralumin, Chromium, and Nicrosil)")); + pages.add(new BookStuff.RelationsPage("", "The enhancement metals:", enhancementMetals)); + break; + case DURALUMIN: + //add extra note so that these people will know of their shame. + pages.add(new BookStuff.TextPage("A misting who can only burn " + PatchouliTextFormat.Thing(metalName) + " is known as a $(br)\"" + PatchouliTextFormat.Thing(mistingName) + "\" as they gain no discernible effect from burning their metal. The metal reserves of a misting burning duralumin will deplete faster, but will have a much more prominent effect. You might note that this feature is useless on its own, as it needs to be used in tandom with a second metal.")); + pages.add(new BookStuff.TextPage("Duralumin is the internal pushing metal and one of four enhancement metals (alongside Aluminum, Chromium, and Nicrosil")); + pages.add(new BookStuff.RelationsPage("", "The enhancement metals:", enhancementMetals)); + break; + case CHROMIUM: + pages.add(new BookStuff.TextPage("A misting who burns " + PatchouliTextFormat.Thing(metalName) + " is known as a \"" + PatchouliTextFormat.Thing(mistingName) + "\". " + + "A leecher can deplete the metal reserves of another allomancer with physical contact, as if the target were burning aluminum themselves." + + " Chromium is the external pulling metal and one of four enhancement metals (alongside Aluminum, Duralumin, and Nicrosil)")); + pages.add(new BookStuff.RelationsPage("", "The enhancement metals:", enhancementMetals)); + break; + case NICROSIL: + pages.add(new BookStuff.TextPage("A misting who burns " + PatchouliTextFormat.Thing(metalName) + " is known as a \"" + PatchouliTextFormat.Thing(mistingName) + "\"." + + "$(br)A nicroburst can empower the allomancy of another with physical contact, as if the target were burning duralumin themselves. This can be used to throw other allomancers off, such as giving a coinshot a particularly strong steelpush when they don't expect it."+ + " Nicrosil is the external pushing metal and one of four enhancement metals (alongside Aluminum, Chromium, and Duralumin)")); + pages.add(new BookStuff.RelationsPage("", "The enhancement metals:", enhancementMetals)); + break; + case CADMIUM: + pages.add(new BookStuff.TextPage("A misting who burns " + PatchouliTextFormat.Thing(metalName) + " is known as a \"" + PatchouliTextFormat.Thing(mistingName) + "\". " + + "A pulser creates a bubble around them in which time slows down. To anyone inside this time bubble, everything outside appears to move faster." + + " Cadmium is the external pulling metal and one of four temporal metals (alongside Bendalloy, Electrum, and Gold)" + + " [Cadmium doesn't work properly yet and is still in development]")); + pages.add(new BookStuff.RelationsPage("", "The temporal metals:", temporalMetals)); + break; + case BENDALLOY: + pages.add(new BookStuff.TextPage("A misting who burns " + PatchouliTextFormat.Thing(metalName) + " is known as a \"" + PatchouliTextFormat.Thing(mistingName) + "\". " + + "A slider creates a bubble around them in which time speeds up. To anyone inside of the time bubble, everything outside appears to move much more slowly." + + " Bendalloy is the external pushing metal and one of four temporal metals (alongside Cadmium, Electrum, and Gold)" + + " [Bendalloy doesn't work properly yet and is still in development]")); + pages.add(new BookStuff.RelationsPage("", "The temporal metals:", temporalMetals)); + break; + case GOLD: + pages.add(new BookStuff.TextPage("A misting who burns " + PatchouliTextFormat.Thing(metalName) + " is known as a \"" + PatchouliTextFormat.Thing(mistingName) + "\". " + + "Gold is the internal pulling metal and one of four temporal metals (alongside Bendalloy, Cadmium, and Electrum)"+ + " The rest of the page is scratched out. (Not yet implemented)")); + pages.add(new BookStuff.RelationsPage("", "The temporal metals:", temporalMetals)); + break; + case ELECTRUM: + pages.add(new BookStuff.TextPage("A misting who burns " + PatchouliTextFormat.Thing(metalName) + " is known as a \"" + PatchouliTextFormat.Thing(mistingName) + "\". " + + "Most of the page is missing... (Not yet fully implemented)" + + " The primary use for electrum is to counter the godmetal Atium's ability to see your attacks and thus dodge out of the way. This metal evens the playing field." + + " Electrum is the internal pushing metal and one of four temporal metals (alongside Bendalloy, Cadmium, and Gold)")); + pages.add(new BookStuff.RelationsPage("", "The temporal metals:", temporalMetals)); + break; + case ATIUM: + pages.add(new BookStuff.TextPage("A misting who burns " + PatchouliTextFormat.Thing(metalName) + " is known as a \"" + PatchouliTextFormat.Thing(mistingName) + "\". $(br)" + + "Most of the page is missing... (Not yet fully implemented)$(br)The metal atium is extraordinarily rare. Seers who can burn it can see into the future a small amount, and thus can dodge every attack that might befall them (unless the attacker is burning electrum of course).")); + pages.add(new BookStuff.TextPage("Interestingly atium doesnt fit the normal metal categories... $(br)I will have to further pursue the subject.")); + break; + } + entryForThisPower.pages = pages.toArray(BookStuff.Page[]::new); + entries.add(entryForThisPower); + } + } +} diff --git a/src/datagen/aondor/java/leaf/cosmere/aondor/AonDorDataGenerator.java b/src/datagen/aondor/java/leaf/cosmere/aondor/AonDorDataGenerator.java new file mode 100644 index 000000000..baa2c1d0c --- /dev/null +++ b/src/datagen/aondor/java/leaf/cosmere/aondor/AonDorDataGenerator.java @@ -0,0 +1,36 @@ +/* + * File updated ~ 8 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.aondor; + +import leaf.cosmere.aondor.common.AonDor; +import leaf.cosmere.aondor.loottables.AonDorLootTableGen; +import leaf.cosmere.aondor.patchouli.AonDorPatchouliGen; +import net.minecraft.data.DataGenerator; +import net.minecraft.data.PackOutput; +import net.minecraftforge.common.data.ExistingFileHelper; +import net.minecraftforge.data.event.GatherDataEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod.EventBusSubscriber; +import net.minecraftforge.fml.common.Mod.EventBusSubscriber.Bus; + +@EventBusSubscriber(modid = AonDor.MODID, bus = Bus.MOD) +public class AonDorDataGenerator +{ + @SubscribeEvent + public static void gatherData(GatherDataEvent event) + { + DataGenerator generator = event.getGenerator(); + PackOutput packOutput = generator.getPackOutput(); + ExistingFileHelper existingFileHelper = event.getExistingFileHelper(); + + generator.addProvider(true, new AonDorEngLangGen(packOutput)); + generator.addProvider(true, new AonDorTagProvider(packOutput, event.getLookupProvider(), existingFileHelper)); + generator.addProvider(true, new AonDorLootTableGen(packOutput)); + generator.addProvider(true, new AonDorItemModelsGen(packOutput, existingFileHelper)); + generator.addProvider(true, new AonDorRecipeGen(packOutput, existingFileHelper)); + generator.addProvider(true, new AonDorPatchouliGen(packOutput)); + } + +} \ No newline at end of file diff --git a/src/datagen/aondor/java/leaf/cosmere/aondor/AonDorEngLangGen.java b/src/datagen/aondor/java/leaf/cosmere/aondor/AonDorEngLangGen.java new file mode 100644 index 000000000..a4838e8f1 --- /dev/null +++ b/src/datagen/aondor/java/leaf/cosmere/aondor/AonDorEngLangGen.java @@ -0,0 +1,135 @@ +/* + * File updated ~ 10 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.aondor; + +import leaf.cosmere.aondor.common.AonDor; +import leaf.cosmere.aondor.common.registries.AonDorEntityTypes; +import leaf.cosmere.api.helpers.RegistryHelper; +import leaf.cosmere.api.providers.IEntityTypeProvider; +import leaf.cosmere.api.text.StringHelper; +import net.minecraft.data.PackOutput; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.Item; +import net.minecraftforge.common.data.LanguageProvider; +import net.minecraftforge.registries.ForgeRegistries; + +public class AonDorEngLangGen extends LanguageProvider +{ + public AonDorEngLangGen(PackOutput output) + { + super(output, AonDor.MODID, "en_us"); + } + + @Override + protected void addTranslations() + { + addItemsAndBlocks(); + addEntities(); + addAdvancements(); + addManifestations(); + addAttributes(); + addPatchouli(); + addCreativeTabs(); + addTooltips(); + addItemGroups(); + addDamageSources(); + addMobEffects(); + addCurioIdentifiers(); + addConfigs(); + addCommands(); + addKeybindings(); + addStats(); + + } + + + private void addItemsAndBlocks() + { + //Items and Blocks + for (Item item : ForgeRegistries.ITEMS.getValues()) + { + final ResourceLocation registryName = RegistryHelper.get(item); + if (registryName.getNamespace().contentEquals(AonDor.MODID)) + { + String localisedString = StringHelper.fixCapitalisation(registryName.getPath()); + add(item.getDescriptionId(), localisedString); + } + } + } + + private void addEntities() + { + //Entities + for (IEntityTypeProvider type : AonDorEntityTypes.ENTITY_TYPES.getAllEntityTypes()) + { + final ResourceLocation id = type.getRegistryName(); + add(type.getEntityType().getDescriptionId(), StringHelper.fixCapitalisation(id.getPath())); + } + } + + private void addAdvancements() + { + + } + + private void addManifestations() + { + } + + private void addAttributes() + { + } + + private void addPatchouli() + { + + } + + private void addCreativeTabs() + { + //ItemGroups/Tabs + add("tabs.aondor.items", "Aon Dor"); + + } + + private void addTooltips() + { + + } + + private void addItemGroups() + { + //ItemGroups/Tabs + //todo aondor item group + } + + private void addDamageSources() + { + } + + private void addMobEffects() + { + } + + private void addCurioIdentifiers() + { + } + + private void addConfigs() + { + } + + private void addCommands() + { + } + + private void addKeybindings() + { + } + + private void addStats() + { + } +} diff --git a/src/datagen/aondor/java/leaf/cosmere/aondor/AonDorItemModelsGen.java b/src/datagen/aondor/java/leaf/cosmere/aondor/AonDorItemModelsGen.java new file mode 100644 index 000000000..d2afa17a8 --- /dev/null +++ b/src/datagen/aondor/java/leaf/cosmere/aondor/AonDorItemModelsGen.java @@ -0,0 +1,74 @@ +/* + * File updated ~ 8 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.aondor; + +import leaf.cosmere.aondor.common.AonDor; +import leaf.cosmere.aondor.common.registries.AonDorItems; +import leaf.cosmere.api.helpers.RegistryHelper; +import leaf.cosmere.api.providers.IItemProvider; +import net.minecraft.data.PackOutput; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.Item; +import net.minecraftforge.client.model.generators.ItemModelBuilder; +import net.minecraftforge.client.model.generators.ItemModelProvider; +import net.minecraftforge.client.model.generators.ModelFile; +import net.minecraftforge.common.ForgeSpawnEggItem; +import net.minecraftforge.common.data.ExistingFileHelper; + +import java.util.function.Supplier; + +public class AonDorItemModelsGen extends ItemModelProvider +{ + + public AonDorItemModelsGen(PackOutput generator, ExistingFileHelper existingFileHelper) + { + super(generator, AonDor.MODID, existingFileHelper); + } + + @Override + protected void registerModels() + { + for (IItemProvider itemRegistryObject : AonDorItems.ITEMS.getAllItems()) + { + String path = itemRegistryObject.getRegistryName().getPath(); + Item item = itemRegistryObject.asItem(); + + if (item instanceof ForgeSpawnEggItem) + { + getBuilder(item.toString()).parent(new ModelFile.UncheckedModelFile("item/template_spawn_egg")); + continue; + } + //if (item instanceof modelOverrideType) + //{ + // this.getBuilder(path) + // .parent(new ModelFile.UncheckedModelFile("aondor:item/specificModelParent")) + // .texture("layer0", modLoc("item/" + "texture_name")); + // continue; + //} + //else if (item instanceof hardcodedModelType) + //{ + // //skip + // continue; + //} + + //else normal item texture rules apply + simpleItem(path, path); + } + + } + + public String getPath(Supplier itemSupplier) + { + ResourceLocation location = RegistryHelper.get(itemSupplier.get()); + return location.getPath(); + } + + public ItemModelBuilder simpleItem(String path, String texturePath) + { + return this.getBuilder(path) + .parent(new ModelFile.UncheckedModelFile("item/generated")) + .texture("layer0", modLoc("item/" + texturePath)); + } +} \ No newline at end of file diff --git a/src/datagen/aondor/java/leaf/cosmere/aondor/AonDorRecipeGen.java b/src/datagen/aondor/java/leaf/cosmere/aondor/AonDorRecipeGen.java new file mode 100644 index 000000000..198016151 --- /dev/null +++ b/src/datagen/aondor/java/leaf/cosmere/aondor/AonDorRecipeGen.java @@ -0,0 +1,35 @@ +/* + * File updated ~ 4 - 1 - 2025 ~ Leaf + */ + +package leaf.cosmere.aondor; + +import leaf.cosmere.BaseRecipeProvider; +import leaf.cosmere.aondor.common.AonDor; +import net.minecraft.data.PackOutput; +import net.minecraft.data.recipes.FinishedRecipe; +import net.minecraft.resources.ResourceLocation; +import net.minecraftforge.common.crafting.conditions.IConditionBuilder; +import net.minecraftforge.common.data.ExistingFileHelper; + +import java.util.function.Consumer; + +public class AonDorRecipeGen extends BaseRecipeProvider implements IConditionBuilder +{ + public AonDorRecipeGen(PackOutput output, ExistingFileHelper existingFileHelper) + { + super(output, existingFileHelper, AonDor.MODID); + } + + @Override + protected ResourceLocation makeRL(String path) + { + return AonDor.rl(path); + } + + @Override + protected void addRecipes(Consumer consumer) + { + + } +} diff --git a/src/datagen/aondor/java/leaf/cosmere/aondor/AonDorTagProvider.java b/src/datagen/aondor/java/leaf/cosmere/aondor/AonDorTagProvider.java new file mode 100644 index 000000000..ee2ef1c06 --- /dev/null +++ b/src/datagen/aondor/java/leaf/cosmere/aondor/AonDorTagProvider.java @@ -0,0 +1,80 @@ +/* + * File updated ~ 8 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.aondor; + +import leaf.cosmere.aondor.common.AonDor; +import leaf.cosmere.aondor.common.registries.AonDorBlocks; +import leaf.cosmere.api.providers.IBlockProvider; +import leaf.cosmere.tag.BaseTagProvider; +import net.minecraft.core.HolderLookup; +import net.minecraft.data.PackOutput; +import net.minecraftforge.common.data.ExistingFileHelper; + +import javax.annotation.Nullable; +import java.util.List; +import java.util.concurrent.CompletableFuture; + +public class AonDorTagProvider extends BaseTagProvider +{ + public AonDorTagProvider(PackOutput packOutput, CompletableFuture lookupProvider, @Nullable ExistingFileHelper existingFileHelper) + { + super(packOutput, lookupProvider, AonDor.MODID, existingFileHelper); + } + + + @Override + protected List getAllBlocks() + { + return AonDorBlocks.BLOCKS.getAllBlocks(); + } + + + @Override + protected void registerTags(HolderLookup.Provider registries) + { + //getItemBuilder(CosmereTags.Items.CURIO_HEAD).add(AonDor.Item.asItem()); + + addItems(); + addBlocks(); + addStorageBlocks(); + addEntityTypes(); + addGameEvents(); + + addContainsMetal(); + } + + + private void addItems() + { + + } + + private void addBlocks() + { + //addToTag(BlockTags.NEEDS_STONE_TOOL, BlocksRegistry.METALWORKING_TABLE); + //addToHarvestTag(BlockTags.MINEABLE_WITH_AXE, BlocksRegistry.METALWORKING_TABLE); + + } + + private void addEntityTypes() + { + //getEntityTypeBuilder(CosmereTags.EntityTypes.CONTAINS_METAL).add(EntityType.IRON_GOLEM); + } + + private void addGameEvents() + { + + } + + private void addStorageBlocks() + { + + } + + private void addContainsMetal() + { + + } +} \ No newline at end of file diff --git a/src/datagen/aondor/java/leaf/cosmere/aondor/loottables/AonDorBlockLootTableGen.java b/src/datagen/aondor/java/leaf/cosmere/aondor/loottables/AonDorBlockLootTableGen.java new file mode 100644 index 000000000..2e51cd3d4 --- /dev/null +++ b/src/datagen/aondor/java/leaf/cosmere/aondor/loottables/AonDorBlockLootTableGen.java @@ -0,0 +1,30 @@ +/* + * File updated ~ 8 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.aondor.loottables; + +import leaf.cosmere.aondor.common.registries.AonDorBlocks; +import leaf.cosmere.api.providers.IBlockProvider; +import leaf.cosmere.loottables.BaseBlockLootTables; +import net.minecraft.world.level.block.Block; + +public class AonDorBlockLootTableGen extends BaseBlockLootTables +{ + @Override + protected void generate() + { + //first catch any blocks that don't drop self, like ores + for (IBlockProvider itemRegistryObject : AonDorBlocks.BLOCKS.getAllBlocks()) + { + final Block block = itemRegistryObject.getBlock(); + //if (block instanceof MetalOreBlock oreBlock) + //{ + // this.add(oreBlock, (ore) -> createOreDrop(ore, ItemsRegistry.METAL_RAW_ORE.get(oreBlock.getMetalType()))); + //} + } + + //then make the rest drop themselves. + dropSelf(AonDorBlocks.BLOCKS.getAllBlocks()); + } +} diff --git a/src/datagen/aondor/java/leaf/cosmere/aondor/loottables/AonDorLootTableGen.java b/src/datagen/aondor/java/leaf/cosmere/aondor/loottables/AonDorLootTableGen.java new file mode 100644 index 000000000..e4631855b --- /dev/null +++ b/src/datagen/aondor/java/leaf/cosmere/aondor/loottables/AonDorLootTableGen.java @@ -0,0 +1,21 @@ +/* + * File updated ~ 8 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.aondor.loottables; + +import leaf.cosmere.loottables.BaseLootProvider; +import net.minecraft.data.PackOutput; +import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets; + +import java.util.List; + +public class AonDorLootTableGen extends BaseLootProvider +{ + public AonDorLootTableGen(PackOutput packOutput) + { + super(packOutput, List.of( + new SubProviderEntry(AonDorBlockLootTableGen::new, LootContextParamSets.BLOCK) + )); + } +} diff --git a/src/datagen/aondor/java/leaf/cosmere/aondor/patchouli/AonDorPatchouliGen.java b/src/datagen/aondor/java/leaf/cosmere/aondor/patchouli/AonDorPatchouliGen.java new file mode 100644 index 000000000..9a13dce75 --- /dev/null +++ b/src/datagen/aondor/java/leaf/cosmere/aondor/patchouli/AonDorPatchouliGen.java @@ -0,0 +1,40 @@ +/* + * File updated ~ 9 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.aondor.patchouli; + +import leaf.cosmere.aondor.common.AonDor; +import leaf.cosmere.api.CosmereAPI; +import leaf.cosmere.patchouli.data.PatchouliProvider; +import net.minecraft.data.PackOutput; + +// +// In-Game Documentation generator +// +public class AonDorPatchouliGen extends PatchouliProvider +{ + public AonDorPatchouliGen(PackOutput generatorIn) + { + super(generatorIn, CosmereAPI.COSMERE_MODID); + } + + @Override + protected void collectInfoForBook() + { + PatchouliAonDorCategory.collect(this.categories, this.entries); + } + + /** + * Gets a name for this provider, to use in logging. + */ + public String getName() + { + return "AonDor PatchouliGeneration"; + } + + +} + + + diff --git a/src/datagen/aondor/java/leaf/cosmere/aondor/patchouli/PatchouliAonDorCategory.java b/src/datagen/aondor/java/leaf/cosmere/aondor/patchouli/PatchouliAonDorCategory.java new file mode 100644 index 000000000..cb9545fbf --- /dev/null +++ b/src/datagen/aondor/java/leaf/cosmere/aondor/patchouli/PatchouliAonDorCategory.java @@ -0,0 +1,47 @@ +/* + * File updated ~ 30 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.aondor.patchouli; + +import leaf.cosmere.patchouli.data.BookStuff; + +import java.util.ArrayList; +import java.util.List; + +public class PatchouliAonDorCategory +{ + public static void collect(List categories, List entries) + { + BookStuff.Category aondor = new BookStuff.Category( + "aondor", + "AonDor description that says some stuff.", + "minecraft:paper"); + aondor.sortnum = 99; + aondor.secret = true; + categories.add(aondor); + + //Start a page list. + List pages = new ArrayList<>(); + + //aondor basics entry + { + BookStuff.Entry entry = new BookStuff.Entry("aondor_basics", aondor, aondor.icon).setDisplayTitle("AonDor (For Dummies)"); + entry.priority = true; + + + BookStuff.Page terminologyPage = new BookStuff.TextPage(); + terminologyPage.setTitle("Terminology"); + terminologyPage.setText( + "In this journal, I shall explain all I have discovered about AonDor. $(br)" + + "Firstly, some terminology:"); + pages.add(terminologyPage); + + + entry.pages = pages.toArray(BookStuff.Page[]::new); + pages.clear(); + entries.add(entry); + } + + } +} diff --git a/src/datagen/aviar/java/leaf/cosmere/aviar/AviarDataGenerator.java b/src/datagen/aviar/java/leaf/cosmere/aviar/AviarDataGenerator.java new file mode 100644 index 000000000..aa2004df9 --- /dev/null +++ b/src/datagen/aviar/java/leaf/cosmere/aviar/AviarDataGenerator.java @@ -0,0 +1,37 @@ +/* + * File updated ~ 8 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.aviar; + +import leaf.cosmere.aviar.common.Aviar; +import leaf.cosmere.aviar.items.AviarItemModelsGen; +import leaf.cosmere.aviar.loottables.AviarLootTableGen; +import leaf.cosmere.aviar.patchouli.AviarPatchouliGen; +import net.minecraft.data.DataGenerator; +import net.minecraft.data.PackOutput; +import net.minecraftforge.common.data.ExistingFileHelper; +import net.minecraftforge.data.event.GatherDataEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod.EventBusSubscriber; +import net.minecraftforge.fml.common.Mod.EventBusSubscriber.Bus; + +@EventBusSubscriber(modid = Aviar.MODID, bus = Bus.MOD) +public class AviarDataGenerator +{ + @SubscribeEvent + public static void gatherData(GatherDataEvent event) + { + DataGenerator generator = event.getGenerator(); + PackOutput packOutput = generator.getPackOutput(); + ExistingFileHelper existingFileHelper = event.getExistingFileHelper(); + + generator.addProvider(true, new AviarEngLangGen(packOutput)); + generator.addProvider(true, new AviarTagProvider(packOutput, event.getLookupProvider(), existingFileHelper)); + generator.addProvider(true, new AviarLootTableGen(packOutput)); + generator.addProvider(true, new AviarItemModelsGen(packOutput, existingFileHelper)); + generator.addProvider(true, new AviarRecipeGen(packOutput, existingFileHelper)); + generator.addProvider(true, new AviarPatchouliGen(packOutput)); + } + +} \ No newline at end of file diff --git a/src/datagen/aviar/java/leaf/cosmere/aviar/AviarEngLangGen.java b/src/datagen/aviar/java/leaf/cosmere/aviar/AviarEngLangGen.java new file mode 100644 index 000000000..eca06829a --- /dev/null +++ b/src/datagen/aviar/java/leaf/cosmere/aviar/AviarEngLangGen.java @@ -0,0 +1,134 @@ +/* + * File updated ~ 10 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.aviar; + +import leaf.cosmere.api.helpers.RegistryHelper; +import leaf.cosmere.api.providers.IEntityTypeProvider; +import leaf.cosmere.api.text.StringHelper; +import leaf.cosmere.aviar.common.Aviar; +import leaf.cosmere.aviar.common.registries.AviarEntityTypes; +import net.minecraft.data.PackOutput; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.Item; +import net.minecraftforge.common.data.LanguageProvider; +import net.minecraftforge.registries.ForgeRegistries; + +import static leaf.cosmere.aviar.common.registries.AviarAttributes.HOSTILE_LIFE_SENSE; + +public class AviarEngLangGen extends LanguageProvider +{ + public AviarEngLangGen(PackOutput output) + { + super(output, Aviar.MODID, "en_us"); + } + + @Override + protected void addTranslations() + { + addItemsAndBlocks(); + addEntities(); + addAdvancements(); + addManifestations(); + addAttributes(); + addPatchouli(); + addTooltips(); + addItemGroups(); + addDamageSources(); + addMobEffects(); + addCurioIdentifiers(); + addConfigs(); + addCommands(); + addKeybindings(); + addStats(); + + } + + + private void addItemsAndBlocks() + { + //Items and Blocks + for (Item item : ForgeRegistries.ITEMS.getValues()) + { + final ResourceLocation registryName = RegistryHelper.get(item); + if (registryName.getNamespace().contentEquals(Aviar.MODID)) + { + String localisedString = StringHelper.fixCapitalisation(registryName.getPath()); + add(item.getDescriptionId(), localisedString); + } + } + } + + private void addEntities() + { + //Entities + for (IEntityTypeProvider type : AviarEntityTypes.ENTITY_TYPES.getAllEntityTypes()) + { + final ResourceLocation id = type.getRegistryName(); + add(type.getEntityType().getDescriptionId(), StringHelper.fixCapitalisation(id.getPath())); + } + } + + private void addAdvancements() + { + + } + + private void addManifestations() + { + } + + private void addAttributes() + { + //Attribute + final String descriptionId = HOSTILE_LIFE_SENSE.getAttribute().getDescriptionId(); + final String name = HOSTILE_LIFE_SENSE.getName().replace('_',' '); + // Attributes are the powers themselves, they need their own names. + add(descriptionId, StringHelper.fixCapitalisation(name)); + } + + private void addPatchouli() + { + + } + + private void addTooltips() + { + + } + + private void addItemGroups() + { + //ItemGroups/Tabs + add("tabs.aviar.items", "Aviar"); + } + + private void addDamageSources() + { + } + + private void addMobEffects() + { + } + + private void addCurioIdentifiers() + { + } + + private void addConfigs() + { + } + + private void addCommands() + { + } + + private void addKeybindings() + { + } + + private void addStats() + { + } +} diff --git a/src/datagen/aviar/java/leaf/cosmere/aviar/AviarRecipeGen.java b/src/datagen/aviar/java/leaf/cosmere/aviar/AviarRecipeGen.java new file mode 100644 index 000000000..ba25dbb57 --- /dev/null +++ b/src/datagen/aviar/java/leaf/cosmere/aviar/AviarRecipeGen.java @@ -0,0 +1,35 @@ +/* + * File updated ~ 4 - 1 - 2025 ~ Leaf + */ + +package leaf.cosmere.aviar; + +import leaf.cosmere.BaseRecipeProvider; +import leaf.cosmere.aviar.common.Aviar; +import net.minecraft.data.PackOutput; +import net.minecraft.data.recipes.FinishedRecipe; +import net.minecraft.resources.ResourceLocation; +import net.minecraftforge.common.crafting.conditions.IConditionBuilder; +import net.minecraftforge.common.data.ExistingFileHelper; + +import java.util.function.Consumer; + +public class AviarRecipeGen extends BaseRecipeProvider implements IConditionBuilder +{ + public AviarRecipeGen(PackOutput output, ExistingFileHelper existingFileHelper) + { + super(output, existingFileHelper, Aviar.MODID); + } + + @Override + protected ResourceLocation makeRL(String path) + { + return Aviar.rl(path); + } + + @Override + protected void addRecipes(Consumer consumer) + { + } + +} diff --git a/src/datagen/aviar/java/leaf/cosmere/aviar/AviarTagProvider.java b/src/datagen/aviar/java/leaf/cosmere/aviar/AviarTagProvider.java new file mode 100644 index 000000000..165dfec85 --- /dev/null +++ b/src/datagen/aviar/java/leaf/cosmere/aviar/AviarTagProvider.java @@ -0,0 +1,80 @@ +/* + * File updated ~ 8 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.aviar; + +import leaf.cosmere.api.providers.IBlockProvider; +import leaf.cosmere.aviar.common.Aviar; +import leaf.cosmere.aviar.common.registries.AviarBlocks; +import leaf.cosmere.tag.BaseTagProvider; +import net.minecraft.core.HolderLookup; +import net.minecraft.data.PackOutput; +import net.minecraftforge.common.data.ExistingFileHelper; + +import javax.annotation.Nullable; +import java.util.List; +import java.util.concurrent.CompletableFuture; + +public class AviarTagProvider extends BaseTagProvider +{ + public AviarTagProvider(PackOutput packOutput, CompletableFuture lookupProvider, @Nullable ExistingFileHelper existingFileHelper) + { + super(packOutput, lookupProvider, Aviar.MODID, existingFileHelper); + } + + + @Override + protected List getAllBlocks() + { + return AviarBlocks.BLOCKS.getAllBlocks(); + } + + + @Override + protected void registerTags(HolderLookup.Provider registries) + { + //getItemBuilder(CosmereTags.Items.CURIO_HEAD).add(Aviar.Item.asItem()); + + addItems(); + addBlocks(); + addStorageBlocks(); + addEntityTypes(); + addGameEvents(); + + addContainsMetal(); + } + + + private void addItems() + { + + } + + private void addBlocks() + { + //addToTag(BlockTags.NEEDS_STONE_TOOL, BlocksRegistry.METALWORKING_TABLE); + //addToHarvestTag(BlockTags.MINEABLE_WITH_AXE, BlocksRegistry.METALWORKING_TABLE); + + } + + private void addEntityTypes() + { + //getEntityTypeBuilder(CosmereTags.EntityTypes.CONTAINS_METAL).add(EntityType.IRON_GOLEM); + } + + private void addGameEvents() + { + + } + + private void addStorageBlocks() + { + + } + + private void addContainsMetal() + { + + } +} \ No newline at end of file diff --git a/src/datagen/aviar/java/leaf/cosmere/aviar/items/AviarItemModelsGen.java b/src/datagen/aviar/java/leaf/cosmere/aviar/items/AviarItemModelsGen.java new file mode 100644 index 000000000..d7b942314 --- /dev/null +++ b/src/datagen/aviar/java/leaf/cosmere/aviar/items/AviarItemModelsGen.java @@ -0,0 +1,63 @@ +/* + * File updated ~ 8 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.aviar.items; + +import leaf.cosmere.api.helpers.RegistryHelper; +import leaf.cosmere.api.providers.IItemProvider; +import leaf.cosmere.aviar.common.Aviar; +import leaf.cosmere.aviar.common.registries.AviarItems; +import net.minecraft.data.PackOutput; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.Item; +import net.minecraftforge.client.model.generators.ItemModelBuilder; +import net.minecraftforge.client.model.generators.ItemModelProvider; +import net.minecraftforge.client.model.generators.ModelFile; +import net.minecraftforge.common.ForgeSpawnEggItem; +import net.minecraftforge.common.data.ExistingFileHelper; + +import java.util.function.Supplier; + +public class AviarItemModelsGen extends ItemModelProvider +{ + + public AviarItemModelsGen(PackOutput generator, ExistingFileHelper existingFileHelper) + { + super(generator, Aviar.MODID, existingFileHelper); + } + + @Override + protected void registerModels() + { + for (IItemProvider itemRegistryObject : AviarItems.ITEMS.getAllItems()) + { + String path = itemRegistryObject.getRegistryName().getPath(); + Item item = itemRegistryObject.asItem(); + + if (item instanceof ForgeSpawnEggItem) + { + getBuilder(item.toString()).parent(new ModelFile.UncheckedModelFile("item/template_spawn_egg")); + + continue; + } + + //else normal item texture rules apply + simpleItem(path, path); + } + + } + + public String getPath(Supplier itemSupplier) + { + ResourceLocation location = RegistryHelper.get(itemSupplier.get()); + return location.getPath(); + } + + public ItemModelBuilder simpleItem(String path, String texturePath) + { + return this.getBuilder(path) + .parent(new ModelFile.UncheckedModelFile("item/generated")) + .texture("layer0", modLoc("item/" + texturePath)); + } +} \ No newline at end of file diff --git a/src/datagen/aviar/java/leaf/cosmere/aviar/loottables/AviarBlockLootTableGen.java b/src/datagen/aviar/java/leaf/cosmere/aviar/loottables/AviarBlockLootTableGen.java new file mode 100644 index 000000000..d9907cac4 --- /dev/null +++ b/src/datagen/aviar/java/leaf/cosmere/aviar/loottables/AviarBlockLootTableGen.java @@ -0,0 +1,31 @@ +/* + * File updated ~ 8 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.aviar.loottables; + +import leaf.cosmere.api.providers.IBlockProvider; +import leaf.cosmere.aviar.common.registries.AviarBlocks; +import leaf.cosmere.loottables.BaseBlockLootTables; +import net.minecraft.world.level.block.Block; + +public class AviarBlockLootTableGen extends BaseBlockLootTables +{ + @Override + protected void generate() + { + //first catch any blocks that don't drop self, like ores + for (IBlockProvider itemRegistryObject : AviarBlocks.BLOCKS.getAllBlocks()) + { + final Block block = itemRegistryObject.getBlock(); + //if (block instanceof MetalOreBlock oreBlock) + //{ + // this.add(oreBlock, (ore) -> createOreDrop(ore, ItemsRegistry.METAL_RAW_ORE.get(oreBlock.getMetalType()))); + //} + } + + //then make the rest drop themselves. + dropSelf(AviarBlocks.BLOCKS.getAllBlocks()); + } + +} diff --git a/src/datagen/aviar/java/leaf/cosmere/aviar/loottables/AviarLootTableGen.java b/src/datagen/aviar/java/leaf/cosmere/aviar/loottables/AviarLootTableGen.java new file mode 100644 index 000000000..04fe8b616 --- /dev/null +++ b/src/datagen/aviar/java/leaf/cosmere/aviar/loottables/AviarLootTableGen.java @@ -0,0 +1,22 @@ +/* + * File updated ~ 8 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.aviar.loottables; + +import leaf.cosmere.loottables.BaseLootProvider; +import net.minecraft.data.PackOutput; +import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets; + +import java.util.List; + +public class AviarLootTableGen extends BaseLootProvider +{ + public AviarLootTableGen(PackOutput packOutput) + { + super(packOutput, List.of( + new SubProviderEntry(AviarBlockLootTableGen::new, LootContextParamSets.BLOCK) + //,new SubProviderEntry(ExampleEntityLootTableGen::new, LootContextParamSets.ENTITY) + )); + } +} diff --git a/src/datagen/aviar/java/leaf/cosmere/aviar/patchouli/AviarPatchouliGen.java b/src/datagen/aviar/java/leaf/cosmere/aviar/patchouli/AviarPatchouliGen.java new file mode 100644 index 000000000..9922853b4 --- /dev/null +++ b/src/datagen/aviar/java/leaf/cosmere/aviar/patchouli/AviarPatchouliGen.java @@ -0,0 +1,40 @@ +/* + * File updated ~ 9 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.aviar.patchouli; + +import leaf.cosmere.api.CosmereAPI; +import leaf.cosmere.aviar.common.Aviar; +import leaf.cosmere.patchouli.data.PatchouliProvider; +import net.minecraft.data.PackOutput; + +// +// In-Game Documentation generator +// +public class AviarPatchouliGen extends PatchouliProvider +{ + public AviarPatchouliGen(PackOutput generatorIn) + { + super(generatorIn, CosmereAPI.COSMERE_MODID); + } + + @Override + protected void collectInfoForBook() + { + PatchouliAviarCategory.collect(this.categories, this.entries); + } + + /** + * Gets a name for this provider, to use in logging. + */ + public String getName() + { + return "Aviar PatchouliGeneration"; + } + + +} + + + diff --git a/src/datagen/aviar/java/leaf/cosmere/aviar/patchouli/PatchouliAviarCategory.java b/src/datagen/aviar/java/leaf/cosmere/aviar/patchouli/PatchouliAviarCategory.java new file mode 100644 index 000000000..3005ace2a --- /dev/null +++ b/src/datagen/aviar/java/leaf/cosmere/aviar/patchouli/PatchouliAviarCategory.java @@ -0,0 +1,100 @@ +/* + * File updated ~ 21 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.aviar.patchouli; + +import leaf.cosmere.patchouli.data.BookStuff; + +import java.util.ArrayList; +import java.util.List; + +public class PatchouliAviarCategory +{ + public static void collect(List categories, List entries) + { + BookStuff.Category aviar = new BookStuff.Category( + "aviar", + "Of Birds and Bonds.$(br)" + + "In this section, I shall explain all I have discovered about Aviar. While not typically found on this planet, world hoppers have been known to travel with these as companions, bringing knowledge of these creatures with them.", + "aviar:fruit_of_patji"); + aviar.sortnum = 10; + aviar.secret = false; + categories.add(aviar); + + //Start a page list. + List pages = new ArrayList<>(); + + //aviar basics entry + { + BookStuff.Entry entry = new BookStuff.Entry("aviar_basics", aviar, "minecraft:book").setDisplayTitle("Aviar (Terminology)"); + entry.priority = true; + entry.sortnum = 1; + + BookStuff.Page terminologyPage = new BookStuff.TextPage(); + terminologyPage.setTitle("Terminology"); + terminologyPage.setText("Some terminology:" + + "$(li) Aviar: A bird who has bonded a symbiote native to the planet 'First of the Sun', in the Drominad system.." + + "$(li) Fruit of Patji: A fruit from off world. Contains the symbiote that grants birds their abilities, turning them into Aviar." + + "$(li) Aviar Bond: A bond between an Aviar and a human. This bond allows the human to gain access to the Aviar's abilities." + ); + pages.add(terminologyPage); + pages.add(new BookStuff.EntityPage("", "", "aviar:aviar{Variant:0}")); + entry.pages = pages.toArray(BookStuff.Page[]::new); + pages.clear(); + entries.add(entry); + } + + //Parrot Conversion + { + BookStuff.Entry entry = new BookStuff.Entry("how_to_get_aviar", aviar, "aviar:fruit_of_patji").setDisplayTitle("Fruit of Patji"); + entry.priority = false; + entry.sortnum = 2; + + pages.add( + new BookStuff.SpotlightPage( + "A very rare fruit, native to the planet 'First of the Sun', in the Drominad system. It is said that the fruit contains a symbiote that can bond with a human, granting them their companions wondrous abilities." + + "$(br)As this is not that planet, they're very hard to come by, with only the occaisional world hopper bringing them to this world." + + "$(br)It is worth noting that the Fruit of Patji will not effect already tame parrots, rather you have to feed it to a parrot then tame the creature.", + "aviar:fruit_of_patji" + ) + ); + + pages.add(new BookStuff.EntityPage( + "For the cost of some emeralds (and a nether star), a wandering trader may be convinced to part with the rare fruit of Patji.", + "Wandering Trader", + "minecraft:wandering_trader")); + + + entry.pages = pages.toArray(BookStuff.Page[]::new); + pages.clear(); + entries.add(entry); + } + + { + BookStuff.Entry entry = new BookStuff.Entry("breed_abilities", aviar, "minecraft:writable_book").setDisplayTitle("Breed Abilities"); + entry.priority = false; + entry.sortnum = 3; + + + BookStuff.Page textPage = new BookStuff.TextPage(); + //the first page title is ignored + //textPage.setTitle("Breeds"); + + textPage.setText( + "Strangely, the parrots around here appear to be compatible with the symbiote found within the fruit of Patji. $(br)$(br)" + + "There are only a few known breeds nearby, but it seems that each different breed manifests a different ability." + ); + pages.add(textPage); + + pages.add(new BookStuff.EntityPage("Grants Cognitive Concealment, hiding you from magic detection such as alllomantic bronze and white sand.", "", "aviar:aviar{Variant:0}")); + pages.add(new BookStuff.EntityPage("Grants increased fortune and looting (but not chest loot luck)", "", "aviar:aviar{Variant:1}")); + pages.add(new BookStuff.EntityPage("Grants doubled experience gain.", "", "aviar:aviar{Variant:2}")); + pages.add(new BookStuff.EntityPage("Decreases incoming damage.", "", "aviar:aviar{Variant:3}")); + pages.add(new BookStuff.EntityPage("Allows you to detect when mobs are targeting you. [currently doesn't work]", "", "aviar:aviar{Variant:4}")); + + entry.pages = pages.toArray(BookStuff.Page[]::new); + entries.add(entry); + } + } +} diff --git a/src/datagen/awakening/java/leaf/cosmere/awakening/AwakeningDataGenerator.java b/src/datagen/awakening/java/leaf/cosmere/awakening/AwakeningDataGenerator.java new file mode 100644 index 000000000..cb0e2786a --- /dev/null +++ b/src/datagen/awakening/java/leaf/cosmere/awakening/AwakeningDataGenerator.java @@ -0,0 +1,36 @@ +/* + * File updated ~ 8 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.awakening; + +import leaf.cosmere.awakening.common.Awakening; +import leaf.cosmere.awakening.loottables.AwakeningLootTableGen; +import leaf.cosmere.awakening.patchouli.AwakeningPatchouliGen; +import net.minecraft.data.DataGenerator; +import net.minecraft.data.PackOutput; +import net.minecraftforge.common.data.ExistingFileHelper; +import net.minecraftforge.data.event.GatherDataEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod.EventBusSubscriber; +import net.minecraftforge.fml.common.Mod.EventBusSubscriber.Bus; + +@EventBusSubscriber(modid = Awakening.MODID, bus = Bus.MOD) +public class AwakeningDataGenerator +{ + @SubscribeEvent + public static void gatherData(GatherDataEvent event) + { + DataGenerator generator = event.getGenerator(); + PackOutput packOutput = generator.getPackOutput(); + ExistingFileHelper existingFileHelper = event.getExistingFileHelper(); + + generator.addProvider(true, new AwakeningEngLangGen(packOutput)); + generator.addProvider(true, new AwakeningTagProvider(packOutput, event.getLookupProvider(), existingFileHelper)); + generator.addProvider(true, new AwakeningLootTableGen(packOutput)); + generator.addProvider(true, new AwakeningItemModelsGen(packOutput, existingFileHelper)); + generator.addProvider(true, new AwakeningRecipeGen(packOutput, existingFileHelper)); + generator.addProvider(true, new AwakeningPatchouliGen(packOutput)); + } + +} \ No newline at end of file diff --git a/src/datagen/awakening/java/leaf/cosmere/awakening/AwakeningEngLangGen.java b/src/datagen/awakening/java/leaf/cosmere/awakening/AwakeningEngLangGen.java new file mode 100644 index 000000000..4342840b2 --- /dev/null +++ b/src/datagen/awakening/java/leaf/cosmere/awakening/AwakeningEngLangGen.java @@ -0,0 +1,127 @@ +/* + * File updated ~ 10 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.awakening; + +import leaf.cosmere.api.helpers.RegistryHelper; +import leaf.cosmere.api.providers.IEntityTypeProvider; +import leaf.cosmere.api.text.StringHelper; +import leaf.cosmere.awakening.common.Awakening; +import leaf.cosmere.awakening.common.registries.AwakeningEntityTypes; +import net.minecraft.data.PackOutput; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.Item; +import net.minecraftforge.common.data.LanguageProvider; +import net.minecraftforge.registries.ForgeRegistries; + +public class AwakeningEngLangGen extends LanguageProvider +{ + public AwakeningEngLangGen(PackOutput output) + { + super(output, Awakening.MODID, "en_us"); + } + + @Override + protected void addTranslations() + { + addItemsAndBlocks(); + addEntities(); + addAdvancements(); + addManifestations(); + addAttributes(); + addPatchouli(); + addTooltips(); + addItemGroups(); + addDamageSources(); + addMobEffects(); + addCurioIdentifiers(); + addConfigs(); + addCommands(); + addKeybindings(); + addStats(); + + } + + + private void addItemsAndBlocks() + { + //Items and Blocks + for (Item item : ForgeRegistries.ITEMS.getValues()) + { + final ResourceLocation registryName = RegistryHelper.get(item); + if (registryName.getNamespace().contentEquals(Awakening.MODID)) + { + String localisedString = StringHelper.fixCapitalisation(registryName.getPath()); + add(item.getDescriptionId(), localisedString); + } + } + } + + private void addEntities() + { + //Entities + for (IEntityTypeProvider type : AwakeningEntityTypes.ENTITY_TYPES.getAllEntityTypes()) + { + final ResourceLocation id = type.getRegistryName(); + add(type.getEntityType().getDescriptionId(), StringHelper.fixCapitalisation(id.getPath())); + } + } + + private void addAdvancements() + { + + } + + private void addManifestations() + { + } + + private void addAttributes() + { + } + + private void addPatchouli() + { + + } + + private void addTooltips() + { + + } + + private void addItemGroups() + { + //ItemGroups/Tabs + add("tabs.awakening.items", "Awakening"); + } + + private void addDamageSources() + { + } + + private void addMobEffects() + { + } + + private void addCurioIdentifiers() + { + } + + private void addConfigs() + { + } + + private void addCommands() + { + } + + private void addKeybindings() + { + } + + private void addStats() + { + } +} diff --git a/src/datagen/awakening/java/leaf/cosmere/awakening/AwakeningItemModelsGen.java b/src/datagen/awakening/java/leaf/cosmere/awakening/AwakeningItemModelsGen.java new file mode 100644 index 000000000..bc9bf00f3 --- /dev/null +++ b/src/datagen/awakening/java/leaf/cosmere/awakening/AwakeningItemModelsGen.java @@ -0,0 +1,74 @@ +/* + * File updated ~ 8 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.awakening; + +import leaf.cosmere.api.helpers.RegistryHelper; +import leaf.cosmere.api.providers.IItemProvider; +import leaf.cosmere.awakening.common.Awakening; +import leaf.cosmere.awakening.common.registries.AwakeningItems; +import net.minecraft.data.PackOutput; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.Item; +import net.minecraftforge.client.model.generators.ItemModelBuilder; +import net.minecraftforge.client.model.generators.ItemModelProvider; +import net.minecraftforge.client.model.generators.ModelFile; +import net.minecraftforge.common.ForgeSpawnEggItem; +import net.minecraftforge.common.data.ExistingFileHelper; + +import java.util.function.Supplier; + +public class AwakeningItemModelsGen extends ItemModelProvider +{ + + public AwakeningItemModelsGen(PackOutput generator, ExistingFileHelper existingFileHelper) + { + super(generator, Awakening.MODID, existingFileHelper); + } + + @Override + protected void registerModels() + { + for (IItemProvider itemRegistryObject : AwakeningItems.ITEMS.getAllItems()) + { + String path = itemRegistryObject.getRegistryName().getPath(); + Item item = itemRegistryObject.asItem(); + + if (item instanceof ForgeSpawnEggItem) + { + getBuilder(item.toString()).parent(new ModelFile.UncheckedModelFile("item/template_spawn_egg")); + continue; + } + //if (item instanceof modelOverrideType) + //{ + // this.getBuilder(path) + // .parent(new ModelFile.UncheckedModelFile("awakening:item/specificModelParent")) + // .texture("layer0", modLoc("item/" + "texture_name")); + // continue; + //} + //else if (item instanceof hardcodedModelType) + //{ + // //skip + // continue; + //} + + //else normal item texture rules apply + simpleItem(path, path); + } + + } + + public String getPath(Supplier itemSupplier) + { + ResourceLocation location = RegistryHelper.get(itemSupplier.get()); + return location.getPath(); + } + + public ItemModelBuilder simpleItem(String path, String texturePath) + { + return this.getBuilder(path) + .parent(new ModelFile.UncheckedModelFile("item/generated")) + .texture("layer0", modLoc("item/" + texturePath)); + } +} \ No newline at end of file diff --git a/src/datagen/awakening/java/leaf/cosmere/awakening/AwakeningRecipeGen.java b/src/datagen/awakening/java/leaf/cosmere/awakening/AwakeningRecipeGen.java new file mode 100644 index 000000000..5d26c7682 --- /dev/null +++ b/src/datagen/awakening/java/leaf/cosmere/awakening/AwakeningRecipeGen.java @@ -0,0 +1,36 @@ +/* + * File updated ~ 4 - 1 - 2025 ~ Leaf + */ + +package leaf.cosmere.awakening; + +import leaf.cosmere.BaseRecipeProvider; +import leaf.cosmere.awakening.common.Awakening; +import net.minecraft.data.PackOutput; +import net.minecraft.data.recipes.FinishedRecipe; +import net.minecraft.resources.ResourceLocation; +import net.minecraftforge.common.crafting.conditions.IConditionBuilder; +import net.minecraftforge.common.data.ExistingFileHelper; + +import java.util.function.Consumer; + +public class AwakeningRecipeGen extends BaseRecipeProvider implements IConditionBuilder +{ + public AwakeningRecipeGen(PackOutput output, ExistingFileHelper existingFileHelper) + { + super(output, existingFileHelper, Awakening.MODID); + } + + @Override + protected ResourceLocation makeRL(String path) + { + return Awakening.rl(path); + } + + @Override + protected void addRecipes(Consumer consumer) + { + + } + +} diff --git a/src/datagen/awakening/java/leaf/cosmere/awakening/AwakeningTagProvider.java b/src/datagen/awakening/java/leaf/cosmere/awakening/AwakeningTagProvider.java new file mode 100644 index 000000000..bd7e3b3ee --- /dev/null +++ b/src/datagen/awakening/java/leaf/cosmere/awakening/AwakeningTagProvider.java @@ -0,0 +1,80 @@ +/* + * File updated ~ 8 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.awakening; + +import leaf.cosmere.api.providers.IBlockProvider; +import leaf.cosmere.awakening.common.Awakening; +import leaf.cosmere.awakening.common.registries.AwakeningBlocks; +import leaf.cosmere.tag.BaseTagProvider; +import net.minecraft.core.HolderLookup; +import net.minecraft.data.PackOutput; +import net.minecraftforge.common.data.ExistingFileHelper; + +import javax.annotation.Nullable; +import java.util.List; +import java.util.concurrent.CompletableFuture; + +public class AwakeningTagProvider extends BaseTagProvider +{ + public AwakeningTagProvider(PackOutput packOutput, CompletableFuture lookupProvider, @Nullable ExistingFileHelper existingFileHelper) + { + super(packOutput, lookupProvider, Awakening.MODID, existingFileHelper); + } + + + @Override + protected List getAllBlocks() + { + return AwakeningBlocks.BLOCKS.getAllBlocks(); + } + + + @Override + protected void registerTags(HolderLookup.Provider registries) + { + //getItemBuilder(CosmereTags.Items.CURIO_HEAD).add(Awakening.Item.asItem()); + + addItems(); + addBlocks(); + addStorageBlocks(); + addEntityTypes(); + addGameEvents(); + + addContainsMetal(); + } + + + private void addItems() + { + + } + + private void addBlocks() + { + //addToTag(BlockTags.NEEDS_STONE_TOOL, BlocksRegistry.METALWORKING_TABLE); + //addToHarvestTag(BlockTags.MINEABLE_WITH_AXE, BlocksRegistry.METALWORKING_TABLE); + + } + + private void addEntityTypes() + { + //getEntityTypeBuilder(CosmereTags.EntityTypes.CONTAINS_METAL).add(EntityType.IRON_GOLEM); + } + + private void addGameEvents() + { + + } + + private void addStorageBlocks() + { + + } + + private void addContainsMetal() + { + + } +} \ No newline at end of file diff --git a/src/datagen/awakening/java/leaf/cosmere/awakening/loottables/AwakeningBlockLootTableGen.java b/src/datagen/awakening/java/leaf/cosmere/awakening/loottables/AwakeningBlockLootTableGen.java new file mode 100644 index 000000000..3927b4bb4 --- /dev/null +++ b/src/datagen/awakening/java/leaf/cosmere/awakening/loottables/AwakeningBlockLootTableGen.java @@ -0,0 +1,33 @@ +/* + * File updated ~ 8 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.awakening.loottables; + +import leaf.cosmere.api.providers.IBlockProvider; +import leaf.cosmere.awakening.common.registries.AwakeningBlocks; +import leaf.cosmere.loottables.BaseBlockLootTables; +import net.minecraft.world.level.block.Block; + +public class AwakeningBlockLootTableGen extends BaseBlockLootTables +{ + @Override + protected void generate() + { + //first catch any blocks that don't drop self, like ores + for (IBlockProvider itemRegistryObject : AwakeningBlocks.BLOCKS.getAllBlocks()) + { + final Block block = itemRegistryObject.getBlock(); + //if (block instanceof MetalOreBlock oreBlock) + //{ + // this.add(oreBlock, (ore) -> + // { + // return createOreDrop(ore, AwakeningItems.ITEM.get()); + // }); + //} + } + + //then make the rest drop themselves. + dropSelf(AwakeningBlocks.BLOCKS.getAllBlocks()); + } +} diff --git a/src/datagen/awakening/java/leaf/cosmere/awakening/loottables/AwakeningLootTableGen.java b/src/datagen/awakening/java/leaf/cosmere/awakening/loottables/AwakeningLootTableGen.java new file mode 100644 index 000000000..45240bbde --- /dev/null +++ b/src/datagen/awakening/java/leaf/cosmere/awakening/loottables/AwakeningLootTableGen.java @@ -0,0 +1,22 @@ +/* + * File updated ~ 8 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.awakening.loottables; + +import leaf.cosmere.loottables.BaseLootProvider; +import net.minecraft.data.PackOutput; +import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets; + +import java.util.List; + +public class AwakeningLootTableGen extends BaseLootProvider +{ + public AwakeningLootTableGen(PackOutput packOutput) + { + super(packOutput, List.of( + new SubProviderEntry(AwakeningBlockLootTableGen::new, LootContextParamSets.BLOCK) + //,new SubProviderEntry(ExampleEntityLootTableGen::new, LootContextParamSets.ENTITY) + )); + } +} diff --git a/src/datagen/awakening/java/leaf/cosmere/awakening/patchouli/AwakeningPatchouliGen.java b/src/datagen/awakening/java/leaf/cosmere/awakening/patchouli/AwakeningPatchouliGen.java new file mode 100644 index 000000000..5c51b6fad --- /dev/null +++ b/src/datagen/awakening/java/leaf/cosmere/awakening/patchouli/AwakeningPatchouliGen.java @@ -0,0 +1,40 @@ +/* + * File updated ~ 9 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.awakening.patchouli; + +import leaf.cosmere.api.CosmereAPI; +import leaf.cosmere.awakening.common.Awakening; +import leaf.cosmere.patchouli.data.PatchouliProvider; +import net.minecraft.data.PackOutput; + +// +// In-Game Documentation generator +// +public class AwakeningPatchouliGen extends PatchouliProvider +{ + public AwakeningPatchouliGen(PackOutput generatorIn) + { + super(generatorIn, CosmereAPI.COSMERE_MODID); + } + + @Override + protected void collectInfoForBook() + { + PatchouliAwakeningCategory.collect(this.categories, this.entries); + } + + /** + * Gets a name for this provider, to use in logging. + */ + public String getName() + { + return "Awakening PatchouliGeneration"; + } + + +} + + + diff --git a/src/datagen/awakening/java/leaf/cosmere/awakening/patchouli/PatchouliAwakeningCategory.java b/src/datagen/awakening/java/leaf/cosmere/awakening/patchouli/PatchouliAwakeningCategory.java new file mode 100644 index 000000000..2c0d6eb3c --- /dev/null +++ b/src/datagen/awakening/java/leaf/cosmere/awakening/patchouli/PatchouliAwakeningCategory.java @@ -0,0 +1,47 @@ +/* + * File updated ~ 30 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.awakening.patchouli; + +import leaf.cosmere.patchouli.data.BookStuff; + +import java.util.ArrayList; +import java.util.List; + +public class PatchouliAwakeningCategory +{ + public static void collect(List categories, List entries) + { + BookStuff.Category awakening = new BookStuff.Category( + "awakening", + "Awakening description that says some stuff.", + "minecraft:paper"); + awakening.sortnum = 99; + awakening.secret = true; + categories.add(awakening); + + //Start a page list. + List pages = new ArrayList<>(); + + //awakening basics entry + { + BookStuff.Entry entry = new BookStuff.Entry("awakening_basics", awakening, awakening.icon).setDisplayTitle("Awakening (For Dummies)"); + entry.priority = true; + + + BookStuff.Page terminologyPage = new BookStuff.TextPage(); + terminologyPage.setTitle("Terminology"); + terminologyPage.setText( + "In this journal, I shall explain all I have discovered about Awakening. $(br)" + + "Firstly, some terminology:"); + pages.add(terminologyPage); + + + entry.pages = pages.toArray(BookStuff.Page[]::new); + pages.clear(); + entries.add(entry); + } + + } +} diff --git a/src/datagen/cosmeretools/java/leaf/cosmere/tools/ToolsDataGenerator.java b/src/datagen/cosmeretools/java/leaf/cosmere/tools/ToolsDataGenerator.java new file mode 100644 index 000000000..235b51b7d --- /dev/null +++ b/src/datagen/cosmeretools/java/leaf/cosmere/tools/ToolsDataGenerator.java @@ -0,0 +1,36 @@ +/* + * File updated ~ 8 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.tools; + +import leaf.cosmere.tools.common.CosmereTools; +import leaf.cosmere.tools.loottables.ToolsLootTableGen; +import leaf.cosmere.tools.patchouli.ToolsPatchouliGen; +import net.minecraft.data.DataGenerator; +import net.minecraft.data.PackOutput; +import net.minecraftforge.common.data.ExistingFileHelper; +import net.minecraftforge.data.event.GatherDataEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod.EventBusSubscriber; +import net.minecraftforge.fml.common.Mod.EventBusSubscriber.Bus; + +@EventBusSubscriber(modid = CosmereTools.MODID, bus = Bus.MOD) +public class ToolsDataGenerator +{ + @SubscribeEvent + public static void gatherData(GatherDataEvent event) + { + DataGenerator generator = event.getGenerator(); + PackOutput packOutput = generator.getPackOutput(); + ExistingFileHelper existingFileHelper = event.getExistingFileHelper(); + + generator.addProvider(true, new ToolsEngLangGen(packOutput)); + generator.addProvider(true, new ToolsTagProvider(packOutput, event.getLookupProvider(), existingFileHelper)); + generator.addProvider(true, new ToolsLootTableGen(packOutput)); + generator.addProvider(true, new ToolsItemModelsGen(packOutput, existingFileHelper)); + generator.addProvider(true, new ToolsRecipeGen(packOutput, existingFileHelper)); + generator.addProvider(true, new ToolsPatchouliGen(packOutput)); + } + +} \ No newline at end of file diff --git a/src/datagen/cosmeretools/java/leaf/cosmere/tools/ToolsEngLangGen.java b/src/datagen/cosmeretools/java/leaf/cosmere/tools/ToolsEngLangGen.java new file mode 100644 index 000000000..8ec5b3f2e --- /dev/null +++ b/src/datagen/cosmeretools/java/leaf/cosmere/tools/ToolsEngLangGen.java @@ -0,0 +1,128 @@ +/* + * File updated ~ 10 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.tools; + +import leaf.cosmere.api.helpers.RegistryHelper; +import leaf.cosmere.api.providers.IEntityTypeProvider; +import leaf.cosmere.api.text.StringHelper; +import leaf.cosmere.tools.common.CosmereTools; +import leaf.cosmere.tools.common.registries.ToolsEntityTypes; +import net.minecraft.data.PackOutput; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.Item; +import net.minecraftforge.common.data.LanguageProvider; +import net.minecraftforge.registries.ForgeRegistries; + +public class ToolsEngLangGen extends LanguageProvider +{ + public ToolsEngLangGen(PackOutput output) + { + super(output, CosmereTools.MODID, "en_us"); + } + + @Override + protected void addTranslations() + { + addItemsAndBlocks(); + addEntities(); + addAdvancements(); + addManifestations(); + addAttributes(); + addPatchouli(); + addCreativeTabs(); + addTooltips(); + addDamageSources(); + addMobEffects(); + addCurioIdentifiers(); + addConfigs(); + addCommands(); + addKeybindings(); + addStats(); + + } + + + private void addItemsAndBlocks() + { + //Items and Blocks + for (Item item : ForgeRegistries.ITEMS.getValues()) + { + final ResourceLocation registryName = RegistryHelper.get(item); + if (registryName.getNamespace().contentEquals(CosmereTools.MODID)) + { + String localisedString = StringHelper.fixCapitalisation(registryName.getPath()); + add(item.getDescriptionId(), localisedString); + } + } + } + + private void addEntities() + { + //Entities + for (IEntityTypeProvider type : ToolsEntityTypes.ENTITY_TYPES.getAllEntityTypes()) + { + final ResourceLocation id = type.getRegistryName(); + add(type.getEntityType().getDescriptionId(), StringHelper.fixCapitalisation(id.getPath())); + } + } + + private void addAdvancements() + { + + } + + private void addManifestations() + { + } + + private void addAttributes() + { + } + + private void addPatchouli() + { + + } + + private void addCreativeTabs() + { + //ItemGroups/Tabs + add("tabs.cosmeretools.items", "Cosmere Tools"); + + } + + private void addTooltips() + { + + } + + private void addDamageSources() + { + } + + private void addMobEffects() + { + } + + private void addCurioIdentifiers() + { + } + + private void addConfigs() + { + } + + private void addCommands() + { + } + + private void addKeybindings() + { + } + + private void addStats() + { + } +} diff --git a/src/datagen/cosmeretools/java/leaf/cosmere/tools/ToolsItemModelsGen.java b/src/datagen/cosmeretools/java/leaf/cosmere/tools/ToolsItemModelsGen.java new file mode 100644 index 000000000..6476c6d5c --- /dev/null +++ b/src/datagen/cosmeretools/java/leaf/cosmere/tools/ToolsItemModelsGen.java @@ -0,0 +1,123 @@ +/* + * File updated ~ 8 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.tools; + +import leaf.cosmere.api.helpers.RegistryHelper; +import leaf.cosmere.api.providers.IItemProvider; +import leaf.cosmere.tools.common.CosmereTools; +import leaf.cosmere.tools.common.registries.ToolsItems; +import net.minecraft.data.PackOutput; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.*; +import net.minecraftforge.client.model.generators.ItemModelBuilder; +import net.minecraftforge.client.model.generators.ItemModelProvider; +import net.minecraftforge.client.model.generators.ModelFile; +import net.minecraftforge.common.ForgeSpawnEggItem; +import net.minecraftforge.common.data.ExistingFileHelper; + +import java.util.function.Supplier; + +public class ToolsItemModelsGen extends ItemModelProvider +{ + + public ToolsItemModelsGen(PackOutput generator, ExistingFileHelper existingFileHelper) + { + super(generator, CosmereTools.MODID, existingFileHelper); + } + + @Override + protected void registerModels() + { + for (IItemProvider itemRegistryObject : ToolsItems.ITEMS.getAllItems()) + { + String path = itemRegistryObject.getRegistryName().getPath(); + Item item = itemRegistryObject.asItem(); + + if (item instanceof ForgeSpawnEggItem) + { + getBuilder(item.toString()).parent(new ModelFile.UncheckedModelFile("item/template_spawn_egg")); + continue; + } + else if (item instanceof PickaxeItem) + { + toolItem(path, "metal_pickaxe"); + continue; + } + else if (item instanceof ShovelItem) + { + toolItem(path, "metal_shovel"); + continue; + } + else if (item instanceof AxeItem) + { + toolItem(path, "metal_axe"); + continue; + } + else if (item instanceof HoeItem) + { + toolItem(path, "metal_hoe"); + continue; + } + else if (item instanceof SwordItem) + { + toolItem(path, "metal_sword"); + continue; + } + else if (item instanceof ArmorItem) + { + if (path.contains("helmet")) + { + simpleItemMC(path, "iron_helmet"); + } + else if (path.contains("chestplate")) + { + simpleItemMC(path, "iron_chestplate"); + } + else if (path.contains("leggings")) + { + simpleItemMC(path, "iron_leggings"); + } + else if (path.contains("boots")) + { + simpleItemMC(path, "iron_boots"); + } + + continue; + } + + //else normal item texture rules apply + simpleItem(path, path); + } + + } + + public String getPath(Supplier itemSupplier) + { + ResourceLocation location = RegistryHelper.get(itemSupplier.get()); + return location.getPath(); + } + + public ItemModelBuilder simpleItem(String path, String texturePath) + { + return this.getBuilder(path) + .parent(new ModelFile.UncheckedModelFile("item/generated")) + .texture("layer0", modLoc("item/" + texturePath)); + } + + public ItemModelBuilder simpleItemMC(String path, String texturePath) + { + return this.getBuilder(path) + .parent(new ModelFile.UncheckedModelFile("item/generated")) + .texture("layer0", new ResourceLocation("item/" + texturePath)); + } + + public ItemModelBuilder toolItem(String path, String toolTypePath) + { + return this.getBuilder(path) + .parent(new ModelFile.UncheckedModelFile("item/generated")) + .texture("layer0", modLoc("item/" + toolTypePath)) + .texture("layer1", modLoc("item/" + toolTypePath + "_0")); + } +} \ No newline at end of file diff --git a/src/datagen/cosmeretools/java/leaf/cosmere/tools/ToolsRecipeGen.java b/src/datagen/cosmeretools/java/leaf/cosmere/tools/ToolsRecipeGen.java new file mode 100644 index 000000000..e784eec92 --- /dev/null +++ b/src/datagen/cosmeretools/java/leaf/cosmere/tools/ToolsRecipeGen.java @@ -0,0 +1,62 @@ +/* + * File updated ~ 4 - 1 - 2025 ~ Leaf + */ + +package leaf.cosmere.tools; + +import leaf.cosmere.BaseRecipeProvider; +import leaf.cosmere.api.CosmereTags; +import leaf.cosmere.api.EnumUtils; +import leaf.cosmere.api.Metals; +import leaf.cosmere.tools.common.CosmereTools; +import leaf.cosmere.tools.common.registries.ToolsItems; +import net.minecraft.data.PackOutput; +import net.minecraft.data.recipes.FinishedRecipe; +import net.minecraft.resources.ResourceLocation; +import net.minecraftforge.common.crafting.conditions.IConditionBuilder; +import net.minecraftforge.common.data.ExistingFileHelper; + +import java.util.function.Consumer; + +public class ToolsRecipeGen extends BaseRecipeProvider implements IConditionBuilder +{ + public ToolsRecipeGen(PackOutput output, ExistingFileHelper existingFileHelper) + { + super(output, existingFileHelper, CosmereTools.MODID); + } + + @Override + protected ResourceLocation makeRL(String path) + { + return CosmereTools.rl(path); + } + + @Override + protected void addRecipes(Consumer consumer) + { + + for (Metals.MetalType metalType : EnumUtils.METAL_TYPES) + { + if (!metalType.hasMaterialItem()) + { + continue; + } + + addPickaxeRecipe(consumer, ToolsItems.METAL_PICKAXES.get(metalType), CosmereTags.Items.METAL_INGOT_TAGS.get(metalType)); + addShovelRecipe(consumer, ToolsItems.METAL_SHOVEL.get(metalType), CosmereTags.Items.METAL_INGOT_TAGS.get(metalType)); + addAxeRecipe(consumer, ToolsItems.METAL_AXES.get(metalType), CosmereTags.Items.METAL_INGOT_TAGS.get(metalType)); + addSwordRecipe(consumer, ToolsItems.METAL_SWORDS.get(metalType), CosmereTags.Items.METAL_INGOT_TAGS.get(metalType)); + addHoeRecipe(consumer, ToolsItems.METAL_HOE.get(metalType), CosmereTags.Items.METAL_INGOT_TAGS.get(metalType)); + + addArmorRecipes( + consumer, + CosmereTags.Items.METAL_INGOT_TAGS.get(metalType), + ToolsItems.METAL_HELMETS.get(metalType), + ToolsItems.METAL_CHESTPLATES.get(metalType), + ToolsItems.METAL_LEGGINGS.get(metalType), + ToolsItems.METAL_BOOTS.get(metalType) + ); + + } + } +} diff --git a/src/datagen/cosmeretools/java/leaf/cosmere/tools/ToolsTagProvider.java b/src/datagen/cosmeretools/java/leaf/cosmere/tools/ToolsTagProvider.java new file mode 100644 index 000000000..17b931c18 --- /dev/null +++ b/src/datagen/cosmeretools/java/leaf/cosmere/tools/ToolsTagProvider.java @@ -0,0 +1,80 @@ +/* + * File updated ~ 8 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.tools; + +import leaf.cosmere.api.providers.IBlockProvider; +import leaf.cosmere.tag.BaseTagProvider; +import leaf.cosmere.tools.common.CosmereTools; +import leaf.cosmere.tools.common.registries.ToolsBlocks; +import net.minecraft.core.HolderLookup; +import net.minecraft.data.PackOutput; +import net.minecraftforge.common.data.ExistingFileHelper; + +import javax.annotation.Nullable; +import java.util.List; +import java.util.concurrent.CompletableFuture; + +public class ToolsTagProvider extends BaseTagProvider +{ + public ToolsTagProvider(PackOutput packOutput, CompletableFuture lookupProvider, @Nullable ExistingFileHelper existingFileHelper) + { + super(packOutput, lookupProvider, CosmereTools.MODID, existingFileHelper); + } + + + @Override + protected List getAllBlocks() + { + return ToolsBlocks.BLOCKS.getAllBlocks(); + } + + + @Override + protected void registerTags(HolderLookup.Provider registries) + { + //getItemBuilder(CosmereTags.Items.CURIO_HEAD).add(Tools.Item.asItem()); + + addItems(); + addBlocks(); + addStorageBlocks(); + addEntityTypes(); + addGameEvents(); + + addContainsMetal(); + } + + + private void addItems() + { + + } + + private void addBlocks() + { + //addToTag(BlockTags.NEEDS_STONE_TOOL, BlocksRegistry.METALWORKING_TABLE); + //addToHarvestTag(BlockTags.MINEABLE_WITH_AXE, BlocksRegistry.METALWORKING_TABLE); + + } + + private void addEntityTypes() + { + //getEntityTypeBuilder(CosmereTags.EntityTypes.CONTAINS_METAL).add(EntityType.IRON_GOLEM); + } + + private void addGameEvents() + { + + } + + private void addStorageBlocks() + { + + } + + private void addContainsMetal() + { + + } +} \ No newline at end of file diff --git a/src/datagen/cosmeretools/java/leaf/cosmere/tools/loottables/ToolsBlockLootTableGen.java b/src/datagen/cosmeretools/java/leaf/cosmere/tools/loottables/ToolsBlockLootTableGen.java new file mode 100644 index 000000000..9d80e2915 --- /dev/null +++ b/src/datagen/cosmeretools/java/leaf/cosmere/tools/loottables/ToolsBlockLootTableGen.java @@ -0,0 +1,29 @@ +/* + * File updated ~ 8 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.tools.loottables; + +import leaf.cosmere.api.providers.IBlockProvider; +import leaf.cosmere.loottables.BaseBlockLootTables; +import leaf.cosmere.tools.common.registries.ToolsBlocks; +import net.minecraft.world.level.block.Block; + +public class ToolsBlockLootTableGen extends BaseBlockLootTables +{ + @Override + protected void generate() + { + for (IBlockProvider itemRegistryObject : ToolsBlocks.BLOCKS.getAllBlocks()) + { + final Block block = itemRegistryObject.getBlock(); + //if (block instanceof MetalOreBlock oreBlock) + //{ + // this.add(oreBlock, (ore) -> createOreDrop(ore, ItemsRegistry.METAL_RAW_ORE.get(oreBlock.getMetalType()))); + //} + } + + //then make the rest drop themselves. + dropSelf(ToolsBlocks.BLOCKS.getAllBlocks()); + } +} diff --git a/src/datagen/cosmeretools/java/leaf/cosmere/tools/loottables/ToolsLootTableGen.java b/src/datagen/cosmeretools/java/leaf/cosmere/tools/loottables/ToolsLootTableGen.java new file mode 100644 index 000000000..caa84ccf3 --- /dev/null +++ b/src/datagen/cosmeretools/java/leaf/cosmere/tools/loottables/ToolsLootTableGen.java @@ -0,0 +1,22 @@ +/* + * File updated ~ 8 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.tools.loottables; + +import leaf.cosmere.loottables.BaseLootProvider; +import net.minecraft.data.PackOutput; +import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets; + +import java.util.List; + +public class ToolsLootTableGen extends BaseLootProvider +{ + public ToolsLootTableGen(PackOutput packOutput) + { + super(packOutput, List.of( + new SubProviderEntry(ToolsBlockLootTableGen::new, LootContextParamSets.BLOCK) + //,new SubProviderEntry(ExampleEntityLootTableGen::new, LootContextParamSets.ENTITY) + )); + } +} diff --git a/src/datagen/cosmeretools/java/leaf/cosmere/tools/patchouli/PatchouliToolsCategory.java b/src/datagen/cosmeretools/java/leaf/cosmere/tools/patchouli/PatchouliToolsCategory.java new file mode 100644 index 000000000..a113b5fbb --- /dev/null +++ b/src/datagen/cosmeretools/java/leaf/cosmere/tools/patchouli/PatchouliToolsCategory.java @@ -0,0 +1,47 @@ +/* + * File updated ~ 22 - 3 - 2024 ~ Leaf + */ + +package leaf.cosmere.tools.patchouli; + +import leaf.cosmere.patchouli.data.BookStuff; + +import java.util.ArrayList; +import java.util.List; + +public class PatchouliToolsCategory +{ + public static void collect(List categories, List entries) + { + BookStuff.Category tools = new BookStuff.Category( + "tools", + "Metalworkers recently discovered that other metals besides iron and gold can be worked to make tools and armor.", + "cosmeretools:pewter_pickaxe"); + tools.sortnum = 99; + tools.secret = true; + categories.add(tools); + + //Start a page list. + List pages = new ArrayList<>(); + + //tools basics entry + { + BookStuff.Entry entry = new BookStuff.Entry("tools_basics", tools, tools.icon).setDisplayTitle("Tools (For Dummies)"); + entry.priority = true; + + + BookStuff.Page terminologyPage = new BookStuff.TextPage(); + terminologyPage.setTitle("Terminology"); + terminologyPage.setText( + "In this journal, I shall explain all I have discovered about Tools. $(br)" + + "Firstly, some terminology:"); + pages.add(terminologyPage); + + + entry.pages = pages.toArray(BookStuff.Page[]::new); + pages.clear(); + entries.add(entry); + } + + } +} diff --git a/src/datagen/cosmeretools/java/leaf/cosmere/tools/patchouli/ToolsPatchouliGen.java b/src/datagen/cosmeretools/java/leaf/cosmere/tools/patchouli/ToolsPatchouliGen.java new file mode 100644 index 000000000..ce4a8e95f --- /dev/null +++ b/src/datagen/cosmeretools/java/leaf/cosmere/tools/patchouli/ToolsPatchouliGen.java @@ -0,0 +1,40 @@ +/* + * File updated ~ 9 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.tools.patchouli; + +import leaf.cosmere.api.CosmereAPI; +import leaf.cosmere.patchouli.data.PatchouliProvider; +import leaf.cosmere.tools.common.CosmereTools; +import net.minecraft.data.PackOutput; + +// +// In-Game Documentation generator +// +public class ToolsPatchouliGen extends PatchouliProvider +{ + public ToolsPatchouliGen(PackOutput generatorIn) + { + super(generatorIn, CosmereAPI.COSMERE_MODID); + } + + @Override + protected void collectInfoForBook() + { + PatchouliToolsCategory.collect(this.categories, this.entries); + } + + /** + * Gets a name for this provider, to use in logging. + */ + public String getName() + { + return "Tools PatchouliGeneration"; + } + + +} + + + diff --git a/src/datagen/example/java/leaf/cosmere/example/ExampleDataGenerator.java b/src/datagen/example/java/leaf/cosmere/example/ExampleDataGenerator.java new file mode 100644 index 000000000..2e17978a1 --- /dev/null +++ b/src/datagen/example/java/leaf/cosmere/example/ExampleDataGenerator.java @@ -0,0 +1,36 @@ +/* + * File updated ~ 8 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.example; + +import leaf.cosmere.example.common.Example; +import leaf.cosmere.example.loottables.ExampleLootTableGen; +import leaf.cosmere.example.patchouli.ExamplePatchouliGen; +import net.minecraft.data.DataGenerator; +import net.minecraft.data.PackOutput; +import net.minecraftforge.common.data.ExistingFileHelper; +import net.minecraftforge.data.event.GatherDataEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod.EventBusSubscriber; +import net.minecraftforge.fml.common.Mod.EventBusSubscriber.Bus; + +@EventBusSubscriber(modid = Example.MODID, bus = Bus.MOD) +public class ExampleDataGenerator +{ + @SubscribeEvent + public static void gatherData(GatherDataEvent event) + { + DataGenerator generator = event.getGenerator(); + PackOutput packOutput = generator.getPackOutput(); + ExistingFileHelper existingFileHelper = event.getExistingFileHelper(); + + generator.addProvider(true, new ExampleEngLangGen(packOutput)); + generator.addProvider(true, new ExampleTagProvider(packOutput, event.getLookupProvider(), existingFileHelper)); + generator.addProvider(true, new ExampleLootTableGen(packOutput)); + generator.addProvider(true, new ExampleItemModelsGen(packOutput, existingFileHelper)); + generator.addProvider(true, new ExampleRecipeGen(packOutput, existingFileHelper)); + generator.addProvider(true, new ExamplePatchouliGen(packOutput)); + } + +} \ No newline at end of file diff --git a/src/datagen/example/java/leaf/cosmere/example/ExampleEngLangGen.java b/src/datagen/example/java/leaf/cosmere/example/ExampleEngLangGen.java new file mode 100644 index 000000000..8fb4cfadb --- /dev/null +++ b/src/datagen/example/java/leaf/cosmere/example/ExampleEngLangGen.java @@ -0,0 +1,127 @@ +/* + * File updated ~ 10 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.example; + +import leaf.cosmere.api.helpers.RegistryHelper; +import leaf.cosmere.api.providers.IEntityTypeProvider; +import leaf.cosmere.api.text.StringHelper; +import leaf.cosmere.example.common.Example; +import leaf.cosmere.example.common.registries.ExampleEntityTypes; +import net.minecraft.data.PackOutput; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.Item; +import net.minecraftforge.common.data.LanguageProvider; +import net.minecraftforge.registries.ForgeRegistries; + +public class ExampleEngLangGen extends LanguageProvider +{ + public ExampleEngLangGen(PackOutput output) + { + super(output, Example.MODID, "en_us"); + } + + @Override + protected void addTranslations() + { + addItemsAndBlocks(); + addEntities(); + addAdvancements(); + addManifestations(); + addAttributes(); + addPatchouli(); + addTooltips(); + addItemGroups(); + addDamageSources(); + addMobEffects(); + addCurioIdentifiers(); + addConfigs(); + addCommands(); + addKeybindings(); + addStats(); + + } + + + private void addItemsAndBlocks() + { + //Items and Blocks + for (Item item : ForgeRegistries.ITEMS.getValues()) + { + final ResourceLocation registryName = RegistryHelper.get(item); + if (registryName.getNamespace().contentEquals(Example.MODID)) + { + String localisedString = StringHelper.fixCapitalisation(registryName.getPath()); + add(item.getDescriptionId(), localisedString); + } + } + } + + private void addEntities() + { + //Entities + for (IEntityTypeProvider type : ExampleEntityTypes.ENTITY_TYPES.getAllEntityTypes()) + { + final ResourceLocation id = type.getRegistryName(); + add(type.getEntityType().getDescriptionId(), StringHelper.fixCapitalisation(id.getPath())); + } + } + + private void addAdvancements() + { + + } + + private void addManifestations() + { + } + + private void addAttributes() + { + } + + private void addPatchouli() + { + + } + + private void addTooltips() + { + + } + + private void addItemGroups() + { + //ItemGroups/Tabs + add("tabs.example.items", "Example"); + } + + private void addDamageSources() + { + } + + private void addMobEffects() + { + } + + private void addCurioIdentifiers() + { + } + + private void addConfigs() + { + } + + private void addCommands() + { + } + + private void addKeybindings() + { + } + + private void addStats() + { + } +} diff --git a/src/datagen/example/java/leaf/cosmere/example/ExampleItemModelsGen.java b/src/datagen/example/java/leaf/cosmere/example/ExampleItemModelsGen.java new file mode 100644 index 000000000..ca0f7c68c --- /dev/null +++ b/src/datagen/example/java/leaf/cosmere/example/ExampleItemModelsGen.java @@ -0,0 +1,74 @@ +/* + * File updated ~ 8 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.example; + +import leaf.cosmere.api.helpers.RegistryHelper; +import leaf.cosmere.api.providers.IItemProvider; +import leaf.cosmere.example.common.Example; +import leaf.cosmere.example.common.registries.ExampleItems; +import net.minecraft.data.PackOutput; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.Item; +import net.minecraftforge.client.model.generators.ItemModelBuilder; +import net.minecraftforge.client.model.generators.ItemModelProvider; +import net.minecraftforge.client.model.generators.ModelFile; +import net.minecraftforge.common.ForgeSpawnEggItem; +import net.minecraftforge.common.data.ExistingFileHelper; + +import java.util.function.Supplier; + +public class ExampleItemModelsGen extends ItemModelProvider +{ + + public ExampleItemModelsGen(PackOutput generator, ExistingFileHelper existingFileHelper) + { + super(generator, Example.MODID, existingFileHelper); + } + + @Override + protected void registerModels() + { + for (IItemProvider itemRegistryObject : ExampleItems.ITEMS.getAllItems()) + { + String path = itemRegistryObject.getRegistryName().getPath(); + Item item = itemRegistryObject.asItem(); + + if (item instanceof ForgeSpawnEggItem) + { + getBuilder(item.toString()).parent(new ModelFile.UncheckedModelFile("item/template_spawn_egg")); + continue; + } + //if (item instanceof modelOverrideType) + //{ + // this.getBuilder(path) + // .parent(new ModelFile.UncheckedModelFile("example:item/specificModelParent")) + // .texture("layer0", modLoc("item/" + "texture_name")); + // continue; + //} + //else if (item instanceof hardcodedModelType) + //{ + // //skip + // continue; + //} + + //else normal item texture rules apply + simpleItem(path, path); + } + + } + + public String getPath(Supplier itemSupplier) + { + ResourceLocation location = RegistryHelper.get(itemSupplier.get()); + return location.getPath(); + } + + public ItemModelBuilder simpleItem(String path, String texturePath) + { + return this.getBuilder(path) + .parent(new ModelFile.UncheckedModelFile("item/generated")) + .texture("layer0", modLoc("item/" + texturePath)); + } +} \ No newline at end of file diff --git a/src/datagen/example/java/leaf/cosmere/example/ExampleRecipeGen.java b/src/datagen/example/java/leaf/cosmere/example/ExampleRecipeGen.java new file mode 100644 index 000000000..579da8cb1 --- /dev/null +++ b/src/datagen/example/java/leaf/cosmere/example/ExampleRecipeGen.java @@ -0,0 +1,35 @@ +/* + * File updated ~ 4 - 1 - 2025 ~ Leaf + */ + +package leaf.cosmere.example; + +import leaf.cosmere.BaseRecipeProvider; +import leaf.cosmere.example.common.Example; +import net.minecraft.data.PackOutput; +import net.minecraft.data.recipes.FinishedRecipe; +import net.minecraft.resources.ResourceLocation; +import net.minecraftforge.common.crafting.conditions.IConditionBuilder; +import net.minecraftforge.common.data.ExistingFileHelper; + +import java.util.function.Consumer; + +public class ExampleRecipeGen extends BaseRecipeProvider implements IConditionBuilder +{ + public ExampleRecipeGen(PackOutput output, ExistingFileHelper existingFileHelper) + { + super(output, existingFileHelper, Example.MODID); + } + + @Override + protected ResourceLocation makeRL(String path) + { + return Example.rl(path); + } + + @Override + protected void addRecipes(Consumer consumer) + { + } + +} diff --git a/src/datagen/example/java/leaf/cosmere/example/ExampleTagProvider.java b/src/datagen/example/java/leaf/cosmere/example/ExampleTagProvider.java new file mode 100644 index 000000000..f67a071da --- /dev/null +++ b/src/datagen/example/java/leaf/cosmere/example/ExampleTagProvider.java @@ -0,0 +1,80 @@ +/* + * File updated ~ 8 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.example; + +import leaf.cosmere.api.providers.IBlockProvider; +import leaf.cosmere.example.common.Example; +import leaf.cosmere.example.common.registries.ExampleBlocks; +import leaf.cosmere.tag.BaseTagProvider; +import net.minecraft.core.HolderLookup; +import net.minecraft.data.PackOutput; +import net.minecraftforge.common.data.ExistingFileHelper; + +import javax.annotation.Nullable; +import java.util.List; +import java.util.concurrent.CompletableFuture; + +public class ExampleTagProvider extends BaseTagProvider +{ + public ExampleTagProvider(PackOutput packOutput, CompletableFuture lookupProvider, @Nullable ExistingFileHelper existingFileHelper) + { + super(packOutput, lookupProvider, Example.MODID, existingFileHelper); + } + + + @Override + protected List getAllBlocks() + { + return ExampleBlocks.BLOCKS.getAllBlocks(); + } + + + @Override + protected void registerTags(HolderLookup.Provider registries) + { + //getItemBuilder(CosmereTags.Items.CURIO_HEAD).add(Example.Item.asItem()); + + addItems(); + addBlocks(); + addStorageBlocks(); + addEntityTypes(); + addGameEvents(); + + addContainsMetal(); + } + + + private void addItems() + { + + } + + private void addBlocks() + { + //addToTag(BlockTags.NEEDS_STONE_TOOL, BlocksRegistry.METALWORKING_TABLE); + //addToHarvestTag(BlockTags.MINEABLE_WITH_AXE, BlocksRegistry.METALWORKING_TABLE); + + } + + private void addEntityTypes() + { + //getEntityTypeBuilder(CosmereTags.EntityTypes.CONTAINS_METAL).add(EntityType.IRON_GOLEM); + } + + private void addGameEvents() + { + + } + + private void addStorageBlocks() + { + + } + + private void addContainsMetal() + { + + } +} \ No newline at end of file diff --git a/src/datagen/example/java/leaf/cosmere/example/loottables/ExampleBlockLootTableGen.java b/src/datagen/example/java/leaf/cosmere/example/loottables/ExampleBlockLootTableGen.java new file mode 100644 index 000000000..6decdd847 --- /dev/null +++ b/src/datagen/example/java/leaf/cosmere/example/loottables/ExampleBlockLootTableGen.java @@ -0,0 +1,30 @@ +/* + * File updated ~ 8 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.example.loottables; + +import leaf.cosmere.api.providers.IBlockProvider; +import leaf.cosmere.example.common.registries.ExampleBlocks; +import leaf.cosmere.loottables.BaseBlockLootTables; +import net.minecraft.world.level.block.Block; + +public class ExampleBlockLootTableGen extends BaseBlockLootTables +{ + @Override + protected void generate() + { + //first catch any blocks that don't drop self, like ores + for (IBlockProvider itemRegistryObject : ExampleBlocks.BLOCKS.getAllBlocks()) + { + final Block block = itemRegistryObject.getBlock(); + //if (block instanceof MetalOreBlock oreBlock) + //{ + // this.add(oreBlock, (ore) -> createOreDrop(ore, ItemsRegistry.METAL_RAW_ORE.get(oreBlock.getMetalType()))); + //} + } + + //then make the rest drop themselves. + dropSelf(ExampleBlocks.BLOCKS.getAllBlocks()); + } +} diff --git a/src/datagen/example/java/leaf/cosmere/example/loottables/ExampleLootTableGen.java b/src/datagen/example/java/leaf/cosmere/example/loottables/ExampleLootTableGen.java new file mode 100644 index 000000000..db6b224ca --- /dev/null +++ b/src/datagen/example/java/leaf/cosmere/example/loottables/ExampleLootTableGen.java @@ -0,0 +1,23 @@ +/* + * File updated ~ 8 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.example.loottables; + +import leaf.cosmere.loottables.BaseLootProvider; +import net.minecraft.data.PackOutput; +import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets; + +import java.util.List; + +public class ExampleLootTableGen extends BaseLootProvider +{ + public ExampleLootTableGen(PackOutput packOutput) + { + super(packOutput, List.of( + new SubProviderEntry(ExampleBlockLootTableGen::new, LootContextParamSets.BLOCK) + //,new SubProviderEntry(ExampleEntityLootTableGen::new, LootContextParamSets.ENTITY) + )); + } + +} diff --git a/src/datagen/example/java/leaf/cosmere/example/patchouli/ExamplePatchouliGen.java b/src/datagen/example/java/leaf/cosmere/example/patchouli/ExamplePatchouliGen.java new file mode 100644 index 000000000..bd422b6e2 --- /dev/null +++ b/src/datagen/example/java/leaf/cosmere/example/patchouli/ExamplePatchouliGen.java @@ -0,0 +1,40 @@ +/* + * File updated ~ 9 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.example.patchouli; + +import leaf.cosmere.api.CosmereAPI; +import leaf.cosmere.example.common.Example; +import leaf.cosmere.patchouli.data.PatchouliProvider; +import net.minecraft.data.PackOutput; + +// +// In-Game Documentation generator +// +public class ExamplePatchouliGen extends PatchouliProvider +{ + public ExamplePatchouliGen(PackOutput generatorIn) + { + super(generatorIn, CosmereAPI.COSMERE_MODID); + } + + @Override + protected void collectInfoForBook() + { + PatchouliExampleCategory.collect(this.categories, this.entries); + } + + /** + * Gets a name for this provider, to use in logging. + */ + public String getName() + { + return "Example PatchouliGeneration"; + } + + +} + + + diff --git a/src/datagen/example/java/leaf/cosmere/example/patchouli/PatchouliExampleCategory.java b/src/datagen/example/java/leaf/cosmere/example/patchouli/PatchouliExampleCategory.java new file mode 100644 index 000000000..d4b207eff --- /dev/null +++ b/src/datagen/example/java/leaf/cosmere/example/patchouli/PatchouliExampleCategory.java @@ -0,0 +1,47 @@ +/* + * File updated ~ 22 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.example.patchouli; + +import leaf.cosmere.patchouli.data.BookStuff; + +import java.util.ArrayList; +import java.util.List; + +public class PatchouliExampleCategory +{ + public static void collect(List categories, List entries) + { + BookStuff.Category example = new BookStuff.Category( + "example", + "Example description that says some stuff.", + "minecraft:paper"); + example.sortnum = 99; + example.secret = true; + categories.add(example); + + //Start a page list. + List pages = new ArrayList<>(); + + //example basics entry + { + BookStuff.Entry entry = new BookStuff.Entry("example_basics", example, example.icon).setDisplayTitle("Example (For Dummies)"); + entry.priority = true; + + + BookStuff.Page terminologyPage = new BookStuff.TextPage(); + terminologyPage.setTitle("Terminology"); + terminologyPage.setText( + "In this journal, I shall explain all I have discovered about Example. $(br)" + + "Firstly, some terminology:"); + pages.add(terminologyPage); + + + entry.pages = pages.toArray(BookStuff.Page[]::new); + pages.clear(); + entries.add(entry); + } + + } +} diff --git a/src/datagen/feruchemy/java/leaf/cosmere/feruchemy/FeruchemyCuriosProvider.java b/src/datagen/feruchemy/java/leaf/cosmere/feruchemy/FeruchemyCuriosProvider.java new file mode 100644 index 000000000..2c2243ec4 --- /dev/null +++ b/src/datagen/feruchemy/java/leaf/cosmere/feruchemy/FeruchemyCuriosProvider.java @@ -0,0 +1,46 @@ +/* + * File updated ~ 20 - 11 - 2024 ~ Leaf + */ + +package leaf.cosmere.feruchemy; + +import leaf.cosmere.feruchemy.common.Feruchemy; +import net.minecraft.core.HolderLookup; +import net.minecraft.data.PackOutput; +import net.minecraft.world.entity.EntityType; +import net.minecraftforge.common.data.ExistingFileHelper; +import top.theillusivec4.curios.api.CuriosDataProvider; +import top.theillusivec4.curios.api.type.capability.ICurio; + +import java.util.concurrent.CompletableFuture; + +public class FeruchemyCuriosProvider extends CuriosDataProvider +{ + public FeruchemyCuriosProvider(PackOutput output, + ExistingFileHelper fileHelper, + CompletableFuture registries) + { + super(Feruchemy.MODID, output, fileHelper, registries); + } + + @Override + public void generate(HolderLookup.Provider registries, ExistingFileHelper fileHelper) + { + //https://docs.illusivesoulworks.com/curios/slots/data-generation + + this.createSlot("necklace") + .size(2) + .dropRule(ICurio.DropRule.ALWAYS_KEEP); + this.createSlot("bracelet") + .size(6) + .dropRule(ICurio.DropRule.ALWAYS_KEEP); + this.createSlot("ring") + .size(8) + .dropRule(ICurio.DropRule.ALWAYS_KEEP); + + this.createEntities("feruchemists") + .addPlayer() + .addEntities(EntityType.ARMOR_STAND) // todo inquisitors + .addSlots("necklace", "bracelet", "ring"); + } +} diff --git a/src/datagen/feruchemy/java/leaf/cosmere/feruchemy/FeruchemyDataGenerator.java b/src/datagen/feruchemy/java/leaf/cosmere/feruchemy/FeruchemyDataGenerator.java new file mode 100644 index 000000000..4ccaa9ce3 --- /dev/null +++ b/src/datagen/feruchemy/java/leaf/cosmere/feruchemy/FeruchemyDataGenerator.java @@ -0,0 +1,39 @@ +/* + * File updated ~ 10 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.feruchemy; + +import leaf.cosmere.feruchemy.common.Feruchemy; +import leaf.cosmere.feruchemy.patchouli.FeruchemyPatchouliGen; +import net.minecraft.core.HolderLookup; +import net.minecraft.data.DataGenerator; +import net.minecraft.data.PackOutput; +import net.minecraftforge.common.data.ExistingFileHelper; +import net.minecraftforge.data.event.GatherDataEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod.EventBusSubscriber; +import net.minecraftforge.fml.common.Mod.EventBusSubscriber.Bus; + +import java.util.concurrent.CompletableFuture; + +@EventBusSubscriber(modid = Feruchemy.MODID, bus = Bus.MOD) +public class FeruchemyDataGenerator +{ + @SubscribeEvent + public static void gatherData(GatherDataEvent event) + { + DataGenerator generator = event.getGenerator(); + PackOutput packOutput = generator.getPackOutput(); + ExistingFileHelper existingFileHelper = event.getExistingFileHelper(); + final CompletableFuture lookupProvider = event.getLookupProvider(); + + generator.addProvider(true, new FeruchemyEngLangGen(packOutput)); + generator.addProvider(true, new FeruchemyItemModelsGen(packOutput, existingFileHelper)); + generator.addProvider(true, new FeruchemyTagProvider(packOutput, event.getLookupProvider(), existingFileHelper)); + generator.addProvider(true, new FeruchemyRecipeGen(packOutput, existingFileHelper)); + generator.addProvider(true, new FeruchemyPatchouliGen(packOutput)); + generator.addProvider(event.includeServer(), new FeruchemyCuriosProvider(packOutput, existingFileHelper, lookupProvider)); + } + +} \ No newline at end of file diff --git a/src/datagen/feruchemy/java/leaf/cosmere/feruchemy/FeruchemyEngLangGen.java b/src/datagen/feruchemy/java/leaf/cosmere/feruchemy/FeruchemyEngLangGen.java new file mode 100644 index 000000000..b6d28b6d6 --- /dev/null +++ b/src/datagen/feruchemy/java/leaf/cosmere/feruchemy/FeruchemyEngLangGen.java @@ -0,0 +1,234 @@ +/* + * File updated ~ 20 - 11 - 2024 ~ Leaf + */ + +package leaf.cosmere.feruchemy; + +import leaf.cosmere.api.CosmereAPI; +import leaf.cosmere.api.EnumUtils; +import leaf.cosmere.api.Manifestations; +import leaf.cosmere.api.Metals; +import leaf.cosmere.api.helpers.RegistryHelper; +import leaf.cosmere.api.manifestation.Manifestation; +import leaf.cosmere.api.providers.IAttributeProvider; +import leaf.cosmere.api.providers.ICosmereEffectProvider; +import leaf.cosmere.api.text.StringHelper; +import leaf.cosmere.common.items.ChargeableMetalCurioItem; +import leaf.cosmere.feruchemy.common.Feruchemy; +import leaf.cosmere.feruchemy.common.registries.FeruchemyAttributes; +import leaf.cosmere.feruchemy.common.registries.FeruchemyEffects; +import net.minecraft.data.PackOutput; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.item.Item; +import net.minecraftforge.common.data.LanguageProvider; +import net.minecraftforge.registries.ForgeRegistries; + +import java.util.Locale; +import java.util.Map; + +import static leaf.cosmere.feruchemy.common.registries.FeruchemyAttributes.FERUCHEMY_ATTRIBUTES; + +public class FeruchemyEngLangGen extends LanguageProvider +{ + final String advancementTitleFormat = "advancements.feruchemy.%s.title"; + final String advancementDescriptionFormat = "advancements.feruchemy.%s.description"; + + public FeruchemyEngLangGen(PackOutput output) + { + super(output, Feruchemy.MODID, "en_us"); + } + + @Override + protected void addTranslations() + { + addItemsAndBlocks(); + addEntities(); + addAdvancements(); + addManifestations(); + addAttributes(); + addPatchouli(); + addCreativeTabs(); + addTooltips(); + addDamageSources(); + addMobEffects(); + addCurioIdentifiers(); + addConfigs(); + addCommands(); + addKeybindings(); + addStats(); + + } + + + private void addItemsAndBlocks() + { + //Items and Blocks + for (Item item : ForgeRegistries.ITEMS.getValues()) + { + final ResourceLocation registryName = RegistryHelper.get(item); + if (registryName.getNamespace().contentEquals(Feruchemy.MODID)) + { + String localisedString = StringHelper.fixCapitalisation(registryName.getPath()); + + if (item instanceof ChargeableMetalCurioItem) + { + String use = ((ChargeableMetalCurioItem) item).getMetalType().getFeruchemyMetalmindUse(); + add("item.feruchemy." + registryName.getPath() + ".tooltip", use); + } + + + add(item.getDescriptionId(), localisedString); + } + } + } + + private void addEntities() + { + //Entities + for (Map.Entry>, EntityType> type : ForgeRegistries.ENTITY_TYPES.getEntries()) + { + final ResourceLocation id = type.getKey().location(); + if (id.getNamespace().equals(Feruchemy.MODID)) + { + add(type.getValue().getDescriptionId(), StringHelper.fixCapitalisation(id.getPath())); + } + } + } + + private void addAdvancements() + { + //innate + Manifestations.ManifestationTypes value = Manifestations.ManifestationTypes.FERUCHEMY; + { + add(String.format(advancementTitleFormat, value.getName()), StringHelper.fixCapitalisation(value.getName())); + add(String.format(advancementDescriptionFormat, value.getName()), "Test description: " + StringHelper.fixCapitalisation(value.getName())); + } + } + + private void addManifestations() + { + for (Manifestation manifestation : CosmereAPI.manifestationRegistry()) + { + if (manifestation.getManifestationType() != Manifestations.ManifestationTypes.FERUCHEMY) + { + continue; + } + + //power type + String key = manifestation.getTranslationKey(); + + //description + //can't auto generate the descriptions ya dingleberry + String name; + String description; + + + String tabName = manifestation.getManifestationType().getName(); + String metalName = Metals.MetalType.valueOf(manifestation.getPowerID()).get().toString().toLowerCase(Locale.ROOT); + + name = "Feruchemical " + metalName; + description = "Users can tap " + metalName; + add(String.format(advancementTitleFormat, tabName + "." + metalName), StringHelper.fixCapitalisation(name)); + add(String.format(advancementDescriptionFormat, tabName + "." + metalName), "Test description: " + StringHelper.fixCapitalisation(name)); + + //Name + add(key, StringHelper.fixCapitalisation(name)); + + //todo decide about manifestation descriptions? + final ResourceLocation regName = manifestation.getRegistryName(); + add("manifestation." + regName.getNamespace() + "." + regName.getPath() + ".description", description); + } + + //work through each metal and generate localisation for related things. + for (Metals.MetalType metalType : EnumUtils.METAL_TYPES) + { + if (metalType.hasAssociatedManifestation()) + { + final String ferringName = metalType.getFerringName(); + add("feruchemy." + ferringName, StringHelper.fixCapitalisation(ferringName)); + } + } + } + + private void addAttributes() + { + //Attributes + FERUCHEMY_ATTRIBUTES.forEach((metalType, registryObject) -> + { + final String descriptionId = registryObject.getAttribute().getDescriptionId(); + + String name = "Feruchemical " + metalType.getName(); + // Attributes are the powers themselves, they need their own names. + add(descriptionId, StringHelper.fixCapitalisation(name)); + }); + } + + private void addPatchouli() + { + //work through each metal and generate localisation for related things. + for (Metals.MetalType metalType : EnumUtils.METAL_TYPES) + { + final String name = metalType.getName(); + final String ferringName = metalType.getFerringName(); + + String f = name + " - " + ferringName; + String fKey = metalType.getName(); + String feruchemyGuide = "entry." + fKey; + + add(feruchemyGuide, StringHelper.fixCapitalisation(f)); + } + } + + private void addCreativeTabs() + { + //ItemGroups/Tabs + add("tabs.feruchemy.items", "Feruchemy"); + + } + + private void addTooltips() + { + //Tooltips + add("tooltip.cosmere.attribute.iron", "%s%s Attack Damage"); + add("tooltip.cosmere.attribute.tin", "%s%s%% Better Night Vision"); + add("tooltip.cosmere.attribute.copper", "%s%s%% XP"); + add("tooltip.cosmere.attribute.zinc", "%s%s%% Emotional Fortitude"); + add("tooltip.cosmere.attribute.duralumin", "");//todo hemalurgic connection/identity + add("tooltip.cosmere.attribute.chromium", "%s%s Luck"); + add("tooltip.cosmere.attribute.nicrosil", "");//todo hemalurgic investiture + } + + private void addDamageSources() + { + } + + private void addMobEffects() + { + for (ICosmereEffectProvider effect : FeruchemyEffects.EFFECTS.getEffectsInRegistry()) + { + add(effect.getEffect().getTranslationKey(), StringHelper.fixCapitalisation(effect.getRegistryName().getPath())); + } + } + + private void addCurioIdentifiers() + { + } + + private void addConfigs() + { + } + + private void addCommands() + { + } + + private void addKeybindings() + { + } + + private void addStats() + { + } +} diff --git a/src/datagen/feruchemy/java/leaf/cosmere/feruchemy/FeruchemyItemModelsGen.java b/src/datagen/feruchemy/java/leaf/cosmere/feruchemy/FeruchemyItemModelsGen.java new file mode 100644 index 000000000..12a3aa9aa --- /dev/null +++ b/src/datagen/feruchemy/java/leaf/cosmere/feruchemy/FeruchemyItemModelsGen.java @@ -0,0 +1,76 @@ +/* + * File updated ~ 9 - 3 - 2025 ~ Leaf + */ + +package leaf.cosmere.feruchemy; + +import leaf.cosmere.api.providers.IItemProvider; +import leaf.cosmere.common.items.ChargeableMetalCurioItem; +import leaf.cosmere.feruchemy.common.Feruchemy; +import leaf.cosmere.feruchemy.common.registries.FeruchemyItems; +import net.minecraft.data.PackOutput; +import net.minecraft.world.item.BlockItem; +import net.minecraft.world.item.Item; +import net.minecraftforge.client.model.generators.ItemModelBuilder; +import net.minecraftforge.client.model.generators.ItemModelProvider; +import net.minecraftforge.client.model.generators.ModelFile; +import net.minecraftforge.common.data.ExistingFileHelper; + +public class FeruchemyItemModelsGen extends ItemModelProvider +{ + + public FeruchemyItemModelsGen(PackOutput generator, ExistingFileHelper existingFileHelper) + { + super(generator, Feruchemy.MODID, existingFileHelper); + } + + @Override + protected void registerModels() + { + for (IItemProvider itemRegistryObject : FeruchemyItems.ITEMS.getAllItems()) + { + String path = itemRegistryObject.getRegistryName().getPath(); + Item item = itemRegistryObject.asItem(); + + //blocks have their own model rules + if (item instanceof BlockItem) + { + continue; + } + else if (item instanceof ChargeableMetalCurioItem) + { + //because I'm lazy and don't wanna rename all the textures + //doesn't really need to be that explicit in naming anyway + //basically just remove _metalmind from the end if it exists + simpleItem(path, path.replace("_metalmind", "")); + continue; + } + //else if (item instanceof BraceletMetalmindItem) + //{ + // simpleItem(path, "metal_bracelet"); + // continue; + //} + //else if (item instanceof RingMetalmindItem) + //{ + // simpleItem(path, "metal_ring"); + // continue; + //} + //else if (item instanceof NecklaceMetalmindItem) + //{ + // simpleItem(path, "metal_necklace"); + // continue; + //} + + //else normal item texture rules apply + simpleItem(path, path); + } + + } + + public ItemModelBuilder simpleItem(String path, String texturePath) + { + return this.getBuilder(path) + .parent(new ModelFile.UncheckedModelFile("item/generated")) + .texture("layer0", modLoc("item/" + texturePath)); + } +} \ No newline at end of file diff --git a/src/datagen/feruchemy/java/leaf/cosmere/feruchemy/FeruchemyRecipeGen.java b/src/datagen/feruchemy/java/leaf/cosmere/feruchemy/FeruchemyRecipeGen.java new file mode 100644 index 000000000..726bbb0cd --- /dev/null +++ b/src/datagen/feruchemy/java/leaf/cosmere/feruchemy/FeruchemyRecipeGen.java @@ -0,0 +1,58 @@ +/* + * File updated ~ 4 - 1 - 2025 ~ Leaf + */ + +package leaf.cosmere.feruchemy; + +import leaf.cosmere.BaseRecipeProvider; +import leaf.cosmere.api.EnumUtils; +import leaf.cosmere.api.Metals; +import leaf.cosmere.feruchemy.common.Feruchemy; +import leaf.cosmere.feruchemy.common.registries.FeruchemyItems; +import net.minecraft.data.PackOutput; +import net.minecraft.data.recipes.FinishedRecipe; +import net.minecraft.data.recipes.RecipeCategory; +import net.minecraft.data.recipes.ShapedRecipeBuilder; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.TagKey; +import net.minecraft.world.item.Item; +import net.minecraftforge.common.crafting.conditions.IConditionBuilder; +import net.minecraftforge.common.data.ExistingFileHelper; + +import java.util.function.Consumer; + +public class FeruchemyRecipeGen extends BaseRecipeProvider implements IConditionBuilder +{ + public FeruchemyRecipeGen(PackOutput output, ExistingFileHelper existingFileHelper) + { + super(output, existingFileHelper, Feruchemy.MODID); + } + + @Override + protected ResourceLocation makeRL(String path) + { + return Feruchemy.rl(path); + } + + @Override + protected void addRecipes(Consumer consumer) + { + for (Metals.MetalType metalType : EnumUtils.METAL_TYPES) + { + addBasicMetalmindRecipes(consumer, metalType); + } + } + + protected static void addBasicMetalmindRecipes(Consumer consumer, Metals.MetalType metalType) + { + TagKey inputMaterial = metalType.getMetalIngotTag(); + + if (metalType.hasFeruchemicalEffect()) + { + ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS, FeruchemyItems.METAL_NECKLACES.get(metalType)).define('X', inputMaterial).pattern("XXX").pattern("X X").pattern(" X ").group("necklace").unlockedBy("has_material", has(inputMaterial)).save(consumer); + ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS, FeruchemyItems.METAL_RINGS.get(metalType)).define('X', inputMaterial).pattern(" X ").pattern("X X").pattern(" X ").group("ring").unlockedBy("has_material", has(inputMaterial)).save(consumer); + ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS, FeruchemyItems.METAL_BRACELETS.get(metalType)).define('X', inputMaterial).pattern(" X ").pattern("X X").pattern("X X").group("bracelet").unlockedBy("has_material", has(inputMaterial)).save(consumer); + } + } + +} diff --git a/src/datagen/feruchemy/java/leaf/cosmere/feruchemy/FeruchemyTagProvider.java b/src/datagen/feruchemy/java/leaf/cosmere/feruchemy/FeruchemyTagProvider.java new file mode 100644 index 000000000..da2ef0bfb --- /dev/null +++ b/src/datagen/feruchemy/java/leaf/cosmere/feruchemy/FeruchemyTagProvider.java @@ -0,0 +1,45 @@ +/* + * File updated ~ 20 - 11 - 2024 ~ Leaf + */ + +package leaf.cosmere.feruchemy; + +import leaf.cosmere.api.CosmereTags; +import leaf.cosmere.api.EnumUtils; +import leaf.cosmere.api.Metals; +import leaf.cosmere.feruchemy.common.Feruchemy; +import leaf.cosmere.feruchemy.common.registries.FeruchemyItems; +import leaf.cosmere.tag.BaseTagProvider; +import net.minecraft.core.HolderLookup; +import net.minecraft.data.PackOutput; +import net.minecraftforge.common.data.ExistingFileHelper; + +import javax.annotation.Nullable; +import java.util.concurrent.CompletableFuture; + +public class FeruchemyTagProvider extends BaseTagProvider +{ + public FeruchemyTagProvider(PackOutput packOutput, CompletableFuture lookupProvider, @Nullable ExistingFileHelper existingFileHelper) + { + super(packOutput, lookupProvider, Feruchemy.MODID, existingFileHelper); + } + + @Override + protected void registerTags(HolderLookup.Provider registries) + { + //getItemBuilder(CosmereTags.Items.CURIO_HEAD).add(Example.Item.asItem()); + + getItemBuilder(CosmereTags.Items.CURIO_BRACELET).add(FeruchemyItems.BANDS_OF_MOURNING.get()); + + for (Metals.MetalType metalType : EnumUtils.METAL_TYPES) + { + if (metalType.hasFeruchemicalEffect()) + { + //curio stuff + getItemBuilder(CosmereTags.Items.CURIO_NECKLACE).add(FeruchemyItems.METAL_NECKLACES.get(metalType).asItem()); + getItemBuilder(CosmereTags.Items.CURIO_RING).add(FeruchemyItems.METAL_RINGS.get(metalType).asItem()); + getItemBuilder(CosmereTags.Items.CURIO_BRACELET).add(FeruchemyItems.METAL_BRACELETS.get(metalType).asItem()); + } + } + } +} \ No newline at end of file diff --git a/src/datagen/feruchemy/java/leaf/cosmere/feruchemy/patchouli/FeruchemyPatchouliGen.java b/src/datagen/feruchemy/java/leaf/cosmere/feruchemy/patchouli/FeruchemyPatchouliGen.java new file mode 100644 index 000000000..aea98defa --- /dev/null +++ b/src/datagen/feruchemy/java/leaf/cosmere/feruchemy/patchouli/FeruchemyPatchouliGen.java @@ -0,0 +1,53 @@ +/* + * File updated ~ 9 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.feruchemy.patchouli; + +import leaf.cosmere.api.CosmereAPI; +import leaf.cosmere.feruchemy.common.Feruchemy; +import leaf.cosmere.patchouli.data.PatchouliProvider; +import net.minecraft.data.PackOutput; + +// +// In-Game Documentation generator +// +public class FeruchemyPatchouliGen extends PatchouliProvider +{ + public FeruchemyPatchouliGen(PackOutput generatorIn) + { + super(generatorIn, CosmereAPI.COSMERE_MODID); + } + + + @Override + protected void collectInfoForBook() + { + //dynamically figure out all the things we wanna generate categories/entries for? + //------------------------------------------// + // Categories // + //------------------------------------------// + // - Feruchemy // + // - Curios // + // - Machines ? // + // - Challenges ? // + // - // + // - // + // - // + // - // + // - // + //------------------------------------------// + + PatchouliFeruchemyCategory.collect(this.categories, this.entries); + + } + + /** + * Gets a name for this provider, to use in logging. + */ + public String getName() + { + return "PatchouliGeneration"; + } + +} diff --git a/src/datagen/feruchemy/java/leaf/cosmere/feruchemy/patchouli/PatchouliFeruchemyCategory.java b/src/datagen/feruchemy/java/leaf/cosmere/feruchemy/patchouli/PatchouliFeruchemyCategory.java new file mode 100644 index 000000000..f0adf15cd --- /dev/null +++ b/src/datagen/feruchemy/java/leaf/cosmere/feruchemy/patchouli/PatchouliFeruchemyCategory.java @@ -0,0 +1,156 @@ +/* + * File updated ~ 4 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.feruchemy.patchouli; + +import leaf.cosmere.api.Constants; +import leaf.cosmere.api.Metals; +import leaf.cosmere.api.text.StringHelper; +import leaf.cosmere.common.registration.impl.ManifestationRegistryObject; +import leaf.cosmere.feruchemy.common.manifestation.FeruchemyManifestation; +import leaf.cosmere.feruchemy.common.registries.FeruchemyManifestations; +import leaf.cosmere.patchouli.data.BookStuff; +import leaf.cosmere.patchouli.data.PatchouliTextFormat; + +import java.util.ArrayList; +import java.util.List; + +public class PatchouliFeruchemyCategory +{ + public static void collect(List categories, List entries) + { + BookStuff.Category feruchemy = new BookStuff.Category( + "feruchemy", + "The art of equivalent exchange when it comes to the body. ", + "feruchemy:copper_bracelet_metalmind"); + + feruchemy.sortnum = 2; + categories.add(feruchemy); + + List pages = new ArrayList<>(); + + BookStuff.Entry feruchemyBasics = new BookStuff.Entry("feruchemy_basics", feruchemy, feruchemy.icon); + feruchemyBasics.priority = true; + pages.add(new BookStuff.TextPage("The art requires storing an attribute in a piece of metal. Depending on what kind of metal you have access to, a metalmind of the corresponding metal will let you store and tap different attributes.", feruchemy.icon)); + pages.add(new BookStuff.CraftingPage("", "feruchemy:steel_ring_metalmind", "feruchemy:steel_bracelet_metalmind")); + pages.add(new BookStuff.CraftingPage("feruchemy:steel_necklace_metalmind").setText("Metalminds can store varying amounts of charges, depending on the size.")); + + feruchemyBasics.pages = pages.toArray(BookStuff.Page[]::new); + pages.clear(); + entries.add(feruchemyBasics); + + BookStuff.Entry Compounding = new BookStuff.Entry("Compounding", feruchemy, feruchemy.icon); + pages.add(new BookStuff.TextPage("A curious loophole in the systems of investiture on this planet has been discovered. It involves a metalborn with the allomantic and feruchemical " + + "abilities of the same metal to burn one of their feruchemical metalminds, essentially creating a new allomantic metal that releases the stored feruchemical charge tenfold.")); + pages.add(new BookStuff.TextPage("This is activated by setting your allomantic power to a negative mode called Compounding and Flared Compounding, which spends allomantic charges to gain feruchemical stores quickly. " + "This is only accessible to Twinborn who have the same Allomantic and Feruchemic metals.")); + Compounding.pages = pages.toArray(BookStuff.Page[]::new); + pages.clear(); + entries.add(Compounding); + + //feruchemy + for (ManifestationRegistryObject manifestationRegistryObject : FeruchemyManifestations.FERUCHEMY_POWERS.values()) + { + FeruchemyManifestation feruchemyManifestation = manifestationRegistryObject.get(); + Metals.MetalType metalType = feruchemyManifestation.getMetalType(); + + if (!metalType.hasFeruchemicalEffect()) + { + continue; + } + + String metalName = metalType.getName(); + BookStuff.Entry entryForThisMetal = new BookStuff.Entry( + "feruchemical_" + metalName, + feruchemy, + feruchemy.icon.replace("copper", metalName)); + entryForThisMetal.sortnum = metalType.getID(); + + pages.clear(); + String ferringName = StringHelper.fixCapitalisation(metalType.getFerringName()); + + + switch (metalType) + { + case IRON: + pages.add(new BookStuff.TextPage("A ferring who taps " + PatchouliTextFormat.Thing(metalName) + " is known as a \"" + PatchouliTextFormat.Thing(ferringName) + "\", and stores Weight. " + + "While storing, the Skimmer will find themselves getting lighter, and falling slower. Tapping makes them fall far faster, and take less knockback.")); + break; + case STEEL: + pages.add(new BookStuff.TextPage("A ferring who taps " + PatchouliTextFormat.Thing(metalName) + " is known as a \"" + PatchouliTextFormat.Thing(ferringName) + "\", and stores Speed. " + + "While storing, the Steelrunner will grow far slower. Tapping makes them move faster. Some reports say a Steelrunner can even run across water.")); + break; + case TIN: + pages.add(new BookStuff.TextPage("A ferring who taps " + PatchouliTextFormat.Thing(metalName) + " is known as a \"" + PatchouliTextFormat.Thing(ferringName) + "\", and stores Senses. " + + "While storing, the Windwhisperer will find themselves growing increasingly shortsighted. Tapping allows them to magnify their vision, as if looking through a spyglass.")); + break; + case PEWTER: + pages.add(new BookStuff.TextPage("A ferring who taps " + PatchouliTextFormat.Thing(metalName) + " is known as a \"" + PatchouliTextFormat.Thing(ferringName) + "\", and stores Strength. " + + "While storing, the Brute will find their attacks do little damage. Tapping allows them to gain increased damage on their attacks.")); + break; + case ZINC: + pages.add(new BookStuff.TextPage("A ferring who taps " + PatchouliTextFormat.Thing(metalName) + " is known as a \"" + PatchouliTextFormat.Thing(ferringName) + "\", and stores Mental Speed. " + + "While storing, the Sparker will find themselves learning less from their experiences. Tapping allows them to gain further insight into their experiences.")); + break; + case BRASS: + pages.add(new BookStuff.TextPage("A ferring who taps " + PatchouliTextFormat.Thing(metalName) + " is known as a \"" + PatchouliTextFormat.Thing(ferringName) + "\", and stores Warmth. " + + "While storing, the Firesoul will find themselves gaining a resistant to intense heat. Some reports say they can swim in lava. Tapping allows them to inflict burns onto others.")); + break; + case COPPER: + pages.add(new BookStuff.TextPage("A ferring who taps " + PatchouliTextFormat.Thing(metalName) + " is known as a \"" + PatchouliTextFormat.Thing(ferringName) + "\", and stores Memories. " + + "While storing, the Archivist is able to store their memories and experiences away. Tapping allows them to regain their stored knowledge.")); + break; + case BRONZE: + pages.add(new BookStuff.TextPage("A ferring who taps " + PatchouliTextFormat.Thing(metalName) + " is known as a \"" + PatchouliTextFormat.Thing(ferringName) + "\", and stores Wakefulness. " + + "While storing, the Sentry is able to fall asleep almost anywhere. Reports say that Tapping can keep away deadly creatures on this Shardworld called " + PatchouliTextFormat.Thing("Phantoms") + ". More research is required.")); + break; + case ALUMINUM: + pages.add(new BookStuff.TextPage("A ferring who taps " + PatchouliTextFormat.Thing(metalName) + " is known as a \"" + PatchouliTextFormat.Thing(ferringName) + "\", and stores Identity. " + + "A trueself is somewhat redundant by itself. Reports say that a feruchemist with access to both Feruchmical Aluminum and any other Feruchemical ability can store their identity before storing another attribute, creating what is called an Unkeyed Metalmind.")); + pages.add(new BookStuff.TextPage("This would allow others to access the reserves stored in this metalmind. More research is required.")); + break; + case DURALUMIN: + pages.add(new BookStuff.TextPage("A ferring who taps " + PatchouliTextFormat.Thing(metalName) + " is known as a \"" + PatchouliTextFormat.Thing(ferringName) + "\", and stores Connection. " + + "While storing, a Connector can make themselves more difficult for the native creatures of this shardworld to detect. Tapping allows them to create a closer bond with the native Villagers, granting them better trades. More research is required.")); + break; + case CHROMIUM: + pages.add(new BookStuff.TextPage("A ferring who taps " + PatchouliTextFormat.Thing(metalName) + " is known as a \"" + PatchouliTextFormat.Thing(ferringName) + "\", and stores Fortune. " + + "While storing, a Spinner will find that things left to chance generally end up against them. Ores they mine drop less usable chunks, Animals can't be harvested for as much usable meat, etc. Tapping seems to make fate bend in their favor.")); + break; + case NICROSIL: + pages.add(new BookStuff.TextPage("A ferring who taps " + PatchouliTextFormat.Thing(metalName) + " is known as a \"" + PatchouliTextFormat.Thing(ferringName) + "\", and stores Investiture. " + + "Little is known- more research required. (Not yet implemented)")); + break; + case CADMIUM: + pages.add(new BookStuff.TextPage("A ferring who taps " + PatchouliTextFormat.Thing(metalName) + " is known as a \"" + PatchouliTextFormat.Thing(ferringName) + "\", and stores Breaths. " + + "While storing, a Gasper will find it difficult to breathe. Storing too much may make them suffocate. tapping allows them to hold their breath for far longer periods of time.")); + break; + case BENDALLOY: + pages.add(new BookStuff.TextPage("A ferring who taps " + PatchouliTextFormat.Thing(metalName) + " is known as a \"" + PatchouliTextFormat.Thing(ferringName) + "\", and stores Saturation. " + + "While storing, a Subsumer is able to store away calories, which can be tapped at a later time.")); + break; + case GOLD: + pages.add(new BookStuff.TextPage("A ferring who taps " + PatchouliTextFormat.Thing(metalName) + " is known as a \"" + PatchouliTextFormat.Thing(ferringName) + "\", and stores Health. " + + "While storing, a Bloodmaker is able to store away health, growing frail and weak. Tapping allows them to recover from injuries with ease.")); + break; + case ELECTRUM: + pages.add(new BookStuff.TextPage("A ferring who taps " + PatchouliTextFormat.Thing(metalName) + " is known as a \"" + PatchouliTextFormat.Thing(ferringName) + "\", and stores Determination. " + + "While storing, a Pinnacle will find themselves growing more unsure. Tapping fills them with determination. Reports say that they can shrug off greater injury while tapping Determination. More research is required.")); + break; + case ATIUM: + pages.add(new BookStuff.TextPage("A ferring who taps " + PatchouliTextFormat.Thing(metalName) + " is known as a \"" + PatchouliTextFormat.Thing(ferringName) + "\", and stores Age. " + + "While storing age, the ferring will decrease in size. Tapping allows them to grow in size.")); + break; + } + + final String itemLoc = String.format("feruchemy:%s", metalName); + + pages.add(new BookStuff.CraftingPage(itemLoc + Constants.RegNameStubs.RING + Constants.RegNameStubs.METALMIND)); + pages.add(new BookStuff.CraftingPage(itemLoc + Constants.RegNameStubs.BRACELET + Constants.RegNameStubs.METALMIND)); + pages.add(new BookStuff.CraftingPage(itemLoc + Constants.RegNameStubs.NECKLACE + Constants.RegNameStubs.METALMIND)); + + entryForThisMetal.pages = pages.toArray(BookStuff.Page[]::new); + entries.add(entryForThisMetal); + } + } +} diff --git a/src/datagen/generated/.gitattributes b/src/datagen/generated/.gitattributes new file mode 100644 index 000000000..3ef72cd14 --- /dev/null +++ b/src/datagen/generated/.gitattributes @@ -0,0 +1,3 @@ +# GSON uses LF only, this prevents annoyance on Windows where only EOLs differ +*.json eol=lf +*.zs eol=lf \ No newline at end of file diff --git a/src/datagen/generated/allomancy/.cache/33e127e6612844751945f5810028d222595a199c b/src/datagen/generated/allomancy/.cache/33e127e6612844751945f5810028d222595a199c new file mode 100644 index 000000000..c7b142333 --- /dev/null +++ b/src/datagen/generated/allomancy/.cache/33e127e6612844751945f5810028d222595a199c @@ -0,0 +1,4 @@ +// 1.20.1 2024-10-09T13:22:13.3395565 Item Models: allomancy +81c96996e349f751bedf23b075c2981721fb76d0 assets/allomancy/models/item/coin_pouch.json +e82bd90fb9277f12fa679fb05b3e6af79c724fbb assets/allomancy/models/item/metal_vial.json +b1fc9e10f610b74182b209d5e872439f2a296b41 assets/allomancy/models/item/mistcloak.json diff --git a/src/datagen/generated/allomancy/.cache/3b2a435655541c92d690318b57013336949ed348 b/src/datagen/generated/allomancy/.cache/3b2a435655541c92d690318b57013336949ed348 new file mode 100644 index 000000000..3095b8fc2 --- /dev/null +++ b/src/datagen/generated/allomancy/.cache/3b2a435655541c92d690318b57013336949ed348 @@ -0,0 +1,21 @@ +// 1.20.1 2024-10-11T14:59:42.530569553 PatchouliGeneration +9a35dabf30aea20c86f3776639599f4c047a8992 assets/cosmere/patchouli_books/guide/en_us/categories/allomancy.json +616dc7ea9ebc24db258d30ac7cb95cf653f95e18 assets/cosmere/patchouli_books/guide/en_us/entries/allomancy/allomancy_basics.json +226376e7f0df98c8e4d27cb25e289ee0789220d5 assets/cosmere/patchouli_books/guide/en_us/entries/allomancy/allomantic_aluminum.json +ff3831744ba3fa0f0af1dda145a73a9d86e4608d assets/cosmere/patchouli_books/guide/en_us/entries/allomancy/allomantic_atium.json +735e4623a1d6d53ccb08c9348f2b41e51d50898f assets/cosmere/patchouli_books/guide/en_us/entries/allomancy/allomantic_bendalloy.json +c4557b85f6a59b11438a10daa7086c670d2d4769 assets/cosmere/patchouli_books/guide/en_us/entries/allomancy/allomantic_brass.json +4d4ccfd161501e9543b56783d435653af8d9e678 assets/cosmere/patchouli_books/guide/en_us/entries/allomancy/allomantic_bronze.json +319157bf3f42762842921ba413296814de6a37e2 assets/cosmere/patchouli_books/guide/en_us/entries/allomancy/allomantic_cadmium.json +767c8a0cd0fedee9bd1c566368dd42efe6763f81 assets/cosmere/patchouli_books/guide/en_us/entries/allomancy/allomantic_chromium.json +0cfd6b941bff4a9364f8aa39d45e1301f3a167f9 assets/cosmere/patchouli_books/guide/en_us/entries/allomancy/allomantic_copper.json +810f58c3e9f00fe8d187936223716112652de6de assets/cosmere/patchouli_books/guide/en_us/entries/allomancy/allomantic_duralumin.json +63026215276355ba291c9887b382d95ab00325d2 assets/cosmere/patchouli_books/guide/en_us/entries/allomancy/allomantic_electrum.json +64e08f1e4c2fe5661fb6b83f50c58ea63c073358 assets/cosmere/patchouli_books/guide/en_us/entries/allomancy/allomantic_gold.json +73b4b5a857d09bf49ca7652db4b7fe981bab8945 assets/cosmere/patchouli_books/guide/en_us/entries/allomancy/allomantic_iron.json +aa5870c79266148cca2fb7b5db059f14c2992c98 assets/cosmere/patchouli_books/guide/en_us/entries/allomancy/allomantic_nicrosil.json +27aae85dcfcafd4a7eb7ba8796202af7129b5356 assets/cosmere/patchouli_books/guide/en_us/entries/allomancy/allomantic_pewter.json +5cc8635482b00aed7f23709e2d0c8828071efadc assets/cosmere/patchouli_books/guide/en_us/entries/allomancy/allomantic_steel.json +f07966d0a465d662d83871c43b18f0f0a9cc099e assets/cosmere/patchouli_books/guide/en_us/entries/allomancy/allomantic_tin.json +922c5d66da0db9c157b77d48cd2af967b47b8265 assets/cosmere/patchouli_books/guide/en_us/entries/allomancy/allomantic_zinc.json +dbb1034db0e5c31b85bc9aa85768ab2374367887 assets/cosmere/patchouli_books/guide/en_us/entries/allomancy/coin_pouch.json diff --git a/src/datagen/generated/allomancy/.cache/3b6ce84233946f4e21ac7e6988b2016b6258d63f b/src/datagen/generated/allomancy/.cache/3b6ce84233946f4e21ac7e6988b2016b6258d63f new file mode 100644 index 000000000..42f749465 --- /dev/null +++ b/src/datagen/generated/allomancy/.cache/3b6ce84233946f4e21ac7e6988b2016b6258d63f @@ -0,0 +1,2 @@ +// 1.20.1 2024-10-09T13:22:13.338555 Tags: allomancy +9185f8da9398f78e4a902fc8a23daee805e5e879 data/curios/tags/items/head.json diff --git a/src/datagen/generated/allomancy/.cache/9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e b/src/datagen/generated/allomancy/.cache/9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e new file mode 100644 index 000000000..d624b1f54 --- /dev/null +++ b/src/datagen/generated/allomancy/.cache/9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e @@ -0,0 +1,6 @@ +// 1.20.1 2024-10-09T13:22:13.338555 Recipes +2ab76b8b72d83f1207051efc1cb9174ae9ae4a61 data/allomancy/advancements/recipes/tools/coin_pouch.json +ff01905c7528be493d7b447b09e20762cd818089 data/allomancy/advancements/recipes/tools/metal_vial.json +97699dc7b7a7cd857564421ad0cafff04b654089 data/allomancy/recipes/coin_pouch.json +8ad78df11acb7d92cf1169192b00ab592dc78b93 data/allomancy/recipes/metal_vial.json +08792c13f9fd6638a1e2f0b0a267e81ca8c42849 data/allomancy/recipes/vial_mixing.json diff --git a/src/datagen/generated/allomancy/.cache/c622617f6fabf890a00b9275cd5f643584a8a2c8 b/src/datagen/generated/allomancy/.cache/c622617f6fabf890a00b9275cd5f643584a8a2c8 new file mode 100644 index 000000000..417e4ef5a --- /dev/null +++ b/src/datagen/generated/allomancy/.cache/c622617f6fabf890a00b9275cd5f643584a8a2c8 @@ -0,0 +1,2 @@ +// 1.20.1 2025-11-27T19:37:08.635599 Languages: en_us +dbff8b7358ef52414127e6b00abc4f95ed5886b6 assets/allomancy/lang/en_us.json diff --git a/src/datagen/generated/allomancy/.cache/cf27fc9bc2e6304092bb5cd54e1f0003bca1e7c0 b/src/datagen/generated/allomancy/.cache/cf27fc9bc2e6304092bb5cd54e1f0003bca1e7c0 new file mode 100644 index 000000000..3c26eb343 --- /dev/null +++ b/src/datagen/generated/allomancy/.cache/cf27fc9bc2e6304092bb5cd54e1f0003bca1e7c0 @@ -0,0 +1,2 @@ +// 1.20.1 2024-11-20T20:22:55.8900388 Datapack registries: allomancy +3ceef284419cf1fbabbeef2250c9e0844d0c7e6d data/allomancy/damage_type/pewter_delayed_damage.json diff --git a/src/datagen/generated/allomancy/assets/allomancy/lang/en_us.json b/src/datagen/generated/allomancy/assets/allomancy/lang/en_us.json new file mode 100644 index 000000000..17098355c --- /dev/null +++ b/src/datagen/generated/allomancy/assets/allomancy/lang/en_us.json @@ -0,0 +1,163 @@ +{ + "advancements.allomancy.allomancy.aluminum.description": "Test description: Allomantic Aluminum", + "advancements.allomancy.allomancy.aluminum.title": "Allomantic Aluminum", + "advancements.allomancy.allomancy.atium.description": "Test description: Allomantic Atium", + "advancements.allomancy.allomancy.atium.title": "Allomantic Atium", + "advancements.allomancy.allomancy.bendalloy.description": "Test description: Allomantic Bendalloy", + "advancements.allomancy.allomancy.bendalloy.title": "Allomantic Bendalloy", + "advancements.allomancy.allomancy.brass.description": "Test description: Allomantic Brass", + "advancements.allomancy.allomancy.brass.title": "Allomantic Brass", + "advancements.allomancy.allomancy.bronze.description": "Test description: Allomantic Bronze", + "advancements.allomancy.allomancy.bronze.title": "Allomantic Bronze", + "advancements.allomancy.allomancy.cadmium.description": "Test description: Allomantic Cadmium", + "advancements.allomancy.allomancy.cadmium.title": "Allomantic Cadmium", + "advancements.allomancy.allomancy.chromium.description": "Test description: Allomantic Chromium", + "advancements.allomancy.allomancy.chromium.title": "Allomantic Chromium", + "advancements.allomancy.allomancy.copper.description": "Test description: Allomantic Copper", + "advancements.allomancy.allomancy.copper.title": "Allomantic Copper", + "advancements.allomancy.allomancy.description": "Test description: Allomancy", + "advancements.allomancy.allomancy.duralumin.description": "Test description: Allomantic Duralumin", + "advancements.allomancy.allomancy.duralumin.title": "Allomantic Duralumin", + "advancements.allomancy.allomancy.electrum.description": "Test description: Allomantic Electrum", + "advancements.allomancy.allomancy.electrum.title": "Allomantic Electrum", + "advancements.allomancy.allomancy.gold.description": "Test description: Allomantic Gold", + "advancements.allomancy.allomancy.gold.title": "Allomantic Gold", + "advancements.allomancy.allomancy.iron.description": "Test description: Allomantic Iron", + "advancements.allomancy.allomancy.iron.title": "Allomantic Iron", + "advancements.allomancy.allomancy.nicrosil.description": "Test description: Allomantic Nicrosil", + "advancements.allomancy.allomancy.nicrosil.title": "Allomantic Nicrosil", + "advancements.allomancy.allomancy.pewter.description": "Test description: Allomantic Pewter", + "advancements.allomancy.allomancy.pewter.title": "Allomantic Pewter", + "advancements.allomancy.allomancy.steel.description": "Test description: Allomantic Steel", + "advancements.allomancy.allomancy.steel.title": "Allomantic Steel", + "advancements.allomancy.allomancy.tin.description": "Test description: Allomantic Tin", + "advancements.allomancy.allomancy.tin.title": "Allomantic Tin", + "advancements.allomancy.allomancy.title": "Allomancy", + "advancements.allomancy.allomancy.zinc.description": "Test description: Allomantic Zinc", + "advancements.allomancy.allomancy.zinc.title": "Allomantic Zinc", + "allomancy.aluminum_gnat": "Aluminum Gnat", + "allomancy.augur": "Augur", + "allomancy.coinshot": "Coinshot", + "allomancy.duralumin_gnat": "Duralumin Gnat", + "allomancy.leecher": "Leecher", + "allomancy.lurcher": "Lurcher", + "allomancy.nicroburst": "Nicroburst", + "allomancy.oracle": "Oracle", + "allomancy.pulser": "Pulser", + "allomancy.rioter": "Rioter", + "allomancy.seeker": "Seeker", + "allomancy.seer": "Seer", + "allomancy.slider": "Slider", + "allomancy.smoker": "Smoker", + "allomancy.soother": "Soother", + "allomancy.thug": "Thug", + "allomancy.tineye": "Tineye", + "attribute.allomancy.aluminum": "Allomantic Aluminum", + "attribute.allomancy.bendalloy": "Allomantic Bendalloy", + "attribute.allomancy.brass": "Allomantic Brass", + "attribute.allomancy.bronze": "Allomantic Bronze", + "attribute.allomancy.cadmium": "Allomantic Cadmium", + "attribute.allomancy.chromium": "Allomantic Chromium", + "attribute.allomancy.copper": "Allomantic Copper", + "attribute.allomancy.duralumin": "Allomantic Duralumin", + "attribute.allomancy.electrum": "Allomantic Electrum", + "attribute.allomancy.gold": "Allomantic Gold", + "attribute.allomancy.iron": "Allomantic Iron", + "attribute.allomancy.nicrosil": "Allomantic Nicrosil", + "attribute.allomancy.pewter": "Allomantic Pewter", + "attribute.allomancy.steel": "Allomantic Steel", + "attribute.allomancy.tin": "Allomantic Tin", + "attribute.allomancy.zinc": "Allomantic Zinc", + "config.jade.plugin_allomancy.bronze_seeker_tooltip": "Seeker Tooltip", + "death.attack.allomancy.pewter_delayed_damage": "%1$s stopped burning pewter and succumbed to their wounds", + "death.attack.allomancy.pewter_delayed_damage.player": "%1$s stopped burning pewter while fighting %2$s and succumbed to their wounds", + "effect.allomancy.allomancy_boost": "Allomancy Boost", + "effect.allomancy.allomantic_brass_stun": "Allomantic Brass Stun", + "effect.allomancy.allomantic_pewter": "Allomantic Pewter", + "effect.allomancy.copper_cloud": "Copper Cloud", + "entity.allomancy.coin_projectile": "Coin Projectile", + "entry.aluminum": "Aluminum - Aluminum Gnat", + "entry.atium": "Atium - Seer", + "entry.bendalloy": "Bendalloy - Slider", + "entry.brass": "Brass - Soother", + "entry.bronze": "Bronze - Seeker", + "entry.cadmium": "Cadmium - Pulser", + "entry.chromium": "Chromium - Leecher", + "entry.copper": "Copper - Smoker", + "entry.duralumin": "Duralumin - Duralumin Gnat", + "entry.electrum": "Electrum - Oracle", + "entry.gold": "Gold - Augur", + "entry.harmonium": "Harmonium - Misting Harmonium", + "entry.iron": "Iron - Lurcher", + "entry.lead": "Lead - Misting Lead", + "entry.lerasatium": "Lerasatium - Misting Lerasatium", + "entry.lerasium": "Lerasium - Mistborn", + "entry.malatium": "Malatium - Misting Malatium", + "entry.nickel": "Nickel - Misting Nickel", + "entry.nicrosil": "Nicrosil - Nicroburst", + "entry.pewter": "Pewter - Thug", + "entry.silver": "Silver - Misting Silver", + "entry.steel": "Steel - Coinshot", + "entry.tin": "Tin - Tineye", + "entry.zinc": "Zinc - Rioter", + "item.allomancy.coin_pouch": "Coin Pouch", + "item.allomancy.metal_vial": "Metal Vial", + "item.allomancy.mistcloak": "Mistcloak", + "key.cosmere.allomancy.pull": "Pull", + "key.cosmere.allomancy.push": "Push", + "key.cosmere.allomancy.riot": "Riot", + "key.cosmere.allomancy.soothe": "Soothe", + "manifestation.allomancy.aluminum": "Allomantic Aluminum", + "manifestation.allomancy.aluminum.description": "Users can burn aluminum", + "manifestation.allomancy.atium": "Allomantic Atium", + "manifestation.allomancy.atium.description": "Users can burn atium", + "manifestation.allomancy.bendalloy": "Allomantic Bendalloy", + "manifestation.allomancy.bendalloy.description": "Users can burn bendalloy", + "manifestation.allomancy.brass": "Allomantic Brass", + "manifestation.allomancy.brass.description": "Users can burn brass", + "manifestation.allomancy.bronze": "Allomantic Bronze", + "manifestation.allomancy.bronze.description": "Users can burn bronze", + "manifestation.allomancy.cadmium": "Allomantic Cadmium", + "manifestation.allomancy.cadmium.description": "Users can burn cadmium", + "manifestation.allomancy.chromium": "Allomantic Chromium", + "manifestation.allomancy.chromium.description": "Users can burn chromium", + "manifestation.allomancy.copper": "Allomantic Copper", + "manifestation.allomancy.copper.description": "Users can burn copper", + "manifestation.allomancy.duralumin": "Allomantic Duralumin", + "manifestation.allomancy.duralumin.description": "Users can burn duralumin", + "manifestation.allomancy.electrum": "Allomantic Electrum", + "manifestation.allomancy.electrum.description": "Users can burn electrum", + "manifestation.allomancy.gold": "Allomantic Gold", + "manifestation.allomancy.gold.description": "Users can burn gold", + "manifestation.allomancy.iron": "Allomantic Iron", + "manifestation.allomancy.iron.description": "Users can burn iron", + "manifestation.allomancy.nicrosil": "Allomantic Nicrosil", + "manifestation.allomancy.nicrosil.description": "Users can burn nicrosil", + "manifestation.allomancy.pewter": "Allomantic Pewter", + "manifestation.allomancy.pewter.description": "Users can burn pewter", + "manifestation.allomancy.steel": "Allomantic Steel", + "manifestation.allomancy.steel.description": "Users can burn steel", + "manifestation.allomancy.tin": "Allomantic Tin", + "manifestation.allomancy.tin.description": "Users can burn tin", + "manifestation.allomancy.zinc": "Allomantic Zinc", + "manifestation.allomancy.zinc.description": "Users can burn zinc", + "stat.minecraft.time_since_started_burning_aluminum": "Time since started burning aluminum", + "stat.minecraft.time_since_started_burning_atium": "Time since started burning atium", + "stat.minecraft.time_since_started_burning_bendalloy": "Time since started burning bendalloy", + "stat.minecraft.time_since_started_burning_brass": "Time since started burning brass", + "stat.minecraft.time_since_started_burning_bronze": "Time since started burning bronze", + "stat.minecraft.time_since_started_burning_cadmium": "Time since started burning cadmium", + "stat.minecraft.time_since_started_burning_chromium": "Time since started burning chromium", + "stat.minecraft.time_since_started_burning_copper": "Time since started burning copper", + "stat.minecraft.time_since_started_burning_duralumin": "Time since started burning duralumin", + "stat.minecraft.time_since_started_burning_electrum": "Time since started burning electrum", + "stat.minecraft.time_since_started_burning_gold": "Time since started burning gold", + "stat.minecraft.time_since_started_burning_iron": "Time since started burning iron", + "stat.minecraft.time_since_started_burning_nicrosil": "Time since started burning nicrosil", + "stat.minecraft.time_since_started_burning_pewter": "Time since started burning pewter", + "stat.minecraft.time_since_started_burning_steel": "Time since started burning steel", + "stat.minecraft.time_since_started_burning_tin": "Time since started burning tin", + "stat.minecraft.time_since_started_burning_zinc": "Time since started burning zinc", + "tabs.allomancy.items": "Allomancy", + "tooltip.cosmere.metals.contained": "Contained Metals:" +} \ No newline at end of file diff --git a/src/datagen/generated/allomancy/assets/allomancy/models/item/coin_pouch.json b/src/datagen/generated/allomancy/assets/allomancy/models/item/coin_pouch.json new file mode 100644 index 000000000..9faf76738 --- /dev/null +++ b/src/datagen/generated/allomancy/assets/allomancy/models/item/coin_pouch.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "allomancy:item/coin_pouch" + } +} \ No newline at end of file diff --git a/src/datagen/generated/allomancy/assets/allomancy/models/item/metal_vial.json b/src/datagen/generated/allomancy/assets/allomancy/models/item/metal_vial.json new file mode 100644 index 000000000..37ef1537b --- /dev/null +++ b/src/datagen/generated/allomancy/assets/allomancy/models/item/metal_vial.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "allomancy:item/metal_vial" + } +} \ No newline at end of file diff --git a/src/datagen/generated/allomancy/assets/allomancy/models/item/mistcloak.json b/src/datagen/generated/allomancy/assets/allomancy/models/item/mistcloak.json new file mode 100644 index 000000000..216251e90 --- /dev/null +++ b/src/datagen/generated/allomancy/assets/allomancy/models/item/mistcloak.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "allomancy:item/mistcloak" + } +} \ No newline at end of file diff --git a/src/datagen/generated/allomancy/assets/cosmere/patchouli_books/guide/en_us/categories/allomancy.json b/src/datagen/generated/allomancy/assets/cosmere/patchouli_books/guide/en_us/categories/allomancy.json new file mode 100644 index 000000000..06a61b201 --- /dev/null +++ b/src/datagen/generated/allomancy/assets/cosmere/patchouli_books/guide/en_us/categories/allomancy.json @@ -0,0 +1,7 @@ +{ + "description": "Despite first documentation only occurring approximately one thousand years before the Catacendre, Allomancy has been explored in far greater detail than it's older counterparts. The art requires consuming a piece of metal, then burning it for an effect.", + "icon": "cosmere:pewter_nugget", + "name": "Allomancy", + "secret": false, + "sortnum": 1 +} \ No newline at end of file diff --git a/src/datagen/generated/allomancy/assets/cosmere/patchouli_books/guide/en_us/entries/allomancy/allomancy_basics.json b/src/datagen/generated/allomancy/assets/cosmere/patchouli_books/guide/en_us/entries/allomancy/allomancy_basics.json new file mode 100644 index 000000000..c88ed0583 --- /dev/null +++ b/src/datagen/generated/allomancy/assets/cosmere/patchouli_books/guide/en_us/entries/allomancy/allomancy_basics.json @@ -0,0 +1,25 @@ +{ + "category": "cosmere:allomancy", + "icon": "allomancy:metal_vial", + "name": "Allomancy Basics", + "pages": [ + { + "type": "text", + "text": "Here is where I shall explain Allomancy, a system of Investiture native to Scadrial. Despite first documentation only occurring approximately one thousand years before the Catacendre, Allomancy has been explored in much greater detail than it's two older counterparts.", + "title": "Allomancy (For Dummies)" + }, + { + "type": "text", + "text": "The art requires consuming a piece of metal, upon which time you can \"$(thing)Burn$()\" it. Those who are genetically gifted with a singular allomantic ability are generally referred to as a \"$(thing)Misting$()\". For someone who has access to all sixteen abilities, they are referred to as a \"$(thing)Mistborn$()\". Someone being born a Mistborn is extremely rare, but not unheard of.", + "title": "Allomancy (For Dummies)" + }, + { + "type": "patchouli:crafting", + "recipe": "allomancy:metal_vial" + } + ], + "priority": true, + "read_by_default": false, + "secret": false, + "sortnum": 0 +} \ No newline at end of file diff --git a/src/datagen/generated/allomancy/assets/cosmere/patchouli_books/guide/en_us/entries/allomancy/allomantic_aluminum.json b/src/datagen/generated/allomancy/assets/cosmere/patchouli_books/guide/en_us/entries/allomancy/allomantic_aluminum.json new file mode 100644 index 000000000..1f567333f --- /dev/null +++ b/src/datagen/generated/allomancy/assets/cosmere/patchouli_books/guide/en_us/entries/allomancy/allomantic_aluminum.json @@ -0,0 +1,25 @@ +{ + "category": "cosmere:allomancy", + "icon": "cosmere:aluminum_nugget", + "name": "Allomantic Aluminum", + "pages": [ + { + "type": "text", + "text": "A misting who can only burn $(thing)aluminum$() is known as an $(br)\"$(thing)Aluminum Gnat$()\" as they gain no discernible effect from burning their metal.$(br)Burning aluminum will wipe all their metal reserves, including aluminum.I have heard rumors that an Aluminum Gnat of considerable power could clear the effects of other sources of investiture or impurities from their bodies, but this has not been confirmed to me. (Not yet implemented)$(br)Aluminum is the internal pulling metal and one of four enhancement metals (alongside Duralumin, Chromium, and Nicrosil)" + }, + { + "type": "relations", + "entries": [ + "cosmere:allomancy/allomantic_aluminum", + "cosmere:allomancy/allomantic_duralumin", + "cosmere:allomancy/allomantic_chromium", + "cosmere:allomancy/allomantic_nicrosil" + ], + "title": "The enhancement metals:" + } + ], + "priority": false, + "read_by_default": false, + "secret": false, + "sortnum": 8 +} \ No newline at end of file diff --git a/src/datagen/generated/allomancy/assets/cosmere/patchouli_books/guide/en_us/entries/allomancy/allomantic_atium.json b/src/datagen/generated/allomancy/assets/cosmere/patchouli_books/guide/en_us/entries/allomancy/allomantic_atium.json new file mode 100644 index 000000000..7482c8ff2 --- /dev/null +++ b/src/datagen/generated/allomancy/assets/cosmere/patchouli_books/guide/en_us/entries/allomancy/allomantic_atium.json @@ -0,0 +1,19 @@ +{ + "category": "cosmere:allomancy", + "icon": "cosmere:atium_nugget", + "name": "Allomantic Atium", + "pages": [ + { + "type": "text", + "text": "A misting who burns $(thing)atium$() is known as a \"$(thing)Seer$()\". $(br)Most of the page is missing... (Not yet fully implemented)$(br)The metal atium is extraordinarily rare. Seers who can burn it can see into the future a small amount, and thus can dodge every attack that might befall them (unless the attacker is burning electrum of course)." + }, + { + "type": "text", + "text": "Interestingly atium doesnt fit the normal metal categories... $(br)I will have to further pursue the subject." + } + ], + "priority": false, + "read_by_default": false, + "secret": false, + "sortnum": 16 +} \ No newline at end of file diff --git a/src/datagen/generated/allomancy/assets/cosmere/patchouli_books/guide/en_us/entries/allomancy/allomantic_bendalloy.json b/src/datagen/generated/allomancy/assets/cosmere/patchouli_books/guide/en_us/entries/allomancy/allomantic_bendalloy.json new file mode 100644 index 000000000..97a3a8d68 --- /dev/null +++ b/src/datagen/generated/allomancy/assets/cosmere/patchouli_books/guide/en_us/entries/allomancy/allomantic_bendalloy.json @@ -0,0 +1,25 @@ +{ + "category": "cosmere:allomancy", + "icon": "cosmere:bendalloy_nugget", + "name": "Allomantic Bendalloy", + "pages": [ + { + "type": "text", + "text": "A misting who burns $(thing)bendalloy$() is known as a \"$(thing)Slider$()\". A slider creates a bubble around them in which time speeds up. To anyone inside of the time bubble, everything outside appears to move much more slowly. Bendalloy is the external pushing metal and one of four temporal metals (alongside Cadmium, Electrum, and Gold) [Bendalloy doesn't work properly yet and is still in development]" + }, + { + "type": "relations", + "entries": [ + "cosmere:allomancy/allomantic_cadmium", + "cosmere:allomancy/allomantic_bendalloy", + "cosmere:allomancy/allomantic_gold", + "cosmere:allomancy/allomantic_electrum" + ], + "title": "The temporal metals:" + } + ], + "priority": false, + "read_by_default": false, + "secret": false, + "sortnum": 13 +} \ No newline at end of file diff --git a/src/datagen/generated/allomancy/assets/cosmere/patchouli_books/guide/en_us/entries/allomancy/allomantic_brass.json b/src/datagen/generated/allomancy/assets/cosmere/patchouli_books/guide/en_us/entries/allomancy/allomantic_brass.json new file mode 100644 index 000000000..51a955d7c --- /dev/null +++ b/src/datagen/generated/allomancy/assets/cosmere/patchouli_books/guide/en_us/entries/allomancy/allomantic_brass.json @@ -0,0 +1,29 @@ +{ + "category": "cosmere:allomancy", + "icon": "cosmere:brass_nugget", + "name": "Allomantic Brass", + "pages": [ + { + "type": "text", + "text": "A misting who burns $(thing)brass$() is known as a \"$(thing)Soother$()\". A creature being manipulated by a soother will act far more pacified, reducing their willingness to engage in combat. A soother can use their powers by pressing either $(k:k:cosmere.allomacy.soothe)$() or $(k:key.cosmere.manifestation.use.active)$()." + }, + { + "type": "text", + "text": "Soothers have reported recently that their allomancy has been acting different, resulting in creatures that seem confused. (This feature is bugged.) Brass is the external pushing metal and one of four mental metals (alongside Zinc, Copper, and Bronze)" + }, + { + "type": "relations", + "entries": [ + "cosmere:allomancy/allomantic_zinc", + "cosmere:allomancy/allomantic_brass", + "cosmere:allomancy/allomantic_copper", + "cosmere:allomancy/allomantic_bronze" + ], + "title": "The mental metals:" + } + ], + "priority": false, + "read_by_default": false, + "secret": false, + "sortnum": 5 +} \ No newline at end of file diff --git a/src/datagen/generated/allomancy/assets/cosmere/patchouli_books/guide/en_us/entries/allomancy/allomantic_bronze.json b/src/datagen/generated/allomancy/assets/cosmere/patchouli_books/guide/en_us/entries/allomancy/allomantic_bronze.json new file mode 100644 index 000000000..d532a11e3 --- /dev/null +++ b/src/datagen/generated/allomancy/assets/cosmere/patchouli_books/guide/en_us/entries/allomancy/allomantic_bronze.json @@ -0,0 +1,29 @@ +{ + "category": "cosmere:allomancy", + "icon": "cosmere:bronze_nugget", + "name": "Allomantic Bronze", + "pages": [ + { + "type": "text", + "text": "A misting who burns $(thing)bronze$() is known as a \"$(thing)Seeker$()\". A seeker burning bronze is able to detect the nearby use of allomancy or feruchemy. A skilled seeker is capable of detecting what specific abilities are being used. Keep in mind that a smoker can neutralise the ability for a seeker to track allomancy or feruchemy. Bronze is the internal pushing metal and one of four mental metals (alongside Brass, Copper, and Zinc)" + }, + { + "type": "text", + "text": "[If you use the Jade mod, it shows you the metal the creature is burning, though you can do this on sound alone]" + }, + { + "type": "relations", + "entries": [ + "cosmere:allomancy/allomantic_zinc", + "cosmere:allomancy/allomantic_brass", + "cosmere:allomancy/allomantic_copper", + "cosmere:allomancy/allomantic_bronze" + ], + "title": "The mental metals:" + } + ], + "priority": false, + "read_by_default": false, + "secret": false, + "sortnum": 7 +} \ No newline at end of file diff --git a/src/datagen/generated/allomancy/assets/cosmere/patchouli_books/guide/en_us/entries/allomancy/allomantic_cadmium.json b/src/datagen/generated/allomancy/assets/cosmere/patchouli_books/guide/en_us/entries/allomancy/allomantic_cadmium.json new file mode 100644 index 000000000..8a9b2da26 --- /dev/null +++ b/src/datagen/generated/allomancy/assets/cosmere/patchouli_books/guide/en_us/entries/allomancy/allomantic_cadmium.json @@ -0,0 +1,25 @@ +{ + "category": "cosmere:allomancy", + "icon": "cosmere:cadmium_nugget", + "name": "Allomantic Cadmium", + "pages": [ + { + "type": "text", + "text": "A misting who burns $(thing)cadmium$() is known as a \"$(thing)Pulser$()\". A pulser creates a bubble around them in which time slows down. To anyone inside this time bubble, everything outside appears to move faster. Cadmium is the external pulling metal and one of four temporal metals (alongside Bendalloy, Electrum, and Gold) [Cadmium doesn't work properly yet and is still in development]" + }, + { + "type": "relations", + "entries": [ + "cosmere:allomancy/allomantic_cadmium", + "cosmere:allomancy/allomantic_bendalloy", + "cosmere:allomancy/allomantic_gold", + "cosmere:allomancy/allomantic_electrum" + ], + "title": "The temporal metals:" + } + ], + "priority": false, + "read_by_default": false, + "secret": false, + "sortnum": 12 +} \ No newline at end of file diff --git a/src/datagen/generated/allomancy/assets/cosmere/patchouli_books/guide/en_us/entries/allomancy/allomantic_chromium.json b/src/datagen/generated/allomancy/assets/cosmere/patchouli_books/guide/en_us/entries/allomancy/allomantic_chromium.json new file mode 100644 index 000000000..267c1eddd --- /dev/null +++ b/src/datagen/generated/allomancy/assets/cosmere/patchouli_books/guide/en_us/entries/allomancy/allomantic_chromium.json @@ -0,0 +1,25 @@ +{ + "category": "cosmere:allomancy", + "icon": "cosmere:chromium_nugget", + "name": "Allomantic Chromium", + "pages": [ + { + "type": "text", + "text": "A misting who burns $(thing)chromium$() is known as a \"$(thing)Leecher$()\". A leecher can deplete the metal reserves of another allomancer with physical contact, as if the target were burning aluminum themselves. Chromium is the external pulling metal and one of four enhancement metals (alongside Aluminum, Duralumin, and Nicrosil)" + }, + { + "type": "relations", + "entries": [ + "cosmere:allomancy/allomantic_aluminum", + "cosmere:allomancy/allomantic_duralumin", + "cosmere:allomancy/allomantic_chromium", + "cosmere:allomancy/allomantic_nicrosil" + ], + "title": "The enhancement metals:" + } + ], + "priority": false, + "read_by_default": false, + "secret": false, + "sortnum": 10 +} \ No newline at end of file diff --git a/src/datagen/generated/allomancy/assets/cosmere/patchouli_books/guide/en_us/entries/allomancy/allomantic_copper.json b/src/datagen/generated/allomancy/assets/cosmere/patchouli_books/guide/en_us/entries/allomancy/allomantic_copper.json new file mode 100644 index 000000000..7a17a9f89 --- /dev/null +++ b/src/datagen/generated/allomancy/assets/cosmere/patchouli_books/guide/en_us/entries/allomancy/allomantic_copper.json @@ -0,0 +1,25 @@ +{ + "category": "cosmere:allomancy", + "icon": "cosmere:copper_nugget", + "name": "Allomantic Copper", + "pages": [ + { + "type": "text", + "text": "A misting who burns $(thing)copper$()is known as a \"$(thing)Smoker$()\". $(br)A smoker burning copper generates a 'coppercloud,' which hides Allomancy from being detected by Bronze. Although I've never witnessed it, I've heard that a seeker of considerable strength could pierce a coppercloud. More research is required.$(br)Copper is the internal pulling metal and one of four mental metals (alongside Zinc, Brass, and Bronze)" + }, + { + "type": "relations", + "entries": [ + "cosmere:allomancy/allomantic_zinc", + "cosmere:allomancy/allomantic_brass", + "cosmere:allomancy/allomantic_copper", + "cosmere:allomancy/allomantic_bronze" + ], + "title": "The mental metals:" + } + ], + "priority": false, + "read_by_default": false, + "secret": false, + "sortnum": 6 +} \ No newline at end of file diff --git a/src/datagen/generated/allomancy/assets/cosmere/patchouli_books/guide/en_us/entries/allomancy/allomantic_duralumin.json b/src/datagen/generated/allomancy/assets/cosmere/patchouli_books/guide/en_us/entries/allomancy/allomantic_duralumin.json new file mode 100644 index 000000000..8d6c3e96a --- /dev/null +++ b/src/datagen/generated/allomancy/assets/cosmere/patchouli_books/guide/en_us/entries/allomancy/allomantic_duralumin.json @@ -0,0 +1,29 @@ +{ + "category": "cosmere:allomancy", + "icon": "cosmere:duralumin_nugget", + "name": "Allomantic Duralumin", + "pages": [ + { + "type": "text", + "text": "A misting who can only burn $(thing)duralumin$() is known as a $(br)\"$(thing)Duralumin Gnat$()\" as they gain no discernible effect from burning their metal. The metal reserves of a misting burning duralumin will deplete faster, but will have a much more prominent effect. You might note that this feature is useless on its own, as it needs to be used in tandom with a second metal." + }, + { + "type": "text", + "text": "Duralumin is the internal pushing metal and one of four enhancement metals (alongside Aluminum, Chromium, and Nicrosil" + }, + { + "type": "relations", + "entries": [ + "cosmere:allomancy/allomantic_aluminum", + "cosmere:allomancy/allomantic_duralumin", + "cosmere:allomancy/allomantic_chromium", + "cosmere:allomancy/allomantic_nicrosil" + ], + "title": "The enhancement metals:" + } + ], + "priority": false, + "read_by_default": false, + "secret": false, + "sortnum": 9 +} \ No newline at end of file diff --git a/src/datagen/generated/allomancy/assets/cosmere/patchouli_books/guide/en_us/entries/allomancy/allomantic_electrum.json b/src/datagen/generated/allomancy/assets/cosmere/patchouli_books/guide/en_us/entries/allomancy/allomantic_electrum.json new file mode 100644 index 000000000..2e7a53ad9 --- /dev/null +++ b/src/datagen/generated/allomancy/assets/cosmere/patchouli_books/guide/en_us/entries/allomancy/allomantic_electrum.json @@ -0,0 +1,25 @@ +{ + "category": "cosmere:allomancy", + "icon": "cosmere:electrum_nugget", + "name": "Allomantic Electrum", + "pages": [ + { + "type": "text", + "text": "A misting who burns $(thing)electrum$() is known as a \"$(thing)Oracle$()\". Most of the page is missing... (Not yet fully implemented) The primary use for electrum is to counter the godmetal Atium's ability to see your attacks and thus dodge out of the way. This metal evens the playing field. Electrum is the internal pushing metal and one of four temporal metals (alongside Bendalloy, Cadmium, and Gold)" + }, + { + "type": "relations", + "entries": [ + "cosmere:allomancy/allomantic_cadmium", + "cosmere:allomancy/allomantic_bendalloy", + "cosmere:allomancy/allomantic_gold", + "cosmere:allomancy/allomantic_electrum" + ], + "title": "The temporal metals:" + } + ], + "priority": false, + "read_by_default": false, + "secret": false, + "sortnum": 15 +} \ No newline at end of file diff --git a/src/datagen/generated/allomancy/assets/cosmere/patchouli_books/guide/en_us/entries/allomancy/allomantic_gold.json b/src/datagen/generated/allomancy/assets/cosmere/patchouli_books/guide/en_us/entries/allomancy/allomantic_gold.json new file mode 100644 index 000000000..bb1bb79e3 --- /dev/null +++ b/src/datagen/generated/allomancy/assets/cosmere/patchouli_books/guide/en_us/entries/allomancy/allomantic_gold.json @@ -0,0 +1,25 @@ +{ + "category": "cosmere:allomancy", + "icon": "minecraft:gold_nugget", + "name": "Allomantic Gold", + "pages": [ + { + "type": "text", + "text": "A misting who burns $(thing)gold$() is known as a \"$(thing)Augur$()\". Gold is the internal pulling metal and one of four temporal metals (alongside Bendalloy, Cadmium, and Electrum) The rest of the page is scratched out. (Not yet implemented)" + }, + { + "type": "relations", + "entries": [ + "cosmere:allomancy/allomantic_cadmium", + "cosmere:allomancy/allomantic_bendalloy", + "cosmere:allomancy/allomantic_gold", + "cosmere:allomancy/allomantic_electrum" + ], + "title": "The temporal metals:" + } + ], + "priority": false, + "read_by_default": false, + "secret": false, + "sortnum": 14 +} \ No newline at end of file diff --git a/src/datagen/generated/allomancy/assets/cosmere/patchouli_books/guide/en_us/entries/allomancy/allomantic_iron.json b/src/datagen/generated/allomancy/assets/cosmere/patchouli_books/guide/en_us/entries/allomancy/allomantic_iron.json new file mode 100644 index 000000000..e80422b83 --- /dev/null +++ b/src/datagen/generated/allomancy/assets/cosmere/patchouli_books/guide/en_us/entries/allomancy/allomantic_iron.json @@ -0,0 +1,29 @@ +{ + "category": "cosmere:allomancy", + "icon": "minecraft:iron_nugget", + "name": "Allomantic Iron", + "pages": [ + { + "type": "text", + "text": "A misting who burns $(thing)iron$() is known as a \"$(thing)Lurcher$()\". Burning Iron allows you to pull metal objects towards you.$(br2)Iron is the external pulling metal and one of four physical metals (Alongside Steel, Pewter, and Tin) " + }, + { + "type": "text", + "text": "Ironpulling is affected by the normal laws of physics. If a lurcher were to pull on something that weighs more than them, they'd be pulled towards it. If they pulled on something lighter, the object would move. If both were of similar weight, they'd both move. A lurcher can pull on items that contain metal by pressing $(k:key.cosmere.allomancy.pull)$()" + }, + { + "type": "relations", + "entries": [ + "cosmere:allomancy/allomantic_steel", + "cosmere:allomancy/allomantic_iron", + "cosmere:allomancy/allomantic_pewter", + "cosmere:allomancy/allomantic_tin" + ], + "title": "The physical metals:" + } + ], + "priority": false, + "read_by_default": false, + "secret": false, + "sortnum": 0 +} \ No newline at end of file diff --git a/src/datagen/generated/allomancy/assets/cosmere/patchouli_books/guide/en_us/entries/allomancy/allomantic_nicrosil.json b/src/datagen/generated/allomancy/assets/cosmere/patchouli_books/guide/en_us/entries/allomancy/allomantic_nicrosil.json new file mode 100644 index 000000000..62e6968ee --- /dev/null +++ b/src/datagen/generated/allomancy/assets/cosmere/patchouli_books/guide/en_us/entries/allomancy/allomantic_nicrosil.json @@ -0,0 +1,25 @@ +{ + "category": "cosmere:allomancy", + "icon": "cosmere:nicrosil_nugget", + "name": "Allomantic Nicrosil", + "pages": [ + { + "type": "text", + "text": "A misting who burns $(thing)nicrosil$() is known as a \"$(thing)Nicroburst$()\".$(br)A nicroburst can empower the allomancy of another with physical contact, as if the target were burning duralumin themselves. This can be used to throw other allomancers off, such as giving a coinshot a particularly strong steelpush when they don't expect it. Nicrosil is the external pushing metal and one of four enhancement metals (alongside Aluminum, Chromium, and Duralumin)" + }, + { + "type": "relations", + "entries": [ + "cosmere:allomancy/allomantic_aluminum", + "cosmere:allomancy/allomantic_duralumin", + "cosmere:allomancy/allomantic_chromium", + "cosmere:allomancy/allomantic_nicrosil" + ], + "title": "The enhancement metals:" + } + ], + "priority": false, + "read_by_default": false, + "secret": false, + "sortnum": 11 +} \ No newline at end of file diff --git a/src/datagen/generated/allomancy/assets/cosmere/patchouli_books/guide/en_us/entries/allomancy/allomantic_pewter.json b/src/datagen/generated/allomancy/assets/cosmere/patchouli_books/guide/en_us/entries/allomancy/allomantic_pewter.json new file mode 100644 index 000000000..ba6c7aefc --- /dev/null +++ b/src/datagen/generated/allomancy/assets/cosmere/patchouli_books/guide/en_us/entries/allomancy/allomantic_pewter.json @@ -0,0 +1,25 @@ +{ + "category": "cosmere:allomancy", + "icon": "cosmere:pewter_nugget", + "name": "Allomantic Pewter", + "pages": [ + { + "type": "text", + "text": "A misting who burns$(thing)pewter$() is known as a \"$(thing)Thug$()\". While burning pewter, a pewterarm becomes faster, considerably stronger, and more resistant to punishment. However, they need to be careful because if they run out of pewter to burn, they will immediately feel all the pain they were shrugging off. This can mean instant death in extreme cases. Pewter is the internal pushing metal and one of the four physical metals (alongside Tin, Iron, and Steel) [Do note that there isn't currently a way to tell how much damage you take when you stop burning pewter, be cautious.]" + }, + { + "type": "relations", + "entries": [ + "cosmere:allomancy/allomantic_steel", + "cosmere:allomancy/allomantic_iron", + "cosmere:allomancy/allomantic_pewter", + "cosmere:allomancy/allomantic_tin" + ], + "title": "The physical metals:" + } + ], + "priority": false, + "read_by_default": false, + "secret": false, + "sortnum": 3 +} \ No newline at end of file diff --git a/src/datagen/generated/allomancy/assets/cosmere/patchouli_books/guide/en_us/entries/allomancy/allomantic_steel.json b/src/datagen/generated/allomancy/assets/cosmere/patchouli_books/guide/en_us/entries/allomancy/allomantic_steel.json new file mode 100644 index 000000000..a090f5377 --- /dev/null +++ b/src/datagen/generated/allomancy/assets/cosmere/patchouli_books/guide/en_us/entries/allomancy/allomantic_steel.json @@ -0,0 +1,35 @@ +{ + "category": "cosmere:allomancy", + "icon": "cosmere:steel_nugget", + "name": "Allomantic Steel", + "pages": [ + { + "type": "text", + "text": "A misting who burns $(thing)steel$() is known as a \"$(thing)Coinshot$()\". Steel is an Allomantic metal and an alloy of Iron. When burnt, Steel allows the user to push against nearby metal objects. Steelpushing is affected by the laws of physics. If a coinshot were to push on something that weighs more than them, they'd be pushed away. " + }, + { + "type": "text", + "text": "If they pushed on something lighter, the object would move. Clever use of Steelpushing can lead to a pseudo flight through use of small metal objects, such as coins or nuggets. Many coinshots generally carry around a pouch of coins, for ease of access. A Coinshot can access their abilities by pressing $(k:key.cosmere.allomancy.push)$() Steel is the external pushing metal and one of four physical metals (alongside Iron, Pewter, and Tin)" + }, + { + "type": "relations", + "entries": [ + "cosmere:allomancy/coin_pouch" + ] + }, + { + "type": "relations", + "entries": [ + "cosmere:allomancy/allomantic_steel", + "cosmere:allomancy/allomantic_iron", + "cosmere:allomancy/allomantic_pewter", + "cosmere:allomancy/allomantic_tin" + ], + "title": "The physical metals:" + } + ], + "priority": false, + "read_by_default": false, + "secret": false, + "sortnum": 1 +} \ No newline at end of file diff --git a/src/datagen/generated/allomancy/assets/cosmere/patchouli_books/guide/en_us/entries/allomancy/allomantic_tin.json b/src/datagen/generated/allomancy/assets/cosmere/patchouli_books/guide/en_us/entries/allomancy/allomantic_tin.json new file mode 100644 index 000000000..24247dc90 --- /dev/null +++ b/src/datagen/generated/allomancy/assets/cosmere/patchouli_books/guide/en_us/entries/allomancy/allomantic_tin.json @@ -0,0 +1,25 @@ +{ + "category": "cosmere:allomancy", + "icon": "cosmere:tin_nugget", + "name": "Allomantic Tin", + "pages": [ + { + "type": "text", + "text": "A misting who burns $(thing)tin$() is known as a \"$(thing)Tineye$()\". In allomancy, Tin heightens the senses to super human levels. It allows you to see clearly in the dark, and the mists. There might be more here to discover... Tin is the internal pulling metal and one of four physical metals (alongside Iron, Pewter, and Steel)" + }, + { + "type": "relations", + "entries": [ + "cosmere:allomancy/allomantic_steel", + "cosmere:allomancy/allomantic_iron", + "cosmere:allomancy/allomantic_pewter", + "cosmere:allomancy/allomantic_tin" + ], + "title": "The physical metals:" + } + ], + "priority": false, + "read_by_default": false, + "secret": false, + "sortnum": 2 +} \ No newline at end of file diff --git a/src/datagen/generated/allomancy/assets/cosmere/patchouli_books/guide/en_us/entries/allomancy/allomantic_zinc.json b/src/datagen/generated/allomancy/assets/cosmere/patchouli_books/guide/en_us/entries/allomancy/allomantic_zinc.json new file mode 100644 index 000000000..23fd4ef2b --- /dev/null +++ b/src/datagen/generated/allomancy/assets/cosmere/patchouli_books/guide/en_us/entries/allomancy/allomantic_zinc.json @@ -0,0 +1,29 @@ +{ + "category": "cosmere:allomancy", + "icon": "cosmere:zinc_nugget", + "name": "Allomantic Zinc", + "pages": [ + { + "type": "text", + "text": "A misting who burns $(thing)zinc$() is known as a \"$(thing)Rioter$()\". A creature being manipulated by a rioter will act far more aggressive, turning even the most pacified of animals into bloodthirsty beasts. A rioter can use their powers by pressing either $(k:key.cosmere.allomacy.riot)$() or $(k:key.cosmere.manifestation.use.active)$()." + }, + { + "type": "text", + "text": "Rioters have reported recently that their allomancy has been acting different, resulting in creatures that seem confused. (This feature is bugged.) Zinc is the external pulling metal and one of four mental metals (alongside Brass, Copper, and Bronze)" + }, + { + "type": "relations", + "entries": [ + "cosmere:allomancy/allomantic_zinc", + "cosmere:allomancy/allomantic_brass", + "cosmere:allomancy/allomantic_copper", + "cosmere:allomancy/allomantic_bronze" + ], + "title": "The mental metals:" + } + ], + "priority": false, + "read_by_default": false, + "secret": false, + "sortnum": 4 +} \ No newline at end of file diff --git a/src/datagen/generated/allomancy/assets/cosmere/patchouli_books/guide/en_us/entries/allomancy/coin_pouch.json b/src/datagen/generated/allomancy/assets/cosmere/patchouli_books/guide/en_us/entries/allomancy/coin_pouch.json new file mode 100644 index 000000000..c4661fc34 --- /dev/null +++ b/src/datagen/generated/allomancy/assets/cosmere/patchouli_books/guide/en_us/entries/allomancy/coin_pouch.json @@ -0,0 +1,26 @@ +{ + "category": "cosmere:allomancy", + "icon": "allomancy:coin_pouch", + "name": "Coin Pouch", + "pages": [ + { + "type": "text", + "text": "The coin pouch is the most common way of ammo for your steelpushing abilities. Crouch ($(k:key.sneak)$()) and use ($(k:key.use)$()) to add metal nuggets to it. Don't crouch if you want to shoot ammo with steelpushes. Hold the steelpush keybind ($(k:key.cosmere.allomancy.push)$()) and then tap ($(k:key.use)$()) to shoot. If it gets stuck in a block, you will automatically get pushed away.If you hit a mob and keep pushing both you and the mob will be pushed away relative to your respective weights.", + "title": "Coin Pouch" + }, + { + "type": "patchouli:crafting", + "recipe": "allomancy:coin_pouch" + }, + { + "type": "relations", + "entries": [ + "cosmere:allomancy/allomantic_steel" + ] + } + ], + "priority": true, + "read_by_default": false, + "secret": false, + "sortnum": 0 +} \ No newline at end of file diff --git a/src/datagen/generated/allomancy/data/allomancy/advancements/recipes/tools/coin_pouch.json b/src/datagen/generated/allomancy/data/allomancy/advancements/recipes/tools/coin_pouch.json new file mode 100644 index 000000000..85ebda202 --- /dev/null +++ b/src/datagen/generated/allomancy/data/allomancy/advancements/recipes/tools/coin_pouch.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "tag": "forge:leather" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "allomancy:coin_pouch" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "allomancy:coin_pouch" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/allomancy/data/allomancy/advancements/recipes/tools/metal_vial.json b/src/datagen/generated/allomancy/data/allomancy/advancements/recipes/tools/metal_vial.json new file mode 100644 index 000000000..292cb918f --- /dev/null +++ b/src/datagen/generated/allomancy/data/allomancy/advancements/recipes/tools/metal_vial.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "items": [ + "minecraft:glass" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "allomancy:metal_vial" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "allomancy:metal_vial" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/allomancy/data/allomancy/damage_type/pewter_delayed_damage.json b/src/datagen/generated/allomancy/data/allomancy/damage_type/pewter_delayed_damage.json new file mode 100644 index 000000000..cc326e172 --- /dev/null +++ b/src/datagen/generated/allomancy/data/allomancy/damage_type/pewter_delayed_damage.json @@ -0,0 +1,5 @@ +{ + "exhaustion": 0.1, + "message_id": "allomancy.pewter_delayed_damage", + "scaling": "when_caused_by_living_non_player" +} \ No newline at end of file diff --git a/src/datagen/generated/allomancy/data/allomancy/recipes/coin_pouch.json b/src/datagen/generated/allomancy/data/allomancy/recipes/coin_pouch.json new file mode 100644 index 000000000..86f44e062 --- /dev/null +++ b/src/datagen/generated/allomancy/data/allomancy/recipes/coin_pouch.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "equipment", + "ingredients": [ + { + "tag": "forge:leather" + }, + { + "tag": "forge:string" + } + ], + "result": { + "item": "allomancy:coin_pouch" + } +} \ No newline at end of file diff --git a/src/datagen/generated/allomancy/data/allomancy/recipes/metal_vial.json b/src/datagen/generated/allomancy/data/allomancy/recipes/metal_vial.json new file mode 100644 index 000000000..231883bef --- /dev/null +++ b/src/datagen/generated/allomancy/data/allomancy/recipes/metal_vial.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "X": { + "item": "minecraft:iron_nugget" + }, + "Y": { + "item": "minecraft:glass" + } + }, + "pattern": [ + "X", + "Y" + ], + "result": { + "item": "allomancy:metal_vial" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/allomancy/data/allomancy/recipes/vial_mixing.json b/src/datagen/generated/allomancy/data/allomancy/recipes/vial_mixing.json new file mode 100644 index 000000000..a2c956872 --- /dev/null +++ b/src/datagen/generated/allomancy/data/allomancy/recipes/vial_mixing.json @@ -0,0 +1,4 @@ +{ + "type": "allomancy:crafting_vial_mix", + "category": "misc" +} \ No newline at end of file diff --git a/src/datagen/generated/allomancy/data/curios/tags/items/head.json b/src/datagen/generated/allomancy/data/curios/tags/items/head.json new file mode 100644 index 000000000..a26752806 --- /dev/null +++ b/src/datagen/generated/allomancy/data/curios/tags/items/head.json @@ -0,0 +1,5 @@ +{ + "values": [ + "allomancy:mistcloak" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/aondor/.cache/457b0b1d8ad1d3ce474cf329ea36fc02f640a6c9 b/src/datagen/generated/aondor/.cache/457b0b1d8ad1d3ce474cf329ea36fc02f640a6c9 new file mode 100644 index 000000000..c6b72c237 --- /dev/null +++ b/src/datagen/generated/aondor/.cache/457b0b1d8ad1d3ce474cf329ea36fc02f640a6c9 @@ -0,0 +1 @@ +// 1.20.1 2024-10-09T13:22:13.4267484 Item Models: aondor diff --git a/src/datagen/generated/aondor/.cache/59eb3dbb5f86130e09b3c62d89b9525ee01cf52d b/src/datagen/generated/aondor/.cache/59eb3dbb5f86130e09b3c62d89b9525ee01cf52d new file mode 100644 index 000000000..010697747 --- /dev/null +++ b/src/datagen/generated/aondor/.cache/59eb3dbb5f86130e09b3c62d89b9525ee01cf52d @@ -0,0 +1 @@ +// 1.20.1 2024-10-09T13:22:13.4257414 Loot Tables diff --git a/src/datagen/generated/aondor/.cache/68a8b808418fcd4c550b2bbef53fb17032dfe059 b/src/datagen/generated/aondor/.cache/68a8b808418fcd4c550b2bbef53fb17032dfe059 new file mode 100644 index 000000000..eeb2cd8ba --- /dev/null +++ b/src/datagen/generated/aondor/.cache/68a8b808418fcd4c550b2bbef53fb17032dfe059 @@ -0,0 +1,3 @@ +// 1.20.1 2024-10-09T13:38:50.3271199 AonDor PatchouliGeneration +766c1d54106cb060fecd5d74550b07314ed1a23e assets/cosmere/patchouli_books/guide/en_us/categories/aondor.json +7706da94258f0159ffabc7f507b83c99894a54df assets/cosmere/patchouli_books/guide/en_us/entries/aondor/aondor_basics.json diff --git a/src/datagen/generated/aondor/.cache/9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e b/src/datagen/generated/aondor/.cache/9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e new file mode 100644 index 000000000..06dfdc2bc --- /dev/null +++ b/src/datagen/generated/aondor/.cache/9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e @@ -0,0 +1 @@ +// 1.20.1 2024-10-09T13:22:13.4267484 Recipes diff --git a/src/datagen/generated/aondor/.cache/a2da15235c39ab67a641752ec6d98b2ae4fd48a5 b/src/datagen/generated/aondor/.cache/a2da15235c39ab67a641752ec6d98b2ae4fd48a5 new file mode 100644 index 000000000..cee2fab99 --- /dev/null +++ b/src/datagen/generated/aondor/.cache/a2da15235c39ab67a641752ec6d98b2ae4fd48a5 @@ -0,0 +1 @@ +// 1.20.1 2024-10-09T13:22:13.427738 Tags: aondor diff --git a/src/datagen/generated/aondor/.cache/c622617f6fabf890a00b9275cd5f643584a8a2c8 b/src/datagen/generated/aondor/.cache/c622617f6fabf890a00b9275cd5f643584a8a2c8 new file mode 100644 index 000000000..790392e33 --- /dev/null +++ b/src/datagen/generated/aondor/.cache/c622617f6fabf890a00b9275cd5f643584a8a2c8 @@ -0,0 +1,2 @@ +// 1.20.1 2024-10-10T14:25:43.8945106 Languages: en_us +dd68b8bf52dfd9413d2c1b710c9000e2eb97a0cb assets/aondor/lang/en_us.json diff --git a/src/datagen/generated/aondor/assets/aondor/lang/en_us.json b/src/datagen/generated/aondor/assets/aondor/lang/en_us.json new file mode 100644 index 000000000..9c818210e --- /dev/null +++ b/src/datagen/generated/aondor/assets/aondor/lang/en_us.json @@ -0,0 +1,3 @@ +{ + "tabs.aondor.items": "Aon Dor" +} \ No newline at end of file diff --git a/src/datagen/generated/aondor/assets/cosmere/patchouli_books/guide/en_us/categories/aondor.json b/src/datagen/generated/aondor/assets/cosmere/patchouli_books/guide/en_us/categories/aondor.json new file mode 100644 index 000000000..859fcd76a --- /dev/null +++ b/src/datagen/generated/aondor/assets/cosmere/patchouli_books/guide/en_us/categories/aondor.json @@ -0,0 +1,7 @@ +{ + "description": "AonDor description that says some stuff.", + "icon": "minecraft:paper", + "name": "Aondor", + "secret": true, + "sortnum": 99 +} \ No newline at end of file diff --git a/src/datagen/generated/aondor/assets/cosmere/patchouli_books/guide/en_us/entries/aondor/aondor_basics.json b/src/datagen/generated/aondor/assets/cosmere/patchouli_books/guide/en_us/entries/aondor/aondor_basics.json new file mode 100644 index 000000000..d32c7e58f --- /dev/null +++ b/src/datagen/generated/aondor/assets/cosmere/patchouli_books/guide/en_us/entries/aondor/aondor_basics.json @@ -0,0 +1,16 @@ +{ + "category": "cosmere:aondor", + "icon": "minecraft:paper", + "name": "AonDor (For Dummies)", + "pages": [ + { + "type": "text", + "text": "In this journal, I shall explain all I have discovered about AonDor. $(br)Firstly, some terminology:", + "title": "Terminology" + } + ], + "priority": true, + "read_by_default": false, + "secret": false, + "sortnum": 0 +} \ No newline at end of file diff --git a/src/datagen/generated/aviar/.cache/3e2d1f5e57812959258e594888869e91a5496a56 b/src/datagen/generated/aviar/.cache/3e2d1f5e57812959258e594888869e91a5496a56 new file mode 100644 index 000000000..05975d0d8 --- /dev/null +++ b/src/datagen/generated/aviar/.cache/3e2d1f5e57812959258e594888869e91a5496a56 @@ -0,0 +1,3 @@ +// 1.20.1 2024-10-09T13:22:13.3996172 Item Models: aviar +63ec6c618a3a23eab4cab9c52d7d3250de9b516e assets/aviar/models/item/aviar_spawn_egg.json +bef8eebacca0f5ca942f0b895dbff8e7abd6278a assets/aviar/models/item/fruit_of_patji.json diff --git a/src/datagen/generated/aviar/.cache/59eb3dbb5f86130e09b3c62d89b9525ee01cf52d b/src/datagen/generated/aviar/.cache/59eb3dbb5f86130e09b3c62d89b9525ee01cf52d new file mode 100644 index 000000000..41aac733f --- /dev/null +++ b/src/datagen/generated/aviar/.cache/59eb3dbb5f86130e09b3c62d89b9525ee01cf52d @@ -0,0 +1 @@ +// 1.20.1 2024-10-09T13:22:13.4006173 Loot Tables diff --git a/src/datagen/generated/aviar/.cache/9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e b/src/datagen/generated/aviar/.cache/9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e new file mode 100644 index 000000000..15cf3511e --- /dev/null +++ b/src/datagen/generated/aviar/.cache/9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e @@ -0,0 +1 @@ +// 1.20.1 2024-10-09T13:22:13.4006173 Recipes diff --git a/src/datagen/generated/aviar/.cache/c622617f6fabf890a00b9275cd5f643584a8a2c8 b/src/datagen/generated/aviar/.cache/c622617f6fabf890a00b9275cd5f643584a8a2c8 new file mode 100644 index 000000000..7e811ba13 --- /dev/null +++ b/src/datagen/generated/aviar/.cache/c622617f6fabf890a00b9275cd5f643584a8a2c8 @@ -0,0 +1,2 @@ +// 1.20.1 2025-11-27T20:18:46.414958 Languages: en_us +6aeef5337e21f4f07014d64d725446b74fa896af assets/aviar/lang/en_us.json diff --git a/src/datagen/generated/aviar/.cache/db13d68236ce24768410ad17bbad099c91fec9a8 b/src/datagen/generated/aviar/.cache/db13d68236ce24768410ad17bbad099c91fec9a8 new file mode 100644 index 000000000..b6b97ccd4 --- /dev/null +++ b/src/datagen/generated/aviar/.cache/db13d68236ce24768410ad17bbad099c91fec9a8 @@ -0,0 +1,5 @@ +// 1.20.1 2024-10-10T10:36:24.523161182 Aviar PatchouliGeneration +c09484516f71f0130cde6ceccdd3dba854516f71 assets/cosmere/patchouli_books/guide/en_us/categories/aviar.json +a8625106c3e042044372e2b24ca26282d1daf5ec assets/cosmere/patchouli_books/guide/en_us/entries/aviar/aviar_basics.json +5236116a4c32ceb6d31479ea7e81562ded0ef30e assets/cosmere/patchouli_books/guide/en_us/entries/aviar/breed_abilities.json +b0697fe32319e4ad8fa30d85c6a23fdd03c9f728 assets/cosmere/patchouli_books/guide/en_us/entries/aviar/how_to_get_aviar.json diff --git a/src/datagen/generated/aviar/.cache/e932775582821fe5f079bfff77f1b9c34a22bca1 b/src/datagen/generated/aviar/.cache/e932775582821fe5f079bfff77f1b9c34a22bca1 new file mode 100644 index 000000000..efcefb84c --- /dev/null +++ b/src/datagen/generated/aviar/.cache/e932775582821fe5f079bfff77f1b9c34a22bca1 @@ -0,0 +1 @@ +// 1.20.1 2024-10-09T13:22:13.4006173 Tags: aviar diff --git a/src/datagen/generated/aviar/assets/aviar/lang/en_us.json b/src/datagen/generated/aviar/assets/aviar/lang/en_us.json new file mode 100644 index 000000000..f238b606c --- /dev/null +++ b/src/datagen/generated/aviar/assets/aviar/lang/en_us.json @@ -0,0 +1,7 @@ +{ + "attribute.cosmere.hostile_life_sense": "Hostile Life Sense", + "entity.aviar.aviar": "Aviar", + "item.aviar.aviar_spawn_egg": "Aviar Spawn Egg", + "item.aviar.fruit_of_patji": "Fruit Of Patji", + "tabs.aviar.items": "Aviar" +} \ No newline at end of file diff --git a/src/datagen/generated/aviar/assets/aviar/models/item/aviar_spawn_egg.json b/src/datagen/generated/aviar/assets/aviar/models/item/aviar_spawn_egg.json new file mode 100644 index 000000000..d1aaa9d6e --- /dev/null +++ b/src/datagen/generated/aviar/assets/aviar/models/item/aviar_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} \ No newline at end of file diff --git a/src/datagen/generated/aviar/assets/aviar/models/item/fruit_of_patji.json b/src/datagen/generated/aviar/assets/aviar/models/item/fruit_of_patji.json new file mode 100644 index 000000000..4700fcbb9 --- /dev/null +++ b/src/datagen/generated/aviar/assets/aviar/models/item/fruit_of_patji.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aviar:item/fruit_of_patji" + } +} \ No newline at end of file diff --git a/src/datagen/generated/aviar/assets/cosmere/patchouli_books/guide/en_us/categories/aviar.json b/src/datagen/generated/aviar/assets/cosmere/patchouli_books/guide/en_us/categories/aviar.json new file mode 100644 index 000000000..84f9ddd73 --- /dev/null +++ b/src/datagen/generated/aviar/assets/cosmere/patchouli_books/guide/en_us/categories/aviar.json @@ -0,0 +1,7 @@ +{ + "description": "Of Birds and Bonds.$(br)In this section, I shall explain all I have discovered about Aviar. While not typically found on this planet, world hoppers have been known to travel with these as companions, bringing knowledge of these creatures with them.", + "icon": "aviar:fruit_of_patji", + "name": "Aviar", + "secret": false, + "sortnum": 10 +} \ No newline at end of file diff --git a/src/datagen/generated/aviar/assets/cosmere/patchouli_books/guide/en_us/entries/aviar/aviar_basics.json b/src/datagen/generated/aviar/assets/cosmere/patchouli_books/guide/en_us/entries/aviar/aviar_basics.json new file mode 100644 index 000000000..8a5f9cc2d --- /dev/null +++ b/src/datagen/generated/aviar/assets/cosmere/patchouli_books/guide/en_us/entries/aviar/aviar_basics.json @@ -0,0 +1,24 @@ +{ + "category": "cosmere:aviar", + "icon": "minecraft:book", + "name": "Aviar (Terminology)", + "pages": [ + { + "type": "text", + "text": "Some terminology:$(li) Aviar: A bird who has bonded a symbiote native to the planet 'First of the Sun', in the Drominad system..$(li) Fruit of Patji: A fruit from off world. Contains the symbiote that grants birds their abilities, turning them into Aviar.$(li) Aviar Bond: A bond between an Aviar and a human. This bond allows the human to gain access to the Aviar's abilities.", + "title": "Terminology" + }, + { + "type": "entity", + "default_rotation": -45.0, + "entity": "aviar:aviar{Variant:0}", + "offset": 0.0, + "rotate": false, + "scale": 1.0 + } + ], + "priority": true, + "read_by_default": false, + "secret": false, + "sortnum": 1 +} \ No newline at end of file diff --git a/src/datagen/generated/aviar/assets/cosmere/patchouli_books/guide/en_us/entries/aviar/breed_abilities.json b/src/datagen/generated/aviar/assets/cosmere/patchouli_books/guide/en_us/entries/aviar/breed_abilities.json new file mode 100644 index 000000000..59cda0c77 --- /dev/null +++ b/src/datagen/generated/aviar/assets/cosmere/patchouli_books/guide/en_us/entries/aviar/breed_abilities.json @@ -0,0 +1,60 @@ +{ + "category": "cosmere:aviar", + "icon": "minecraft:writable_book", + "name": "Breed Abilities", + "pages": [ + { + "type": "text", + "text": "Strangely, the parrots around here appear to be compatible with the symbiote found within the fruit of Patji. $(br)$(br)There are only a few known breeds nearby, but it seems that each different breed manifests a different ability." + }, + { + "type": "entity", + "default_rotation": -45.0, + "entity": "aviar:aviar{Variant:0}", + "offset": 0.0, + "rotate": false, + "scale": 1.0, + "text": "Grants Cognitive Concealment, hiding you from magic detection such as alllomantic bronze and white sand." + }, + { + "type": "entity", + "default_rotation": -45.0, + "entity": "aviar:aviar{Variant:1}", + "offset": 0.0, + "rotate": false, + "scale": 1.0, + "text": "Grants increased fortune and looting (but not chest loot luck)" + }, + { + "type": "entity", + "default_rotation": -45.0, + "entity": "aviar:aviar{Variant:2}", + "offset": 0.0, + "rotate": false, + "scale": 1.0, + "text": "Grants doubled experience gain." + }, + { + "type": "entity", + "default_rotation": -45.0, + "entity": "aviar:aviar{Variant:3}", + "offset": 0.0, + "rotate": false, + "scale": 1.0, + "text": "Decreases incoming damage." + }, + { + "type": "entity", + "default_rotation": -45.0, + "entity": "aviar:aviar{Variant:4}", + "offset": 0.0, + "rotate": false, + "scale": 1.0, + "text": "Allows you to detect when mobs are targeting you. [currently doesn't work]" + } + ], + "priority": false, + "read_by_default": false, + "secret": false, + "sortnum": 3 +} \ No newline at end of file diff --git a/src/datagen/generated/aviar/assets/cosmere/patchouli_books/guide/en_us/entries/aviar/how_to_get_aviar.json b/src/datagen/generated/aviar/assets/cosmere/patchouli_books/guide/en_us/entries/aviar/how_to_get_aviar.json new file mode 100644 index 000000000..708b945e4 --- /dev/null +++ b/src/datagen/generated/aviar/assets/cosmere/patchouli_books/guide/en_us/entries/aviar/how_to_get_aviar.json @@ -0,0 +1,27 @@ +{ + "category": "cosmere:aviar", + "icon": "aviar:fruit_of_patji", + "name": "Fruit Of Patji", + "pages": [ + { + "type": "spotlight", + "item": "aviar:fruit_of_patji", + "link_recipe": false, + "text": "A very rare fruit, native to the planet 'First of the Sun', in the Drominad system. It is said that the fruit contains a symbiote that can bond with a human, granting them their companions wondrous abilities.$(br)As this is not that planet, they're very hard to come by, with only the occaisional world hopper bringing them to this world.$(br)It is worth noting that the Fruit of Patji will not effect already tame parrots, rather you have to feed it to a parrot then tame the creature." + }, + { + "type": "entity", + "default_rotation": -45.0, + "entity": "minecraft:wandering_trader", + "name": "Wandering Trader", + "offset": 0.0, + "rotate": false, + "scale": 1.0, + "text": "For the cost of some emeralds (and a nether star), a wandering trader may be convinced to part with the rare fruit of Patji." + } + ], + "priority": false, + "read_by_default": false, + "secret": false, + "sortnum": 2 +} \ No newline at end of file diff --git a/src/datagen/generated/awakening/.cache/0941a75e8dd932c4ad270b26681f58beacb09c53 b/src/datagen/generated/awakening/.cache/0941a75e8dd932c4ad270b26681f58beacb09c53 new file mode 100644 index 000000000..2ea3ebfec --- /dev/null +++ b/src/datagen/generated/awakening/.cache/0941a75e8dd932c4ad270b26681f58beacb09c53 @@ -0,0 +1 @@ +// 1.20.1 2024-10-09T13:22:13.4698811 Item Models: awakening diff --git a/src/datagen/generated/awakening/.cache/59eb3dbb5f86130e09b3c62d89b9525ee01cf52d b/src/datagen/generated/awakening/.cache/59eb3dbb5f86130e09b3c62d89b9525ee01cf52d new file mode 100644 index 000000000..8fb0b4fa0 --- /dev/null +++ b/src/datagen/generated/awakening/.cache/59eb3dbb5f86130e09b3c62d89b9525ee01cf52d @@ -0,0 +1 @@ +// 1.20.1 2024-10-09T13:22:13.4688806 Loot Tables diff --git a/src/datagen/generated/awakening/.cache/8d71f8cd3fe3fe64399f7174312823c4481b46dc b/src/datagen/generated/awakening/.cache/8d71f8cd3fe3fe64399f7174312823c4481b46dc new file mode 100644 index 000000000..9943ed859 --- /dev/null +++ b/src/datagen/generated/awakening/.cache/8d71f8cd3fe3fe64399f7174312823c4481b46dc @@ -0,0 +1,3 @@ +// 1.20.1 2024-10-09T13:38:50.3513975 Awakening PatchouliGeneration +d6f9e4d31e4cbdc43edcb5f27fd1351093625cca assets/cosmere/patchouli_books/guide/en_us/categories/awakening.json +0e1e550f66bd2282becb58b06d85e231622899d6 assets/cosmere/patchouli_books/guide/en_us/entries/awakening/awakening_basics.json diff --git a/src/datagen/generated/awakening/.cache/9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e b/src/datagen/generated/awakening/.cache/9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e new file mode 100644 index 000000000..5c1897dbd --- /dev/null +++ b/src/datagen/generated/awakening/.cache/9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e @@ -0,0 +1 @@ +// 1.20.1 2024-10-09T13:22:13.4688806 Recipes diff --git a/src/datagen/generated/awakening/.cache/c622617f6fabf890a00b9275cd5f643584a8a2c8 b/src/datagen/generated/awakening/.cache/c622617f6fabf890a00b9275cd5f643584a8a2c8 new file mode 100644 index 000000000..b108f5e6d --- /dev/null +++ b/src/datagen/generated/awakening/.cache/c622617f6fabf890a00b9275cd5f643584a8a2c8 @@ -0,0 +1,2 @@ +// 1.20.1 2024-10-10T14:18:48.147055 Languages: en_us +a69a5aef23ecaf721c59e770da0fe0216deb8a35 assets/awakening/lang/en_us.json diff --git a/src/datagen/generated/awakening/.cache/f773dd59223378bbd8a7f8ae49aec06c9566c4e2 b/src/datagen/generated/awakening/.cache/f773dd59223378bbd8a7f8ae49aec06c9566c4e2 new file mode 100644 index 000000000..fa352f5f4 --- /dev/null +++ b/src/datagen/generated/awakening/.cache/f773dd59223378bbd8a7f8ae49aec06c9566c4e2 @@ -0,0 +1 @@ +// 1.20.1 2024-10-09T13:22:13.4678797 Tags: awakening diff --git a/src/datagen/generated/awakening/assets/awakening/lang/en_us.json b/src/datagen/generated/awakening/assets/awakening/lang/en_us.json new file mode 100644 index 000000000..6122da50b --- /dev/null +++ b/src/datagen/generated/awakening/assets/awakening/lang/en_us.json @@ -0,0 +1,3 @@ +{ + "tabs.awakening.items": "Awakening" +} \ No newline at end of file diff --git a/src/datagen/generated/awakening/assets/cosmere/patchouli_books/guide/en_us/categories/awakening.json b/src/datagen/generated/awakening/assets/cosmere/patchouli_books/guide/en_us/categories/awakening.json new file mode 100644 index 000000000..f78e08cc5 --- /dev/null +++ b/src/datagen/generated/awakening/assets/cosmere/patchouli_books/guide/en_us/categories/awakening.json @@ -0,0 +1,7 @@ +{ + "description": "Awakening description that says some stuff.", + "icon": "minecraft:paper", + "name": "Awakening", + "secret": true, + "sortnum": 99 +} \ No newline at end of file diff --git a/src/datagen/generated/awakening/assets/cosmere/patchouli_books/guide/en_us/entries/awakening/awakening_basics.json b/src/datagen/generated/awakening/assets/cosmere/patchouli_books/guide/en_us/entries/awakening/awakening_basics.json new file mode 100644 index 000000000..5c044b156 --- /dev/null +++ b/src/datagen/generated/awakening/assets/cosmere/patchouli_books/guide/en_us/entries/awakening/awakening_basics.json @@ -0,0 +1,16 @@ +{ + "category": "cosmere:awakening", + "icon": "minecraft:paper", + "name": "Awakening (For Dummies)", + "pages": [ + { + "type": "text", + "text": "In this journal, I shall explain all I have discovered about Awakening. $(br)Firstly, some terminology:", + "title": "Terminology" + } + ], + "priority": true, + "read_by_default": false, + "secret": false, + "sortnum": 0 +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/.cache/1a0f94c9f1c196e533e9fd87835b73e7495ceb3e b/src/datagen/generated/cosmere/.cache/1a0f94c9f1c196e533e9fd87835b73e7495ceb3e new file mode 100644 index 000000000..2d21247fb --- /dev/null +++ b/src/datagen/generated/cosmere/.cache/1a0f94c9f1c196e533e9fd87835b73e7495ceb3e @@ -0,0 +1,157 @@ +// 1.20.1 2025-11-12T21:49:11.1720275 Tags: cosmere +7e6f8b5d96792bb9046c5c1d332e4ba04dcade48 data/cosmere/tags/blocks/contains_metal.json +af8261c6c6c4f45348129424d153185fe0b65a81 data/cosmere/tags/entity_types/contains_metal.json +d0c886fa06555d83e6eb011a2ee98463827788e1 data/cosmere/tags/items/contains_metal.json +b020f6cdcd2d955793278b2f89a178a1d31e599a data/cosmere/tags/worldgen/biome/spawn_ores.json +2535fa6b2630ad09c3a98c8df7a89b6de3276819 data/forge/tags/blocks/ores/aluminum.json +8a55b8e8e7325d8a829173ccfc5afe9c8962ffcc data/forge/tags/blocks/ores/cadmium.json +9404f97aea7bc2f029fab25dda2ef4f9d750d890 data/forge/tags/blocks/ores/chromium.json +89a75d3616397422cc68cbfc3d30714afed546ec data/forge/tags/blocks/ores/lead.json +7ec4d04de09d3b30dd11f0471c61de58a7d4f0d5 data/forge/tags/blocks/ores/nickel.json +bf15df3859cfb24abdf9c50475ea436bb9527b90 data/forge/tags/blocks/ores/silver.json +f6158edb21c3a84db0cab4708e1f0b053b84611c data/forge/tags/blocks/ores/tin.json +a27c0172d736de07c8d51c7c2a4908565de80834 data/forge/tags/blocks/ores/zinc.json +5ac052c5e6c3d60c719087891e3f2fa00220c040 data/forge/tags/blocks/storage_blocks.json +9079d45393bba22e2b2061d1f6eb588c46ee7346 data/forge/tags/blocks/storage_blocks/aluminum.json +8fe1f17a4eb16ada9285bedf30fb598edf113e5f data/forge/tags/blocks/storage_blocks/atium.json +1eccb19f0c1fe5f19a6bdeaa14037aa8e7eeb959 data/forge/tags/blocks/storage_blocks/bendalloy.json +8279f41e3a3a239b29294a45ca32abc13cce2f7e data/forge/tags/blocks/storage_blocks/brass.json +cb95af58ea489974ff1d66f2786c5ddfda52c789 data/forge/tags/blocks/storage_blocks/bronze.json +3d56499024b4a14434474e46d8f2b69192d46ee2 data/forge/tags/blocks/storage_blocks/cadmium.json +255ac6518c4487670978a4328e9863a36fee50d6 data/forge/tags/blocks/storage_blocks/chromium.json +b41a04c1f7f5a9ee2c8de45c3ebdc092c1b5b274 data/forge/tags/blocks/storage_blocks/duralumin.json +48a29eed7bc75b67c2c7545457c0e00f47268c5d data/forge/tags/blocks/storage_blocks/electrum.json +90317483f1fa9a4fcb4e76bef622ea503b7f44f8 data/forge/tags/blocks/storage_blocks/harmonium.json +2aed30257eb22830f5a0aefcb3662b0b4a4c5ebb data/forge/tags/blocks/storage_blocks/lead.json +9cb594fa53db1efedb5667a4961aee563bb5a46f data/forge/tags/blocks/storage_blocks/lerasatium.json +3a1b70a51ca5c553f6c8f400ba7c29839ed61ecc data/forge/tags/blocks/storage_blocks/lerasium.json +9c6de276765b8ec142b3aca7a9a1c3b2908fc9d7 data/forge/tags/blocks/storage_blocks/malatium.json +67109e1607e11719e61e6628191be6c351be9063 data/forge/tags/blocks/storage_blocks/nickel.json +265083103b6181f907ea4d603f4591ba21eac931 data/forge/tags/blocks/storage_blocks/nicrosil.json +219a5c7253f56e016e2ad32a7b9cbe5618741097 data/forge/tags/blocks/storage_blocks/pewter.json +9415a49c5035ec584af817162314db15bc16530c data/forge/tags/blocks/storage_blocks/silver.json +111cd9089f8b7afe88830102207124d8648b7039 data/forge/tags/blocks/storage_blocks/steel.json +ba66a11a92fb155d8de179f3a24e01ea3a763255 data/forge/tags/blocks/storage_blocks/tin.json +15f37fc42e91a2576f74d58e17e68ec24def1505 data/forge/tags/blocks/storage_blocks/zinc.json +73d96673b057d3867d78254525fe373c35a7a7eb data/forge/tags/items/dusts/bendalloy.json +e2db9a135aa2f8e061284a8f09a8f894e2e2737e data/forge/tags/items/dusts/brass.json +45f8b35029dba0a85ea6f78a9f4aa47a89c67dc2 data/forge/tags/items/dusts/bronze.json +9b84efd4c1d37cb6bdab3be671739b350b6b3c57 data/forge/tags/items/dusts/duralumin.json +d3c6aea87270e6a14a81d073165dc4e68acc9368 data/forge/tags/items/dusts/electrum.json +6b3f41494cbfbe11ad847477d7b719f25b767d99 data/forge/tags/items/dusts/nicrosil.json +37fd2d6f6d310b25099a5e905249c0d008e4fbf4 data/forge/tags/items/dusts/pewter.json +f225195803f1415a4b6ba68ff770bb67fa1e53d0 data/forge/tags/items/dusts/steel.json +3da8daa1bc9de8dbf391f92903bb6547b20de660 data/forge/tags/items/ingots.json +45b26fa18eddb33ca9cb55959717696bbf61f818 data/forge/tags/items/ingots/aluminum.json +a722ca59d260a3b0affcd7aff582c8d562bb6962 data/forge/tags/items/ingots/atium.json +59cebf4da98b0a57a01d91e3180cee289595f0e0 data/forge/tags/items/ingots/bendalloy.json +642b76bb5132de5f9b91db6f91837b07ef208179 data/forge/tags/items/ingots/brass.json +5e69bdc82871946f266ec4f246ea11337cd053b3 data/forge/tags/items/ingots/bronze.json +c162b7f94f6ea2fc1a880e6c493424d1245ed683 data/forge/tags/items/ingots/cadmium.json +0ba50a99c9244dfd4ef980a4ba60a07438625846 data/forge/tags/items/ingots/chromium.json +071137605127d406546f7980f4b7796d83774313 data/forge/tags/items/ingots/duralumin.json +cb3df3e788ecfdbc6114f2ab380972c995b803ba data/forge/tags/items/ingots/electrum.json +a117d096b41c112406043a446078d0916d7da6b3 data/forge/tags/items/ingots/harmonium.json +9f308a31c8a98e1f40c5c9d4cdc8ea54742c5918 data/forge/tags/items/ingots/lead.json +b7222fa2fab8500695b2389a0c06a5253fcc34c0 data/forge/tags/items/ingots/lerasatium.json +4054c61b1e5663de6cc3cd5ba2a0bb12580e50ab data/forge/tags/items/ingots/lerasium.json +ae1ece7391a72db7dd03c1841c4d3bfde0f2a5a2 data/forge/tags/items/ingots/malatium.json +94a826ba5cc20e098799fdd54db705412d9a7e71 data/forge/tags/items/ingots/nickel.json +232d4c297f863d3405953b85c62787820ae59b75 data/forge/tags/items/ingots/nicrosil.json +d305c90930e0b511d0970213ec3c9f7eee1f7ac3 data/forge/tags/items/ingots/pewter.json +fb172135d66ef8791c5a8ada75b7e51bbfde19c8 data/forge/tags/items/ingots/silver.json +a7a420d5b7cc9d4aee8a081558985bbe907d7cb5 data/forge/tags/items/ingots/steel.json +fb0b9a9b5ce5a346dbc8123188af5bf8eb41c6b1 data/forge/tags/items/ingots/tin.json +f140725c970d068d8a82ce708d90066286adf93d data/forge/tags/items/ingots/zinc.json +17b8af4e83faf95132c51b8becaee76aa6854868 data/forge/tags/items/nuggets.json +a6a8b995609572866ddf9cabcb9711813bb5b7df data/forge/tags/items/nuggets/aluminum.json +55f6cc1ec48e9476aeb337bcae090d1b2d62210b data/forge/tags/items/nuggets/atium.json +ea782221059a2106ec8c7ba74d71e70e3d605073 data/forge/tags/items/nuggets/bendalloy.json +22febcc73d25eb9144c40bcea5a7d897117eef9e data/forge/tags/items/nuggets/brass.json +e29935f2c3e81e869de66a8cdac49503e43cd96a data/forge/tags/items/nuggets/bronze.json +3e1a1d7780a6cd1178e33fb2fbb7c4e74b4eb8ca data/forge/tags/items/nuggets/cadmium.json +79d854ac8d362b6ae31987744feca55d48361011 data/forge/tags/items/nuggets/chromium.json +56b70b9f34d9048ca4097c2e77debc2e7ad28c6b data/forge/tags/items/nuggets/copper.json +88afeca099451118453904d66845c85efe9c94a0 data/forge/tags/items/nuggets/duralumin.json +dd30bdf008a620efe87c6c5119f1c2c4f70e4e49 data/forge/tags/items/nuggets/electrum.json +ec040e528b1db1332ff6840f0281812e1f7f6b74 data/forge/tags/items/nuggets/harmonium.json +6aa066a9b7a3cbe43e5477bb8f3428e58434c15c data/forge/tags/items/nuggets/lead.json +28030458471611b1614a624b264cdc17fb5c6ab4 data/forge/tags/items/nuggets/lerasatium.json +0c591c1885a97a8a0fc749e3710c3099fd62f70a data/forge/tags/items/nuggets/lerasatium_aluminum_alloy.json +3b85553cdcf90e3801d2deb3426a20aa2dc1e87e data/forge/tags/items/nuggets/lerasatium_bendalloy_alloy.json +2d035bb181efae04c7e150a7379de56357786a4b data/forge/tags/items/nuggets/lerasatium_brass_alloy.json +04ca19d905145e90142144693d7d0cd0dfe47107 data/forge/tags/items/nuggets/lerasatium_bronze_alloy.json +3e2374ea393ca4d8378b909defe493063a36e711 data/forge/tags/items/nuggets/lerasatium_cadmium_alloy.json +f0ad1c70b81b36e36318c48dfa341b15a053dfa3 data/forge/tags/items/nuggets/lerasatium_chromium_alloy.json +8fe8dbe97eeb441cb3d7eb6e1f97be3e60b846c0 data/forge/tags/items/nuggets/lerasatium_copper_alloy.json +e5e74090442129d6869d00ee3b8385550fe0ba77 data/forge/tags/items/nuggets/lerasatium_duralumin_alloy.json +5891ad56adf9f39847bdd24037a13708c7bee869 data/forge/tags/items/nuggets/lerasatium_electrum_alloy.json +329782cf4387b0e51c09da22d1c4ffdc82f74fd0 data/forge/tags/items/nuggets/lerasatium_gold_alloy.json +513defe3597d314241300a9036fbda39809018cb data/forge/tags/items/nuggets/lerasatium_iron_alloy.json +eb0d02802cde497272a11d25057e02aad104fbf3 data/forge/tags/items/nuggets/lerasatium_nicrosil_alloy.json +13d2bfd8ec393251af811bb08e6f112af100d366 data/forge/tags/items/nuggets/lerasatium_pewter_alloy.json +b8f1072749ad179f202c4b7843afaa81299d2fe2 data/forge/tags/items/nuggets/lerasatium_steel_alloy.json +1ed392bf903455c1112f5382907367f1a3a8a082 data/forge/tags/items/nuggets/lerasatium_tin_alloy.json +6fd9c09ab999ba9eb1d493d733bd79653a1f99c0 data/forge/tags/items/nuggets/lerasatium_zinc_alloy.json +8208cc064a68c06d411c6a9bea026d2d78c38368 data/forge/tags/items/nuggets/lerasium.json +f995f36d5f06cfd6f89345ea5c521a3bc7f30e54 data/forge/tags/items/nuggets/lerasium_aluminum_alloy.json +2b52560da23d272aeb0ef92a6744ec4fe9d7d688 data/forge/tags/items/nuggets/lerasium_bendalloy_alloy.json +fe0a0deb404227e3ffc43ed21d840554b8417f42 data/forge/tags/items/nuggets/lerasium_brass_alloy.json +22ff4135e0b94e28f7d38a930887edc09893d021 data/forge/tags/items/nuggets/lerasium_bronze_alloy.json +68e17513762ad58ef897dd2a83a86c06c171e094 data/forge/tags/items/nuggets/lerasium_cadmium_alloy.json +8b87aabbe77e9ce18f98330a8135070d87889e3b data/forge/tags/items/nuggets/lerasium_chromium_alloy.json +67d284e7bd227e045e514290f00be3b06bdbd283 data/forge/tags/items/nuggets/lerasium_copper_alloy.json +cc790295eb3e95ed47d6f76109c73f23d84d9e40 data/forge/tags/items/nuggets/lerasium_duralumin_alloy.json +208f863d87e795f095f74db7ba92bd85a0496c47 data/forge/tags/items/nuggets/lerasium_electrum_alloy.json +b327a4b767bddbb0197393e2948aa3c804e90602 data/forge/tags/items/nuggets/lerasium_gold_alloy.json +f279ab5a2e77b9e339817e6c8f0d4f086f135a9b data/forge/tags/items/nuggets/lerasium_iron_alloy.json +d5a9fee1ee9de8e6396ce5d2b6edf40ab0866e9c data/forge/tags/items/nuggets/lerasium_nicrosil_alloy.json +a96426ba454efe8bdfd9f4c63449dcfb5fafde05 data/forge/tags/items/nuggets/lerasium_pewter_alloy.json +394d601755fe0e861374bed2135fad7b1a265ac7 data/forge/tags/items/nuggets/lerasium_steel_alloy.json +559f3267451410477472d507195bc6b7d8510bd0 data/forge/tags/items/nuggets/lerasium_tin_alloy.json +31d3eca1e41e21067082c414ee2bed9847fc73dc data/forge/tags/items/nuggets/lerasium_zinc_alloy.json +53af8c89a4a8e6fb7e90668c967801dee236d614 data/forge/tags/items/nuggets/malatium.json +ce8ca3009391a6012a898a5622718c1c49c33d87 data/forge/tags/items/nuggets/nickel.json +ee2235eeec793fc18a173cfab9939ba12b2beee3 data/forge/tags/items/nuggets/nicrosil.json +d68145cb4757711bffba7b8c91c0f5ac8bd960e7 data/forge/tags/items/nuggets/pewter.json +af060feb22312dcda38b7cbecdb1962fd9247915 data/forge/tags/items/nuggets/silver.json +c15094d7e3e570f2c91c1fd7855cfd222ef93948 data/forge/tags/items/nuggets/steel.json +843ececd48dc1bf5c52997149322ee3b609aca3d data/forge/tags/items/nuggets/tin.json +f06272c81e8690c36cb430a8b75f5b4a54387b39 data/forge/tags/items/nuggets/zinc.json +991fd88a2fe6baeffa933f082e7fd3c83086880d data/forge/tags/items/raw_materials/aluminum.json +0aa82c966fc67192843375762d78f91a1a9ffe6b data/forge/tags/items/raw_materials/cadmium.json +f8b2c9765f0ec6a7b0f861487f22e07e069fcc59 data/forge/tags/items/raw_materials/chromium.json +8c4a84dca50dd53100cfb3c85c4e206fe875d86a data/forge/tags/items/raw_materials/lead.json +a8ecda7d56fa1b838d47ed4d0c0423b85e8e81ce data/forge/tags/items/raw_materials/nickel.json +8f973b03988ae06d72f224704e6c69c28b68861e data/forge/tags/items/raw_materials/silver.json +5399d4dc7d03dadbc0ff52718d2d1a53fcb27d0a data/forge/tags/items/raw_materials/tin.json +ed48136c06f3a6a200f954e99ccef4dcece821b0 data/forge/tags/items/raw_materials/zinc.json +5ac052c5e6c3d60c719087891e3f2fa00220c040 data/forge/tags/items/storage_blocks.json +9079d45393bba22e2b2061d1f6eb588c46ee7346 data/forge/tags/items/storage_blocks/aluminum.json +8fe1f17a4eb16ada9285bedf30fb598edf113e5f data/forge/tags/items/storage_blocks/atium.json +1eccb19f0c1fe5f19a6bdeaa14037aa8e7eeb959 data/forge/tags/items/storage_blocks/bendalloy.json +8279f41e3a3a239b29294a45ca32abc13cce2f7e data/forge/tags/items/storage_blocks/brass.json +cb95af58ea489974ff1d66f2786c5ddfda52c789 data/forge/tags/items/storage_blocks/bronze.json +3d56499024b4a14434474e46d8f2b69192d46ee2 data/forge/tags/items/storage_blocks/cadmium.json +255ac6518c4487670978a4328e9863a36fee50d6 data/forge/tags/items/storage_blocks/chromium.json +b41a04c1f7f5a9ee2c8de45c3ebdc092c1b5b274 data/forge/tags/items/storage_blocks/duralumin.json +48a29eed7bc75b67c2c7545457c0e00f47268c5d data/forge/tags/items/storage_blocks/electrum.json +90317483f1fa9a4fcb4e76bef622ea503b7f44f8 data/forge/tags/items/storage_blocks/harmonium.json +2aed30257eb22830f5a0aefcb3662b0b4a4c5ebb data/forge/tags/items/storage_blocks/lead.json +9cb594fa53db1efedb5667a4961aee563bb5a46f data/forge/tags/items/storage_blocks/lerasatium.json +3a1b70a51ca5c553f6c8f400ba7c29839ed61ecc data/forge/tags/items/storage_blocks/lerasium.json +9c6de276765b8ec142b3aca7a9a1c3b2908fc9d7 data/forge/tags/items/storage_blocks/malatium.json +67109e1607e11719e61e6628191be6c351be9063 data/forge/tags/items/storage_blocks/nickel.json +265083103b6181f907ea4d603f4591ba21eac931 data/forge/tags/items/storage_blocks/nicrosil.json +219a5c7253f56e016e2ad32a7b9cbe5618741097 data/forge/tags/items/storage_blocks/pewter.json +9415a49c5035ec584af817162314db15bc16530c data/forge/tags/items/storage_blocks/silver.json +111cd9089f8b7afe88830102207124d8648b7039 data/forge/tags/items/storage_blocks/steel.json +ba66a11a92fb155d8de179f3a24e01ea3a763255 data/forge/tags/items/storage_blocks/tin.json +15f37fc42e91a2576f74d58e17e68ec24def1505 data/forge/tags/items/storage_blocks/zinc.json +5ac052c5e6c3d60c719087891e3f2fa00220c040 data/minecraft/tags/blocks/beacon_base_blocks.json +d3a86f2ebc65cb1002d7b7bf25b64d7716ca748c data/minecraft/tags/blocks/mineable/axe.json +b9b84c453e69464bbde1c3e928f9195e42104d06 data/minecraft/tags/blocks/mineable/pickaxe.json +6bb4f3252166223dc19ecc5996f9ba2209169a0c data/minecraft/tags/blocks/needs_iron_tool.json +69e4ba1267e904246287f8ef4bd63b79b2ce4e1f data/minecraft/tags/blocks/needs_stone_tool.json +189ad22331d159102eee28a57ebe9bfee7ff8a46 data/minecraft/tags/game_events/vibrations.json +189ad22331d159102eee28a57ebe9bfee7ff8a46 data/minecraft/tags/game_events/warden_can_listen.json diff --git a/src/datagen/generated/cosmere/.cache/39b5f26b3fbd3a088f493470df207f8ad9de8264 b/src/datagen/generated/cosmere/.cache/39b5f26b3fbd3a088f493470df207f8ad9de8264 new file mode 100644 index 000000000..aee3d3b3e --- /dev/null +++ b/src/datagen/generated/cosmere/.cache/39b5f26b3fbd3a088f493470df207f8ad9de8264 @@ -0,0 +1,4 @@ +// 1.20.1 2025-11-14T13:49:46.928092 Cosmere PatchouliGeneration +4f33960cb7941c483714148bc1fde9b26c995d68 assets/cosmere/patchouli_books/guide/en_us/categories/basics.json +d848b9aedb980207d01ca4b59857308407d8248c assets/cosmere/patchouli_books/guide/en_us/entries/basics/activating_powers.json +fd4cfd28bfffc52180eb889bfae3bd79f08c388b assets/cosmere/patchouli_books/guide/en_us/entries/basics/investiture_basics.json diff --git a/src/datagen/generated/cosmere/.cache/44623903f0365d3c95d129c2cab3e32a7eda1dc7 b/src/datagen/generated/cosmere/.cache/44623903f0365d3c95d129c2cab3e32a7eda1dc7 new file mode 100644 index 000000000..a290c095d --- /dev/null +++ b/src/datagen/generated/cosmere/.cache/44623903f0365d3c95d129c2cab3e32a7eda1dc7 @@ -0,0 +1,115 @@ +// 1.20.1 2025-03-09T10:51:05.8406215 Block States: cosmere +434461c262fd523078d948f09cd67d06c05798d3 assets/cosmere/blockstates/aluminum_block.json +d3c597bb535744596d88c0d263a692db9be076e1 assets/cosmere/blockstates/aluminum_ore.json +d41d8cda607832f24d3704fbfd452d536ab505cb assets/cosmere/blockstates/atium_block.json +84031bb83bc418e7b0b7ddd458f8712f2e83f402 assets/cosmere/blockstates/bendalloy_block.json +c1443e200e135a42d43e3dec7f85e429db6242f5 assets/cosmere/blockstates/brass_block.json +b20d68d7a79603c02791ea1f21ca1d448cf21f98 assets/cosmere/blockstates/bronze_block.json +4ec5c60d6bf8de79da40f47391ed1c9e6e428e36 assets/cosmere/blockstates/cadmium_block.json +e405c127daf703d304d3585ae1167ca39e721a09 assets/cosmere/blockstates/cadmium_ore.json +3641c34d1cf032cba648751fe44ce76cebe453dd assets/cosmere/blockstates/chromium_block.json +bb0ce7911c75338ad1123ce1341d08dca87ebdea assets/cosmere/blockstates/chromium_ore.json +802161856440c91a7bbd2ed17f6f7e0f939d0e52 assets/cosmere/blockstates/deepslate_aluminum_ore.json +8c967b192821510323bd0628a308c19dc6bf1859 assets/cosmere/blockstates/deepslate_cadmium_ore.json +905d0706fca44df568a102128ae0250d28285297 assets/cosmere/blockstates/deepslate_chromium_ore.json +5f20f21ad56e07117aea186bf7b9ae76ac96f7e4 assets/cosmere/blockstates/deepslate_lead_ore.json +62d727f34f6148882c28a440138939df886fd5fa assets/cosmere/blockstates/deepslate_nickel_ore.json +b0774e2ae0b9da62f66d925c46901fc5b9d934c1 assets/cosmere/blockstates/deepslate_silver_ore.json +00c36febc6f3584d8b5cbbe4f685b2a9a154f0c8 assets/cosmere/blockstates/deepslate_tin_ore.json +dd2af72ba521c21090c8a7f3f1fae0e2611a645e assets/cosmere/blockstates/deepslate_zinc_ore.json +a541aaa1d58c99893db477668d6537a47a4fc665 assets/cosmere/blockstates/duralumin_block.json +33a7001640f688e8e18e6774b1db70e400747b20 assets/cosmere/blockstates/electrum_block.json +c1e79c69eef2895ed393f0023797935244ff0885 assets/cosmere/blockstates/harmonium_block.json +528606df4b01309ec4a8828e5ca51a6935193be9 assets/cosmere/blockstates/lead_block.json +dbac4758d67308c39e94301695a189130eaa0a20 assets/cosmere/blockstates/lead_ore.json +f1648ba4e627cbb06c9ed1df3574eb12148a09eb assets/cosmere/blockstates/lerasatium_block.json +41bb6a9f1aae2c98b2103d28eef63cc2239c7b25 assets/cosmere/blockstates/lerasium_block.json +6668b7675265c8f6cc0e1a8b7aad25db91590434 assets/cosmere/blockstates/malatium_block.json +eddacfb44c07e162b13925bdc0306bda846f23e6 assets/cosmere/blockstates/metalworking_table.json +7fa8eb9536548ebffd37be41d1c698898e201cd0 assets/cosmere/blockstates/nickel_block.json +08b2878e3cd9727b8827796faf2258e55ceecf91 assets/cosmere/blockstates/nickel_ore.json +b1f18650b1685da5cddeade7694769296725127e assets/cosmere/blockstates/nicrosil_block.json +d66c951f930c92cffe29cbbe200cfa0eb192a748 assets/cosmere/blockstates/pewter_block.json +de3d220beca81506905951d1ba98bdf5e2ebc841 assets/cosmere/blockstates/silver_block.json +7d819466a64fa8e06938715d95deec7abd202eb0 assets/cosmere/blockstates/silver_ore.json +bf8563eddaf573501be00f67b08fdf10c4dded95 assets/cosmere/blockstates/steel_block.json +4946874f0f80547cb06684395d7c516e27b6d6ed assets/cosmere/blockstates/tin_block.json +35a33ee7d6465b721852f00159150ce61572baf0 assets/cosmere/blockstates/tin_ore.json +cccaf368b0c437c1d7a53fa0551dcc6b5c313af6 assets/cosmere/blockstates/zinc_block.json +2b307563d29a45119e73fe599f4dd2fbd14036f5 assets/cosmere/blockstates/zinc_ore.json +2082e1c7d03ffc7ae3a3cdc7f0bae4ac3ba27c25 assets/cosmere/models/block/aluminum_block.json +bc0cd23d41aa08d73f017a65cd7f064babc6e18f assets/cosmere/models/block/aluminum_ore.json +531eb4bd92fef6e7efc998e3d4fb31709b7aa2d2 assets/cosmere/models/block/atium_block.json +e44178baba8bd55a73611093b61ced75ddc815f1 assets/cosmere/models/block/bendalloy_block.json +29f3884321fc0478c96e22f24000edd8babff49a assets/cosmere/models/block/brass_block.json +5312db1bf3082d5d64094a76a0f81e1aa0d15575 assets/cosmere/models/block/bronze_block.json +b31b1c1e58f5d23f0399ceb0bbef920c13ba4b26 assets/cosmere/models/block/cadmium_block.json +75548fdb2fb2cd5fca80c06902d969a2c9f7c693 assets/cosmere/models/block/cadmium_ore.json +6688fb2fbe7b2fe6615cbb6015c3d341a3bb83e6 assets/cosmere/models/block/chromium_block.json +7c584fb4e34a7a46122c7ff73c5f124da3d3503b assets/cosmere/models/block/chromium_ore.json +a08d2e2b9345d1e7017baa1368c4456335f798b2 assets/cosmere/models/block/deepslate_aluminum_ore.json +6cb1c8a11c20ecd6219be2a34927c2377cb54380 assets/cosmere/models/block/deepslate_cadmium_ore.json +6d029127f33cd0a5c455e3e1bc2f25d2c4d56bd8 assets/cosmere/models/block/deepslate_chromium_ore.json +d8d189d1edb38e29485198c5cf1b1d2b7b3ec5fd assets/cosmere/models/block/deepslate_lead_ore.json +d79c4e76fd772fcdca8e2324c2dbf0a2c5b62e01 assets/cosmere/models/block/deepslate_nickel_ore.json +0814c9973e412ef8f3bd4626a2ab065d05147c75 assets/cosmere/models/block/deepslate_silver_ore.json +ef8436d06e4c235d71d92969ab797aef53e30c6c assets/cosmere/models/block/deepslate_tin_ore.json +c85f47d9baef7b2ec8ce1d50baf40ec601e986b8 assets/cosmere/models/block/deepslate_zinc_ore.json +9344672bbd40a7953331ce4d2bae6ba5e8474012 assets/cosmere/models/block/duralumin_block.json +f3c2ee16624370592811a7bc893aaefce2fcaa5d assets/cosmere/models/block/electrum_block.json +4948f1bd683275d34f3ded06c9a9691ace56671f assets/cosmere/models/block/harmonium_block.json +daa0a7af17062e1727f47af6d8bd268f727f66c6 assets/cosmere/models/block/lead_block.json +dee9a8002e5ee7d82f8f8b8587f1be6e8dc0da59 assets/cosmere/models/block/lead_ore.json +803414981cf3640bdbd9012fcd6a83000f1aca51 assets/cosmere/models/block/lerasatium_block.json +f94b579f64e42cbd5c2fbf829673b2410c90deca assets/cosmere/models/block/lerasium_block.json +a50a53ef730c81e9064d4ae4cade92846ef2b3f0 assets/cosmere/models/block/malatium_block.json +e5882538f177993390dd6954b4d7053ba34e3f3b assets/cosmere/models/block/metalworking_table.json +bf37044aaf360f51814a6799fba0992b93271c68 assets/cosmere/models/block/nickel_block.json +d621bb813dabc2b9fadd6fd46774655ca7255d25 assets/cosmere/models/block/nickel_ore.json +7b150898778b0858f66d18e4c47e9dc9779136cc assets/cosmere/models/block/nicrosil_block.json +6b903e1b5328ca2487289c2b57fe42f250559f5e assets/cosmere/models/block/pewter_block.json +5f0fbdcf9c661829557fa2548b90d09fde290ef3 assets/cosmere/models/block/silver_block.json +b1eab928b7096cb15a24702bb88fa1bc52866092 assets/cosmere/models/block/silver_ore.json +d86953d63b7f6c4d8199a8be028a60b2334175b8 assets/cosmere/models/block/steel_block.json +7632b64925b21783dd91742c0753693838b03400 assets/cosmere/models/block/tin_block.json +dd32eb4009064e1f18d0c48636b43ad5976ca150 assets/cosmere/models/block/tin_ore.json +06c3e7c0276bf232b8345cc01027b44259c8a413 assets/cosmere/models/block/zinc_block.json +8a8c2326c99cdf0bb6c5d0e5db920b8312ddaf82 assets/cosmere/models/block/zinc_ore.json +df8fc605e8a35bffe4b1b26f278e3c3cb2aa42ef assets/cosmere/models/item/aluminum_block.json +97fce1ab9020a14a95532d924932df0b6d9e505f assets/cosmere/models/item/aluminum_ore.json +9b33b9aeb817ee0e145842aad66f033fd02dc71b assets/cosmere/models/item/atium_block.json +5e756c164b59b0bd70fa93783b0e66b6fe797f4f assets/cosmere/models/item/bendalloy_block.json +9175db3f0b27b9d28d10367157a2ae3f5ddf6186 assets/cosmere/models/item/brass_block.json +1a7eb92f34a7db468e51c62786a211971010aef8 assets/cosmere/models/item/bronze_block.json +efd627bec4b598562b5d719158c4cd861f585a28 assets/cosmere/models/item/cadmium_block.json +5feebcdc415009cfbbc3f359da946052e0bece3d assets/cosmere/models/item/cadmium_ore.json +fd53f3c676eb1c06b3587352ba74bded1e8922f3 assets/cosmere/models/item/chromium_block.json +3c84296fb38adc32064579fdb40215f16319cd57 assets/cosmere/models/item/chromium_ore.json +1da51c52e0f1ac514ffc4a13ca4585b799a16306 assets/cosmere/models/item/deepslate_aluminum_ore.json +5b1c9d2dc4252ab5b729430d35769fbd495c0ef8 assets/cosmere/models/item/deepslate_cadmium_ore.json +13faa8ccd317a16297d2e495095b41adac45c494 assets/cosmere/models/item/deepslate_chromium_ore.json +d252599752500f204608e05d7ca9bf9b3657057a assets/cosmere/models/item/deepslate_lead_ore.json +4bcec55dcfb371c007bb04652fbe0ac0a141b29e assets/cosmere/models/item/deepslate_nickel_ore.json +90e1365488f7aa5ed14cfa0a30d63da547cf2d91 assets/cosmere/models/item/deepslate_silver_ore.json +47e0625708e67b44f0ef3c408add58ed917cac8a assets/cosmere/models/item/deepslate_tin_ore.json +d1d4dacb19718deb36f0d22a37c28be6486e39b6 assets/cosmere/models/item/deepslate_zinc_ore.json +808ecc41351c6b7239eba5fec1b495e778b8f96d assets/cosmere/models/item/duralumin_block.json +3a804e4825ca1e9662c7ac5d56c16295eeb6f0da assets/cosmere/models/item/electrum_block.json +4e8fb254068184354ec2d98f157bb3335b6fd95e assets/cosmere/models/item/harmonium_block.json +4a9c4f31d8ace6d2932e9cb7293e0cb0993bd0cf assets/cosmere/models/item/lead_block.json +08113a5cf50add68853f96c592b1b48e0d5eb9f7 assets/cosmere/models/item/lead_ore.json +257542a60f94c693e26c27a5301696714fdfd35f assets/cosmere/models/item/lerasatium_block.json +738f0b84522b0e8f6717d5640c2eed7c524f4c3e assets/cosmere/models/item/lerasium_block.json +40598f89333863d06d86f9d38e811d99c7615fa7 assets/cosmere/models/item/malatium_block.json +0b4d4afa5bb6f8721e3f59ac8ffecf7fa88e03c7 assets/cosmere/models/item/metalworking_table.json +30fb90a121889953a3217c23578e470b2e1137cf assets/cosmere/models/item/nickel_block.json +80d43c1a840047c3bf1320a37e82b22b6f452df8 assets/cosmere/models/item/nickel_ore.json +0852781363184e1faab124ca145740a89a0c210d assets/cosmere/models/item/nicrosil_block.json +e7be84c1e9832ef75a232eb18c0bafd216f8e457 assets/cosmere/models/item/pewter_block.json +5307ccd11eccb3fb51afeb8368f6f74fc3c796b7 assets/cosmere/models/item/silver_block.json +26d4d48beb4c99bad7672e66148a3a5243ea50b5 assets/cosmere/models/item/silver_ore.json +2a21c5704e511e2aa9d08b8f6e3bd8f7fa0d458d assets/cosmere/models/item/steel_block.json +306016edd475e83349d88ea743297ef9d4a2abe5 assets/cosmere/models/item/tin_block.json +062b078f369e0dffc80d187f09bcc804b8d7012f assets/cosmere/models/item/tin_ore.json +3bab2e3748da89b4699d4e4ae6b333190c2b304e assets/cosmere/models/item/zinc_block.json +009c4b0c57ede1faab450b209564b00599e3a478 assets/cosmere/models/item/zinc_ore.json diff --git a/src/datagen/generated/cosmere/.cache/57823f1d1ffdc78dae2209031097364f4ed6372b b/src/datagen/generated/cosmere/.cache/57823f1d1ffdc78dae2209031097364f4ed6372b new file mode 100644 index 000000000..3d8c61571 --- /dev/null +++ b/src/datagen/generated/cosmere/.cache/57823f1d1ffdc78dae2209031097364f4ed6372b @@ -0,0 +1,59 @@ +// 1.20.1 2024-11-20T09:55:55.4356553 Datapack registries: cosmere +3c550de803d2cef31d694c8d3dc76fb777ed718b data/cosmere/damage_type/eat_metal.json +a1998d540bb2a50c1e837ec4fb303c9b5b693e58 data/cosmere/damage_type/spiked.json +e88b81d0129261da7edf162f2c11a166cd427840 data/cosmere/forge/biome_modifier/aluminum.json +a5cb11e338001aab9267a284f6ff549c7eda79e8 data/cosmere/forge/biome_modifier/cadmium.json +09a466d03edcf818be6b4615f45d4b180d932650 data/cosmere/forge/biome_modifier/chromium.json +f62820de383655b9bdbab753d187e8cccca56d7a data/cosmere/forge/biome_modifier/lead.json +39e9a9d7cd77fab7f3eac8c1647f24d5a3f9989e data/cosmere/forge/biome_modifier/nickel.json +179a29a35d601bd5dc346d3b7281ae3d631d1cd4 data/cosmere/forge/biome_modifier/silver.json +1b3640012887e6aa2f5ead2217fb386b16c52216 data/cosmere/forge/biome_modifier/tin.json +09894776324aa9d5a8bd79578444c3401a4c5ae0 data/cosmere/forge/biome_modifier/zinc.json +1341f2a847ae3f27c9114f151554e5e41072429a data/cosmere/worldgen/configured_feature/ore_aluminum_buried.json +f0628f328352ed7c7bf38f1b2d62daeb444ea1c6 data/cosmere/worldgen/configured_feature/ore_aluminum_medium.json +62f700b0ce8279c222b459770e0a3c9727bf9c41 data/cosmere/worldgen/configured_feature/ore_aluminum_small.json +5c32d2756eae86e97de1f79cb755ff0848e7e586 data/cosmere/worldgen/configured_feature/ore_cadmium_abundant.json +529305450822518cecc8641b912ff624d529db1c data/cosmere/worldgen/configured_feature/ore_cadmium_deep.json +2374237290c9014ac1416327b1349ef9abd013af data/cosmere/worldgen/configured_feature/ore_cadmium_normal.json +c84474f103bff08413fd00556b4f6de916fec27a data/cosmere/worldgen/configured_feature/ore_chromium_deep.json +5acba3226b7a85178f4f638cb320984858c2f28a data/cosmere/worldgen/configured_feature/ore_chromium_normal.json +9a586ede100a959c2b323ebcff4829adfc507d8a data/cosmere/worldgen/configured_feature/ore_chromium_rare.json +a5cfc4a9f6cc5fd88c2684a19e2d3d35da4e3274 data/cosmere/worldgen/configured_feature/ore_lead_abundant.json +a32987c0fcaafa4bab55aa15e218ef5c42b2246a data/cosmere/worldgen/configured_feature/ore_lead_deep.json +35103c04482a10a74da2a57c298ec780065c708e data/cosmere/worldgen/configured_feature/ore_lead_normal.json +43b74c902ff86e1cf1e1c2ad53699d8879fe8bd2 data/cosmere/worldgen/configured_feature/ore_nickel_middle.json +ad8faf810595b507e49a718b8ce609b431b076cf data/cosmere/worldgen/configured_feature/ore_nickel_small.json +9d8969def2b9a4a1ca59ee4d9f3d0e8a61b416f3 data/cosmere/worldgen/configured_feature/ore_nickel_upper.json +68faa0c948712c49761f73dd4c191d6f82ae8622 data/cosmere/worldgen/configured_feature/ore_silver_abundant.json +682c0eb9b6ab402597d6af059fb0635ea0b2da08 data/cosmere/worldgen/configured_feature/ore_silver_normal.json +478f4089ea9aed261bed8400eda55f4253f58e9e data/cosmere/worldgen/configured_feature/ore_silver_rich.json +110982635d9492b4f99ee5bd01b941db3c715d00 data/cosmere/worldgen/configured_feature/ore_tin_abundant.json +079d1704a6e505ae0c451febe9e52011bc37570d data/cosmere/worldgen/configured_feature/ore_tin_medium.json +25fad11d58d03c1c5d3d2323706184e620522062 data/cosmere/worldgen/configured_feature/ore_tin_small.json +ee2c429dcd3afbbb1fdeefdad72646f488763ba2 data/cosmere/worldgen/configured_feature/ore_zinc_deep.json +d3010f6e3617022174be9865790cf725aaaf80bb data/cosmere/worldgen/configured_feature/ore_zinc_middle.json +aea436f01020e0ccc9455ee1e736eefd6d6fa106 data/cosmere/worldgen/configured_feature/ore_zinc_upper.json +ef22cbb61be0482ed7ab51c884bf37bf0d44a831 data/cosmere/worldgen/placed_feature/ore_aluminum_buried.json +0fc88893b011ec1a513894b3bdf44305cca5f6ea data/cosmere/worldgen/placed_feature/ore_aluminum_medium.json +7281c1d40482f7dcfe32b6cd84598c7fb89ed98c data/cosmere/worldgen/placed_feature/ore_aluminum_small.json +63c1bcb4951d5643f58348e5a74258bffb4676e7 data/cosmere/worldgen/placed_feature/ore_cadmium_abundant.json +f1a2cb62c0edffe6d8d8a43496ed63fe46caa5e7 data/cosmere/worldgen/placed_feature/ore_cadmium_deep.json +659d2fa03441ea3ae99981574fee19253c7128bc data/cosmere/worldgen/placed_feature/ore_cadmium_normal.json +2e54da3fa452539df938af403d560ae68f1d4279 data/cosmere/worldgen/placed_feature/ore_chromium_deep.json +0fddd1254d14643213ee1241f1cf1cd57c360025 data/cosmere/worldgen/placed_feature/ore_chromium_normal.json +997e6d2f3d796250ee2162a0251a348edb1659f8 data/cosmere/worldgen/placed_feature/ore_chromium_rare.json +43d31445ce8752bafe0418ca043bd67532e78222 data/cosmere/worldgen/placed_feature/ore_lead_abundant.json +205ade34e8fa20a6fade2d31b77704b8861c6537 data/cosmere/worldgen/placed_feature/ore_lead_deep.json +05d3e53b5c4c75a8412e543fa62d0ace6e8e7119 data/cosmere/worldgen/placed_feature/ore_lead_normal.json +0d233c2a61341bbb335153c839e8475217ac5f4a data/cosmere/worldgen/placed_feature/ore_nickel_middle.json +ce439568a9517f9ec9d00000659ac510fab7fe47 data/cosmere/worldgen/placed_feature/ore_nickel_small.json +d47c8dc5e082e533cbbe49043b63c46d99493f02 data/cosmere/worldgen/placed_feature/ore_nickel_upper.json +fcf799e662b12d8042383c6dd1d0433acbe06545 data/cosmere/worldgen/placed_feature/ore_silver_abundant.json +c0b72c349c8862d794ca175791d3cd2d141c8301 data/cosmere/worldgen/placed_feature/ore_silver_normal.json +aba95a7af76b7598f7f894e957f71f33342aac53 data/cosmere/worldgen/placed_feature/ore_silver_rich.json +cb29a6efc551894acd99508a9137f337d8eda23f data/cosmere/worldgen/placed_feature/ore_tin_abundant.json +32ec4a91c497debff28c1836d6d6c9ab52916e5e data/cosmere/worldgen/placed_feature/ore_tin_medium.json +a97452f079806a503c9b4dcd7b310a15bdbc7a37 data/cosmere/worldgen/placed_feature/ore_tin_small.json +9af8b0c6f481ca9ef9317967fe5dd4e5b6927b94 data/cosmere/worldgen/placed_feature/ore_zinc_deep.json +d1e7ce7ee461f5fe40776b22f6498eafa0ac1a35 data/cosmere/worldgen/placed_feature/ore_zinc_middle.json +98de00b368be92111859ecad41c68aa24374216f data/cosmere/worldgen/placed_feature/ore_zinc_upper.json \ No newline at end of file diff --git a/src/datagen/generated/cosmere/.cache/59eb3dbb5f86130e09b3c62d89b9525ee01cf52d b/src/datagen/generated/cosmere/.cache/59eb3dbb5f86130e09b3c62d89b9525ee01cf52d new file mode 100644 index 000000000..f52588bce --- /dev/null +++ b/src/datagen/generated/cosmere/.cache/59eb3dbb5f86130e09b3c62d89b9525ee01cf52d @@ -0,0 +1,39 @@ +// 1.20.1 2024-11-04T18:26:44.0719647 Loot Tables +1440a509cd4375633c42e39a73c393fac55bc5b5 data/cosmere/loot_tables/blocks/aluminum_block.json +b11f02392d505e4d09ad5b4d2ae886a9d6ec9f23 data/cosmere/loot_tables/blocks/aluminum_ore.json +cd731279bd267f94d0afd47ad08ae376ed5a9f88 data/cosmere/loot_tables/blocks/atium_block.json +56a2e680d379b39e2c6c3a3880b03054d0f12aa2 data/cosmere/loot_tables/blocks/bendalloy_block.json +7c6f0158470b2c13bf5a944fe4b405f2d271490f data/cosmere/loot_tables/blocks/brass_block.json +15931a1d5cf53294314934deae3b318f5ebee6e9 data/cosmere/loot_tables/blocks/bronze_block.json +b23765f334dad8db8a5ee67557013adaaf56aa49 data/cosmere/loot_tables/blocks/cadmium_block.json +0bbacdb84127d0788045d6c0c95c73bf2246929c data/cosmere/loot_tables/blocks/cadmium_ore.json +158625ad82a7f3412e2d8fe8ba5865ac45ea632a data/cosmere/loot_tables/blocks/chromium_block.json +9c2ceb3734a131a37b3d8b7f09f933d0123b1746 data/cosmere/loot_tables/blocks/chromium_ore.json +abb8e67ed41500f08a74b4eaf8712c217359973c data/cosmere/loot_tables/blocks/deepslate_aluminum_ore.json +a67fb03d8402fcc8af36c5cc18de613ae80ec1b3 data/cosmere/loot_tables/blocks/deepslate_cadmium_ore.json +3b98ebb6b759abc221bb03d1df0375efef0cb5a8 data/cosmere/loot_tables/blocks/deepslate_chromium_ore.json +35c7349b387170765c49f9295299077f8dc6a9db data/cosmere/loot_tables/blocks/deepslate_lead_ore.json +10ef4a9eba8d0cd10926dcd95c6a61c070c209bb data/cosmere/loot_tables/blocks/deepslate_nickel_ore.json +cb5ddd2f0b28c21f61494ac6d8c3aca226a92e79 data/cosmere/loot_tables/blocks/deepslate_silver_ore.json +ccfd45cec43abae55960c98521af5d2fc1ff8bf2 data/cosmere/loot_tables/blocks/deepslate_tin_ore.json +b5ffc27a992f641a1b02be607bc3e1f4d0faaefc data/cosmere/loot_tables/blocks/deepslate_zinc_ore.json +15855f9da5b35eb4abf691bbe910bb7262e14219 data/cosmere/loot_tables/blocks/duralumin_block.json +79bddf7f0ec076e19359a73e3a30d168bbe9125f data/cosmere/loot_tables/blocks/electrum_block.json +8180e3fc3f58b48b298df6a42ac4ada19c9318b7 data/cosmere/loot_tables/blocks/harmonium_block.json +beb28ea68984cc7dfb369d5702be6691285c20bf data/cosmere/loot_tables/blocks/lead_block.json +972b72b62e4a7d51d1d89587f8785c9895283e4e data/cosmere/loot_tables/blocks/lead_ore.json +055789ab56e620938e54e1740bab19bda7af019c data/cosmere/loot_tables/blocks/lerasatium_block.json +56c34b3fb3a6bcf4bb161e597e9959b2c039e7be data/cosmere/loot_tables/blocks/lerasium_block.json +e4aecb93364a450379e522040319a7f515bd35a3 data/cosmere/loot_tables/blocks/malatium_block.json +b2ecd38ab0f9269aa7e995579634007d10dcb32b data/cosmere/loot_tables/blocks/metalworking_table.json +96db278cdb580a714b53b4f819bb32d98f76e708 data/cosmere/loot_tables/blocks/nickel_block.json +9a116ab1e707a3430f806c787d4224fafbb29f6c data/cosmere/loot_tables/blocks/nickel_ore.json +119d0773f16fb3e3d612879db0535b0e7393a102 data/cosmere/loot_tables/blocks/nicrosil_block.json +52470d0e26fedc08affe611737ee8b377f6e6063 data/cosmere/loot_tables/blocks/pewter_block.json +21387fc249c02b926f4e3f8688d4bce78cb82d8b data/cosmere/loot_tables/blocks/silver_block.json +699459b5a218743771ce1a9c7ed6e2391be35156 data/cosmere/loot_tables/blocks/silver_ore.json +06b119096f6ae9abd898d00d193fa5423776e34b data/cosmere/loot_tables/blocks/steel_block.json +d53cea7faa3f4ab1cadba5b03fe7c51aac443aa9 data/cosmere/loot_tables/blocks/tin_block.json +20073cfcd2deb866089823aad28710ce3a0b4844 data/cosmere/loot_tables/blocks/tin_ore.json +bc7d9b87a09b899f9d9a2a67ff93e6ea048179d3 data/cosmere/loot_tables/blocks/zinc_block.json +ee47d2fb9c7e7edd08918d00850193b3df0b3b0c data/cosmere/loot_tables/blocks/zinc_ore.json diff --git a/src/datagen/generated/cosmere/.cache/6d6f5723d9e7fbafeec1b0bb4cc9fc2c015e9cff b/src/datagen/generated/cosmere/.cache/6d6f5723d9e7fbafeec1b0bb4cc9fc2c015e9cff new file mode 100644 index 000000000..7397ab64c --- /dev/null +++ b/src/datagen/generated/cosmere/.cache/6d6f5723d9e7fbafeec1b0bb4cc9fc2c015e9cff @@ -0,0 +1,2 @@ +// 1.20.1 2024-10-09T13:22:13.1417723 Cosmere Biome Tags +597ce8b32486ba638537e2532c70e94111b26494 data/cosmere/tags/worldgen/biome/is_shadesmar.json diff --git a/src/datagen/generated/cosmere/.cache/9bcb7fde85eeddf7de67da69438e03dd8676482b b/src/datagen/generated/cosmere/.cache/9bcb7fde85eeddf7de67da69438e03dd8676482b new file mode 100644 index 000000000..d8c4523b7 --- /dev/null +++ b/src/datagen/generated/cosmere/.cache/9bcb7fde85eeddf7de67da69438e03dd8676482b @@ -0,0 +1,93 @@ +// 1.20.1 2025-11-14T18:10:47.1080284 Item Models: cosmere +ff0d97cfe0dc1ec1f93e6a39585a79d351141f40 assets/cosmere/models/item/aluminum_ingot.json +8b0d2f2a1126a0af33aa3e87bf6486a87914d9a3 assets/cosmere/models/item/aluminum_nugget.json +4a894e0164206d6a02ad4c4d773cc458a0e331db assets/cosmere/models/item/atium_ingot.json +0a47643b87e93db158c9c4175d9e582e24841f98 assets/cosmere/models/item/atium_nugget.json +0f98979d062133ede87d33109e00afc8ee1d11b1 assets/cosmere/models/item/bendalloy_blend.json +ae071fd93bf4d6381661fc2b579fe09106c9b82c assets/cosmere/models/item/bendalloy_ingot.json +6b595f03ec49392149f6e01068d5cf2a7cc0407b assets/cosmere/models/item/bendalloy_nugget.json +646fd8449268df9514a39cd707ac6ad5a7b6be1d assets/cosmere/models/item/brass_blend.json +7babfcc0edaffef08b111bd9290df6d04c644ed8 assets/cosmere/models/item/brass_ingot.json +0b188ff28a3af4f8513fa29f7667ea531fc5d94e assets/cosmere/models/item/brass_nugget.json +56cdc236f99ed441213d5d50319613213c676111 assets/cosmere/models/item/bronze_blend.json +3b890284183cd04d9f107c10bdc01f2a5afad670 assets/cosmere/models/item/bronze_ingot.json +e00fd350bf851551ba15797b5d493e43c0aa14b7 assets/cosmere/models/item/bronze_nugget.json +0ff6f3de421a80839998f8ae95f9f9a05a4ffc0b assets/cosmere/models/item/cadmium_ingot.json +b518db4e4e1664b81b3f5b6efc827a3c371fcfed assets/cosmere/models/item/cadmium_nugget.json +f3da55b7ff1f005f2346bc86c839bd886f38915f assets/cosmere/models/item/chromium_ingot.json +05986a77ad11ceb4a9af904b17d57e81a051d438 assets/cosmere/models/item/chromium_nugget.json +fac9d3382c68e92ad6167f2b64c23141cddd9573 assets/cosmere/models/item/copper_nugget.json +d0f7f1f9bf4078c3ce32dd1fc6d21eb72889010a assets/cosmere/models/item/duralumin_blend.json +5f7241be8076be1e1e4f2717850f9c97c20ed351 assets/cosmere/models/item/duralumin_ingot.json +90493993464f98a65bf0399cdc4b385662fc2f4c assets/cosmere/models/item/duralumin_nugget.json +7f1c2aba76d0cfe4c1b46a095ab28fcb27eb2076 assets/cosmere/models/item/electrum_blend.json +ee62a22f6baecee57f2242a3474c420d1f12d407 assets/cosmere/models/item/electrum_ingot.json +85ff83dfdaf3ad35aa3d2f7571a12ca9063b5389 assets/cosmere/models/item/electrum_nugget.json +31ffe9eeff25c7a22a24938b36557b62be478b3d assets/cosmere/models/item/guide.json +0e6a8187a44579b813f0f7ef5d36c4163fcff33d assets/cosmere/models/item/harmonium_ingot.json +4633420b9247c1b84a2db84236d1ae32e642d726 assets/cosmere/models/item/harmonium_nugget.json +31dabb6ca7702c1b23a4938220defd4d743e916b assets/cosmere/models/item/lead_ingot.json +c54c10609e6c7e75abf66ab4f533fd787bce5a0a assets/cosmere/models/item/lead_nugget.json +281b6a71980316043618b4eef1e0e8a27ff9bec1 assets/cosmere/models/item/lerasatium_aluminum_alloy_nugget.json +dcb54797771f0b2ebf2579fd36aa54d4b563aaa6 assets/cosmere/models/item/lerasatium_bendalloy_alloy_nugget.json +71a5e465b21fe91da9c8c6245f79196b5be7de0f assets/cosmere/models/item/lerasatium_brass_alloy_nugget.json +014400ada033302ff63622ef8f42577b5b125528 assets/cosmere/models/item/lerasatium_bronze_alloy_nugget.json +a1ce81a83eb7607057cdc87732f966f6eda6588c assets/cosmere/models/item/lerasatium_cadmium_alloy_nugget.json +06d1e60ef64990d8ec56aa4f329a325ec74feac4 assets/cosmere/models/item/lerasatium_chromium_alloy_nugget.json +8d80c47c8d79e63c103ddbcd8c665cd308bf544e assets/cosmere/models/item/lerasatium_copper_alloy_nugget.json +4328a7fe4f53646a793b085aed19030df0c3159a assets/cosmere/models/item/lerasatium_duralumin_alloy_nugget.json +b1d20ea74ea555c65c0d13333a7ae5524fa3e347 assets/cosmere/models/item/lerasatium_electrum_alloy_nugget.json +8f21a751679478d62cdb3d93dbdaff1ff8091ef7 assets/cosmere/models/item/lerasatium_gold_alloy_nugget.json +998e1f48856030da41aba793d1af39b12129c210 assets/cosmere/models/item/lerasatium_ingot.json +54ec2be247217c2daf38fded73bf1c17060ef5d0 assets/cosmere/models/item/lerasatium_iron_alloy_nugget.json +195281af915e79536d1a8d71bbf904d5dfde802c assets/cosmere/models/item/lerasatium_nicrosil_alloy_nugget.json +d85774d23a216f7591929b49a96cd2237b85cad7 assets/cosmere/models/item/lerasatium_nugget.json +5311d3d146316f5a77172f06da7673056006b5eb assets/cosmere/models/item/lerasatium_pewter_alloy_nugget.json +cded1672c2b6cb91e4289565452de7886f9e178a assets/cosmere/models/item/lerasatium_steel_alloy_nugget.json +98d02116eb81b00271912dd50dc46c9556b7a327 assets/cosmere/models/item/lerasatium_tin_alloy_nugget.json +d6946d5ab6a92fb47b30cd59cecb7fe7c1a4f320 assets/cosmere/models/item/lerasatium_zinc_alloy_nugget.json +4871821d8ed86fdadcb392a4badd95fed2291d83 assets/cosmere/models/item/lerasium_aluminum_alloy_nugget.json +288cc30d45838bfaaf2a9c3ec7bed4860419ada8 assets/cosmere/models/item/lerasium_bendalloy_alloy_nugget.json +c3520c60bc96af0cc478ab92651d49b79c2f02ec assets/cosmere/models/item/lerasium_brass_alloy_nugget.json +2bb76ed0fceb5831c19e329e07ab98793698a8a8 assets/cosmere/models/item/lerasium_bronze_alloy_nugget.json +d567ae69cb8e8552b5c72034be4ba47393b1702f assets/cosmere/models/item/lerasium_cadmium_alloy_nugget.json +b7ce440e61f92e099cf763e4add9991c78f2d8a5 assets/cosmere/models/item/lerasium_chromium_alloy_nugget.json +aa2b4e035e84388db0e35a62c38863cff2b6290a assets/cosmere/models/item/lerasium_copper_alloy_nugget.json +574e08f69b1e6c4a9f7a4d5af04307f119f7916d assets/cosmere/models/item/lerasium_duralumin_alloy_nugget.json +d6835cf7377b0b37f793ad497f85db8bdfc5962a assets/cosmere/models/item/lerasium_electrum_alloy_nugget.json +b687b9fa1f047d36fd345392d0cca7f6228f1ab3 assets/cosmere/models/item/lerasium_gold_alloy_nugget.json +7c908cb447a777f0e5f50538334cf2c477cff74c assets/cosmere/models/item/lerasium_ingot.json +fc566fc538d4e3070d1f9b289f51615ce4661667 assets/cosmere/models/item/lerasium_iron_alloy_nugget.json +9445767cdca3d4a8ab5c981f79a35e201b554249 assets/cosmere/models/item/lerasium_nicrosil_alloy_nugget.json +65eef0f81e2060f9544e9ea7af25654e4d792bc9 assets/cosmere/models/item/lerasium_nugget.json +fdd3fd92af21f04f9c0978b820b8cbe2839568fa assets/cosmere/models/item/lerasium_pewter_alloy_nugget.json +a73e2bec2db6812ec644b45475ccbc160b7fb53b assets/cosmere/models/item/lerasium_steel_alloy_nugget.json +cd2ad5207e91eaa39569f8ca68af3578a5607222 assets/cosmere/models/item/lerasium_tin_alloy_nugget.json +22a87c9d9cb7df905af996b2fde273fb9dbf5aef assets/cosmere/models/item/lerasium_zinc_alloy_nugget.json +8f9ecdfe13399031e5a39d1145e2866c39a9cf1c assets/cosmere/models/item/malatium_ingot.json +f57901c7644ff165eb5c89a41d9f0c69ec03a6c4 assets/cosmere/models/item/malatium_nugget.json +d7c618ca7626312d43f57accc1b339af9936a5c7 assets/cosmere/models/item/nickel_ingot.json +46c31e028d09311d398f53335c563035e96fc2a0 assets/cosmere/models/item/nickel_nugget.json +849e558e09c4c3e61d84ea170d02a663b68612e2 assets/cosmere/models/item/nicrosil_blend.json +c80c8ace3cc7a8609cfefd970eea5e727a254828 assets/cosmere/models/item/nicrosil_ingot.json +5995927925782312bc72abe0d0abc23d4a498334 assets/cosmere/models/item/nicrosil_nugget.json +2b2586629b25efe942c4afb6c908eba6cb7e1404 assets/cosmere/models/item/pewter_blend.json +0666403a444f6d8a1327e9f5c8c32f30826f1b50 assets/cosmere/models/item/pewter_ingot.json +0c05924f48e0801c5b8cf80e659cf2eedccae883 assets/cosmere/models/item/pewter_nugget.json +13be0a3ba908dc8511928699185513a7568efdbe assets/cosmere/models/item/raw_aluminum_ore.json +305f6f5228b2cd90b62399ff3775660ed385a19c assets/cosmere/models/item/raw_cadmium_ore.json +a07a3f596e73c5faa3f83e1ff7664623d3eaf973 assets/cosmere/models/item/raw_chromium_ore.json +1435eb55decdd62a0de07873ea317cc708d70fb5 assets/cosmere/models/item/raw_lead_ore.json +d910cc40e5b953a0ea542c1fe0560a3d0c26fb95 assets/cosmere/models/item/raw_nickel_ore.json +d13608e9cf2b63cce000390d86297abdd15ffbe4 assets/cosmere/models/item/raw_silver_ore.json +2474b00f8329d13196cf930176bfa7d6eda9fb9f assets/cosmere/models/item/raw_tin_ore.json +01c3d73e21fd81e24c7dd84b8cde32700903d805 assets/cosmere/models/item/raw_zinc_ore.json +48c097a72c5ec827db8f5f5be3ff86ff3ab55f4c assets/cosmere/models/item/silver_ingot.json +07118efcc0d8c84ef3f86877e37660d5cec23e5e assets/cosmere/models/item/silver_nugget.json +d4431a9f3bfcf529871d7eb9bca4579db5f04e8b assets/cosmere/models/item/steel_blend.json +55376e3b0a27ff269117f03e9057dc41990b48a8 assets/cosmere/models/item/steel_ingot.json +799cc8cc78ae34890ff7cb0addd4e2878b6cb803 assets/cosmere/models/item/steel_nugget.json +1632cb3a8e1952ff7301c3d82836f1177ae04700 assets/cosmere/models/item/tin_ingot.json +99a3852f8768de2e239340cf21a0aed96410caf6 assets/cosmere/models/item/tin_nugget.json +ed4a04b929d58a99b5e0b06ddde711944ee54f37 assets/cosmere/models/item/zinc_ingot.json +9620f2acfd4f8e0f8cc1058b14c3d3b0e70f61a4 assets/cosmere/models/item/zinc_nugget.json diff --git a/src/datagen/generated/cosmere/.cache/9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e b/src/datagen/generated/cosmere/.cache/9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e new file mode 100644 index 000000000..0abbf2941 --- /dev/null +++ b/src/datagen/generated/cosmere/.cache/9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e @@ -0,0 +1,354 @@ +// 1.20.1 2025-11-15T14:32:48.0282889 Recipes +d4f7b0297526734faaf6ce62cac5d49069fd2e40 data/cosmere/advancements/recipes/decorations/aluminum_block.json +681730a85e0fbb20839f9be5421df41f7bda0251 data/cosmere/advancements/recipes/decorations/aluminum_ingot.json +b750cee2b3d294b561b263647aefcc90eed3d535 data/cosmere/advancements/recipes/decorations/atium_block.json +d31946cf1a6b3487f9e5c4d7c8169134eb0029b3 data/cosmere/advancements/recipes/decorations/atium_ingot.json +627567236680b26bdc065217fc369ed158baef58 data/cosmere/advancements/recipes/decorations/bendalloy_block.json +eeef774be1c3e92048b2fb9b367e501087d71ccd data/cosmere/advancements/recipes/decorations/bendalloy_ingot.json +4aedaa6a1311f0fc8382ffc28c74bf2797aa9ea2 data/cosmere/advancements/recipes/decorations/brass_block.json +5c227c57681468dd79fb86714625f1b4146dd029 data/cosmere/advancements/recipes/decorations/brass_ingot.json +d4808c3b0e09ef95a98bb09182aca71dd5fd9c4e data/cosmere/advancements/recipes/decorations/bronze_block.json +dc040358290d35dfd6adfab76930f17d096aaa10 data/cosmere/advancements/recipes/decorations/bronze_ingot.json +14e40d4a5535672e3f0d93effbe9c079c6cf287c data/cosmere/advancements/recipes/decorations/cadmium_block.json +9912b201e66a6106bd6f29ad78ab4423d66c7988 data/cosmere/advancements/recipes/decorations/cadmium_ingot.json +38b683af77d34e6a427b7c2c04cc083b8b6c5d98 data/cosmere/advancements/recipes/decorations/chromium_block.json +f65fbb945ce9617744bd8294cd8443de09d378fc data/cosmere/advancements/recipes/decorations/chromium_ingot.json +490ae23bc04bc0a9207c34098c990677aff227fc data/cosmere/advancements/recipes/decorations/duralumin_block.json +c03fa74d826b1ae8a254ed5f90a975b63fb2141c data/cosmere/advancements/recipes/decorations/duralumin_ingot.json +371d161d7f6fdbb7415a5fd76b246341fb7a8289 data/cosmere/advancements/recipes/decorations/electrum_block.json +b693e3101169b477697a27dcd01e6c84eb4fbeb3 data/cosmere/advancements/recipes/decorations/electrum_ingot.json +e714ef81fa41dfd6daa4f56bbb0260bb569cfdda data/cosmere/advancements/recipes/decorations/harmonium_block.json +4ef4a13eff2e8281fa6019957864080896a2e333 data/cosmere/advancements/recipes/decorations/harmonium_ingot.json +3cae5a9b7a3a69f157b294fc93473e3110bc80fe data/cosmere/advancements/recipes/decorations/lead_block.json +308d32269ac2f65e67d37d220c2a291bd564ab8b data/cosmere/advancements/recipes/decorations/lead_ingot.json +77dcc2ab30f94ee4a9c59ac8178741aeccd79794 data/cosmere/advancements/recipes/decorations/lerasatium_block.json +92ac28c2747fd19e7f6c2a32b06d47968f090713 data/cosmere/advancements/recipes/decorations/lerasatium_ingot.json +b6f57a63b78e7991d42c860026150cb7f538b557 data/cosmere/advancements/recipes/decorations/lerasium_block.json +d0bcd39beb814d93fdb0c7068aacfae33a013747 data/cosmere/advancements/recipes/decorations/lerasium_ingot.json +c9c3c25bd3a79cadb7e2af43a8c6225c6a98dc55 data/cosmere/advancements/recipes/decorations/malatium_block.json +c32efee0c4b7dee528b2567b2471c3a0cd1df4cd data/cosmere/advancements/recipes/decorations/malatium_ingot.json +cc2fc697ef3b8e59a16a1f98162a3a207697bd80 data/cosmere/advancements/recipes/decorations/metalworking_table.json +0422f386a093c87986f963269fda7bb8eee2262c data/cosmere/advancements/recipes/decorations/nickel_block.json +2f795776baf9d875bd837dfce05dbce31ce76b3d data/cosmere/advancements/recipes/decorations/nickel_ingot.json +9c09506b96bea6aaf6a01587c0f45d54dd118b26 data/cosmere/advancements/recipes/decorations/nicrosil_block.json +7208791ea1556c85ab1c53829d2a1971b2d449c8 data/cosmere/advancements/recipes/decorations/nicrosil_ingot.json +e2e0f1667ff2e5b959338a8289e4bb8a573d6e20 data/cosmere/advancements/recipes/decorations/pewter_block.json +3ffbd2b837842de9dc3d043eb5e7f907a45d78d7 data/cosmere/advancements/recipes/decorations/pewter_ingot.json +de3fd454428ef996663e25b917d9901fcbf4c7d3 data/cosmere/advancements/recipes/decorations/silver_block.json +f0bdd518fdb64909e788e3e5ac53c3c788059ebb data/cosmere/advancements/recipes/decorations/silver_ingot.json +941e5c57fa2368b7ca0a40b477994dfc0842edb8 data/cosmere/advancements/recipes/decorations/steel_block.json +ad94f830fd86b40709d916258f8d59e65a9129cb data/cosmere/advancements/recipes/decorations/steel_ingot.json +2ec95812c121b55c5cb9e02b3e9cd029802fd96a data/cosmere/advancements/recipes/decorations/tin_block.json +87270ebd377fe576ab273a26c088f2e4e174a11a data/cosmere/advancements/recipes/decorations/tin_ingot.json +19682bee0882e3bc39fa607088222dbbe1c5a9eb data/cosmere/advancements/recipes/decorations/zinc_block.json +aecfae1de3866d351b5fedb237294d3dfad40120 data/cosmere/advancements/recipes/decorations/zinc_ingot.json +de6dc524b1aad77685d3cac7ce87160b7c7c7a79 data/cosmere/advancements/recipes/misc/alloying/dust_blend/bendalloy.json +6bdfd20e3394d1b69a8df4d559670b46eaa8add8 data/cosmere/advancements/recipes/misc/alloying/dust_blend/brass.json +3b656b65293d7e1455d54bc3b38c338bf443d6c7 data/cosmere/advancements/recipes/misc/alloying/dust_blend/bronze.json +701e5478c38bed3509878065eaa525ab61a935fc data/cosmere/advancements/recipes/misc/alloying/dust_blend/duralumin.json +fa2a3a57aebd2c8bbd006a8a2e0c4b02dfdb4353 data/cosmere/advancements/recipes/misc/alloying/dust_blend/electrum.json +8bb6d282aa30e69395836176cde6c81edd1e8374 data/cosmere/advancements/recipes/misc/alloying/dust_blend/nicrosil.json +e4ed1e4d4ed8628a70fff2d8d3b6050fec0afd3a data/cosmere/advancements/recipes/misc/alloying/dust_blend/pewter.json +5924acb71162f1115eb2298a3f3e99178ce0a331 data/cosmere/advancements/recipes/misc/alloying/dust_blend/steel.json +bddba4c190252c5fbe141c013ad0b4c5dab22dac data/cosmere/advancements/recipes/misc/alloying/ingot_blend/bendalloy.json +7fd3c3d50c0e67ea1ce6839b6c008bd944fd4f7a data/cosmere/advancements/recipes/misc/alloying/ingot_blend/brass.json +5eca302e17dff7d62978b87804dc10bfabba04dd data/cosmere/advancements/recipes/misc/alloying/ingot_blend/bronze.json +64cb53c45d68a1c99ca6eecd91143963d8a830dd data/cosmere/advancements/recipes/misc/alloying/ingot_blend/duralumin.json +8c910c6c858eebed08a59fd061f52ec40a19119f data/cosmere/advancements/recipes/misc/alloying/ingot_blend/electrum.json +9991b64962a06cb157bf9d81f2680986c31305d5 data/cosmere/advancements/recipes/misc/alloying/ingot_blend/nicrosil.json +3e8a9cba214533576b737161a9aeda1a93ed8580 data/cosmere/advancements/recipes/misc/alloying/ingot_blend/pewter.json +13c6c841650902eed46d5a82fdf0216f1965ca39 data/cosmere/advancements/recipes/misc/alloying/ingot_blend/steel.json +fc94e4bf2847127f93492a313ac154e89563ee9d data/cosmere/advancements/recipes/misc/alloying/raw_blend/bendalloy.json +029367fbc8ff0095b396bf6be33335f9930f8e4a data/cosmere/advancements/recipes/misc/alloying/raw_blend/brass.json +e2aa143776ecf280cef27a12cd13a947d217608a data/cosmere/advancements/recipes/misc/alloying/raw_blend/bronze.json +bb9a7663e02f97764e351a044ab14ebc58fa5b6c data/cosmere/advancements/recipes/misc/alloying/raw_blend/duralumin.json +55263ed3f25cc0fbcfc765e5547d18a24e2931b9 data/cosmere/advancements/recipes/misc/alloying/raw_blend/electrum.json +f06b9ee6fbf5d3969b1d2ecd18cce9bd3530d2de data/cosmere/advancements/recipes/misc/alloying/raw_blend/nicrosil.json +6bfeeaef8a4c703e8f510319de31e9c41ec887e0 data/cosmere/advancements/recipes/misc/alloying/raw_blend/pewter.json +1c276fdc4e44ee0123678f7281ada66dfea6459f data/cosmere/advancements/recipes/misc/alloying/raw_blend/steel.json +c7e6aa166c29193cf7a83b19845f75beec514cec data/cosmere/advancements/recipes/misc/aluminum_ingot_from_blasting_aluminum_ore.json +55467c06d52be72677d2908961f895c568782fa2 data/cosmere/advancements/recipes/misc/aluminum_ingot_from_blasting_deepslate_aluminum_ore.json +248bfad1a1eb898bf0c1909a48b6c5861aa7ca44 data/cosmere/advancements/recipes/misc/aluminum_ingot_from_blasting_raw_aluminum_ore.json +4b16a3704599e05a64dea1ec6cbe9668fde79478 data/cosmere/advancements/recipes/misc/aluminum_ingot_from_smelting_aluminum_ore.json +c9fe0f3e92644b7a6d3028dfa13e4ffa12af4d18 data/cosmere/advancements/recipes/misc/aluminum_ingot_from_smelting_deepslate_aluminum_ore.json +a5ec44e370311037f941a04ed8f4389450649db7 data/cosmere/advancements/recipes/misc/aluminum_ingot_from_smelting_raw_aluminum_ore.json +c643a34c452d8168369c02896ce61fe422011971 data/cosmere/advancements/recipes/misc/bendalloy_ingot_from_blasting_bendalloy_blend.json +11d6f0c8cea954b1b2d9b056bc85d0f57f98fe44 data/cosmere/advancements/recipes/misc/bendalloy_ingot_from_smelting_bendalloy_blend.json +654e4bcd5a4be48d8530a8ff8d400864255f31aa data/cosmere/advancements/recipes/misc/brass_ingot_from_blasting_brass_blend.json +884fa590a388ccd322d232e746cb39f2446619f9 data/cosmere/advancements/recipes/misc/brass_ingot_from_smelting_brass_blend.json +f36f884d7a6ebc3ef5eb9fc1a6eb5d1ae3df0e66 data/cosmere/advancements/recipes/misc/bronze_ingot_from_blasting_bronze_blend.json +5b33f4de42fd8314ec733d83c2b4128a60d2be4a data/cosmere/advancements/recipes/misc/bronze_ingot_from_smelting_bronze_blend.json +d649575e96df6ab2ca9e49543ffefe4a50d3c5d9 data/cosmere/advancements/recipes/misc/cadmium_ingot_from_blasting_cadmium_ore.json +580233d5bf769b65ce6201cbef01e136e8b69351 data/cosmere/advancements/recipes/misc/cadmium_ingot_from_blasting_deepslate_cadmium_ore.json +e11f6f1bc1c1fc0ae0d86b53316cb33d4da7c064 data/cosmere/advancements/recipes/misc/cadmium_ingot_from_blasting_raw_cadmium_ore.json +a9e579b8046f7b64d324660d84de3a5eb937bd68 data/cosmere/advancements/recipes/misc/cadmium_ingot_from_smelting_cadmium_ore.json +9b57ac1bc7389f50ff18fe567fef5372d96b2f42 data/cosmere/advancements/recipes/misc/cadmium_ingot_from_smelting_deepslate_cadmium_ore.json +bb2f7f8ab20511a0ced59c8b3269014382e83e31 data/cosmere/advancements/recipes/misc/cadmium_ingot_from_smelting_raw_cadmium_ore.json +cc7f118a8b5b60b03addf11addfea550b6be169a data/cosmere/advancements/recipes/misc/chromium_ingot_from_blasting_chromium_ore.json +caa5510eaa1acf417e0f3248e6483ce9d81664e0 data/cosmere/advancements/recipes/misc/chromium_ingot_from_blasting_deepslate_chromium_ore.json +3315318572cd176c1532f22855a9a05bf1a672a6 data/cosmere/advancements/recipes/misc/chromium_ingot_from_blasting_raw_chromium_ore.json +d6e7c5919263ed995b6e1edd6c562a3e9724cb8c data/cosmere/advancements/recipes/misc/chromium_ingot_from_smelting_chromium_ore.json +09139aa814e3ff221f8e84e9e0b34c62d9e837e7 data/cosmere/advancements/recipes/misc/chromium_ingot_from_smelting_deepslate_chromium_ore.json +1ce1375898ce194e21969d9931b2889f1c6d5cfb data/cosmere/advancements/recipes/misc/chromium_ingot_from_smelting_raw_chromium_ore.json +dbc0b939398763dcdfa0ca8a5bd9d20cc85d65a5 data/cosmere/advancements/recipes/misc/conversions/aluminum_block_deconstruct.json +659f091523822870e0b5c819783e976e59d8f414 data/cosmere/advancements/recipes/misc/conversions/aluminum_item_deconstruct.json +dbc010d11d586d1322bd0adb0a5f1baabeefe4cf data/cosmere/advancements/recipes/misc/conversions/atium_block_deconstruct.json +594e40ee46c4b08b29b8319f69539643b736ee85 data/cosmere/advancements/recipes/misc/conversions/atium_item_deconstruct.json +98b94a773b82e90dff928a615b5e9aaf5c2ce5f3 data/cosmere/advancements/recipes/misc/conversions/bendalloy_block_deconstruct.json +a1a7362f8b093200c65077c55d176bb7d63fe9e3 data/cosmere/advancements/recipes/misc/conversions/bendalloy_item_deconstruct.json +bb8c793713f8c0a32b9d2d8d3c058075d42afac0 data/cosmere/advancements/recipes/misc/conversions/brass_block_deconstruct.json +ffd249086072b7ec76de5173f0537a651e66973c data/cosmere/advancements/recipes/misc/conversions/brass_item_deconstruct.json +c5bff33ea00b5a63e76f40930bfd8e7433573a2e data/cosmere/advancements/recipes/misc/conversions/bronze_block_deconstruct.json +de1ffb6dad2cdfff5237e369a28d96354182b1e4 data/cosmere/advancements/recipes/misc/conversions/bronze_item_deconstruct.json +b70611b765caed1df9458a40ea36b80d7e18f791 data/cosmere/advancements/recipes/misc/conversions/cadmium_block_deconstruct.json +edd649debcc61d9de30b18a9507a7fc3fdc37bd2 data/cosmere/advancements/recipes/misc/conversions/cadmium_item_deconstruct.json +5cc899f38e772555b5b4f4a7eaad8396ec981089 data/cosmere/advancements/recipes/misc/conversions/chromium_block_deconstruct.json +ac26d2d5577a16c67e42c855a46c20c73f8b4aa8 data/cosmere/advancements/recipes/misc/conversions/chromium_item_deconstruct.json +96d06c0eb7c7b4104022e5adf20841b5244f92af data/cosmere/advancements/recipes/misc/conversions/copper_item_deconstruct.json +5e73ff7e74ba57b88043f66ed1a26affa3db9afc data/cosmere/advancements/recipes/misc/conversions/duralumin_block_deconstruct.json +760eb4df0dd4e40ce4673da1cb51c2c06503ea36 data/cosmere/advancements/recipes/misc/conversions/duralumin_item_deconstruct.json +6768c27277ed3709692a9b0ce7ff2345d2d1900b data/cosmere/advancements/recipes/misc/conversions/electrum_block_deconstruct.json +1c357b17c43d7a3434fb1d15a8bfd4f67c9f14bb data/cosmere/advancements/recipes/misc/conversions/electrum_item_deconstruct.json +2d039025ec49cff788309f50023d90f5dc515800 data/cosmere/advancements/recipes/misc/conversions/harmonium_block_deconstruct.json +329eb749169c732714d549391d378815036b9244 data/cosmere/advancements/recipes/misc/conversions/harmonium_item_deconstruct.json +14d5adab97c136743fc0c292428139cbba7d59b9 data/cosmere/advancements/recipes/misc/conversions/lead_block_deconstruct.json +12d9f9ce91f202aa020bb6ee173d37754e02225b data/cosmere/advancements/recipes/misc/conversions/lead_item_deconstruct.json +eaf60b4440cbd54d83b22c8b780825571ed26fe9 data/cosmere/advancements/recipes/misc/conversions/lerasatium_block_deconstruct.json +c1dc2f1a234d6fd1f3b22ba4e8c96bdaef7cfe21 data/cosmere/advancements/recipes/misc/conversions/lerasatium_item_deconstruct.json +27edd917293def5ec9a7aed15130398dae268bcb data/cosmere/advancements/recipes/misc/conversions/lerasium_block_deconstruct.json +bb274ce62b99aa5b2e9bca20c5798d284230a1fb data/cosmere/advancements/recipes/misc/conversions/lerasium_item_deconstruct.json +fd0f0e33312dd33c38585424106b464fa490f6d0 data/cosmere/advancements/recipes/misc/conversions/malatium_block_deconstruct.json +4f74f10ffcadbd766f1988ce7fa397696ba6ce20 data/cosmere/advancements/recipes/misc/conversions/malatium_item_deconstruct.json +9226b65f455009ac8e452ba06553829e23262c35 data/cosmere/advancements/recipes/misc/conversions/nickel_block_deconstruct.json +94a21cd66be726ce1254896e85fb6f0f8a90488c data/cosmere/advancements/recipes/misc/conversions/nickel_item_deconstruct.json +3ff67f116262653cf394a477afc2b08226907ffb data/cosmere/advancements/recipes/misc/conversions/nicrosil_block_deconstruct.json +83ac2dc75451531de311c639addb4aa2619c4e23 data/cosmere/advancements/recipes/misc/conversions/nicrosil_item_deconstruct.json +1dce2679077f9a17a06b570dd51a11f70c40e710 data/cosmere/advancements/recipes/misc/conversions/pewter_block_deconstruct.json +669d3030ee9ceedc96a5be6857dbeb322379890a data/cosmere/advancements/recipes/misc/conversions/pewter_item_deconstruct.json +b36df511264d99a0ac1a48fb3aee616f706b997c data/cosmere/advancements/recipes/misc/conversions/silver_block_deconstruct.json +509f2d427b91d37d3ca48a2846ea41b68e796a5f data/cosmere/advancements/recipes/misc/conversions/silver_item_deconstruct.json +f01ed9fe9b557b62a5451ed4423673ce5812a0bb data/cosmere/advancements/recipes/misc/conversions/steel_block_deconstruct.json +17d5565804458bbfacec740ef98fe3feffa299dd data/cosmere/advancements/recipes/misc/conversions/steel_item_deconstruct.json +2d718f2075b9e3379d493d63939a0f79943ac501 data/cosmere/advancements/recipes/misc/conversions/tin_block_deconstruct.json +4a31391d736ae0a2b8908506c7af5a8368865a1a data/cosmere/advancements/recipes/misc/conversions/tin_item_deconstruct.json +1dfbfe605d1780ae4c270914a717c6f12a567a70 data/cosmere/advancements/recipes/misc/conversions/zinc_block_deconstruct.json +adb1d78194fe89558879cdae85bf20b82007d53c data/cosmere/advancements/recipes/misc/conversions/zinc_item_deconstruct.json +a0b1993f5f6ef980f0fe9c351db512ac0e84af31 data/cosmere/advancements/recipes/misc/duralumin_ingot_from_blasting_duralumin_blend.json +5555e5c100bd7b804344ddfb6c6ea80ed204f175 data/cosmere/advancements/recipes/misc/duralumin_ingot_from_smelting_duralumin_blend.json +0e10b0fb67bddbe8e023b18f0e9974e883f534d7 data/cosmere/advancements/recipes/misc/electrum_ingot_from_blasting_electrum_blend.json +16785ac3722c92b31faa145ddffe92f3257ed0f2 data/cosmere/advancements/recipes/misc/electrum_ingot_from_smelting_electrum_blend.json +74ec3e1d84e37bd79d815de56b4ba08447a6852d data/cosmere/advancements/recipes/misc/lead_ingot_from_blasting_deepslate_lead_ore.json +ab3af6154116ab63676b766b762a6d6775d08e39 data/cosmere/advancements/recipes/misc/lead_ingot_from_blasting_lead_ore.json +f74b4d5daf0b2de67ac1279f4431a8d0a40536a5 data/cosmere/advancements/recipes/misc/lead_ingot_from_blasting_raw_lead_ore.json +4677ad6ab84978723788a61856fa18de55cb3f20 data/cosmere/advancements/recipes/misc/lead_ingot_from_smelting_deepslate_lead_ore.json +78c7450aab83fb92a217ed88c34730957c67bff1 data/cosmere/advancements/recipes/misc/lead_ingot_from_smelting_lead_ore.json +d576db25f5c71b4c77958c2104444e7523b04032 data/cosmere/advancements/recipes/misc/lead_ingot_from_smelting_raw_lead_ore.json +08b7debec020216a21c67912eeb8cfc7fdddc3c2 data/cosmere/advancements/recipes/misc/nickel_ingot_from_blasting_deepslate_nickel_ore.json +8110c799bbb2a42d7921bef97593bf5c47f32416 data/cosmere/advancements/recipes/misc/nickel_ingot_from_blasting_nickel_ore.json +6b963b370cd777d523d2d29087b4ffafbf3e9d66 data/cosmere/advancements/recipes/misc/nickel_ingot_from_blasting_raw_nickel_ore.json +dbe7b91a4edf28c839f83db210bf41a32e9ec863 data/cosmere/advancements/recipes/misc/nickel_ingot_from_smelting_deepslate_nickel_ore.json +6952681b2576348a236a0b8378de63016540839a data/cosmere/advancements/recipes/misc/nickel_ingot_from_smelting_nickel_ore.json +b41388e8ebbf0f8ee8ee0fdc1832c3892efcc6da data/cosmere/advancements/recipes/misc/nickel_ingot_from_smelting_raw_nickel_ore.json +4d00617ccb862cf719df18fb39d52fac19d93265 data/cosmere/advancements/recipes/misc/nicrosil_ingot_from_blasting_nicrosil_blend.json +4ee52299ea03ea98aab812d56646f8d1c15d3788 data/cosmere/advancements/recipes/misc/nicrosil_ingot_from_smelting_nicrosil_blend.json +80232801d35653b36e7e3a2414594450f7ae7606 data/cosmere/advancements/recipes/misc/pewter_ingot_from_blasting_pewter_blend.json +c0cbe3263ca179de215e20cbc7b43ef492aaa517 data/cosmere/advancements/recipes/misc/pewter_ingot_from_smelting_pewter_blend.json +824902778d24462a0c00d159fc8b62b4b2c21bd8 data/cosmere/advancements/recipes/misc/silver_ingot_from_blasting_deepslate_silver_ore.json +60a9563d51a9083f36ef89eea2cadd3b4ec04f3a data/cosmere/advancements/recipes/misc/silver_ingot_from_blasting_raw_silver_ore.json +91f240c493272c39e0d7932209ac52c790ea7a42 data/cosmere/advancements/recipes/misc/silver_ingot_from_blasting_silver_ore.json +826cadf1dec3c35cb0fbe040511f949e4d0f8edd data/cosmere/advancements/recipes/misc/silver_ingot_from_smelting_deepslate_silver_ore.json +fa1f9b894b48ea76ccdcf2bf57ce8831b9374537 data/cosmere/advancements/recipes/misc/silver_ingot_from_smelting_raw_silver_ore.json +c91f31236e101ba340087b2622cd41afbead70b6 data/cosmere/advancements/recipes/misc/silver_ingot_from_smelting_silver_ore.json +ad65644e5bcee67a88859e11dc10cc1a70f553a7 data/cosmere/advancements/recipes/misc/steel_ingot_from_blasting_steel_blend.json +d296485ac06132b8b67f2491bfade1f27bab7317 data/cosmere/advancements/recipes/misc/steel_ingot_from_smelting_steel_blend.json +1b2c2d6a0ec037c2f9754e375f615fe3f088c4b1 data/cosmere/advancements/recipes/misc/tin_ingot_from_blasting_deepslate_tin_ore.json +b257698a62ae276f396018dfa7cc608c98f075e6 data/cosmere/advancements/recipes/misc/tin_ingot_from_blasting_raw_tin_ore.json +c5caff3b416e1b3603c29662c2a7d088406d2ebc data/cosmere/advancements/recipes/misc/tin_ingot_from_blasting_tin_ore.json +8629b03e645594fdee2194e59faa5808939b2ea5 data/cosmere/advancements/recipes/misc/tin_ingot_from_smelting_deepslate_tin_ore.json +9b9c4fd59de15084c37232e6facdf44335298cfd data/cosmere/advancements/recipes/misc/tin_ingot_from_smelting_raw_tin_ore.json +cf45fab24fc596f37f3b768c44b2f54bc834d01c data/cosmere/advancements/recipes/misc/tin_ingot_from_smelting_tin_ore.json +d780cc77d9edf3f921a3dfda492dcbbe6f151fd4 data/cosmere/advancements/recipes/misc/zinc_ingot_from_blasting_deepslate_zinc_ore.json +ae5ac929902e60409ea5b64ba91d9a45ba8ab649 data/cosmere/advancements/recipes/misc/zinc_ingot_from_blasting_raw_zinc_ore.json +8aa5cc9016eba40fd6d888bc3003108e06de8cd8 data/cosmere/advancements/recipes/misc/zinc_ingot_from_blasting_zinc_ore.json +736a537ee81c023c37befa4f3ee8f092deb3cfe2 data/cosmere/advancements/recipes/misc/zinc_ingot_from_smelting_deepslate_zinc_ore.json +e4f408c665c05ff55bb87398e03b7fe73903b5cd data/cosmere/advancements/recipes/misc/zinc_ingot_from_smelting_raw_zinc_ore.json +63e94573946cab9081cbe3abd2875c2b3eb47615 data/cosmere/advancements/recipes/misc/zinc_ingot_from_smelting_zinc_ore.json +5828b1d48cf99c2a59a53e2e765abadddc9a42fa data/cosmere/recipes/alloying/dust_blend/bendalloy.json +565b4c7cb207d6761e85d50baa6c77425c438988 data/cosmere/recipes/alloying/dust_blend/brass.json +99495bb48bc6e337594db9897eea7c37ed41356e data/cosmere/recipes/alloying/dust_blend/bronze.json +dfdbe66488d7f833673e0f648742cbabddd4cf9d data/cosmere/recipes/alloying/dust_blend/duralumin.json +279fcfc89c44e2eccc02f68c3cbe006847eccbf8 data/cosmere/recipes/alloying/dust_blend/electrum.json +46b9e6d6b88b6e80e7ad854d8ff47456c4a49009 data/cosmere/recipes/alloying/dust_blend/nicrosil.json +40c762a1c9eda75549a887db61912fc919f63203 data/cosmere/recipes/alloying/dust_blend/pewter.json +b3736cfd9022dfaa253366a9afc9e59ce58c4661 data/cosmere/recipes/alloying/dust_blend/steel.json +9c2a14dfae081d59bcb4996dc0ab7e05403d2b41 data/cosmere/recipes/alloying/ingot_blend/bendalloy.json +913d58f7de2d13f356144f175707a816951efaf0 data/cosmere/recipes/alloying/ingot_blend/brass.json +0b4da0c96b68a461ae08002c24d0816e4f5c3103 data/cosmere/recipes/alloying/ingot_blend/bronze.json +396f8e2bfccfcf21f4a178a00c33d1f4490a852e data/cosmere/recipes/alloying/ingot_blend/duralumin.json +95414d4a6f724e975de6f7290c02a3d84df4d3b6 data/cosmere/recipes/alloying/ingot_blend/electrum.json +850379e04c6ad326e1b2e2248d07ea2bd36c712c data/cosmere/recipes/alloying/ingot_blend/nicrosil.json +a2048c2db5f00db2bbef261fb460b340f2fb7ee0 data/cosmere/recipes/alloying/ingot_blend/pewter.json +00b309bd1a576e90c37d028c3329aa84b811a5e0 data/cosmere/recipes/alloying/ingot_blend/steel.json +8e6ea1358f05ba862eb82382ba65b353245d5077 data/cosmere/recipes/alloying/raw_blend/bendalloy.json +738cc9e3e003e328b74550eaea5b726cefbc783e data/cosmere/recipes/alloying/raw_blend/brass.json +ab33404dbd3c8ef272e50c46cf7a7b3d3867ec4d data/cosmere/recipes/alloying/raw_blend/bronze.json +4750c6431713f41f0607b8f68cfda8f17f4a5ab2 data/cosmere/recipes/alloying/raw_blend/duralumin.json +288019d5335e08f8c35e1d8e920e4512293f87a7 data/cosmere/recipes/alloying/raw_blend/electrum.json +c0397e976ef251d4974e8fe4b1e3ced2f49120ac data/cosmere/recipes/alloying/raw_blend/nicrosil.json +68f1f0393f26e5d42dfb484aca244afa6506d0a4 data/cosmere/recipes/alloying/raw_blend/pewter.json +34f6bd44b47c401e5f821e1d00dfa3773e3d989e data/cosmere/recipes/alloying/raw_blend/steel.json +97785477bd36295debdd9bd349626ab352b6ff51 data/cosmere/recipes/aluminum_block.json +b3b742c293cdd97491de9245c27b5632ca993fe5 data/cosmere/recipes/aluminum_ingot.json +91f9468690afd0f2649f22df98b93f9b7dde30d8 data/cosmere/recipes/aluminum_ingot_from_blasting_aluminum_ore.json +5f3466afeef40d225158d61f28e2196eb7954542 data/cosmere/recipes/aluminum_ingot_from_blasting_deepslate_aluminum_ore.json +837a1031610f9dd0c243094718196be06ce21352 data/cosmere/recipes/aluminum_ingot_from_blasting_raw_aluminum_ore.json +9212d392d1bc1f7fec0b90dce25fffea415941c5 data/cosmere/recipes/aluminum_ingot_from_smelting_aluminum_ore.json +ca869346d604b30e821a81b230b8661deb4b73cf data/cosmere/recipes/aluminum_ingot_from_smelting_deepslate_aluminum_ore.json +cfbec38ff039bf527f4138809b0739b0f62b65b0 data/cosmere/recipes/aluminum_ingot_from_smelting_raw_aluminum_ore.json +50415eac94053a306fa144ae0104de33dfec7831 data/cosmere/recipes/atium_block.json +a01c4b09c3aee28edd3d338701f80adef04f4ed5 data/cosmere/recipes/atium_ingot.json +d5ade124fe24c32556f5b854100a897e16811374 data/cosmere/recipes/bendalloy_block.json +188350bf26b74eb700ab96d9478fa40ef88a6036 data/cosmere/recipes/bendalloy_ingot.json +c119f5247e6064657ee878289f8e0b9780d85734 data/cosmere/recipes/bendalloy_ingot_from_blasting_bendalloy_blend.json +4959a3f1cd5dd441b7755b4724114ece91cad6b7 data/cosmere/recipes/bendalloy_ingot_from_smelting_bendalloy_blend.json +d376b3d0403d9ada3b60cd52181b348d38d5e53e data/cosmere/recipes/brass_block.json +429a21ae7eae55bf9c99d1c8878c5f9ee1287314 data/cosmere/recipes/brass_ingot.json +4c0c362cbe20ad1bb82254102e297826fe9900bb data/cosmere/recipes/brass_ingot_from_blasting_brass_blend.json +f14a5769d140497098086db7b6229991f26b5be1 data/cosmere/recipes/brass_ingot_from_smelting_brass_blend.json +2568525e67813acc0035e0c2c164a8a5b73b5223 data/cosmere/recipes/bronze_block.json +1647649f44c85485aa0c69e2d52ffc40c5baf46f data/cosmere/recipes/bronze_ingot.json +ec74d4b245d594abcd3cce1b526b8e6a61a0eee7 data/cosmere/recipes/bronze_ingot_from_blasting_bronze_blend.json +9c323d95658b7f597f505e7f75bc645a9cb3b232 data/cosmere/recipes/bronze_ingot_from_smelting_bronze_blend.json +47e379c5e2fc28ed952b778a4dee724423d17ec5 data/cosmere/recipes/cadmium_block.json +f690ae900dffc6ec7ac0d449368f51326e142cf1 data/cosmere/recipes/cadmium_ingot.json +078dc6939c4682e67cf4bdfb942500f6f7e3353e data/cosmere/recipes/cadmium_ingot_from_blasting_cadmium_ore.json +f8a4050a8c9d36a5a853621c6a7e71d6858eb60b data/cosmere/recipes/cadmium_ingot_from_blasting_deepslate_cadmium_ore.json +8df7176838ef18e6ef85888f18d80e89ab154833 data/cosmere/recipes/cadmium_ingot_from_blasting_raw_cadmium_ore.json +d11f547f22b3794ec9b6dce10827cec65e964ec8 data/cosmere/recipes/cadmium_ingot_from_smelting_cadmium_ore.json +7f5bca594444f16e7283b950cb76c05455635c29 data/cosmere/recipes/cadmium_ingot_from_smelting_deepslate_cadmium_ore.json +188d5441bdf9625271144c29b91ed6f532507e92 data/cosmere/recipes/cadmium_ingot_from_smelting_raw_cadmium_ore.json +bb2964f1513172f74db4f0999cfc76dde2f07182 data/cosmere/recipes/chromium_block.json +4e785ac0a6affd143c555e640f2848f8f4ff0265 data/cosmere/recipes/chromium_ingot.json +26784539bf73616bd03e0492c9a8bc3751494cc1 data/cosmere/recipes/chromium_ingot_from_blasting_chromium_ore.json +f022736550def991a6ce11a6105553b7aa1e5b1b data/cosmere/recipes/chromium_ingot_from_blasting_deepslate_chromium_ore.json +030be79dbb66e13d0457da0718a2cba7907f8e93 data/cosmere/recipes/chromium_ingot_from_blasting_raw_chromium_ore.json +d64797176bbf359324f6c0649dffad535ba0df32 data/cosmere/recipes/chromium_ingot_from_smelting_chromium_ore.json +df3cb1f0fe2674c0e0b4deeb20d68be7e0223c5a data/cosmere/recipes/chromium_ingot_from_smelting_deepslate_chromium_ore.json +26c89431560194ed85b13404177063add4cbdf9c data/cosmere/recipes/chromium_ingot_from_smelting_raw_chromium_ore.json +4d7d4b24afbb4931ceb6f55dc0413f470eaffc7c data/cosmere/recipes/conversions/aluminum_block_deconstruct.json +1f73890dbe2be61e03977a713b960b328b7a2087 data/cosmere/recipes/conversions/aluminum_item_deconstruct.json +680c0658b68f344bca81f327ad3bf74a4da18795 data/cosmere/recipes/conversions/atium_block_deconstruct.json +096dc7eb84e6e60c4dcf3118f92218917a1baaaa data/cosmere/recipes/conversions/atium_item_deconstruct.json +c32019d369a231302c373b5418d3f2ca415052a2 data/cosmere/recipes/conversions/bendalloy_block_deconstruct.json +93fa65e4a6c54d997c9e9676b8bd4cd90155359c data/cosmere/recipes/conversions/bendalloy_item_deconstruct.json +f7014f16f2a82bdbfb0262389dfa2ff009432f6b data/cosmere/recipes/conversions/brass_block_deconstruct.json +479f70a1f7030f2b27d561e11c92300040225a74 data/cosmere/recipes/conversions/brass_item_deconstruct.json +687065d3b415aa10e13e763ee736a32ca4556452 data/cosmere/recipes/conversions/bronze_block_deconstruct.json +71185efcaf6d183d6139804d92096172acee344f data/cosmere/recipes/conversions/bronze_item_deconstruct.json +fa5a8654f1945037d77510f8ebbd8d8bc07cca3c data/cosmere/recipes/conversions/cadmium_block_deconstruct.json +c4f16c1dabbdf3deda2650b98f2272f448f4f01b data/cosmere/recipes/conversions/cadmium_item_deconstruct.json +a0bf45a47386b68325b4e1984fd8626c5f87e309 data/cosmere/recipes/conversions/chromium_block_deconstruct.json +1b67ce39eb539a3e3f84a96159f1cf2602b25b5e data/cosmere/recipes/conversions/chromium_item_deconstruct.json +0084357fac5c24594265f91687d85d3ef237a9f7 data/cosmere/recipes/conversions/copper_item_deconstruct.json +7f26451ae0f641c45a865a4c5427f4e23d8c0ab3 data/cosmere/recipes/conversions/duralumin_block_deconstruct.json +ece851d4f1b9da48bee3133be5aba10f3d72ae8e data/cosmere/recipes/conversions/duralumin_item_deconstruct.json +2c943c58f26789a8feee9b05471d473b38c4b272 data/cosmere/recipes/conversions/electrum_block_deconstruct.json +79ca04523d1b2ed9c921b4d669d33848190eeadb data/cosmere/recipes/conversions/electrum_item_deconstruct.json +9c0547bd88bbf7c5b1ceb54b8780e51267e33b7b data/cosmere/recipes/conversions/harmonium_block_deconstruct.json +e5a593c779c7d8efcdb7d945f545e579b563c2a5 data/cosmere/recipes/conversions/harmonium_item_deconstruct.json +f10ee6f07670b583fc8d56c21c8bf16ed860820b data/cosmere/recipes/conversions/lead_block_deconstruct.json +04935fac62043daebfa92bec2cbbbf126aa1fc3f data/cosmere/recipes/conversions/lead_item_deconstruct.json +ba927c70c851b5fe745cedc39c246bd837dec975 data/cosmere/recipes/conversions/lerasatium_block_deconstruct.json +63a7e4b091da9d0c5706874f34c8e97b3c62ef08 data/cosmere/recipes/conversions/lerasatium_item_deconstruct.json +2c2fbad486619b5912f3150505802f9e9715461d data/cosmere/recipes/conversions/lerasium_block_deconstruct.json +eb136b12ae8a72b0e0e09724698d053148fa75f9 data/cosmere/recipes/conversions/lerasium_item_deconstruct.json +d4b725ddc9a2fbd493c3216abbdcc18592358a69 data/cosmere/recipes/conversions/malatium_block_deconstruct.json +689b14a3a023557584c1c058b0fc2c2b06efaa04 data/cosmere/recipes/conversions/malatium_item_deconstruct.json +2866e6f39fd8c0ce152db25ffb4a93a381ab204e data/cosmere/recipes/conversions/nickel_block_deconstruct.json +f5b3cc2fac61b4c1f8b13695f7a57be0ff0d8efc data/cosmere/recipes/conversions/nickel_item_deconstruct.json +ed35caf7c1137a626c8c47564b86834b16e4f789 data/cosmere/recipes/conversions/nicrosil_block_deconstruct.json +3a6a39cd39fcb5902f5026019accc0c138c8422c data/cosmere/recipes/conversions/nicrosil_item_deconstruct.json +ef036ef285bc227b43b4fbb6eb121d1ee8344d8c data/cosmere/recipes/conversions/pewter_block_deconstruct.json +ee50d2d2a430f17b658067eb7f2f9ccfd00a6dc7 data/cosmere/recipes/conversions/pewter_item_deconstruct.json +2da989633a1736711544b751c68fd3f8b01fe8b1 data/cosmere/recipes/conversions/silver_block_deconstruct.json +e6478c6dc86f615c2a3ccb6a2ae7bb52aaf5ffb9 data/cosmere/recipes/conversions/silver_item_deconstruct.json +f5cfb9a18ba62978b92bff60dc506b147476367b data/cosmere/recipes/conversions/steel_block_deconstruct.json +583febf686de5b643e9c3748ea43ff9833122c5c data/cosmere/recipes/conversions/steel_item_deconstruct.json +224c8591f11013dada7eedbae5f3800b0eed64ed data/cosmere/recipes/conversions/tin_block_deconstruct.json +1bb3b1c7751740d881003c713ab35b81a6f4c5a6 data/cosmere/recipes/conversions/tin_item_deconstruct.json +c88dc59d28af370757edcceb5e2b7d7725bda629 data/cosmere/recipes/conversions/zinc_block_deconstruct.json +cc80cff2c8c790e49086d36e267878fa952275c6 data/cosmere/recipes/conversions/zinc_item_deconstruct.json +6ee94921dd2ca1e05f292bfa89a59dbfaf40cc92 data/cosmere/recipes/crafting_god_metal_alloy_nugget_recipe.json +3bc69b37cc66cbd3d4f86e4c5867b36eec15c7c5 data/cosmere/recipes/crafting_god_metal_nuggets_compress.json +227ef6bf76de263e59813751ed168afbedb87bea data/cosmere/recipes/crafting_god_metal_nuggets_decompress.json +40cc2403498dbf72ad1969d2a4fcce3b06629dc3 data/cosmere/recipes/duralumin_block.json +ce0a4b09393b1ee9a95e2180d3e4d2ec22beb9a5 data/cosmere/recipes/duralumin_ingot.json +d41c016a9203e5fa4698b8095cb13699cbce1b7d data/cosmere/recipes/duralumin_ingot_from_blasting_duralumin_blend.json +afa3542d017e17d9cf68eaeb1821095fb83d06f2 data/cosmere/recipes/duralumin_ingot_from_smelting_duralumin_blend.json +8439149e9923a76886e85abf5858173c5137810a data/cosmere/recipes/electrum_block.json +de53ae88754bfa98d49f5ef8f09b9522c35ea465 data/cosmere/recipes/electrum_ingot.json +8e3e5e0294b749fb2341e2c2f2f1ec6faa52f6f4 data/cosmere/recipes/electrum_ingot_from_blasting_electrum_blend.json +a9a0427e3c9ba47ba2c7474c43a51141a3b4cb67 data/cosmere/recipes/electrum_ingot_from_smelting_electrum_blend.json +677fe17fb4f783c2f07dca8fabdc7cc3ce6e864f data/cosmere/recipes/harmonium_block.json +8396175c7cdac3962b4e3e708aa76f50969d3598 data/cosmere/recipes/harmonium_ingot.json +3083d9105a3f8a361b131bb40b8fed41ef9b01dc data/cosmere/recipes/lead_block.json +335602babc1a40ca027455f7910bbf74af6d8a6f data/cosmere/recipes/lead_ingot.json +622f55be8cfe62813c8d8b51f236134fbf23f720 data/cosmere/recipes/lead_ingot_from_blasting_deepslate_lead_ore.json +7fc62fd2c57c463a7a188699abfea35654981c0b data/cosmere/recipes/lead_ingot_from_blasting_lead_ore.json +97ea160d6001952a0f3a151bf3bf55f89f64007c data/cosmere/recipes/lead_ingot_from_blasting_raw_lead_ore.json +cbafd94777d0addfa5a19470bc1d979a812367ed data/cosmere/recipes/lead_ingot_from_smelting_deepslate_lead_ore.json +d85ff0d67bdefa44c264e393f41e7aee4117c837 data/cosmere/recipes/lead_ingot_from_smelting_lead_ore.json +0cea66c88f33221c597baf531911200f2cc40850 data/cosmere/recipes/lead_ingot_from_smelting_raw_lead_ore.json +095ea0c3b34156ee3650784788241c294217f3b3 data/cosmere/recipes/lerasatium_block.json +5434dea0787237fdd04c2980e96432bdb11c5648 data/cosmere/recipes/lerasatium_ingot.json +22f6d8f8198f37736de99e3766694595d6ca7791 data/cosmere/recipes/lerasium_block.json +d38c0f4982c4e0bb0bed4e4f32fd95e187cd67d8 data/cosmere/recipes/lerasium_ingot.json +0c76ea75be9e38f063364b0aacc9d352f08b9369 data/cosmere/recipes/malatium_block.json +f914257362b05a531c02e5f215fc15597d6c1bc4 data/cosmere/recipes/malatium_ingot.json +9a0ddbbec0e8d5af056cda266ce79e01a0f59352 data/cosmere/recipes/metalworking_table.json +54a9381669efb4a66863b15db99ce9db39c97b0e data/cosmere/recipes/nickel_block.json +0c926786eba8f093b28d7f9261956760c1a1d547 data/cosmere/recipes/nickel_ingot.json +d94ce97418dd34512a0ca20a703c77b5306c2a90 data/cosmere/recipes/nickel_ingot_from_blasting_deepslate_nickel_ore.json +53b2dd5ba0a7c93dd6e4a25ef0c03a80e4ce481d data/cosmere/recipes/nickel_ingot_from_blasting_nickel_ore.json +e19d7be826650d794354afad8371dd325ae6ac0f data/cosmere/recipes/nickel_ingot_from_blasting_raw_nickel_ore.json +20c586a108c59ac64fffd6492ff3f67da4664e8f data/cosmere/recipes/nickel_ingot_from_smelting_deepslate_nickel_ore.json +c064d1760e70d169ff4741fa0061cc29f9b79817 data/cosmere/recipes/nickel_ingot_from_smelting_nickel_ore.json +ac423cc09c7210fd3f7c7dd30304d202f85eb762 data/cosmere/recipes/nickel_ingot_from_smelting_raw_nickel_ore.json +da49f3eeb29a50a85ae3b1a646895548b1ce2712 data/cosmere/recipes/nicrosil_block.json +40138f925fd1d9dd859f838868fa459395f57dde data/cosmere/recipes/nicrosil_ingot.json +59d234cc1d7b044997df40551d95ff569cd4c626 data/cosmere/recipes/nicrosil_ingot_from_blasting_nicrosil_blend.json +4b480e9c062430c93ed7e71742808e222b7aa6db data/cosmere/recipes/nicrosil_ingot_from_smelting_nicrosil_blend.json +c64df0f0d7d9f8de5a655ae16c29dd23b8fa7893 data/cosmere/recipes/pewter_block.json +fc1b7c114ea7191333e4b69e5292c8abaab6ca39 data/cosmere/recipes/pewter_ingot.json +2085068e3a7b8ddb79b2f1b27d083167fd48180c data/cosmere/recipes/pewter_ingot_from_blasting_pewter_blend.json +ee86481c3116a4cddcc7cacfe2dedc2aad8166d2 data/cosmere/recipes/pewter_ingot_from_smelting_pewter_blend.json +fc4621e0a40c3f1aef1320b12ef04519d7254eb9 data/cosmere/recipes/silver_block.json +42ea21d5ec6d542d5746034f1a461ebf1e5d9157 data/cosmere/recipes/silver_ingot.json +c398956cfd827a6a7e7e766d44f0e27e84ceb50a data/cosmere/recipes/silver_ingot_from_blasting_deepslate_silver_ore.json +5bce0b2fabb68c82170173dfb80f377fa8cbfa82 data/cosmere/recipes/silver_ingot_from_blasting_raw_silver_ore.json +cfd314b1d0294d23f1545f3afe4f1b2c22d307fa data/cosmere/recipes/silver_ingot_from_blasting_silver_ore.json +dcb6545d1df08255abbd12fbfb68a96382222b44 data/cosmere/recipes/silver_ingot_from_smelting_deepslate_silver_ore.json +6cdb252aab237c2f3f7c52b2a0d0913cf7faadb8 data/cosmere/recipes/silver_ingot_from_smelting_raw_silver_ore.json +f377765b5c6b6e50fb98ea8df3369f5682289a28 data/cosmere/recipes/silver_ingot_from_smelting_silver_ore.json +14654cb6898862c9e5cf50230874c7290324583c data/cosmere/recipes/steel_block.json +0cda67fd19aaa09961dc9af6911957c72626d467 data/cosmere/recipes/steel_ingot.json +d0efe2ce0e33b1f99869a2ea3e0fcb52b5a4ad50 data/cosmere/recipes/steel_ingot_from_blasting_steel_blend.json +76276d4d16a4bc5870b53b5361a5d74da364523d data/cosmere/recipes/steel_ingot_from_smelting_steel_blend.json +69241571c0f61f90c8aa7207d09c051f36471943 data/cosmere/recipes/tin_block.json +e3839ab564d4d1c21db572bf8c43f0920ec20385 data/cosmere/recipes/tin_ingot.json +8291e4b307a9005b0d02a4e656d0b54a9e164d4b data/cosmere/recipes/tin_ingot_from_blasting_deepslate_tin_ore.json +cac474f08a7a57baa4ba1f9474a56aa483e7a8a9 data/cosmere/recipes/tin_ingot_from_blasting_raw_tin_ore.json +e52446610202fcb25985e1f6574407f667824f3c data/cosmere/recipes/tin_ingot_from_blasting_tin_ore.json +046df9fa810ae2271bdeaa641bfd0b70bd26e08a data/cosmere/recipes/tin_ingot_from_smelting_deepslate_tin_ore.json +d6f761f6af46a103aa611658b721982aec86cf03 data/cosmere/recipes/tin_ingot_from_smelting_raw_tin_ore.json +e4a11fc599ec2bd566c30f810d43ea4f4767610a data/cosmere/recipes/tin_ingot_from_smelting_tin_ore.json +297682130904f9b165c72c9d9b75a4693aac992c data/cosmere/recipes/zinc_block.json +344f6331f796201422a364267a6bdf93e8082d5a data/cosmere/recipes/zinc_ingot.json +c16d658f898f54e1c49834aa1ad19b430637079d data/cosmere/recipes/zinc_ingot_from_blasting_deepslate_zinc_ore.json +c02ae4590e276c41986af6d3b3ba05ea62aa1016 data/cosmere/recipes/zinc_ingot_from_blasting_raw_zinc_ore.json +2ec98c2e3d7317550785f22d6f16dd397b494f51 data/cosmere/recipes/zinc_ingot_from_blasting_zinc_ore.json +65b6bb07fc78de141c264b93fe176dc8d50a8504 data/cosmere/recipes/zinc_ingot_from_smelting_deepslate_zinc_ore.json +62e4be71d4d5d4ba3cb893040ed76f411d15b1c8 data/cosmere/recipes/zinc_ingot_from_smelting_raw_zinc_ore.json +ed93bd06609013926ddd3429d4c59bd1c266dc07 data/cosmere/recipes/zinc_ingot_from_smelting_zinc_ore.json +34477b0d5dfe800d16590e061fbf848f14e9f21e data/minecraft/advancements/recipes/decorations/copper_ingot.json +955a690412068c5a0e43351529c4cae3f0c4502a data/minecraft/recipes/copper_ingot.json diff --git a/src/datagen/generated/cosmere/.cache/c622617f6fabf890a00b9275cd5f643584a8a2c8 b/src/datagen/generated/cosmere/.cache/c622617f6fabf890a00b9275cd5f643584a8a2c8 new file mode 100644 index 000000000..36452cd1e --- /dev/null +++ b/src/datagen/generated/cosmere/.cache/c622617f6fabf890a00b9275cd5f643584a8a2c8 @@ -0,0 +1,2 @@ +// 1.20.1 2025-11-27T19:45:06.153442 Languages: en_us +8e534a6fd558f05a72d1f2a267fb6e23adf9e519 assets/cosmere/lang/en_us.json diff --git a/src/datagen/generated/cosmere/assets/cosmere/blockstates/aluminum_block.json b/src/datagen/generated/cosmere/assets/cosmere/blockstates/aluminum_block.json new file mode 100644 index 000000000..9eade8319 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/blockstates/aluminum_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "cosmere:block/aluminum_block" + } + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/blockstates/aluminum_ore.json b/src/datagen/generated/cosmere/assets/cosmere/blockstates/aluminum_ore.json new file mode 100644 index 000000000..c3a85d4e5 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/blockstates/aluminum_ore.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "cosmere:block/aluminum_ore" + } + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/blockstates/atium_block.json b/src/datagen/generated/cosmere/assets/cosmere/blockstates/atium_block.json new file mode 100644 index 000000000..6470d7e01 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/blockstates/atium_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "cosmere:block/atium_block" + } + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/blockstates/bendalloy_block.json b/src/datagen/generated/cosmere/assets/cosmere/blockstates/bendalloy_block.json new file mode 100644 index 000000000..94aa20871 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/blockstates/bendalloy_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "cosmere:block/bendalloy_block" + } + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/blockstates/brass_block.json b/src/datagen/generated/cosmere/assets/cosmere/blockstates/brass_block.json new file mode 100644 index 000000000..1136f041f --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/blockstates/brass_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "cosmere:block/brass_block" + } + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/blockstates/bronze_block.json b/src/datagen/generated/cosmere/assets/cosmere/blockstates/bronze_block.json new file mode 100644 index 000000000..0eddeb9db --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/blockstates/bronze_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "cosmere:block/bronze_block" + } + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/blockstates/cadmium_block.json b/src/datagen/generated/cosmere/assets/cosmere/blockstates/cadmium_block.json new file mode 100644 index 000000000..76cbaf453 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/blockstates/cadmium_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "cosmere:block/cadmium_block" + } + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/blockstates/cadmium_ore.json b/src/datagen/generated/cosmere/assets/cosmere/blockstates/cadmium_ore.json new file mode 100644 index 000000000..d1638f4b0 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/blockstates/cadmium_ore.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "cosmere:block/cadmium_ore" + } + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/blockstates/chromium_block.json b/src/datagen/generated/cosmere/assets/cosmere/blockstates/chromium_block.json new file mode 100644 index 000000000..3a03fe378 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/blockstates/chromium_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "cosmere:block/chromium_block" + } + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/blockstates/chromium_ore.json b/src/datagen/generated/cosmere/assets/cosmere/blockstates/chromium_ore.json new file mode 100644 index 000000000..c3470a97c --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/blockstates/chromium_ore.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "cosmere:block/chromium_ore" + } + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/blockstates/deepslate_aluminum_ore.json b/src/datagen/generated/cosmere/assets/cosmere/blockstates/deepslate_aluminum_ore.json new file mode 100644 index 000000000..1a90018ac --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/blockstates/deepslate_aluminum_ore.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "cosmere:block/deepslate_aluminum_ore" + } + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/blockstates/deepslate_cadmium_ore.json b/src/datagen/generated/cosmere/assets/cosmere/blockstates/deepslate_cadmium_ore.json new file mode 100644 index 000000000..20aa476ba --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/blockstates/deepslate_cadmium_ore.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "cosmere:block/deepslate_cadmium_ore" + } + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/blockstates/deepslate_chromium_ore.json b/src/datagen/generated/cosmere/assets/cosmere/blockstates/deepslate_chromium_ore.json new file mode 100644 index 000000000..3bba4e56a --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/blockstates/deepslate_chromium_ore.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "cosmere:block/deepslate_chromium_ore" + } + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/blockstates/deepslate_lead_ore.json b/src/datagen/generated/cosmere/assets/cosmere/blockstates/deepslate_lead_ore.json new file mode 100644 index 000000000..4da001514 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/blockstates/deepslate_lead_ore.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "cosmere:block/deepslate_lead_ore" + } + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/blockstates/deepslate_nickel_ore.json b/src/datagen/generated/cosmere/assets/cosmere/blockstates/deepslate_nickel_ore.json new file mode 100644 index 000000000..331d81aa8 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/blockstates/deepslate_nickel_ore.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "cosmere:block/deepslate_nickel_ore" + } + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/blockstates/deepslate_silver_ore.json b/src/datagen/generated/cosmere/assets/cosmere/blockstates/deepslate_silver_ore.json new file mode 100644 index 000000000..0673a3e14 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/blockstates/deepslate_silver_ore.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "cosmere:block/deepslate_silver_ore" + } + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/blockstates/deepslate_tin_ore.json b/src/datagen/generated/cosmere/assets/cosmere/blockstates/deepslate_tin_ore.json new file mode 100644 index 000000000..731a9431d --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/blockstates/deepslate_tin_ore.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "cosmere:block/deepslate_tin_ore" + } + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/blockstates/deepslate_zinc_ore.json b/src/datagen/generated/cosmere/assets/cosmere/blockstates/deepslate_zinc_ore.json new file mode 100644 index 000000000..a98ab39b7 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/blockstates/deepslate_zinc_ore.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "cosmere:block/deepslate_zinc_ore" + } + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/blockstates/duralumin_block.json b/src/datagen/generated/cosmere/assets/cosmere/blockstates/duralumin_block.json new file mode 100644 index 000000000..2aab64779 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/blockstates/duralumin_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "cosmere:block/duralumin_block" + } + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/blockstates/electrum_block.json b/src/datagen/generated/cosmere/assets/cosmere/blockstates/electrum_block.json new file mode 100644 index 000000000..86e065b79 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/blockstates/electrum_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "cosmere:block/electrum_block" + } + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/blockstates/harmonium_block.json b/src/datagen/generated/cosmere/assets/cosmere/blockstates/harmonium_block.json new file mode 100644 index 000000000..3d968d348 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/blockstates/harmonium_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "cosmere:block/harmonium_block" + } + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/blockstates/lead_block.json b/src/datagen/generated/cosmere/assets/cosmere/blockstates/lead_block.json new file mode 100644 index 000000000..5c3783a1d --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/blockstates/lead_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "cosmere:block/lead_block" + } + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/blockstates/lead_ore.json b/src/datagen/generated/cosmere/assets/cosmere/blockstates/lead_ore.json new file mode 100644 index 000000000..f7e14d767 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/blockstates/lead_ore.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "cosmere:block/lead_ore" + } + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/blockstates/lerasatium_block.json b/src/datagen/generated/cosmere/assets/cosmere/blockstates/lerasatium_block.json new file mode 100644 index 000000000..41ed157b7 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/blockstates/lerasatium_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "cosmere:block/lerasatium_block" + } + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/blockstates/lerasium_block.json b/src/datagen/generated/cosmere/assets/cosmere/blockstates/lerasium_block.json new file mode 100644 index 000000000..f7f50ac99 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/blockstates/lerasium_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "cosmere:block/lerasium_block" + } + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/blockstates/malatium_block.json b/src/datagen/generated/cosmere/assets/cosmere/blockstates/malatium_block.json new file mode 100644 index 000000000..62eafb9a2 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/blockstates/malatium_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "cosmere:block/malatium_block" + } + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/blockstates/metalworking_table.json b/src/datagen/generated/cosmere/assets/cosmere/blockstates/metalworking_table.json new file mode 100644 index 000000000..e7c9b2d4b --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/blockstates/metalworking_table.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "cosmere:block/metalworking_table" + } + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/blockstates/nickel_block.json b/src/datagen/generated/cosmere/assets/cosmere/blockstates/nickel_block.json new file mode 100644 index 000000000..930ef0203 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/blockstates/nickel_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "cosmere:block/nickel_block" + } + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/blockstates/nickel_ore.json b/src/datagen/generated/cosmere/assets/cosmere/blockstates/nickel_ore.json new file mode 100644 index 000000000..112fd1531 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/blockstates/nickel_ore.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "cosmere:block/nickel_ore" + } + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/blockstates/nicrosil_block.json b/src/datagen/generated/cosmere/assets/cosmere/blockstates/nicrosil_block.json new file mode 100644 index 000000000..95022dd63 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/blockstates/nicrosil_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "cosmere:block/nicrosil_block" + } + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/blockstates/pewter_block.json b/src/datagen/generated/cosmere/assets/cosmere/blockstates/pewter_block.json new file mode 100644 index 000000000..90a411482 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/blockstates/pewter_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "cosmere:block/pewter_block" + } + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/blockstates/silver_block.json b/src/datagen/generated/cosmere/assets/cosmere/blockstates/silver_block.json new file mode 100644 index 000000000..c662fc4f8 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/blockstates/silver_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "cosmere:block/silver_block" + } + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/blockstates/silver_ore.json b/src/datagen/generated/cosmere/assets/cosmere/blockstates/silver_ore.json new file mode 100644 index 000000000..a16d8605a --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/blockstates/silver_ore.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "cosmere:block/silver_ore" + } + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/blockstates/steel_block.json b/src/datagen/generated/cosmere/assets/cosmere/blockstates/steel_block.json new file mode 100644 index 000000000..978692c46 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/blockstates/steel_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "cosmere:block/steel_block" + } + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/blockstates/tin_block.json b/src/datagen/generated/cosmere/assets/cosmere/blockstates/tin_block.json new file mode 100644 index 000000000..fa8919986 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/blockstates/tin_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "cosmere:block/tin_block" + } + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/blockstates/tin_ore.json b/src/datagen/generated/cosmere/assets/cosmere/blockstates/tin_ore.json new file mode 100644 index 000000000..2c961930d --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/blockstates/tin_ore.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "cosmere:block/tin_ore" + } + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/blockstates/zinc_block.json b/src/datagen/generated/cosmere/assets/cosmere/blockstates/zinc_block.json new file mode 100644 index 000000000..e67043611 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/blockstates/zinc_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "cosmere:block/zinc_block" + } + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/blockstates/zinc_ore.json b/src/datagen/generated/cosmere/assets/cosmere/blockstates/zinc_ore.json new file mode 100644 index 000000000..44e707f83 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/blockstates/zinc_ore.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "cosmere:block/zinc_ore" + } + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/lang/en_us.json b/src/datagen/generated/cosmere/assets/cosmere/lang/en_us.json new file mode 100644 index 000000000..74111173a --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/lang/en_us.json @@ -0,0 +1,252 @@ +{ + "argument.cosmere.power.invalid": "Invalid power", + "attribute.cosmere.cognitive_concealment": "Cognitive Concealment", + "attribute.cosmere.connection": "Connection", + "attribute.cosmere.cosmere_fortune": "Cosmere Fortune", + "attribute.cosmere.determination": "Determination", + "attribute.cosmere.healing_strength": "Healing Strength", + "attribute.cosmere.identity": "Identity", + "attribute.cosmere.night_vision": "Night Vision", + "attribute.cosmere.size": "Size", + "attribute.cosmere.warmth": "Warmth", + "attribute.cosmere.xp_gain_rate": "Xp Gain Rate", + "block.cosmere.aluminum_block": "Aluminum Block", + "block.cosmere.aluminum_ore": "Aluminum Ore", + "block.cosmere.atium_block": "Atium Block", + "block.cosmere.bendalloy_block": "Bendalloy Block", + "block.cosmere.brass_block": "Brass Block", + "block.cosmere.bronze_block": "Bronze Block", + "block.cosmere.cadmium_block": "Cadmium Block", + "block.cosmere.cadmium_ore": "Cadmium Ore", + "block.cosmere.chromium_block": "Chromium Block", + "block.cosmere.chromium_ore": "Chromium Ore", + "block.cosmere.deepslate_aluminum_ore": "Deepslate Aluminum Ore", + "block.cosmere.deepslate_cadmium_ore": "Deepslate Cadmium Ore", + "block.cosmere.deepslate_chromium_ore": "Deepslate Chromium Ore", + "block.cosmere.deepslate_lead_ore": "Deepslate Lead Ore", + "block.cosmere.deepslate_nickel_ore": "Deepslate Nickel Ore", + "block.cosmere.deepslate_silver_ore": "Deepslate Silver Ore", + "block.cosmere.deepslate_tin_ore": "Deepslate Tin Ore", + "block.cosmere.deepslate_zinc_ore": "Deepslate Zinc Ore", + "block.cosmere.duralumin_block": "Duralumin Block", + "block.cosmere.electrum_block": "Electrum Block", + "block.cosmere.harmonium_block": "Harmonium Block", + "block.cosmere.lead_block": "Lead Block", + "block.cosmere.lead_ore": "Lead Ore", + "block.cosmere.lerasatium_block": "Lerasatium Block", + "block.cosmere.lerasium_block": "Lerasium Block", + "block.cosmere.malatium_block": "Malatium Block", + "block.cosmere.metalworking_table": "Metalworking Table", + "block.cosmere.nickel_block": "Nickel Block", + "block.cosmere.nickel_ore": "Nickel Ore", + "block.cosmere.nicrosil_block": "Nicrosil Block", + "block.cosmere.pewter_block": "Pewter Block", + "block.cosmere.silver_block": "Silver Block", + "block.cosmere.silver_ore": "Silver Ore", + "block.cosmere.steel_block": "Steel Block", + "block.cosmere.tin_block": "Tin Block", + "block.cosmere.tin_ore": "Tin Ore", + "block.cosmere.zinc_block": "Zinc Block", + "block.cosmere.zinc_ore": "Zinc Ore", + "command.cosmere.effects.clear": "Effects cleared for: %s \n", + "command.cosmere.effects.found": "Effects found for: %s \n", + "command.cosmere.power.clear.success": "Cleared powers on player: %s", + "command.cosmere.power.found": "Powers found for: %s \n", + "command.cosmere.power.set.fail": "Failed to update power", + "command.cosmere.power.set.success": "Successfully set power to: %s", + "command.cosmere.power.strength": "Base Strength: %s \nTotal Strength: %s", + "cosmere.landing": "The Cosmere is filled with many fantastical things. I have left my findings written within this book.", + "death.attack.eat_metal": "%1$s shredded their throat while eating metal", + "death.attack.eat_metal.player": "%1$s tried to eat metal directly while fighting %2$s", + "entity.minecraft.villager.cosmere.metal_trader": "Metal Trader", + "item.cosmere.aluminum_ingot": "Aluminum Ingot", + "item.cosmere.aluminum_nugget": "Aluminum Nugget", + "item.cosmere.atium_ingot": "Atium Ingot", + "item.cosmere.atium_nugget": "Atium Nugget", + "item.cosmere.bendalloy_blend": "Bendalloy Blend", + "item.cosmere.bendalloy_ingot": "Bendalloy Ingot", + "item.cosmere.bendalloy_nugget": "Bendalloy Nugget", + "item.cosmere.brass_blend": "Brass Blend", + "item.cosmere.brass_ingot": "Brass Ingot", + "item.cosmere.brass_nugget": "Brass Nugget", + "item.cosmere.bronze_blend": "Bronze Blend", + "item.cosmere.bronze_ingot": "Bronze Ingot", + "item.cosmere.bronze_nugget": "Bronze Nugget", + "item.cosmere.cadmium_ingot": "Cadmium Ingot", + "item.cosmere.cadmium_nugget": "Cadmium Nugget", + "item.cosmere.chromium_ingot": "Chromium Ingot", + "item.cosmere.chromium_nugget": "Chromium Nugget", + "item.cosmere.copper_block": "Copper Block", + "item.cosmere.copper_ingot": "Copper Ingot", + "item.cosmere.copper_nugget": "Copper Nugget", + "item.cosmere.duralumin_blend": "Duralumin Blend", + "item.cosmere.duralumin_ingot": "Duralumin Ingot", + "item.cosmere.duralumin_nugget": "Duralumin Nugget", + "item.cosmere.electrum_blend": "Electrum Blend", + "item.cosmere.electrum_ingot": "Electrum Ingot", + "item.cosmere.electrum_nugget": "Electrum Nugget", + "item.cosmere.gold_block": "Gold Block", + "item.cosmere.gold_ingot": "Gold Ingot", + "item.cosmere.gold_nugget": "Gold Nugget", + "item.cosmere.guide": "Ars Arcanum", + "item.cosmere.harmonium_ingot": "Harmonium Ingot", + "item.cosmere.harmonium_nugget": "Harmonium Nugget", + "item.cosmere.iron_block": "Iron Block", + "item.cosmere.iron_ingot": "Iron Ingot", + "item.cosmere.iron_nugget": "Iron Nugget", + "item.cosmere.lead_ingot": "Lead Ingot", + "item.cosmere.lead_nugget": "Lead Nugget", + "item.cosmere.lerasatium_aluminum_alloy_nugget": "Lerasatium Aluminum Alloy Nugget", + "item.cosmere.lerasatium_bendalloy_alloy_nugget": "Lerasatium Bendalloy Alloy Nugget", + "item.cosmere.lerasatium_brass_alloy_nugget": "Lerasatium Brass Alloy Nugget", + "item.cosmere.lerasatium_bronze_alloy_nugget": "Lerasatium Bronze Alloy Nugget", + "item.cosmere.lerasatium_cadmium_alloy_nugget": "Lerasatium Cadmium Alloy Nugget", + "item.cosmere.lerasatium_chromium_alloy_nugget": "Lerasatium Chromium Alloy Nugget", + "item.cosmere.lerasatium_copper_alloy_nugget": "Lerasatium Copper Alloy Nugget", + "item.cosmere.lerasatium_duralumin_alloy_nugget": "Lerasatium Duralumin Alloy Nugget", + "item.cosmere.lerasatium_electrum_alloy_nugget": "Lerasatium Electrum Alloy Nugget", + "item.cosmere.lerasatium_gold_alloy_nugget": "Lerasatium Gold Alloy Nugget", + "item.cosmere.lerasatium_ingot": "Lerasatium Ingot", + "item.cosmere.lerasatium_iron_alloy_nugget": "Lerasatium Iron Alloy Nugget", + "item.cosmere.lerasatium_nicrosil_alloy_nugget": "Lerasatium Nicrosil Alloy Nugget", + "item.cosmere.lerasatium_nugget": "Lerasatium Nugget", + "item.cosmere.lerasatium_pewter_alloy_nugget": "Lerasatium Pewter Alloy Nugget", + "item.cosmere.lerasatium_steel_alloy_nugget": "Lerasatium Steel Alloy Nugget", + "item.cosmere.lerasatium_tin_alloy_nugget": "Lerasatium Tin Alloy Nugget", + "item.cosmere.lerasatium_zinc_alloy_nugget": "Lerasatium Zinc Alloy Nugget", + "item.cosmere.lerasium_aluminum_alloy_nugget": "Lerasium Aluminum Alloy Nugget", + "item.cosmere.lerasium_bendalloy_alloy_nugget": "Lerasium Bendalloy Alloy Nugget", + "item.cosmere.lerasium_brass_alloy_nugget": "Lerasium Brass Alloy Nugget", + "item.cosmere.lerasium_bronze_alloy_nugget": "Lerasium Bronze Alloy Nugget", + "item.cosmere.lerasium_cadmium_alloy_nugget": "Lerasium Cadmium Alloy Nugget", + "item.cosmere.lerasium_chromium_alloy_nugget": "Lerasium Chromium Alloy Nugget", + "item.cosmere.lerasium_copper_alloy_nugget": "Lerasium Copper Alloy Nugget", + "item.cosmere.lerasium_duralumin_alloy_nugget": "Lerasium Duralumin Alloy Nugget", + "item.cosmere.lerasium_electrum_alloy_nugget": "Lerasium Electrum Alloy Nugget", + "item.cosmere.lerasium_gold_alloy_nugget": "Lerasium Gold Alloy Nugget", + "item.cosmere.lerasium_ingot": "Lerasium Ingot", + "item.cosmere.lerasium_iron_alloy_nugget": "Lerasium Iron Alloy Nugget", + "item.cosmere.lerasium_nicrosil_alloy_nugget": "Lerasium Nicrosil Alloy Nugget", + "item.cosmere.lerasium_nugget": "Lerasium Nugget", + "item.cosmere.lerasium_pewter_alloy_nugget": "Lerasium Pewter Alloy Nugget", + "item.cosmere.lerasium_steel_alloy_nugget": "Lerasium Steel Alloy Nugget", + "item.cosmere.lerasium_tin_alloy_nugget": "Lerasium Tin Alloy Nugget", + "item.cosmere.lerasium_zinc_alloy_nugget": "Lerasium Zinc Alloy Nugget", + "item.cosmere.malatium_ingot": "Malatium Ingot", + "item.cosmere.malatium_nugget": "Malatium Nugget", + "item.cosmere.nickel_ingot": "Nickel Ingot", + "item.cosmere.nickel_nugget": "Nickel Nugget", + "item.cosmere.nicrosil_blend": "Nicrosil Blend", + "item.cosmere.nicrosil_ingot": "Nicrosil Ingot", + "item.cosmere.nicrosil_nugget": "Nicrosil Nugget", + "item.cosmere.pewter_blend": "Pewter Blend", + "item.cosmere.pewter_ingot": "Pewter Ingot", + "item.cosmere.pewter_nugget": "Pewter Nugget", + "item.cosmere.raw_aluminum_ore": "Raw Aluminum Ore", + "item.cosmere.raw_cadmium_ore": "Raw Cadmium Ore", + "item.cosmere.raw_chromium_ore": "Raw Chromium Ore", + "item.cosmere.raw_lead_ore": "Raw Lead Ore", + "item.cosmere.raw_nickel_ore": "Raw Nickel Ore", + "item.cosmere.raw_silver_ore": "Raw Silver Ore", + "item.cosmere.raw_tin_ore": "Raw Tin Ore", + "item.cosmere.raw_zinc_ore": "Raw Zinc Ore", + "item.cosmere.silver_ingot": "Silver Ingot", + "item.cosmere.silver_nugget": "Silver Nugget", + "item.cosmere.steel_blend": "Steel Blend", + "item.cosmere.steel_ingot": "Steel Ingot", + "item.cosmere.steel_nugget": "Steel Nugget", + "item.cosmere.tin_ingot": "Tin Ingot", + "item.cosmere.tin_nugget": "Tin Nugget", + "item.cosmere.zinc_ingot": "Zinc Ingot", + "item.cosmere.zinc_nugget": "Zinc Nugget", + "key.cosmere.allomancy.aluminum": "Activate Allomantic Aluminum", + "key.cosmere.allomancy.atium": "Activate Allomantic Atium", + "key.cosmere.allomancy.bendalloy": "Activate Allomantic Bendalloy", + "key.cosmere.allomancy.brass": "Activate Allomantic Brass", + "key.cosmere.allomancy.bronze": "Activate Allomantic Bronze", + "key.cosmere.allomancy.cadmium": "Activate Allomantic Cadmium", + "key.cosmere.allomancy.chromium": "Activate Allomantic Chromium", + "key.cosmere.allomancy.copper": "Activate Allomantic Copper", + "key.cosmere.allomancy.duralumin": "Activate Allomantic Duralumin", + "key.cosmere.allomancy.electrum": "Activate Allomantic Electrum", + "key.cosmere.allomancy.gold": "Activate Allomantic Gold", + "key.cosmere.allomancy.iron": "Activate Allomantic Iron", + "key.cosmere.allomancy.nicrosil": "Activate Allomantic Nicrosil", + "key.cosmere.allomancy.pewter": "Activate Allomantic Pewter", + "key.cosmere.allomancy.steel": "Activate Allomantic Steel", + "key.cosmere.allomancy.tin": "Activate Allomantic Tin", + "key.cosmere.allomancy.zinc": "Activate Allomantic Zinc", + "key.cosmere.feruchemy.aluminum": "Activate Feruchemic Aluminum", + "key.cosmere.feruchemy.atium": "Activate Feruchemic Atium", + "key.cosmere.feruchemy.bendalloy": "Activate Feruchemic Bendalloy", + "key.cosmere.feruchemy.brass": "Activate Feruchemic Brass", + "key.cosmere.feruchemy.bronze": "Activate Feruchemic Bronze", + "key.cosmere.feruchemy.cadmium": "Activate Feruchemic Cadmium", + "key.cosmere.feruchemy.chromium": "Activate Feruchemic Chromium", + "key.cosmere.feruchemy.copper": "Activate Feruchemic Copper", + "key.cosmere.feruchemy.duralumin": "Activate Feruchemic Duralumin", + "key.cosmere.feruchemy.electrum": "Activate Feruchemic Electrum", + "key.cosmere.feruchemy.gold": "Activate Feruchemic Gold", + "key.cosmere.feruchemy.iron": "Activate Feruchemic Iron", + "key.cosmere.feruchemy.nicrosil": "Activate Feruchemic Nicrosil", + "key.cosmere.feruchemy.pewter": "Activate Feruchemic Pewter", + "key.cosmere.feruchemy.steel": "Activate Feruchemic Steel", + "key.cosmere.feruchemy.tin": "Activate Feruchemic Tin", + "key.cosmere.feruchemy.zinc": "Activate Feruchemic Zinc", + "key.cosmere.powers.activate": "Activate Power Save State", + "key.cosmere.powers.menu": "Powers Menu", + "key.cosmere.powers.mode.decrease": "Mode Decrease", + "key.cosmere.powers.mode.increase": "Mode Increase", + "key.cosmere.powers.next": "Next Power", + "key.cosmere.powers.previous": "Previous Power", + "key.cosmere.powers.save": "Save New Power State", + "key.cosmere.powers.toggle": "Deactivate All Powers", + "key.cosmere.powers.use": "Use Active Ability", + "key.cosmere.stormlight.abrasion": "Activate Surgebinding Abrasion", + "key.cosmere.stormlight.adhesion": "Activate Surgebinding Adhesion", + "key.cosmere.stormlight.cohesion": "Activate Surgebinding Cohesion", + "key.cosmere.stormlight.division": "Activate Surgebinding Division", + "key.cosmere.stormlight.gravitation": "Activate Surgebinding Gravitation", + "key.cosmere.stormlight.illumination": "Activate Surgebinding Illumination", + "key.cosmere.stormlight.progression": "Activate Surgebinding Progression", + "key.cosmere.stormlight.tension": "Activate Surgebinding Tension", + "key.cosmere.stormlight.transformation": "Activate Surgebinding Transformation", + "key.cosmere.stormlight.transportation": "Activate Surgebinding Transportation", + "keys.cosmere.activators": "Power Activators", + "keys.cosmere.main": "Cosmere", + "manifestation.cosmere.night_vision": "Night Vision", + "manifestation.cosmere.none": "None", + "manifestation.cosmere.xp_gain_rate": "XP Gain Rate", + "metal.cosmere.aluminum": "Aluminum", + "metal.cosmere.atium": "Atium", + "metal.cosmere.bendalloy": "Bendalloy", + "metal.cosmere.brass": "Brass", + "metal.cosmere.bronze": "Bronze", + "metal.cosmere.cadmium": "Cadmium", + "metal.cosmere.chromium": "Chromium", + "metal.cosmere.copper": "Copper", + "metal.cosmere.duralumin": "Duralumin", + "metal.cosmere.electrum": "Electrum", + "metal.cosmere.gold": "Gold", + "metal.cosmere.harmonium": "Harmonium", + "metal.cosmere.iron": "Iron", + "metal.cosmere.lead": "Lead", + "metal.cosmere.lerasatium": "Lerasatium", + "metal.cosmere.lerasium": "Lerasium", + "metal.cosmere.malatium": "Malatium", + "metal.cosmere.nickel": "Nickel", + "metal.cosmere.nicrosil": "Nicrosil", + "metal.cosmere.pewter": "Pewter", + "metal.cosmere.silver": "Silver", + "metal.cosmere.steel": "Steel", + "metal.cosmere.tin": "Tin", + "metal.cosmere.zinc": "Zinc", + "power.cosmere.mode.set": "Mode set to: %s", + "power.cosmere.toggle.active": "Power now active: %s", + "power.cosmere.toggle.inactive": "Power now inactive: %s", + "tabs.cosmere.items": "Cosmere", + "tooltip.cosmere.patchouli.not_installed": "Patchouli is not installed. Documentation is not available.", + "tooltip.item.info.control": "§7Hold §8[§eControl§8]", + "tooltip.item.info.shift": "§7Hold §8[§eShift§8]", + "tooltip.item.info.shift_control": "§7Hold §8[§eShift§8] §7and §8[§eControl§8]" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/block/aluminum_block.json b/src/datagen/generated/cosmere/assets/cosmere/models/block/aluminum_block.json new file mode 100644 index 000000000..614ce3a65 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/block/aluminum_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "cosmere:block/aluminum_block" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/block/aluminum_ore.json b/src/datagen/generated/cosmere/assets/cosmere/models/block/aluminum_ore.json new file mode 100644 index 000000000..22349c141 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/block/aluminum_ore.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "cosmere:block/aluminum_ore" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/block/atium_block.json b/src/datagen/generated/cosmere/assets/cosmere/models/block/atium_block.json new file mode 100644 index 000000000..6d68ecc24 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/block/atium_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "cosmere:block/atium_block" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/block/bendalloy_block.json b/src/datagen/generated/cosmere/assets/cosmere/models/block/bendalloy_block.json new file mode 100644 index 000000000..975020226 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/block/bendalloy_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "cosmere:block/bendalloy_block" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/block/brass_block.json b/src/datagen/generated/cosmere/assets/cosmere/models/block/brass_block.json new file mode 100644 index 000000000..b72192dec --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/block/brass_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "cosmere:block/brass_block" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/block/bronze_block.json b/src/datagen/generated/cosmere/assets/cosmere/models/block/bronze_block.json new file mode 100644 index 000000000..0d03d6674 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/block/bronze_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "cosmere:block/bronze_block" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/block/cadmium_block.json b/src/datagen/generated/cosmere/assets/cosmere/models/block/cadmium_block.json new file mode 100644 index 000000000..8f4202bcd --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/block/cadmium_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "cosmere:block/cadmium_block" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/block/cadmium_ore.json b/src/datagen/generated/cosmere/assets/cosmere/models/block/cadmium_ore.json new file mode 100644 index 000000000..6507523db --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/block/cadmium_ore.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "cosmere:block/cadmium_ore" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/block/chromium_block.json b/src/datagen/generated/cosmere/assets/cosmere/models/block/chromium_block.json new file mode 100644 index 000000000..612df3620 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/block/chromium_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "cosmere:block/chromium_block" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/block/chromium_ore.json b/src/datagen/generated/cosmere/assets/cosmere/models/block/chromium_ore.json new file mode 100644 index 000000000..a1c9300bc --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/block/chromium_ore.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "cosmere:block/chromium_ore" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/block/deepslate_aluminum_ore.json b/src/datagen/generated/cosmere/assets/cosmere/models/block/deepslate_aluminum_ore.json new file mode 100644 index 000000000..81058e848 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/block/deepslate_aluminum_ore.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "cosmere:block/deepslate_aluminum_ore" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/block/deepslate_cadmium_ore.json b/src/datagen/generated/cosmere/assets/cosmere/models/block/deepslate_cadmium_ore.json new file mode 100644 index 000000000..5f7c40771 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/block/deepslate_cadmium_ore.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "cosmere:block/deepslate_cadmium_ore" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/block/deepslate_chromium_ore.json b/src/datagen/generated/cosmere/assets/cosmere/models/block/deepslate_chromium_ore.json new file mode 100644 index 000000000..7bfb2b969 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/block/deepslate_chromium_ore.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "cosmere:block/deepslate_chromium_ore" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/block/deepslate_lead_ore.json b/src/datagen/generated/cosmere/assets/cosmere/models/block/deepslate_lead_ore.json new file mode 100644 index 000000000..f6422c03d --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/block/deepslate_lead_ore.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "cosmere:block/deepslate_lead_ore" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/block/deepslate_nickel_ore.json b/src/datagen/generated/cosmere/assets/cosmere/models/block/deepslate_nickel_ore.json new file mode 100644 index 000000000..a9fdacaa9 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/block/deepslate_nickel_ore.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "cosmere:block/deepslate_nickel_ore" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/block/deepslate_silver_ore.json b/src/datagen/generated/cosmere/assets/cosmere/models/block/deepslate_silver_ore.json new file mode 100644 index 000000000..4d5a15829 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/block/deepslate_silver_ore.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "cosmere:block/deepslate_silver_ore" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/block/deepslate_tin_ore.json b/src/datagen/generated/cosmere/assets/cosmere/models/block/deepslate_tin_ore.json new file mode 100644 index 000000000..eaf703c44 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/block/deepslate_tin_ore.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "cosmere:block/deepslate_tin_ore" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/block/deepslate_zinc_ore.json b/src/datagen/generated/cosmere/assets/cosmere/models/block/deepslate_zinc_ore.json new file mode 100644 index 000000000..826b1e74d --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/block/deepslate_zinc_ore.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "cosmere:block/deepslate_zinc_ore" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/block/duralumin_block.json b/src/datagen/generated/cosmere/assets/cosmere/models/block/duralumin_block.json new file mode 100644 index 000000000..eda4bf70a --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/block/duralumin_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "cosmere:block/duralumin_block" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/block/electrum_block.json b/src/datagen/generated/cosmere/assets/cosmere/models/block/electrum_block.json new file mode 100644 index 000000000..5261b66c0 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/block/electrum_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "cosmere:block/electrum_block" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/block/harmonium_block.json b/src/datagen/generated/cosmere/assets/cosmere/models/block/harmonium_block.json new file mode 100644 index 000000000..ea06d079c --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/block/harmonium_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "cosmere:block/harmonium_block" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/block/lead_block.json b/src/datagen/generated/cosmere/assets/cosmere/models/block/lead_block.json new file mode 100644 index 000000000..6238a6dac --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/block/lead_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "cosmere:block/lead_block" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/block/lead_ore.json b/src/datagen/generated/cosmere/assets/cosmere/models/block/lead_ore.json new file mode 100644 index 000000000..619e7cafa --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/block/lead_ore.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "cosmere:block/lead_ore" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/block/lerasatium_block.json b/src/datagen/generated/cosmere/assets/cosmere/models/block/lerasatium_block.json new file mode 100644 index 000000000..1eada75cf --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/block/lerasatium_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "cosmere:block/lerasatium_block" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/block/lerasium_block.json b/src/datagen/generated/cosmere/assets/cosmere/models/block/lerasium_block.json new file mode 100644 index 000000000..74187215d --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/block/lerasium_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "cosmere:block/lerasium_block" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/block/malatium_block.json b/src/datagen/generated/cosmere/assets/cosmere/models/block/malatium_block.json new file mode 100644 index 000000000..1dcd12524 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/block/malatium_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "cosmere:block/malatium_block" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/block/metalworking_table.json b/src/datagen/generated/cosmere/assets/cosmere/models/block/metalworking_table.json new file mode 100644 index 000000000..df0bd529b --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/block/metalworking_table.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "cosmere:block/metalworking_table_bottom", + "east": "cosmere:block/metalworking_table_side", + "north": "cosmere:block/metalworking_table_front", + "particle": "cosmere:block/metalworking_table_front", + "south": "cosmere:block/metalworking_table_front", + "up": "cosmere:block/metalworking_table_top", + "west": "cosmere:block/metalworking_table_side" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/block/nickel_block.json b/src/datagen/generated/cosmere/assets/cosmere/models/block/nickel_block.json new file mode 100644 index 000000000..30f0e6ee0 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/block/nickel_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "cosmere:block/nickel_block" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/block/nickel_ore.json b/src/datagen/generated/cosmere/assets/cosmere/models/block/nickel_ore.json new file mode 100644 index 000000000..912fd65ba --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/block/nickel_ore.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "cosmere:block/nickel_ore" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/block/nicrosil_block.json b/src/datagen/generated/cosmere/assets/cosmere/models/block/nicrosil_block.json new file mode 100644 index 000000000..12e553243 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/block/nicrosil_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "cosmere:block/nicrosil_block" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/block/pewter_block.json b/src/datagen/generated/cosmere/assets/cosmere/models/block/pewter_block.json new file mode 100644 index 000000000..a6be1af36 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/block/pewter_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "cosmere:block/pewter_block" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/block/silver_block.json b/src/datagen/generated/cosmere/assets/cosmere/models/block/silver_block.json new file mode 100644 index 000000000..2155d8369 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/block/silver_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "cosmere:block/silver_block" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/block/silver_ore.json b/src/datagen/generated/cosmere/assets/cosmere/models/block/silver_ore.json new file mode 100644 index 000000000..df291ff3a --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/block/silver_ore.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "cosmere:block/silver_ore" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/block/steel_block.json b/src/datagen/generated/cosmere/assets/cosmere/models/block/steel_block.json new file mode 100644 index 000000000..a68124bd0 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/block/steel_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "cosmere:block/steel_block" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/block/tin_block.json b/src/datagen/generated/cosmere/assets/cosmere/models/block/tin_block.json new file mode 100644 index 000000000..6cd77dddc --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/block/tin_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "cosmere:block/tin_block" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/block/tin_ore.json b/src/datagen/generated/cosmere/assets/cosmere/models/block/tin_ore.json new file mode 100644 index 000000000..44df7e89f --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/block/tin_ore.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "cosmere:block/tin_ore" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/block/zinc_block.json b/src/datagen/generated/cosmere/assets/cosmere/models/block/zinc_block.json new file mode 100644 index 000000000..d4757467a --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/block/zinc_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "cosmere:block/zinc_block" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/block/zinc_ore.json b/src/datagen/generated/cosmere/assets/cosmere/models/block/zinc_ore.json new file mode 100644 index 000000000..8583cd5b8 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/block/zinc_ore.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "cosmere:block/zinc_ore" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/aluminum_block.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/aluminum_block.json new file mode 100644 index 000000000..8258ac0a9 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/aluminum_block.json @@ -0,0 +1,3 @@ +{ + "parent": "cosmere:block/aluminum_block" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/aluminum_ingot.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/aluminum_ingot.json new file mode 100644 index 000000000..2645d949f --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/aluminum_ingot.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/aluminum_ingot" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/aluminum_nugget.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/aluminum_nugget.json new file mode 100644 index 000000000..99984c4f8 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/aluminum_nugget.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/aluminum_nugget" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/aluminum_ore.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/aluminum_ore.json new file mode 100644 index 000000000..2c70fdf3d --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/aluminum_ore.json @@ -0,0 +1,3 @@ +{ + "parent": "cosmere:block/aluminum_ore" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/atium_block.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/atium_block.json new file mode 100644 index 000000000..cb1819ebe --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/atium_block.json @@ -0,0 +1,3 @@ +{ + "parent": "cosmere:block/atium_block" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/atium_ingot.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/atium_ingot.json new file mode 100644 index 000000000..32197f7b3 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/atium_ingot.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/atium_ingot" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/atium_nugget.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/atium_nugget.json new file mode 100644 index 000000000..5bcb4cf96 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/atium_nugget.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/atium_nugget" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/bendalloy_blend.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/bendalloy_blend.json new file mode 100644 index 000000000..1016dff08 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/bendalloy_blend.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/bendalloy_blend" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/bendalloy_block.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/bendalloy_block.json new file mode 100644 index 000000000..eb1af0c69 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/bendalloy_block.json @@ -0,0 +1,3 @@ +{ + "parent": "cosmere:block/bendalloy_block" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/bendalloy_ingot.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/bendalloy_ingot.json new file mode 100644 index 000000000..6d177e2df --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/bendalloy_ingot.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/bendalloy_ingot" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/bendalloy_nugget.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/bendalloy_nugget.json new file mode 100644 index 000000000..8bae6584c --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/bendalloy_nugget.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/bendalloy_nugget" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/brass_blend.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/brass_blend.json new file mode 100644 index 000000000..c74d2b1a9 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/brass_blend.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/brass_blend" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/brass_block.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/brass_block.json new file mode 100644 index 000000000..4f13dfb94 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/brass_block.json @@ -0,0 +1,3 @@ +{ + "parent": "cosmere:block/brass_block" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/brass_ingot.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/brass_ingot.json new file mode 100644 index 000000000..f1ec94150 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/brass_ingot.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/brass_ingot" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/brass_nugget.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/brass_nugget.json new file mode 100644 index 000000000..3fdd8d861 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/brass_nugget.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/brass_nugget" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/bronze_blend.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/bronze_blend.json new file mode 100644 index 000000000..169102f1e --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/bronze_blend.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/bronze_blend" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/bronze_block.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/bronze_block.json new file mode 100644 index 000000000..b12958392 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/bronze_block.json @@ -0,0 +1,3 @@ +{ + "parent": "cosmere:block/bronze_block" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/bronze_ingot.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/bronze_ingot.json new file mode 100644 index 000000000..a210f4e23 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/bronze_ingot.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/bronze_ingot" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/bronze_nugget.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/bronze_nugget.json new file mode 100644 index 000000000..10a7f6e09 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/bronze_nugget.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/bronze_nugget" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/cadmium_block.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/cadmium_block.json new file mode 100644 index 000000000..ab4a66dea --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/cadmium_block.json @@ -0,0 +1,3 @@ +{ + "parent": "cosmere:block/cadmium_block" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/cadmium_ingot.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/cadmium_ingot.json new file mode 100644 index 000000000..f3aed8539 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/cadmium_ingot.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/cadmium_ingot" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/cadmium_nugget.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/cadmium_nugget.json new file mode 100644 index 000000000..067ee8d9c --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/cadmium_nugget.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/cadmium_nugget" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/cadmium_ore.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/cadmium_ore.json new file mode 100644 index 000000000..1752b3125 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/cadmium_ore.json @@ -0,0 +1,3 @@ +{ + "parent": "cosmere:block/cadmium_ore" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/chromium_block.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/chromium_block.json new file mode 100644 index 000000000..78ce5c687 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/chromium_block.json @@ -0,0 +1,3 @@ +{ + "parent": "cosmere:block/chromium_block" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/chromium_ingot.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/chromium_ingot.json new file mode 100644 index 000000000..9ed14d503 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/chromium_ingot.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/chromium_ingot" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/chromium_nugget.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/chromium_nugget.json new file mode 100644 index 000000000..de8944369 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/chromium_nugget.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/chromium_nugget" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/chromium_ore.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/chromium_ore.json new file mode 100644 index 000000000..f20a25ea4 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/chromium_ore.json @@ -0,0 +1,3 @@ +{ + "parent": "cosmere:block/chromium_ore" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/copper_nugget.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/copper_nugget.json new file mode 100644 index 000000000..5d886b3ff --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/copper_nugget.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/copper_nugget" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/deepslate_aluminum_ore.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/deepslate_aluminum_ore.json new file mode 100644 index 000000000..d98f6c70b --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/deepslate_aluminum_ore.json @@ -0,0 +1,3 @@ +{ + "parent": "cosmere:block/deepslate_aluminum_ore" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/deepslate_cadmium_ore.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/deepslate_cadmium_ore.json new file mode 100644 index 000000000..35e79cfd1 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/deepslate_cadmium_ore.json @@ -0,0 +1,3 @@ +{ + "parent": "cosmere:block/deepslate_cadmium_ore" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/deepslate_chromium_ore.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/deepslate_chromium_ore.json new file mode 100644 index 000000000..f4f3aea04 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/deepslate_chromium_ore.json @@ -0,0 +1,3 @@ +{ + "parent": "cosmere:block/deepslate_chromium_ore" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/deepslate_lead_ore.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/deepslate_lead_ore.json new file mode 100644 index 000000000..5801efdf7 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/deepslate_lead_ore.json @@ -0,0 +1,3 @@ +{ + "parent": "cosmere:block/deepslate_lead_ore" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/deepslate_nickel_ore.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/deepslate_nickel_ore.json new file mode 100644 index 000000000..56fcbc3b4 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/deepslate_nickel_ore.json @@ -0,0 +1,3 @@ +{ + "parent": "cosmere:block/deepslate_nickel_ore" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/deepslate_silver_ore.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/deepslate_silver_ore.json new file mode 100644 index 000000000..0bf8668aa --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/deepslate_silver_ore.json @@ -0,0 +1,3 @@ +{ + "parent": "cosmere:block/deepslate_silver_ore" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/deepslate_tin_ore.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/deepslate_tin_ore.json new file mode 100644 index 000000000..3ccc7a981 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/deepslate_tin_ore.json @@ -0,0 +1,3 @@ +{ + "parent": "cosmere:block/deepslate_tin_ore" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/deepslate_zinc_ore.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/deepslate_zinc_ore.json new file mode 100644 index 000000000..fe2b5bb0f --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/deepslate_zinc_ore.json @@ -0,0 +1,3 @@ +{ + "parent": "cosmere:block/deepslate_zinc_ore" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/duralumin_blend.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/duralumin_blend.json new file mode 100644 index 000000000..459ef619e --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/duralumin_blend.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/duralumin_blend" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/duralumin_block.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/duralumin_block.json new file mode 100644 index 000000000..d22f9ff55 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/duralumin_block.json @@ -0,0 +1,3 @@ +{ + "parent": "cosmere:block/duralumin_block" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/duralumin_ingot.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/duralumin_ingot.json new file mode 100644 index 000000000..c224da41d --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/duralumin_ingot.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/duralumin_ingot" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/duralumin_nugget.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/duralumin_nugget.json new file mode 100644 index 000000000..c48149ab9 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/duralumin_nugget.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/duralumin_nugget" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/electrum_blend.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/electrum_blend.json new file mode 100644 index 000000000..d03f62b35 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/electrum_blend.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/electrum_blend" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/electrum_block.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/electrum_block.json new file mode 100644 index 000000000..945d0bf50 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/electrum_block.json @@ -0,0 +1,3 @@ +{ + "parent": "cosmere:block/electrum_block" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/electrum_ingot.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/electrum_ingot.json new file mode 100644 index 000000000..ea9a25bcd --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/electrum_ingot.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/electrum_ingot" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/electrum_nugget.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/electrum_nugget.json new file mode 100644 index 000000000..df011b53e --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/electrum_nugget.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/electrum_nugget" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/guide.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/guide.json similarity index 100% rename from src/main/generated/assets/cosmere/models/item/guide.json rename to src/datagen/generated/cosmere/assets/cosmere/models/item/guide.json diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/harmonium_block.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/harmonium_block.json new file mode 100644 index 000000000..ee95053c6 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/harmonium_block.json @@ -0,0 +1,3 @@ +{ + "parent": "cosmere:block/harmonium_block" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/harmonium_ingot.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/harmonium_ingot.json new file mode 100644 index 000000000..df0679516 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/harmonium_ingot.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/harmonium_ingot" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/harmonium_nugget.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/harmonium_nugget.json new file mode 100644 index 000000000..87d5a9720 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/harmonium_nugget.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/harmonium_nugget" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/lead_block.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/lead_block.json new file mode 100644 index 000000000..87cd5fcdd --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/lead_block.json @@ -0,0 +1,3 @@ +{ + "parent": "cosmere:block/lead_block" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/lead_ingot.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/lead_ingot.json new file mode 100644 index 000000000..63f7bd1d2 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/lead_ingot.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/lead_ingot" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/lead_nugget.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/lead_nugget.json new file mode 100644 index 000000000..4e0f8b630 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/lead_nugget.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/lead_nugget" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/lead_ore.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/lead_ore.json new file mode 100644 index 000000000..3699db894 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/lead_ore.json @@ -0,0 +1,3 @@ +{ + "parent": "cosmere:block/lead_ore" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasatium_aluminum_alloy_nugget.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasatium_aluminum_alloy_nugget.json new file mode 100644 index 000000000..8e5d4854f --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasatium_aluminum_alloy_nugget.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/lerasatium_aluminum_nugget" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasatium_bendalloy_alloy_nugget.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasatium_bendalloy_alloy_nugget.json new file mode 100644 index 000000000..9f57a508e --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasatium_bendalloy_alloy_nugget.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/lerasatium_bendalloy_nugget" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasatium_block.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasatium_block.json new file mode 100644 index 000000000..e65ea6107 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasatium_block.json @@ -0,0 +1,3 @@ +{ + "parent": "cosmere:block/lerasatium_block" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasatium_brass_alloy_nugget.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasatium_brass_alloy_nugget.json new file mode 100644 index 000000000..1bf4f89e2 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasatium_brass_alloy_nugget.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/lerasatium_brass_nugget" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasatium_bronze_alloy_nugget.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasatium_bronze_alloy_nugget.json new file mode 100644 index 000000000..2cafd19c0 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasatium_bronze_alloy_nugget.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/lerasatium_bronze_nugget" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasatium_cadmium_alloy_nugget.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasatium_cadmium_alloy_nugget.json new file mode 100644 index 000000000..44e193021 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasatium_cadmium_alloy_nugget.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/lerasatium_cadmium_nugget" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasatium_chromium_alloy_nugget.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasatium_chromium_alloy_nugget.json new file mode 100644 index 000000000..08c8868a2 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasatium_chromium_alloy_nugget.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/lerasatium_chromium_nugget" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasatium_copper_alloy_nugget.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasatium_copper_alloy_nugget.json new file mode 100644 index 000000000..f58c957e7 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasatium_copper_alloy_nugget.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/lerasatium_copper_nugget" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasatium_duralumin_alloy_nugget.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasatium_duralumin_alloy_nugget.json new file mode 100644 index 000000000..de8b0fed9 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasatium_duralumin_alloy_nugget.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/lerasatium_duralumin_nugget" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasatium_electrum_alloy_nugget.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasatium_electrum_alloy_nugget.json new file mode 100644 index 000000000..c117c3e27 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasatium_electrum_alloy_nugget.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/lerasatium_electrum_nugget" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasatium_gold_alloy_nugget.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasatium_gold_alloy_nugget.json new file mode 100644 index 000000000..a0d412b47 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasatium_gold_alloy_nugget.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/lerasatium_gold_nugget" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasatium_ingot.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasatium_ingot.json new file mode 100644 index 000000000..9b23552b4 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasatium_ingot.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/lerasatium_ingot" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasatium_iron_alloy_nugget.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasatium_iron_alloy_nugget.json new file mode 100644 index 000000000..c3aea1ef4 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasatium_iron_alloy_nugget.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/lerasatium_iron_nugget" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasatium_nicrosil_alloy_nugget.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasatium_nicrosil_alloy_nugget.json new file mode 100644 index 000000000..cd1317031 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasatium_nicrosil_alloy_nugget.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/lerasatium_nicrosil_nugget" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasatium_nugget.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasatium_nugget.json new file mode 100644 index 000000000..9952b7116 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasatium_nugget.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/lerasatium_nugget" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasatium_pewter_alloy_nugget.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasatium_pewter_alloy_nugget.json new file mode 100644 index 000000000..a6f35b382 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasatium_pewter_alloy_nugget.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/lerasatium_pewter_nugget" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasatium_steel_alloy_nugget.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasatium_steel_alloy_nugget.json new file mode 100644 index 000000000..09b469b41 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasatium_steel_alloy_nugget.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/lerasatium_steel_nugget" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasatium_tin_alloy_nugget.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasatium_tin_alloy_nugget.json new file mode 100644 index 000000000..bb2226766 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasatium_tin_alloy_nugget.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/lerasatium_tin_nugget" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasatium_zinc_alloy_nugget.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasatium_zinc_alloy_nugget.json new file mode 100644 index 000000000..7467ffba2 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasatium_zinc_alloy_nugget.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/lerasatium_zinc_nugget" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasium_aluminum_alloy_nugget.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasium_aluminum_alloy_nugget.json new file mode 100644 index 000000000..948e00391 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasium_aluminum_alloy_nugget.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/lerasium_aluminum_nugget" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasium_bendalloy_alloy_nugget.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasium_bendalloy_alloy_nugget.json new file mode 100644 index 000000000..00458680c --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasium_bendalloy_alloy_nugget.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/lerasium_bendalloy_nugget" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasium_block.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasium_block.json new file mode 100644 index 000000000..01c05e9ee --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasium_block.json @@ -0,0 +1,3 @@ +{ + "parent": "cosmere:block/lerasium_block" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasium_brass_alloy_nugget.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasium_brass_alloy_nugget.json new file mode 100644 index 000000000..f03e44e6b --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasium_brass_alloy_nugget.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/lerasium_brass_nugget" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasium_bronze_alloy_nugget.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasium_bronze_alloy_nugget.json new file mode 100644 index 000000000..a0a152e8f --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasium_bronze_alloy_nugget.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/lerasium_bronze_nugget" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasium_cadmium_alloy_nugget.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasium_cadmium_alloy_nugget.json new file mode 100644 index 000000000..a9dbc5237 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasium_cadmium_alloy_nugget.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/lerasium_cadmium_nugget" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasium_chromium_alloy_nugget.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasium_chromium_alloy_nugget.json new file mode 100644 index 000000000..ea6233a46 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasium_chromium_alloy_nugget.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/lerasium_chromium_nugget" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasium_copper_alloy_nugget.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasium_copper_alloy_nugget.json new file mode 100644 index 000000000..be973b39c --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasium_copper_alloy_nugget.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/lerasium_copper_nugget" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasium_duralumin_alloy_nugget.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasium_duralumin_alloy_nugget.json new file mode 100644 index 000000000..00834b68a --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasium_duralumin_alloy_nugget.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/lerasium_duralumin_nugget" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasium_electrum_alloy_nugget.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasium_electrum_alloy_nugget.json new file mode 100644 index 000000000..c695d3026 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasium_electrum_alloy_nugget.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/lerasium_electrum_nugget" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasium_gold_alloy_nugget.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasium_gold_alloy_nugget.json new file mode 100644 index 000000000..532682b60 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasium_gold_alloy_nugget.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/lerasium_gold_nugget" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasium_ingot.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasium_ingot.json new file mode 100644 index 000000000..8bf3a53e7 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasium_ingot.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/lerasium_ingot" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasium_iron_alloy_nugget.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasium_iron_alloy_nugget.json new file mode 100644 index 000000000..0e73316b0 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasium_iron_alloy_nugget.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/lerasium_iron_nugget" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasium_nicrosil_alloy_nugget.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasium_nicrosil_alloy_nugget.json new file mode 100644 index 000000000..dfc7e6828 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasium_nicrosil_alloy_nugget.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/lerasium_nicrosil_nugget" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasium_nugget.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasium_nugget.json new file mode 100644 index 000000000..fb9f1d549 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasium_nugget.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/lerasium_nugget" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasium_pewter_alloy_nugget.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasium_pewter_alloy_nugget.json new file mode 100644 index 000000000..51f7a2b26 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasium_pewter_alloy_nugget.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/lerasium_pewter_nugget" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasium_steel_alloy_nugget.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasium_steel_alloy_nugget.json new file mode 100644 index 000000000..0066eaff6 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasium_steel_alloy_nugget.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/lerasium_steel_nugget" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasium_tin_alloy_nugget.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasium_tin_alloy_nugget.json new file mode 100644 index 000000000..e01701d70 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasium_tin_alloy_nugget.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/lerasium_tin_nugget" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasium_zinc_alloy_nugget.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasium_zinc_alloy_nugget.json new file mode 100644 index 000000000..c0c3c3eef --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/lerasium_zinc_alloy_nugget.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/lerasium_zinc_nugget" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/malatium_block.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/malatium_block.json new file mode 100644 index 000000000..94033bedc --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/malatium_block.json @@ -0,0 +1,3 @@ +{ + "parent": "cosmere:block/malatium_block" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/malatium_ingot.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/malatium_ingot.json new file mode 100644 index 000000000..f0416d0cb --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/malatium_ingot.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/malatium_ingot" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/malatium_nugget.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/malatium_nugget.json new file mode 100644 index 000000000..b492020f4 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/malatium_nugget.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/malatium_nugget" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/metalworking_table.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/metalworking_table.json new file mode 100644 index 000000000..52f734613 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/metalworking_table.json @@ -0,0 +1,3 @@ +{ + "parent": "cosmere:block/metalworking_table" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/nickel_block.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/nickel_block.json new file mode 100644 index 000000000..6b339d796 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/nickel_block.json @@ -0,0 +1,3 @@ +{ + "parent": "cosmere:block/nickel_block" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/nickel_ingot.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/nickel_ingot.json new file mode 100644 index 000000000..b11293c57 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/nickel_ingot.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/nickel_ingot" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/nickel_nugget.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/nickel_nugget.json new file mode 100644 index 000000000..254548e74 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/nickel_nugget.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/nickel_nugget" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/nickel_ore.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/nickel_ore.json new file mode 100644 index 000000000..a252cf84d --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/nickel_ore.json @@ -0,0 +1,3 @@ +{ + "parent": "cosmere:block/nickel_ore" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/nicrosil_blend.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/nicrosil_blend.json new file mode 100644 index 000000000..f229935db --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/nicrosil_blend.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/nicrosil_blend" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/nicrosil_block.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/nicrosil_block.json new file mode 100644 index 000000000..1f7fb708a --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/nicrosil_block.json @@ -0,0 +1,3 @@ +{ + "parent": "cosmere:block/nicrosil_block" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/nicrosil_ingot.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/nicrosil_ingot.json new file mode 100644 index 000000000..397271e5d --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/nicrosil_ingot.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/nicrosil_ingot" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/nicrosil_nugget.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/nicrosil_nugget.json new file mode 100644 index 000000000..45254f4d7 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/nicrosil_nugget.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/nicrosil_nugget" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/pewter_blend.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/pewter_blend.json new file mode 100644 index 000000000..10789e1db --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/pewter_blend.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/pewter_blend" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/pewter_block.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/pewter_block.json new file mode 100644 index 000000000..4e67e04ad --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/pewter_block.json @@ -0,0 +1,3 @@ +{ + "parent": "cosmere:block/pewter_block" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/pewter_ingot.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/pewter_ingot.json new file mode 100644 index 000000000..cf3c491d6 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/pewter_ingot.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/pewter_ingot" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/pewter_nugget.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/pewter_nugget.json new file mode 100644 index 000000000..883097f64 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/pewter_nugget.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/pewter_nugget" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/raw_aluminum_ore.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/raw_aluminum_ore.json new file mode 100644 index 000000000..fcf574b32 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/raw_aluminum_ore.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/raw_aluminum_ore" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/raw_cadmium_ore.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/raw_cadmium_ore.json new file mode 100644 index 000000000..07d9de7cd --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/raw_cadmium_ore.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/raw_cadmium_ore" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/raw_chromium_ore.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/raw_chromium_ore.json new file mode 100644 index 000000000..19ca6e5db --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/raw_chromium_ore.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/raw_chromium_ore" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/raw_lead_ore.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/raw_lead_ore.json new file mode 100644 index 000000000..a1671093a --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/raw_lead_ore.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/raw_lead_ore" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/raw_nickel_ore.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/raw_nickel_ore.json new file mode 100644 index 000000000..1285a0b00 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/raw_nickel_ore.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/raw_nickel_ore" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/raw_silver_ore.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/raw_silver_ore.json new file mode 100644 index 000000000..06ce16856 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/raw_silver_ore.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/raw_silver_ore" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/raw_tin_ore.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/raw_tin_ore.json new file mode 100644 index 000000000..5fe6ef2ec --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/raw_tin_ore.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/raw_tin_ore" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/raw_zinc_ore.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/raw_zinc_ore.json new file mode 100644 index 000000000..1604e08ee --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/raw_zinc_ore.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/raw_zinc_ore" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/silver_block.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/silver_block.json new file mode 100644 index 000000000..50984dbe5 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/silver_block.json @@ -0,0 +1,3 @@ +{ + "parent": "cosmere:block/silver_block" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/silver_ingot.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/silver_ingot.json new file mode 100644 index 000000000..412194e59 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/silver_ingot.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/silver_ingot" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/silver_nugget.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/silver_nugget.json new file mode 100644 index 000000000..8e2adf519 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/silver_nugget.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/silver_nugget" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/silver_ore.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/silver_ore.json new file mode 100644 index 000000000..8e13fabe2 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/silver_ore.json @@ -0,0 +1,3 @@ +{ + "parent": "cosmere:block/silver_ore" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/steel_blend.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/steel_blend.json new file mode 100644 index 000000000..5d6129b16 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/steel_blend.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/steel_blend" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/steel_block.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/steel_block.json new file mode 100644 index 000000000..3658df55d --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/steel_block.json @@ -0,0 +1,3 @@ +{ + "parent": "cosmere:block/steel_block" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/steel_ingot.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/steel_ingot.json new file mode 100644 index 000000000..b3afb16cd --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/steel_ingot.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/steel_ingot" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/steel_nugget.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/steel_nugget.json new file mode 100644 index 000000000..532425a1e --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/steel_nugget.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/steel_nugget" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/tin_block.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/tin_block.json new file mode 100644 index 000000000..c2ffbf74b --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/tin_block.json @@ -0,0 +1,3 @@ +{ + "parent": "cosmere:block/tin_block" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/tin_ingot.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/tin_ingot.json new file mode 100644 index 000000000..184f47f7c --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/tin_ingot.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/tin_ingot" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/tin_nugget.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/tin_nugget.json new file mode 100644 index 000000000..a0059449f --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/tin_nugget.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/tin_nugget" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/tin_ore.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/tin_ore.json new file mode 100644 index 000000000..8b26a0de8 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/tin_ore.json @@ -0,0 +1,3 @@ +{ + "parent": "cosmere:block/tin_ore" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/zinc_block.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/zinc_block.json new file mode 100644 index 000000000..d48ecba1a --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/zinc_block.json @@ -0,0 +1,3 @@ +{ + "parent": "cosmere:block/zinc_block" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/zinc_ingot.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/zinc_ingot.json new file mode 100644 index 000000000..514cd1973 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/zinc_ingot.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/zinc_ingot" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/zinc_nugget.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/zinc_nugget.json new file mode 100644 index 000000000..6543d5982 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/zinc_nugget.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmere:item/zinc_nugget" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/models/item/zinc_ore.json b/src/datagen/generated/cosmere/assets/cosmere/models/item/zinc_ore.json new file mode 100644 index 000000000..9b50cfe6f --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/models/item/zinc_ore.json @@ -0,0 +1,3 @@ +{ + "parent": "cosmere:block/zinc_ore" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/patchouli_books/guide/en_us/categories/basics.json b/src/datagen/generated/cosmere/assets/cosmere/patchouli_books/guide/en_us/categories/basics.json new file mode 100644 index 000000000..5c2ac0503 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/patchouli_books/guide/en_us/categories/basics.json @@ -0,0 +1,7 @@ +{ + "description": "In this section, I will teach you how to access and use your powers most effectively", + "icon": "cosmere:tin_ingot", + "name": "Basics", + "secret": false, + "sortnum": 10 +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/patchouli_books/guide/en_us/entries/basics/activating_powers.json b/src/datagen/generated/cosmere/assets/cosmere/patchouli_books/guide/en_us/entries/basics/activating_powers.json new file mode 100644 index 000000000..ddb7690c3 --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/patchouli_books/guide/en_us/entries/basics/activating_powers.json @@ -0,0 +1,40 @@ +{ + "category": "cosmere:basics", + "icon": "cosmere:steel_ingot", + "name": "Activating Powers", + "pages": [ + { + "type": "text", + "text": "The first way I will teach you to activate powers is with the basic keybinds. This is not the most effective way of doing it, but it is straightforward.\nFirst, locate the icon for your current main power in the upper left corner. By pressing ($(k:key.cosmere.powers.next)$()) and ($(k:key.cosmere.powers.previous)$()) you can change which power is your current main. From there, press ($(k:key.cosmere.powers.mode.increase)$()) and ($(k:key.cosmere.powers.mode.decrease)$()) to change the mode for that power by plus or minus one respectively. If you are holding ($(k:Shift)$()) while you are changing the mode this way, it will change by plus or minus five levels, If instead you are holding ($(k:control)$()()) while you are changing the mode this way, it will change by plus or minus ten levels or to the maximum, whichever is lower. Changing your current main power will not stop your other powers from running in the background.", + "title": "Activating Powers" + }, + { + "type": "text", + "text": "The most accessible way to activate powers is from the menu. To access the menu, press and hold ($(k:key.cosmere.powers.menu)$()). From here, left clicking on a power will increase its mode by one, and right clicking will decrease it. Releasing ($(k:key.cosmere.powers.menu)$()) will close the menu.", + "title": "The Menu" + }, + { + "type": "text", + "text": "The fastest way to activate one power quickly is with its dedicated keybind. These are not set by default, but you can change your favorites to activate this way. When this keybind is used, it will set the mode of your power to +1, unless the power is feruchemical in nature, in which case it will tap at level 5 instead. However, in all cases, if the power is already active, no matter the mode, pressing the keybind will turn the power off instead. Using a dedicated keybind will also set your active main power to the associated power as well", + "title": "Dedicated Keybinds" + }, + { + "type": "text", + "text": "(Note: this is a recent and complicated feature. It may have bugs. Please report all bugs to the bug tracker.)$(br)By far the most complicated way to activate your powers is with the Power Mode Save States. You have access to nine different ones. To save a new save state, activate all desired powers at the desired levels through any of the means previously described, and ensure all others are turned off. Then hold ($(k:key.cosmere.powers.save)$()) and press one of your hotbar slots.$(br2)All active powers are now saved to that key.", + "title": "Power Mode Save Keybind" + }, + { + "type": "text", + "text": "To load a preexisting save state, hold ($(k:key.cosmere.powers.activate)$()) and press the hotbar key for the desired save slot. Your powers should now be activated. If they are not, press it again. (This is a known bug.) You can also toggle a save state off by pressing the keybind again. Powers that were not on when the save state was saved will not be affected by loading the save state." + }, + { + "type": "text", + "text": "To quickly deactivate all powers you have active, press ($(k:key.cosmere.powers.toggle)$()).", + "title": "Deactivating Powers" + } + ], + "priority": true, + "read_by_default": false, + "secret": false, + "sortnum": 0 +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/assets/cosmere/patchouli_books/guide/en_us/entries/basics/investiture_basics.json b/src/datagen/generated/cosmere/assets/cosmere/patchouli_books/guide/en_us/entries/basics/investiture_basics.json new file mode 100644 index 000000000..9eed4394c --- /dev/null +++ b/src/datagen/generated/cosmere/assets/cosmere/patchouli_books/guide/en_us/entries/basics/investiture_basics.json @@ -0,0 +1,21 @@ +{ + "category": "cosmere:basics", + "icon": "cosmere:lerasatium_ingot", + "name": "Investiture Basics", + "pages": [ + { + "type": "text", + "text": "$(thing)Investiture$() is a concept functioning like matter or energy. It makes up 16 godlike beings called $(thing)Shards$(), as well as many other mystical or magical things. Investiture permeates all matter and can function as a power source for several types of magics we call \"$(thing)Invested Arts$().\" You may already have access to one or more of these arts.", + "title": "Investiture (For Dummies)" + }, + { + "type": "text", + "text": "Once, all investiture belonged to one powerful being called \"$(thing)Adonalsium$(),\" but eventually 17 people decided to work together to kill him. They gathered four powerful artifacts made from investiture known as the \"$(thing)Dawnshards$()\" and killed him with them through means still unknown to us. After Adonalsium was killed, his investiture was broken into 16 Shards and each of the 17 people picked a shard and took it up, except for one, a man named \"$(thing)Hoid$().\" You may even see Hoid on your travels.", + "title": "Origins of Investiture" + } + ], + "priority": true, + "read_by_default": false, + "secret": false, + "sortnum": 0 +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/aluminum_block.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/aluminum_block.json new file mode 100644 index 000000000..7d634a4f2 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/aluminum_block.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/aluminum" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:aluminum_block" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:aluminum_block" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/aluminum_ingot.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/aluminum_ingot.json new file mode 100644 index 000000000..5c7e7d459 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/aluminum_ingot.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "tag": "forge:nuggets/aluminum" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:aluminum_ingot" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:aluminum_ingot" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/atium_block.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/atium_block.json new file mode 100644 index 000000000..6983212ca --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/atium_block.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/atium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:atium_block" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:atium_block" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/atium_ingot.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/atium_ingot.json new file mode 100644 index 000000000..efaae7d5d --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/atium_ingot.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:atium_nugget" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:atium_ingot" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:atium_ingot" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/bendalloy_block.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/bendalloy_block.json new file mode 100644 index 000000000..8d78f4406 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/bendalloy_block.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/bendalloy" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:bendalloy_block" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:bendalloy_block" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/bendalloy_ingot.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/bendalloy_ingot.json new file mode 100644 index 000000000..72072164d --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/bendalloy_ingot.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "tag": "forge:nuggets/bendalloy" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:bendalloy_ingot" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:bendalloy_ingot" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/brass_block.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/brass_block.json new file mode 100644 index 000000000..4157c81ca --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/brass_block.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/brass" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:brass_block" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:brass_block" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/brass_ingot.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/brass_ingot.json new file mode 100644 index 000000000..22137ae6b --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/brass_ingot.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "tag": "forge:nuggets/brass" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:brass_ingot" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:brass_ingot" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/bronze_block.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/bronze_block.json new file mode 100644 index 000000000..fbe48a421 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/bronze_block.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/bronze" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:bronze_block" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:bronze_block" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/bronze_ingot.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/bronze_ingot.json new file mode 100644 index 000000000..b99518ad9 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/bronze_ingot.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "tag": "forge:nuggets/bronze" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:bronze_ingot" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:bronze_ingot" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/cadmium_block.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/cadmium_block.json new file mode 100644 index 000000000..f4b5de12e --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/cadmium_block.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/cadmium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:cadmium_block" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:cadmium_block" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/cadmium_ingot.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/cadmium_ingot.json new file mode 100644 index 000000000..7cc869758 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/cadmium_ingot.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "tag": "forge:nuggets/cadmium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:cadmium_ingot" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:cadmium_ingot" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/chromium_block.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/chromium_block.json new file mode 100644 index 000000000..525f65584 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/chromium_block.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/chromium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:chromium_block" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:chromium_block" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/chromium_ingot.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/chromium_ingot.json new file mode 100644 index 000000000..30a4215b5 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/chromium_ingot.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "tag": "forge:nuggets/chromium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:chromium_ingot" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:chromium_ingot" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/duralumin_block.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/duralumin_block.json new file mode 100644 index 000000000..309332825 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/duralumin_block.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/duralumin" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:duralumin_block" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:duralumin_block" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/duralumin_ingot.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/duralumin_ingot.json new file mode 100644 index 000000000..996a1cadc --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/duralumin_ingot.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "tag": "forge:nuggets/duralumin" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:duralumin_ingot" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:duralumin_ingot" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/electrum_block.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/electrum_block.json new file mode 100644 index 000000000..6bc9c6803 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/electrum_block.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/electrum" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:electrum_block" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:electrum_block" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/electrum_ingot.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/electrum_ingot.json new file mode 100644 index 000000000..6ebc5b33e --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/electrum_ingot.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "tag": "forge:nuggets/electrum" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:electrum_ingot" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:electrum_ingot" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/harmonium_block.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/harmonium_block.json new file mode 100644 index 000000000..3fc4fe6ba --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/harmonium_block.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/harmonium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:harmonium_block" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:harmonium_block" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/harmonium_ingot.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/harmonium_ingot.json new file mode 100644 index 000000000..43215dd80 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/harmonium_ingot.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:harmonium_nugget" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:harmonium_ingot" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:harmonium_ingot" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/lead_block.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/lead_block.json new file mode 100644 index 000000000..9c91d2579 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/lead_block.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/lead" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:lead_block" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:lead_block" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/lead_ingot.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/lead_ingot.json new file mode 100644 index 000000000..46226c60d --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/lead_ingot.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "tag": "forge:nuggets/lead" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:lead_ingot" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:lead_ingot" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/lerasatium_block.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/lerasatium_block.json new file mode 100644 index 000000000..9bd75ad70 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/lerasatium_block.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/lerasatium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:lerasatium_block" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:lerasatium_block" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/lerasatium_ingot.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/lerasatium_ingot.json new file mode 100644 index 000000000..3b9b1e517 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/lerasatium_ingot.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:lerasatium_nugget" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:lerasatium_ingot" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:lerasatium_ingot" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/lerasium_block.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/lerasium_block.json new file mode 100644 index 000000000..f5f1de554 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/lerasium_block.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/lerasium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:lerasium_block" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:lerasium_block" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/lerasium_ingot.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/lerasium_ingot.json new file mode 100644 index 000000000..e49b50cf9 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/lerasium_ingot.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:lerasium_nugget" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:lerasium_ingot" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:lerasium_ingot" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/malatium_block.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/malatium_block.json new file mode 100644 index 000000000..1c83ac5bc --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/malatium_block.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/malatium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:malatium_block" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:malatium_block" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/malatium_ingot.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/malatium_ingot.json new file mode 100644 index 000000000..1daf1fdf5 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/malatium_ingot.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "tag": "forge:nuggets/malatium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:malatium_ingot" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:malatium_ingot" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/metalworking_table.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/metalworking_table.json new file mode 100644 index 000000000..44855dd85 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/metalworking_table.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:metalworking_table" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:metalworking_table" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/nickel_block.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/nickel_block.json new file mode 100644 index 000000000..9e13b21c3 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/nickel_block.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/nickel" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:nickel_block" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:nickel_block" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/nickel_ingot.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/nickel_ingot.json new file mode 100644 index 000000000..219d24d77 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/nickel_ingot.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "tag": "forge:nuggets/nickel" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:nickel_ingot" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:nickel_ingot" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/nicrosil_block.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/nicrosil_block.json new file mode 100644 index 000000000..cebee28d8 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/nicrosil_block.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/nicrosil" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:nicrosil_block" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:nicrosil_block" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/nicrosil_ingot.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/nicrosil_ingot.json new file mode 100644 index 000000000..0681723ff --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/nicrosil_ingot.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "tag": "forge:nuggets/nicrosil" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:nicrosil_ingot" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:nicrosil_ingot" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/pewter_block.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/pewter_block.json new file mode 100644 index 000000000..a5f77b6bd --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/pewter_block.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/pewter" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:pewter_block" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:pewter_block" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/pewter_ingot.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/pewter_ingot.json new file mode 100644 index 000000000..40e819b6e --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/pewter_ingot.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "tag": "forge:nuggets/pewter" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:pewter_ingot" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:pewter_ingot" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/silver_block.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/silver_block.json new file mode 100644 index 000000000..f08102966 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/silver_block.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/silver" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:silver_block" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:silver_block" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/silver_ingot.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/silver_ingot.json new file mode 100644 index 000000000..7ae28b81b --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/silver_ingot.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "tag": "forge:nuggets/silver" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:silver_ingot" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:silver_ingot" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/steel_block.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/steel_block.json new file mode 100644 index 000000000..8221ab423 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/steel_block.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/steel" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:steel_block" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:steel_block" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/steel_ingot.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/steel_ingot.json new file mode 100644 index 000000000..57d8efb9e --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/steel_ingot.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "tag": "forge:nuggets/steel" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:steel_ingot" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:steel_ingot" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/tin_block.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/tin_block.json new file mode 100644 index 000000000..a848309ae --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/tin_block.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/tin" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:tin_block" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:tin_block" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/tin_ingot.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/tin_ingot.json new file mode 100644 index 000000000..127b5d8da --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/tin_ingot.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "tag": "forge:nuggets/tin" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:tin_ingot" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:tin_ingot" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/zinc_block.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/zinc_block.json new file mode 100644 index 000000000..32f76e109 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/zinc_block.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/zinc" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:zinc_block" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:zinc_block" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/zinc_ingot.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/zinc_ingot.json new file mode 100644 index 000000000..3f35aa556 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/decorations/zinc_ingot.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "tag": "forge:nuggets/zinc" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:zinc_ingot" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:zinc_ingot" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/alloying/dust_blend/bendalloy.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/alloying/dust_blend/bendalloy.json new file mode 100644 index 000000000..069c133ad --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/alloying/dust_blend/bendalloy.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:bendalloy_blend" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:alloying/dust_blend/bendalloy" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:alloying/dust_blend/bendalloy" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/alloying/dust_blend/brass.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/alloying/dust_blend/brass.json new file mode 100644 index 000000000..b739ee55e --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/alloying/dust_blend/brass.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:brass_blend" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:alloying/dust_blend/brass" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:alloying/dust_blend/brass" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/alloying/dust_blend/bronze.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/alloying/dust_blend/bronze.json new file mode 100644 index 000000000..0ff672253 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/alloying/dust_blend/bronze.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:bronze_blend" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:alloying/dust_blend/bronze" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:alloying/dust_blend/bronze" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/alloying/dust_blend/duralumin.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/alloying/dust_blend/duralumin.json new file mode 100644 index 000000000..855ec59b0 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/alloying/dust_blend/duralumin.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:duralumin_blend" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:alloying/dust_blend/duralumin" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:alloying/dust_blend/duralumin" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/alloying/dust_blend/electrum.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/alloying/dust_blend/electrum.json new file mode 100644 index 000000000..f3ff244e1 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/alloying/dust_blend/electrum.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:electrum_blend" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:alloying/dust_blend/electrum" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:alloying/dust_blend/electrum" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/alloying/dust_blend/nicrosil.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/alloying/dust_blend/nicrosil.json new file mode 100644 index 000000000..d18338489 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/alloying/dust_blend/nicrosil.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:nicrosil_blend" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:alloying/dust_blend/nicrosil" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:alloying/dust_blend/nicrosil" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/alloying/dust_blend/pewter.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/alloying/dust_blend/pewter.json new file mode 100644 index 000000000..aa636eda0 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/alloying/dust_blend/pewter.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:pewter_blend" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:alloying/dust_blend/pewter" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:alloying/dust_blend/pewter" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/alloying/dust_blend/steel.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/alloying/dust_blend/steel.json new file mode 100644 index 000000000..db8c67be6 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/alloying/dust_blend/steel.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:steel_blend" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:alloying/dust_blend/steel" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:alloying/dust_blend/steel" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/alloying/ingot_blend/bendalloy.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/alloying/ingot_blend/bendalloy.json new file mode 100644 index 000000000..25d8a0294 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/alloying/ingot_blend/bendalloy.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:bendalloy_blend" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:alloying/ingot_blend/bendalloy" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:alloying/ingot_blend/bendalloy" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/alloying/ingot_blend/brass.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/alloying/ingot_blend/brass.json new file mode 100644 index 000000000..5b4a1263b --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/alloying/ingot_blend/brass.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:brass_blend" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:alloying/ingot_blend/brass" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:alloying/ingot_blend/brass" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/alloying/ingot_blend/bronze.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/alloying/ingot_blend/bronze.json new file mode 100644 index 000000000..164d1e3dc --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/alloying/ingot_blend/bronze.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:bronze_blend" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:alloying/ingot_blend/bronze" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:alloying/ingot_blend/bronze" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/alloying/ingot_blend/duralumin.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/alloying/ingot_blend/duralumin.json new file mode 100644 index 000000000..c4bd666b8 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/alloying/ingot_blend/duralumin.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:duralumin_blend" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:alloying/ingot_blend/duralumin" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:alloying/ingot_blend/duralumin" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/alloying/ingot_blend/electrum.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/alloying/ingot_blend/electrum.json new file mode 100644 index 000000000..eb589477e --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/alloying/ingot_blend/electrum.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:electrum_blend" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:alloying/ingot_blend/electrum" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:alloying/ingot_blend/electrum" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/alloying/ingot_blend/nicrosil.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/alloying/ingot_blend/nicrosil.json new file mode 100644 index 000000000..5151a625a --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/alloying/ingot_blend/nicrosil.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:nicrosil_blend" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:alloying/ingot_blend/nicrosil" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:alloying/ingot_blend/nicrosil" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/alloying/ingot_blend/pewter.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/alloying/ingot_blend/pewter.json new file mode 100644 index 000000000..2257e1f92 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/alloying/ingot_blend/pewter.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:pewter_blend" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:alloying/ingot_blend/pewter" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:alloying/ingot_blend/pewter" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/alloying/ingot_blend/steel.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/alloying/ingot_blend/steel.json new file mode 100644 index 000000000..51e6c5afa --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/alloying/ingot_blend/steel.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:steel_blend" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:alloying/ingot_blend/steel" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:alloying/ingot_blend/steel" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/alloying/raw_blend/bendalloy.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/alloying/raw_blend/bendalloy.json new file mode 100644 index 000000000..be33e1240 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/alloying/raw_blend/bendalloy.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:bendalloy_blend" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:alloying/raw_blend/bendalloy" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:alloying/raw_blend/bendalloy" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/alloying/raw_blend/brass.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/alloying/raw_blend/brass.json new file mode 100644 index 000000000..fd7a048c6 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/alloying/raw_blend/brass.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:brass_blend" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:alloying/raw_blend/brass" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:alloying/raw_blend/brass" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/alloying/raw_blend/bronze.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/alloying/raw_blend/bronze.json new file mode 100644 index 000000000..550831174 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/alloying/raw_blend/bronze.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:bronze_blend" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:alloying/raw_blend/bronze" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:alloying/raw_blend/bronze" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/alloying/raw_blend/duralumin.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/alloying/raw_blend/duralumin.json new file mode 100644 index 000000000..e96bcabcf --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/alloying/raw_blend/duralumin.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:duralumin_blend" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:alloying/raw_blend/duralumin" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:alloying/raw_blend/duralumin" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/alloying/raw_blend/electrum.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/alloying/raw_blend/electrum.json new file mode 100644 index 000000000..cbc361a59 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/alloying/raw_blend/electrum.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:electrum_blend" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:alloying/raw_blend/electrum" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:alloying/raw_blend/electrum" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/alloying/raw_blend/nicrosil.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/alloying/raw_blend/nicrosil.json new file mode 100644 index 000000000..409b89cd7 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/alloying/raw_blend/nicrosil.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:nicrosil_blend" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:alloying/raw_blend/nicrosil" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:alloying/raw_blend/nicrosil" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/alloying/raw_blend/pewter.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/alloying/raw_blend/pewter.json new file mode 100644 index 000000000..0d75d2955 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/alloying/raw_blend/pewter.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:pewter_blend" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:alloying/raw_blend/pewter" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:alloying/raw_blend/pewter" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/alloying/raw_blend/steel.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/alloying/raw_blend/steel.json new file mode 100644 index 000000000..865ab53c9 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/alloying/raw_blend/steel.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:steel_blend" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:alloying/raw_blend/steel" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:alloying/raw_blend/steel" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/aluminum_ingot_from_blasting_aluminum_ore.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/aluminum_ingot_from_blasting_aluminum_ore.json new file mode 100644 index 000000000..74be44066 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/aluminum_ingot_from_blasting_aluminum_ore.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ore": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:aluminum_ore" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:aluminum_ingot_from_blasting_aluminum_ore" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_ore", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:aluminum_ingot_from_blasting_aluminum_ore" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/aluminum_ingot_from_blasting_deepslate_aluminum_ore.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/aluminum_ingot_from_blasting_deepslate_aluminum_ore.json new file mode 100644 index 000000000..7759b4c3b --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/aluminum_ingot_from_blasting_deepslate_aluminum_ore.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ore": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:deepslate_aluminum_ore" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:aluminum_ingot_from_blasting_deepslate_aluminum_ore" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_ore", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:aluminum_ingot_from_blasting_deepslate_aluminum_ore" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/aluminum_ingot_from_blasting_raw_aluminum_ore.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/aluminum_ingot_from_blasting_raw_aluminum_ore.json new file mode 100644 index 000000000..1ae39e108 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/aluminum_ingot_from_blasting_raw_aluminum_ore.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ore": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:raw_aluminum_ore" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:aluminum_ingot_from_blasting_raw_aluminum_ore" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_ore", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:aluminum_ingot_from_blasting_raw_aluminum_ore" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/aluminum_ingot_from_smelting_aluminum_ore.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/aluminum_ingot_from_smelting_aluminum_ore.json new file mode 100644 index 000000000..f503e5b6e --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/aluminum_ingot_from_smelting_aluminum_ore.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ore": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:aluminum_ore" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:aluminum_ingot_from_smelting_aluminum_ore" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_ore", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:aluminum_ingot_from_smelting_aluminum_ore" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/aluminum_ingot_from_smelting_deepslate_aluminum_ore.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/aluminum_ingot_from_smelting_deepslate_aluminum_ore.json new file mode 100644 index 000000000..cc68f2138 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/aluminum_ingot_from_smelting_deepslate_aluminum_ore.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ore": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:deepslate_aluminum_ore" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:aluminum_ingot_from_smelting_deepslate_aluminum_ore" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_ore", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:aluminum_ingot_from_smelting_deepslate_aluminum_ore" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/aluminum_ingot_from_smelting_raw_aluminum_ore.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/aluminum_ingot_from_smelting_raw_aluminum_ore.json new file mode 100644 index 000000000..c0cda3a73 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/aluminum_ingot_from_smelting_raw_aluminum_ore.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ore": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:raw_aluminum_ore" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:aluminum_ingot_from_smelting_raw_aluminum_ore" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_ore", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:aluminum_ingot_from_smelting_raw_aluminum_ore" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/bendalloy_ingot_from_blasting_bendalloy_blend.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/bendalloy_ingot_from_blasting_bendalloy_blend.json new file mode 100644 index 000000000..a974da054 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/bendalloy_ingot_from_blasting_bendalloy_blend.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ore": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:bendalloy_blend" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:bendalloy_ingot_from_blasting_bendalloy_blend" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_ore", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:bendalloy_ingot_from_blasting_bendalloy_blend" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/bendalloy_ingot_from_smelting_bendalloy_blend.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/bendalloy_ingot_from_smelting_bendalloy_blend.json new file mode 100644 index 000000000..1fcb0db78 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/bendalloy_ingot_from_smelting_bendalloy_blend.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ore": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:bendalloy_blend" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:bendalloy_ingot_from_smelting_bendalloy_blend" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_ore", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:bendalloy_ingot_from_smelting_bendalloy_blend" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/brass_ingot_from_blasting_brass_blend.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/brass_ingot_from_blasting_brass_blend.json new file mode 100644 index 000000000..9d013a8d8 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/brass_ingot_from_blasting_brass_blend.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ore": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:brass_blend" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:brass_ingot_from_blasting_brass_blend" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_ore", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:brass_ingot_from_blasting_brass_blend" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/brass_ingot_from_smelting_brass_blend.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/brass_ingot_from_smelting_brass_blend.json new file mode 100644 index 000000000..92f767ef7 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/brass_ingot_from_smelting_brass_blend.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ore": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:brass_blend" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:brass_ingot_from_smelting_brass_blend" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_ore", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:brass_ingot_from_smelting_brass_blend" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/bronze_ingot_from_blasting_bronze_blend.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/bronze_ingot_from_blasting_bronze_blend.json new file mode 100644 index 000000000..b93a3d448 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/bronze_ingot_from_blasting_bronze_blend.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ore": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:bronze_blend" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:bronze_ingot_from_blasting_bronze_blend" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_ore", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:bronze_ingot_from_blasting_bronze_blend" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/bronze_ingot_from_smelting_bronze_blend.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/bronze_ingot_from_smelting_bronze_blend.json new file mode 100644 index 000000000..ffdd35adb --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/bronze_ingot_from_smelting_bronze_blend.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ore": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:bronze_blend" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:bronze_ingot_from_smelting_bronze_blend" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_ore", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:bronze_ingot_from_smelting_bronze_blend" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/cadmium_ingot_from_blasting_cadmium_ore.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/cadmium_ingot_from_blasting_cadmium_ore.json new file mode 100644 index 000000000..1eac539e3 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/cadmium_ingot_from_blasting_cadmium_ore.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ore": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:cadmium_ore" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:cadmium_ingot_from_blasting_cadmium_ore" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_ore", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:cadmium_ingot_from_blasting_cadmium_ore" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/cadmium_ingot_from_blasting_deepslate_cadmium_ore.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/cadmium_ingot_from_blasting_deepslate_cadmium_ore.json new file mode 100644 index 000000000..e6a57067b --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/cadmium_ingot_from_blasting_deepslate_cadmium_ore.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ore": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:deepslate_cadmium_ore" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:cadmium_ingot_from_blasting_deepslate_cadmium_ore" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_ore", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:cadmium_ingot_from_blasting_deepslate_cadmium_ore" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/cadmium_ingot_from_blasting_raw_cadmium_ore.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/cadmium_ingot_from_blasting_raw_cadmium_ore.json new file mode 100644 index 000000000..0dab22b25 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/cadmium_ingot_from_blasting_raw_cadmium_ore.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ore": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:raw_cadmium_ore" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:cadmium_ingot_from_blasting_raw_cadmium_ore" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_ore", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:cadmium_ingot_from_blasting_raw_cadmium_ore" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/cadmium_ingot_from_smelting_cadmium_ore.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/cadmium_ingot_from_smelting_cadmium_ore.json new file mode 100644 index 000000000..647f9d96a --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/cadmium_ingot_from_smelting_cadmium_ore.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ore": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:cadmium_ore" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:cadmium_ingot_from_smelting_cadmium_ore" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_ore", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:cadmium_ingot_from_smelting_cadmium_ore" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/cadmium_ingot_from_smelting_deepslate_cadmium_ore.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/cadmium_ingot_from_smelting_deepslate_cadmium_ore.json new file mode 100644 index 000000000..73da6b920 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/cadmium_ingot_from_smelting_deepslate_cadmium_ore.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ore": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:deepslate_cadmium_ore" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:cadmium_ingot_from_smelting_deepslate_cadmium_ore" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_ore", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:cadmium_ingot_from_smelting_deepslate_cadmium_ore" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/cadmium_ingot_from_smelting_raw_cadmium_ore.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/cadmium_ingot_from_smelting_raw_cadmium_ore.json new file mode 100644 index 000000000..3e81051c2 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/cadmium_ingot_from_smelting_raw_cadmium_ore.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ore": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:raw_cadmium_ore" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:cadmium_ingot_from_smelting_raw_cadmium_ore" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_ore", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:cadmium_ingot_from_smelting_raw_cadmium_ore" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/chromium_ingot_from_blasting_chromium_ore.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/chromium_ingot_from_blasting_chromium_ore.json new file mode 100644 index 000000000..28bb59bdc --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/chromium_ingot_from_blasting_chromium_ore.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ore": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:chromium_ore" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:chromium_ingot_from_blasting_chromium_ore" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_ore", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:chromium_ingot_from_blasting_chromium_ore" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/chromium_ingot_from_blasting_deepslate_chromium_ore.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/chromium_ingot_from_blasting_deepslate_chromium_ore.json new file mode 100644 index 000000000..dfefab5c9 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/chromium_ingot_from_blasting_deepslate_chromium_ore.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ore": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:deepslate_chromium_ore" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:chromium_ingot_from_blasting_deepslate_chromium_ore" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_ore", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:chromium_ingot_from_blasting_deepslate_chromium_ore" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/chromium_ingot_from_blasting_raw_chromium_ore.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/chromium_ingot_from_blasting_raw_chromium_ore.json new file mode 100644 index 000000000..3dd362428 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/chromium_ingot_from_blasting_raw_chromium_ore.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ore": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:raw_chromium_ore" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:chromium_ingot_from_blasting_raw_chromium_ore" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_ore", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:chromium_ingot_from_blasting_raw_chromium_ore" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/chromium_ingot_from_smelting_chromium_ore.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/chromium_ingot_from_smelting_chromium_ore.json new file mode 100644 index 000000000..29ab5c53b --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/chromium_ingot_from_smelting_chromium_ore.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ore": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:chromium_ore" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:chromium_ingot_from_smelting_chromium_ore" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_ore", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:chromium_ingot_from_smelting_chromium_ore" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/chromium_ingot_from_smelting_deepslate_chromium_ore.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/chromium_ingot_from_smelting_deepslate_chromium_ore.json new file mode 100644 index 000000000..f9b2a54d7 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/chromium_ingot_from_smelting_deepslate_chromium_ore.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ore": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:deepslate_chromium_ore" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:chromium_ingot_from_smelting_deepslate_chromium_ore" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_ore", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:chromium_ingot_from_smelting_deepslate_chromium_ore" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/chromium_ingot_from_smelting_raw_chromium_ore.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/chromium_ingot_from_smelting_raw_chromium_ore.json new file mode 100644 index 000000000..7935b40e7 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/chromium_ingot_from_smelting_raw_chromium_ore.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ore": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:raw_chromium_ore" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:chromium_ingot_from_smelting_raw_chromium_ore" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_ore", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:chromium_ingot_from_smelting_raw_chromium_ore" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/aluminum_block_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/aluminum_block_deconstruct.json new file mode 100644 index 000000000..b4a0b0f6e --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/aluminum_block_deconstruct.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:aluminum_ingot" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:conversions/aluminum_block_deconstruct" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:conversions/aluminum_block_deconstruct" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/aluminum_item_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/aluminum_item_deconstruct.json new file mode 100644 index 000000000..a95a93f35 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/aluminum_item_deconstruct.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:aluminum_nugget" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:conversions/aluminum_item_deconstruct" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:conversions/aluminum_item_deconstruct" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/atium_block_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/atium_block_deconstruct.json new file mode 100644 index 000000000..103bdb8e8 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/atium_block_deconstruct.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:atium_ingot" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:conversions/atium_block_deconstruct" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:conversions/atium_block_deconstruct" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/atium_item_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/atium_item_deconstruct.json new file mode 100644 index 000000000..3e6564eb8 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/atium_item_deconstruct.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:atium_nugget" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:conversions/atium_item_deconstruct" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:conversions/atium_item_deconstruct" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/bendalloy_block_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/bendalloy_block_deconstruct.json new file mode 100644 index 000000000..706f9e0ac --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/bendalloy_block_deconstruct.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:bendalloy_ingot" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:conversions/bendalloy_block_deconstruct" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:conversions/bendalloy_block_deconstruct" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/bendalloy_item_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/bendalloy_item_deconstruct.json new file mode 100644 index 000000000..c2bd7599c --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/bendalloy_item_deconstruct.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:bendalloy_nugget" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:conversions/bendalloy_item_deconstruct" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:conversions/bendalloy_item_deconstruct" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/brass_block_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/brass_block_deconstruct.json new file mode 100644 index 000000000..d258c3505 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/brass_block_deconstruct.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:brass_ingot" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:conversions/brass_block_deconstruct" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:conversions/brass_block_deconstruct" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/brass_item_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/brass_item_deconstruct.json new file mode 100644 index 000000000..674e14772 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/brass_item_deconstruct.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:brass_nugget" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:conversions/brass_item_deconstruct" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:conversions/brass_item_deconstruct" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/bronze_block_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/bronze_block_deconstruct.json new file mode 100644 index 000000000..b5dbda331 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/bronze_block_deconstruct.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:bronze_ingot" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:conversions/bronze_block_deconstruct" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:conversions/bronze_block_deconstruct" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/bronze_item_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/bronze_item_deconstruct.json new file mode 100644 index 000000000..28902740f --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/bronze_item_deconstruct.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:bronze_nugget" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:conversions/bronze_item_deconstruct" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:conversions/bronze_item_deconstruct" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/cadmium_block_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/cadmium_block_deconstruct.json new file mode 100644 index 000000000..68b0536b2 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/cadmium_block_deconstruct.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:cadmium_ingot" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:conversions/cadmium_block_deconstruct" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:conversions/cadmium_block_deconstruct" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/cadmium_item_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/cadmium_item_deconstruct.json new file mode 100644 index 000000000..8df08ae66 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/cadmium_item_deconstruct.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:cadmium_nugget" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:conversions/cadmium_item_deconstruct" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:conversions/cadmium_item_deconstruct" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/chromium_block_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/chromium_block_deconstruct.json new file mode 100644 index 000000000..325aa5c0f --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/chromium_block_deconstruct.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:chromium_ingot" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:conversions/chromium_block_deconstruct" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:conversions/chromium_block_deconstruct" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/chromium_item_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/chromium_item_deconstruct.json new file mode 100644 index 000000000..56d525711 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/chromium_item_deconstruct.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:chromium_nugget" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:conversions/chromium_item_deconstruct" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:conversions/chromium_item_deconstruct" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/copper_item_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/copper_item_deconstruct.json new file mode 100644 index 000000000..433f8a12b --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/copper_item_deconstruct.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:copper_nugget" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:conversions/copper_item_deconstruct" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:conversions/copper_item_deconstruct" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/duralumin_block_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/duralumin_block_deconstruct.json new file mode 100644 index 000000000..e3c9a2c15 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/duralumin_block_deconstruct.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:duralumin_ingot" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:conversions/duralumin_block_deconstruct" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:conversions/duralumin_block_deconstruct" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/duralumin_item_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/duralumin_item_deconstruct.json new file mode 100644 index 000000000..62c71bf33 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/duralumin_item_deconstruct.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:duralumin_nugget" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:conversions/duralumin_item_deconstruct" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:conversions/duralumin_item_deconstruct" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/electrum_block_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/electrum_block_deconstruct.json new file mode 100644 index 000000000..c1c10c6db --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/electrum_block_deconstruct.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:electrum_ingot" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:conversions/electrum_block_deconstruct" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:conversions/electrum_block_deconstruct" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/electrum_item_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/electrum_item_deconstruct.json new file mode 100644 index 000000000..417adc116 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/electrum_item_deconstruct.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:electrum_nugget" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:conversions/electrum_item_deconstruct" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:conversions/electrum_item_deconstruct" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/harmonium_block_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/harmonium_block_deconstruct.json new file mode 100644 index 000000000..bd185780f --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/harmonium_block_deconstruct.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:harmonium_ingot" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:conversions/harmonium_block_deconstruct" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:conversions/harmonium_block_deconstruct" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/harmonium_item_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/harmonium_item_deconstruct.json new file mode 100644 index 000000000..043ed9623 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/harmonium_item_deconstruct.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:harmonium_nugget" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:conversions/harmonium_item_deconstruct" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:conversions/harmonium_item_deconstruct" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/lead_block_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/lead_block_deconstruct.json new file mode 100644 index 000000000..f1b738b3d --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/lead_block_deconstruct.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:lead_ingot" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:conversions/lead_block_deconstruct" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:conversions/lead_block_deconstruct" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/lead_item_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/lead_item_deconstruct.json new file mode 100644 index 000000000..3d1a16200 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/lead_item_deconstruct.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:lead_nugget" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:conversions/lead_item_deconstruct" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:conversions/lead_item_deconstruct" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/lerasatium_block_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/lerasatium_block_deconstruct.json new file mode 100644 index 000000000..1668043a4 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/lerasatium_block_deconstruct.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:lerasatium_ingot" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:conversions/lerasatium_block_deconstruct" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:conversions/lerasatium_block_deconstruct" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/lerasatium_item_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/lerasatium_item_deconstruct.json new file mode 100644 index 000000000..934d28c2c --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/lerasatium_item_deconstruct.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:lerasatium_nugget" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:conversions/lerasatium_item_deconstruct" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:conversions/lerasatium_item_deconstruct" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/lerasium_block_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/lerasium_block_deconstruct.json new file mode 100644 index 000000000..524e5d86b --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/lerasium_block_deconstruct.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:lerasium_ingot" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:conversions/lerasium_block_deconstruct" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:conversions/lerasium_block_deconstruct" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/lerasium_item_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/lerasium_item_deconstruct.json new file mode 100644 index 000000000..294732a20 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/lerasium_item_deconstruct.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:lerasium_nugget" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:conversions/lerasium_item_deconstruct" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:conversions/lerasium_item_deconstruct" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/malatium_block_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/malatium_block_deconstruct.json new file mode 100644 index 000000000..177deb31a --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/malatium_block_deconstruct.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:malatium_ingot" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:conversions/malatium_block_deconstruct" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:conversions/malatium_block_deconstruct" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/malatium_item_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/malatium_item_deconstruct.json new file mode 100644 index 000000000..b6a46ebab --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/malatium_item_deconstruct.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:malatium_nugget" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:conversions/malatium_item_deconstruct" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:conversions/malatium_item_deconstruct" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/nickel_block_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/nickel_block_deconstruct.json new file mode 100644 index 000000000..75ccd71a0 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/nickel_block_deconstruct.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:nickel_ingot" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:conversions/nickel_block_deconstruct" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:conversions/nickel_block_deconstruct" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/nickel_item_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/nickel_item_deconstruct.json new file mode 100644 index 000000000..d69b3f403 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/nickel_item_deconstruct.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:nickel_nugget" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:conversions/nickel_item_deconstruct" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:conversions/nickel_item_deconstruct" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/nicrosil_block_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/nicrosil_block_deconstruct.json new file mode 100644 index 000000000..320117c4a --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/nicrosil_block_deconstruct.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:nicrosil_ingot" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:conversions/nicrosil_block_deconstruct" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:conversions/nicrosil_block_deconstruct" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/nicrosil_item_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/nicrosil_item_deconstruct.json new file mode 100644 index 000000000..cc9c79bf7 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/nicrosil_item_deconstruct.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:nicrosil_nugget" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:conversions/nicrosil_item_deconstruct" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:conversions/nicrosil_item_deconstruct" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/pewter_block_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/pewter_block_deconstruct.json new file mode 100644 index 000000000..a65116dcc --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/pewter_block_deconstruct.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:pewter_ingot" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:conversions/pewter_block_deconstruct" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:conversions/pewter_block_deconstruct" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/pewter_item_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/pewter_item_deconstruct.json new file mode 100644 index 000000000..23b4f679e --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/pewter_item_deconstruct.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:pewter_nugget" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:conversions/pewter_item_deconstruct" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:conversions/pewter_item_deconstruct" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/silver_block_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/silver_block_deconstruct.json new file mode 100644 index 000000000..36cd1e8b9 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/silver_block_deconstruct.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:silver_ingot" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:conversions/silver_block_deconstruct" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:conversions/silver_block_deconstruct" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/silver_item_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/silver_item_deconstruct.json new file mode 100644 index 000000000..a273c66b5 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/silver_item_deconstruct.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:silver_nugget" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:conversions/silver_item_deconstruct" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:conversions/silver_item_deconstruct" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/steel_block_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/steel_block_deconstruct.json new file mode 100644 index 000000000..94e5c6566 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/steel_block_deconstruct.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:steel_ingot" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:conversions/steel_block_deconstruct" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:conversions/steel_block_deconstruct" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/steel_item_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/steel_item_deconstruct.json new file mode 100644 index 000000000..e6d0a7b52 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/steel_item_deconstruct.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:steel_nugget" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:conversions/steel_item_deconstruct" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:conversions/steel_item_deconstruct" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/tin_block_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/tin_block_deconstruct.json new file mode 100644 index 000000000..b3686fd9c --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/tin_block_deconstruct.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:tin_ingot" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:conversions/tin_block_deconstruct" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:conversions/tin_block_deconstruct" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/tin_item_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/tin_item_deconstruct.json new file mode 100644 index 000000000..913e34507 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/tin_item_deconstruct.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:tin_nugget" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:conversions/tin_item_deconstruct" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:conversions/tin_item_deconstruct" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/zinc_block_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/zinc_block_deconstruct.json new file mode 100644 index 000000000..83fea75bf --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/zinc_block_deconstruct.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:zinc_ingot" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:conversions/zinc_block_deconstruct" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:conversions/zinc_block_deconstruct" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/zinc_item_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/zinc_item_deconstruct.json new file mode 100644 index 000000000..12cfd32d2 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/conversions/zinc_item_deconstruct.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:zinc_nugget" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:conversions/zinc_item_deconstruct" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:conversions/zinc_item_deconstruct" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/duralumin_ingot_from_blasting_duralumin_blend.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/duralumin_ingot_from_blasting_duralumin_blend.json new file mode 100644 index 000000000..555b98120 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/duralumin_ingot_from_blasting_duralumin_blend.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ore": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:duralumin_blend" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:duralumin_ingot_from_blasting_duralumin_blend" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_ore", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:duralumin_ingot_from_blasting_duralumin_blend" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/duralumin_ingot_from_smelting_duralumin_blend.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/duralumin_ingot_from_smelting_duralumin_blend.json new file mode 100644 index 000000000..8fdd91f94 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/duralumin_ingot_from_smelting_duralumin_blend.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ore": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:duralumin_blend" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:duralumin_ingot_from_smelting_duralumin_blend" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_ore", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:duralumin_ingot_from_smelting_duralumin_blend" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/electrum_ingot_from_blasting_electrum_blend.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/electrum_ingot_from_blasting_electrum_blend.json new file mode 100644 index 000000000..93aaa18d6 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/electrum_ingot_from_blasting_electrum_blend.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ore": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:electrum_blend" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:electrum_ingot_from_blasting_electrum_blend" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_ore", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:electrum_ingot_from_blasting_electrum_blend" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/electrum_ingot_from_smelting_electrum_blend.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/electrum_ingot_from_smelting_electrum_blend.json new file mode 100644 index 000000000..653049338 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/electrum_ingot_from_smelting_electrum_blend.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ore": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:electrum_blend" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:electrum_ingot_from_smelting_electrum_blend" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_ore", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:electrum_ingot_from_smelting_electrum_blend" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/lead_ingot_from_blasting_deepslate_lead_ore.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/lead_ingot_from_blasting_deepslate_lead_ore.json new file mode 100644 index 000000000..bd5c89728 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/lead_ingot_from_blasting_deepslate_lead_ore.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ore": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:deepslate_lead_ore" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:lead_ingot_from_blasting_deepslate_lead_ore" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_ore", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:lead_ingot_from_blasting_deepslate_lead_ore" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/lead_ingot_from_blasting_lead_ore.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/lead_ingot_from_blasting_lead_ore.json new file mode 100644 index 000000000..bba67b292 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/lead_ingot_from_blasting_lead_ore.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ore": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:lead_ore" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:lead_ingot_from_blasting_lead_ore" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_ore", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:lead_ingot_from_blasting_lead_ore" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/lead_ingot_from_blasting_raw_lead_ore.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/lead_ingot_from_blasting_raw_lead_ore.json new file mode 100644 index 000000000..ed98c742b --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/lead_ingot_from_blasting_raw_lead_ore.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ore": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:raw_lead_ore" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:lead_ingot_from_blasting_raw_lead_ore" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_ore", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:lead_ingot_from_blasting_raw_lead_ore" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/lead_ingot_from_smelting_deepslate_lead_ore.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/lead_ingot_from_smelting_deepslate_lead_ore.json new file mode 100644 index 000000000..cc28c86bf --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/lead_ingot_from_smelting_deepslate_lead_ore.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ore": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:deepslate_lead_ore" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:lead_ingot_from_smelting_deepslate_lead_ore" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_ore", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:lead_ingot_from_smelting_deepslate_lead_ore" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/lead_ingot_from_smelting_lead_ore.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/lead_ingot_from_smelting_lead_ore.json new file mode 100644 index 000000000..4f1a202ed --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/lead_ingot_from_smelting_lead_ore.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ore": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:lead_ore" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:lead_ingot_from_smelting_lead_ore" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_ore", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:lead_ingot_from_smelting_lead_ore" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/lead_ingot_from_smelting_raw_lead_ore.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/lead_ingot_from_smelting_raw_lead_ore.json new file mode 100644 index 000000000..95c466fe0 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/lead_ingot_from_smelting_raw_lead_ore.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ore": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:raw_lead_ore" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:lead_ingot_from_smelting_raw_lead_ore" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_ore", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:lead_ingot_from_smelting_raw_lead_ore" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/nickel_ingot_from_blasting_deepslate_nickel_ore.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/nickel_ingot_from_blasting_deepslate_nickel_ore.json new file mode 100644 index 000000000..fd370d548 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/nickel_ingot_from_blasting_deepslate_nickel_ore.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ore": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:deepslate_nickel_ore" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:nickel_ingot_from_blasting_deepslate_nickel_ore" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_ore", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:nickel_ingot_from_blasting_deepslate_nickel_ore" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/nickel_ingot_from_blasting_nickel_ore.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/nickel_ingot_from_blasting_nickel_ore.json new file mode 100644 index 000000000..f0cb8a29b --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/nickel_ingot_from_blasting_nickel_ore.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ore": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:nickel_ore" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:nickel_ingot_from_blasting_nickel_ore" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_ore", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:nickel_ingot_from_blasting_nickel_ore" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/nickel_ingot_from_blasting_raw_nickel_ore.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/nickel_ingot_from_blasting_raw_nickel_ore.json new file mode 100644 index 000000000..b0b473075 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/nickel_ingot_from_blasting_raw_nickel_ore.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ore": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:raw_nickel_ore" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:nickel_ingot_from_blasting_raw_nickel_ore" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_ore", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:nickel_ingot_from_blasting_raw_nickel_ore" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/nickel_ingot_from_smelting_deepslate_nickel_ore.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/nickel_ingot_from_smelting_deepslate_nickel_ore.json new file mode 100644 index 000000000..f6d3bc73f --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/nickel_ingot_from_smelting_deepslate_nickel_ore.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ore": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:deepslate_nickel_ore" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:nickel_ingot_from_smelting_deepslate_nickel_ore" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_ore", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:nickel_ingot_from_smelting_deepslate_nickel_ore" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/nickel_ingot_from_smelting_nickel_ore.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/nickel_ingot_from_smelting_nickel_ore.json new file mode 100644 index 000000000..723b31468 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/nickel_ingot_from_smelting_nickel_ore.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ore": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:nickel_ore" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:nickel_ingot_from_smelting_nickel_ore" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_ore", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:nickel_ingot_from_smelting_nickel_ore" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/nickel_ingot_from_smelting_raw_nickel_ore.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/nickel_ingot_from_smelting_raw_nickel_ore.json new file mode 100644 index 000000000..13a113875 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/nickel_ingot_from_smelting_raw_nickel_ore.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ore": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:raw_nickel_ore" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:nickel_ingot_from_smelting_raw_nickel_ore" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_ore", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:nickel_ingot_from_smelting_raw_nickel_ore" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/nicrosil_ingot_from_blasting_nicrosil_blend.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/nicrosil_ingot_from_blasting_nicrosil_blend.json new file mode 100644 index 000000000..248b5acee --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/nicrosil_ingot_from_blasting_nicrosil_blend.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ore": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:nicrosil_blend" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:nicrosil_ingot_from_blasting_nicrosil_blend" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_ore", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:nicrosil_ingot_from_blasting_nicrosil_blend" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/nicrosil_ingot_from_smelting_nicrosil_blend.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/nicrosil_ingot_from_smelting_nicrosil_blend.json new file mode 100644 index 000000000..f3ad6cb1d --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/nicrosil_ingot_from_smelting_nicrosil_blend.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ore": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:nicrosil_blend" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:nicrosil_ingot_from_smelting_nicrosil_blend" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_ore", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:nicrosil_ingot_from_smelting_nicrosil_blend" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/pewter_ingot_from_blasting_pewter_blend.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/pewter_ingot_from_blasting_pewter_blend.json new file mode 100644 index 000000000..7d883b3f0 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/pewter_ingot_from_blasting_pewter_blend.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ore": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:pewter_blend" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:pewter_ingot_from_blasting_pewter_blend" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_ore", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:pewter_ingot_from_blasting_pewter_blend" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/pewter_ingot_from_smelting_pewter_blend.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/pewter_ingot_from_smelting_pewter_blend.json new file mode 100644 index 000000000..4872dc955 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/pewter_ingot_from_smelting_pewter_blend.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ore": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:pewter_blend" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:pewter_ingot_from_smelting_pewter_blend" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_ore", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:pewter_ingot_from_smelting_pewter_blend" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/silver_ingot_from_blasting_deepslate_silver_ore.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/silver_ingot_from_blasting_deepslate_silver_ore.json new file mode 100644 index 000000000..8b6134c6a --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/silver_ingot_from_blasting_deepslate_silver_ore.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ore": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:deepslate_silver_ore" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:silver_ingot_from_blasting_deepslate_silver_ore" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_ore", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:silver_ingot_from_blasting_deepslate_silver_ore" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/silver_ingot_from_blasting_raw_silver_ore.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/silver_ingot_from_blasting_raw_silver_ore.json new file mode 100644 index 000000000..0537b39a5 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/silver_ingot_from_blasting_raw_silver_ore.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ore": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:raw_silver_ore" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:silver_ingot_from_blasting_raw_silver_ore" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_ore", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:silver_ingot_from_blasting_raw_silver_ore" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/silver_ingot_from_blasting_silver_ore.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/silver_ingot_from_blasting_silver_ore.json new file mode 100644 index 000000000..adfa6e832 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/silver_ingot_from_blasting_silver_ore.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ore": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:silver_ore" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:silver_ingot_from_blasting_silver_ore" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_ore", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:silver_ingot_from_blasting_silver_ore" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/silver_ingot_from_smelting_deepslate_silver_ore.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/silver_ingot_from_smelting_deepslate_silver_ore.json new file mode 100644 index 000000000..3024f4437 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/silver_ingot_from_smelting_deepslate_silver_ore.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ore": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:deepslate_silver_ore" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:silver_ingot_from_smelting_deepslate_silver_ore" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_ore", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:silver_ingot_from_smelting_deepslate_silver_ore" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/silver_ingot_from_smelting_raw_silver_ore.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/silver_ingot_from_smelting_raw_silver_ore.json new file mode 100644 index 000000000..6f58947e9 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/silver_ingot_from_smelting_raw_silver_ore.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ore": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:raw_silver_ore" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:silver_ingot_from_smelting_raw_silver_ore" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_ore", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:silver_ingot_from_smelting_raw_silver_ore" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/silver_ingot_from_smelting_silver_ore.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/silver_ingot_from_smelting_silver_ore.json new file mode 100644 index 000000000..3e1954764 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/silver_ingot_from_smelting_silver_ore.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ore": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:silver_ore" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:silver_ingot_from_smelting_silver_ore" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_ore", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:silver_ingot_from_smelting_silver_ore" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/steel_ingot_from_blasting_steel_blend.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/steel_ingot_from_blasting_steel_blend.json new file mode 100644 index 000000000..3c8f60a2a --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/steel_ingot_from_blasting_steel_blend.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ore": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:steel_blend" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:steel_ingot_from_blasting_steel_blend" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_ore", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:steel_ingot_from_blasting_steel_blend" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/steel_ingot_from_smelting_steel_blend.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/steel_ingot_from_smelting_steel_blend.json new file mode 100644 index 000000000..77a45c5e8 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/steel_ingot_from_smelting_steel_blend.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ore": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:steel_blend" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:steel_ingot_from_smelting_steel_blend" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_ore", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:steel_ingot_from_smelting_steel_blend" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/tin_ingot_from_blasting_deepslate_tin_ore.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/tin_ingot_from_blasting_deepslate_tin_ore.json new file mode 100644 index 000000000..14e0d5060 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/tin_ingot_from_blasting_deepslate_tin_ore.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ore": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:deepslate_tin_ore" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:tin_ingot_from_blasting_deepslate_tin_ore" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_ore", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:tin_ingot_from_blasting_deepslate_tin_ore" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/tin_ingot_from_blasting_raw_tin_ore.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/tin_ingot_from_blasting_raw_tin_ore.json new file mode 100644 index 000000000..0030ae5ac --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/tin_ingot_from_blasting_raw_tin_ore.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ore": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:raw_tin_ore" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:tin_ingot_from_blasting_raw_tin_ore" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_ore", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:tin_ingot_from_blasting_raw_tin_ore" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/tin_ingot_from_blasting_tin_ore.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/tin_ingot_from_blasting_tin_ore.json new file mode 100644 index 000000000..1d340ecd3 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/tin_ingot_from_blasting_tin_ore.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ore": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:tin_ore" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:tin_ingot_from_blasting_tin_ore" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_ore", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:tin_ingot_from_blasting_tin_ore" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/tin_ingot_from_smelting_deepslate_tin_ore.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/tin_ingot_from_smelting_deepslate_tin_ore.json new file mode 100644 index 000000000..cdb45c941 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/tin_ingot_from_smelting_deepslate_tin_ore.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ore": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:deepslate_tin_ore" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:tin_ingot_from_smelting_deepslate_tin_ore" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_ore", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:tin_ingot_from_smelting_deepslate_tin_ore" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/tin_ingot_from_smelting_raw_tin_ore.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/tin_ingot_from_smelting_raw_tin_ore.json new file mode 100644 index 000000000..71f49309d --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/tin_ingot_from_smelting_raw_tin_ore.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ore": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:raw_tin_ore" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:tin_ingot_from_smelting_raw_tin_ore" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_ore", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:tin_ingot_from_smelting_raw_tin_ore" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/tin_ingot_from_smelting_tin_ore.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/tin_ingot_from_smelting_tin_ore.json new file mode 100644 index 000000000..a3f144a8a --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/tin_ingot_from_smelting_tin_ore.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ore": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:tin_ore" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:tin_ingot_from_smelting_tin_ore" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_ore", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:tin_ingot_from_smelting_tin_ore" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/zinc_ingot_from_blasting_deepslate_zinc_ore.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/zinc_ingot_from_blasting_deepslate_zinc_ore.json new file mode 100644 index 000000000..d8a17f6e1 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/zinc_ingot_from_blasting_deepslate_zinc_ore.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ore": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:deepslate_zinc_ore" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:zinc_ingot_from_blasting_deepslate_zinc_ore" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_ore", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:zinc_ingot_from_blasting_deepslate_zinc_ore" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/zinc_ingot_from_blasting_raw_zinc_ore.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/zinc_ingot_from_blasting_raw_zinc_ore.json new file mode 100644 index 000000000..f3a16de63 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/zinc_ingot_from_blasting_raw_zinc_ore.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ore": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:raw_zinc_ore" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:zinc_ingot_from_blasting_raw_zinc_ore" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_ore", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:zinc_ingot_from_blasting_raw_zinc_ore" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/zinc_ingot_from_blasting_zinc_ore.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/zinc_ingot_from_blasting_zinc_ore.json new file mode 100644 index 000000000..8cfe70ec5 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/zinc_ingot_from_blasting_zinc_ore.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ore": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:zinc_ore" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:zinc_ingot_from_blasting_zinc_ore" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_ore", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:zinc_ingot_from_blasting_zinc_ore" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/zinc_ingot_from_smelting_deepslate_zinc_ore.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/zinc_ingot_from_smelting_deepslate_zinc_ore.json new file mode 100644 index 000000000..949be4aa4 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/zinc_ingot_from_smelting_deepslate_zinc_ore.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ore": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:deepslate_zinc_ore" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:zinc_ingot_from_smelting_deepslate_zinc_ore" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_ore", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:zinc_ingot_from_smelting_deepslate_zinc_ore" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/zinc_ingot_from_smelting_raw_zinc_ore.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/zinc_ingot_from_smelting_raw_zinc_ore.json new file mode 100644 index 000000000..542823903 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/zinc_ingot_from_smelting_raw_zinc_ore.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ore": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:raw_zinc_ore" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:zinc_ingot_from_smelting_raw_zinc_ore" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_ore", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:zinc_ingot_from_smelting_raw_zinc_ore" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/zinc_ingot_from_smelting_zinc_ore.json b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/zinc_ingot_from_smelting_zinc_ore.json new file mode 100644 index 000000000..b19b5e514 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/advancements/recipes/misc/zinc_ingot_from_smelting_zinc_ore.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ore": { + "conditions": { + "items": [ + { + "items": [ + "cosmere:zinc_ore" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmere:zinc_ingot_from_smelting_zinc_ore" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_ore", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmere:zinc_ingot_from_smelting_zinc_ore" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/damage_type/eat_metal.json b/src/datagen/generated/cosmere/data/cosmere/damage_type/eat_metal.json new file mode 100644 index 000000000..335ce876a --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/damage_type/eat_metal.json @@ -0,0 +1,5 @@ +{ + "exhaustion": 0.1, + "message_id": "cosmere.eat_metal", + "scaling": "when_caused_by_living_non_player" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/damage_type/spiked.json b/src/datagen/generated/cosmere/data/cosmere/damage_type/spiked.json new file mode 100644 index 000000000..ea0adecc6 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/damage_type/spiked.json @@ -0,0 +1,5 @@ +{ + "exhaustion": 0.1, + "message_id": "cosmere.spiked", + "scaling": "when_caused_by_living_non_player" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/forge/biome_modifier/aluminum.json b/src/datagen/generated/cosmere/data/cosmere/forge/biome_modifier/aluminum.json new file mode 100644 index 000000000..5b0b674f7 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/forge/biome_modifier/aluminum.json @@ -0,0 +1,10 @@ +{ + "type": "forge:add_features", + "biomes": "#cosmere:spawn_ores", + "features": [ + "cosmere:ore_aluminum_small", + "cosmere:ore_aluminum_medium", + "cosmere:ore_aluminum_buried" + ], + "step": "underground_ores" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/forge/biome_modifier/cadmium.json b/src/datagen/generated/cosmere/data/cosmere/forge/biome_modifier/cadmium.json new file mode 100644 index 000000000..7263a1f61 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/forge/biome_modifier/cadmium.json @@ -0,0 +1,10 @@ +{ + "type": "forge:add_features", + "biomes": "#cosmere:spawn_ores", + "features": [ + "cosmere:ore_cadmium_normal", + "cosmere:ore_cadmium_abundant", + "cosmere:ore_cadmium_deep" + ], + "step": "underground_ores" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/forge/biome_modifier/chromium.json b/src/datagen/generated/cosmere/data/cosmere/forge/biome_modifier/chromium.json new file mode 100644 index 000000000..7b4139e93 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/forge/biome_modifier/chromium.json @@ -0,0 +1,10 @@ +{ + "type": "forge:add_features", + "biomes": "#cosmere:spawn_ores", + "features": [ + "cosmere:ore_chromium_rare", + "cosmere:ore_chromium_normal", + "cosmere:ore_chromium_deep" + ], + "step": "underground_ores" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/forge/biome_modifier/lead.json b/src/datagen/generated/cosmere/data/cosmere/forge/biome_modifier/lead.json new file mode 100644 index 000000000..d362ff198 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/forge/biome_modifier/lead.json @@ -0,0 +1,10 @@ +{ + "type": "forge:add_features", + "biomes": "#cosmere:spawn_ores", + "features": [ + "cosmere:ore_lead_normal", + "cosmere:ore_lead_abundant", + "cosmere:ore_lead_deep" + ], + "step": "underground_ores" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/forge/biome_modifier/nickel.json b/src/datagen/generated/cosmere/data/cosmere/forge/biome_modifier/nickel.json new file mode 100644 index 000000000..345043515 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/forge/biome_modifier/nickel.json @@ -0,0 +1,10 @@ +{ + "type": "forge:add_features", + "biomes": "#cosmere:spawn_ores", + "features": [ + "cosmere:ore_nickel_upper", + "cosmere:ore_nickel_middle", + "cosmere:ore_nickel_small" + ], + "step": "underground_ores" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/forge/biome_modifier/silver.json b/src/datagen/generated/cosmere/data/cosmere/forge/biome_modifier/silver.json new file mode 100644 index 000000000..85c592911 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/forge/biome_modifier/silver.json @@ -0,0 +1,10 @@ +{ + "type": "forge:add_features", + "biomes": "#cosmere:spawn_ores", + "features": [ + "cosmere:ore_silver_normal", + "cosmere:ore_silver_abundant", + "cosmere:ore_silver_rich" + ], + "step": "underground_ores" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/forge/biome_modifier/tin.json b/src/datagen/generated/cosmere/data/cosmere/forge/biome_modifier/tin.json new file mode 100644 index 000000000..0155683f8 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/forge/biome_modifier/tin.json @@ -0,0 +1,10 @@ +{ + "type": "forge:add_features", + "biomes": "#cosmere:spawn_ores", + "features": [ + "cosmere:ore_tin_small", + "cosmere:ore_tin_medium", + "cosmere:ore_tin_abundant" + ], + "step": "underground_ores" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/forge/biome_modifier/zinc.json b/src/datagen/generated/cosmere/data/cosmere/forge/biome_modifier/zinc.json new file mode 100644 index 000000000..a48a5c530 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/forge/biome_modifier/zinc.json @@ -0,0 +1,10 @@ +{ + "type": "forge:add_features", + "biomes": "#cosmere:spawn_ores", + "features": [ + "cosmere:ore_zinc_upper", + "cosmere:ore_zinc_middle", + "cosmere:ore_zinc_deep" + ], + "step": "underground_ores" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/aluminum_block.json b/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/aluminum_block.json new file mode 100644 index 000000000..c5ad04aa9 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/aluminum_block.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "cosmere:aluminum_block" + } + ], + "name": "main", + "rolls": 1.0 + } + ], + "random_sequence": "cosmere:blocks/aluminum_block" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/aluminum_ore.json b/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/aluminum_ore.json new file mode 100644 index 000000000..5409d947e --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/aluminum_ore.json @@ -0,0 +1,51 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ], + "name": "cosmere:aluminum_ore" + }, + { + "type": "minecraft:item", + "functions": [ + { + "enchantment": "minecraft:fortune", + "formula": "minecraft:ore_drops", + "function": "minecraft:apply_bonus" + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "cosmere:raw_aluminum_ore" + } + ] + } + ], + "name": "main", + "rolls": 1.0 + } + ], + "random_sequence": "cosmere:blocks/aluminum_ore" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/atium_block.json b/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/atium_block.json new file mode 100644 index 000000000..b80c65472 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/atium_block.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "cosmere:atium_block" + } + ], + "name": "main", + "rolls": 1.0 + } + ], + "random_sequence": "cosmere:blocks/atium_block" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/bendalloy_block.json b/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/bendalloy_block.json new file mode 100644 index 000000000..ff1fc71c2 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/bendalloy_block.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "cosmere:bendalloy_block" + } + ], + "name": "main", + "rolls": 1.0 + } + ], + "random_sequence": "cosmere:blocks/bendalloy_block" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/brass_block.json b/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/brass_block.json new file mode 100644 index 000000000..395741ecc --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/brass_block.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "cosmere:brass_block" + } + ], + "name": "main", + "rolls": 1.0 + } + ], + "random_sequence": "cosmere:blocks/brass_block" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/bronze_block.json b/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/bronze_block.json new file mode 100644 index 000000000..6e4891c9a --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/bronze_block.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "cosmere:bronze_block" + } + ], + "name": "main", + "rolls": 1.0 + } + ], + "random_sequence": "cosmere:blocks/bronze_block" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/cadmium_block.json b/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/cadmium_block.json new file mode 100644 index 000000000..7a9653800 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/cadmium_block.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "cosmere:cadmium_block" + } + ], + "name": "main", + "rolls": 1.0 + } + ], + "random_sequence": "cosmere:blocks/cadmium_block" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/cadmium_ore.json b/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/cadmium_ore.json new file mode 100644 index 000000000..514436496 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/cadmium_ore.json @@ -0,0 +1,51 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ], + "name": "cosmere:cadmium_ore" + }, + { + "type": "minecraft:item", + "functions": [ + { + "enchantment": "minecraft:fortune", + "formula": "minecraft:ore_drops", + "function": "minecraft:apply_bonus" + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "cosmere:raw_cadmium_ore" + } + ] + } + ], + "name": "main", + "rolls": 1.0 + } + ], + "random_sequence": "cosmere:blocks/cadmium_ore" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/chromium_block.json b/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/chromium_block.json new file mode 100644 index 000000000..ef012ccc2 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/chromium_block.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "cosmere:chromium_block" + } + ], + "name": "main", + "rolls": 1.0 + } + ], + "random_sequence": "cosmere:blocks/chromium_block" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/chromium_ore.json b/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/chromium_ore.json new file mode 100644 index 000000000..4bac503ae --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/chromium_ore.json @@ -0,0 +1,51 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ], + "name": "cosmere:chromium_ore" + }, + { + "type": "minecraft:item", + "functions": [ + { + "enchantment": "minecraft:fortune", + "formula": "minecraft:ore_drops", + "function": "minecraft:apply_bonus" + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "cosmere:raw_chromium_ore" + } + ] + } + ], + "name": "main", + "rolls": 1.0 + } + ], + "random_sequence": "cosmere:blocks/chromium_ore" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/deepslate_aluminum_ore.json b/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/deepslate_aluminum_ore.json new file mode 100644 index 000000000..bfbb95f49 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/deepslate_aluminum_ore.json @@ -0,0 +1,51 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ], + "name": "cosmere:deepslate_aluminum_ore" + }, + { + "type": "minecraft:item", + "functions": [ + { + "enchantment": "minecraft:fortune", + "formula": "minecraft:ore_drops", + "function": "minecraft:apply_bonus" + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "cosmere:raw_aluminum_ore" + } + ] + } + ], + "name": "main", + "rolls": 1.0 + } + ], + "random_sequence": "cosmere:blocks/deepslate_aluminum_ore" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/deepslate_cadmium_ore.json b/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/deepslate_cadmium_ore.json new file mode 100644 index 000000000..71b28b572 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/deepslate_cadmium_ore.json @@ -0,0 +1,51 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ], + "name": "cosmere:deepslate_cadmium_ore" + }, + { + "type": "minecraft:item", + "functions": [ + { + "enchantment": "minecraft:fortune", + "formula": "minecraft:ore_drops", + "function": "minecraft:apply_bonus" + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "cosmere:raw_cadmium_ore" + } + ] + } + ], + "name": "main", + "rolls": 1.0 + } + ], + "random_sequence": "cosmere:blocks/deepslate_cadmium_ore" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/deepslate_chromium_ore.json b/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/deepslate_chromium_ore.json new file mode 100644 index 000000000..f57621e60 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/deepslate_chromium_ore.json @@ -0,0 +1,51 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ], + "name": "cosmere:deepslate_chromium_ore" + }, + { + "type": "minecraft:item", + "functions": [ + { + "enchantment": "minecraft:fortune", + "formula": "minecraft:ore_drops", + "function": "minecraft:apply_bonus" + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "cosmere:raw_chromium_ore" + } + ] + } + ], + "name": "main", + "rolls": 1.0 + } + ], + "random_sequence": "cosmere:blocks/deepslate_chromium_ore" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/deepslate_lead_ore.json b/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/deepslate_lead_ore.json new file mode 100644 index 000000000..20052dcaf --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/deepslate_lead_ore.json @@ -0,0 +1,51 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ], + "name": "cosmere:deepslate_lead_ore" + }, + { + "type": "minecraft:item", + "functions": [ + { + "enchantment": "minecraft:fortune", + "formula": "minecraft:ore_drops", + "function": "minecraft:apply_bonus" + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "cosmere:raw_lead_ore" + } + ] + } + ], + "name": "main", + "rolls": 1.0 + } + ], + "random_sequence": "cosmere:blocks/deepslate_lead_ore" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/deepslate_nickel_ore.json b/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/deepslate_nickel_ore.json new file mode 100644 index 000000000..452a26ade --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/deepslate_nickel_ore.json @@ -0,0 +1,51 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ], + "name": "cosmere:deepslate_nickel_ore" + }, + { + "type": "minecraft:item", + "functions": [ + { + "enchantment": "minecraft:fortune", + "formula": "minecraft:ore_drops", + "function": "minecraft:apply_bonus" + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "cosmere:raw_nickel_ore" + } + ] + } + ], + "name": "main", + "rolls": 1.0 + } + ], + "random_sequence": "cosmere:blocks/deepslate_nickel_ore" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/deepslate_silver_ore.json b/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/deepslate_silver_ore.json new file mode 100644 index 000000000..907170d05 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/deepslate_silver_ore.json @@ -0,0 +1,51 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ], + "name": "cosmere:deepslate_silver_ore" + }, + { + "type": "minecraft:item", + "functions": [ + { + "enchantment": "minecraft:fortune", + "formula": "minecraft:ore_drops", + "function": "minecraft:apply_bonus" + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "cosmere:raw_silver_ore" + } + ] + } + ], + "name": "main", + "rolls": 1.0 + } + ], + "random_sequence": "cosmere:blocks/deepslate_silver_ore" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/deepslate_tin_ore.json b/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/deepslate_tin_ore.json new file mode 100644 index 000000000..6a45bac65 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/deepslate_tin_ore.json @@ -0,0 +1,51 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ], + "name": "cosmere:deepslate_tin_ore" + }, + { + "type": "minecraft:item", + "functions": [ + { + "enchantment": "minecraft:fortune", + "formula": "minecraft:ore_drops", + "function": "minecraft:apply_bonus" + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "cosmere:raw_tin_ore" + } + ] + } + ], + "name": "main", + "rolls": 1.0 + } + ], + "random_sequence": "cosmere:blocks/deepslate_tin_ore" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/deepslate_zinc_ore.json b/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/deepslate_zinc_ore.json new file mode 100644 index 000000000..0b5963b88 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/deepslate_zinc_ore.json @@ -0,0 +1,51 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ], + "name": "cosmere:deepslate_zinc_ore" + }, + { + "type": "minecraft:item", + "functions": [ + { + "enchantment": "minecraft:fortune", + "formula": "minecraft:ore_drops", + "function": "minecraft:apply_bonus" + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "cosmere:raw_zinc_ore" + } + ] + } + ], + "name": "main", + "rolls": 1.0 + } + ], + "random_sequence": "cosmere:blocks/deepslate_zinc_ore" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/duralumin_block.json b/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/duralumin_block.json new file mode 100644 index 000000000..9e6edf165 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/duralumin_block.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "cosmere:duralumin_block" + } + ], + "name": "main", + "rolls": 1.0 + } + ], + "random_sequence": "cosmere:blocks/duralumin_block" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/electrum_block.json b/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/electrum_block.json new file mode 100644 index 000000000..ce0691e1c --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/electrum_block.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "cosmere:electrum_block" + } + ], + "name": "main", + "rolls": 1.0 + } + ], + "random_sequence": "cosmere:blocks/electrum_block" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/harmonium_block.json b/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/harmonium_block.json new file mode 100644 index 000000000..06ecf9b32 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/harmonium_block.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "cosmere:harmonium_block" + } + ], + "name": "main", + "rolls": 1.0 + } + ], + "random_sequence": "cosmere:blocks/harmonium_block" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/lead_block.json b/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/lead_block.json new file mode 100644 index 000000000..18d7e915b --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/lead_block.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "cosmere:lead_block" + } + ], + "name": "main", + "rolls": 1.0 + } + ], + "random_sequence": "cosmere:blocks/lead_block" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/lead_ore.json b/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/lead_ore.json new file mode 100644 index 000000000..806d3658b --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/lead_ore.json @@ -0,0 +1,51 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ], + "name": "cosmere:lead_ore" + }, + { + "type": "minecraft:item", + "functions": [ + { + "enchantment": "minecraft:fortune", + "formula": "minecraft:ore_drops", + "function": "minecraft:apply_bonus" + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "cosmere:raw_lead_ore" + } + ] + } + ], + "name": "main", + "rolls": 1.0 + } + ], + "random_sequence": "cosmere:blocks/lead_ore" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/lerasatium_block.json b/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/lerasatium_block.json new file mode 100644 index 000000000..86191d831 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/lerasatium_block.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "cosmere:lerasatium_block" + } + ], + "name": "main", + "rolls": 1.0 + } + ], + "random_sequence": "cosmere:blocks/lerasatium_block" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/lerasium_block.json b/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/lerasium_block.json new file mode 100644 index 000000000..1d81ad898 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/lerasium_block.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "cosmere:lerasium_block" + } + ], + "name": "main", + "rolls": 1.0 + } + ], + "random_sequence": "cosmere:blocks/lerasium_block" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/malatium_block.json b/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/malatium_block.json new file mode 100644 index 000000000..f48794fd5 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/malatium_block.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "cosmere:malatium_block" + } + ], + "name": "main", + "rolls": 1.0 + } + ], + "random_sequence": "cosmere:blocks/malatium_block" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/metalworking_table.json b/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/metalworking_table.json new file mode 100644 index 000000000..99ebbd4d5 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/metalworking_table.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "cosmere:metalworking_table" + } + ], + "name": "main", + "rolls": 1.0 + } + ], + "random_sequence": "cosmere:blocks/metalworking_table" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/nickel_block.json b/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/nickel_block.json new file mode 100644 index 000000000..bc43f966b --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/nickel_block.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "cosmere:nickel_block" + } + ], + "name": "main", + "rolls": 1.0 + } + ], + "random_sequence": "cosmere:blocks/nickel_block" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/nickel_ore.json b/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/nickel_ore.json new file mode 100644 index 000000000..a27f7afd7 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/nickel_ore.json @@ -0,0 +1,51 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ], + "name": "cosmere:nickel_ore" + }, + { + "type": "minecraft:item", + "functions": [ + { + "enchantment": "minecraft:fortune", + "formula": "minecraft:ore_drops", + "function": "minecraft:apply_bonus" + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "cosmere:raw_nickel_ore" + } + ] + } + ], + "name": "main", + "rolls": 1.0 + } + ], + "random_sequence": "cosmere:blocks/nickel_ore" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/nicrosil_block.json b/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/nicrosil_block.json new file mode 100644 index 000000000..8d6f6aea4 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/nicrosil_block.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "cosmere:nicrosil_block" + } + ], + "name": "main", + "rolls": 1.0 + } + ], + "random_sequence": "cosmere:blocks/nicrosil_block" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/pewter_block.json b/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/pewter_block.json new file mode 100644 index 000000000..8d7011b23 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/pewter_block.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "cosmere:pewter_block" + } + ], + "name": "main", + "rolls": 1.0 + } + ], + "random_sequence": "cosmere:blocks/pewter_block" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/silver_block.json b/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/silver_block.json new file mode 100644 index 000000000..a493d305b --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/silver_block.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "cosmere:silver_block" + } + ], + "name": "main", + "rolls": 1.0 + } + ], + "random_sequence": "cosmere:blocks/silver_block" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/silver_ore.json b/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/silver_ore.json new file mode 100644 index 000000000..57485826e --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/silver_ore.json @@ -0,0 +1,51 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ], + "name": "cosmere:silver_ore" + }, + { + "type": "minecraft:item", + "functions": [ + { + "enchantment": "minecraft:fortune", + "formula": "minecraft:ore_drops", + "function": "minecraft:apply_bonus" + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "cosmere:raw_silver_ore" + } + ] + } + ], + "name": "main", + "rolls": 1.0 + } + ], + "random_sequence": "cosmere:blocks/silver_ore" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/steel_block.json b/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/steel_block.json new file mode 100644 index 000000000..a6d835c81 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/steel_block.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "cosmere:steel_block" + } + ], + "name": "main", + "rolls": 1.0 + } + ], + "random_sequence": "cosmere:blocks/steel_block" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/tin_block.json b/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/tin_block.json new file mode 100644 index 000000000..81948eb95 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/tin_block.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "cosmere:tin_block" + } + ], + "name": "main", + "rolls": 1.0 + } + ], + "random_sequence": "cosmere:blocks/tin_block" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/tin_ore.json b/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/tin_ore.json new file mode 100644 index 000000000..39d7e3b32 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/tin_ore.json @@ -0,0 +1,51 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ], + "name": "cosmere:tin_ore" + }, + { + "type": "minecraft:item", + "functions": [ + { + "enchantment": "minecraft:fortune", + "formula": "minecraft:ore_drops", + "function": "minecraft:apply_bonus" + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "cosmere:raw_tin_ore" + } + ] + } + ], + "name": "main", + "rolls": 1.0 + } + ], + "random_sequence": "cosmere:blocks/tin_ore" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/zinc_block.json b/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/zinc_block.json new file mode 100644 index 000000000..2b29d70fc --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/zinc_block.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "cosmere:zinc_block" + } + ], + "name": "main", + "rolls": 1.0 + } + ], + "random_sequence": "cosmere:blocks/zinc_block" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/zinc_ore.json b/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/zinc_ore.json new file mode 100644 index 000000000..e4c60e091 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/loot_tables/blocks/zinc_ore.json @@ -0,0 +1,51 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ], + "name": "cosmere:zinc_ore" + }, + { + "type": "minecraft:item", + "functions": [ + { + "enchantment": "minecraft:fortune", + "formula": "minecraft:ore_drops", + "function": "minecraft:apply_bonus" + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "cosmere:raw_zinc_ore" + } + ] + } + ], + "name": "main", + "rolls": 1.0 + } + ], + "random_sequence": "cosmere:blocks/zinc_ore" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/alloying/dust_blend/bendalloy.json b/src/datagen/generated/cosmere/data/cosmere/recipes/alloying/dust_blend/bendalloy.json new file mode 100644 index 000000000..8277613bb --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/alloying/dust_blend/bendalloy.json @@ -0,0 +1,37 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "tag": "forge:dusts/cadmium" + }, + { + "tag": "forge:dusts/lead" + }, + { + "tag": "forge:dusts/lead" + }, + { + "tag": "forge:dusts/lead" + }, + { + "tag": "forge:dusts/lead" + }, + { + "tag": "forge:dusts/lead" + }, + { + "tag": "forge:dusts/lead" + }, + { + "tag": "forge:dusts/tin" + }, + { + "tag": "forge:dusts/tin" + } + ], + "result": { + "count": 9, + "item": "cosmere:bendalloy_blend" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/alloying/dust_blend/brass.json b/src/datagen/generated/cosmere/data/cosmere/recipes/alloying/dust_blend/brass.json new file mode 100644 index 000000000..1ceb9386d --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/alloying/dust_blend/brass.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "tag": "forge:dusts/zinc" + }, + { + "tag": "forge:dusts/copper" + } + ], + "result": { + "count": 2, + "item": "cosmere:brass_blend" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/alloying/dust_blend/bronze.json b/src/datagen/generated/cosmere/data/cosmere/recipes/alloying/dust_blend/bronze.json new file mode 100644 index 000000000..a3372526f --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/alloying/dust_blend/bronze.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "tag": "forge:dusts/copper" + }, + { + "tag": "forge:dusts/copper" + }, + { + "tag": "forge:dusts/copper" + }, + { + "tag": "forge:dusts/tin" + } + ], + "result": { + "count": 4, + "item": "cosmere:bronze_blend" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/alloying/dust_blend/duralumin.json b/src/datagen/generated/cosmere/data/cosmere/recipes/alloying/dust_blend/duralumin.json new file mode 100644 index 000000000..0161a2992 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/alloying/dust_blend/duralumin.json @@ -0,0 +1,25 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "tag": "forge:dusts/aluminum" + }, + { + "tag": "forge:dusts/aluminum" + }, + { + "tag": "forge:dusts/aluminum" + }, + { + "tag": "forge:dusts/aluminum" + }, + { + "tag": "forge:dusts/copper" + } + ], + "result": { + "count": 5, + "item": "cosmere:duralumin_blend" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/alloying/dust_blend/electrum.json b/src/datagen/generated/cosmere/data/cosmere/recipes/alloying/dust_blend/electrum.json new file mode 100644 index 000000000..3d0024c18 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/alloying/dust_blend/electrum.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "tag": "forge:dusts/gold" + }, + { + "tag": "forge:dusts/silver" + } + ], + "result": { + "count": 2, + "item": "cosmere:electrum_blend" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/alloying/dust_blend/nicrosil.json b/src/datagen/generated/cosmere/data/cosmere/recipes/alloying/dust_blend/nicrosil.json new file mode 100644 index 000000000..c7dfbc410 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/alloying/dust_blend/nicrosil.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "tag": "forge:dusts/chromium" + }, + { + "tag": "forge:dusts/nickel" + }, + { + "tag": "forge:dusts/nickel" + }, + { + "tag": "forge:dusts/nickel" + } + ], + "result": { + "count": 4, + "item": "cosmere:nicrosil_blend" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/alloying/dust_blend/pewter.json b/src/datagen/generated/cosmere/data/cosmere/recipes/alloying/dust_blend/pewter.json new file mode 100644 index 000000000..faebdc687 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/alloying/dust_blend/pewter.json @@ -0,0 +1,25 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "tag": "forge:dusts/tin" + }, + { + "tag": "forge:dusts/tin" + }, + { + "tag": "forge:dusts/tin" + }, + { + "tag": "forge:dusts/tin" + }, + { + "tag": "forge:dusts/lead" + } + ], + "result": { + "count": 5, + "item": "cosmere:pewter_blend" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/alloying/dust_blend/steel.json b/src/datagen/generated/cosmere/data/cosmere/recipes/alloying/dust_blend/steel.json new file mode 100644 index 000000000..4efe759a3 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/alloying/dust_blend/steel.json @@ -0,0 +1,27 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "tag": "forge:dusts/iron" + }, + { + "tag": "forge:dusts/iron" + }, + { + "tag": "forge:dusts/iron" + }, + [ + { + "item": "minecraft:coal" + }, + { + "item": "minecraft:charcoal" + } + ] + ], + "result": { + "count": 4, + "item": "cosmere:steel_blend" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/alloying/ingot_blend/bendalloy.json b/src/datagen/generated/cosmere/data/cosmere/recipes/alloying/ingot_blend/bendalloy.json new file mode 100644 index 000000000..647dabf76 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/alloying/ingot_blend/bendalloy.json @@ -0,0 +1,37 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "tag": "forge:ingots/cadmium" + }, + { + "tag": "forge:ingots/lead" + }, + { + "tag": "forge:ingots/lead" + }, + { + "tag": "forge:ingots/lead" + }, + { + "tag": "forge:ingots/lead" + }, + { + "tag": "forge:ingots/lead" + }, + { + "tag": "forge:ingots/lead" + }, + { + "tag": "forge:ingots/tin" + }, + { + "tag": "forge:ingots/tin" + } + ], + "result": { + "count": 9, + "item": "cosmere:bendalloy_blend" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/alloying/ingot_blend/brass.json b/src/datagen/generated/cosmere/data/cosmere/recipes/alloying/ingot_blend/brass.json new file mode 100644 index 000000000..061844097 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/alloying/ingot_blend/brass.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "tag": "forge:ingots/zinc" + }, + { + "tag": "forge:ingots/copper" + } + ], + "result": { + "count": 2, + "item": "cosmere:brass_blend" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/alloying/ingot_blend/bronze.json b/src/datagen/generated/cosmere/data/cosmere/recipes/alloying/ingot_blend/bronze.json new file mode 100644 index 000000000..1e2561c82 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/alloying/ingot_blend/bronze.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "tag": "forge:ingots/copper" + }, + { + "tag": "forge:ingots/copper" + }, + { + "tag": "forge:ingots/copper" + }, + { + "tag": "forge:ingots/tin" + } + ], + "result": { + "count": 4, + "item": "cosmere:bronze_blend" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/alloying/ingot_blend/duralumin.json b/src/datagen/generated/cosmere/data/cosmere/recipes/alloying/ingot_blend/duralumin.json new file mode 100644 index 000000000..e2f8caad6 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/alloying/ingot_blend/duralumin.json @@ -0,0 +1,25 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "tag": "forge:ingots/aluminum" + }, + { + "tag": "forge:ingots/aluminum" + }, + { + "tag": "forge:ingots/aluminum" + }, + { + "tag": "forge:ingots/aluminum" + }, + { + "tag": "forge:ingots/copper" + } + ], + "result": { + "count": 5, + "item": "cosmere:duralumin_blend" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/alloying/ingot_blend/electrum.json b/src/datagen/generated/cosmere/data/cosmere/recipes/alloying/ingot_blend/electrum.json new file mode 100644 index 000000000..d7bd9b592 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/alloying/ingot_blend/electrum.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "tag": "forge:ingots/gold" + }, + { + "tag": "forge:ingots/silver" + } + ], + "result": { + "count": 2, + "item": "cosmere:electrum_blend" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/alloying/ingot_blend/nicrosil.json b/src/datagen/generated/cosmere/data/cosmere/recipes/alloying/ingot_blend/nicrosil.json new file mode 100644 index 000000000..560e68496 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/alloying/ingot_blend/nicrosil.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "tag": "forge:ingots/chromium" + }, + { + "tag": "forge:ingots/nickel" + }, + { + "tag": "forge:ingots/nickel" + }, + { + "tag": "forge:ingots/nickel" + } + ], + "result": { + "count": 4, + "item": "cosmere:nicrosil_blend" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/alloying/ingot_blend/pewter.json b/src/datagen/generated/cosmere/data/cosmere/recipes/alloying/ingot_blend/pewter.json new file mode 100644 index 000000000..d9f054ac4 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/alloying/ingot_blend/pewter.json @@ -0,0 +1,25 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "tag": "forge:ingots/tin" + }, + { + "tag": "forge:ingots/tin" + }, + { + "tag": "forge:ingots/tin" + }, + { + "tag": "forge:ingots/tin" + }, + { + "tag": "forge:ingots/lead" + } + ], + "result": { + "count": 5, + "item": "cosmere:pewter_blend" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/alloying/ingot_blend/steel.json b/src/datagen/generated/cosmere/data/cosmere/recipes/alloying/ingot_blend/steel.json new file mode 100644 index 000000000..ea99d0ef2 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/alloying/ingot_blend/steel.json @@ -0,0 +1,27 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "tag": "forge:ingots/iron" + }, + { + "tag": "forge:ingots/iron" + }, + { + "tag": "forge:ingots/iron" + }, + [ + { + "item": "minecraft:coal" + }, + { + "item": "minecraft:charcoal" + } + ] + ], + "result": { + "count": 4, + "item": "cosmere:steel_blend" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/alloying/raw_blend/bendalloy.json b/src/datagen/generated/cosmere/data/cosmere/recipes/alloying/raw_blend/bendalloy.json new file mode 100644 index 000000000..f7988d388 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/alloying/raw_blend/bendalloy.json @@ -0,0 +1,37 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "tag": "forge:raw_materials/cadmium" + }, + { + "tag": "forge:raw_materials/lead" + }, + { + "tag": "forge:raw_materials/lead" + }, + { + "tag": "forge:raw_materials/lead" + }, + { + "tag": "forge:raw_materials/lead" + }, + { + "tag": "forge:raw_materials/lead" + }, + { + "tag": "forge:raw_materials/lead" + }, + { + "tag": "forge:raw_materials/tin" + }, + { + "tag": "forge:raw_materials/tin" + } + ], + "result": { + "count": 9, + "item": "cosmere:bendalloy_blend" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/alloying/raw_blend/brass.json b/src/datagen/generated/cosmere/data/cosmere/recipes/alloying/raw_blend/brass.json new file mode 100644 index 000000000..fa27665ae --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/alloying/raw_blend/brass.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "tag": "forge:raw_materials/zinc" + }, + { + "tag": "forge:raw_materials/copper" + } + ], + "result": { + "count": 2, + "item": "cosmere:brass_blend" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/alloying/raw_blend/bronze.json b/src/datagen/generated/cosmere/data/cosmere/recipes/alloying/raw_blend/bronze.json new file mode 100644 index 000000000..4cfd80fcb --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/alloying/raw_blend/bronze.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "tag": "forge:raw_materials/copper" + }, + { + "tag": "forge:raw_materials/copper" + }, + { + "tag": "forge:raw_materials/copper" + }, + { + "tag": "forge:raw_materials/tin" + } + ], + "result": { + "count": 4, + "item": "cosmere:bronze_blend" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/alloying/raw_blend/duralumin.json b/src/datagen/generated/cosmere/data/cosmere/recipes/alloying/raw_blend/duralumin.json new file mode 100644 index 000000000..b0d58ca21 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/alloying/raw_blend/duralumin.json @@ -0,0 +1,25 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "tag": "forge:raw_materials/aluminum" + }, + { + "tag": "forge:raw_materials/aluminum" + }, + { + "tag": "forge:raw_materials/aluminum" + }, + { + "tag": "forge:raw_materials/aluminum" + }, + { + "tag": "forge:raw_materials/copper" + } + ], + "result": { + "count": 5, + "item": "cosmere:duralumin_blend" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/alloying/raw_blend/electrum.json b/src/datagen/generated/cosmere/data/cosmere/recipes/alloying/raw_blend/electrum.json new file mode 100644 index 000000000..7f81be921 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/alloying/raw_blend/electrum.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "tag": "forge:raw_materials/gold" + }, + { + "tag": "forge:raw_materials/silver" + } + ], + "result": { + "count": 2, + "item": "cosmere:electrum_blend" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/alloying/raw_blend/nicrosil.json b/src/datagen/generated/cosmere/data/cosmere/recipes/alloying/raw_blend/nicrosil.json new file mode 100644 index 000000000..0aa82fdfd --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/alloying/raw_blend/nicrosil.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "tag": "forge:raw_materials/chromium" + }, + { + "tag": "forge:raw_materials/nickel" + }, + { + "tag": "forge:raw_materials/nickel" + }, + { + "tag": "forge:raw_materials/nickel" + } + ], + "result": { + "count": 4, + "item": "cosmere:nicrosil_blend" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/alloying/raw_blend/pewter.json b/src/datagen/generated/cosmere/data/cosmere/recipes/alloying/raw_blend/pewter.json new file mode 100644 index 000000000..c82bdf763 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/alloying/raw_blend/pewter.json @@ -0,0 +1,25 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "tag": "forge:raw_materials/tin" + }, + { + "tag": "forge:raw_materials/tin" + }, + { + "tag": "forge:raw_materials/tin" + }, + { + "tag": "forge:raw_materials/tin" + }, + { + "tag": "forge:raw_materials/lead" + } + ], + "result": { + "count": 5, + "item": "cosmere:pewter_blend" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/alloying/raw_blend/steel.json b/src/datagen/generated/cosmere/data/cosmere/recipes/alloying/raw_blend/steel.json new file mode 100644 index 000000000..5daa16d00 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/alloying/raw_blend/steel.json @@ -0,0 +1,27 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "tag": "forge:raw_materials/iron" + }, + { + "tag": "forge:raw_materials/iron" + }, + { + "tag": "forge:raw_materials/iron" + }, + [ + { + "item": "minecraft:coal" + }, + { + "item": "minecraft:charcoal" + } + ] + ], + "result": { + "count": 4, + "item": "cosmere:steel_blend" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/aluminum_block.json b/src/datagen/generated/cosmere/data/cosmere/recipes/aluminum_block.json new file mode 100644 index 000000000..da3c64bba --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/aluminum_block.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "I": { + "tag": "forge:ingots/aluminum" + }, + "J": { + "item": "cosmere:aluminum_ingot" + } + }, + "pattern": [ + "III", + "IJI", + "III" + ], + "result": { + "item": "cosmere:aluminum_block" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/aluminum_ingot.json b/src/datagen/generated/cosmere/data/cosmere/recipes/aluminum_ingot.json new file mode 100644 index 000000000..90aad1cd2 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/aluminum_ingot.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "I": { + "tag": "forge:nuggets/aluminum" + }, + "J": { + "item": "cosmere:aluminum_nugget" + } + }, + "pattern": [ + "III", + "IJI", + "III" + ], + "result": { + "item": "cosmere:aluminum_ingot" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/aluminum_ingot_from_blasting_aluminum_ore.json b/src/datagen/generated/cosmere/data/cosmere/recipes/aluminum_ingot_from_blasting_aluminum_ore.json new file mode 100644 index 000000000..95f848462 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/aluminum_ingot_from_blasting_aluminum_ore.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:blasting", + "category": "misc", + "cookingtime": 100, + "experience": 1.0, + "ingredient": { + "item": "cosmere:aluminum_ore" + }, + "result": "cosmere:aluminum_ingot" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/aluminum_ingot_from_blasting_deepslate_aluminum_ore.json b/src/datagen/generated/cosmere/data/cosmere/recipes/aluminum_ingot_from_blasting_deepslate_aluminum_ore.json new file mode 100644 index 000000000..d6d5fca69 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/aluminum_ingot_from_blasting_deepslate_aluminum_ore.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:blasting", + "category": "misc", + "cookingtime": 100, + "experience": 1.0, + "ingredient": { + "item": "cosmere:deepslate_aluminum_ore" + }, + "result": "cosmere:aluminum_ingot" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/aluminum_ingot_from_blasting_raw_aluminum_ore.json b/src/datagen/generated/cosmere/data/cosmere/recipes/aluminum_ingot_from_blasting_raw_aluminum_ore.json new file mode 100644 index 000000000..89b16bcf6 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/aluminum_ingot_from_blasting_raw_aluminum_ore.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:blasting", + "category": "misc", + "cookingtime": 100, + "experience": 1.0, + "ingredient": { + "item": "cosmere:raw_aluminum_ore" + }, + "result": "cosmere:aluminum_ingot" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/aluminum_ingot_from_smelting_aluminum_ore.json b/src/datagen/generated/cosmere/data/cosmere/recipes/aluminum_ingot_from_smelting_aluminum_ore.json new file mode 100644 index 000000000..75dd75a27 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/aluminum_ingot_from_smelting_aluminum_ore.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:smelting", + "category": "misc", + "cookingtime": 200, + "experience": 1.0, + "ingredient": { + "item": "cosmere:aluminum_ore" + }, + "result": "cosmere:aluminum_ingot" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/aluminum_ingot_from_smelting_deepslate_aluminum_ore.json b/src/datagen/generated/cosmere/data/cosmere/recipes/aluminum_ingot_from_smelting_deepslate_aluminum_ore.json new file mode 100644 index 000000000..75a01bd01 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/aluminum_ingot_from_smelting_deepslate_aluminum_ore.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:smelting", + "category": "misc", + "cookingtime": 200, + "experience": 1.0, + "ingredient": { + "item": "cosmere:deepslate_aluminum_ore" + }, + "result": "cosmere:aluminum_ingot" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/aluminum_ingot_from_smelting_raw_aluminum_ore.json b/src/datagen/generated/cosmere/data/cosmere/recipes/aluminum_ingot_from_smelting_raw_aluminum_ore.json new file mode 100644 index 000000000..eb46f329a --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/aluminum_ingot_from_smelting_raw_aluminum_ore.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:smelting", + "category": "misc", + "cookingtime": 200, + "experience": 1.0, + "ingredient": { + "item": "cosmere:raw_aluminum_ore" + }, + "result": "cosmere:aluminum_ingot" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/atium_block.json b/src/datagen/generated/cosmere/data/cosmere/recipes/atium_block.json new file mode 100644 index 000000000..b1e308fbf --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/atium_block.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "I": { + "tag": "forge:ingots/atium" + }, + "J": { + "item": "cosmere:atium_ingot" + } + }, + "pattern": [ + "III", + "IJI", + "III" + ], + "result": { + "item": "cosmere:atium_block" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/atium_ingot.json b/src/datagen/generated/cosmere/data/cosmere/recipes/atium_ingot.json new file mode 100644 index 000000000..c16ed8f3e --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/atium_ingot.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "I": { + "type": "forge:partial_nbt", + "item": "cosmere:atium_nugget", + "nbt": "{nuggetSize:16}" + } + }, + "pattern": [ + "III", + "III", + "III" + ], + "result": { + "item": "cosmere:atium_ingot" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/bendalloy_block.json b/src/datagen/generated/cosmere/data/cosmere/recipes/bendalloy_block.json new file mode 100644 index 000000000..1bbe6cfc5 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/bendalloy_block.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "I": { + "tag": "forge:ingots/bendalloy" + }, + "J": { + "item": "cosmere:bendalloy_ingot" + } + }, + "pattern": [ + "III", + "IJI", + "III" + ], + "result": { + "item": "cosmere:bendalloy_block" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/bendalloy_ingot.json b/src/datagen/generated/cosmere/data/cosmere/recipes/bendalloy_ingot.json new file mode 100644 index 000000000..2a2018755 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/bendalloy_ingot.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "I": { + "tag": "forge:nuggets/bendalloy" + }, + "J": { + "item": "cosmere:bendalloy_nugget" + } + }, + "pattern": [ + "III", + "IJI", + "III" + ], + "result": { + "item": "cosmere:bendalloy_ingot" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/bendalloy_ingot_from_blasting_bendalloy_blend.json b/src/datagen/generated/cosmere/data/cosmere/recipes/bendalloy_ingot_from_blasting_bendalloy_blend.json new file mode 100644 index 000000000..4bf4645d8 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/bendalloy_ingot_from_blasting_bendalloy_blend.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:blasting", + "category": "misc", + "cookingtime": 100, + "experience": 1.0, + "ingredient": { + "item": "cosmere:bendalloy_blend" + }, + "result": "cosmere:bendalloy_ingot" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/bendalloy_ingot_from_smelting_bendalloy_blend.json b/src/datagen/generated/cosmere/data/cosmere/recipes/bendalloy_ingot_from_smelting_bendalloy_blend.json new file mode 100644 index 000000000..cb4de6460 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/bendalloy_ingot_from_smelting_bendalloy_blend.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:smelting", + "category": "misc", + "cookingtime": 200, + "experience": 1.0, + "ingredient": { + "item": "cosmere:bendalloy_blend" + }, + "result": "cosmere:bendalloy_ingot" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/brass_block.json b/src/datagen/generated/cosmere/data/cosmere/recipes/brass_block.json new file mode 100644 index 000000000..95eb207ea --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/brass_block.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "I": { + "tag": "forge:ingots/brass" + }, + "J": { + "item": "cosmere:brass_ingot" + } + }, + "pattern": [ + "III", + "IJI", + "III" + ], + "result": { + "item": "cosmere:brass_block" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/brass_ingot.json b/src/datagen/generated/cosmere/data/cosmere/recipes/brass_ingot.json new file mode 100644 index 000000000..277fcb75a --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/brass_ingot.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "I": { + "tag": "forge:nuggets/brass" + }, + "J": { + "item": "cosmere:brass_nugget" + } + }, + "pattern": [ + "III", + "IJI", + "III" + ], + "result": { + "item": "cosmere:brass_ingot" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/brass_ingot_from_blasting_brass_blend.json b/src/datagen/generated/cosmere/data/cosmere/recipes/brass_ingot_from_blasting_brass_blend.json new file mode 100644 index 000000000..731342bae --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/brass_ingot_from_blasting_brass_blend.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:blasting", + "category": "misc", + "cookingtime": 100, + "experience": 1.0, + "ingredient": { + "item": "cosmere:brass_blend" + }, + "result": "cosmere:brass_ingot" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/brass_ingot_from_smelting_brass_blend.json b/src/datagen/generated/cosmere/data/cosmere/recipes/brass_ingot_from_smelting_brass_blend.json new file mode 100644 index 000000000..0a50cbcf5 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/brass_ingot_from_smelting_brass_blend.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:smelting", + "category": "misc", + "cookingtime": 200, + "experience": 1.0, + "ingredient": { + "item": "cosmere:brass_blend" + }, + "result": "cosmere:brass_ingot" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/bronze_block.json b/src/datagen/generated/cosmere/data/cosmere/recipes/bronze_block.json new file mode 100644 index 000000000..d685d3ad5 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/bronze_block.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "I": { + "tag": "forge:ingots/bronze" + }, + "J": { + "item": "cosmere:bronze_ingot" + } + }, + "pattern": [ + "III", + "IJI", + "III" + ], + "result": { + "item": "cosmere:bronze_block" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/bronze_ingot.json b/src/datagen/generated/cosmere/data/cosmere/recipes/bronze_ingot.json new file mode 100644 index 000000000..0bf825c8f --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/bronze_ingot.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "I": { + "tag": "forge:nuggets/bronze" + }, + "J": { + "item": "cosmere:bronze_nugget" + } + }, + "pattern": [ + "III", + "IJI", + "III" + ], + "result": { + "item": "cosmere:bronze_ingot" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/bronze_ingot_from_blasting_bronze_blend.json b/src/datagen/generated/cosmere/data/cosmere/recipes/bronze_ingot_from_blasting_bronze_blend.json new file mode 100644 index 000000000..72e418fea --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/bronze_ingot_from_blasting_bronze_blend.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:blasting", + "category": "misc", + "cookingtime": 100, + "experience": 1.0, + "ingredient": { + "item": "cosmere:bronze_blend" + }, + "result": "cosmere:bronze_ingot" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/bronze_ingot_from_smelting_bronze_blend.json b/src/datagen/generated/cosmere/data/cosmere/recipes/bronze_ingot_from_smelting_bronze_blend.json new file mode 100644 index 000000000..2de52b61a --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/bronze_ingot_from_smelting_bronze_blend.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:smelting", + "category": "misc", + "cookingtime": 200, + "experience": 1.0, + "ingredient": { + "item": "cosmere:bronze_blend" + }, + "result": "cosmere:bronze_ingot" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/cadmium_block.json b/src/datagen/generated/cosmere/data/cosmere/recipes/cadmium_block.json new file mode 100644 index 000000000..775e9e233 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/cadmium_block.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "I": { + "tag": "forge:ingots/cadmium" + }, + "J": { + "item": "cosmere:cadmium_ingot" + } + }, + "pattern": [ + "III", + "IJI", + "III" + ], + "result": { + "item": "cosmere:cadmium_block" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/cadmium_ingot.json b/src/datagen/generated/cosmere/data/cosmere/recipes/cadmium_ingot.json new file mode 100644 index 000000000..35cf59c92 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/cadmium_ingot.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "I": { + "tag": "forge:nuggets/cadmium" + }, + "J": { + "item": "cosmere:cadmium_nugget" + } + }, + "pattern": [ + "III", + "IJI", + "III" + ], + "result": { + "item": "cosmere:cadmium_ingot" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/cadmium_ingot_from_blasting_cadmium_ore.json b/src/datagen/generated/cosmere/data/cosmere/recipes/cadmium_ingot_from_blasting_cadmium_ore.json new file mode 100644 index 000000000..db3b80a53 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/cadmium_ingot_from_blasting_cadmium_ore.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:blasting", + "category": "misc", + "cookingtime": 100, + "experience": 1.0, + "ingredient": { + "item": "cosmere:cadmium_ore" + }, + "result": "cosmere:cadmium_ingot" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/cadmium_ingot_from_blasting_deepslate_cadmium_ore.json b/src/datagen/generated/cosmere/data/cosmere/recipes/cadmium_ingot_from_blasting_deepslate_cadmium_ore.json new file mode 100644 index 000000000..d1dd4393d --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/cadmium_ingot_from_blasting_deepslate_cadmium_ore.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:blasting", + "category": "misc", + "cookingtime": 100, + "experience": 1.0, + "ingredient": { + "item": "cosmere:deepslate_cadmium_ore" + }, + "result": "cosmere:cadmium_ingot" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/cadmium_ingot_from_blasting_raw_cadmium_ore.json b/src/datagen/generated/cosmere/data/cosmere/recipes/cadmium_ingot_from_blasting_raw_cadmium_ore.json new file mode 100644 index 000000000..8903007ec --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/cadmium_ingot_from_blasting_raw_cadmium_ore.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:blasting", + "category": "misc", + "cookingtime": 100, + "experience": 1.0, + "ingredient": { + "item": "cosmere:raw_cadmium_ore" + }, + "result": "cosmere:cadmium_ingot" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/cadmium_ingot_from_smelting_cadmium_ore.json b/src/datagen/generated/cosmere/data/cosmere/recipes/cadmium_ingot_from_smelting_cadmium_ore.json new file mode 100644 index 000000000..dec0f2f0c --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/cadmium_ingot_from_smelting_cadmium_ore.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:smelting", + "category": "misc", + "cookingtime": 200, + "experience": 1.0, + "ingredient": { + "item": "cosmere:cadmium_ore" + }, + "result": "cosmere:cadmium_ingot" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/cadmium_ingot_from_smelting_deepslate_cadmium_ore.json b/src/datagen/generated/cosmere/data/cosmere/recipes/cadmium_ingot_from_smelting_deepslate_cadmium_ore.json new file mode 100644 index 000000000..dd9ee501b --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/cadmium_ingot_from_smelting_deepslate_cadmium_ore.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:smelting", + "category": "misc", + "cookingtime": 200, + "experience": 1.0, + "ingredient": { + "item": "cosmere:deepslate_cadmium_ore" + }, + "result": "cosmere:cadmium_ingot" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/cadmium_ingot_from_smelting_raw_cadmium_ore.json b/src/datagen/generated/cosmere/data/cosmere/recipes/cadmium_ingot_from_smelting_raw_cadmium_ore.json new file mode 100644 index 000000000..72310bf04 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/cadmium_ingot_from_smelting_raw_cadmium_ore.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:smelting", + "category": "misc", + "cookingtime": 200, + "experience": 1.0, + "ingredient": { + "item": "cosmere:raw_cadmium_ore" + }, + "result": "cosmere:cadmium_ingot" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/chromium_block.json b/src/datagen/generated/cosmere/data/cosmere/recipes/chromium_block.json new file mode 100644 index 000000000..c5ff92247 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/chromium_block.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "I": { + "tag": "forge:ingots/chromium" + }, + "J": { + "item": "cosmere:chromium_ingot" + } + }, + "pattern": [ + "III", + "IJI", + "III" + ], + "result": { + "item": "cosmere:chromium_block" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/chromium_ingot.json b/src/datagen/generated/cosmere/data/cosmere/recipes/chromium_ingot.json new file mode 100644 index 000000000..48706723c --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/chromium_ingot.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "I": { + "tag": "forge:nuggets/chromium" + }, + "J": { + "item": "cosmere:chromium_nugget" + } + }, + "pattern": [ + "III", + "IJI", + "III" + ], + "result": { + "item": "cosmere:chromium_ingot" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/chromium_ingot_from_blasting_chromium_ore.json b/src/datagen/generated/cosmere/data/cosmere/recipes/chromium_ingot_from_blasting_chromium_ore.json new file mode 100644 index 000000000..53db07c12 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/chromium_ingot_from_blasting_chromium_ore.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:blasting", + "category": "misc", + "cookingtime": 100, + "experience": 1.0, + "ingredient": { + "item": "cosmere:chromium_ore" + }, + "result": "cosmere:chromium_ingot" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/chromium_ingot_from_blasting_deepslate_chromium_ore.json b/src/datagen/generated/cosmere/data/cosmere/recipes/chromium_ingot_from_blasting_deepslate_chromium_ore.json new file mode 100644 index 000000000..bb378125f --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/chromium_ingot_from_blasting_deepslate_chromium_ore.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:blasting", + "category": "misc", + "cookingtime": 100, + "experience": 1.0, + "ingredient": { + "item": "cosmere:deepslate_chromium_ore" + }, + "result": "cosmere:chromium_ingot" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/chromium_ingot_from_blasting_raw_chromium_ore.json b/src/datagen/generated/cosmere/data/cosmere/recipes/chromium_ingot_from_blasting_raw_chromium_ore.json new file mode 100644 index 000000000..96512cad9 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/chromium_ingot_from_blasting_raw_chromium_ore.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:blasting", + "category": "misc", + "cookingtime": 100, + "experience": 1.0, + "ingredient": { + "item": "cosmere:raw_chromium_ore" + }, + "result": "cosmere:chromium_ingot" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/chromium_ingot_from_smelting_chromium_ore.json b/src/datagen/generated/cosmere/data/cosmere/recipes/chromium_ingot_from_smelting_chromium_ore.json new file mode 100644 index 000000000..c436cf7d5 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/chromium_ingot_from_smelting_chromium_ore.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:smelting", + "category": "misc", + "cookingtime": 200, + "experience": 1.0, + "ingredient": { + "item": "cosmere:chromium_ore" + }, + "result": "cosmere:chromium_ingot" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/chromium_ingot_from_smelting_deepslate_chromium_ore.json b/src/datagen/generated/cosmere/data/cosmere/recipes/chromium_ingot_from_smelting_deepslate_chromium_ore.json new file mode 100644 index 000000000..f32aa6e90 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/chromium_ingot_from_smelting_deepslate_chromium_ore.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:smelting", + "category": "misc", + "cookingtime": 200, + "experience": 1.0, + "ingredient": { + "item": "cosmere:deepslate_chromium_ore" + }, + "result": "cosmere:chromium_ingot" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/chromium_ingot_from_smelting_raw_chromium_ore.json b/src/datagen/generated/cosmere/data/cosmere/recipes/chromium_ingot_from_smelting_raw_chromium_ore.json new file mode 100644 index 000000000..c2ed9dc20 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/chromium_ingot_from_smelting_raw_chromium_ore.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:smelting", + "category": "misc", + "cookingtime": 200, + "experience": 1.0, + "ingredient": { + "item": "cosmere:raw_chromium_ore" + }, + "result": "cosmere:chromium_ingot" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/aluminum_block_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/aluminum_block_deconstruct.json new file mode 100644 index 000000000..62624d162 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/aluminum_block_deconstruct.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "cosmere:aluminum_block" + } + ], + "result": { + "count": 9, + "item": "cosmere:aluminum_ingot" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/aluminum_item_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/aluminum_item_deconstruct.json new file mode 100644 index 000000000..ed2a61077 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/aluminum_item_deconstruct.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "tag": "forge:ingots/aluminum" + } + ], + "result": { + "count": 9, + "item": "cosmere:aluminum_nugget" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/atium_block_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/atium_block_deconstruct.json new file mode 100644 index 000000000..2cbad47bf --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/atium_block_deconstruct.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "cosmere:atium_block" + } + ], + "result": { + "count": 9, + "item": "cosmere:atium_ingot" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/atium_item_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/atium_item_deconstruct.json new file mode 100644 index 000000000..98b1da5b8 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/atium_item_deconstruct.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "tag": "forge:ingots/atium" + } + ], + "result": { + "count": 9, + "item": "cosmere:atium_nugget" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/bendalloy_block_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/bendalloy_block_deconstruct.json new file mode 100644 index 000000000..0b9485eda --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/bendalloy_block_deconstruct.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "cosmere:bendalloy_block" + } + ], + "result": { + "count": 9, + "item": "cosmere:bendalloy_ingot" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/bendalloy_item_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/bendalloy_item_deconstruct.json new file mode 100644 index 000000000..84e7a023a --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/bendalloy_item_deconstruct.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "tag": "forge:ingots/bendalloy" + } + ], + "result": { + "count": 9, + "item": "cosmere:bendalloy_nugget" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/brass_block_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/brass_block_deconstruct.json new file mode 100644 index 000000000..ce4d9e0e0 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/brass_block_deconstruct.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "cosmere:brass_block" + } + ], + "result": { + "count": 9, + "item": "cosmere:brass_ingot" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/brass_item_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/brass_item_deconstruct.json new file mode 100644 index 000000000..7a51d5808 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/brass_item_deconstruct.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "tag": "forge:ingots/brass" + } + ], + "result": { + "count": 9, + "item": "cosmere:brass_nugget" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/bronze_block_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/bronze_block_deconstruct.json new file mode 100644 index 000000000..850f67d5c --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/bronze_block_deconstruct.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "cosmere:bronze_block" + } + ], + "result": { + "count": 9, + "item": "cosmere:bronze_ingot" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/bronze_item_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/bronze_item_deconstruct.json new file mode 100644 index 000000000..630470521 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/bronze_item_deconstruct.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "tag": "forge:ingots/bronze" + } + ], + "result": { + "count": 9, + "item": "cosmere:bronze_nugget" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/cadmium_block_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/cadmium_block_deconstruct.json new file mode 100644 index 000000000..2b98078f7 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/cadmium_block_deconstruct.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "cosmere:cadmium_block" + } + ], + "result": { + "count": 9, + "item": "cosmere:cadmium_ingot" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/cadmium_item_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/cadmium_item_deconstruct.json new file mode 100644 index 000000000..9bf0feeba --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/cadmium_item_deconstruct.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "tag": "forge:ingots/cadmium" + } + ], + "result": { + "count": 9, + "item": "cosmere:cadmium_nugget" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/chromium_block_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/chromium_block_deconstruct.json new file mode 100644 index 000000000..ad050e78b --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/chromium_block_deconstruct.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "cosmere:chromium_block" + } + ], + "result": { + "count": 9, + "item": "cosmere:chromium_ingot" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/chromium_item_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/chromium_item_deconstruct.json new file mode 100644 index 000000000..ea2c1912b --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/chromium_item_deconstruct.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "tag": "forge:ingots/chromium" + } + ], + "result": { + "count": 9, + "item": "cosmere:chromium_nugget" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/copper_item_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/copper_item_deconstruct.json new file mode 100644 index 000000000..379027d43 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/copper_item_deconstruct.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "tag": "forge:ingots/copper" + } + ], + "result": { + "count": 9, + "item": "cosmere:copper_nugget" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/duralumin_block_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/duralumin_block_deconstruct.json new file mode 100644 index 000000000..34cf1fc55 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/duralumin_block_deconstruct.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "cosmere:duralumin_block" + } + ], + "result": { + "count": 9, + "item": "cosmere:duralumin_ingot" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/duralumin_item_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/duralumin_item_deconstruct.json new file mode 100644 index 000000000..60744c001 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/duralumin_item_deconstruct.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "tag": "forge:ingots/duralumin" + } + ], + "result": { + "count": 9, + "item": "cosmere:duralumin_nugget" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/electrum_block_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/electrum_block_deconstruct.json new file mode 100644 index 000000000..a69fc8cb7 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/electrum_block_deconstruct.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "cosmere:electrum_block" + } + ], + "result": { + "count": 9, + "item": "cosmere:electrum_ingot" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/electrum_item_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/electrum_item_deconstruct.json new file mode 100644 index 000000000..314d6fe67 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/electrum_item_deconstruct.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "tag": "forge:ingots/electrum" + } + ], + "result": { + "count": 9, + "item": "cosmere:electrum_nugget" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/harmonium_block_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/harmonium_block_deconstruct.json new file mode 100644 index 000000000..bb2a919c1 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/harmonium_block_deconstruct.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "cosmere:harmonium_block" + } + ], + "result": { + "count": 9, + "item": "cosmere:harmonium_ingot" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/harmonium_item_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/harmonium_item_deconstruct.json new file mode 100644 index 000000000..bb56af95f --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/harmonium_item_deconstruct.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "tag": "forge:ingots/harmonium" + } + ], + "result": { + "count": 9, + "item": "cosmere:harmonium_nugget" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/lead_block_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/lead_block_deconstruct.json new file mode 100644 index 000000000..b10e2d8ab --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/lead_block_deconstruct.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "cosmere:lead_block" + } + ], + "result": { + "count": 9, + "item": "cosmere:lead_ingot" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/lead_item_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/lead_item_deconstruct.json new file mode 100644 index 000000000..2e0627841 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/lead_item_deconstruct.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "tag": "forge:ingots/lead" + } + ], + "result": { + "count": 9, + "item": "cosmere:lead_nugget" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/lerasatium_block_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/lerasatium_block_deconstruct.json new file mode 100644 index 000000000..96033c3c6 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/lerasatium_block_deconstruct.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "cosmere:lerasatium_block" + } + ], + "result": { + "count": 9, + "item": "cosmere:lerasatium_ingot" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/lerasatium_item_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/lerasatium_item_deconstruct.json new file mode 100644 index 000000000..308d2c87d --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/lerasatium_item_deconstruct.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "tag": "forge:ingots/lerasatium" + } + ], + "result": { + "count": 9, + "item": "cosmere:lerasatium_nugget" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/lerasium_block_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/lerasium_block_deconstruct.json new file mode 100644 index 000000000..7c8cda9ec --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/lerasium_block_deconstruct.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "cosmere:lerasium_block" + } + ], + "result": { + "count": 9, + "item": "cosmere:lerasium_ingot" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/lerasium_item_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/lerasium_item_deconstruct.json new file mode 100644 index 000000000..2c2201b56 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/lerasium_item_deconstruct.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "tag": "forge:ingots/lerasium" + } + ], + "result": { + "count": 9, + "item": "cosmere:lerasium_nugget" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/malatium_block_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/malatium_block_deconstruct.json new file mode 100644 index 000000000..4fc94c552 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/malatium_block_deconstruct.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "cosmere:malatium_block" + } + ], + "result": { + "count": 9, + "item": "cosmere:malatium_ingot" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/malatium_item_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/malatium_item_deconstruct.json new file mode 100644 index 000000000..ce1699970 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/malatium_item_deconstruct.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "tag": "forge:ingots/malatium" + } + ], + "result": { + "count": 9, + "item": "cosmere:malatium_nugget" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/nickel_block_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/nickel_block_deconstruct.json new file mode 100644 index 000000000..7b87a02e3 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/nickel_block_deconstruct.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "cosmere:nickel_block" + } + ], + "result": { + "count": 9, + "item": "cosmere:nickel_ingot" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/nickel_item_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/nickel_item_deconstruct.json new file mode 100644 index 000000000..cb7a4de63 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/nickel_item_deconstruct.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "tag": "forge:ingots/nickel" + } + ], + "result": { + "count": 9, + "item": "cosmere:nickel_nugget" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/nicrosil_block_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/nicrosil_block_deconstruct.json new file mode 100644 index 000000000..2a1911e15 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/nicrosil_block_deconstruct.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "cosmere:nicrosil_block" + } + ], + "result": { + "count": 9, + "item": "cosmere:nicrosil_ingot" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/nicrosil_item_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/nicrosil_item_deconstruct.json new file mode 100644 index 000000000..c659cb967 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/nicrosil_item_deconstruct.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "tag": "forge:ingots/nicrosil" + } + ], + "result": { + "count": 9, + "item": "cosmere:nicrosil_nugget" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/pewter_block_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/pewter_block_deconstruct.json new file mode 100644 index 000000000..d9b4dfc26 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/pewter_block_deconstruct.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "cosmere:pewter_block" + } + ], + "result": { + "count": 9, + "item": "cosmere:pewter_ingot" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/pewter_item_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/pewter_item_deconstruct.json new file mode 100644 index 000000000..b54c10217 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/pewter_item_deconstruct.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "tag": "forge:ingots/pewter" + } + ], + "result": { + "count": 9, + "item": "cosmere:pewter_nugget" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/silver_block_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/silver_block_deconstruct.json new file mode 100644 index 000000000..e867cc39d --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/silver_block_deconstruct.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "cosmere:silver_block" + } + ], + "result": { + "count": 9, + "item": "cosmere:silver_ingot" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/silver_item_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/silver_item_deconstruct.json new file mode 100644 index 000000000..a38ffa07d --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/silver_item_deconstruct.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "tag": "forge:ingots/silver" + } + ], + "result": { + "count": 9, + "item": "cosmere:silver_nugget" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/steel_block_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/steel_block_deconstruct.json new file mode 100644 index 000000000..2a15a9b3d --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/steel_block_deconstruct.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "cosmere:steel_block" + } + ], + "result": { + "count": 9, + "item": "cosmere:steel_ingot" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/steel_item_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/steel_item_deconstruct.json new file mode 100644 index 000000000..cefaf668d --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/steel_item_deconstruct.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "tag": "forge:ingots/steel" + } + ], + "result": { + "count": 9, + "item": "cosmere:steel_nugget" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/tin_block_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/tin_block_deconstruct.json new file mode 100644 index 000000000..91c3483c0 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/tin_block_deconstruct.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "cosmere:tin_block" + } + ], + "result": { + "count": 9, + "item": "cosmere:tin_ingot" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/tin_item_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/tin_item_deconstruct.json new file mode 100644 index 000000000..727086249 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/tin_item_deconstruct.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "tag": "forge:ingots/tin" + } + ], + "result": { + "count": 9, + "item": "cosmere:tin_nugget" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/zinc_block_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/zinc_block_deconstruct.json new file mode 100644 index 000000000..01fe20d29 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/zinc_block_deconstruct.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "cosmere:zinc_block" + } + ], + "result": { + "count": 9, + "item": "cosmere:zinc_ingot" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/zinc_item_deconstruct.json b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/zinc_item_deconstruct.json new file mode 100644 index 000000000..dfabc7435 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/conversions/zinc_item_deconstruct.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "tag": "forge:ingots/zinc" + } + ], + "result": { + "count": 9, + "item": "cosmere:zinc_nugget" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/crafting_god_metal_alloy_nugget_recipe.json b/src/datagen/generated/cosmere/data/cosmere/recipes/crafting_god_metal_alloy_nugget_recipe.json new file mode 100644 index 000000000..bca3885d8 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/crafting_god_metal_alloy_nugget_recipe.json @@ -0,0 +1,4 @@ +{ + "type": "cosmere:crafting_god_metal_alloy_nugget_recipe", + "category": "misc" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/crafting_god_metal_nuggets_compress.json b/src/datagen/generated/cosmere/data/cosmere/recipes/crafting_god_metal_nuggets_compress.json new file mode 100644 index 000000000..1117d0f09 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/crafting_god_metal_nuggets_compress.json @@ -0,0 +1,4 @@ +{ + "type": "cosmere:crafting_god_metal_nuggets_compress", + "category": "misc" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/crafting_god_metal_nuggets_decompress.json b/src/datagen/generated/cosmere/data/cosmere/recipes/crafting_god_metal_nuggets_decompress.json new file mode 100644 index 000000000..c70018e08 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/crafting_god_metal_nuggets_decompress.json @@ -0,0 +1,4 @@ +{ + "type": "cosmere:crafting_god_metal_nuggets_decompress", + "category": "misc" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/duralumin_block.json b/src/datagen/generated/cosmere/data/cosmere/recipes/duralumin_block.json new file mode 100644 index 000000000..e6eaf3727 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/duralumin_block.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "I": { + "tag": "forge:ingots/duralumin" + }, + "J": { + "item": "cosmere:duralumin_ingot" + } + }, + "pattern": [ + "III", + "IJI", + "III" + ], + "result": { + "item": "cosmere:duralumin_block" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/duralumin_ingot.json b/src/datagen/generated/cosmere/data/cosmere/recipes/duralumin_ingot.json new file mode 100644 index 000000000..841a0f3aa --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/duralumin_ingot.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "I": { + "tag": "forge:nuggets/duralumin" + }, + "J": { + "item": "cosmere:duralumin_nugget" + } + }, + "pattern": [ + "III", + "IJI", + "III" + ], + "result": { + "item": "cosmere:duralumin_ingot" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/duralumin_ingot_from_blasting_duralumin_blend.json b/src/datagen/generated/cosmere/data/cosmere/recipes/duralumin_ingot_from_blasting_duralumin_blend.json new file mode 100644 index 000000000..6266ff248 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/duralumin_ingot_from_blasting_duralumin_blend.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:blasting", + "category": "misc", + "cookingtime": 100, + "experience": 1.0, + "ingredient": { + "item": "cosmere:duralumin_blend" + }, + "result": "cosmere:duralumin_ingot" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/duralumin_ingot_from_smelting_duralumin_blend.json b/src/datagen/generated/cosmere/data/cosmere/recipes/duralumin_ingot_from_smelting_duralumin_blend.json new file mode 100644 index 000000000..46a526869 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/duralumin_ingot_from_smelting_duralumin_blend.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:smelting", + "category": "misc", + "cookingtime": 200, + "experience": 1.0, + "ingredient": { + "item": "cosmere:duralumin_blend" + }, + "result": "cosmere:duralumin_ingot" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/electrum_block.json b/src/datagen/generated/cosmere/data/cosmere/recipes/electrum_block.json new file mode 100644 index 000000000..826122706 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/electrum_block.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "I": { + "tag": "forge:ingots/electrum" + }, + "J": { + "item": "cosmere:electrum_ingot" + } + }, + "pattern": [ + "III", + "IJI", + "III" + ], + "result": { + "item": "cosmere:electrum_block" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/electrum_ingot.json b/src/datagen/generated/cosmere/data/cosmere/recipes/electrum_ingot.json new file mode 100644 index 000000000..ab0ebc30b --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/electrum_ingot.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "I": { + "tag": "forge:nuggets/electrum" + }, + "J": { + "item": "cosmere:electrum_nugget" + } + }, + "pattern": [ + "III", + "IJI", + "III" + ], + "result": { + "item": "cosmere:electrum_ingot" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/electrum_ingot_from_blasting_electrum_blend.json b/src/datagen/generated/cosmere/data/cosmere/recipes/electrum_ingot_from_blasting_electrum_blend.json new file mode 100644 index 000000000..8ec10b1d9 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/electrum_ingot_from_blasting_electrum_blend.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:blasting", + "category": "misc", + "cookingtime": 100, + "experience": 1.0, + "ingredient": { + "item": "cosmere:electrum_blend" + }, + "result": "cosmere:electrum_ingot" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/electrum_ingot_from_smelting_electrum_blend.json b/src/datagen/generated/cosmere/data/cosmere/recipes/electrum_ingot_from_smelting_electrum_blend.json new file mode 100644 index 000000000..781fb898d --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/electrum_ingot_from_smelting_electrum_blend.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:smelting", + "category": "misc", + "cookingtime": 200, + "experience": 1.0, + "ingredient": { + "item": "cosmere:electrum_blend" + }, + "result": "cosmere:electrum_ingot" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/harmonium_block.json b/src/datagen/generated/cosmere/data/cosmere/recipes/harmonium_block.json new file mode 100644 index 000000000..52e243ee3 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/harmonium_block.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "I": { + "tag": "forge:ingots/harmonium" + }, + "J": { + "item": "cosmere:harmonium_ingot" + } + }, + "pattern": [ + "III", + "IJI", + "III" + ], + "result": { + "item": "cosmere:harmonium_block" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/harmonium_ingot.json b/src/datagen/generated/cosmere/data/cosmere/recipes/harmonium_ingot.json new file mode 100644 index 000000000..0349082a5 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/harmonium_ingot.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "I": { + "type": "forge:partial_nbt", + "item": "cosmere:harmonium_nugget", + "nbt": "{nuggetSize:16}" + } + }, + "pattern": [ + "III", + "III", + "III" + ], + "result": { + "item": "cosmere:harmonium_ingot" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/lead_block.json b/src/datagen/generated/cosmere/data/cosmere/recipes/lead_block.json new file mode 100644 index 000000000..d47a31660 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/lead_block.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "I": { + "tag": "forge:ingots/lead" + }, + "J": { + "item": "cosmere:lead_ingot" + } + }, + "pattern": [ + "III", + "IJI", + "III" + ], + "result": { + "item": "cosmere:lead_block" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/lead_ingot.json b/src/datagen/generated/cosmere/data/cosmere/recipes/lead_ingot.json new file mode 100644 index 000000000..8372f897c --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/lead_ingot.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "I": { + "tag": "forge:nuggets/lead" + }, + "J": { + "item": "cosmere:lead_nugget" + } + }, + "pattern": [ + "III", + "IJI", + "III" + ], + "result": { + "item": "cosmere:lead_ingot" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/lead_ingot_from_blasting_deepslate_lead_ore.json b/src/datagen/generated/cosmere/data/cosmere/recipes/lead_ingot_from_blasting_deepslate_lead_ore.json new file mode 100644 index 000000000..3c3974316 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/lead_ingot_from_blasting_deepslate_lead_ore.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:blasting", + "category": "misc", + "cookingtime": 100, + "experience": 1.0, + "ingredient": { + "item": "cosmere:deepslate_lead_ore" + }, + "result": "cosmere:lead_ingot" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/lead_ingot_from_blasting_lead_ore.json b/src/datagen/generated/cosmere/data/cosmere/recipes/lead_ingot_from_blasting_lead_ore.json new file mode 100644 index 000000000..2949c38cf --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/lead_ingot_from_blasting_lead_ore.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:blasting", + "category": "misc", + "cookingtime": 100, + "experience": 1.0, + "ingredient": { + "item": "cosmere:lead_ore" + }, + "result": "cosmere:lead_ingot" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/lead_ingot_from_blasting_raw_lead_ore.json b/src/datagen/generated/cosmere/data/cosmere/recipes/lead_ingot_from_blasting_raw_lead_ore.json new file mode 100644 index 000000000..74d168a70 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/lead_ingot_from_blasting_raw_lead_ore.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:blasting", + "category": "misc", + "cookingtime": 100, + "experience": 1.0, + "ingredient": { + "item": "cosmere:raw_lead_ore" + }, + "result": "cosmere:lead_ingot" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/lead_ingot_from_smelting_deepslate_lead_ore.json b/src/datagen/generated/cosmere/data/cosmere/recipes/lead_ingot_from_smelting_deepslate_lead_ore.json new file mode 100644 index 000000000..5244ffc2a --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/lead_ingot_from_smelting_deepslate_lead_ore.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:smelting", + "category": "misc", + "cookingtime": 200, + "experience": 1.0, + "ingredient": { + "item": "cosmere:deepslate_lead_ore" + }, + "result": "cosmere:lead_ingot" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/lead_ingot_from_smelting_lead_ore.json b/src/datagen/generated/cosmere/data/cosmere/recipes/lead_ingot_from_smelting_lead_ore.json new file mode 100644 index 000000000..3688fe76b --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/lead_ingot_from_smelting_lead_ore.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:smelting", + "category": "misc", + "cookingtime": 200, + "experience": 1.0, + "ingredient": { + "item": "cosmere:lead_ore" + }, + "result": "cosmere:lead_ingot" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/lead_ingot_from_smelting_raw_lead_ore.json b/src/datagen/generated/cosmere/data/cosmere/recipes/lead_ingot_from_smelting_raw_lead_ore.json new file mode 100644 index 000000000..c6120b10b --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/lead_ingot_from_smelting_raw_lead_ore.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:smelting", + "category": "misc", + "cookingtime": 200, + "experience": 1.0, + "ingredient": { + "item": "cosmere:raw_lead_ore" + }, + "result": "cosmere:lead_ingot" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/lerasatium_block.json b/src/datagen/generated/cosmere/data/cosmere/recipes/lerasatium_block.json new file mode 100644 index 000000000..58a016a2a --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/lerasatium_block.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "I": { + "tag": "forge:ingots/lerasatium" + }, + "J": { + "item": "cosmere:lerasatium_ingot" + } + }, + "pattern": [ + "III", + "IJI", + "III" + ], + "result": { + "item": "cosmere:lerasatium_block" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/lerasatium_ingot.json b/src/datagen/generated/cosmere/data/cosmere/recipes/lerasatium_ingot.json new file mode 100644 index 000000000..c5aba8f9a --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/lerasatium_ingot.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "I": { + "type": "forge:partial_nbt", + "item": "cosmere:lerasatium_nugget", + "nbt": "{nuggetSize:16}" + } + }, + "pattern": [ + "III", + "III", + "III" + ], + "result": { + "item": "cosmere:lerasatium_ingot" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/lerasium_block.json b/src/datagen/generated/cosmere/data/cosmere/recipes/lerasium_block.json new file mode 100644 index 000000000..e5a77fc4b --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/lerasium_block.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "I": { + "tag": "forge:ingots/lerasium" + }, + "J": { + "item": "cosmere:lerasium_ingot" + } + }, + "pattern": [ + "III", + "IJI", + "III" + ], + "result": { + "item": "cosmere:lerasium_block" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/lerasium_ingot.json b/src/datagen/generated/cosmere/data/cosmere/recipes/lerasium_ingot.json new file mode 100644 index 000000000..7de1b6d41 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/lerasium_ingot.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "I": { + "type": "forge:partial_nbt", + "item": "cosmere:lerasium_nugget", + "nbt": "{nuggetSize:16}" + } + }, + "pattern": [ + "III", + "III", + "III" + ], + "result": { + "item": "cosmere:lerasium_ingot" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/malatium_block.json b/src/datagen/generated/cosmere/data/cosmere/recipes/malatium_block.json new file mode 100644 index 000000000..d2975dd93 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/malatium_block.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "I": { + "tag": "forge:ingots/malatium" + }, + "J": { + "item": "cosmere:malatium_ingot" + } + }, + "pattern": [ + "III", + "IJI", + "III" + ], + "result": { + "item": "cosmere:malatium_block" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/malatium_ingot.json b/src/datagen/generated/cosmere/data/cosmere/recipes/malatium_ingot.json new file mode 100644 index 000000000..c03dab030 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/malatium_ingot.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "I": { + "tag": "forge:nuggets/malatium" + }, + "J": { + "item": "cosmere:malatium_nugget" + } + }, + "pattern": [ + "III", + "IJI", + "III" + ], + "result": { + "item": "cosmere:malatium_ingot" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/metalworking_table.json b/src/datagen/generated/cosmere/data/cosmere/recipes/metalworking_table.json new file mode 100644 index 000000000..27bbd4019 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/metalworking_table.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "X": { + "item": "cosmere:steel_ingot" + }, + "Y": { + "tag": "minecraft:planks" + } + }, + "pattern": [ + "XX", + "YY", + "YY" + ], + "result": { + "item": "cosmere:metalworking_table" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/nickel_block.json b/src/datagen/generated/cosmere/data/cosmere/recipes/nickel_block.json new file mode 100644 index 000000000..00184ce76 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/nickel_block.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "I": { + "tag": "forge:ingots/nickel" + }, + "J": { + "item": "cosmere:nickel_ingot" + } + }, + "pattern": [ + "III", + "IJI", + "III" + ], + "result": { + "item": "cosmere:nickel_block" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/nickel_ingot.json b/src/datagen/generated/cosmere/data/cosmere/recipes/nickel_ingot.json new file mode 100644 index 000000000..24ad69896 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/nickel_ingot.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "I": { + "tag": "forge:nuggets/nickel" + }, + "J": { + "item": "cosmere:nickel_nugget" + } + }, + "pattern": [ + "III", + "IJI", + "III" + ], + "result": { + "item": "cosmere:nickel_ingot" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/nickel_ingot_from_blasting_deepslate_nickel_ore.json b/src/datagen/generated/cosmere/data/cosmere/recipes/nickel_ingot_from_blasting_deepslate_nickel_ore.json new file mode 100644 index 000000000..26ecd646b --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/nickel_ingot_from_blasting_deepslate_nickel_ore.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:blasting", + "category": "misc", + "cookingtime": 100, + "experience": 1.0, + "ingredient": { + "item": "cosmere:deepslate_nickel_ore" + }, + "result": "cosmere:nickel_ingot" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/nickel_ingot_from_blasting_nickel_ore.json b/src/datagen/generated/cosmere/data/cosmere/recipes/nickel_ingot_from_blasting_nickel_ore.json new file mode 100644 index 000000000..ed21bb907 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/nickel_ingot_from_blasting_nickel_ore.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:blasting", + "category": "misc", + "cookingtime": 100, + "experience": 1.0, + "ingredient": { + "item": "cosmere:nickel_ore" + }, + "result": "cosmere:nickel_ingot" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/nickel_ingot_from_blasting_raw_nickel_ore.json b/src/datagen/generated/cosmere/data/cosmere/recipes/nickel_ingot_from_blasting_raw_nickel_ore.json new file mode 100644 index 000000000..9fa85105d --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/nickel_ingot_from_blasting_raw_nickel_ore.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:blasting", + "category": "misc", + "cookingtime": 100, + "experience": 1.0, + "ingredient": { + "item": "cosmere:raw_nickel_ore" + }, + "result": "cosmere:nickel_ingot" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/nickel_ingot_from_smelting_deepslate_nickel_ore.json b/src/datagen/generated/cosmere/data/cosmere/recipes/nickel_ingot_from_smelting_deepslate_nickel_ore.json new file mode 100644 index 000000000..2c799f74d --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/nickel_ingot_from_smelting_deepslate_nickel_ore.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:smelting", + "category": "misc", + "cookingtime": 200, + "experience": 1.0, + "ingredient": { + "item": "cosmere:deepslate_nickel_ore" + }, + "result": "cosmere:nickel_ingot" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/nickel_ingot_from_smelting_nickel_ore.json b/src/datagen/generated/cosmere/data/cosmere/recipes/nickel_ingot_from_smelting_nickel_ore.json new file mode 100644 index 000000000..e9335cc91 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/nickel_ingot_from_smelting_nickel_ore.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:smelting", + "category": "misc", + "cookingtime": 200, + "experience": 1.0, + "ingredient": { + "item": "cosmere:nickel_ore" + }, + "result": "cosmere:nickel_ingot" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/nickel_ingot_from_smelting_raw_nickel_ore.json b/src/datagen/generated/cosmere/data/cosmere/recipes/nickel_ingot_from_smelting_raw_nickel_ore.json new file mode 100644 index 000000000..0cd038b59 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/nickel_ingot_from_smelting_raw_nickel_ore.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:smelting", + "category": "misc", + "cookingtime": 200, + "experience": 1.0, + "ingredient": { + "item": "cosmere:raw_nickel_ore" + }, + "result": "cosmere:nickel_ingot" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/nicrosil_block.json b/src/datagen/generated/cosmere/data/cosmere/recipes/nicrosil_block.json new file mode 100644 index 000000000..0a4c8ed17 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/nicrosil_block.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "I": { + "tag": "forge:ingots/nicrosil" + }, + "J": { + "item": "cosmere:nicrosil_ingot" + } + }, + "pattern": [ + "III", + "IJI", + "III" + ], + "result": { + "item": "cosmere:nicrosil_block" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/nicrosil_ingot.json b/src/datagen/generated/cosmere/data/cosmere/recipes/nicrosil_ingot.json new file mode 100644 index 000000000..7af7e2137 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/nicrosil_ingot.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "I": { + "tag": "forge:nuggets/nicrosil" + }, + "J": { + "item": "cosmere:nicrosil_nugget" + } + }, + "pattern": [ + "III", + "IJI", + "III" + ], + "result": { + "item": "cosmere:nicrosil_ingot" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/nicrosil_ingot_from_blasting_nicrosil_blend.json b/src/datagen/generated/cosmere/data/cosmere/recipes/nicrosil_ingot_from_blasting_nicrosil_blend.json new file mode 100644 index 000000000..0f314f1de --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/nicrosil_ingot_from_blasting_nicrosil_blend.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:blasting", + "category": "misc", + "cookingtime": 100, + "experience": 1.0, + "ingredient": { + "item": "cosmere:nicrosil_blend" + }, + "result": "cosmere:nicrosil_ingot" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/nicrosil_ingot_from_smelting_nicrosil_blend.json b/src/datagen/generated/cosmere/data/cosmere/recipes/nicrosil_ingot_from_smelting_nicrosil_blend.json new file mode 100644 index 000000000..dbbcc69a8 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/nicrosil_ingot_from_smelting_nicrosil_blend.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:smelting", + "category": "misc", + "cookingtime": 200, + "experience": 1.0, + "ingredient": { + "item": "cosmere:nicrosil_blend" + }, + "result": "cosmere:nicrosil_ingot" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/pewter_block.json b/src/datagen/generated/cosmere/data/cosmere/recipes/pewter_block.json new file mode 100644 index 000000000..521e7f292 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/pewter_block.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "I": { + "tag": "forge:ingots/pewter" + }, + "J": { + "item": "cosmere:pewter_ingot" + } + }, + "pattern": [ + "III", + "IJI", + "III" + ], + "result": { + "item": "cosmere:pewter_block" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/pewter_ingot.json b/src/datagen/generated/cosmere/data/cosmere/recipes/pewter_ingot.json new file mode 100644 index 000000000..4239e980c --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/pewter_ingot.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "I": { + "tag": "forge:nuggets/pewter" + }, + "J": { + "item": "cosmere:pewter_nugget" + } + }, + "pattern": [ + "III", + "IJI", + "III" + ], + "result": { + "item": "cosmere:pewter_ingot" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/pewter_ingot_from_blasting_pewter_blend.json b/src/datagen/generated/cosmere/data/cosmere/recipes/pewter_ingot_from_blasting_pewter_blend.json new file mode 100644 index 000000000..7ac71ac52 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/pewter_ingot_from_blasting_pewter_blend.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:blasting", + "category": "misc", + "cookingtime": 100, + "experience": 1.0, + "ingredient": { + "item": "cosmere:pewter_blend" + }, + "result": "cosmere:pewter_ingot" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/pewter_ingot_from_smelting_pewter_blend.json b/src/datagen/generated/cosmere/data/cosmere/recipes/pewter_ingot_from_smelting_pewter_blend.json new file mode 100644 index 000000000..e74b6e82c --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/pewter_ingot_from_smelting_pewter_blend.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:smelting", + "category": "misc", + "cookingtime": 200, + "experience": 1.0, + "ingredient": { + "item": "cosmere:pewter_blend" + }, + "result": "cosmere:pewter_ingot" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/silver_block.json b/src/datagen/generated/cosmere/data/cosmere/recipes/silver_block.json new file mode 100644 index 000000000..bf68aef78 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/silver_block.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "I": { + "tag": "forge:ingots/silver" + }, + "J": { + "item": "cosmere:silver_ingot" + } + }, + "pattern": [ + "III", + "IJI", + "III" + ], + "result": { + "item": "cosmere:silver_block" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/silver_ingot.json b/src/datagen/generated/cosmere/data/cosmere/recipes/silver_ingot.json new file mode 100644 index 000000000..eaefd7ef9 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/silver_ingot.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "I": { + "tag": "forge:nuggets/silver" + }, + "J": { + "item": "cosmere:silver_nugget" + } + }, + "pattern": [ + "III", + "IJI", + "III" + ], + "result": { + "item": "cosmere:silver_ingot" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/silver_ingot_from_blasting_deepslate_silver_ore.json b/src/datagen/generated/cosmere/data/cosmere/recipes/silver_ingot_from_blasting_deepslate_silver_ore.json new file mode 100644 index 000000000..60323e1d1 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/silver_ingot_from_blasting_deepslate_silver_ore.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:blasting", + "category": "misc", + "cookingtime": 100, + "experience": 1.0, + "ingredient": { + "item": "cosmere:deepslate_silver_ore" + }, + "result": "cosmere:silver_ingot" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/silver_ingot_from_blasting_raw_silver_ore.json b/src/datagen/generated/cosmere/data/cosmere/recipes/silver_ingot_from_blasting_raw_silver_ore.json new file mode 100644 index 000000000..c6caa8dd3 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/silver_ingot_from_blasting_raw_silver_ore.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:blasting", + "category": "misc", + "cookingtime": 100, + "experience": 1.0, + "ingredient": { + "item": "cosmere:raw_silver_ore" + }, + "result": "cosmere:silver_ingot" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/silver_ingot_from_blasting_silver_ore.json b/src/datagen/generated/cosmere/data/cosmere/recipes/silver_ingot_from_blasting_silver_ore.json new file mode 100644 index 000000000..461649aee --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/silver_ingot_from_blasting_silver_ore.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:blasting", + "category": "misc", + "cookingtime": 100, + "experience": 1.0, + "ingredient": { + "item": "cosmere:silver_ore" + }, + "result": "cosmere:silver_ingot" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/silver_ingot_from_smelting_deepslate_silver_ore.json b/src/datagen/generated/cosmere/data/cosmere/recipes/silver_ingot_from_smelting_deepslate_silver_ore.json new file mode 100644 index 000000000..28553b173 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/silver_ingot_from_smelting_deepslate_silver_ore.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:smelting", + "category": "misc", + "cookingtime": 200, + "experience": 1.0, + "ingredient": { + "item": "cosmere:deepslate_silver_ore" + }, + "result": "cosmere:silver_ingot" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/silver_ingot_from_smelting_raw_silver_ore.json b/src/datagen/generated/cosmere/data/cosmere/recipes/silver_ingot_from_smelting_raw_silver_ore.json new file mode 100644 index 000000000..8ae13492f --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/silver_ingot_from_smelting_raw_silver_ore.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:smelting", + "category": "misc", + "cookingtime": 200, + "experience": 1.0, + "ingredient": { + "item": "cosmere:raw_silver_ore" + }, + "result": "cosmere:silver_ingot" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/silver_ingot_from_smelting_silver_ore.json b/src/datagen/generated/cosmere/data/cosmere/recipes/silver_ingot_from_smelting_silver_ore.json new file mode 100644 index 000000000..65ab6843d --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/silver_ingot_from_smelting_silver_ore.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:smelting", + "category": "misc", + "cookingtime": 200, + "experience": 1.0, + "ingredient": { + "item": "cosmere:silver_ore" + }, + "result": "cosmere:silver_ingot" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/steel_block.json b/src/datagen/generated/cosmere/data/cosmere/recipes/steel_block.json new file mode 100644 index 000000000..790efe2f6 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/steel_block.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "I": { + "tag": "forge:ingots/steel" + }, + "J": { + "item": "cosmere:steel_ingot" + } + }, + "pattern": [ + "III", + "IJI", + "III" + ], + "result": { + "item": "cosmere:steel_block" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/steel_ingot.json b/src/datagen/generated/cosmere/data/cosmere/recipes/steel_ingot.json new file mode 100644 index 000000000..dfc931148 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/steel_ingot.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "I": { + "tag": "forge:nuggets/steel" + }, + "J": { + "item": "cosmere:steel_nugget" + } + }, + "pattern": [ + "III", + "IJI", + "III" + ], + "result": { + "item": "cosmere:steel_ingot" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/steel_ingot_from_blasting_steel_blend.json b/src/datagen/generated/cosmere/data/cosmere/recipes/steel_ingot_from_blasting_steel_blend.json new file mode 100644 index 000000000..12b01f238 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/steel_ingot_from_blasting_steel_blend.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:blasting", + "category": "misc", + "cookingtime": 100, + "experience": 1.0, + "ingredient": { + "item": "cosmere:steel_blend" + }, + "result": "cosmere:steel_ingot" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/steel_ingot_from_smelting_steel_blend.json b/src/datagen/generated/cosmere/data/cosmere/recipes/steel_ingot_from_smelting_steel_blend.json new file mode 100644 index 000000000..ac708fd09 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/steel_ingot_from_smelting_steel_blend.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:smelting", + "category": "misc", + "cookingtime": 200, + "experience": 1.0, + "ingredient": { + "item": "cosmere:steel_blend" + }, + "result": "cosmere:steel_ingot" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/tin_block.json b/src/datagen/generated/cosmere/data/cosmere/recipes/tin_block.json new file mode 100644 index 000000000..a26862df4 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/tin_block.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "I": { + "tag": "forge:ingots/tin" + }, + "J": { + "item": "cosmere:tin_ingot" + } + }, + "pattern": [ + "III", + "IJI", + "III" + ], + "result": { + "item": "cosmere:tin_block" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/tin_ingot.json b/src/datagen/generated/cosmere/data/cosmere/recipes/tin_ingot.json new file mode 100644 index 000000000..6cf790ef6 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/tin_ingot.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "I": { + "tag": "forge:nuggets/tin" + }, + "J": { + "item": "cosmere:tin_nugget" + } + }, + "pattern": [ + "III", + "IJI", + "III" + ], + "result": { + "item": "cosmere:tin_ingot" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/tin_ingot_from_blasting_deepslate_tin_ore.json b/src/datagen/generated/cosmere/data/cosmere/recipes/tin_ingot_from_blasting_deepslate_tin_ore.json new file mode 100644 index 000000000..1a1cf0465 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/tin_ingot_from_blasting_deepslate_tin_ore.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:blasting", + "category": "misc", + "cookingtime": 100, + "experience": 1.0, + "ingredient": { + "item": "cosmere:deepslate_tin_ore" + }, + "result": "cosmere:tin_ingot" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/tin_ingot_from_blasting_raw_tin_ore.json b/src/datagen/generated/cosmere/data/cosmere/recipes/tin_ingot_from_blasting_raw_tin_ore.json new file mode 100644 index 000000000..7a1444bec --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/tin_ingot_from_blasting_raw_tin_ore.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:blasting", + "category": "misc", + "cookingtime": 100, + "experience": 1.0, + "ingredient": { + "item": "cosmere:raw_tin_ore" + }, + "result": "cosmere:tin_ingot" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/tin_ingot_from_blasting_tin_ore.json b/src/datagen/generated/cosmere/data/cosmere/recipes/tin_ingot_from_blasting_tin_ore.json new file mode 100644 index 000000000..e49f19880 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/tin_ingot_from_blasting_tin_ore.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:blasting", + "category": "misc", + "cookingtime": 100, + "experience": 1.0, + "ingredient": { + "item": "cosmere:tin_ore" + }, + "result": "cosmere:tin_ingot" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/tin_ingot_from_smelting_deepslate_tin_ore.json b/src/datagen/generated/cosmere/data/cosmere/recipes/tin_ingot_from_smelting_deepslate_tin_ore.json new file mode 100644 index 000000000..6eb3005de --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/tin_ingot_from_smelting_deepslate_tin_ore.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:smelting", + "category": "misc", + "cookingtime": 200, + "experience": 1.0, + "ingredient": { + "item": "cosmere:deepslate_tin_ore" + }, + "result": "cosmere:tin_ingot" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/tin_ingot_from_smelting_raw_tin_ore.json b/src/datagen/generated/cosmere/data/cosmere/recipes/tin_ingot_from_smelting_raw_tin_ore.json new file mode 100644 index 000000000..101ee244c --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/tin_ingot_from_smelting_raw_tin_ore.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:smelting", + "category": "misc", + "cookingtime": 200, + "experience": 1.0, + "ingredient": { + "item": "cosmere:raw_tin_ore" + }, + "result": "cosmere:tin_ingot" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/tin_ingot_from_smelting_tin_ore.json b/src/datagen/generated/cosmere/data/cosmere/recipes/tin_ingot_from_smelting_tin_ore.json new file mode 100644 index 000000000..bb52ec629 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/tin_ingot_from_smelting_tin_ore.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:smelting", + "category": "misc", + "cookingtime": 200, + "experience": 1.0, + "ingredient": { + "item": "cosmere:tin_ore" + }, + "result": "cosmere:tin_ingot" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/zinc_block.json b/src/datagen/generated/cosmere/data/cosmere/recipes/zinc_block.json new file mode 100644 index 000000000..fddd05bc5 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/zinc_block.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "I": { + "tag": "forge:ingots/zinc" + }, + "J": { + "item": "cosmere:zinc_ingot" + } + }, + "pattern": [ + "III", + "IJI", + "III" + ], + "result": { + "item": "cosmere:zinc_block" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/zinc_ingot.json b/src/datagen/generated/cosmere/data/cosmere/recipes/zinc_ingot.json new file mode 100644 index 000000000..a0ee414b2 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/zinc_ingot.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "I": { + "tag": "forge:nuggets/zinc" + }, + "J": { + "item": "cosmere:zinc_nugget" + } + }, + "pattern": [ + "III", + "IJI", + "III" + ], + "result": { + "item": "cosmere:zinc_ingot" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/zinc_ingot_from_blasting_deepslate_zinc_ore.json b/src/datagen/generated/cosmere/data/cosmere/recipes/zinc_ingot_from_blasting_deepslate_zinc_ore.json new file mode 100644 index 000000000..4a92ee70f --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/zinc_ingot_from_blasting_deepslate_zinc_ore.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:blasting", + "category": "misc", + "cookingtime": 100, + "experience": 1.0, + "ingredient": { + "item": "cosmere:deepslate_zinc_ore" + }, + "result": "cosmere:zinc_ingot" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/zinc_ingot_from_blasting_raw_zinc_ore.json b/src/datagen/generated/cosmere/data/cosmere/recipes/zinc_ingot_from_blasting_raw_zinc_ore.json new file mode 100644 index 000000000..58ae4bdbf --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/zinc_ingot_from_blasting_raw_zinc_ore.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:blasting", + "category": "misc", + "cookingtime": 100, + "experience": 1.0, + "ingredient": { + "item": "cosmere:raw_zinc_ore" + }, + "result": "cosmere:zinc_ingot" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/zinc_ingot_from_blasting_zinc_ore.json b/src/datagen/generated/cosmere/data/cosmere/recipes/zinc_ingot_from_blasting_zinc_ore.json new file mode 100644 index 000000000..9ec4ac744 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/zinc_ingot_from_blasting_zinc_ore.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:blasting", + "category": "misc", + "cookingtime": 100, + "experience": 1.0, + "ingredient": { + "item": "cosmere:zinc_ore" + }, + "result": "cosmere:zinc_ingot" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/zinc_ingot_from_smelting_deepslate_zinc_ore.json b/src/datagen/generated/cosmere/data/cosmere/recipes/zinc_ingot_from_smelting_deepslate_zinc_ore.json new file mode 100644 index 000000000..1aa8d7159 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/zinc_ingot_from_smelting_deepslate_zinc_ore.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:smelting", + "category": "misc", + "cookingtime": 200, + "experience": 1.0, + "ingredient": { + "item": "cosmere:deepslate_zinc_ore" + }, + "result": "cosmere:zinc_ingot" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/zinc_ingot_from_smelting_raw_zinc_ore.json b/src/datagen/generated/cosmere/data/cosmere/recipes/zinc_ingot_from_smelting_raw_zinc_ore.json new file mode 100644 index 000000000..4dd1ca922 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/zinc_ingot_from_smelting_raw_zinc_ore.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:smelting", + "category": "misc", + "cookingtime": 200, + "experience": 1.0, + "ingredient": { + "item": "cosmere:raw_zinc_ore" + }, + "result": "cosmere:zinc_ingot" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/recipes/zinc_ingot_from_smelting_zinc_ore.json b/src/datagen/generated/cosmere/data/cosmere/recipes/zinc_ingot_from_smelting_zinc_ore.json new file mode 100644 index 000000000..277e80697 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/recipes/zinc_ingot_from_smelting_zinc_ore.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:smelting", + "category": "misc", + "cookingtime": 200, + "experience": 1.0, + "ingredient": { + "item": "cosmere:zinc_ore" + }, + "result": "cosmere:zinc_ingot" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/tags/blocks/contains_metal.json b/src/datagen/generated/cosmere/data/cosmere/tags/blocks/contains_metal.json new file mode 100644 index 000000000..fd5bac057 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/tags/blocks/contains_metal.json @@ -0,0 +1,65 @@ +{ + "values": [ + "#forge:ores/iron", + "#forge:storage_blocks/iron", + "#forge:storage_blocks/steel", + "#forge:ores/tin", + "#forge:storage_blocks/tin", + "#forge:storage_blocks/pewter", + "#forge:ores/zinc", + "#forge:storage_blocks/zinc", + "#forge:storage_blocks/brass", + "#forge:ores/copper", + "#forge:storage_blocks/copper", + "#forge:storage_blocks/bronze", + "#forge:storage_blocks/duralumin", + "#forge:ores/chromium", + "#forge:storage_blocks/chromium", + "#forge:storage_blocks/nicrosil", + "#forge:ores/cadmium", + "#forge:storage_blocks/cadmium", + "#forge:storage_blocks/bendalloy", + "#forge:ores/gold", + "#forge:storage_blocks/gold", + "#forge:storage_blocks/electrum", + "#forge:storage_blocks/atium", + "#forge:storage_blocks/lerasium", + "#forge:storage_blocks/harmonium", + "#forge:storage_blocks/malatium", + "#forge:storage_blocks/lerasatium", + "#forge:ores/nickel", + "#forge:storage_blocks/nickel", + "#forge:ores/lead", + "#forge:storage_blocks/lead", + "#forge:ores/silver", + "#forge:storage_blocks/silver", + "minecraft:exposed_copper", + "minecraft:exposed_cut_copper", + "minecraft:exposed_cut_copper_slab", + "minecraft:exposed_cut_copper_stairs", + "minecraft:waxed_exposed_copper", + "minecraft:waxed_exposed_cut_copper", + "minecraft:waxed_exposed_cut_copper_slab", + "minecraft:waxed_exposed_cut_copper_stairs", + "minecraft:weathered_copper", + "minecraft:weathered_cut_copper", + "minecraft:weathered_cut_copper_slab", + "minecraft:weathered_cut_copper_stairs", + "minecraft:waxed_weathered_copper", + "minecraft:waxed_weathered_cut_copper", + "minecraft:waxed_weathered_cut_copper_slab", + "minecraft:waxed_weathered_cut_copper_stairs", + "minecraft:oxidized_copper", + "minecraft:oxidized_cut_copper", + "minecraft:oxidized_cut_copper_slab", + "minecraft:oxidized_cut_copper_stairs", + "minecraft:waxed_oxidized_copper", + "minecraft:waxed_oxidized_cut_copper", + "minecraft:waxed_oxidized_cut_copper_slab", + "minecraft:waxed_oxidized_cut_copper_stairs", + "minecraft:waxed_copper_block", + "minecraft:waxed_cut_copper", + "minecraft:waxed_cut_copper_slab", + "minecraft:waxed_cut_copper_stairs" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/tags/entity_types/contains_metal.json b/src/datagen/generated/cosmere/data/cosmere/tags/entity_types/contains_metal.json new file mode 100644 index 000000000..5029c4b97 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/tags/entity_types/contains_metal.json @@ -0,0 +1,10 @@ +{ + "values": [ + "minecraft:iron_golem", + "minecraft:minecart", + "minecraft:chest_minecart", + "minecraft:furnace_minecart", + "minecraft:hopper_minecart", + "minecraft:tnt_minecart" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/tags/items/contains_metal.json b/src/datagen/generated/cosmere/data/cosmere/tags/items/contains_metal.json new file mode 100644 index 000000000..7a6a3685d --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/tags/items/contains_metal.json @@ -0,0 +1,123 @@ +{ + "values": [ + { + "id": "#cosmere:spike", + "required": false + }, + "#forge:raw_materials/iron", + "#forge:nuggets/iron", + "#forge:ingots/iron", + "#forge:storage_blocks/iron", + "#forge:dusts/steel", + "#forge:nuggets/steel", + "#forge:ingots/steel", + "#forge:storage_blocks/steel", + "#forge:raw_materials/tin", + "#forge:nuggets/tin", + "#forge:ingots/tin", + "#forge:storage_blocks/tin", + "#forge:dusts/pewter", + "#forge:nuggets/pewter", + "#forge:ingots/pewter", + "#forge:storage_blocks/pewter", + "#forge:raw_materials/zinc", + "#forge:nuggets/zinc", + "#forge:ingots/zinc", + "#forge:storage_blocks/zinc", + "#forge:dusts/brass", + "#forge:nuggets/brass", + "#forge:ingots/brass", + "#forge:storage_blocks/brass", + "#forge:raw_materials/copper", + "#forge:nuggets/copper", + "#forge:ingots/copper", + "#forge:storage_blocks/copper", + "#forge:dusts/bronze", + "#forge:nuggets/bronze", + "#forge:ingots/bronze", + "#forge:storage_blocks/bronze", + "#forge:dusts/duralumin", + "#forge:nuggets/duralumin", + "#forge:ingots/duralumin", + "#forge:storage_blocks/duralumin", + "#forge:raw_materials/chromium", + "#forge:nuggets/chromium", + "#forge:ingots/chromium", + "#forge:storage_blocks/chromium", + "#forge:dusts/nicrosil", + "#forge:nuggets/nicrosil", + "#forge:ingots/nicrosil", + "#forge:storage_blocks/nicrosil", + "#forge:raw_materials/cadmium", + "#forge:nuggets/cadmium", + "#forge:ingots/cadmium", + "#forge:storage_blocks/cadmium", + "#forge:dusts/bendalloy", + "#forge:nuggets/bendalloy", + "#forge:ingots/bendalloy", + "#forge:storage_blocks/bendalloy", + "#forge:raw_materials/gold", + "#forge:nuggets/gold", + "#forge:ingots/gold", + "#forge:storage_blocks/gold", + "#forge:dusts/electrum", + "#forge:nuggets/electrum", + "#forge:ingots/electrum", + "#forge:storage_blocks/electrum", + "#forge:nuggets/atium", + "#forge:ingots/atium", + "#forge:storage_blocks/atium", + "#forge:nuggets/lerasium", + "#forge:ingots/lerasium", + "#forge:storage_blocks/lerasium", + "#forge:nuggets/harmonium", + "#forge:ingots/harmonium", + "#forge:storage_blocks/harmonium", + "#forge:nuggets/malatium", + "#forge:ingots/malatium", + "#forge:storage_blocks/malatium", + "#forge:nuggets/lerasatium", + "#forge:ingots/lerasatium", + "#forge:storage_blocks/lerasatium", + "#forge:raw_materials/nickel", + "#forge:nuggets/nickel", + "#forge:ingots/nickel", + "#forge:storage_blocks/nickel", + "#forge:raw_materials/lead", + "#forge:nuggets/lead", + "#forge:ingots/lead", + "#forge:storage_blocks/lead", + "#forge:raw_materials/silver", + "#forge:nuggets/silver", + "#forge:ingots/silver", + "#forge:storage_blocks/silver", + "minecraft:exposed_copper", + "minecraft:exposed_cut_copper", + "minecraft:exposed_cut_copper_slab", + "minecraft:exposed_cut_copper_stairs", + "minecraft:waxed_exposed_copper", + "minecraft:waxed_exposed_cut_copper", + "minecraft:waxed_exposed_cut_copper_slab", + "minecraft:waxed_exposed_cut_copper_stairs", + "minecraft:weathered_copper", + "minecraft:weathered_cut_copper", + "minecraft:weathered_cut_copper_slab", + "minecraft:weathered_cut_copper_stairs", + "minecraft:waxed_weathered_copper", + "minecraft:waxed_weathered_cut_copper", + "minecraft:waxed_weathered_cut_copper_slab", + "minecraft:waxed_weathered_cut_copper_stairs", + "minecraft:oxidized_copper", + "minecraft:oxidized_cut_copper", + "minecraft:oxidized_cut_copper_slab", + "minecraft:oxidized_cut_copper_stairs", + "minecraft:waxed_oxidized_copper", + "minecraft:waxed_oxidized_cut_copper", + "minecraft:waxed_oxidized_cut_copper_slab", + "minecraft:waxed_oxidized_cut_copper_stairs", + "minecraft:waxed_copper_block", + "minecraft:waxed_cut_copper", + "minecraft:waxed_cut_copper_slab", + "minecraft:waxed_cut_copper_stairs" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/tags/worldgen/biome/is_shadesmar.json b/src/datagen/generated/cosmere/data/cosmere/tags/worldgen/biome/is_shadesmar.json new file mode 100644 index 000000000..0f14766e1 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/tags/worldgen/biome/is_shadesmar.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:shadesmar_biome" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/tags/worldgen/biome/spawn_ores.json b/src/datagen/generated/cosmere/data/cosmere/tags/worldgen/biome/spawn_ores.json new file mode 100644 index 000000000..d3152c5b0 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/tags/worldgen/biome/spawn_ores.json @@ -0,0 +1,5 @@ +{ + "values": [ + "#minecraft:is_overworld" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/worldgen/configured_feature/ore_aluminum_buried.json b/src/datagen/generated/cosmere/data/cosmere/worldgen/configured_feature/ore_aluminum_buried.json new file mode 100644 index 000000000..405f1fb1b --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/worldgen/configured_feature/ore_aluminum_buried.json @@ -0,0 +1,29 @@ +{ + "type": "cosmere:ore", + "config": { + "oreVeinType": { + "type": "aluminum", + "index": 2 + }, + "targets": [ + { + "state": { + "Name": "cosmere:aluminum_ore" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:stone_ore_replaceables" + } + }, + { + "state": { + "Name": "cosmere:deepslate_aluminum_ore" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:deepslate_ore_replaceables" + } + } + ] + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/worldgen/configured_feature/ore_aluminum_medium.json b/src/datagen/generated/cosmere/data/cosmere/worldgen/configured_feature/ore_aluminum_medium.json new file mode 100644 index 000000000..17c605cae --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/worldgen/configured_feature/ore_aluminum_medium.json @@ -0,0 +1,29 @@ +{ + "type": "cosmere:ore", + "config": { + "oreVeinType": { + "type": "aluminum", + "index": 1 + }, + "targets": [ + { + "state": { + "Name": "cosmere:aluminum_ore" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:stone_ore_replaceables" + } + }, + { + "state": { + "Name": "cosmere:deepslate_aluminum_ore" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:deepslate_ore_replaceables" + } + } + ] + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/worldgen/configured_feature/ore_aluminum_small.json b/src/datagen/generated/cosmere/data/cosmere/worldgen/configured_feature/ore_aluminum_small.json new file mode 100644 index 000000000..99eb66508 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/worldgen/configured_feature/ore_aluminum_small.json @@ -0,0 +1,29 @@ +{ + "type": "cosmere:ore", + "config": { + "oreVeinType": { + "type": "aluminum", + "index": 0 + }, + "targets": [ + { + "state": { + "Name": "cosmere:aluminum_ore" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:stone_ore_replaceables" + } + }, + { + "state": { + "Name": "cosmere:deepslate_aluminum_ore" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:deepslate_ore_replaceables" + } + } + ] + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/worldgen/configured_feature/ore_cadmium_abundant.json b/src/datagen/generated/cosmere/data/cosmere/worldgen/configured_feature/ore_cadmium_abundant.json new file mode 100644 index 000000000..815b81066 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/worldgen/configured_feature/ore_cadmium_abundant.json @@ -0,0 +1,29 @@ +{ + "type": "cosmere:ore", + "config": { + "oreVeinType": { + "type": "cadmium", + "index": 1 + }, + "targets": [ + { + "state": { + "Name": "cosmere:cadmium_ore" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:stone_ore_replaceables" + } + }, + { + "state": { + "Name": "cosmere:deepslate_cadmium_ore" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:deepslate_ore_replaceables" + } + } + ] + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/worldgen/configured_feature/ore_cadmium_deep.json b/src/datagen/generated/cosmere/data/cosmere/worldgen/configured_feature/ore_cadmium_deep.json new file mode 100644 index 000000000..608d370ea --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/worldgen/configured_feature/ore_cadmium_deep.json @@ -0,0 +1,29 @@ +{ + "type": "cosmere:ore", + "config": { + "oreVeinType": { + "type": "cadmium", + "index": 2 + }, + "targets": [ + { + "state": { + "Name": "cosmere:cadmium_ore" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:stone_ore_replaceables" + } + }, + { + "state": { + "Name": "cosmere:deepslate_cadmium_ore" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:deepslate_ore_replaceables" + } + } + ] + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/worldgen/configured_feature/ore_cadmium_normal.json b/src/datagen/generated/cosmere/data/cosmere/worldgen/configured_feature/ore_cadmium_normal.json new file mode 100644 index 000000000..85ee817a9 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/worldgen/configured_feature/ore_cadmium_normal.json @@ -0,0 +1,29 @@ +{ + "type": "cosmere:ore", + "config": { + "oreVeinType": { + "type": "cadmium", + "index": 0 + }, + "targets": [ + { + "state": { + "Name": "cosmere:cadmium_ore" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:stone_ore_replaceables" + } + }, + { + "state": { + "Name": "cosmere:deepslate_cadmium_ore" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:deepslate_ore_replaceables" + } + } + ] + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/worldgen/configured_feature/ore_chromium_deep.json b/src/datagen/generated/cosmere/data/cosmere/worldgen/configured_feature/ore_chromium_deep.json new file mode 100644 index 000000000..a143eea8a --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/worldgen/configured_feature/ore_chromium_deep.json @@ -0,0 +1,29 @@ +{ + "type": "cosmere:ore", + "config": { + "oreVeinType": { + "type": "chromium", + "index": 2 + }, + "targets": [ + { + "state": { + "Name": "cosmere:chromium_ore" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:stone_ore_replaceables" + } + }, + { + "state": { + "Name": "cosmere:deepslate_chromium_ore" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:deepslate_ore_replaceables" + } + } + ] + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/worldgen/configured_feature/ore_chromium_normal.json b/src/datagen/generated/cosmere/data/cosmere/worldgen/configured_feature/ore_chromium_normal.json new file mode 100644 index 000000000..b7d394a9a --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/worldgen/configured_feature/ore_chromium_normal.json @@ -0,0 +1,29 @@ +{ + "type": "cosmere:ore", + "config": { + "oreVeinType": { + "type": "chromium", + "index": 1 + }, + "targets": [ + { + "state": { + "Name": "cosmere:chromium_ore" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:stone_ore_replaceables" + } + }, + { + "state": { + "Name": "cosmere:deepslate_chromium_ore" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:deepslate_ore_replaceables" + } + } + ] + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/worldgen/configured_feature/ore_chromium_rare.json b/src/datagen/generated/cosmere/data/cosmere/worldgen/configured_feature/ore_chromium_rare.json new file mode 100644 index 000000000..1b465370c --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/worldgen/configured_feature/ore_chromium_rare.json @@ -0,0 +1,29 @@ +{ + "type": "cosmere:ore", + "config": { + "oreVeinType": { + "type": "chromium", + "index": 0 + }, + "targets": [ + { + "state": { + "Name": "cosmere:chromium_ore" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:stone_ore_replaceables" + } + }, + { + "state": { + "Name": "cosmere:deepslate_chromium_ore" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:deepslate_ore_replaceables" + } + } + ] + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/worldgen/configured_feature/ore_lead_abundant.json b/src/datagen/generated/cosmere/data/cosmere/worldgen/configured_feature/ore_lead_abundant.json new file mode 100644 index 000000000..19696504c --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/worldgen/configured_feature/ore_lead_abundant.json @@ -0,0 +1,29 @@ +{ + "type": "cosmere:ore", + "config": { + "oreVeinType": { + "type": "lead", + "index": 1 + }, + "targets": [ + { + "state": { + "Name": "cosmere:lead_ore" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:stone_ore_replaceables" + } + }, + { + "state": { + "Name": "cosmere:deepslate_lead_ore" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:deepslate_ore_replaceables" + } + } + ] + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/worldgen/configured_feature/ore_lead_deep.json b/src/datagen/generated/cosmere/data/cosmere/worldgen/configured_feature/ore_lead_deep.json new file mode 100644 index 000000000..cf390f207 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/worldgen/configured_feature/ore_lead_deep.json @@ -0,0 +1,29 @@ +{ + "type": "cosmere:ore", + "config": { + "oreVeinType": { + "type": "lead", + "index": 2 + }, + "targets": [ + { + "state": { + "Name": "cosmere:lead_ore" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:stone_ore_replaceables" + } + }, + { + "state": { + "Name": "cosmere:deepslate_lead_ore" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:deepslate_ore_replaceables" + } + } + ] + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/worldgen/configured_feature/ore_lead_normal.json b/src/datagen/generated/cosmere/data/cosmere/worldgen/configured_feature/ore_lead_normal.json new file mode 100644 index 000000000..7a7138e52 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/worldgen/configured_feature/ore_lead_normal.json @@ -0,0 +1,29 @@ +{ + "type": "cosmere:ore", + "config": { + "oreVeinType": { + "type": "lead", + "index": 0 + }, + "targets": [ + { + "state": { + "Name": "cosmere:lead_ore" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:stone_ore_replaceables" + } + }, + { + "state": { + "Name": "cosmere:deepslate_lead_ore" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:deepslate_ore_replaceables" + } + } + ] + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/worldgen/configured_feature/ore_nickel_middle.json b/src/datagen/generated/cosmere/data/cosmere/worldgen/configured_feature/ore_nickel_middle.json new file mode 100644 index 000000000..999ce3fad --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/worldgen/configured_feature/ore_nickel_middle.json @@ -0,0 +1,29 @@ +{ + "type": "cosmere:ore", + "config": { + "oreVeinType": { + "type": "nickel", + "index": 1 + }, + "targets": [ + { + "state": { + "Name": "cosmere:nickel_ore" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:stone_ore_replaceables" + } + }, + { + "state": { + "Name": "cosmere:deepslate_nickel_ore" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:deepslate_ore_replaceables" + } + } + ] + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/worldgen/configured_feature/ore_nickel_small.json b/src/datagen/generated/cosmere/data/cosmere/worldgen/configured_feature/ore_nickel_small.json new file mode 100644 index 000000000..04b7ff2a9 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/worldgen/configured_feature/ore_nickel_small.json @@ -0,0 +1,29 @@ +{ + "type": "cosmere:ore", + "config": { + "oreVeinType": { + "type": "nickel", + "index": 2 + }, + "targets": [ + { + "state": { + "Name": "cosmere:nickel_ore" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:stone_ore_replaceables" + } + }, + { + "state": { + "Name": "cosmere:deepslate_nickel_ore" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:deepslate_ore_replaceables" + } + } + ] + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/worldgen/configured_feature/ore_nickel_upper.json b/src/datagen/generated/cosmere/data/cosmere/worldgen/configured_feature/ore_nickel_upper.json new file mode 100644 index 000000000..d7274e63f --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/worldgen/configured_feature/ore_nickel_upper.json @@ -0,0 +1,29 @@ +{ + "type": "cosmere:ore", + "config": { + "oreVeinType": { + "type": "nickel", + "index": 0 + }, + "targets": [ + { + "state": { + "Name": "cosmere:nickel_ore" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:stone_ore_replaceables" + } + }, + { + "state": { + "Name": "cosmere:deepslate_nickel_ore" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:deepslate_ore_replaceables" + } + } + ] + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/worldgen/configured_feature/ore_silver_abundant.json b/src/datagen/generated/cosmere/data/cosmere/worldgen/configured_feature/ore_silver_abundant.json new file mode 100644 index 000000000..648cc5b9e --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/worldgen/configured_feature/ore_silver_abundant.json @@ -0,0 +1,29 @@ +{ + "type": "cosmere:ore", + "config": { + "oreVeinType": { + "type": "silver", + "index": 1 + }, + "targets": [ + { + "state": { + "Name": "cosmere:silver_ore" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:stone_ore_replaceables" + } + }, + { + "state": { + "Name": "cosmere:deepslate_silver_ore" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:deepslate_ore_replaceables" + } + } + ] + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/worldgen/configured_feature/ore_silver_normal.json b/src/datagen/generated/cosmere/data/cosmere/worldgen/configured_feature/ore_silver_normal.json new file mode 100644 index 000000000..615ab584d --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/worldgen/configured_feature/ore_silver_normal.json @@ -0,0 +1,29 @@ +{ + "type": "cosmere:ore", + "config": { + "oreVeinType": { + "type": "silver", + "index": 0 + }, + "targets": [ + { + "state": { + "Name": "cosmere:silver_ore" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:stone_ore_replaceables" + } + }, + { + "state": { + "Name": "cosmere:deepslate_silver_ore" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:deepslate_ore_replaceables" + } + } + ] + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/worldgen/configured_feature/ore_silver_rich.json b/src/datagen/generated/cosmere/data/cosmere/worldgen/configured_feature/ore_silver_rich.json new file mode 100644 index 000000000..adaa9a943 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/worldgen/configured_feature/ore_silver_rich.json @@ -0,0 +1,29 @@ +{ + "type": "cosmere:ore", + "config": { + "oreVeinType": { + "type": "silver", + "index": 2 + }, + "targets": [ + { + "state": { + "Name": "cosmere:silver_ore" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:stone_ore_replaceables" + } + }, + { + "state": { + "Name": "cosmere:deepslate_silver_ore" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:deepslate_ore_replaceables" + } + } + ] + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/worldgen/configured_feature/ore_tin_abundant.json b/src/datagen/generated/cosmere/data/cosmere/worldgen/configured_feature/ore_tin_abundant.json new file mode 100644 index 000000000..3013b6f69 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/worldgen/configured_feature/ore_tin_abundant.json @@ -0,0 +1,29 @@ +{ + "type": "cosmere:ore", + "config": { + "oreVeinType": { + "type": "tin", + "index": 2 + }, + "targets": [ + { + "state": { + "Name": "cosmere:tin_ore" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:stone_ore_replaceables" + } + }, + { + "state": { + "Name": "cosmere:deepslate_tin_ore" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:deepslate_ore_replaceables" + } + } + ] + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/worldgen/configured_feature/ore_tin_medium.json b/src/datagen/generated/cosmere/data/cosmere/worldgen/configured_feature/ore_tin_medium.json new file mode 100644 index 000000000..dedcadf8a --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/worldgen/configured_feature/ore_tin_medium.json @@ -0,0 +1,29 @@ +{ + "type": "cosmere:ore", + "config": { + "oreVeinType": { + "type": "tin", + "index": 1 + }, + "targets": [ + { + "state": { + "Name": "cosmere:tin_ore" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:stone_ore_replaceables" + } + }, + { + "state": { + "Name": "cosmere:deepslate_tin_ore" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:deepslate_ore_replaceables" + } + } + ] + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/worldgen/configured_feature/ore_tin_small.json b/src/datagen/generated/cosmere/data/cosmere/worldgen/configured_feature/ore_tin_small.json new file mode 100644 index 000000000..0aad8d6e6 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/worldgen/configured_feature/ore_tin_small.json @@ -0,0 +1,29 @@ +{ + "type": "cosmere:ore", + "config": { + "oreVeinType": { + "type": "tin", + "index": 0 + }, + "targets": [ + { + "state": { + "Name": "cosmere:tin_ore" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:stone_ore_replaceables" + } + }, + { + "state": { + "Name": "cosmere:deepslate_tin_ore" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:deepslate_ore_replaceables" + } + } + ] + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/worldgen/configured_feature/ore_zinc_deep.json b/src/datagen/generated/cosmere/data/cosmere/worldgen/configured_feature/ore_zinc_deep.json new file mode 100644 index 000000000..fbcc03886 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/worldgen/configured_feature/ore_zinc_deep.json @@ -0,0 +1,29 @@ +{ + "type": "cosmere:ore", + "config": { + "oreVeinType": { + "type": "zinc", + "index": 2 + }, + "targets": [ + { + "state": { + "Name": "cosmere:zinc_ore" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:stone_ore_replaceables" + } + }, + { + "state": { + "Name": "cosmere:deepslate_zinc_ore" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:deepslate_ore_replaceables" + } + } + ] + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/worldgen/configured_feature/ore_zinc_middle.json b/src/datagen/generated/cosmere/data/cosmere/worldgen/configured_feature/ore_zinc_middle.json new file mode 100644 index 000000000..2188a9cba --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/worldgen/configured_feature/ore_zinc_middle.json @@ -0,0 +1,29 @@ +{ + "type": "cosmere:ore", + "config": { + "oreVeinType": { + "type": "zinc", + "index": 1 + }, + "targets": [ + { + "state": { + "Name": "cosmere:zinc_ore" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:stone_ore_replaceables" + } + }, + { + "state": { + "Name": "cosmere:deepslate_zinc_ore" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:deepslate_ore_replaceables" + } + } + ] + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/worldgen/configured_feature/ore_zinc_upper.json b/src/datagen/generated/cosmere/data/cosmere/worldgen/configured_feature/ore_zinc_upper.json new file mode 100644 index 000000000..62253b605 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/worldgen/configured_feature/ore_zinc_upper.json @@ -0,0 +1,29 @@ +{ + "type": "cosmere:ore", + "config": { + "oreVeinType": { + "type": "zinc", + "index": 0 + }, + "targets": [ + { + "state": { + "Name": "cosmere:zinc_ore" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:stone_ore_replaceables" + } + }, + { + "state": { + "Name": "cosmere:deepslate_zinc_ore" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:deepslate_ore_replaceables" + } + } + ] + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/worldgen/placed_feature/ore_aluminum_buried.json b/src/datagen/generated/cosmere/data/cosmere/worldgen/placed_feature/ore_aluminum_buried.json new file mode 100644 index 000000000..ce55c42e8 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/worldgen/placed_feature/ore_aluminum_buried.json @@ -0,0 +1,31 @@ +{ + "feature": "cosmere:ore_aluminum_buried", + "placement": [ + { + "type": "minecraft:count", + "count": { + "type": "cosmere:configurable_constant", + "oreVeinType": { + "type": "aluminum", + "index": 2 + } + } + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "cosmere:configurable", + "oreVeinType": { + "type": "aluminum", + "index": 2 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/worldgen/placed_feature/ore_aluminum_medium.json b/src/datagen/generated/cosmere/data/cosmere/worldgen/placed_feature/ore_aluminum_medium.json new file mode 100644 index 000000000..9c85f4801 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/worldgen/placed_feature/ore_aluminum_medium.json @@ -0,0 +1,31 @@ +{ + "feature": "cosmere:ore_aluminum_medium", + "placement": [ + { + "type": "minecraft:count", + "count": { + "type": "cosmere:configurable_constant", + "oreVeinType": { + "type": "aluminum", + "index": 1 + } + } + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "cosmere:configurable", + "oreVeinType": { + "type": "aluminum", + "index": 1 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/worldgen/placed_feature/ore_aluminum_small.json b/src/datagen/generated/cosmere/data/cosmere/worldgen/placed_feature/ore_aluminum_small.json new file mode 100644 index 000000000..e9f472a73 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/worldgen/placed_feature/ore_aluminum_small.json @@ -0,0 +1,31 @@ +{ + "feature": "cosmere:ore_aluminum_small", + "placement": [ + { + "type": "minecraft:count", + "count": { + "type": "cosmere:configurable_constant", + "oreVeinType": { + "type": "aluminum", + "index": 0 + } + } + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "cosmere:configurable", + "oreVeinType": { + "type": "aluminum", + "index": 0 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/worldgen/placed_feature/ore_cadmium_abundant.json b/src/datagen/generated/cosmere/data/cosmere/worldgen/placed_feature/ore_cadmium_abundant.json new file mode 100644 index 000000000..65182fefd --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/worldgen/placed_feature/ore_cadmium_abundant.json @@ -0,0 +1,31 @@ +{ + "feature": "cosmere:ore_cadmium_abundant", + "placement": [ + { + "type": "minecraft:count", + "count": { + "type": "cosmere:configurable_constant", + "oreVeinType": { + "type": "cadmium", + "index": 1 + } + } + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "cosmere:configurable", + "oreVeinType": { + "type": "cadmium", + "index": 1 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/worldgen/placed_feature/ore_cadmium_deep.json b/src/datagen/generated/cosmere/data/cosmere/worldgen/placed_feature/ore_cadmium_deep.json new file mode 100644 index 000000000..859e616e9 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/worldgen/placed_feature/ore_cadmium_deep.json @@ -0,0 +1,31 @@ +{ + "feature": "cosmere:ore_cadmium_deep", + "placement": [ + { + "type": "minecraft:count", + "count": { + "type": "cosmere:configurable_constant", + "oreVeinType": { + "type": "cadmium", + "index": 2 + } + } + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "cosmere:configurable", + "oreVeinType": { + "type": "cadmium", + "index": 2 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/worldgen/placed_feature/ore_cadmium_normal.json b/src/datagen/generated/cosmere/data/cosmere/worldgen/placed_feature/ore_cadmium_normal.json new file mode 100644 index 000000000..e163d5fa1 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/worldgen/placed_feature/ore_cadmium_normal.json @@ -0,0 +1,31 @@ +{ + "feature": "cosmere:ore_cadmium_normal", + "placement": [ + { + "type": "minecraft:count", + "count": { + "type": "cosmere:configurable_constant", + "oreVeinType": { + "type": "cadmium", + "index": 0 + } + } + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "cosmere:configurable", + "oreVeinType": { + "type": "cadmium", + "index": 0 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/worldgen/placed_feature/ore_chromium_deep.json b/src/datagen/generated/cosmere/data/cosmere/worldgen/placed_feature/ore_chromium_deep.json new file mode 100644 index 000000000..25fd3ae68 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/worldgen/placed_feature/ore_chromium_deep.json @@ -0,0 +1,31 @@ +{ + "feature": "cosmere:ore_chromium_deep", + "placement": [ + { + "type": "minecraft:count", + "count": { + "type": "cosmere:configurable_constant", + "oreVeinType": { + "type": "chromium", + "index": 2 + } + } + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "cosmere:configurable", + "oreVeinType": { + "type": "chromium", + "index": 2 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/worldgen/placed_feature/ore_chromium_normal.json b/src/datagen/generated/cosmere/data/cosmere/worldgen/placed_feature/ore_chromium_normal.json new file mode 100644 index 000000000..329bea522 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/worldgen/placed_feature/ore_chromium_normal.json @@ -0,0 +1,31 @@ +{ + "feature": "cosmere:ore_chromium_normal", + "placement": [ + { + "type": "minecraft:count", + "count": { + "type": "cosmere:configurable_constant", + "oreVeinType": { + "type": "chromium", + "index": 1 + } + } + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "cosmere:configurable", + "oreVeinType": { + "type": "chromium", + "index": 1 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/worldgen/placed_feature/ore_chromium_rare.json b/src/datagen/generated/cosmere/data/cosmere/worldgen/placed_feature/ore_chromium_rare.json new file mode 100644 index 000000000..b79ac17af --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/worldgen/placed_feature/ore_chromium_rare.json @@ -0,0 +1,31 @@ +{ + "feature": "cosmere:ore_chromium_rare", + "placement": [ + { + "type": "minecraft:count", + "count": { + "type": "cosmere:configurable_constant", + "oreVeinType": { + "type": "chromium", + "index": 0 + } + } + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "cosmere:configurable", + "oreVeinType": { + "type": "chromium", + "index": 0 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/worldgen/placed_feature/ore_lead_abundant.json b/src/datagen/generated/cosmere/data/cosmere/worldgen/placed_feature/ore_lead_abundant.json new file mode 100644 index 000000000..365d85537 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/worldgen/placed_feature/ore_lead_abundant.json @@ -0,0 +1,31 @@ +{ + "feature": "cosmere:ore_lead_abundant", + "placement": [ + { + "type": "minecraft:count", + "count": { + "type": "cosmere:configurable_constant", + "oreVeinType": { + "type": "lead", + "index": 1 + } + } + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "cosmere:configurable", + "oreVeinType": { + "type": "lead", + "index": 1 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/worldgen/placed_feature/ore_lead_deep.json b/src/datagen/generated/cosmere/data/cosmere/worldgen/placed_feature/ore_lead_deep.json new file mode 100644 index 000000000..1589d6388 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/worldgen/placed_feature/ore_lead_deep.json @@ -0,0 +1,31 @@ +{ + "feature": "cosmere:ore_lead_deep", + "placement": [ + { + "type": "minecraft:count", + "count": { + "type": "cosmere:configurable_constant", + "oreVeinType": { + "type": "lead", + "index": 2 + } + } + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "cosmere:configurable", + "oreVeinType": { + "type": "lead", + "index": 2 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/worldgen/placed_feature/ore_lead_normal.json b/src/datagen/generated/cosmere/data/cosmere/worldgen/placed_feature/ore_lead_normal.json new file mode 100644 index 000000000..64aa11e29 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/worldgen/placed_feature/ore_lead_normal.json @@ -0,0 +1,31 @@ +{ + "feature": "cosmere:ore_lead_normal", + "placement": [ + { + "type": "minecraft:count", + "count": { + "type": "cosmere:configurable_constant", + "oreVeinType": { + "type": "lead", + "index": 0 + } + } + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "cosmere:configurable", + "oreVeinType": { + "type": "lead", + "index": 0 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/worldgen/placed_feature/ore_nickel_middle.json b/src/datagen/generated/cosmere/data/cosmere/worldgen/placed_feature/ore_nickel_middle.json new file mode 100644 index 000000000..ed4096b03 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/worldgen/placed_feature/ore_nickel_middle.json @@ -0,0 +1,31 @@ +{ + "feature": "cosmere:ore_nickel_middle", + "placement": [ + { + "type": "minecraft:count", + "count": { + "type": "cosmere:configurable_constant", + "oreVeinType": { + "type": "nickel", + "index": 1 + } + } + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "cosmere:configurable", + "oreVeinType": { + "type": "nickel", + "index": 1 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/worldgen/placed_feature/ore_nickel_small.json b/src/datagen/generated/cosmere/data/cosmere/worldgen/placed_feature/ore_nickel_small.json new file mode 100644 index 000000000..a8103b7d6 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/worldgen/placed_feature/ore_nickel_small.json @@ -0,0 +1,31 @@ +{ + "feature": "cosmere:ore_nickel_small", + "placement": [ + { + "type": "minecraft:count", + "count": { + "type": "cosmere:configurable_constant", + "oreVeinType": { + "type": "nickel", + "index": 2 + } + } + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "cosmere:configurable", + "oreVeinType": { + "type": "nickel", + "index": 2 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/worldgen/placed_feature/ore_nickel_upper.json b/src/datagen/generated/cosmere/data/cosmere/worldgen/placed_feature/ore_nickel_upper.json new file mode 100644 index 000000000..4c2ab66f0 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/worldgen/placed_feature/ore_nickel_upper.json @@ -0,0 +1,31 @@ +{ + "feature": "cosmere:ore_nickel_upper", + "placement": [ + { + "type": "minecraft:count", + "count": { + "type": "cosmere:configurable_constant", + "oreVeinType": { + "type": "nickel", + "index": 0 + } + } + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "cosmere:configurable", + "oreVeinType": { + "type": "nickel", + "index": 0 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/worldgen/placed_feature/ore_silver_abundant.json b/src/datagen/generated/cosmere/data/cosmere/worldgen/placed_feature/ore_silver_abundant.json new file mode 100644 index 000000000..4d1194b31 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/worldgen/placed_feature/ore_silver_abundant.json @@ -0,0 +1,31 @@ +{ + "feature": "cosmere:ore_silver_abundant", + "placement": [ + { + "type": "minecraft:count", + "count": { + "type": "cosmere:configurable_constant", + "oreVeinType": { + "type": "silver", + "index": 1 + } + } + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "cosmere:configurable", + "oreVeinType": { + "type": "silver", + "index": 1 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/worldgen/placed_feature/ore_silver_normal.json b/src/datagen/generated/cosmere/data/cosmere/worldgen/placed_feature/ore_silver_normal.json new file mode 100644 index 000000000..6f78cf010 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/worldgen/placed_feature/ore_silver_normal.json @@ -0,0 +1,31 @@ +{ + "feature": "cosmere:ore_silver_normal", + "placement": [ + { + "type": "minecraft:count", + "count": { + "type": "cosmere:configurable_constant", + "oreVeinType": { + "type": "silver", + "index": 0 + } + } + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "cosmere:configurable", + "oreVeinType": { + "type": "silver", + "index": 0 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/worldgen/placed_feature/ore_silver_rich.json b/src/datagen/generated/cosmere/data/cosmere/worldgen/placed_feature/ore_silver_rich.json new file mode 100644 index 000000000..85ce2a85e --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/worldgen/placed_feature/ore_silver_rich.json @@ -0,0 +1,31 @@ +{ + "feature": "cosmere:ore_silver_rich", + "placement": [ + { + "type": "minecraft:count", + "count": { + "type": "cosmere:configurable_constant", + "oreVeinType": { + "type": "silver", + "index": 2 + } + } + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "cosmere:configurable", + "oreVeinType": { + "type": "silver", + "index": 2 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/worldgen/placed_feature/ore_tin_abundant.json b/src/datagen/generated/cosmere/data/cosmere/worldgen/placed_feature/ore_tin_abundant.json new file mode 100644 index 000000000..79376e363 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/worldgen/placed_feature/ore_tin_abundant.json @@ -0,0 +1,31 @@ +{ + "feature": "cosmere:ore_tin_abundant", + "placement": [ + { + "type": "minecraft:count", + "count": { + "type": "cosmere:configurable_constant", + "oreVeinType": { + "type": "tin", + "index": 2 + } + } + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "cosmere:configurable", + "oreVeinType": { + "type": "tin", + "index": 2 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/worldgen/placed_feature/ore_tin_medium.json b/src/datagen/generated/cosmere/data/cosmere/worldgen/placed_feature/ore_tin_medium.json new file mode 100644 index 000000000..041f6acb4 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/worldgen/placed_feature/ore_tin_medium.json @@ -0,0 +1,31 @@ +{ + "feature": "cosmere:ore_tin_medium", + "placement": [ + { + "type": "minecraft:count", + "count": { + "type": "cosmere:configurable_constant", + "oreVeinType": { + "type": "tin", + "index": 1 + } + } + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "cosmere:configurable", + "oreVeinType": { + "type": "tin", + "index": 1 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/worldgen/placed_feature/ore_tin_small.json b/src/datagen/generated/cosmere/data/cosmere/worldgen/placed_feature/ore_tin_small.json new file mode 100644 index 000000000..22e259f49 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/worldgen/placed_feature/ore_tin_small.json @@ -0,0 +1,31 @@ +{ + "feature": "cosmere:ore_tin_small", + "placement": [ + { + "type": "minecraft:count", + "count": { + "type": "cosmere:configurable_constant", + "oreVeinType": { + "type": "tin", + "index": 0 + } + } + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "cosmere:configurable", + "oreVeinType": { + "type": "tin", + "index": 0 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/worldgen/placed_feature/ore_zinc_deep.json b/src/datagen/generated/cosmere/data/cosmere/worldgen/placed_feature/ore_zinc_deep.json new file mode 100644 index 000000000..e3cc1653d --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/worldgen/placed_feature/ore_zinc_deep.json @@ -0,0 +1,31 @@ +{ + "feature": "cosmere:ore_zinc_deep", + "placement": [ + { + "type": "minecraft:count", + "count": { + "type": "cosmere:configurable_constant", + "oreVeinType": { + "type": "zinc", + "index": 2 + } + } + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "cosmere:configurable", + "oreVeinType": { + "type": "zinc", + "index": 2 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/worldgen/placed_feature/ore_zinc_middle.json b/src/datagen/generated/cosmere/data/cosmere/worldgen/placed_feature/ore_zinc_middle.json new file mode 100644 index 000000000..1fc4c3a4d --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/worldgen/placed_feature/ore_zinc_middle.json @@ -0,0 +1,31 @@ +{ + "feature": "cosmere:ore_zinc_middle", + "placement": [ + { + "type": "minecraft:count", + "count": { + "type": "cosmere:configurable_constant", + "oreVeinType": { + "type": "zinc", + "index": 1 + } + } + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "cosmere:configurable", + "oreVeinType": { + "type": "zinc", + "index": 1 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/cosmere/worldgen/placed_feature/ore_zinc_upper.json b/src/datagen/generated/cosmere/data/cosmere/worldgen/placed_feature/ore_zinc_upper.json new file mode 100644 index 000000000..e12467a29 --- /dev/null +++ b/src/datagen/generated/cosmere/data/cosmere/worldgen/placed_feature/ore_zinc_upper.json @@ -0,0 +1,31 @@ +{ + "feature": "cosmere:ore_zinc_upper", + "placement": [ + { + "type": "minecraft:count", + "count": { + "type": "cosmere:configurable_constant", + "oreVeinType": { + "type": "zinc", + "index": 0 + } + } + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "cosmere:configurable", + "oreVeinType": { + "type": "zinc", + "index": 0 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/blocks/ores/aluminum.json b/src/datagen/generated/cosmere/data/forge/tags/blocks/ores/aluminum.json new file mode 100644 index 000000000..4bbad286e --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/blocks/ores/aluminum.json @@ -0,0 +1,6 @@ +{ + "values": [ + "cosmere:aluminum_ore", + "cosmere:deepslate_aluminum_ore" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/blocks/ores/cadmium.json b/src/datagen/generated/cosmere/data/forge/tags/blocks/ores/cadmium.json new file mode 100644 index 000000000..dd89f5fa6 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/blocks/ores/cadmium.json @@ -0,0 +1,6 @@ +{ + "values": [ + "cosmere:cadmium_ore", + "cosmere:deepslate_cadmium_ore" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/blocks/ores/chromium.json b/src/datagen/generated/cosmere/data/forge/tags/blocks/ores/chromium.json new file mode 100644 index 000000000..1dd452376 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/blocks/ores/chromium.json @@ -0,0 +1,6 @@ +{ + "values": [ + "cosmere:chromium_ore", + "cosmere:deepslate_chromium_ore" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/blocks/ores/lead.json b/src/datagen/generated/cosmere/data/forge/tags/blocks/ores/lead.json new file mode 100644 index 000000000..6bcad2805 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/blocks/ores/lead.json @@ -0,0 +1,6 @@ +{ + "values": [ + "cosmere:lead_ore", + "cosmere:deepslate_lead_ore" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/blocks/ores/nickel.json b/src/datagen/generated/cosmere/data/forge/tags/blocks/ores/nickel.json new file mode 100644 index 000000000..b7b9da98b --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/blocks/ores/nickel.json @@ -0,0 +1,6 @@ +{ + "values": [ + "cosmere:nickel_ore", + "cosmere:deepslate_nickel_ore" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/blocks/ores/silver.json b/src/datagen/generated/cosmere/data/forge/tags/blocks/ores/silver.json new file mode 100644 index 000000000..b9f698639 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/blocks/ores/silver.json @@ -0,0 +1,6 @@ +{ + "values": [ + "cosmere:silver_ore", + "cosmere:deepslate_silver_ore" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/blocks/ores/tin.json b/src/datagen/generated/cosmere/data/forge/tags/blocks/ores/tin.json new file mode 100644 index 000000000..948498dc6 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/blocks/ores/tin.json @@ -0,0 +1,6 @@ +{ + "values": [ + "cosmere:tin_ore", + "cosmere:deepslate_tin_ore" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/blocks/ores/zinc.json b/src/datagen/generated/cosmere/data/forge/tags/blocks/ores/zinc.json new file mode 100644 index 000000000..8ed61c0e0 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/blocks/ores/zinc.json @@ -0,0 +1,6 @@ +{ + "values": [ + "cosmere:zinc_ore", + "cosmere:deepslate_zinc_ore" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/blocks/storage_blocks.json b/src/datagen/generated/cosmere/data/forge/tags/blocks/storage_blocks.json new file mode 100644 index 000000000..64451809c --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/blocks/storage_blocks.json @@ -0,0 +1,25 @@ +{ + "values": [ + "#forge:storage_blocks/steel", + "#forge:storage_blocks/tin", + "#forge:storage_blocks/pewter", + "#forge:storage_blocks/zinc", + "#forge:storage_blocks/brass", + "#forge:storage_blocks/bronze", + "#forge:storage_blocks/aluminum", + "#forge:storage_blocks/duralumin", + "#forge:storage_blocks/chromium", + "#forge:storage_blocks/nicrosil", + "#forge:storage_blocks/cadmium", + "#forge:storage_blocks/bendalloy", + "#forge:storage_blocks/electrum", + "#forge:storage_blocks/atium", + "#forge:storage_blocks/lerasium", + "#forge:storage_blocks/harmonium", + "#forge:storage_blocks/malatium", + "#forge:storage_blocks/lerasatium", + "#forge:storage_blocks/nickel", + "#forge:storage_blocks/lead", + "#forge:storage_blocks/silver" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/blocks/storage_blocks/aluminum.json b/src/datagen/generated/cosmere/data/forge/tags/blocks/storage_blocks/aluminum.json new file mode 100644 index 000000000..e08272e80 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/blocks/storage_blocks/aluminum.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:aluminum_block" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/blocks/storage_blocks/atium.json b/src/datagen/generated/cosmere/data/forge/tags/blocks/storage_blocks/atium.json new file mode 100644 index 000000000..f525617d3 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/blocks/storage_blocks/atium.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:atium_block" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/blocks/storage_blocks/bendalloy.json b/src/datagen/generated/cosmere/data/forge/tags/blocks/storage_blocks/bendalloy.json new file mode 100644 index 000000000..6c49113e2 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/blocks/storage_blocks/bendalloy.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:bendalloy_block" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/blocks/storage_blocks/brass.json b/src/datagen/generated/cosmere/data/forge/tags/blocks/storage_blocks/brass.json new file mode 100644 index 000000000..d48e299d0 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/blocks/storage_blocks/brass.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:brass_block" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/blocks/storage_blocks/bronze.json b/src/datagen/generated/cosmere/data/forge/tags/blocks/storage_blocks/bronze.json new file mode 100644 index 000000000..bcd8876cf --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/blocks/storage_blocks/bronze.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:bronze_block" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/blocks/storage_blocks/cadmium.json b/src/datagen/generated/cosmere/data/forge/tags/blocks/storage_blocks/cadmium.json new file mode 100644 index 000000000..242b863bc --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/blocks/storage_blocks/cadmium.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:cadmium_block" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/blocks/storage_blocks/chromium.json b/src/datagen/generated/cosmere/data/forge/tags/blocks/storage_blocks/chromium.json new file mode 100644 index 000000000..28db3b475 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/blocks/storage_blocks/chromium.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:chromium_block" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/blocks/storage_blocks/duralumin.json b/src/datagen/generated/cosmere/data/forge/tags/blocks/storage_blocks/duralumin.json new file mode 100644 index 000000000..be3173b6c --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/blocks/storage_blocks/duralumin.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:duralumin_block" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/blocks/storage_blocks/electrum.json b/src/datagen/generated/cosmere/data/forge/tags/blocks/storage_blocks/electrum.json new file mode 100644 index 000000000..795d16464 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/blocks/storage_blocks/electrum.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:electrum_block" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/blocks/storage_blocks/harmonium.json b/src/datagen/generated/cosmere/data/forge/tags/blocks/storage_blocks/harmonium.json new file mode 100644 index 000000000..fca3625ec --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/blocks/storage_blocks/harmonium.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:harmonium_block" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/blocks/storage_blocks/lead.json b/src/datagen/generated/cosmere/data/forge/tags/blocks/storage_blocks/lead.json new file mode 100644 index 000000000..c3e9dda66 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/blocks/storage_blocks/lead.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:lead_block" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/blocks/storage_blocks/lerasatium.json b/src/datagen/generated/cosmere/data/forge/tags/blocks/storage_blocks/lerasatium.json new file mode 100644 index 000000000..7493b185f --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/blocks/storage_blocks/lerasatium.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:lerasatium_block" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/blocks/storage_blocks/lerasium.json b/src/datagen/generated/cosmere/data/forge/tags/blocks/storage_blocks/lerasium.json new file mode 100644 index 000000000..caea1a897 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/blocks/storage_blocks/lerasium.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:lerasium_block" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/blocks/storage_blocks/malatium.json b/src/datagen/generated/cosmere/data/forge/tags/blocks/storage_blocks/malatium.json new file mode 100644 index 000000000..e4996678d --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/blocks/storage_blocks/malatium.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:malatium_block" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/blocks/storage_blocks/nickel.json b/src/datagen/generated/cosmere/data/forge/tags/blocks/storage_blocks/nickel.json new file mode 100644 index 000000000..3880946ea --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/blocks/storage_blocks/nickel.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:nickel_block" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/blocks/storage_blocks/nicrosil.json b/src/datagen/generated/cosmere/data/forge/tags/blocks/storage_blocks/nicrosil.json new file mode 100644 index 000000000..b5c01a260 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/blocks/storage_blocks/nicrosil.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:nicrosil_block" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/blocks/storage_blocks/pewter.json b/src/datagen/generated/cosmere/data/forge/tags/blocks/storage_blocks/pewter.json new file mode 100644 index 000000000..15b5d1b99 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/blocks/storage_blocks/pewter.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:pewter_block" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/blocks/storage_blocks/silver.json b/src/datagen/generated/cosmere/data/forge/tags/blocks/storage_blocks/silver.json new file mode 100644 index 000000000..f8798aebc --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/blocks/storage_blocks/silver.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:silver_block" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/blocks/storage_blocks/steel.json b/src/datagen/generated/cosmere/data/forge/tags/blocks/storage_blocks/steel.json new file mode 100644 index 000000000..2b4b59155 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/blocks/storage_blocks/steel.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:steel_block" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/blocks/storage_blocks/tin.json b/src/datagen/generated/cosmere/data/forge/tags/blocks/storage_blocks/tin.json new file mode 100644 index 000000000..7ce21e893 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/blocks/storage_blocks/tin.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:tin_block" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/blocks/storage_blocks/zinc.json b/src/datagen/generated/cosmere/data/forge/tags/blocks/storage_blocks/zinc.json new file mode 100644 index 000000000..287b64a07 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/blocks/storage_blocks/zinc.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:zinc_block" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/dusts/bendalloy.json b/src/datagen/generated/cosmere/data/forge/tags/items/dusts/bendalloy.json new file mode 100644 index 000000000..987f35d40 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/dusts/bendalloy.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:bendalloy_blend" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/dusts/brass.json b/src/datagen/generated/cosmere/data/forge/tags/items/dusts/brass.json new file mode 100644 index 000000000..e87181989 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/dusts/brass.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:brass_blend" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/dusts/bronze.json b/src/datagen/generated/cosmere/data/forge/tags/items/dusts/bronze.json new file mode 100644 index 000000000..baf1de772 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/dusts/bronze.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:bronze_blend" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/dusts/duralumin.json b/src/datagen/generated/cosmere/data/forge/tags/items/dusts/duralumin.json new file mode 100644 index 000000000..5a6b2dc25 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/dusts/duralumin.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:duralumin_blend" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/dusts/electrum.json b/src/datagen/generated/cosmere/data/forge/tags/items/dusts/electrum.json new file mode 100644 index 000000000..ff01e273d --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/dusts/electrum.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:electrum_blend" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/dusts/nicrosil.json b/src/datagen/generated/cosmere/data/forge/tags/items/dusts/nicrosil.json new file mode 100644 index 000000000..4b4e94637 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/dusts/nicrosil.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:nicrosil_blend" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/dusts/pewter.json b/src/datagen/generated/cosmere/data/forge/tags/items/dusts/pewter.json new file mode 100644 index 000000000..95a45d59e --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/dusts/pewter.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:pewter_blend" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/dusts/steel.json b/src/datagen/generated/cosmere/data/forge/tags/items/dusts/steel.json new file mode 100644 index 000000000..c0248135e --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/dusts/steel.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:steel_blend" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/ingots.json b/src/datagen/generated/cosmere/data/forge/tags/items/ingots.json new file mode 100644 index 000000000..58b39cd64 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/ingots.json @@ -0,0 +1,25 @@ +{ + "values": [ + "#forge:ingots/steel", + "#forge:ingots/tin", + "#forge:ingots/pewter", + "#forge:ingots/zinc", + "#forge:ingots/brass", + "#forge:ingots/bronze", + "#forge:ingots/aluminum", + "#forge:ingots/duralumin", + "#forge:ingots/chromium", + "#forge:ingots/nicrosil", + "#forge:ingots/cadmium", + "#forge:ingots/bendalloy", + "#forge:ingots/electrum", + "#forge:ingots/atium", + "#forge:ingots/lerasium", + "#forge:ingots/harmonium", + "#forge:ingots/malatium", + "#forge:ingots/lerasatium", + "#forge:ingots/nickel", + "#forge:ingots/lead", + "#forge:ingots/silver" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/ingots/aluminum.json b/src/datagen/generated/cosmere/data/forge/tags/items/ingots/aluminum.json new file mode 100644 index 000000000..9aaf168ea --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/ingots/aluminum.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:aluminum_ingot" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/ingots/atium.json b/src/datagen/generated/cosmere/data/forge/tags/items/ingots/atium.json new file mode 100644 index 000000000..6ea29605a --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/ingots/atium.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:atium_ingot" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/ingots/bendalloy.json b/src/datagen/generated/cosmere/data/forge/tags/items/ingots/bendalloy.json new file mode 100644 index 000000000..c12ad1b80 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/ingots/bendalloy.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:bendalloy_ingot" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/ingots/brass.json b/src/datagen/generated/cosmere/data/forge/tags/items/ingots/brass.json new file mode 100644 index 000000000..de276f9b3 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/ingots/brass.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:brass_ingot" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/ingots/bronze.json b/src/datagen/generated/cosmere/data/forge/tags/items/ingots/bronze.json new file mode 100644 index 000000000..1f36ce176 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/ingots/bronze.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:bronze_ingot" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/ingots/cadmium.json b/src/datagen/generated/cosmere/data/forge/tags/items/ingots/cadmium.json new file mode 100644 index 000000000..398ba9fe4 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/ingots/cadmium.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:cadmium_ingot" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/ingots/chromium.json b/src/datagen/generated/cosmere/data/forge/tags/items/ingots/chromium.json new file mode 100644 index 000000000..d0133a8b7 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/ingots/chromium.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:chromium_ingot" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/ingots/duralumin.json b/src/datagen/generated/cosmere/data/forge/tags/items/ingots/duralumin.json new file mode 100644 index 000000000..d170b9965 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/ingots/duralumin.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:duralumin_ingot" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/ingots/electrum.json b/src/datagen/generated/cosmere/data/forge/tags/items/ingots/electrum.json new file mode 100644 index 000000000..fafdd4e1b --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/ingots/electrum.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:electrum_ingot" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/ingots/harmonium.json b/src/datagen/generated/cosmere/data/forge/tags/items/ingots/harmonium.json new file mode 100644 index 000000000..6f5f0ff01 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/ingots/harmonium.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:harmonium_ingot" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/ingots/lead.json b/src/datagen/generated/cosmere/data/forge/tags/items/ingots/lead.json new file mode 100644 index 000000000..db1fb4781 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/ingots/lead.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:lead_ingot" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/ingots/lerasatium.json b/src/datagen/generated/cosmere/data/forge/tags/items/ingots/lerasatium.json new file mode 100644 index 000000000..a03b9f4e7 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/ingots/lerasatium.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:lerasatium_ingot" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/ingots/lerasium.json b/src/datagen/generated/cosmere/data/forge/tags/items/ingots/lerasium.json new file mode 100644 index 000000000..12c9ed50d --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/ingots/lerasium.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:lerasium_ingot" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/ingots/malatium.json b/src/datagen/generated/cosmere/data/forge/tags/items/ingots/malatium.json new file mode 100644 index 000000000..10cadb1e9 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/ingots/malatium.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:malatium_ingot" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/ingots/nickel.json b/src/datagen/generated/cosmere/data/forge/tags/items/ingots/nickel.json new file mode 100644 index 000000000..f386b95f8 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/ingots/nickel.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:nickel_ingot" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/ingots/nicrosil.json b/src/datagen/generated/cosmere/data/forge/tags/items/ingots/nicrosil.json new file mode 100644 index 000000000..a40592662 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/ingots/nicrosil.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:nicrosil_ingot" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/ingots/pewter.json b/src/datagen/generated/cosmere/data/forge/tags/items/ingots/pewter.json new file mode 100644 index 000000000..017166bfe --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/ingots/pewter.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:pewter_ingot" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/ingots/silver.json b/src/datagen/generated/cosmere/data/forge/tags/items/ingots/silver.json new file mode 100644 index 000000000..846fce325 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/ingots/silver.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:silver_ingot" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/ingots/steel.json b/src/datagen/generated/cosmere/data/forge/tags/items/ingots/steel.json new file mode 100644 index 000000000..0adef1e81 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/ingots/steel.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:steel_ingot" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/ingots/tin.json b/src/datagen/generated/cosmere/data/forge/tags/items/ingots/tin.json new file mode 100644 index 000000000..954f53b81 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/ingots/tin.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:tin_ingot" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/ingots/zinc.json b/src/datagen/generated/cosmere/data/forge/tags/items/ingots/zinc.json new file mode 100644 index 000000000..5e7119523 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/ingots/zinc.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:zinc_ingot" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/nuggets.json b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets.json new file mode 100644 index 000000000..c72b73617 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets.json @@ -0,0 +1,60 @@ +{ + "values": [ + "#forge:nuggets/iron", + "#forge:nuggets/lerasium_iron_alloy", + "#forge:nuggets/lerasatium_iron_alloy", + "#forge:nuggets/steel", + "#forge:nuggets/lerasium_steel_alloy", + "#forge:nuggets/lerasatium_steel_alloy", + "#forge:nuggets/tin", + "#forge:nuggets/lerasium_tin_alloy", + "#forge:nuggets/lerasatium_tin_alloy", + "#forge:nuggets/pewter", + "#forge:nuggets/lerasium_pewter_alloy", + "#forge:nuggets/lerasatium_pewter_alloy", + "#forge:nuggets/zinc", + "#forge:nuggets/lerasium_zinc_alloy", + "#forge:nuggets/lerasatium_zinc_alloy", + "#forge:nuggets/brass", + "#forge:nuggets/lerasium_brass_alloy", + "#forge:nuggets/lerasatium_brass_alloy", + "#forge:nuggets/copper", + "#forge:nuggets/lerasium_copper_alloy", + "#forge:nuggets/lerasatium_copper_alloy", + "#forge:nuggets/bronze", + "#forge:nuggets/lerasium_bronze_alloy", + "#forge:nuggets/lerasatium_bronze_alloy", + "#forge:nuggets/aluminum", + "#forge:nuggets/lerasium_aluminum_alloy", + "#forge:nuggets/lerasatium_aluminum_alloy", + "#forge:nuggets/duralumin", + "#forge:nuggets/lerasium_duralumin_alloy", + "#forge:nuggets/lerasatium_duralumin_alloy", + "#forge:nuggets/chromium", + "#forge:nuggets/lerasium_chromium_alloy", + "#forge:nuggets/lerasatium_chromium_alloy", + "#forge:nuggets/nicrosil", + "#forge:nuggets/lerasium_nicrosil_alloy", + "#forge:nuggets/lerasatium_nicrosil_alloy", + "#forge:nuggets/cadmium", + "#forge:nuggets/lerasium_cadmium_alloy", + "#forge:nuggets/lerasatium_cadmium_alloy", + "#forge:nuggets/bendalloy", + "#forge:nuggets/lerasium_bendalloy_alloy", + "#forge:nuggets/lerasatium_bendalloy_alloy", + "#forge:nuggets/gold", + "#forge:nuggets/lerasium_gold_alloy", + "#forge:nuggets/lerasatium_gold_alloy", + "#forge:nuggets/electrum", + "#forge:nuggets/lerasium_electrum_alloy", + "#forge:nuggets/lerasatium_electrum_alloy", + "#forge:nuggets/atium", + "#forge:nuggets/lerasium", + "#forge:nuggets/harmonium", + "#forge:nuggets/malatium", + "#forge:nuggets/lerasatium", + "#forge:nuggets/nickel", + "#forge:nuggets/lead", + "#forge:nuggets/silver" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/aluminum.json b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/aluminum.json new file mode 100644 index 000000000..19e649e51 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/aluminum.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:aluminum_nugget" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/atium.json b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/atium.json new file mode 100644 index 000000000..17b2464f1 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/atium.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:atium_nugget" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/bendalloy.json b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/bendalloy.json new file mode 100644 index 000000000..de7d7a478 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/bendalloy.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:bendalloy_nugget" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/brass.json b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/brass.json new file mode 100644 index 000000000..4a1e4ffbf --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/brass.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:brass_nugget" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/bronze.json b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/bronze.json new file mode 100644 index 000000000..ceed53474 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/bronze.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:bronze_nugget" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/cadmium.json b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/cadmium.json new file mode 100644 index 000000000..6c67a1c8a --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/cadmium.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:cadmium_nugget" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/chromium.json b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/chromium.json new file mode 100644 index 000000000..35612c6a5 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/chromium.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:chromium_nugget" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/copper.json b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/copper.json new file mode 100644 index 000000000..608f3c035 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/copper.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:copper_nugget" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/duralumin.json b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/duralumin.json new file mode 100644 index 000000000..2876da5b1 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/duralumin.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:duralumin_nugget" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/electrum.json b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/electrum.json new file mode 100644 index 000000000..206ae5cac --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/electrum.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:electrum_nugget" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/harmonium.json b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/harmonium.json new file mode 100644 index 000000000..a1960cb2b --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/harmonium.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:harmonium_nugget" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lead.json b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lead.json new file mode 100644 index 000000000..d333bf6b9 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lead.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:lead_nugget" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasatium.json b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasatium.json new file mode 100644 index 000000000..e838d9868 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasatium.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:lerasatium_nugget" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasatium_aluminum_alloy.json b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasatium_aluminum_alloy.json new file mode 100644 index 000000000..40ee60af8 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasatium_aluminum_alloy.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:lerasatium_aluminum_alloy_nugget" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasatium_bendalloy_alloy.json b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasatium_bendalloy_alloy.json new file mode 100644 index 000000000..bcc69196f --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasatium_bendalloy_alloy.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:lerasatium_bendalloy_alloy_nugget" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasatium_brass_alloy.json b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasatium_brass_alloy.json new file mode 100644 index 000000000..6209b0db4 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasatium_brass_alloy.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:lerasatium_brass_alloy_nugget" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasatium_bronze_alloy.json b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasatium_bronze_alloy.json new file mode 100644 index 000000000..781394595 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasatium_bronze_alloy.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:lerasatium_bronze_alloy_nugget" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasatium_cadmium_alloy.json b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasatium_cadmium_alloy.json new file mode 100644 index 000000000..ccf305015 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasatium_cadmium_alloy.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:lerasatium_cadmium_alloy_nugget" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasatium_chromium_alloy.json b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasatium_chromium_alloy.json new file mode 100644 index 000000000..d6f8d0196 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasatium_chromium_alloy.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:lerasatium_chromium_alloy_nugget" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasatium_copper_alloy.json b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasatium_copper_alloy.json new file mode 100644 index 000000000..367c7a291 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasatium_copper_alloy.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:lerasatium_copper_alloy_nugget" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasatium_duralumin_alloy.json b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasatium_duralumin_alloy.json new file mode 100644 index 000000000..bdbfdf3e7 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasatium_duralumin_alloy.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:lerasatium_duralumin_alloy_nugget" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasatium_electrum_alloy.json b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasatium_electrum_alloy.json new file mode 100644 index 000000000..eb372e488 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasatium_electrum_alloy.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:lerasatium_electrum_alloy_nugget" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasatium_gold_alloy.json b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasatium_gold_alloy.json new file mode 100644 index 000000000..4b188ec6d --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasatium_gold_alloy.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:lerasatium_gold_alloy_nugget" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasatium_iron_alloy.json b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasatium_iron_alloy.json new file mode 100644 index 000000000..5af553e21 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasatium_iron_alloy.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:lerasatium_iron_alloy_nugget" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasatium_nicrosil_alloy.json b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasatium_nicrosil_alloy.json new file mode 100644 index 000000000..eb764ca40 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasatium_nicrosil_alloy.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:lerasatium_nicrosil_alloy_nugget" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasatium_pewter_alloy.json b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasatium_pewter_alloy.json new file mode 100644 index 000000000..a3d4cb4d5 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasatium_pewter_alloy.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:lerasatium_pewter_alloy_nugget" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasatium_steel_alloy.json b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasatium_steel_alloy.json new file mode 100644 index 000000000..10d6a32f4 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasatium_steel_alloy.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:lerasatium_steel_alloy_nugget" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasatium_tin_alloy.json b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasatium_tin_alloy.json new file mode 100644 index 000000000..6906ea912 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasatium_tin_alloy.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:lerasatium_tin_alloy_nugget" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasatium_zinc_alloy.json b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasatium_zinc_alloy.json new file mode 100644 index 000000000..d068fe79a --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasatium_zinc_alloy.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:lerasatium_zinc_alloy_nugget" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasium.json b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasium.json new file mode 100644 index 000000000..a911c0d54 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasium.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:lerasium_nugget" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasium_aluminum_alloy.json b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasium_aluminum_alloy.json new file mode 100644 index 000000000..8eb30b3bc --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasium_aluminum_alloy.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:lerasium_aluminum_alloy_nugget" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasium_bendalloy_alloy.json b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasium_bendalloy_alloy.json new file mode 100644 index 000000000..730d606e0 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasium_bendalloy_alloy.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:lerasium_bendalloy_alloy_nugget" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasium_brass_alloy.json b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasium_brass_alloy.json new file mode 100644 index 000000000..ad4b747cd --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasium_brass_alloy.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:lerasium_brass_alloy_nugget" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasium_bronze_alloy.json b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasium_bronze_alloy.json new file mode 100644 index 000000000..eb8d8be65 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasium_bronze_alloy.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:lerasium_bronze_alloy_nugget" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasium_cadmium_alloy.json b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasium_cadmium_alloy.json new file mode 100644 index 000000000..f9be6324d --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasium_cadmium_alloy.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:lerasium_cadmium_alloy_nugget" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasium_chromium_alloy.json b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasium_chromium_alloy.json new file mode 100644 index 000000000..492daf09c --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasium_chromium_alloy.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:lerasium_chromium_alloy_nugget" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasium_copper_alloy.json b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasium_copper_alloy.json new file mode 100644 index 000000000..3b2b07fb0 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasium_copper_alloy.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:lerasium_copper_alloy_nugget" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasium_duralumin_alloy.json b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasium_duralumin_alloy.json new file mode 100644 index 000000000..e2283163e --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasium_duralumin_alloy.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:lerasium_duralumin_alloy_nugget" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasium_electrum_alloy.json b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasium_electrum_alloy.json new file mode 100644 index 000000000..6190fc85e --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasium_electrum_alloy.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:lerasium_electrum_alloy_nugget" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasium_gold_alloy.json b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasium_gold_alloy.json new file mode 100644 index 000000000..90da7bd31 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasium_gold_alloy.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:lerasium_gold_alloy_nugget" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasium_iron_alloy.json b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasium_iron_alloy.json new file mode 100644 index 000000000..bbaa4275c --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasium_iron_alloy.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:lerasium_iron_alloy_nugget" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasium_nicrosil_alloy.json b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasium_nicrosil_alloy.json new file mode 100644 index 000000000..622492692 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasium_nicrosil_alloy.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:lerasium_nicrosil_alloy_nugget" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasium_pewter_alloy.json b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasium_pewter_alloy.json new file mode 100644 index 000000000..2e7aa8e92 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasium_pewter_alloy.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:lerasium_pewter_alloy_nugget" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasium_steel_alloy.json b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasium_steel_alloy.json new file mode 100644 index 000000000..22b31cac5 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasium_steel_alloy.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:lerasium_steel_alloy_nugget" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasium_tin_alloy.json b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasium_tin_alloy.json new file mode 100644 index 000000000..078cfc957 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasium_tin_alloy.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:lerasium_tin_alloy_nugget" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasium_zinc_alloy.json b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasium_zinc_alloy.json new file mode 100644 index 000000000..6bbd6277c --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/lerasium_zinc_alloy.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:lerasium_zinc_alloy_nugget" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/malatium.json b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/malatium.json new file mode 100644 index 000000000..5df13b170 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/malatium.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:malatium_nugget" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/nickel.json b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/nickel.json new file mode 100644 index 000000000..c155f4024 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/nickel.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:nickel_nugget" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/nicrosil.json b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/nicrosil.json new file mode 100644 index 000000000..31bf183ea --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/nicrosil.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:nicrosil_nugget" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/pewter.json b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/pewter.json new file mode 100644 index 000000000..8d49becc2 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/pewter.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:pewter_nugget" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/silver.json b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/silver.json new file mode 100644 index 000000000..13dbe1c49 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/silver.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:silver_nugget" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/steel.json b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/steel.json new file mode 100644 index 000000000..78c34587b --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/steel.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:steel_nugget" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/tin.json b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/tin.json new file mode 100644 index 000000000..b1c5a743c --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/tin.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:tin_nugget" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/zinc.json b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/zinc.json new file mode 100644 index 000000000..0d48ce159 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/nuggets/zinc.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:zinc_nugget" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/raw_materials/aluminum.json b/src/datagen/generated/cosmere/data/forge/tags/items/raw_materials/aluminum.json new file mode 100644 index 000000000..ce5a1eb4e --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/raw_materials/aluminum.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:raw_aluminum_ore" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/raw_materials/cadmium.json b/src/datagen/generated/cosmere/data/forge/tags/items/raw_materials/cadmium.json new file mode 100644 index 000000000..0aa3f993a --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/raw_materials/cadmium.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:raw_cadmium_ore" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/raw_materials/chromium.json b/src/datagen/generated/cosmere/data/forge/tags/items/raw_materials/chromium.json new file mode 100644 index 000000000..19a9072e5 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/raw_materials/chromium.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:raw_chromium_ore" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/raw_materials/lead.json b/src/datagen/generated/cosmere/data/forge/tags/items/raw_materials/lead.json new file mode 100644 index 000000000..750895d5f --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/raw_materials/lead.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:raw_lead_ore" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/raw_materials/nickel.json b/src/datagen/generated/cosmere/data/forge/tags/items/raw_materials/nickel.json new file mode 100644 index 000000000..7c39acf6a --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/raw_materials/nickel.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:raw_nickel_ore" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/raw_materials/silver.json b/src/datagen/generated/cosmere/data/forge/tags/items/raw_materials/silver.json new file mode 100644 index 000000000..727473f69 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/raw_materials/silver.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:raw_silver_ore" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/raw_materials/tin.json b/src/datagen/generated/cosmere/data/forge/tags/items/raw_materials/tin.json new file mode 100644 index 000000000..0a4bab04d --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/raw_materials/tin.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:raw_tin_ore" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/raw_materials/zinc.json b/src/datagen/generated/cosmere/data/forge/tags/items/raw_materials/zinc.json new file mode 100644 index 000000000..31b488eaa --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/raw_materials/zinc.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:raw_zinc_ore" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/storage_blocks.json b/src/datagen/generated/cosmere/data/forge/tags/items/storage_blocks.json new file mode 100644 index 000000000..64451809c --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/storage_blocks.json @@ -0,0 +1,25 @@ +{ + "values": [ + "#forge:storage_blocks/steel", + "#forge:storage_blocks/tin", + "#forge:storage_blocks/pewter", + "#forge:storage_blocks/zinc", + "#forge:storage_blocks/brass", + "#forge:storage_blocks/bronze", + "#forge:storage_blocks/aluminum", + "#forge:storage_blocks/duralumin", + "#forge:storage_blocks/chromium", + "#forge:storage_blocks/nicrosil", + "#forge:storage_blocks/cadmium", + "#forge:storage_blocks/bendalloy", + "#forge:storage_blocks/electrum", + "#forge:storage_blocks/atium", + "#forge:storage_blocks/lerasium", + "#forge:storage_blocks/harmonium", + "#forge:storage_blocks/malatium", + "#forge:storage_blocks/lerasatium", + "#forge:storage_blocks/nickel", + "#forge:storage_blocks/lead", + "#forge:storage_blocks/silver" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/storage_blocks/aluminum.json b/src/datagen/generated/cosmere/data/forge/tags/items/storage_blocks/aluminum.json new file mode 100644 index 000000000..e08272e80 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/storage_blocks/aluminum.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:aluminum_block" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/storage_blocks/atium.json b/src/datagen/generated/cosmere/data/forge/tags/items/storage_blocks/atium.json new file mode 100644 index 000000000..f525617d3 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/storage_blocks/atium.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:atium_block" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/storage_blocks/bendalloy.json b/src/datagen/generated/cosmere/data/forge/tags/items/storage_blocks/bendalloy.json new file mode 100644 index 000000000..6c49113e2 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/storage_blocks/bendalloy.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:bendalloy_block" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/storage_blocks/brass.json b/src/datagen/generated/cosmere/data/forge/tags/items/storage_blocks/brass.json new file mode 100644 index 000000000..d48e299d0 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/storage_blocks/brass.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:brass_block" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/storage_blocks/bronze.json b/src/datagen/generated/cosmere/data/forge/tags/items/storage_blocks/bronze.json new file mode 100644 index 000000000..bcd8876cf --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/storage_blocks/bronze.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:bronze_block" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/storage_blocks/cadmium.json b/src/datagen/generated/cosmere/data/forge/tags/items/storage_blocks/cadmium.json new file mode 100644 index 000000000..242b863bc --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/storage_blocks/cadmium.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:cadmium_block" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/storage_blocks/chromium.json b/src/datagen/generated/cosmere/data/forge/tags/items/storage_blocks/chromium.json new file mode 100644 index 000000000..28db3b475 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/storage_blocks/chromium.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:chromium_block" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/storage_blocks/duralumin.json b/src/datagen/generated/cosmere/data/forge/tags/items/storage_blocks/duralumin.json new file mode 100644 index 000000000..be3173b6c --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/storage_blocks/duralumin.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:duralumin_block" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/storage_blocks/electrum.json b/src/datagen/generated/cosmere/data/forge/tags/items/storage_blocks/electrum.json new file mode 100644 index 000000000..795d16464 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/storage_blocks/electrum.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:electrum_block" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/storage_blocks/harmonium.json b/src/datagen/generated/cosmere/data/forge/tags/items/storage_blocks/harmonium.json new file mode 100644 index 000000000..fca3625ec --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/storage_blocks/harmonium.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:harmonium_block" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/storage_blocks/lead.json b/src/datagen/generated/cosmere/data/forge/tags/items/storage_blocks/lead.json new file mode 100644 index 000000000..c3e9dda66 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/storage_blocks/lead.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:lead_block" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/storage_blocks/lerasatium.json b/src/datagen/generated/cosmere/data/forge/tags/items/storage_blocks/lerasatium.json new file mode 100644 index 000000000..7493b185f --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/storage_blocks/lerasatium.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:lerasatium_block" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/storage_blocks/lerasium.json b/src/datagen/generated/cosmere/data/forge/tags/items/storage_blocks/lerasium.json new file mode 100644 index 000000000..caea1a897 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/storage_blocks/lerasium.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:lerasium_block" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/storage_blocks/malatium.json b/src/datagen/generated/cosmere/data/forge/tags/items/storage_blocks/malatium.json new file mode 100644 index 000000000..e4996678d --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/storage_blocks/malatium.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:malatium_block" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/storage_blocks/nickel.json b/src/datagen/generated/cosmere/data/forge/tags/items/storage_blocks/nickel.json new file mode 100644 index 000000000..3880946ea --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/storage_blocks/nickel.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:nickel_block" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/storage_blocks/nicrosil.json b/src/datagen/generated/cosmere/data/forge/tags/items/storage_blocks/nicrosil.json new file mode 100644 index 000000000..b5c01a260 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/storage_blocks/nicrosil.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:nicrosil_block" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/storage_blocks/pewter.json b/src/datagen/generated/cosmere/data/forge/tags/items/storage_blocks/pewter.json new file mode 100644 index 000000000..15b5d1b99 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/storage_blocks/pewter.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:pewter_block" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/storage_blocks/silver.json b/src/datagen/generated/cosmere/data/forge/tags/items/storage_blocks/silver.json new file mode 100644 index 000000000..f8798aebc --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/storage_blocks/silver.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:silver_block" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/storage_blocks/steel.json b/src/datagen/generated/cosmere/data/forge/tags/items/storage_blocks/steel.json new file mode 100644 index 000000000..2b4b59155 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/storage_blocks/steel.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:steel_block" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/storage_blocks/tin.json b/src/datagen/generated/cosmere/data/forge/tags/items/storage_blocks/tin.json new file mode 100644 index 000000000..7ce21e893 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/storage_blocks/tin.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:tin_block" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/forge/tags/items/storage_blocks/zinc.json b/src/datagen/generated/cosmere/data/forge/tags/items/storage_blocks/zinc.json new file mode 100644 index 000000000..287b64a07 --- /dev/null +++ b/src/datagen/generated/cosmere/data/forge/tags/items/storage_blocks/zinc.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:zinc_block" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/minecraft/advancements/recipes/decorations/copper_ingot.json b/src/datagen/generated/cosmere/data/minecraft/advancements/recipes/decorations/copper_ingot.json new file mode 100644 index 000000000..4e1efc0c7 --- /dev/null +++ b/src/datagen/generated/cosmere/data/minecraft/advancements/recipes/decorations/copper_ingot.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "tag": "forge:nuggets/copper" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "minecraft:copper_ingot" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "minecraft:copper_ingot" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/minecraft/recipes/copper_ingot.json b/src/datagen/generated/cosmere/data/minecraft/recipes/copper_ingot.json new file mode 100644 index 000000000..1d609fd18 --- /dev/null +++ b/src/datagen/generated/cosmere/data/minecraft/recipes/copper_ingot.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "I": { + "tag": "forge:nuggets/copper" + }, + "J": { + "item": "cosmere:copper_nugget" + } + }, + "pattern": [ + "III", + "IJI", + "III" + ], + "result": { + "item": "minecraft:copper_ingot" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/minecraft/tags/blocks/beacon_base_blocks.json b/src/datagen/generated/cosmere/data/minecraft/tags/blocks/beacon_base_blocks.json new file mode 100644 index 000000000..64451809c --- /dev/null +++ b/src/datagen/generated/cosmere/data/minecraft/tags/blocks/beacon_base_blocks.json @@ -0,0 +1,25 @@ +{ + "values": [ + "#forge:storage_blocks/steel", + "#forge:storage_blocks/tin", + "#forge:storage_blocks/pewter", + "#forge:storage_blocks/zinc", + "#forge:storage_blocks/brass", + "#forge:storage_blocks/bronze", + "#forge:storage_blocks/aluminum", + "#forge:storage_blocks/duralumin", + "#forge:storage_blocks/chromium", + "#forge:storage_blocks/nicrosil", + "#forge:storage_blocks/cadmium", + "#forge:storage_blocks/bendalloy", + "#forge:storage_blocks/electrum", + "#forge:storage_blocks/atium", + "#forge:storage_blocks/lerasium", + "#forge:storage_blocks/harmonium", + "#forge:storage_blocks/malatium", + "#forge:storage_blocks/lerasatium", + "#forge:storage_blocks/nickel", + "#forge:storage_blocks/lead", + "#forge:storage_blocks/silver" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/minecraft/tags/blocks/mineable/axe.json b/src/datagen/generated/cosmere/data/minecraft/tags/blocks/mineable/axe.json new file mode 100644 index 000000000..8b659889c --- /dev/null +++ b/src/datagen/generated/cosmere/data/minecraft/tags/blocks/mineable/axe.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:metalworking_table" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/minecraft/tags/blocks/mineable/pickaxe.json b/src/datagen/generated/cosmere/data/minecraft/tags/blocks/mineable/pickaxe.json new file mode 100644 index 000000000..b61dd98b9 --- /dev/null +++ b/src/datagen/generated/cosmere/data/minecraft/tags/blocks/mineable/pickaxe.json @@ -0,0 +1,41 @@ +{ + "values": [ + "cosmere:steel_block", + "cosmere:tin_block", + "cosmere:pewter_block", + "cosmere:zinc_block", + "cosmere:brass_block", + "cosmere:bronze_block", + "cosmere:aluminum_block", + "cosmere:duralumin_block", + "cosmere:chromium_block", + "cosmere:nicrosil_block", + "cosmere:cadmium_block", + "cosmere:bendalloy_block", + "cosmere:electrum_block", + "cosmere:atium_block", + "cosmere:lerasium_block", + "cosmere:harmonium_block", + "cosmere:malatium_block", + "cosmere:lerasatium_block", + "cosmere:nickel_block", + "cosmere:lead_block", + "cosmere:silver_block", + "cosmere:tin_ore", + "cosmere:deepslate_tin_ore", + "cosmere:zinc_ore", + "cosmere:deepslate_zinc_ore", + "cosmere:aluminum_ore", + "cosmere:deepslate_aluminum_ore", + "cosmere:chromium_ore", + "cosmere:deepslate_chromium_ore", + "cosmere:cadmium_ore", + "cosmere:deepslate_cadmium_ore", + "cosmere:nickel_ore", + "cosmere:deepslate_nickel_ore", + "cosmere:silver_ore", + "cosmere:deepslate_silver_ore", + "cosmere:lead_ore", + "cosmere:deepslate_lead_ore" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/minecraft/tags/blocks/needs_iron_tool.json b/src/datagen/generated/cosmere/data/minecraft/tags/blocks/needs_iron_tool.json new file mode 100644 index 000000000..7990f58df --- /dev/null +++ b/src/datagen/generated/cosmere/data/minecraft/tags/blocks/needs_iron_tool.json @@ -0,0 +1,33 @@ +{ + "values": [ + "cosmere:steel_block", + "cosmere:tin_block", + "cosmere:pewter_block", + "cosmere:zinc_block", + "cosmere:brass_block", + "cosmere:bronze_block", + "cosmere:aluminum_block", + "cosmere:duralumin_block", + "cosmere:chromium_block", + "cosmere:nicrosil_block", + "cosmere:cadmium_block", + "cosmere:bendalloy_block", + "cosmere:electrum_block", + "cosmere:atium_block", + "cosmere:lerasium_block", + "cosmere:harmonium_block", + "cosmere:malatium_block", + "cosmere:lerasatium_block", + "cosmere:nickel_block", + "cosmere:lead_block", + "cosmere:silver_block", + "cosmere:deepslate_tin_ore", + "cosmere:deepslate_zinc_ore", + "cosmere:deepslate_aluminum_ore", + "cosmere:deepslate_chromium_ore", + "cosmere:deepslate_cadmium_ore", + "cosmere:deepslate_nickel_ore", + "cosmere:deepslate_silver_ore", + "cosmere:deepslate_lead_ore" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/minecraft/tags/blocks/needs_stone_tool.json b/src/datagen/generated/cosmere/data/minecraft/tags/blocks/needs_stone_tool.json new file mode 100644 index 000000000..e5a091497 --- /dev/null +++ b/src/datagen/generated/cosmere/data/minecraft/tags/blocks/needs_stone_tool.json @@ -0,0 +1,13 @@ +{ + "values": [ + "cosmere:metalworking_table", + "cosmere:tin_ore", + "cosmere:zinc_ore", + "cosmere:aluminum_ore", + "cosmere:chromium_ore", + "cosmere:cadmium_ore", + "cosmere:nickel_ore", + "cosmere:silver_ore", + "cosmere:lead_ore" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/minecraft/tags/game_events/vibrations.json b/src/datagen/generated/cosmere/data/minecraft/tags/game_events/vibrations.json new file mode 100644 index 000000000..87cc73933 --- /dev/null +++ b/src/datagen/generated/cosmere/data/minecraft/tags/game_events/vibrations.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:kinetic_investiture" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmere/data/minecraft/tags/game_events/warden_can_listen.json b/src/datagen/generated/cosmere/data/minecraft/tags/game_events/warden_can_listen.json new file mode 100644 index 000000000..87cc73933 --- /dev/null +++ b/src/datagen/generated/cosmere/data/minecraft/tags/game_events/warden_can_listen.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:kinetic_investiture" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/.cache/0091ba631176854276c2a1c4a58a7dfb77cb24a4 b/src/datagen/generated/cosmeretools/.cache/0091ba631176854276c2a1c4a58a7dfb77cb24a4 new file mode 100644 index 000000000..f8dc57bd8 --- /dev/null +++ b/src/datagen/generated/cosmeretools/.cache/0091ba631176854276c2a1c4a58a7dfb77cb24a4 @@ -0,0 +1,3 @@ +// 1.20.1 2024-10-10T13:01:59.1710912 Tools PatchouliGeneration +821147cb62ce79213665275e84b8454922bb2209 assets/cosmere/patchouli_books/guide/en_us/categories/tools.json +21c4777db7ffca2bf8762b7f4eb91d8bd84f7c08 assets/cosmere/patchouli_books/guide/en_us/entries/tools/tools_basics.json diff --git a/src/datagen/generated/cosmeretools/.cache/59eb3dbb5f86130e09b3c62d89b9525ee01cf52d b/src/datagen/generated/cosmeretools/.cache/59eb3dbb5f86130e09b3c62d89b9525ee01cf52d new file mode 100644 index 000000000..152c709dc --- /dev/null +++ b/src/datagen/generated/cosmeretools/.cache/59eb3dbb5f86130e09b3c62d89b9525ee01cf52d @@ -0,0 +1 @@ +// 1.20.1 2024-10-09T13:22:13.220748 Loot Tables diff --git a/src/datagen/generated/cosmeretools/.cache/9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e b/src/datagen/generated/cosmeretools/.cache/9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e new file mode 100644 index 000000000..ac4987808 --- /dev/null +++ b/src/datagen/generated/cosmeretools/.cache/9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e @@ -0,0 +1,397 @@ +// 1.20.1 2024-11-04T19:09:38.4260348 Recipes +48956c54a7651ad4f7128120d765291c03b8b8b2 data/cosmeretools/advancements/recipes/combat/aluminum_boots.json +ac52d3bd0ffcf53003915d2dd4817b58d92aeff9 data/cosmeretools/advancements/recipes/combat/aluminum_chestplate.json +3afccfbd6ac6f578c0c14b8c68a17607bf9a019a data/cosmeretools/advancements/recipes/combat/aluminum_helmet.json +9318a9028041dd4a322374e48c7125cb5ef3fecd data/cosmeretools/advancements/recipes/combat/aluminum_leggings.json +9fcf755918a45f351a636767682c4f1c8731f6d6 data/cosmeretools/advancements/recipes/combat/aluminum_sword.json +309ff5adf7a1d4afeeb2fc8f970f45e6aa5510ad data/cosmeretools/advancements/recipes/combat/atium_boots.json +86ecaba4732446f83ab8a900f87e4fe18d766dc7 data/cosmeretools/advancements/recipes/combat/atium_chestplate.json +262f154d0e3bfc2e45111bf248cf71a45c60391e data/cosmeretools/advancements/recipes/combat/atium_helmet.json +f14b299119b3f5d7194992d8a2de239aff0037f7 data/cosmeretools/advancements/recipes/combat/atium_leggings.json +52313660c1b96304904814c112253db7a245ceeb data/cosmeretools/advancements/recipes/combat/atium_sword.json +3edee0a03c249674b421d3fb8e8deefd8bb78bbd data/cosmeretools/advancements/recipes/combat/bendalloy_boots.json +dcfd764c815e5a55636d5331f958d64381d3bc6b data/cosmeretools/advancements/recipes/combat/bendalloy_chestplate.json +e84a30fb66a0592732deaa506f3cfed2bece5b78 data/cosmeretools/advancements/recipes/combat/bendalloy_helmet.json +4cc636861e7db9fd14f60896866580e27711a70f data/cosmeretools/advancements/recipes/combat/bendalloy_leggings.json +10affdb5bcf1cf5dcc804eea660a75129f8e96ee data/cosmeretools/advancements/recipes/combat/bendalloy_sword.json +a0548da0d898387655258756068a855460d92075 data/cosmeretools/advancements/recipes/combat/brass_boots.json +76c96d0da9b9268932ad5dd2ccbb0b926e084404 data/cosmeretools/advancements/recipes/combat/brass_chestplate.json +f03dc0512d67f6b78ded094850ec718eeadafcca data/cosmeretools/advancements/recipes/combat/brass_helmet.json +b0d0d34b752a1afb5649310c41bac87fd20abd4f data/cosmeretools/advancements/recipes/combat/brass_leggings.json +71a2b3ad721ca215fcfe3e16489461c78f979fcc data/cosmeretools/advancements/recipes/combat/brass_sword.json +7fdcde3825c95c69f8f605f3ba26eec51faf83d1 data/cosmeretools/advancements/recipes/combat/bronze_boots.json +ebbd0d59b9e63dd367eb521c492e8a5c80eb3bf1 data/cosmeretools/advancements/recipes/combat/bronze_chestplate.json +056547e26036064035ac83dac599bc7acc1d0210 data/cosmeretools/advancements/recipes/combat/bronze_helmet.json +ebb1a83c0d94cdc7144d3f9175f55eb54d7775e5 data/cosmeretools/advancements/recipes/combat/bronze_leggings.json +8ac255825bde8aca80e2e5d4bbbf3ba6a6683728 data/cosmeretools/advancements/recipes/combat/bronze_sword.json +6541953d93ef5cf3f2568215720e4a8ba859e31c data/cosmeretools/advancements/recipes/combat/cadmium_boots.json +2473c6ba865d31c67c1c6b587a01c4bb5817909b data/cosmeretools/advancements/recipes/combat/cadmium_chestplate.json +dde257b42689baf6be1b51d97ffe8b85a49c26b9 data/cosmeretools/advancements/recipes/combat/cadmium_helmet.json +70234b098fee1572daa55c24194563f997b6fab2 data/cosmeretools/advancements/recipes/combat/cadmium_leggings.json +f0fbe4c6b66e80d5374b60d05ebcbd591ccb7c57 data/cosmeretools/advancements/recipes/combat/cadmium_sword.json +3b9fd6cc17a133dfb59e4d234e217575a9b5c5a1 data/cosmeretools/advancements/recipes/combat/chromium_boots.json +1abc133cd4770c03f40f92690d32b45372c21fad data/cosmeretools/advancements/recipes/combat/chromium_chestplate.json +1c6cad0c351727364dfdc8d00289501140439b75 data/cosmeretools/advancements/recipes/combat/chromium_helmet.json +3408d5fd9561737360ae4125ec2c2f17f0de67c9 data/cosmeretools/advancements/recipes/combat/chromium_leggings.json +7e69236db18de3fb4c633db40ecf19ee7c528c8f data/cosmeretools/advancements/recipes/combat/chromium_sword.json +7c5c9e0579b83973a96ab190ba2864a72a6e61cf data/cosmeretools/advancements/recipes/combat/copper_boots.json +608d6ea1b5e998ab36a9d4900951059fe4a6140f data/cosmeretools/advancements/recipes/combat/copper_chestplate.json +3ea787e22c972b35c43d71b370bbb39bb5112da0 data/cosmeretools/advancements/recipes/combat/copper_helmet.json +f1d6b1dc3b6197d080d865f696e9c356f5e1a717 data/cosmeretools/advancements/recipes/combat/copper_leggings.json +bc534732bc3a64374455d00b8a81092f35f1d653 data/cosmeretools/advancements/recipes/combat/copper_sword.json +def16d97d81b91f7ed99e2fe5a113a83d5ff6c32 data/cosmeretools/advancements/recipes/combat/duralumin_boots.json +e4a93be9b4adfc050462dd17a52d75004c753f0e data/cosmeretools/advancements/recipes/combat/duralumin_chestplate.json +59b2f8e54ffe6547e94aabfa3e710caf66a0e8f4 data/cosmeretools/advancements/recipes/combat/duralumin_helmet.json +70fd5ec4e5ad0796f33bcaad9d7ba0ec067769ed data/cosmeretools/advancements/recipes/combat/duralumin_leggings.json +d970dfc6d0a5c7a0815d88cda194dc3a1687a050 data/cosmeretools/advancements/recipes/combat/duralumin_sword.json +df1f94480d3919e519adc72d26991f580826be2e data/cosmeretools/advancements/recipes/combat/electrum_boots.json +a1480134ecb48a20503ffafa62a627372740d91b data/cosmeretools/advancements/recipes/combat/electrum_chestplate.json +ec7517351398abcb707afa2a7d34f7a7286bec6f data/cosmeretools/advancements/recipes/combat/electrum_helmet.json +9962f390abd53f8b49212137fbfaa2d31ded5229 data/cosmeretools/advancements/recipes/combat/electrum_leggings.json +c065b1bf3033681f5a06457f1516aa0b22f01f00 data/cosmeretools/advancements/recipes/combat/electrum_sword.json +16c27775db455f30abd59ca6b904f93dbd8f4227 data/cosmeretools/advancements/recipes/combat/harmonium_boots.json +9b5a4f72dd7b4497c7ed2d1105a4e67f0f2b65e5 data/cosmeretools/advancements/recipes/combat/harmonium_chestplate.json +d434ba2e7a292062e7c93f0ab4a17edec1a7f383 data/cosmeretools/advancements/recipes/combat/harmonium_helmet.json +a6ee5899d24e18adcf007f4159d880cc86e068ab data/cosmeretools/advancements/recipes/combat/harmonium_leggings.json +43fae46ccdfc59cabf58ed61c229bfcec28165f0 data/cosmeretools/advancements/recipes/combat/harmonium_sword.json +a9b721eeb0a80d226eb3525f1702dc97c11930e9 data/cosmeretools/advancements/recipes/combat/lead_boots.json +450fa1670050f9da31d0d427d6bc522a3c180339 data/cosmeretools/advancements/recipes/combat/lead_chestplate.json +05f92cf238731dbed0de8203fc69e9b220d21a53 data/cosmeretools/advancements/recipes/combat/lead_helmet.json +cb6b0e5a4145b220426cf01b197f7b8006483cf4 data/cosmeretools/advancements/recipes/combat/lead_leggings.json +db2be6585769b681071a54a339ac3c0555bb0186 data/cosmeretools/advancements/recipes/combat/lead_sword.json +c0e7cb2be85121d785b85148ca3926350bcbe992 data/cosmeretools/advancements/recipes/combat/lerasatium_boots.json +a8c1f44a6eadb9baa813d7616236df84b0624f08 data/cosmeretools/advancements/recipes/combat/lerasatium_chestplate.json +3c0fc8db83e074e7b4e086422f1c04cad193fbc3 data/cosmeretools/advancements/recipes/combat/lerasatium_helmet.json +0963bcc97657207fbc9649c7fe129a0737de8fa8 data/cosmeretools/advancements/recipes/combat/lerasatium_leggings.json +7b62a7b2def0a781116bb96046fa402d00c956cf data/cosmeretools/advancements/recipes/combat/lerasatium_sword.json +9ecdd35240016275b879712ee29d9ed01e0aa559 data/cosmeretools/advancements/recipes/combat/lerasium_boots.json +4719fa3e84785d9cbddf7db8844b0143001f9dbb data/cosmeretools/advancements/recipes/combat/lerasium_chestplate.json +d55e098728d2e2bf806a0f0002887546a73d1bbd data/cosmeretools/advancements/recipes/combat/lerasium_helmet.json +ff1bfa945190a7a5ffc5619d61e5843eee9d9922 data/cosmeretools/advancements/recipes/combat/lerasium_leggings.json +4f2fe4e8618a3380b5f41cad4a966aa1924be594 data/cosmeretools/advancements/recipes/combat/lerasium_sword.json +ed18f266a1f591bcab83b35aaae47d9608e741b4 data/cosmeretools/advancements/recipes/combat/malatium_boots.json +255ae7d0ccf7f781024173eca7bd3ddbfbc7a693 data/cosmeretools/advancements/recipes/combat/malatium_chestplate.json +d40985dd39fe8901c16e34eb9a9aee1decccc76e data/cosmeretools/advancements/recipes/combat/malatium_helmet.json +c95b698fc71af587cdf55f6428a812fe856dced1 data/cosmeretools/advancements/recipes/combat/malatium_leggings.json +bd63d44f264181013f92a0ae4e6df75f95034b5e data/cosmeretools/advancements/recipes/combat/malatium_sword.json +4148204261e3c7091ee7c04544174920c726bc68 data/cosmeretools/advancements/recipes/combat/nickel_boots.json +24219668c78217c52458a9a2809a65f57c2901f6 data/cosmeretools/advancements/recipes/combat/nickel_chestplate.json +b6e8579d0778faa0c406600826e69e8f576585ec data/cosmeretools/advancements/recipes/combat/nickel_helmet.json +7873bbfaea68d8341ad0694dda3d07e36a064d08 data/cosmeretools/advancements/recipes/combat/nickel_leggings.json +c074a4cff0db6ddd798d88c4bef162cf3a43e6cd data/cosmeretools/advancements/recipes/combat/nickel_sword.json +8caa8a2dd022a161d8bcdd6e2bf4cbb051288764 data/cosmeretools/advancements/recipes/combat/nicrosil_boots.json +6cfeee7d7a688828ee5af8cb6788ca824f5c638e data/cosmeretools/advancements/recipes/combat/nicrosil_chestplate.json +8a6af33e5bc01b96a737276ba54842cce62479a5 data/cosmeretools/advancements/recipes/combat/nicrosil_helmet.json +5d8360aea78d0451196403b17bf7de65f96b357f data/cosmeretools/advancements/recipes/combat/nicrosil_leggings.json +c4629ab8906ddb2a7669d0680f720f7b66768ae5 data/cosmeretools/advancements/recipes/combat/nicrosil_sword.json +b392f1fee87ee43a06cacccfd916dc61ee86b148 data/cosmeretools/advancements/recipes/combat/pewter_boots.json +e7e78db28f47168c1a257282c08db7ced6168e83 data/cosmeretools/advancements/recipes/combat/pewter_chestplate.json +487dbfcb60754ad2ddd2ad6e98e5b80f483c9178 data/cosmeretools/advancements/recipes/combat/pewter_helmet.json +9aa3bd63d11ea600959c8b01cd22175305bcc4f7 data/cosmeretools/advancements/recipes/combat/pewter_leggings.json +741bd727514219c0c00cb5d868d8df64f9f9e6e5 data/cosmeretools/advancements/recipes/combat/pewter_sword.json +7fe170142578e159514124ccfcb5352047220f2b data/cosmeretools/advancements/recipes/combat/silver_boots.json +18ad476b66ee52a89f5f8ddc8d2762fd674b0d9f data/cosmeretools/advancements/recipes/combat/silver_chestplate.json +889d0cab75f16c122abaed5ad3f2d6a34c417875 data/cosmeretools/advancements/recipes/combat/silver_helmet.json +75f9adc51c36f3524ccb06e5157813e6e98635ed data/cosmeretools/advancements/recipes/combat/silver_leggings.json +8f4376ca199c8197e06b9dc000723c598e451dd3 data/cosmeretools/advancements/recipes/combat/silver_sword.json +3a8370ab08ae5bf13dffe8f6346346f0b44f522b data/cosmeretools/advancements/recipes/combat/steel_boots.json +cede3b6d42942643621f099fe684f8fa5c4ea8d9 data/cosmeretools/advancements/recipes/combat/steel_chestplate.json +44eb74f181db3400c407b1263e4c9bbcecedd8a3 data/cosmeretools/advancements/recipes/combat/steel_helmet.json +38f778ca84710c1f6d306cd81589a4f4424f1842 data/cosmeretools/advancements/recipes/combat/steel_leggings.json +c61c21afe4e37bd7e2469749837dd13cc5226f37 data/cosmeretools/advancements/recipes/combat/steel_sword.json +0da202c26825d0ea01b123d3c4da0e183f822263 data/cosmeretools/advancements/recipes/combat/tin_boots.json +eb011beba87f6bf040a10a93c3d569fad864dacd data/cosmeretools/advancements/recipes/combat/tin_chestplate.json +478857608925865d961b8a5c750ec6ad1c4a151b data/cosmeretools/advancements/recipes/combat/tin_helmet.json +2cb226598a644bf86a8cdc0d77346c68ab35c5d4 data/cosmeretools/advancements/recipes/combat/tin_leggings.json +5f3e84cc33972074ec05f6aaec6b7c6ebeea95d8 data/cosmeretools/advancements/recipes/combat/tin_sword.json +1db663b83dcd262e84b9e715521ffad581a82d2e data/cosmeretools/advancements/recipes/combat/zinc_boots.json +b7258c3a91def720340326321fecd6bdbdaffd8f data/cosmeretools/advancements/recipes/combat/zinc_chestplate.json +4d34d9b6f670bce2fa1e3159c21d0611d31f4725 data/cosmeretools/advancements/recipes/combat/zinc_helmet.json +fed7e1e94af3176994e7577f369168ddb147f11c data/cosmeretools/advancements/recipes/combat/zinc_leggings.json +cdd71a60b736f771f8c4788cd650e9850863c721 data/cosmeretools/advancements/recipes/combat/zinc_sword.json +3813560d591b48afdb5e7998452b5b14f2ff0249 data/cosmeretools/advancements/recipes/tools/aluminum_axe.json +22266c8d6afc826028abd3095bb386debf829e1e data/cosmeretools/advancements/recipes/tools/aluminum_hoe.json +b886b56ad4081302895c61eda9baea846d6010fa data/cosmeretools/advancements/recipes/tools/aluminum_pickaxe.json +8836abba73b0bd5f8868ff4674263ea0dd9cefca data/cosmeretools/advancements/recipes/tools/aluminum_shovel.json +5fef967690d673d4d40ccc5169ca38ac38fca7a7 data/cosmeretools/advancements/recipes/tools/atium_axe.json +010ce0782c0345d8d75d14000e369ccd4f036dfc data/cosmeretools/advancements/recipes/tools/atium_hoe.json +84cc6cedacd533ff2c12255c5a7c32036b9a74c7 data/cosmeretools/advancements/recipes/tools/atium_pickaxe.json +e3969a05d7401caa935bf282893a10946ed906da data/cosmeretools/advancements/recipes/tools/atium_shovel.json +8efdfa75bb4ee7f784dc0f45b5a36b5c40edd1af data/cosmeretools/advancements/recipes/tools/bendalloy_axe.json +ad924cc814c4de50b23876879883bc2c590cc782 data/cosmeretools/advancements/recipes/tools/bendalloy_hoe.json +0b06891d9525523cc1aa7ba5ac04955e70bed9ad data/cosmeretools/advancements/recipes/tools/bendalloy_pickaxe.json +aa4f2c552d5083e82f0f6a1b74eb6192c31e6910 data/cosmeretools/advancements/recipes/tools/bendalloy_shovel.json +43b4f65a92ff1b1635b812749b52a9850687fef6 data/cosmeretools/advancements/recipes/tools/brass_axe.json +13fc3da4170ad34836f95fdd48c82096baf8ac00 data/cosmeretools/advancements/recipes/tools/brass_hoe.json +85550ea5e191708aaae48e181672bfc6f39ef87f data/cosmeretools/advancements/recipes/tools/brass_pickaxe.json +52e53ae1a8ec1d8046c1cd2cbb2f546792b81bc3 data/cosmeretools/advancements/recipes/tools/brass_shovel.json +dd27ad54f30a12b78bc5bffc369a0bf3656187fd data/cosmeretools/advancements/recipes/tools/bronze_axe.json +3f09f73b6508d0f042ea41625e42b46084d8d3e1 data/cosmeretools/advancements/recipes/tools/bronze_hoe.json +328f0e6e3885535fe1d8c4b374e320b9e3490abb data/cosmeretools/advancements/recipes/tools/bronze_pickaxe.json +c5bd17b359be4f24d592365189b8f7a3b0b9a233 data/cosmeretools/advancements/recipes/tools/bronze_shovel.json +8e27c8a5988dc848adfe351273ed553538730073 data/cosmeretools/advancements/recipes/tools/cadmium_axe.json +14da56003d75ef838c65046d9e0aba5aec525d1f data/cosmeretools/advancements/recipes/tools/cadmium_hoe.json +0bc85a00a5beea7e0b9b288c9bfec08c3ef3db08 data/cosmeretools/advancements/recipes/tools/cadmium_pickaxe.json +b8a33743094833817ebf325de3f24b3abe373a7e data/cosmeretools/advancements/recipes/tools/cadmium_shovel.json +647d6764eb426a074efb983708683b52bdb79abb data/cosmeretools/advancements/recipes/tools/chromium_axe.json +1e4df181c317be8ce0e5aed7e008fee2b5599446 data/cosmeretools/advancements/recipes/tools/chromium_hoe.json +ef067b24ebf525fb01b49d63d825f39458a1fb5f data/cosmeretools/advancements/recipes/tools/chromium_pickaxe.json +d442716b38e62c1ec338a9e588004eec69115b44 data/cosmeretools/advancements/recipes/tools/chromium_shovel.json +c50db3ee76d50860c5d8ec6e5b31bf73d870f973 data/cosmeretools/advancements/recipes/tools/copper_axe.json +5a2d5806a7dc4360bbcd34455ef80a4a3581396e data/cosmeretools/advancements/recipes/tools/copper_hoe.json +b6f7f44210018da0283babf0c965c3e4ef665d4a data/cosmeretools/advancements/recipes/tools/copper_pickaxe.json +1cf8e847989530c478280f9b7e8a29159ddd9dc0 data/cosmeretools/advancements/recipes/tools/copper_shovel.json +04340175a28d6f37ddb5bb0cae60d188ee5e3460 data/cosmeretools/advancements/recipes/tools/duralumin_axe.json +31c2d5e85e892d693a1b8b7fb3c5eaa656c756c0 data/cosmeretools/advancements/recipes/tools/duralumin_hoe.json +afd1980c3f15c45f3e56af0d06e0af901ab3292c data/cosmeretools/advancements/recipes/tools/duralumin_pickaxe.json +e48ff4ee5d743a99597c79ef8e93d981bde792d8 data/cosmeretools/advancements/recipes/tools/duralumin_shovel.json +915e93f879f5dd8ec76391a5fb4fe116032fe839 data/cosmeretools/advancements/recipes/tools/electrum_axe.json +d4d666fa9d3d6614405906cef7b38324ccaa6860 data/cosmeretools/advancements/recipes/tools/electrum_hoe.json +063416ec0f66c8ad4c354e56cc1fd5f02593fa2f data/cosmeretools/advancements/recipes/tools/electrum_pickaxe.json +14ea9d01be102ae7112b3fc728df0cb7e4672b3d data/cosmeretools/advancements/recipes/tools/electrum_shovel.json +fef32b29f04c5800755454ec30a45e238f36c611 data/cosmeretools/advancements/recipes/tools/harmonium_axe.json +9e2743fbd67ffcc5072f8f4feef948a3f9853fa5 data/cosmeretools/advancements/recipes/tools/harmonium_hoe.json +8e0ae6a582e5fe64e400721a867843384d0ca9f0 data/cosmeretools/advancements/recipes/tools/harmonium_pickaxe.json +816b03124169575d2cad91e58691605354f72cd0 data/cosmeretools/advancements/recipes/tools/harmonium_shovel.json +114438f35f4a7300e2e9db8f82267d14c92defaf data/cosmeretools/advancements/recipes/tools/lead_axe.json +e2aed32fbf9260817f7026bf0060dd610a6076e1 data/cosmeretools/advancements/recipes/tools/lead_hoe.json +5154c658d8f523c25d99c3a2a7413ef333debbcd data/cosmeretools/advancements/recipes/tools/lead_pickaxe.json +d1684a1464778fb2953e04db8d0ae721a3ee6f14 data/cosmeretools/advancements/recipes/tools/lead_shovel.json +a806d89a7bc9f8653ec06bf6ac4034a9817a0cfa data/cosmeretools/advancements/recipes/tools/lerasatium_axe.json +fefdd4cdfd8ac57db995952da3bd3645be75d472 data/cosmeretools/advancements/recipes/tools/lerasatium_hoe.json +df66f72c4140f4ef14a0f48a5bf6d4f0b438f528 data/cosmeretools/advancements/recipes/tools/lerasatium_pickaxe.json +a2a9446db2848c6a173009b7e6d167a04d783377 data/cosmeretools/advancements/recipes/tools/lerasatium_shovel.json +88b32af379212490c86e8ee5c16fb5a4532a2489 data/cosmeretools/advancements/recipes/tools/lerasium_axe.json +5f1d566aed6e984ca84d2066148f31629ab20a81 data/cosmeretools/advancements/recipes/tools/lerasium_hoe.json +010ddacb74d6a340d62951ec7a9d2b3475e87d0f data/cosmeretools/advancements/recipes/tools/lerasium_pickaxe.json +3f4a1f9f91735f79cf78124f077819bc36cade81 data/cosmeretools/advancements/recipes/tools/lerasium_shovel.json +191a66963ea2d86cdc3beec1db25bad37c18e0bf data/cosmeretools/advancements/recipes/tools/malatium_axe.json +8951332eee92f048bb87f20ac02c831badbe012e data/cosmeretools/advancements/recipes/tools/malatium_hoe.json +5a26a35401a5fedf6cb6b623d5fde354ebe3da92 data/cosmeretools/advancements/recipes/tools/malatium_pickaxe.json +0ae15256401c68c8ad422c4ad253d78863739125 data/cosmeretools/advancements/recipes/tools/malatium_shovel.json +793ef5866c2ecece2a052da0f73dbdfc8e211862 data/cosmeretools/advancements/recipes/tools/nickel_axe.json +5bdf3394a4ac5bc725d654693423a31c52926301 data/cosmeretools/advancements/recipes/tools/nickel_hoe.json +0844a7259771c6adfe6af36e8e7b7879e644169e data/cosmeretools/advancements/recipes/tools/nickel_pickaxe.json +ac2da7e3bb5248e180f62344841533869f1a73e0 data/cosmeretools/advancements/recipes/tools/nickel_shovel.json +42b0ae93ef961fd811c21b17d870b8dbace730d0 data/cosmeretools/advancements/recipes/tools/nicrosil_axe.json +7d091d08ae2e9ae5177b2a83d1422e0a06306dde data/cosmeretools/advancements/recipes/tools/nicrosil_hoe.json +c1b682927fea6f4643f8a95bdc050b283b0be51d data/cosmeretools/advancements/recipes/tools/nicrosil_pickaxe.json +51ae3f27b9ebe6ba399d137db7766fc41728c744 data/cosmeretools/advancements/recipes/tools/nicrosil_shovel.json +057871969ad6fcbc669cf2890cb04dd98192aa11 data/cosmeretools/advancements/recipes/tools/pewter_axe.json +955bce05592d4d0f6b022b84b8d00bc749ea13ef data/cosmeretools/advancements/recipes/tools/pewter_hoe.json +3b98a5fdb780cc8b77781faa018e004694c5c104 data/cosmeretools/advancements/recipes/tools/pewter_pickaxe.json +7502b4ce223404264710cdb0b901abb046714279 data/cosmeretools/advancements/recipes/tools/pewter_shovel.json +393173aa101f1d9b01a8fa24255a329a450b8632 data/cosmeretools/advancements/recipes/tools/silver_axe.json +f3a6da9ebfbf21fbaf78149ce411648dff9a9fb9 data/cosmeretools/advancements/recipes/tools/silver_hoe.json +e1c95d34ff9360c9c5413cfbe8352c3d8cbd2a1a data/cosmeretools/advancements/recipes/tools/silver_pickaxe.json +16a6d28f7d918b98a651d10e2f09968fba1923aa data/cosmeretools/advancements/recipes/tools/silver_shovel.json +deb12153e1beffc304d2283ab247ae674806e45c data/cosmeretools/advancements/recipes/tools/steel_axe.json +d6b983590c35a270b3805a3cad8ded4f60fb67f4 data/cosmeretools/advancements/recipes/tools/steel_hoe.json +fd5e156a08336c76aaca10b1b9dc57cddfa4397c data/cosmeretools/advancements/recipes/tools/steel_pickaxe.json +9668e5dd3d9232a6c4632a949be94f2e98691606 data/cosmeretools/advancements/recipes/tools/steel_shovel.json +877bfdb440f37c78b1b49aa82a473544480a0ddb data/cosmeretools/advancements/recipes/tools/tin_axe.json +7c0b885ecc9b786faebe4d75130377e525b9b5bd data/cosmeretools/advancements/recipes/tools/tin_hoe.json +e0dc0cbcb3afb43246a282fbc758c51c049af8e9 data/cosmeretools/advancements/recipes/tools/tin_pickaxe.json +ede3e0e9c0ff7a750d0193207cf4d3e28e9a93e8 data/cosmeretools/advancements/recipes/tools/tin_shovel.json +373995c9f1dfe667f803a23ad9fbedc99ae9bc2e data/cosmeretools/advancements/recipes/tools/zinc_axe.json +b83f81a95a504b5f5e4374589e1d9e77dbcbb23a data/cosmeretools/advancements/recipes/tools/zinc_hoe.json +ffcb9d49ac29359eb8fa4710b770b02f4026c1d9 data/cosmeretools/advancements/recipes/tools/zinc_pickaxe.json +9bb4d3d031d514f30fd065143c5497198f27dccf data/cosmeretools/advancements/recipes/tools/zinc_shovel.json +8d3030d4a55342f03ee45e54ba4a5ccbb06032be data/cosmeretools/recipes/aluminum_axe.json +47f443bc2e6cdd5636c4dadf98132148dce9d2b0 data/cosmeretools/recipes/aluminum_boots.json +7deadb39e590f1bbd56b6f2a3649610d06e053cd data/cosmeretools/recipes/aluminum_chestplate.json +3b00b0811438b6837a4b33b1707aacc28ccfb510 data/cosmeretools/recipes/aluminum_helmet.json +923583df69d1f090af76c53e9be0e64feb814548 data/cosmeretools/recipes/aluminum_hoe.json +13ac84f0d72c5e3ec7332876fc47e3882cd3f1b0 data/cosmeretools/recipes/aluminum_leggings.json +c071cbd8d1f0e1a42ceb0c61bedc455f64d11a26 data/cosmeretools/recipes/aluminum_pickaxe.json +a4e26d02a69bb8f2a044b895766b812e01cabfff data/cosmeretools/recipes/aluminum_shovel.json +72b75ccd2d142614d9316072755351e06ff1fca2 data/cosmeretools/recipes/aluminum_sword.json +e2ca5eaf36b085b2211ebb03660b2a830a168aea data/cosmeretools/recipes/atium_axe.json +db6ace334f8d5caf242b2c9444da6ef5986322c8 data/cosmeretools/recipes/atium_boots.json +3ac4d634ef4917b8017bee06c9fb412aee5d7b2e data/cosmeretools/recipes/atium_chestplate.json +2647fc8b2adff4962068c56e4294e4723b2b0367 data/cosmeretools/recipes/atium_helmet.json +3ed6977f2f5b6c8979bb4a4e722525552c56f197 data/cosmeretools/recipes/atium_hoe.json +d5c698264c603933d769e85ca33bd2f26e88d028 data/cosmeretools/recipes/atium_leggings.json +c6666f9f7aa170d2000119db52ccf6b08f6abba9 data/cosmeretools/recipes/atium_pickaxe.json +83098c63e082a9771be2b39e006b76f2e4e56b32 data/cosmeretools/recipes/atium_shovel.json +e395a2a15c5f7bff11c1f31bc397341f37f1a1d1 data/cosmeretools/recipes/atium_sword.json +9c0d0873f34d504b554b0c7bce40d08af22e74cc data/cosmeretools/recipes/bendalloy_axe.json +de1ee988c8136e46dca81cc359da70c644eb0ff0 data/cosmeretools/recipes/bendalloy_boots.json +f0564e0b761d98bc73475f0d0b2eb3a17bfdce78 data/cosmeretools/recipes/bendalloy_chestplate.json +85fe89eaac6006257b1ae0135be61ffe4c78215c data/cosmeretools/recipes/bendalloy_helmet.json +aad3241a3c46a9ed08bee9b5bcef49150ff9a2b0 data/cosmeretools/recipes/bendalloy_hoe.json +18e10b820795eaa51447b0f0b94df010fc36c57e data/cosmeretools/recipes/bendalloy_leggings.json +3f9b68d50407fde961fa85ac2b41e9fc5aad3ea5 data/cosmeretools/recipes/bendalloy_pickaxe.json +d4f9d28930b42635205cdd1d8799e3210254e4d2 data/cosmeretools/recipes/bendalloy_shovel.json +9c107df552d4321d96e2db47afe388eda463b316 data/cosmeretools/recipes/bendalloy_sword.json +5a1a64934a21cfe6d039c4e0ece709a03476e0af data/cosmeretools/recipes/brass_axe.json +84d9d496ecd3a117afef8b46ff0b341ca8839369 data/cosmeretools/recipes/brass_boots.json +6eef0f37ffc5f7d928d98466eeff2a53d6a90352 data/cosmeretools/recipes/brass_chestplate.json +db5d8303ae68eaa0d5fd745cd604ed1b41b4bae4 data/cosmeretools/recipes/brass_helmet.json +2a206e7ad5aaa3bc6fc05e67959e65b87301bfe9 data/cosmeretools/recipes/brass_hoe.json +16a08e5add98715ac560ca2f3169f5f468438774 data/cosmeretools/recipes/brass_leggings.json +8d9413d96ea6bd91ae0439afa01b24d47770d912 data/cosmeretools/recipes/brass_pickaxe.json +1c525aef9efb19ef53eb26dec230fdb41822d3de data/cosmeretools/recipes/brass_shovel.json +f8c2ba918ff5ea713ed9b189386e341b466dd89a data/cosmeretools/recipes/brass_sword.json +0c54db9c45674757848f25b6ec15451813f7117a data/cosmeretools/recipes/bronze_axe.json +803d23ac219323e955bda2f33b9c4747811759d1 data/cosmeretools/recipes/bronze_boots.json +b5268f2430a92cf6bb888b53009e52961c994f14 data/cosmeretools/recipes/bronze_chestplate.json +28e6c2212ce64abc6b59f575b84c2a30e08d9adb data/cosmeretools/recipes/bronze_helmet.json +1711da29ae70321439ea3791b31fced9eb7cc3bb data/cosmeretools/recipes/bronze_hoe.json +b3b71645a1c673c58136dae3cf9cabb219e6ba3a data/cosmeretools/recipes/bronze_leggings.json +0264780f73efe51a40d26a5cc5c967ccf9f1f01a data/cosmeretools/recipes/bronze_pickaxe.json +071893a21eba818f329080d3be58704e4892a1d7 data/cosmeretools/recipes/bronze_shovel.json +a00a0b39dba7010b5ee03bdc1b48e257286ac6b3 data/cosmeretools/recipes/bronze_sword.json +dabc8292a19198cf53fd87fa2c0e6abdf2d329e6 data/cosmeretools/recipes/cadmium_axe.json +367b84801df354a3d04852d467c3351825ee61e4 data/cosmeretools/recipes/cadmium_boots.json +085cf4dba04c5a9b0f6af61e78c23cef99521823 data/cosmeretools/recipes/cadmium_chestplate.json +4f4780ded27c127835f601ade188a140ee6c2b09 data/cosmeretools/recipes/cadmium_helmet.json +244a6b21f5c06f290252b9eed3cdb278140cf132 data/cosmeretools/recipes/cadmium_hoe.json +b86b7b7d47100114fff912ac93c00c9481bc6010 data/cosmeretools/recipes/cadmium_leggings.json +e9421b55d0c21fdd6a50599d6448667741adcb35 data/cosmeretools/recipes/cadmium_pickaxe.json +21b684087b7f706e7441aa6acfb56b694592c93f data/cosmeretools/recipes/cadmium_shovel.json +8021caad068b7c787e36b8ee665375a20ce5b542 data/cosmeretools/recipes/cadmium_sword.json +ff950e52ecd55d40728b1c661cce93ccff9f236e data/cosmeretools/recipes/chromium_axe.json +5c0c7f26021b4f94ebc8f0e160407255a0a0ba1f data/cosmeretools/recipes/chromium_boots.json +46f697df4e5887dd6bba21819171bbc2983c3b61 data/cosmeretools/recipes/chromium_chestplate.json +b949fed858f731ca7499d1499f1296cbdcb68fbe data/cosmeretools/recipes/chromium_helmet.json +49b49bfec59eac2b7be57776926df66b88c4d02d data/cosmeretools/recipes/chromium_hoe.json +68b73fa526ae90382cd8ade8692eee0e8f066fbf data/cosmeretools/recipes/chromium_leggings.json +adcbbd81c3d3f7544e01be6e733906eb7f9a9ab0 data/cosmeretools/recipes/chromium_pickaxe.json +814cbd1545b496b51494b83cb412fca018007f85 data/cosmeretools/recipes/chromium_shovel.json +3e748496c6c7992d4a91ce19a810c9c5bcbd0248 data/cosmeretools/recipes/chromium_sword.json +f3d700c0309c205ffb6b04ff16695850d57f2d6d data/cosmeretools/recipes/copper_axe.json +00f7721d7c0b6ad5dd578a8075533ec84bdd544f data/cosmeretools/recipes/copper_boots.json +74b6fe965ef79de562b1853f6dc4d723a8931985 data/cosmeretools/recipes/copper_chestplate.json +5705d6788b0f9abd5ad6fae565777c85eb8a6675 data/cosmeretools/recipes/copper_helmet.json +a5f6ae0d7ab879c4e78bd9e2b9d6f3ed45d11397 data/cosmeretools/recipes/copper_hoe.json +1e4d60ce224c1a89d6495c788bc74cad0f357a39 data/cosmeretools/recipes/copper_leggings.json +02dc5d4fc6180c582d9c80945375d2964c881844 data/cosmeretools/recipes/copper_pickaxe.json +5574df457cddd73b267d590fb1046733fc6df24c data/cosmeretools/recipes/copper_shovel.json +cdb8fad5c1863f01368f5f73ac911b8dd11c4432 data/cosmeretools/recipes/copper_sword.json +b494551be5bb1e676289525eaad59c3ab1a40fc2 data/cosmeretools/recipes/duralumin_axe.json +98a5342a17ee8a8ddd8a7edf566673859615e517 data/cosmeretools/recipes/duralumin_boots.json +1edb16172242839943cb978d6504be75522bc7c4 data/cosmeretools/recipes/duralumin_chestplate.json +504114a721e6562d6b14c489c7a629a35c6656fa data/cosmeretools/recipes/duralumin_helmet.json +57a576eaeaed4addcc1916addbbfd1d5cf080d9f data/cosmeretools/recipes/duralumin_hoe.json +326cbe8d81f358372377f2c2654ad31488bbf7d3 data/cosmeretools/recipes/duralumin_leggings.json +ba541fa12efc3874c0d937b7356fdff6eeb86681 data/cosmeretools/recipes/duralumin_pickaxe.json +3ee54be7e4e43f54abab7d4a90a2f5dc11ec69df data/cosmeretools/recipes/duralumin_shovel.json +6665b72480757e704062ad4e7a664c513c3d6f96 data/cosmeretools/recipes/duralumin_sword.json +ba59f4cbdc545657befa8aed008ebcf78b4709c4 data/cosmeretools/recipes/electrum_axe.json +1ffcd415948dffe984820e8fdd8f89bfb030a20b data/cosmeretools/recipes/electrum_boots.json +4e2607bee1001a55ba3a8d19d735ffcd304ef41a data/cosmeretools/recipes/electrum_chestplate.json +4c35e2c962322875ec8f57f068daf9ae4937077d data/cosmeretools/recipes/electrum_helmet.json +5a248941b04df0a04eb8e3f50c81ecae19c8ff2d data/cosmeretools/recipes/electrum_hoe.json +4d3eee1ed99ce06e4bfc8a62e00f4c788d6969fd data/cosmeretools/recipes/electrum_leggings.json +8495d26ca40f2a69c68af53241ab54d4edba81b4 data/cosmeretools/recipes/electrum_pickaxe.json +6b5b81f18e09d2eef57ff4f19de895226affd3d0 data/cosmeretools/recipes/electrum_shovel.json +51f4f927b3426e7ef156732a8c1e2cf07277a0a6 data/cosmeretools/recipes/electrum_sword.json +88f96bb4c2babf773d258ad59d4d8f674ab2a76c data/cosmeretools/recipes/harmonium_axe.json +2266881b51cf782c0672fd708329aad431bbf450 data/cosmeretools/recipes/harmonium_boots.json +2a40376b3cd5149767b1346c0ad1baa758c18d85 data/cosmeretools/recipes/harmonium_chestplate.json +da189a851049d276e69a2b33ab7f9db89348392a data/cosmeretools/recipes/harmonium_helmet.json +2b8397c5ef7c6b201b43b4c15a167ebf93f36740 data/cosmeretools/recipes/harmonium_hoe.json +b9fece1e67df8749633c7b02a1fed750a6cb8146 data/cosmeretools/recipes/harmonium_leggings.json +b610c79acb66743e5688f1db34e080101732316e data/cosmeretools/recipes/harmonium_pickaxe.json +f9ce3fc6fc871d5c1c0689eeab20d47e9f87c749 data/cosmeretools/recipes/harmonium_shovel.json +14fa062f5e41396d09374f420378eb862cb827b2 data/cosmeretools/recipes/harmonium_sword.json +069a4023c216c1f2a201760cc7ea6f32f29abb54 data/cosmeretools/recipes/lead_axe.json +a1d4f014f0d3fb105f13de7271aebf2195d45789 data/cosmeretools/recipes/lead_boots.json +c7f61add99e329a440f49c99a9dcfa7ae016a162 data/cosmeretools/recipes/lead_chestplate.json +b2e485708e5a64803e916418015976f8b191d67b data/cosmeretools/recipes/lead_helmet.json +d54138691885fc08a747292beafa2b8761650054 data/cosmeretools/recipes/lead_hoe.json +17c42a1b0860ef9f8932200a031bf24638050c65 data/cosmeretools/recipes/lead_leggings.json +bae40b43029c05d9144f5b51d447faadb18cbd77 data/cosmeretools/recipes/lead_pickaxe.json +08bdc9728e6837923d19225c7e4e4decc675ac73 data/cosmeretools/recipes/lead_shovel.json +0fe771471523ec7cd6631ea0dca52f914bd8f047 data/cosmeretools/recipes/lead_sword.json +46d418f43ae882eadbcb758772d8135fdc62cda9 data/cosmeretools/recipes/lerasatium_axe.json +dfde0a029d645d7243990470b2dd24465f056f21 data/cosmeretools/recipes/lerasatium_boots.json +3c8414a96fb0036116cd9ddd8a401dbd3510e745 data/cosmeretools/recipes/lerasatium_chestplate.json +12deb860878859a5ab9069f61cb4069320b2d375 data/cosmeretools/recipes/lerasatium_helmet.json +d44e2eec5bff140b3880887105200f6de55edef1 data/cosmeretools/recipes/lerasatium_hoe.json +e93f2d31e2f4603abc4dbcff722e90d80de8cddf data/cosmeretools/recipes/lerasatium_leggings.json +12d1775aae28383c2b8a23ed834380ad35321808 data/cosmeretools/recipes/lerasatium_pickaxe.json +9e607a818ea5a9aa45a0e59ecc6bf55c33ec6fd6 data/cosmeretools/recipes/lerasatium_shovel.json +8055dc95bcc0e160ca15f9c0938c1db404ddfd2a data/cosmeretools/recipes/lerasatium_sword.json +0f93e5eb0123eac25f51d582c99f61de2fd21671 data/cosmeretools/recipes/lerasium_axe.json +502053bc352f6e9d04912c411e76a0284de18c59 data/cosmeretools/recipes/lerasium_boots.json +9127357322d4a206d377b1ae60a6e8b2ff82fbaf data/cosmeretools/recipes/lerasium_chestplate.json +02e03d879d51e7d2d9ed79ef3ee60c9f03220631 data/cosmeretools/recipes/lerasium_helmet.json +f4c5cfb5529ba50e543040dec4ead99b3f2e30a3 data/cosmeretools/recipes/lerasium_hoe.json +ba3986bf12a952c07b8050189fc31c9c3dee800a data/cosmeretools/recipes/lerasium_leggings.json +17a499826cbede26d9c01f620b68ab4944dd364d data/cosmeretools/recipes/lerasium_pickaxe.json +59eefd2d8c4a2ebadf96c1d64eb19757b503d0ce data/cosmeretools/recipes/lerasium_shovel.json +7c3b62e5dba8a7760aed8b2029ef019d667d8c48 data/cosmeretools/recipes/lerasium_sword.json +b240f2f8e2c3922317dbbc214308382558b0ac2d data/cosmeretools/recipes/malatium_axe.json +23c3aa2de8a69774db54ec273eb9d1c163bbcbeb data/cosmeretools/recipes/malatium_boots.json +000a3f4bef415008a075e8adbd448d7bec6ca42c data/cosmeretools/recipes/malatium_chestplate.json +f1d056f781eca17c8c61a99bbe617108f5ff3821 data/cosmeretools/recipes/malatium_helmet.json +608f690d38f9b753c0e6213804f65a2563641228 data/cosmeretools/recipes/malatium_hoe.json +43d9c5d0c5d328fed8e39653b9f60eda9fa866a5 data/cosmeretools/recipes/malatium_leggings.json +c1e3139888dc4939220f2511512e58eb16bf31b6 data/cosmeretools/recipes/malatium_pickaxe.json +2adfa5dcc438cb90df49853f3894aafb602943da data/cosmeretools/recipes/malatium_shovel.json +9f6e747f99ad340c1e2cae32f5891d0bccd5720b data/cosmeretools/recipes/malatium_sword.json +4e44125b20474f504404310d18d3101cc2b8b819 data/cosmeretools/recipes/nickel_axe.json +cc81d86552011647fed9e4f9bcbb9d6ab7f07c62 data/cosmeretools/recipes/nickel_boots.json +53eccd47a7a9f39255eb0e10d83e57eeb1a7de24 data/cosmeretools/recipes/nickel_chestplate.json +44c6959bd04e4c5d664600e05d18613a2162faf4 data/cosmeretools/recipes/nickel_helmet.json +78e3ac3076a907d5351f0b3252cd267f5263dc97 data/cosmeretools/recipes/nickel_hoe.json +55621684498257d51a3e317c51fcd74355098343 data/cosmeretools/recipes/nickel_leggings.json +e2d8fc9129265e1c692a4b2c1fef3dea78916e4e data/cosmeretools/recipes/nickel_pickaxe.json +d489702cbeccd87af54e62cb9fd87cf7cb8649e7 data/cosmeretools/recipes/nickel_shovel.json +2926b0893d809177e52353f9cc24976fe0aa5c19 data/cosmeretools/recipes/nickel_sword.json +5a4410cd60aab4d598a8957a4c25c56a09df48d8 data/cosmeretools/recipes/nicrosil_axe.json +8cde36e0473a840cae036aaa8f533eb890d15f19 data/cosmeretools/recipes/nicrosil_boots.json +78a7f7068ae6ae652c7e0d33e49af96a92cfd69f data/cosmeretools/recipes/nicrosil_chestplate.json +b67b740a7e465472aba3849303088a988510904e data/cosmeretools/recipes/nicrosil_helmet.json +e0e1779a66625619219a4b03c9ad6cfaa01b32ed data/cosmeretools/recipes/nicrosil_hoe.json +b2bc257f9bcb57867dd8fe4166ec9a55b33c335e data/cosmeretools/recipes/nicrosil_leggings.json +2bcbf12b6804c5eea6d802f1905dfa0e872fe9e4 data/cosmeretools/recipes/nicrosil_pickaxe.json +280183859be2a0a3eb30e117d8329363fe24d7f9 data/cosmeretools/recipes/nicrosil_shovel.json +73d934d39387f4c56e4bb74908fd9f950da5a203 data/cosmeretools/recipes/nicrosil_sword.json +d5a3efe28e98284e29d7542b3eba173bdcd37026 data/cosmeretools/recipes/pewter_axe.json +7f4f7dc067a80c8c870325698828cd0f78c787d3 data/cosmeretools/recipes/pewter_boots.json +1ad8f34ada575e3a82d6d787437787f370d42343 data/cosmeretools/recipes/pewter_chestplate.json +7b93ca1bbd312b6d66ffe917cf3cd7db08caacad data/cosmeretools/recipes/pewter_helmet.json +cf98cf976316307f627d16e783a27381518f564c data/cosmeretools/recipes/pewter_hoe.json +08f2160c1c644f86d7137a3580e3e4302457e02e data/cosmeretools/recipes/pewter_leggings.json +ec3d940f49799bf738869697baa7c6865a0ed8f2 data/cosmeretools/recipes/pewter_pickaxe.json +f378480ca56ac75679f942a4946d4a5c81096234 data/cosmeretools/recipes/pewter_shovel.json +16f7edb15b25dbef88ab19ee1945c9e8bf75a0b2 data/cosmeretools/recipes/pewter_sword.json +eeba05d48ae82c4cb61a58ad762dc5f697ffe9a1 data/cosmeretools/recipes/silver_axe.json +4d3927a5557e5867688fce1baab3268be4164909 data/cosmeretools/recipes/silver_boots.json +59642f6c0e0fd57d4f108abe84289c6259c2364b data/cosmeretools/recipes/silver_chestplate.json +b52270674d1cb2e9e818ba9432c7d0d8de0ce1a0 data/cosmeretools/recipes/silver_helmet.json +146da8a4b72c777740716569e511fbab60332067 data/cosmeretools/recipes/silver_hoe.json +e0faedada23fcbb2216cf580da0f0d511665502b data/cosmeretools/recipes/silver_leggings.json +d0ff7e88e402812da5de28f1ba90a5dfda695274 data/cosmeretools/recipes/silver_pickaxe.json +fa3cb0403071f978da7e37b7d3429cffbd608bea data/cosmeretools/recipes/silver_shovel.json +317445892e6cba559c829a534008d75bb21b1600 data/cosmeretools/recipes/silver_sword.json +6d3f0c056c9873d74d055c2dd8bf45d8e67585d4 data/cosmeretools/recipes/steel_axe.json +64a6486250c48164e6acc06453760a458f50e40c data/cosmeretools/recipes/steel_boots.json +170e3e77f8364911ef3011c5c6654d28101e1da2 data/cosmeretools/recipes/steel_chestplate.json +8a2596e7de65ab5360afd40936a3a73cec99e7ce data/cosmeretools/recipes/steel_helmet.json +490c5218df59cca6b98ae2f90c0c8c37aaf632c3 data/cosmeretools/recipes/steel_hoe.json +54f6846a17917fb4fa8cb7ac2ea08de76536892f data/cosmeretools/recipes/steel_leggings.json +d027df49cc1b3643ec18693e6deaa5394ecec2f1 data/cosmeretools/recipes/steel_pickaxe.json +057aa3a251fbb6e1e5335b91f113276ddf45be0e data/cosmeretools/recipes/steel_shovel.json +04755e8ebfe12fa5fb9befd1bf429f0932e03e87 data/cosmeretools/recipes/steel_sword.json +a676ee20e8c09fa0c68ff6736bc7d8707439ca07 data/cosmeretools/recipes/tin_axe.json +7d21efa2bccb39dbaf838da117fa43b04fc32e90 data/cosmeretools/recipes/tin_boots.json +488e68d53a7555f0e6a282852308cf7014fa7cda data/cosmeretools/recipes/tin_chestplate.json +93b10e57fbbef4f2dc832b0410f75d6edee903f6 data/cosmeretools/recipes/tin_helmet.json +e2da12b54e054d90ea933e9a1f1b81832a022195 data/cosmeretools/recipes/tin_hoe.json +5c7cf0c67f8fb4e2dfc4fc9ab44eca22d2330b0f data/cosmeretools/recipes/tin_leggings.json +d3359c5e3e0187445d65ea3cffad0666a249cf0d data/cosmeretools/recipes/tin_pickaxe.json +fb6389731995f93df4549603239c3a139fbb0e42 data/cosmeretools/recipes/tin_shovel.json +f7111f824d50b76f043bd2e699de61b5c5edcba9 data/cosmeretools/recipes/tin_sword.json +c481fae51fbc68035a69e85a5d737bb54510640b data/cosmeretools/recipes/zinc_axe.json +d889a93e5b0f5806c5e3a5d0d056ce8cf4225f34 data/cosmeretools/recipes/zinc_boots.json +3c49d91811a2dd64454a766a7bececd33f4fbf24 data/cosmeretools/recipes/zinc_chestplate.json +35c3b39a6d32459e098859fcfc176b996b39bb57 data/cosmeretools/recipes/zinc_helmet.json +8368535c9fab6e30f7c0ca98a002efd7b5d737af data/cosmeretools/recipes/zinc_hoe.json +395de3df01e261ecbb2106a1475a5ab0a87993c4 data/cosmeretools/recipes/zinc_leggings.json +85169a3ff7d9e1bd3676e7de0404110c301373bc data/cosmeretools/recipes/zinc_pickaxe.json +25fd54c42a0d8194e56bdf11de87c7728d3c0827 data/cosmeretools/recipes/zinc_shovel.json +3ecfd4ae20e0fb16620fbe196617993a853a142d data/cosmeretools/recipes/zinc_sword.json diff --git a/src/datagen/generated/cosmeretools/.cache/c622617f6fabf890a00b9275cd5f643584a8a2c8 b/src/datagen/generated/cosmeretools/.cache/c622617f6fabf890a00b9275cd5f643584a8a2c8 new file mode 100644 index 000000000..3b074ce89 --- /dev/null +++ b/src/datagen/generated/cosmeretools/.cache/c622617f6fabf890a00b9275cd5f643584a8a2c8 @@ -0,0 +1,2 @@ +// 1.20.1 2024-11-04T19:03:34.6221485 Languages: en_us +8d1dc9fb8d0ada62d1e2c55c6be7cf8e82a460cd assets/cosmeretools/lang/en_us.json diff --git a/src/datagen/generated/cosmeretools/.cache/dd0552f4815307fa79918bc7fddf7e3ebb5df25c b/src/datagen/generated/cosmeretools/.cache/dd0552f4815307fa79918bc7fddf7e3ebb5df25c new file mode 100644 index 000000000..2214fe6b0 --- /dev/null +++ b/src/datagen/generated/cosmeretools/.cache/dd0552f4815307fa79918bc7fddf7e3ebb5df25c @@ -0,0 +1 @@ +// 1.20.1 2024-10-09T13:22:13.2247512 Tags: cosmeretools diff --git a/src/datagen/generated/cosmeretools/.cache/e97825cad1b7db91061ba52571a61f8715113ce1 b/src/datagen/generated/cosmeretools/.cache/e97825cad1b7db91061ba52571a61f8715113ce1 new file mode 100644 index 000000000..b896765cb --- /dev/null +++ b/src/datagen/generated/cosmeretools/.cache/e97825cad1b7db91061ba52571a61f8715113ce1 @@ -0,0 +1,199 @@ +// 1.20.1 2024-11-04T19:03:34.6190144 Item Models: cosmeretools +9689a584a402d6edb9bb8fcb52769136d5a4443c assets/cosmeretools/models/item/aluminum_axe.json +e5bc83f1ddd7b2aa51f247a6b4df2197190944b9 assets/cosmeretools/models/item/aluminum_boots.json +2fd89eb4599fb537b1d4d0dfb3d12745a3a284fb assets/cosmeretools/models/item/aluminum_chestplate.json +6eb2ba18c03de63577432fc83d40f45789158a87 assets/cosmeretools/models/item/aluminum_helmet.json +8dd52b004f4d5f72251e4bec7f3c6da732c449fb assets/cosmeretools/models/item/aluminum_hoe.json +296901a75ced20e449bbeda919be1dfaecb6adf2 assets/cosmeretools/models/item/aluminum_leggings.json +599449e1485feee42d76048aa888c83b4c597938 assets/cosmeretools/models/item/aluminum_pickaxe.json +4633dc6256594c41148e81271fef572785c7ea53 assets/cosmeretools/models/item/aluminum_shovel.json +ab1fc6ebd254116fb2b217df0173e3650592d746 assets/cosmeretools/models/item/aluminum_sword.json +9689a584a402d6edb9bb8fcb52769136d5a4443c assets/cosmeretools/models/item/atium_axe.json +e5bc83f1ddd7b2aa51f247a6b4df2197190944b9 assets/cosmeretools/models/item/atium_boots.json +2fd89eb4599fb537b1d4d0dfb3d12745a3a284fb assets/cosmeretools/models/item/atium_chestplate.json +6eb2ba18c03de63577432fc83d40f45789158a87 assets/cosmeretools/models/item/atium_helmet.json +8dd52b004f4d5f72251e4bec7f3c6da732c449fb assets/cosmeretools/models/item/atium_hoe.json +296901a75ced20e449bbeda919be1dfaecb6adf2 assets/cosmeretools/models/item/atium_leggings.json +599449e1485feee42d76048aa888c83b4c597938 assets/cosmeretools/models/item/atium_pickaxe.json +4633dc6256594c41148e81271fef572785c7ea53 assets/cosmeretools/models/item/atium_shovel.json +ab1fc6ebd254116fb2b217df0173e3650592d746 assets/cosmeretools/models/item/atium_sword.json +9689a584a402d6edb9bb8fcb52769136d5a4443c assets/cosmeretools/models/item/bendalloy_axe.json +e5bc83f1ddd7b2aa51f247a6b4df2197190944b9 assets/cosmeretools/models/item/bendalloy_boots.json +2fd89eb4599fb537b1d4d0dfb3d12745a3a284fb assets/cosmeretools/models/item/bendalloy_chestplate.json +6eb2ba18c03de63577432fc83d40f45789158a87 assets/cosmeretools/models/item/bendalloy_helmet.json +8dd52b004f4d5f72251e4bec7f3c6da732c449fb assets/cosmeretools/models/item/bendalloy_hoe.json +296901a75ced20e449bbeda919be1dfaecb6adf2 assets/cosmeretools/models/item/bendalloy_leggings.json +599449e1485feee42d76048aa888c83b4c597938 assets/cosmeretools/models/item/bendalloy_pickaxe.json +4633dc6256594c41148e81271fef572785c7ea53 assets/cosmeretools/models/item/bendalloy_shovel.json +ab1fc6ebd254116fb2b217df0173e3650592d746 assets/cosmeretools/models/item/bendalloy_sword.json +9689a584a402d6edb9bb8fcb52769136d5a4443c assets/cosmeretools/models/item/brass_axe.json +e5bc83f1ddd7b2aa51f247a6b4df2197190944b9 assets/cosmeretools/models/item/brass_boots.json +2fd89eb4599fb537b1d4d0dfb3d12745a3a284fb assets/cosmeretools/models/item/brass_chestplate.json +6eb2ba18c03de63577432fc83d40f45789158a87 assets/cosmeretools/models/item/brass_helmet.json +8dd52b004f4d5f72251e4bec7f3c6da732c449fb assets/cosmeretools/models/item/brass_hoe.json +296901a75ced20e449bbeda919be1dfaecb6adf2 assets/cosmeretools/models/item/brass_leggings.json +599449e1485feee42d76048aa888c83b4c597938 assets/cosmeretools/models/item/brass_pickaxe.json +4633dc6256594c41148e81271fef572785c7ea53 assets/cosmeretools/models/item/brass_shovel.json +ab1fc6ebd254116fb2b217df0173e3650592d746 assets/cosmeretools/models/item/brass_sword.json +9689a584a402d6edb9bb8fcb52769136d5a4443c assets/cosmeretools/models/item/bronze_axe.json +e5bc83f1ddd7b2aa51f247a6b4df2197190944b9 assets/cosmeretools/models/item/bronze_boots.json +2fd89eb4599fb537b1d4d0dfb3d12745a3a284fb assets/cosmeretools/models/item/bronze_chestplate.json +6eb2ba18c03de63577432fc83d40f45789158a87 assets/cosmeretools/models/item/bronze_helmet.json +8dd52b004f4d5f72251e4bec7f3c6da732c449fb assets/cosmeretools/models/item/bronze_hoe.json +296901a75ced20e449bbeda919be1dfaecb6adf2 assets/cosmeretools/models/item/bronze_leggings.json +599449e1485feee42d76048aa888c83b4c597938 assets/cosmeretools/models/item/bronze_pickaxe.json +4633dc6256594c41148e81271fef572785c7ea53 assets/cosmeretools/models/item/bronze_shovel.json +ab1fc6ebd254116fb2b217df0173e3650592d746 assets/cosmeretools/models/item/bronze_sword.json +9689a584a402d6edb9bb8fcb52769136d5a4443c assets/cosmeretools/models/item/cadmium_axe.json +e5bc83f1ddd7b2aa51f247a6b4df2197190944b9 assets/cosmeretools/models/item/cadmium_boots.json +2fd89eb4599fb537b1d4d0dfb3d12745a3a284fb assets/cosmeretools/models/item/cadmium_chestplate.json +6eb2ba18c03de63577432fc83d40f45789158a87 assets/cosmeretools/models/item/cadmium_helmet.json +8dd52b004f4d5f72251e4bec7f3c6da732c449fb assets/cosmeretools/models/item/cadmium_hoe.json +296901a75ced20e449bbeda919be1dfaecb6adf2 assets/cosmeretools/models/item/cadmium_leggings.json +599449e1485feee42d76048aa888c83b4c597938 assets/cosmeretools/models/item/cadmium_pickaxe.json +4633dc6256594c41148e81271fef572785c7ea53 assets/cosmeretools/models/item/cadmium_shovel.json +ab1fc6ebd254116fb2b217df0173e3650592d746 assets/cosmeretools/models/item/cadmium_sword.json +9689a584a402d6edb9bb8fcb52769136d5a4443c assets/cosmeretools/models/item/chromium_axe.json +e5bc83f1ddd7b2aa51f247a6b4df2197190944b9 assets/cosmeretools/models/item/chromium_boots.json +2fd89eb4599fb537b1d4d0dfb3d12745a3a284fb assets/cosmeretools/models/item/chromium_chestplate.json +6eb2ba18c03de63577432fc83d40f45789158a87 assets/cosmeretools/models/item/chromium_helmet.json +8dd52b004f4d5f72251e4bec7f3c6da732c449fb assets/cosmeretools/models/item/chromium_hoe.json +296901a75ced20e449bbeda919be1dfaecb6adf2 assets/cosmeretools/models/item/chromium_leggings.json +599449e1485feee42d76048aa888c83b4c597938 assets/cosmeretools/models/item/chromium_pickaxe.json +4633dc6256594c41148e81271fef572785c7ea53 assets/cosmeretools/models/item/chromium_shovel.json +ab1fc6ebd254116fb2b217df0173e3650592d746 assets/cosmeretools/models/item/chromium_sword.json +9689a584a402d6edb9bb8fcb52769136d5a4443c assets/cosmeretools/models/item/copper_axe.json +e5bc83f1ddd7b2aa51f247a6b4df2197190944b9 assets/cosmeretools/models/item/copper_boots.json +2fd89eb4599fb537b1d4d0dfb3d12745a3a284fb assets/cosmeretools/models/item/copper_chestplate.json +6eb2ba18c03de63577432fc83d40f45789158a87 assets/cosmeretools/models/item/copper_helmet.json +8dd52b004f4d5f72251e4bec7f3c6da732c449fb assets/cosmeretools/models/item/copper_hoe.json +296901a75ced20e449bbeda919be1dfaecb6adf2 assets/cosmeretools/models/item/copper_leggings.json +599449e1485feee42d76048aa888c83b4c597938 assets/cosmeretools/models/item/copper_pickaxe.json +4633dc6256594c41148e81271fef572785c7ea53 assets/cosmeretools/models/item/copper_shovel.json +ab1fc6ebd254116fb2b217df0173e3650592d746 assets/cosmeretools/models/item/copper_sword.json +9689a584a402d6edb9bb8fcb52769136d5a4443c assets/cosmeretools/models/item/duralumin_axe.json +e5bc83f1ddd7b2aa51f247a6b4df2197190944b9 assets/cosmeretools/models/item/duralumin_boots.json +2fd89eb4599fb537b1d4d0dfb3d12745a3a284fb assets/cosmeretools/models/item/duralumin_chestplate.json +6eb2ba18c03de63577432fc83d40f45789158a87 assets/cosmeretools/models/item/duralumin_helmet.json +8dd52b004f4d5f72251e4bec7f3c6da732c449fb assets/cosmeretools/models/item/duralumin_hoe.json +296901a75ced20e449bbeda919be1dfaecb6adf2 assets/cosmeretools/models/item/duralumin_leggings.json +599449e1485feee42d76048aa888c83b4c597938 assets/cosmeretools/models/item/duralumin_pickaxe.json +4633dc6256594c41148e81271fef572785c7ea53 assets/cosmeretools/models/item/duralumin_shovel.json +ab1fc6ebd254116fb2b217df0173e3650592d746 assets/cosmeretools/models/item/duralumin_sword.json +9689a584a402d6edb9bb8fcb52769136d5a4443c assets/cosmeretools/models/item/electrum_axe.json +e5bc83f1ddd7b2aa51f247a6b4df2197190944b9 assets/cosmeretools/models/item/electrum_boots.json +2fd89eb4599fb537b1d4d0dfb3d12745a3a284fb assets/cosmeretools/models/item/electrum_chestplate.json +6eb2ba18c03de63577432fc83d40f45789158a87 assets/cosmeretools/models/item/electrum_helmet.json +8dd52b004f4d5f72251e4bec7f3c6da732c449fb assets/cosmeretools/models/item/electrum_hoe.json +296901a75ced20e449bbeda919be1dfaecb6adf2 assets/cosmeretools/models/item/electrum_leggings.json +599449e1485feee42d76048aa888c83b4c597938 assets/cosmeretools/models/item/electrum_pickaxe.json +4633dc6256594c41148e81271fef572785c7ea53 assets/cosmeretools/models/item/electrum_shovel.json +ab1fc6ebd254116fb2b217df0173e3650592d746 assets/cosmeretools/models/item/electrum_sword.json +9689a584a402d6edb9bb8fcb52769136d5a4443c assets/cosmeretools/models/item/harmonium_axe.json +e5bc83f1ddd7b2aa51f247a6b4df2197190944b9 assets/cosmeretools/models/item/harmonium_boots.json +2fd89eb4599fb537b1d4d0dfb3d12745a3a284fb assets/cosmeretools/models/item/harmonium_chestplate.json +6eb2ba18c03de63577432fc83d40f45789158a87 assets/cosmeretools/models/item/harmonium_helmet.json +8dd52b004f4d5f72251e4bec7f3c6da732c449fb assets/cosmeretools/models/item/harmonium_hoe.json +296901a75ced20e449bbeda919be1dfaecb6adf2 assets/cosmeretools/models/item/harmonium_leggings.json +599449e1485feee42d76048aa888c83b4c597938 assets/cosmeretools/models/item/harmonium_pickaxe.json +4633dc6256594c41148e81271fef572785c7ea53 assets/cosmeretools/models/item/harmonium_shovel.json +ab1fc6ebd254116fb2b217df0173e3650592d746 assets/cosmeretools/models/item/harmonium_sword.json +9689a584a402d6edb9bb8fcb52769136d5a4443c assets/cosmeretools/models/item/lead_axe.json +e5bc83f1ddd7b2aa51f247a6b4df2197190944b9 assets/cosmeretools/models/item/lead_boots.json +2fd89eb4599fb537b1d4d0dfb3d12745a3a284fb assets/cosmeretools/models/item/lead_chestplate.json +6eb2ba18c03de63577432fc83d40f45789158a87 assets/cosmeretools/models/item/lead_helmet.json +8dd52b004f4d5f72251e4bec7f3c6da732c449fb assets/cosmeretools/models/item/lead_hoe.json +296901a75ced20e449bbeda919be1dfaecb6adf2 assets/cosmeretools/models/item/lead_leggings.json +599449e1485feee42d76048aa888c83b4c597938 assets/cosmeretools/models/item/lead_pickaxe.json +4633dc6256594c41148e81271fef572785c7ea53 assets/cosmeretools/models/item/lead_shovel.json +ab1fc6ebd254116fb2b217df0173e3650592d746 assets/cosmeretools/models/item/lead_sword.json +9689a584a402d6edb9bb8fcb52769136d5a4443c assets/cosmeretools/models/item/lerasatium_axe.json +e5bc83f1ddd7b2aa51f247a6b4df2197190944b9 assets/cosmeretools/models/item/lerasatium_boots.json +2fd89eb4599fb537b1d4d0dfb3d12745a3a284fb assets/cosmeretools/models/item/lerasatium_chestplate.json +6eb2ba18c03de63577432fc83d40f45789158a87 assets/cosmeretools/models/item/lerasatium_helmet.json +8dd52b004f4d5f72251e4bec7f3c6da732c449fb assets/cosmeretools/models/item/lerasatium_hoe.json +296901a75ced20e449bbeda919be1dfaecb6adf2 assets/cosmeretools/models/item/lerasatium_leggings.json +599449e1485feee42d76048aa888c83b4c597938 assets/cosmeretools/models/item/lerasatium_pickaxe.json +4633dc6256594c41148e81271fef572785c7ea53 assets/cosmeretools/models/item/lerasatium_shovel.json +ab1fc6ebd254116fb2b217df0173e3650592d746 assets/cosmeretools/models/item/lerasatium_sword.json +9689a584a402d6edb9bb8fcb52769136d5a4443c assets/cosmeretools/models/item/lerasium_axe.json +e5bc83f1ddd7b2aa51f247a6b4df2197190944b9 assets/cosmeretools/models/item/lerasium_boots.json +2fd89eb4599fb537b1d4d0dfb3d12745a3a284fb assets/cosmeretools/models/item/lerasium_chestplate.json +6eb2ba18c03de63577432fc83d40f45789158a87 assets/cosmeretools/models/item/lerasium_helmet.json +8dd52b004f4d5f72251e4bec7f3c6da732c449fb assets/cosmeretools/models/item/lerasium_hoe.json +296901a75ced20e449bbeda919be1dfaecb6adf2 assets/cosmeretools/models/item/lerasium_leggings.json +599449e1485feee42d76048aa888c83b4c597938 assets/cosmeretools/models/item/lerasium_pickaxe.json +4633dc6256594c41148e81271fef572785c7ea53 assets/cosmeretools/models/item/lerasium_shovel.json +ab1fc6ebd254116fb2b217df0173e3650592d746 assets/cosmeretools/models/item/lerasium_sword.json +9689a584a402d6edb9bb8fcb52769136d5a4443c assets/cosmeretools/models/item/malatium_axe.json +e5bc83f1ddd7b2aa51f247a6b4df2197190944b9 assets/cosmeretools/models/item/malatium_boots.json +2fd89eb4599fb537b1d4d0dfb3d12745a3a284fb assets/cosmeretools/models/item/malatium_chestplate.json +6eb2ba18c03de63577432fc83d40f45789158a87 assets/cosmeretools/models/item/malatium_helmet.json +8dd52b004f4d5f72251e4bec7f3c6da732c449fb assets/cosmeretools/models/item/malatium_hoe.json +296901a75ced20e449bbeda919be1dfaecb6adf2 assets/cosmeretools/models/item/malatium_leggings.json +599449e1485feee42d76048aa888c83b4c597938 assets/cosmeretools/models/item/malatium_pickaxe.json +4633dc6256594c41148e81271fef572785c7ea53 assets/cosmeretools/models/item/malatium_shovel.json +ab1fc6ebd254116fb2b217df0173e3650592d746 assets/cosmeretools/models/item/malatium_sword.json +9689a584a402d6edb9bb8fcb52769136d5a4443c assets/cosmeretools/models/item/nickel_axe.json +e5bc83f1ddd7b2aa51f247a6b4df2197190944b9 assets/cosmeretools/models/item/nickel_boots.json +2fd89eb4599fb537b1d4d0dfb3d12745a3a284fb assets/cosmeretools/models/item/nickel_chestplate.json +6eb2ba18c03de63577432fc83d40f45789158a87 assets/cosmeretools/models/item/nickel_helmet.json +8dd52b004f4d5f72251e4bec7f3c6da732c449fb assets/cosmeretools/models/item/nickel_hoe.json +296901a75ced20e449bbeda919be1dfaecb6adf2 assets/cosmeretools/models/item/nickel_leggings.json +599449e1485feee42d76048aa888c83b4c597938 assets/cosmeretools/models/item/nickel_pickaxe.json +4633dc6256594c41148e81271fef572785c7ea53 assets/cosmeretools/models/item/nickel_shovel.json +ab1fc6ebd254116fb2b217df0173e3650592d746 assets/cosmeretools/models/item/nickel_sword.json +9689a584a402d6edb9bb8fcb52769136d5a4443c assets/cosmeretools/models/item/nicrosil_axe.json +e5bc83f1ddd7b2aa51f247a6b4df2197190944b9 assets/cosmeretools/models/item/nicrosil_boots.json +2fd89eb4599fb537b1d4d0dfb3d12745a3a284fb assets/cosmeretools/models/item/nicrosil_chestplate.json +6eb2ba18c03de63577432fc83d40f45789158a87 assets/cosmeretools/models/item/nicrosil_helmet.json +8dd52b004f4d5f72251e4bec7f3c6da732c449fb assets/cosmeretools/models/item/nicrosil_hoe.json +296901a75ced20e449bbeda919be1dfaecb6adf2 assets/cosmeretools/models/item/nicrosil_leggings.json +599449e1485feee42d76048aa888c83b4c597938 assets/cosmeretools/models/item/nicrosil_pickaxe.json +4633dc6256594c41148e81271fef572785c7ea53 assets/cosmeretools/models/item/nicrosil_shovel.json +ab1fc6ebd254116fb2b217df0173e3650592d746 assets/cosmeretools/models/item/nicrosil_sword.json +9689a584a402d6edb9bb8fcb52769136d5a4443c assets/cosmeretools/models/item/pewter_axe.json +e5bc83f1ddd7b2aa51f247a6b4df2197190944b9 assets/cosmeretools/models/item/pewter_boots.json +2fd89eb4599fb537b1d4d0dfb3d12745a3a284fb assets/cosmeretools/models/item/pewter_chestplate.json +6eb2ba18c03de63577432fc83d40f45789158a87 assets/cosmeretools/models/item/pewter_helmet.json +8dd52b004f4d5f72251e4bec7f3c6da732c449fb assets/cosmeretools/models/item/pewter_hoe.json +296901a75ced20e449bbeda919be1dfaecb6adf2 assets/cosmeretools/models/item/pewter_leggings.json +599449e1485feee42d76048aa888c83b4c597938 assets/cosmeretools/models/item/pewter_pickaxe.json +4633dc6256594c41148e81271fef572785c7ea53 assets/cosmeretools/models/item/pewter_shovel.json +ab1fc6ebd254116fb2b217df0173e3650592d746 assets/cosmeretools/models/item/pewter_sword.json +9689a584a402d6edb9bb8fcb52769136d5a4443c assets/cosmeretools/models/item/silver_axe.json +e5bc83f1ddd7b2aa51f247a6b4df2197190944b9 assets/cosmeretools/models/item/silver_boots.json +2fd89eb4599fb537b1d4d0dfb3d12745a3a284fb assets/cosmeretools/models/item/silver_chestplate.json +6eb2ba18c03de63577432fc83d40f45789158a87 assets/cosmeretools/models/item/silver_helmet.json +8dd52b004f4d5f72251e4bec7f3c6da732c449fb assets/cosmeretools/models/item/silver_hoe.json +296901a75ced20e449bbeda919be1dfaecb6adf2 assets/cosmeretools/models/item/silver_leggings.json +599449e1485feee42d76048aa888c83b4c597938 assets/cosmeretools/models/item/silver_pickaxe.json +4633dc6256594c41148e81271fef572785c7ea53 assets/cosmeretools/models/item/silver_shovel.json +ab1fc6ebd254116fb2b217df0173e3650592d746 assets/cosmeretools/models/item/silver_sword.json +9689a584a402d6edb9bb8fcb52769136d5a4443c assets/cosmeretools/models/item/steel_axe.json +e5bc83f1ddd7b2aa51f247a6b4df2197190944b9 assets/cosmeretools/models/item/steel_boots.json +2fd89eb4599fb537b1d4d0dfb3d12745a3a284fb assets/cosmeretools/models/item/steel_chestplate.json +6eb2ba18c03de63577432fc83d40f45789158a87 assets/cosmeretools/models/item/steel_helmet.json +8dd52b004f4d5f72251e4bec7f3c6da732c449fb assets/cosmeretools/models/item/steel_hoe.json +296901a75ced20e449bbeda919be1dfaecb6adf2 assets/cosmeretools/models/item/steel_leggings.json +599449e1485feee42d76048aa888c83b4c597938 assets/cosmeretools/models/item/steel_pickaxe.json +4633dc6256594c41148e81271fef572785c7ea53 assets/cosmeretools/models/item/steel_shovel.json +ab1fc6ebd254116fb2b217df0173e3650592d746 assets/cosmeretools/models/item/steel_sword.json +9689a584a402d6edb9bb8fcb52769136d5a4443c assets/cosmeretools/models/item/tin_axe.json +e5bc83f1ddd7b2aa51f247a6b4df2197190944b9 assets/cosmeretools/models/item/tin_boots.json +2fd89eb4599fb537b1d4d0dfb3d12745a3a284fb assets/cosmeretools/models/item/tin_chestplate.json +6eb2ba18c03de63577432fc83d40f45789158a87 assets/cosmeretools/models/item/tin_helmet.json +8dd52b004f4d5f72251e4bec7f3c6da732c449fb assets/cosmeretools/models/item/tin_hoe.json +296901a75ced20e449bbeda919be1dfaecb6adf2 assets/cosmeretools/models/item/tin_leggings.json +599449e1485feee42d76048aa888c83b4c597938 assets/cosmeretools/models/item/tin_pickaxe.json +4633dc6256594c41148e81271fef572785c7ea53 assets/cosmeretools/models/item/tin_shovel.json +ab1fc6ebd254116fb2b217df0173e3650592d746 assets/cosmeretools/models/item/tin_sword.json +9689a584a402d6edb9bb8fcb52769136d5a4443c assets/cosmeretools/models/item/zinc_axe.json +e5bc83f1ddd7b2aa51f247a6b4df2197190944b9 assets/cosmeretools/models/item/zinc_boots.json +2fd89eb4599fb537b1d4d0dfb3d12745a3a284fb assets/cosmeretools/models/item/zinc_chestplate.json +6eb2ba18c03de63577432fc83d40f45789158a87 assets/cosmeretools/models/item/zinc_helmet.json +8dd52b004f4d5f72251e4bec7f3c6da732c449fb assets/cosmeretools/models/item/zinc_hoe.json +296901a75ced20e449bbeda919be1dfaecb6adf2 assets/cosmeretools/models/item/zinc_leggings.json +599449e1485feee42d76048aa888c83b4c597938 assets/cosmeretools/models/item/zinc_pickaxe.json +4633dc6256594c41148e81271fef572785c7ea53 assets/cosmeretools/models/item/zinc_shovel.json +ab1fc6ebd254116fb2b217df0173e3650592d746 assets/cosmeretools/models/item/zinc_sword.json diff --git a/src/datagen/generated/cosmeretools/assets/cosmere/patchouli_books/guide/en_us/categories/tools.json b/src/datagen/generated/cosmeretools/assets/cosmere/patchouli_books/guide/en_us/categories/tools.json new file mode 100644 index 000000000..83bc1279e --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmere/patchouli_books/guide/en_us/categories/tools.json @@ -0,0 +1,7 @@ +{ + "description": "Metalworkers recently discovered that other metals besides iron and gold can be worked to make tools and armor.", + "icon": "cosmeretools:pewter_pickaxe", + "name": "Tools", + "secret": true, + "sortnum": 99 +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmere/patchouli_books/guide/en_us/entries/tools/tools_basics.json b/src/datagen/generated/cosmeretools/assets/cosmere/patchouli_books/guide/en_us/entries/tools/tools_basics.json new file mode 100644 index 000000000..38c199b3d --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmere/patchouli_books/guide/en_us/entries/tools/tools_basics.json @@ -0,0 +1,16 @@ +{ + "category": "cosmere:tools", + "icon": "cosmeretools:pewter_pickaxe", + "name": "Tools (For Dummies)", + "pages": [ + { + "type": "text", + "text": "In this journal, I shall explain all I have discovered about Tools. $(br)Firstly, some terminology:", + "title": "Terminology" + } + ], + "priority": true, + "read_by_default": false, + "secret": false, + "sortnum": 0 +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/lang/en_us.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/lang/en_us.json new file mode 100644 index 000000000..e5c3e5d08 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/lang/en_us.json @@ -0,0 +1,201 @@ +{ + "item.cosmeretools.aluminum_axe": "Aluminum Axe", + "item.cosmeretools.aluminum_boots": "Aluminum Boots", + "item.cosmeretools.aluminum_chestplate": "Aluminum Chestplate", + "item.cosmeretools.aluminum_helmet": "Aluminum Helmet", + "item.cosmeretools.aluminum_hoe": "Aluminum Hoe", + "item.cosmeretools.aluminum_leggings": "Aluminum Leggings", + "item.cosmeretools.aluminum_pickaxe": "Aluminum Pickaxe", + "item.cosmeretools.aluminum_shovel": "Aluminum Shovel", + "item.cosmeretools.aluminum_sword": "Aluminum Sword", + "item.cosmeretools.atium_axe": "Atium Axe", + "item.cosmeretools.atium_boots": "Atium Boots", + "item.cosmeretools.atium_chestplate": "Atium Chestplate", + "item.cosmeretools.atium_helmet": "Atium Helmet", + "item.cosmeretools.atium_hoe": "Atium Hoe", + "item.cosmeretools.atium_leggings": "Atium Leggings", + "item.cosmeretools.atium_pickaxe": "Atium Pickaxe", + "item.cosmeretools.atium_shovel": "Atium Shovel", + "item.cosmeretools.atium_sword": "Atium Sword", + "item.cosmeretools.bendalloy_axe": "Bendalloy Axe", + "item.cosmeretools.bendalloy_boots": "Bendalloy Boots", + "item.cosmeretools.bendalloy_chestplate": "Bendalloy Chestplate", + "item.cosmeretools.bendalloy_helmet": "Bendalloy Helmet", + "item.cosmeretools.bendalloy_hoe": "Bendalloy Hoe", + "item.cosmeretools.bendalloy_leggings": "Bendalloy Leggings", + "item.cosmeretools.bendalloy_pickaxe": "Bendalloy Pickaxe", + "item.cosmeretools.bendalloy_shovel": "Bendalloy Shovel", + "item.cosmeretools.bendalloy_sword": "Bendalloy Sword", + "item.cosmeretools.brass_axe": "Brass Axe", + "item.cosmeretools.brass_boots": "Brass Boots", + "item.cosmeretools.brass_chestplate": "Brass Chestplate", + "item.cosmeretools.brass_helmet": "Brass Helmet", + "item.cosmeretools.brass_hoe": "Brass Hoe", + "item.cosmeretools.brass_leggings": "Brass Leggings", + "item.cosmeretools.brass_pickaxe": "Brass Pickaxe", + "item.cosmeretools.brass_shovel": "Brass Shovel", + "item.cosmeretools.brass_sword": "Brass Sword", + "item.cosmeretools.bronze_axe": "Bronze Axe", + "item.cosmeretools.bronze_boots": "Bronze Boots", + "item.cosmeretools.bronze_chestplate": "Bronze Chestplate", + "item.cosmeretools.bronze_helmet": "Bronze Helmet", + "item.cosmeretools.bronze_hoe": "Bronze Hoe", + "item.cosmeretools.bronze_leggings": "Bronze Leggings", + "item.cosmeretools.bronze_pickaxe": "Bronze Pickaxe", + "item.cosmeretools.bronze_shovel": "Bronze Shovel", + "item.cosmeretools.bronze_sword": "Bronze Sword", + "item.cosmeretools.cadmium_axe": "Cadmium Axe", + "item.cosmeretools.cadmium_boots": "Cadmium Boots", + "item.cosmeretools.cadmium_chestplate": "Cadmium Chestplate", + "item.cosmeretools.cadmium_helmet": "Cadmium Helmet", + "item.cosmeretools.cadmium_hoe": "Cadmium Hoe", + "item.cosmeretools.cadmium_leggings": "Cadmium Leggings", + "item.cosmeretools.cadmium_pickaxe": "Cadmium Pickaxe", + "item.cosmeretools.cadmium_shovel": "Cadmium Shovel", + "item.cosmeretools.cadmium_sword": "Cadmium Sword", + "item.cosmeretools.chromium_axe": "Chromium Axe", + "item.cosmeretools.chromium_boots": "Chromium Boots", + "item.cosmeretools.chromium_chestplate": "Chromium Chestplate", + "item.cosmeretools.chromium_helmet": "Chromium Helmet", + "item.cosmeretools.chromium_hoe": "Chromium Hoe", + "item.cosmeretools.chromium_leggings": "Chromium Leggings", + "item.cosmeretools.chromium_pickaxe": "Chromium Pickaxe", + "item.cosmeretools.chromium_shovel": "Chromium Shovel", + "item.cosmeretools.chromium_sword": "Chromium Sword", + "item.cosmeretools.copper_axe": "Copper Axe", + "item.cosmeretools.copper_boots": "Copper Boots", + "item.cosmeretools.copper_chestplate": "Copper Chestplate", + "item.cosmeretools.copper_helmet": "Copper Helmet", + "item.cosmeretools.copper_hoe": "Copper Hoe", + "item.cosmeretools.copper_leggings": "Copper Leggings", + "item.cosmeretools.copper_pickaxe": "Copper Pickaxe", + "item.cosmeretools.copper_shovel": "Copper Shovel", + "item.cosmeretools.copper_sword": "Copper Sword", + "item.cosmeretools.duralumin_axe": "Duralumin Axe", + "item.cosmeretools.duralumin_boots": "Duralumin Boots", + "item.cosmeretools.duralumin_chestplate": "Duralumin Chestplate", + "item.cosmeretools.duralumin_helmet": "Duralumin Helmet", + "item.cosmeretools.duralumin_hoe": "Duralumin Hoe", + "item.cosmeretools.duralumin_leggings": "Duralumin Leggings", + "item.cosmeretools.duralumin_pickaxe": "Duralumin Pickaxe", + "item.cosmeretools.duralumin_shovel": "Duralumin Shovel", + "item.cosmeretools.duralumin_sword": "Duralumin Sword", + "item.cosmeretools.electrum_axe": "Electrum Axe", + "item.cosmeretools.electrum_boots": "Electrum Boots", + "item.cosmeretools.electrum_chestplate": "Electrum Chestplate", + "item.cosmeretools.electrum_helmet": "Electrum Helmet", + "item.cosmeretools.electrum_hoe": "Electrum Hoe", + "item.cosmeretools.electrum_leggings": "Electrum Leggings", + "item.cosmeretools.electrum_pickaxe": "Electrum Pickaxe", + "item.cosmeretools.electrum_shovel": "Electrum Shovel", + "item.cosmeretools.electrum_sword": "Electrum Sword", + "item.cosmeretools.harmonium_axe": "Harmonium Axe", + "item.cosmeretools.harmonium_boots": "Harmonium Boots", + "item.cosmeretools.harmonium_chestplate": "Harmonium Chestplate", + "item.cosmeretools.harmonium_helmet": "Harmonium Helmet", + "item.cosmeretools.harmonium_hoe": "Harmonium Hoe", + "item.cosmeretools.harmonium_leggings": "Harmonium Leggings", + "item.cosmeretools.harmonium_pickaxe": "Harmonium Pickaxe", + "item.cosmeretools.harmonium_shovel": "Harmonium Shovel", + "item.cosmeretools.harmonium_sword": "Harmonium Sword", + "item.cosmeretools.lead_axe": "Lead Axe", + "item.cosmeretools.lead_boots": "Lead Boots", + "item.cosmeretools.lead_chestplate": "Lead Chestplate", + "item.cosmeretools.lead_helmet": "Lead Helmet", + "item.cosmeretools.lead_hoe": "Lead Hoe", + "item.cosmeretools.lead_leggings": "Lead Leggings", + "item.cosmeretools.lead_pickaxe": "Lead Pickaxe", + "item.cosmeretools.lead_shovel": "Lead Shovel", + "item.cosmeretools.lead_sword": "Lead Sword", + "item.cosmeretools.lerasatium_axe": "Lerasatium Axe", + "item.cosmeretools.lerasatium_boots": "Lerasatium Boots", + "item.cosmeretools.lerasatium_chestplate": "Lerasatium Chestplate", + "item.cosmeretools.lerasatium_helmet": "Lerasatium Helmet", + "item.cosmeretools.lerasatium_hoe": "Lerasatium Hoe", + "item.cosmeretools.lerasatium_leggings": "Lerasatium Leggings", + "item.cosmeretools.lerasatium_pickaxe": "Lerasatium Pickaxe", + "item.cosmeretools.lerasatium_shovel": "Lerasatium Shovel", + "item.cosmeretools.lerasatium_sword": "Lerasatium Sword", + "item.cosmeretools.lerasium_axe": "Lerasium Axe", + "item.cosmeretools.lerasium_boots": "Lerasium Boots", + "item.cosmeretools.lerasium_chestplate": "Lerasium Chestplate", + "item.cosmeretools.lerasium_helmet": "Lerasium Helmet", + "item.cosmeretools.lerasium_hoe": "Lerasium Hoe", + "item.cosmeretools.lerasium_leggings": "Lerasium Leggings", + "item.cosmeretools.lerasium_pickaxe": "Lerasium Pickaxe", + "item.cosmeretools.lerasium_shovel": "Lerasium Shovel", + "item.cosmeretools.lerasium_sword": "Lerasium Sword", + "item.cosmeretools.malatium_axe": "Malatium Axe", + "item.cosmeretools.malatium_boots": "Malatium Boots", + "item.cosmeretools.malatium_chestplate": "Malatium Chestplate", + "item.cosmeretools.malatium_helmet": "Malatium Helmet", + "item.cosmeretools.malatium_hoe": "Malatium Hoe", + "item.cosmeretools.malatium_leggings": "Malatium Leggings", + "item.cosmeretools.malatium_pickaxe": "Malatium Pickaxe", + "item.cosmeretools.malatium_shovel": "Malatium Shovel", + "item.cosmeretools.malatium_sword": "Malatium Sword", + "item.cosmeretools.nickel_axe": "Nickel Axe", + "item.cosmeretools.nickel_boots": "Nickel Boots", + "item.cosmeretools.nickel_chestplate": "Nickel Chestplate", + "item.cosmeretools.nickel_helmet": "Nickel Helmet", + "item.cosmeretools.nickel_hoe": "Nickel Hoe", + "item.cosmeretools.nickel_leggings": "Nickel Leggings", + "item.cosmeretools.nickel_pickaxe": "Nickel Pickaxe", + "item.cosmeretools.nickel_shovel": "Nickel Shovel", + "item.cosmeretools.nickel_sword": "Nickel Sword", + "item.cosmeretools.nicrosil_axe": "Nicrosil Axe", + "item.cosmeretools.nicrosil_boots": "Nicrosil Boots", + "item.cosmeretools.nicrosil_chestplate": "Nicrosil Chestplate", + "item.cosmeretools.nicrosil_helmet": "Nicrosil Helmet", + "item.cosmeretools.nicrosil_hoe": "Nicrosil Hoe", + "item.cosmeretools.nicrosil_leggings": "Nicrosil Leggings", + "item.cosmeretools.nicrosil_pickaxe": "Nicrosil Pickaxe", + "item.cosmeretools.nicrosil_shovel": "Nicrosil Shovel", + "item.cosmeretools.nicrosil_sword": "Nicrosil Sword", + "item.cosmeretools.pewter_axe": "Pewter Axe", + "item.cosmeretools.pewter_boots": "Pewter Boots", + "item.cosmeretools.pewter_chestplate": "Pewter Chestplate", + "item.cosmeretools.pewter_helmet": "Pewter Helmet", + "item.cosmeretools.pewter_hoe": "Pewter Hoe", + "item.cosmeretools.pewter_leggings": "Pewter Leggings", + "item.cosmeretools.pewter_pickaxe": "Pewter Pickaxe", + "item.cosmeretools.pewter_shovel": "Pewter Shovel", + "item.cosmeretools.pewter_sword": "Pewter Sword", + "item.cosmeretools.silver_axe": "Silver Axe", + "item.cosmeretools.silver_boots": "Silver Boots", + "item.cosmeretools.silver_chestplate": "Silver Chestplate", + "item.cosmeretools.silver_helmet": "Silver Helmet", + "item.cosmeretools.silver_hoe": "Silver Hoe", + "item.cosmeretools.silver_leggings": "Silver Leggings", + "item.cosmeretools.silver_pickaxe": "Silver Pickaxe", + "item.cosmeretools.silver_shovel": "Silver Shovel", + "item.cosmeretools.silver_sword": "Silver Sword", + "item.cosmeretools.steel_axe": "Steel Axe", + "item.cosmeretools.steel_boots": "Steel Boots", + "item.cosmeretools.steel_chestplate": "Steel Chestplate", + "item.cosmeretools.steel_helmet": "Steel Helmet", + "item.cosmeretools.steel_hoe": "Steel Hoe", + "item.cosmeretools.steel_leggings": "Steel Leggings", + "item.cosmeretools.steel_pickaxe": "Steel Pickaxe", + "item.cosmeretools.steel_shovel": "Steel Shovel", + "item.cosmeretools.steel_sword": "Steel Sword", + "item.cosmeretools.tin_axe": "Tin Axe", + "item.cosmeretools.tin_boots": "Tin Boots", + "item.cosmeretools.tin_chestplate": "Tin Chestplate", + "item.cosmeretools.tin_helmet": "Tin Helmet", + "item.cosmeretools.tin_hoe": "Tin Hoe", + "item.cosmeretools.tin_leggings": "Tin Leggings", + "item.cosmeretools.tin_pickaxe": "Tin Pickaxe", + "item.cosmeretools.tin_shovel": "Tin Shovel", + "item.cosmeretools.tin_sword": "Tin Sword", + "item.cosmeretools.zinc_axe": "Zinc Axe", + "item.cosmeretools.zinc_boots": "Zinc Boots", + "item.cosmeretools.zinc_chestplate": "Zinc Chestplate", + "item.cosmeretools.zinc_helmet": "Zinc Helmet", + "item.cosmeretools.zinc_hoe": "Zinc Hoe", + "item.cosmeretools.zinc_leggings": "Zinc Leggings", + "item.cosmeretools.zinc_pickaxe": "Zinc Pickaxe", + "item.cosmeretools.zinc_shovel": "Zinc Shovel", + "item.cosmeretools.zinc_sword": "Zinc Sword", + "tabs.cosmeretools.items": "Cosmere Tools" +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/aluminum_axe.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/aluminum_axe.json new file mode 100644 index 000000000..3d6825c63 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/aluminum_axe.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_axe", + "layer1": "cosmeretools:item/metal_axe_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/aluminum_boots.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/aluminum_boots.json new file mode 100644 index 000000000..ee127da27 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/aluminum_boots.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_boots" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/aluminum_chestplate.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/aluminum_chestplate.json new file mode 100644 index 000000000..2c52d1bde --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/aluminum_chestplate.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_chestplate" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/aluminum_helmet.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/aluminum_helmet.json new file mode 100644 index 000000000..8203b8a5d --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/aluminum_helmet.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_helmet" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/aluminum_hoe.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/aluminum_hoe.json new file mode 100644 index 000000000..e67bc1a07 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/aluminum_hoe.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_hoe", + "layer1": "cosmeretools:item/metal_hoe_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/aluminum_leggings.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/aluminum_leggings.json new file mode 100644 index 000000000..324b71c18 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/aluminum_leggings.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_leggings" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/aluminum_pickaxe.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/aluminum_pickaxe.json new file mode 100644 index 000000000..2134580bf --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/aluminum_pickaxe.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_pickaxe", + "layer1": "cosmeretools:item/metal_pickaxe_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/aluminum_shovel.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/aluminum_shovel.json new file mode 100644 index 000000000..1ccd2ac72 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/aluminum_shovel.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_shovel", + "layer1": "cosmeretools:item/metal_shovel_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/aluminum_sword.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/aluminum_sword.json new file mode 100644 index 000000000..002669066 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/aluminum_sword.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_sword", + "layer1": "cosmeretools:item/metal_sword_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/atium_axe.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/atium_axe.json new file mode 100644 index 000000000..3d6825c63 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/atium_axe.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_axe", + "layer1": "cosmeretools:item/metal_axe_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/atium_boots.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/atium_boots.json new file mode 100644 index 000000000..ee127da27 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/atium_boots.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_boots" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/atium_chestplate.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/atium_chestplate.json new file mode 100644 index 000000000..2c52d1bde --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/atium_chestplate.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_chestplate" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/atium_helmet.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/atium_helmet.json new file mode 100644 index 000000000..8203b8a5d --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/atium_helmet.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_helmet" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/atium_hoe.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/atium_hoe.json new file mode 100644 index 000000000..e67bc1a07 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/atium_hoe.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_hoe", + "layer1": "cosmeretools:item/metal_hoe_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/atium_leggings.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/atium_leggings.json new file mode 100644 index 000000000..324b71c18 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/atium_leggings.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_leggings" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/atium_pickaxe.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/atium_pickaxe.json new file mode 100644 index 000000000..2134580bf --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/atium_pickaxe.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_pickaxe", + "layer1": "cosmeretools:item/metal_pickaxe_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/atium_shovel.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/atium_shovel.json new file mode 100644 index 000000000..1ccd2ac72 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/atium_shovel.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_shovel", + "layer1": "cosmeretools:item/metal_shovel_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/atium_sword.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/atium_sword.json new file mode 100644 index 000000000..002669066 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/atium_sword.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_sword", + "layer1": "cosmeretools:item/metal_sword_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/bendalloy_axe.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/bendalloy_axe.json new file mode 100644 index 000000000..3d6825c63 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/bendalloy_axe.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_axe", + "layer1": "cosmeretools:item/metal_axe_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/bendalloy_boots.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/bendalloy_boots.json new file mode 100644 index 000000000..ee127da27 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/bendalloy_boots.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_boots" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/bendalloy_chestplate.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/bendalloy_chestplate.json new file mode 100644 index 000000000..2c52d1bde --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/bendalloy_chestplate.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_chestplate" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/bendalloy_helmet.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/bendalloy_helmet.json new file mode 100644 index 000000000..8203b8a5d --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/bendalloy_helmet.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_helmet" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/bendalloy_hoe.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/bendalloy_hoe.json new file mode 100644 index 000000000..e67bc1a07 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/bendalloy_hoe.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_hoe", + "layer1": "cosmeretools:item/metal_hoe_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/bendalloy_leggings.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/bendalloy_leggings.json new file mode 100644 index 000000000..324b71c18 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/bendalloy_leggings.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_leggings" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/bendalloy_pickaxe.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/bendalloy_pickaxe.json new file mode 100644 index 000000000..2134580bf --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/bendalloy_pickaxe.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_pickaxe", + "layer1": "cosmeretools:item/metal_pickaxe_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/bendalloy_shovel.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/bendalloy_shovel.json new file mode 100644 index 000000000..1ccd2ac72 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/bendalloy_shovel.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_shovel", + "layer1": "cosmeretools:item/metal_shovel_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/bendalloy_sword.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/bendalloy_sword.json new file mode 100644 index 000000000..002669066 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/bendalloy_sword.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_sword", + "layer1": "cosmeretools:item/metal_sword_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/brass_axe.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/brass_axe.json new file mode 100644 index 000000000..3d6825c63 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/brass_axe.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_axe", + "layer1": "cosmeretools:item/metal_axe_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/brass_boots.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/brass_boots.json new file mode 100644 index 000000000..ee127da27 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/brass_boots.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_boots" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/brass_chestplate.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/brass_chestplate.json new file mode 100644 index 000000000..2c52d1bde --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/brass_chestplate.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_chestplate" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/brass_helmet.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/brass_helmet.json new file mode 100644 index 000000000..8203b8a5d --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/brass_helmet.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_helmet" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/brass_hoe.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/brass_hoe.json new file mode 100644 index 000000000..e67bc1a07 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/brass_hoe.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_hoe", + "layer1": "cosmeretools:item/metal_hoe_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/brass_leggings.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/brass_leggings.json new file mode 100644 index 000000000..324b71c18 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/brass_leggings.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_leggings" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/brass_pickaxe.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/brass_pickaxe.json new file mode 100644 index 000000000..2134580bf --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/brass_pickaxe.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_pickaxe", + "layer1": "cosmeretools:item/metal_pickaxe_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/brass_shovel.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/brass_shovel.json new file mode 100644 index 000000000..1ccd2ac72 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/brass_shovel.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_shovel", + "layer1": "cosmeretools:item/metal_shovel_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/brass_sword.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/brass_sword.json new file mode 100644 index 000000000..002669066 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/brass_sword.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_sword", + "layer1": "cosmeretools:item/metal_sword_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/bronze_axe.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/bronze_axe.json new file mode 100644 index 000000000..3d6825c63 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/bronze_axe.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_axe", + "layer1": "cosmeretools:item/metal_axe_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/bronze_boots.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/bronze_boots.json new file mode 100644 index 000000000..ee127da27 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/bronze_boots.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_boots" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/bronze_chestplate.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/bronze_chestplate.json new file mode 100644 index 000000000..2c52d1bde --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/bronze_chestplate.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_chestplate" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/bronze_helmet.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/bronze_helmet.json new file mode 100644 index 000000000..8203b8a5d --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/bronze_helmet.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_helmet" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/bronze_hoe.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/bronze_hoe.json new file mode 100644 index 000000000..e67bc1a07 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/bronze_hoe.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_hoe", + "layer1": "cosmeretools:item/metal_hoe_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/bronze_leggings.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/bronze_leggings.json new file mode 100644 index 000000000..324b71c18 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/bronze_leggings.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_leggings" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/bronze_pickaxe.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/bronze_pickaxe.json new file mode 100644 index 000000000..2134580bf --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/bronze_pickaxe.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_pickaxe", + "layer1": "cosmeretools:item/metal_pickaxe_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/bronze_shovel.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/bronze_shovel.json new file mode 100644 index 000000000..1ccd2ac72 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/bronze_shovel.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_shovel", + "layer1": "cosmeretools:item/metal_shovel_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/bronze_sword.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/bronze_sword.json new file mode 100644 index 000000000..002669066 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/bronze_sword.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_sword", + "layer1": "cosmeretools:item/metal_sword_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/cadmium_axe.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/cadmium_axe.json new file mode 100644 index 000000000..3d6825c63 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/cadmium_axe.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_axe", + "layer1": "cosmeretools:item/metal_axe_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/cadmium_boots.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/cadmium_boots.json new file mode 100644 index 000000000..ee127da27 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/cadmium_boots.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_boots" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/cadmium_chestplate.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/cadmium_chestplate.json new file mode 100644 index 000000000..2c52d1bde --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/cadmium_chestplate.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_chestplate" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/cadmium_helmet.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/cadmium_helmet.json new file mode 100644 index 000000000..8203b8a5d --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/cadmium_helmet.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_helmet" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/cadmium_hoe.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/cadmium_hoe.json new file mode 100644 index 000000000..e67bc1a07 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/cadmium_hoe.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_hoe", + "layer1": "cosmeretools:item/metal_hoe_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/cadmium_leggings.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/cadmium_leggings.json new file mode 100644 index 000000000..324b71c18 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/cadmium_leggings.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_leggings" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/cadmium_pickaxe.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/cadmium_pickaxe.json new file mode 100644 index 000000000..2134580bf --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/cadmium_pickaxe.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_pickaxe", + "layer1": "cosmeretools:item/metal_pickaxe_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/cadmium_shovel.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/cadmium_shovel.json new file mode 100644 index 000000000..1ccd2ac72 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/cadmium_shovel.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_shovel", + "layer1": "cosmeretools:item/metal_shovel_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/cadmium_sword.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/cadmium_sword.json new file mode 100644 index 000000000..002669066 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/cadmium_sword.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_sword", + "layer1": "cosmeretools:item/metal_sword_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/chromium_axe.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/chromium_axe.json new file mode 100644 index 000000000..3d6825c63 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/chromium_axe.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_axe", + "layer1": "cosmeretools:item/metal_axe_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/chromium_boots.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/chromium_boots.json new file mode 100644 index 000000000..ee127da27 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/chromium_boots.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_boots" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/chromium_chestplate.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/chromium_chestplate.json new file mode 100644 index 000000000..2c52d1bde --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/chromium_chestplate.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_chestplate" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/chromium_helmet.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/chromium_helmet.json new file mode 100644 index 000000000..8203b8a5d --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/chromium_helmet.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_helmet" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/chromium_hoe.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/chromium_hoe.json new file mode 100644 index 000000000..e67bc1a07 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/chromium_hoe.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_hoe", + "layer1": "cosmeretools:item/metal_hoe_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/chromium_leggings.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/chromium_leggings.json new file mode 100644 index 000000000..324b71c18 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/chromium_leggings.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_leggings" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/chromium_pickaxe.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/chromium_pickaxe.json new file mode 100644 index 000000000..2134580bf --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/chromium_pickaxe.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_pickaxe", + "layer1": "cosmeretools:item/metal_pickaxe_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/chromium_shovel.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/chromium_shovel.json new file mode 100644 index 000000000..1ccd2ac72 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/chromium_shovel.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_shovel", + "layer1": "cosmeretools:item/metal_shovel_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/chromium_sword.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/chromium_sword.json new file mode 100644 index 000000000..002669066 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/chromium_sword.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_sword", + "layer1": "cosmeretools:item/metal_sword_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/copper_axe.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/copper_axe.json new file mode 100644 index 000000000..3d6825c63 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/copper_axe.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_axe", + "layer1": "cosmeretools:item/metal_axe_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/copper_boots.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/copper_boots.json new file mode 100644 index 000000000..ee127da27 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/copper_boots.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_boots" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/copper_chestplate.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/copper_chestplate.json new file mode 100644 index 000000000..2c52d1bde --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/copper_chestplate.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_chestplate" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/copper_helmet.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/copper_helmet.json new file mode 100644 index 000000000..8203b8a5d --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/copper_helmet.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_helmet" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/copper_hoe.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/copper_hoe.json new file mode 100644 index 000000000..e67bc1a07 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/copper_hoe.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_hoe", + "layer1": "cosmeretools:item/metal_hoe_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/copper_leggings.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/copper_leggings.json new file mode 100644 index 000000000..324b71c18 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/copper_leggings.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_leggings" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/copper_pickaxe.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/copper_pickaxe.json new file mode 100644 index 000000000..2134580bf --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/copper_pickaxe.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_pickaxe", + "layer1": "cosmeretools:item/metal_pickaxe_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/copper_shovel.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/copper_shovel.json new file mode 100644 index 000000000..1ccd2ac72 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/copper_shovel.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_shovel", + "layer1": "cosmeretools:item/metal_shovel_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/copper_sword.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/copper_sword.json new file mode 100644 index 000000000..002669066 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/copper_sword.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_sword", + "layer1": "cosmeretools:item/metal_sword_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/duralumin_axe.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/duralumin_axe.json new file mode 100644 index 000000000..3d6825c63 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/duralumin_axe.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_axe", + "layer1": "cosmeretools:item/metal_axe_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/duralumin_boots.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/duralumin_boots.json new file mode 100644 index 000000000..ee127da27 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/duralumin_boots.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_boots" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/duralumin_chestplate.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/duralumin_chestplate.json new file mode 100644 index 000000000..2c52d1bde --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/duralumin_chestplate.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_chestplate" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/duralumin_helmet.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/duralumin_helmet.json new file mode 100644 index 000000000..8203b8a5d --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/duralumin_helmet.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_helmet" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/duralumin_hoe.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/duralumin_hoe.json new file mode 100644 index 000000000..e67bc1a07 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/duralumin_hoe.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_hoe", + "layer1": "cosmeretools:item/metal_hoe_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/duralumin_leggings.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/duralumin_leggings.json new file mode 100644 index 000000000..324b71c18 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/duralumin_leggings.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_leggings" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/duralumin_pickaxe.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/duralumin_pickaxe.json new file mode 100644 index 000000000..2134580bf --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/duralumin_pickaxe.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_pickaxe", + "layer1": "cosmeretools:item/metal_pickaxe_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/duralumin_shovel.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/duralumin_shovel.json new file mode 100644 index 000000000..1ccd2ac72 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/duralumin_shovel.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_shovel", + "layer1": "cosmeretools:item/metal_shovel_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/duralumin_sword.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/duralumin_sword.json new file mode 100644 index 000000000..002669066 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/duralumin_sword.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_sword", + "layer1": "cosmeretools:item/metal_sword_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/electrum_axe.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/electrum_axe.json new file mode 100644 index 000000000..3d6825c63 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/electrum_axe.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_axe", + "layer1": "cosmeretools:item/metal_axe_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/electrum_boots.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/electrum_boots.json new file mode 100644 index 000000000..ee127da27 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/electrum_boots.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_boots" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/electrum_chestplate.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/electrum_chestplate.json new file mode 100644 index 000000000..2c52d1bde --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/electrum_chestplate.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_chestplate" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/electrum_helmet.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/electrum_helmet.json new file mode 100644 index 000000000..8203b8a5d --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/electrum_helmet.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_helmet" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/electrum_hoe.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/electrum_hoe.json new file mode 100644 index 000000000..e67bc1a07 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/electrum_hoe.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_hoe", + "layer1": "cosmeretools:item/metal_hoe_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/electrum_leggings.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/electrum_leggings.json new file mode 100644 index 000000000..324b71c18 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/electrum_leggings.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_leggings" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/electrum_pickaxe.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/electrum_pickaxe.json new file mode 100644 index 000000000..2134580bf --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/electrum_pickaxe.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_pickaxe", + "layer1": "cosmeretools:item/metal_pickaxe_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/electrum_shovel.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/electrum_shovel.json new file mode 100644 index 000000000..1ccd2ac72 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/electrum_shovel.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_shovel", + "layer1": "cosmeretools:item/metal_shovel_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/electrum_sword.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/electrum_sword.json new file mode 100644 index 000000000..002669066 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/electrum_sword.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_sword", + "layer1": "cosmeretools:item/metal_sword_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/harmonium_axe.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/harmonium_axe.json new file mode 100644 index 000000000..3d6825c63 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/harmonium_axe.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_axe", + "layer1": "cosmeretools:item/metal_axe_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/harmonium_boots.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/harmonium_boots.json new file mode 100644 index 000000000..ee127da27 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/harmonium_boots.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_boots" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/harmonium_chestplate.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/harmonium_chestplate.json new file mode 100644 index 000000000..2c52d1bde --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/harmonium_chestplate.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_chestplate" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/harmonium_helmet.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/harmonium_helmet.json new file mode 100644 index 000000000..8203b8a5d --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/harmonium_helmet.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_helmet" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/harmonium_hoe.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/harmonium_hoe.json new file mode 100644 index 000000000..e67bc1a07 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/harmonium_hoe.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_hoe", + "layer1": "cosmeretools:item/metal_hoe_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/harmonium_leggings.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/harmonium_leggings.json new file mode 100644 index 000000000..324b71c18 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/harmonium_leggings.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_leggings" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/harmonium_pickaxe.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/harmonium_pickaxe.json new file mode 100644 index 000000000..2134580bf --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/harmonium_pickaxe.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_pickaxe", + "layer1": "cosmeretools:item/metal_pickaxe_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/harmonium_shovel.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/harmonium_shovel.json new file mode 100644 index 000000000..1ccd2ac72 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/harmonium_shovel.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_shovel", + "layer1": "cosmeretools:item/metal_shovel_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/harmonium_sword.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/harmonium_sword.json new file mode 100644 index 000000000..002669066 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/harmonium_sword.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_sword", + "layer1": "cosmeretools:item/metal_sword_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/lead_axe.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/lead_axe.json new file mode 100644 index 000000000..3d6825c63 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/lead_axe.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_axe", + "layer1": "cosmeretools:item/metal_axe_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/lead_boots.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/lead_boots.json new file mode 100644 index 000000000..ee127da27 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/lead_boots.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_boots" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/lead_chestplate.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/lead_chestplate.json new file mode 100644 index 000000000..2c52d1bde --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/lead_chestplate.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_chestplate" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/lead_helmet.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/lead_helmet.json new file mode 100644 index 000000000..8203b8a5d --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/lead_helmet.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_helmet" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/lead_hoe.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/lead_hoe.json new file mode 100644 index 000000000..e67bc1a07 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/lead_hoe.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_hoe", + "layer1": "cosmeretools:item/metal_hoe_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/lead_leggings.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/lead_leggings.json new file mode 100644 index 000000000..324b71c18 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/lead_leggings.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_leggings" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/lead_pickaxe.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/lead_pickaxe.json new file mode 100644 index 000000000..2134580bf --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/lead_pickaxe.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_pickaxe", + "layer1": "cosmeretools:item/metal_pickaxe_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/lead_shovel.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/lead_shovel.json new file mode 100644 index 000000000..1ccd2ac72 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/lead_shovel.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_shovel", + "layer1": "cosmeretools:item/metal_shovel_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/lead_sword.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/lead_sword.json new file mode 100644 index 000000000..002669066 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/lead_sword.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_sword", + "layer1": "cosmeretools:item/metal_sword_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/lerasatium_axe.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/lerasatium_axe.json new file mode 100644 index 000000000..3d6825c63 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/lerasatium_axe.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_axe", + "layer1": "cosmeretools:item/metal_axe_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/lerasatium_boots.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/lerasatium_boots.json new file mode 100644 index 000000000..ee127da27 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/lerasatium_boots.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_boots" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/lerasatium_chestplate.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/lerasatium_chestplate.json new file mode 100644 index 000000000..2c52d1bde --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/lerasatium_chestplate.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_chestplate" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/lerasatium_helmet.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/lerasatium_helmet.json new file mode 100644 index 000000000..8203b8a5d --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/lerasatium_helmet.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_helmet" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/lerasatium_hoe.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/lerasatium_hoe.json new file mode 100644 index 000000000..e67bc1a07 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/lerasatium_hoe.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_hoe", + "layer1": "cosmeretools:item/metal_hoe_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/lerasatium_leggings.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/lerasatium_leggings.json new file mode 100644 index 000000000..324b71c18 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/lerasatium_leggings.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_leggings" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/lerasatium_pickaxe.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/lerasatium_pickaxe.json new file mode 100644 index 000000000..2134580bf --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/lerasatium_pickaxe.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_pickaxe", + "layer1": "cosmeretools:item/metal_pickaxe_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/lerasatium_shovel.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/lerasatium_shovel.json new file mode 100644 index 000000000..1ccd2ac72 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/lerasatium_shovel.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_shovel", + "layer1": "cosmeretools:item/metal_shovel_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/lerasatium_sword.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/lerasatium_sword.json new file mode 100644 index 000000000..002669066 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/lerasatium_sword.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_sword", + "layer1": "cosmeretools:item/metal_sword_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/lerasium_axe.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/lerasium_axe.json new file mode 100644 index 000000000..3d6825c63 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/lerasium_axe.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_axe", + "layer1": "cosmeretools:item/metal_axe_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/lerasium_boots.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/lerasium_boots.json new file mode 100644 index 000000000..ee127da27 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/lerasium_boots.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_boots" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/lerasium_chestplate.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/lerasium_chestplate.json new file mode 100644 index 000000000..2c52d1bde --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/lerasium_chestplate.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_chestplate" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/lerasium_helmet.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/lerasium_helmet.json new file mode 100644 index 000000000..8203b8a5d --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/lerasium_helmet.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_helmet" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/lerasium_hoe.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/lerasium_hoe.json new file mode 100644 index 000000000..e67bc1a07 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/lerasium_hoe.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_hoe", + "layer1": "cosmeretools:item/metal_hoe_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/lerasium_leggings.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/lerasium_leggings.json new file mode 100644 index 000000000..324b71c18 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/lerasium_leggings.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_leggings" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/lerasium_pickaxe.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/lerasium_pickaxe.json new file mode 100644 index 000000000..2134580bf --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/lerasium_pickaxe.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_pickaxe", + "layer1": "cosmeretools:item/metal_pickaxe_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/lerasium_shovel.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/lerasium_shovel.json new file mode 100644 index 000000000..1ccd2ac72 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/lerasium_shovel.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_shovel", + "layer1": "cosmeretools:item/metal_shovel_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/lerasium_sword.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/lerasium_sword.json new file mode 100644 index 000000000..002669066 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/lerasium_sword.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_sword", + "layer1": "cosmeretools:item/metal_sword_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/malatium_axe.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/malatium_axe.json new file mode 100644 index 000000000..3d6825c63 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/malatium_axe.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_axe", + "layer1": "cosmeretools:item/metal_axe_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/malatium_boots.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/malatium_boots.json new file mode 100644 index 000000000..ee127da27 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/malatium_boots.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_boots" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/malatium_chestplate.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/malatium_chestplate.json new file mode 100644 index 000000000..2c52d1bde --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/malatium_chestplate.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_chestplate" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/malatium_helmet.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/malatium_helmet.json new file mode 100644 index 000000000..8203b8a5d --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/malatium_helmet.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_helmet" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/malatium_hoe.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/malatium_hoe.json new file mode 100644 index 000000000..e67bc1a07 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/malatium_hoe.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_hoe", + "layer1": "cosmeretools:item/metal_hoe_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/malatium_leggings.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/malatium_leggings.json new file mode 100644 index 000000000..324b71c18 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/malatium_leggings.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_leggings" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/malatium_pickaxe.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/malatium_pickaxe.json new file mode 100644 index 000000000..2134580bf --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/malatium_pickaxe.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_pickaxe", + "layer1": "cosmeretools:item/metal_pickaxe_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/malatium_shovel.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/malatium_shovel.json new file mode 100644 index 000000000..1ccd2ac72 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/malatium_shovel.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_shovel", + "layer1": "cosmeretools:item/metal_shovel_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/malatium_sword.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/malatium_sword.json new file mode 100644 index 000000000..002669066 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/malatium_sword.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_sword", + "layer1": "cosmeretools:item/metal_sword_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/nickel_axe.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/nickel_axe.json new file mode 100644 index 000000000..3d6825c63 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/nickel_axe.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_axe", + "layer1": "cosmeretools:item/metal_axe_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/nickel_boots.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/nickel_boots.json new file mode 100644 index 000000000..ee127da27 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/nickel_boots.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_boots" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/nickel_chestplate.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/nickel_chestplate.json new file mode 100644 index 000000000..2c52d1bde --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/nickel_chestplate.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_chestplate" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/nickel_helmet.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/nickel_helmet.json new file mode 100644 index 000000000..8203b8a5d --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/nickel_helmet.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_helmet" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/nickel_hoe.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/nickel_hoe.json new file mode 100644 index 000000000..e67bc1a07 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/nickel_hoe.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_hoe", + "layer1": "cosmeretools:item/metal_hoe_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/nickel_leggings.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/nickel_leggings.json new file mode 100644 index 000000000..324b71c18 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/nickel_leggings.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_leggings" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/nickel_pickaxe.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/nickel_pickaxe.json new file mode 100644 index 000000000..2134580bf --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/nickel_pickaxe.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_pickaxe", + "layer1": "cosmeretools:item/metal_pickaxe_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/nickel_shovel.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/nickel_shovel.json new file mode 100644 index 000000000..1ccd2ac72 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/nickel_shovel.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_shovel", + "layer1": "cosmeretools:item/metal_shovel_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/nickel_sword.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/nickel_sword.json new file mode 100644 index 000000000..002669066 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/nickel_sword.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_sword", + "layer1": "cosmeretools:item/metal_sword_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/nicrosil_axe.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/nicrosil_axe.json new file mode 100644 index 000000000..3d6825c63 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/nicrosil_axe.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_axe", + "layer1": "cosmeretools:item/metal_axe_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/nicrosil_boots.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/nicrosil_boots.json new file mode 100644 index 000000000..ee127da27 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/nicrosil_boots.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_boots" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/nicrosil_chestplate.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/nicrosil_chestplate.json new file mode 100644 index 000000000..2c52d1bde --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/nicrosil_chestplate.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_chestplate" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/nicrosil_helmet.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/nicrosil_helmet.json new file mode 100644 index 000000000..8203b8a5d --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/nicrosil_helmet.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_helmet" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/nicrosil_hoe.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/nicrosil_hoe.json new file mode 100644 index 000000000..e67bc1a07 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/nicrosil_hoe.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_hoe", + "layer1": "cosmeretools:item/metal_hoe_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/nicrosil_leggings.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/nicrosil_leggings.json new file mode 100644 index 000000000..324b71c18 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/nicrosil_leggings.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_leggings" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/nicrosil_pickaxe.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/nicrosil_pickaxe.json new file mode 100644 index 000000000..2134580bf --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/nicrosil_pickaxe.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_pickaxe", + "layer1": "cosmeretools:item/metal_pickaxe_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/nicrosil_shovel.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/nicrosil_shovel.json new file mode 100644 index 000000000..1ccd2ac72 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/nicrosil_shovel.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_shovel", + "layer1": "cosmeretools:item/metal_shovel_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/nicrosil_sword.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/nicrosil_sword.json new file mode 100644 index 000000000..002669066 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/nicrosil_sword.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_sword", + "layer1": "cosmeretools:item/metal_sword_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/pewter_axe.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/pewter_axe.json new file mode 100644 index 000000000..3d6825c63 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/pewter_axe.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_axe", + "layer1": "cosmeretools:item/metal_axe_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/pewter_boots.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/pewter_boots.json new file mode 100644 index 000000000..ee127da27 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/pewter_boots.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_boots" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/pewter_chestplate.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/pewter_chestplate.json new file mode 100644 index 000000000..2c52d1bde --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/pewter_chestplate.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_chestplate" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/pewter_helmet.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/pewter_helmet.json new file mode 100644 index 000000000..8203b8a5d --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/pewter_helmet.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_helmet" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/pewter_hoe.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/pewter_hoe.json new file mode 100644 index 000000000..e67bc1a07 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/pewter_hoe.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_hoe", + "layer1": "cosmeretools:item/metal_hoe_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/pewter_leggings.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/pewter_leggings.json new file mode 100644 index 000000000..324b71c18 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/pewter_leggings.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_leggings" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/pewter_pickaxe.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/pewter_pickaxe.json new file mode 100644 index 000000000..2134580bf --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/pewter_pickaxe.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_pickaxe", + "layer1": "cosmeretools:item/metal_pickaxe_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/pewter_shovel.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/pewter_shovel.json new file mode 100644 index 000000000..1ccd2ac72 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/pewter_shovel.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_shovel", + "layer1": "cosmeretools:item/metal_shovel_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/pewter_sword.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/pewter_sword.json new file mode 100644 index 000000000..002669066 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/pewter_sword.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_sword", + "layer1": "cosmeretools:item/metal_sword_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/silver_axe.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/silver_axe.json new file mode 100644 index 000000000..3d6825c63 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/silver_axe.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_axe", + "layer1": "cosmeretools:item/metal_axe_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/silver_boots.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/silver_boots.json new file mode 100644 index 000000000..ee127da27 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/silver_boots.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_boots" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/silver_chestplate.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/silver_chestplate.json new file mode 100644 index 000000000..2c52d1bde --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/silver_chestplate.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_chestplate" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/silver_helmet.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/silver_helmet.json new file mode 100644 index 000000000..8203b8a5d --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/silver_helmet.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_helmet" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/silver_hoe.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/silver_hoe.json new file mode 100644 index 000000000..e67bc1a07 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/silver_hoe.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_hoe", + "layer1": "cosmeretools:item/metal_hoe_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/silver_leggings.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/silver_leggings.json new file mode 100644 index 000000000..324b71c18 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/silver_leggings.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_leggings" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/silver_pickaxe.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/silver_pickaxe.json new file mode 100644 index 000000000..2134580bf --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/silver_pickaxe.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_pickaxe", + "layer1": "cosmeretools:item/metal_pickaxe_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/silver_shovel.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/silver_shovel.json new file mode 100644 index 000000000..1ccd2ac72 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/silver_shovel.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_shovel", + "layer1": "cosmeretools:item/metal_shovel_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/silver_sword.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/silver_sword.json new file mode 100644 index 000000000..002669066 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/silver_sword.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_sword", + "layer1": "cosmeretools:item/metal_sword_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/steel_axe.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/steel_axe.json new file mode 100644 index 000000000..3d6825c63 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/steel_axe.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_axe", + "layer1": "cosmeretools:item/metal_axe_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/steel_boots.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/steel_boots.json new file mode 100644 index 000000000..ee127da27 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/steel_boots.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_boots" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/steel_chestplate.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/steel_chestplate.json new file mode 100644 index 000000000..2c52d1bde --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/steel_chestplate.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_chestplate" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/steel_helmet.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/steel_helmet.json new file mode 100644 index 000000000..8203b8a5d --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/steel_helmet.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_helmet" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/steel_hoe.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/steel_hoe.json new file mode 100644 index 000000000..e67bc1a07 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/steel_hoe.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_hoe", + "layer1": "cosmeretools:item/metal_hoe_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/steel_leggings.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/steel_leggings.json new file mode 100644 index 000000000..324b71c18 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/steel_leggings.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_leggings" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/steel_pickaxe.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/steel_pickaxe.json new file mode 100644 index 000000000..2134580bf --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/steel_pickaxe.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_pickaxe", + "layer1": "cosmeretools:item/metal_pickaxe_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/steel_shovel.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/steel_shovel.json new file mode 100644 index 000000000..1ccd2ac72 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/steel_shovel.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_shovel", + "layer1": "cosmeretools:item/metal_shovel_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/steel_sword.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/steel_sword.json new file mode 100644 index 000000000..002669066 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/steel_sword.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_sword", + "layer1": "cosmeretools:item/metal_sword_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/tin_axe.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/tin_axe.json new file mode 100644 index 000000000..3d6825c63 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/tin_axe.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_axe", + "layer1": "cosmeretools:item/metal_axe_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/tin_boots.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/tin_boots.json new file mode 100644 index 000000000..ee127da27 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/tin_boots.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_boots" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/tin_chestplate.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/tin_chestplate.json new file mode 100644 index 000000000..2c52d1bde --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/tin_chestplate.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_chestplate" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/tin_helmet.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/tin_helmet.json new file mode 100644 index 000000000..8203b8a5d --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/tin_helmet.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_helmet" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/tin_hoe.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/tin_hoe.json new file mode 100644 index 000000000..e67bc1a07 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/tin_hoe.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_hoe", + "layer1": "cosmeretools:item/metal_hoe_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/tin_leggings.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/tin_leggings.json new file mode 100644 index 000000000..324b71c18 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/tin_leggings.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_leggings" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/tin_pickaxe.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/tin_pickaxe.json new file mode 100644 index 000000000..2134580bf --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/tin_pickaxe.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_pickaxe", + "layer1": "cosmeretools:item/metal_pickaxe_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/tin_shovel.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/tin_shovel.json new file mode 100644 index 000000000..1ccd2ac72 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/tin_shovel.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_shovel", + "layer1": "cosmeretools:item/metal_shovel_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/tin_sword.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/tin_sword.json new file mode 100644 index 000000000..002669066 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/tin_sword.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_sword", + "layer1": "cosmeretools:item/metal_sword_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/zinc_axe.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/zinc_axe.json new file mode 100644 index 000000000..3d6825c63 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/zinc_axe.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_axe", + "layer1": "cosmeretools:item/metal_axe_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/zinc_boots.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/zinc_boots.json new file mode 100644 index 000000000..ee127da27 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/zinc_boots.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_boots" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/zinc_chestplate.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/zinc_chestplate.json new file mode 100644 index 000000000..2c52d1bde --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/zinc_chestplate.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_chestplate" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/zinc_helmet.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/zinc_helmet.json new file mode 100644 index 000000000..8203b8a5d --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/zinc_helmet.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_helmet" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/zinc_hoe.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/zinc_hoe.json new file mode 100644 index 000000000..e67bc1a07 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/zinc_hoe.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_hoe", + "layer1": "cosmeretools:item/metal_hoe_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/zinc_leggings.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/zinc_leggings.json new file mode 100644 index 000000000..324b71c18 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/zinc_leggings.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/iron_leggings" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/zinc_pickaxe.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/zinc_pickaxe.json new file mode 100644 index 000000000..2134580bf --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/zinc_pickaxe.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_pickaxe", + "layer1": "cosmeretools:item/metal_pickaxe_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/zinc_shovel.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/zinc_shovel.json new file mode 100644 index 000000000..1ccd2ac72 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/zinc_shovel.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_shovel", + "layer1": "cosmeretools:item/metal_shovel_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/zinc_sword.json b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/zinc_sword.json new file mode 100644 index 000000000..002669066 --- /dev/null +++ b/src/datagen/generated/cosmeretools/assets/cosmeretools/models/item/zinc_sword.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "cosmeretools:item/metal_sword", + "layer1": "cosmeretools:item/metal_sword_0" + } +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/aluminum_boots.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/aluminum_boots.json new file mode 100644 index 000000000..6f75918c7 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/aluminum_boots.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/aluminum" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:aluminum_boots" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:aluminum_boots" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/aluminum_chestplate.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/aluminum_chestplate.json new file mode 100644 index 000000000..6a189d27a --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/aluminum_chestplate.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/aluminum" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:aluminum_chestplate" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:aluminum_chestplate" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/aluminum_helmet.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/aluminum_helmet.json new file mode 100644 index 000000000..a48a209ef --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/aluminum_helmet.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/aluminum" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:aluminum_helmet" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:aluminum_helmet" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/aluminum_leggings.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/aluminum_leggings.json new file mode 100644 index 000000000..c09b713f4 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/aluminum_leggings.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/aluminum" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:aluminum_leggings" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:aluminum_leggings" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/aluminum_sword.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/aluminum_sword.json new file mode 100644 index 000000000..3a8f35dcd --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/aluminum_sword.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/aluminum" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:aluminum_sword" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:aluminum_sword" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/atium_boots.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/atium_boots.json new file mode 100644 index 000000000..ed612800d --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/atium_boots.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/atium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:atium_boots" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:atium_boots" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/atium_chestplate.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/atium_chestplate.json new file mode 100644 index 000000000..552f0de85 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/atium_chestplate.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/atium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:atium_chestplate" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:atium_chestplate" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/atium_helmet.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/atium_helmet.json new file mode 100644 index 000000000..40db271a6 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/atium_helmet.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/atium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:atium_helmet" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:atium_helmet" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/atium_leggings.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/atium_leggings.json new file mode 100644 index 000000000..bcadf30f0 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/atium_leggings.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/atium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:atium_leggings" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:atium_leggings" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/atium_sword.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/atium_sword.json new file mode 100644 index 000000000..1eb4c8c75 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/atium_sword.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/atium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:atium_sword" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:atium_sword" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/bendalloy_boots.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/bendalloy_boots.json new file mode 100644 index 000000000..be7501904 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/bendalloy_boots.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/bendalloy" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:bendalloy_boots" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:bendalloy_boots" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/bendalloy_chestplate.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/bendalloy_chestplate.json new file mode 100644 index 000000000..08cedea2b --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/bendalloy_chestplate.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/bendalloy" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:bendalloy_chestplate" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:bendalloy_chestplate" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/bendalloy_helmet.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/bendalloy_helmet.json new file mode 100644 index 000000000..223600ffc --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/bendalloy_helmet.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/bendalloy" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:bendalloy_helmet" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:bendalloy_helmet" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/bendalloy_leggings.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/bendalloy_leggings.json new file mode 100644 index 000000000..6ce7b168b --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/bendalloy_leggings.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/bendalloy" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:bendalloy_leggings" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:bendalloy_leggings" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/bendalloy_sword.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/bendalloy_sword.json new file mode 100644 index 000000000..8f0e659a0 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/bendalloy_sword.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/bendalloy" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:bendalloy_sword" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:bendalloy_sword" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/brass_boots.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/brass_boots.json new file mode 100644 index 000000000..477eb263d --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/brass_boots.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/brass" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:brass_boots" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:brass_boots" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/brass_chestplate.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/brass_chestplate.json new file mode 100644 index 000000000..93a041292 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/brass_chestplate.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/brass" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:brass_chestplate" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:brass_chestplate" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/brass_helmet.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/brass_helmet.json new file mode 100644 index 000000000..f4cef59b3 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/brass_helmet.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/brass" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:brass_helmet" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:brass_helmet" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/brass_leggings.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/brass_leggings.json new file mode 100644 index 000000000..61675c709 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/brass_leggings.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/brass" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:brass_leggings" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:brass_leggings" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/brass_sword.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/brass_sword.json new file mode 100644 index 000000000..b6e40c992 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/brass_sword.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/brass" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:brass_sword" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:brass_sword" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/bronze_boots.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/bronze_boots.json new file mode 100644 index 000000000..215348bb4 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/bronze_boots.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/bronze" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:bronze_boots" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:bronze_boots" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/bronze_chestplate.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/bronze_chestplate.json new file mode 100644 index 000000000..90f998f1b --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/bronze_chestplate.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/bronze" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:bronze_chestplate" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:bronze_chestplate" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/bronze_helmet.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/bronze_helmet.json new file mode 100644 index 000000000..a84fe22be --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/bronze_helmet.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/bronze" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:bronze_helmet" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:bronze_helmet" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/bronze_leggings.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/bronze_leggings.json new file mode 100644 index 000000000..378bb1f1e --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/bronze_leggings.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/bronze" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:bronze_leggings" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:bronze_leggings" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/bronze_sword.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/bronze_sword.json new file mode 100644 index 000000000..cbf91ae4a --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/bronze_sword.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/bronze" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:bronze_sword" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:bronze_sword" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/cadmium_boots.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/cadmium_boots.json new file mode 100644 index 000000000..b26df97b7 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/cadmium_boots.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/cadmium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:cadmium_boots" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:cadmium_boots" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/cadmium_chestplate.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/cadmium_chestplate.json new file mode 100644 index 000000000..6177c4fe0 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/cadmium_chestplate.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/cadmium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:cadmium_chestplate" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:cadmium_chestplate" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/cadmium_helmet.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/cadmium_helmet.json new file mode 100644 index 000000000..01ab3f162 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/cadmium_helmet.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/cadmium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:cadmium_helmet" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:cadmium_helmet" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/cadmium_leggings.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/cadmium_leggings.json new file mode 100644 index 000000000..b3bac1163 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/cadmium_leggings.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/cadmium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:cadmium_leggings" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:cadmium_leggings" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/cadmium_sword.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/cadmium_sword.json new file mode 100644 index 000000000..1ef5083c1 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/cadmium_sword.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/cadmium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:cadmium_sword" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:cadmium_sword" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/chromium_boots.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/chromium_boots.json new file mode 100644 index 000000000..4dd7c0229 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/chromium_boots.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/chromium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:chromium_boots" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:chromium_boots" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/chromium_chestplate.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/chromium_chestplate.json new file mode 100644 index 000000000..ee180d893 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/chromium_chestplate.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/chromium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:chromium_chestplate" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:chromium_chestplate" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/chromium_helmet.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/chromium_helmet.json new file mode 100644 index 000000000..6d7e4d7a2 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/chromium_helmet.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/chromium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:chromium_helmet" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:chromium_helmet" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/chromium_leggings.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/chromium_leggings.json new file mode 100644 index 000000000..49f78ff89 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/chromium_leggings.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/chromium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:chromium_leggings" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:chromium_leggings" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/chromium_sword.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/chromium_sword.json new file mode 100644 index 000000000..4350de0c3 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/chromium_sword.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/chromium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:chromium_sword" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:chromium_sword" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/copper_boots.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/copper_boots.json new file mode 100644 index 000000000..66528305b --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/copper_boots.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/copper" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:copper_boots" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:copper_boots" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/copper_chestplate.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/copper_chestplate.json new file mode 100644 index 000000000..dbe6679ba --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/copper_chestplate.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/copper" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:copper_chestplate" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:copper_chestplate" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/copper_helmet.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/copper_helmet.json new file mode 100644 index 000000000..bde657f46 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/copper_helmet.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/copper" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:copper_helmet" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:copper_helmet" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/copper_leggings.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/copper_leggings.json new file mode 100644 index 000000000..28d0a2e34 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/copper_leggings.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/copper" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:copper_leggings" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:copper_leggings" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/copper_sword.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/copper_sword.json new file mode 100644 index 000000000..58c66e6c9 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/copper_sword.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/copper" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:copper_sword" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:copper_sword" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/duralumin_boots.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/duralumin_boots.json new file mode 100644 index 000000000..b074a96eb --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/duralumin_boots.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/duralumin" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:duralumin_boots" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:duralumin_boots" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/duralumin_chestplate.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/duralumin_chestplate.json new file mode 100644 index 000000000..19e8f0263 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/duralumin_chestplate.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/duralumin" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:duralumin_chestplate" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:duralumin_chestplate" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/duralumin_helmet.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/duralumin_helmet.json new file mode 100644 index 000000000..7c532bb15 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/duralumin_helmet.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/duralumin" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:duralumin_helmet" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:duralumin_helmet" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/duralumin_leggings.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/duralumin_leggings.json new file mode 100644 index 000000000..c027451e5 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/duralumin_leggings.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/duralumin" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:duralumin_leggings" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:duralumin_leggings" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/duralumin_sword.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/duralumin_sword.json new file mode 100644 index 000000000..58731ce1e --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/duralumin_sword.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/duralumin" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:duralumin_sword" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:duralumin_sword" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/electrum_boots.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/electrum_boots.json new file mode 100644 index 000000000..e451844a3 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/electrum_boots.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/electrum" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:electrum_boots" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:electrum_boots" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/electrum_chestplate.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/electrum_chestplate.json new file mode 100644 index 000000000..2a41b511a --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/electrum_chestplate.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/electrum" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:electrum_chestplate" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:electrum_chestplate" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/electrum_helmet.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/electrum_helmet.json new file mode 100644 index 000000000..edd608430 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/electrum_helmet.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/electrum" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:electrum_helmet" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:electrum_helmet" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/electrum_leggings.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/electrum_leggings.json new file mode 100644 index 000000000..79a8efc5b --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/electrum_leggings.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/electrum" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:electrum_leggings" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:electrum_leggings" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/electrum_sword.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/electrum_sword.json new file mode 100644 index 000000000..d9b28eb84 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/electrum_sword.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/electrum" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:electrum_sword" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:electrum_sword" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/harmonium_boots.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/harmonium_boots.json new file mode 100644 index 000000000..6af065279 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/harmonium_boots.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/harmonium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:harmonium_boots" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:harmonium_boots" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/harmonium_chestplate.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/harmonium_chestplate.json new file mode 100644 index 000000000..d925bc236 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/harmonium_chestplate.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/harmonium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:harmonium_chestplate" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:harmonium_chestplate" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/harmonium_helmet.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/harmonium_helmet.json new file mode 100644 index 000000000..790260880 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/harmonium_helmet.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/harmonium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:harmonium_helmet" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:harmonium_helmet" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/harmonium_leggings.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/harmonium_leggings.json new file mode 100644 index 000000000..591623fcb --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/harmonium_leggings.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/harmonium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:harmonium_leggings" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:harmonium_leggings" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/harmonium_sword.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/harmonium_sword.json new file mode 100644 index 000000000..3ea23f40c --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/harmonium_sword.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/harmonium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:harmonium_sword" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:harmonium_sword" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/lead_boots.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/lead_boots.json new file mode 100644 index 000000000..dffe5e060 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/lead_boots.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/lead" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:lead_boots" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:lead_boots" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/lead_chestplate.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/lead_chestplate.json new file mode 100644 index 000000000..f840fa7a3 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/lead_chestplate.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/lead" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:lead_chestplate" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:lead_chestplate" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/lead_helmet.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/lead_helmet.json new file mode 100644 index 000000000..d8aef6ff2 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/lead_helmet.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/lead" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:lead_helmet" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:lead_helmet" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/lead_leggings.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/lead_leggings.json new file mode 100644 index 000000000..0ea2a427e --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/lead_leggings.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/lead" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:lead_leggings" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:lead_leggings" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/lead_sword.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/lead_sword.json new file mode 100644 index 000000000..dd754a0fe --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/lead_sword.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/lead" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:lead_sword" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:lead_sword" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/lerasatium_boots.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/lerasatium_boots.json new file mode 100644 index 000000000..0355c695c --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/lerasatium_boots.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/lerasatium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:lerasatium_boots" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:lerasatium_boots" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/lerasatium_chestplate.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/lerasatium_chestplate.json new file mode 100644 index 000000000..be3f27987 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/lerasatium_chestplate.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/lerasatium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:lerasatium_chestplate" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:lerasatium_chestplate" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/lerasatium_helmet.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/lerasatium_helmet.json new file mode 100644 index 000000000..c9e301bfa --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/lerasatium_helmet.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/lerasatium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:lerasatium_helmet" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:lerasatium_helmet" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/lerasatium_leggings.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/lerasatium_leggings.json new file mode 100644 index 000000000..e703b08c2 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/lerasatium_leggings.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/lerasatium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:lerasatium_leggings" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:lerasatium_leggings" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/lerasatium_sword.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/lerasatium_sword.json new file mode 100644 index 000000000..fff1e00b0 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/lerasatium_sword.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/lerasatium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:lerasatium_sword" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:lerasatium_sword" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/lerasium_boots.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/lerasium_boots.json new file mode 100644 index 000000000..a52d809c7 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/lerasium_boots.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/lerasium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:lerasium_boots" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:lerasium_boots" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/lerasium_chestplate.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/lerasium_chestplate.json new file mode 100644 index 000000000..29d65b983 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/lerasium_chestplate.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/lerasium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:lerasium_chestplate" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:lerasium_chestplate" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/lerasium_helmet.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/lerasium_helmet.json new file mode 100644 index 000000000..5663a2307 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/lerasium_helmet.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/lerasium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:lerasium_helmet" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:lerasium_helmet" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/lerasium_leggings.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/lerasium_leggings.json new file mode 100644 index 000000000..52c238575 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/lerasium_leggings.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/lerasium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:lerasium_leggings" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:lerasium_leggings" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/lerasium_sword.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/lerasium_sword.json new file mode 100644 index 000000000..a4ffe1e82 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/lerasium_sword.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/lerasium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:lerasium_sword" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:lerasium_sword" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/malatium_boots.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/malatium_boots.json new file mode 100644 index 000000000..8f2d64398 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/malatium_boots.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/malatium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:malatium_boots" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:malatium_boots" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/malatium_chestplate.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/malatium_chestplate.json new file mode 100644 index 000000000..8164f9691 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/malatium_chestplate.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/malatium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:malatium_chestplate" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:malatium_chestplate" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/malatium_helmet.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/malatium_helmet.json new file mode 100644 index 000000000..8080d96a7 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/malatium_helmet.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/malatium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:malatium_helmet" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:malatium_helmet" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/malatium_leggings.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/malatium_leggings.json new file mode 100644 index 000000000..59557e9c6 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/malatium_leggings.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/malatium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:malatium_leggings" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:malatium_leggings" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/malatium_sword.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/malatium_sword.json new file mode 100644 index 000000000..fb10f502b --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/malatium_sword.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/malatium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:malatium_sword" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:malatium_sword" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/nickel_boots.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/nickel_boots.json new file mode 100644 index 000000000..16b2d9a67 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/nickel_boots.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/nickel" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:nickel_boots" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:nickel_boots" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/nickel_chestplate.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/nickel_chestplate.json new file mode 100644 index 000000000..cecf575aa --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/nickel_chestplate.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/nickel" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:nickel_chestplate" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:nickel_chestplate" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/nickel_helmet.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/nickel_helmet.json new file mode 100644 index 000000000..d1f02c18f --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/nickel_helmet.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/nickel" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:nickel_helmet" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:nickel_helmet" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/nickel_leggings.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/nickel_leggings.json new file mode 100644 index 000000000..1b63d4a44 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/nickel_leggings.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/nickel" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:nickel_leggings" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:nickel_leggings" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/nickel_sword.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/nickel_sword.json new file mode 100644 index 000000000..eea89170a --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/nickel_sword.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/nickel" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:nickel_sword" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:nickel_sword" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/nicrosil_boots.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/nicrosil_boots.json new file mode 100644 index 000000000..5d2c5c9ab --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/nicrosil_boots.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/nicrosil" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:nicrosil_boots" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:nicrosil_boots" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/nicrosil_chestplate.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/nicrosil_chestplate.json new file mode 100644 index 000000000..f59dcb392 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/nicrosil_chestplate.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/nicrosil" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:nicrosil_chestplate" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:nicrosil_chestplate" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/nicrosil_helmet.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/nicrosil_helmet.json new file mode 100644 index 000000000..523ff2c94 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/nicrosil_helmet.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/nicrosil" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:nicrosil_helmet" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:nicrosil_helmet" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/nicrosil_leggings.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/nicrosil_leggings.json new file mode 100644 index 000000000..5fa2aeb9f --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/nicrosil_leggings.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/nicrosil" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:nicrosil_leggings" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:nicrosil_leggings" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/nicrosil_sword.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/nicrosil_sword.json new file mode 100644 index 000000000..d0609c112 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/nicrosil_sword.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/nicrosil" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:nicrosil_sword" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:nicrosil_sword" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/pewter_boots.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/pewter_boots.json new file mode 100644 index 000000000..89b601226 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/pewter_boots.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/pewter" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:pewter_boots" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:pewter_boots" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/pewter_chestplate.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/pewter_chestplate.json new file mode 100644 index 000000000..7d975d2b3 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/pewter_chestplate.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/pewter" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:pewter_chestplate" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:pewter_chestplate" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/pewter_helmet.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/pewter_helmet.json new file mode 100644 index 000000000..1353058aa --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/pewter_helmet.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/pewter" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:pewter_helmet" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:pewter_helmet" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/pewter_leggings.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/pewter_leggings.json new file mode 100644 index 000000000..27e9acb8b --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/pewter_leggings.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/pewter" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:pewter_leggings" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:pewter_leggings" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/pewter_sword.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/pewter_sword.json new file mode 100644 index 000000000..5a3048829 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/pewter_sword.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/pewter" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:pewter_sword" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:pewter_sword" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/silver_boots.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/silver_boots.json new file mode 100644 index 000000000..a5ecba27a --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/silver_boots.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/silver" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:silver_boots" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:silver_boots" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/silver_chestplate.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/silver_chestplate.json new file mode 100644 index 000000000..183b811a7 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/silver_chestplate.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/silver" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:silver_chestplate" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:silver_chestplate" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/silver_helmet.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/silver_helmet.json new file mode 100644 index 000000000..1e827be9e --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/silver_helmet.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/silver" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:silver_helmet" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:silver_helmet" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/silver_leggings.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/silver_leggings.json new file mode 100644 index 000000000..cc3edc6ff --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/silver_leggings.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/silver" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:silver_leggings" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:silver_leggings" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/silver_sword.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/silver_sword.json new file mode 100644 index 000000000..517929894 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/silver_sword.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/silver" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:silver_sword" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:silver_sword" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/steel_boots.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/steel_boots.json new file mode 100644 index 000000000..02b3b0b07 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/steel_boots.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/steel" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:steel_boots" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:steel_boots" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/steel_chestplate.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/steel_chestplate.json new file mode 100644 index 000000000..8d7464f16 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/steel_chestplate.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/steel" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:steel_chestplate" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:steel_chestplate" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/steel_helmet.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/steel_helmet.json new file mode 100644 index 000000000..ec3994d7d --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/steel_helmet.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/steel" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:steel_helmet" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:steel_helmet" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/steel_leggings.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/steel_leggings.json new file mode 100644 index 000000000..ea8201126 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/steel_leggings.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/steel" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:steel_leggings" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:steel_leggings" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/steel_sword.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/steel_sword.json new file mode 100644 index 000000000..747afabd2 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/steel_sword.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/steel" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:steel_sword" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:steel_sword" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/tin_boots.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/tin_boots.json new file mode 100644 index 000000000..8a30188c2 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/tin_boots.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/tin" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:tin_boots" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:tin_boots" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/tin_chestplate.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/tin_chestplate.json new file mode 100644 index 000000000..0ddb37e03 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/tin_chestplate.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/tin" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:tin_chestplate" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:tin_chestplate" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/tin_helmet.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/tin_helmet.json new file mode 100644 index 000000000..f7021284d --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/tin_helmet.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/tin" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:tin_helmet" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:tin_helmet" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/tin_leggings.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/tin_leggings.json new file mode 100644 index 000000000..57b51d934 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/tin_leggings.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/tin" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:tin_leggings" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:tin_leggings" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/tin_sword.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/tin_sword.json new file mode 100644 index 000000000..93f8674ea --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/tin_sword.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/tin" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:tin_sword" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:tin_sword" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/zinc_boots.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/zinc_boots.json new file mode 100644 index 000000000..b3c91f530 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/zinc_boots.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/zinc" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:zinc_boots" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:zinc_boots" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/zinc_chestplate.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/zinc_chestplate.json new file mode 100644 index 000000000..d85096b22 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/zinc_chestplate.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/zinc" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:zinc_chestplate" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:zinc_chestplate" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/zinc_helmet.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/zinc_helmet.json new file mode 100644 index 000000000..88ecbd394 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/zinc_helmet.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/zinc" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:zinc_helmet" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:zinc_helmet" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/zinc_leggings.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/zinc_leggings.json new file mode 100644 index 000000000..7453baff4 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/zinc_leggings.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/zinc" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:zinc_leggings" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:zinc_leggings" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/zinc_sword.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/zinc_sword.json new file mode 100644 index 000000000..fbe2ce01a --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/combat/zinc_sword.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/zinc" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:zinc_sword" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:zinc_sword" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/aluminum_axe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/aluminum_axe.json new file mode 100644 index 000000000..2a2520947 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/aluminum_axe.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/aluminum" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:aluminum_axe" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:aluminum_axe" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/aluminum_hoe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/aluminum_hoe.json new file mode 100644 index 000000000..8db2729cf --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/aluminum_hoe.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/aluminum" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:aluminum_hoe" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:aluminum_hoe" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/aluminum_pickaxe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/aluminum_pickaxe.json new file mode 100644 index 000000000..89255fed3 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/aluminum_pickaxe.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/aluminum" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:aluminum_pickaxe" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:aluminum_pickaxe" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/aluminum_shovel.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/aluminum_shovel.json new file mode 100644 index 000000000..ebc10d486 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/aluminum_shovel.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/aluminum" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:aluminum_shovel" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:aluminum_shovel" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/atium_axe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/atium_axe.json new file mode 100644 index 000000000..c7930416a --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/atium_axe.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/atium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:atium_axe" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:atium_axe" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/atium_hoe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/atium_hoe.json new file mode 100644 index 000000000..b19336cdd --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/atium_hoe.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/atium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:atium_hoe" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:atium_hoe" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/atium_pickaxe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/atium_pickaxe.json new file mode 100644 index 000000000..516f53c7e --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/atium_pickaxe.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/atium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:atium_pickaxe" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:atium_pickaxe" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/atium_shovel.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/atium_shovel.json new file mode 100644 index 000000000..b2415e36c --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/atium_shovel.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/atium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:atium_shovel" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:atium_shovel" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/bendalloy_axe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/bendalloy_axe.json new file mode 100644 index 000000000..5202072cc --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/bendalloy_axe.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/bendalloy" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:bendalloy_axe" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:bendalloy_axe" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/bendalloy_hoe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/bendalloy_hoe.json new file mode 100644 index 000000000..efc4cd009 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/bendalloy_hoe.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/bendalloy" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:bendalloy_hoe" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:bendalloy_hoe" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/bendalloy_pickaxe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/bendalloy_pickaxe.json new file mode 100644 index 000000000..61cc5ca09 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/bendalloy_pickaxe.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/bendalloy" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:bendalloy_pickaxe" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:bendalloy_pickaxe" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/bendalloy_shovel.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/bendalloy_shovel.json new file mode 100644 index 000000000..4d3bfd71a --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/bendalloy_shovel.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/bendalloy" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:bendalloy_shovel" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:bendalloy_shovel" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/brass_axe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/brass_axe.json new file mode 100644 index 000000000..ad4c1dc00 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/brass_axe.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/brass" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:brass_axe" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:brass_axe" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/brass_hoe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/brass_hoe.json new file mode 100644 index 000000000..804a882a0 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/brass_hoe.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/brass" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:brass_hoe" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:brass_hoe" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/brass_pickaxe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/brass_pickaxe.json new file mode 100644 index 000000000..552173bfd --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/brass_pickaxe.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/brass" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:brass_pickaxe" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:brass_pickaxe" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/brass_shovel.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/brass_shovel.json new file mode 100644 index 000000000..157b7d7a3 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/brass_shovel.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/brass" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:brass_shovel" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:brass_shovel" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/bronze_axe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/bronze_axe.json new file mode 100644 index 000000000..788f96ab7 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/bronze_axe.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/bronze" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:bronze_axe" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:bronze_axe" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/bronze_hoe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/bronze_hoe.json new file mode 100644 index 000000000..a311a81eb --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/bronze_hoe.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/bronze" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:bronze_hoe" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:bronze_hoe" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/bronze_pickaxe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/bronze_pickaxe.json new file mode 100644 index 000000000..d2137512a --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/bronze_pickaxe.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/bronze" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:bronze_pickaxe" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:bronze_pickaxe" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/bronze_shovel.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/bronze_shovel.json new file mode 100644 index 000000000..f1f907079 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/bronze_shovel.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/bronze" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:bronze_shovel" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:bronze_shovel" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/cadmium_axe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/cadmium_axe.json new file mode 100644 index 000000000..8f5c14279 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/cadmium_axe.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/cadmium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:cadmium_axe" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:cadmium_axe" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/cadmium_hoe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/cadmium_hoe.json new file mode 100644 index 000000000..53609e9c3 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/cadmium_hoe.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/cadmium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:cadmium_hoe" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:cadmium_hoe" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/cadmium_pickaxe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/cadmium_pickaxe.json new file mode 100644 index 000000000..6a3d70eaa --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/cadmium_pickaxe.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/cadmium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:cadmium_pickaxe" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:cadmium_pickaxe" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/cadmium_shovel.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/cadmium_shovel.json new file mode 100644 index 000000000..12170fdeb --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/cadmium_shovel.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/cadmium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:cadmium_shovel" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:cadmium_shovel" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/chromium_axe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/chromium_axe.json new file mode 100644 index 000000000..b5af2e413 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/chromium_axe.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/chromium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:chromium_axe" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:chromium_axe" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/chromium_hoe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/chromium_hoe.json new file mode 100644 index 000000000..1d9e6d3da --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/chromium_hoe.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/chromium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:chromium_hoe" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:chromium_hoe" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/chromium_pickaxe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/chromium_pickaxe.json new file mode 100644 index 000000000..7cf623b72 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/chromium_pickaxe.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/chromium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:chromium_pickaxe" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:chromium_pickaxe" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/chromium_shovel.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/chromium_shovel.json new file mode 100644 index 000000000..2d6995df4 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/chromium_shovel.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/chromium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:chromium_shovel" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:chromium_shovel" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/copper_axe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/copper_axe.json new file mode 100644 index 000000000..f3eb0bba0 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/copper_axe.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/copper" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:copper_axe" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:copper_axe" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/copper_hoe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/copper_hoe.json new file mode 100644 index 000000000..9d97a1930 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/copper_hoe.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/copper" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:copper_hoe" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:copper_hoe" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/copper_pickaxe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/copper_pickaxe.json new file mode 100644 index 000000000..f89cee2fe --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/copper_pickaxe.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/copper" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:copper_pickaxe" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:copper_pickaxe" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/copper_shovel.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/copper_shovel.json new file mode 100644 index 000000000..21a4e339a --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/copper_shovel.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/copper" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:copper_shovel" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:copper_shovel" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/duralumin_axe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/duralumin_axe.json new file mode 100644 index 000000000..ba8dc9224 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/duralumin_axe.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/duralumin" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:duralumin_axe" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:duralumin_axe" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/duralumin_hoe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/duralumin_hoe.json new file mode 100644 index 000000000..3f603e749 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/duralumin_hoe.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/duralumin" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:duralumin_hoe" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:duralumin_hoe" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/duralumin_pickaxe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/duralumin_pickaxe.json new file mode 100644 index 000000000..50734ea1f --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/duralumin_pickaxe.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/duralumin" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:duralumin_pickaxe" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:duralumin_pickaxe" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/duralumin_shovel.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/duralumin_shovel.json new file mode 100644 index 000000000..d3221853f --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/duralumin_shovel.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/duralumin" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:duralumin_shovel" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:duralumin_shovel" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/electrum_axe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/electrum_axe.json new file mode 100644 index 000000000..8771d4dc9 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/electrum_axe.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/electrum" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:electrum_axe" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:electrum_axe" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/electrum_hoe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/electrum_hoe.json new file mode 100644 index 000000000..16f27c2ab --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/electrum_hoe.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/electrum" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:electrum_hoe" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:electrum_hoe" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/electrum_pickaxe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/electrum_pickaxe.json new file mode 100644 index 000000000..c6b68cf33 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/electrum_pickaxe.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/electrum" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:electrum_pickaxe" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:electrum_pickaxe" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/electrum_shovel.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/electrum_shovel.json new file mode 100644 index 000000000..ed9d92ed0 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/electrum_shovel.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/electrum" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:electrum_shovel" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:electrum_shovel" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/harmonium_axe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/harmonium_axe.json new file mode 100644 index 000000000..9db3ef62a --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/harmonium_axe.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/harmonium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:harmonium_axe" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:harmonium_axe" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/harmonium_hoe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/harmonium_hoe.json new file mode 100644 index 000000000..59aa48f3d --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/harmonium_hoe.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/harmonium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:harmonium_hoe" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:harmonium_hoe" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/harmonium_pickaxe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/harmonium_pickaxe.json new file mode 100644 index 000000000..b2b05c968 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/harmonium_pickaxe.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/harmonium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:harmonium_pickaxe" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:harmonium_pickaxe" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/harmonium_shovel.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/harmonium_shovel.json new file mode 100644 index 000000000..70f344c17 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/harmonium_shovel.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/harmonium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:harmonium_shovel" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:harmonium_shovel" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/lead_axe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/lead_axe.json new file mode 100644 index 000000000..a803d819e --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/lead_axe.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/lead" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:lead_axe" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:lead_axe" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/lead_hoe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/lead_hoe.json new file mode 100644 index 000000000..83d759d64 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/lead_hoe.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/lead" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:lead_hoe" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:lead_hoe" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/lead_pickaxe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/lead_pickaxe.json new file mode 100644 index 000000000..616fa0ddb --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/lead_pickaxe.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/lead" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:lead_pickaxe" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:lead_pickaxe" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/lead_shovel.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/lead_shovel.json new file mode 100644 index 000000000..71a091515 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/lead_shovel.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/lead" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:lead_shovel" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:lead_shovel" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/lerasatium_axe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/lerasatium_axe.json new file mode 100644 index 000000000..72ca3512b --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/lerasatium_axe.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/lerasatium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:lerasatium_axe" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:lerasatium_axe" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/lerasatium_hoe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/lerasatium_hoe.json new file mode 100644 index 000000000..b01de0c68 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/lerasatium_hoe.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/lerasatium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:lerasatium_hoe" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:lerasatium_hoe" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/lerasatium_pickaxe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/lerasatium_pickaxe.json new file mode 100644 index 000000000..9d7d2d4fe --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/lerasatium_pickaxe.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/lerasatium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:lerasatium_pickaxe" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:lerasatium_pickaxe" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/lerasatium_shovel.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/lerasatium_shovel.json new file mode 100644 index 000000000..3b2629269 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/lerasatium_shovel.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/lerasatium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:lerasatium_shovel" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:lerasatium_shovel" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/lerasium_axe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/lerasium_axe.json new file mode 100644 index 000000000..5a1f20d30 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/lerasium_axe.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/lerasium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:lerasium_axe" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:lerasium_axe" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/lerasium_hoe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/lerasium_hoe.json new file mode 100644 index 000000000..33184c37b --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/lerasium_hoe.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/lerasium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:lerasium_hoe" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:lerasium_hoe" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/lerasium_pickaxe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/lerasium_pickaxe.json new file mode 100644 index 000000000..8c4eca161 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/lerasium_pickaxe.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/lerasium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:lerasium_pickaxe" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:lerasium_pickaxe" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/lerasium_shovel.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/lerasium_shovel.json new file mode 100644 index 000000000..50b3c0679 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/lerasium_shovel.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/lerasium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:lerasium_shovel" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:lerasium_shovel" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/malatium_axe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/malatium_axe.json new file mode 100644 index 000000000..4024eea56 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/malatium_axe.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/malatium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:malatium_axe" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:malatium_axe" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/malatium_hoe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/malatium_hoe.json new file mode 100644 index 000000000..6eba1222e --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/malatium_hoe.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/malatium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:malatium_hoe" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:malatium_hoe" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/malatium_pickaxe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/malatium_pickaxe.json new file mode 100644 index 000000000..e34b72416 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/malatium_pickaxe.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/malatium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:malatium_pickaxe" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:malatium_pickaxe" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/malatium_shovel.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/malatium_shovel.json new file mode 100644 index 000000000..ceab28e6f --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/malatium_shovel.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/malatium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:malatium_shovel" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:malatium_shovel" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/nickel_axe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/nickel_axe.json new file mode 100644 index 000000000..e0b62d08b --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/nickel_axe.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/nickel" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:nickel_axe" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:nickel_axe" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/nickel_hoe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/nickel_hoe.json new file mode 100644 index 000000000..6dd6be175 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/nickel_hoe.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/nickel" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:nickel_hoe" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:nickel_hoe" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/nickel_pickaxe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/nickel_pickaxe.json new file mode 100644 index 000000000..39691d603 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/nickel_pickaxe.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/nickel" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:nickel_pickaxe" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:nickel_pickaxe" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/nickel_shovel.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/nickel_shovel.json new file mode 100644 index 000000000..358061f0a --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/nickel_shovel.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/nickel" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:nickel_shovel" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:nickel_shovel" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/nicrosil_axe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/nicrosil_axe.json new file mode 100644 index 000000000..822a90570 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/nicrosil_axe.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/nicrosil" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:nicrosil_axe" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:nicrosil_axe" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/nicrosil_hoe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/nicrosil_hoe.json new file mode 100644 index 000000000..9ecbab654 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/nicrosil_hoe.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/nicrosil" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:nicrosil_hoe" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:nicrosil_hoe" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/nicrosil_pickaxe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/nicrosil_pickaxe.json new file mode 100644 index 000000000..c3083f0fa --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/nicrosil_pickaxe.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/nicrosil" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:nicrosil_pickaxe" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:nicrosil_pickaxe" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/nicrosil_shovel.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/nicrosil_shovel.json new file mode 100644 index 000000000..3a500716f --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/nicrosil_shovel.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/nicrosil" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:nicrosil_shovel" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:nicrosil_shovel" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/pewter_axe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/pewter_axe.json new file mode 100644 index 000000000..031064db6 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/pewter_axe.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/pewter" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:pewter_axe" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:pewter_axe" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/pewter_hoe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/pewter_hoe.json new file mode 100644 index 000000000..c906807cd --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/pewter_hoe.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/pewter" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:pewter_hoe" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:pewter_hoe" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/pewter_pickaxe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/pewter_pickaxe.json new file mode 100644 index 000000000..035af1197 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/pewter_pickaxe.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/pewter" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:pewter_pickaxe" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:pewter_pickaxe" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/pewter_shovel.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/pewter_shovel.json new file mode 100644 index 000000000..b35d1cdda --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/pewter_shovel.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/pewter" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:pewter_shovel" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:pewter_shovel" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/silver_axe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/silver_axe.json new file mode 100644 index 000000000..c9124c730 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/silver_axe.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/silver" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:silver_axe" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:silver_axe" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/silver_hoe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/silver_hoe.json new file mode 100644 index 000000000..88383d7c7 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/silver_hoe.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/silver" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:silver_hoe" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:silver_hoe" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/silver_pickaxe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/silver_pickaxe.json new file mode 100644 index 000000000..974e15c09 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/silver_pickaxe.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/silver" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:silver_pickaxe" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:silver_pickaxe" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/silver_shovel.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/silver_shovel.json new file mode 100644 index 000000000..a27888a84 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/silver_shovel.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/silver" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:silver_shovel" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:silver_shovel" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/steel_axe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/steel_axe.json new file mode 100644 index 000000000..e4ae55cc6 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/steel_axe.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/steel" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:steel_axe" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:steel_axe" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/steel_hoe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/steel_hoe.json new file mode 100644 index 000000000..33bc7637a --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/steel_hoe.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/steel" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:steel_hoe" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:steel_hoe" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/steel_pickaxe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/steel_pickaxe.json new file mode 100644 index 000000000..f6cd9d86d --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/steel_pickaxe.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/steel" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:steel_pickaxe" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:steel_pickaxe" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/steel_shovel.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/steel_shovel.json new file mode 100644 index 000000000..8e3103577 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/steel_shovel.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/steel" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:steel_shovel" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:steel_shovel" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/tin_axe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/tin_axe.json new file mode 100644 index 000000000..9200c6b46 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/tin_axe.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/tin" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:tin_axe" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:tin_axe" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/tin_hoe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/tin_hoe.json new file mode 100644 index 000000000..f5eec92e0 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/tin_hoe.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/tin" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:tin_hoe" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:tin_hoe" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/tin_pickaxe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/tin_pickaxe.json new file mode 100644 index 000000000..aa3fd118b --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/tin_pickaxe.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/tin" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:tin_pickaxe" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:tin_pickaxe" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/tin_shovel.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/tin_shovel.json new file mode 100644 index 000000000..a8f064ddb --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/tin_shovel.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/tin" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:tin_shovel" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:tin_shovel" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/zinc_axe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/zinc_axe.json new file mode 100644 index 000000000..edeedbab9 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/zinc_axe.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/zinc" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:zinc_axe" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:zinc_axe" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/zinc_hoe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/zinc_hoe.json new file mode 100644 index 000000000..2991048d7 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/zinc_hoe.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/zinc" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:zinc_hoe" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:zinc_hoe" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/zinc_pickaxe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/zinc_pickaxe.json new file mode 100644 index 000000000..75d35cd75 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/zinc_pickaxe.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/zinc" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:zinc_pickaxe" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:zinc_pickaxe" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/zinc_shovel.json b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/zinc_shovel.json new file mode 100644 index 000000000..136d998d8 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/advancements/recipes/tools/zinc_shovel.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/zinc" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "cosmeretools:zinc_shovel" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "cosmeretools:zinc_shovel" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/aluminum_axe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/aluminum_axe.json new file mode 100644 index 000000000..541070664 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/aluminum_axe.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "axe", + "key": { + "X": { + "tag": "forge:ingots/aluminum" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "XX", + "XY", + " Y" + ], + "result": { + "item": "cosmeretools:aluminum_axe" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/aluminum_boots.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/aluminum_boots.json new file mode 100644 index 000000000..9d361775d --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/aluminum_boots.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "boots", + "key": { + "X": { + "tag": "forge:ingots/aluminum" + } + }, + "pattern": [ + "X X", + "X X" + ], + "result": { + "item": "cosmeretools:aluminum_boots" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/aluminum_chestplate.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/aluminum_chestplate.json new file mode 100644 index 000000000..0315ed87b --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/aluminum_chestplate.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "chestplate", + "key": { + "X": { + "tag": "forge:ingots/aluminum" + } + }, + "pattern": [ + "X X", + "XXX", + "XXX" + ], + "result": { + "item": "cosmeretools:aluminum_chestplate" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/aluminum_helmet.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/aluminum_helmet.json new file mode 100644 index 000000000..c62064b41 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/aluminum_helmet.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "helmet", + "key": { + "X": { + "tag": "forge:ingots/aluminum" + } + }, + "pattern": [ + "XXX", + "X X" + ], + "result": { + "item": "cosmeretools:aluminum_helmet" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/aluminum_hoe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/aluminum_hoe.json new file mode 100644 index 000000000..7eb9c3eef --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/aluminum_hoe.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "hoe", + "key": { + "X": { + "tag": "forge:ingots/aluminum" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "XX", + " Y", + " Y" + ], + "result": { + "item": "cosmeretools:aluminum_hoe" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/aluminum_leggings.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/aluminum_leggings.json new file mode 100644 index 000000000..c4c4df927 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/aluminum_leggings.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "leggings", + "key": { + "X": { + "tag": "forge:ingots/aluminum" + } + }, + "pattern": [ + "XXX", + "X X", + "X X" + ], + "result": { + "item": "cosmeretools:aluminum_leggings" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/aluminum_pickaxe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/aluminum_pickaxe.json new file mode 100644 index 000000000..e444e61d8 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/aluminum_pickaxe.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "pickaxe", + "key": { + "X": { + "tag": "forge:ingots/aluminum" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "XXX", + " Y ", + " Y " + ], + "result": { + "item": "cosmeretools:aluminum_pickaxe" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/aluminum_shovel.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/aluminum_shovel.json new file mode 100644 index 000000000..1f5b6548c --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/aluminum_shovel.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "shovel", + "key": { + "X": { + "tag": "forge:ingots/aluminum" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "X", + "Y", + "Y" + ], + "result": { + "item": "cosmeretools:aluminum_shovel" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/aluminum_sword.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/aluminum_sword.json new file mode 100644 index 000000000..155c793e6 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/aluminum_sword.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "sword", + "key": { + "X": { + "tag": "forge:ingots/aluminum" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "X", + "X", + "Y" + ], + "result": { + "item": "cosmeretools:aluminum_sword" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/atium_axe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/atium_axe.json new file mode 100644 index 000000000..d595b6094 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/atium_axe.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "axe", + "key": { + "X": { + "tag": "forge:ingots/atium" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "XX", + "XY", + " Y" + ], + "result": { + "item": "cosmeretools:atium_axe" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/atium_boots.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/atium_boots.json new file mode 100644 index 000000000..dee327043 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/atium_boots.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "boots", + "key": { + "X": { + "tag": "forge:ingots/atium" + } + }, + "pattern": [ + "X X", + "X X" + ], + "result": { + "item": "cosmeretools:atium_boots" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/atium_chestplate.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/atium_chestplate.json new file mode 100644 index 000000000..e2d43b4f3 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/atium_chestplate.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "chestplate", + "key": { + "X": { + "tag": "forge:ingots/atium" + } + }, + "pattern": [ + "X X", + "XXX", + "XXX" + ], + "result": { + "item": "cosmeretools:atium_chestplate" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/atium_helmet.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/atium_helmet.json new file mode 100644 index 000000000..49b7b1d19 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/atium_helmet.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "helmet", + "key": { + "X": { + "tag": "forge:ingots/atium" + } + }, + "pattern": [ + "XXX", + "X X" + ], + "result": { + "item": "cosmeretools:atium_helmet" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/atium_hoe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/atium_hoe.json new file mode 100644 index 000000000..ac98a3569 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/atium_hoe.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "hoe", + "key": { + "X": { + "tag": "forge:ingots/atium" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "XX", + " Y", + " Y" + ], + "result": { + "item": "cosmeretools:atium_hoe" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/atium_leggings.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/atium_leggings.json new file mode 100644 index 000000000..899ee69a4 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/atium_leggings.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "leggings", + "key": { + "X": { + "tag": "forge:ingots/atium" + } + }, + "pattern": [ + "XXX", + "X X", + "X X" + ], + "result": { + "item": "cosmeretools:atium_leggings" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/atium_pickaxe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/atium_pickaxe.json new file mode 100644 index 000000000..d39750540 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/atium_pickaxe.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "pickaxe", + "key": { + "X": { + "tag": "forge:ingots/atium" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "XXX", + " Y ", + " Y " + ], + "result": { + "item": "cosmeretools:atium_pickaxe" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/atium_shovel.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/atium_shovel.json new file mode 100644 index 000000000..c849345b2 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/atium_shovel.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "shovel", + "key": { + "X": { + "tag": "forge:ingots/atium" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "X", + "Y", + "Y" + ], + "result": { + "item": "cosmeretools:atium_shovel" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/atium_sword.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/atium_sword.json new file mode 100644 index 000000000..abde91c51 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/atium_sword.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "sword", + "key": { + "X": { + "tag": "forge:ingots/atium" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "X", + "X", + "Y" + ], + "result": { + "item": "cosmeretools:atium_sword" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/bendalloy_axe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/bendalloy_axe.json new file mode 100644 index 000000000..4db8d2703 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/bendalloy_axe.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "axe", + "key": { + "X": { + "tag": "forge:ingots/bendalloy" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "XX", + "XY", + " Y" + ], + "result": { + "item": "cosmeretools:bendalloy_axe" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/bendalloy_boots.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/bendalloy_boots.json new file mode 100644 index 000000000..8ce476169 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/bendalloy_boots.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "boots", + "key": { + "X": { + "tag": "forge:ingots/bendalloy" + } + }, + "pattern": [ + "X X", + "X X" + ], + "result": { + "item": "cosmeretools:bendalloy_boots" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/bendalloy_chestplate.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/bendalloy_chestplate.json new file mode 100644 index 000000000..6ad8cf9e8 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/bendalloy_chestplate.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "chestplate", + "key": { + "X": { + "tag": "forge:ingots/bendalloy" + } + }, + "pattern": [ + "X X", + "XXX", + "XXX" + ], + "result": { + "item": "cosmeretools:bendalloy_chestplate" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/bendalloy_helmet.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/bendalloy_helmet.json new file mode 100644 index 000000000..1872dfe86 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/bendalloy_helmet.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "helmet", + "key": { + "X": { + "tag": "forge:ingots/bendalloy" + } + }, + "pattern": [ + "XXX", + "X X" + ], + "result": { + "item": "cosmeretools:bendalloy_helmet" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/bendalloy_hoe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/bendalloy_hoe.json new file mode 100644 index 000000000..53631cf93 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/bendalloy_hoe.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "hoe", + "key": { + "X": { + "tag": "forge:ingots/bendalloy" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "XX", + " Y", + " Y" + ], + "result": { + "item": "cosmeretools:bendalloy_hoe" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/bendalloy_leggings.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/bendalloy_leggings.json new file mode 100644 index 000000000..a58b69121 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/bendalloy_leggings.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "leggings", + "key": { + "X": { + "tag": "forge:ingots/bendalloy" + } + }, + "pattern": [ + "XXX", + "X X", + "X X" + ], + "result": { + "item": "cosmeretools:bendalloy_leggings" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/bendalloy_pickaxe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/bendalloy_pickaxe.json new file mode 100644 index 000000000..fd7131430 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/bendalloy_pickaxe.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "pickaxe", + "key": { + "X": { + "tag": "forge:ingots/bendalloy" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "XXX", + " Y ", + " Y " + ], + "result": { + "item": "cosmeretools:bendalloy_pickaxe" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/bendalloy_shovel.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/bendalloy_shovel.json new file mode 100644 index 000000000..4de3daa05 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/bendalloy_shovel.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "shovel", + "key": { + "X": { + "tag": "forge:ingots/bendalloy" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "X", + "Y", + "Y" + ], + "result": { + "item": "cosmeretools:bendalloy_shovel" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/bendalloy_sword.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/bendalloy_sword.json new file mode 100644 index 000000000..a6e297bad --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/bendalloy_sword.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "sword", + "key": { + "X": { + "tag": "forge:ingots/bendalloy" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "X", + "X", + "Y" + ], + "result": { + "item": "cosmeretools:bendalloy_sword" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/brass_axe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/brass_axe.json new file mode 100644 index 000000000..a736651f5 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/brass_axe.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "axe", + "key": { + "X": { + "tag": "forge:ingots/brass" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "XX", + "XY", + " Y" + ], + "result": { + "item": "cosmeretools:brass_axe" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/brass_boots.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/brass_boots.json new file mode 100644 index 000000000..be13b93fd --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/brass_boots.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "boots", + "key": { + "X": { + "tag": "forge:ingots/brass" + } + }, + "pattern": [ + "X X", + "X X" + ], + "result": { + "item": "cosmeretools:brass_boots" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/brass_chestplate.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/brass_chestplate.json new file mode 100644 index 000000000..b9fac8e7b --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/brass_chestplate.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "chestplate", + "key": { + "X": { + "tag": "forge:ingots/brass" + } + }, + "pattern": [ + "X X", + "XXX", + "XXX" + ], + "result": { + "item": "cosmeretools:brass_chestplate" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/brass_helmet.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/brass_helmet.json new file mode 100644 index 000000000..74456a85e --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/brass_helmet.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "helmet", + "key": { + "X": { + "tag": "forge:ingots/brass" + } + }, + "pattern": [ + "XXX", + "X X" + ], + "result": { + "item": "cosmeretools:brass_helmet" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/brass_hoe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/brass_hoe.json new file mode 100644 index 000000000..4cbaa4e5b --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/brass_hoe.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "hoe", + "key": { + "X": { + "tag": "forge:ingots/brass" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "XX", + " Y", + " Y" + ], + "result": { + "item": "cosmeretools:brass_hoe" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/brass_leggings.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/brass_leggings.json new file mode 100644 index 000000000..c50e3b50b --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/brass_leggings.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "leggings", + "key": { + "X": { + "tag": "forge:ingots/brass" + } + }, + "pattern": [ + "XXX", + "X X", + "X X" + ], + "result": { + "item": "cosmeretools:brass_leggings" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/brass_pickaxe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/brass_pickaxe.json new file mode 100644 index 000000000..f4ade045b --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/brass_pickaxe.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "pickaxe", + "key": { + "X": { + "tag": "forge:ingots/brass" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "XXX", + " Y ", + " Y " + ], + "result": { + "item": "cosmeretools:brass_pickaxe" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/brass_shovel.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/brass_shovel.json new file mode 100644 index 000000000..0888079bb --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/brass_shovel.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "shovel", + "key": { + "X": { + "tag": "forge:ingots/brass" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "X", + "Y", + "Y" + ], + "result": { + "item": "cosmeretools:brass_shovel" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/brass_sword.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/brass_sword.json new file mode 100644 index 000000000..768e7bad4 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/brass_sword.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "sword", + "key": { + "X": { + "tag": "forge:ingots/brass" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "X", + "X", + "Y" + ], + "result": { + "item": "cosmeretools:brass_sword" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/bronze_axe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/bronze_axe.json new file mode 100644 index 000000000..3e3c76fc0 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/bronze_axe.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "axe", + "key": { + "X": { + "tag": "forge:ingots/bronze" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "XX", + "XY", + " Y" + ], + "result": { + "item": "cosmeretools:bronze_axe" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/bronze_boots.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/bronze_boots.json new file mode 100644 index 000000000..a8cb53dc7 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/bronze_boots.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "boots", + "key": { + "X": { + "tag": "forge:ingots/bronze" + } + }, + "pattern": [ + "X X", + "X X" + ], + "result": { + "item": "cosmeretools:bronze_boots" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/bronze_chestplate.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/bronze_chestplate.json new file mode 100644 index 000000000..a88f6e85d --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/bronze_chestplate.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "chestplate", + "key": { + "X": { + "tag": "forge:ingots/bronze" + } + }, + "pattern": [ + "X X", + "XXX", + "XXX" + ], + "result": { + "item": "cosmeretools:bronze_chestplate" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/bronze_helmet.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/bronze_helmet.json new file mode 100644 index 000000000..b9db0ae93 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/bronze_helmet.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "helmet", + "key": { + "X": { + "tag": "forge:ingots/bronze" + } + }, + "pattern": [ + "XXX", + "X X" + ], + "result": { + "item": "cosmeretools:bronze_helmet" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/bronze_hoe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/bronze_hoe.json new file mode 100644 index 000000000..e2cceca4e --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/bronze_hoe.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "hoe", + "key": { + "X": { + "tag": "forge:ingots/bronze" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "XX", + " Y", + " Y" + ], + "result": { + "item": "cosmeretools:bronze_hoe" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/bronze_leggings.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/bronze_leggings.json new file mode 100644 index 000000000..9b34d39fc --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/bronze_leggings.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "leggings", + "key": { + "X": { + "tag": "forge:ingots/bronze" + } + }, + "pattern": [ + "XXX", + "X X", + "X X" + ], + "result": { + "item": "cosmeretools:bronze_leggings" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/bronze_pickaxe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/bronze_pickaxe.json new file mode 100644 index 000000000..9b3af4589 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/bronze_pickaxe.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "pickaxe", + "key": { + "X": { + "tag": "forge:ingots/bronze" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "XXX", + " Y ", + " Y " + ], + "result": { + "item": "cosmeretools:bronze_pickaxe" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/bronze_shovel.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/bronze_shovel.json new file mode 100644 index 000000000..e6420a1a8 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/bronze_shovel.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "shovel", + "key": { + "X": { + "tag": "forge:ingots/bronze" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "X", + "Y", + "Y" + ], + "result": { + "item": "cosmeretools:bronze_shovel" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/bronze_sword.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/bronze_sword.json new file mode 100644 index 000000000..9bb3b724c --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/bronze_sword.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "sword", + "key": { + "X": { + "tag": "forge:ingots/bronze" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "X", + "X", + "Y" + ], + "result": { + "item": "cosmeretools:bronze_sword" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/cadmium_axe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/cadmium_axe.json new file mode 100644 index 000000000..7381390d1 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/cadmium_axe.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "axe", + "key": { + "X": { + "tag": "forge:ingots/cadmium" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "XX", + "XY", + " Y" + ], + "result": { + "item": "cosmeretools:cadmium_axe" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/cadmium_boots.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/cadmium_boots.json new file mode 100644 index 000000000..1b4436e1f --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/cadmium_boots.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "boots", + "key": { + "X": { + "tag": "forge:ingots/cadmium" + } + }, + "pattern": [ + "X X", + "X X" + ], + "result": { + "item": "cosmeretools:cadmium_boots" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/cadmium_chestplate.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/cadmium_chestplate.json new file mode 100644 index 000000000..4172bef8e --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/cadmium_chestplate.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "chestplate", + "key": { + "X": { + "tag": "forge:ingots/cadmium" + } + }, + "pattern": [ + "X X", + "XXX", + "XXX" + ], + "result": { + "item": "cosmeretools:cadmium_chestplate" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/cadmium_helmet.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/cadmium_helmet.json new file mode 100644 index 000000000..a281e508d --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/cadmium_helmet.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "helmet", + "key": { + "X": { + "tag": "forge:ingots/cadmium" + } + }, + "pattern": [ + "XXX", + "X X" + ], + "result": { + "item": "cosmeretools:cadmium_helmet" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/cadmium_hoe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/cadmium_hoe.json new file mode 100644 index 000000000..77a0d2928 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/cadmium_hoe.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "hoe", + "key": { + "X": { + "tag": "forge:ingots/cadmium" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "XX", + " Y", + " Y" + ], + "result": { + "item": "cosmeretools:cadmium_hoe" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/cadmium_leggings.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/cadmium_leggings.json new file mode 100644 index 000000000..a080f1d9b --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/cadmium_leggings.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "leggings", + "key": { + "X": { + "tag": "forge:ingots/cadmium" + } + }, + "pattern": [ + "XXX", + "X X", + "X X" + ], + "result": { + "item": "cosmeretools:cadmium_leggings" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/cadmium_pickaxe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/cadmium_pickaxe.json new file mode 100644 index 000000000..ebf852d47 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/cadmium_pickaxe.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "pickaxe", + "key": { + "X": { + "tag": "forge:ingots/cadmium" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "XXX", + " Y ", + " Y " + ], + "result": { + "item": "cosmeretools:cadmium_pickaxe" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/cadmium_shovel.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/cadmium_shovel.json new file mode 100644 index 000000000..1802050d3 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/cadmium_shovel.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "shovel", + "key": { + "X": { + "tag": "forge:ingots/cadmium" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "X", + "Y", + "Y" + ], + "result": { + "item": "cosmeretools:cadmium_shovel" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/cadmium_sword.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/cadmium_sword.json new file mode 100644 index 000000000..de70f0d6a --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/cadmium_sword.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "sword", + "key": { + "X": { + "tag": "forge:ingots/cadmium" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "X", + "X", + "Y" + ], + "result": { + "item": "cosmeretools:cadmium_sword" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/chromium_axe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/chromium_axe.json new file mode 100644 index 000000000..819d21335 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/chromium_axe.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "axe", + "key": { + "X": { + "tag": "forge:ingots/chromium" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "XX", + "XY", + " Y" + ], + "result": { + "item": "cosmeretools:chromium_axe" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/chromium_boots.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/chromium_boots.json new file mode 100644 index 000000000..d816e5529 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/chromium_boots.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "boots", + "key": { + "X": { + "tag": "forge:ingots/chromium" + } + }, + "pattern": [ + "X X", + "X X" + ], + "result": { + "item": "cosmeretools:chromium_boots" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/chromium_chestplate.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/chromium_chestplate.json new file mode 100644 index 000000000..02f173912 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/chromium_chestplate.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "chestplate", + "key": { + "X": { + "tag": "forge:ingots/chromium" + } + }, + "pattern": [ + "X X", + "XXX", + "XXX" + ], + "result": { + "item": "cosmeretools:chromium_chestplate" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/chromium_helmet.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/chromium_helmet.json new file mode 100644 index 000000000..0f019a0db --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/chromium_helmet.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "helmet", + "key": { + "X": { + "tag": "forge:ingots/chromium" + } + }, + "pattern": [ + "XXX", + "X X" + ], + "result": { + "item": "cosmeretools:chromium_helmet" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/chromium_hoe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/chromium_hoe.json new file mode 100644 index 000000000..cccbefb2f --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/chromium_hoe.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "hoe", + "key": { + "X": { + "tag": "forge:ingots/chromium" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "XX", + " Y", + " Y" + ], + "result": { + "item": "cosmeretools:chromium_hoe" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/chromium_leggings.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/chromium_leggings.json new file mode 100644 index 000000000..8a7186a52 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/chromium_leggings.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "leggings", + "key": { + "X": { + "tag": "forge:ingots/chromium" + } + }, + "pattern": [ + "XXX", + "X X", + "X X" + ], + "result": { + "item": "cosmeretools:chromium_leggings" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/chromium_pickaxe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/chromium_pickaxe.json new file mode 100644 index 000000000..2e40e03fa --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/chromium_pickaxe.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "pickaxe", + "key": { + "X": { + "tag": "forge:ingots/chromium" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "XXX", + " Y ", + " Y " + ], + "result": { + "item": "cosmeretools:chromium_pickaxe" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/chromium_shovel.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/chromium_shovel.json new file mode 100644 index 000000000..cdfa81ab3 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/chromium_shovel.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "shovel", + "key": { + "X": { + "tag": "forge:ingots/chromium" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "X", + "Y", + "Y" + ], + "result": { + "item": "cosmeretools:chromium_shovel" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/chromium_sword.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/chromium_sword.json new file mode 100644 index 000000000..8bec8c948 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/chromium_sword.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "sword", + "key": { + "X": { + "tag": "forge:ingots/chromium" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "X", + "X", + "Y" + ], + "result": { + "item": "cosmeretools:chromium_sword" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/copper_axe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/copper_axe.json new file mode 100644 index 000000000..553dcf9a4 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/copper_axe.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "axe", + "key": { + "X": { + "tag": "forge:ingots/copper" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "XX", + "XY", + " Y" + ], + "result": { + "item": "cosmeretools:copper_axe" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/copper_boots.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/copper_boots.json new file mode 100644 index 000000000..c659469eb --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/copper_boots.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "boots", + "key": { + "X": { + "tag": "forge:ingots/copper" + } + }, + "pattern": [ + "X X", + "X X" + ], + "result": { + "item": "cosmeretools:copper_boots" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/copper_chestplate.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/copper_chestplate.json new file mode 100644 index 000000000..a92dcecb6 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/copper_chestplate.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "chestplate", + "key": { + "X": { + "tag": "forge:ingots/copper" + } + }, + "pattern": [ + "X X", + "XXX", + "XXX" + ], + "result": { + "item": "cosmeretools:copper_chestplate" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/copper_helmet.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/copper_helmet.json new file mode 100644 index 000000000..87b015f3d --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/copper_helmet.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "helmet", + "key": { + "X": { + "tag": "forge:ingots/copper" + } + }, + "pattern": [ + "XXX", + "X X" + ], + "result": { + "item": "cosmeretools:copper_helmet" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/copper_hoe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/copper_hoe.json new file mode 100644 index 000000000..301fdfe21 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/copper_hoe.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "hoe", + "key": { + "X": { + "tag": "forge:ingots/copper" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "XX", + " Y", + " Y" + ], + "result": { + "item": "cosmeretools:copper_hoe" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/copper_leggings.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/copper_leggings.json new file mode 100644 index 000000000..cdba8546c --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/copper_leggings.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "leggings", + "key": { + "X": { + "tag": "forge:ingots/copper" + } + }, + "pattern": [ + "XXX", + "X X", + "X X" + ], + "result": { + "item": "cosmeretools:copper_leggings" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/copper_pickaxe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/copper_pickaxe.json new file mode 100644 index 000000000..4b5975ac4 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/copper_pickaxe.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "pickaxe", + "key": { + "X": { + "tag": "forge:ingots/copper" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "XXX", + " Y ", + " Y " + ], + "result": { + "item": "cosmeretools:copper_pickaxe" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/copper_shovel.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/copper_shovel.json new file mode 100644 index 000000000..08b2cbee5 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/copper_shovel.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "shovel", + "key": { + "X": { + "tag": "forge:ingots/copper" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "X", + "Y", + "Y" + ], + "result": { + "item": "cosmeretools:copper_shovel" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/copper_sword.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/copper_sword.json new file mode 100644 index 000000000..fecea7ea2 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/copper_sword.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "sword", + "key": { + "X": { + "tag": "forge:ingots/copper" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "X", + "X", + "Y" + ], + "result": { + "item": "cosmeretools:copper_sword" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/duralumin_axe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/duralumin_axe.json new file mode 100644 index 000000000..a62f1b8e4 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/duralumin_axe.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "axe", + "key": { + "X": { + "tag": "forge:ingots/duralumin" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "XX", + "XY", + " Y" + ], + "result": { + "item": "cosmeretools:duralumin_axe" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/duralumin_boots.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/duralumin_boots.json new file mode 100644 index 000000000..582105503 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/duralumin_boots.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "boots", + "key": { + "X": { + "tag": "forge:ingots/duralumin" + } + }, + "pattern": [ + "X X", + "X X" + ], + "result": { + "item": "cosmeretools:duralumin_boots" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/duralumin_chestplate.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/duralumin_chestplate.json new file mode 100644 index 000000000..df8a3b782 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/duralumin_chestplate.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "chestplate", + "key": { + "X": { + "tag": "forge:ingots/duralumin" + } + }, + "pattern": [ + "X X", + "XXX", + "XXX" + ], + "result": { + "item": "cosmeretools:duralumin_chestplate" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/duralumin_helmet.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/duralumin_helmet.json new file mode 100644 index 000000000..e5c0bd436 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/duralumin_helmet.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "helmet", + "key": { + "X": { + "tag": "forge:ingots/duralumin" + } + }, + "pattern": [ + "XXX", + "X X" + ], + "result": { + "item": "cosmeretools:duralumin_helmet" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/duralumin_hoe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/duralumin_hoe.json new file mode 100644 index 000000000..2e89b4467 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/duralumin_hoe.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "hoe", + "key": { + "X": { + "tag": "forge:ingots/duralumin" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "XX", + " Y", + " Y" + ], + "result": { + "item": "cosmeretools:duralumin_hoe" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/duralumin_leggings.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/duralumin_leggings.json new file mode 100644 index 000000000..2d3784542 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/duralumin_leggings.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "leggings", + "key": { + "X": { + "tag": "forge:ingots/duralumin" + } + }, + "pattern": [ + "XXX", + "X X", + "X X" + ], + "result": { + "item": "cosmeretools:duralumin_leggings" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/duralumin_pickaxe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/duralumin_pickaxe.json new file mode 100644 index 000000000..dcb31dc1a --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/duralumin_pickaxe.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "pickaxe", + "key": { + "X": { + "tag": "forge:ingots/duralumin" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "XXX", + " Y ", + " Y " + ], + "result": { + "item": "cosmeretools:duralumin_pickaxe" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/duralumin_shovel.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/duralumin_shovel.json new file mode 100644 index 000000000..84f58224a --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/duralumin_shovel.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "shovel", + "key": { + "X": { + "tag": "forge:ingots/duralumin" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "X", + "Y", + "Y" + ], + "result": { + "item": "cosmeretools:duralumin_shovel" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/duralumin_sword.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/duralumin_sword.json new file mode 100644 index 000000000..f5f6405af --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/duralumin_sword.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "sword", + "key": { + "X": { + "tag": "forge:ingots/duralumin" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "X", + "X", + "Y" + ], + "result": { + "item": "cosmeretools:duralumin_sword" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/electrum_axe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/electrum_axe.json new file mode 100644 index 000000000..e3b12af89 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/electrum_axe.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "axe", + "key": { + "X": { + "tag": "forge:ingots/electrum" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "XX", + "XY", + " Y" + ], + "result": { + "item": "cosmeretools:electrum_axe" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/electrum_boots.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/electrum_boots.json new file mode 100644 index 000000000..6c205ccec --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/electrum_boots.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "boots", + "key": { + "X": { + "tag": "forge:ingots/electrum" + } + }, + "pattern": [ + "X X", + "X X" + ], + "result": { + "item": "cosmeretools:electrum_boots" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/electrum_chestplate.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/electrum_chestplate.json new file mode 100644 index 000000000..b2480886d --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/electrum_chestplate.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "chestplate", + "key": { + "X": { + "tag": "forge:ingots/electrum" + } + }, + "pattern": [ + "X X", + "XXX", + "XXX" + ], + "result": { + "item": "cosmeretools:electrum_chestplate" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/electrum_helmet.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/electrum_helmet.json new file mode 100644 index 000000000..c430964f3 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/electrum_helmet.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "helmet", + "key": { + "X": { + "tag": "forge:ingots/electrum" + } + }, + "pattern": [ + "XXX", + "X X" + ], + "result": { + "item": "cosmeretools:electrum_helmet" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/electrum_hoe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/electrum_hoe.json new file mode 100644 index 000000000..9bad27401 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/electrum_hoe.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "hoe", + "key": { + "X": { + "tag": "forge:ingots/electrum" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "XX", + " Y", + " Y" + ], + "result": { + "item": "cosmeretools:electrum_hoe" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/electrum_leggings.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/electrum_leggings.json new file mode 100644 index 000000000..9d201362a --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/electrum_leggings.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "leggings", + "key": { + "X": { + "tag": "forge:ingots/electrum" + } + }, + "pattern": [ + "XXX", + "X X", + "X X" + ], + "result": { + "item": "cosmeretools:electrum_leggings" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/electrum_pickaxe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/electrum_pickaxe.json new file mode 100644 index 000000000..910f3b5bf --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/electrum_pickaxe.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "pickaxe", + "key": { + "X": { + "tag": "forge:ingots/electrum" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "XXX", + " Y ", + " Y " + ], + "result": { + "item": "cosmeretools:electrum_pickaxe" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/electrum_shovel.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/electrum_shovel.json new file mode 100644 index 000000000..31b57ee51 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/electrum_shovel.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "shovel", + "key": { + "X": { + "tag": "forge:ingots/electrum" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "X", + "Y", + "Y" + ], + "result": { + "item": "cosmeretools:electrum_shovel" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/electrum_sword.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/electrum_sword.json new file mode 100644 index 000000000..ff306f04e --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/electrum_sword.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "sword", + "key": { + "X": { + "tag": "forge:ingots/electrum" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "X", + "X", + "Y" + ], + "result": { + "item": "cosmeretools:electrum_sword" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/harmonium_axe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/harmonium_axe.json new file mode 100644 index 000000000..426a360f4 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/harmonium_axe.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "axe", + "key": { + "X": { + "tag": "forge:ingots/harmonium" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "XX", + "XY", + " Y" + ], + "result": { + "item": "cosmeretools:harmonium_axe" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/harmonium_boots.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/harmonium_boots.json new file mode 100644 index 000000000..d1b248e7f --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/harmonium_boots.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "boots", + "key": { + "X": { + "tag": "forge:ingots/harmonium" + } + }, + "pattern": [ + "X X", + "X X" + ], + "result": { + "item": "cosmeretools:harmonium_boots" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/harmonium_chestplate.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/harmonium_chestplate.json new file mode 100644 index 000000000..f8343f02c --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/harmonium_chestplate.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "chestplate", + "key": { + "X": { + "tag": "forge:ingots/harmonium" + } + }, + "pattern": [ + "X X", + "XXX", + "XXX" + ], + "result": { + "item": "cosmeretools:harmonium_chestplate" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/harmonium_helmet.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/harmonium_helmet.json new file mode 100644 index 000000000..0f922563a --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/harmonium_helmet.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "helmet", + "key": { + "X": { + "tag": "forge:ingots/harmonium" + } + }, + "pattern": [ + "XXX", + "X X" + ], + "result": { + "item": "cosmeretools:harmonium_helmet" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/harmonium_hoe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/harmonium_hoe.json new file mode 100644 index 000000000..f1236371b --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/harmonium_hoe.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "hoe", + "key": { + "X": { + "tag": "forge:ingots/harmonium" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "XX", + " Y", + " Y" + ], + "result": { + "item": "cosmeretools:harmonium_hoe" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/harmonium_leggings.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/harmonium_leggings.json new file mode 100644 index 000000000..77df78b40 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/harmonium_leggings.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "leggings", + "key": { + "X": { + "tag": "forge:ingots/harmonium" + } + }, + "pattern": [ + "XXX", + "X X", + "X X" + ], + "result": { + "item": "cosmeretools:harmonium_leggings" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/harmonium_pickaxe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/harmonium_pickaxe.json new file mode 100644 index 000000000..06a246e6d --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/harmonium_pickaxe.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "pickaxe", + "key": { + "X": { + "tag": "forge:ingots/harmonium" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "XXX", + " Y ", + " Y " + ], + "result": { + "item": "cosmeretools:harmonium_pickaxe" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/harmonium_shovel.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/harmonium_shovel.json new file mode 100644 index 000000000..85e5ae6f5 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/harmonium_shovel.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "shovel", + "key": { + "X": { + "tag": "forge:ingots/harmonium" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "X", + "Y", + "Y" + ], + "result": { + "item": "cosmeretools:harmonium_shovel" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/harmonium_sword.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/harmonium_sword.json new file mode 100644 index 000000000..a7f342b2a --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/harmonium_sword.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "sword", + "key": { + "X": { + "tag": "forge:ingots/harmonium" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "X", + "X", + "Y" + ], + "result": { + "item": "cosmeretools:harmonium_sword" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/lead_axe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/lead_axe.json new file mode 100644 index 000000000..0f54f8e9e --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/lead_axe.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "axe", + "key": { + "X": { + "tag": "forge:ingots/lead" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "XX", + "XY", + " Y" + ], + "result": { + "item": "cosmeretools:lead_axe" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/lead_boots.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/lead_boots.json new file mode 100644 index 000000000..3eca84e29 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/lead_boots.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "boots", + "key": { + "X": { + "tag": "forge:ingots/lead" + } + }, + "pattern": [ + "X X", + "X X" + ], + "result": { + "item": "cosmeretools:lead_boots" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/lead_chestplate.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/lead_chestplate.json new file mode 100644 index 000000000..c822a8c2a --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/lead_chestplate.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "chestplate", + "key": { + "X": { + "tag": "forge:ingots/lead" + } + }, + "pattern": [ + "X X", + "XXX", + "XXX" + ], + "result": { + "item": "cosmeretools:lead_chestplate" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/lead_helmet.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/lead_helmet.json new file mode 100644 index 000000000..b483d446e --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/lead_helmet.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "helmet", + "key": { + "X": { + "tag": "forge:ingots/lead" + } + }, + "pattern": [ + "XXX", + "X X" + ], + "result": { + "item": "cosmeretools:lead_helmet" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/lead_hoe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/lead_hoe.json new file mode 100644 index 000000000..b6186f224 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/lead_hoe.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "hoe", + "key": { + "X": { + "tag": "forge:ingots/lead" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "XX", + " Y", + " Y" + ], + "result": { + "item": "cosmeretools:lead_hoe" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/lead_leggings.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/lead_leggings.json new file mode 100644 index 000000000..ef0805933 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/lead_leggings.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "leggings", + "key": { + "X": { + "tag": "forge:ingots/lead" + } + }, + "pattern": [ + "XXX", + "X X", + "X X" + ], + "result": { + "item": "cosmeretools:lead_leggings" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/lead_pickaxe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/lead_pickaxe.json new file mode 100644 index 000000000..5f7dea6fa --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/lead_pickaxe.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "pickaxe", + "key": { + "X": { + "tag": "forge:ingots/lead" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "XXX", + " Y ", + " Y " + ], + "result": { + "item": "cosmeretools:lead_pickaxe" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/lead_shovel.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/lead_shovel.json new file mode 100644 index 000000000..3fb282bdf --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/lead_shovel.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "shovel", + "key": { + "X": { + "tag": "forge:ingots/lead" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "X", + "Y", + "Y" + ], + "result": { + "item": "cosmeretools:lead_shovel" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/lead_sword.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/lead_sword.json new file mode 100644 index 000000000..ebacd579e --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/lead_sword.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "sword", + "key": { + "X": { + "tag": "forge:ingots/lead" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "X", + "X", + "Y" + ], + "result": { + "item": "cosmeretools:lead_sword" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/lerasatium_axe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/lerasatium_axe.json new file mode 100644 index 000000000..e49e66782 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/lerasatium_axe.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "axe", + "key": { + "X": { + "tag": "forge:ingots/lerasatium" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "XX", + "XY", + " Y" + ], + "result": { + "item": "cosmeretools:lerasatium_axe" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/lerasatium_boots.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/lerasatium_boots.json new file mode 100644 index 000000000..43edde79f --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/lerasatium_boots.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "boots", + "key": { + "X": { + "tag": "forge:ingots/lerasatium" + } + }, + "pattern": [ + "X X", + "X X" + ], + "result": { + "item": "cosmeretools:lerasatium_boots" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/lerasatium_chestplate.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/lerasatium_chestplate.json new file mode 100644 index 000000000..a06e0da62 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/lerasatium_chestplate.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "chestplate", + "key": { + "X": { + "tag": "forge:ingots/lerasatium" + } + }, + "pattern": [ + "X X", + "XXX", + "XXX" + ], + "result": { + "item": "cosmeretools:lerasatium_chestplate" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/lerasatium_helmet.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/lerasatium_helmet.json new file mode 100644 index 000000000..7ad46936e --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/lerasatium_helmet.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "helmet", + "key": { + "X": { + "tag": "forge:ingots/lerasatium" + } + }, + "pattern": [ + "XXX", + "X X" + ], + "result": { + "item": "cosmeretools:lerasatium_helmet" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/lerasatium_hoe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/lerasatium_hoe.json new file mode 100644 index 000000000..f99d5b3dd --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/lerasatium_hoe.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "hoe", + "key": { + "X": { + "tag": "forge:ingots/lerasatium" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "XX", + " Y", + " Y" + ], + "result": { + "item": "cosmeretools:lerasatium_hoe" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/lerasatium_leggings.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/lerasatium_leggings.json new file mode 100644 index 000000000..f5f83ccca --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/lerasatium_leggings.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "leggings", + "key": { + "X": { + "tag": "forge:ingots/lerasatium" + } + }, + "pattern": [ + "XXX", + "X X", + "X X" + ], + "result": { + "item": "cosmeretools:lerasatium_leggings" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/lerasatium_pickaxe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/lerasatium_pickaxe.json new file mode 100644 index 000000000..503744703 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/lerasatium_pickaxe.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "pickaxe", + "key": { + "X": { + "tag": "forge:ingots/lerasatium" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "XXX", + " Y ", + " Y " + ], + "result": { + "item": "cosmeretools:lerasatium_pickaxe" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/lerasatium_shovel.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/lerasatium_shovel.json new file mode 100644 index 000000000..32be69982 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/lerasatium_shovel.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "shovel", + "key": { + "X": { + "tag": "forge:ingots/lerasatium" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "X", + "Y", + "Y" + ], + "result": { + "item": "cosmeretools:lerasatium_shovel" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/lerasatium_sword.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/lerasatium_sword.json new file mode 100644 index 000000000..6cae50320 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/lerasatium_sword.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "sword", + "key": { + "X": { + "tag": "forge:ingots/lerasatium" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "X", + "X", + "Y" + ], + "result": { + "item": "cosmeretools:lerasatium_sword" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/lerasium_axe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/lerasium_axe.json new file mode 100644 index 000000000..fc723e084 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/lerasium_axe.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "axe", + "key": { + "X": { + "tag": "forge:ingots/lerasium" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "XX", + "XY", + " Y" + ], + "result": { + "item": "cosmeretools:lerasium_axe" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/lerasium_boots.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/lerasium_boots.json new file mode 100644 index 000000000..fab566eae --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/lerasium_boots.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "boots", + "key": { + "X": { + "tag": "forge:ingots/lerasium" + } + }, + "pattern": [ + "X X", + "X X" + ], + "result": { + "item": "cosmeretools:lerasium_boots" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/lerasium_chestplate.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/lerasium_chestplate.json new file mode 100644 index 000000000..adb3069c7 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/lerasium_chestplate.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "chestplate", + "key": { + "X": { + "tag": "forge:ingots/lerasium" + } + }, + "pattern": [ + "X X", + "XXX", + "XXX" + ], + "result": { + "item": "cosmeretools:lerasium_chestplate" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/lerasium_helmet.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/lerasium_helmet.json new file mode 100644 index 000000000..27ff221a2 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/lerasium_helmet.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "helmet", + "key": { + "X": { + "tag": "forge:ingots/lerasium" + } + }, + "pattern": [ + "XXX", + "X X" + ], + "result": { + "item": "cosmeretools:lerasium_helmet" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/lerasium_hoe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/lerasium_hoe.json new file mode 100644 index 000000000..337d93151 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/lerasium_hoe.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "hoe", + "key": { + "X": { + "tag": "forge:ingots/lerasium" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "XX", + " Y", + " Y" + ], + "result": { + "item": "cosmeretools:lerasium_hoe" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/lerasium_leggings.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/lerasium_leggings.json new file mode 100644 index 000000000..0eaca07e4 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/lerasium_leggings.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "leggings", + "key": { + "X": { + "tag": "forge:ingots/lerasium" + } + }, + "pattern": [ + "XXX", + "X X", + "X X" + ], + "result": { + "item": "cosmeretools:lerasium_leggings" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/lerasium_pickaxe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/lerasium_pickaxe.json new file mode 100644 index 000000000..fa62b16ee --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/lerasium_pickaxe.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "pickaxe", + "key": { + "X": { + "tag": "forge:ingots/lerasium" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "XXX", + " Y ", + " Y " + ], + "result": { + "item": "cosmeretools:lerasium_pickaxe" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/lerasium_shovel.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/lerasium_shovel.json new file mode 100644 index 000000000..104b44259 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/lerasium_shovel.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "shovel", + "key": { + "X": { + "tag": "forge:ingots/lerasium" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "X", + "Y", + "Y" + ], + "result": { + "item": "cosmeretools:lerasium_shovel" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/lerasium_sword.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/lerasium_sword.json new file mode 100644 index 000000000..bd83bde6a --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/lerasium_sword.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "sword", + "key": { + "X": { + "tag": "forge:ingots/lerasium" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "X", + "X", + "Y" + ], + "result": { + "item": "cosmeretools:lerasium_sword" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/malatium_axe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/malatium_axe.json new file mode 100644 index 000000000..06960bf4e --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/malatium_axe.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "axe", + "key": { + "X": { + "tag": "forge:ingots/malatium" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "XX", + "XY", + " Y" + ], + "result": { + "item": "cosmeretools:malatium_axe" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/malatium_boots.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/malatium_boots.json new file mode 100644 index 000000000..f4f935bd7 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/malatium_boots.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "boots", + "key": { + "X": { + "tag": "forge:ingots/malatium" + } + }, + "pattern": [ + "X X", + "X X" + ], + "result": { + "item": "cosmeretools:malatium_boots" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/malatium_chestplate.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/malatium_chestplate.json new file mode 100644 index 000000000..b082ae1a6 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/malatium_chestplate.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "chestplate", + "key": { + "X": { + "tag": "forge:ingots/malatium" + } + }, + "pattern": [ + "X X", + "XXX", + "XXX" + ], + "result": { + "item": "cosmeretools:malatium_chestplate" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/malatium_helmet.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/malatium_helmet.json new file mode 100644 index 000000000..443430382 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/malatium_helmet.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "helmet", + "key": { + "X": { + "tag": "forge:ingots/malatium" + } + }, + "pattern": [ + "XXX", + "X X" + ], + "result": { + "item": "cosmeretools:malatium_helmet" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/malatium_hoe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/malatium_hoe.json new file mode 100644 index 000000000..244a37ca4 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/malatium_hoe.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "hoe", + "key": { + "X": { + "tag": "forge:ingots/malatium" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "XX", + " Y", + " Y" + ], + "result": { + "item": "cosmeretools:malatium_hoe" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/malatium_leggings.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/malatium_leggings.json new file mode 100644 index 000000000..c16be84eb --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/malatium_leggings.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "leggings", + "key": { + "X": { + "tag": "forge:ingots/malatium" + } + }, + "pattern": [ + "XXX", + "X X", + "X X" + ], + "result": { + "item": "cosmeretools:malatium_leggings" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/malatium_pickaxe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/malatium_pickaxe.json new file mode 100644 index 000000000..691f338f8 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/malatium_pickaxe.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "pickaxe", + "key": { + "X": { + "tag": "forge:ingots/malatium" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "XXX", + " Y ", + " Y " + ], + "result": { + "item": "cosmeretools:malatium_pickaxe" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/malatium_shovel.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/malatium_shovel.json new file mode 100644 index 000000000..4494ede06 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/malatium_shovel.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "shovel", + "key": { + "X": { + "tag": "forge:ingots/malatium" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "X", + "Y", + "Y" + ], + "result": { + "item": "cosmeretools:malatium_shovel" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/malatium_sword.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/malatium_sword.json new file mode 100644 index 000000000..322481d86 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/malatium_sword.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "sword", + "key": { + "X": { + "tag": "forge:ingots/malatium" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "X", + "X", + "Y" + ], + "result": { + "item": "cosmeretools:malatium_sword" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/nickel_axe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/nickel_axe.json new file mode 100644 index 000000000..fb2b52790 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/nickel_axe.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "axe", + "key": { + "X": { + "tag": "forge:ingots/nickel" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "XX", + "XY", + " Y" + ], + "result": { + "item": "cosmeretools:nickel_axe" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/nickel_boots.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/nickel_boots.json new file mode 100644 index 000000000..9be8e3592 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/nickel_boots.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "boots", + "key": { + "X": { + "tag": "forge:ingots/nickel" + } + }, + "pattern": [ + "X X", + "X X" + ], + "result": { + "item": "cosmeretools:nickel_boots" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/nickel_chestplate.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/nickel_chestplate.json new file mode 100644 index 000000000..0fcb54f7d --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/nickel_chestplate.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "chestplate", + "key": { + "X": { + "tag": "forge:ingots/nickel" + } + }, + "pattern": [ + "X X", + "XXX", + "XXX" + ], + "result": { + "item": "cosmeretools:nickel_chestplate" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/nickel_helmet.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/nickel_helmet.json new file mode 100644 index 000000000..3c9f91559 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/nickel_helmet.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "helmet", + "key": { + "X": { + "tag": "forge:ingots/nickel" + } + }, + "pattern": [ + "XXX", + "X X" + ], + "result": { + "item": "cosmeretools:nickel_helmet" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/nickel_hoe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/nickel_hoe.json new file mode 100644 index 000000000..829ae0d75 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/nickel_hoe.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "hoe", + "key": { + "X": { + "tag": "forge:ingots/nickel" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "XX", + " Y", + " Y" + ], + "result": { + "item": "cosmeretools:nickel_hoe" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/nickel_leggings.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/nickel_leggings.json new file mode 100644 index 000000000..2f51078d9 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/nickel_leggings.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "leggings", + "key": { + "X": { + "tag": "forge:ingots/nickel" + } + }, + "pattern": [ + "XXX", + "X X", + "X X" + ], + "result": { + "item": "cosmeretools:nickel_leggings" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/nickel_pickaxe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/nickel_pickaxe.json new file mode 100644 index 000000000..a0258bb70 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/nickel_pickaxe.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "pickaxe", + "key": { + "X": { + "tag": "forge:ingots/nickel" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "XXX", + " Y ", + " Y " + ], + "result": { + "item": "cosmeretools:nickel_pickaxe" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/nickel_shovel.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/nickel_shovel.json new file mode 100644 index 000000000..a025118bc --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/nickel_shovel.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "shovel", + "key": { + "X": { + "tag": "forge:ingots/nickel" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "X", + "Y", + "Y" + ], + "result": { + "item": "cosmeretools:nickel_shovel" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/nickel_sword.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/nickel_sword.json new file mode 100644 index 000000000..f61c67646 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/nickel_sword.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "sword", + "key": { + "X": { + "tag": "forge:ingots/nickel" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "X", + "X", + "Y" + ], + "result": { + "item": "cosmeretools:nickel_sword" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/nicrosil_axe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/nicrosil_axe.json new file mode 100644 index 000000000..76956f349 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/nicrosil_axe.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "axe", + "key": { + "X": { + "tag": "forge:ingots/nicrosil" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "XX", + "XY", + " Y" + ], + "result": { + "item": "cosmeretools:nicrosil_axe" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/nicrosil_boots.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/nicrosil_boots.json new file mode 100644 index 000000000..873f6edbf --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/nicrosil_boots.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "boots", + "key": { + "X": { + "tag": "forge:ingots/nicrosil" + } + }, + "pattern": [ + "X X", + "X X" + ], + "result": { + "item": "cosmeretools:nicrosil_boots" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/nicrosil_chestplate.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/nicrosil_chestplate.json new file mode 100644 index 000000000..28420ab23 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/nicrosil_chestplate.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "chestplate", + "key": { + "X": { + "tag": "forge:ingots/nicrosil" + } + }, + "pattern": [ + "X X", + "XXX", + "XXX" + ], + "result": { + "item": "cosmeretools:nicrosil_chestplate" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/nicrosil_helmet.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/nicrosil_helmet.json new file mode 100644 index 000000000..f806c6a91 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/nicrosil_helmet.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "helmet", + "key": { + "X": { + "tag": "forge:ingots/nicrosil" + } + }, + "pattern": [ + "XXX", + "X X" + ], + "result": { + "item": "cosmeretools:nicrosil_helmet" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/nicrosil_hoe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/nicrosil_hoe.json new file mode 100644 index 000000000..88985d221 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/nicrosil_hoe.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "hoe", + "key": { + "X": { + "tag": "forge:ingots/nicrosil" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "XX", + " Y", + " Y" + ], + "result": { + "item": "cosmeretools:nicrosil_hoe" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/nicrosil_leggings.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/nicrosil_leggings.json new file mode 100644 index 000000000..65fd4ac94 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/nicrosil_leggings.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "leggings", + "key": { + "X": { + "tag": "forge:ingots/nicrosil" + } + }, + "pattern": [ + "XXX", + "X X", + "X X" + ], + "result": { + "item": "cosmeretools:nicrosil_leggings" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/nicrosil_pickaxe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/nicrosil_pickaxe.json new file mode 100644 index 000000000..489add672 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/nicrosil_pickaxe.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "pickaxe", + "key": { + "X": { + "tag": "forge:ingots/nicrosil" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "XXX", + " Y ", + " Y " + ], + "result": { + "item": "cosmeretools:nicrosil_pickaxe" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/nicrosil_shovel.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/nicrosil_shovel.json new file mode 100644 index 000000000..7b7b09fbf --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/nicrosil_shovel.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "shovel", + "key": { + "X": { + "tag": "forge:ingots/nicrosil" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "X", + "Y", + "Y" + ], + "result": { + "item": "cosmeretools:nicrosil_shovel" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/nicrosil_sword.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/nicrosil_sword.json new file mode 100644 index 000000000..f904c69c4 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/nicrosil_sword.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "sword", + "key": { + "X": { + "tag": "forge:ingots/nicrosil" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "X", + "X", + "Y" + ], + "result": { + "item": "cosmeretools:nicrosil_sword" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/pewter_axe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/pewter_axe.json new file mode 100644 index 000000000..2d6bb925a --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/pewter_axe.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "axe", + "key": { + "X": { + "tag": "forge:ingots/pewter" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "XX", + "XY", + " Y" + ], + "result": { + "item": "cosmeretools:pewter_axe" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/pewter_boots.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/pewter_boots.json new file mode 100644 index 000000000..d1c129181 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/pewter_boots.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "boots", + "key": { + "X": { + "tag": "forge:ingots/pewter" + } + }, + "pattern": [ + "X X", + "X X" + ], + "result": { + "item": "cosmeretools:pewter_boots" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/pewter_chestplate.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/pewter_chestplate.json new file mode 100644 index 000000000..c4c2fdfb4 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/pewter_chestplate.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "chestplate", + "key": { + "X": { + "tag": "forge:ingots/pewter" + } + }, + "pattern": [ + "X X", + "XXX", + "XXX" + ], + "result": { + "item": "cosmeretools:pewter_chestplate" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/pewter_helmet.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/pewter_helmet.json new file mode 100644 index 000000000..6cc5bc091 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/pewter_helmet.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "helmet", + "key": { + "X": { + "tag": "forge:ingots/pewter" + } + }, + "pattern": [ + "XXX", + "X X" + ], + "result": { + "item": "cosmeretools:pewter_helmet" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/pewter_hoe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/pewter_hoe.json new file mode 100644 index 000000000..9ed1c341b --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/pewter_hoe.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "hoe", + "key": { + "X": { + "tag": "forge:ingots/pewter" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "XX", + " Y", + " Y" + ], + "result": { + "item": "cosmeretools:pewter_hoe" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/pewter_leggings.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/pewter_leggings.json new file mode 100644 index 000000000..b056e23b0 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/pewter_leggings.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "leggings", + "key": { + "X": { + "tag": "forge:ingots/pewter" + } + }, + "pattern": [ + "XXX", + "X X", + "X X" + ], + "result": { + "item": "cosmeretools:pewter_leggings" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/pewter_pickaxe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/pewter_pickaxe.json new file mode 100644 index 000000000..8b151da90 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/pewter_pickaxe.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "pickaxe", + "key": { + "X": { + "tag": "forge:ingots/pewter" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "XXX", + " Y ", + " Y " + ], + "result": { + "item": "cosmeretools:pewter_pickaxe" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/pewter_shovel.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/pewter_shovel.json new file mode 100644 index 000000000..e4ccec135 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/pewter_shovel.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "shovel", + "key": { + "X": { + "tag": "forge:ingots/pewter" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "X", + "Y", + "Y" + ], + "result": { + "item": "cosmeretools:pewter_shovel" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/pewter_sword.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/pewter_sword.json new file mode 100644 index 000000000..70c3003cd --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/pewter_sword.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "sword", + "key": { + "X": { + "tag": "forge:ingots/pewter" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "X", + "X", + "Y" + ], + "result": { + "item": "cosmeretools:pewter_sword" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/silver_axe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/silver_axe.json new file mode 100644 index 000000000..174b2d97a --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/silver_axe.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "axe", + "key": { + "X": { + "tag": "forge:ingots/silver" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "XX", + "XY", + " Y" + ], + "result": { + "item": "cosmeretools:silver_axe" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/silver_boots.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/silver_boots.json new file mode 100644 index 000000000..a316e5be7 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/silver_boots.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "boots", + "key": { + "X": { + "tag": "forge:ingots/silver" + } + }, + "pattern": [ + "X X", + "X X" + ], + "result": { + "item": "cosmeretools:silver_boots" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/silver_chestplate.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/silver_chestplate.json new file mode 100644 index 000000000..6cf4862a9 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/silver_chestplate.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "chestplate", + "key": { + "X": { + "tag": "forge:ingots/silver" + } + }, + "pattern": [ + "X X", + "XXX", + "XXX" + ], + "result": { + "item": "cosmeretools:silver_chestplate" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/silver_helmet.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/silver_helmet.json new file mode 100644 index 000000000..a423a13d0 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/silver_helmet.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "helmet", + "key": { + "X": { + "tag": "forge:ingots/silver" + } + }, + "pattern": [ + "XXX", + "X X" + ], + "result": { + "item": "cosmeretools:silver_helmet" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/silver_hoe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/silver_hoe.json new file mode 100644 index 000000000..cad433c0a --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/silver_hoe.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "hoe", + "key": { + "X": { + "tag": "forge:ingots/silver" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "XX", + " Y", + " Y" + ], + "result": { + "item": "cosmeretools:silver_hoe" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/silver_leggings.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/silver_leggings.json new file mode 100644 index 000000000..43ddef38d --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/silver_leggings.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "leggings", + "key": { + "X": { + "tag": "forge:ingots/silver" + } + }, + "pattern": [ + "XXX", + "X X", + "X X" + ], + "result": { + "item": "cosmeretools:silver_leggings" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/silver_pickaxe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/silver_pickaxe.json new file mode 100644 index 000000000..64002cffb --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/silver_pickaxe.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "pickaxe", + "key": { + "X": { + "tag": "forge:ingots/silver" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "XXX", + " Y ", + " Y " + ], + "result": { + "item": "cosmeretools:silver_pickaxe" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/silver_shovel.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/silver_shovel.json new file mode 100644 index 000000000..b3df4f56e --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/silver_shovel.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "shovel", + "key": { + "X": { + "tag": "forge:ingots/silver" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "X", + "Y", + "Y" + ], + "result": { + "item": "cosmeretools:silver_shovel" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/silver_sword.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/silver_sword.json new file mode 100644 index 000000000..dde297f37 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/silver_sword.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "sword", + "key": { + "X": { + "tag": "forge:ingots/silver" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "X", + "X", + "Y" + ], + "result": { + "item": "cosmeretools:silver_sword" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/steel_axe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/steel_axe.json new file mode 100644 index 000000000..0fef5585f --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/steel_axe.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "axe", + "key": { + "X": { + "tag": "forge:ingots/steel" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "XX", + "XY", + " Y" + ], + "result": { + "item": "cosmeretools:steel_axe" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/steel_boots.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/steel_boots.json new file mode 100644 index 000000000..c7f97de51 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/steel_boots.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "boots", + "key": { + "X": { + "tag": "forge:ingots/steel" + } + }, + "pattern": [ + "X X", + "X X" + ], + "result": { + "item": "cosmeretools:steel_boots" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/steel_chestplate.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/steel_chestplate.json new file mode 100644 index 000000000..49476dff8 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/steel_chestplate.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "chestplate", + "key": { + "X": { + "tag": "forge:ingots/steel" + } + }, + "pattern": [ + "X X", + "XXX", + "XXX" + ], + "result": { + "item": "cosmeretools:steel_chestplate" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/steel_helmet.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/steel_helmet.json new file mode 100644 index 000000000..c81cfb512 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/steel_helmet.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "helmet", + "key": { + "X": { + "tag": "forge:ingots/steel" + } + }, + "pattern": [ + "XXX", + "X X" + ], + "result": { + "item": "cosmeretools:steel_helmet" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/steel_hoe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/steel_hoe.json new file mode 100644 index 000000000..ba244c748 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/steel_hoe.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "hoe", + "key": { + "X": { + "tag": "forge:ingots/steel" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "XX", + " Y", + " Y" + ], + "result": { + "item": "cosmeretools:steel_hoe" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/steel_leggings.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/steel_leggings.json new file mode 100644 index 000000000..3fb35e42a --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/steel_leggings.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "leggings", + "key": { + "X": { + "tag": "forge:ingots/steel" + } + }, + "pattern": [ + "XXX", + "X X", + "X X" + ], + "result": { + "item": "cosmeretools:steel_leggings" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/steel_pickaxe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/steel_pickaxe.json new file mode 100644 index 000000000..3b41a338c --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/steel_pickaxe.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "pickaxe", + "key": { + "X": { + "tag": "forge:ingots/steel" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "XXX", + " Y ", + " Y " + ], + "result": { + "item": "cosmeretools:steel_pickaxe" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/steel_shovel.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/steel_shovel.json new file mode 100644 index 000000000..abe0d864d --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/steel_shovel.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "shovel", + "key": { + "X": { + "tag": "forge:ingots/steel" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "X", + "Y", + "Y" + ], + "result": { + "item": "cosmeretools:steel_shovel" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/steel_sword.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/steel_sword.json new file mode 100644 index 000000000..07a46c7c2 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/steel_sword.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "sword", + "key": { + "X": { + "tag": "forge:ingots/steel" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "X", + "X", + "Y" + ], + "result": { + "item": "cosmeretools:steel_sword" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/tin_axe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/tin_axe.json new file mode 100644 index 000000000..d45821b2c --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/tin_axe.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "axe", + "key": { + "X": { + "tag": "forge:ingots/tin" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "XX", + "XY", + " Y" + ], + "result": { + "item": "cosmeretools:tin_axe" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/tin_boots.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/tin_boots.json new file mode 100644 index 000000000..9e1e20e0c --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/tin_boots.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "boots", + "key": { + "X": { + "tag": "forge:ingots/tin" + } + }, + "pattern": [ + "X X", + "X X" + ], + "result": { + "item": "cosmeretools:tin_boots" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/tin_chestplate.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/tin_chestplate.json new file mode 100644 index 000000000..e867774ac --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/tin_chestplate.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "chestplate", + "key": { + "X": { + "tag": "forge:ingots/tin" + } + }, + "pattern": [ + "X X", + "XXX", + "XXX" + ], + "result": { + "item": "cosmeretools:tin_chestplate" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/tin_helmet.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/tin_helmet.json new file mode 100644 index 000000000..1aca5f8ab --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/tin_helmet.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "helmet", + "key": { + "X": { + "tag": "forge:ingots/tin" + } + }, + "pattern": [ + "XXX", + "X X" + ], + "result": { + "item": "cosmeretools:tin_helmet" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/tin_hoe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/tin_hoe.json new file mode 100644 index 000000000..0651acb94 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/tin_hoe.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "hoe", + "key": { + "X": { + "tag": "forge:ingots/tin" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "XX", + " Y", + " Y" + ], + "result": { + "item": "cosmeretools:tin_hoe" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/tin_leggings.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/tin_leggings.json new file mode 100644 index 000000000..a7f064319 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/tin_leggings.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "leggings", + "key": { + "X": { + "tag": "forge:ingots/tin" + } + }, + "pattern": [ + "XXX", + "X X", + "X X" + ], + "result": { + "item": "cosmeretools:tin_leggings" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/tin_pickaxe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/tin_pickaxe.json new file mode 100644 index 000000000..e8fc1bf00 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/tin_pickaxe.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "pickaxe", + "key": { + "X": { + "tag": "forge:ingots/tin" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "XXX", + " Y ", + " Y " + ], + "result": { + "item": "cosmeretools:tin_pickaxe" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/tin_shovel.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/tin_shovel.json new file mode 100644 index 000000000..6a99c9ba1 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/tin_shovel.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "shovel", + "key": { + "X": { + "tag": "forge:ingots/tin" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "X", + "Y", + "Y" + ], + "result": { + "item": "cosmeretools:tin_shovel" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/tin_sword.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/tin_sword.json new file mode 100644 index 000000000..e0b7790bb --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/tin_sword.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "sword", + "key": { + "X": { + "tag": "forge:ingots/tin" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "X", + "X", + "Y" + ], + "result": { + "item": "cosmeretools:tin_sword" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/zinc_axe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/zinc_axe.json new file mode 100644 index 000000000..c69f9b3a7 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/zinc_axe.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "axe", + "key": { + "X": { + "tag": "forge:ingots/zinc" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "XX", + "XY", + " Y" + ], + "result": { + "item": "cosmeretools:zinc_axe" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/zinc_boots.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/zinc_boots.json new file mode 100644 index 000000000..854c3868f --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/zinc_boots.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "boots", + "key": { + "X": { + "tag": "forge:ingots/zinc" + } + }, + "pattern": [ + "X X", + "X X" + ], + "result": { + "item": "cosmeretools:zinc_boots" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/zinc_chestplate.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/zinc_chestplate.json new file mode 100644 index 000000000..71ba6bcde --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/zinc_chestplate.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "chestplate", + "key": { + "X": { + "tag": "forge:ingots/zinc" + } + }, + "pattern": [ + "X X", + "XXX", + "XXX" + ], + "result": { + "item": "cosmeretools:zinc_chestplate" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/zinc_helmet.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/zinc_helmet.json new file mode 100644 index 000000000..d807e8f01 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/zinc_helmet.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "helmet", + "key": { + "X": { + "tag": "forge:ingots/zinc" + } + }, + "pattern": [ + "XXX", + "X X" + ], + "result": { + "item": "cosmeretools:zinc_helmet" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/zinc_hoe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/zinc_hoe.json new file mode 100644 index 000000000..83d09368e --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/zinc_hoe.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "hoe", + "key": { + "X": { + "tag": "forge:ingots/zinc" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "XX", + " Y", + " Y" + ], + "result": { + "item": "cosmeretools:zinc_hoe" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/zinc_leggings.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/zinc_leggings.json new file mode 100644 index 000000000..0d0a8eec2 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/zinc_leggings.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "leggings", + "key": { + "X": { + "tag": "forge:ingots/zinc" + } + }, + "pattern": [ + "XXX", + "X X", + "X X" + ], + "result": { + "item": "cosmeretools:zinc_leggings" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/zinc_pickaxe.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/zinc_pickaxe.json new file mode 100644 index 000000000..8b296796e --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/zinc_pickaxe.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "pickaxe", + "key": { + "X": { + "tag": "forge:ingots/zinc" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "XXX", + " Y ", + " Y " + ], + "result": { + "item": "cosmeretools:zinc_pickaxe" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/zinc_shovel.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/zinc_shovel.json new file mode 100644 index 000000000..b8ffc3ecd --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/zinc_shovel.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "shovel", + "key": { + "X": { + "tag": "forge:ingots/zinc" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "X", + "Y", + "Y" + ], + "result": { + "item": "cosmeretools:zinc_shovel" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/zinc_sword.json b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/zinc_sword.json new file mode 100644 index 000000000..e7226c470 --- /dev/null +++ b/src/datagen/generated/cosmeretools/data/cosmeretools/recipes/zinc_sword.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "sword", + "key": { + "X": { + "tag": "forge:ingots/zinc" + }, + "Y": { + "tag": "forge:rods/wooden" + } + }, + "pattern": [ + "X", + "X", + "Y" + ], + "result": { + "item": "cosmeretools:zinc_sword" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/example/.cache/4256cb056fbe91aad6656efb50983fdfb19e7569 b/src/datagen/generated/example/.cache/4256cb056fbe91aad6656efb50983fdfb19e7569 new file mode 100644 index 000000000..788b6d5ae --- /dev/null +++ b/src/datagen/generated/example/.cache/4256cb056fbe91aad6656efb50983fdfb19e7569 @@ -0,0 +1 @@ +// 1.20.1 2024-10-09T13:22:13.4177346 Item Models: example diff --git a/src/datagen/generated/example/.cache/59eb3dbb5f86130e09b3c62d89b9525ee01cf52d b/src/datagen/generated/example/.cache/59eb3dbb5f86130e09b3c62d89b9525ee01cf52d new file mode 100644 index 000000000..c94a796f4 --- /dev/null +++ b/src/datagen/generated/example/.cache/59eb3dbb5f86130e09b3c62d89b9525ee01cf52d @@ -0,0 +1 @@ +// 1.20.1 2024-10-09T13:22:13.4177346 Loot Tables diff --git a/src/datagen/generated/example/.cache/9adbaa29e00bdcd402d9c6d9c3e37d562b53ee0b b/src/datagen/generated/example/.cache/9adbaa29e00bdcd402d9c6d9c3e37d562b53ee0b new file mode 100644 index 000000000..bb01b2154 --- /dev/null +++ b/src/datagen/generated/example/.cache/9adbaa29e00bdcd402d9c6d9c3e37d562b53ee0b @@ -0,0 +1,3 @@ +// 1.20.1 2024-10-09T13:38:50.3211153 Example PatchouliGeneration +04c3501728b65392de200993fb294f3acdf421d5 assets/cosmere/patchouli_books/guide/en_us/categories/example.json +4d3c3d21460d107c3ac2aa5c500ad14f7decb1cf assets/cosmere/patchouli_books/guide/en_us/entries/example/example_basics.json diff --git a/src/datagen/generated/example/.cache/9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e b/src/datagen/generated/example/.cache/9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e new file mode 100644 index 000000000..a3a97faff --- /dev/null +++ b/src/datagen/generated/example/.cache/9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e @@ -0,0 +1 @@ +// 1.20.1 2024-10-09T13:22:13.4177346 Recipes diff --git a/src/datagen/generated/example/.cache/c622617f6fabf890a00b9275cd5f643584a8a2c8 b/src/datagen/generated/example/.cache/c622617f6fabf890a00b9275cd5f643584a8a2c8 new file mode 100644 index 000000000..f2113b398 --- /dev/null +++ b/src/datagen/generated/example/.cache/c622617f6fabf890a00b9275cd5f643584a8a2c8 @@ -0,0 +1,2 @@ +// 1.20.1 2024-10-10T14:18:48.1160288 Languages: en_us +9ba5568445018d7960a71f25c98289f6c7163497 assets/example/lang/en_us.json diff --git a/src/datagen/generated/example/.cache/fd7181717ee34e9c72543275cac97813daa42620 b/src/datagen/generated/example/.cache/fd7181717ee34e9c72543275cac97813daa42620 new file mode 100644 index 000000000..b2d0bd20b --- /dev/null +++ b/src/datagen/generated/example/.cache/fd7181717ee34e9c72543275cac97813daa42620 @@ -0,0 +1 @@ +// 1.20.1 2024-10-09T13:22:13.4167427 Tags: example diff --git a/src/datagen/generated/example/assets/cosmere/patchouli_books/guide/en_us/categories/example.json b/src/datagen/generated/example/assets/cosmere/patchouli_books/guide/en_us/categories/example.json new file mode 100644 index 000000000..8b44c9f06 --- /dev/null +++ b/src/datagen/generated/example/assets/cosmere/patchouli_books/guide/en_us/categories/example.json @@ -0,0 +1,7 @@ +{ + "description": "Example description that says some stuff.", + "icon": "minecraft:paper", + "name": "Example", + "secret": true, + "sortnum": 99 +} \ No newline at end of file diff --git a/src/datagen/generated/example/assets/cosmere/patchouli_books/guide/en_us/entries/example/example_basics.json b/src/datagen/generated/example/assets/cosmere/patchouli_books/guide/en_us/entries/example/example_basics.json new file mode 100644 index 000000000..39de091b7 --- /dev/null +++ b/src/datagen/generated/example/assets/cosmere/patchouli_books/guide/en_us/entries/example/example_basics.json @@ -0,0 +1,16 @@ +{ + "category": "cosmere:example", + "icon": "minecraft:paper", + "name": "Example (For Dummies)", + "pages": [ + { + "type": "text", + "text": "In this journal, I shall explain all I have discovered about Example. $(br)Firstly, some terminology:", + "title": "Terminology" + } + ], + "priority": true, + "read_by_default": false, + "secret": false, + "sortnum": 0 +} \ No newline at end of file diff --git a/src/datagen/generated/example/assets/example/lang/en_us.json b/src/datagen/generated/example/assets/example/lang/en_us.json new file mode 100644 index 000000000..df3aee916 --- /dev/null +++ b/src/datagen/generated/example/assets/example/lang/en_us.json @@ -0,0 +1,3 @@ +{ + "tabs.example.items": "Example" +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/.cache/378e5163db565cdb690d66f27a88cc18d663d22f b/src/datagen/generated/feruchemy/.cache/378e5163db565cdb690d66f27a88cc18d663d22f new file mode 100644 index 000000000..34e600b4e --- /dev/null +++ b/src/datagen/generated/feruchemy/.cache/378e5163db565cdb690d66f27a88cc18d663d22f @@ -0,0 +1,4 @@ +// 1.20.1 2024-10-09T13:22:13.3756835 Tags: feruchemy +b3c591c9bd1a93a8df13a35778bfeb18e5f221a8 data/curios/tags/items/bracelet.json +f606fee81ffd164b0b3a99a40f91f5d102218208 data/curios/tags/items/necklace.json +b2fb51cc89f870630a9028e6a9d0bd1e9ba80b6e data/curios/tags/items/ring.json diff --git a/src/datagen/generated/feruchemy/.cache/3b2a435655541c92d690318b57013336949ed348 b/src/datagen/generated/feruchemy/.cache/3b2a435655541c92d690318b57013336949ed348 new file mode 100644 index 000000000..43448cbef --- /dev/null +++ b/src/datagen/generated/feruchemy/.cache/3b2a435655541c92d690318b57013336949ed348 @@ -0,0 +1,21 @@ +// 1.20.1 2024-11-20T11:15:09.563266 PatchouliGeneration +9ea74965ee52ee3a9e5b7dd62822fc2e5959498e assets/cosmere/patchouli_books/guide/en_us/categories/feruchemy.json +f275c49e55ff5d7da8766b3adae1313ce2031fc0 assets/cosmere/patchouli_books/guide/en_us/entries/feruchemy/compounding.json +eea98ac4f00464bce87b03192ef20965c2937eb9 assets/cosmere/patchouli_books/guide/en_us/entries/feruchemy/feruchemical_aluminum.json +b2f7a7cf0b5aac604ec6b14e2de95acfeae69267 assets/cosmere/patchouli_books/guide/en_us/entries/feruchemy/feruchemical_atium.json +fa7d768031555a70bbc802dd499fc3490f0b6303 assets/cosmere/patchouli_books/guide/en_us/entries/feruchemy/feruchemical_bendalloy.json +73ee607e285bf57e7613d3e1788866b404f6eee5 assets/cosmere/patchouli_books/guide/en_us/entries/feruchemy/feruchemical_brass.json +e7e59f1d36a21c2f6b90cc9ab1ebbb4bc45cce9c assets/cosmere/patchouli_books/guide/en_us/entries/feruchemy/feruchemical_bronze.json +2a6df0eac2c3efd50a7b02f36afe02f2708910ff assets/cosmere/patchouli_books/guide/en_us/entries/feruchemy/feruchemical_cadmium.json +e0dc317d3f7e5f3a661edab88bbb14b7db319843 assets/cosmere/patchouli_books/guide/en_us/entries/feruchemy/feruchemical_chromium.json +ae6ebeba0fb2869a2a4f039f5d99530fad2e0a73 assets/cosmere/patchouli_books/guide/en_us/entries/feruchemy/feruchemical_copper.json +a1680702d85fbd566360383540f7cbe1a6c1f755 assets/cosmere/patchouli_books/guide/en_us/entries/feruchemy/feruchemical_duralumin.json +846e279cdb41934549e4bcef3a850303cca3af03 assets/cosmere/patchouli_books/guide/en_us/entries/feruchemy/feruchemical_electrum.json +a96244e92b63d2cf5710cf7b73a8877491c14b59 assets/cosmere/patchouli_books/guide/en_us/entries/feruchemy/feruchemical_gold.json +cdbaf5d9ad34fa0bf1d16644ca758debd91ceb52 assets/cosmere/patchouli_books/guide/en_us/entries/feruchemy/feruchemical_iron.json +fbd392269f07bf654547f18bf63ac1857eacc18f assets/cosmere/patchouli_books/guide/en_us/entries/feruchemy/feruchemical_nicrosil.json +030449482ce8b9cc84563a149114267a20f74024 assets/cosmere/patchouli_books/guide/en_us/entries/feruchemy/feruchemical_pewter.json +dc1048c641b59bbd66a8cd1cbc1485d02141c393 assets/cosmere/patchouli_books/guide/en_us/entries/feruchemy/feruchemical_steel.json +f3c00939b3f652b20a14621259bbae69be041c2a assets/cosmere/patchouli_books/guide/en_us/entries/feruchemy/feruchemical_tin.json +f47f302616e239fcee62e209392711ef03a6db2b assets/cosmere/patchouli_books/guide/en_us/entries/feruchemy/feruchemical_zinc.json +43469763353f20c66b8d904859d13951d4bc52a4 assets/cosmere/patchouli_books/guide/en_us/entries/feruchemy/feruchemy_basics.json diff --git a/src/datagen/generated/feruchemy/.cache/60c035799f578be828205f75035ce4e4976d0466 b/src/datagen/generated/feruchemy/.cache/60c035799f578be828205f75035ce4e4976d0466 new file mode 100644 index 000000000..62b933c6c --- /dev/null +++ b/src/datagen/generated/feruchemy/.cache/60c035799f578be828205f75035ce4e4976d0466 @@ -0,0 +1,5 @@ +// 1.20.1 2025-11-27T20:18:46.408101 Curios for feruchemy +6d8604575982ef60b9658bf84e9f93720d8c1978 data/feruchemy/curios/entities/feruchemists.json +bbe073ce668da1ecdaf43df2f875912048670cff data/feruchemy/curios/slots/bracelet.json +50651f4d8ef6e4eaf677f5f40e0013e4b16d7e47 data/feruchemy/curios/slots/necklace.json +15229e2ac0d30b7253b5d5b6f82d0433d5cb414c data/feruchemy/curios/slots/ring.json diff --git a/src/datagen/generated/feruchemy/.cache/8ad779514fe79ec9d533430acc900ab68c6e0ca1 b/src/datagen/generated/feruchemy/.cache/8ad779514fe79ec9d533430acc900ab68c6e0ca1 new file mode 100644 index 000000000..d42d32752 --- /dev/null +++ b/src/datagen/generated/feruchemy/.cache/8ad779514fe79ec9d533430acc900ab68c6e0ca1 @@ -0,0 +1,53 @@ +// 1.20.1 2025-03-09T10:57:42.5658234 Item Models: feruchemy +e59dde022aa3cfd2c37cdf18fb4670c477bed55c assets/feruchemy/models/item/aluminum_bracelet_metalmind.json +b922b6ec01be2dad35505e301c12f7afb3a2944f assets/feruchemy/models/item/aluminum_necklace_metalmind.json +3823a37b99e9c67d3e7249686e07b0267f0a2010 assets/feruchemy/models/item/aluminum_ring_metalmind.json +2ba449c825cae80e802204bf75418099c0749f36 assets/feruchemy/models/item/atium_bracelet_metalmind.json +3520e66d1e426075dfb1ac6fca2e38816d6a20be assets/feruchemy/models/item/atium_necklace_metalmind.json +c491976909f348aa6bdff475bd4c0dd92dcdbbf7 assets/feruchemy/models/item/atium_ring_metalmind.json +53a617b4d66275edbfbc8f2618880c684b073a3d assets/feruchemy/models/item/bands_of_mourning.json +de83173b5f0d7596082d4020fc4fda6dd0971a41 assets/feruchemy/models/item/bendalloy_bracelet_metalmind.json +68c051efc6a3f41488e634287f379b20de18c6ee assets/feruchemy/models/item/bendalloy_necklace_metalmind.json +d558b4ba0e92a70c1332fb7bb9edb2eaaaa22bae assets/feruchemy/models/item/bendalloy_ring_metalmind.json +97fed5f02d6dd0b0b0577161dc3aef0bb52e7a6e assets/feruchemy/models/item/brass_bracelet_metalmind.json +1f8433c16259efb5971e338bc12f2e404823ed3f assets/feruchemy/models/item/brass_necklace_metalmind.json +ff5fcc3618a481224d7ce836fae7dd7f046971c3 assets/feruchemy/models/item/brass_ring_metalmind.json +4d7c044e60ed3cc3c7001dc4badc0fb8016f2c98 assets/feruchemy/models/item/bronze_bracelet_metalmind.json +5ba3caf75bf42f5a55d7ce0acdb3b06ae4233aa1 assets/feruchemy/models/item/bronze_necklace_metalmind.json +79d93141d20597a4063cc6c22fbeedcd534aa562 assets/feruchemy/models/item/bronze_ring_metalmind.json +acd47b051c5277bf4ede3fe5d7c3f3d418a42ce9 assets/feruchemy/models/item/cadmium_bracelet_metalmind.json +6ca1c30a25f04ab22ad86426a537c4e15b14ccac assets/feruchemy/models/item/cadmium_necklace_metalmind.json +1a9be76c89a9eaf0cf7d514e011c57256ef0330d assets/feruchemy/models/item/cadmium_ring_metalmind.json +38e51aa0d7050f19a2e2fffa0e2c8bece6daf146 assets/feruchemy/models/item/chromium_bracelet_metalmind.json +b857ba4ff5c6f72c34eea802cc8dcd1a5371411c assets/feruchemy/models/item/chromium_necklace_metalmind.json +effcfcf80c9f77196c4a6c2458a8d31c9a4973f3 assets/feruchemy/models/item/chromium_ring_metalmind.json +cbcea0edbd52e5ba779e7162df55025f18726922 assets/feruchemy/models/item/copper_bracelet_metalmind.json +1fdfdde603358786140f01e23a583a411235f721 assets/feruchemy/models/item/copper_necklace_metalmind.json +d4a03a896c43eabcfab0b95a678783d880f93678 assets/feruchemy/models/item/copper_ring_metalmind.json +4acf5385adca2da89befca59b2f9936e85a1a67b assets/feruchemy/models/item/duralumin_bracelet_metalmind.json +51077777e8a3983052bc469c874aeacd4641ddac assets/feruchemy/models/item/duralumin_necklace_metalmind.json +80479c99b0229e3c7d59a2fcebd19b12f5a03b78 assets/feruchemy/models/item/duralumin_ring_metalmind.json +e7b5f30e85a880da647c7d68fbfd10a5b5581943 assets/feruchemy/models/item/electrum_bracelet_metalmind.json +36eafe6d072c958d61f29b9b49338578e306bfc7 assets/feruchemy/models/item/electrum_necklace_metalmind.json +5882307645d97a71b8f01dcd6494ea05519692b5 assets/feruchemy/models/item/electrum_ring_metalmind.json +fb55d286356356a09a51de109deebcb0a85745ed assets/feruchemy/models/item/gold_bracelet_metalmind.json +44d7de7bc11f83ae7497a0aace2b015eb108e18d assets/feruchemy/models/item/gold_necklace_metalmind.json +d8793fde79c37bbd29a72e7c6f03d1cc22fe1e7b assets/feruchemy/models/item/gold_ring_metalmind.json +d9d3a7af7015c9d6ea2ab92242e8d23bf2491e08 assets/feruchemy/models/item/iron_bracelet_metalmind.json +ee4c9df56ed8a3d348bb6cda414c13605e17f2ad assets/feruchemy/models/item/iron_necklace_metalmind.json +faa0bd85524ba686f6bfcbab37052c92d1dd84d3 assets/feruchemy/models/item/iron_ring_metalmind.json +89b7e10a336ddd41d505b205fb22ad5edbc3766b assets/feruchemy/models/item/nicrosil_bracelet_metalmind.json +fa7271f624bbbfe8757ea7595440934ec1b97a1f assets/feruchemy/models/item/nicrosil_necklace_metalmind.json +066e213c0462075b123f2db1ed522e2192293e00 assets/feruchemy/models/item/nicrosil_ring_metalmind.json +21c5833d74bba1a98b0211ef36e603a20f12ab09 assets/feruchemy/models/item/pewter_bracelet_metalmind.json +9ce3225cf1c01daf1c0aad464f07c8977a7902b8 assets/feruchemy/models/item/pewter_necklace_metalmind.json +3299178791f54079b7573e8b0666d01df00be078 assets/feruchemy/models/item/pewter_ring_metalmind.json +d8d187340cf85413f4dce7a1b3f4e70320eaae95 assets/feruchemy/models/item/steel_bracelet_metalmind.json +89e88315e540992291741a2aebe062861001e783 assets/feruchemy/models/item/steel_necklace_metalmind.json +8216147f9b15b10bcf37cceee8999494ddc5eea7 assets/feruchemy/models/item/steel_ring_metalmind.json +6eed287d8cea497edeaf0c99d216a4a692abaf30 assets/feruchemy/models/item/tin_bracelet_metalmind.json +cd045e582802e99b54df6296a61c63590331f465 assets/feruchemy/models/item/tin_necklace_metalmind.json +16cbd9c0dc44b5827c4796388f63d039406121ca assets/feruchemy/models/item/tin_ring_metalmind.json +2b0ea95e6a4d500169874a4ff4aca071774a89f7 assets/feruchemy/models/item/zinc_bracelet_metalmind.json +04ffaf8646f953170b8a1a09d7fae18ef613cde6 assets/feruchemy/models/item/zinc_necklace_metalmind.json +f51085adc62dcfe9d35ff4e9c57ee411fcd42685 assets/feruchemy/models/item/zinc_ring_metalmind.json diff --git a/src/datagen/generated/feruchemy/.cache/9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e b/src/datagen/generated/feruchemy/.cache/9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e new file mode 100644 index 000000000..541fe5e71 --- /dev/null +++ b/src/datagen/generated/feruchemy/.cache/9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e @@ -0,0 +1,103 @@ +// 1.20.1 2024-10-09T13:22:13.3756835 Recipes +b504c331ba025516b9585ca99f428ba41e8cb6dc data/feruchemy/advancements/recipes/tools/aluminum_bracelet_metalmind.json +81222d13d16c275a43d5b457452d8b8b882f4d3a data/feruchemy/advancements/recipes/tools/aluminum_necklace_metalmind.json +21951c706c32c4bd9e7615336cdc5f618896c24a data/feruchemy/advancements/recipes/tools/aluminum_ring_metalmind.json +25b109cd34944d1c57949effe8c8f93063226f58 data/feruchemy/advancements/recipes/tools/atium_bracelet_metalmind.json +0c4965318237f11fc044b40aecd127f29b285ba1 data/feruchemy/advancements/recipes/tools/atium_necklace_metalmind.json +6df5609a567d2c18f85f9f5ed8e0ea0d24898c3a data/feruchemy/advancements/recipes/tools/atium_ring_metalmind.json +e29a3464f281289deee3754209d5b4acaa595524 data/feruchemy/advancements/recipes/tools/bendalloy_bracelet_metalmind.json +43d69e5fc3c1468ef5d8c761e3822d7546bdf033 data/feruchemy/advancements/recipes/tools/bendalloy_necklace_metalmind.json +f3efbeb451744409a30adfd35bf40f712d5e0c53 data/feruchemy/advancements/recipes/tools/bendalloy_ring_metalmind.json +80d7dffb4c25f436df07ae8ceda397ce1da7e207 data/feruchemy/advancements/recipes/tools/brass_bracelet_metalmind.json +8bd95d26eed9824b72057f01f0a92c8d255425ab data/feruchemy/advancements/recipes/tools/brass_necklace_metalmind.json +3f31ed06cd6e8073e7ee03e2a9ab8e8cd8c3d0c5 data/feruchemy/advancements/recipes/tools/brass_ring_metalmind.json +b3c2bf25c101c0c10abf5184a20253b204303715 data/feruchemy/advancements/recipes/tools/bronze_bracelet_metalmind.json +8259d5a0561385bb8cf92d744fa63b129fc4301d data/feruchemy/advancements/recipes/tools/bronze_necklace_metalmind.json +afa5022c1ab248a163b86f09bc0af72caa718c1c data/feruchemy/advancements/recipes/tools/bronze_ring_metalmind.json +fcaf8166bf63120c8ec55d0e1fde4b8c84e58189 data/feruchemy/advancements/recipes/tools/cadmium_bracelet_metalmind.json +1868b1b35c575defef2cae5a4088134549bbf637 data/feruchemy/advancements/recipes/tools/cadmium_necklace_metalmind.json +8aff755413b897815c79219ebeca15e03a544bf5 data/feruchemy/advancements/recipes/tools/cadmium_ring_metalmind.json +0900668a5475f0766218b5a8c7f5e2811f358947 data/feruchemy/advancements/recipes/tools/chromium_bracelet_metalmind.json +8fe7437cf682be682260717ed29561140c4484ba data/feruchemy/advancements/recipes/tools/chromium_necklace_metalmind.json +29d27a00ee9afacd462379c9616c21889daa3a4c data/feruchemy/advancements/recipes/tools/chromium_ring_metalmind.json +83ec2c1725573394fba356531a237eb9f78fcb87 data/feruchemy/advancements/recipes/tools/copper_bracelet_metalmind.json +cfa4b950f680aeac1ea0b053dc4dafcce2bbc01c data/feruchemy/advancements/recipes/tools/copper_necklace_metalmind.json +f202f54c9f91f409350d79f067b16aef3df7fcaf data/feruchemy/advancements/recipes/tools/copper_ring_metalmind.json +f1d57e4893fc04c38c05face4dee345db578ee95 data/feruchemy/advancements/recipes/tools/duralumin_bracelet_metalmind.json +4740aff9e574b50a5565a20947f30d7e563c19a3 data/feruchemy/advancements/recipes/tools/duralumin_necklace_metalmind.json +ec71e2bf06ac4b71514d42cb28d0d496250406e5 data/feruchemy/advancements/recipes/tools/duralumin_ring_metalmind.json +da28b98b86f9ebb50c3a9d84a9ad778214073c04 data/feruchemy/advancements/recipes/tools/electrum_bracelet_metalmind.json +43e0b93cec19c1230e23bd29a9b494fa0988a79e data/feruchemy/advancements/recipes/tools/electrum_necklace_metalmind.json +d686293b3b5c037f1778b0b2912d3bf01b6fcc92 data/feruchemy/advancements/recipes/tools/electrum_ring_metalmind.json +1942c7224e30b1fac213c5e7f96fd162877edd7d data/feruchemy/advancements/recipes/tools/gold_bracelet_metalmind.json +4906f2b68af5baa4cfecf7ae3de0dc6a70f9566f data/feruchemy/advancements/recipes/tools/gold_necklace_metalmind.json +aea6bc4842de5db883823d8c3d33f2c7f667aa34 data/feruchemy/advancements/recipes/tools/gold_ring_metalmind.json +beb7fcb475ca666260fb35755a8823176aea293c data/feruchemy/advancements/recipes/tools/iron_bracelet_metalmind.json +095bd27ef1ded74b8abd0cf64c7e4d305d61a91f data/feruchemy/advancements/recipes/tools/iron_necklace_metalmind.json +0df9296b500d5caaac287adb90027c9434a4cd1c data/feruchemy/advancements/recipes/tools/iron_ring_metalmind.json +1d21c712bf4e9e0bf4bda2dd5458a153b787e71d data/feruchemy/advancements/recipes/tools/nicrosil_bracelet_metalmind.json +6b2acc0ae9971ca2ce9b787ee91eaaf3d7dd2831 data/feruchemy/advancements/recipes/tools/nicrosil_necklace_metalmind.json +cfa3cc96bbbc0794da8706fa19b8d70109789000 data/feruchemy/advancements/recipes/tools/nicrosil_ring_metalmind.json +886ba4e4da632c4270f8bad6c83b373af979d24b data/feruchemy/advancements/recipes/tools/pewter_bracelet_metalmind.json +6e842bd6a833bf3febaaf5bf351fa6bcacf79c80 data/feruchemy/advancements/recipes/tools/pewter_necklace_metalmind.json +c1105b1e32c1327e60877073e8efe6ccef2caa1b data/feruchemy/advancements/recipes/tools/pewter_ring_metalmind.json +aa6e7c1033f2dab7ed132325acf09806c64f06a3 data/feruchemy/advancements/recipes/tools/steel_bracelet_metalmind.json +3b7bfa44508d7db55f03d2bb2ba321c7104a52af data/feruchemy/advancements/recipes/tools/steel_necklace_metalmind.json +54123a2a5967a31f26c6eefe75108affc9a5c341 data/feruchemy/advancements/recipes/tools/steel_ring_metalmind.json +740a10f3e79cfe5f17ecea7eed69c15b2dd0a894 data/feruchemy/advancements/recipes/tools/tin_bracelet_metalmind.json +ec1fdb5c4a490991ab92ee5da34f82a439346218 data/feruchemy/advancements/recipes/tools/tin_necklace_metalmind.json +0af4ef72e9034ee399aa73e54624cb8a8b89f9d0 data/feruchemy/advancements/recipes/tools/tin_ring_metalmind.json +6144dc0274b6dda0debb4c2039faef2470cda261 data/feruchemy/advancements/recipes/tools/zinc_bracelet_metalmind.json +74239846089091e4b705cfdca4046e11ba2b28fb data/feruchemy/advancements/recipes/tools/zinc_necklace_metalmind.json +0a4f4cf57f9b2b4b0ce768f3e3c7017390da6f73 data/feruchemy/advancements/recipes/tools/zinc_ring_metalmind.json +1002e1d247830ccb290944eb267d9e6e0f5a6e4f data/feruchemy/recipes/aluminum_bracelet_metalmind.json +1393da3950b87c66a8b29cadf91a3074344e18a3 data/feruchemy/recipes/aluminum_necklace_metalmind.json +f4c6455cd60fc5b2b8627ed71ee1d0eb685cda59 data/feruchemy/recipes/aluminum_ring_metalmind.json +4f10174d11e72824e5e64c270d98fd5516627d60 data/feruchemy/recipes/atium_bracelet_metalmind.json +527a0a2978e15cd56f8e4c1e949bb10a0543d6dc data/feruchemy/recipes/atium_necklace_metalmind.json +f400e4f24ce863cdaf8f9bdd2a915f20b59346d8 data/feruchemy/recipes/atium_ring_metalmind.json +d6df87e48d27385778b09fae1a7c0fee691c7614 data/feruchemy/recipes/bendalloy_bracelet_metalmind.json +f02079bcb0788384bbb64a0978be67f102c10a07 data/feruchemy/recipes/bendalloy_necklace_metalmind.json +6e47464f74b415ffc6aa2a839bdf88df2ccfd970 data/feruchemy/recipes/bendalloy_ring_metalmind.json +849768368dedb3eca4110e1a31de4c70cdd44127 data/feruchemy/recipes/brass_bracelet_metalmind.json +eac4defdcf7e78c23b9c3e0f9d536ae43d4d327c data/feruchemy/recipes/brass_necklace_metalmind.json +78993c01640ce73705007e1706fd9943bc5c3544 data/feruchemy/recipes/brass_ring_metalmind.json +6e07da74776fe29712d82df33c660d70ccb21ead data/feruchemy/recipes/bronze_bracelet_metalmind.json +57ba8ad73582b09d916c5b2a31aeffe76b3a467d data/feruchemy/recipes/bronze_necklace_metalmind.json +44c874c1e8f00efe58a03387913661f7741ec87f data/feruchemy/recipes/bronze_ring_metalmind.json +bb99225665658a6edb0d8d0c19ad7765d5f73120 data/feruchemy/recipes/cadmium_bracelet_metalmind.json +77b1e5e954fdcef27d068e4d01d65276650e5ccd data/feruchemy/recipes/cadmium_necklace_metalmind.json +b4fe47270dedc316a02067846abc71b8bdfc6072 data/feruchemy/recipes/cadmium_ring_metalmind.json +c1d632b89df98250acce6e39c809cb01f13a2421 data/feruchemy/recipes/chromium_bracelet_metalmind.json +5cd33f82f760a80893ea8008aea47ca3e9812ea5 data/feruchemy/recipes/chromium_necklace_metalmind.json +d55387fefad85863c14035d2916889a642041bd8 data/feruchemy/recipes/chromium_ring_metalmind.json +1e15d5269b51d2fb393e11d51730b0722ca7b5ce data/feruchemy/recipes/copper_bracelet_metalmind.json +8a8078f8fecad7647a54736f8a9d530525665939 data/feruchemy/recipes/copper_necklace_metalmind.json +669fc4c285e6ee0217a516d07da092f48f107349 data/feruchemy/recipes/copper_ring_metalmind.json +844aad671b8504835a7c3bb65e1fdeaef626a0b1 data/feruchemy/recipes/duralumin_bracelet_metalmind.json +e54d8de25c2aa1ca7f534ab97da5b3a0edd12e90 data/feruchemy/recipes/duralumin_necklace_metalmind.json +89b7874179a5cdd16624cc5f83b43acbe0589690 data/feruchemy/recipes/duralumin_ring_metalmind.json +6edf8d677f4e28544a3dfcf4032af0e71dd259ca data/feruchemy/recipes/electrum_bracelet_metalmind.json +ab1d33609668e83ea621738e02355187edf03681 data/feruchemy/recipes/electrum_necklace_metalmind.json +0489b37762f53fa30d8aa158b850988a6c73e1f8 data/feruchemy/recipes/electrum_ring_metalmind.json +662412b62176477449c243a207f55c2f71010c72 data/feruchemy/recipes/gold_bracelet_metalmind.json +80952ba5ceb07070e691aa1f905620cb2b723468 data/feruchemy/recipes/gold_necklace_metalmind.json +2c1385cb471e585634777452b94e9725c5c6fa9e data/feruchemy/recipes/gold_ring_metalmind.json +a8fe519f0f45fa3d86e661dce031ed3b6da1e0eb data/feruchemy/recipes/iron_bracelet_metalmind.json +c912ee2935df6162599b2ced1f9895c80499ded9 data/feruchemy/recipes/iron_necklace_metalmind.json +3a79203a12f8494c9ee39976cc913849ac245587 data/feruchemy/recipes/iron_ring_metalmind.json +ec2488b79d63c2a0972f3e644aed8cbd42f85a2a data/feruchemy/recipes/nicrosil_bracelet_metalmind.json +0124ac3ce74e0cfcfe48109de9bf628a8f389295 data/feruchemy/recipes/nicrosil_necklace_metalmind.json +3ecd97a66c5cc4aa2d2707cfb42bc388172a4999 data/feruchemy/recipes/nicrosil_ring_metalmind.json +7c12021b93a0a6ed992929b328aa0d9071e5000d data/feruchemy/recipes/pewter_bracelet_metalmind.json +2ddbc6d98fe40cdd84f8209a0341d2b5a18d187c data/feruchemy/recipes/pewter_necklace_metalmind.json +a5129d51e6c414bf948465c9e2abd2827d72b74c data/feruchemy/recipes/pewter_ring_metalmind.json +8295c366f838d3a154feca7e58c3cf1c887a65f0 data/feruchemy/recipes/steel_bracelet_metalmind.json +1cba9e96129437fb41bacf89084a232925b29bd8 data/feruchemy/recipes/steel_necklace_metalmind.json +1b8aa942559aa1c6893cdf5756a085041cc1e2ca data/feruchemy/recipes/steel_ring_metalmind.json +edb61bf80640653bf7603bae2650303133eb9aab data/feruchemy/recipes/tin_bracelet_metalmind.json +7e4eb6434061ff5565bf43dd8986d2f9a030d464 data/feruchemy/recipes/tin_necklace_metalmind.json +fa581b93d958a06973e8a5fb0d557623875d11dd data/feruchemy/recipes/tin_ring_metalmind.json +8dada3de80d71e322b8d7fcda665d5a6fc3e2657 data/feruchemy/recipes/zinc_bracelet_metalmind.json +49db6d06bd3f5aa61ff3020fec7bfa7e176f8a54 data/feruchemy/recipes/zinc_necklace_metalmind.json +225a8037bc45cf552ac075519f1b4f85eb4b16bd data/feruchemy/recipes/zinc_ring_metalmind.json diff --git a/src/datagen/generated/feruchemy/.cache/c622617f6fabf890a00b9275cd5f643584a8a2c8 b/src/datagen/generated/feruchemy/.cache/c622617f6fabf890a00b9275cd5f643584a8a2c8 new file mode 100644 index 000000000..3e5359aa8 --- /dev/null +++ b/src/datagen/generated/feruchemy/.cache/c622617f6fabf890a00b9275cd5f643584a8a2c8 @@ -0,0 +1,2 @@ +// 1.20.1 2025-11-27T19:44:24.144986 Languages: en_us +812946595142a8239516de747f91843b4d1a003c assets/feruchemy/lang/en_us.json diff --git a/src/datagen/generated/feruchemy/assets/cosmere/patchouli_books/guide/en_us/categories/feruchemy.json b/src/datagen/generated/feruchemy/assets/cosmere/patchouli_books/guide/en_us/categories/feruchemy.json new file mode 100644 index 000000000..a1b9c25e8 --- /dev/null +++ b/src/datagen/generated/feruchemy/assets/cosmere/patchouli_books/guide/en_us/categories/feruchemy.json @@ -0,0 +1,7 @@ +{ + "description": "The art of equivalent exchange when it comes to the body. ", + "icon": "feruchemy:copper_bracelet_metalmind", + "name": "Feruchemy", + "secret": false, + "sortnum": 2 +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/assets/cosmere/patchouli_books/guide/en_us/entries/feruchemy/compounding.json b/src/datagen/generated/feruchemy/assets/cosmere/patchouli_books/guide/en_us/entries/feruchemy/compounding.json new file mode 100644 index 000000000..0dd4b6852 --- /dev/null +++ b/src/datagen/generated/feruchemy/assets/cosmere/patchouli_books/guide/en_us/entries/feruchemy/compounding.json @@ -0,0 +1,19 @@ +{ + "category": "cosmere:feruchemy", + "icon": "feruchemy:copper_bracelet_metalmind", + "name": "Compounding", + "pages": [ + { + "type": "text", + "text": "A curious loophole in the systems of investiture on this planet has been discovered. It involves a metalborn with the allomantic and feruchemical abilities of the same metal to burn one of their feruchemical metalminds, essentially creating a new allomantic metal that releases the stored feruchemical charge tenfold." + }, + { + "type": "text", + "text": "This is activated by setting your allomantic power to a negative mode called Compounding and Flared Compounding, which spends allomantic charges to gain feruchemical stores quickly. This is only accessible to Twinborn who have the same Allomantic and Feruchemic metals." + } + ], + "priority": false, + "read_by_default": false, + "secret": false, + "sortnum": 0 +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/assets/cosmere/patchouli_books/guide/en_us/entries/feruchemy/feruchemical_aluminum.json b/src/datagen/generated/feruchemy/assets/cosmere/patchouli_books/guide/en_us/entries/feruchemy/feruchemical_aluminum.json new file mode 100644 index 000000000..840e710d3 --- /dev/null +++ b/src/datagen/generated/feruchemy/assets/cosmere/patchouli_books/guide/en_us/entries/feruchemy/feruchemical_aluminum.json @@ -0,0 +1,31 @@ +{ + "category": "cosmere:feruchemy", + "icon": "feruchemy:aluminum_bracelet_metalmind", + "name": "Feruchemical Aluminum", + "pages": [ + { + "type": "text", + "text": "A ferring who taps $(thing)aluminum$() is known as a \"$(thing)Trueself$()\", and stores Identity. A trueself is somewhat redundant by itself. Reports say that a feruchemist with access to both Feruchmical Aluminum and any other Feruchemical ability can store their identity before storing another attribute, creating what is called an Unkeyed Metalmind." + }, + { + "type": "text", + "text": "This would allow others to access the reserves stored in this metalmind. More research is required." + }, + { + "type": "patchouli:crafting", + "recipe": "feruchemy:aluminum_ring_metalmind" + }, + { + "type": "patchouli:crafting", + "recipe": "feruchemy:aluminum_bracelet_metalmind" + }, + { + "type": "patchouli:crafting", + "recipe": "feruchemy:aluminum_necklace_metalmind" + } + ], + "priority": false, + "read_by_default": false, + "secret": false, + "sortnum": 8 +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/assets/cosmere/patchouli_books/guide/en_us/entries/feruchemy/feruchemical_atium.json b/src/datagen/generated/feruchemy/assets/cosmere/patchouli_books/guide/en_us/entries/feruchemy/feruchemical_atium.json new file mode 100644 index 000000000..ed4ee3019 --- /dev/null +++ b/src/datagen/generated/feruchemy/assets/cosmere/patchouli_books/guide/en_us/entries/feruchemy/feruchemical_atium.json @@ -0,0 +1,27 @@ +{ + "category": "cosmere:feruchemy", + "icon": "feruchemy:atium_bracelet_metalmind", + "name": "Feruchemical Atium", + "pages": [ + { + "type": "text", + "text": "A ferring who taps $(thing)atium$() is known as a \"$(thing)Elderling$()\", and stores Age. While storing age, the ferring will decrease in size. Tapping allows them to grow in size." + }, + { + "type": "patchouli:crafting", + "recipe": "feruchemy:atium_ring_metalmind" + }, + { + "type": "patchouli:crafting", + "recipe": "feruchemy:atium_bracelet_metalmind" + }, + { + "type": "patchouli:crafting", + "recipe": "feruchemy:atium_necklace_metalmind" + } + ], + "priority": false, + "read_by_default": false, + "secret": false, + "sortnum": 16 +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/assets/cosmere/patchouli_books/guide/en_us/entries/feruchemy/feruchemical_bendalloy.json b/src/datagen/generated/feruchemy/assets/cosmere/patchouli_books/guide/en_us/entries/feruchemy/feruchemical_bendalloy.json new file mode 100644 index 000000000..5142abed8 --- /dev/null +++ b/src/datagen/generated/feruchemy/assets/cosmere/patchouli_books/guide/en_us/entries/feruchemy/feruchemical_bendalloy.json @@ -0,0 +1,27 @@ +{ + "category": "cosmere:feruchemy", + "icon": "feruchemy:bendalloy_bracelet_metalmind", + "name": "Feruchemical Bendalloy", + "pages": [ + { + "type": "text", + "text": "A ferring who taps $(thing)bendalloy$() is known as a \"$(thing)Subsumer$()\", and stores Saturation. While storing, a Subsumer is able to store away calories, which can be tapped at a later time." + }, + { + "type": "patchouli:crafting", + "recipe": "feruchemy:bendalloy_ring_metalmind" + }, + { + "type": "patchouli:crafting", + "recipe": "feruchemy:bendalloy_bracelet_metalmind" + }, + { + "type": "patchouli:crafting", + "recipe": "feruchemy:bendalloy_necklace_metalmind" + } + ], + "priority": false, + "read_by_default": false, + "secret": false, + "sortnum": 13 +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/assets/cosmere/patchouli_books/guide/en_us/entries/feruchemy/feruchemical_brass.json b/src/datagen/generated/feruchemy/assets/cosmere/patchouli_books/guide/en_us/entries/feruchemy/feruchemical_brass.json new file mode 100644 index 000000000..b877f77fe --- /dev/null +++ b/src/datagen/generated/feruchemy/assets/cosmere/patchouli_books/guide/en_us/entries/feruchemy/feruchemical_brass.json @@ -0,0 +1,27 @@ +{ + "category": "cosmere:feruchemy", + "icon": "feruchemy:brass_bracelet_metalmind", + "name": "Feruchemical Brass", + "pages": [ + { + "type": "text", + "text": "A ferring who taps $(thing)brass$() is known as a \"$(thing)Firesoul$()\", and stores Warmth. While storing, the Firesoul will find themselves gaining a resistant to intense heat. Some reports say they can swim in lava. Tapping allows them to inflict burns onto others." + }, + { + "type": "patchouli:crafting", + "recipe": "feruchemy:brass_ring_metalmind" + }, + { + "type": "patchouli:crafting", + "recipe": "feruchemy:brass_bracelet_metalmind" + }, + { + "type": "patchouli:crafting", + "recipe": "feruchemy:brass_necklace_metalmind" + } + ], + "priority": false, + "read_by_default": false, + "secret": false, + "sortnum": 5 +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/assets/cosmere/patchouli_books/guide/en_us/entries/feruchemy/feruchemical_bronze.json b/src/datagen/generated/feruchemy/assets/cosmere/patchouli_books/guide/en_us/entries/feruchemy/feruchemical_bronze.json new file mode 100644 index 000000000..6b3f6b3ea --- /dev/null +++ b/src/datagen/generated/feruchemy/assets/cosmere/patchouli_books/guide/en_us/entries/feruchemy/feruchemical_bronze.json @@ -0,0 +1,27 @@ +{ + "category": "cosmere:feruchemy", + "icon": "feruchemy:bronze_bracelet_metalmind", + "name": "Feruchemical Bronze", + "pages": [ + { + "type": "text", + "text": "A ferring who taps $(thing)bronze$() is known as a \"$(thing)Sentry$()\", and stores Wakefulness. While storing, the Sentry is able to fall asleep almost anywhere. Reports say that Tapping can keep away deadly creatures on this Shardworld called $(thing)Phantoms$(). More research is required." + }, + { + "type": "patchouli:crafting", + "recipe": "feruchemy:bronze_ring_metalmind" + }, + { + "type": "patchouli:crafting", + "recipe": "feruchemy:bronze_bracelet_metalmind" + }, + { + "type": "patchouli:crafting", + "recipe": "feruchemy:bronze_necklace_metalmind" + } + ], + "priority": false, + "read_by_default": false, + "secret": false, + "sortnum": 7 +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/assets/cosmere/patchouli_books/guide/en_us/entries/feruchemy/feruchemical_cadmium.json b/src/datagen/generated/feruchemy/assets/cosmere/patchouli_books/guide/en_us/entries/feruchemy/feruchemical_cadmium.json new file mode 100644 index 000000000..3831bce01 --- /dev/null +++ b/src/datagen/generated/feruchemy/assets/cosmere/patchouli_books/guide/en_us/entries/feruchemy/feruchemical_cadmium.json @@ -0,0 +1,27 @@ +{ + "category": "cosmere:feruchemy", + "icon": "feruchemy:cadmium_bracelet_metalmind", + "name": "Feruchemical Cadmium", + "pages": [ + { + "type": "text", + "text": "A ferring who taps $(thing)cadmium$() is known as a \"$(thing)Gasper$()\", and stores Breaths. While storing, a Gasper will find it difficult to breathe. Storing too much may make them suffocate. tapping allows them to hold their breath for far longer periods of time." + }, + { + "type": "patchouli:crafting", + "recipe": "feruchemy:cadmium_ring_metalmind" + }, + { + "type": "patchouli:crafting", + "recipe": "feruchemy:cadmium_bracelet_metalmind" + }, + { + "type": "patchouli:crafting", + "recipe": "feruchemy:cadmium_necklace_metalmind" + } + ], + "priority": false, + "read_by_default": false, + "secret": false, + "sortnum": 12 +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/assets/cosmere/patchouli_books/guide/en_us/entries/feruchemy/feruchemical_chromium.json b/src/datagen/generated/feruchemy/assets/cosmere/patchouli_books/guide/en_us/entries/feruchemy/feruchemical_chromium.json new file mode 100644 index 000000000..3cd3bf763 --- /dev/null +++ b/src/datagen/generated/feruchemy/assets/cosmere/patchouli_books/guide/en_us/entries/feruchemy/feruchemical_chromium.json @@ -0,0 +1,27 @@ +{ + "category": "cosmere:feruchemy", + "icon": "feruchemy:chromium_bracelet_metalmind", + "name": "Feruchemical Chromium", + "pages": [ + { + "type": "text", + "text": "A ferring who taps $(thing)chromium$() is known as a \"$(thing)Spinner$()\", and stores Fortune. While storing, a Spinner will find that things left to chance generally end up against them. Ores they mine drop less usable chunks, Animals can't be harvested for as much usable meat, etc. Tapping seems to make fate bend in their favor." + }, + { + "type": "patchouli:crafting", + "recipe": "feruchemy:chromium_ring_metalmind" + }, + { + "type": "patchouli:crafting", + "recipe": "feruchemy:chromium_bracelet_metalmind" + }, + { + "type": "patchouli:crafting", + "recipe": "feruchemy:chromium_necklace_metalmind" + } + ], + "priority": false, + "read_by_default": false, + "secret": false, + "sortnum": 10 +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/assets/cosmere/patchouli_books/guide/en_us/entries/feruchemy/feruchemical_copper.json b/src/datagen/generated/feruchemy/assets/cosmere/patchouli_books/guide/en_us/entries/feruchemy/feruchemical_copper.json new file mode 100644 index 000000000..451feed5b --- /dev/null +++ b/src/datagen/generated/feruchemy/assets/cosmere/patchouli_books/guide/en_us/entries/feruchemy/feruchemical_copper.json @@ -0,0 +1,27 @@ +{ + "category": "cosmere:feruchemy", + "icon": "feruchemy:copper_bracelet_metalmind", + "name": "Feruchemical Copper", + "pages": [ + { + "type": "text", + "text": "A ferring who taps $(thing)copper$() is known as a \"$(thing)Archivist$()\", and stores Memories. While storing, the Archivist is able to store their memories and experiences away. Tapping allows them to regain their stored knowledge." + }, + { + "type": "patchouli:crafting", + "recipe": "feruchemy:copper_ring_metalmind" + }, + { + "type": "patchouli:crafting", + "recipe": "feruchemy:copper_bracelet_metalmind" + }, + { + "type": "patchouli:crafting", + "recipe": "feruchemy:copper_necklace_metalmind" + } + ], + "priority": false, + "read_by_default": false, + "secret": false, + "sortnum": 6 +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/assets/cosmere/patchouli_books/guide/en_us/entries/feruchemy/feruchemical_duralumin.json b/src/datagen/generated/feruchemy/assets/cosmere/patchouli_books/guide/en_us/entries/feruchemy/feruchemical_duralumin.json new file mode 100644 index 000000000..a129261fe --- /dev/null +++ b/src/datagen/generated/feruchemy/assets/cosmere/patchouli_books/guide/en_us/entries/feruchemy/feruchemical_duralumin.json @@ -0,0 +1,27 @@ +{ + "category": "cosmere:feruchemy", + "icon": "feruchemy:duralumin_bracelet_metalmind", + "name": "Feruchemical Duralumin", + "pages": [ + { + "type": "text", + "text": "A ferring who taps $(thing)duralumin$() is known as a \"$(thing)Connector$()\", and stores Connection. While storing, a Connector can make themselves more difficult for the native creatures of this shardworld to detect. Tapping allows them to create a closer bond with the native Villagers, granting them better trades. More research is required." + }, + { + "type": "patchouli:crafting", + "recipe": "feruchemy:duralumin_ring_metalmind" + }, + { + "type": "patchouli:crafting", + "recipe": "feruchemy:duralumin_bracelet_metalmind" + }, + { + "type": "patchouli:crafting", + "recipe": "feruchemy:duralumin_necklace_metalmind" + } + ], + "priority": false, + "read_by_default": false, + "secret": false, + "sortnum": 9 +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/assets/cosmere/patchouli_books/guide/en_us/entries/feruchemy/feruchemical_electrum.json b/src/datagen/generated/feruchemy/assets/cosmere/patchouli_books/guide/en_us/entries/feruchemy/feruchemical_electrum.json new file mode 100644 index 000000000..488f5b727 --- /dev/null +++ b/src/datagen/generated/feruchemy/assets/cosmere/patchouli_books/guide/en_us/entries/feruchemy/feruchemical_electrum.json @@ -0,0 +1,27 @@ +{ + "category": "cosmere:feruchemy", + "icon": "feruchemy:electrum_bracelet_metalmind", + "name": "Feruchemical Electrum", + "pages": [ + { + "type": "text", + "text": "A ferring who taps $(thing)electrum$() is known as a \"$(thing)Pinnacle$()\", and stores Determination. While storing, a Pinnacle will find themselves growing more unsure. Tapping fills them with determination. Reports say that they can shrug off greater injury while tapping Determination. More research is required." + }, + { + "type": "patchouli:crafting", + "recipe": "feruchemy:electrum_ring_metalmind" + }, + { + "type": "patchouli:crafting", + "recipe": "feruchemy:electrum_bracelet_metalmind" + }, + { + "type": "patchouli:crafting", + "recipe": "feruchemy:electrum_necklace_metalmind" + } + ], + "priority": false, + "read_by_default": false, + "secret": false, + "sortnum": 15 +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/assets/cosmere/patchouli_books/guide/en_us/entries/feruchemy/feruchemical_gold.json b/src/datagen/generated/feruchemy/assets/cosmere/patchouli_books/guide/en_us/entries/feruchemy/feruchemical_gold.json new file mode 100644 index 000000000..f7328629e --- /dev/null +++ b/src/datagen/generated/feruchemy/assets/cosmere/patchouli_books/guide/en_us/entries/feruchemy/feruchemical_gold.json @@ -0,0 +1,27 @@ +{ + "category": "cosmere:feruchemy", + "icon": "feruchemy:gold_bracelet_metalmind", + "name": "Feruchemical Gold", + "pages": [ + { + "type": "text", + "text": "A ferring who taps $(thing)gold$() is known as a \"$(thing)Bloodmaker$()\", and stores Health. While storing, a Bloodmaker is able to store away health, growing frail and weak. Tapping allows them to recover from injuries with ease." + }, + { + "type": "patchouli:crafting", + "recipe": "feruchemy:gold_ring_metalmind" + }, + { + "type": "patchouli:crafting", + "recipe": "feruchemy:gold_bracelet_metalmind" + }, + { + "type": "patchouli:crafting", + "recipe": "feruchemy:gold_necklace_metalmind" + } + ], + "priority": false, + "read_by_default": false, + "secret": false, + "sortnum": 14 +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/assets/cosmere/patchouli_books/guide/en_us/entries/feruchemy/feruchemical_iron.json b/src/datagen/generated/feruchemy/assets/cosmere/patchouli_books/guide/en_us/entries/feruchemy/feruchemical_iron.json new file mode 100644 index 000000000..ce2d39ca2 --- /dev/null +++ b/src/datagen/generated/feruchemy/assets/cosmere/patchouli_books/guide/en_us/entries/feruchemy/feruchemical_iron.json @@ -0,0 +1,27 @@ +{ + "category": "cosmere:feruchemy", + "icon": "feruchemy:iron_bracelet_metalmind", + "name": "Feruchemical Iron", + "pages": [ + { + "type": "text", + "text": "A ferring who taps $(thing)iron$() is known as a \"$(thing)Skimmer$()\", and stores Weight. While storing, the Skimmer will find themselves getting lighter, and falling slower. Tapping makes them fall far faster, and take less knockback." + }, + { + "type": "patchouli:crafting", + "recipe": "feruchemy:iron_ring_metalmind" + }, + { + "type": "patchouli:crafting", + "recipe": "feruchemy:iron_bracelet_metalmind" + }, + { + "type": "patchouli:crafting", + "recipe": "feruchemy:iron_necklace_metalmind" + } + ], + "priority": false, + "read_by_default": false, + "secret": false, + "sortnum": 0 +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/assets/cosmere/patchouli_books/guide/en_us/entries/feruchemy/feruchemical_nicrosil.json b/src/datagen/generated/feruchemy/assets/cosmere/patchouli_books/guide/en_us/entries/feruchemy/feruchemical_nicrosil.json new file mode 100644 index 000000000..177289323 --- /dev/null +++ b/src/datagen/generated/feruchemy/assets/cosmere/patchouli_books/guide/en_us/entries/feruchemy/feruchemical_nicrosil.json @@ -0,0 +1,27 @@ +{ + "category": "cosmere:feruchemy", + "icon": "feruchemy:nicrosil_bracelet_metalmind", + "name": "Feruchemical Nicrosil", + "pages": [ + { + "type": "text", + "text": "A ferring who taps $(thing)nicrosil$() is known as a \"$(thing)Soulbearer$()\", and stores Investiture. Little is known- more research required. (Not yet implemented)" + }, + { + "type": "patchouli:crafting", + "recipe": "feruchemy:nicrosil_ring_metalmind" + }, + { + "type": "patchouli:crafting", + "recipe": "feruchemy:nicrosil_bracelet_metalmind" + }, + { + "type": "patchouli:crafting", + "recipe": "feruchemy:nicrosil_necklace_metalmind" + } + ], + "priority": false, + "read_by_default": false, + "secret": false, + "sortnum": 11 +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/assets/cosmere/patchouli_books/guide/en_us/entries/feruchemy/feruchemical_pewter.json b/src/datagen/generated/feruchemy/assets/cosmere/patchouli_books/guide/en_us/entries/feruchemy/feruchemical_pewter.json new file mode 100644 index 000000000..ab6648882 --- /dev/null +++ b/src/datagen/generated/feruchemy/assets/cosmere/patchouli_books/guide/en_us/entries/feruchemy/feruchemical_pewter.json @@ -0,0 +1,27 @@ +{ + "category": "cosmere:feruchemy", + "icon": "feruchemy:pewter_bracelet_metalmind", + "name": "Feruchemical Pewter", + "pages": [ + { + "type": "text", + "text": "A ferring who taps $(thing)pewter$() is known as a \"$(thing)Brute$()\", and stores Strength. While storing, the Brute will find their attacks do little damage. Tapping allows them to gain increased damage on their attacks." + }, + { + "type": "patchouli:crafting", + "recipe": "feruchemy:pewter_ring_metalmind" + }, + { + "type": "patchouli:crafting", + "recipe": "feruchemy:pewter_bracelet_metalmind" + }, + { + "type": "patchouli:crafting", + "recipe": "feruchemy:pewter_necklace_metalmind" + } + ], + "priority": false, + "read_by_default": false, + "secret": false, + "sortnum": 3 +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/assets/cosmere/patchouli_books/guide/en_us/entries/feruchemy/feruchemical_steel.json b/src/datagen/generated/feruchemy/assets/cosmere/patchouli_books/guide/en_us/entries/feruchemy/feruchemical_steel.json new file mode 100644 index 000000000..2eca54dcb --- /dev/null +++ b/src/datagen/generated/feruchemy/assets/cosmere/patchouli_books/guide/en_us/entries/feruchemy/feruchemical_steel.json @@ -0,0 +1,27 @@ +{ + "category": "cosmere:feruchemy", + "icon": "feruchemy:steel_bracelet_metalmind", + "name": "Feruchemical Steel", + "pages": [ + { + "type": "text", + "text": "A ferring who taps $(thing)steel$() is known as a \"$(thing)Steelrunner$()\", and stores Speed. While storing, the Steelrunner will grow far slower. Tapping makes them move faster. Some reports say a Steelrunner can even run across water." + }, + { + "type": "patchouli:crafting", + "recipe": "feruchemy:steel_ring_metalmind" + }, + { + "type": "patchouli:crafting", + "recipe": "feruchemy:steel_bracelet_metalmind" + }, + { + "type": "patchouli:crafting", + "recipe": "feruchemy:steel_necklace_metalmind" + } + ], + "priority": false, + "read_by_default": false, + "secret": false, + "sortnum": 1 +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/assets/cosmere/patchouli_books/guide/en_us/entries/feruchemy/feruchemical_tin.json b/src/datagen/generated/feruchemy/assets/cosmere/patchouli_books/guide/en_us/entries/feruchemy/feruchemical_tin.json new file mode 100644 index 000000000..c590742d4 --- /dev/null +++ b/src/datagen/generated/feruchemy/assets/cosmere/patchouli_books/guide/en_us/entries/feruchemy/feruchemical_tin.json @@ -0,0 +1,27 @@ +{ + "category": "cosmere:feruchemy", + "icon": "feruchemy:tin_bracelet_metalmind", + "name": "Feruchemical Tin", + "pages": [ + { + "type": "text", + "text": "A ferring who taps $(thing)tin$() is known as a \"$(thing)Windwhisperer$()\", and stores Senses. While storing, the Windwhisperer will find themselves growing increasingly shortsighted. Tapping allows them to magnify their vision, as if looking through a spyglass." + }, + { + "type": "patchouli:crafting", + "recipe": "feruchemy:tin_ring_metalmind" + }, + { + "type": "patchouli:crafting", + "recipe": "feruchemy:tin_bracelet_metalmind" + }, + { + "type": "patchouli:crafting", + "recipe": "feruchemy:tin_necklace_metalmind" + } + ], + "priority": false, + "read_by_default": false, + "secret": false, + "sortnum": 2 +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/assets/cosmere/patchouli_books/guide/en_us/entries/feruchemy/feruchemical_zinc.json b/src/datagen/generated/feruchemy/assets/cosmere/patchouli_books/guide/en_us/entries/feruchemy/feruchemical_zinc.json new file mode 100644 index 000000000..21fe68056 --- /dev/null +++ b/src/datagen/generated/feruchemy/assets/cosmere/patchouli_books/guide/en_us/entries/feruchemy/feruchemical_zinc.json @@ -0,0 +1,27 @@ +{ + "category": "cosmere:feruchemy", + "icon": "feruchemy:zinc_bracelet_metalmind", + "name": "Feruchemical Zinc", + "pages": [ + { + "type": "text", + "text": "A ferring who taps $(thing)zinc$() is known as a \"$(thing)Sparker$()\", and stores Mental Speed. While storing, the Sparker will find themselves learning less from their experiences. Tapping allows them to gain further insight into their experiences." + }, + { + "type": "patchouli:crafting", + "recipe": "feruchemy:zinc_ring_metalmind" + }, + { + "type": "patchouli:crafting", + "recipe": "feruchemy:zinc_bracelet_metalmind" + }, + { + "type": "patchouli:crafting", + "recipe": "feruchemy:zinc_necklace_metalmind" + } + ], + "priority": false, + "read_by_default": false, + "secret": false, + "sortnum": 4 +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/assets/cosmere/patchouli_books/guide/en_us/entries/feruchemy/feruchemy_basics.json b/src/datagen/generated/feruchemy/assets/cosmere/patchouli_books/guide/en_us/entries/feruchemy/feruchemy_basics.json new file mode 100644 index 000000000..e1ccdc6a7 --- /dev/null +++ b/src/datagen/generated/feruchemy/assets/cosmere/patchouli_books/guide/en_us/entries/feruchemy/feruchemy_basics.json @@ -0,0 +1,26 @@ +{ + "category": "cosmere:feruchemy", + "icon": "feruchemy:copper_bracelet_metalmind", + "name": "Feruchemy Basics", + "pages": [ + { + "type": "text", + "text": "The art requires storing an attribute in a piece of metal. Depending on what kind of metal you have access to, a metalmind of the corresponding metal will let you store and tap different attributes.", + "title": "feruchemy:copper_bracelet_metalmind" + }, + { + "type": "patchouli:crafting", + "recipe": "feruchemy:steel_ring_metalmind", + "recipe2": "feruchemy:steel_bracelet_metalmind" + }, + { + "type": "patchouli:crafting", + "recipe": "feruchemy:steel_necklace_metalmind", + "text": "Metalminds can store varying amounts of charges, depending on the size." + } + ], + "priority": true, + "read_by_default": false, + "secret": false, + "sortnum": 0 +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/assets/feruchemy/lang/en_us.json b/src/datagen/generated/feruchemy/assets/feruchemy/lang/en_us.json new file mode 100644 index 000000000..a68b0f73f --- /dev/null +++ b/src/datagen/generated/feruchemy/assets/feruchemy/lang/en_us.json @@ -0,0 +1,275 @@ +{ + "advancements.feruchemy.feruchemy.aluminum.description": "Test description: Feruchemical Aluminum", + "advancements.feruchemy.feruchemy.aluminum.title": "Feruchemical Aluminum", + "advancements.feruchemy.feruchemy.atium.description": "Test description: Feruchemical Atium", + "advancements.feruchemy.feruchemy.atium.title": "Feruchemical Atium", + "advancements.feruchemy.feruchemy.bendalloy.description": "Test description: Feruchemical Bendalloy", + "advancements.feruchemy.feruchemy.bendalloy.title": "Feruchemical Bendalloy", + "advancements.feruchemy.feruchemy.brass.description": "Test description: Feruchemical Brass", + "advancements.feruchemy.feruchemy.brass.title": "Feruchemical Brass", + "advancements.feruchemy.feruchemy.bronze.description": "Test description: Feruchemical Bronze", + "advancements.feruchemy.feruchemy.bronze.title": "Feruchemical Bronze", + "advancements.feruchemy.feruchemy.cadmium.description": "Test description: Feruchemical Cadmium", + "advancements.feruchemy.feruchemy.cadmium.title": "Feruchemical Cadmium", + "advancements.feruchemy.feruchemy.chromium.description": "Test description: Feruchemical Chromium", + "advancements.feruchemy.feruchemy.chromium.title": "Feruchemical Chromium", + "advancements.feruchemy.feruchemy.copper.description": "Test description: Feruchemical Copper", + "advancements.feruchemy.feruchemy.copper.title": "Feruchemical Copper", + "advancements.feruchemy.feruchemy.description": "Test description: Feruchemy", + "advancements.feruchemy.feruchemy.duralumin.description": "Test description: Feruchemical Duralumin", + "advancements.feruchemy.feruchemy.duralumin.title": "Feruchemical Duralumin", + "advancements.feruchemy.feruchemy.electrum.description": "Test description: Feruchemical Electrum", + "advancements.feruchemy.feruchemy.electrum.title": "Feruchemical Electrum", + "advancements.feruchemy.feruchemy.gold.description": "Test description: Feruchemical Gold", + "advancements.feruchemy.feruchemy.gold.title": "Feruchemical Gold", + "advancements.feruchemy.feruchemy.iron.description": "Test description: Feruchemical Iron", + "advancements.feruchemy.feruchemy.iron.title": "Feruchemical Iron", + "advancements.feruchemy.feruchemy.nicrosil.description": "Test description: Feruchemical Nicrosil", + "advancements.feruchemy.feruchemy.nicrosil.title": "Feruchemical Nicrosil", + "advancements.feruchemy.feruchemy.pewter.description": "Test description: Feruchemical Pewter", + "advancements.feruchemy.feruchemy.pewter.title": "Feruchemical Pewter", + "advancements.feruchemy.feruchemy.steel.description": "Test description: Feruchemical Steel", + "advancements.feruchemy.feruchemy.steel.title": "Feruchemical Steel", + "advancements.feruchemy.feruchemy.tin.description": "Test description: Feruchemical Tin", + "advancements.feruchemy.feruchemy.tin.title": "Feruchemical Tin", + "advancements.feruchemy.feruchemy.title": "Feruchemy", + "advancements.feruchemy.feruchemy.zinc.description": "Test description: Feruchemical Zinc", + "advancements.feruchemy.feruchemy.zinc.title": "Feruchemical Zinc", + "attribute.feruchemy.aluminum": "Feruchemical Aluminum", + "attribute.feruchemy.bendalloy": "Feruchemical Bendalloy", + "attribute.feruchemy.brass": "Feruchemical Brass", + "attribute.feruchemy.bronze": "Feruchemical Bronze", + "attribute.feruchemy.cadmium": "Feruchemical Cadmium", + "attribute.feruchemy.chromium": "Feruchemical Chromium", + "attribute.feruchemy.copper": "Feruchemical Copper", + "attribute.feruchemy.duralumin": "Feruchemical Duralumin", + "attribute.feruchemy.electrum": "Feruchemical Electrum", + "attribute.feruchemy.gold": "Feruchemical Gold", + "attribute.feruchemy.iron": "Feruchemical Iron", + "attribute.feruchemy.nicrosil": "Feruchemical Nicrosil", + "attribute.feruchemy.pewter": "Feruchemical Pewter", + "attribute.feruchemy.steel": "Feruchemical Steel", + "attribute.feruchemy.tin": "Feruchemical Tin", + "attribute.feruchemy.zinc": "Feruchemical Zinc", + "effect.feruchemy.storing_aluminum": "Storing Aluminum", + "effect.feruchemy.storing_atium": "Storing Atium", + "effect.feruchemy.storing_bendalloy": "Storing Bendalloy", + "effect.feruchemy.storing_brass": "Storing Brass", + "effect.feruchemy.storing_bronze": "Storing Bronze", + "effect.feruchemy.storing_cadmium": "Storing Cadmium", + "effect.feruchemy.storing_chromium": "Storing Chromium", + "effect.feruchemy.storing_copper": "Storing Copper", + "effect.feruchemy.storing_duralumin": "Storing Duralumin", + "effect.feruchemy.storing_electrum": "Storing Electrum", + "effect.feruchemy.storing_gold": "Storing Gold", + "effect.feruchemy.storing_iron": "Storing Iron", + "effect.feruchemy.storing_nicrosil": "Storing Nicrosil", + "effect.feruchemy.storing_pewter": "Storing Pewter", + "effect.feruchemy.storing_steel": "Storing Steel", + "effect.feruchemy.storing_tin": "Storing Tin", + "effect.feruchemy.storing_zinc": "Storing Zinc", + "effect.feruchemy.tapping_aluminum": "Tapping Aluminum", + "effect.feruchemy.tapping_atium": "Tapping Atium", + "effect.feruchemy.tapping_bendalloy": "Tapping Bendalloy", + "effect.feruchemy.tapping_brass": "Tapping Brass", + "effect.feruchemy.tapping_bronze": "Tapping Bronze", + "effect.feruchemy.tapping_cadmium": "Tapping Cadmium", + "effect.feruchemy.tapping_chromium": "Tapping Chromium", + "effect.feruchemy.tapping_copper": "Tapping Copper", + "effect.feruchemy.tapping_duralumin": "Tapping Duralumin", + "effect.feruchemy.tapping_electrum": "Tapping Electrum", + "effect.feruchemy.tapping_gold": "Tapping Gold", + "effect.feruchemy.tapping_iron": "Tapping Iron", + "effect.feruchemy.tapping_nicrosil": "Tapping Nicrosil", + "effect.feruchemy.tapping_pewter": "Tapping Pewter", + "effect.feruchemy.tapping_steel": "Tapping Steel", + "effect.feruchemy.tapping_tin": "Tapping Tin", + "effect.feruchemy.tapping_zinc": "Tapping Zinc", + "entry.aluminum": "Aluminum - Trueself", + "entry.atium": "Atium - Elderling", + "entry.bendalloy": "Bendalloy - Subsumer", + "entry.brass": "Brass - Firesoul", + "entry.bronze": "Bronze - Sentry", + "entry.cadmium": "Cadmium - Gasper", + "entry.chromium": "Chromium - Spinner", + "entry.copper": "Copper - Archivist", + "entry.duralumin": "Duralumin - Connector", + "entry.electrum": "Electrum - Pinnacle", + "entry.gold": "Gold - Bloodmaker", + "entry.harmonium": "Harmonium - Ferring Harmonium", + "entry.iron": "Iron - Skimmer", + "entry.lead": "Lead - Ferring Lead", + "entry.lerasatium": "Lerasatium - Feruchemist", + "entry.lerasium": "Lerasium - Ferring Lerasium", + "entry.malatium": "Malatium - Ferring Malatium", + "entry.nickel": "Nickel - Ferring Nickel", + "entry.nicrosil": "Nicrosil - Soulbearer", + "entry.pewter": "Pewter - Brute", + "entry.silver": "Silver - Ferring Silver", + "entry.steel": "Steel - Steelrunner", + "entry.tin": "Tin - Windwhisperer", + "entry.zinc": "Zinc - Sparker", + "feruchemy.archivist": "Archivist", + "feruchemy.bloodmaker": "Bloodmaker", + "feruchemy.brute": "Brute", + "feruchemy.connector": "Connector", + "feruchemy.elderling": "Elderling", + "feruchemy.firesoul": "Firesoul", + "feruchemy.gasper": "Gasper", + "feruchemy.pinnacle": "Pinnacle", + "feruchemy.sentry": "Sentry", + "feruchemy.skimmer": "Skimmer", + "feruchemy.soulbearer": "Soulbearer", + "feruchemy.sparker": "Sparker", + "feruchemy.spinner": "Spinner", + "feruchemy.steelrunner": "Steelrunner", + "feruchemy.subsumer": "Subsumer", + "feruchemy.trueself": "Trueself", + "feruchemy.windwhisperer": "Windwhisperer", + "item.feruchemy.aluminum_bracelet_metalmind": "Aluminum Bracelet Metalmind", + "item.feruchemy.aluminum_bracelet_metalmind.tooltip": "Stores Identity. Trueself Ferrings can store their spiritual sense of self within an aluminum metalmind.", + "item.feruchemy.aluminum_necklace_metalmind": "Aluminum Necklace Metalmind", + "item.feruchemy.aluminum_necklace_metalmind.tooltip": "Stores Identity. Trueself Ferrings can store their spiritual sense of self within an aluminum metalmind.", + "item.feruchemy.aluminum_ring_metalmind": "Aluminum Ring Metalmind", + "item.feruchemy.aluminum_ring_metalmind.tooltip": "Stores Identity. Trueself Ferrings can store their spiritual sense of self within an aluminum metalmind.", + "item.feruchemy.atium_bracelet_metalmind": "Atium Bracelet Metalmind", + "item.feruchemy.atium_bracelet_metalmind.tooltip": "Stores Height. Atium ferrings become smaller during active storage, and can tap it later to be come larger.", + "item.feruchemy.atium_necklace_metalmind": "Atium Necklace Metalmind", + "item.feruchemy.atium_necklace_metalmind.tooltip": "Stores Height. Atium ferrings become smaller during active storage, and can tap it later to be come larger.", + "item.feruchemy.atium_ring_metalmind": "Atium Ring Metalmind", + "item.feruchemy.atium_ring_metalmind.tooltip": "Stores Height. Atium ferrings become smaller during active storage, and can tap it later to be come larger.", + "item.feruchemy.bands_of_mourning": "Bands Of Mourning", + "item.feruchemy.bands_of_mourning.tooltip": "Unknown...", + "item.feruchemy.bendalloy_bracelet_metalmind": "Bendalloy Bracelet Metalmind", + "item.feruchemy.bendalloy_bracelet_metalmind.tooltip": "Stores Energy. A Subsumer Ferring using this can consume large quantities of food and store the calories in the metalmind, in exchange for the ability to forgo eating later.", + "item.feruchemy.bendalloy_necklace_metalmind": "Bendalloy Necklace Metalmind", + "item.feruchemy.bendalloy_necklace_metalmind.tooltip": "Stores Energy. A Subsumer Ferring using this can consume large quantities of food and store the calories in the metalmind, in exchange for the ability to forgo eating later.", + "item.feruchemy.bendalloy_ring_metalmind": "Bendalloy Ring Metalmind", + "item.feruchemy.bendalloy_ring_metalmind.tooltip": "Stores Energy. A Subsumer Ferring using this can consume large quantities of food and store the calories in the metalmind, in exchange for the ability to forgo eating later.", + "item.feruchemy.brass_bracelet_metalmind": "Brass Bracelet Metalmind", + "item.feruchemy.brass_bracelet_metalmind.tooltip": "Stores Warmth. Firesoul Ferrings using this will cool themselves in exchange for being able to warm themselves later by tapping the metalmind.", + "item.feruchemy.brass_necklace_metalmind": "Brass Necklace Metalmind", + "item.feruchemy.brass_necklace_metalmind.tooltip": "Stores Warmth. Firesoul Ferrings using this will cool themselves in exchange for being able to warm themselves later by tapping the metalmind.", + "item.feruchemy.brass_ring_metalmind": "Brass Ring Metalmind", + "item.feruchemy.brass_ring_metalmind.tooltip": "Stores Warmth. Firesoul Ferrings using this will cool themselves in exchange for being able to warm themselves later by tapping the metalmind.", + "item.feruchemy.bronze_bracelet_metalmind": "Bronze Bracelet Metalmind", + "item.feruchemy.bronze_bracelet_metalmind.tooltip": "Stores Wakefulness. A Sentry Ferring using this will sleep or be drowsier now in exchange for staying awake longer later.", + "item.feruchemy.bronze_necklace_metalmind": "Bronze Necklace Metalmind", + "item.feruchemy.bronze_necklace_metalmind.tooltip": "Stores Wakefulness. A Sentry Ferring using this will sleep or be drowsier now in exchange for staying awake longer later.", + "item.feruchemy.bronze_ring_metalmind": "Bronze Ring Metalmind", + "item.feruchemy.bronze_ring_metalmind.tooltip": "Stores Wakefulness. A Sentry Ferring using this will sleep or be drowsier now in exchange for staying awake longer later.", + "item.feruchemy.cadmium_bracelet_metalmind": "Cadmium Bracelet Metalmind", + "item.feruchemy.cadmium_bracelet_metalmind.tooltip": "Stores Breath. A Gasper Ferring may hyperventilate while storing breath in exchange for eliminating or reducing the need to breathe later on.", + "item.feruchemy.cadmium_necklace_metalmind": "Cadmium Necklace Metalmind", + "item.feruchemy.cadmium_necklace_metalmind.tooltip": "Stores Breath. A Gasper Ferring may hyperventilate while storing breath in exchange for eliminating or reducing the need to breathe later on.", + "item.feruchemy.cadmium_ring_metalmind": "Cadmium Ring Metalmind", + "item.feruchemy.cadmium_ring_metalmind.tooltip": "Stores Breath. A Gasper Ferring may hyperventilate while storing breath in exchange for eliminating or reducing the need to breathe later on.", + "item.feruchemy.chromium_bracelet_metalmind": "Chromium Bracelet Metalmind", + "item.feruchemy.chromium_bracelet_metalmind.tooltip": "Stores Fortune. A Spinner Ferring will become unlucky during active storage in exchange for increased fortune later.", + "item.feruchemy.chromium_necklace_metalmind": "Chromium Necklace Metalmind", + "item.feruchemy.chromium_necklace_metalmind.tooltip": "Stores Fortune. A Spinner Ferring will become unlucky during active storage in exchange for increased fortune later.", + "item.feruchemy.chromium_ring_metalmind": "Chromium Ring Metalmind", + "item.feruchemy.chromium_ring_metalmind.tooltip": "Stores Fortune. A Spinner Ferring will become unlucky during active storage in exchange for increased fortune later.", + "item.feruchemy.copper_bracelet_metalmind": "Copper Bracelet Metalmind", + "item.feruchemy.copper_bracelet_metalmind.tooltip": "Stores Experience. An Archivist Ferring using this will be able to store experience inside copper, then withdraw it later from the metal.", + "item.feruchemy.copper_necklace_metalmind": "Copper Necklace Metalmind", + "item.feruchemy.copper_necklace_metalmind.tooltip": "Stores Experience. An Archivist Ferring using this will be able to store experience inside copper, then withdraw it later from the metal.", + "item.feruchemy.copper_ring_metalmind": "Copper Ring Metalmind", + "item.feruchemy.copper_ring_metalmind.tooltip": "Stores Experience. An Archivist Ferring using this will be able to store experience inside copper, then withdraw it later from the metal.", + "item.feruchemy.duralumin_bracelet_metalmind": "Duralumin Bracelet Metalmind", + "item.feruchemy.duralumin_bracelet_metalmind.tooltip": "Stores Connection. A Connector Ferring can store spiritual connection inside a metalmind, reducing outside awareness during active storage. Tapping not yet implemented.", + "item.feruchemy.duralumin_necklace_metalmind": "Duralumin Necklace Metalmind", + "item.feruchemy.duralumin_necklace_metalmind.tooltip": "Stores Connection. A Connector Ferring can store spiritual connection inside a metalmind, reducing outside awareness during active storage. Tapping not yet implemented.", + "item.feruchemy.duralumin_ring_metalmind": "Duralumin Ring Metalmind", + "item.feruchemy.duralumin_ring_metalmind.tooltip": "Stores Connection. A Connector Ferring can store spiritual connection inside a metalmind, reducing outside awareness during active storage. Tapping not yet implemented.", + "item.feruchemy.electrum_bracelet_metalmind": "Electrum Bracelet Metalmind", + "item.feruchemy.electrum_bracelet_metalmind.tooltip": "Stores Determination. A Pinnacle Ferring using this will take more damage in exchange for taking less damage later.", + "item.feruchemy.electrum_necklace_metalmind": "Electrum Necklace Metalmind", + "item.feruchemy.electrum_necklace_metalmind.tooltip": "Stores Determination. A Pinnacle Ferring using this will take more damage in exchange for taking less damage later.", + "item.feruchemy.electrum_ring_metalmind": "Electrum Ring Metalmind", + "item.feruchemy.electrum_ring_metalmind.tooltip": "Stores Determination. A Pinnacle Ferring using this will take more damage in exchange for taking less damage later.", + "item.feruchemy.gold_bracelet_metalmind": "Gold Bracelet Metalmind", + "item.feruchemy.gold_bracelet_metalmind.tooltip": "Stores Health. A Bloodmaker Ferring using this will feel sick now in exchange for increased regeneration and healing later.", + "item.feruchemy.gold_necklace_metalmind": "Gold Necklace Metalmind", + "item.feruchemy.gold_necklace_metalmind.tooltip": "Stores Health. A Bloodmaker Ferring using this will feel sick now in exchange for increased regeneration and healing later.", + "item.feruchemy.gold_ring_metalmind": "Gold Ring Metalmind", + "item.feruchemy.gold_ring_metalmind.tooltip": "Stores Health. A Bloodmaker Ferring using this will feel sick now in exchange for increased regeneration and healing later.", + "item.feruchemy.iron_bracelet_metalmind": "Iron Bracelet Metalmind", + "item.feruchemy.iron_bracelet_metalmind.tooltip": "Stores Weight. Less weight slows descent. A Skimmer Ferring using this will decrease the pull of gravity on them in exchange for increasing it later.", + "item.feruchemy.iron_necklace_metalmind": "Iron Necklace Metalmind", + "item.feruchemy.iron_necklace_metalmind.tooltip": "Stores Weight. Less weight slows descent. A Skimmer Ferring using this will decrease the pull of gravity on them in exchange for increasing it later.", + "item.feruchemy.iron_ring_metalmind": "Iron Ring Metalmind", + "item.feruchemy.iron_ring_metalmind.tooltip": "Stores Weight. Less weight slows descent. A Skimmer Ferring using this will decrease the pull of gravity on them in exchange for increasing it later.", + "item.feruchemy.nicrosil_bracelet_metalmind": "Nicrosil Bracelet Metalmind", + "item.feruchemy.nicrosil_bracelet_metalmind.tooltip": "Stores Investiture. Little is known about Soulbearer Ferrings. (Not yet implemented)", + "item.feruchemy.nicrosil_necklace_metalmind": "Nicrosil Necklace Metalmind", + "item.feruchemy.nicrosil_necklace_metalmind.tooltip": "Stores Investiture. Little is known about Soulbearer Ferrings. (Not yet implemented)", + "item.feruchemy.nicrosil_ring_metalmind": "Nicrosil Ring Metalmind", + "item.feruchemy.nicrosil_ring_metalmind.tooltip": "Stores Investiture. Little is known about Soulbearer Ferrings. (Not yet implemented)", + "item.feruchemy.pewter_bracelet_metalmind": "Pewter Bracelet Metalmind", + "item.feruchemy.pewter_bracelet_metalmind.tooltip": "Stores Strength. A Brute Ferring using this will lessen the size of his muscles to increase them later.", + "item.feruchemy.pewter_necklace_metalmind": "Pewter Necklace Metalmind", + "item.feruchemy.pewter_necklace_metalmind.tooltip": "Stores Strength. A Brute Ferring using this will lessen the size of his muscles to increase them later.", + "item.feruchemy.pewter_ring_metalmind": "Pewter Ring Metalmind", + "item.feruchemy.pewter_ring_metalmind.tooltip": "Stores Strength. A Brute Ferring using this will lessen the size of his muscles to increase them later.", + "item.feruchemy.steel_bracelet_metalmind": "Steel Bracelet Metalmind", + "item.feruchemy.steel_bracelet_metalmind.tooltip": "Stores Physical Speed. A Steelrunner Ferring using this will be physically slower now in exchange for being faster later.", + "item.feruchemy.steel_necklace_metalmind": "Steel Necklace Metalmind", + "item.feruchemy.steel_necklace_metalmind.tooltip": "Stores Physical Speed. A Steelrunner Ferring using this will be physically slower now in exchange for being faster later.", + "item.feruchemy.steel_ring_metalmind": "Steel Ring Metalmind", + "item.feruchemy.steel_ring_metalmind.tooltip": "Stores Physical Speed. A Steelrunner Ferring using this will be physically slower now in exchange for being faster later.", + "item.feruchemy.tin_bracelet_metalmind": "Tin Bracelet Metalmind", + "item.feruchemy.tin_bracelet_metalmind.tooltip": "Stores Eyesight senses. Tapping will zoom in.", + "item.feruchemy.tin_necklace_metalmind": "Tin Necklace Metalmind", + "item.feruchemy.tin_necklace_metalmind.tooltip": "Stores Eyesight senses. Tapping will zoom in.", + "item.feruchemy.tin_ring_metalmind": "Tin Ring Metalmind", + "item.feruchemy.tin_ring_metalmind.tooltip": "Stores Eyesight senses. Tapping will zoom in.", + "item.feruchemy.zinc_bracelet_metalmind": "Zinc Bracelet Metalmind", + "item.feruchemy.zinc_bracelet_metalmind.tooltip": "Stores Mental Speed. A Sparker Ferring storing zinc will gain experience very slowly in exchange for gaining experience faster later.", + "item.feruchemy.zinc_necklace_metalmind": "Zinc Necklace Metalmind", + "item.feruchemy.zinc_necklace_metalmind.tooltip": "Stores Mental Speed. A Sparker Ferring storing zinc will gain experience very slowly in exchange for gaining experience faster later.", + "item.feruchemy.zinc_ring_metalmind": "Zinc Ring Metalmind", + "item.feruchemy.zinc_ring_metalmind.tooltip": "Stores Mental Speed. A Sparker Ferring storing zinc will gain experience very slowly in exchange for gaining experience faster later.", + "manifestation.feruchemy.aluminum": "Feruchemical Aluminum", + "manifestation.feruchemy.aluminum.description": "Users can tap aluminum", + "manifestation.feruchemy.atium": "Feruchemical Atium", + "manifestation.feruchemy.atium.description": "Users can tap atium", + "manifestation.feruchemy.bendalloy": "Feruchemical Bendalloy", + "manifestation.feruchemy.bendalloy.description": "Users can tap bendalloy", + "manifestation.feruchemy.brass": "Feruchemical Brass", + "manifestation.feruchemy.brass.description": "Users can tap brass", + "manifestation.feruchemy.bronze": "Feruchemical Bronze", + "manifestation.feruchemy.bronze.description": "Users can tap bronze", + "manifestation.feruchemy.cadmium": "Feruchemical Cadmium", + "manifestation.feruchemy.cadmium.description": "Users can tap cadmium", + "manifestation.feruchemy.chromium": "Feruchemical Chromium", + "manifestation.feruchemy.chromium.description": "Users can tap chromium", + "manifestation.feruchemy.copper": "Feruchemical Copper", + "manifestation.feruchemy.copper.description": "Users can tap copper", + "manifestation.feruchemy.duralumin": "Feruchemical Duralumin", + "manifestation.feruchemy.duralumin.description": "Users can tap duralumin", + "manifestation.feruchemy.electrum": "Feruchemical Electrum", + "manifestation.feruchemy.electrum.description": "Users can tap electrum", + "manifestation.feruchemy.gold": "Feruchemical Gold", + "manifestation.feruchemy.gold.description": "Users can tap gold", + "manifestation.feruchemy.iron": "Feruchemical Iron", + "manifestation.feruchemy.iron.description": "Users can tap iron", + "manifestation.feruchemy.nicrosil": "Feruchemical Nicrosil", + "manifestation.feruchemy.nicrosil.description": "Users can tap nicrosil", + "manifestation.feruchemy.pewter": "Feruchemical Pewter", + "manifestation.feruchemy.pewter.description": "Users can tap pewter", + "manifestation.feruchemy.steel": "Feruchemical Steel", + "manifestation.feruchemy.steel.description": "Users can tap steel", + "manifestation.feruchemy.tin": "Feruchemical Tin", + "manifestation.feruchemy.tin.description": "Users can tap tin", + "manifestation.feruchemy.zinc": "Feruchemical Zinc", + "manifestation.feruchemy.zinc.description": "Users can tap zinc", + "tabs.feruchemy.items": "Feruchemy", + "tooltip.cosmere.attribute.chromium": "%s%s Luck", + "tooltip.cosmere.attribute.copper": "%s%s%% XP", + "tooltip.cosmere.attribute.duralumin": "", + "tooltip.cosmere.attribute.iron": "%s%s Attack Damage", + "tooltip.cosmere.attribute.nicrosil": "", + "tooltip.cosmere.attribute.tin": "%s%s%% Better Night Vision", + "tooltip.cosmere.attribute.zinc": "%s%s%% Emotional Fortitude" +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/assets/feruchemy/models/item/aluminum_bracelet_metalmind.json b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/aluminum_bracelet_metalmind.json new file mode 100644 index 000000000..39dc5481f --- /dev/null +++ b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/aluminum_bracelet_metalmind.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "feruchemy:item/aluminum_bracelet" + } +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/assets/feruchemy/models/item/aluminum_necklace_metalmind.json b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/aluminum_necklace_metalmind.json new file mode 100644 index 000000000..95d1c67ab --- /dev/null +++ b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/aluminum_necklace_metalmind.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "feruchemy:item/aluminum_necklace" + } +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/assets/feruchemy/models/item/aluminum_ring_metalmind.json b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/aluminum_ring_metalmind.json new file mode 100644 index 000000000..4ee700b48 --- /dev/null +++ b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/aluminum_ring_metalmind.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "feruchemy:item/aluminum_ring" + } +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/assets/feruchemy/models/item/atium_bracelet_metalmind.json b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/atium_bracelet_metalmind.json new file mode 100644 index 000000000..600dbfe6f --- /dev/null +++ b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/atium_bracelet_metalmind.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "feruchemy:item/atium_bracelet" + } +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/assets/feruchemy/models/item/atium_necklace_metalmind.json b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/atium_necklace_metalmind.json new file mode 100644 index 000000000..bfa6fd665 --- /dev/null +++ b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/atium_necklace_metalmind.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "feruchemy:item/atium_necklace" + } +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/assets/feruchemy/models/item/atium_ring_metalmind.json b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/atium_ring_metalmind.json new file mode 100644 index 000000000..b54da3087 --- /dev/null +++ b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/atium_ring_metalmind.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "feruchemy:item/atium_ring" + } +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/assets/feruchemy/models/item/bands_of_mourning.json b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/bands_of_mourning.json new file mode 100644 index 000000000..f03690a98 --- /dev/null +++ b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/bands_of_mourning.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "feruchemy:item/bands_of_mourning" + } +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/assets/feruchemy/models/item/bendalloy_bracelet_metalmind.json b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/bendalloy_bracelet_metalmind.json new file mode 100644 index 000000000..f56ea47f5 --- /dev/null +++ b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/bendalloy_bracelet_metalmind.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "feruchemy:item/bendalloy_bracelet" + } +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/assets/feruchemy/models/item/bendalloy_necklace_metalmind.json b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/bendalloy_necklace_metalmind.json new file mode 100644 index 000000000..90441c4a5 --- /dev/null +++ b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/bendalloy_necklace_metalmind.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "feruchemy:item/bendalloy_necklace" + } +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/assets/feruchemy/models/item/bendalloy_ring_metalmind.json b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/bendalloy_ring_metalmind.json new file mode 100644 index 000000000..dfeccc94f --- /dev/null +++ b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/bendalloy_ring_metalmind.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "feruchemy:item/bendalloy_ring" + } +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/assets/feruchemy/models/item/brass_bracelet_metalmind.json b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/brass_bracelet_metalmind.json new file mode 100644 index 000000000..a89f60bf3 --- /dev/null +++ b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/brass_bracelet_metalmind.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "feruchemy:item/brass_bracelet" + } +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/assets/feruchemy/models/item/brass_necklace_metalmind.json b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/brass_necklace_metalmind.json new file mode 100644 index 000000000..c8b28e4c6 --- /dev/null +++ b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/brass_necklace_metalmind.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "feruchemy:item/brass_necklace" + } +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/assets/feruchemy/models/item/brass_ring_metalmind.json b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/brass_ring_metalmind.json new file mode 100644 index 000000000..e25215165 --- /dev/null +++ b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/brass_ring_metalmind.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "feruchemy:item/brass_ring" + } +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/assets/feruchemy/models/item/bronze_bracelet_metalmind.json b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/bronze_bracelet_metalmind.json new file mode 100644 index 000000000..1ef2b9ec9 --- /dev/null +++ b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/bronze_bracelet_metalmind.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "feruchemy:item/bronze_bracelet" + } +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/assets/feruchemy/models/item/bronze_necklace_metalmind.json b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/bronze_necklace_metalmind.json new file mode 100644 index 000000000..e8fa37d6e --- /dev/null +++ b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/bronze_necklace_metalmind.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "feruchemy:item/bronze_necklace" + } +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/assets/feruchemy/models/item/bronze_ring_metalmind.json b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/bronze_ring_metalmind.json new file mode 100644 index 000000000..7022bd289 --- /dev/null +++ b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/bronze_ring_metalmind.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "feruchemy:item/bronze_ring" + } +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/assets/feruchemy/models/item/cadmium_bracelet_metalmind.json b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/cadmium_bracelet_metalmind.json new file mode 100644 index 000000000..ca552c035 --- /dev/null +++ b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/cadmium_bracelet_metalmind.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "feruchemy:item/cadmium_bracelet" + } +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/assets/feruchemy/models/item/cadmium_necklace_metalmind.json b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/cadmium_necklace_metalmind.json new file mode 100644 index 000000000..a59f013cf --- /dev/null +++ b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/cadmium_necklace_metalmind.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "feruchemy:item/cadmium_necklace" + } +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/assets/feruchemy/models/item/cadmium_ring_metalmind.json b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/cadmium_ring_metalmind.json new file mode 100644 index 000000000..09448f3db --- /dev/null +++ b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/cadmium_ring_metalmind.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "feruchemy:item/cadmium_ring" + } +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/assets/feruchemy/models/item/chromium_bracelet_metalmind.json b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/chromium_bracelet_metalmind.json new file mode 100644 index 000000000..68e79d4d3 --- /dev/null +++ b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/chromium_bracelet_metalmind.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "feruchemy:item/chromium_bracelet" + } +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/assets/feruchemy/models/item/chromium_necklace_metalmind.json b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/chromium_necklace_metalmind.json new file mode 100644 index 000000000..68e317d74 --- /dev/null +++ b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/chromium_necklace_metalmind.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "feruchemy:item/chromium_necklace" + } +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/assets/feruchemy/models/item/chromium_ring_metalmind.json b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/chromium_ring_metalmind.json new file mode 100644 index 000000000..2f1fd52c0 --- /dev/null +++ b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/chromium_ring_metalmind.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "feruchemy:item/chromium_ring" + } +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/assets/feruchemy/models/item/copper_bracelet_metalmind.json b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/copper_bracelet_metalmind.json new file mode 100644 index 000000000..329f7d789 --- /dev/null +++ b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/copper_bracelet_metalmind.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "feruchemy:item/copper_bracelet" + } +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/assets/feruchemy/models/item/copper_necklace_metalmind.json b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/copper_necklace_metalmind.json new file mode 100644 index 000000000..4114b897d --- /dev/null +++ b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/copper_necklace_metalmind.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "feruchemy:item/copper_necklace" + } +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/assets/feruchemy/models/item/copper_ring_metalmind.json b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/copper_ring_metalmind.json new file mode 100644 index 000000000..87d060ae8 --- /dev/null +++ b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/copper_ring_metalmind.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "feruchemy:item/copper_ring" + } +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/assets/feruchemy/models/item/duralumin_bracelet_metalmind.json b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/duralumin_bracelet_metalmind.json new file mode 100644 index 000000000..9ec392a0d --- /dev/null +++ b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/duralumin_bracelet_metalmind.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "feruchemy:item/duralumin_bracelet" + } +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/assets/feruchemy/models/item/duralumin_necklace_metalmind.json b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/duralumin_necklace_metalmind.json new file mode 100644 index 000000000..2d3fc9db9 --- /dev/null +++ b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/duralumin_necklace_metalmind.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "feruchemy:item/duralumin_necklace" + } +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/assets/feruchemy/models/item/duralumin_ring_metalmind.json b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/duralumin_ring_metalmind.json new file mode 100644 index 000000000..e5cdaf180 --- /dev/null +++ b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/duralumin_ring_metalmind.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "feruchemy:item/duralumin_ring" + } +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/assets/feruchemy/models/item/electrum_bracelet_metalmind.json b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/electrum_bracelet_metalmind.json new file mode 100644 index 000000000..6eba7c5cd --- /dev/null +++ b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/electrum_bracelet_metalmind.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "feruchemy:item/electrum_bracelet" + } +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/assets/feruchemy/models/item/electrum_necklace_metalmind.json b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/electrum_necklace_metalmind.json new file mode 100644 index 000000000..ea61c3f40 --- /dev/null +++ b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/electrum_necklace_metalmind.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "feruchemy:item/electrum_necklace" + } +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/assets/feruchemy/models/item/electrum_ring_metalmind.json b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/electrum_ring_metalmind.json new file mode 100644 index 000000000..7c67fb50f --- /dev/null +++ b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/electrum_ring_metalmind.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "feruchemy:item/electrum_ring" + } +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/assets/feruchemy/models/item/gold_bracelet_metalmind.json b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/gold_bracelet_metalmind.json new file mode 100644 index 000000000..a3e968bfc --- /dev/null +++ b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/gold_bracelet_metalmind.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "feruchemy:item/gold_bracelet" + } +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/assets/feruchemy/models/item/gold_necklace_metalmind.json b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/gold_necklace_metalmind.json new file mode 100644 index 000000000..ee0319337 --- /dev/null +++ b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/gold_necklace_metalmind.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "feruchemy:item/gold_necklace" + } +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/assets/feruchemy/models/item/gold_ring_metalmind.json b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/gold_ring_metalmind.json new file mode 100644 index 000000000..652800d71 --- /dev/null +++ b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/gold_ring_metalmind.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "feruchemy:item/gold_ring" + } +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/assets/feruchemy/models/item/iron_bracelet_metalmind.json b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/iron_bracelet_metalmind.json new file mode 100644 index 000000000..a31ee7beb --- /dev/null +++ b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/iron_bracelet_metalmind.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "feruchemy:item/iron_bracelet" + } +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/assets/feruchemy/models/item/iron_necklace_metalmind.json b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/iron_necklace_metalmind.json new file mode 100644 index 000000000..4d487538f --- /dev/null +++ b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/iron_necklace_metalmind.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "feruchemy:item/iron_necklace" + } +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/assets/feruchemy/models/item/iron_ring_metalmind.json b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/iron_ring_metalmind.json new file mode 100644 index 000000000..f3cb21248 --- /dev/null +++ b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/iron_ring_metalmind.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "feruchemy:item/iron_ring" + } +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/assets/feruchemy/models/item/nicrosil_bracelet_metalmind.json b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/nicrosil_bracelet_metalmind.json new file mode 100644 index 000000000..a9d0b2a5f --- /dev/null +++ b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/nicrosil_bracelet_metalmind.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "feruchemy:item/nicrosil_bracelet" + } +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/assets/feruchemy/models/item/nicrosil_necklace_metalmind.json b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/nicrosil_necklace_metalmind.json new file mode 100644 index 000000000..1b516be63 --- /dev/null +++ b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/nicrosil_necklace_metalmind.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "feruchemy:item/nicrosil_necklace" + } +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/assets/feruchemy/models/item/nicrosil_ring_metalmind.json b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/nicrosil_ring_metalmind.json new file mode 100644 index 000000000..75c6604e9 --- /dev/null +++ b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/nicrosil_ring_metalmind.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "feruchemy:item/nicrosil_ring" + } +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/assets/feruchemy/models/item/pewter_bracelet_metalmind.json b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/pewter_bracelet_metalmind.json new file mode 100644 index 000000000..bd4428bab --- /dev/null +++ b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/pewter_bracelet_metalmind.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "feruchemy:item/pewter_bracelet" + } +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/assets/feruchemy/models/item/pewter_necklace_metalmind.json b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/pewter_necklace_metalmind.json new file mode 100644 index 000000000..00dd718c3 --- /dev/null +++ b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/pewter_necklace_metalmind.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "feruchemy:item/pewter_necklace" + } +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/assets/feruchemy/models/item/pewter_ring_metalmind.json b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/pewter_ring_metalmind.json new file mode 100644 index 000000000..b9d3f2822 --- /dev/null +++ b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/pewter_ring_metalmind.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "feruchemy:item/pewter_ring" + } +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/assets/feruchemy/models/item/steel_bracelet_metalmind.json b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/steel_bracelet_metalmind.json new file mode 100644 index 000000000..7d5607d67 --- /dev/null +++ b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/steel_bracelet_metalmind.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "feruchemy:item/steel_bracelet" + } +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/assets/feruchemy/models/item/steel_necklace_metalmind.json b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/steel_necklace_metalmind.json new file mode 100644 index 000000000..b92b80772 --- /dev/null +++ b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/steel_necklace_metalmind.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "feruchemy:item/steel_necklace" + } +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/assets/feruchemy/models/item/steel_ring_metalmind.json b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/steel_ring_metalmind.json new file mode 100644 index 000000000..62814ec19 --- /dev/null +++ b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/steel_ring_metalmind.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "feruchemy:item/steel_ring" + } +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/assets/feruchemy/models/item/tin_bracelet_metalmind.json b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/tin_bracelet_metalmind.json new file mode 100644 index 000000000..d0510724a --- /dev/null +++ b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/tin_bracelet_metalmind.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "feruchemy:item/tin_bracelet" + } +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/assets/feruchemy/models/item/tin_necklace_metalmind.json b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/tin_necklace_metalmind.json new file mode 100644 index 000000000..53d0286ff --- /dev/null +++ b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/tin_necklace_metalmind.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "feruchemy:item/tin_necklace" + } +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/assets/feruchemy/models/item/tin_ring_metalmind.json b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/tin_ring_metalmind.json new file mode 100644 index 000000000..7306d7737 --- /dev/null +++ b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/tin_ring_metalmind.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "feruchemy:item/tin_ring" + } +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/assets/feruchemy/models/item/zinc_bracelet_metalmind.json b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/zinc_bracelet_metalmind.json new file mode 100644 index 000000000..a8d2e6839 --- /dev/null +++ b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/zinc_bracelet_metalmind.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "feruchemy:item/zinc_bracelet" + } +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/assets/feruchemy/models/item/zinc_necklace_metalmind.json b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/zinc_necklace_metalmind.json new file mode 100644 index 000000000..aa994ab03 --- /dev/null +++ b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/zinc_necklace_metalmind.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "feruchemy:item/zinc_necklace" + } +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/assets/feruchemy/models/item/zinc_ring_metalmind.json b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/zinc_ring_metalmind.json new file mode 100644 index 000000000..e469a0eeb --- /dev/null +++ b/src/datagen/generated/feruchemy/assets/feruchemy/models/item/zinc_ring_metalmind.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "feruchemy:item/zinc_ring" + } +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/curios/tags/items/bracelet.json b/src/datagen/generated/feruchemy/data/curios/tags/items/bracelet.json new file mode 100644 index 000000000..d283d83fa --- /dev/null +++ b/src/datagen/generated/feruchemy/data/curios/tags/items/bracelet.json @@ -0,0 +1,22 @@ +{ + "values": [ + "feruchemy:bands_of_mourning", + "feruchemy:iron_bracelet_metalmind", + "feruchemy:steel_bracelet_metalmind", + "feruchemy:tin_bracelet_metalmind", + "feruchemy:pewter_bracelet_metalmind", + "feruchemy:zinc_bracelet_metalmind", + "feruchemy:brass_bracelet_metalmind", + "feruchemy:copper_bracelet_metalmind", + "feruchemy:bronze_bracelet_metalmind", + "feruchemy:aluminum_bracelet_metalmind", + "feruchemy:duralumin_bracelet_metalmind", + "feruchemy:chromium_bracelet_metalmind", + "feruchemy:nicrosil_bracelet_metalmind", + "feruchemy:cadmium_bracelet_metalmind", + "feruchemy:bendalloy_bracelet_metalmind", + "feruchemy:gold_bracelet_metalmind", + "feruchemy:electrum_bracelet_metalmind", + "feruchemy:atium_bracelet_metalmind" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/curios/tags/items/necklace.json b/src/datagen/generated/feruchemy/data/curios/tags/items/necklace.json new file mode 100644 index 000000000..81b4682ca --- /dev/null +++ b/src/datagen/generated/feruchemy/data/curios/tags/items/necklace.json @@ -0,0 +1,21 @@ +{ + "values": [ + "feruchemy:iron_necklace_metalmind", + "feruchemy:steel_necklace_metalmind", + "feruchemy:tin_necklace_metalmind", + "feruchemy:pewter_necklace_metalmind", + "feruchemy:zinc_necklace_metalmind", + "feruchemy:brass_necklace_metalmind", + "feruchemy:copper_necklace_metalmind", + "feruchemy:bronze_necklace_metalmind", + "feruchemy:aluminum_necklace_metalmind", + "feruchemy:duralumin_necklace_metalmind", + "feruchemy:chromium_necklace_metalmind", + "feruchemy:nicrosil_necklace_metalmind", + "feruchemy:cadmium_necklace_metalmind", + "feruchemy:bendalloy_necklace_metalmind", + "feruchemy:gold_necklace_metalmind", + "feruchemy:electrum_necklace_metalmind", + "feruchemy:atium_necklace_metalmind" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/curios/tags/items/ring.json b/src/datagen/generated/feruchemy/data/curios/tags/items/ring.json new file mode 100644 index 000000000..5aef2698f --- /dev/null +++ b/src/datagen/generated/feruchemy/data/curios/tags/items/ring.json @@ -0,0 +1,21 @@ +{ + "values": [ + "feruchemy:iron_ring_metalmind", + "feruchemy:steel_ring_metalmind", + "feruchemy:tin_ring_metalmind", + "feruchemy:pewter_ring_metalmind", + "feruchemy:zinc_ring_metalmind", + "feruchemy:brass_ring_metalmind", + "feruchemy:copper_ring_metalmind", + "feruchemy:bronze_ring_metalmind", + "feruchemy:aluminum_ring_metalmind", + "feruchemy:duralumin_ring_metalmind", + "feruchemy:chromium_ring_metalmind", + "feruchemy:nicrosil_ring_metalmind", + "feruchemy:cadmium_ring_metalmind", + "feruchemy:bendalloy_ring_metalmind", + "feruchemy:gold_ring_metalmind", + "feruchemy:electrum_ring_metalmind", + "feruchemy:atium_ring_metalmind" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/aluminum_bracelet_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/aluminum_bracelet_metalmind.json new file mode 100644 index 000000000..e6ae6f8c9 --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/aluminum_bracelet_metalmind.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/aluminum" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "feruchemy:aluminum_bracelet_metalmind" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "feruchemy:aluminum_bracelet_metalmind" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/aluminum_necklace_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/aluminum_necklace_metalmind.json new file mode 100644 index 000000000..7b51c6700 --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/aluminum_necklace_metalmind.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/aluminum" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "feruchemy:aluminum_necklace_metalmind" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "feruchemy:aluminum_necklace_metalmind" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/aluminum_ring_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/aluminum_ring_metalmind.json new file mode 100644 index 000000000..94bbe0272 --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/aluminum_ring_metalmind.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/aluminum" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "feruchemy:aluminum_ring_metalmind" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "feruchemy:aluminum_ring_metalmind" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/atium_bracelet_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/atium_bracelet_metalmind.json new file mode 100644 index 000000000..260055feb --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/atium_bracelet_metalmind.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/atium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "feruchemy:atium_bracelet_metalmind" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "feruchemy:atium_bracelet_metalmind" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/atium_necklace_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/atium_necklace_metalmind.json new file mode 100644 index 000000000..daf4627f0 --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/atium_necklace_metalmind.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/atium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "feruchemy:atium_necklace_metalmind" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "feruchemy:atium_necklace_metalmind" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/atium_ring_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/atium_ring_metalmind.json new file mode 100644 index 000000000..f54db6710 --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/atium_ring_metalmind.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/atium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "feruchemy:atium_ring_metalmind" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "feruchemy:atium_ring_metalmind" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/bendalloy_bracelet_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/bendalloy_bracelet_metalmind.json new file mode 100644 index 000000000..37be9e7a5 --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/bendalloy_bracelet_metalmind.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/bendalloy" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "feruchemy:bendalloy_bracelet_metalmind" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "feruchemy:bendalloy_bracelet_metalmind" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/bendalloy_necklace_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/bendalloy_necklace_metalmind.json new file mode 100644 index 000000000..109acdd7e --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/bendalloy_necklace_metalmind.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/bendalloy" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "feruchemy:bendalloy_necklace_metalmind" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "feruchemy:bendalloy_necklace_metalmind" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/bendalloy_ring_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/bendalloy_ring_metalmind.json new file mode 100644 index 000000000..16b639948 --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/bendalloy_ring_metalmind.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/bendalloy" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "feruchemy:bendalloy_ring_metalmind" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "feruchemy:bendalloy_ring_metalmind" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/brass_bracelet_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/brass_bracelet_metalmind.json new file mode 100644 index 000000000..5bfe8da7f --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/brass_bracelet_metalmind.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/brass" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "feruchemy:brass_bracelet_metalmind" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "feruchemy:brass_bracelet_metalmind" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/brass_necklace_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/brass_necklace_metalmind.json new file mode 100644 index 000000000..7d998ab07 --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/brass_necklace_metalmind.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/brass" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "feruchemy:brass_necklace_metalmind" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "feruchemy:brass_necklace_metalmind" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/brass_ring_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/brass_ring_metalmind.json new file mode 100644 index 000000000..f1a82ed67 --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/brass_ring_metalmind.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/brass" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "feruchemy:brass_ring_metalmind" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "feruchemy:brass_ring_metalmind" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/bronze_bracelet_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/bronze_bracelet_metalmind.json new file mode 100644 index 000000000..a290151b5 --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/bronze_bracelet_metalmind.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/bronze" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "feruchemy:bronze_bracelet_metalmind" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "feruchemy:bronze_bracelet_metalmind" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/bronze_necklace_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/bronze_necklace_metalmind.json new file mode 100644 index 000000000..b93bdc5ef --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/bronze_necklace_metalmind.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/bronze" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "feruchemy:bronze_necklace_metalmind" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "feruchemy:bronze_necklace_metalmind" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/bronze_ring_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/bronze_ring_metalmind.json new file mode 100644 index 000000000..3e9393542 --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/bronze_ring_metalmind.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/bronze" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "feruchemy:bronze_ring_metalmind" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "feruchemy:bronze_ring_metalmind" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/cadmium_bracelet_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/cadmium_bracelet_metalmind.json new file mode 100644 index 000000000..464b2186f --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/cadmium_bracelet_metalmind.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/cadmium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "feruchemy:cadmium_bracelet_metalmind" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "feruchemy:cadmium_bracelet_metalmind" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/cadmium_necklace_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/cadmium_necklace_metalmind.json new file mode 100644 index 000000000..befae2bdc --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/cadmium_necklace_metalmind.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/cadmium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "feruchemy:cadmium_necklace_metalmind" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "feruchemy:cadmium_necklace_metalmind" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/cadmium_ring_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/cadmium_ring_metalmind.json new file mode 100644 index 000000000..934ea976d --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/cadmium_ring_metalmind.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/cadmium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "feruchemy:cadmium_ring_metalmind" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "feruchemy:cadmium_ring_metalmind" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/chromium_bracelet_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/chromium_bracelet_metalmind.json new file mode 100644 index 000000000..ac2e5d2d0 --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/chromium_bracelet_metalmind.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/chromium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "feruchemy:chromium_bracelet_metalmind" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "feruchemy:chromium_bracelet_metalmind" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/chromium_necklace_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/chromium_necklace_metalmind.json new file mode 100644 index 000000000..3068cf45a --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/chromium_necklace_metalmind.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/chromium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "feruchemy:chromium_necklace_metalmind" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "feruchemy:chromium_necklace_metalmind" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/chromium_ring_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/chromium_ring_metalmind.json new file mode 100644 index 000000000..65e3a3306 --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/chromium_ring_metalmind.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/chromium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "feruchemy:chromium_ring_metalmind" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "feruchemy:chromium_ring_metalmind" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/copper_bracelet_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/copper_bracelet_metalmind.json new file mode 100644 index 000000000..da222b91e --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/copper_bracelet_metalmind.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/copper" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "feruchemy:copper_bracelet_metalmind" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "feruchemy:copper_bracelet_metalmind" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/copper_necklace_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/copper_necklace_metalmind.json new file mode 100644 index 000000000..8f1922429 --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/copper_necklace_metalmind.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/copper" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "feruchemy:copper_necklace_metalmind" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "feruchemy:copper_necklace_metalmind" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/copper_ring_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/copper_ring_metalmind.json new file mode 100644 index 000000000..87053eb07 --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/copper_ring_metalmind.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/copper" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "feruchemy:copper_ring_metalmind" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "feruchemy:copper_ring_metalmind" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/duralumin_bracelet_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/duralumin_bracelet_metalmind.json new file mode 100644 index 000000000..6487121da --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/duralumin_bracelet_metalmind.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/duralumin" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "feruchemy:duralumin_bracelet_metalmind" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "feruchemy:duralumin_bracelet_metalmind" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/duralumin_necklace_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/duralumin_necklace_metalmind.json new file mode 100644 index 000000000..416484ca9 --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/duralumin_necklace_metalmind.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/duralumin" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "feruchemy:duralumin_necklace_metalmind" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "feruchemy:duralumin_necklace_metalmind" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/duralumin_ring_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/duralumin_ring_metalmind.json new file mode 100644 index 000000000..8dacb8e56 --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/duralumin_ring_metalmind.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/duralumin" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "feruchemy:duralumin_ring_metalmind" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "feruchemy:duralumin_ring_metalmind" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/electrum_bracelet_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/electrum_bracelet_metalmind.json new file mode 100644 index 000000000..0c24c4a18 --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/electrum_bracelet_metalmind.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/electrum" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "feruchemy:electrum_bracelet_metalmind" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "feruchemy:electrum_bracelet_metalmind" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/electrum_necklace_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/electrum_necklace_metalmind.json new file mode 100644 index 000000000..0e2c7adf9 --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/electrum_necklace_metalmind.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/electrum" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "feruchemy:electrum_necklace_metalmind" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "feruchemy:electrum_necklace_metalmind" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/electrum_ring_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/electrum_ring_metalmind.json new file mode 100644 index 000000000..7189e1bd6 --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/electrum_ring_metalmind.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/electrum" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "feruchemy:electrum_ring_metalmind" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "feruchemy:electrum_ring_metalmind" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/gold_bracelet_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/gold_bracelet_metalmind.json new file mode 100644 index 000000000..a6ed5450c --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/gold_bracelet_metalmind.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/gold" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "feruchemy:gold_bracelet_metalmind" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "feruchemy:gold_bracelet_metalmind" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/gold_necklace_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/gold_necklace_metalmind.json new file mode 100644 index 000000000..c9113b099 --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/gold_necklace_metalmind.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/gold" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "feruchemy:gold_necklace_metalmind" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "feruchemy:gold_necklace_metalmind" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/gold_ring_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/gold_ring_metalmind.json new file mode 100644 index 000000000..2b95d3162 --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/gold_ring_metalmind.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/gold" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "feruchemy:gold_ring_metalmind" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "feruchemy:gold_ring_metalmind" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/iron_bracelet_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/iron_bracelet_metalmind.json new file mode 100644 index 000000000..60c00eca4 --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/iron_bracelet_metalmind.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/iron" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "feruchemy:iron_bracelet_metalmind" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "feruchemy:iron_bracelet_metalmind" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/iron_necklace_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/iron_necklace_metalmind.json new file mode 100644 index 000000000..7b52ea0d6 --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/iron_necklace_metalmind.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/iron" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "feruchemy:iron_necklace_metalmind" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "feruchemy:iron_necklace_metalmind" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/iron_ring_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/iron_ring_metalmind.json new file mode 100644 index 000000000..6a2e11e72 --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/iron_ring_metalmind.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/iron" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "feruchemy:iron_ring_metalmind" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "feruchemy:iron_ring_metalmind" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/nicrosil_bracelet_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/nicrosil_bracelet_metalmind.json new file mode 100644 index 000000000..c4ff1673c --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/nicrosil_bracelet_metalmind.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/nicrosil" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "feruchemy:nicrosil_bracelet_metalmind" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "feruchemy:nicrosil_bracelet_metalmind" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/nicrosil_necklace_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/nicrosil_necklace_metalmind.json new file mode 100644 index 000000000..5dc91c9da --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/nicrosil_necklace_metalmind.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/nicrosil" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "feruchemy:nicrosil_necklace_metalmind" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "feruchemy:nicrosil_necklace_metalmind" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/nicrosil_ring_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/nicrosil_ring_metalmind.json new file mode 100644 index 000000000..45ce7e570 --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/nicrosil_ring_metalmind.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/nicrosil" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "feruchemy:nicrosil_ring_metalmind" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "feruchemy:nicrosil_ring_metalmind" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/pewter_bracelet_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/pewter_bracelet_metalmind.json new file mode 100644 index 000000000..456632494 --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/pewter_bracelet_metalmind.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/pewter" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "feruchemy:pewter_bracelet_metalmind" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "feruchemy:pewter_bracelet_metalmind" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/pewter_necklace_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/pewter_necklace_metalmind.json new file mode 100644 index 000000000..3faf963ed --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/pewter_necklace_metalmind.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/pewter" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "feruchemy:pewter_necklace_metalmind" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "feruchemy:pewter_necklace_metalmind" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/pewter_ring_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/pewter_ring_metalmind.json new file mode 100644 index 000000000..bc0c370cb --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/pewter_ring_metalmind.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/pewter" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "feruchemy:pewter_ring_metalmind" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "feruchemy:pewter_ring_metalmind" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/steel_bracelet_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/steel_bracelet_metalmind.json new file mode 100644 index 000000000..5df887db3 --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/steel_bracelet_metalmind.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/steel" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "feruchemy:steel_bracelet_metalmind" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "feruchemy:steel_bracelet_metalmind" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/steel_necklace_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/steel_necklace_metalmind.json new file mode 100644 index 000000000..70f9e17a8 --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/steel_necklace_metalmind.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/steel" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "feruchemy:steel_necklace_metalmind" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "feruchemy:steel_necklace_metalmind" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/steel_ring_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/steel_ring_metalmind.json new file mode 100644 index 000000000..65e281162 --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/steel_ring_metalmind.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/steel" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "feruchemy:steel_ring_metalmind" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "feruchemy:steel_ring_metalmind" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/tin_bracelet_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/tin_bracelet_metalmind.json new file mode 100644 index 000000000..ebec8dcc0 --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/tin_bracelet_metalmind.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/tin" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "feruchemy:tin_bracelet_metalmind" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "feruchemy:tin_bracelet_metalmind" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/tin_necklace_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/tin_necklace_metalmind.json new file mode 100644 index 000000000..d593a9471 --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/tin_necklace_metalmind.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/tin" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "feruchemy:tin_necklace_metalmind" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "feruchemy:tin_necklace_metalmind" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/tin_ring_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/tin_ring_metalmind.json new file mode 100644 index 000000000..bc392d048 --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/tin_ring_metalmind.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/tin" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "feruchemy:tin_ring_metalmind" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "feruchemy:tin_ring_metalmind" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/zinc_bracelet_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/zinc_bracelet_metalmind.json new file mode 100644 index 000000000..635469339 --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/zinc_bracelet_metalmind.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/zinc" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "feruchemy:zinc_bracelet_metalmind" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "feruchemy:zinc_bracelet_metalmind" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/zinc_necklace_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/zinc_necklace_metalmind.json new file mode 100644 index 000000000..a49c6d80b --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/zinc_necklace_metalmind.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/zinc" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "feruchemy:zinc_necklace_metalmind" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "feruchemy:zinc_necklace_metalmind" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/zinc_ring_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/zinc_ring_metalmind.json new file mode 100644 index 000000000..4c3b41a8f --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/advancements/recipes/tools/zinc_ring_metalmind.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/zinc" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "feruchemy:zinc_ring_metalmind" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "feruchemy:zinc_ring_metalmind" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/curios/entities/feruchemists.json b/src/datagen/generated/feruchemy/data/feruchemy/curios/entities/feruchemists.json new file mode 100644 index 000000000..61b319ff8 --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/curios/entities/feruchemists.json @@ -0,0 +1,11 @@ +{ + "entities": [ + "minecraft:armor_stand", + "minecraft:player" + ], + "slots": [ + "ring", + "necklace", + "bracelet" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/curios/slots/bracelet.json b/src/datagen/generated/feruchemy/data/feruchemy/curios/slots/bracelet.json new file mode 100644 index 000000000..dadf8b099 --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/curios/slots/bracelet.json @@ -0,0 +1,4 @@ +{ + "drop_rule": "ALWAYS_KEEP", + "size": 6 +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/curios/slots/necklace.json b/src/datagen/generated/feruchemy/data/feruchemy/curios/slots/necklace.json new file mode 100644 index 000000000..e59c13610 --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/curios/slots/necklace.json @@ -0,0 +1,4 @@ +{ + "drop_rule": "ALWAYS_KEEP", + "size": 2 +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/curios/slots/ring.json b/src/datagen/generated/feruchemy/data/feruchemy/curios/slots/ring.json new file mode 100644 index 000000000..910eebdb7 --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/curios/slots/ring.json @@ -0,0 +1,4 @@ +{ + "drop_rule": "ALWAYS_KEEP", + "size": 8 +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/recipes/aluminum_bracelet_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/recipes/aluminum_bracelet_metalmind.json new file mode 100644 index 000000000..fa2c0f52e --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/recipes/aluminum_bracelet_metalmind.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "bracelet", + "key": { + "X": { + "tag": "forge:ingots/aluminum" + } + }, + "pattern": [ + " X ", + "X X", + "X X" + ], + "result": { + "item": "feruchemy:aluminum_bracelet_metalmind" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/recipes/aluminum_necklace_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/recipes/aluminum_necklace_metalmind.json new file mode 100644 index 000000000..1c603cc53 --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/recipes/aluminum_necklace_metalmind.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "necklace", + "key": { + "X": { + "tag": "forge:ingots/aluminum" + } + }, + "pattern": [ + "XXX", + "X X", + " X " + ], + "result": { + "item": "feruchemy:aluminum_necklace_metalmind" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/recipes/aluminum_ring_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/recipes/aluminum_ring_metalmind.json new file mode 100644 index 000000000..92020ff46 --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/recipes/aluminum_ring_metalmind.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "ring", + "key": { + "X": { + "tag": "forge:ingots/aluminum" + } + }, + "pattern": [ + " X ", + "X X", + " X " + ], + "result": { + "item": "feruchemy:aluminum_ring_metalmind" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/recipes/atium_bracelet_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/recipes/atium_bracelet_metalmind.json new file mode 100644 index 000000000..90d5e5855 --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/recipes/atium_bracelet_metalmind.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "bracelet", + "key": { + "X": { + "tag": "forge:ingots/atium" + } + }, + "pattern": [ + " X ", + "X X", + "X X" + ], + "result": { + "item": "feruchemy:atium_bracelet_metalmind" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/recipes/atium_necklace_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/recipes/atium_necklace_metalmind.json new file mode 100644 index 000000000..799ed7f10 --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/recipes/atium_necklace_metalmind.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "necklace", + "key": { + "X": { + "tag": "forge:ingots/atium" + } + }, + "pattern": [ + "XXX", + "X X", + " X " + ], + "result": { + "item": "feruchemy:atium_necklace_metalmind" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/recipes/atium_ring_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/recipes/atium_ring_metalmind.json new file mode 100644 index 000000000..be6916f53 --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/recipes/atium_ring_metalmind.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "ring", + "key": { + "X": { + "tag": "forge:ingots/atium" + } + }, + "pattern": [ + " X ", + "X X", + " X " + ], + "result": { + "item": "feruchemy:atium_ring_metalmind" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/recipes/bendalloy_bracelet_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/recipes/bendalloy_bracelet_metalmind.json new file mode 100644 index 000000000..cafea2c52 --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/recipes/bendalloy_bracelet_metalmind.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "bracelet", + "key": { + "X": { + "tag": "forge:ingots/bendalloy" + } + }, + "pattern": [ + " X ", + "X X", + "X X" + ], + "result": { + "item": "feruchemy:bendalloy_bracelet_metalmind" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/recipes/bendalloy_necklace_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/recipes/bendalloy_necklace_metalmind.json new file mode 100644 index 000000000..033d079ca --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/recipes/bendalloy_necklace_metalmind.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "necklace", + "key": { + "X": { + "tag": "forge:ingots/bendalloy" + } + }, + "pattern": [ + "XXX", + "X X", + " X " + ], + "result": { + "item": "feruchemy:bendalloy_necklace_metalmind" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/recipes/bendalloy_ring_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/recipes/bendalloy_ring_metalmind.json new file mode 100644 index 000000000..17dbf9042 --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/recipes/bendalloy_ring_metalmind.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "ring", + "key": { + "X": { + "tag": "forge:ingots/bendalloy" + } + }, + "pattern": [ + " X ", + "X X", + " X " + ], + "result": { + "item": "feruchemy:bendalloy_ring_metalmind" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/recipes/brass_bracelet_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/recipes/brass_bracelet_metalmind.json new file mode 100644 index 000000000..2d8c9ff0d --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/recipes/brass_bracelet_metalmind.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "bracelet", + "key": { + "X": { + "tag": "forge:ingots/brass" + } + }, + "pattern": [ + " X ", + "X X", + "X X" + ], + "result": { + "item": "feruchemy:brass_bracelet_metalmind" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/recipes/brass_necklace_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/recipes/brass_necklace_metalmind.json new file mode 100644 index 000000000..8a2f89dbf --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/recipes/brass_necklace_metalmind.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "necklace", + "key": { + "X": { + "tag": "forge:ingots/brass" + } + }, + "pattern": [ + "XXX", + "X X", + " X " + ], + "result": { + "item": "feruchemy:brass_necklace_metalmind" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/recipes/brass_ring_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/recipes/brass_ring_metalmind.json new file mode 100644 index 000000000..fd92ea7c6 --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/recipes/brass_ring_metalmind.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "ring", + "key": { + "X": { + "tag": "forge:ingots/brass" + } + }, + "pattern": [ + " X ", + "X X", + " X " + ], + "result": { + "item": "feruchemy:brass_ring_metalmind" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/recipes/bronze_bracelet_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/recipes/bronze_bracelet_metalmind.json new file mode 100644 index 000000000..92dd0c0ff --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/recipes/bronze_bracelet_metalmind.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "bracelet", + "key": { + "X": { + "tag": "forge:ingots/bronze" + } + }, + "pattern": [ + " X ", + "X X", + "X X" + ], + "result": { + "item": "feruchemy:bronze_bracelet_metalmind" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/recipes/bronze_necklace_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/recipes/bronze_necklace_metalmind.json new file mode 100644 index 000000000..6209d21b8 --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/recipes/bronze_necklace_metalmind.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "necklace", + "key": { + "X": { + "tag": "forge:ingots/bronze" + } + }, + "pattern": [ + "XXX", + "X X", + " X " + ], + "result": { + "item": "feruchemy:bronze_necklace_metalmind" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/recipes/bronze_ring_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/recipes/bronze_ring_metalmind.json new file mode 100644 index 000000000..c88a8d215 --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/recipes/bronze_ring_metalmind.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "ring", + "key": { + "X": { + "tag": "forge:ingots/bronze" + } + }, + "pattern": [ + " X ", + "X X", + " X " + ], + "result": { + "item": "feruchemy:bronze_ring_metalmind" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/recipes/cadmium_bracelet_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/recipes/cadmium_bracelet_metalmind.json new file mode 100644 index 000000000..d7f0cdfa6 --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/recipes/cadmium_bracelet_metalmind.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "bracelet", + "key": { + "X": { + "tag": "forge:ingots/cadmium" + } + }, + "pattern": [ + " X ", + "X X", + "X X" + ], + "result": { + "item": "feruchemy:cadmium_bracelet_metalmind" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/recipes/cadmium_necklace_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/recipes/cadmium_necklace_metalmind.json new file mode 100644 index 000000000..d5e52cf18 --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/recipes/cadmium_necklace_metalmind.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "necklace", + "key": { + "X": { + "tag": "forge:ingots/cadmium" + } + }, + "pattern": [ + "XXX", + "X X", + " X " + ], + "result": { + "item": "feruchemy:cadmium_necklace_metalmind" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/recipes/cadmium_ring_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/recipes/cadmium_ring_metalmind.json new file mode 100644 index 000000000..7d79ba500 --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/recipes/cadmium_ring_metalmind.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "ring", + "key": { + "X": { + "tag": "forge:ingots/cadmium" + } + }, + "pattern": [ + " X ", + "X X", + " X " + ], + "result": { + "item": "feruchemy:cadmium_ring_metalmind" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/recipes/chromium_bracelet_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/recipes/chromium_bracelet_metalmind.json new file mode 100644 index 000000000..9ab5429e2 --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/recipes/chromium_bracelet_metalmind.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "bracelet", + "key": { + "X": { + "tag": "forge:ingots/chromium" + } + }, + "pattern": [ + " X ", + "X X", + "X X" + ], + "result": { + "item": "feruchemy:chromium_bracelet_metalmind" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/recipes/chromium_necklace_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/recipes/chromium_necklace_metalmind.json new file mode 100644 index 000000000..27455c559 --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/recipes/chromium_necklace_metalmind.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "necklace", + "key": { + "X": { + "tag": "forge:ingots/chromium" + } + }, + "pattern": [ + "XXX", + "X X", + " X " + ], + "result": { + "item": "feruchemy:chromium_necklace_metalmind" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/recipes/chromium_ring_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/recipes/chromium_ring_metalmind.json new file mode 100644 index 000000000..cb49ba4b7 --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/recipes/chromium_ring_metalmind.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "ring", + "key": { + "X": { + "tag": "forge:ingots/chromium" + } + }, + "pattern": [ + " X ", + "X X", + " X " + ], + "result": { + "item": "feruchemy:chromium_ring_metalmind" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/recipes/copper_bracelet_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/recipes/copper_bracelet_metalmind.json new file mode 100644 index 000000000..a9bd1331a --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/recipes/copper_bracelet_metalmind.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "bracelet", + "key": { + "X": { + "tag": "forge:ingots/copper" + } + }, + "pattern": [ + " X ", + "X X", + "X X" + ], + "result": { + "item": "feruchemy:copper_bracelet_metalmind" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/recipes/copper_necklace_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/recipes/copper_necklace_metalmind.json new file mode 100644 index 000000000..c35e8250e --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/recipes/copper_necklace_metalmind.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "necklace", + "key": { + "X": { + "tag": "forge:ingots/copper" + } + }, + "pattern": [ + "XXX", + "X X", + " X " + ], + "result": { + "item": "feruchemy:copper_necklace_metalmind" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/recipes/copper_ring_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/recipes/copper_ring_metalmind.json new file mode 100644 index 000000000..0ca327d40 --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/recipes/copper_ring_metalmind.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "ring", + "key": { + "X": { + "tag": "forge:ingots/copper" + } + }, + "pattern": [ + " X ", + "X X", + " X " + ], + "result": { + "item": "feruchemy:copper_ring_metalmind" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/recipes/duralumin_bracelet_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/recipes/duralumin_bracelet_metalmind.json new file mode 100644 index 000000000..88ee0c0ff --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/recipes/duralumin_bracelet_metalmind.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "bracelet", + "key": { + "X": { + "tag": "forge:ingots/duralumin" + } + }, + "pattern": [ + " X ", + "X X", + "X X" + ], + "result": { + "item": "feruchemy:duralumin_bracelet_metalmind" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/recipes/duralumin_necklace_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/recipes/duralumin_necklace_metalmind.json new file mode 100644 index 000000000..b06420481 --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/recipes/duralumin_necklace_metalmind.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "necklace", + "key": { + "X": { + "tag": "forge:ingots/duralumin" + } + }, + "pattern": [ + "XXX", + "X X", + " X " + ], + "result": { + "item": "feruchemy:duralumin_necklace_metalmind" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/recipes/duralumin_ring_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/recipes/duralumin_ring_metalmind.json new file mode 100644 index 000000000..1ea9be6ea --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/recipes/duralumin_ring_metalmind.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "ring", + "key": { + "X": { + "tag": "forge:ingots/duralumin" + } + }, + "pattern": [ + " X ", + "X X", + " X " + ], + "result": { + "item": "feruchemy:duralumin_ring_metalmind" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/recipes/electrum_bracelet_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/recipes/electrum_bracelet_metalmind.json new file mode 100644 index 000000000..b36b6f007 --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/recipes/electrum_bracelet_metalmind.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "bracelet", + "key": { + "X": { + "tag": "forge:ingots/electrum" + } + }, + "pattern": [ + " X ", + "X X", + "X X" + ], + "result": { + "item": "feruchemy:electrum_bracelet_metalmind" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/recipes/electrum_necklace_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/recipes/electrum_necklace_metalmind.json new file mode 100644 index 000000000..a8a894fa0 --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/recipes/electrum_necklace_metalmind.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "necklace", + "key": { + "X": { + "tag": "forge:ingots/electrum" + } + }, + "pattern": [ + "XXX", + "X X", + " X " + ], + "result": { + "item": "feruchemy:electrum_necklace_metalmind" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/recipes/electrum_ring_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/recipes/electrum_ring_metalmind.json new file mode 100644 index 000000000..f13b8f15e --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/recipes/electrum_ring_metalmind.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "ring", + "key": { + "X": { + "tag": "forge:ingots/electrum" + } + }, + "pattern": [ + " X ", + "X X", + " X " + ], + "result": { + "item": "feruchemy:electrum_ring_metalmind" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/recipes/gold_bracelet_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/recipes/gold_bracelet_metalmind.json new file mode 100644 index 000000000..781ca147b --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/recipes/gold_bracelet_metalmind.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "bracelet", + "key": { + "X": { + "tag": "forge:ingots/gold" + } + }, + "pattern": [ + " X ", + "X X", + "X X" + ], + "result": { + "item": "feruchemy:gold_bracelet_metalmind" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/recipes/gold_necklace_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/recipes/gold_necklace_metalmind.json new file mode 100644 index 000000000..a6521bf61 --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/recipes/gold_necklace_metalmind.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "necklace", + "key": { + "X": { + "tag": "forge:ingots/gold" + } + }, + "pattern": [ + "XXX", + "X X", + " X " + ], + "result": { + "item": "feruchemy:gold_necklace_metalmind" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/recipes/gold_ring_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/recipes/gold_ring_metalmind.json new file mode 100644 index 000000000..b69c529e2 --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/recipes/gold_ring_metalmind.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "ring", + "key": { + "X": { + "tag": "forge:ingots/gold" + } + }, + "pattern": [ + " X ", + "X X", + " X " + ], + "result": { + "item": "feruchemy:gold_ring_metalmind" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/recipes/iron_bracelet_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/recipes/iron_bracelet_metalmind.json new file mode 100644 index 000000000..87e7cb5d3 --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/recipes/iron_bracelet_metalmind.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "bracelet", + "key": { + "X": { + "tag": "forge:ingots/iron" + } + }, + "pattern": [ + " X ", + "X X", + "X X" + ], + "result": { + "item": "feruchemy:iron_bracelet_metalmind" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/recipes/iron_necklace_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/recipes/iron_necklace_metalmind.json new file mode 100644 index 000000000..7c9679e14 --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/recipes/iron_necklace_metalmind.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "necklace", + "key": { + "X": { + "tag": "forge:ingots/iron" + } + }, + "pattern": [ + "XXX", + "X X", + " X " + ], + "result": { + "item": "feruchemy:iron_necklace_metalmind" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/recipes/iron_ring_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/recipes/iron_ring_metalmind.json new file mode 100644 index 000000000..ebb2af1e7 --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/recipes/iron_ring_metalmind.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "ring", + "key": { + "X": { + "tag": "forge:ingots/iron" + } + }, + "pattern": [ + " X ", + "X X", + " X " + ], + "result": { + "item": "feruchemy:iron_ring_metalmind" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/recipes/nicrosil_bracelet_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/recipes/nicrosil_bracelet_metalmind.json new file mode 100644 index 000000000..8268d3c1b --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/recipes/nicrosil_bracelet_metalmind.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "bracelet", + "key": { + "X": { + "tag": "forge:ingots/nicrosil" + } + }, + "pattern": [ + " X ", + "X X", + "X X" + ], + "result": { + "item": "feruchemy:nicrosil_bracelet_metalmind" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/recipes/nicrosil_necklace_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/recipes/nicrosil_necklace_metalmind.json new file mode 100644 index 000000000..892287b47 --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/recipes/nicrosil_necklace_metalmind.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "necklace", + "key": { + "X": { + "tag": "forge:ingots/nicrosil" + } + }, + "pattern": [ + "XXX", + "X X", + " X " + ], + "result": { + "item": "feruchemy:nicrosil_necklace_metalmind" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/recipes/nicrosil_ring_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/recipes/nicrosil_ring_metalmind.json new file mode 100644 index 000000000..ca1c4ffff --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/recipes/nicrosil_ring_metalmind.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "ring", + "key": { + "X": { + "tag": "forge:ingots/nicrosil" + } + }, + "pattern": [ + " X ", + "X X", + " X " + ], + "result": { + "item": "feruchemy:nicrosil_ring_metalmind" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/recipes/pewter_bracelet_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/recipes/pewter_bracelet_metalmind.json new file mode 100644 index 000000000..f6cd4cd4c --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/recipes/pewter_bracelet_metalmind.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "bracelet", + "key": { + "X": { + "tag": "forge:ingots/pewter" + } + }, + "pattern": [ + " X ", + "X X", + "X X" + ], + "result": { + "item": "feruchemy:pewter_bracelet_metalmind" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/recipes/pewter_necklace_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/recipes/pewter_necklace_metalmind.json new file mode 100644 index 000000000..4d8e81e29 --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/recipes/pewter_necklace_metalmind.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "necklace", + "key": { + "X": { + "tag": "forge:ingots/pewter" + } + }, + "pattern": [ + "XXX", + "X X", + " X " + ], + "result": { + "item": "feruchemy:pewter_necklace_metalmind" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/recipes/pewter_ring_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/recipes/pewter_ring_metalmind.json new file mode 100644 index 000000000..31bc5afa9 --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/recipes/pewter_ring_metalmind.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "ring", + "key": { + "X": { + "tag": "forge:ingots/pewter" + } + }, + "pattern": [ + " X ", + "X X", + " X " + ], + "result": { + "item": "feruchemy:pewter_ring_metalmind" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/recipes/steel_bracelet_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/recipes/steel_bracelet_metalmind.json new file mode 100644 index 000000000..e5213ea23 --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/recipes/steel_bracelet_metalmind.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "bracelet", + "key": { + "X": { + "tag": "forge:ingots/steel" + } + }, + "pattern": [ + " X ", + "X X", + "X X" + ], + "result": { + "item": "feruchemy:steel_bracelet_metalmind" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/recipes/steel_necklace_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/recipes/steel_necklace_metalmind.json new file mode 100644 index 000000000..2c03ce6d6 --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/recipes/steel_necklace_metalmind.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "necklace", + "key": { + "X": { + "tag": "forge:ingots/steel" + } + }, + "pattern": [ + "XXX", + "X X", + " X " + ], + "result": { + "item": "feruchemy:steel_necklace_metalmind" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/recipes/steel_ring_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/recipes/steel_ring_metalmind.json new file mode 100644 index 000000000..612dcc74c --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/recipes/steel_ring_metalmind.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "ring", + "key": { + "X": { + "tag": "forge:ingots/steel" + } + }, + "pattern": [ + " X ", + "X X", + " X " + ], + "result": { + "item": "feruchemy:steel_ring_metalmind" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/recipes/tin_bracelet_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/recipes/tin_bracelet_metalmind.json new file mode 100644 index 000000000..2b7feeb39 --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/recipes/tin_bracelet_metalmind.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "bracelet", + "key": { + "X": { + "tag": "forge:ingots/tin" + } + }, + "pattern": [ + " X ", + "X X", + "X X" + ], + "result": { + "item": "feruchemy:tin_bracelet_metalmind" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/recipes/tin_necklace_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/recipes/tin_necklace_metalmind.json new file mode 100644 index 000000000..fdc52543c --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/recipes/tin_necklace_metalmind.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "necklace", + "key": { + "X": { + "tag": "forge:ingots/tin" + } + }, + "pattern": [ + "XXX", + "X X", + " X " + ], + "result": { + "item": "feruchemy:tin_necklace_metalmind" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/recipes/tin_ring_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/recipes/tin_ring_metalmind.json new file mode 100644 index 000000000..59edf9ac9 --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/recipes/tin_ring_metalmind.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "ring", + "key": { + "X": { + "tag": "forge:ingots/tin" + } + }, + "pattern": [ + " X ", + "X X", + " X " + ], + "result": { + "item": "feruchemy:tin_ring_metalmind" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/recipes/zinc_bracelet_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/recipes/zinc_bracelet_metalmind.json new file mode 100644 index 000000000..7e281d1f7 --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/recipes/zinc_bracelet_metalmind.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "bracelet", + "key": { + "X": { + "tag": "forge:ingots/zinc" + } + }, + "pattern": [ + " X ", + "X X", + "X X" + ], + "result": { + "item": "feruchemy:zinc_bracelet_metalmind" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/recipes/zinc_necklace_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/recipes/zinc_necklace_metalmind.json new file mode 100644 index 000000000..31258608a --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/recipes/zinc_necklace_metalmind.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "necklace", + "key": { + "X": { + "tag": "forge:ingots/zinc" + } + }, + "pattern": [ + "XXX", + "X X", + " X " + ], + "result": { + "item": "feruchemy:zinc_necklace_metalmind" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/feruchemy/data/feruchemy/recipes/zinc_ring_metalmind.json b/src/datagen/generated/feruchemy/data/feruchemy/recipes/zinc_ring_metalmind.json new file mode 100644 index 000000000..7af9c6b43 --- /dev/null +++ b/src/datagen/generated/feruchemy/data/feruchemy/recipes/zinc_ring_metalmind.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "ring", + "key": { + "X": { + "tag": "forge:ingots/zinc" + } + }, + "pattern": [ + " X ", + "X X", + " X " + ], + "result": { + "item": "feruchemy:zinc_ring_metalmind" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/.cache/3b2a435655541c92d690318b57013336949ed348 b/src/datagen/generated/hemalurgy/.cache/3b2a435655541c92d690318b57013336949ed348 new file mode 100644 index 000000000..040ed23c2 --- /dev/null +++ b/src/datagen/generated/hemalurgy/.cache/3b2a435655541c92d690318b57013336949ed348 @@ -0,0 +1,23 @@ +// 1.20.1 2024-10-09T13:38:50.3433899 PatchouliGeneration +9516c2b8a514480edc542cd9898644520d8d3bb6 assets/cosmere/patchouli_books/guide/en_us/categories/hemalurgy.json +d16afdd6d98a888c575602cf252a85d7ec3c7c72 assets/cosmere/patchouli_books/guide/en_us/entries/hemalurgy/hemalurgic_aluminum.json +dbf0550ef6b1bcdf3e5692796743eae3a332a015 assets/cosmere/patchouli_books/guide/en_us/entries/hemalurgy/hemalurgic_atium.json +ceac6ac0db29eab74b487ba82200d70be87764f3 assets/cosmere/patchouli_books/guide/en_us/entries/hemalurgy/hemalurgic_bendalloy.json +9ef3c49a391b4d82effa8b9f6b63cedd2de4d4d8 assets/cosmere/patchouli_books/guide/en_us/entries/hemalurgy/hemalurgic_brass.json +6353cb8c19bdf8302150fa7ced3ff65f700e9d65 assets/cosmere/patchouli_books/guide/en_us/entries/hemalurgy/hemalurgic_bronze.json +9f7f732f0076281912cf4c2f936d128ab25c85c8 assets/cosmere/patchouli_books/guide/en_us/entries/hemalurgy/hemalurgic_cadmium.json +a7edac5acb541ce3e8b7f97cbb6d64fe90be7404 assets/cosmere/patchouli_books/guide/en_us/entries/hemalurgy/hemalurgic_chromium.json +2b420f7acf116d812247bb38bdc0a045b03cc30e assets/cosmere/patchouli_books/guide/en_us/entries/hemalurgy/hemalurgic_copper.json +2abaccabaa85b36205516f704214b6af571c1fb3 assets/cosmere/patchouli_books/guide/en_us/entries/hemalurgy/hemalurgic_duralumin.json +e41154cc7d0770b02c6dcddb17a9290c32007164 assets/cosmere/patchouli_books/guide/en_us/entries/hemalurgy/hemalurgic_electrum.json +fe3a1bebbe6c0639018788b23645f7ca20e938f9 assets/cosmere/patchouli_books/guide/en_us/entries/hemalurgy/hemalurgic_gold.json +0229d66ad0b027f3919bc135f335381daafdf778 assets/cosmere/patchouli_books/guide/en_us/entries/hemalurgy/hemalurgic_iron.json +8ea9f684decccced1bf6c35fdf9a5667b09842d5 assets/cosmere/patchouli_books/guide/en_us/entries/hemalurgy/hemalurgic_lerasatium.json +4e946d383b9f6811bb08842218fb19562375d6c1 assets/cosmere/patchouli_books/guide/en_us/entries/hemalurgy/hemalurgic_lerasium.json +c79cd4ff2003c9d5b036fd432204a47213c7586d assets/cosmere/patchouli_books/guide/en_us/entries/hemalurgy/hemalurgic_nicrosil.json +8ab26e06b2858f54b2c753625f8921535dba74c0 assets/cosmere/patchouli_books/guide/en_us/entries/hemalurgy/hemalurgic_pewter.json +d4ff5097498c48f41d50734e9ad576f40f76a9e1 assets/cosmere/patchouli_books/guide/en_us/entries/hemalurgy/hemalurgic_steel.json +53b5a2614ffda1505baadc368772640df1cac747 assets/cosmere/patchouli_books/guide/en_us/entries/hemalurgy/hemalurgic_tin.json +34b470016131cad201f7061991651a60e5475ccd assets/cosmere/patchouli_books/guide/en_us/entries/hemalurgy/hemalurgic_zinc.json +42f0bd27ba248c1c51027ede72007e178e44b4e6 assets/cosmere/patchouli_books/guide/en_us/entries/hemalurgy/hemalurgy_basics.json +cce661deef763d9150a6397ac616f1df73228bc3 assets/cosmere/patchouli_books/guide/en_us/entries/hemalurgy/koloss.json diff --git a/src/datagen/generated/hemalurgy/.cache/5040fc90492c7cdcc7a00ae9539bd053297496a9 b/src/datagen/generated/hemalurgy/.cache/5040fc90492c7cdcc7a00ae9539bd053297496a9 new file mode 100644 index 000000000..e849e8190 --- /dev/null +++ b/src/datagen/generated/hemalurgy/.cache/5040fc90492c7cdcc7a00ae9539bd053297496a9 @@ -0,0 +1,8 @@ +// 1.20.1 2025-11-27T20:18:46.436269 Curios for hemalurgy +2c626dfa8d54881552e9e9c55aa2784089584b1f data/hemalurgy/curios/entities/hemalurgists.json +3fb00e951b4f3f7f01981550080dacbe27e14423 data/hemalurgy/curios/slots/eyes.json +169721ff151c350c1c8e90f73d41f17f3737007a data/hemalurgy/curios/slots/linchpin.json +becad4c0600bfd0706dc0ceb17eaf853bd029cd9 data/hemalurgy/curios/slots/mental.json +fcb5048eb6f2e53241e9f3fe8efac5bbf4c570d5 data/hemalurgy/curios/slots/physical.json +001a233ff3397a1ff5d2919b81933f82b28db5f5 data/hemalurgy/curios/slots/spiritual.json +b7d74ab168a980633bbcc6b1421ab1d7096c89f7 data/hemalurgy/curios/slots/temporal.json diff --git a/src/datagen/generated/hemalurgy/.cache/9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e b/src/datagen/generated/hemalurgy/.cache/9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e new file mode 100644 index 000000000..e80f5bd6b --- /dev/null +++ b/src/datagen/generated/hemalurgy/.cache/9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e @@ -0,0 +1,43 @@ +// 1.20.1 2024-10-09T13:22:13.4517406 Recipes +98f979b3a149a46f4dafe5f7f6248dd4f72f0447 data/hemalurgy/advancements/recipes/misc/guide_from_blasting_iron_spike.json +29d1aaa685502a30f293458c541ddbb26de2bbb5 data/hemalurgy/advancements/recipes/misc/guide_from_smelting_iron_spike.json +e7ce4ed54b63f1d3710bc42be14b501f49bee4ea data/hemalurgy/advancements/recipes/tools/aluminum_spike.json +740cac97d2b5fa3d380aa0aa79a1f6b60a89e305 data/hemalurgy/advancements/recipes/tools/atium_spike.json +a001d1b5f36b7accc2dd983721695568cc86ec4a data/hemalurgy/advancements/recipes/tools/bendalloy_spike.json +e0a39b068f29a7573676bbb683ee6872babee807 data/hemalurgy/advancements/recipes/tools/brass_spike.json +f1b48a82dc9f0b19e44e818d12f29ca68e6194e4 data/hemalurgy/advancements/recipes/tools/bronze_spike.json +160789b41f229a7d6e5af70cecdb00a0189c4a07 data/hemalurgy/advancements/recipes/tools/cadmium_spike.json +1f05435fa9872dac9099868c3ee62c1e06c99216 data/hemalurgy/advancements/recipes/tools/chromium_spike.json +f0d174b6e1e1cfad6e7dd436493a98e9919f7e34 data/hemalurgy/advancements/recipes/tools/copper_spike.json +e19c072f1af6b74e553722aece30fc9f8d34ad2d data/hemalurgy/advancements/recipes/tools/duralumin_spike.json +a4342407131d96b7c6725dca02a8d3c403ed531d data/hemalurgy/advancements/recipes/tools/electrum_spike.json +dcadfd61ca4fffb2251e4a4d1f0c1a1a6c0aa937 data/hemalurgy/advancements/recipes/tools/gold_spike.json +1ca933bf5711d923a360d4edf8afcaf1de9e5b91 data/hemalurgy/advancements/recipes/tools/iron_spike.json +03112752848202c563dd7aa5dc3f0cfda7753b87 data/hemalurgy/advancements/recipes/tools/lerasatium_spike.json +fad55c448974d599b9ab0c801e4d536b1a57cb4e data/hemalurgy/advancements/recipes/tools/lerasium_spike.json +67370cd6112d00db61968eaa9e9a2cf4a03d4feb data/hemalurgy/advancements/recipes/tools/nicrosil_spike.json +868f51441adf0e06b6b0b48f07c1db572ff7dad8 data/hemalurgy/advancements/recipes/tools/pewter_spike.json +2d462e4fd4ec680e699a01ec3428c7f0ad28e9a5 data/hemalurgy/advancements/recipes/tools/steel_spike.json +d250767106633443cd98e8290e8080be73374b73 data/hemalurgy/advancements/recipes/tools/tin_spike.json +eef90a9917856c21858086126b6815fb35efe783 data/hemalurgy/advancements/recipes/tools/zinc_spike.json +e6d26b0cb9de2f190504c3d31d279be2eff96abc data/hemalurgy/recipes/aluminum_spike.json +e311c847a43529d69d0796fe29c81ed7e9c7a48b data/hemalurgy/recipes/atium_spike.json +a61cdf11fa624c67fcc561d9dfa8591d43b44318 data/hemalurgy/recipes/bendalloy_spike.json +1467b1a96b78bd5f48e8d01413c8e7b499a8c56f data/hemalurgy/recipes/brass_spike.json +6691fe06f59fca33ed61ed394f571af7ad71b9a1 data/hemalurgy/recipes/bronze_spike.json +f33bed5c7d275c124f45baeed875043ad06de639 data/hemalurgy/recipes/cadmium_spike.json +227f861beb3145488a723fe1f1c40f3e3ab5670f data/hemalurgy/recipes/chromium_spike.json +d0315f955e7526a70ab35745863f5948e19dd044 data/hemalurgy/recipes/copper_spike.json +3fc14828dbec40bd2ae875fdb0f17a284d68ab38 data/hemalurgy/recipes/duralumin_spike.json +942e238d691266e18eff0aed9778900e964402be data/hemalurgy/recipes/electrum_spike.json +f4c1c779d38365dfecc8bccfe640a6b7db4f656b data/hemalurgy/recipes/gold_spike.json +6a3d45515c10a079be19885167cf916f1e5635ea data/hemalurgy/recipes/guide_from_blasting_iron_spike.json +00e00e9d5e353535aba6b003f4ccc29afc2e5760 data/hemalurgy/recipes/guide_from_smelting_iron_spike.json +258c8290bac7f5efb262fb1bef11975d3e9a8d3b data/hemalurgy/recipes/iron_spike.json +b75729fce6268a09e3ae4261eee32f90f41cba93 data/hemalurgy/recipes/lerasatium_spike.json +7a8655150aaf338a305e13580dbcdb27717eb23b data/hemalurgy/recipes/lerasium_spike.json +e77c2bc90438d6c1eda9bf10f1fad59c7cc0d4df data/hemalurgy/recipes/nicrosil_spike.json +dbd9075d9393c3c76a2e6b5eb32025ba943837f6 data/hemalurgy/recipes/pewter_spike.json +1903f8b04a2a76ce8cd4122670363991d65a1bff data/hemalurgy/recipes/steel_spike.json +59efaab72badcde8b02419d57d78aa753f0c69f6 data/hemalurgy/recipes/tin_spike.json +2fda663c5f21a4f43495908438190c2a57f3ef68 data/hemalurgy/recipes/zinc_spike.json diff --git a/src/datagen/generated/hemalurgy/.cache/c3f80e268d2cfd3bbfc23cd1cc3b922ec14bcac1 b/src/datagen/generated/hemalurgy/.cache/c3f80e268d2cfd3bbfc23cd1cc3b922ec14bcac1 new file mode 100644 index 000000000..ae2179d63 --- /dev/null +++ b/src/datagen/generated/hemalurgy/.cache/c3f80e268d2cfd3bbfc23cd1cc3b922ec14bcac1 @@ -0,0 +1,8 @@ +// 1.20.1 2024-10-09T13:22:13.4527411 Tags: hemalurgy +1347b9ed44283073c6bfce1e1580938f6bd21ff6 data/cosmere/tags/items/spike.json +af2e2857d9a96d22c837ecd93c7a138ef4da6d42 data/curios/tags/items/eyes.json +75fcd4a6d5c9bf2b6c54b32af01fca4ef8635b14 data/curios/tags/items/linchpin.json +b592a071e673cd5c1b97c94d4240d962d094cb19 data/curios/tags/items/mental.json +af2e2857d9a96d22c837ecd93c7a138ef4da6d42 data/curios/tags/items/physical.json +6d30e5ead4929b1fdf5e82a171ef37942672d8bd data/curios/tags/items/spiritual.json +79c189eed2f60e0f2eba8de14b32a1e89f7a85c0 data/curios/tags/items/temporal.json diff --git a/src/datagen/generated/hemalurgy/.cache/c622617f6fabf890a00b9275cd5f643584a8a2c8 b/src/datagen/generated/hemalurgy/.cache/c622617f6fabf890a00b9275cd5f643584a8a2c8 new file mode 100644 index 000000000..9b3c862e7 --- /dev/null +++ b/src/datagen/generated/hemalurgy/.cache/c622617f6fabf890a00b9275cd5f643584a8a2c8 @@ -0,0 +1,2 @@ +// 1.20.1 2025-11-27T19:26:56.092291 Languages: en_us +d1c333afb28e5f58bbbcd8410eb4e562b6309551 assets/hemalurgy/lang/en_us.json diff --git a/src/datagen/generated/hemalurgy/.cache/c8068618ee7f3ba2c93e8407a6d107e820d4e5e8 b/src/datagen/generated/hemalurgy/.cache/c8068618ee7f3ba2c93e8407a6d107e820d4e5e8 new file mode 100644 index 000000000..ae460821e --- /dev/null +++ b/src/datagen/generated/hemalurgy/.cache/c8068618ee7f3ba2c93e8407a6d107e820d4e5e8 @@ -0,0 +1,23 @@ +// 1.20.1 2025-03-09T10:39:27.8512456 Item Models: hemalurgy +599ad960ce589ce29a8f017941fa9f29ae85e9b6 assets/hemalurgy/models/item/aluminum_spike.json +ecd609c979ce1941ddb9b2f41abd7689bff0128b assets/hemalurgy/models/item/atium_spike.json +0b1a1d8d2b913a995089e0884d61fed377cd8228 assets/hemalurgy/models/item/bendalloy_spike.json +9c07aaa8c82e36eb36fa487022518a68a1a450e2 assets/hemalurgy/models/item/brass_spike.json +9d2079e09408b493337823a081b9ce1cbb14a4b9 assets/hemalurgy/models/item/bronze_spike.json +52e5a6e1fdac73df6013abe3a23f3f4d4d5deecd assets/hemalurgy/models/item/cadmium_spike.json +c1e22dd8abf425d6ffef40265637c406ac13db14 assets/hemalurgy/models/item/chromium_spike.json +0f27142b943beb4d113afd2890048303c47ad8de assets/hemalurgy/models/item/copper_spike.json +2a09c32877911dc0932b01cf93efdf639f9b4f80 assets/hemalurgy/models/item/duralumin_spike.json +32cefaa4b82e5d564c81484481569ddaa3189d1c assets/hemalurgy/models/item/electrum_spike.json +06db2431dad8d8ad6ebcc741a20eb68da71b314b assets/hemalurgy/models/item/gold_spike.json +8ca1f61a205ceb2a5c61d654526f5ed1ee0de5f0 assets/hemalurgy/models/item/iron_spike.json +63ec6c618a3a23eab4cab9c52d7d3250de9b516e assets/hemalurgy/models/item/koloss_large_spawn_egg.json +63ec6c618a3a23eab4cab9c52d7d3250de9b516e assets/hemalurgy/models/item/koloss_medium_spawn_egg.json +63ec6c618a3a23eab4cab9c52d7d3250de9b516e assets/hemalurgy/models/item/koloss_small_spawn_egg.json +cd77de46c4ffcef9015c3db037c4151c1c71a5f7 assets/hemalurgy/models/item/lerasatium_spike.json +9ca0c83183c35e999f348648a7e608b8685dad76 assets/hemalurgy/models/item/lerasium_spike.json +1dbc9b8e1b16cef2d49174442ef89f530f6c950d assets/hemalurgy/models/item/nicrosil_spike.json +ddfd9d97bbe7729fe3c45d1101b36b08a1579d2e assets/hemalurgy/models/item/pewter_spike.json +e3aff64ca348e597ff060dcc7d1dfffc6c414055 assets/hemalurgy/models/item/steel_spike.json +226502a01d92e981e5caa2c115c8255e1fc06dfb assets/hemalurgy/models/item/tin_spike.json +fd823f22e8ad9d5a63ac951a9f7145ba48cc6589 assets/hemalurgy/models/item/zinc_spike.json diff --git a/src/datagen/generated/hemalurgy/assets/cosmere/patchouli_books/guide/en_us/categories/hemalurgy.json b/src/datagen/generated/hemalurgy/assets/cosmere/patchouli_books/guide/en_us/categories/hemalurgy.json new file mode 100644 index 000000000..5c300b37d --- /dev/null +++ b/src/datagen/generated/hemalurgy/assets/cosmere/patchouli_books/guide/en_us/categories/hemalurgy.json @@ -0,0 +1,7 @@ +{ + "description": "The forbidden field of magic that takes from others so that you may get stronger.", + "icon": "hemalurgy:atium_spike", + "name": "Hemalurgy", + "secret": true, + "sortnum": 3 +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/assets/cosmere/patchouli_books/guide/en_us/entries/hemalurgy/hemalurgic_aluminum.json b/src/datagen/generated/hemalurgy/assets/cosmere/patchouli_books/guide/en_us/entries/hemalurgy/hemalurgic_aluminum.json new file mode 100644 index 000000000..62647812c --- /dev/null +++ b/src/datagen/generated/hemalurgy/assets/cosmere/patchouli_books/guide/en_us/entries/hemalurgy/hemalurgic_aluminum.json @@ -0,0 +1,19 @@ +{ + "category": "cosmere:hemalurgy", + "icon": "hemalurgy:aluminum_spike", + "name": "Hemalurgic Aluminum", + "pages": [ + { + "type": "text", + "text": "Prevents recipient from using their powers." + }, + { + "type": "patchouli:crafting", + "recipe": "hemalurgy:aluminum_spike" + } + ], + "priority": false, + "read_by_default": false, + "secret": false, + "sortnum": 8 +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/assets/cosmere/patchouli_books/guide/en_us/entries/hemalurgy/hemalurgic_atium.json b/src/datagen/generated/hemalurgy/assets/cosmere/patchouli_books/guide/en_us/entries/hemalurgy/hemalurgic_atium.json new file mode 100644 index 000000000..ea2841087 --- /dev/null +++ b/src/datagen/generated/hemalurgy/assets/cosmere/patchouli_books/guide/en_us/entries/hemalurgy/hemalurgic_atium.json @@ -0,0 +1,19 @@ +{ + "category": "cosmere:hemalurgy", + "icon": "hemalurgy:atium_spike", + "name": "Hemalurgic Atium", + "pages": [ + { + "type": "text", + "text": "Atium Spikes can steal any one Allomantic or Feruchemical power. For example, if a twinborn were spiked with an atium spike, that spike would only grant one of their powers." + }, + { + "type": "patchouli:crafting", + "recipe": "hemalurgy:atium_spike" + } + ], + "priority": false, + "read_by_default": false, + "secret": false, + "sortnum": 16 +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/assets/cosmere/patchouli_books/guide/en_us/entries/hemalurgy/hemalurgic_bendalloy.json b/src/datagen/generated/hemalurgy/assets/cosmere/patchouli_books/guide/en_us/entries/hemalurgy/hemalurgic_bendalloy.json new file mode 100644 index 000000000..ced42ca4b --- /dev/null +++ b/src/datagen/generated/hemalurgy/assets/cosmere/patchouli_books/guide/en_us/entries/hemalurgy/hemalurgic_bendalloy.json @@ -0,0 +1,19 @@ +{ + "category": "cosmere:hemalurgy", + "icon": "hemalurgy:bendalloy_spike", + "name": "Hemalurgic Bendalloy", + "pages": [ + { + "type": "text", + "text": "Bendalloy spikes steal the spiritual feruchemical powers: $(p)Feruchemically storing and tapping $(l:feruchemy:feruchemy/feruchemical_aluminum)Aluminum$(), $(l:feruchemy:feruchemy/feruchemical_duralumin)Duralumin$(), $(l:feruchemy:feruchemy/feruchemical_chromium)Chromium$() and $(l:feruchemy:feruchemy/feruchemical_nicrosil)Nicrosil$(), the feruchemical attributes keyed to each of these are: $(p)Identity(making identityless metalminds), Connection(Bad omen/Hero of the village), Fortune(Bad luck/luck), and Investiture(Charge can be used for tapping other metals)" + }, + { + "type": "patchouli:crafting", + "recipe": "hemalurgy:bendalloy_spike" + } + ], + "priority": false, + "read_by_default": false, + "secret": false, + "sortnum": 13 +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/assets/cosmere/patchouli_books/guide/en_us/entries/hemalurgy/hemalurgic_brass.json b/src/datagen/generated/hemalurgy/assets/cosmere/patchouli_books/guide/en_us/entries/hemalurgy/hemalurgic_brass.json new file mode 100644 index 000000000..6ae8ec36d --- /dev/null +++ b/src/datagen/generated/hemalurgy/assets/cosmere/patchouli_books/guide/en_us/entries/hemalurgy/hemalurgic_brass.json @@ -0,0 +1,19 @@ +{ + "category": "cosmere:hemalurgy", + "icon": "hemalurgy:brass_spike", + "name": "Hemalurgic Brass", + "pages": [ + { + "type": "text", + "text": "Brass spikes steal the cognitive feruchemical powers: $(p)Feruchemically storing and tapping $(l:feruchemy:feruchemy/feruchemical_zinc)Zinc$(), $(l:feruchemy:feruchemy/feruchemical_brass)Brass$(), $(l:feruchemy:feruchemy/feruchemical_copper)Copper$() and $(l:feruchemy:feruchemy/feruchemical_bronze)Bronze$(), the feruchemical attributes keyed to each of these are: $(p)Mental Speed(XP Gain Rate), Warmth(Fire Resistance/Fire Aspect), Memories(Current XP), and Wakefulness(Phantom Spawn Timer). $(p)" + }, + { + "type": "patchouli:crafting", + "recipe": "hemalurgy:brass_spike" + } + ], + "priority": false, + "read_by_default": false, + "secret": false, + "sortnum": 5 +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/assets/cosmere/patchouli_books/guide/en_us/entries/hemalurgy/hemalurgic_bronze.json b/src/datagen/generated/hemalurgy/assets/cosmere/patchouli_books/guide/en_us/entries/hemalurgy/hemalurgic_bronze.json new file mode 100644 index 000000000..77f579f1c --- /dev/null +++ b/src/datagen/generated/hemalurgy/assets/cosmere/patchouli_books/guide/en_us/entries/hemalurgy/hemalurgic_bronze.json @@ -0,0 +1,27 @@ +{ + "category": "cosmere:hemalurgy", + "icon": "hemalurgy:bronze_spike", + "name": "Hemalurgic Bronze", + "pages": [ + { + "type": "text", + "text": "Bronze spikes steal the mental allomantic powers: $(p)Allomantically burning $(l:allomancy:allomancy/allomantic_zinc)Zinc$(), $(l:allomancy:allomancy/allomantic_brass)Brass$(), $(l:allomancy:allomancy/allomantic_copper)Copper$() and $(l:allomancy:allomancy/allomantic_bronze)Bronze$().A substance known as Sculk lies deep within the ground on this planet. Reports indicate that it can detect nearby uses of allomancy, similarly to allomantic bronze. I theorize that spiking a large creature of the sculk could give a hemalurgic charge of allomantic bronze, just like spiking a human Seeker." + }, + { + "type": "entity", + "default_rotation": -45.0, + "entity": "minecraft:warden", + "offset": 0.0, + "rotate": false, + "scale": 1.0 + }, + { + "type": "patchouli:crafting", + "recipe": "hemalurgy:bronze_spike" + } + ], + "priority": false, + "read_by_default": false, + "secret": false, + "sortnum": 7 +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/assets/cosmere/patchouli_books/guide/en_us/entries/hemalurgy/hemalurgic_cadmium.json b/src/datagen/generated/hemalurgy/assets/cosmere/patchouli_books/guide/en_us/entries/hemalurgy/hemalurgic_cadmium.json new file mode 100644 index 000000000..c79de1e26 --- /dev/null +++ b/src/datagen/generated/hemalurgy/assets/cosmere/patchouli_books/guide/en_us/entries/hemalurgy/hemalurgic_cadmium.json @@ -0,0 +1,19 @@ +{ + "category": "cosmere:hemalurgy", + "icon": "hemalurgy:cadmium_spike", + "name": "Hemalurgic Cadmium", + "pages": [ + { + "type": "text", + "text": "Cadmium spikes steal the temporal allomantic powers: $(p)Allomantically burning $(l:allomancy:allomancy/allomantic_gold)Gold$(), $(l:allomancy:allomancy/allomantic_electrum)Electrum$(), $(l:allomancy:allomancy/allomantic_cadmium)Cadmium$() and $(l:allomancy:allomancy/allomantic_bendalloy)Bendalloy$()." + }, + { + "type": "patchouli:crafting", + "recipe": "hemalurgy:cadmium_spike" + } + ], + "priority": false, + "read_by_default": false, + "secret": false, + "sortnum": 12 +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/assets/cosmere/patchouli_books/guide/en_us/entries/hemalurgy/hemalurgic_chromium.json b/src/datagen/generated/hemalurgy/assets/cosmere/patchouli_books/guide/en_us/entries/hemalurgy/hemalurgic_chromium.json new file mode 100644 index 000000000..7fc7aa677 --- /dev/null +++ b/src/datagen/generated/hemalurgy/assets/cosmere/patchouli_books/guide/en_us/entries/hemalurgy/hemalurgic_chromium.json @@ -0,0 +1,19 @@ +{ + "category": "cosmere:hemalurgy", + "icon": "hemalurgy:chromium_spike", + "name": "Hemalurgic Chromium", + "pages": [ + { + "type": "text", + "text": "I have heard it said that Chromium spikes 'might steal destiny...', in my experience, they seem to affect one's luck. $(p)Like all hemalurgic spikes, the effect of a chromium spike depends on the donor, though in a different way to iron, for example: $(p)If the donor is a Rabbit, or completely White cat, the recipient would become 75%%, or 35%% luckier, respectively. $(p)In contrast, if the donor is a black cat, wither skeleton, or pufferfish, the recipient's luck would decrease, by 100%%, 55%%, or 5%%, respectively" + }, + { + "type": "patchouli:crafting", + "recipe": "hemalurgy:chromium_spike" + } + ], + "priority": false, + "read_by_default": false, + "secret": false, + "sortnum": 10 +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/assets/cosmere/patchouli_books/guide/en_us/entries/hemalurgy/hemalurgic_copper.json b/src/datagen/generated/hemalurgy/assets/cosmere/patchouli_books/guide/en_us/entries/hemalurgy/hemalurgic_copper.json new file mode 100644 index 000000000..531ca2609 --- /dev/null +++ b/src/datagen/generated/hemalurgy/assets/cosmere/patchouli_books/guide/en_us/entries/hemalurgy/hemalurgic_copper.json @@ -0,0 +1,19 @@ +{ + "category": "cosmere:hemalurgy", + "icon": "hemalurgy:copper_spike", + "name": "Hemalurgic Copper", + "pages": [ + { + "type": "text", + "text": "Copper spikes steal mental fortitude, memory, and intelligence. $(p)As a result, they can be used to increase base XP gain rate. $(p)I wonder what would happen if you were to spike the Ender Dragon... Surely the first kill of such a beast would give a marvelous reward." + }, + { + "type": "patchouli:crafting", + "recipe": "hemalurgy:copper_spike" + } + ], + "priority": false, + "read_by_default": false, + "secret": false, + "sortnum": 6 +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/assets/cosmere/patchouli_books/guide/en_us/entries/hemalurgy/hemalurgic_duralumin.json b/src/datagen/generated/hemalurgy/assets/cosmere/patchouli_books/guide/en_us/entries/hemalurgy/hemalurgic_duralumin.json new file mode 100644 index 000000000..da225976b --- /dev/null +++ b/src/datagen/generated/hemalurgy/assets/cosmere/patchouli_books/guide/en_us/entries/hemalurgy/hemalurgic_duralumin.json @@ -0,0 +1,19 @@ +{ + "category": "cosmere:hemalurgy", + "icon": "hemalurgy:duralumin_spike", + "name": "Hemalurgic Duralumin", + "pages": [ + { + "type": "text", + "text": "In the past, hemalurgic scholars have theorised that duralumin spikes may transfer the donor's spiritual connection or identity. However, due to the rarity of duralumin during the eras they all worked in, all were unable to obtain enough duralumin to prove their theories. $(p)(The rest of the page appears to have been ripped out)" + }, + { + "type": "patchouli:crafting", + "recipe": "hemalurgy:duralumin_spike" + } + ], + "priority": false, + "read_by_default": false, + "secret": false, + "sortnum": 9 +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/assets/cosmere/patchouli_books/guide/en_us/entries/hemalurgy/hemalurgic_electrum.json b/src/datagen/generated/hemalurgy/assets/cosmere/patchouli_books/guide/en_us/entries/hemalurgy/hemalurgic_electrum.json new file mode 100644 index 000000000..79480ce35 --- /dev/null +++ b/src/datagen/generated/hemalurgy/assets/cosmere/patchouli_books/guide/en_us/entries/hemalurgy/hemalurgic_electrum.json @@ -0,0 +1,19 @@ +{ + "category": "cosmere:hemalurgy", + "icon": "hemalurgy:electrum_spike", + "name": "Hemalurgic Electrum", + "pages": [ + { + "type": "text", + "text": "Electrum spikes steal the enhancement allomantic powers: $(p)Allomantically burning $(l:allomancy:allomancy/allomantic_aluminum)Aluminum$(), $(l:allomancy:allomancy/allomantic_duralumin)Duralumin$(), $(l:allomancy:allomancy/allomantic_chromium)Chromium$() and $(l:allomancy:allomancy/allomantic_nicrosil)Nicrosil$()." + }, + { + "type": "patchouli:crafting", + "recipe": "hemalurgy:electrum_spike" + } + ], + "priority": false, + "read_by_default": false, + "secret": false, + "sortnum": 15 +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/assets/cosmere/patchouli_books/guide/en_us/entries/hemalurgy/hemalurgic_gold.json b/src/datagen/generated/hemalurgy/assets/cosmere/patchouli_books/guide/en_us/entries/hemalurgy/hemalurgic_gold.json new file mode 100644 index 000000000..8c1b3bdf0 --- /dev/null +++ b/src/datagen/generated/hemalurgy/assets/cosmere/patchouli_books/guide/en_us/entries/hemalurgy/hemalurgic_gold.json @@ -0,0 +1,19 @@ +{ + "category": "cosmere:hemalurgy", + "icon": "hemalurgy:gold_spike", + "name": "Hemalurgic Gold", + "pages": [ + { + "type": "text", + "text": "Gold spikes steal the hybrid feruchemical powers: $(p)Feruchemically storing and tapping $(l:feruchemy:feruchemy/feruchemical_gold)Gold$(), $(l:feruchemy:feruchemy/feruchemical_electrum)Electrum$(), $(l:feruchemy:feruchemy/feruchemical_cadmium)Cadmium$() and $(l:feruchemy:feruchemy/feruchemical_bendalloy)Bendalloy$(), the feruchemical attributes keyed to each of these are: $(p)Healing(lose max health/regeneration), Determination(extra hearts), Breath(lose O2 outside water/reduce rate of O2 consumption), and Nutrition(Hunger/Saturation)" + }, + { + "type": "patchouli:crafting", + "recipe": "hemalurgy:gold_spike" + } + ], + "priority": false, + "read_by_default": false, + "secret": false, + "sortnum": 14 +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/assets/cosmere/patchouli_books/guide/en_us/entries/hemalurgy/hemalurgic_iron.json b/src/datagen/generated/hemalurgy/assets/cosmere/patchouli_books/guide/en_us/entries/hemalurgy/hemalurgic_iron.json new file mode 100644 index 000000000..b97f07fd1 --- /dev/null +++ b/src/datagen/generated/hemalurgy/assets/cosmere/patchouli_books/guide/en_us/entries/hemalurgy/hemalurgic_iron.json @@ -0,0 +1,19 @@ +{ + "category": "cosmere:hemalurgy", + "icon": "hemalurgy:iron_spike", + "name": "Hemalurgic Iron", + "pages": [ + { + "type": "text", + "text": "Iron spikes steal physical strength: $(p)My research suggests that iron spikes transfer around 70%% of the donor's attack strength." + }, + { + "type": "patchouli:crafting", + "recipe": "hemalurgy:iron_spike" + } + ], + "priority": false, + "read_by_default": false, + "secret": false, + "sortnum": 0 +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/assets/cosmere/patchouli_books/guide/en_us/entries/hemalurgy/hemalurgic_lerasatium.json b/src/datagen/generated/hemalurgy/assets/cosmere/patchouli_books/guide/en_us/entries/hemalurgy/hemalurgic_lerasatium.json new file mode 100644 index 000000000..d6bfd9479 --- /dev/null +++ b/src/datagen/generated/hemalurgy/assets/cosmere/patchouli_books/guide/en_us/entries/hemalurgy/hemalurgic_lerasatium.json @@ -0,0 +1,19 @@ +{ + "category": "cosmere:hemalurgy", + "icon": "hemalurgy:lerasatium_spike", + "name": "Hemalurgic Lerasatium", + "pages": [ + { + "type": "text", + "text": "Unknown..." + }, + { + "type": "patchouli:crafting", + "recipe": "hemalurgy:lerasatium_spike" + } + ], + "priority": false, + "read_by_default": false, + "secret": false, + "sortnum": 20 +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/assets/cosmere/patchouli_books/guide/en_us/entries/hemalurgy/hemalurgic_lerasium.json b/src/datagen/generated/hemalurgy/assets/cosmere/patchouli_books/guide/en_us/entries/hemalurgy/hemalurgic_lerasium.json new file mode 100644 index 000000000..62cfbb6ee --- /dev/null +++ b/src/datagen/generated/hemalurgy/assets/cosmere/patchouli_books/guide/en_us/entries/hemalurgy/hemalurgic_lerasium.json @@ -0,0 +1,19 @@ +{ + "category": "cosmere:hemalurgy", + "icon": "hemalurgy:lerasium_spike", + "name": "Hemalurgic Lerasium", + "pages": [ + { + "type": "text", + "text": "Lerasium Spikes steals all Attributes from a donor." + }, + { + "type": "patchouli:crafting", + "recipe": "hemalurgy:lerasium_spike" + } + ], + "priority": false, + "read_by_default": false, + "secret": false, + "sortnum": 17 +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/assets/cosmere/patchouli_books/guide/en_us/entries/hemalurgy/hemalurgic_nicrosil.json b/src/datagen/generated/hemalurgy/assets/cosmere/patchouli_books/guide/en_us/entries/hemalurgy/hemalurgic_nicrosil.json new file mode 100644 index 000000000..e1fc6f416 --- /dev/null +++ b/src/datagen/generated/hemalurgy/assets/cosmere/patchouli_books/guide/en_us/entries/hemalurgy/hemalurgic_nicrosil.json @@ -0,0 +1,19 @@ +{ + "category": "cosmere:hemalurgy", + "icon": "hemalurgy:nicrosil_spike", + "name": "Hemalurgic Nicrosil", + "pages": [ + { + "type": "text", + "text": "[Not Yet Implemented] $(p)Some theorise, due to the similarities hemalurgy shares with feruchemy, that nicrosil spikes steal investiture, potentially similarly to how soulbearer ferrings store investiture $(p)(The rest of this page has ink spilled on it, obscuring the writing)" + }, + { + "type": "patchouli:crafting", + "recipe": "hemalurgy:nicrosil_spike" + } + ], + "priority": false, + "read_by_default": false, + "secret": false, + "sortnum": 11 +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/assets/cosmere/patchouli_books/guide/en_us/entries/hemalurgy/hemalurgic_pewter.json b/src/datagen/generated/hemalurgy/assets/cosmere/patchouli_books/guide/en_us/entries/hemalurgy/hemalurgic_pewter.json new file mode 100644 index 000000000..a5c4a2379 --- /dev/null +++ b/src/datagen/generated/hemalurgy/assets/cosmere/patchouli_books/guide/en_us/entries/hemalurgy/hemalurgic_pewter.json @@ -0,0 +1,19 @@ +{ + "category": "cosmere:hemalurgy", + "icon": "hemalurgy:pewter_spike", + "name": "Hemalurgic Pewter", + "pages": [ + { + "type": "text", + "text": "Pewter spikes steal the physical feruchemical powers: $(p)Feruchemically storing and tapping $(l:feruchemy:feruchemy/feruchemical_iron)Iron$(), $(l:feruchemy:feruchemy/feruchemical_steel)Steel$(), $(l:feruchemy:feruchemy/feruchemical_tin)Tin$() and $(l:feruchemy:feruchemy/feruchemical_pewter)Pewter$(), the feruchemical attributes keyed to each of these are: $(p)Weight(Slow Fall/Slowness, Resistance), Speed(Slowness/Speed), Senses(Blindness/Night Vision), and Strength(Weakness/Strength)." + }, + { + "type": "patchouli:crafting", + "recipe": "hemalurgy:pewter_spike" + } + ], + "priority": false, + "read_by_default": false, + "secret": false, + "sortnum": 3 +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/assets/cosmere/patchouli_books/guide/en_us/entries/hemalurgy/hemalurgic_steel.json b/src/datagen/generated/hemalurgy/assets/cosmere/patchouli_books/guide/en_us/entries/hemalurgy/hemalurgic_steel.json new file mode 100644 index 000000000..3869a28ac --- /dev/null +++ b/src/datagen/generated/hemalurgy/assets/cosmere/patchouli_books/guide/en_us/entries/hemalurgy/hemalurgic_steel.json @@ -0,0 +1,19 @@ +{ + "category": "cosmere:hemalurgy", + "icon": "hemalurgy:steel_spike", + "name": "Hemalurgic Steel", + "pages": [ + { + "type": "text", + "text": "Steel spikes steal the physical allomantic powers: $(p)Allomantically burning $(l:allomancy:allomancy/allomantic_iron)Iron$(), $(l:allomancy:allomancy/allomantic_steel)Steel$(), $(l:allomancy:allomancy/allomantic_tin)Tin$() and $(l:allomancy:allomancy/allomantic_pewter)Pewter$()." + }, + { + "type": "patchouli:crafting", + "recipe": "hemalurgy:steel_spike" + } + ], + "priority": false, + "read_by_default": false, + "secret": false, + "sortnum": 1 +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/assets/cosmere/patchouli_books/guide/en_us/entries/hemalurgy/hemalurgic_tin.json b/src/datagen/generated/hemalurgy/assets/cosmere/patchouli_books/guide/en_us/entries/hemalurgy/hemalurgic_tin.json new file mode 100644 index 000000000..9bca32132 --- /dev/null +++ b/src/datagen/generated/hemalurgy/assets/cosmere/patchouli_books/guide/en_us/entries/hemalurgy/hemalurgic_tin.json @@ -0,0 +1,19 @@ +{ + "category": "cosmere:hemalurgy", + "icon": "hemalurgy:tin_spike", + "name": "Hemalurgic Tin", + "pages": [ + { + "type": "text", + "text": "Tin spikes steal the senses: $(p)As a result, tin spikes grant better vision in the dark. $(p)It seems that donors with a better sense of their surroundings provide a more potent effect." + }, + { + "type": "patchouli:crafting", + "recipe": "hemalurgy:tin_spike" + } + ], + "priority": false, + "read_by_default": false, + "secret": false, + "sortnum": 2 +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/assets/cosmere/patchouli_books/guide/en_us/entries/hemalurgy/hemalurgic_zinc.json b/src/datagen/generated/hemalurgy/assets/cosmere/patchouli_books/guide/en_us/entries/hemalurgy/hemalurgic_zinc.json new file mode 100644 index 000000000..0fa9af0f1 --- /dev/null +++ b/src/datagen/generated/hemalurgy/assets/cosmere/patchouli_books/guide/en_us/entries/hemalurgy/hemalurgic_zinc.json @@ -0,0 +1,19 @@ +{ + "category": "cosmere:hemalurgy", + "icon": "hemalurgy:zinc_spike", + "name": "Hemalurgic Zinc", + "pages": [ + { + "type": "text", + "text": "[Not Yet Implemented] $(p)My research has yet to determine any Hemalurgic properties of zinc - further research necessary. (WIP)" + }, + { + "type": "patchouli:crafting", + "recipe": "hemalurgy:zinc_spike" + } + ], + "priority": false, + "read_by_default": false, + "secret": false, + "sortnum": 4 +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/assets/cosmere/patchouli_books/guide/en_us/entries/hemalurgy/hemalurgy_basics.json b/src/datagen/generated/hemalurgy/assets/cosmere/patchouli_books/guide/en_us/entries/hemalurgy/hemalurgy_basics.json new file mode 100644 index 000000000..65e102b33 --- /dev/null +++ b/src/datagen/generated/hemalurgy/assets/cosmere/patchouli_books/guide/en_us/entries/hemalurgy/hemalurgy_basics.json @@ -0,0 +1,32 @@ +{ + "category": "cosmere:hemalurgy", + "icon": "hemalurgy:atium_spike", + "name": "Hemalurgy (For Dummies)", + "pages": [ + { + "type": "text", + "text": "In this journal, I shall explain all I have discovered about Hemalurgy. $(br)Firstly, some terminology:$(li) \"$(thing)Spiking$()\" is when you kill something with a metal spike, hemalurgically charging that spike.$(li) The \"$(thing)donor$()\" is the one who is spiked, from whom the spike is hemalurgically charged.$(li) The \"$(thing)recipient$()\" is the one who receives the spike after it has been hemalurgically charged.", + "title": "Terminology" + }, + { + "type": "text", + "text": "During my research, I have been able to outline some general rules of Hemalurgy, and some general observations, which I have written below.$(li) The metal the spike is made out of determines the attribute or power taken from the donor.$(li) A single spike can only hold a single hemalurgic charge.$(li) Spiking a misting/ferring has a predictable effect, if the right metal is used for the spike, it steals their allomantic/feruchemical power, with which the hemalurgic spike is now charged.$()$(br) Cont. Next Page$(br)", + "title": "Rules & Observations" + }, + { + "type": "text", + "text": "$(li) Spiking full mistborn and feruchemists, in my experience, has inconsistent results. The power taken is always one from the relevant quadrant of the respective table, steel spikes taking physical allomantic powers, gold spikes taking hybrid feruchemical powers, and so on. The inconsistency lies in that the specific power stolen seems to be random, although there may be pattern to the apparent randomness - further research is necessary.$(br)", + "title": "Rules & Observations" + }, + { + "type": "patchouli:crafting", + "recipe": "hemalurgy:steel_spike", + "recipe2": "hemalurgy:pewter_spike", + "text": "Spike Recipe" + } + ], + "priority": true, + "read_by_default": false, + "secret": false, + "sortnum": 0 +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/assets/cosmere/patchouli_books/guide/en_us/entries/hemalurgy/koloss.json b/src/datagen/generated/hemalurgy/assets/cosmere/patchouli_books/guide/en_us/entries/hemalurgy/koloss.json new file mode 100644 index 000000000..ad68db57d --- /dev/null +++ b/src/datagen/generated/hemalurgy/assets/cosmere/patchouli_books/guide/en_us/entries/hemalurgy/koloss.json @@ -0,0 +1,42 @@ +{ + "category": "cosmere:hemalurgy", + "icon": "hemalurgy:atium_spike", + "name": "Koloss", + "pages": [ + { + "type": "text", + "text": "Koloss are hemalurgic creations involving the use of iron spikes. This robbed the spiked individual of nearly all their humanity, instead replacing it with incredible strength and bloodthirsty rage. They should be approached with extreme caution." + }, + { + "type": "entity", + "default_rotation": -45.0, + "entity": "hemalurgy:koloss_small", + "name": "Immature Koloss", + "offset": 0.0, + "rotate": false, + "scale": 1.0 + }, + { + "type": "entity", + "default_rotation": -45.0, + "entity": "hemalurgy:koloss_medium", + "name": "Mature Koloss", + "offset": 0.0, + "rotate": false, + "scale": 1.0 + }, + { + "type": "entity", + "default_rotation": -45.0, + "entity": "hemalurgy:koloss_large", + "name": "Elder Koloss", + "offset": 0.0, + "rotate": false, + "scale": 1.0 + } + ], + "priority": false, + "read_by_default": false, + "secret": false, + "sortnum": 0 +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/assets/hemalurgy/lang/en_us.json b/src/datagen/generated/hemalurgy/assets/hemalurgy/lang/en_us.json new file mode 100644 index 000000000..05ad997a7 --- /dev/null +++ b/src/datagen/generated/hemalurgy/assets/hemalurgy/lang/en_us.json @@ -0,0 +1,96 @@ +{ + "attribute.hemalurgy.spiritweb_integrity": "Spiritweb Integrity", + "command.cosmere.eyeheight.set.success": "Set eye height to %s", + "curios.identifier.eyes": "Eye Spikes", + "curios.identifier.linchpin": "Linchpin Spike", + "curios.identifier.mental": "Mental Quadrant", + "curios.identifier.physical": "Physical Quadrant", + "curios.identifier.spiritual": "Spiritual Quadrant", + "curios.identifier.temporal": "Temporal Quadrant", + "curios.modifiers.eyes": "Eye Spikes", + "curios.modifiers.linchpin": "Linchpin Spike", + "curios.modifiers.mental": "Mental Quadrant", + "curios.modifiers.physical": "Physical Quadrant", + "curios.modifiers.spiritual": "Spiritual Quadrant", + "curios.modifiers.temporal": "Temporal Quadrant", + "death.attack.spiked": "%1$s was not careful with their hemalurgic spike", + "death.attack.spiked.player": "%1$s was not careful with their hemalurgic spike while fighting %2$s", + "entity.hemalurgy.koloss_large": "Koloss Large", + "entity.hemalurgy.koloss_medium": "Koloss Medium", + "entity.hemalurgy.koloss_small": "Koloss Small", + "entry.hemalurgic_aluminum": "Aluminum", + "entry.hemalurgic_atium": "Atium", + "entry.hemalurgic_bendalloy": "Bendalloy", + "entry.hemalurgic_brass": "Brass", + "entry.hemalurgic_bronze": "Bronze", + "entry.hemalurgic_cadmium": "Cadmium", + "entry.hemalurgic_chromium": "Chromium", + "entry.hemalurgic_copper": "Copper", + "entry.hemalurgic_duralumin": "Duralumin", + "entry.hemalurgic_electrum": "Electrum", + "entry.hemalurgic_gold": "Gold", + "entry.hemalurgic_harmonium": "Harmonium", + "entry.hemalurgic_iron": "Iron", + "entry.hemalurgic_lead": "Lead", + "entry.hemalurgic_lerasatium": "Lerasatium", + "entry.hemalurgic_lerasium": "Lerasium", + "entry.hemalurgic_malatium": "Malatium", + "entry.hemalurgic_nickel": "Nickel", + "entry.hemalurgic_nicrosil": "Nicrosil", + "entry.hemalurgic_pewter": "Pewter", + "entry.hemalurgic_silver": "Silver", + "entry.hemalurgic_steel": "Steel", + "entry.hemalurgic_tin": "Tin", + "entry.hemalurgic_zinc": "Zinc", + "item.hemalurgy.aluminum_spike": "Aluminum Spike", + "item.hemalurgy.aluminum_spike.tooltip": "Removes all powers.", + "item.hemalurgy.atium_spike": "Atium Spike", + "item.hemalurgy.atium_spike.tooltip": "Steals an Allomantic or Feruchemical power. Must be refined.", + "item.hemalurgy.bendalloy_spike": "Bendalloy Spike", + "item.hemalurgy.bendalloy_spike.tooltip": "Steals a Spiritual Feruchemical power.", + "item.hemalurgy.brass_spike": "Brass Spike", + "item.hemalurgy.brass_spike.tooltip": "Steals a cognitive feruchemical power.", + "item.hemalurgy.bronze_spike": "Bronze Spike", + "item.hemalurgy.bronze_spike.tooltip": "Steals a Mental Allomantic power.", + "item.hemalurgy.cadmium_spike": "Cadmium Spike", + "item.hemalurgy.cadmium_spike.tooltip": "Steals a Temporal Allomantic power.", + "item.hemalurgy.chromium_spike": "Chromium Spike", + "item.hemalurgy.chromium_spike.tooltip": "Might steal destiny...", + "item.hemalurgy.copper_spike": "Copper Spike", + "item.hemalurgy.copper_spike.tooltip": "Steals mental fortitude, memory, and intelligence.", + "item.hemalurgy.duralumin_spike": "Duralumin Spike", + "item.hemalurgy.duralumin_spike.tooltip": "Steals Connection/Identity.", + "item.hemalurgy.electrum_spike": "Electrum Spike", + "item.hemalurgy.electrum_spike.tooltip": "Steals an Enhancement Allomantic power.", + "item.hemalurgy.gold_spike": "Gold Spike", + "item.hemalurgy.gold_spike.tooltip": "Steals a Hybrid Feruchemical power.", + "item.hemalurgy.iron_spike": "Iron Spike", + "item.hemalurgy.iron_spike.tooltip": "Steals physical strength.", + "item.hemalurgy.koloss_large_spawn_egg": "Koloss Large Spawn Egg", + "item.hemalurgy.koloss_medium_spawn_egg": "Koloss Medium Spawn Egg", + "item.hemalurgy.koloss_small_spawn_egg": "Koloss Small Spawn Egg", + "item.hemalurgy.koloss_sword": "Koloss Sword", + "item.hemalurgy.lerasatium_spike": "Lerasatium Spike", + "item.hemalurgy.lerasatium_spike.tooltip": "Unknown...", + "item.hemalurgy.lerasium_spike": "Lerasium Spike", + "item.hemalurgy.lerasium_spike.tooltip": "Steals all powers...", + "item.hemalurgy.nicrosil_spike": "Nicrosil Spike", + "item.hemalurgy.nicrosil_spike.tooltip": "Steals Investiture.", + "item.hemalurgy.pewter_spike": "Pewter Spike", + "item.hemalurgy.pewter_spike.tooltip": "Steals a physical feruchemical power.", + "item.hemalurgy.steel_spike": "Steel Spike", + "item.hemalurgy.steel_spike.tooltip": "Steals a physical allomantic power.", + "item.hemalurgy.tin_spike": "Tin Spike", + "item.hemalurgy.tin_spike.tooltip": "Steals senses.", + "item.hemalurgy.zinc_spike": "Zinc Spike", + "item.hemalurgy.zinc_spike.tooltip": "Steals emotional fortitude.", + "tabs.hemalurgy.items": "Hemalurgy", + "tooltip.cosmere.attribute.chromium": "%s%s Luck", + "tooltip.cosmere.attribute.copper": "%s%s%% XP", + "tooltip.cosmere.attribute.duralumin": "", + "tooltip.cosmere.attribute.iron": "%s%s Attack Damage", + "tooltip.cosmere.attribute.nicrosil": "", + "tooltip.cosmere.attribute.tin": "%s%s%% Better Night Vision", + "tooltip.cosmere.attribute.zinc": "%s%s%% Emotional Fortitude", + "tooltip.cosmere.power.found": "Hemalurgic Charge:" +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/assets/hemalurgy/models/item/aluminum_spike.json b/src/datagen/generated/hemalurgy/assets/hemalurgy/models/item/aluminum_spike.json new file mode 100644 index 000000000..0c51071ed --- /dev/null +++ b/src/datagen/generated/hemalurgy/assets/hemalurgy/models/item/aluminum_spike.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hemalurgy:item/aluminum_spike" + } +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/assets/hemalurgy/models/item/atium_spike.json b/src/datagen/generated/hemalurgy/assets/hemalurgy/models/item/atium_spike.json new file mode 100644 index 000000000..22021d026 --- /dev/null +++ b/src/datagen/generated/hemalurgy/assets/hemalurgy/models/item/atium_spike.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hemalurgy:item/atium_spike" + } +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/assets/hemalurgy/models/item/bendalloy_spike.json b/src/datagen/generated/hemalurgy/assets/hemalurgy/models/item/bendalloy_spike.json new file mode 100644 index 000000000..1f2151547 --- /dev/null +++ b/src/datagen/generated/hemalurgy/assets/hemalurgy/models/item/bendalloy_spike.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hemalurgy:item/bendalloy_spike" + } +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/assets/hemalurgy/models/item/brass_spike.json b/src/datagen/generated/hemalurgy/assets/hemalurgy/models/item/brass_spike.json new file mode 100644 index 000000000..c85d75393 --- /dev/null +++ b/src/datagen/generated/hemalurgy/assets/hemalurgy/models/item/brass_spike.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hemalurgy:item/brass_spike" + } +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/assets/hemalurgy/models/item/bronze_spike.json b/src/datagen/generated/hemalurgy/assets/hemalurgy/models/item/bronze_spike.json new file mode 100644 index 000000000..a26fa1bee --- /dev/null +++ b/src/datagen/generated/hemalurgy/assets/hemalurgy/models/item/bronze_spike.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hemalurgy:item/bronze_spike" + } +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/assets/hemalurgy/models/item/cadmium_spike.json b/src/datagen/generated/hemalurgy/assets/hemalurgy/models/item/cadmium_spike.json new file mode 100644 index 000000000..7fc4bc5e3 --- /dev/null +++ b/src/datagen/generated/hemalurgy/assets/hemalurgy/models/item/cadmium_spike.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hemalurgy:item/cadmium_spike" + } +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/assets/hemalurgy/models/item/chromium_spike.json b/src/datagen/generated/hemalurgy/assets/hemalurgy/models/item/chromium_spike.json new file mode 100644 index 000000000..3db4f76b2 --- /dev/null +++ b/src/datagen/generated/hemalurgy/assets/hemalurgy/models/item/chromium_spike.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hemalurgy:item/chromium_spike" + } +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/assets/hemalurgy/models/item/copper_spike.json b/src/datagen/generated/hemalurgy/assets/hemalurgy/models/item/copper_spike.json new file mode 100644 index 000000000..accaa8d75 --- /dev/null +++ b/src/datagen/generated/hemalurgy/assets/hemalurgy/models/item/copper_spike.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hemalurgy:item/copper_spike" + } +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/assets/hemalurgy/models/item/duralumin_spike.json b/src/datagen/generated/hemalurgy/assets/hemalurgy/models/item/duralumin_spike.json new file mode 100644 index 000000000..00bdc843a --- /dev/null +++ b/src/datagen/generated/hemalurgy/assets/hemalurgy/models/item/duralumin_spike.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hemalurgy:item/duralumin_spike" + } +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/assets/hemalurgy/models/item/electrum_spike.json b/src/datagen/generated/hemalurgy/assets/hemalurgy/models/item/electrum_spike.json new file mode 100644 index 000000000..c350ea446 --- /dev/null +++ b/src/datagen/generated/hemalurgy/assets/hemalurgy/models/item/electrum_spike.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hemalurgy:item/electrum_spike" + } +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/assets/hemalurgy/models/item/gold_spike.json b/src/datagen/generated/hemalurgy/assets/hemalurgy/models/item/gold_spike.json new file mode 100644 index 000000000..f6570a2bf --- /dev/null +++ b/src/datagen/generated/hemalurgy/assets/hemalurgy/models/item/gold_spike.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hemalurgy:item/gold_spike" + } +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/assets/hemalurgy/models/item/iron_spike.json b/src/datagen/generated/hemalurgy/assets/hemalurgy/models/item/iron_spike.json new file mode 100644 index 000000000..a6f9ed118 --- /dev/null +++ b/src/datagen/generated/hemalurgy/assets/hemalurgy/models/item/iron_spike.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hemalurgy:item/iron_spike" + } +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/assets/hemalurgy/models/item/koloss_large_spawn_egg.json b/src/datagen/generated/hemalurgy/assets/hemalurgy/models/item/koloss_large_spawn_egg.json new file mode 100644 index 000000000..d1aaa9d6e --- /dev/null +++ b/src/datagen/generated/hemalurgy/assets/hemalurgy/models/item/koloss_large_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/assets/hemalurgy/models/item/koloss_medium_spawn_egg.json b/src/datagen/generated/hemalurgy/assets/hemalurgy/models/item/koloss_medium_spawn_egg.json new file mode 100644 index 000000000..d1aaa9d6e --- /dev/null +++ b/src/datagen/generated/hemalurgy/assets/hemalurgy/models/item/koloss_medium_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/assets/hemalurgy/models/item/koloss_small_spawn_egg.json b/src/datagen/generated/hemalurgy/assets/hemalurgy/models/item/koloss_small_spawn_egg.json new file mode 100644 index 000000000..d1aaa9d6e --- /dev/null +++ b/src/datagen/generated/hemalurgy/assets/hemalurgy/models/item/koloss_small_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/assets/hemalurgy/models/item/lerasatium_spike.json b/src/datagen/generated/hemalurgy/assets/hemalurgy/models/item/lerasatium_spike.json new file mode 100644 index 000000000..139278f2c --- /dev/null +++ b/src/datagen/generated/hemalurgy/assets/hemalurgy/models/item/lerasatium_spike.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hemalurgy:item/lerasatium_spike" + } +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/assets/hemalurgy/models/item/lerasium_spike.json b/src/datagen/generated/hemalurgy/assets/hemalurgy/models/item/lerasium_spike.json new file mode 100644 index 000000000..f0ed89a82 --- /dev/null +++ b/src/datagen/generated/hemalurgy/assets/hemalurgy/models/item/lerasium_spike.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hemalurgy:item/lerasium_spike" + } +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/assets/hemalurgy/models/item/nicrosil_spike.json b/src/datagen/generated/hemalurgy/assets/hemalurgy/models/item/nicrosil_spike.json new file mode 100644 index 000000000..f00b0cbd5 --- /dev/null +++ b/src/datagen/generated/hemalurgy/assets/hemalurgy/models/item/nicrosil_spike.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hemalurgy:item/nicrosil_spike" + } +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/assets/hemalurgy/models/item/pewter_spike.json b/src/datagen/generated/hemalurgy/assets/hemalurgy/models/item/pewter_spike.json new file mode 100644 index 000000000..ad3449734 --- /dev/null +++ b/src/datagen/generated/hemalurgy/assets/hemalurgy/models/item/pewter_spike.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hemalurgy:item/pewter_spike" + } +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/assets/hemalurgy/models/item/steel_spike.json b/src/datagen/generated/hemalurgy/assets/hemalurgy/models/item/steel_spike.json new file mode 100644 index 000000000..c2a04b7d4 --- /dev/null +++ b/src/datagen/generated/hemalurgy/assets/hemalurgy/models/item/steel_spike.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hemalurgy:item/steel_spike" + } +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/assets/hemalurgy/models/item/tin_spike.json b/src/datagen/generated/hemalurgy/assets/hemalurgy/models/item/tin_spike.json new file mode 100644 index 000000000..381109fcf --- /dev/null +++ b/src/datagen/generated/hemalurgy/assets/hemalurgy/models/item/tin_spike.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hemalurgy:item/tin_spike" + } +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/assets/hemalurgy/models/item/zinc_spike.json b/src/datagen/generated/hemalurgy/assets/hemalurgy/models/item/zinc_spike.json new file mode 100644 index 000000000..83af35fb4 --- /dev/null +++ b/src/datagen/generated/hemalurgy/assets/hemalurgy/models/item/zinc_spike.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hemalurgy:item/zinc_spike" + } +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/data/cosmere/tags/items/spike.json b/src/datagen/generated/hemalurgy/data/cosmere/tags/items/spike.json new file mode 100644 index 000000000..ef271a25e --- /dev/null +++ b/src/datagen/generated/hemalurgy/data/cosmere/tags/items/spike.json @@ -0,0 +1,23 @@ +{ + "values": [ + "hemalurgy:iron_spike", + "hemalurgy:steel_spike", + "hemalurgy:tin_spike", + "hemalurgy:pewter_spike", + "hemalurgy:zinc_spike", + "hemalurgy:brass_spike", + "hemalurgy:copper_spike", + "hemalurgy:bronze_spike", + "hemalurgy:aluminum_spike", + "hemalurgy:duralumin_spike", + "hemalurgy:chromium_spike", + "hemalurgy:nicrosil_spike", + "hemalurgy:cadmium_spike", + "hemalurgy:bendalloy_spike", + "hemalurgy:gold_spike", + "hemalurgy:electrum_spike", + "hemalurgy:atium_spike", + "hemalurgy:lerasium_spike", + "hemalurgy:lerasatium_spike" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/data/curios/tags/items/eyes.json b/src/datagen/generated/hemalurgy/data/curios/tags/items/eyes.json new file mode 100644 index 000000000..23fa5a7b6 --- /dev/null +++ b/src/datagen/generated/hemalurgy/data/curios/tags/items/eyes.json @@ -0,0 +1,11 @@ +{ + "values": [ + "hemalurgy:iron_spike", + "hemalurgy:steel_spike", + "hemalurgy:tin_spike", + "hemalurgy:pewter_spike", + "hemalurgy:atium_spike", + "hemalurgy:lerasium_spike", + "hemalurgy:lerasatium_spike" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/data/curios/tags/items/linchpin.json b/src/datagen/generated/hemalurgy/data/curios/tags/items/linchpin.json new file mode 100644 index 000000000..c5be88332 --- /dev/null +++ b/src/datagen/generated/hemalurgy/data/curios/tags/items/linchpin.json @@ -0,0 +1,12 @@ +{ + "values": [ + "hemalurgy:iron_spike", + "hemalurgy:steel_spike", + "hemalurgy:tin_spike", + "hemalurgy:pewter_spike", + "hemalurgy:atium_spike", + "hemalurgy:lerasium_spike", + "hemalurgy:lerasatium_spike", + "hemalurgy:gold_spike" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/data/curios/tags/items/mental.json b/src/datagen/generated/hemalurgy/data/curios/tags/items/mental.json new file mode 100644 index 000000000..75c525d5e --- /dev/null +++ b/src/datagen/generated/hemalurgy/data/curios/tags/items/mental.json @@ -0,0 +1,11 @@ +{ + "values": [ + "hemalurgy:zinc_spike", + "hemalurgy:brass_spike", + "hemalurgy:copper_spike", + "hemalurgy:bronze_spike", + "hemalurgy:atium_spike", + "hemalurgy:lerasium_spike", + "hemalurgy:lerasatium_spike" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/data/curios/tags/items/physical.json b/src/datagen/generated/hemalurgy/data/curios/tags/items/physical.json new file mode 100644 index 000000000..23fa5a7b6 --- /dev/null +++ b/src/datagen/generated/hemalurgy/data/curios/tags/items/physical.json @@ -0,0 +1,11 @@ +{ + "values": [ + "hemalurgy:iron_spike", + "hemalurgy:steel_spike", + "hemalurgy:tin_spike", + "hemalurgy:pewter_spike", + "hemalurgy:atium_spike", + "hemalurgy:lerasium_spike", + "hemalurgy:lerasatium_spike" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/data/curios/tags/items/spiritual.json b/src/datagen/generated/hemalurgy/data/curios/tags/items/spiritual.json new file mode 100644 index 000000000..f51cfcfc1 --- /dev/null +++ b/src/datagen/generated/hemalurgy/data/curios/tags/items/spiritual.json @@ -0,0 +1,11 @@ +{ + "values": [ + "hemalurgy:aluminum_spike", + "hemalurgy:duralumin_spike", + "hemalurgy:chromium_spike", + "hemalurgy:nicrosil_spike", + "hemalurgy:atium_spike", + "hemalurgy:lerasium_spike", + "hemalurgy:lerasatium_spike" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/data/curios/tags/items/temporal.json b/src/datagen/generated/hemalurgy/data/curios/tags/items/temporal.json new file mode 100644 index 000000000..a6f1ee717 --- /dev/null +++ b/src/datagen/generated/hemalurgy/data/curios/tags/items/temporal.json @@ -0,0 +1,11 @@ +{ + "values": [ + "hemalurgy:cadmium_spike", + "hemalurgy:bendalloy_spike", + "hemalurgy:gold_spike", + "hemalurgy:electrum_spike", + "hemalurgy:atium_spike", + "hemalurgy:lerasium_spike", + "hemalurgy:lerasatium_spike" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/data/hemalurgy/advancements/recipes/misc/guide_from_blasting_iron_spike.json b/src/datagen/generated/hemalurgy/data/hemalurgy/advancements/recipes/misc/guide_from_blasting_iron_spike.json new file mode 100644 index 000000000..db7c4bdf4 --- /dev/null +++ b/src/datagen/generated/hemalurgy/data/hemalurgy/advancements/recipes/misc/guide_from_blasting_iron_spike.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ore": { + "conditions": { + "items": [ + { + "items": [ + "hemalurgy:iron_spike" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hemalurgy:guide_from_blasting_iron_spike" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_ore", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "hemalurgy:guide_from_blasting_iron_spike" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/data/hemalurgy/advancements/recipes/misc/guide_from_smelting_iron_spike.json b/src/datagen/generated/hemalurgy/data/hemalurgy/advancements/recipes/misc/guide_from_smelting_iron_spike.json new file mode 100644 index 000000000..92da2baa2 --- /dev/null +++ b/src/datagen/generated/hemalurgy/data/hemalurgy/advancements/recipes/misc/guide_from_smelting_iron_spike.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ore": { + "conditions": { + "items": [ + { + "items": [ + "hemalurgy:iron_spike" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hemalurgy:guide_from_smelting_iron_spike" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_ore", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "hemalurgy:guide_from_smelting_iron_spike" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/data/hemalurgy/advancements/recipes/tools/aluminum_spike.json b/src/datagen/generated/hemalurgy/data/hemalurgy/advancements/recipes/tools/aluminum_spike.json new file mode 100644 index 000000000..61d388a89 --- /dev/null +++ b/src/datagen/generated/hemalurgy/data/hemalurgy/advancements/recipes/tools/aluminum_spike.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/aluminum" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hemalurgy:aluminum_spike" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "hemalurgy:aluminum_spike" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/data/hemalurgy/advancements/recipes/tools/atium_spike.json b/src/datagen/generated/hemalurgy/data/hemalurgy/advancements/recipes/tools/atium_spike.json new file mode 100644 index 000000000..e11711714 --- /dev/null +++ b/src/datagen/generated/hemalurgy/data/hemalurgy/advancements/recipes/tools/atium_spike.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/atium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hemalurgy:atium_spike" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "hemalurgy:atium_spike" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/data/hemalurgy/advancements/recipes/tools/bendalloy_spike.json b/src/datagen/generated/hemalurgy/data/hemalurgy/advancements/recipes/tools/bendalloy_spike.json new file mode 100644 index 000000000..b16b83571 --- /dev/null +++ b/src/datagen/generated/hemalurgy/data/hemalurgy/advancements/recipes/tools/bendalloy_spike.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/bendalloy" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hemalurgy:bendalloy_spike" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "hemalurgy:bendalloy_spike" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/data/hemalurgy/advancements/recipes/tools/brass_spike.json b/src/datagen/generated/hemalurgy/data/hemalurgy/advancements/recipes/tools/brass_spike.json new file mode 100644 index 000000000..0d0f685de --- /dev/null +++ b/src/datagen/generated/hemalurgy/data/hemalurgy/advancements/recipes/tools/brass_spike.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/brass" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hemalurgy:brass_spike" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "hemalurgy:brass_spike" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/data/hemalurgy/advancements/recipes/tools/bronze_spike.json b/src/datagen/generated/hemalurgy/data/hemalurgy/advancements/recipes/tools/bronze_spike.json new file mode 100644 index 000000000..be3ab6afb --- /dev/null +++ b/src/datagen/generated/hemalurgy/data/hemalurgy/advancements/recipes/tools/bronze_spike.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/bronze" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hemalurgy:bronze_spike" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "hemalurgy:bronze_spike" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/data/hemalurgy/advancements/recipes/tools/cadmium_spike.json b/src/datagen/generated/hemalurgy/data/hemalurgy/advancements/recipes/tools/cadmium_spike.json new file mode 100644 index 000000000..05747bea0 --- /dev/null +++ b/src/datagen/generated/hemalurgy/data/hemalurgy/advancements/recipes/tools/cadmium_spike.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/cadmium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hemalurgy:cadmium_spike" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "hemalurgy:cadmium_spike" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/data/hemalurgy/advancements/recipes/tools/chromium_spike.json b/src/datagen/generated/hemalurgy/data/hemalurgy/advancements/recipes/tools/chromium_spike.json new file mode 100644 index 000000000..77323f1ed --- /dev/null +++ b/src/datagen/generated/hemalurgy/data/hemalurgy/advancements/recipes/tools/chromium_spike.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/chromium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hemalurgy:chromium_spike" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "hemalurgy:chromium_spike" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/data/hemalurgy/advancements/recipes/tools/copper_spike.json b/src/datagen/generated/hemalurgy/data/hemalurgy/advancements/recipes/tools/copper_spike.json new file mode 100644 index 000000000..50e475e89 --- /dev/null +++ b/src/datagen/generated/hemalurgy/data/hemalurgy/advancements/recipes/tools/copper_spike.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/copper" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hemalurgy:copper_spike" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "hemalurgy:copper_spike" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/data/hemalurgy/advancements/recipes/tools/duralumin_spike.json b/src/datagen/generated/hemalurgy/data/hemalurgy/advancements/recipes/tools/duralumin_spike.json new file mode 100644 index 000000000..5214cfcba --- /dev/null +++ b/src/datagen/generated/hemalurgy/data/hemalurgy/advancements/recipes/tools/duralumin_spike.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/duralumin" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hemalurgy:duralumin_spike" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "hemalurgy:duralumin_spike" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/data/hemalurgy/advancements/recipes/tools/electrum_spike.json b/src/datagen/generated/hemalurgy/data/hemalurgy/advancements/recipes/tools/electrum_spike.json new file mode 100644 index 000000000..5f58414ee --- /dev/null +++ b/src/datagen/generated/hemalurgy/data/hemalurgy/advancements/recipes/tools/electrum_spike.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/electrum" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hemalurgy:electrum_spike" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "hemalurgy:electrum_spike" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/data/hemalurgy/advancements/recipes/tools/gold_spike.json b/src/datagen/generated/hemalurgy/data/hemalurgy/advancements/recipes/tools/gold_spike.json new file mode 100644 index 000000000..ec5664682 --- /dev/null +++ b/src/datagen/generated/hemalurgy/data/hemalurgy/advancements/recipes/tools/gold_spike.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/gold" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hemalurgy:gold_spike" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "hemalurgy:gold_spike" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/data/hemalurgy/advancements/recipes/tools/iron_spike.json b/src/datagen/generated/hemalurgy/data/hemalurgy/advancements/recipes/tools/iron_spike.json new file mode 100644 index 000000000..57b3d0a9e --- /dev/null +++ b/src/datagen/generated/hemalurgy/data/hemalurgy/advancements/recipes/tools/iron_spike.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/iron" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hemalurgy:iron_spike" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "hemalurgy:iron_spike" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/data/hemalurgy/advancements/recipes/tools/lerasatium_spike.json b/src/datagen/generated/hemalurgy/data/hemalurgy/advancements/recipes/tools/lerasatium_spike.json new file mode 100644 index 000000000..0a604af02 --- /dev/null +++ b/src/datagen/generated/hemalurgy/data/hemalurgy/advancements/recipes/tools/lerasatium_spike.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/lerasatium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hemalurgy:lerasatium_spike" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "hemalurgy:lerasatium_spike" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/data/hemalurgy/advancements/recipes/tools/lerasium_spike.json b/src/datagen/generated/hemalurgy/data/hemalurgy/advancements/recipes/tools/lerasium_spike.json new file mode 100644 index 000000000..51e516bae --- /dev/null +++ b/src/datagen/generated/hemalurgy/data/hemalurgy/advancements/recipes/tools/lerasium_spike.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/lerasium" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hemalurgy:lerasium_spike" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "hemalurgy:lerasium_spike" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/data/hemalurgy/advancements/recipes/tools/nicrosil_spike.json b/src/datagen/generated/hemalurgy/data/hemalurgy/advancements/recipes/tools/nicrosil_spike.json new file mode 100644 index 000000000..260e69f48 --- /dev/null +++ b/src/datagen/generated/hemalurgy/data/hemalurgy/advancements/recipes/tools/nicrosil_spike.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/nicrosil" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hemalurgy:nicrosil_spike" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "hemalurgy:nicrosil_spike" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/data/hemalurgy/advancements/recipes/tools/pewter_spike.json b/src/datagen/generated/hemalurgy/data/hemalurgy/advancements/recipes/tools/pewter_spike.json new file mode 100644 index 000000000..b73a7e073 --- /dev/null +++ b/src/datagen/generated/hemalurgy/data/hemalurgy/advancements/recipes/tools/pewter_spike.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/pewter" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hemalurgy:pewter_spike" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "hemalurgy:pewter_spike" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/data/hemalurgy/advancements/recipes/tools/steel_spike.json b/src/datagen/generated/hemalurgy/data/hemalurgy/advancements/recipes/tools/steel_spike.json new file mode 100644 index 000000000..958fa2414 --- /dev/null +++ b/src/datagen/generated/hemalurgy/data/hemalurgy/advancements/recipes/tools/steel_spike.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/steel" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hemalurgy:steel_spike" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "hemalurgy:steel_spike" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/data/hemalurgy/advancements/recipes/tools/tin_spike.json b/src/datagen/generated/hemalurgy/data/hemalurgy/advancements/recipes/tools/tin_spike.json new file mode 100644 index 000000000..b513c298b --- /dev/null +++ b/src/datagen/generated/hemalurgy/data/hemalurgy/advancements/recipes/tools/tin_spike.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/tin" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hemalurgy:tin_spike" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "hemalurgy:tin_spike" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/data/hemalurgy/advancements/recipes/tools/zinc_spike.json b/src/datagen/generated/hemalurgy/data/hemalurgy/advancements/recipes/tools/zinc_spike.json new file mode 100644 index 000000000..5adcb9114 --- /dev/null +++ b/src/datagen/generated/hemalurgy/data/hemalurgy/advancements/recipes/tools/zinc_spike.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:ingots/zinc" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hemalurgy:zinc_spike" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "hemalurgy:zinc_spike" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/data/hemalurgy/curios/entities/hemalurgists.json b/src/datagen/generated/hemalurgy/data/hemalurgy/curios/entities/hemalurgists.json new file mode 100644 index 000000000..61647c56e --- /dev/null +++ b/src/datagen/generated/hemalurgy/data/hemalurgy/curios/entities/hemalurgists.json @@ -0,0 +1,14 @@ +{ + "entities": [ + "minecraft:player", + "minecraft:armor_stand" + ], + "slots": [ + "linchpin", + "spiritual", + "mental", + "physical", + "eyes", + "temporal" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/data/hemalurgy/curios/slots/eyes.json b/src/datagen/generated/hemalurgy/data/hemalurgy/curios/slots/eyes.json new file mode 100644 index 000000000..5288f5746 --- /dev/null +++ b/src/datagen/generated/hemalurgy/data/hemalurgy/curios/slots/eyes.json @@ -0,0 +1,7 @@ +{ + "add_cosmetic": true, + "drop_rule": "ALWAYS_KEEP", + "icon": "minecraft:item/empty_armor_slot_helmet", + "order": 0, + "size": 2 +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/data/hemalurgy/curios/slots/linchpin.json b/src/datagen/generated/hemalurgy/data/hemalurgy/curios/slots/linchpin.json new file mode 100644 index 000000000..53ea7a44b --- /dev/null +++ b/src/datagen/generated/hemalurgy/data/hemalurgy/curios/slots/linchpin.json @@ -0,0 +1,7 @@ +{ + "add_cosmetic": true, + "drop_rule": "ALWAYS_KEEP", + "icon": "curios:slot/spike_icon", + "order": 1, + "size": 1 +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/data/hemalurgy/curios/slots/mental.json b/src/datagen/generated/hemalurgy/data/hemalurgy/curios/slots/mental.json new file mode 100644 index 000000000..40a174247 --- /dev/null +++ b/src/datagen/generated/hemalurgy/data/hemalurgy/curios/slots/mental.json @@ -0,0 +1,7 @@ +{ + "add_cosmetic": true, + "drop_rule": "ALWAYS_KEEP", + "icon": "curios:slot/spike_icon", + "order": 502, + "size": 10 +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/data/hemalurgy/curios/slots/physical.json b/src/datagen/generated/hemalurgy/data/hemalurgy/curios/slots/physical.json new file mode 100644 index 000000000..f6059a0e1 --- /dev/null +++ b/src/datagen/generated/hemalurgy/data/hemalurgy/curios/slots/physical.json @@ -0,0 +1,7 @@ +{ + "add_cosmetic": true, + "drop_rule": "ALWAYS_KEEP", + "icon": "curios:slot/spike_icon", + "order": 501, + "size": 8 +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/data/hemalurgy/curios/slots/spiritual.json b/src/datagen/generated/hemalurgy/data/hemalurgy/curios/slots/spiritual.json new file mode 100644 index 000000000..6cdc6560c --- /dev/null +++ b/src/datagen/generated/hemalurgy/data/hemalurgy/curios/slots/spiritual.json @@ -0,0 +1,7 @@ +{ + "add_cosmetic": true, + "drop_rule": "ALWAYS_KEEP", + "icon": "curios:slot/spike_icon", + "order": 503, + "size": 4 +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/data/hemalurgy/curios/slots/temporal.json b/src/datagen/generated/hemalurgy/data/hemalurgy/curios/slots/temporal.json new file mode 100644 index 000000000..a4d0c64c6 --- /dev/null +++ b/src/datagen/generated/hemalurgy/data/hemalurgy/curios/slots/temporal.json @@ -0,0 +1,7 @@ +{ + "add_cosmetic": true, + "drop_rule": "ALWAYS_KEEP", + "icon": "curios:slot/spike_icon", + "order": 504, + "size": 16 +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/data/hemalurgy/recipes/aluminum_spike.json b/src/datagen/generated/hemalurgy/data/hemalurgy/recipes/aluminum_spike.json new file mode 100644 index 000000000..ed97b8258 --- /dev/null +++ b/src/datagen/generated/hemalurgy/data/hemalurgy/recipes/aluminum_spike.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "spike", + "key": { + "X": { + "tag": "forge:ingots/aluminum" + } + }, + "pattern": [ + "X", + "X" + ], + "result": { + "item": "hemalurgy:aluminum_spike" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/data/hemalurgy/recipes/atium_spike.json b/src/datagen/generated/hemalurgy/data/hemalurgy/recipes/atium_spike.json new file mode 100644 index 000000000..e70b94d19 --- /dev/null +++ b/src/datagen/generated/hemalurgy/data/hemalurgy/recipes/atium_spike.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "spike", + "key": { + "X": { + "tag": "forge:ingots/atium" + } + }, + "pattern": [ + "X", + "X" + ], + "result": { + "item": "hemalurgy:atium_spike" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/data/hemalurgy/recipes/bendalloy_spike.json b/src/datagen/generated/hemalurgy/data/hemalurgy/recipes/bendalloy_spike.json new file mode 100644 index 000000000..ae4b17341 --- /dev/null +++ b/src/datagen/generated/hemalurgy/data/hemalurgy/recipes/bendalloy_spike.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "spike", + "key": { + "X": { + "tag": "forge:ingots/bendalloy" + } + }, + "pattern": [ + "X", + "X" + ], + "result": { + "item": "hemalurgy:bendalloy_spike" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/data/hemalurgy/recipes/brass_spike.json b/src/datagen/generated/hemalurgy/data/hemalurgy/recipes/brass_spike.json new file mode 100644 index 000000000..ee3187392 --- /dev/null +++ b/src/datagen/generated/hemalurgy/data/hemalurgy/recipes/brass_spike.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "spike", + "key": { + "X": { + "tag": "forge:ingots/brass" + } + }, + "pattern": [ + "X", + "X" + ], + "result": { + "item": "hemalurgy:brass_spike" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/data/hemalurgy/recipes/bronze_spike.json b/src/datagen/generated/hemalurgy/data/hemalurgy/recipes/bronze_spike.json new file mode 100644 index 000000000..bb10b6869 --- /dev/null +++ b/src/datagen/generated/hemalurgy/data/hemalurgy/recipes/bronze_spike.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "spike", + "key": { + "X": { + "tag": "forge:ingots/bronze" + } + }, + "pattern": [ + "X", + "X" + ], + "result": { + "item": "hemalurgy:bronze_spike" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/data/hemalurgy/recipes/cadmium_spike.json b/src/datagen/generated/hemalurgy/data/hemalurgy/recipes/cadmium_spike.json new file mode 100644 index 000000000..926cd85c1 --- /dev/null +++ b/src/datagen/generated/hemalurgy/data/hemalurgy/recipes/cadmium_spike.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "spike", + "key": { + "X": { + "tag": "forge:ingots/cadmium" + } + }, + "pattern": [ + "X", + "X" + ], + "result": { + "item": "hemalurgy:cadmium_spike" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/data/hemalurgy/recipes/chromium_spike.json b/src/datagen/generated/hemalurgy/data/hemalurgy/recipes/chromium_spike.json new file mode 100644 index 000000000..11296590e --- /dev/null +++ b/src/datagen/generated/hemalurgy/data/hemalurgy/recipes/chromium_spike.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "spike", + "key": { + "X": { + "tag": "forge:ingots/chromium" + } + }, + "pattern": [ + "X", + "X" + ], + "result": { + "item": "hemalurgy:chromium_spike" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/data/hemalurgy/recipes/copper_spike.json b/src/datagen/generated/hemalurgy/data/hemalurgy/recipes/copper_spike.json new file mode 100644 index 000000000..fb36af745 --- /dev/null +++ b/src/datagen/generated/hemalurgy/data/hemalurgy/recipes/copper_spike.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "spike", + "key": { + "X": { + "tag": "forge:ingots/copper" + } + }, + "pattern": [ + "X", + "X" + ], + "result": { + "item": "hemalurgy:copper_spike" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/data/hemalurgy/recipes/duralumin_spike.json b/src/datagen/generated/hemalurgy/data/hemalurgy/recipes/duralumin_spike.json new file mode 100644 index 000000000..cc73cf6cb --- /dev/null +++ b/src/datagen/generated/hemalurgy/data/hemalurgy/recipes/duralumin_spike.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "spike", + "key": { + "X": { + "tag": "forge:ingots/duralumin" + } + }, + "pattern": [ + "X", + "X" + ], + "result": { + "item": "hemalurgy:duralumin_spike" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/data/hemalurgy/recipes/electrum_spike.json b/src/datagen/generated/hemalurgy/data/hemalurgy/recipes/electrum_spike.json new file mode 100644 index 000000000..d620e367b --- /dev/null +++ b/src/datagen/generated/hemalurgy/data/hemalurgy/recipes/electrum_spike.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "spike", + "key": { + "X": { + "tag": "forge:ingots/electrum" + } + }, + "pattern": [ + "X", + "X" + ], + "result": { + "item": "hemalurgy:electrum_spike" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/data/hemalurgy/recipes/gold_spike.json b/src/datagen/generated/hemalurgy/data/hemalurgy/recipes/gold_spike.json new file mode 100644 index 000000000..2ee5223e7 --- /dev/null +++ b/src/datagen/generated/hemalurgy/data/hemalurgy/recipes/gold_spike.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "spike", + "key": { + "X": { + "tag": "forge:ingots/gold" + } + }, + "pattern": [ + "X", + "X" + ], + "result": { + "item": "hemalurgy:gold_spike" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/data/hemalurgy/recipes/guide_from_blasting_iron_spike.json b/src/datagen/generated/hemalurgy/data/hemalurgy/recipes/guide_from_blasting_iron_spike.json new file mode 100644 index 000000000..2db6609cf --- /dev/null +++ b/src/datagen/generated/hemalurgy/data/hemalurgy/recipes/guide_from_blasting_iron_spike.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:blasting", + "category": "misc", + "cookingtime": 100, + "experience": 1.0, + "ingredient": { + "item": "hemalurgy:iron_spike" + }, + "result": "cosmere:guide" +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/data/hemalurgy/recipes/guide_from_smelting_iron_spike.json b/src/datagen/generated/hemalurgy/data/hemalurgy/recipes/guide_from_smelting_iron_spike.json new file mode 100644 index 000000000..90fa0a932 --- /dev/null +++ b/src/datagen/generated/hemalurgy/data/hemalurgy/recipes/guide_from_smelting_iron_spike.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:smelting", + "category": "misc", + "cookingtime": 200, + "experience": 1.0, + "ingredient": { + "item": "hemalurgy:iron_spike" + }, + "result": "cosmere:guide" +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/data/hemalurgy/recipes/iron_spike.json b/src/datagen/generated/hemalurgy/data/hemalurgy/recipes/iron_spike.json new file mode 100644 index 000000000..dedffcb4f --- /dev/null +++ b/src/datagen/generated/hemalurgy/data/hemalurgy/recipes/iron_spike.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "spike", + "key": { + "X": { + "tag": "forge:ingots/iron" + } + }, + "pattern": [ + "X", + "X" + ], + "result": { + "item": "hemalurgy:iron_spike" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/data/hemalurgy/recipes/lerasatium_spike.json b/src/datagen/generated/hemalurgy/data/hemalurgy/recipes/lerasatium_spike.json new file mode 100644 index 000000000..726cac1be --- /dev/null +++ b/src/datagen/generated/hemalurgy/data/hemalurgy/recipes/lerasatium_spike.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "spike", + "key": { + "X": { + "tag": "forge:ingots/lerasatium" + } + }, + "pattern": [ + "X", + "X" + ], + "result": { + "item": "hemalurgy:lerasatium_spike" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/data/hemalurgy/recipes/lerasium_spike.json b/src/datagen/generated/hemalurgy/data/hemalurgy/recipes/lerasium_spike.json new file mode 100644 index 000000000..ef7811ea0 --- /dev/null +++ b/src/datagen/generated/hemalurgy/data/hemalurgy/recipes/lerasium_spike.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "spike", + "key": { + "X": { + "tag": "forge:ingots/lerasium" + } + }, + "pattern": [ + "X", + "X" + ], + "result": { + "item": "hemalurgy:lerasium_spike" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/data/hemalurgy/recipes/nicrosil_spike.json b/src/datagen/generated/hemalurgy/data/hemalurgy/recipes/nicrosil_spike.json new file mode 100644 index 000000000..0b47167fc --- /dev/null +++ b/src/datagen/generated/hemalurgy/data/hemalurgy/recipes/nicrosil_spike.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "spike", + "key": { + "X": { + "tag": "forge:ingots/nicrosil" + } + }, + "pattern": [ + "X", + "X" + ], + "result": { + "item": "hemalurgy:nicrosil_spike" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/data/hemalurgy/recipes/pewter_spike.json b/src/datagen/generated/hemalurgy/data/hemalurgy/recipes/pewter_spike.json new file mode 100644 index 000000000..432fc7f0f --- /dev/null +++ b/src/datagen/generated/hemalurgy/data/hemalurgy/recipes/pewter_spike.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "spike", + "key": { + "X": { + "tag": "forge:ingots/pewter" + } + }, + "pattern": [ + "X", + "X" + ], + "result": { + "item": "hemalurgy:pewter_spike" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/data/hemalurgy/recipes/steel_spike.json b/src/datagen/generated/hemalurgy/data/hemalurgy/recipes/steel_spike.json new file mode 100644 index 000000000..2dd4bfd76 --- /dev/null +++ b/src/datagen/generated/hemalurgy/data/hemalurgy/recipes/steel_spike.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "spike", + "key": { + "X": { + "tag": "forge:ingots/steel" + } + }, + "pattern": [ + "X", + "X" + ], + "result": { + "item": "hemalurgy:steel_spike" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/data/hemalurgy/recipes/tin_spike.json b/src/datagen/generated/hemalurgy/data/hemalurgy/recipes/tin_spike.json new file mode 100644 index 000000000..fda586538 --- /dev/null +++ b/src/datagen/generated/hemalurgy/data/hemalurgy/recipes/tin_spike.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "spike", + "key": { + "X": { + "tag": "forge:ingots/tin" + } + }, + "pattern": [ + "X", + "X" + ], + "result": { + "item": "hemalurgy:tin_spike" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/hemalurgy/data/hemalurgy/recipes/zinc_spike.json b/src/datagen/generated/hemalurgy/data/hemalurgy/recipes/zinc_spike.json new file mode 100644 index 000000000..1c08bd4df --- /dev/null +++ b/src/datagen/generated/hemalurgy/data/hemalurgy/recipes/zinc_spike.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "group": "spike", + "key": { + "X": { + "tag": "forge:ingots/zinc" + } + }, + "pattern": [ + "X", + "X" + ], + "result": { + "item": "hemalurgy:zinc_spike" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/sandmastery/.cache/053b3b118f91e8b4c0c2e2484a0c644a0c507099 b/src/datagen/generated/sandmastery/.cache/053b3b118f91e8b4c0c2e2484a0c644a0c507099 new file mode 100644 index 000000000..f423487d3 --- /dev/null +++ b/src/datagen/generated/sandmastery/.cache/053b3b118f91e8b4c0c2e2484a0c644a0c507099 @@ -0,0 +1,6 @@ +// 1.20.1 2024-10-09T13:22:13.5113112 Tags: sandmastery +6205c5ba49e68fd4a380fc1fa0a23dfaf1abf1ed data/curios/tags/items/belt.json +e2c7dd5d476d3dd82874cf633080dada23af4e39 data/minecraft/tags/blocks/mineable/axe.json +d71e1c86ea323cc9e10e8f6e6d61282a39ad0d78 data/minecraft/tags/blocks/mineable/pickaxe.json +ba6089c769031193100293d0e1ea9b8cfa26d324 data/minecraft/tags/blocks/mineable/shovel.json +ba6089c769031193100293d0e1ea9b8cfa26d324 data/minecraft/tags/blocks/sand.json diff --git a/src/datagen/generated/sandmastery/.cache/3b2a435655541c92d690318b57013336949ed348 b/src/datagen/generated/sandmastery/.cache/3b2a435655541c92d690318b57013336949ed348 new file mode 100644 index 000000000..4af0340c4 --- /dev/null +++ b/src/datagen/generated/sandmastery/.cache/3b2a435655541c92d690318b57013336949ed348 @@ -0,0 +1,7 @@ +// 1.20.1 2024-10-09T13:38:50.3827137 PatchouliGeneration +d4771d73d38f6e1c6d6980c5ed56d11dddcb3f61 assets/cosmere/patchouli_books/guide/en_us/categories/sandmastery.json +c6bb595d95b73133724fe97bde7e671baa336525 assets/cosmere/patchouli_books/guide/en_us/entries/sandmastery/qido.json +8329a991b86a27abcc9f10aa07b41e0e276c52d8 assets/cosmere/patchouli_books/guide/en_us/entries/sandmastery/sandmastery_basics.json +d59855771168beaa3cc8075a9f049a67f6e0a704 assets/cosmere/patchouli_books/guide/en_us/entries/sandmastery/sand_jar.json +fec6b64740f851af7757b9b917236d47bba73397 assets/cosmere/patchouli_books/guide/en_us/entries/sandmastery/sand_pouch.json +b13afbb7d55e5ca2304454b746503b7d40bedccc assets/cosmere/patchouli_books/guide/en_us/entries/sandmastery/sand_spreader.json diff --git a/src/datagen/generated/sandmastery/.cache/59eb3dbb5f86130e09b3c62d89b9525ee01cf52d b/src/datagen/generated/sandmastery/.cache/59eb3dbb5f86130e09b3c62d89b9525ee01cf52d new file mode 100644 index 000000000..0ce84f9f9 --- /dev/null +++ b/src/datagen/generated/sandmastery/.cache/59eb3dbb5f86130e09b3c62d89b9525ee01cf52d @@ -0,0 +1,8 @@ +// 1.20.1 2024-10-09T13:22:13.5113112 Loot Tables +1686aa213ebffefac29d0d9ea580e131359a4525 data/sandmastery/loot_tables/blocks/charged_taldain_sand.json +155d61477e31d683b045173b2441f2f4bb4317f7 data/sandmastery/loot_tables/blocks/charged_taldain_sand_layer.json +19ae457431c5a58439ea662bf0d9c7c5040e256c data/sandmastery/loot_tables/blocks/sand_jar_block.json +9c568b900e26d6efaad17a1f1293914132cfb6b4 data/sandmastery/loot_tables/blocks/sand_spreading_tub.json +8ad723a0359e4d63ce1016202819e7caf4a3db1b data/sandmastery/loot_tables/blocks/taldain_sand.json +ea6b291e6d76187961999fafd495950f00c0c6f1 data/sandmastery/loot_tables/blocks/taldain_sand_layer.json +5cbecbb1808908186276061f31a44bc20b155b6e data/sandmastery/loot_tables/blocks/temporary_sand_block.json diff --git a/src/datagen/generated/sandmastery/.cache/70bedf271fa6bf3021ea6203463defec8ff35d9e b/src/datagen/generated/sandmastery/.cache/70bedf271fa6bf3021ea6203463defec8ff35d9e new file mode 100644 index 000000000..143cd1893 --- /dev/null +++ b/src/datagen/generated/sandmastery/.cache/70bedf271fa6bf3021ea6203463defec8ff35d9e @@ -0,0 +1,4 @@ +// 1.20.1 2024-10-09T13:22:13.5123127 Item Models: sandmastery +0ce803e6b78b24b7c26b25096a8a67ae2be4f229 assets/sandmastery/models/item/jar.json +710a49a979abf527c182fee1215de7f3a2b4c07e assets/sandmastery/models/item/qido.json +cf8d0e920c9b273201abb280fbb7a1d442f715aa assets/sandmastery/models/item/sand_pouch.json diff --git a/src/datagen/generated/sandmastery/.cache/9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e b/src/datagen/generated/sandmastery/.cache/9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e new file mode 100644 index 000000000..d305a8bf0 --- /dev/null +++ b/src/datagen/generated/sandmastery/.cache/9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e @@ -0,0 +1,13 @@ +// 1.20.1 2024-10-09T13:22:13.5123127 Recipes +f38c73d4b6ba8b751be2f8df20e596a490083f23 data/sandmastery/advancements/recipes/decorations/sand_jar_block.json +b2d268ce5608d9b36176f30e9fec1e5cb85e5e61 data/sandmastery/advancements/recipes/decorations/sand_spreading_tub.json +3ef3f8320c7fc971a67df645238dd79b05ffcc19 data/sandmastery/advancements/recipes/redstone/jar.json +67bac790c607520218ef45e186dd933596d70ebc data/sandmastery/advancements/recipes/redstone/sand_jar.json +315bd37ecf3e7a21b9e093f9d3e5ccd56a9a005e data/sandmastery/advancements/recipes/tools/qido.json +8d1343fd0792cb1173e06cf88ca6b3fe8a912459 data/sandmastery/advancements/recipes/tools/sand_pouch.json +1a1e92195e7ef7196b4cf05ed5055588535c0b98 data/sandmastery/recipes/jar.json +631f351444422abd8c1b4f58b0338ade6de7300e data/sandmastery/recipes/qido.json +dd7eba6eea0fb012355983c6d0a34ecffbd180dd data/sandmastery/recipes/sand_jar.json +3748e78858b9a3008749268e8c07f782998d46d8 data/sandmastery/recipes/sand_jar_block.json +17ff1d7a10324498290d8b35e28432485ea2e9a5 data/sandmastery/recipes/sand_pouch.json +4dfbc8477c492b7644587e1dccfc9ae7959d2a57 data/sandmastery/recipes/sand_spreading_tub.json diff --git a/src/datagen/generated/sandmastery/.cache/c622617f6fabf890a00b9275cd5f643584a8a2c8 b/src/datagen/generated/sandmastery/.cache/c622617f6fabf890a00b9275cd5f643584a8a2c8 new file mode 100644 index 000000000..2d8f948b9 --- /dev/null +++ b/src/datagen/generated/sandmastery/.cache/c622617f6fabf890a00b9275cd5f643584a8a2c8 @@ -0,0 +1,2 @@ +// 1.20.1 2025-11-27T20:11:46.572699 Languages: en_us +e7c15b3d2ea2d984e28d83c6e143c6869269eed4 assets/sandmastery/lang/en_us.json diff --git a/src/datagen/generated/sandmastery/assets/cosmere/patchouli_books/guide/en_us/categories/sandmastery.json b/src/datagen/generated/sandmastery/assets/cosmere/patchouli_books/guide/en_us/categories/sandmastery.json new file mode 100644 index 000000000..75fc808a6 --- /dev/null +++ b/src/datagen/generated/sandmastery/assets/cosmere/patchouli_books/guide/en_us/categories/sandmastery.json @@ -0,0 +1,7 @@ +{ + "description": "A system of Investiture from Tal'Dain, Possibly involving a Luhel Bond. (WIP)", + "icon": "sandmastery:qido", + "name": "Sandmastery", + "secret": false, + "sortnum": 4 +} \ No newline at end of file diff --git a/src/datagen/generated/sandmastery/assets/cosmere/patchouli_books/guide/en_us/entries/sandmastery/qido.json b/src/datagen/generated/sandmastery/assets/cosmere/patchouli_books/guide/en_us/entries/sandmastery/qido.json new file mode 100644 index 000000000..800d54321 --- /dev/null +++ b/src/datagen/generated/sandmastery/assets/cosmere/patchouli_books/guide/en_us/entries/sandmastery/qido.json @@ -0,0 +1,19 @@ +{ + "category": "cosmere:sandmastery", + "icon": "sandmastery:qido", + "name": "Qido", + "pages": [ + { + "type": "patchouli:crafting", + "recipe": "sandmastery:qido" + }, + { + "type": "text", + "text": "As any good Mastrell knows, hydration is one of the most important aspects of sand mastery. The Qido is the most common way of carrying water on dayside. Crouch ($(k:key.sneak)$()) and use ($(k:key.use)$()) on a water source to fill it, and use it like any other bottle to drink from it." + } + ], + "priority": false, + "read_by_default": false, + "secret": false, + "sortnum": 0 +} \ No newline at end of file diff --git a/src/datagen/generated/sandmastery/assets/cosmere/patchouli_books/guide/en_us/entries/sandmastery/sand_jar.json b/src/datagen/generated/sandmastery/assets/cosmere/patchouli_books/guide/en_us/entries/sandmastery/sand_jar.json new file mode 100644 index 000000000..0b831cc55 --- /dev/null +++ b/src/datagen/generated/sandmastery/assets/cosmere/patchouli_books/guide/en_us/entries/sandmastery/sand_jar.json @@ -0,0 +1,19 @@ +{ + "category": "cosmere:sandmastery", + "icon": "sandmastery:sand_jar", + "name": "Sand Jar", + "pages": [ + { + "type": "text", + "text": "As mentioned previously, the sand from Tal'Dain reacts to physical investiture, which means that it can be measured. Common technology on this planet seems to use a substance called 'redstone' in order to power their fabrials. A device like the 'Comparator' Can measure the investiture in the sand jar, and release a redstone signal." + }, + { + "type": "text", + "text": "You can place the sand jar item on the ground as a block by crouching (holding $(k:key.sneak)$()) while placing, or you can get the sand out by placing normally. Removing the sand is how you get the starting sand for the sand spreader." + } + ], + "priority": false, + "read_by_default": false, + "secret": false, + "sortnum": 0 +} \ No newline at end of file diff --git a/src/datagen/generated/sandmastery/assets/cosmere/patchouli_books/guide/en_us/entries/sandmastery/sand_pouch.json b/src/datagen/generated/sandmastery/assets/cosmere/patchouli_books/guide/en_us/entries/sandmastery/sand_pouch.json new file mode 100644 index 000000000..2ef7840f3 --- /dev/null +++ b/src/datagen/generated/sandmastery/assets/cosmere/patchouli_books/guide/en_us/entries/sandmastery/sand_pouch.json @@ -0,0 +1,19 @@ +{ + "category": "cosmere:sandmastery", + "icon": "sandmastery:sand_pouch", + "name": "Sand Pouch", + "pages": [ + { + "type": "text", + "text": "The sand pouch is the only way to ensure you always have the required sand on you, something about this world seems to prevent using sand that is laying in the world. ((In world sand usage is WIP)) It has also been noted that the pouch is seemingly bottomless, nearly impossible to tell how much sand is inside. ((Known bug: sand inside the pouch is invisible upon re-opening the pouch on a server))" + }, + { + "type": "patchouli:crafting", + "recipe": "sandmastery:sand_pouch" + } + ], + "priority": false, + "read_by_default": false, + "secret": false, + "sortnum": 0 +} \ No newline at end of file diff --git a/src/datagen/generated/sandmastery/assets/cosmere/patchouli_books/guide/en_us/entries/sandmastery/sand_spreader.json b/src/datagen/generated/sandmastery/assets/cosmere/patchouli_books/guide/en_us/entries/sandmastery/sand_spreader.json new file mode 100644 index 000000000..ad13c23e7 --- /dev/null +++ b/src/datagen/generated/sandmastery/assets/cosmere/patchouli_books/guide/en_us/entries/sandmastery/sand_spreader.json @@ -0,0 +1,16 @@ +{ + "category": "cosmere:sandmastery", + "icon": "sandmastery:sand_spreading_tub", + "name": "Sand Spreader", + "pages": [ + { + "type": "patchouli:crafting", + "recipe": "sandmastery:sand_spreading_tub", + "text": "While you can grow the micro-organisms that contribute to sand mastery in the world, the sand spreading tub creates optimal conditions for the growth, greatly speeding up the process." + } + ], + "priority": false, + "read_by_default": false, + "secret": false, + "sortnum": 0 +} \ No newline at end of file diff --git a/src/datagen/generated/sandmastery/assets/cosmere/patchouli_books/guide/en_us/entries/sandmastery/sandmastery_basics.json b/src/datagen/generated/sandmastery/assets/cosmere/patchouli_books/guide/en_us/entries/sandmastery/sandmastery_basics.json new file mode 100644 index 000000000..da7a6b62a --- /dev/null +++ b/src/datagen/generated/sandmastery/assets/cosmere/patchouli_books/guide/en_us/entries/sandmastery/sandmastery_basics.json @@ -0,0 +1,21 @@ +{ + "category": "cosmere:sandmastery", + "icon": "sandmastery:qido", + "name": "Sandmastery Basics", + "pages": [ + { + "type": "text", + "text": "Here is where I shall explain Sand Mastery, a system of Investiture native to Taldain. The sand from Taldain is rare to find on this planet- perhaps delving into abandoned pyramids will aid in your search. While normally black, Whenever in the presence of physical investiture- Allomancy and Surgebinding, to name a few- the sand will turn white and spread to nearby sand.This has been observed to be most consistent in a sand spreading tub.", + "title": "Sand Mastery (For Dummies)" + }, + { + "type": "text", + "text": "To get started, you will need to be hydrated. You can accomplish this simply by drinking water bottles, but to hold even more water on you at a time consider looking into a Qido. You will also need to keep sand on you, for that you will need to get a sand pouch, the more sand you put inside, the more charge it will hold.And finally, you will need to charge the sand inside the jar. The sand will charge when in the presence of kinetic investiture, as long as it is not being hidden by something like copper allomancy.", + "title": "Sand Mastery (For Dummies)" + } + ], + "priority": false, + "read_by_default": false, + "secret": false, + "sortnum": 0 +} \ No newline at end of file diff --git a/src/datagen/generated/sandmastery/assets/sandmastery/lang/en_us.json b/src/datagen/generated/sandmastery/assets/sandmastery/lang/en_us.json new file mode 100644 index 000000000..8d7d851ef --- /dev/null +++ b/src/datagen/generated/sandmastery/assets/sandmastery/lang/en_us.json @@ -0,0 +1,32 @@ +{ + "advancements.sandmastery.sandmastery.description": "Test description: Sandmastery", + "advancements.sandmastery.sandmastery.title": "Sandmastery", + "attribute.sandmastery.ribbons": "Sand Mastery Ribbons", + "block.sandmastery.charged_taldain_sand": "Charged Taldain Sand", + "block.sandmastery.charged_taldain_sand_layer": "Charged Taldain Sand Layer", + "block.sandmastery.sand_jar_block": "Sand Jar Block", + "block.sandmastery.sand_spreading_tub": "Sand Spreading Tub", + "block.sandmastery.taldain_sand": "Taldain Sand", + "block.sandmastery.taldain_sand_layer": "Taldain Sand Layer", + "block.sandmastery.temporary_sand_block": "Temporary Sand Block", + "death.attack.dehydrated": "%1$s died of dehydration", + "item.sandmastery.jar": "Jar", + "item.sandmastery.qido": "Qido", + "item.sandmastery.sand_jar": "Sand Jar", + "item.sandmastery.sand_pouch": "Sand Pouch", + "key.cosmere.sandmastery.elevate": "Use Elevate Mastery", + "key.cosmere.sandmastery.launch": "Use Launch Mastery", + "key.cosmere.sandmastery.platform": "Use Platform Mastery", + "key.cosmere.sandmastery.projectile": "Use Projectile Mastery", + "manifestation.sandmastery.cushion": "Sand Mastery Cushion", + "manifestation.sandmastery.cushion.description": "Masters can use cushion", + "manifestation.sandmastery.elevate": "Sand Mastery Elevate", + "manifestation.sandmastery.elevate.description": "Masters can use elevate", + "manifestation.sandmastery.launch": "Sand Mastery Launch", + "manifestation.sandmastery.launch.description": "Masters can use launch", + "manifestation.sandmastery.platform": "Sand Mastery Platform", + "manifestation.sandmastery.platform.description": "Masters can use platform", + "manifestation.sandmastery.projectile": "Sand Mastery Projectile", + "manifestation.sandmastery.projectile.description": "Masters can use projectile", + "tabs.sandmastery.items": "Sandmastery" +} \ No newline at end of file diff --git a/src/datagen/generated/sandmastery/assets/sandmastery/models/item/jar.json b/src/datagen/generated/sandmastery/assets/sandmastery/models/item/jar.json new file mode 100644 index 000000000..83328a3a8 --- /dev/null +++ b/src/datagen/generated/sandmastery/assets/sandmastery/models/item/jar.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "sandmastery:item/jar" + } +} \ No newline at end of file diff --git a/src/datagen/generated/sandmastery/assets/sandmastery/models/item/qido.json b/src/datagen/generated/sandmastery/assets/sandmastery/models/item/qido.json new file mode 100644 index 000000000..6ee1a9e46 --- /dev/null +++ b/src/datagen/generated/sandmastery/assets/sandmastery/models/item/qido.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "sandmastery:item/qido" + } +} \ No newline at end of file diff --git a/src/datagen/generated/sandmastery/assets/sandmastery/models/item/sand_pouch.json b/src/datagen/generated/sandmastery/assets/sandmastery/models/item/sand_pouch.json new file mode 100644 index 000000000..4fc521e6d --- /dev/null +++ b/src/datagen/generated/sandmastery/assets/sandmastery/models/item/sand_pouch.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "sandmastery:item/sand_pouch" + } +} \ No newline at end of file diff --git a/src/datagen/generated/sandmastery/data/curios/tags/items/belt.json b/src/datagen/generated/sandmastery/data/curios/tags/items/belt.json new file mode 100644 index 000000000..2c48b5406 --- /dev/null +++ b/src/datagen/generated/sandmastery/data/curios/tags/items/belt.json @@ -0,0 +1,5 @@ +{ + "values": [ + "sandmastery:sand_pouch" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/sandmastery/data/minecraft/tags/blocks/mineable/axe.json b/src/datagen/generated/sandmastery/data/minecraft/tags/blocks/mineable/axe.json new file mode 100644 index 000000000..53641f3a2 --- /dev/null +++ b/src/datagen/generated/sandmastery/data/minecraft/tags/blocks/mineable/axe.json @@ -0,0 +1,5 @@ +{ + "values": [ + "sandmastery:sand_spreading_tub" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/sandmastery/data/minecraft/tags/blocks/mineable/pickaxe.json b/src/datagen/generated/sandmastery/data/minecraft/tags/blocks/mineable/pickaxe.json new file mode 100644 index 000000000..a945f8f44 --- /dev/null +++ b/src/datagen/generated/sandmastery/data/minecraft/tags/blocks/mineable/pickaxe.json @@ -0,0 +1,5 @@ +{ + "values": [ + "sandmastery:sand_jar_block" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/sandmastery/data/minecraft/tags/blocks/mineable/shovel.json b/src/datagen/generated/sandmastery/data/minecraft/tags/blocks/mineable/shovel.json new file mode 100644 index 000000000..4e01768b7 --- /dev/null +++ b/src/datagen/generated/sandmastery/data/minecraft/tags/blocks/mineable/shovel.json @@ -0,0 +1,8 @@ +{ + "values": [ + "sandmastery:taldain_sand_layer", + "sandmastery:taldain_sand", + "sandmastery:charged_taldain_sand_layer", + "sandmastery:charged_taldain_sand" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/sandmastery/data/minecraft/tags/blocks/sand.json b/src/datagen/generated/sandmastery/data/minecraft/tags/blocks/sand.json new file mode 100644 index 000000000..4e01768b7 --- /dev/null +++ b/src/datagen/generated/sandmastery/data/minecraft/tags/blocks/sand.json @@ -0,0 +1,8 @@ +{ + "values": [ + "sandmastery:taldain_sand_layer", + "sandmastery:taldain_sand", + "sandmastery:charged_taldain_sand_layer", + "sandmastery:charged_taldain_sand" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/sandmastery/data/sandmastery/advancements/recipes/decorations/sand_jar_block.json b/src/datagen/generated/sandmastery/data/sandmastery/advancements/recipes/decorations/sand_jar_block.json new file mode 100644 index 000000000..6759f2062 --- /dev/null +++ b/src/datagen/generated/sandmastery/data/sandmastery/advancements/recipes/decorations/sand_jar_block.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "items": [ + "sandmastery:sand_jar_block" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "sandmastery:sand_jar_block" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "sandmastery:sand_jar_block" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/sandmastery/data/sandmastery/advancements/recipes/decorations/sand_spreading_tub.json b/src/datagen/generated/sandmastery/data/sandmastery/advancements/recipes/decorations/sand_spreading_tub.json new file mode 100644 index 000000000..abd7a587a --- /dev/null +++ b/src/datagen/generated/sandmastery/data/sandmastery/advancements/recipes/decorations/sand_spreading_tub.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "minecraft:wooden_slabs" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "sandmastery:sand_spreading_tub" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "sandmastery:sand_spreading_tub" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/sandmastery/data/sandmastery/advancements/recipes/redstone/jar.json b/src/datagen/generated/sandmastery/data/sandmastery/advancements/recipes/redstone/jar.json new file mode 100644 index 000000000..0550f15ee --- /dev/null +++ b/src/datagen/generated/sandmastery/data/sandmastery/advancements/recipes/redstone/jar.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "tag": "forge:glass" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "sandmastery:jar" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "sandmastery:jar" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/sandmastery/data/sandmastery/advancements/recipes/redstone/sand_jar.json b/src/datagen/generated/sandmastery/data/sandmastery/advancements/recipes/redstone/sand_jar.json new file mode 100644 index 000000000..0ec3c84fc --- /dev/null +++ b/src/datagen/generated/sandmastery/data/sandmastery/advancements/recipes/redstone/sand_jar.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "items": [ + "sandmastery:sand_jar" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "sandmastery:sand_jar" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "sandmastery:sand_jar" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/sandmastery/data/sandmastery/advancements/recipes/tools/qido.json b/src/datagen/generated/sandmastery/data/sandmastery/advancements/recipes/tools/qido.json new file mode 100644 index 000000000..8a7ba4c7a --- /dev/null +++ b/src/datagen/generated/sandmastery/data/sandmastery/advancements/recipes/tools/qido.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "items": [ + "minecraft:goat_horn" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "sandmastery:qido" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "sandmastery:qido" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/sandmastery/data/sandmastery/advancements/recipes/tools/sand_pouch.json b/src/datagen/generated/sandmastery/data/sandmastery/advancements/recipes/tools/sand_pouch.json new file mode 100644 index 000000000..520b0aa04 --- /dev/null +++ b/src/datagen/generated/sandmastery/data/sandmastery/advancements/recipes/tools/sand_pouch.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_material": { + "conditions": { + "items": [ + { + "items": [ + "sandmastery:sand_jar" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "sandmastery:sand_pouch" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_material", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "sandmastery:sand_pouch" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/sandmastery/data/sandmastery/loot_tables/blocks/charged_taldain_sand.json b/src/datagen/generated/sandmastery/data/sandmastery/loot_tables/blocks/charged_taldain_sand.json new file mode 100644 index 000000000..500b4c861 --- /dev/null +++ b/src/datagen/generated/sandmastery/data/sandmastery/loot_tables/blocks/charged_taldain_sand.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "sandmastery:charged_taldain_sand" + } + ], + "name": "main", + "rolls": 1.0 + } + ], + "random_sequence": "sandmastery:blocks/charged_taldain_sand" +} \ No newline at end of file diff --git a/src/datagen/generated/sandmastery/data/sandmastery/loot_tables/blocks/charged_taldain_sand_layer.json b/src/datagen/generated/sandmastery/data/sandmastery/loot_tables/blocks/charged_taldain_sand_layer.json new file mode 100644 index 000000000..b02ca8f55 --- /dev/null +++ b/src/datagen/generated/sandmastery/data/sandmastery/loot_tables/blocks/charged_taldain_sand_layer.json @@ -0,0 +1,184 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:entity_properties", + "entity": "this", + "predicate": {} + } + ], + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "block": "sandmastery:charged_taldain_sand_layer", + "condition": "minecraft:block_state_property", + "properties": { + "layers": "1" + } + } + ], + "functions": [ + { + "add": false, + "count": 1.0, + "function": "minecraft:set_count" + } + ], + "name": "sandmastery:charged_taldain_sand_layer" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "block": "sandmastery:charged_taldain_sand_layer", + "condition": "minecraft:block_state_property", + "properties": { + "layers": "2" + } + } + ], + "functions": [ + { + "add": false, + "count": 2.0, + "function": "minecraft:set_count" + } + ], + "name": "sandmastery:charged_taldain_sand_layer" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "block": "sandmastery:charged_taldain_sand_layer", + "condition": "minecraft:block_state_property", + "properties": { + "layers": "3" + } + } + ], + "functions": [ + { + "add": false, + "count": 3.0, + "function": "minecraft:set_count" + } + ], + "name": "sandmastery:charged_taldain_sand_layer" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "block": "sandmastery:charged_taldain_sand_layer", + "condition": "minecraft:block_state_property", + "properties": { + "layers": "4" + } + } + ], + "functions": [ + { + "add": false, + "count": 4.0, + "function": "minecraft:set_count" + } + ], + "name": "sandmastery:charged_taldain_sand_layer" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "block": "sandmastery:charged_taldain_sand_layer", + "condition": "minecraft:block_state_property", + "properties": { + "layers": "5" + } + } + ], + "functions": [ + { + "add": false, + "count": 5.0, + "function": "minecraft:set_count" + } + ], + "name": "sandmastery:charged_taldain_sand_layer" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "block": "sandmastery:charged_taldain_sand_layer", + "condition": "minecraft:block_state_property", + "properties": { + "layers": "6" + } + } + ], + "functions": [ + { + "add": false, + "count": 6.0, + "function": "minecraft:set_count" + } + ], + "name": "sandmastery:charged_taldain_sand_layer" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "block": "sandmastery:charged_taldain_sand_layer", + "condition": "minecraft:block_state_property", + "properties": { + "layers": "7" + } + } + ], + "functions": [ + { + "add": false, + "count": 7.0, + "function": "minecraft:set_count" + } + ], + "name": "sandmastery:charged_taldain_sand_layer" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "block": "sandmastery:charged_taldain_sand_layer", + "condition": "minecraft:block_state_property", + "properties": { + "layers": "8" + } + } + ], + "functions": [ + { + "add": false, + "count": 8.0, + "function": "minecraft:set_count" + } + ], + "name": "sandmastery:charged_taldain_sand_layer" + } + ] + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "sandmastery:blocks/charged_taldain_sand_layer" +} \ No newline at end of file diff --git a/src/datagen/generated/sandmastery/data/sandmastery/loot_tables/blocks/sand_jar_block.json b/src/datagen/generated/sandmastery/data/sandmastery/loot_tables/blocks/sand_jar_block.json new file mode 100644 index 000000000..c691ffac1 --- /dev/null +++ b/src/datagen/generated/sandmastery/data/sandmastery/loot_tables/blocks/sand_jar_block.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "sandmastery:sand_jar" + } + ], + "name": "main", + "rolls": 1.0 + } + ], + "random_sequence": "sandmastery:blocks/sand_jar_block" +} \ No newline at end of file diff --git a/src/datagen/generated/sandmastery/data/sandmastery/loot_tables/blocks/sand_spreading_tub.json b/src/datagen/generated/sandmastery/data/sandmastery/loot_tables/blocks/sand_spreading_tub.json new file mode 100644 index 000000000..8c3798c87 --- /dev/null +++ b/src/datagen/generated/sandmastery/data/sandmastery/loot_tables/blocks/sand_spreading_tub.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "sandmastery:sand_spreading_tub" + } + ], + "name": "main", + "rolls": 1.0 + } + ], + "random_sequence": "sandmastery:blocks/sand_spreading_tub" +} \ No newline at end of file diff --git a/src/datagen/generated/sandmastery/data/sandmastery/loot_tables/blocks/taldain_sand.json b/src/datagen/generated/sandmastery/data/sandmastery/loot_tables/blocks/taldain_sand.json new file mode 100644 index 000000000..299f9eb99 --- /dev/null +++ b/src/datagen/generated/sandmastery/data/sandmastery/loot_tables/blocks/taldain_sand.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "sandmastery:taldain_sand" + } + ], + "name": "main", + "rolls": 1.0 + } + ], + "random_sequence": "sandmastery:blocks/taldain_sand" +} \ No newline at end of file diff --git a/src/datagen/generated/sandmastery/data/sandmastery/loot_tables/blocks/taldain_sand_layer.json b/src/datagen/generated/sandmastery/data/sandmastery/loot_tables/blocks/taldain_sand_layer.json new file mode 100644 index 000000000..9bd04d318 --- /dev/null +++ b/src/datagen/generated/sandmastery/data/sandmastery/loot_tables/blocks/taldain_sand_layer.json @@ -0,0 +1,184 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:entity_properties", + "entity": "this", + "predicate": {} + } + ], + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "block": "sandmastery:taldain_sand_layer", + "condition": "minecraft:block_state_property", + "properties": { + "layers": "1" + } + } + ], + "functions": [ + { + "add": false, + "count": 1.0, + "function": "minecraft:set_count" + } + ], + "name": "sandmastery:taldain_sand_layer" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "block": "sandmastery:taldain_sand_layer", + "condition": "minecraft:block_state_property", + "properties": { + "layers": "2" + } + } + ], + "functions": [ + { + "add": false, + "count": 2.0, + "function": "minecraft:set_count" + } + ], + "name": "sandmastery:taldain_sand_layer" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "block": "sandmastery:taldain_sand_layer", + "condition": "minecraft:block_state_property", + "properties": { + "layers": "3" + } + } + ], + "functions": [ + { + "add": false, + "count": 3.0, + "function": "minecraft:set_count" + } + ], + "name": "sandmastery:taldain_sand_layer" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "block": "sandmastery:taldain_sand_layer", + "condition": "minecraft:block_state_property", + "properties": { + "layers": "4" + } + } + ], + "functions": [ + { + "add": false, + "count": 4.0, + "function": "minecraft:set_count" + } + ], + "name": "sandmastery:taldain_sand_layer" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "block": "sandmastery:taldain_sand_layer", + "condition": "minecraft:block_state_property", + "properties": { + "layers": "5" + } + } + ], + "functions": [ + { + "add": false, + "count": 5.0, + "function": "minecraft:set_count" + } + ], + "name": "sandmastery:taldain_sand_layer" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "block": "sandmastery:taldain_sand_layer", + "condition": "minecraft:block_state_property", + "properties": { + "layers": "6" + } + } + ], + "functions": [ + { + "add": false, + "count": 6.0, + "function": "minecraft:set_count" + } + ], + "name": "sandmastery:taldain_sand_layer" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "block": "sandmastery:taldain_sand_layer", + "condition": "minecraft:block_state_property", + "properties": { + "layers": "7" + } + } + ], + "functions": [ + { + "add": false, + "count": 7.0, + "function": "minecraft:set_count" + } + ], + "name": "sandmastery:taldain_sand_layer" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "block": "sandmastery:taldain_sand_layer", + "condition": "minecraft:block_state_property", + "properties": { + "layers": "8" + } + } + ], + "functions": [ + { + "add": false, + "count": 8.0, + "function": "minecraft:set_count" + } + ], + "name": "sandmastery:taldain_sand_layer" + } + ] + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "sandmastery:blocks/taldain_sand_layer" +} \ No newline at end of file diff --git a/src/datagen/generated/sandmastery/data/sandmastery/loot_tables/blocks/temporary_sand_block.json b/src/datagen/generated/sandmastery/data/sandmastery/loot_tables/blocks/temporary_sand_block.json new file mode 100644 index 000000000..ebde3fa7e --- /dev/null +++ b/src/datagen/generated/sandmastery/data/sandmastery/loot_tables/blocks/temporary_sand_block.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:air" + } + ], + "name": "main", + "rolls": 1.0 + } + ], + "random_sequence": "sandmastery:blocks/temporary_sand_block" +} \ No newline at end of file diff --git a/src/datagen/generated/sandmastery/data/sandmastery/recipes/jar.json b/src/datagen/generated/sandmastery/data/sandmastery/recipes/jar.json new file mode 100644 index 000000000..5a342b67a --- /dev/null +++ b/src/datagen/generated/sandmastery/data/sandmastery/recipes/jar.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "redstone", + "key": { + "G": { + "tag": "forge:glass" + } + }, + "pattern": [ + "G G", + "G G", + " G " + ], + "result": { + "item": "sandmastery:jar" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/sandmastery/data/sandmastery/recipes/qido.json b/src/datagen/generated/sandmastery/data/sandmastery/recipes/qido.json new file mode 100644 index 000000000..5f5c48f9b --- /dev/null +++ b/src/datagen/generated/sandmastery/data/sandmastery/recipes/qido.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "H": { + "item": "minecraft:goat_horn" + }, + "S": { + "tag": "forge:string" + } + }, + "pattern": [ + "SSS", + "S S", + " H " + ], + "result": { + "item": "sandmastery:qido" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/sandmastery/data/sandmastery/recipes/sand_jar.json b/src/datagen/generated/sandmastery/data/sandmastery/recipes/sand_jar.json new file mode 100644 index 000000000..03675eb5a --- /dev/null +++ b/src/datagen/generated/sandmastery/data/sandmastery/recipes/sand_jar.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "redstone", + "ingredients": [ + { + "item": "sandmastery:sand_jar_block" + } + ], + "result": { + "item": "sandmastery:sand_jar" + } +} \ No newline at end of file diff --git a/src/datagen/generated/sandmastery/data/sandmastery/recipes/sand_jar_block.json b/src/datagen/generated/sandmastery/data/sandmastery/recipes/sand_jar_block.json new file mode 100644 index 000000000..9c36058bb --- /dev/null +++ b/src/datagen/generated/sandmastery/data/sandmastery/recipes/sand_jar_block.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "sandmastery:sand_jar" + } + ], + "result": { + "item": "sandmastery:sand_jar_block" + } +} \ No newline at end of file diff --git a/src/datagen/generated/sandmastery/data/sandmastery/recipes/sand_pouch.json b/src/datagen/generated/sandmastery/data/sandmastery/recipes/sand_pouch.json new file mode 100644 index 000000000..7e9df3c0a --- /dev/null +++ b/src/datagen/generated/sandmastery/data/sandmastery/recipes/sand_pouch.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "B": { + "item": "minecraft:lead" + }, + "J": { + "item": "sandmastery:sand_jar" + }, + "L": { + "tag": "forge:leather" + } + }, + "pattern": [ + "BLL", + "LJL", + "LLL" + ], + "result": { + "item": "sandmastery:sand_pouch" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/sandmastery/data/sandmastery/recipes/sand_spreading_tub.json b/src/datagen/generated/sandmastery/data/sandmastery/recipes/sand_spreading_tub.json new file mode 100644 index 000000000..6bccb7226 --- /dev/null +++ b/src/datagen/generated/sandmastery/data/sandmastery/recipes/sand_spreading_tub.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "W": { + "tag": "minecraft:wooden_slabs" + } + }, + "pattern": [ + "W W", + "WWW" + ], + "result": { + "item": "sandmastery:sand_spreading_tub" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/soulforgery/.cache/0596c3d7e5592bcf0093791e94a8655dfa8477d2 b/src/datagen/generated/soulforgery/.cache/0596c3d7e5592bcf0093791e94a8655dfa8477d2 new file mode 100644 index 000000000..edad6fb91 --- /dev/null +++ b/src/datagen/generated/soulforgery/.cache/0596c3d7e5592bcf0093791e94a8655dfa8477d2 @@ -0,0 +1 @@ +// 1.20.1 2024-10-09T13:22:13.4096249 Tags: soulforgery diff --git a/src/datagen/generated/soulforgery/.cache/59eb3dbb5f86130e09b3c62d89b9525ee01cf52d b/src/datagen/generated/soulforgery/.cache/59eb3dbb5f86130e09b3c62d89b9525ee01cf52d new file mode 100644 index 000000000..d9632ffe3 --- /dev/null +++ b/src/datagen/generated/soulforgery/.cache/59eb3dbb5f86130e09b3c62d89b9525ee01cf52d @@ -0,0 +1 @@ +// 1.20.1 2024-10-09T13:22:13.4096249 Loot Tables diff --git a/src/datagen/generated/soulforgery/.cache/85d298822a7ae20512882a6cadee381ab6d5f104 b/src/datagen/generated/soulforgery/.cache/85d298822a7ae20512882a6cadee381ab6d5f104 new file mode 100644 index 000000000..162f0ea80 --- /dev/null +++ b/src/datagen/generated/soulforgery/.cache/85d298822a7ae20512882a6cadee381ab6d5f104 @@ -0,0 +1 @@ +// 1.20.1 2024-10-09T13:22:13.4086248 Item Models: soulforgery diff --git a/src/datagen/generated/soulforgery/.cache/9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e b/src/datagen/generated/soulforgery/.cache/9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e new file mode 100644 index 000000000..450cac6c5 --- /dev/null +++ b/src/datagen/generated/soulforgery/.cache/9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e @@ -0,0 +1 @@ +// 1.20.1 2024-10-09T13:22:13.4106256 Recipes diff --git a/src/datagen/generated/soulforgery/.cache/c622617f6fabf890a00b9275cd5f643584a8a2c8 b/src/datagen/generated/soulforgery/.cache/c622617f6fabf890a00b9275cd5f643584a8a2c8 new file mode 100644 index 000000000..fa1026a46 --- /dev/null +++ b/src/datagen/generated/soulforgery/.cache/c622617f6fabf890a00b9275cd5f643584a8a2c8 @@ -0,0 +1,2 @@ +// 1.20.1 2024-10-10T14:25:43.8815 Languages: en_us +bf3cfa9062ed66d1be266cef7a0fb40d089ed919 assets/soulforgery/lang/en_us.json diff --git a/src/datagen/generated/soulforgery/.cache/fd1874cfe95a30de0d4cf8b0ec1f36bca0fef150 b/src/datagen/generated/soulforgery/.cache/fd1874cfe95a30de0d4cf8b0ec1f36bca0fef150 new file mode 100644 index 000000000..96deefa46 --- /dev/null +++ b/src/datagen/generated/soulforgery/.cache/fd1874cfe95a30de0d4cf8b0ec1f36bca0fef150 @@ -0,0 +1,3 @@ +// 1.20.1 2024-10-09T13:38:50.3159405 Soulforgery PatchouliGeneration +b87de045efe4049f73fddc91726251ab76c63b02 assets/cosmere/patchouli_books/guide/en_us/categories/soulforgery.json +e0f904574d1adcf0f63dce615c7fe7250a341ba8 assets/cosmere/patchouli_books/guide/en_us/entries/soulforgery/soulforgery_basics.json diff --git a/src/datagen/generated/soulforgery/assets/cosmere/patchouli_books/guide/en_us/categories/soulforgery.json b/src/datagen/generated/soulforgery/assets/cosmere/patchouli_books/guide/en_us/categories/soulforgery.json new file mode 100644 index 000000000..04fa8531a --- /dev/null +++ b/src/datagen/generated/soulforgery/assets/cosmere/patchouli_books/guide/en_us/categories/soulforgery.json @@ -0,0 +1,7 @@ +{ + "description": "Soulforgery description that says some stuff.", + "icon": "minecraft:paper", + "name": "Soulforgery", + "secret": true, + "sortnum": 99 +} \ No newline at end of file diff --git a/src/datagen/generated/soulforgery/assets/cosmere/patchouli_books/guide/en_us/entries/soulforgery/soulforgery_basics.json b/src/datagen/generated/soulforgery/assets/cosmere/patchouli_books/guide/en_us/entries/soulforgery/soulforgery_basics.json new file mode 100644 index 000000000..d228712e3 --- /dev/null +++ b/src/datagen/generated/soulforgery/assets/cosmere/patchouli_books/guide/en_us/entries/soulforgery/soulforgery_basics.json @@ -0,0 +1,16 @@ +{ + "category": "cosmere:soulforgery", + "icon": "minecraft:paper", + "name": "Soulforgery (For Dummies)", + "pages": [ + { + "type": "text", + "text": "In this journal, I shall explain all I have discovered about Soulforgery. $(br)Firstly, some terminology:", + "title": "Terminology" + } + ], + "priority": true, + "read_by_default": false, + "secret": false, + "sortnum": 0 +} \ No newline at end of file diff --git a/src/datagen/generated/soulforgery/assets/soulforgery/lang/en_us.json b/src/datagen/generated/soulforgery/assets/soulforgery/lang/en_us.json new file mode 100644 index 000000000..f88990308 --- /dev/null +++ b/src/datagen/generated/soulforgery/assets/soulforgery/lang/en_us.json @@ -0,0 +1,3 @@ +{ + "tabs.soulforgery.items": "Soulforgery" +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/.cache/0bcb30cabd5f2de093260c224c11c3eb66c313fd b/src/datagen/generated/surgebinding/.cache/0bcb30cabd5f2de093260c224c11c3eb66c313fd new file mode 100644 index 000000000..dc9485215 --- /dev/null +++ b/src/datagen/generated/surgebinding/.cache/0bcb30cabd5f2de093260c224c11c3eb66c313fd @@ -0,0 +1,22 @@ +// 1.20.1 2024-10-09T13:22:13.2767832 Block States: surgebinding +e5624d66807078615ca5990f126f894a4c159a85 assets/surgebinding/blockstates/amethyst_block.json +e5624d66807078615ca5990f126f894a4c159a85 assets/surgebinding/blockstates/diamond_block.json +e5624d66807078615ca5990f126f894a4c159a85 assets/surgebinding/blockstates/emerald_block.json +e5624d66807078615ca5990f126f894a4c159a85 assets/surgebinding/blockstates/garnet_block.json +e5624d66807078615ca5990f126f894a4c159a85 assets/surgebinding/blockstates/heliodor_block.json +e5624d66807078615ca5990f126f894a4c159a85 assets/surgebinding/blockstates/ruby_block.json +e5624d66807078615ca5990f126f894a4c159a85 assets/surgebinding/blockstates/sapphire_block.json +e5624d66807078615ca5990f126f894a4c159a85 assets/surgebinding/blockstates/smokestone_block.json +e5624d66807078615ca5990f126f894a4c159a85 assets/surgebinding/blockstates/topaz_block.json +e5624d66807078615ca5990f126f894a4c159a85 assets/surgebinding/blockstates/zircon_block.json +0094772fbb9c43bb5962086cabddbe7cab71206c assets/surgebinding/models/block/gem_block.json +9262c6a8b3a879ce2dafa91c33ef441a654cc0cc assets/surgebinding/models/item/amethyst_block.json +9262c6a8b3a879ce2dafa91c33ef441a654cc0cc assets/surgebinding/models/item/diamond_block.json +9262c6a8b3a879ce2dafa91c33ef441a654cc0cc assets/surgebinding/models/item/emerald_block.json +9262c6a8b3a879ce2dafa91c33ef441a654cc0cc assets/surgebinding/models/item/garnet_block.json +9262c6a8b3a879ce2dafa91c33ef441a654cc0cc assets/surgebinding/models/item/heliodor_block.json +9262c6a8b3a879ce2dafa91c33ef441a654cc0cc assets/surgebinding/models/item/ruby_block.json +9262c6a8b3a879ce2dafa91c33ef441a654cc0cc assets/surgebinding/models/item/sapphire_block.json +9262c6a8b3a879ce2dafa91c33ef441a654cc0cc assets/surgebinding/models/item/smokestone_block.json +9262c6a8b3a879ce2dafa91c33ef441a654cc0cc assets/surgebinding/models/item/topaz_block.json +9262c6a8b3a879ce2dafa91c33ef441a654cc0cc assets/surgebinding/models/item/zircon_block.json diff --git a/src/datagen/generated/surgebinding/.cache/109f316ce3b77a5a02bbf6e9c200027075e14620 b/src/datagen/generated/surgebinding/.cache/109f316ce3b77a5a02bbf6e9c200027075e14620 new file mode 100644 index 000000000..2ffd929db --- /dev/null +++ b/src/datagen/generated/surgebinding/.cache/109f316ce3b77a5a02bbf6e9c200027075e14620 @@ -0,0 +1,42 @@ +// 1.20.1 2024-10-09T13:22:13.2757907 Tags: surgebinding +1f4a893d33327a86f361b3e38f9dcf2af46287fc data/cosmere/tags/worldgen/biome/spawn_ores.json +dc8ed69b241d772a977e7c0c34320929d00ab4fa data/forge/tags/blocks/storage_blocks.json +e65d9a5c24c24dc049cce37538918e39cdeac5f8 data/forge/tags/blocks/storage_blocks/amethyst.json +c9686858daba30ebceb8af773a05f2f597efe509 data/forge/tags/blocks/storage_blocks/diamond.json +fe2cced5caa5ebdac3017a457cb9763dcafc035f data/forge/tags/blocks/storage_blocks/emerald.json +b92207ea737081f9e4b4216774e6b78973940e65 data/forge/tags/blocks/storage_blocks/garnet.json +aeaede227bae14370d9c20b5fa1fde9a29521ebb data/forge/tags/blocks/storage_blocks/heliodor.json +404e8fdc6086a00ca1821c0d24c4453ec23123bc data/forge/tags/blocks/storage_blocks/ruby.json +14302290e4d36ce97b8d1de608a5949ab2a14e87 data/forge/tags/blocks/storage_blocks/sapphire.json +5cd7c38bcb41dd20d7f68f84f3a282e6f3fcbf38 data/forge/tags/blocks/storage_blocks/smokestone.json +538b3e977ed89fbf5346bda5d9c2a31519709789 data/forge/tags/blocks/storage_blocks/topaz.json +5ce6a2023aa95ada658bb30be3a2bf1a1ab729a3 data/forge/tags/blocks/storage_blocks/zircon.json +0f13c3563b211b2c3182edb98369e780f7605b13 data/forge/tags/items/gems.json +0d4577d583c0237e53fe8a14823bbd91670d7f0d data/forge/tags/items/gems/amethyst.json +82c86c79901f94132496df461e7419cff4713658 data/forge/tags/items/gems/diamond.json +ab989faac6b18c126f89ccd6f152333423899951 data/forge/tags/items/gems/emerald.json +2465834f90446d90a8a252dfa35ef3c61e0f5e2d data/forge/tags/items/gems/garnet.json +8536a5b0d634ff0ed005c318895b7edaa9b15fb1 data/forge/tags/items/gems/heliodor.json +1770c44506842d42681be6a6983a6899957f0d4f data/forge/tags/items/gems/ruby.json +f58d2b77e2265fdc6a9b6494edfa535a010e4642 data/forge/tags/items/gems/sapphire.json +6e099fad348f678acfa44e1f13a6027ae3728dba data/forge/tags/items/gems/smokestone.json +fc84a391a0e3ffb5e5ac99b518ffcbc14afddd75 data/forge/tags/items/gems/topaz.json +fe7b195585c756f640f64873613cafc30e5957de data/forge/tags/items/gems/zircon.json +dc8ed69b241d772a977e7c0c34320929d00ab4fa data/forge/tags/items/storage_blocks.json +e65d9a5c24c24dc049cce37538918e39cdeac5f8 data/forge/tags/items/storage_blocks/amethyst.json +c9686858daba30ebceb8af773a05f2f597efe509 data/forge/tags/items/storage_blocks/diamond.json +fe2cced5caa5ebdac3017a457cb9763dcafc035f data/forge/tags/items/storage_blocks/emerald.json +b92207ea737081f9e4b4216774e6b78973940e65 data/forge/tags/items/storage_blocks/garnet.json +aeaede227bae14370d9c20b5fa1fde9a29521ebb data/forge/tags/items/storage_blocks/heliodor.json +404e8fdc6086a00ca1821c0d24c4453ec23123bc data/forge/tags/items/storage_blocks/ruby.json +14302290e4d36ce97b8d1de608a5949ab2a14e87 data/forge/tags/items/storage_blocks/sapphire.json +5cd7c38bcb41dd20d7f68f84f3a282e6f3fcbf38 data/forge/tags/items/storage_blocks/smokestone.json +538b3e977ed89fbf5346bda5d9c2a31519709789 data/forge/tags/items/storage_blocks/topaz.json +5ce6a2023aa95ada658bb30be3a2bf1a1ab729a3 data/forge/tags/items/storage_blocks/zircon.json +f2b573e168f559409f9630291f07d290870822ad data/minecraft/tags/blocks/beacon_base_blocks.json +f2b573e168f559409f9630291f07d290870822ad data/minecraft/tags/blocks/dragon_immune.json +0fbe76a3ddfbc63868c74a6b5cabf897deea3795 data/minecraft/tags/blocks/mineable/axe.json +22365aa2d53aa418dd7a0d8d3414afa4e65fe3d4 data/minecraft/tags/blocks/mineable/pickaxe.json +0fbe76a3ddfbc63868c74a6b5cabf897deea3795 data/minecraft/tags/blocks/mineable/shovel.json +f2b573e168f559409f9630291f07d290870822ad data/minecraft/tags/blocks/needs_iron_tool.json +4bde5ce1e288cb84a5e6b1f49d60868cbb1fb7a0 data/surgebinding/tags/worldgen/biome/is_roshar.json diff --git a/src/datagen/generated/surgebinding/.cache/36b7f816b5f8b042235228566873c711db2c5319 b/src/datagen/generated/surgebinding/.cache/36b7f816b5f8b042235228566873c711db2c5319 new file mode 100644 index 000000000..43284754b --- /dev/null +++ b/src/datagen/generated/surgebinding/.cache/36b7f816b5f8b042235228566873c711db2c5319 @@ -0,0 +1,4 @@ +// 1.20.1 2024-10-09T13:38:50.237255 Surgebinding PatchouliGeneration +297b263fd7587254dc36dd2c24ba67a4227b5616 assets/cosmere/patchouli_books/guide/en_us/categories/surgebinding.json +68e618712b476910666bc2bcbced96e48f6adecd assets/cosmere/patchouli_books/guide/en_us/entries/surgebinding/chull.json +2d8b8601eefb0f6bcf8adfee0f29e907d10dcdd2 assets/cosmere/patchouli_books/guide/en_us/entries/surgebinding/surgebinding_basics.json diff --git a/src/datagen/generated/surgebinding/.cache/59eb3dbb5f86130e09b3c62d89b9525ee01cf52d b/src/datagen/generated/surgebinding/.cache/59eb3dbb5f86130e09b3c62d89b9525ee01cf52d new file mode 100644 index 000000000..d83450fd4 --- /dev/null +++ b/src/datagen/generated/surgebinding/.cache/59eb3dbb5f86130e09b3c62d89b9525ee01cf52d @@ -0,0 +1,16 @@ +// 1.20.1 2025-01-03T23:43:48.469494 Loot Tables +a758c0c893df7df71bdc8aeed2272371ac643703 data/surgebinding/loot_tables/blocks/amethyst_block.json +0c5e26655b60cd0ec811ed23b9e0c7c57a170f4e data/surgebinding/loot_tables/blocks/diamond_block.json +4bba371827bb85e7d575f56ff13594d89e03642f data/surgebinding/loot_tables/blocks/emerald_block.json +998b59b14276e5d63689d832c7177349d42433ae data/surgebinding/loot_tables/blocks/garnet_block.json +9babd02fecbe165e2aee49c9053812b1973fd9ac data/surgebinding/loot_tables/blocks/heliodor_block.json +347c30c45d13db7b9fe5e9d449077264aa0e2992 data/surgebinding/loot_tables/blocks/lavis_polyp.json +835f955eac332284589f056d3a6ca0354d558419 data/surgebinding/loot_tables/blocks/prickletac.json +3491dc31e74f42db8e1bbece963e3da8b62f15a3 data/surgebinding/loot_tables/blocks/rockbud_variant.json +c490882cd758fdb94f600da4440ab3dd9fc4ad82 data/surgebinding/loot_tables/blocks/ruby_block.json +d15b8e9e600e8e005fd6ae60c88233f818224c23 data/surgebinding/loot_tables/blocks/sapphire_block.json +c91329902baa3e7be40bfcfcba3e67dfc38c8ffb data/surgebinding/loot_tables/blocks/smokestone_block.json +5787c840881f70463d2ea51d5936999905e892fe data/surgebinding/loot_tables/blocks/topaz_block.json +fcae433a72ec1367bb00012655e4268e6f5af123 data/surgebinding/loot_tables/blocks/vinebud.json +9f21554bc2aaabf3af589be47f567c4f17275ce4 data/surgebinding/loot_tables/blocks/zircon_block.json +a7207bc09011db262ecf6c434f3d94cac58c0fce data/surgebinding/loot_tables/entities/chull.json diff --git a/src/datagen/generated/surgebinding/.cache/9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e b/src/datagen/generated/surgebinding/.cache/9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e new file mode 100644 index 000000000..0d1c169ca --- /dev/null +++ b/src/datagen/generated/surgebinding/.cache/9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e @@ -0,0 +1,41 @@ +// 1.20.1 2025-01-04T22:50:03.9985254 Recipes +f86b7818b6bb7ac5af53f3f3b414422f4e54a663 data/surgebinding/advancements/recipes/decorations/amethyst_block.json +cc3d924329dbcd7a0ab1be4ee4a00ac8ceaa1444 data/surgebinding/advancements/recipes/decorations/diamond_block.json +22b1bf29f26c81d9763059cdbf36c9f5709daf52 data/surgebinding/advancements/recipes/decorations/emerald_block.json +4ebeacd19b99940c676635403acd4610c4e7f4d7 data/surgebinding/advancements/recipes/decorations/garnet_block.json +97de2c363add0e60ad632195528ca26ae5c96e54 data/surgebinding/advancements/recipes/decorations/heliodor_block.json +7ef03d10272191205c176bd09bd98412a1a5f9ed data/surgebinding/advancements/recipes/decorations/ruby_block.json +afd07df991e24e37d8cabd6b422a6b7a06369ae9 data/surgebinding/advancements/recipes/decorations/sapphire_block.json +2a43b435ee9159408c3807d29f871aacae520423 data/surgebinding/advancements/recipes/decorations/smokestone_block.json +c76d48448dc6bda3a834ca502134d33af101e5ed data/surgebinding/advancements/recipes/decorations/topaz_block.json +3b73478ef61f7fa5db803a45cef0b18c732628c8 data/surgebinding/advancements/recipes/decorations/zircon_block.json +1985375f2bc48132435863fd89853f99e5c6fb01 data/surgebinding/advancements/recipes/misc/conversions/amethyst_block_deconstruct.json +f5f117893f62f9474fb2e701cb1ed320af2c78e5 data/surgebinding/advancements/recipes/misc/conversions/diamond_block_deconstruct.json +d1b0f72c0bf02be7368d94f95bd56101443c660d data/surgebinding/advancements/recipes/misc/conversions/emerald_block_deconstruct.json +7911e6bab179a5cadd2c0e935f91f1506953f0ea data/surgebinding/advancements/recipes/misc/conversions/garnet_block_deconstruct.json +0a5a64b51dd4e6350910f0803e80fbcf873be591 data/surgebinding/advancements/recipes/misc/conversions/heliodor_block_deconstruct.json +cbafce9ef6398d38519394e6394f5bf07193c717 data/surgebinding/advancements/recipes/misc/conversions/ruby_block_deconstruct.json +5a8c8fd832755e2f652afabb6c3f663af3186395 data/surgebinding/advancements/recipes/misc/conversions/sapphire_block_deconstruct.json +baa2be7a387f5e863a36927618efe97cf2b219c4 data/surgebinding/advancements/recipes/misc/conversions/smokestone_block_deconstruct.json +bd0ba3f38803b45d9464add06f1794c24262d3a9 data/surgebinding/advancements/recipes/misc/conversions/topaz_block_deconstruct.json +bf1be9b206544f2ee3aae5e3e75794688e6a29ad data/surgebinding/advancements/recipes/misc/conversions/zircon_block_deconstruct.json +2bd34a2581e7a8dcd1ea05969aaf4f1e4caee3eb data/surgebinding/recipes/amethyst_block.json +f8b706c6b2f95940b386533e430d39c2c42043d5 data/surgebinding/recipes/conversions/amethyst_block_deconstruct.json +5181afe6575a3be6c1b35ad422dce4c87ab2954e data/surgebinding/recipes/conversions/diamond_block_deconstruct.json +2e3932b2533cf74f559602619726705575dc8c45 data/surgebinding/recipes/conversions/emerald_block_deconstruct.json +f6814952d513b3db2e87381c2959b3e8a07d8f76 data/surgebinding/recipes/conversions/garnet_block_deconstruct.json +130febea47fc7e63e434cd625c5fd488b1bcb656 data/surgebinding/recipes/conversions/heliodor_block_deconstruct.json +7362741f87d5d8a9e8f2761d6a278a1dbf6d4899 data/surgebinding/recipes/conversions/ruby_block_deconstruct.json +60e62d340585d58c087a61ba81a9efda4cb714fb data/surgebinding/recipes/conversions/sapphire_block_deconstruct.json +9d8450a99dd7cbf445c765e5624d214d5dbf45d6 data/surgebinding/recipes/conversions/smokestone_block_deconstruct.json +e47ace5f1e03ea1701519febfe100070fefe305b data/surgebinding/recipes/conversions/topaz_block_deconstruct.json +1c43f1e8c24072f510cef52ecda43b33945d5e52 data/surgebinding/recipes/conversions/zircon_block_deconstruct.json +19d8fc7784d7b8fa5e7063b7213ef57e2383d847 data/surgebinding/recipes/diamond_block.json +1da9e250d0e68aa6a8f5724990c772f1c797aa42 data/surgebinding/recipes/emerald_block.json +8ecebabe5a19c476284a9ee90e4d9b9ac252b152 data/surgebinding/recipes/garnet_block.json +56cab856c8cb2b4fe0c6ca930548ffe1b73e50fd data/surgebinding/recipes/heliodor_block.json +8ef2087c48fec60effd4a2d4c32f3c6477571a04 data/surgebinding/recipes/ruby_block.json +baa1016fee7b4d27d60195b0458c8455ba566d4c data/surgebinding/recipes/sapphire_block.json +2c914eb0060c71b825b8b0106b0d871e90db0faa data/surgebinding/recipes/smokestone_block.json +d6c2fae95bfa724c9235ebd5d12f8ab22a8bd3a2 data/surgebinding/recipes/topaz_block.json +fde3d83ff6ce7390302380264fee58f4c7e4917b data/surgebinding/recipes/zircon_block.json diff --git a/src/datagen/generated/surgebinding/.cache/a42c2d14910c607d1cdeea761ec88e5ad05f96c6 b/src/datagen/generated/surgebinding/.cache/a42c2d14910c607d1cdeea761ec88e5ad05f96c6 new file mode 100644 index 000000000..8609ed118 --- /dev/null +++ b/src/datagen/generated/surgebinding/.cache/a42c2d14910c607d1cdeea761ec88e5ad05f96c6 @@ -0,0 +1,37 @@ +// 1.20.1 2025-11-08T14:01:31.3831899 Item Models: surgebinding +e797f0f6000c58a24305d96eede7cc5c7bf50529 assets/surgebinding/models/item/amethyst_broam.json +f12008b9216dc96bae966f9bdc9c458623021477 assets/surgebinding/models/item/amethyst_chip.json +f11fb5b2de87bddd0918dffcc40c267bcc6b4da7 assets/surgebinding/models/item/amethyst_mark.json +63ec6c618a3a23eab4cab9c52d7d3250de9b516e assets/surgebinding/models/item/chull_spawn_egg.json +63ec6c618a3a23eab4cab9c52d7d3250de9b516e assets/surgebinding/models/item/cryptic_spawn_egg.json +babfe18cc57e87bdfcfab73f064dde614c02a612 assets/surgebinding/models/item/diamond_broam.json +5f23fce6e53790f774a85352e914b0ec47187026 assets/surgebinding/models/item/diamond_chip.json +08286c0383de37301a0a1d602777b28819a5b10d assets/surgebinding/models/item/diamond_mark.json +5b01480d8fae2495bca6c7e6bef2d1f7075dc715 assets/surgebinding/models/item/emerald_broam.json +d0339f99c5d55a97ce8ebb6d7f721061d7933d10 assets/surgebinding/models/item/emerald_chip.json +461b7aa784eb12cafe8eb639feced872e5ea2abd assets/surgebinding/models/item/emerald_mark.json +35dbb677349858f54e2ffe200fbf87a0847f3fa9 assets/surgebinding/models/item/garnet_broam.json +9191bd37cea661375c3e5b1d8a6891812cb1fb31 assets/surgebinding/models/item/garnet_chip.json +ed0f4410947f36fb2c30adc5d2df3d429f5719bf assets/surgebinding/models/item/garnet_mark.json +5d86fe6e34d1fd0b8d634a0b74bf81f866255d5e assets/surgebinding/models/item/heliodor_broam.json +c8f182a4a72ed52aaa15db4adb2e53d2366276c5 assets/surgebinding/models/item/heliodor_chip.json +266acccc694a0c4810b2bf49a73e095aadf178e5 assets/surgebinding/models/item/heliodor_mark.json +3c3cb8fa9c39798de96ff140927bc7e2a2797182 assets/surgebinding/models/item/ruby_broam.json +6699d15c34f15ecdefec16a424c68d85a82905d5 assets/surgebinding/models/item/ruby_chip.json +a91ca4972b8d3422763281c9cb8be570a54a5339 assets/surgebinding/models/item/ruby_mark.json +a1a8e3e7d726a4e405b48cfce1af70ba1a51bb65 assets/surgebinding/models/item/sapphire_broam.json +6765516aa733ab2612ca7218ac3d1d7a36f7dbeb assets/surgebinding/models/item/sapphire_chip.json +e1a1241601f1e134a276a6beac7c6491344a004d assets/surgebinding/models/item/sapphire_mark.json +7817652b27f6e14fee558b9f7ed79a803bcc9651 assets/surgebinding/models/item/shardplate_boots.json +fbee7654e8cdfae717bccf39f76848666cc51bb5 assets/surgebinding/models/item/shardplate_chest.json +095355a2bd3bcf962839dd947514af66d6dd9639 assets/surgebinding/models/item/shardplate_helmet.json +0fc29fc960fce820dfb1b37d580efb2bdbd7d052 assets/surgebinding/models/item/shardplate_leggings.json +aeef1a413783b0d7474003797b1593f3b85471b5 assets/surgebinding/models/item/smokestone_broam.json +fd59ca79570b088f9255de834dd00faa2cf49a58 assets/surgebinding/models/item/smokestone_chip.json +273b3611916007e08e308048afb1d444167a0acd assets/surgebinding/models/item/smokestone_mark.json +e934281fad2ba0c4d87f0fbd780838c3060b2b4b assets/surgebinding/models/item/topaz_broam.json +caa692f78e11810525d07377a8be4f74cd609a50 assets/surgebinding/models/item/topaz_chip.json +41bee87d98c052d46e0b281745eba3ff392f42ab assets/surgebinding/models/item/topaz_mark.json +762831b3eb3348ab701a10f2721f2efeb78e63d0 assets/surgebinding/models/item/zircon_broam.json +e93fb3dbb97807ce800252c2d9addb9bdd4f1166 assets/surgebinding/models/item/zircon_chip.json +ebd2644c401d0bbcb5b3addeb93454d0f3092465 assets/surgebinding/models/item/zircon_mark.json diff --git a/src/datagen/generated/surgebinding/.cache/c622617f6fabf890a00b9275cd5f643584a8a2c8 b/src/datagen/generated/surgebinding/.cache/c622617f6fabf890a00b9275cd5f643584a8a2c8 new file mode 100644 index 000000000..666551ec7 --- /dev/null +++ b/src/datagen/generated/surgebinding/.cache/c622617f6fabf890a00b9275cd5f643584a8a2c8 @@ -0,0 +1,2 @@ +// 1.20.1 2025-11-27T19:52:01.247811 Languages: en_us +237001abcc8d8939fd103a85bd4253657737ccb0 assets/surgebinding/lang/en_us.json diff --git a/src/datagen/generated/surgebinding/assets/cosmere/patchouli_books/guide/en_us/categories/surgebinding.json b/src/datagen/generated/surgebinding/assets/cosmere/patchouli_books/guide/en_us/categories/surgebinding.json new file mode 100644 index 000000000..b2839932b --- /dev/null +++ b/src/datagen/generated/surgebinding/assets/cosmere/patchouli_books/guide/en_us/categories/surgebinding.json @@ -0,0 +1,7 @@ +{ + "description": "The Children of Honor must once again speak the ancient oaths. The Knights Radiant have returned. (WIP)", + "icon": "surgebinding:amethyst_broam", + "name": "Surgebinding", + "secret": false, + "sortnum": 5 +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/assets/cosmere/patchouli_books/guide/en_us/entries/surgebinding/chull.json b/src/datagen/generated/surgebinding/assets/cosmere/patchouli_books/guide/en_us/entries/surgebinding/chull.json new file mode 100644 index 000000000..9e8920e08 --- /dev/null +++ b/src/datagen/generated/surgebinding/assets/cosmere/patchouli_books/guide/en_us/entries/surgebinding/chull.json @@ -0,0 +1,26 @@ +{ + "category": "cosmere:surgebinding", + "icon": "surgebinding:amethyst_broam", + "name": "Chull", + "pages": [ + { + "type": "text", + "text": "Chull exist, but don't do much as of yet. They are adorable though. (WIP)", + "title": "surgebinding:amethyst_broam" + }, + { + "type": "entity", + "default_rotation": -45.0, + "entity": "surgebinding:chull", + "name": "Chull", + "offset": 0.0, + "rotate": false, + "scale": 1.0, + "text": "Look how cute they are!" + } + ], + "priority": false, + "read_by_default": false, + "secret": false, + "sortnum": 0 +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/assets/cosmere/patchouli_books/guide/en_us/entries/surgebinding/surgebinding_basics.json b/src/datagen/generated/surgebinding/assets/cosmere/patchouli_books/guide/en_us/entries/surgebinding/surgebinding_basics.json new file mode 100644 index 000000000..e780bea0b --- /dev/null +++ b/src/datagen/generated/surgebinding/assets/cosmere/patchouli_books/guide/en_us/entries/surgebinding/surgebinding_basics.json @@ -0,0 +1,16 @@ +{ + "category": "cosmere:surgebinding", + "icon": "surgebinding:amethyst_broam", + "name": "Surgebinding Basics", + "pages": [ + { + "type": "text", + "text": "One who enters a Nahel Bond with a spren will gain the surgebinding abilities of their specific order. (WIP)", + "title": "surgebinding:amethyst_broam" + } + ], + "priority": true, + "read_by_default": false, + "secret": false, + "sortnum": 0 +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/assets/surgebinding/blockstates/amethyst_block.json b/src/datagen/generated/surgebinding/assets/surgebinding/blockstates/amethyst_block.json new file mode 100644 index 000000000..1ae066322 --- /dev/null +++ b/src/datagen/generated/surgebinding/assets/surgebinding/blockstates/amethyst_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "surgebinding:block/gem_block" + } + } +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/assets/surgebinding/blockstates/diamond_block.json b/src/datagen/generated/surgebinding/assets/surgebinding/blockstates/diamond_block.json new file mode 100644 index 000000000..1ae066322 --- /dev/null +++ b/src/datagen/generated/surgebinding/assets/surgebinding/blockstates/diamond_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "surgebinding:block/gem_block" + } + } +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/assets/surgebinding/blockstates/emerald_block.json b/src/datagen/generated/surgebinding/assets/surgebinding/blockstates/emerald_block.json new file mode 100644 index 000000000..1ae066322 --- /dev/null +++ b/src/datagen/generated/surgebinding/assets/surgebinding/blockstates/emerald_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "surgebinding:block/gem_block" + } + } +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/assets/surgebinding/blockstates/garnet_block.json b/src/datagen/generated/surgebinding/assets/surgebinding/blockstates/garnet_block.json new file mode 100644 index 000000000..1ae066322 --- /dev/null +++ b/src/datagen/generated/surgebinding/assets/surgebinding/blockstates/garnet_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "surgebinding:block/gem_block" + } + } +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/assets/surgebinding/blockstates/heliodor_block.json b/src/datagen/generated/surgebinding/assets/surgebinding/blockstates/heliodor_block.json new file mode 100644 index 000000000..1ae066322 --- /dev/null +++ b/src/datagen/generated/surgebinding/assets/surgebinding/blockstates/heliodor_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "surgebinding:block/gem_block" + } + } +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/assets/surgebinding/blockstates/ruby_block.json b/src/datagen/generated/surgebinding/assets/surgebinding/blockstates/ruby_block.json new file mode 100644 index 000000000..1ae066322 --- /dev/null +++ b/src/datagen/generated/surgebinding/assets/surgebinding/blockstates/ruby_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "surgebinding:block/gem_block" + } + } +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/assets/surgebinding/blockstates/sapphire_block.json b/src/datagen/generated/surgebinding/assets/surgebinding/blockstates/sapphire_block.json new file mode 100644 index 000000000..1ae066322 --- /dev/null +++ b/src/datagen/generated/surgebinding/assets/surgebinding/blockstates/sapphire_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "surgebinding:block/gem_block" + } + } +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/assets/surgebinding/blockstates/smokestone_block.json b/src/datagen/generated/surgebinding/assets/surgebinding/blockstates/smokestone_block.json new file mode 100644 index 000000000..1ae066322 --- /dev/null +++ b/src/datagen/generated/surgebinding/assets/surgebinding/blockstates/smokestone_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "surgebinding:block/gem_block" + } + } +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/assets/surgebinding/blockstates/topaz_block.json b/src/datagen/generated/surgebinding/assets/surgebinding/blockstates/topaz_block.json new file mode 100644 index 000000000..1ae066322 --- /dev/null +++ b/src/datagen/generated/surgebinding/assets/surgebinding/blockstates/topaz_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "surgebinding:block/gem_block" + } + } +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/assets/surgebinding/blockstates/zircon_block.json b/src/datagen/generated/surgebinding/assets/surgebinding/blockstates/zircon_block.json new file mode 100644 index 000000000..1ae066322 --- /dev/null +++ b/src/datagen/generated/surgebinding/assets/surgebinding/blockstates/zircon_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "surgebinding:block/gem_block" + } + } +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/assets/surgebinding/lang/en_us.json b/src/datagen/generated/surgebinding/assets/surgebinding/lang/en_us.json new file mode 100644 index 000000000..95b5e350f --- /dev/null +++ b/src/datagen/generated/surgebinding/assets/surgebinding/lang/en_us.json @@ -0,0 +1,123 @@ +{ + "advancements.surgebinding.surgebinding.abrasion.description": "Test description: Abrasion", + "advancements.surgebinding.surgebinding.abrasion.title": "Abrasion", + "advancements.surgebinding.surgebinding.adhesion.description": "Test description: Adhesion", + "advancements.surgebinding.surgebinding.adhesion.title": "Adhesion", + "advancements.surgebinding.surgebinding.cohesion.description": "Test description: Cohesion", + "advancements.surgebinding.surgebinding.cohesion.title": "Cohesion", + "advancements.surgebinding.surgebinding.description": "Test description: Surgebinding", + "advancements.surgebinding.surgebinding.division.description": "Test description: Division", + "advancements.surgebinding.surgebinding.division.title": "Division", + "advancements.surgebinding.surgebinding.gravitation.description": "Test description: Gravitation", + "advancements.surgebinding.surgebinding.gravitation.title": "Gravitation", + "advancements.surgebinding.surgebinding.illumination.description": "Test description: Illumination", + "advancements.surgebinding.surgebinding.illumination.title": "Illumination", + "advancements.surgebinding.surgebinding.progression.description": "Test description: Progression", + "advancements.surgebinding.surgebinding.progression.title": "Progression", + "advancements.surgebinding.surgebinding.tension.description": "Test description: Tension", + "advancements.surgebinding.surgebinding.tension.title": "Tension", + "advancements.surgebinding.surgebinding.title": "Surgebinding", + "advancements.surgebinding.surgebinding.transformation.description": "Test description: Transformation", + "advancements.surgebinding.surgebinding.transformation.title": "Transformation", + "advancements.surgebinding.surgebinding.transportation.description": "Test description: Transportation", + "advancements.surgebinding.surgebinding.transportation.title": "Transportation", + "attribute.surgebinding.abrasion": "Surge of Abrasion", + "attribute.surgebinding.adhesion": "Surge of Adhesion", + "attribute.surgebinding.cohesion": "Surge of Cohesion", + "attribute.surgebinding.division": "Surge of Division", + "attribute.surgebinding.gravitation": "Surge of Gravitation", + "attribute.surgebinding.illumination": "Surge of Illumination", + "attribute.surgebinding.progression": "Surge of Progression", + "attribute.surgebinding.tension": "Surge of Tension", + "attribute.surgebinding.transformation": "Surge of Transformation", + "attribute.surgebinding.transportation": "Surge of Transportation", + "block.surgebinding.amethyst_block": "Amethyst Block", + "block.surgebinding.diamond_block": "Diamond Block", + "block.surgebinding.emerald_block": "Emerald Block", + "block.surgebinding.garnet_block": "Garnet Block", + "block.surgebinding.heliodor_block": "Heliodor Block", + "block.surgebinding.lavis_polyp": "Lavis Polyp", + "block.surgebinding.prickletac": "Prickletac", + "block.surgebinding.rockbud_variant": "Rockbud Variant", + "block.surgebinding.ruby_block": "Ruby Block", + "block.surgebinding.sapphire_block": "Sapphire Block", + "block.surgebinding.smokestone_block": "Smokestone Block", + "block.surgebinding.topaz_block": "Topaz Block", + "block.surgebinding.vinebud": "Vinebud", + "block.surgebinding.zircon_block": "Zircon Block", + "entity.surgebinding.chull": "Chull", + "entity.surgebinding.cryptic": "Cryptic", + "entity.surgebinding.honorspren": "Honorspren", + "item.surgebinding.amethyst_broam": "Amethyst Broam", + "item.surgebinding.amethyst_chip": "Amethyst Chip", + "item.surgebinding.amethyst_mark": "Amethyst Mark", + "item.surgebinding.bondsmith_honorblade": "Bondsmith Honorblade", + "item.surgebinding.chull_spawn_egg": "Chull Spawn Egg", + "item.surgebinding.cryptic_spawn_egg": "Cryptic Spawn Egg", + "item.surgebinding.diamond_broam": "Diamond Broam", + "item.surgebinding.diamond_chip": "Diamond Chip", + "item.surgebinding.diamond_mark": "Diamond Mark", + "item.surgebinding.dustbringer_honorblade": "Dustbringer Honorblade", + "item.surgebinding.edgedancer_honorblade": "Edgedancer Honorblade", + "item.surgebinding.elsecaller_honorblade": "Elsecaller Honorblade", + "item.surgebinding.emerald_broam": "Emerald Broam", + "item.surgebinding.emerald_chip": "Emerald Chip", + "item.surgebinding.emerald_mark": "Emerald Mark", + "item.surgebinding.garnet_broam": "Garnet Broam", + "item.surgebinding.garnet_chip": "Garnet Chip", + "item.surgebinding.garnet_mark": "Garnet Mark", + "item.surgebinding.heliodor_broam": "Heliodor Broam", + "item.surgebinding.heliodor_chip": "Heliodor Chip", + "item.surgebinding.heliodor_mark": "Heliodor Mark", + "item.surgebinding.lightweaver_honorblade": "Lightweaver Honorblade", + "item.surgebinding.master_sword": "Master Sword", + "item.surgebinding.nightblood": "Nightblood", + "item.surgebinding.ruby_broam": "Ruby Broam", + "item.surgebinding.ruby_chip": "Ruby Chip", + "item.surgebinding.ruby_mark": "Ruby Mark", + "item.surgebinding.sapphire_broam": "Sapphire Broam", + "item.surgebinding.sapphire_chip": "Sapphire Chip", + "item.surgebinding.sapphire_mark": "Sapphire Mark", + "item.surgebinding.shardblade": "Shardblade", + "item.surgebinding.shardplate_boots": "Shardplate Boots", + "item.surgebinding.shardplate_chest": "Shardplate Chest", + "item.surgebinding.shardplate_helmet": "Shardplate Helmet", + "item.surgebinding.shardplate_leggings": "Shardplate Leggings", + "item.surgebinding.skybreaker_honorblade": "Skybreaker Honorblade", + "item.surgebinding.smokestone_broam": "Smokestone Broam", + "item.surgebinding.smokestone_chip": "Smokestone Chip", + "item.surgebinding.smokestone_mark": "Smokestone Mark", + "item.surgebinding.stoneward_honorblade": "Stoneward Honorblade", + "item.surgebinding.test_blade": "Test Blade", + "item.surgebinding.topaz_broam": "Topaz Broam", + "item.surgebinding.topaz_chip": "Topaz Chip", + "item.surgebinding.topaz_mark": "Topaz Mark", + "item.surgebinding.truthwatcher_honorblade": "Truthwatcher Honorblade", + "item.surgebinding.willshaper_honorblade": "Willshaper Honorblade", + "item.surgebinding.windrunner_honorblade": "Windrunner Honorblade", + "item.surgebinding.zircon_broam": "Zircon Broam", + "item.surgebinding.zircon_chip": "Zircon Chip", + "item.surgebinding.zircon_mark": "Zircon Mark", + "key.cosmere.stormlight.shardblade": "Summon/Dismiss Shardblade", + "manifestation.surgebinding.abrasion": "Abrasion", + "manifestation.surgebinding.abrasion.description": "Needs description", + "manifestation.surgebinding.adhesion": "Adhesion", + "manifestation.surgebinding.adhesion.description": "Needs description", + "manifestation.surgebinding.cohesion": "Cohesion", + "manifestation.surgebinding.cohesion.description": "Needs description", + "manifestation.surgebinding.division": "Division", + "manifestation.surgebinding.division.description": "Needs description", + "manifestation.surgebinding.gravitation": "Gravitation", + "manifestation.surgebinding.gravitation.description": "Needs description", + "manifestation.surgebinding.illumination": "Illumination", + "manifestation.surgebinding.illumination.description": "Needs description", + "manifestation.surgebinding.progression": "Progression", + "manifestation.surgebinding.progression.description": "Needs description", + "manifestation.surgebinding.tension": "Tension", + "manifestation.surgebinding.tension.description": "Needs description", + "manifestation.surgebinding.transformation": "Transformation", + "manifestation.surgebinding.transformation.description": "Needs description", + "manifestation.surgebinding.transportation": "Transportation", + "manifestation.surgebinding.transportation.description": "Needs description", + "tabs.surgebinding.items": "Surgebinding" +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/assets/surgebinding/models/block/gem_block.json b/src/datagen/generated/surgebinding/assets/surgebinding/models/block/gem_block.json new file mode 100644 index 000000000..261ef17cc --- /dev/null +++ b/src/datagen/generated/surgebinding/assets/surgebinding/models/block/gem_block.json @@ -0,0 +1,6 @@ +{ + "parent": "cosmere:block/shapes/cube_all_tinted", + "textures": { + "all": "surgebinding:block/gem_block" + } +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/assets/surgebinding/models/item/amethyst_block.json b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/amethyst_block.json new file mode 100644 index 000000000..6e008582f --- /dev/null +++ b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/amethyst_block.json @@ -0,0 +1,3 @@ +{ + "parent": "surgebinding:block/gem_block" +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/assets/surgebinding/models/item/amethyst_broam.json b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/amethyst_broam.json new file mode 100644 index 000000000..d614e1e7d --- /dev/null +++ b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/amethyst_broam.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "surgebinding:item/amethyst_broam" + } +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/assets/surgebinding/models/item/amethyst_chip.json b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/amethyst_chip.json new file mode 100644 index 000000000..e9245efd3 --- /dev/null +++ b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/amethyst_chip.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "surgebinding:item/amethyst_chip" + } +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/assets/surgebinding/models/item/amethyst_mark.json b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/amethyst_mark.json new file mode 100644 index 000000000..01d53a129 --- /dev/null +++ b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/amethyst_mark.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "surgebinding:item/amethyst_mark" + } +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/assets/surgebinding/models/item/chull_spawn_egg.json b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/chull_spawn_egg.json new file mode 100644 index 000000000..d1aaa9d6e --- /dev/null +++ b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/chull_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/assets/surgebinding/models/item/cryptic_spawn_egg.json b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/cryptic_spawn_egg.json new file mode 100644 index 000000000..d1aaa9d6e --- /dev/null +++ b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/cryptic_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/assets/surgebinding/models/item/diamond_block.json b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/diamond_block.json new file mode 100644 index 000000000..6e008582f --- /dev/null +++ b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/diamond_block.json @@ -0,0 +1,3 @@ +{ + "parent": "surgebinding:block/gem_block" +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/assets/surgebinding/models/item/diamond_broam.json b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/diamond_broam.json new file mode 100644 index 000000000..ad771d3f6 --- /dev/null +++ b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/diamond_broam.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "surgebinding:item/diamond_broam" + } +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/assets/surgebinding/models/item/diamond_chip.json b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/diamond_chip.json new file mode 100644 index 000000000..a1414806b --- /dev/null +++ b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/diamond_chip.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "surgebinding:item/diamond_chip" + } +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/assets/surgebinding/models/item/diamond_mark.json b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/diamond_mark.json new file mode 100644 index 000000000..5936df26f --- /dev/null +++ b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/diamond_mark.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "surgebinding:item/diamond_mark" + } +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/assets/surgebinding/models/item/emerald_block.json b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/emerald_block.json new file mode 100644 index 000000000..6e008582f --- /dev/null +++ b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/emerald_block.json @@ -0,0 +1,3 @@ +{ + "parent": "surgebinding:block/gem_block" +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/assets/surgebinding/models/item/emerald_broam.json b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/emerald_broam.json new file mode 100644 index 000000000..44578fd53 --- /dev/null +++ b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/emerald_broam.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "surgebinding:item/emerald_broam" + } +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/assets/surgebinding/models/item/emerald_chip.json b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/emerald_chip.json new file mode 100644 index 000000000..abbb15cbd --- /dev/null +++ b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/emerald_chip.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "surgebinding:item/emerald_chip" + } +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/assets/surgebinding/models/item/emerald_mark.json b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/emerald_mark.json new file mode 100644 index 000000000..a7018cf2b --- /dev/null +++ b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/emerald_mark.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "surgebinding:item/emerald_mark" + } +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/assets/surgebinding/models/item/garnet_block.json b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/garnet_block.json new file mode 100644 index 000000000..6e008582f --- /dev/null +++ b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/garnet_block.json @@ -0,0 +1,3 @@ +{ + "parent": "surgebinding:block/gem_block" +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/assets/surgebinding/models/item/garnet_broam.json b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/garnet_broam.json new file mode 100644 index 000000000..0da834507 --- /dev/null +++ b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/garnet_broam.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "surgebinding:item/garnet_broam" + } +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/assets/surgebinding/models/item/garnet_chip.json b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/garnet_chip.json new file mode 100644 index 000000000..5656fca9c --- /dev/null +++ b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/garnet_chip.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "surgebinding:item/garnet_chip" + } +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/assets/surgebinding/models/item/garnet_mark.json b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/garnet_mark.json new file mode 100644 index 000000000..15551c808 --- /dev/null +++ b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/garnet_mark.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "surgebinding:item/garnet_mark" + } +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/assets/surgebinding/models/item/heliodor_block.json b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/heliodor_block.json new file mode 100644 index 000000000..6e008582f --- /dev/null +++ b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/heliodor_block.json @@ -0,0 +1,3 @@ +{ + "parent": "surgebinding:block/gem_block" +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/assets/surgebinding/models/item/heliodor_broam.json b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/heliodor_broam.json new file mode 100644 index 000000000..625697269 --- /dev/null +++ b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/heliodor_broam.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "surgebinding:item/heliodor_broam" + } +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/assets/surgebinding/models/item/heliodor_chip.json b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/heliodor_chip.json new file mode 100644 index 000000000..3e80ea89b --- /dev/null +++ b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/heliodor_chip.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "surgebinding:item/heliodor_chip" + } +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/assets/surgebinding/models/item/heliodor_mark.json b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/heliodor_mark.json new file mode 100644 index 000000000..16af5b106 --- /dev/null +++ b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/heliodor_mark.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "surgebinding:item/heliodor_mark" + } +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/assets/surgebinding/models/item/ruby_block.json b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/ruby_block.json new file mode 100644 index 000000000..6e008582f --- /dev/null +++ b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/ruby_block.json @@ -0,0 +1,3 @@ +{ + "parent": "surgebinding:block/gem_block" +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/assets/surgebinding/models/item/ruby_broam.json b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/ruby_broam.json new file mode 100644 index 000000000..908d874c3 --- /dev/null +++ b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/ruby_broam.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "surgebinding:item/ruby_broam" + } +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/assets/surgebinding/models/item/ruby_chip.json b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/ruby_chip.json new file mode 100644 index 000000000..3fee9b5a9 --- /dev/null +++ b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/ruby_chip.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "surgebinding:item/ruby_chip" + } +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/assets/surgebinding/models/item/ruby_mark.json b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/ruby_mark.json new file mode 100644 index 000000000..d09131b97 --- /dev/null +++ b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/ruby_mark.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "surgebinding:item/ruby_mark" + } +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/assets/surgebinding/models/item/sapphire_block.json b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/sapphire_block.json new file mode 100644 index 000000000..6e008582f --- /dev/null +++ b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/sapphire_block.json @@ -0,0 +1,3 @@ +{ + "parent": "surgebinding:block/gem_block" +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/assets/surgebinding/models/item/sapphire_broam.json b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/sapphire_broam.json new file mode 100644 index 000000000..9e4e89fa6 --- /dev/null +++ b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/sapphire_broam.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "surgebinding:item/sapphire_broam" + } +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/assets/surgebinding/models/item/sapphire_chip.json b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/sapphire_chip.json new file mode 100644 index 000000000..0fb026e55 --- /dev/null +++ b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/sapphire_chip.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "surgebinding:item/sapphire_chip" + } +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/assets/surgebinding/models/item/sapphire_mark.json b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/sapphire_mark.json new file mode 100644 index 000000000..65be82237 --- /dev/null +++ b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/sapphire_mark.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "surgebinding:item/sapphire_mark" + } +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/assets/surgebinding/models/item/shardplate_boots.json b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/shardplate_boots.json new file mode 100644 index 000000000..0e7a62811 --- /dev/null +++ b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/shardplate_boots.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "surgebinding:item/shardplate_boots" + } +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/assets/surgebinding/models/item/shardplate_chest.json b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/shardplate_chest.json new file mode 100644 index 000000000..4b53a74df --- /dev/null +++ b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/shardplate_chest.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "surgebinding:item/shardplate_chest" + } +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/assets/surgebinding/models/item/shardplate_helmet.json b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/shardplate_helmet.json new file mode 100644 index 000000000..16b4f330a --- /dev/null +++ b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/shardplate_helmet.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "surgebinding:item/shardplate_helmet" + } +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/assets/surgebinding/models/item/shardplate_leggings.json b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/shardplate_leggings.json new file mode 100644 index 000000000..7a3ace781 --- /dev/null +++ b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/shardplate_leggings.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "surgebinding:item/shardplate_leggings" + } +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/assets/surgebinding/models/item/smokestone_block.json b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/smokestone_block.json new file mode 100644 index 000000000..6e008582f --- /dev/null +++ b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/smokestone_block.json @@ -0,0 +1,3 @@ +{ + "parent": "surgebinding:block/gem_block" +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/assets/surgebinding/models/item/smokestone_broam.json b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/smokestone_broam.json new file mode 100644 index 000000000..cf8df002e --- /dev/null +++ b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/smokestone_broam.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "surgebinding:item/smokestone_broam" + } +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/assets/surgebinding/models/item/smokestone_chip.json b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/smokestone_chip.json new file mode 100644 index 000000000..3401d7081 --- /dev/null +++ b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/smokestone_chip.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "surgebinding:item/smokestone_chip" + } +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/assets/surgebinding/models/item/smokestone_mark.json b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/smokestone_mark.json new file mode 100644 index 000000000..9cded172f --- /dev/null +++ b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/smokestone_mark.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "surgebinding:item/smokestone_mark" + } +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/assets/surgebinding/models/item/topaz_block.json b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/topaz_block.json new file mode 100644 index 000000000..6e008582f --- /dev/null +++ b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/topaz_block.json @@ -0,0 +1,3 @@ +{ + "parent": "surgebinding:block/gem_block" +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/assets/surgebinding/models/item/topaz_broam.json b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/topaz_broam.json new file mode 100644 index 000000000..a48c9d4c2 --- /dev/null +++ b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/topaz_broam.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "surgebinding:item/topaz_broam" + } +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/assets/surgebinding/models/item/topaz_chip.json b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/topaz_chip.json new file mode 100644 index 000000000..8c59a9267 --- /dev/null +++ b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/topaz_chip.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "surgebinding:item/topaz_chip" + } +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/assets/surgebinding/models/item/topaz_mark.json b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/topaz_mark.json new file mode 100644 index 000000000..8d603b4c9 --- /dev/null +++ b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/topaz_mark.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "surgebinding:item/topaz_mark" + } +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/assets/surgebinding/models/item/zircon_block.json b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/zircon_block.json new file mode 100644 index 000000000..6e008582f --- /dev/null +++ b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/zircon_block.json @@ -0,0 +1,3 @@ +{ + "parent": "surgebinding:block/gem_block" +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/assets/surgebinding/models/item/zircon_broam.json b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/zircon_broam.json new file mode 100644 index 000000000..01bf5bc75 --- /dev/null +++ b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/zircon_broam.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "surgebinding:item/zircon_broam" + } +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/assets/surgebinding/models/item/zircon_chip.json b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/zircon_chip.json new file mode 100644 index 000000000..de371c049 --- /dev/null +++ b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/zircon_chip.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "surgebinding:item/zircon_chip" + } +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/assets/surgebinding/models/item/zircon_mark.json b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/zircon_mark.json new file mode 100644 index 000000000..0fe19b7e5 --- /dev/null +++ b/src/datagen/generated/surgebinding/assets/surgebinding/models/item/zircon_mark.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "surgebinding:item/zircon_mark" + } +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/cosmere/tags/worldgen/biome/spawn_ores.json b/src/datagen/generated/surgebinding/data/cosmere/tags/worldgen/biome/spawn_ores.json new file mode 100644 index 000000000..7ae3ecfe6 --- /dev/null +++ b/src/datagen/generated/surgebinding/data/cosmere/tags/worldgen/biome/spawn_ores.json @@ -0,0 +1,5 @@ +{ + "values": [ + "#surgebinding:is_roshar" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/forge/tags/blocks/storage_blocks.json b/src/datagen/generated/surgebinding/data/forge/tags/blocks/storage_blocks.json new file mode 100644 index 000000000..636e2f706 --- /dev/null +++ b/src/datagen/generated/surgebinding/data/forge/tags/blocks/storage_blocks.json @@ -0,0 +1,14 @@ +{ + "values": [ + "#forge:storage_blocks/sapphire", + "#forge:storage_blocks/smokestone", + "#forge:storage_blocks/ruby", + "#forge:storage_blocks/diamond", + "#forge:storage_blocks/emerald", + "#forge:storage_blocks/garnet", + "#forge:storage_blocks/zircon", + "#forge:storage_blocks/amethyst", + "#forge:storage_blocks/topaz", + "#forge:storage_blocks/heliodor" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/forge/tags/blocks/storage_blocks/amethyst.json b/src/datagen/generated/surgebinding/data/forge/tags/blocks/storage_blocks/amethyst.json new file mode 100644 index 000000000..3c6567030 --- /dev/null +++ b/src/datagen/generated/surgebinding/data/forge/tags/blocks/storage_blocks/amethyst.json @@ -0,0 +1,5 @@ +{ + "values": [ + "surgebinding:amethyst_block" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/forge/tags/blocks/storage_blocks/diamond.json b/src/datagen/generated/surgebinding/data/forge/tags/blocks/storage_blocks/diamond.json new file mode 100644 index 000000000..66ee7c56d --- /dev/null +++ b/src/datagen/generated/surgebinding/data/forge/tags/blocks/storage_blocks/diamond.json @@ -0,0 +1,5 @@ +{ + "values": [ + "surgebinding:diamond_block" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/forge/tags/blocks/storage_blocks/emerald.json b/src/datagen/generated/surgebinding/data/forge/tags/blocks/storage_blocks/emerald.json new file mode 100644 index 000000000..9320f8729 --- /dev/null +++ b/src/datagen/generated/surgebinding/data/forge/tags/blocks/storage_blocks/emerald.json @@ -0,0 +1,5 @@ +{ + "values": [ + "surgebinding:emerald_block" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/forge/tags/blocks/storage_blocks/garnet.json b/src/datagen/generated/surgebinding/data/forge/tags/blocks/storage_blocks/garnet.json new file mode 100644 index 000000000..864ce8368 --- /dev/null +++ b/src/datagen/generated/surgebinding/data/forge/tags/blocks/storage_blocks/garnet.json @@ -0,0 +1,5 @@ +{ + "values": [ + "surgebinding:garnet_block" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/forge/tags/blocks/storage_blocks/heliodor.json b/src/datagen/generated/surgebinding/data/forge/tags/blocks/storage_blocks/heliodor.json new file mode 100644 index 000000000..6871cfd37 --- /dev/null +++ b/src/datagen/generated/surgebinding/data/forge/tags/blocks/storage_blocks/heliodor.json @@ -0,0 +1,5 @@ +{ + "values": [ + "surgebinding:heliodor_block" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/forge/tags/blocks/storage_blocks/ruby.json b/src/datagen/generated/surgebinding/data/forge/tags/blocks/storage_blocks/ruby.json new file mode 100644 index 000000000..fbe647d5f --- /dev/null +++ b/src/datagen/generated/surgebinding/data/forge/tags/blocks/storage_blocks/ruby.json @@ -0,0 +1,5 @@ +{ + "values": [ + "surgebinding:ruby_block" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/forge/tags/blocks/storage_blocks/sapphire.json b/src/datagen/generated/surgebinding/data/forge/tags/blocks/storage_blocks/sapphire.json new file mode 100644 index 000000000..bad7ca2bc --- /dev/null +++ b/src/datagen/generated/surgebinding/data/forge/tags/blocks/storage_blocks/sapphire.json @@ -0,0 +1,5 @@ +{ + "values": [ + "surgebinding:sapphire_block" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/forge/tags/blocks/storage_blocks/smokestone.json b/src/datagen/generated/surgebinding/data/forge/tags/blocks/storage_blocks/smokestone.json new file mode 100644 index 000000000..03dc67f12 --- /dev/null +++ b/src/datagen/generated/surgebinding/data/forge/tags/blocks/storage_blocks/smokestone.json @@ -0,0 +1,5 @@ +{ + "values": [ + "surgebinding:smokestone_block" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/forge/tags/blocks/storage_blocks/topaz.json b/src/datagen/generated/surgebinding/data/forge/tags/blocks/storage_blocks/topaz.json new file mode 100644 index 000000000..de76869b0 --- /dev/null +++ b/src/datagen/generated/surgebinding/data/forge/tags/blocks/storage_blocks/topaz.json @@ -0,0 +1,5 @@ +{ + "values": [ + "surgebinding:topaz_block" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/forge/tags/blocks/storage_blocks/zircon.json b/src/datagen/generated/surgebinding/data/forge/tags/blocks/storage_blocks/zircon.json new file mode 100644 index 000000000..7d95cc405 --- /dev/null +++ b/src/datagen/generated/surgebinding/data/forge/tags/blocks/storage_blocks/zircon.json @@ -0,0 +1,5 @@ +{ + "values": [ + "surgebinding:zircon_block" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/forge/tags/items/gems.json b/src/datagen/generated/surgebinding/data/forge/tags/items/gems.json new file mode 100644 index 000000000..efea61800 --- /dev/null +++ b/src/datagen/generated/surgebinding/data/forge/tags/items/gems.json @@ -0,0 +1,34 @@ +{ + "values": [ + "surgebinding:sapphire_broam", + "surgebinding:sapphire_mark", + "surgebinding:sapphire_chip", + "surgebinding:smokestone_broam", + "surgebinding:smokestone_mark", + "surgebinding:smokestone_chip", + "surgebinding:ruby_broam", + "surgebinding:ruby_mark", + "surgebinding:ruby_chip", + "surgebinding:diamond_broam", + "surgebinding:diamond_mark", + "surgebinding:diamond_chip", + "surgebinding:emerald_broam", + "surgebinding:emerald_mark", + "surgebinding:emerald_chip", + "surgebinding:garnet_broam", + "surgebinding:garnet_mark", + "surgebinding:garnet_chip", + "surgebinding:zircon_broam", + "surgebinding:zircon_mark", + "surgebinding:zircon_chip", + "surgebinding:amethyst_broam", + "surgebinding:amethyst_mark", + "surgebinding:amethyst_chip", + "surgebinding:topaz_broam", + "surgebinding:topaz_mark", + "surgebinding:topaz_chip", + "surgebinding:heliodor_broam", + "surgebinding:heliodor_mark", + "surgebinding:heliodor_chip" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/forge/tags/items/gems/amethyst.json b/src/datagen/generated/surgebinding/data/forge/tags/items/gems/amethyst.json new file mode 100644 index 000000000..e7686668c --- /dev/null +++ b/src/datagen/generated/surgebinding/data/forge/tags/items/gems/amethyst.json @@ -0,0 +1,5 @@ +{ + "values": [ + "surgebinding:amethyst_broam" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/forge/tags/items/gems/diamond.json b/src/datagen/generated/surgebinding/data/forge/tags/items/gems/diamond.json new file mode 100644 index 000000000..6fe99378c --- /dev/null +++ b/src/datagen/generated/surgebinding/data/forge/tags/items/gems/diamond.json @@ -0,0 +1,5 @@ +{ + "values": [ + "surgebinding:diamond_broam" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/forge/tags/items/gems/emerald.json b/src/datagen/generated/surgebinding/data/forge/tags/items/gems/emerald.json new file mode 100644 index 000000000..32f58dea6 --- /dev/null +++ b/src/datagen/generated/surgebinding/data/forge/tags/items/gems/emerald.json @@ -0,0 +1,5 @@ +{ + "values": [ + "surgebinding:emerald_broam" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/forge/tags/items/gems/garnet.json b/src/datagen/generated/surgebinding/data/forge/tags/items/gems/garnet.json new file mode 100644 index 000000000..72274112f --- /dev/null +++ b/src/datagen/generated/surgebinding/data/forge/tags/items/gems/garnet.json @@ -0,0 +1,5 @@ +{ + "values": [ + "surgebinding:garnet_broam" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/forge/tags/items/gems/heliodor.json b/src/datagen/generated/surgebinding/data/forge/tags/items/gems/heliodor.json new file mode 100644 index 000000000..69ba2fdde --- /dev/null +++ b/src/datagen/generated/surgebinding/data/forge/tags/items/gems/heliodor.json @@ -0,0 +1,5 @@ +{ + "values": [ + "surgebinding:heliodor_broam" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/forge/tags/items/gems/ruby.json b/src/datagen/generated/surgebinding/data/forge/tags/items/gems/ruby.json new file mode 100644 index 000000000..de5f1e506 --- /dev/null +++ b/src/datagen/generated/surgebinding/data/forge/tags/items/gems/ruby.json @@ -0,0 +1,5 @@ +{ + "values": [ + "surgebinding:ruby_broam" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/forge/tags/items/gems/sapphire.json b/src/datagen/generated/surgebinding/data/forge/tags/items/gems/sapphire.json new file mode 100644 index 000000000..fcf5fde66 --- /dev/null +++ b/src/datagen/generated/surgebinding/data/forge/tags/items/gems/sapphire.json @@ -0,0 +1,5 @@ +{ + "values": [ + "surgebinding:sapphire_broam" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/forge/tags/items/gems/smokestone.json b/src/datagen/generated/surgebinding/data/forge/tags/items/gems/smokestone.json new file mode 100644 index 000000000..75583218f --- /dev/null +++ b/src/datagen/generated/surgebinding/data/forge/tags/items/gems/smokestone.json @@ -0,0 +1,5 @@ +{ + "values": [ + "surgebinding:smokestone_broam" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/forge/tags/items/gems/topaz.json b/src/datagen/generated/surgebinding/data/forge/tags/items/gems/topaz.json new file mode 100644 index 000000000..94505cd02 --- /dev/null +++ b/src/datagen/generated/surgebinding/data/forge/tags/items/gems/topaz.json @@ -0,0 +1,5 @@ +{ + "values": [ + "surgebinding:topaz_broam" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/forge/tags/items/gems/zircon.json b/src/datagen/generated/surgebinding/data/forge/tags/items/gems/zircon.json new file mode 100644 index 000000000..0112431fb --- /dev/null +++ b/src/datagen/generated/surgebinding/data/forge/tags/items/gems/zircon.json @@ -0,0 +1,5 @@ +{ + "values": [ + "surgebinding:zircon_broam" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/forge/tags/items/storage_blocks.json b/src/datagen/generated/surgebinding/data/forge/tags/items/storage_blocks.json new file mode 100644 index 000000000..636e2f706 --- /dev/null +++ b/src/datagen/generated/surgebinding/data/forge/tags/items/storage_blocks.json @@ -0,0 +1,14 @@ +{ + "values": [ + "#forge:storage_blocks/sapphire", + "#forge:storage_blocks/smokestone", + "#forge:storage_blocks/ruby", + "#forge:storage_blocks/diamond", + "#forge:storage_blocks/emerald", + "#forge:storage_blocks/garnet", + "#forge:storage_blocks/zircon", + "#forge:storage_blocks/amethyst", + "#forge:storage_blocks/topaz", + "#forge:storage_blocks/heliodor" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/forge/tags/items/storage_blocks/amethyst.json b/src/datagen/generated/surgebinding/data/forge/tags/items/storage_blocks/amethyst.json new file mode 100644 index 000000000..3c6567030 --- /dev/null +++ b/src/datagen/generated/surgebinding/data/forge/tags/items/storage_blocks/amethyst.json @@ -0,0 +1,5 @@ +{ + "values": [ + "surgebinding:amethyst_block" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/forge/tags/items/storage_blocks/diamond.json b/src/datagen/generated/surgebinding/data/forge/tags/items/storage_blocks/diamond.json new file mode 100644 index 000000000..66ee7c56d --- /dev/null +++ b/src/datagen/generated/surgebinding/data/forge/tags/items/storage_blocks/diamond.json @@ -0,0 +1,5 @@ +{ + "values": [ + "surgebinding:diamond_block" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/forge/tags/items/storage_blocks/emerald.json b/src/datagen/generated/surgebinding/data/forge/tags/items/storage_blocks/emerald.json new file mode 100644 index 000000000..9320f8729 --- /dev/null +++ b/src/datagen/generated/surgebinding/data/forge/tags/items/storage_blocks/emerald.json @@ -0,0 +1,5 @@ +{ + "values": [ + "surgebinding:emerald_block" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/forge/tags/items/storage_blocks/garnet.json b/src/datagen/generated/surgebinding/data/forge/tags/items/storage_blocks/garnet.json new file mode 100644 index 000000000..864ce8368 --- /dev/null +++ b/src/datagen/generated/surgebinding/data/forge/tags/items/storage_blocks/garnet.json @@ -0,0 +1,5 @@ +{ + "values": [ + "surgebinding:garnet_block" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/forge/tags/items/storage_blocks/heliodor.json b/src/datagen/generated/surgebinding/data/forge/tags/items/storage_blocks/heliodor.json new file mode 100644 index 000000000..6871cfd37 --- /dev/null +++ b/src/datagen/generated/surgebinding/data/forge/tags/items/storage_blocks/heliodor.json @@ -0,0 +1,5 @@ +{ + "values": [ + "surgebinding:heliodor_block" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/forge/tags/items/storage_blocks/ruby.json b/src/datagen/generated/surgebinding/data/forge/tags/items/storage_blocks/ruby.json new file mode 100644 index 000000000..fbe647d5f --- /dev/null +++ b/src/datagen/generated/surgebinding/data/forge/tags/items/storage_blocks/ruby.json @@ -0,0 +1,5 @@ +{ + "values": [ + "surgebinding:ruby_block" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/forge/tags/items/storage_blocks/sapphire.json b/src/datagen/generated/surgebinding/data/forge/tags/items/storage_blocks/sapphire.json new file mode 100644 index 000000000..bad7ca2bc --- /dev/null +++ b/src/datagen/generated/surgebinding/data/forge/tags/items/storage_blocks/sapphire.json @@ -0,0 +1,5 @@ +{ + "values": [ + "surgebinding:sapphire_block" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/forge/tags/items/storage_blocks/smokestone.json b/src/datagen/generated/surgebinding/data/forge/tags/items/storage_blocks/smokestone.json new file mode 100644 index 000000000..03dc67f12 --- /dev/null +++ b/src/datagen/generated/surgebinding/data/forge/tags/items/storage_blocks/smokestone.json @@ -0,0 +1,5 @@ +{ + "values": [ + "surgebinding:smokestone_block" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/forge/tags/items/storage_blocks/topaz.json b/src/datagen/generated/surgebinding/data/forge/tags/items/storage_blocks/topaz.json new file mode 100644 index 000000000..de76869b0 --- /dev/null +++ b/src/datagen/generated/surgebinding/data/forge/tags/items/storage_blocks/topaz.json @@ -0,0 +1,5 @@ +{ + "values": [ + "surgebinding:topaz_block" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/forge/tags/items/storage_blocks/zircon.json b/src/datagen/generated/surgebinding/data/forge/tags/items/storage_blocks/zircon.json new file mode 100644 index 000000000..7d95cc405 --- /dev/null +++ b/src/datagen/generated/surgebinding/data/forge/tags/items/storage_blocks/zircon.json @@ -0,0 +1,5 @@ +{ + "values": [ + "surgebinding:zircon_block" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/minecraft/tags/blocks/beacon_base_blocks.json b/src/datagen/generated/surgebinding/data/minecraft/tags/blocks/beacon_base_blocks.json new file mode 100644 index 000000000..27e70c920 --- /dev/null +++ b/src/datagen/generated/surgebinding/data/minecraft/tags/blocks/beacon_base_blocks.json @@ -0,0 +1,14 @@ +{ + "values": [ + "surgebinding:sapphire_block", + "surgebinding:smokestone_block", + "surgebinding:ruby_block", + "surgebinding:diamond_block", + "surgebinding:emerald_block", + "surgebinding:garnet_block", + "surgebinding:zircon_block", + "surgebinding:amethyst_block", + "surgebinding:topaz_block", + "surgebinding:heliodor_block" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/minecraft/tags/blocks/dragon_immune.json b/src/datagen/generated/surgebinding/data/minecraft/tags/blocks/dragon_immune.json new file mode 100644 index 000000000..27e70c920 --- /dev/null +++ b/src/datagen/generated/surgebinding/data/minecraft/tags/blocks/dragon_immune.json @@ -0,0 +1,14 @@ +{ + "values": [ + "surgebinding:sapphire_block", + "surgebinding:smokestone_block", + "surgebinding:ruby_block", + "surgebinding:diamond_block", + "surgebinding:emerald_block", + "surgebinding:garnet_block", + "surgebinding:zircon_block", + "surgebinding:amethyst_block", + "surgebinding:topaz_block", + "surgebinding:heliodor_block" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/minecraft/tags/blocks/mineable/axe.json b/src/datagen/generated/surgebinding/data/minecraft/tags/blocks/mineable/axe.json new file mode 100644 index 000000000..96854d700 --- /dev/null +++ b/src/datagen/generated/surgebinding/data/minecraft/tags/blocks/mineable/axe.json @@ -0,0 +1,8 @@ +{ + "values": [ + "surgebinding:lavis_polyp", + "surgebinding:prickletac", + "surgebinding:rockbud_variant", + "surgebinding:vinebud" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/minecraft/tags/blocks/mineable/pickaxe.json b/src/datagen/generated/surgebinding/data/minecraft/tags/blocks/mineable/pickaxe.json new file mode 100644 index 000000000..c85253fef --- /dev/null +++ b/src/datagen/generated/surgebinding/data/minecraft/tags/blocks/mineable/pickaxe.json @@ -0,0 +1,18 @@ +{ + "values": [ + "surgebinding:sapphire_block", + "surgebinding:smokestone_block", + "surgebinding:ruby_block", + "surgebinding:diamond_block", + "surgebinding:emerald_block", + "surgebinding:garnet_block", + "surgebinding:zircon_block", + "surgebinding:amethyst_block", + "surgebinding:topaz_block", + "surgebinding:heliodor_block", + "surgebinding:lavis_polyp", + "surgebinding:prickletac", + "surgebinding:rockbud_variant", + "surgebinding:vinebud" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/minecraft/tags/blocks/mineable/shovel.json b/src/datagen/generated/surgebinding/data/minecraft/tags/blocks/mineable/shovel.json new file mode 100644 index 000000000..96854d700 --- /dev/null +++ b/src/datagen/generated/surgebinding/data/minecraft/tags/blocks/mineable/shovel.json @@ -0,0 +1,8 @@ +{ + "values": [ + "surgebinding:lavis_polyp", + "surgebinding:prickletac", + "surgebinding:rockbud_variant", + "surgebinding:vinebud" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/minecraft/tags/blocks/needs_iron_tool.json b/src/datagen/generated/surgebinding/data/minecraft/tags/blocks/needs_iron_tool.json new file mode 100644 index 000000000..27e70c920 --- /dev/null +++ b/src/datagen/generated/surgebinding/data/minecraft/tags/blocks/needs_iron_tool.json @@ -0,0 +1,14 @@ +{ + "values": [ + "surgebinding:sapphire_block", + "surgebinding:smokestone_block", + "surgebinding:ruby_block", + "surgebinding:diamond_block", + "surgebinding:emerald_block", + "surgebinding:garnet_block", + "surgebinding:zircon_block", + "surgebinding:amethyst_block", + "surgebinding:topaz_block", + "surgebinding:heliodor_block" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/surgebinding/advancements/recipes/decorations/amethyst_block.json b/src/datagen/generated/surgebinding/data/surgebinding/advancements/recipes/decorations/amethyst_block.json new file mode 100644 index 000000000..bb78af387 --- /dev/null +++ b/src/datagen/generated/surgebinding/data/surgebinding/advancements/recipes/decorations/amethyst_block.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "tag": "forge:gems/amethyst" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "surgebinding:amethyst_block" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "surgebinding:amethyst_block" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/surgebinding/advancements/recipes/decorations/diamond_block.json b/src/datagen/generated/surgebinding/data/surgebinding/advancements/recipes/decorations/diamond_block.json new file mode 100644 index 000000000..f5c9907e1 --- /dev/null +++ b/src/datagen/generated/surgebinding/data/surgebinding/advancements/recipes/decorations/diamond_block.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "tag": "forge:gems/diamond" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "surgebinding:diamond_block" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "surgebinding:diamond_block" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/surgebinding/advancements/recipes/decorations/emerald_block.json b/src/datagen/generated/surgebinding/data/surgebinding/advancements/recipes/decorations/emerald_block.json new file mode 100644 index 000000000..6e5cb6700 --- /dev/null +++ b/src/datagen/generated/surgebinding/data/surgebinding/advancements/recipes/decorations/emerald_block.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "tag": "forge:gems/emerald" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "surgebinding:emerald_block" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "surgebinding:emerald_block" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/surgebinding/advancements/recipes/decorations/garnet_block.json b/src/datagen/generated/surgebinding/data/surgebinding/advancements/recipes/decorations/garnet_block.json new file mode 100644 index 000000000..6515059a9 --- /dev/null +++ b/src/datagen/generated/surgebinding/data/surgebinding/advancements/recipes/decorations/garnet_block.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "tag": "forge:gems/garnet" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "surgebinding:garnet_block" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "surgebinding:garnet_block" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/surgebinding/advancements/recipes/decorations/heliodor_block.json b/src/datagen/generated/surgebinding/data/surgebinding/advancements/recipes/decorations/heliodor_block.json new file mode 100644 index 000000000..cbc96de7d --- /dev/null +++ b/src/datagen/generated/surgebinding/data/surgebinding/advancements/recipes/decorations/heliodor_block.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "tag": "forge:gems/heliodor" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "surgebinding:heliodor_block" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "surgebinding:heliodor_block" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/surgebinding/advancements/recipes/decorations/ruby_block.json b/src/datagen/generated/surgebinding/data/surgebinding/advancements/recipes/decorations/ruby_block.json new file mode 100644 index 000000000..908ec848f --- /dev/null +++ b/src/datagen/generated/surgebinding/data/surgebinding/advancements/recipes/decorations/ruby_block.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "tag": "forge:gems/ruby" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "surgebinding:ruby_block" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "surgebinding:ruby_block" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/surgebinding/advancements/recipes/decorations/sapphire_block.json b/src/datagen/generated/surgebinding/data/surgebinding/advancements/recipes/decorations/sapphire_block.json new file mode 100644 index 000000000..6fc68755f --- /dev/null +++ b/src/datagen/generated/surgebinding/data/surgebinding/advancements/recipes/decorations/sapphire_block.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "tag": "forge:gems/sapphire" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "surgebinding:sapphire_block" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "surgebinding:sapphire_block" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/surgebinding/advancements/recipes/decorations/smokestone_block.json b/src/datagen/generated/surgebinding/data/surgebinding/advancements/recipes/decorations/smokestone_block.json new file mode 100644 index 000000000..999af8b25 --- /dev/null +++ b/src/datagen/generated/surgebinding/data/surgebinding/advancements/recipes/decorations/smokestone_block.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "tag": "forge:gems/smokestone" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "surgebinding:smokestone_block" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "surgebinding:smokestone_block" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/surgebinding/advancements/recipes/decorations/topaz_block.json b/src/datagen/generated/surgebinding/data/surgebinding/advancements/recipes/decorations/topaz_block.json new file mode 100644 index 000000000..e83a6db39 --- /dev/null +++ b/src/datagen/generated/surgebinding/data/surgebinding/advancements/recipes/decorations/topaz_block.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "tag": "forge:gems/topaz" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "surgebinding:topaz_block" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "surgebinding:topaz_block" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/surgebinding/advancements/recipes/decorations/zircon_block.json b/src/datagen/generated/surgebinding/data/surgebinding/advancements/recipes/decorations/zircon_block.json new file mode 100644 index 000000000..229b8e8e8 --- /dev/null +++ b/src/datagen/generated/surgebinding/data/surgebinding/advancements/recipes/decorations/zircon_block.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "tag": "forge:gems/zircon" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "surgebinding:zircon_block" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "surgebinding:zircon_block" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/surgebinding/advancements/recipes/misc/conversions/amethyst_block_deconstruct.json b/src/datagen/generated/surgebinding/data/surgebinding/advancements/recipes/misc/conversions/amethyst_block_deconstruct.json new file mode 100644 index 000000000..6b218402e --- /dev/null +++ b/src/datagen/generated/surgebinding/data/surgebinding/advancements/recipes/misc/conversions/amethyst_block_deconstruct.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "surgebinding:amethyst_broam" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "surgebinding:conversions/amethyst_block_deconstruct" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "surgebinding:conversions/amethyst_block_deconstruct" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/surgebinding/advancements/recipes/misc/conversions/diamond_block_deconstruct.json b/src/datagen/generated/surgebinding/data/surgebinding/advancements/recipes/misc/conversions/diamond_block_deconstruct.json new file mode 100644 index 000000000..b1fb0ce2c --- /dev/null +++ b/src/datagen/generated/surgebinding/data/surgebinding/advancements/recipes/misc/conversions/diamond_block_deconstruct.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "surgebinding:diamond_broam" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "surgebinding:conversions/diamond_block_deconstruct" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "surgebinding:conversions/diamond_block_deconstruct" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/surgebinding/advancements/recipes/misc/conversions/emerald_block_deconstruct.json b/src/datagen/generated/surgebinding/data/surgebinding/advancements/recipes/misc/conversions/emerald_block_deconstruct.json new file mode 100644 index 000000000..b72fbd11f --- /dev/null +++ b/src/datagen/generated/surgebinding/data/surgebinding/advancements/recipes/misc/conversions/emerald_block_deconstruct.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "surgebinding:emerald_broam" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "surgebinding:conversions/emerald_block_deconstruct" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "surgebinding:conversions/emerald_block_deconstruct" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/surgebinding/advancements/recipes/misc/conversions/garnet_block_deconstruct.json b/src/datagen/generated/surgebinding/data/surgebinding/advancements/recipes/misc/conversions/garnet_block_deconstruct.json new file mode 100644 index 000000000..43a9daf61 --- /dev/null +++ b/src/datagen/generated/surgebinding/data/surgebinding/advancements/recipes/misc/conversions/garnet_block_deconstruct.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "surgebinding:garnet_broam" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "surgebinding:conversions/garnet_block_deconstruct" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "surgebinding:conversions/garnet_block_deconstruct" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/surgebinding/advancements/recipes/misc/conversions/heliodor_block_deconstruct.json b/src/datagen/generated/surgebinding/data/surgebinding/advancements/recipes/misc/conversions/heliodor_block_deconstruct.json new file mode 100644 index 000000000..26aeb18ed --- /dev/null +++ b/src/datagen/generated/surgebinding/data/surgebinding/advancements/recipes/misc/conversions/heliodor_block_deconstruct.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "surgebinding:heliodor_broam" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "surgebinding:conversions/heliodor_block_deconstruct" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "surgebinding:conversions/heliodor_block_deconstruct" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/surgebinding/advancements/recipes/misc/conversions/ruby_block_deconstruct.json b/src/datagen/generated/surgebinding/data/surgebinding/advancements/recipes/misc/conversions/ruby_block_deconstruct.json new file mode 100644 index 000000000..5c8175b08 --- /dev/null +++ b/src/datagen/generated/surgebinding/data/surgebinding/advancements/recipes/misc/conversions/ruby_block_deconstruct.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "surgebinding:ruby_broam" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "surgebinding:conversions/ruby_block_deconstruct" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "surgebinding:conversions/ruby_block_deconstruct" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/surgebinding/advancements/recipes/misc/conversions/sapphire_block_deconstruct.json b/src/datagen/generated/surgebinding/data/surgebinding/advancements/recipes/misc/conversions/sapphire_block_deconstruct.json new file mode 100644 index 000000000..6e6c47309 --- /dev/null +++ b/src/datagen/generated/surgebinding/data/surgebinding/advancements/recipes/misc/conversions/sapphire_block_deconstruct.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "surgebinding:sapphire_broam" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "surgebinding:conversions/sapphire_block_deconstruct" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "surgebinding:conversions/sapphire_block_deconstruct" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/surgebinding/advancements/recipes/misc/conversions/smokestone_block_deconstruct.json b/src/datagen/generated/surgebinding/data/surgebinding/advancements/recipes/misc/conversions/smokestone_block_deconstruct.json new file mode 100644 index 000000000..c75109f99 --- /dev/null +++ b/src/datagen/generated/surgebinding/data/surgebinding/advancements/recipes/misc/conversions/smokestone_block_deconstruct.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "surgebinding:smokestone_broam" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "surgebinding:conversions/smokestone_block_deconstruct" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "surgebinding:conversions/smokestone_block_deconstruct" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/surgebinding/advancements/recipes/misc/conversions/topaz_block_deconstruct.json b/src/datagen/generated/surgebinding/data/surgebinding/advancements/recipes/misc/conversions/topaz_block_deconstruct.json new file mode 100644 index 000000000..8560adf05 --- /dev/null +++ b/src/datagen/generated/surgebinding/data/surgebinding/advancements/recipes/misc/conversions/topaz_block_deconstruct.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "surgebinding:topaz_broam" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "surgebinding:conversions/topaz_block_deconstruct" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "surgebinding:conversions/topaz_block_deconstruct" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/surgebinding/advancements/recipes/misc/conversions/zircon_block_deconstruct.json b/src/datagen/generated/surgebinding/data/surgebinding/advancements/recipes/misc/conversions/zircon_block_deconstruct.json new file mode 100644 index 000000000..462b6971c --- /dev/null +++ b/src/datagen/generated/surgebinding/data/surgebinding/advancements/recipes/misc/conversions/zircon_block_deconstruct.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "surgebinding:zircon_broam" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "surgebinding:conversions/zircon_block_deconstruct" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "surgebinding:conversions/zircon_block_deconstruct" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/surgebinding/loot_tables/blocks/amethyst_block.json b/src/datagen/generated/surgebinding/data/surgebinding/loot_tables/blocks/amethyst_block.json new file mode 100644 index 000000000..823f5db6e --- /dev/null +++ b/src/datagen/generated/surgebinding/data/surgebinding/loot_tables/blocks/amethyst_block.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "surgebinding:amethyst_block" + } + ], + "name": "main", + "rolls": 1.0 + } + ], + "random_sequence": "surgebinding:blocks/amethyst_block" +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/surgebinding/loot_tables/blocks/diamond_block.json b/src/datagen/generated/surgebinding/data/surgebinding/loot_tables/blocks/diamond_block.json new file mode 100644 index 000000000..80efd0fda --- /dev/null +++ b/src/datagen/generated/surgebinding/data/surgebinding/loot_tables/blocks/diamond_block.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "surgebinding:diamond_block" + } + ], + "name": "main", + "rolls": 1.0 + } + ], + "random_sequence": "surgebinding:blocks/diamond_block" +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/surgebinding/loot_tables/blocks/emerald_block.json b/src/datagen/generated/surgebinding/data/surgebinding/loot_tables/blocks/emerald_block.json new file mode 100644 index 000000000..55b471472 --- /dev/null +++ b/src/datagen/generated/surgebinding/data/surgebinding/loot_tables/blocks/emerald_block.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "surgebinding:emerald_block" + } + ], + "name": "main", + "rolls": 1.0 + } + ], + "random_sequence": "surgebinding:blocks/emerald_block" +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/surgebinding/loot_tables/blocks/garnet_block.json b/src/datagen/generated/surgebinding/data/surgebinding/loot_tables/blocks/garnet_block.json new file mode 100644 index 000000000..cf02669f2 --- /dev/null +++ b/src/datagen/generated/surgebinding/data/surgebinding/loot_tables/blocks/garnet_block.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "surgebinding:garnet_block" + } + ], + "name": "main", + "rolls": 1.0 + } + ], + "random_sequence": "surgebinding:blocks/garnet_block" +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/surgebinding/loot_tables/blocks/heliodor_block.json b/src/datagen/generated/surgebinding/data/surgebinding/loot_tables/blocks/heliodor_block.json new file mode 100644 index 000000000..6566660e8 --- /dev/null +++ b/src/datagen/generated/surgebinding/data/surgebinding/loot_tables/blocks/heliodor_block.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "surgebinding:heliodor_block" + } + ], + "name": "main", + "rolls": 1.0 + } + ], + "random_sequence": "surgebinding:blocks/heliodor_block" +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/surgebinding/loot_tables/blocks/lavis_polyp.json b/src/datagen/generated/surgebinding/data/surgebinding/loot_tables/blocks/lavis_polyp.json new file mode 100644 index 000000000..213509703 --- /dev/null +++ b/src/datagen/generated/surgebinding/data/surgebinding/loot_tables/blocks/lavis_polyp.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "surgebinding:lavis_polyp" + } + ], + "name": "main", + "rolls": 1.0 + } + ], + "random_sequence": "surgebinding:blocks/lavis_polyp" +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/surgebinding/loot_tables/blocks/prickletac.json b/src/datagen/generated/surgebinding/data/surgebinding/loot_tables/blocks/prickletac.json new file mode 100644 index 000000000..fd866f3ac --- /dev/null +++ b/src/datagen/generated/surgebinding/data/surgebinding/loot_tables/blocks/prickletac.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "surgebinding:prickletac" + } + ], + "name": "main", + "rolls": 1.0 + } + ], + "random_sequence": "surgebinding:blocks/prickletac" +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/surgebinding/loot_tables/blocks/rockbud_variant.json b/src/datagen/generated/surgebinding/data/surgebinding/loot_tables/blocks/rockbud_variant.json new file mode 100644 index 000000000..139d2286c --- /dev/null +++ b/src/datagen/generated/surgebinding/data/surgebinding/loot_tables/blocks/rockbud_variant.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "surgebinding:rockbud_variant" + } + ], + "name": "main", + "rolls": 1.0 + } + ], + "random_sequence": "surgebinding:blocks/rockbud_variant" +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/surgebinding/loot_tables/blocks/ruby_block.json b/src/datagen/generated/surgebinding/data/surgebinding/loot_tables/blocks/ruby_block.json new file mode 100644 index 000000000..c8a213987 --- /dev/null +++ b/src/datagen/generated/surgebinding/data/surgebinding/loot_tables/blocks/ruby_block.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "surgebinding:ruby_block" + } + ], + "name": "main", + "rolls": 1.0 + } + ], + "random_sequence": "surgebinding:blocks/ruby_block" +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/surgebinding/loot_tables/blocks/sapphire_block.json b/src/datagen/generated/surgebinding/data/surgebinding/loot_tables/blocks/sapphire_block.json new file mode 100644 index 000000000..5d2aec80f --- /dev/null +++ b/src/datagen/generated/surgebinding/data/surgebinding/loot_tables/blocks/sapphire_block.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "surgebinding:sapphire_block" + } + ], + "name": "main", + "rolls": 1.0 + } + ], + "random_sequence": "surgebinding:blocks/sapphire_block" +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/surgebinding/loot_tables/blocks/smokestone_block.json b/src/datagen/generated/surgebinding/data/surgebinding/loot_tables/blocks/smokestone_block.json new file mode 100644 index 000000000..e01559e27 --- /dev/null +++ b/src/datagen/generated/surgebinding/data/surgebinding/loot_tables/blocks/smokestone_block.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "surgebinding:smokestone_block" + } + ], + "name": "main", + "rolls": 1.0 + } + ], + "random_sequence": "surgebinding:blocks/smokestone_block" +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/surgebinding/loot_tables/blocks/topaz_block.json b/src/datagen/generated/surgebinding/data/surgebinding/loot_tables/blocks/topaz_block.json new file mode 100644 index 000000000..270d4c2eb --- /dev/null +++ b/src/datagen/generated/surgebinding/data/surgebinding/loot_tables/blocks/topaz_block.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "surgebinding:topaz_block" + } + ], + "name": "main", + "rolls": 1.0 + } + ], + "random_sequence": "surgebinding:blocks/topaz_block" +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/surgebinding/loot_tables/blocks/vinebud.json b/src/datagen/generated/surgebinding/data/surgebinding/loot_tables/blocks/vinebud.json new file mode 100644 index 000000000..d4d1d16d8 --- /dev/null +++ b/src/datagen/generated/surgebinding/data/surgebinding/loot_tables/blocks/vinebud.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "surgebinding:vinebud" + } + ], + "name": "main", + "rolls": 1.0 + } + ], + "random_sequence": "surgebinding:blocks/vinebud" +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/surgebinding/loot_tables/blocks/zircon_block.json b/src/datagen/generated/surgebinding/data/surgebinding/loot_tables/blocks/zircon_block.json new file mode 100644 index 000000000..5071276f3 --- /dev/null +++ b/src/datagen/generated/surgebinding/data/surgebinding/loot_tables/blocks/zircon_block.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "surgebinding:zircon_block" + } + ], + "name": "main", + "rolls": 1.0 + } + ], + "random_sequence": "surgebinding:blocks/zircon_block" +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/surgebinding/loot_tables/entities/chull.json b/src/datagen/generated/surgebinding/data/surgebinding/loot_tables/entities/chull.json new file mode 100644 index 000000000..255067008 --- /dev/null +++ b/src/datagen/generated/surgebinding/data/surgebinding/loot_tables/entities/chull.json @@ -0,0 +1,633 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:killed_by_player" + }, + { + "chance": 0.1, + "condition": "minecraft:random_chance_with_looting", + "looting_multiplier": 0.05 + } + ], + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "add": false, + "count": { + "type": "minecraft:uniform", + "max": 1.0, + "min": -1.0 + }, + "function": "minecraft:set_count" + } + ], + "name": "surgebinding:sapphire_broam" + }, + { + "type": "minecraft:item", + "functions": [ + { + "add": false, + "count": { + "type": "minecraft:uniform", + "max": 2.0, + "min": -1.0 + }, + "function": "minecraft:set_count" + }, + { + "count": { + "type": "minecraft:uniform", + "max": 1.0, + "min": 0.0 + }, + "function": "minecraft:looting_enchant" + } + ], + "name": "surgebinding:sapphire_mark" + }, + { + "type": "minecraft:item", + "functions": [ + { + "add": false, + "count": { + "type": "minecraft:uniform", + "max": 3.0, + "min": 1.0 + }, + "function": "minecraft:set_count" + }, + { + "count": { + "type": "minecraft:uniform", + "max": 1.0, + "min": 0.0 + }, + "function": "minecraft:looting_enchant" + } + ], + "name": "surgebinding:sapphire_chip" + }, + { + "type": "minecraft:item", + "functions": [ + { + "add": false, + "count": { + "type": "minecraft:uniform", + "max": 1.0, + "min": -1.0 + }, + "function": "minecraft:set_count" + } + ], + "name": "surgebinding:smokestone_broam" + }, + { + "type": "minecraft:item", + "functions": [ + { + "add": false, + "count": { + "type": "minecraft:uniform", + "max": 2.0, + "min": -1.0 + }, + "function": "minecraft:set_count" + }, + { + "count": { + "type": "minecraft:uniform", + "max": 1.0, + "min": 0.0 + }, + "function": "minecraft:looting_enchant" + } + ], + "name": "surgebinding:smokestone_mark" + }, + { + "type": "minecraft:item", + "functions": [ + { + "add": false, + "count": { + "type": "minecraft:uniform", + "max": 3.0, + "min": 1.0 + }, + "function": "minecraft:set_count" + }, + { + "count": { + "type": "minecraft:uniform", + "max": 1.0, + "min": 0.0 + }, + "function": "minecraft:looting_enchant" + } + ], + "name": "surgebinding:smokestone_chip" + }, + { + "type": "minecraft:item", + "functions": [ + { + "add": false, + "count": { + "type": "minecraft:uniform", + "max": 1.0, + "min": -1.0 + }, + "function": "minecraft:set_count" + } + ], + "name": "surgebinding:ruby_broam" + }, + { + "type": "minecraft:item", + "functions": [ + { + "add": false, + "count": { + "type": "minecraft:uniform", + "max": 2.0, + "min": -1.0 + }, + "function": "minecraft:set_count" + }, + { + "count": { + "type": "minecraft:uniform", + "max": 1.0, + "min": 0.0 + }, + "function": "minecraft:looting_enchant" + } + ], + "name": "surgebinding:ruby_mark" + }, + { + "type": "minecraft:item", + "functions": [ + { + "add": false, + "count": { + "type": "minecraft:uniform", + "max": 3.0, + "min": 1.0 + }, + "function": "minecraft:set_count" + }, + { + "count": { + "type": "minecraft:uniform", + "max": 1.0, + "min": 0.0 + }, + "function": "minecraft:looting_enchant" + } + ], + "name": "surgebinding:ruby_chip" + }, + { + "type": "minecraft:item", + "functions": [ + { + "add": false, + "count": { + "type": "minecraft:uniform", + "max": 1.0, + "min": -1.0 + }, + "function": "minecraft:set_count" + } + ], + "name": "surgebinding:diamond_broam" + }, + { + "type": "minecraft:item", + "functions": [ + { + "add": false, + "count": { + "type": "minecraft:uniform", + "max": 2.0, + "min": -1.0 + }, + "function": "minecraft:set_count" + }, + { + "count": { + "type": "minecraft:uniform", + "max": 1.0, + "min": 0.0 + }, + "function": "minecraft:looting_enchant" + } + ], + "name": "surgebinding:diamond_mark" + }, + { + "type": "minecraft:item", + "functions": [ + { + "add": false, + "count": { + "type": "minecraft:uniform", + "max": 3.0, + "min": 1.0 + }, + "function": "minecraft:set_count" + }, + { + "count": { + "type": "minecraft:uniform", + "max": 1.0, + "min": 0.0 + }, + "function": "minecraft:looting_enchant" + } + ], + "name": "surgebinding:diamond_chip" + }, + { + "type": "minecraft:item", + "functions": [ + { + "add": false, + "count": { + "type": "minecraft:uniform", + "max": 1.0, + "min": -1.0 + }, + "function": "minecraft:set_count" + } + ], + "name": "surgebinding:emerald_broam" + }, + { + "type": "minecraft:item", + "functions": [ + { + "add": false, + "count": { + "type": "minecraft:uniform", + "max": 2.0, + "min": -1.0 + }, + "function": "minecraft:set_count" + }, + { + "count": { + "type": "minecraft:uniform", + "max": 1.0, + "min": 0.0 + }, + "function": "minecraft:looting_enchant" + } + ], + "name": "surgebinding:emerald_mark" + }, + { + "type": "minecraft:item", + "functions": [ + { + "add": false, + "count": { + "type": "minecraft:uniform", + "max": 3.0, + "min": 1.0 + }, + "function": "minecraft:set_count" + }, + { + "count": { + "type": "minecraft:uniform", + "max": 1.0, + "min": 0.0 + }, + "function": "minecraft:looting_enchant" + } + ], + "name": "surgebinding:emerald_chip" + }, + { + "type": "minecraft:item", + "functions": [ + { + "add": false, + "count": { + "type": "minecraft:uniform", + "max": 1.0, + "min": -1.0 + }, + "function": "minecraft:set_count" + } + ], + "name": "surgebinding:garnet_broam" + }, + { + "type": "minecraft:item", + "functions": [ + { + "add": false, + "count": { + "type": "minecraft:uniform", + "max": 2.0, + "min": -1.0 + }, + "function": "minecraft:set_count" + }, + { + "count": { + "type": "minecraft:uniform", + "max": 1.0, + "min": 0.0 + }, + "function": "minecraft:looting_enchant" + } + ], + "name": "surgebinding:garnet_mark" + }, + { + "type": "minecraft:item", + "functions": [ + { + "add": false, + "count": { + "type": "minecraft:uniform", + "max": 3.0, + "min": 1.0 + }, + "function": "minecraft:set_count" + }, + { + "count": { + "type": "minecraft:uniform", + "max": 1.0, + "min": 0.0 + }, + "function": "minecraft:looting_enchant" + } + ], + "name": "surgebinding:garnet_chip" + }, + { + "type": "minecraft:item", + "functions": [ + { + "add": false, + "count": { + "type": "minecraft:uniform", + "max": 1.0, + "min": -1.0 + }, + "function": "minecraft:set_count" + } + ], + "name": "surgebinding:zircon_broam" + }, + { + "type": "minecraft:item", + "functions": [ + { + "add": false, + "count": { + "type": "minecraft:uniform", + "max": 2.0, + "min": -1.0 + }, + "function": "minecraft:set_count" + }, + { + "count": { + "type": "minecraft:uniform", + "max": 1.0, + "min": 0.0 + }, + "function": "minecraft:looting_enchant" + } + ], + "name": "surgebinding:zircon_mark" + }, + { + "type": "minecraft:item", + "functions": [ + { + "add": false, + "count": { + "type": "minecraft:uniform", + "max": 3.0, + "min": 1.0 + }, + "function": "minecraft:set_count" + }, + { + "count": { + "type": "minecraft:uniform", + "max": 1.0, + "min": 0.0 + }, + "function": "minecraft:looting_enchant" + } + ], + "name": "surgebinding:zircon_chip" + }, + { + "type": "minecraft:item", + "functions": [ + { + "add": false, + "count": { + "type": "minecraft:uniform", + "max": 1.0, + "min": -1.0 + }, + "function": "minecraft:set_count" + } + ], + "name": "surgebinding:amethyst_broam" + }, + { + "type": "minecraft:item", + "functions": [ + { + "add": false, + "count": { + "type": "minecraft:uniform", + "max": 2.0, + "min": -1.0 + }, + "function": "minecraft:set_count" + }, + { + "count": { + "type": "minecraft:uniform", + "max": 1.0, + "min": 0.0 + }, + "function": "minecraft:looting_enchant" + } + ], + "name": "surgebinding:amethyst_mark" + }, + { + "type": "minecraft:item", + "functions": [ + { + "add": false, + "count": { + "type": "minecraft:uniform", + "max": 3.0, + "min": 1.0 + }, + "function": "minecraft:set_count" + }, + { + "count": { + "type": "minecraft:uniform", + "max": 1.0, + "min": 0.0 + }, + "function": "minecraft:looting_enchant" + } + ], + "name": "surgebinding:amethyst_chip" + }, + { + "type": "minecraft:item", + "functions": [ + { + "add": false, + "count": { + "type": "minecraft:uniform", + "max": 1.0, + "min": -1.0 + }, + "function": "minecraft:set_count" + } + ], + "name": "surgebinding:topaz_broam" + }, + { + "type": "minecraft:item", + "functions": [ + { + "add": false, + "count": { + "type": "minecraft:uniform", + "max": 2.0, + "min": -1.0 + }, + "function": "minecraft:set_count" + }, + { + "count": { + "type": "minecraft:uniform", + "max": 1.0, + "min": 0.0 + }, + "function": "minecraft:looting_enchant" + } + ], + "name": "surgebinding:topaz_mark" + }, + { + "type": "minecraft:item", + "functions": [ + { + "add": false, + "count": { + "type": "minecraft:uniform", + "max": 3.0, + "min": 1.0 + }, + "function": "minecraft:set_count" + }, + { + "count": { + "type": "minecraft:uniform", + "max": 1.0, + "min": 0.0 + }, + "function": "minecraft:looting_enchant" + } + ], + "name": "surgebinding:topaz_chip" + }, + { + "type": "minecraft:item", + "functions": [ + { + "add": false, + "count": { + "type": "minecraft:uniform", + "max": 1.0, + "min": -1.0 + }, + "function": "minecraft:set_count" + } + ], + "name": "surgebinding:heliodor_broam" + }, + { + "type": "minecraft:item", + "functions": [ + { + "add": false, + "count": { + "type": "minecraft:uniform", + "max": 2.0, + "min": -1.0 + }, + "function": "minecraft:set_count" + }, + { + "count": { + "type": "minecraft:uniform", + "max": 1.0, + "min": 0.0 + }, + "function": "minecraft:looting_enchant" + } + ], + "name": "surgebinding:heliodor_mark" + }, + { + "type": "minecraft:item", + "functions": [ + { + "add": false, + "count": { + "type": "minecraft:uniform", + "max": 3.0, + "min": 1.0 + }, + "function": "minecraft:set_count" + }, + { + "count": { + "type": "minecraft:uniform", + "max": 1.0, + "min": 0.0 + }, + "function": "minecraft:looting_enchant" + } + ], + "name": "surgebinding:heliodor_chip" + } + ], + "name": "gems", + "rolls": 1.0 + } + ], + "random_sequence": "surgebinding:entities/chull" +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/surgebinding/recipes/amethyst_block.json b/src/datagen/generated/surgebinding/data/surgebinding/recipes/amethyst_block.json new file mode 100644 index 000000000..495cf97d4 --- /dev/null +++ b/src/datagen/generated/surgebinding/data/surgebinding/recipes/amethyst_block.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "I": { + "tag": "forge:gems/amethyst" + }, + "J": { + "item": "surgebinding:amethyst_broam" + } + }, + "pattern": [ + "III", + "IJI", + "III" + ], + "result": { + "item": "surgebinding:amethyst_block" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/surgebinding/recipes/conversions/amethyst_block_deconstruct.json b/src/datagen/generated/surgebinding/data/surgebinding/recipes/conversions/amethyst_block_deconstruct.json new file mode 100644 index 000000000..054212da4 --- /dev/null +++ b/src/datagen/generated/surgebinding/data/surgebinding/recipes/conversions/amethyst_block_deconstruct.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "surgebinding:amethyst_block" + } + ], + "result": { + "count": 9, + "item": "surgebinding:amethyst_broam" + } +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/surgebinding/recipes/conversions/diamond_block_deconstruct.json b/src/datagen/generated/surgebinding/data/surgebinding/recipes/conversions/diamond_block_deconstruct.json new file mode 100644 index 000000000..dc7a5f8a8 --- /dev/null +++ b/src/datagen/generated/surgebinding/data/surgebinding/recipes/conversions/diamond_block_deconstruct.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "surgebinding:diamond_block" + } + ], + "result": { + "count": 9, + "item": "surgebinding:diamond_broam" + } +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/surgebinding/recipes/conversions/emerald_block_deconstruct.json b/src/datagen/generated/surgebinding/data/surgebinding/recipes/conversions/emerald_block_deconstruct.json new file mode 100644 index 000000000..3f497b9dc --- /dev/null +++ b/src/datagen/generated/surgebinding/data/surgebinding/recipes/conversions/emerald_block_deconstruct.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "surgebinding:emerald_block" + } + ], + "result": { + "count": 9, + "item": "surgebinding:emerald_broam" + } +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/surgebinding/recipes/conversions/garnet_block_deconstruct.json b/src/datagen/generated/surgebinding/data/surgebinding/recipes/conversions/garnet_block_deconstruct.json new file mode 100644 index 000000000..ed3fc3a34 --- /dev/null +++ b/src/datagen/generated/surgebinding/data/surgebinding/recipes/conversions/garnet_block_deconstruct.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "surgebinding:garnet_block" + } + ], + "result": { + "count": 9, + "item": "surgebinding:garnet_broam" + } +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/surgebinding/recipes/conversions/heliodor_block_deconstruct.json b/src/datagen/generated/surgebinding/data/surgebinding/recipes/conversions/heliodor_block_deconstruct.json new file mode 100644 index 000000000..90aec8f33 --- /dev/null +++ b/src/datagen/generated/surgebinding/data/surgebinding/recipes/conversions/heliodor_block_deconstruct.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "surgebinding:heliodor_block" + } + ], + "result": { + "count": 9, + "item": "surgebinding:heliodor_broam" + } +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/surgebinding/recipes/conversions/ruby_block_deconstruct.json b/src/datagen/generated/surgebinding/data/surgebinding/recipes/conversions/ruby_block_deconstruct.json new file mode 100644 index 000000000..b83706be8 --- /dev/null +++ b/src/datagen/generated/surgebinding/data/surgebinding/recipes/conversions/ruby_block_deconstruct.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "surgebinding:ruby_block" + } + ], + "result": { + "count": 9, + "item": "surgebinding:ruby_broam" + } +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/surgebinding/recipes/conversions/sapphire_block_deconstruct.json b/src/datagen/generated/surgebinding/data/surgebinding/recipes/conversions/sapphire_block_deconstruct.json new file mode 100644 index 000000000..1b3626df3 --- /dev/null +++ b/src/datagen/generated/surgebinding/data/surgebinding/recipes/conversions/sapphire_block_deconstruct.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "surgebinding:sapphire_block" + } + ], + "result": { + "count": 9, + "item": "surgebinding:sapphire_broam" + } +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/surgebinding/recipes/conversions/smokestone_block_deconstruct.json b/src/datagen/generated/surgebinding/data/surgebinding/recipes/conversions/smokestone_block_deconstruct.json new file mode 100644 index 000000000..51a9c0cda --- /dev/null +++ b/src/datagen/generated/surgebinding/data/surgebinding/recipes/conversions/smokestone_block_deconstruct.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "surgebinding:smokestone_block" + } + ], + "result": { + "count": 9, + "item": "surgebinding:smokestone_broam" + } +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/surgebinding/recipes/conversions/topaz_block_deconstruct.json b/src/datagen/generated/surgebinding/data/surgebinding/recipes/conversions/topaz_block_deconstruct.json new file mode 100644 index 000000000..b632938a9 --- /dev/null +++ b/src/datagen/generated/surgebinding/data/surgebinding/recipes/conversions/topaz_block_deconstruct.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "surgebinding:topaz_block" + } + ], + "result": { + "count": 9, + "item": "surgebinding:topaz_broam" + } +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/surgebinding/recipes/conversions/zircon_block_deconstruct.json b/src/datagen/generated/surgebinding/data/surgebinding/recipes/conversions/zircon_block_deconstruct.json new file mode 100644 index 000000000..fc694820f --- /dev/null +++ b/src/datagen/generated/surgebinding/data/surgebinding/recipes/conversions/zircon_block_deconstruct.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "surgebinding:zircon_block" + } + ], + "result": { + "count": 9, + "item": "surgebinding:zircon_broam" + } +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/surgebinding/recipes/diamond_block.json b/src/datagen/generated/surgebinding/data/surgebinding/recipes/diamond_block.json new file mode 100644 index 000000000..6589bc9a1 --- /dev/null +++ b/src/datagen/generated/surgebinding/data/surgebinding/recipes/diamond_block.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "I": { + "tag": "forge:gems/diamond" + }, + "J": { + "item": "surgebinding:diamond_broam" + } + }, + "pattern": [ + "III", + "IJI", + "III" + ], + "result": { + "item": "surgebinding:diamond_block" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/surgebinding/recipes/emerald_block.json b/src/datagen/generated/surgebinding/data/surgebinding/recipes/emerald_block.json new file mode 100644 index 000000000..37265954a --- /dev/null +++ b/src/datagen/generated/surgebinding/data/surgebinding/recipes/emerald_block.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "I": { + "tag": "forge:gems/emerald" + }, + "J": { + "item": "surgebinding:emerald_broam" + } + }, + "pattern": [ + "III", + "IJI", + "III" + ], + "result": { + "item": "surgebinding:emerald_block" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/surgebinding/recipes/garnet_block.json b/src/datagen/generated/surgebinding/data/surgebinding/recipes/garnet_block.json new file mode 100644 index 000000000..ee3e718f5 --- /dev/null +++ b/src/datagen/generated/surgebinding/data/surgebinding/recipes/garnet_block.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "I": { + "tag": "forge:gems/garnet" + }, + "J": { + "item": "surgebinding:garnet_broam" + } + }, + "pattern": [ + "III", + "IJI", + "III" + ], + "result": { + "item": "surgebinding:garnet_block" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/surgebinding/recipes/heliodor_block.json b/src/datagen/generated/surgebinding/data/surgebinding/recipes/heliodor_block.json new file mode 100644 index 000000000..68f694415 --- /dev/null +++ b/src/datagen/generated/surgebinding/data/surgebinding/recipes/heliodor_block.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "I": { + "tag": "forge:gems/heliodor" + }, + "J": { + "item": "surgebinding:heliodor_broam" + } + }, + "pattern": [ + "III", + "IJI", + "III" + ], + "result": { + "item": "surgebinding:heliodor_block" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/surgebinding/recipes/ruby_block.json b/src/datagen/generated/surgebinding/data/surgebinding/recipes/ruby_block.json new file mode 100644 index 000000000..f4317eb43 --- /dev/null +++ b/src/datagen/generated/surgebinding/data/surgebinding/recipes/ruby_block.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "I": { + "tag": "forge:gems/ruby" + }, + "J": { + "item": "surgebinding:ruby_broam" + } + }, + "pattern": [ + "III", + "IJI", + "III" + ], + "result": { + "item": "surgebinding:ruby_block" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/surgebinding/recipes/sapphire_block.json b/src/datagen/generated/surgebinding/data/surgebinding/recipes/sapphire_block.json new file mode 100644 index 000000000..0a7c794c5 --- /dev/null +++ b/src/datagen/generated/surgebinding/data/surgebinding/recipes/sapphire_block.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "I": { + "tag": "forge:gems/sapphire" + }, + "J": { + "item": "surgebinding:sapphire_broam" + } + }, + "pattern": [ + "III", + "IJI", + "III" + ], + "result": { + "item": "surgebinding:sapphire_block" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/surgebinding/recipes/smokestone_block.json b/src/datagen/generated/surgebinding/data/surgebinding/recipes/smokestone_block.json new file mode 100644 index 000000000..0a541dfe1 --- /dev/null +++ b/src/datagen/generated/surgebinding/data/surgebinding/recipes/smokestone_block.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "I": { + "tag": "forge:gems/smokestone" + }, + "J": { + "item": "surgebinding:smokestone_broam" + } + }, + "pattern": [ + "III", + "IJI", + "III" + ], + "result": { + "item": "surgebinding:smokestone_block" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/surgebinding/recipes/topaz_block.json b/src/datagen/generated/surgebinding/data/surgebinding/recipes/topaz_block.json new file mode 100644 index 000000000..3a81ce1dc --- /dev/null +++ b/src/datagen/generated/surgebinding/data/surgebinding/recipes/topaz_block.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "I": { + "tag": "forge:gems/topaz" + }, + "J": { + "item": "surgebinding:topaz_broam" + } + }, + "pattern": [ + "III", + "IJI", + "III" + ], + "result": { + "item": "surgebinding:topaz_block" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/surgebinding/recipes/zircon_block.json b/src/datagen/generated/surgebinding/data/surgebinding/recipes/zircon_block.json new file mode 100644 index 000000000..f113f9e74 --- /dev/null +++ b/src/datagen/generated/surgebinding/data/surgebinding/recipes/zircon_block.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "I": { + "tag": "forge:gems/zircon" + }, + "J": { + "item": "surgebinding:zircon_broam" + } + }, + "pattern": [ + "III", + "IJI", + "III" + ], + "result": { + "item": "surgebinding:zircon_block" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/datagen/generated/surgebinding/data/surgebinding/tags/worldgen/biome/is_roshar.json b/src/datagen/generated/surgebinding/data/surgebinding/tags/worldgen/biome/is_roshar.json new file mode 100644 index 000000000..48778c241 --- /dev/null +++ b/src/datagen/generated/surgebinding/data/surgebinding/tags/worldgen/biome/is_roshar.json @@ -0,0 +1,5 @@ +{ + "values": [ + "surgebinding:roshar_biome" + ] +} \ No newline at end of file diff --git a/src/datagen/hemalurgy/java/leaf/cosmere/hemalurgy/HemalurgyCuriosProvider.java b/src/datagen/hemalurgy/java/leaf/cosmere/hemalurgy/HemalurgyCuriosProvider.java new file mode 100644 index 000000000..1d3a2b949 --- /dev/null +++ b/src/datagen/hemalurgy/java/leaf/cosmere/hemalurgy/HemalurgyCuriosProvider.java @@ -0,0 +1,81 @@ +/* + * File updated ~ 20 - 11 - 2024 ~ Leaf + */ + +package leaf.cosmere.hemalurgy; + +import leaf.cosmere.hemalurgy.common.Hemalurgy; +import net.minecraft.core.HolderLookup; +import net.minecraft.data.PackOutput; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.inventory.InventoryMenu; +import net.minecraftforge.common.data.ExistingFileHelper; +import top.theillusivec4.curios.api.CuriosDataProvider; +import top.theillusivec4.curios.api.type.capability.ICurio; + +import java.util.concurrent.CompletableFuture; + +public class HemalurgyCuriosProvider extends CuriosDataProvider +{ + public static final ResourceLocation EMPTY_SPIKE_SLOT = new ResourceLocation("curios:slot/spike_icon"); + + public HemalurgyCuriosProvider(PackOutput output, + ExistingFileHelper fileHelper, + CompletableFuture registries) + { + super(Hemalurgy.MODID, output, fileHelper, registries); + } + + @Override + public void generate(HolderLookup.Provider registries, ExistingFileHelper fileHelper) + { + //https://docs.illusivesoulworks.com/curios/slots/data-generation + + this.createSlot("eyes") + .size(2) + .dropRule(ICurio.DropRule.ALWAYS_KEEP) + .icon(InventoryMenu.EMPTY_ARMOR_SLOT_HELMET) + .order(0) + .addCosmetic(true); + this.createSlot("linchpin") + .size(1) + .dropRule(ICurio.DropRule.ALWAYS_KEEP) + .icon(EMPTY_SPIKE_SLOT) + .order(1) + .addCosmetic(true); + + this.createSlot("physical") + .size(8) + .dropRule(ICurio.DropRule.ALWAYS_KEEP) + .icon(EMPTY_SPIKE_SLOT) + .order(501) + .addCosmetic(true); + + this.createSlot("mental") + .size(10) + .dropRule(ICurio.DropRule.ALWAYS_KEEP) + .icon(EMPTY_SPIKE_SLOT) + .order(502) + .addCosmetic(true); + + this.createSlot("spiritual") + .size(4) + .dropRule(ICurio.DropRule.ALWAYS_KEEP) + .icon(EMPTY_SPIKE_SLOT) + .order(503) + .addCosmetic(true); + + this.createSlot("temporal") + .size(16) + .dropRule(ICurio.DropRule.ALWAYS_KEEP) + .icon(EMPTY_SPIKE_SLOT) + .order(504) + .addCosmetic(true); + + this.createEntities("hemalurgists") + .addPlayer() + .addEntities(EntityType.ARMOR_STAND) // todo inquisitors + .addSlots("eyes", "linchpin", "physical", "mental", "spiritual", "temporal"); + } +} diff --git a/src/datagen/hemalurgy/java/leaf/cosmere/hemalurgy/HemalurgyDataGenerator.java b/src/datagen/hemalurgy/java/leaf/cosmere/hemalurgy/HemalurgyDataGenerator.java new file mode 100644 index 000000000..1822a8633 --- /dev/null +++ b/src/datagen/hemalurgy/java/leaf/cosmere/hemalurgy/HemalurgyDataGenerator.java @@ -0,0 +1,39 @@ +/* + * File updated ~ 10 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.hemalurgy; + +import leaf.cosmere.hemalurgy.common.Hemalurgy; +import leaf.cosmere.hemalurgy.patchouli.HemalurgyPatchouliGen; +import net.minecraft.core.HolderLookup; +import net.minecraft.data.DataGenerator; +import net.minecraft.data.PackOutput; +import net.minecraftforge.common.data.ExistingFileHelper; +import net.minecraftforge.data.event.GatherDataEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod.EventBusSubscriber; +import net.minecraftforge.fml.common.Mod.EventBusSubscriber.Bus; + +import java.util.concurrent.CompletableFuture; + +@EventBusSubscriber(modid = Hemalurgy.MODID, bus = Bus.MOD) +public class HemalurgyDataGenerator +{ + @SubscribeEvent + public static void gatherData(GatherDataEvent event) + { + DataGenerator generator = event.getGenerator(); + PackOutput packOutput = generator.getPackOutput(); + ExistingFileHelper existingFileHelper = event.getExistingFileHelper(); + final CompletableFuture lookupProvider = event.getLookupProvider(); + + generator.addProvider(true, new HemalurgyEngLangGen(packOutput)); + generator.addProvider(true, new HemalurgyTagsProvider(packOutput, lookupProvider, existingFileHelper)); + generator.addProvider(true, new HemalurgyItemModelsGen(packOutput, existingFileHelper)); + generator.addProvider(true, new HemalurgyRecipeGen(packOutput, existingFileHelper)); + generator.addProvider(true, new HemalurgyPatchouliGen(packOutput)); + generator.addProvider(event.includeServer(), new HemalurgyCuriosProvider(packOutput, existingFileHelper, lookupProvider)); + } + +} \ No newline at end of file diff --git a/src/datagen/hemalurgy/java/leaf/cosmere/hemalurgy/HemalurgyEngLangGen.java b/src/datagen/hemalurgy/java/leaf/cosmere/hemalurgy/HemalurgyEngLangGen.java new file mode 100644 index 000000000..af7d1c321 --- /dev/null +++ b/src/datagen/hemalurgy/java/leaf/cosmere/hemalurgy/HemalurgyEngLangGen.java @@ -0,0 +1,181 @@ +/* + * File updated ~ 20 - 11 - 2024 ~ Leaf + */ + +package leaf.cosmere.hemalurgy; + +import leaf.cosmere.api.Constants; +import leaf.cosmere.api.EnumUtils; +import leaf.cosmere.api.Metals; +import leaf.cosmere.api.helpers.RegistryHelper; +import leaf.cosmere.api.providers.IEntityTypeProvider; +import leaf.cosmere.api.text.StringHelper; +import leaf.cosmere.hemalurgy.common.Hemalurgy; +import leaf.cosmere.hemalurgy.common.items.HemalurgicSpikeItem; +import leaf.cosmere.hemalurgy.common.registries.HemalurgyAttributes; +import leaf.cosmere.hemalurgy.common.registries.HemalurgyEntityTypes; +import net.minecraft.data.PackOutput; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.Item; +import net.minecraftforge.common.data.LanguageProvider; +import net.minecraftforge.registries.ForgeRegistries; + +import static leaf.cosmere.api.Constants.Strings.CONTAINED_POWERS_FOUND; + +public class HemalurgyEngLangGen extends LanguageProvider +{ + public HemalurgyEngLangGen(PackOutput output) + { + super(output, Hemalurgy.MODID, "en_us"); + } + + @Override + protected void addTranslations() + { + addItemsAndBlocks(); + addEntities(); + addAdvancements(); + addManifestations(); + addAttributes(); + addPatchouli(); + addCreativeTabs(); + addTooltips(); + addDamageSources(); + addMobEffects(); + addCurioIdentifiers(); + addCurioModifiers(); + addConfigs(); + addCommands(); + addKeybindings(); + addStats(); + + } + + + private void addItemsAndBlocks() + { + //Items and Blocks + for (Item item : ForgeRegistries.ITEMS.getValues()) + { + final ResourceLocation registryName = RegistryHelper.get(item); + if (registryName.getNamespace().contentEquals(Hemalurgy.MODID)) + { + String localisedString = StringHelper.fixCapitalisation(registryName.getPath()); + + if (item instanceof HemalurgicSpikeItem) + { + String use = ((HemalurgicSpikeItem) item).getMetalType().getShortHemalurgicUseString(); + add("item.hemalurgy." + registryName.getPath() + ".tooltip", use); + } + + add(item.getDescriptionId(), localisedString); + } + } + } + + private void addEntities() + { + //Entities + for (IEntityTypeProvider type : HemalurgyEntityTypes.ENTITY_TYPES.getAllEntityTypes()) + { + final ResourceLocation id = type.getRegistryName(); + add(type.getEntityType().getDescriptionId(), StringHelper.fixCapitalisation(id.getPath())); + } + } + + private void addAdvancements() + { + + } + + private void addManifestations() + { + } + + private void addAttributes() + { + final String descriptionId = HemalurgyAttributes.SPIRITWEB_INTEGRITY.getAttribute().getDescriptionId(); + String translation = descriptionId.split("\\.")[1]; + add(descriptionId, "Spiritweb Integrity"); + } + + private void addPatchouli() + { + //work through each metal and generate localisation for related things. + for (Metals.MetalType metalType : EnumUtils.METAL_TYPES) + { + final String name = metalType.getName(); + String hKey = "hemalurgic_" + name; + String hemalurgyGuide = "entry." + hKey; + add(hemalurgyGuide, StringHelper.fixCapitalisation(name)); + } + } + + private void addCreativeTabs() + { + //ItemGroups/Tabs + add("tabs.hemalurgy.items", "Hemalurgy"); + + } + + private void addTooltips() + { + add("tooltip.cosmere.attribute.iron", "%s%s Attack Damage"); + add("tooltip.cosmere.attribute.tin", "%s%s%% Better Night Vision"); + add("tooltip.cosmere.attribute.copper", "%s%s%% XP"); + add("tooltip.cosmere.attribute.zinc", "%s%s%% Emotional Fortitude"); + add("tooltip.cosmere.attribute.duralumin", "");//todo hemalurgic connection/identity + add("tooltip.cosmere.attribute.chromium", "%s%s Luck"); + add("tooltip.cosmere.attribute.nicrosil", "");//todo hemalurgic investiture + + add(CONTAINED_POWERS_FOUND, "Hemalurgic Charge:"); + } + + private void addDamageSources() + { + //Damage Sources + add("death.attack.spiked", "%1$s was not careful with their hemalurgic spike"); + add("death.attack.spiked.player", "%1$s was not careful with their hemalurgic spike while fighting %2$s"); + } + + private void addMobEffects() + { + } + + private void addCurioIdentifiers() + { + add("curios.identifier.linchpin", "Linchpin Spike"); + add("curios.identifier.physical", "Physical Quadrant"); + add("curios.identifier.mental", "Mental Quadrant"); + add("curios.identifier.spiritual", "Spiritual Quadrant"); + add("curios.identifier.temporal", "Temporal Quadrant"); + add("curios.identifier.eyes", "Eye Spikes"); + } + + private void addCurioModifiers() + { + add("curios.modifiers.linchpin", "Linchpin Spike"); + add("curios.modifiers.physical", "Physical Quadrant"); + add("curios.modifiers.mental", "Mental Quadrant"); + add("curios.modifiers.spiritual", "Spiritual Quadrant"); + add("curios.modifiers.temporal", "Temporal Quadrant"); + add("curios.modifiers.eyes", "Eye Spikes"); + } + + private void addConfigs() + { + } + + private void addCommands() + { + add(Constants.Strings.SET_EYE_HEIGHT_SUCCESS, "Set eye height to %s"); + } + + private void addKeybindings() + { + } + + private void addStats() + { + } +} diff --git a/src/datagen/hemalurgy/java/leaf/cosmere/hemalurgy/HemalurgyItemModelsGen.java b/src/datagen/hemalurgy/java/leaf/cosmere/hemalurgy/HemalurgyItemModelsGen.java new file mode 100644 index 000000000..5bf7a2c48 --- /dev/null +++ b/src/datagen/hemalurgy/java/leaf/cosmere/hemalurgy/HemalurgyItemModelsGen.java @@ -0,0 +1,75 @@ +/* + * File updated ~ 9 - 3 - 2025 ~ Leaf + */ + +package leaf.cosmere.hemalurgy; + +import leaf.cosmere.api.helpers.RegistryHelper; +import leaf.cosmere.api.providers.IItemProvider; +import leaf.cosmere.hemalurgy.common.Hemalurgy; +import leaf.cosmere.hemalurgy.common.registries.HemalurgyItems; +import net.minecraft.data.PackOutput; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.SwordItem; +import net.minecraftforge.client.model.generators.ItemModelBuilder; +import net.minecraftforge.client.model.generators.ItemModelProvider; +import net.minecraftforge.client.model.generators.ModelFile; +import net.minecraftforge.common.ForgeSpawnEggItem; +import net.minecraftforge.common.data.ExistingFileHelper; + +import java.util.function.Supplier; + +public class HemalurgyItemModelsGen extends ItemModelProvider +{ + + public HemalurgyItemModelsGen(PackOutput packOutput, ExistingFileHelper existingFileHelper) + { + super(packOutput, Hemalurgy.MODID, existingFileHelper); + } + + @Override + protected void registerModels() + { + for (IItemProvider itemRegistryObject : HemalurgyItems.ITEMS.getAllItems()) + { + String path = itemRegistryObject.getRegistryName().getPath(); + Item item = itemRegistryObject.asItem(); + + if (item instanceof ForgeSpawnEggItem) + { + getBuilder(item.toString()).parent(new ModelFile.UncheckedModelFile("item/template_spawn_egg")); + continue; + } + //if (item instanceof HemalurgicSpikeItem) + //{ + // this.getBuilder(path) + // .parent(new ModelFile.UncheckedModelFile("hemalurgy:item/spike")) + // .texture("layer0", modLoc("item/" + "metal_spike")); + // continue; + //} + else if (item instanceof SwordItem) + { + //koloss sword + continue; + } + + //else normal item texture rules apply + simpleItem(path, path); + } + + } + + public String getPath(Supplier itemSupplier) + { + ResourceLocation location = RegistryHelper.get(itemSupplier.get()); + return location.getPath(); + } + + public ItemModelBuilder simpleItem(String path, String texturePath) + { + return this.getBuilder(path) + .parent(new ModelFile.UncheckedModelFile("item/generated")) + .texture("layer0", modLoc("item/" + texturePath)); + } +} \ No newline at end of file diff --git a/src/datagen/hemalurgy/java/leaf/cosmere/hemalurgy/HemalurgyRecipeGen.java b/src/datagen/hemalurgy/java/leaf/cosmere/hemalurgy/HemalurgyRecipeGen.java new file mode 100644 index 000000000..bf4186b53 --- /dev/null +++ b/src/datagen/hemalurgy/java/leaf/cosmere/hemalurgy/HemalurgyRecipeGen.java @@ -0,0 +1,65 @@ +/* + * File updated ~ 4 - 1 - 2025 ~ Leaf + */ + +package leaf.cosmere.hemalurgy; + +import leaf.cosmere.BaseRecipeProvider; +import leaf.cosmere.api.EnumUtils; +import leaf.cosmere.api.Metals; +import leaf.cosmere.common.registry.ItemsRegistry; +import leaf.cosmere.hemalurgy.common.Hemalurgy; +import leaf.cosmere.hemalurgy.common.registries.HemalurgyItems; +import net.minecraft.data.PackOutput; +import net.minecraft.data.recipes.FinishedRecipe; +import net.minecraft.data.recipes.RecipeCategory; +import net.minecraft.data.recipes.ShapedRecipeBuilder; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.TagKey; +import net.minecraft.world.item.Item; +import net.minecraftforge.common.crafting.conditions.IConditionBuilder; +import net.minecraftforge.common.data.ExistingFileHelper; + +import java.util.function.Consumer; + +public class HemalurgyRecipeGen extends BaseRecipeProvider implements IConditionBuilder +{ + public HemalurgyRecipeGen(PackOutput output, ExistingFileHelper existingFileHelper) + { + super(output, existingFileHelper, Hemalurgy.MODID); + } + + @Override + protected ResourceLocation makeRL(String path) + { + return Hemalurgy.rl(path); + } + + @Override + protected void addRecipes(Consumer consumer) + { + addOreSmeltingRecipes(consumer, HemalurgyItems.METAL_SPIKE.get(Metals.MetalType.IRON), ItemsRegistry.GUIDE.get(), 1.0f, 200); + + for (Metals.MetalType metalType : EnumUtils.METAL_TYPES) + { + addSpikes(consumer, metalType); + } + } + + protected static void addSpikes(Consumer consumer, Metals.MetalType metalType) + { + TagKey inputMaterial = metalType.getMetalIngotTag(); + + if (metalType.hasHemalurgicEffect()) + { + ShapedRecipeBuilder + .shaped(RecipeCategory.TOOLS, HemalurgyItems.METAL_SPIKE.get(metalType)) + .define('X', inputMaterial) + .pattern("X") + .pattern("X") + .group("spike") + .unlockedBy("has_material", has(inputMaterial)).save(consumer); + } + } + +} diff --git a/src/datagen/hemalurgy/java/leaf/cosmere/hemalurgy/HemalurgyTagsProvider.java b/src/datagen/hemalurgy/java/leaf/cosmere/hemalurgy/HemalurgyTagsProvider.java new file mode 100644 index 000000000..876ababe1 --- /dev/null +++ b/src/datagen/hemalurgy/java/leaf/cosmere/hemalurgy/HemalurgyTagsProvider.java @@ -0,0 +1,66 @@ +/* + * File updated ~ 20 - 11 - 2024 ~ Leaf + */ + +package leaf.cosmere.hemalurgy; + +import leaf.cosmere.api.CosmereTags; +import leaf.cosmere.api.EnumUtils; +import leaf.cosmere.api.Metals; +import leaf.cosmere.hemalurgy.common.Hemalurgy; +import leaf.cosmere.hemalurgy.common.items.HemalurgicSpikeItem; +import leaf.cosmere.hemalurgy.common.registries.HemalurgyItems; +import leaf.cosmere.tag.BaseTagProvider; +import net.minecraft.core.HolderLookup; +import net.minecraft.data.PackOutput; +import net.minecraftforge.common.data.ExistingFileHelper; + +import javax.annotation.Nullable; +import java.util.concurrent.CompletableFuture; + +public class HemalurgyTagsProvider extends BaseTagProvider +{ + public HemalurgyTagsProvider(PackOutput packOutput, CompletableFuture lookupProvider, @Nullable ExistingFileHelper existingFileHelper) + { + super(packOutput, lookupProvider, Hemalurgy.MODID, existingFileHelper); + } + + @Override + protected void registerTags(HolderLookup.Provider registries) + { + for (Metals.MetalType metalType : EnumUtils.METAL_TYPES) + { + if (metalType.hasHemalurgicEffect()) + { + HemalurgicSpikeItem spikeItem = HemalurgyItems.METAL_SPIKE.get(metalType).asItem(); + getItemBuilder(CosmereTags.Items.METAL_SPIKE).add(spikeItem); + + + if (metalType.isPhysicalSpike()) + { + getItemBuilder(CosmereTags.Items.CURIO_EYES).add(spikeItem); + getItemBuilder(CosmereTags.Items.CURIO_PHYSICAL).add(spikeItem); + //any spike can be a linchpin? + getItemBuilder(CosmereTags.Items.CURIO_LINCHPIN).add(spikeItem); + } + if (metalType.isMentalSpike()) + { + getItemBuilder(CosmereTags.Items.CURIO_MENTAL).add(spikeItem); + } + if (metalType.isSpiritualSpike()) + { + getItemBuilder(CosmereTags.Items.CURIO_SPIRITUAL).add(spikeItem); + } + if (metalType.isTemporalSpike()) + { + getItemBuilder(CosmereTags.Items.CURIO_TEMPORAL).add(spikeItem); + } + } + } + + //we do know gold spikes can be used as a linchpin + getItemBuilder(CosmereTags.Items.CURIO_LINCHPIN).add(HemalurgyItems.METAL_SPIKE.get(Metals.MetalType.GOLD).get()); + } + + +} \ No newline at end of file diff --git a/src/datagen/hemalurgy/java/leaf/cosmere/hemalurgy/patchouli/HemalurgyPatchouliGen.java b/src/datagen/hemalurgy/java/leaf/cosmere/hemalurgy/patchouli/HemalurgyPatchouliGen.java new file mode 100644 index 000000000..d453428bb --- /dev/null +++ b/src/datagen/hemalurgy/java/leaf/cosmere/hemalurgy/patchouli/HemalurgyPatchouliGen.java @@ -0,0 +1,62 @@ +/* + * File updated ~ 9 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.hemalurgy.patchouli; + +import leaf.cosmere.api.CosmereAPI; +import leaf.cosmere.hemalurgy.common.Hemalurgy; +import leaf.cosmere.patchouli.data.PatchouliProvider; +import net.minecraft.data.PackOutput; + +// +// In-Game Documentation generator +// +public class HemalurgyPatchouliGen extends PatchouliProvider +{ + public HemalurgyPatchouliGen(PackOutput packOutput) + { + super(packOutput, CosmereAPI.COSMERE_MODID); + } + + + @Override + protected void collectInfoForBook() + { + //dynamically figure out all the things we wanna generate categories/entries for? + //------------------------------------------// + // Categories // + //------------------------------------------// + // - Basics // + // - Manifestations (parent category?) // + // - Feruchemy // + // - Allomancy // + // - Hemalurgy // + // - Curios // + // - Machines ? // + // - Challenges ? // + // - // + // - // + // - // + // - // + // - // + //------------------------------------------// + + PatchouliHemalurgyCategory.collect(this.categories, this.entries); + + + } + + /** + * Gets a name for this provider, to use in logging. + */ + public String getName() + { + return "PatchouliGeneration"; + } + + +} + + + diff --git a/src/datagen/hemalurgy/java/leaf/cosmere/hemalurgy/patchouli/PatchouliHemalurgyCategory.java b/src/datagen/hemalurgy/java/leaf/cosmere/hemalurgy/patchouli/PatchouliHemalurgyCategory.java new file mode 100644 index 000000000..1ea5bbe11 --- /dev/null +++ b/src/datagen/hemalurgy/java/leaf/cosmere/hemalurgy/patchouli/PatchouliHemalurgyCategory.java @@ -0,0 +1,318 @@ +/* + * File updated ~ 20 - 11 - 2024 ~ Leaf + */ + +package leaf.cosmere.hemalurgy.patchouli; + +import leaf.cosmere.api.EnumUtils; +import leaf.cosmere.api.Metals; +import leaf.cosmere.patchouli.data.BookStuff; +import leaf.cosmere.patchouli.data.PatchouliTextFormat; + +import java.util.ArrayList; +import java.util.List; + +public class PatchouliHemalurgyCategory +{ + public static void collect(List categories, List entries) + { + BookStuff.Category hemalurgy = new BookStuff.Category( + "hemalurgy", + "The forbidden field of magic that takes from others so that you may get stronger.", + "hemalurgy:atium_spike"); + hemalurgy.sortnum = 3; + hemalurgy.secret = true; + categories.add(hemalurgy); + + //Start a page list. + List pages = new ArrayList<>(); + + //hemalurgy basics entry + BookStuff.Entry hemalurgyBasics = new BookStuff.Entry("hemalurgy_basics", hemalurgy, hemalurgy.icon).setDisplayTitle("Hemalurgy (For Dummies)"); + hemalurgyBasics.priority = true; + + + BookStuff.Page terminologyPage = new BookStuff.TextPage(); + terminologyPage.setTitle("Terminology"); + terminologyPage.setText( + "In this journal, I shall explain all I have discovered about Hemalurgy. $(br)" + + "Firstly, some terminology:" + + "$(li) \"%s\" is when you kill something with a metal spike, hemalurgically charging that spike.".formatted(PatchouliTextFormat.Thing("Spiking")) + + "$(li) The \"%s\" is the one who is spiked, from whom the spike is hemalurgically charged.".formatted(PatchouliTextFormat.Thing("donor")) + + "$(li) The \"%s\" is the one who receives the spike after it has been hemalurgically charged.".formatted(PatchouliTextFormat.Thing("recipient")) + ); + pages.add(terminologyPage); + + BookStuff.Page rulesObservations = new BookStuff.TextPage(); + rulesObservations.setTitle("Rules & Observations"); + rulesObservations.setText( + "During my research, I have been able to outline some general rules of Hemalurgy, and some general observations, which I have written below." + + "$(li) The metal the spike is made out of determines the attribute or power taken from the donor." + + "$(li) A single spike can only hold a single hemalurgic charge." + + "$(li) Spiking a misting/ferring has a predictable effect, if the right metal is used for the spike, it steals their allomantic/feruchemical power, with which the hemalurgic spike is now charged." + + "$()$(br) Cont. Next Page$(br)" + + ); + pages.add(rulesObservations); + + BookStuff.Page rulesObservationsCont = new BookStuff.TextPage(); + rulesObservationsCont.setTitle("Rules & Observations"); + rulesObservationsCont.setText( + "$(li) Spiking full mistborn and feruchemists, in my experience, has inconsistent results." + + " The power taken is always one from the relevant quadrant of the respective table, steel spikes taking physical allomantic powers, gold spikes taking hybrid feruchemical powers, and so on." + + " The inconsistency lies in that the specific power stolen seems to be random, although there may be pattern to the apparent randomness - further research is necessary.$(br)" + + ); + pages.add(rulesObservationsCont); + + pages.add(new BookStuff.CraftingPage("Spike Recipe", "hemalurgy:steel_spike", "hemalurgy:pewter_spike")); + + + hemalurgyBasics.pages = pages.toArray(BookStuff.Page[]::new); + pages.clear(); + entries.add(hemalurgyBasics); + + BookStuff.Entry Koloss = new BookStuff.Entry("Koloss", hemalurgy, hemalurgy.icon); + pages.add(new BookStuff.TextPage("Koloss are hemalurgic creations involving the use of iron spikes. This robbed the spiked individual of nearly all their humanity, instead replacing it with incredible strength and bloodthirsty rage. " + + "They should be approached with extreme caution.")); + pages.add(new BookStuff.EntityPage("", "Immature Koloss", "hemalurgy:koloss_small")); + pages.add(new BookStuff.EntityPage("", "Mature Koloss", "hemalurgy:koloss_medium")); + pages.add(new BookStuff.EntityPage("", "Elder Koloss", "hemalurgy:koloss_large")); + Koloss.pages = pages.toArray(BookStuff.Page[]::new); + pages.clear(); + entries.add(Koloss); + + //hemalurgy + for (Metals.MetalType metalType : EnumUtils.METAL_TYPES) + { + if (!metalType.hasHemalurgicEffect()) + { + continue; + } + //clear before use + pages.clear(); + + String metalName = metalType.getName(); + final String spikeItemLocation = String.format("hemalurgy:%s_spike", metalName); + + BookStuff.Entry entryForThisMetal = new BookStuff.Entry( + "hemalurgic_" + metalName, + hemalurgy, + spikeItemLocation); + entryForThisMetal.sortnum = metalType.getID(); + + + pages.add(new BookStuff.TextPage(getHemalurgicUse(metalType))); + + //add in a special page just for bronze, so that players know specifically how they can get a bronze spike. + if (metalType == Metals.MetalType.BRONZE) + { + pages.add(new BookStuff.EntityPage("minecraft:warden")); + } + + pages.add(new BookStuff.CraftingPage(spikeItemLocation)); + + + entryForThisMetal.pages = pages.toArray(BookStuff.Page[]::new); + + entries.add(entryForThisMetal); + } + } + + private static String getHemalurgicUse(Metals.MetalType metalType) + { + StringBuilder builder = new StringBuilder(); + final String allomanticPageLink = "allomancy:allomancy/allomantic_"; + final String feruchemicalPageLink = "feruchemy:feruchemy/feruchemical_"; + + switch (metalType) + { + case IRON: + builder.append("Iron spikes steal physical strength: $(p)"); + builder.append("My research suggests that iron spikes transfer around 70%% of the donor's attack strength."); + break; + case STEEL://Iron//Steel//Tin//Pewter + { + builder.append("Steel spikes steal the physical allomantic powers: $(p)"); + String a = "Iron"; + String b = "Steel"; + String c = "Tin"; + String d = "Pewter"; + + builder.append("Allomantically burning %s, %s, %s and %s." + .formatted( + PatchouliTextFormat.LinkEntry(a, allomanticPageLink + a), + PatchouliTextFormat.LinkEntry(b, allomanticPageLink + b), + PatchouliTextFormat.LinkEntry(c, allomanticPageLink + c), + PatchouliTextFormat.LinkEntry(d, allomanticPageLink + d) + )); + } + break; + case TIN: + builder.append("Tin spikes steal the senses: $(p)"); + builder.append("As a result, tin spikes grant better vision in the dark. $(p)"); + builder.append("It seems that donors with a better sense of their surroundings provide a more potent effect."); + break; + case PEWTER://Iron//Steel//Tin//Pewter + { + builder.append("Pewter spikes steal the physical feruchemical powers: $(p)"); + String a = "Iron"; + String b = "Steel"; + String c = "Tin"; + String d = "Pewter"; + + builder.append("Feruchemically storing and tapping %s, %s, %s and %s, the feruchemical attributes keyed to each of these are: $(p)" + .formatted( + PatchouliTextFormat.LinkEntry(a, feruchemicalPageLink + a), + PatchouliTextFormat.LinkEntry(b, feruchemicalPageLink + b), + PatchouliTextFormat.LinkEntry(c, feruchemicalPageLink + c), + PatchouliTextFormat.LinkEntry(d, feruchemicalPageLink + d) + )); + builder.append("Weight(Slow Fall/Slowness, Resistance), Speed(Slowness/Speed), Senses(Blindness/Night Vision), and Strength(Weakness/Strength)."); + } + break; + case ZINC: + builder.append("[Not Yet Implemented] $(p)"); + builder.append("My research has yet to determine any Hemalurgic properties of zinc - further research necessary. (WIP)"); + break; + case BRASS://Zinc//Brass//Copper//Bronze + { + builder.append("Brass spikes steal the cognitive feruchemical powers: $(p)"); + String a = "Zinc"; + String b = "Brass"; + String c = "Copper"; + String d = "Bronze"; + builder.append("Feruchemically storing and tapping %s, %s, %s and %s, the feruchemical attributes keyed to each of these are: $(p)" + .formatted( + PatchouliTextFormat.LinkEntry(a, feruchemicalPageLink + a), + PatchouliTextFormat.LinkEntry(b, feruchemicalPageLink + b), + PatchouliTextFormat.LinkEntry(c, feruchemicalPageLink + c), + PatchouliTextFormat.LinkEntry(d, feruchemicalPageLink + d) + )); + builder.append("Mental Speed(XP Gain Rate), Warmth(Fire Resistance/Fire Aspect), Memories(Current XP), and Wakefulness(Phantom Spawn Timer). $(p)"); + } + break; + case COPPER: + builder.append("Copper spikes steal mental fortitude, memory, and intelligence. $(p)"); + builder.append("As a result, they can be used to increase base XP gain rate. $(p)"); + builder.append("I wonder what would happen if you were to spike the Ender Dragon... Surely the first kill of such a beast would give a marvelous reward."); + break; + case BRONZE://Zinc//Brass//Copper//Bronze + { + builder.append("Bronze spikes steal the mental allomantic powers: $(p)"); + String a = "Zinc"; + String b = "Brass"; + String c = "Copper"; + String d = "Bronze"; + + builder.append("Allomantically burning %s, %s, %s and %s." + .formatted( + PatchouliTextFormat.LinkEntry(a, allomanticPageLink + a), + PatchouliTextFormat.LinkEntry(b, allomanticPageLink + b), + PatchouliTextFormat.LinkEntry(c, allomanticPageLink + c), + PatchouliTextFormat.LinkEntry(d, allomanticPageLink + d) + )); + builder.append("A substance known as Sculk lies deep within the ground on this planet. Reports indicate that it can detect nearby uses of allomancy, similarly to allomantic bronze. " + + "I theorize that spiking a large creature of the sculk could give a hemalurgic charge of allomantic bronze, just like spiking a human Seeker."); + } + break; + case ALUMINUM: + builder.append("Prevents recipient from using their powers."); + break; + case DURALUMIN: + builder.append("In the past, hemalurgic scholars have theorised that duralumin spikes may transfer the donor's spiritual connection or identity. However, due to the rarity of duralumin during the eras they all worked in, all were unable to obtain enough duralumin to prove their theories. $(p)"); + builder.append("(The rest of the page appears to have been ripped out)"); + break; + case CHROMIUM: + builder.append("I have heard it said that Chromium spikes 'might steal destiny...', in my experience, they seem to affect one's luck. $(p)"); + builder.append("Like all hemalurgic spikes, the effect of a chromium spike depends on the donor, though in a different way to iron, for example: $(p)"); + builder.append("If the donor is a Rabbit, or completely White cat, the recipient would become 75%%, or 35%% luckier, respectively. $(p)"); + builder.append("In contrast, if the donor is a black cat, wither skeleton, or pufferfish, the recipient's luck would decrease, by 100%%, 55%%, or 5%%, respectively"); + break; + case NICROSIL: + builder.append("[Not Yet Implemented] $(p)"); + builder.append("Some theorise, due to the similarities hemalurgy shares with feruchemy, that nicrosil spikes steal investiture, potentially similarly to how soulbearer ferrings store investiture $(p)"); + builder.append("(The rest of this page has ink spilled on it, obscuring the writing)"); + break; + case CADMIUM://Cadmium//Bendalloy//Gold//Electrum + { + builder.append("Cadmium spikes steal the temporal allomantic powers: $(p)"); + String a = "Gold"; + String b = "Electrum"; + String c = "Cadmium"; + String d = "Bendalloy"; + + builder.append("Allomantically burning %s, %s, %s and %s." + .formatted( + PatchouliTextFormat.LinkEntry(a, allomanticPageLink + a), + PatchouliTextFormat.LinkEntry(b, allomanticPageLink + b), + PatchouliTextFormat.LinkEntry(c, allomanticPageLink + c), + PatchouliTextFormat.LinkEntry(d, allomanticPageLink + d) + )); + } + break; + case GOLD://Cadmium//Bendalloy//Gold//Electrum + { + builder.append("Gold spikes steal the hybrid feruchemical powers: $(p)"); + String a = "Gold"; + String b = "Electrum"; + String c = "Cadmium"; + String d = "Bendalloy"; + builder.append("Feruchemically storing and tapping %s, %s, %s and %s, the feruchemical attributes keyed to each of these are: $(p)" + .formatted( + PatchouliTextFormat.LinkEntry(a, feruchemicalPageLink + a), + PatchouliTextFormat.LinkEntry(b, feruchemicalPageLink + b), + PatchouliTextFormat.LinkEntry(c, feruchemicalPageLink + c), + PatchouliTextFormat.LinkEntry(d, feruchemicalPageLink + d) + )); + builder.append("Healing(lose max health/regeneration), Determination(extra hearts), Breath(lose O2 outside water/reduce rate of O2 consumption), and Nutrition(Hunger/Saturation)"); + } + break; + case BENDALLOY://Chromium//Nicrosil//Aluminum//Duralumin + { + builder.append("Bendalloy spikes steal the spiritual feruchemical powers: $(p)"); + String a = "Aluminum"; + String b = "Duralumin"; + String c = "Chromium"; + String d = "Nicrosil"; + builder.append("Feruchemically storing and tapping %s, %s, %s and %s, the feruchemical attributes keyed to each of these are: $(p)" + .formatted( + PatchouliTextFormat.LinkEntry(a, feruchemicalPageLink + a), + PatchouliTextFormat.LinkEntry(b, feruchemicalPageLink + b), + PatchouliTextFormat.LinkEntry(c, feruchemicalPageLink + c), + PatchouliTextFormat.LinkEntry(d, feruchemicalPageLink + d) + )); + builder.append("Identity(making identityless metalminds), Connection(Bad omen/Hero of the village), Fortune(Bad luck/luck), and Investiture(Charge can be used for tapping other metals)"); + } + break; + case ELECTRUM://Chromium//Nicrosil//Aluminum//Duralumin + { + builder.append("Electrum spikes steal the enhancement allomantic powers: $(p)"); + String a = "Aluminum"; + String b = "Duralumin"; + String c = "Chromium"; + String d = "Nicrosil"; + + builder.append("Allomantically burning %s, %s, %s and %s." + .formatted( + PatchouliTextFormat.LinkEntry(a, allomanticPageLink + a), + PatchouliTextFormat.LinkEntry(b, allomanticPageLink + b), + PatchouliTextFormat.LinkEntry(c, allomanticPageLink + c), + PatchouliTextFormat.LinkEntry(d, allomanticPageLink + d) + )); + } + break; + case ATIUM: + builder.append("Atium Spikes can steal any one Allomantic or Feruchemical power. For example, if a twinborn were spiked with an atium spike, that spike would only grant one of their powers."); + break; + case LERASIUM: + builder.append("Lerasium Spikes steals all Attributes from a donor."); + break; + default: + builder.append("Unknown..."); + break; + } + + return builder.toString(); + } +} diff --git a/src/datagen/main/java/leaf/cosmere/BaseDatapackRegistryProvider.java b/src/datagen/main/java/leaf/cosmere/BaseDatapackRegistryProvider.java new file mode 100644 index 000000000..8cb845b4b --- /dev/null +++ b/src/datagen/main/java/leaf/cosmere/BaseDatapackRegistryProvider.java @@ -0,0 +1,82 @@ +/* + * File updated ~ 11 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere; + +import it.unimi.dsi.fastutil.booleans.Boolean2ObjectFunction; +import net.minecraft.core.Holder.Reference; +import net.minecraft.core.HolderGetter; +import net.minecraft.core.HolderLookup; +import net.minecraft.core.RegistrySetBuilder; +import net.minecraft.core.registries.Registries; +import net.minecraft.data.PackOutput; +import net.minecraft.data.worldgen.BootstapContext; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.levelgen.feature.ConfiguredFeature; +import net.minecraft.world.level.levelgen.placement.PlacedFeature; +import net.minecraft.world.level.levelgen.placement.PlacementModifier; +import net.minecraftforge.common.data.DatapackBuiltinEntriesProvider; +import net.minecraftforge.common.world.BiomeModifier; +import net.minecraftforge.common.world.StructureModifier; +import net.minecraftforge.registries.ForgeRegistries; +import org.jetbrains.annotations.NotNull; + +import java.util.List; +import java.util.Set; +import java.util.concurrent.CompletableFuture; + +public abstract class BaseDatapackRegistryProvider extends DatapackBuiltinEntriesProvider +{ + + private final String modid; + + protected BaseDatapackRegistryProvider(PackOutput output, CompletableFuture registries, RegistrySetBuilder registrySetBuilder, String modid) + { + super(output, registries, registrySetBuilder, Set.of(modid)); + this.modid = modid; + } + + @NotNull + @Override + public String getName() + { + return "Datapack registries: " + modid; + } + + protected static PlacedFeaturesHolder registerPlacedFeature(BootstapContext context, ResourceLocation name, + Boolean2ObjectFunction> placementModifiers) + { + HolderGetter> configuredFeatures = context.lookup(Registries.CONFIGURED_FEATURE); + Reference> configuredFeature = configuredFeatures.getOrThrow(configuredFeature(name)); + return new PlacedFeaturesHolder( + context.register(placedFeature(name), new PlacedFeature(configuredFeature, placementModifiers.get(false))) + ); + } + + protected static ResourceKey> configuredFeature(ResourceLocation name) + { + return ResourceKey.create(Registries.CONFIGURED_FEATURE, name); + } + + protected static ResourceKey placedFeature(ResourceLocation name) + { + return ResourceKey.create(Registries.PLACED_FEATURE, name); + } + + protected static ResourceKey biomeModifier(ResourceLocation name) + { + return ResourceKey.create(ForgeRegistries.Keys.BIOME_MODIFIERS, name); + } + + protected static ResourceKey structureModifier(ResourceLocation name) + { + return ResourceKey.create(ForgeRegistries.Keys.STRUCTURE_MODIFIERS, name); + } + + protected record PlacedFeaturesHolder(Reference feature) + { + + } +} \ No newline at end of file diff --git a/src/datagen/main/java/leaf/cosmere/BaseRecipeProvider.java b/src/datagen/main/java/leaf/cosmere/BaseRecipeProvider.java new file mode 100644 index 000000000..1dbdfb711 --- /dev/null +++ b/src/datagen/main/java/leaf/cosmere/BaseRecipeProvider.java @@ -0,0 +1,294 @@ +/* + * File updated ~ 4 - 1 - 2025 ~ Leaf + */ + +package leaf.cosmere; + +import leaf.cosmere.api.IHasMetalType; +import leaf.cosmere.api.helpers.RegistryHelper; +import leaf.cosmere.common.Cosmere; +import leaf.cosmere.common.registration.impl.ItemRegistryObject; +import leaf.cosmere.common.registry.ItemsRegistry; +import net.minecraft.data.PackOutput; +import net.minecraft.data.recipes.*; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.packs.PackType; +import net.minecraft.tags.TagKey; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.Ingredient; +import net.minecraft.world.level.ItemLike; +import net.minecraftforge.common.Tags; +import net.minecraftforge.common.crafting.DifferenceIngredient; +import net.minecraftforge.common.crafting.PartialNBTIngredient; +import net.minecraftforge.common.data.ExistingFileHelper; + +import javax.annotation.Nullable; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.function.Consumer; +import java.util.stream.Stream; + +public abstract class BaseRecipeProvider extends RecipeProvider +{ + + private final ExistingFileHelper existingFileHelper; + private final String modid; + + protected BaseRecipeProvider(PackOutput output, ExistingFileHelper existingFileHelper, String modid) + { + super(output); + this.existingFileHelper = existingFileHelper; + this.modid = modid; + } + + @Override + protected final void buildRecipes(Consumer consumer) + { + Consumer trackingConsumer = consumer.andThen(recipe -> + existingFileHelper.trackGenerated(recipe.getId(), PackType.SERVER_DATA, ".json", "recipes")); + addRecipes(trackingConsumer); + } + + protected abstract ResourceLocation makeRL(String path); + + protected abstract void addRecipes(Consumer consumer); + + public static Ingredient createIngredient(TagKey itemTag, ItemLike... items) + { + return createIngredient(Collections.singleton(itemTag), items); + } + + public static Ingredient createIngredient(Collection> itemTags, ItemLike... items) + { + return Ingredient.fromValues(Stream.concat( + itemTags.stream().map(Ingredient.TagValue::new), + Arrays.stream(items).map(item -> new Ingredient.ItemValue(new ItemStack(item))) + )); + } + + @SafeVarargs + public static Ingredient createIngredient(TagKey... tags) + { + return Ingredient.fromValues(Arrays.stream(tags).map(Ingredient.TagValue::new)); + } + + public static Ingredient difference(TagKey base, ItemLike subtracted) + { + return DifferenceIngredient.of(Ingredient.of(base), Ingredient.of(subtracted)); + } + + protected void addOreSmeltingRecipes(Consumer consumer, ItemLike ore, Item result, float experience, int time) + { + String name = RegistryHelper.get(result).getPath(); + String path = RegistryHelper.get(ore.asItem()).getPath(); + SimpleCookingRecipeBuilder.smelting(Ingredient.of(ore), RecipeCategory.MISC, result, experience, time).unlockedBy("has_ore", has(ore)).save(consumer, makeRL(name + "_from_smelting_" + path)); + SimpleCookingRecipeBuilder.blasting(Ingredient.of(ore), RecipeCategory.MISC, result, experience, time / 2).unlockedBy("has_ore", has(ore)).save(consumer, makeRL(name + "_from_blasting_" + path)); + } + + protected void addCookingRecipes(Consumer consumer, ItemLike inputItem, Item result, float experience, int time) + { + String name = RegistryHelper.get(result).getPath(); + + SimpleCookingRecipeBuilder.smelting( + Ingredient.of(inputItem), + RecipeCategory.FOOD, + result, + experience, + time) + .unlockedBy("has_item", has(inputItem)) + .save(consumer, new ResourceLocation(modid, name + "_from_smelting")); + + SimpleCookingRecipeBuilder.smoking( + Ingredient.of(inputItem), + RecipeCategory.FOOD, + result, + experience, + time / 2) + .unlockedBy("has_item", has(inputItem)) + .save(consumer, new ResourceLocation(modid, name + "_from_smoking")); + + SimpleCookingRecipeBuilder.campfireCooking( + Ingredient.of(inputItem), + RecipeCategory.FOOD, + result, + experience, + time) + .unlockedBy("has_item", has(inputItem)) + .save(consumer, new ResourceLocation(modid, name + "_from_campfire")); + } + + protected void addPickaxeRecipe(Consumer consumer, ItemRegistryObject outputItem, TagKey inputMaterial) + { + ShapedRecipeBuilder + .shaped(RecipeCategory.TOOLS, outputItem) + .define('X', inputMaterial) + .define('Y', Tags.Items.RODS_WOODEN) + .pattern("XXX") + .pattern(" Y ") + .pattern(" Y ") + .group("pickaxe") + .unlockedBy("has_material", has(inputMaterial)) + .save(consumer); + } + + protected void addShovelRecipe(Consumer consumer, ItemRegistryObject outputItem, TagKey inputMaterial) + { + ShapedRecipeBuilder + .shaped(RecipeCategory.TOOLS, outputItem) + .define('X', inputMaterial) + .define('Y', Tags.Items.RODS_WOODEN) + .pattern("X") + .pattern("Y") + .pattern("Y") + .group("shovel") + .unlockedBy("has_material", has(inputMaterial)) + .save(consumer); + } + + protected void addAxeRecipe(Consumer consumer, ItemRegistryObject outputItem, TagKey inputMaterial) + { + ShapedRecipeBuilder + .shaped(RecipeCategory.TOOLS, outputItem) + .define('X', inputMaterial) + .define('Y', Tags.Items.RODS_WOODEN) + .pattern("XX") + .pattern("XY") + .pattern(" Y") + .group("axe") + .unlockedBy("has_material", has(inputMaterial)) + .save(consumer); + } + + protected void addSwordRecipe(Consumer consumer, ItemRegistryObject outputItem, TagKey inputMaterial) + { + ShapedRecipeBuilder + .shaped(RecipeCategory.COMBAT, outputItem) + .define('X', inputMaterial) + .define('Y', Tags.Items.RODS_WOODEN) + .pattern("X") + .pattern("X") + .pattern("Y") + .group("sword") + .unlockedBy("has_material", has(inputMaterial)) + .save(consumer); + } + + protected void addHoeRecipe(Consumer consumer, ItemRegistryObject outputItem, TagKey inputMaterial) + { + ShapedRecipeBuilder + .shaped(RecipeCategory.TOOLS, outputItem) + .define('X', inputMaterial) + .define('Y', Tags.Items.RODS_WOODEN) + .pattern("XX") + .pattern(" Y") + .pattern(" Y") + .group("hoe") + .unlockedBy("has_material", has(inputMaterial)) + .save(consumer); + } + + + protected void addArmorRecipes(Consumer consumer, TagKey inputMaterial, @Nullable ItemLike head, @Nullable ItemLike chest, @Nullable ItemLike legs, @Nullable ItemLike feet) + { + if (head != null) + { + ShapedRecipeBuilder + .shaped(RecipeCategory.COMBAT, head) + .define('X', inputMaterial) + .pattern("XXX") + .pattern("X X") + .group("helmet") + .unlockedBy("has_material", has(inputMaterial)) + .save(consumer); + } + if (chest != null) + { + ShapedRecipeBuilder + .shaped(RecipeCategory.COMBAT, chest) + .define('X', inputMaterial) + .pattern("X X") + .pattern("XXX") + .pattern("XXX") + .group("chestplate") + .unlockedBy("has_material", has(inputMaterial)) + .save(consumer); + } + if (legs != null) + { + ShapedRecipeBuilder + .shaped(RecipeCategory.COMBAT, legs) + .define('X', inputMaterial) + .pattern("XXX") + .pattern("X X") + .pattern("X X") + .group("leggings") + .unlockedBy("has_material", has(inputMaterial)) + .save(consumer); + } + if (feet != null) + { + ShapedRecipeBuilder + .shaped(RecipeCategory.COMBAT, feet) + .define('X', inputMaterial) + .pattern("X X") + .pattern("X X") + .group("boots") + .unlockedBy("has_material", has(inputMaterial)) + .save(consumer); + } + } + + protected void decompressRecipe(Consumer consumer, ItemLike output, ItemLike input, String name) + { + ShapelessRecipeBuilder.shapeless(RecipeCategory.MISC, output, 9) + .unlockedBy("has_item", has(output)) + .requires(input) + .save(consumer, new ResourceLocation(modid, "conversions/" + name)); + } + + protected void decompressRecipe(Consumer consumer, ItemLike output, TagKey input, String name) + { + ShapelessRecipeBuilder.shapeless(RecipeCategory.MISC, output, 9) + .unlockedBy("has_item", has(output)) + .requires(input) + .save(consumer, new ResourceLocation(modid, "conversions/" + name)); + } + + protected ShapedRecipeBuilder compressRecipe(ItemLike output, TagKey input) + { + return ShapedRecipeBuilder.shaped(RecipeCategory.DECORATIONS, output) + .define('I', input) + .pattern("III") + .pattern("III") + .pattern("III") + .unlockedBy("has_item", has(input)); + } + + protected ShapedRecipeBuilder compressRecipe(ItemLike output, TagKey input, ItemLike center) + { + return ShapedRecipeBuilder.shaped(RecipeCategory.DECORATIONS, output) + .define('I', input) + .define('J', center) + .pattern("III") + .pattern("IJI") + .pattern("III") + .unlockedBy("has_item", has(input)); + } + + protected ShapedRecipeBuilder godMetalCompressRecipe(ItemLike output, ItemLike input) + { + CompoundTag tag = new CompoundTag(); + tag.putInt("nuggetSize", 16); + PartialNBTIngredient ingredient = PartialNBTIngredient.of(input, tag); + + return ShapedRecipeBuilder.shaped(RecipeCategory.DECORATIONS, output) + .define('I', ingredient) + .pattern("III") + .pattern("III") + .pattern("III") + .unlockedBy("has_item", has(input)); + } +} \ No newline at end of file diff --git a/src/datagen/main/java/leaf/cosmere/CosmereDataGenerator.java b/src/datagen/main/java/leaf/cosmere/CosmereDataGenerator.java new file mode 100644 index 000000000..77ca42002 --- /dev/null +++ b/src/datagen/main/java/leaf/cosmere/CosmereDataGenerator.java @@ -0,0 +1,57 @@ +/* + * File updated ~ 10 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere; + +import leaf.cosmere.biome.BiomeTagsProvider; +import leaf.cosmere.biome.CosmereDatapackRegistryProvider; +import leaf.cosmere.blocks.BlockModelsGen; +import leaf.cosmere.common.Cosmere; +import leaf.cosmere.common.registry.BiomeRegistry; +import leaf.cosmere.items.ItemModelsGen; +import leaf.cosmere.loottables.LootTableGen; +import leaf.cosmere.patchouli.PatchouliGen; +import leaf.cosmere.tag.CosmereTagProvider; +import net.minecraft.core.RegistrySetBuilder; +import net.minecraft.core.registries.Registries; +import net.minecraft.data.DataGenerator; +import net.minecraft.data.PackOutput; +import net.minecraftforge.common.data.ExistingFileHelper; +import net.minecraftforge.data.event.GatherDataEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod.EventBusSubscriber; +import net.minecraftforge.fml.common.Mod.EventBusSubscriber.Bus; + +@EventBusSubscriber(modid = Cosmere.MODID, bus = Bus.MOD) +public class CosmereDataGenerator +{ + private static final RegistrySetBuilder BUILDER = new RegistrySetBuilder() + .add(Registries.BIOME, BiomeRegistry::bootstrapBiomes); + + @SubscribeEvent + public static void gatherData(GatherDataEvent event) + { + DataGenerator generator = event.getGenerator(); + PackOutput packOutput = generator.getPackOutput(); + ExistingFileHelper existingFileHelper = event.getExistingFileHelper(); + + + generator.addProvider(true, new EngLangGen(packOutput)); + + generator.addProvider(true, new ItemModelsGen(packOutput, existingFileHelper)); + generator.addProvider(true, new BlockModelsGen(packOutput, existingFileHelper)); + generator.addProvider(true, new LootTableGen(packOutput)); + generator.addProvider(true, new RecipeGen(packOutput, existingFileHelper)); + + generator.addProvider(true, new PatchouliGen(packOutput)); + + generator.addProvider(true, new CosmereDatapackRegistryProvider(packOutput, event.getLookupProvider())); + generator.addProvider(true, new BiomeTagsProvider(packOutput, event.getLookupProvider(), existingFileHelper)); + + generator.addProvider(true, new CosmereTagProvider(packOutput, event.getLookupProvider(), existingFileHelper)); + + } + + +} \ No newline at end of file diff --git a/src/datagen/main/java/leaf/cosmere/EngLangGen.java b/src/datagen/main/java/leaf/cosmere/EngLangGen.java new file mode 100644 index 000000000..cbf7157b0 --- /dev/null +++ b/src/datagen/main/java/leaf/cosmere/EngLangGen.java @@ -0,0 +1,254 @@ +/* + * File updated ~ 20 - 11 - 2024 ~ Leaf + */ + +package leaf.cosmere; + +import leaf.cosmere.api.EnumUtils; +import leaf.cosmere.api.Metals; +import leaf.cosmere.api.Roshar; +import leaf.cosmere.api.helpers.RegistryHelper; +import leaf.cosmere.api.providers.IAttributeProvider; +import leaf.cosmere.api.providers.IEntityTypeProvider; +import leaf.cosmere.api.providers.IItemProvider; +import leaf.cosmere.api.text.StringHelper; +import leaf.cosmere.common.Cosmere; +import leaf.cosmere.common.items.GodMetalNuggetItem; +import leaf.cosmere.common.registry.*; +import net.minecraft.data.PackOutput; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.Item; +import net.minecraftforge.common.data.LanguageProvider; + +import static leaf.cosmere.api.Constants.Strings.*; +import static leaf.cosmere.common.registry.ItemsRegistry.METAL_NUGGETS; + +public class EngLangGen extends LanguageProvider +{ + final String advancementTitleFormat = "advancements.cosmere.%s.title"; + final String advancementDescriptionFormat = "advancements.cosmere.%s.description"; + + public EngLangGen(PackOutput output) + { + super(output, Cosmere.MODID, "en_us"); + } + + @Override + protected void addTranslations() + { + addItemsAndBlocks(); + addMetals(); + addEntities(); + addAdvancements(); + addManifestations(); + addAttributes(); + addPatchouli(); + addTooltips(); + addDamageSources(); + addMobEffects(); + addCurioIdentifiers(); + addConfigs(); + addCommands(); + addKeybindings(); + addStats(); + addCreativeTabs(); + } + + + private void addItemsAndBlocks() + { + //Items and Blocks + for (IItemProvider item : ItemsRegistry.ITEMS.getAllItems()) + { + final Item currentItem = item.asItem(); + final ResourceLocation registryName = RegistryHelper.get(currentItem); + if (registryName.getNamespace().contentEquals(Cosmere.MODID)) + { + String localisedString = StringHelper.fixCapitalisation(registryName.getPath()); + + //string overrides + //todo will we be overriding more of these? + if (localisedString.equals("Guide")) + { + localisedString = "Ars Arcanum";//after the book that is written by Khriss + } + + add(currentItem.getDescriptionId(), localisedString); + } + } + + for (IItemProvider item : BlocksRegistry.BLOCKS.getAllBlocks()) + { + final Item currentItem = item.asItem(); + final ResourceLocation registryName = RegistryHelper.get(currentItem); + String localisedString = StringHelper.fixCapitalisation(registryName.getPath()); + add(currentItem.getDescriptionId(), localisedString); + } + + + //work through each metal and generate localisation for related things. + for (Metals.MetalType metalType : EnumUtils.METAL_TYPES) + { + //if a vanilla metal, like iron/gold/copper + if (!metalType.hasMaterialItem() || metalType == Metals.MetalType.COPPER) + { + final String name = metalType.getName(); + //add(item.getDescriptionId(), localisedString); + if (metalType != Metals.MetalType.COPPER) // copper specifically has no vanilla nugget, and so we have already made this key + { + final String n = name + "_nugget"; + add("item.cosmere." + n, StringHelper.fixCapitalisation(n)); + } + final String i = name + "_ingot"; + final String b = name + "_block"; + add("item.cosmere." + i, StringHelper.fixCapitalisation(i)); + add("item.cosmere." + b, StringHelper.fixCapitalisation(b)); + } + } + } + + private void addMetals() + { + // Work through each metal + for (Metals.MetalType metalType : EnumUtils.METAL_TYPES) + { + add("metal.cosmere." + metalType.getName(), StringHelper.fixCapitalisation(metalType.getName())); + } + } + + private void addEntities() + { + //Entities + add("entity.minecraft.villager.cosmere.metal_trader", "Metal Trader"); + for (IEntityTypeProvider type : EntityTypeRegistry.ENTITY_TYPES.getAllEntityTypes()) + { + final ResourceLocation id = type.getRegistryName(); + add(type.getEntityType().getDescriptionId(), StringHelper.fixCapitalisation(id.getPath())); + } + } + + private void addAdvancements() + { + } + + private void addManifestations() + { + add(ManifestationRegistry.NONE.getTranslationKey(), "None"); + // Hemalurgic manifestations + add("manifestation.cosmere.night_vision", "Night Vision"); + add("manifestation.cosmere.xp_gain_rate", "XP Gain Rate"); + } + + private void addAttributes() + { + //Attributes + for (IAttributeProvider registryObject : AttributesRegistry.ATTRIBUTES.getAllAttributes()) + { + final String descriptionId = registryObject.getAttribute().getDescriptionId(); + //no duplicates pls + //manifestation section handles adding attributes lang gen for themselves + if (!descriptionId.startsWith("manifestation")) + { + String[] sections = descriptionId.replace('_', ' ').split("\\."); + String translation = sections[2]; + add(descriptionId, StringHelper.fixCapitalisation(translation)); + } + } + } + + private void addPatchouli() + { + //ARS Arcanum + add("cosmere.landing", "The Cosmere is filled with many fantastical things. I have left my findings written within this book."); + } + + private void addCreativeTabs() + { + //ItemGroups/Tabs + //CreativeTabsRegistry.ITEMS.get().getDisplayName() + add("tabs.cosmere.items", "Cosmere"); + } + + private void addTooltips() + { + //Tooltips + add("tooltip.item.info.shift", "\u00A77Hold \u00A78[\u00A7eShift\u00A78]"); + add("tooltip.item.info.shift_control", "\u00A77Hold \u00A78[\u00A7eShift\u00A78] \u00A77and \u00A78[\u00A7eControl\u00A78]"); + add("tooltip.item.info.control", "\u00A77Hold \u00A78[\u00A7eControl\u00A78]"); + + //patchouli + add(PATCHOULI_NOT_INSTALLED, "Patchouli is not installed. Documentation is not available."); + } + + private void addDamageSources() + { + //Damage Sources + add("death.attack.eat_metal", "%1$s shredded their throat while eating metal"); + add("death.attack.eat_metal.player", "%1$s tried to eat metal directly while fighting %2$s"); + } + + private void addMobEffects() + { + } + + private void addCurioIdentifiers() + { + } + + private void addConfigs() + { + } + + private void addCommands() + { + //Commands + add(POWER_INVALID, "Invalid power"); + add(POWER_CLEAR_SUCCESS, "Cleared powers on player: %s"); + add(POWER_SET_SUCCESS, "Successfully set power to: %s"); + add(POWER_SET_FAIL, "Failed to update power"); + add(POWER_MODE_SET, "Mode set to: %s"); + add(POWER_ACTIVE, "Power now active: %s"); + add(POWER_INACTIVE, "Power now inactive: %s"); + add(POWER_STRENGTH, "Base Strength: %s \nTotal Strength: %s"); + + add(POWERS_FOUND, "Powers found for: %s \n"); + add(EFFECTS_FOUND, "Effects found for: %s \n"); + add(EFFECTS_CLEAR, "Effects cleared for: %s \n"); + } + + private void addKeybindings() + { + //KeyBindings + add(KEYS_CATEGORY, "Cosmere"); + add(KEYS_ACTIVATE_CATEGORY, "Power Activators"); + add(KEY_MANIFESTATION_MENU, "Powers Menu"); + add(KEY_DEACTIVATE_ALL_POWERS, "Deactivate All Powers"); + add(KEY_MANIFESTATION_NEXT, "Next Power"); + add(KEY_MANIFESTATION_PREVIOUS, "Previous Power"); + add(KEY_MANIFESTATION_USE_ACTIVE, "Use Active Ability"); + add(KEY_MANIFESTATION_MODE_INCREASE, "Mode Increase"); + add(KEY_MANIFESTATION_MODE_DECREASE, "Mode Decrease"); + add(KEY_ACTIVATE, "Activate Power Save State"); + add(KEY_SAVE_ACTIVATOR, "Save New Power State"); + String allo = "Activate Allomantic "; + String feru = "Activate Feruchemic "; + String surge = "Activate Surgebinding "; + for(Metals.MetalType metalType: EnumUtils.METAL_TYPES) + { + if(!metalType.hasFeruchemicalEffect()) + { + continue; + } + add(KEY_ALLOMANCY + metalType.getName(), allo + StringHelper.fixCapitalisation(metalType.getName())); + add(KEY_FERUCHEMY + metalType.getName(), feru + StringHelper.fixCapitalisation(metalType.getName())); + } + for(Roshar.Surges i : EnumUtils.SURGES) + { + add(KEY_STORMLIGHT + i.getName(), surge + StringHelper.fixCapitalisation(i.getName())); + } + } + + private void addStats() + { + } +} diff --git a/src/datagen/main/java/leaf/cosmere/RecipeGen.java b/src/datagen/main/java/leaf/cosmere/RecipeGen.java new file mode 100644 index 000000000..4bd951891 --- /dev/null +++ b/src/datagen/main/java/leaf/cosmere/RecipeGen.java @@ -0,0 +1,209 @@ +/* + * File updated ~ 4 - 1 - 2025 ~ Leaf + */ + +package leaf.cosmere; + +import leaf.cosmere.api.CosmereTags; +import leaf.cosmere.api.EnumUtils; +import leaf.cosmere.api.Metals; +import leaf.cosmere.common.Cosmere; +import leaf.cosmere.common.registry.BlocksRegistry; +import leaf.cosmere.common.registry.CosmereRecipesRegistry; +import leaf.cosmere.common.registry.ItemsRegistry; +import leaf.cosmere.common.resource.ore.OreType; +import leaf.cosmere.common.util.CosmereEnumUtils; +import net.minecraft.data.PackOutput; +import net.minecraft.data.recipes.*; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.ItemTags; +import net.minecraft.tags.TagKey; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.crafting.Ingredient; +import net.minecraft.world.level.ItemLike; +import net.minecraftforge.common.Tags; +import net.minecraftforge.common.crafting.conditions.IConditionBuilder; +import net.minecraftforge.common.data.ExistingFileHelper; + +import java.util.Arrays; +import java.util.Map; +import java.util.function.Consumer; + +public class RecipeGen extends BaseRecipeProvider implements IConditionBuilder +{ + public RecipeGen(PackOutput output, ExistingFileHelper existingFileHelper) + { + super(output, existingFileHelper, Cosmere.MODID); + } + + @Override + protected ResourceLocation makeRL(String path) + { + return Cosmere.rl(path); + } + + @Override + protected void addRecipes(Consumer consumer) + { + + ShapedRecipeBuilder + .shaped(RecipeCategory.DECORATIONS, BlocksRegistry.METALWORKING_TABLE.getBlock()) + .define('X', ItemsRegistry.METAL_INGOTS.get(Metals.MetalType.STEEL).asItem()) + .define('Y', ItemTags.PLANKS) + .pattern("XX") + .pattern("YY") + .pattern("YY") + .unlockedBy("has_material", has(Tags.Items.INGOTS)) + .save(consumer); + + + for (Metals.MetalType metalType : EnumUtils.METAL_TYPES) + { + //theres no reason for uss to add ways to recipe blocks/ingots that minecraft already has + final Metals.MetalType[] blacklistedTypes = {Metals.MetalType.IRON, Metals.MetalType.GOLD,}; + if (Arrays.stream(blacklistedTypes).anyMatch(metalType::equals)) + { + continue; + } + + // specifically copper has no nuggets, so create nugget and move on + if (metalType == Metals.MetalType.COPPER) + { + compressRecipe(Items.COPPER_INGOT, CosmereTags.Items.METAL_NUGGET_TAGS.get(metalType), ItemsRegistry.METAL_NUGGETS.get(metalType)).save(consumer); + decompressRecipe(consumer, ItemsRegistry.METAL_NUGGETS.get(metalType).get(), Tags.Items.INGOTS_COPPER, metalType.getName() + "_item_deconstruct"); + continue; + } + + compressRecipe(BlocksRegistry.METAL_BLOCKS.get(metalType).getBlock(), CosmereTags.Items.METAL_INGOT_TAGS.get(metalType), ItemsRegistry.METAL_INGOTS.get(metalType)).save(consumer); + decompressRecipe(consumer, ItemsRegistry.METAL_INGOTS.get(metalType).get(), BlocksRegistry.METAL_BLOCKS.get(metalType), metalType.getName() + "_block_deconstruct"); + + if(metalType.isGodMetal()) + { + godMetalCompressRecipe(ItemsRegistry.METAL_INGOTS.get(metalType).get(), ItemsRegistry.GOD_METAL_NUGGETS.get(metalType).get()).save(consumer); + decompressRecipe(consumer, ItemsRegistry.GOD_METAL_NUGGETS.get(metalType).get(), CosmereTags.Items.METAL_INGOT_TAGS.get(metalType), metalType.getName() + "_item_deconstruct"); + } + else + { + compressRecipe(ItemsRegistry.METAL_INGOTS.get(metalType).get(), CosmereTags.Items.METAL_NUGGET_TAGS.get(metalType), ItemsRegistry.METAL_NUGGETS.get(metalType)).save(consumer); + decompressRecipe(consumer, ItemsRegistry.METAL_NUGGETS.get(metalType).get(), CosmereTags.Items.METAL_INGOT_TAGS.get(metalType), metalType.getName() + "_item_deconstruct"); + } + + if (metalType.isAlloy()) + { + Item outputBlend = ItemsRegistry.METAL_RAW_BLEND.get(metalType).asItem(); + addAlloyRecipes(consumer, metalType, outputBlend, CosmereTags.Items.METAL_RAW_TAGS, "raw_blend"); + addAlloyRecipes(consumer, metalType, outputBlend, CosmereTags.Items.METAL_DUST_TAGS, "dust_blend"); + addAlloyRecipes(consumer, metalType, outputBlend, CosmereTags.Items.METAL_INGOT_TAGS, "ingot_blend"); + + addOreSmeltingRecipes(consumer, outputBlend, ItemsRegistry.METAL_INGOTS.get(metalType).asItem(), 1.0f, 200); + } + + } + + for (OreType oreType : CosmereEnumUtils.ORE_TYPES) + { + final Metals.MetalType metalType = oreType.getMetalType(); + addOreSmeltingRecipes(consumer, BlocksRegistry.METAL_ORE.get(oreType).stone().getBlock(), ItemsRegistry.METAL_INGOTS.get(metalType).asItem(), 1.0f, 200); + addOreSmeltingRecipes(consumer, BlocksRegistry.METAL_ORE.get(oreType).deepslate().getBlock(), ItemsRegistry.METAL_INGOTS.get(metalType).asItem(), 1.0f, 200); + addOreSmeltingRecipes(consumer, ItemsRegistry.METAL_RAW_ORE.get(metalType).get(), ItemsRegistry.METAL_INGOTS.get(metalType).asItem(), 1.0f, 200); + } + + SpecialRecipeBuilder.special(CosmereRecipesRegistry.GOD_METAL_ALLOY_NUGGET_RECIPE.get()) + .save(consumer, new ResourceLocation(Cosmere.MODID, + CosmereRecipesRegistry.GOD_METAL_ALLOY_NUGGET_RECIPE.getInternalRegistryName()).toString()); + + SpecialRecipeBuilder.special(CosmereRecipesRegistry.GOD_METAL_NUGGETS_COMPRESS.get()) + .save(consumer, new ResourceLocation(Cosmere.MODID, + CosmereRecipesRegistry.GOD_METAL_NUGGETS_COMPRESS.getInternalRegistryName()).toString()); + + SpecialRecipeBuilder.special(CosmereRecipesRegistry.GOD_METAL_NUGGETS_DECOMPRESS.get()) + .save(consumer, new ResourceLocation(Cosmere.MODID, + CosmereRecipesRegistry.GOD_METAL_NUGGETS_DECOMPRESS.getInternalRegistryName()).toString()); + + } + + protected static void addAlloyRecipes(Consumer consumer, Metals.MetalType metalType, Item output, Map> materialTag, String recipe) + { + String s = String.format("alloying/%s/", recipe); + + switch (metalType) + { + case STEEL: + ShapelessRecipeBuilder.shapeless(RecipeCategory.MISC, output, 4) + .unlockedBy("has_item", has(output)) + .requires(materialTag.get(Metals.MetalType.IRON)) + .requires(materialTag.get(Metals.MetalType.IRON)) + .requires(materialTag.get(Metals.MetalType.IRON)) + .requires(Ingredient.of(Items.COAL, Items.CHARCOAL)) + .save(consumer, Cosmere.rl(s + metalType.getName())); + break; + case PEWTER: + ShapelessRecipeBuilder.shapeless(RecipeCategory.MISC, output, 5) + .unlockedBy("has_item", has(output)) + .requires(materialTag.get(Metals.MetalType.TIN)) + .requires(materialTag.get(Metals.MetalType.TIN)) + .requires(materialTag.get(Metals.MetalType.TIN)) + .requires(materialTag.get(Metals.MetalType.TIN)) + .requires(materialTag.get(Metals.MetalType.LEAD)) + .save(consumer, Cosmere.rl(s + metalType.getName())); + break; + case BRASS: + ShapelessRecipeBuilder.shapeless(RecipeCategory.MISC, output, 2) + .unlockedBy("has_item", has(output)) + .requires(materialTag.get(Metals.MetalType.ZINC)) + .requires(materialTag.get(Metals.MetalType.COPPER)) + .save(consumer, Cosmere.rl(s + metalType.getName())); + break; + case BRONZE: + ShapelessRecipeBuilder.shapeless(RecipeCategory.MISC, output, 4) + .unlockedBy("has_item", has(output)) + .requires(materialTag.get(Metals.MetalType.COPPER)) + .requires(materialTag.get(Metals.MetalType.COPPER)) + .requires(materialTag.get(Metals.MetalType.COPPER)) + .requires(materialTag.get(Metals.MetalType.TIN)) + .save(consumer, Cosmere.rl(s + metalType.getName())); + break; + case DURALUMIN: + ShapelessRecipeBuilder.shapeless(RecipeCategory.MISC, output, 5) + .unlockedBy("has_item", has(output)) + .requires(materialTag.get(Metals.MetalType.ALUMINUM)) + .requires(materialTag.get(Metals.MetalType.ALUMINUM)) + .requires(materialTag.get(Metals.MetalType.ALUMINUM)) + .requires(materialTag.get(Metals.MetalType.ALUMINUM)) + .requires(materialTag.get(Metals.MetalType.COPPER)) + .save(consumer, Cosmere.rl(s + metalType.getName())); + break; + case NICROSIL: + ShapelessRecipeBuilder.shapeless(RecipeCategory.MISC, output, 4) + .unlockedBy("has_item", has(output)) + .requires(materialTag.get(Metals.MetalType.CHROMIUM)) + .requires(materialTag.get(Metals.MetalType.NICKEL)) + .requires(materialTag.get(Metals.MetalType.NICKEL)) + .requires(materialTag.get(Metals.MetalType.NICKEL)) + .save(consumer, Cosmere.rl(s + metalType.getName())); + break; + case BENDALLOY: + ShapelessRecipeBuilder.shapeless(RecipeCategory.MISC, output, 9) + .unlockedBy("has_item", has(output)) + .requires(materialTag.get(Metals.MetalType.CADMIUM)) + .requires(materialTag.get(Metals.MetalType.LEAD)) + .requires(materialTag.get(Metals.MetalType.LEAD)) + .requires(materialTag.get(Metals.MetalType.LEAD)) + .requires(materialTag.get(Metals.MetalType.LEAD)) + .requires(materialTag.get(Metals.MetalType.LEAD)) + .requires(materialTag.get(Metals.MetalType.LEAD)) + .requires(materialTag.get(Metals.MetalType.TIN)) + .requires(materialTag.get(Metals.MetalType.TIN)) + .save(consumer, Cosmere.rl(s + metalType.getName())); + break; + case ELECTRUM: + ShapelessRecipeBuilder.shapeless(RecipeCategory.MISC, output, 2) + .unlockedBy("has_item", has(output)) + .requires(materialTag.get(Metals.MetalType.GOLD)) + .requires(materialTag.get(Metals.MetalType.SILVER)) + .save(consumer, Cosmere.rl(s + metalType.getName())); + break; + } + } +} diff --git a/src/datagen/main/java/leaf/cosmere/biome/BiomeTagsProvider.java b/src/datagen/main/java/leaf/cosmere/biome/BiomeTagsProvider.java new file mode 100644 index 000000000..e1df39013 --- /dev/null +++ b/src/datagen/main/java/leaf/cosmere/biome/BiomeTagsProvider.java @@ -0,0 +1,46 @@ +/* + * File updated ~ 7 - 8 - 2024 ~ Leaf + */ + +package leaf.cosmere.biome; + +import leaf.cosmere.api.CosmereAPI; +import leaf.cosmere.api.CosmereTags; +import leaf.cosmere.common.registry.BiomeRegistry; +import net.minecraft.core.HolderLookup; +import net.minecraft.data.PackOutput; +import net.minecraft.resources.ResourceKey; +import net.minecraft.tags.TagKey; +import net.minecraft.world.level.biome.Biome; +import net.minecraftforge.common.data.ExistingFileHelper; + +import java.util.concurrent.CompletableFuture; + +public class BiomeTagsProvider extends net.minecraft.data.tags.BiomeTagsProvider +{ + public BiomeTagsProvider(PackOutput packOutput, CompletableFuture lookupProvider, ExistingFileHelper existingFileHelper) + { + super(packOutput, lookupProvider, CosmereAPI.COSMERE_MODID, existingFileHelper); + } + + @Override + protected void addTags(HolderLookup.Provider pProvider) + { + tag(BiomeRegistry.SHADESMAR_BIOME_KEY, CosmereTags.Biomes.IS_SHADESMAR); + } + + @SafeVarargs + private void tag(ResourceKey biome, TagKey... tags) + { + for (TagKey key : tags) + { + tag(key).add(biome); + } + } + + @Override + public String getName() + { + return "Cosmere Biome Tags"; + } +} \ No newline at end of file diff --git a/src/datagen/main/java/leaf/cosmere/biome/CosmereDatapackRegistryProvider.java b/src/datagen/main/java/leaf/cosmere/biome/CosmereDatapackRegistryProvider.java new file mode 100644 index 000000000..6aacccdb5 --- /dev/null +++ b/src/datagen/main/java/leaf/cosmere/biome/CosmereDatapackRegistryProvider.java @@ -0,0 +1,147 @@ +/* + * File updated ~ 20 - 11 - 2024 ~ Leaf + */ + +package leaf.cosmere.biome; + + +import leaf.cosmere.BaseDatapackRegistryProvider; +import leaf.cosmere.api.CosmereTags; +import leaf.cosmere.common.Cosmere; +import leaf.cosmere.common.config.CosmereConfigs; +import leaf.cosmere.common.config.CosmereWorldConfig.OreVeinConfig; +import leaf.cosmere.common.registration.impl.FeatureRegistryObject; +import leaf.cosmere.common.registry.BlocksRegistry; +import leaf.cosmere.common.registry.CosmereDamageTypesRegistry; +import leaf.cosmere.common.registry.FeatureRegistry; +import leaf.cosmere.common.resource.ore.OreBlockType; +import leaf.cosmere.common.resource.ore.OreType; +import leaf.cosmere.common.resource.ore.OreType.OreVeinType; +import leaf.cosmere.common.util.CosmereEnumUtils; +import leaf.cosmere.common.world.ConfigurableConstantInt; +import leaf.cosmere.common.world.ResizableOreFeature; +import leaf.cosmere.common.world.ResizableOreFeatureConfig; +import leaf.cosmere.common.world.height.ConfigurableHeightProvider; +import net.minecraft.core.*; +import net.minecraft.core.registries.Registries; +import net.minecraft.data.PackOutput; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.BlockTags; +import net.minecraft.world.damagesource.DamageType; +import net.minecraft.world.level.biome.Biome; +import net.minecraft.world.level.levelgen.GenerationStep; +import net.minecraft.world.level.levelgen.feature.ConfiguredFeature; +import net.minecraft.world.level.levelgen.feature.configurations.OreConfiguration; +import net.minecraft.world.level.levelgen.placement.*; +import net.minecraft.world.level.levelgen.structure.templatesystem.RuleTest; +import net.minecraft.world.level.levelgen.structure.templatesystem.TagMatchTest; +import net.minecraftforge.common.world.ForgeBiomeModifiers; +import net.minecraftforge.registries.ForgeRegistries; + +import java.util.ArrayList; +import java.util.EnumMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + + +//based on MekanismDatapackRegistryProvider from Mekanism +// https://github.com/mekanism/Mekanism/blob/7de496745c721fb15d00d590ddcacf00570f3f1b/src/datagen/main/java/mekanism/common/registries/MekanismDatapackRegistryProvider.java#L62 +public class CosmereDatapackRegistryProvider extends BaseDatapackRegistryProvider +{ + public CosmereDatapackRegistryProvider(PackOutput output, CompletableFuture lookupProvider) + { + super(output, lookupProvider, BUILDER, Cosmere.MODID); + } + + private static final Map> ORE_STONE_TARGETS = new EnumMap<>(OreType.class); + private static final RuleTest STONE_ORE_REPLACEABLES = new TagMatchTest(BlockTags.STONE_ORE_REPLACEABLES); + private static final RuleTest DEEPSLATE_ORE_REPLACEABLES = new TagMatchTest(BlockTags.DEEPSLATE_ORE_REPLACEABLES); + + private static ConfiguredFeature configureOreFeature(OreVeinType oreVeinType, + FeatureRegistryObject featureRO) + { + OreVeinConfig oreVeinConfig = CosmereConfigs.WORLD_CONFIG.getVeinConfig(oreVeinType); + List targetStates = ORE_STONE_TARGETS.computeIfAbsent(oreVeinType.type(), oreType -> + { + OreBlockType oreBlockType = BlocksRegistry.METAL_ORE.get(oreType); + return List.of( + OreConfiguration.target(STONE_ORE_REPLACEABLES, oreBlockType.stoneBlock().defaultBlockState()), + OreConfiguration.target(DEEPSLATE_ORE_REPLACEABLES, oreBlockType.deepslateBlock().defaultBlockState()) + ); + }); + return new ConfiguredFeature<>( + featureRO.get(), + new ResizableOreFeatureConfig( + targetStates, + oreVeinType, + oreVeinConfig.maxVeinSize(), + oreVeinConfig.discardChanceOnAirExposure() + ) + ); + } + + private static final RegistrySetBuilder BUILDER = new RegistrySetBuilder() + .add(Registries.CONFIGURED_FEATURE, context -> + { + for (OreType type : CosmereEnumUtils.ORE_TYPES) + { + int features = type.getBaseConfigs().size(); + for (int vein = 0; vein < features; vein++) + { + OreVeinType oreVeinType = new OreVeinType(type, vein); + ResourceLocation name = Cosmere.rl(oreVeinType.name()); + context.register(configuredFeature(name), configureOreFeature(oreVeinType, FeatureRegistry.ORE)); + } + } + }) + .add(Registries.PLACED_FEATURE, context -> + { + for (OreType type : CosmereEnumUtils.ORE_TYPES) + { + int features = type.getBaseConfigs().size(); + for (int vein = 0; vein < features; vein++) + { + OreVeinType oreVeinType = new OreVeinType(type, vein); + OreVeinConfig oreVeinConfig = CosmereConfigs.WORLD_CONFIG.getVeinConfig(oreVeinType); + ResourceLocation name = Cosmere.rl(oreVeinType.name()); + registerPlacedFeature(context, name, modifiers -> List.of( + CountPlacement.of(new ConfigurableConstantInt(oreVeinType, oreVeinConfig.perChunk())), + InSquarePlacement.spread(), + HeightRangePlacement.of(ConfigurableHeightProvider.of(oreVeinType, oreVeinConfig)), + BiomeFilter.biome() + )); + } + } + }) + .add(ForgeRegistries.Keys.BIOME_MODIFIERS, context -> + { + HolderSet.Named isTaggedCanSpawnOres = context.lookup(Registries.BIOME).getOrThrow(CosmereTags.Biomes.SPAWN_ORES); + HolderGetter placedFeatures = context.lookup(Registries.PLACED_FEATURE); + for (OreType type : CosmereEnumUtils.ORE_TYPES) + { + int features = type.getBaseConfigs().size(); + List> placedVeins = new ArrayList<>(features); + for (int vein = 0; vein < features; vein++) + { + OreVeinType oreVeinType = new OreVeinType(type, vein); + ResourceLocation name = Cosmere.rl(oreVeinType.name()); + placedVeins.add(placedFeatures.getOrThrow(placedFeature(name))); + } + context.register( + biomeModifier(Cosmere.rl(type.getSerializedName())), + new ForgeBiomeModifiers.AddFeaturesBiomeModifier( + isTaggedCanSpawnOres, + HolderSet.direct(placedVeins), + GenerationStep.Decoration.UNDERGROUND_ORES) + ); + } + }) + .add(Registries.DAMAGE_TYPE, context -> + { + for (CosmereDamageTypesRegistry.CosmereDamageType damageType : CosmereDamageTypesRegistry.DAMAGE_TYPES.values()) + { + context.register(damageType.key(), new DamageType(damageType.getMsgId(), damageType.exhaustion())); + } + }); +} \ No newline at end of file diff --git a/src/datagen/main/java/leaf/cosmere/blocks/BlockModelsGen.java b/src/datagen/main/java/leaf/cosmere/blocks/BlockModelsGen.java new file mode 100644 index 000000000..c6e58a064 --- /dev/null +++ b/src/datagen/main/java/leaf/cosmere/blocks/BlockModelsGen.java @@ -0,0 +1,91 @@ +/* + * File updated ~ 9 - 3 - 2025 ~ Leaf + */ + +package leaf.cosmere.blocks; + +import leaf.cosmere.api.providers.IBlockProvider; +import leaf.cosmere.common.Cosmere; +import leaf.cosmere.common.blocks.MetalworkingTableBlock; +import leaf.cosmere.common.registry.BlocksRegistry; +import net.minecraft.data.PackOutput; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.block.Block; +import net.minecraftforge.client.model.generators.BlockStateProvider; +import net.minecraftforge.client.model.generators.ModelFile; +import net.minecraftforge.common.data.ExistingFileHelper; + +import java.util.function.Supplier; + +public class BlockModelsGen extends BlockStateProvider +{ + public BlockModelsGen(PackOutput packOutput, ExistingFileHelper existingFileHelper) + { + super(packOutput, Cosmere.MODID, existingFileHelper); + } + + @Override + protected void registerStatesAndModels() + { + for (IBlockProvider itemRegistryObject : BlocksRegistry.BLOCKS.getAllBlocks()) + { + final Block block = itemRegistryObject.getBlock(); + /*if (block instanceof MetalBlock) + { + //ModelFile blockModel = models().cubeAll(getPath(itemRegistryObject), new ResourceLocation(Cosmere.MODID, "block/metal_block")); + + //thank you botania! <3 tinting is awesome + ModelFile blockModel = models().withExistingParent("metal_block", Cosmere.rl("block/shapes/cube_all_tinted")) + .texture("all", Cosmere.rl("block/metal_block")); + + simpleBlock(block, blockModel); + continue; + } + else */ + if (block instanceof MetalworkingTableBlock) + { + ModelFile blockModel = models().withExistingParent("metalworking_table", new ResourceLocation("block/cube")) + .texture("particle", Cosmere.rl("block/metalworking_table_front")) + .texture("north", Cosmere.rl("block/metalworking_table_front")) + .texture("south", Cosmere.rl("block/metalworking_table_front")) + .texture("east", Cosmere.rl("block/metalworking_table_side")) + .texture("west", Cosmere.rl("block/metalworking_table_side")) + .texture("up", Cosmere.rl("block/metalworking_table_top")) + .texture("down", Cosmere.rl("block/metalworking_table_bottom")); + simpleBlock(block, blockModel); + continue; + } + /*else if (block instanceof MetalOreBlock) + { + //Special thanks to @Random & @sciwhiz12 on discord who helped me get these running + //To get the overlay working, you need to tell the blocks they have transparency, which I've donne in the ClientSetup script. + final boolean deepslate = RegistryHelper.get(block).getPath().contains("deepslate"); + + final String stoneType = deepslate ? "block/ore_block_deepslate" : "block/ore_block"; + final String stoneFileName = deepslate ? "ore_block_deepslate" : "ore_block"; + + ModelFile blockModel = models().withExistingParent(stoneFileName, Cosmere.rl("block/shapes/cube_with_tint_overlay")) + .texture("all", Cosmere.rl(stoneType)) + .texture("overlay", Cosmere.rl("block/ore_block_tint_overlay")); + + simpleBlock(block, blockModel); + continue; + }*/ + simpleBlock(itemRegistryObject.getBlock()); + } + + } + + public void simpleBlock(Supplier blockSupplier) + { + simpleBlock(blockSupplier.get()); + } + + + @Override + public void simpleBlock(Block block, ModelFile model) + { + super.simpleBlock(block, model); + this.simpleBlockItem(block, model); + } +} \ No newline at end of file diff --git a/src/datagen/main/java/leaf/cosmere/items/ItemModelsGen.java b/src/datagen/main/java/leaf/cosmere/items/ItemModelsGen.java new file mode 100644 index 000000000..1077f6c60 --- /dev/null +++ b/src/datagen/main/java/leaf/cosmere/items/ItemModelsGen.java @@ -0,0 +1,90 @@ +/* + * File updated ~ 6 - 8 - 2024 ~ Leaf + */ + +package leaf.cosmere.items; + +import leaf.cosmere.api.helpers.RegistryHelper; +import leaf.cosmere.api.providers.IItemProvider; +import leaf.cosmere.common.Cosmere; +import leaf.cosmere.common.items.GodMetalAlloyNuggetItem; +import leaf.cosmere.common.items.GodMetalNuggetItem; +import leaf.cosmere.common.registry.ItemsRegistry; +import net.minecraft.data.PackOutput; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.BlockItem; +import net.minecraft.world.item.Item; +import net.minecraftforge.client.model.generators.ItemModelBuilder; +import net.minecraftforge.client.model.generators.ItemModelProvider; +import net.minecraftforge.client.model.generators.ModelFile; +import net.minecraftforge.common.data.ExistingFileHelper; + +import java.util.function.Supplier; + +public class ItemModelsGen extends ItemModelProvider +{ + + public ItemModelsGen(PackOutput packOutput, ExistingFileHelper existingFileHelper) + { + super(packOutput, Cosmere.MODID, existingFileHelper); + } + + @Override + protected void registerModels() + { + for (IItemProvider itemRegistryObject : ItemsRegistry.ITEMS.getAllItems()) + { + String path = itemRegistryObject.getRegistryName().getPath(); + Item item = itemRegistryObject.asItem(); + + //blocks have their own model rules + if (item instanceof BlockItem) + { + continue; + } + else if (item instanceof GodMetalAlloyNuggetItem godMetalAlloyNuggetItem) + { + simpleItem(path, godMetalAlloyNuggetItem.getMetalType().getName() + "_" + godMetalAlloyNuggetItem.getAlloyedMetalType().getName() + "_nugget"); + continue; + } + else if (item instanceof GodMetalNuggetItem godMetalNuggetItem) + { + simpleItem(path, godMetalNuggetItem.getMetalType().getName() + "_nugget"); + continue; + } + ////otherwise set specific textures based on these item types + //else if (item instanceof MetalIngotItem) + //{ + // simpleItem(path, "metal_ingot"); + // continue; + //} + //else if (item instanceof MetalNuggetItem) + //{ + // simpleItem(path, "metal_nugget"); + // continue; + //} + //else if (item instanceof MetalRawOreItem rawItem) + //{ + // simpleItem(path, rawItem.getMetalType().isAlloy() ? "metal_blend" : "metal_raw"); + // continue; + //} + + //else normal item texture rules apply + simpleItem(path, path); + } + + } + + public String getPath(Supplier itemSupplier) + { + ResourceLocation location = RegistryHelper.get(itemSupplier.get()); + return location.getPath(); + } + + public ItemModelBuilder simpleItem(String path, String texturePath) + { + return this.getBuilder(path) + .parent(new ModelFile.UncheckedModelFile("item/generated")) + .texture("layer0", modLoc("item/" + texturePath)); + } +} \ No newline at end of file diff --git a/src/datagen/main/java/leaf/cosmere/loottables/BaseBlockLootTables.java b/src/datagen/main/java/leaf/cosmere/loottables/BaseBlockLootTables.java new file mode 100644 index 000000000..5563e27d4 --- /dev/null +++ b/src/datagen/main/java/leaf/cosmere/loottables/BaseBlockLootTables.java @@ -0,0 +1,216 @@ +/* + * File updated ~ 7 - 8 - 2024 ~ Leaf + */ + +package leaf.cosmere.loottables; + +import it.unimi.dsi.fastutil.objects.ReferenceArraySet; +import it.unimi.dsi.fastutil.objects.ReferenceOpenHashSet; +import leaf.cosmere.api.providers.IBlockProvider; +import net.minecraft.advancements.critereon.EnchantmentPredicate; +import net.minecraft.advancements.critereon.ItemPredicate; +import net.minecraft.advancements.critereon.MinMaxBounds; +import net.minecraft.advancements.critereon.StatePropertiesPredicate; +import net.minecraft.data.loot.BlockLootSubProvider; +import net.minecraft.world.flag.FeatureFlags; +import net.minecraft.world.item.enchantment.Enchantments; +import net.minecraft.world.level.ItemLike; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.SlabBlock; +import net.minecraft.world.level.block.state.properties.SlabType; +import net.minecraft.world.level.storage.loot.LootPool; +import net.minecraft.world.level.storage.loot.LootTable; +import net.minecraft.world.level.storage.loot.LootTable.Builder; +import net.minecraft.world.level.storage.loot.entries.LootItem; +import net.minecraft.world.level.storage.loot.entries.LootPoolEntryContainer; +import net.minecraft.world.level.storage.loot.functions.ApplyBonusCount; +import net.minecraft.world.level.storage.loot.functions.SetItemCountFunction; +import net.minecraft.world.level.storage.loot.predicates.*; +import net.minecraft.world.level.storage.loot.providers.number.ConstantValue; +import net.minecraft.world.level.storage.loot.providers.number.NumberProvider; +import net.minecraft.world.level.storage.loot.providers.number.UniformGenerator; +import org.jetbrains.annotations.NotNull; + +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.Set; +import java.util.function.Function; + +public abstract class BaseBlockLootTables extends BlockLootSubProvider +{ + + private static final LootItemCondition.Builder HAS_SILK_TOUCH = MatchTool.toolMatches(ItemPredicate.Builder.item() + .hasEnchantment(new EnchantmentPredicate(Enchantments.SILK_TOUCH, MinMaxBounds.Ints.atLeast(1)))); + + private final Set knownBlocks = new ReferenceOpenHashSet<>(); + //Note: We use an array set as we never expect this to have more than a few elements (in reality it only ever has one) + private final Set toSkip = new ReferenceArraySet<>(); + + protected BaseBlockLootTables() + { + //Note: We manually handle explosion resistance on a case by case basis dynamically + super(Collections.emptySet(), FeatureFlags.VANILLA_SET); + } + + @Override + protected void add(@NotNull Block block, @NotNull LootTable.Builder table) + { + //Overwrite the core register method to add to our list of known blocks + super.add(block, table); + knownBlocks.add(block); + } + + @NotNull + @Override + protected Iterable getKnownBlocks() + { + return knownBlocks; + } + + protected void skip(IBlockProvider... blockProviders) + { + for (IBlockProvider blockProvider : blockProviders) + { + toSkip.add(blockProvider.getBlock()); + } + } + + protected boolean skipBlock(Block block) + { + //Skip any blocks that we already registered a table for or have marked to skip + return knownBlocks.contains(block) || toSkip.contains(block); + } + + protected Builder createOreDrop(Block block, ItemLike item) + { + return createSilkTouchDispatchTable(block, applyExplosionDecay(block, LootItem.lootTableItem(item.asItem()) + .apply(ApplyBonusCount.addOreBonusCount(Enchantments.BLOCK_FORTUNE)) + )); + } + + protected Builder droppingWithFortuneOrRandomly(Block block, ItemLike item, UniformGenerator range) + { + return createSilkTouchDispatchTable(block, applyExplosionDecay(block, LootItem.lootTableItem(item.asItem()) + .apply(SetItemCountFunction.setCount(range)) + .apply(ApplyBonusCount.addOreBonusCount(Enchantments.BLOCK_FORTUNE)) + )); + } + + //IBlockProvider versions of BlockLootTable methods, modified to support varargs + protected void dropSelf(List blockProviders) + { + for (IBlockProvider blockProvider : blockProviders) + { + Block block = blockProvider.getBlock(); + if (!skipBlock(block)) + { + dropSelf(block); + } + } + } + + protected void add(Function factory, Collection blockProviders) + { + for (IBlockProvider blockProvider : blockProviders) + { + add(blockProvider.getBlock(), factory); + } + } + + protected void add(Function factory, IBlockProvider... blockProviders) + { + for (IBlockProvider blockProvider : blockProviders) + { + add(blockProvider.getBlock(), factory); + } + } + + /** + * Like vanilla's {@link BlockLootSubProvider#applyExplosionCondition(ItemLike, ConditionUserBuilder)} except with a boolean for if it is explosion resistant. + */ + private static > T applyExplosionCondition(boolean explosionResistant, ConditionUserBuilder condition) + { + return explosionResistant ? condition.unwrap() : condition.when(ExplosionCondition.survivesExplosion()); + } + + /** + * Like vanilla's {@link BlockLootSubProvider#createSlabItemTable(Block)} except with a named pool + */ + @NotNull + @Override + protected LootTable.Builder createSlabItemTable(@NotNull Block slab) + { + return LootTable.lootTable().withPool(LootPool.lootPool() + .name("main") + .setRolls(ConstantValue.exactly(1)) + .add(applyExplosionDecay(slab, LootItem.lootTableItem(slab) + .apply(SetItemCountFunction.setCount(ConstantValue.exactly(2)) + .when(LootItemBlockStatePropertyCondition.hasBlockStateProperties(slab) + .setProperties(StatePropertiesPredicate.Builder.properties().hasProperty(SlabBlock.TYPE, SlabType.DOUBLE))) + ) + ) + ) + ); + } + + /** + * Like vanilla's {@link BlockLootSubProvider#dropOther(Block, ItemLike)} except with a named pool + */ + @Override + public void dropOther(@NotNull Block block, @NotNull ItemLike drop) + { + add(block, createSingleItemTable(drop)); + } + + /** + * Like vanilla's {@link BlockLootSubProvider#createSingleItemTable(ItemLike)} except with a named pool + */ + @NotNull + @Override + public LootTable.Builder createSingleItemTable(@NotNull ItemLike item) + { + return LootTable.lootTable().withPool(applyExplosionCondition(item, LootPool.lootPool() + .name("main") + .setRolls(ConstantValue.exactly(1)) + .add(LootItem.lootTableItem(item)) + )); + } + + /** + * Like vanilla's {@link BlockLootSubProvider#createSingleItemTableWithSilkTouch(Block, ItemLike, NumberProvider)} except with a named pool + */ + @NotNull + @Override + protected LootTable.Builder createSingleItemTableWithSilkTouch(@NotNull Block block, @NotNull ItemLike item, @NotNull NumberProvider range) + { + return createSilkTouchDispatchTable(block, applyExplosionDecay(block, LootItem.lootTableItem(item).apply(SetItemCountFunction.setCount(range)))); + } + + /** + * Like vanilla's {@link BlockLootSubProvider#createSilkTouchDispatchTable(Block, LootPoolEntryContainer.Builder)} except with a named pool + */ + @NotNull + protected static LootTable.Builder createSilkTouchDispatchTable(@NotNull Block block, @NotNull LootPoolEntryContainer.Builder builder) + { + return createSelfDropDispatchTable(block, HAS_SILK_TOUCH, builder); + } + + /** + * Like vanilla's {@link BlockLootSubProvider#createSelfDropDispatchTable(Block, LootItemCondition.Builder, LootPoolEntryContainer.Builder)} except with a named pool + */ + @NotNull + protected static LootTable.Builder createSelfDropDispatchTable(@NotNull Block block, @NotNull LootItemCondition.Builder conditionBuilder, + @NotNull LootPoolEntryContainer.Builder entry) + { + return LootTable.lootTable().withPool(LootPool.lootPool() + .name("main") + .setRolls(ConstantValue.exactly(1)) + .add(LootItem.lootTableItem(block) + .when(conditionBuilder) + .otherwise(entry) + ) + ); + } + +} \ No newline at end of file diff --git a/src/datagen/main/java/leaf/cosmere/loottables/BaseEntityLootTables.java b/src/datagen/main/java/leaf/cosmere/loottables/BaseEntityLootTables.java new file mode 100644 index 000000000..ca7931b32 --- /dev/null +++ b/src/datagen/main/java/leaf/cosmere/loottables/BaseEntityLootTables.java @@ -0,0 +1,48 @@ +/* + * File updated ~ 7 - 8 - 2024 ~ Leaf + */ + +package leaf.cosmere.loottables; + +import it.unimi.dsi.fastutil.objects.ReferenceOpenHashSet; +import leaf.cosmere.api.providers.IEntityTypeProvider; +import net.minecraft.data.loot.EntityLootSubProvider; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.flag.FeatureFlags; +import net.minecraft.world.level.storage.loot.LootTable; +import org.jetbrains.annotations.NotNull; + +import java.util.Set; +import java.util.stream.Stream; + +public abstract class BaseEntityLootTables extends EntityLootSubProvider +{ + + private final Set> knownEntityTypes = new ReferenceOpenHashSet<>(); + + protected BaseEntityLootTables() + { + super(FeatureFlags.VANILLA_SET); + } + + @Override + protected void add(@NotNull EntityType type, @NotNull LootTable.Builder table) + { + //Overwrite the core register method to add to our list of known entity types + //Note: This isn't the actual core method as that one takes a ResourceLocation, but all our things wil pass through this one + super.add(type, table); + knownEntityTypes.add(type); + } + + @NotNull + @Override + protected Stream> getKnownEntityTypes() + { + return knownEntityTypes.stream(); + } + + protected void add(@NotNull IEntityTypeProvider typeProvider, @NotNull LootTable.Builder table) + { + add(typeProvider.getEntityType(), table); + } +} \ No newline at end of file diff --git a/src/datagen/main/java/leaf/cosmere/loottables/BaseLootProvider.java b/src/datagen/main/java/leaf/cosmere/loottables/BaseLootProvider.java new file mode 100644 index 000000000..20e1fb53a --- /dev/null +++ b/src/datagen/main/java/leaf/cosmere/loottables/BaseLootProvider.java @@ -0,0 +1,27 @@ +/* + * File updated ~ 7 - 8 - 2024 ~ Leaf + */ + +package leaf.cosmere.loottables; + +import net.minecraft.data.PackOutput; +import net.minecraft.data.loot.LootTableProvider; +import net.minecraft.resources.ResourceLocation; + +import java.util.Collections; +import java.util.List; +import java.util.Set; + +public abstract class BaseLootProvider extends LootTableProvider +{ + + protected BaseLootProvider(PackOutput output, List subProviders) + { + this(output, Collections.emptySet(), subProviders); + } + + protected BaseLootProvider(PackOutput output, Set requiredTables, List subProviders) + { + super(output, requiredTables, subProviders); + } +} \ No newline at end of file diff --git a/src/datagen/main/java/leaf/cosmere/loottables/BlockLootTableGen.java b/src/datagen/main/java/leaf/cosmere/loottables/BlockLootTableGen.java new file mode 100644 index 000000000..91ee1b4a2 --- /dev/null +++ b/src/datagen/main/java/leaf/cosmere/loottables/BlockLootTableGen.java @@ -0,0 +1,31 @@ +/* + * File updated ~ 8 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.loottables; + +import leaf.cosmere.api.providers.IBlockProvider; +import leaf.cosmere.common.blocks.MetalOreBlock; +import leaf.cosmere.common.registry.BlocksRegistry; +import leaf.cosmere.common.registry.ItemsRegistry; +import net.minecraft.world.level.block.Block; + +public class BlockLootTableGen extends BaseBlockLootTables +{ + @Override + protected void generate() + { + //first catch any blocks that don't drop self, like ores + for (IBlockProvider itemRegistryObject : BlocksRegistry.BLOCKS.getAllBlocks()) + { + final Block block = itemRegistryObject.getBlock(); + if (block instanceof MetalOreBlock oreBlock) + { + this.add(oreBlock, (ore) -> createOreDrop(ore, ItemsRegistry.METAL_RAW_ORE.get(oreBlock.getMetalType()))); + } + } + + //then make the rest drop themselves. + dropSelf(BlocksRegistry.BLOCKS.getAllBlocks()); + } +} diff --git a/src/datagen/main/java/leaf/cosmere/loottables/EntityLootTableGen.java b/src/datagen/main/java/leaf/cosmere/loottables/EntityLootTableGen.java new file mode 100644 index 000000000..50c258863 --- /dev/null +++ b/src/datagen/main/java/leaf/cosmere/loottables/EntityLootTableGen.java @@ -0,0 +1,14 @@ +/* + * File updated ~ 7 - 8 - 2024 ~ Leaf + */ + +package leaf.cosmere.loottables; + +public class EntityLootTableGen extends BaseEntityLootTables +{ + + @Override + public void generate() + { + } +} \ No newline at end of file diff --git a/src/datagen/main/java/leaf/cosmere/loottables/LootTableGen.java b/src/datagen/main/java/leaf/cosmere/loottables/LootTableGen.java new file mode 100644 index 000000000..1b924d1ca --- /dev/null +++ b/src/datagen/main/java/leaf/cosmere/loottables/LootTableGen.java @@ -0,0 +1,21 @@ +/* + * File updated ~ 7 - 8 - 2024 ~ Leaf + */ + +package leaf.cosmere.loottables; + +import net.minecraft.data.PackOutput; +import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets; + +import java.util.List; + +public class LootTableGen extends BaseLootProvider +{ + public LootTableGen(PackOutput output) + { + super(output, List.of( + new SubProviderEntry(BlockLootTableGen::new, LootContextParamSets.BLOCK), + new SubProviderEntry(EntityLootTableGen::new, LootContextParamSets.ENTITY) + )); + } +} diff --git a/src/datagen/main/java/leaf/cosmere/patchouli/PatchouliBasics.java b/src/datagen/main/java/leaf/cosmere/patchouli/PatchouliBasics.java new file mode 100644 index 000000000..19090cb69 --- /dev/null +++ b/src/datagen/main/java/leaf/cosmere/patchouli/PatchouliBasics.java @@ -0,0 +1,106 @@ +/* + * File updated ~ 8 - 10 - 2022 ~ Leaf + */ + +package leaf.cosmere.patchouli; + +import leaf.cosmere.api.Constants; +import leaf.cosmere.patchouli.data.BookStuff; +import leaf.cosmere.patchouli.data.PatchouliTextFormat; + +import java.util.ArrayList; +import java.util.List; + +public class PatchouliBasics +{ + public static void collect(List categories, List entries) + { + //todo basic general section + + BookStuff.Category basicsCategory = new BookStuff.Category("basics", + "In this section, I will teach you how to access and use your powers most effectively", + "cosmere:tin_ingot"); + categories.add(basicsCategory); + basicsCategory.sortnum = 10; + + // Start a page list + List pages = new ArrayList<>(); + + { // Investiture Basics Entry + BookStuff.Entry investitureBasics = new BookStuff.Entry("investiture_basics", basicsCategory, "cosmere:lerasatium_ingot"); + investitureBasics.priority = true; + + BookStuff.Page firstPage = new BookStuff.TextPage(); + firstPage.setTitle("Investiture (For Dummies)"); + firstPage.setText("%s is a concept functioning like matter or energy. It makes up 16 godlike beings called %s, as well as many other mystical or magical things. ".formatted(PatchouliTextFormat.Thing("Investiture"),PatchouliTextFormat.Thing("Shards")) + + "Investiture permeates all matter and can function as a power source for several types of magics we call \"%s.\" You may already have access to one or more of these arts.".formatted(PatchouliTextFormat.Thing("Invested Arts"))); + pages.add(firstPage); + BookStuff.Page secondPage = new BookStuff.TextPage(); + secondPage.setTitle("Origins of Investiture"); + secondPage.setText("Once, all investiture belonged to one powerful being called \"%s,\" but eventually 17 people decided to work together to kill him. ".formatted(PatchouliTextFormat.Thing("Adonalsium")) + + "They gathered four powerful artifacts made from investiture known as the \"%s\" and killed him with them through means still unknown to us. ".formatted(PatchouliTextFormat.Thing("Dawnshards")) + + "After Adonalsium was killed, his investiture was broken into 16 Shards and each of the 17 people picked a shard and took it up, except for one, a man named \"%s.\" ".formatted(PatchouliTextFormat.Thing("Hoid")) + + "You may even see Hoid on your travels."); + pages.add(secondPage); + + investitureBasics.pages = pages.toArray(BookStuff.Page[]::new); + pages.clear(); + entries.add(investitureBasics); + } + { //Single activators entry + BookStuff.Entry activatingPowersEntry = new BookStuff.Entry("activating_powers", basicsCategory, "cosmere:steel_ingot"); + activatingPowersEntry.priority = true; + + BookStuff.Page firstPage = new BookStuff.TextPage(); + firstPage.setTitle("Activating Powers"); + firstPage.setText("The first way I will teach you to activate powers is with the basic keybinds. This is not the most effective way of doing it, but it is straightforward.\n" + + "First, locate the icon for your current main power in the upper left corner. By pressing (" + PatchouliTextFormat.Keybind(Constants.Strings.KEY_MANIFESTATION_NEXT) + ") and (" + PatchouliTextFormat.Keybind(Constants.Strings.KEY_MANIFESTATION_PREVIOUS) + + ") you can change which power is your current main. From there, press (" + PatchouliTextFormat.Keybind(Constants.Strings.KEY_MANIFESTATION_MODE_INCREASE) + ") and (" + PatchouliTextFormat.Keybind(Constants.Strings.KEY_MANIFESTATION_MODE_DECREASE) + + ") to change the mode for that power by plus or minus one respectively. If you are holding (" + PatchouliTextFormat.Keybind("Shift") + ") while you are changing the mode this way, it will change by plus or minus five levels, " + + "If instead you are holding (" + PatchouliTextFormat.Keybind("control") + "()) while you are changing the mode this way, it will change by plus or minus ten levels or to the maximum, whichever is lower. " + + "Changing your current main power will not stop your other powers from running in the background."); + pages.add(firstPage); + + BookStuff.Page firstAndHalfPage = new BookStuff.TextPage(); + firstAndHalfPage.setText("If you are holding (" + PatchouliTextFormat.Keybind("Shift") + ") while you are changing the mode this way, it will change by plus or minus five levels, " + + "If instead you are holding (" + PatchouliTextFormat.Keybind("Control") + "("+ PatchouliTextFormat.Keybind("Command") + " on Apple)) while you are changing the mode this way, it will change by plus or minus ten levels or " + + "to the maximum, whichever is lower. In addition if you crouch with an empty hand, you can change your power mode by scrolling." + + "Changing your current main power will not stop your other powers from running in the background."); + + BookStuff.Page secondPage = new BookStuff.TextPage(); + secondPage.setTitle("The Menu"); + secondPage.setText("The most accessible way to activate powers is from the menu. To access the menu, press and hold (" + PatchouliTextFormat.Keybind(Constants.Strings.KEY_MANIFESTATION_MENU) + + "). From here, left clicking on a power will increase its mode by one, and right clicking will decrease it. Releasing (" + PatchouliTextFormat.Keybind(Constants.Strings.KEY_MANIFESTATION_MENU) + ") will close the menu."); + pages.add(secondPage); + + BookStuff.Page thirdPage = new BookStuff.TextPage(); + thirdPage.setTitle("Dedicated Keybinds"); + thirdPage.setText("The fastest way to activate one power quickly is with its dedicated keybind. These are not set by default, but you can change your favorites to activate this way. " + + "When this keybind is used, it will set the mode of your power to +1, unless the power is feruchemical in nature, in which case it will tap at level 5 instead. " + + "However, in all cases, if the power is already active, no matter the mode, pressing the keybind will turn the power off instead. Using a dedicated keybind will also set your active main power to the associated power as well"); + pages.add(thirdPage); + + + BookStuff.Page fourthPage = new BookStuff.TextPage(); + fourthPage.setTitle("Power Mode Save Keybind"); + fourthPage.setText("(Note: this is a recent and complicated feature. It may have bugs. Please report all bugs to the bug tracker.)$(br)By far the most complicated way to activate your powers is with the Power Mode Save States. You have access to nine different ones. " + + "To save a new save state, activate all desired powers at the desired levels through any of the means previously described, and ensure all others are turned off. Then hold (" + PatchouliTextFormat.Keybind(Constants.Strings.KEY_SAVE_ACTIVATOR) + ") and press one of your hotbar slots.$(br2)" + + "All active powers are now saved to that key."); + pages.add(fourthPage); + BookStuff.Page fifthPage = new BookStuff.TextPage(); + fifthPage.setText("To load a preexisting save state, hold (" + PatchouliTextFormat.Keybind(Constants.Strings.KEY_ACTIVATE) + ") and press the hotbar key for the desired save slot. Your powers should now be activated. If they are not, press it again. " + + "(This is a known bug.) You can also toggle a save state off by pressing the keybind again. Powers that were not on when the save state was saved will not be affected by loading the save state."); + pages.add(fifthPage); + + BookStuff.Page lastPage = new BookStuff.TextPage(); + lastPage.setTitle("Deactivating Powers"); + lastPage.setText("To quickly deactivate all powers you have active, press (" + PatchouliTextFormat.Keybind(Constants.Strings.KEY_DEACTIVATE_ALL_POWERS) + ")."); + pages.add(lastPage); + + activatingPowersEntry.pages = pages.toArray(BookStuff.Page[]::new); + pages.clear(); + entries.add(activatingPowersEntry); + } + + } +} diff --git a/src/datagen/main/java/leaf/cosmere/patchouli/PatchouliGen.java b/src/datagen/main/java/leaf/cosmere/patchouli/PatchouliGen.java new file mode 100644 index 000000000..43a29ddba --- /dev/null +++ b/src/datagen/main/java/leaf/cosmere/patchouli/PatchouliGen.java @@ -0,0 +1,52 @@ +/* + * File updated ~ 9 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.patchouli; + +import leaf.cosmere.api.CosmereAPI; +import leaf.cosmere.patchouli.data.PatchouliProvider; +import net.minecraft.data.PackOutput; + +// +// In-Game Documentation generator +// +public class PatchouliGen extends PatchouliProvider +{ + public PatchouliGen(PackOutput packOutput) + { + super(packOutput, CosmereAPI.COSMERE_MODID); + } + + + @Override + protected void collectInfoForBook() + { + //dynamically figure out all the things we wanna generate categories/entries for? + //------------------------------------------// + // Categories // + //------------------------------------------// + // - Basics // + // - Curios // + // - Machines ? // + // - Challenges ? // + // - // + //------------------------------------------// + + PatchouliBasics.collect(this.categories, this.entries); + + + } + + /** + * Gets a name for this provider, to use in logging. + */ + public String getName() + { + return "Cosmere PatchouliGeneration"; + } + +} + + + diff --git a/src/datagen/main/java/leaf/cosmere/patchouli/data/BookStuff.java b/src/datagen/main/java/leaf/cosmere/patchouli/data/BookStuff.java new file mode 100644 index 000000000..07d7a5326 --- /dev/null +++ b/src/datagen/main/java/leaf/cosmere/patchouli/data/BookStuff.java @@ -0,0 +1,545 @@ +/* + * File updated ~ 11 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.patchouli.data; + +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import leaf.cosmere.api.text.StringHelper; + +import java.util.Map; + +//https://vazkiimods.github.io/Patchouli/docs/patchouli-basics/page-types +public class BookStuff +{ + public static class Category + { + public String name; + public String description; + public String icon; + public String parent = ""; + public String flag = ""; + public Integer sortnum = 0; + public boolean secret = false; + + public Category(String name, String description, String icon) + { + this.name = name.toLowerCase(); + this.description = description; + this.icon = icon; + } + + public JsonElement serialize() + { + JsonObject jsonobject = new JsonObject(); + + jsonobject.addProperty("name", StringHelper.fixCapitalisation(this.name));//Convert to people readable text + jsonobject.addProperty("description", this.description); + jsonobject.addProperty("icon", this.icon); + + if (!this.parent.isEmpty()) + { + jsonobject.addProperty("parent", this.parent); + } + if (!this.flag.isEmpty()) + { + jsonobject.addProperty("flag", this.flag); + } + jsonobject.addProperty("sortnum", this.sortnum); + jsonobject.addProperty("secret", this.secret); + + return jsonobject; + } + } + + public static class Entry + { + public String name; + public Category category; + public String icon; + + public Page[] pages; + + public String displayTitle = ""; + public String advancement = ""; + public String flag = ""; + + public boolean priority = false; + public boolean secret = false; + public boolean read_by_default = false; + public Integer sortnum = 0; + + public String turnin = ""; // advancement needed to mark entry complete + + //itemstack strings -> page 0-index num + public Map extra_recipe_mappings; + + public Entry() + { + } + + public Entry(String name, Category category) + { + this(name, category, category.icon); + } + + public Entry(String name, Category category, String icon) + { + this.name = name.toLowerCase(); + this.category = category; + this.icon = icon; + } + + public JsonElement serialize(String modid) + { + JsonObject jsonobject = new JsonObject(); + + //enforced + final String displayTitleName = this.displayTitle.isEmpty() ? this.name : this.displayTitle; + jsonobject.addProperty("name", StringHelper.fixCapitalisation(displayTitleName));//ensure people readable text + jsonobject.addProperty("category", modid + ":" + this.category.name); + jsonobject.addProperty("icon", this.icon); + + JsonArray jsonarray = new JsonArray(); + for (Page page : this.pages) + { + jsonarray.add(page.serialize()); + } + jsonobject.add("pages", jsonarray); + + if (advancement != null && !this.advancement.isEmpty()) + { + jsonobject.addProperty("advancement", this.advancement); + } + + if (!this.flag.isEmpty()) + { + jsonobject.addProperty("advancement", this.flag); + } + + jsonobject.addProperty("priority", this.priority); + jsonobject.addProperty("secret", this.secret); + jsonobject.addProperty("read_by_default", this.read_by_default); + + jsonobject.addProperty("sortnum", this.sortnum); + + if (!this.turnin.isEmpty()) + { + jsonobject.addProperty("turnin", this.turnin); + } + + if (extra_recipe_mappings != null && !extra_recipe_mappings.isEmpty()) + { + JsonObject extraRecipeMappingsArray = new JsonObject(); + for (Map.Entry entry : this.extra_recipe_mappings.entrySet()) + { + extraRecipeMappingsArray.addProperty(entry.getKey(), entry.getValue()); + } + jsonobject.add("extra_recipe_mappings", extraRecipeMappingsArray); + } + + + return jsonobject; + } + + public Entry setDisplayTitle(String s) + { + displayTitle = s; + return this; + } + } + + public abstract static class Page + { + public String type; + public String text; + public String title = ""; + public String advancement = ""; + public String flag = ""; + public String anchor = ""; + public String[] recipes = null; + + public Page(String type) + { + this.type = type; + this.text = ""; + } + + public Page(String type, String text) + { + this.type = type; + this.text = text; + } + + public Page(String type, String text, String title) + { + this.type = type; + this.text = text; + this.title = title; + } + + public Page(String type, String text, String[] recipes) + { + this.type = type; + this.text = text; + this.recipes = recipes; + } + + public JsonElement serialize() + { + JsonObject jsonObject = new JsonObject(); + + addElement(jsonObject, "type", this.type); + addElement(jsonObject, "text", this.text); + addElement(jsonObject, "advancement", this.advancement); + addElement(jsonObject, "title", this.title); + + if (recipes != null && recipes.length > 0) + { + JsonArray jsonArray = new JsonArray(); + for (String recipe : this.recipes) + { + jsonArray.add(recipe); + } + jsonObject.add("pages", jsonArray); + } + + return jsonObject; + } + + protected void addElement(JsonObject jsonObject, String key, String value) + { + if (!value.isEmpty()) + { + jsonObject.addProperty(key, value); + } + } + + public Page setTitle(String title) + { + this.title = title; + return this; + } + + public Page setText(String s) + { + text = s; + return this; + } + } + + public static class CraftingPage extends Page + { + public String recipe; + public String recipe2 = ""; + + public CraftingPage(String recipe) + { + super("patchouli:crafting", ""); + this.recipe = recipe; + } + + public CraftingPage(String text, String recipe) + { + super("patchouli:crafting", text); + this.recipe = recipe; + } + + public CraftingPage(String text, String recipe, String recipe2) + { + super("patchouli:crafting", text); + this.recipe = recipe; + this.recipe2 = recipe2; + } + + + @Override + public JsonElement serialize() + { + JsonObject jsonObject = (JsonObject) super.serialize(); + + jsonObject.addProperty("recipe", this.recipe); + if (!recipe2.equals("")) + { + //stop the logger complaining about invalid recipes oops + jsonObject.addProperty("recipe2", this.recipe2); + } + + + return jsonObject; + } + } + + public static class EmptyPage extends Page + { + public boolean draw_filler = true; + + public EmptyPage() + { + super("empty", ""); + } + + public EmptyPage(boolean draw_filler) + { + super("empty", ""); + this.draw_filler = draw_filler; + } + + @Override + public JsonElement serialize() + { + JsonObject jsonObject = (JsonObject) super.serialize(); + + jsonObject.addProperty("draw_filler", draw_filler); + + return jsonObject; + } + } + + public static class EntityPage extends Page + { + public String name = ""; + public String entity = ""; + public float scale = 1; + public float offset = 0; + public boolean rotate = false; + public float default_rotation = -45; + + public EntityPage(String entity) + { + super("entity", ""); + this.entity = entity; + } + + public EntityPage(String text, String entity) + { + super("entity", text); + this.entity = entity; + } + + public EntityPage(String text, String name, String entity) + { + super("entity", text); + this.name = name; + this.entity = entity; + } + + @Override + public JsonElement serialize() + { + JsonObject jsonObject = (JsonObject) super.serialize(); + + addElement(jsonObject, "name", this.name); + addElement(jsonObject, "entity", this.entity); + jsonObject.addProperty("scale", this.scale); + jsonObject.addProperty("offset", this.offset); + jsonObject.addProperty("rotate", this.rotate); + jsonObject.addProperty("default_rotation", this.default_rotation); + + return jsonObject; + } + } + + public static class ImagePage extends Page + { + public String[] images; + public boolean border = false; + + public ImagePage(String text, String[] images) + { + super("image", text); + this.images = images; + } + + public ImagePage(String text, String title, String[] images) + { + super("image", text, title); + this.images = images; + } + + public ImagePage(String text, String title, boolean border, String[] images) + { + super("image", text, title); + this.images = images; + this.border = border; + } + + @Override + public JsonElement serialize() + { + JsonObject jsonObject = (JsonObject) super.serialize(); + + jsonObject.addProperty("border", this.border); + + if (images != null && images.length > 0) + { + JsonArray jsonarray = new JsonArray(); + for (String image : this.images) + { + jsonarray.add(image); + } + jsonObject.add("images", jsonarray); + } + + return jsonObject; + } + } + + public static class QuestPage extends Page + { + public String trigger; + + public QuestPage(String text, String trigger) + { + super("quest", text); + this.trigger = trigger; + } + + public QuestPage(String text, String title, String trigger) + { + super("quest", text, title); + this.trigger = trigger; + } + + @Override + public JsonElement serialize() + { + JsonObject jsonObject = (JsonObject) super.serialize(); + + addElement(jsonObject, "trigger", this.trigger); + + return jsonObject; + } + } + + public static class RelationsPage extends Page + { + public String[] entries; + + public RelationsPage(String text, String... entries) + { + super("relations", text); + this.entries = entries; + } + + public RelationsPage(String text, String entry) + { + super("relations", text); + this.entries = new String[]{entry}; + } + + public RelationsPage(String text, String title, String[] entries) + { + super("relations", text, title); + this.entries = entries; + } + + @Override + public JsonElement serialize() + { + JsonObject jsonObject = (JsonObject) super.serialize(); + + if (entries != null && entries.length > 0) + { + JsonArray jsonarray = new JsonArray(); + for (String entry : this.entries) + { + jsonarray.add(entry); + } + jsonObject.add("entries", jsonarray); + } + + return jsonObject; + } + + + } + + public static class SmeltingPage extends Page + { + public String recipe; + public String recipe2 = ""; + + public SmeltingPage(String recipe) + { + super("smelting", ""); + this.recipe = recipe; + } + + public SmeltingPage(String text, String recipe) + { + super("smelting", text); + this.recipe = recipe; + } + + public SmeltingPage(String text, String recipe, String recipe2) + { + super("smelting", text); + this.recipe = recipe; + this.recipe2 = recipe2; + } + + @Override + public JsonElement serialize() + { + JsonObject jsonObject = (JsonObject) super.serialize(); + + jsonObject.addProperty("recipe", this.recipe); + jsonObject.addProperty("recipe2", this.recipe2); + + + return jsonObject; + } + } + + public static class SpotlightPage extends Page + { + public String item; + public boolean link_recipe = false; + + public SpotlightPage(String text, String item) + { + super("spotlight", text); + this.item = item; + } + + public SpotlightPage(String text, String title, String item) + { + super("spotlight", text, title); + this.item = item; + } + + @Override + public JsonElement serialize() + { + JsonObject jsonObject = (JsonObject) super.serialize(); + + jsonObject.addProperty("item", this.item); + jsonObject.addProperty("link_recipe", this.link_recipe); + + return jsonObject; + } + } + + public static class TextPage extends Page + { + public TextPage() + { + super("text"); + } + + public TextPage(String text) + { + super("text", text); + } + + public TextPage(String text, String title) + { + super("text", text, title); + } + } +} + + diff --git a/src/datagen/main/java/leaf/cosmere/patchouli/data/PatchouliProvider.java b/src/datagen/main/java/leaf/cosmere/patchouli/data/PatchouliProvider.java new file mode 100644 index 000000000..b2facde12 --- /dev/null +++ b/src/datagen/main/java/leaf/cosmere/patchouli/data/PatchouliProvider.java @@ -0,0 +1,126 @@ +/* + * File updated ~ 9 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.patchouli.data; + +import com.google.common.collect.Sets; +import leaf.cosmere.api.text.StringHelper; +import net.minecraft.data.CachedOutput; +import net.minecraft.data.DataProvider; +import net.minecraft.data.PackOutput; +import org.jetbrains.annotations.NotNull; + +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.List; +import java.util.Set; +import java.util.concurrent.CompletableFuture; +import java.util.function.Consumer; + +// +// In-Game Documentation generator +// +public abstract class PatchouliProvider implements DataProvider +{ + public static final String GUIDE_NAME = "guide"; + private final PackOutput packOutput; + private final String modid; + + + protected final List categories = new ArrayList<>(); + protected final List entries = new ArrayList<>(); + + public PatchouliProvider(PackOutput packOutput, String modid) + { + this.packOutput = packOutput; + this.modid = modid; + } + + /** + * Performs this provider's action. + * + * @return + */ + public CompletableFuture run(@NotNull CachedOutput cache) + { + List> futures = new ArrayList<>(); + + Path path = this.packOutput.getOutputFolder(); + Set entryIDs = Sets.newHashSet(); + + Consumer entryConsumer = getEntryConsumer(cache, path, entryIDs, futures); + Consumer categoryConsumer = getCategoryConsumer(cache, path, entryIDs, futures); + + //adds to our categories and entries fields. + collectInfoForBook(); + + for (BookStuff.Category categoryToConsume : this.categories) + { + categoryConsumer.accept(categoryToConsume); + } + + for (BookStuff.Entry entryToConsume : this.entries) + { + entryConsumer.accept(entryToConsume); + } + + return CompletableFuture.allOf(futures.toArray(CompletableFuture[]::new)); + } + + protected abstract void collectInfoForBook(); + + private Consumer getCategoryConsumer(@NotNull CachedOutput cache, Path path, Set categoryIDs, List> futures) + { + return category -> + { + if (!categoryIDs.add(category.name)) + { + throw new IllegalStateException("Duplicate page " + category.name); + } + else + { + Path path1 = getCategoryPath(path, category); + futures.add(DataProvider.saveStable(cache, category.serialize(), path1)); + } + }; + } + + private Consumer getEntryConsumer(@NotNull CachedOutput cache, Path path, Set entryIDs, List> futures) + { + return entry -> + { + if (!entryIDs.add(entry.name)) + { + throw new IllegalStateException("Duplicate page " + entry.name); + } + else + { + Path path1 = getEntryPath(path, entry); + futures.add(DataProvider.saveStable(cache, entry.serialize(modid), path1)); + } + }; + } + + private Path getCategoryPath(Path pathIn, BookStuff.Category category) + { + return pathIn.resolve( + String.format( + "assets/%s/patchouli_books/%s/en_us/categories/%s.json", + modid, + GUIDE_NAME, + StringHelper.fixPath(category.name))); + } + + private Path getEntryPath(Path pathIn, BookStuff.Entry entry) + { + return pathIn.resolve( + String.format( + "assets/%s/patchouli_books/%s/en_us/entries/%s/%s.json", + modid, + GUIDE_NAME, + StringHelper.fixPath(entry.category.name), + StringHelper.fixPath(entry.name))); + } + +} diff --git a/src/datagen/main/java/leaf/cosmere/patchouli/data/PatchouliTextFormat.java b/src/datagen/main/java/leaf/cosmere/patchouli/data/PatchouliTextFormat.java new file mode 100644 index 000000000..bfe78f89f --- /dev/null +++ b/src/datagen/main/java/leaf/cosmere/patchouli/data/PatchouliTextFormat.java @@ -0,0 +1,73 @@ +/* + * File updated ~ 2 - 3 - 2024 ~ Leaf + */ + +package leaf.cosmere.patchouli.data; + +import java.util.Locale; + +//https://vazkiimods.github.io/Patchouli/docs/patchouli-basics/text-formatting/ +public class PatchouliTextFormat +{ + private static final StringBuilder s_stringBuilder = new StringBuilder(); + + public static String Item(String input) + { + return format(input, "$(item)"); + } + + public static String Thing(String input) + { + return format(input, "$(thing)"); + } + + public static String Obfuscate(String input) + { + return format(input, "$(obf)"); + } + + public static String Italics(String input) + { + return format(input, "$(italics)"); + } + + public static String Bold(String input) + { + return format(input, "$(bold)"); + } + + public static String Strikethrough(String input) + { + return format(input, "$(strike)"); + } + + public static String Keybind(String input) + { + return format("", "$(k:%s)".formatted(input)); + } + + public static String LinkEntry(String input, String entryToLinkTo) + { + //example + //$(l:cosmere:allomancy/allomantic_aluminum)aluminum$() + return format(input, "$(l:%s)".formatted(entryToLinkTo.toLowerCase(Locale.ROOT))); + } + + + private static String format(String input, String formatCode) + { + s_stringBuilder.append(formatCode); + s_stringBuilder.append(input); + if (!input.contains("$()")) + { + //Only need to clear once + s_stringBuilder.append("$()"); + } + + final String s = s_stringBuilder.toString(); + s_stringBuilder.setLength(0); + return s; + } + + +} diff --git a/src/datagen/main/java/leaf/cosmere/tag/BaseTagProvider.java b/src/datagen/main/java/leaf/cosmere/tag/BaseTagProvider.java new file mode 100644 index 000000000..e3ccd17a4 --- /dev/null +++ b/src/datagen/main/java/leaf/cosmere/tag/BaseTagProvider.java @@ -0,0 +1,260 @@ +/* + * File updated ~ 7 - 8 - 2024 ~ Leaf + */ + +package leaf.cosmere.tag; + +import it.unimi.dsi.fastutil.objects.Object2ObjectLinkedOpenHashMap; +import it.unimi.dsi.fastutil.objects.ReferenceOpenHashSet; +import leaf.cosmere.api.helpers.RegistryHelper; +import leaf.cosmere.api.providers.IBlockProvider; +import leaf.cosmere.api.providers.IEntityTypeProvider; +import leaf.cosmere.common.registration.impl.GameEventRegistryObject; +import net.minecraft.core.HolderLookup; +import net.minecraft.core.Registry; +import net.minecraft.core.registries.Registries; +import net.minecraft.data.CachedOutput; +import net.minecraft.data.DataProvider; +import net.minecraft.data.PackOutput; +import net.minecraft.data.tags.TagsProvider; +import net.minecraft.resources.ResourceKey; +import net.minecraft.tags.TagBuilder; +import net.minecraft.tags.TagKey; +import net.minecraft.world.damagesource.DamageType; +import net.minecraft.world.effect.MobEffect; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.item.Item; +import net.minecraft.world.level.ItemLike; +import net.minecraft.world.level.biome.Biome; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.gameevent.GameEvent; +import net.minecraft.world.level.material.Fluid; +import net.minecraftforge.common.data.ExistingFileHelper; +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.IForgeRegistry; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.*; +import java.util.concurrent.CompletableFuture; +import java.util.function.Function; + +//Based off of Mekanism's implementation of BaseTagProvider, obtained 1st June, 2023 +//This lets us make data jsons much easier, so todo is to move to this implementation for other tags and things +public abstract class BaseTagProvider implements DataProvider +{ + private final Map>, Map, TagBuilder>> supportedTagTypes = new Object2ObjectLinkedOpenHashMap<>(); + private final Set knownHarvestRequirements = new ReferenceOpenHashSet<>(); + private final CompletableFuture lookupProvider; + private final ExistingFileHelper existingFileHelper; + private final PackOutput output; + private final String modid; + + protected BaseTagProvider(PackOutput output, CompletableFuture lookupProvider, String modid, @Nullable ExistingFileHelper existingFileHelper) + { + this.output = output; + this.modid = modid; + this.lookupProvider = lookupProvider; + this.existingFileHelper = existingFileHelper; + } + + @NotNull + @Override + public String getName() + { + return "Tags: " + modid; + } + + protected abstract void registerTags(HolderLookup.Provider registries); + + protected List getAllBlocks() + { + return Collections.emptyList(); + } + + protected void hasHarvestData(Block block) + { + knownHarvestRequirements.add(block); + } + + @NotNull + @Override + public CompletableFuture run(@NotNull CachedOutput cache) + { + return this.lookupProvider.thenApply(registries -> + { + supportedTagTypes.values().forEach(Map::clear); + registerTags(registries); + return registries; + }).thenCompose(registries -> + { + for (IBlockProvider blockProvider : getAllBlocks()) + { + Block block = blockProvider.getBlock(); + if (block.defaultBlockState().requiresCorrectToolForDrops() && !knownHarvestRequirements.contains(block)) + { + throw new IllegalStateException("Missing harvest tool type for block '" + RegistryHelper.getName(block) + "' that requires the correct tool for drops."); + } + } + List> futures = new ArrayList<>(); + supportedTagTypes.forEach((registry, tagTypeMap) -> + { + if (!tagTypeMap.isEmpty()) + { + //Create a dummy provider and pass all our collected data through to it + futures.add(new TagsProvider(output, registry, lookupProvider, modid, existingFileHelper) + { + @Override + protected void addTags(@NotNull HolderLookup.Provider lookupProvider) + { + //Add each tag builder to the wrapped provider's builder + tagTypeMap.forEach((tag, tagBuilder) -> builders.put(tag.location(), tagBuilder)); + } + }.run(cache)); + } + }); + return CompletableFuture.allOf(futures.toArray(CompletableFuture[]::new)); + }); + } + + private Map, TagBuilder> getTagTypeMap(ResourceKey> registry) + { + return supportedTagTypes.computeIfAbsent(registry, type -> new Object2ObjectLinkedOpenHashMap<>()); + } + + private TagBuilder getTagBuilder(ResourceKey> registry, TagKey tag) + { + return getTagTypeMap(registry).computeIfAbsent(tag, ignored -> TagBuilder.create()); + } + + protected CosmereTagBuilder getBuilder(ResourceKey> registry, TagKey tag) + { + return new CosmereTagBuilder<>(getTagBuilder(registry, tag), modid); + } + + protected IntrinsicCosmereTagBuilder getBuilder(ResourceKey> registry, Function> keyExtractor, TagKey tag) + { + return new IntrinsicCosmereTagBuilder<>(keyExtractor, getTagBuilder(registry, tag), modid); + } + + protected IntrinsicCosmereTagBuilder getBuilder(IForgeRegistry registry, TagKey tag) + { + return new IntrinsicCosmereTagBuilder<>(element -> registry.getResourceKey(element).orElseThrow(), getTagBuilder(registry.getRegistryKey(), tag), modid); + } + + protected IntrinsicCosmereTagBuilder getItemBuilder(TagKey tag) + { + return getBuilder(ForgeRegistries.ITEMS, tag); + } + + protected IntrinsicCosmereTagBuilder getBlockBuilder(TagKey tag) + { + return getBuilder(ForgeRegistries.BLOCKS, tag); + } + + protected IntrinsicCosmereTagBuilder> getEntityTypeBuilder(TagKey> tag) + { + return getBuilder(ForgeRegistries.ENTITY_TYPES, tag); + } + + protected IntrinsicCosmereTagBuilder getFluidBuilder(TagKey tag) + { + return getBuilder(ForgeRegistries.FLUIDS, tag); + } + + protected IntrinsicCosmereTagBuilder> getTileEntityTypeBuilder(TagKey> tag) + { + return getBuilder(ForgeRegistries.BLOCK_ENTITY_TYPES, tag); + } + + protected IntrinsicCosmereTagBuilder getGameEventBuilder(TagKey tag) + { + return getBuilder(Registries.GAME_EVENT, gameEvent -> gameEvent.builtInRegistryHolder().key(), tag); + } + + protected CosmereTagBuilder getDamageTypeBuilder(TagKey tag) + { + return getBuilder(Registries.DAMAGE_TYPE, tag); + } + + protected CosmereTagBuilder getBiomeBuilder(TagKey tag) + { + return getBuilder(Registries.BIOME, tag); + } + + protected IntrinsicCosmereTagBuilder getMobEffectBuilder(TagKey tag) + { + return getBuilder(ForgeRegistries.MOB_EFFECTS, tag); + } + + protected void addToTag(TagKey tag, ItemLike... itemProviders) + { + getItemBuilder(tag).addTyped(ItemLike::asItem, itemProviders); + } + + protected void addToTag(TagKey tag, IBlockProvider... blockProviders) + { + getBlockBuilder(tag).addTyped(IBlockProvider::getBlock, blockProviders); + } + + @SafeVarargs + protected final void addToTag(TagKey blockTag, Map... blockProviders) + { + IntrinsicCosmereTagBuilder tagBuilder = getBlockBuilder(blockTag); + for (Map blockProvider : blockProviders) + { + for (IBlockProvider value : blockProvider.values()) + { + tagBuilder.add(value.getBlock()); + } + } + } + + protected void addToHarvestTag(TagKey tag, IBlockProvider... blockProviders) + { + IntrinsicCosmereTagBuilder tagBuilder = getBlockBuilder(tag); + for (IBlockProvider blockProvider : blockProviders) + { + Block block = blockProvider.getBlock(); + tagBuilder.add(block); + hasHarvestData(block); + } + } + + @SafeVarargs + protected final void addToHarvestTag(TagKey blockTag, Map... blockProviders) + { + IntrinsicCosmereTagBuilder tagBuilder = getBlockBuilder(blockTag); + for (Map blockProvider : blockProviders) + { + for (IBlockProvider value : blockProvider.values()) + { + Block block = value.getBlock(); + tagBuilder.add(block); + hasHarvestData(block); + } + } + } + + protected void addToTags(TagKey itemTag, TagKey blockTag, IBlockProvider... blockProviders) + { + IntrinsicCosmereTagBuilder itemTagBuilder = getItemBuilder(itemTag); + IntrinsicCosmereTagBuilder blockTagBuilder = getBlockBuilder(blockTag); + for (IBlockProvider blockProvider : blockProviders) + { + itemTagBuilder.add(blockProvider.asItem()); + blockTagBuilder.add(blockProvider.getBlock()); + } + } + + protected void addToTag(TagKey tag, GameEventRegistryObject... gameEventROs) + { + getGameEventBuilder(tag).addTyped(GameEventRegistryObject::get, gameEventROs); + } + + protected void addToTag(TagKey> tag, IEntityTypeProvider... entityTypeProviders) + { + getEntityTypeBuilder(tag).addTyped(IEntityTypeProvider::getEntityType, entityTypeProviders); + } +} \ No newline at end of file diff --git a/src/datagen/main/java/leaf/cosmere/tag/CosmereTagBuilder.java b/src/datagen/main/java/leaf/cosmere/tag/CosmereTagBuilder.java new file mode 100644 index 000000000..9bb3c692d --- /dev/null +++ b/src/datagen/main/java/leaf/cosmere/tag/CosmereTagBuilder.java @@ -0,0 +1,134 @@ +/* + * File updated ~ 7 - 8 - 2024 ~ Leaf + */ + +package leaf.cosmere.tag; + +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.TagBuilder; +import net.minecraft.tags.TagEntry; +import net.minecraft.tags.TagKey; + +import java.util.function.Consumer; +import java.util.function.Function; + +//Based off of TagsProvider.TagAppender but with a few shortcuts for forge registry entries and also a few more helpers and addition of SafeVarargs annotations +public class CosmereTagBuilder> +{ + + protected final TagBuilder builder; + protected final String modID; + + public CosmereTagBuilder(TagBuilder builder, String modID) + { + this.builder = builder; + this.modID = modID; + } + + @SuppressWarnings("unchecked") + private BUILDER self() + { + return (BUILDER) this; + } + + @SafeVarargs + public final BUILDER add(TagKey... tags) + { + return apply(builder::addTag, TagKey::location, tags); + } + + public BUILDER add(TagEntry tag) + { + builder.add(tag); + return self(); + } + + @SafeVarargs + public final BUILDER add(ResourceKey... keys) + { + return add(ResourceKey::location, keys); + } + + @SafeVarargs + public final BUILDER add(Function locationGetter, T... elements) + { + return apply(builder::addElement, locationGetter, elements); + } + + public BUILDER replace() + { + return replace(true); + } + + public BUILDER replace(boolean value) + { + builder.replace(value); + return self(); + } + + public BUILDER addOptional(ResourceLocation... locations) + { + return addOptional(Function.identity(), locations); + } + + @SafeVarargs + public final BUILDER addOptional(Function locationGetter, T... elements) + { + return add(TagEntry::optionalElement, locationGetter, elements); + } + + @SafeVarargs + public final BUILDER addOptionalTag(TagKey... tags) + { + return addOptionalTag(TagKey::location, tags); + } + + public BUILDER addOptionalTag(ResourceLocation... locations) + { + return addOptionalTag(Function.identity(), locations); + } + + @SafeVarargs + public final BUILDER addOptionalTag(Function locationGetter, T... elements) + { + return add(TagEntry::optionalTag, locationGetter, elements); + } + + @SafeVarargs + private BUILDER add(Function entryCreator, Function locationGetter, T... elements) + { + return apply(rl -> add(entryCreator.apply(rl)), locationGetter, elements); + } + + public BUILDER remove(ResourceLocation... locations) + { + return remove(Function.identity(), locations); + } + + @SafeVarargs + public final BUILDER remove(Function locationGetter, T... elements) + { + return apply(rl -> builder.removeElement(rl, modID), locationGetter, elements); + } + + @SafeVarargs + public final BUILDER remove(TagKey... tags) + { + for (TagKey tag : tags) + { + builder.removeTag(tag.location(), modID); + } + return self(); + } + + @SafeVarargs + protected final BUILDER apply(Consumer consumer, Function locationGetter, T... elements) + { + for (T element : elements) + { + consumer.accept(locationGetter.apply(element)); + } + return self(); + } +} \ No newline at end of file diff --git a/src/datagen/main/java/leaf/cosmere/tag/CosmereTagProvider.java b/src/datagen/main/java/leaf/cosmere/tag/CosmereTagProvider.java new file mode 100644 index 000000000..e0893184c --- /dev/null +++ b/src/datagen/main/java/leaf/cosmere/tag/CosmereTagProvider.java @@ -0,0 +1,357 @@ +/* + * File updated ~ 30 - 4 - 2025 ~ Leaf + */ + +package leaf.cosmere.tag; + +import leaf.cosmere.api.CosmereTags; +import leaf.cosmere.api.EnumUtils; +import leaf.cosmere.api.Metals; +import leaf.cosmere.api.providers.IBlockProvider; +import leaf.cosmere.common.Cosmere; +import leaf.cosmere.common.blocks.MetalBlock; +import leaf.cosmere.common.blocks.MetalOreBlock; +import leaf.cosmere.common.items.GodMetalAlloyNuggetItem; +import leaf.cosmere.common.items.MetalIngotItem; +import leaf.cosmere.common.registration.impl.BlockRegistryObject; +import leaf.cosmere.common.registration.impl.ItemRegistryObject; +import leaf.cosmere.common.registry.BlocksRegistry; +import leaf.cosmere.common.registry.GameEventRegistry; +import leaf.cosmere.common.registry.ItemsRegistry; +import leaf.cosmere.common.resource.ore.OreBlockType; +import leaf.cosmere.common.resource.ore.OreType; +import leaf.cosmere.common.util.CosmereEnumUtils; +import net.minecraft.core.HolderLookup; +import net.minecraft.data.PackOutput; +import net.minecraft.tags.BiomeTags; +import net.minecraft.tags.BlockTags; +import net.minecraft.tags.GameEventTags; +import net.minecraft.tags.TagKey; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.item.BlockItem; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.Items; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraftforge.common.Tags; +import net.minecraftforge.common.data.ExistingFileHelper; +import org.jetbrains.annotations.Nullable; + +import java.util.List; +import java.util.concurrent.CompletableFuture; + +public class CosmereTagProvider extends BaseTagProvider +{ + + public CosmereTagProvider(PackOutput packOutput, CompletableFuture lookupProvider, @Nullable ExistingFileHelper existingFileHelper) + { + super(packOutput, lookupProvider, Cosmere.MODID, existingFileHelper); + } + + @Override + protected List getAllBlocks() + { + return BlocksRegistry.BLOCKS.getAllBlocks(); + } + + @Override + protected void registerTags(HolderLookup.Provider registries) + { + addItems(); + addBlocks(); + addStorageBlocks(); + addEntityTypes(); + addGameEvents(); + addBiomes(); + + addContainsMetal(); + } + + private void addItems() + { + for (Metals.MetalType metalType : EnumUtils.METAL_TYPES) + { + + //if (metalType.hasMaterialItem()) + { + // copper only needs nugget, don't tag ingot + //if (metalType != Metals.MetalType.COPPER) + { + final ItemRegistryObject ingotRegObj = ItemsRegistry.METAL_INGOTS.get(metalType); + if (ingotRegObj != null) + { + MetalIngotItem ingotItem = ingotRegObj.asItem(); + + //don't need to tell the tag what each individual item is if they're tagged correctly + //add(Tags.Items.INGOTS, ingotItem); + + // tell our ingots what their tags are. + final TagKey metalIngotTag = metalType.getMetalIngotTag(); + addToTag(metalIngotTag, ingotItem); + + //tell the ingots that our ingot tags are part of them + getItemBuilder(Tags.Items.INGOTS).add(metalIngotTag); + } + } + + //tell the nuggets that our nugget tags are part of them + final TagKey metalNuggetTag = metalType.getMetalNuggetTag(); + getItemBuilder(Tags.Items.NUGGETS).add(metalNuggetTag); + + ItemRegistryObject nugRegObj = ItemsRegistry.METAL_NUGGETS.get(metalType); + if (nugRegObj == null) nugRegObj = ItemsRegistry.GOD_METAL_NUGGETS.get(metalType); + + if (nugRegObj != null) + {// tell the Nugget that our Nuggets are related + Item nuggetItem = nugRegObj.asItem(); + + //don't need to tell the tag what each individual item is if they're tagged correctly + //add(Tags.Items.NUGGETS, nuggetItem); + + // tell our nuggets what their tags are. + addToTag(metalNuggetTag, nuggetItem); + } + + // Add the metal alloy nugget to the nugget tags + if(!metalType.isGodMetal() && metalType.hasAssociatedManifestation()) + { + for(Metals.MetalType godMetalType : new Metals.MetalType[] { Metals.MetalType.LERASIUM, Metals.MetalType.LERASATIUM}) + { + final TagKey godMetalAlloyNuggetTag = godMetalType.getGodMetalAlloyNuggetTag(metalType); + getItemBuilder(Tags.Items.NUGGETS).add(godMetalAlloyNuggetTag); + + ItemRegistryObject alloyNugRegObj = ItemsRegistry.GOD_METAL_ALLOY_NUGGETS.get(godMetalType).get(metalType); + if (alloyNugRegObj != null) + { + Item nuggetItem = alloyNugRegObj.asItem(); + addToTag(godMetalAlloyNuggetTag, nuggetItem); + } + } + } + } + + if (metalType.hasOre()) + { + Item item = ItemsRegistry.METAL_RAW_ORE.get(metalType).asItem(); + final TagKey metalRawTag = metalType.getMetalRawTag(); + addToTag(metalRawTag, item); + } + + if (metalType.isAlloy()) + { + Item item = ItemsRegistry.METAL_RAW_BLEND.get(metalType).asItem(); + final TagKey metalBlendTag = metalType.getMetalBlendTag(); + addToTag(metalBlendTag, item); + } + } + } + + private void addBlocks() + { + addToTag(BlockTags.NEEDS_STONE_TOOL, BlocksRegistry.METALWORKING_TABLE); + addToHarvestTag(BlockTags.MINEABLE_WITH_AXE, BlocksRegistry.METALWORKING_TABLE); + + + for (Metals.MetalType metalType : EnumUtils.METAL_TYPES) + { + if (!metalType.hasMaterialItem() || metalType == Metals.MetalType.COPPER) + { + continue; + } + + //put metal type tag on block + final BlockRegistryObject metalBlock = BlocksRegistry.METAL_BLOCKS.get(metalType); + + final TagKey metalBlockTag = CosmereTags.Blocks.METAL_BLOCK_TAGS.get(metalType); + addToHarvestTag(BlockTags.MINEABLE_WITH_PICKAXE, metalBlock); + addToTag(BlockTags.NEEDS_IRON_TOOL, metalBlock); + + //put beacon tag on block + getBlockBuilder(BlockTags.BEACON_BASE_BLOCKS).add(metalBlockTag); + } + + for (OreType oreType : CosmereEnumUtils.ORE_TYPES) + { + final Metals.MetalType metalType = oreType.getMetalType(); + final OreBlockType oreBlockType = BlocksRegistry.METAL_ORE.get(oreType); + + final TagKey oreBlockTag = CosmereTags.Blocks.METAL_ORE_BLOCK_TAGS.get(metalType); + final BlockRegistryObject stone = oreBlockType.stone(); + final BlockRegistryObject deepslate = oreBlockType.deepslate(); + addToTag(oreBlockTag, stone, deepslate); + + hasHarvestData(stone.getBlock()); + hasHarvestData(deepslate.getBlock()); + + addToTag(BlockTags.NEEDS_STONE_TOOL, stone); + addToTag(BlockTags.NEEDS_IRON_TOOL, deepslate); + + addToHarvestTag(BlockTags.MINEABLE_WITH_PICKAXE, stone, deepslate); + } + } + + private void addEntityTypes() + { + //getEntityTypeBuilder(CosmereTags.EntityTypes.CONTAINS_METAL).add(EntityType.IRON_GOLEM); + } + + private void addGameEvents() + { + addToTag(GameEventTags.VIBRATIONS, GameEventRegistry.KINETIC_INVESTITURE); + addToTag(GameEventTags.WARDEN_CAN_LISTEN, GameEventRegistry.KINETIC_INVESTITURE); + } + + private void addBiomes() + { + getBiomeBuilder(CosmereTags.Biomes.SPAWN_ORES).add(BiomeTags.IS_OVERWORLD); + } + + private void addStorageBlocks() + { + final IntrinsicCosmereTagBuilder itemBuilder = getItemBuilder(Tags.Items.STORAGE_BLOCKS); + final IntrinsicCosmereTagBuilder blockBuilder = getBlockBuilder(Tags.Blocks.STORAGE_BLOCKS); + + for (Metals.MetalType metalType : EnumUtils.METAL_TYPES) + { + if (!metalType.hasMaterialItem() || metalType == Metals.MetalType.COPPER) + { + continue; + } + + final TagKey storageBlockItemTag = CosmereTags.Items.METAL_BLOCK_ITEM_TAGS.get(metalType); + final TagKey storageBlockTag = CosmereTags.Blocks.METAL_BLOCK_TAGS.get(metalType); + final BlockRegistryObject blockRegistryObject = BlocksRegistry.METAL_BLOCKS.get(metalType); + + addToTags(storageBlockItemTag, storageBlockTag, blockRegistryObject); + + itemBuilder.add(storageBlockItemTag); + blockBuilder.add(storageBlockTag); + } + } + + private void addContainsMetal() + { + final IntrinsicCosmereTagBuilder itemTagBuilder = getItemBuilder(CosmereTags.Items.CONTAINS_METAL); + final IntrinsicCosmereTagBuilder blockTagBuilder = getBlockBuilder(CosmereTags.Blocks.CONTAINS_METAL); + final IntrinsicCosmereTagBuilder> entityTagBuilder = getEntityTypeBuilder(CosmereTags.EntityTypes.CONTAINS_METAL); + + itemTagBuilder.addOptionalTag(CosmereTags.Items.METAL_SPIKE); + + //Our metals + for (Metals.MetalType metalType : EnumUtils.METAL_TYPES) + { + if (metalType == Metals.MetalType.ALUMINUM) + { + //skip aluminum + continue; + } + + //Items + final TagKey metalRawTag = CosmereTags.Items.METAL_RAW_TAGS.get(metalType); + final TagKey metalBlendTag = CosmereTags.Items.METAL_DUST_TAGS.get(metalType); + final TagKey metalNuggetTag = CosmereTags.Items.METAL_NUGGET_TAGS.get(metalType); + final TagKey metalIngotTag = CosmereTags.Items.METAL_INGOT_TAGS.get(metalType); + final TagKey storageItemBlockTag = CosmereTags.Items.METAL_BLOCK_ITEM_TAGS.get(metalType); + //Blocks + final TagKey oreBlockTag = CosmereTags.Blocks.METAL_ORE_BLOCK_TAGS.get(metalType); + final TagKey storageBlockTag = CosmereTags.Blocks.METAL_BLOCK_TAGS.get(metalType); + + if (metalType.hasOre() + || metalType == Metals.MetalType.IRON + || metalType == Metals.MetalType.COPPER + || metalType == Metals.MetalType.GOLD) + { + itemTagBuilder.add(metalRawTag); + blockTagBuilder.add(oreBlockTag); + } + + if (metalType.isAlloy()) + { + itemTagBuilder.add(metalBlendTag); + } + + //all else is guaranteed to have stuff in it + itemTagBuilder.add(metalNuggetTag); + itemTagBuilder.add(metalIngotTag); + itemTagBuilder.add(storageItemBlockTag); + blockTagBuilder.add(storageBlockTag); + } + + addCopperBlockVariations(itemTagBuilder, blockTagBuilder); + + //entities + entityTagBuilder.add(EntityType.IRON_GOLEM); + entityTagBuilder.add(EntityType.MINECART); + entityTagBuilder.add(EntityType.CHEST_MINECART); + entityTagBuilder.add(EntityType.FURNACE_MINECART); + entityTagBuilder.add(EntityType.HOPPER_MINECART); + entityTagBuilder.add(EntityType.TNT_MINECART); + } + + private void addCopperBlockVariations(IntrinsicCosmereTagBuilder itemTagBuilder, IntrinsicCosmereTagBuilder blockTagBuilder) + { + itemTagBuilder.add(Items.EXPOSED_COPPER); + itemTagBuilder.add(Items.EXPOSED_CUT_COPPER); + itemTagBuilder.add(Items.EXPOSED_CUT_COPPER_SLAB); + itemTagBuilder.add(Items.EXPOSED_CUT_COPPER_STAIRS); + itemTagBuilder.add(Items.WAXED_EXPOSED_COPPER); + itemTagBuilder.add(Items.WAXED_EXPOSED_CUT_COPPER); + itemTagBuilder.add(Items.WAXED_EXPOSED_CUT_COPPER_SLAB); + itemTagBuilder.add(Items.WAXED_EXPOSED_CUT_COPPER_STAIRS); + + itemTagBuilder.add(Items.WEATHERED_COPPER); + itemTagBuilder.add(Items.WEATHERED_CUT_COPPER); + itemTagBuilder.add(Items.WEATHERED_CUT_COPPER_SLAB); + itemTagBuilder.add(Items.WEATHERED_CUT_COPPER_STAIRS); + itemTagBuilder.add(Items.WAXED_WEATHERED_COPPER); + itemTagBuilder.add(Items.WAXED_WEATHERED_CUT_COPPER); + itemTagBuilder.add(Items.WAXED_WEATHERED_CUT_COPPER_SLAB); + itemTagBuilder.add(Items.WAXED_WEATHERED_CUT_COPPER_STAIRS); + + itemTagBuilder.add(Items.OXIDIZED_COPPER); + itemTagBuilder.add(Items.OXIDIZED_CUT_COPPER); + itemTagBuilder.add(Items.OXIDIZED_CUT_COPPER_SLAB); + itemTagBuilder.add(Items.OXIDIZED_CUT_COPPER_STAIRS); + itemTagBuilder.add(Items.WAXED_OXIDIZED_COPPER); + itemTagBuilder.add(Items.WAXED_OXIDIZED_CUT_COPPER); + itemTagBuilder.add(Items.WAXED_OXIDIZED_CUT_COPPER_SLAB); + itemTagBuilder.add(Items.WAXED_OXIDIZED_CUT_COPPER_STAIRS); + + itemTagBuilder.add(Items.WAXED_COPPER_BLOCK); + itemTagBuilder.add(Items.WAXED_CUT_COPPER); + itemTagBuilder.add(Items.WAXED_CUT_COPPER_SLAB); + itemTagBuilder.add(Items.WAXED_CUT_COPPER_STAIRS); + + blockTagBuilder.add(Blocks.EXPOSED_COPPER); + blockTagBuilder.add(Blocks.EXPOSED_CUT_COPPER); + blockTagBuilder.add(Blocks.EXPOSED_CUT_COPPER_SLAB); + blockTagBuilder.add(Blocks.EXPOSED_CUT_COPPER_STAIRS); + blockTagBuilder.add(Blocks.WAXED_EXPOSED_COPPER); + blockTagBuilder.add(Blocks.WAXED_EXPOSED_CUT_COPPER); + blockTagBuilder.add(Blocks.WAXED_EXPOSED_CUT_COPPER_SLAB); + blockTagBuilder.add(Blocks.WAXED_EXPOSED_CUT_COPPER_STAIRS); + + blockTagBuilder.add(Blocks.WEATHERED_COPPER); + blockTagBuilder.add(Blocks.WEATHERED_CUT_COPPER); + blockTagBuilder.add(Blocks.WEATHERED_CUT_COPPER_SLAB); + blockTagBuilder.add(Blocks.WEATHERED_CUT_COPPER_STAIRS); + blockTagBuilder.add(Blocks.WAXED_WEATHERED_COPPER); + blockTagBuilder.add(Blocks.WAXED_WEATHERED_CUT_COPPER); + blockTagBuilder.add(Blocks.WAXED_WEATHERED_CUT_COPPER_SLAB); + blockTagBuilder.add(Blocks.WAXED_WEATHERED_CUT_COPPER_STAIRS); + + blockTagBuilder.add(Blocks.OXIDIZED_COPPER); + blockTagBuilder.add(Blocks.OXIDIZED_CUT_COPPER); + blockTagBuilder.add(Blocks.OXIDIZED_CUT_COPPER_SLAB); + blockTagBuilder.add(Blocks.OXIDIZED_CUT_COPPER_STAIRS); + blockTagBuilder.add(Blocks.WAXED_OXIDIZED_COPPER); + blockTagBuilder.add(Blocks.WAXED_OXIDIZED_CUT_COPPER); + blockTagBuilder.add(Blocks.WAXED_OXIDIZED_CUT_COPPER_SLAB); + blockTagBuilder.add(Blocks.WAXED_OXIDIZED_CUT_COPPER_STAIRS); + + blockTagBuilder.add(Blocks.WAXED_COPPER_BLOCK); + blockTagBuilder.add(Blocks.WAXED_CUT_COPPER); + blockTagBuilder.add(Blocks.WAXED_CUT_COPPER_SLAB); + blockTagBuilder.add(Blocks.WAXED_CUT_COPPER_STAIRS); + } +} \ No newline at end of file diff --git a/src/datagen/main/java/leaf/cosmere/tag/ForgeRegistryTagBuilder.java b/src/datagen/main/java/leaf/cosmere/tag/ForgeRegistryTagBuilder.java new file mode 100644 index 000000000..0b35b23bd --- /dev/null +++ b/src/datagen/main/java/leaf/cosmere/tag/ForgeRegistryTagBuilder.java @@ -0,0 +1,169 @@ +/* + * File updated ~ 1 - 6 - 2023 ~ Leaf + */ + +package leaf.cosmere.tag; + +import com.mojang.datafixers.util.Either; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.TagBuilder; +import net.minecraft.tags.TagEntry; +import net.minecraft.tags.TagKey; +import net.minecraftforge.registries.IForgeRegistry; + +import java.util.function.Consumer; +import java.util.function.Function; +import java.util.function.Supplier; + +//Based off of Mekanism's implementation of TagsProvider.TagAppender, obtained 1st June, 2023 +public class ForgeRegistryTagBuilder +{ + + private final Either, Registry> registry; + private final TagBuilder builder; + private final String modID; + + public ForgeRegistryTagBuilder(Either, Registry> registry, TagBuilder builder, String modID) + { + this.registry = registry; + this.builder = builder; + this.modID = modID; + } + + @SafeVarargs + public final ForgeRegistryTagBuilder add(Supplier... elements) + { + return addTyped(Supplier::get, elements); + } + + private ResourceLocation getKey(TYPE element) + { + return registry.map(r -> r.getKey(element), r -> r.getKey(element)); + } + + @SafeVarargs + public final ForgeRegistryTagBuilder add(TYPE... elements) + { + return add(this::getKey, elements); + } + + @SafeVarargs + public final ForgeRegistryTagBuilder addTyped(Function converter, T... elements) + { + return add(converter.andThen(this::getKey), elements); + } + + @SafeVarargs + public final ForgeRegistryTagBuilder add(TagKey... tags) + { + return apply(builder::addTag, TagKey::location, tags); + } + + public ForgeRegistryTagBuilder add(TagEntry tag) + { + builder.add(tag); + return this; + } + + @SafeVarargs + public final ForgeRegistryTagBuilder add(ResourceKey... keys) + { + return add(ResourceKey::location, keys); + } + + @SafeVarargs + public final ForgeRegistryTagBuilder add(Function locationGetter, T... elements) + { + return apply(builder::addElement, locationGetter, elements); + } + + public ForgeRegistryTagBuilder replace() + { + return replace(true); + } + + public ForgeRegistryTagBuilder replace(boolean value) + { + builder.replace(value); + return this; + } + + @SafeVarargs + public final ForgeRegistryTagBuilder addOptional(TYPE... elements) + { + return addOptional(this::getKey, elements); + } + + public ForgeRegistryTagBuilder addOptional(ResourceLocation... locations) + { + return addOptional(Function.identity(), locations); + } + + @SafeVarargs + public final ForgeRegistryTagBuilder addOptional(Function locationGetter, T... elements) + { + return add(TagEntry::optionalElement, locationGetter, elements); + } + + @SafeVarargs + public final ForgeRegistryTagBuilder addOptionalTag(TagKey... tags) + { + return addOptionalTag(TagKey::location, tags); + } + + public ForgeRegistryTagBuilder addOptionalTag(ResourceLocation... locations) + { + return addOptionalTag(Function.identity(), locations); + } + + @SafeVarargs + public final ForgeRegistryTagBuilder addOptionalTag(Function locationGetter, T... elements) + { + return add(TagEntry::optionalTag, locationGetter, elements); + } + + @SafeVarargs + private ForgeRegistryTagBuilder add(Function entryCreator, Function locationGetter, T... elements) + { + return apply(rl -> add(entryCreator.apply(rl)), locationGetter, elements); + } + + @SafeVarargs + public final ForgeRegistryTagBuilder remove(TYPE... elements) + { + return remove(this::getKey, elements); + } + + public ForgeRegistryTagBuilder remove(ResourceLocation... locations) + { + return remove(Function.identity(), locations); + } + + @SafeVarargs + public final ForgeRegistryTagBuilder remove(Function locationGetter, T... elements) + { + return apply(rl -> builder.removeElement(rl, modID), locationGetter, elements); + } + + @SafeVarargs + public final ForgeRegistryTagBuilder remove(TagKey... tags) + { + for (TagKey tag : tags) + { + builder.removeTag(tag.location(), modID); + } + return this; + } + + @SafeVarargs + private ForgeRegistryTagBuilder apply(Consumer consumer, Function locationGetter, T... elements) + { + for (T element : elements) + { + consumer.accept(locationGetter.apply(element)); + } + return this; + } +} \ No newline at end of file diff --git a/src/datagen/main/java/leaf/cosmere/tag/IntrinsicCosmereTagBuilder.java b/src/datagen/main/java/leaf/cosmere/tag/IntrinsicCosmereTagBuilder.java new file mode 100644 index 000000000..c1d41a5f4 --- /dev/null +++ b/src/datagen/main/java/leaf/cosmere/tag/IntrinsicCosmereTagBuilder.java @@ -0,0 +1,61 @@ +/* + * File updated ~ 8 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.tag; + +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.TagBuilder; + +import java.util.function.Function; +import java.util.function.Supplier; + +//Special thanks to Mekanism for showing how this works +//Based off of IntrinsicHolderTagsProvider.IntrinsicTagAppender but with a few shortcuts for forge registry entries and also a few more helpers and addition of SafeVarargs annotations +public class IntrinsicCosmereTagBuilder extends CosmereTagBuilder> +{ + + private final Function> keyExtractor; + + public IntrinsicCosmereTagBuilder(Function> keyExtractor, TagBuilder builder, String modID) + { + super(builder, modID); + this.keyExtractor = keyExtractor; + } + + @SafeVarargs + public final IntrinsicCosmereTagBuilder add(Supplier... elements) + { + return addTyped(Supplier::get, elements); + } + + private ResourceLocation getKey(TYPE element) + { + return keyExtractor.apply(element).location(); + } + + @SafeVarargs + public final IntrinsicCosmereTagBuilder add(TYPE... elements) + { + return add(this::getKey, elements); + } + + @SafeVarargs + public final IntrinsicCosmereTagBuilder addTyped(Function converter, T... elements) + { + return add(converter.andThen(this::getKey), elements); + } + + @SafeVarargs + public final IntrinsicCosmereTagBuilder addOptional(TYPE... elements) + { + return addOptional(this::getKey, elements); + } + + @SafeVarargs + public final IntrinsicCosmereTagBuilder remove(TYPE... elements) + { + return remove(this::getKey, elements); + } +} \ No newline at end of file diff --git a/src/datagen/sandmastery/java/leaf/cosmere/sandmastery/SandmasteryDataGenerator.java b/src/datagen/sandmastery/java/leaf/cosmere/sandmastery/SandmasteryDataGenerator.java new file mode 100644 index 000000000..a22b0bac3 --- /dev/null +++ b/src/datagen/sandmastery/java/leaf/cosmere/sandmastery/SandmasteryDataGenerator.java @@ -0,0 +1,38 @@ +/* + * File updated ~ 8 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.sandmastery; + +import leaf.cosmere.sandmastery.common.Sandmastery; +import leaf.cosmere.sandmastery.items.SandmasteryItemModelsGen; +import leaf.cosmere.sandmastery.items.SandmasteryTagsProvider; +import leaf.cosmere.sandmastery.loottables.SandmasteryLootTableGen; +import leaf.cosmere.sandmastery.patchouli.SandmasteryPatchouliGen; +import net.minecraft.data.DataGenerator; +import net.minecraft.data.PackOutput; +import net.minecraftforge.common.data.ExistingFileHelper; +import net.minecraftforge.data.event.GatherDataEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod.EventBusSubscriber; +import net.minecraftforge.fml.common.Mod.EventBusSubscriber.Bus; + +@EventBusSubscriber(modid = Sandmastery.MODID, bus = Bus.MOD) +public class SandmasteryDataGenerator +{ + @SubscribeEvent + public static void gatherData(GatherDataEvent event) + { + DataGenerator generator = event.getGenerator(); + PackOutput packOutput = generator.getPackOutput(); + ExistingFileHelper existingFileHelper = event.getExistingFileHelper(); + + generator.addProvider(true, new SandmasteryEngLangGen(packOutput)); + generator.addProvider(true, new SandmasteryItemModelsGen(packOutput, existingFileHelper)); + generator.addProvider(true, new SandmasteryTagsProvider(packOutput, event.getLookupProvider(), existingFileHelper)); + generator.addProvider(true, new SandmasteryRecipeGen(packOutput, existingFileHelper)); + generator.addProvider(true, new SandmasteryLootTableGen(packOutput)); + generator.addProvider(true, new SandmasteryPatchouliGen(packOutput)); + } + +} \ No newline at end of file diff --git a/src/datagen/sandmastery/java/leaf/cosmere/sandmastery/SandmasteryEngLangGen.java b/src/datagen/sandmastery/java/leaf/cosmere/sandmastery/SandmasteryEngLangGen.java new file mode 100644 index 000000000..9911d0cf0 --- /dev/null +++ b/src/datagen/sandmastery/java/leaf/cosmere/sandmastery/SandmasteryEngLangGen.java @@ -0,0 +1,174 @@ +/* + * File updated ~ 10 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.sandmastery; + +import leaf.cosmere.api.Manifestations; +import leaf.cosmere.api.Taldain; +import leaf.cosmere.api.helpers.RegistryHelper; +import leaf.cosmere.api.providers.IAttributeProvider; +import leaf.cosmere.api.text.StringHelper; +import leaf.cosmere.common.registration.impl.ManifestationRegistryObject; +import leaf.cosmere.sandmastery.common.Sandmastery; +import leaf.cosmere.sandmastery.common.manifestation.SandmasteryManifestation; +import leaf.cosmere.sandmastery.common.registries.SandmasteryAttributes; +import leaf.cosmere.sandmastery.common.registries.SandmasteryManifestations; +import net.minecraft.data.PackOutput; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.Item; +import net.minecraftforge.common.data.LanguageProvider; +import net.minecraftforge.registries.ForgeRegistries; + +import java.util.Locale; + +import static leaf.cosmere.sandmastery.common.registries.SandmasteryAttributes.RIBBONS; +import static leaf.cosmere.sandmastery.common.utils.SandmasteryConstants.*; + + +public class SandmasteryEngLangGen extends LanguageProvider +{ + final String advancementTitleFormat = "advancements.sandmastery.%s.title"; + final String advancementDescriptionFormat = "advancements.sandmastery.%s.description"; + + public SandmasteryEngLangGen(PackOutput output) + { + super(output, Sandmastery.MODID, "en_us"); + } + + @Override + protected void addTranslations() + { + addItemsAndBlocks(); + addEntities(); + addAdvancements(); + addManifestations(); + addAttributes(); + addPatchouli(); + addTooltips(); + addItemGroups(); + addDamageSources(); + addMobEffects(); + addCurioIdentifiers(); + addConfigs(); + addCommands(); + addKeybindings(); + addStats(); + + } + + + private void addItemsAndBlocks() + { + //Items and Blocks + for (Item item : ForgeRegistries.ITEMS.getValues()) + { + final ResourceLocation registryName = RegistryHelper.get(item); + if (registryName.getNamespace().contentEquals(Sandmastery.MODID)) + { + String localisedString = StringHelper.fixCapitalisation(registryName.getPath()); + + add(item.getDescriptionId(), localisedString); + } + } + } + + private void addEntities() + { + } + + private void addAdvancements() + { + Manifestations.ManifestationTypes value = Manifestations.ManifestationTypes.SANDMASTERY; + { + add(String.format(advancementTitleFormat, value.getName()), StringHelper.fixCapitalisation(value.getName())); + add(String.format(advancementDescriptionFormat, value.getName()), "Test description: " + StringHelper.fixCapitalisation(value.getName())); + } + } + + private void addManifestations() + { + for (ManifestationRegistryObject manifestationRegistryObject : SandmasteryManifestations.SANDMASTERY_POWERS.values()) + { + SandmasteryManifestation manifestation = manifestationRegistryObject.getManifestation(); + + //power type + String key = manifestation.getTranslationKey(); + + //description + String name; + String description; + + String abilityName = Taldain.Mastery.valueOf(manifestation.getPowerID()).get().toString().toLowerCase(Locale.ROOT); + + name = "Sand Mastery " + abilityName; + description = "Masters can use " + abilityName; + + //Name + add(key, StringHelper.fixCapitalisation(name)); + + //todo decide about manifestation descriptions? + final ResourceLocation regName = manifestation.getRegistryName(); + add("manifestation." + regName.getNamespace() + "." + regName.getPath() + ".description", description); + } + } + + private void addAttributes() + { + //Attribute + final String descriptionId = RIBBONS.getAttribute().getDescriptionId(); + final String name = "Sand Mastery " + RIBBONS.getName(); + // Attributes are the powers themselves, they need their own names. + add(descriptionId, StringHelper.fixCapitalisation(name)); + } + + private void addPatchouli() + { + } + + private void addTooltips() + { + } + + private void addItemGroups() + { + add("tabs.sandmastery.items", "Sandmastery"); + } + + private void addDamageSources() + { + //Damage Sources + add("death.attack.dehydrated", "%1$s died of dehydration"); + } + + private void addMobEffects() + { + } + + private void addCurioIdentifiers() + { + + } + + private void addConfigs() + { + } + + private void addCommands() + { + } + + private void addKeybindings() + { + //KeyBindings + add(KEY_SANDMASTERY_LAUNCH, "Use Launch Mastery"); + add(KEY_SANDMASTERY_ELEVATE, "Use Elevate Mastery"); + add(KEY_SANDMASTERY_PROJECTILE, "Use Projectile Mastery"); + add(KEY_SANDMASTERY_PLATFORM, "Use Platform Mastery"); + } + + private void addStats() + { + //stats + } +} diff --git a/src/datagen/sandmastery/java/leaf/cosmere/sandmastery/SandmasteryRecipeGen.java b/src/datagen/sandmastery/java/leaf/cosmere/sandmastery/SandmasteryRecipeGen.java new file mode 100644 index 000000000..39081a220 --- /dev/null +++ b/src/datagen/sandmastery/java/leaf/cosmere/sandmastery/SandmasteryRecipeGen.java @@ -0,0 +1,85 @@ +/* + * File updated ~ 4 - 1 - 2025 ~ Leaf + */ + +package leaf.cosmere.sandmastery; + +import leaf.cosmere.BaseRecipeProvider; +import leaf.cosmere.sandmastery.common.Sandmastery; +import leaf.cosmere.sandmastery.common.registries.SandmasteryBlocks; +import leaf.cosmere.sandmastery.common.registries.SandmasteryItems; +import net.minecraft.data.PackOutput; +import net.minecraft.data.recipes.FinishedRecipe; +import net.minecraft.data.recipes.RecipeCategory; +import net.minecraft.data.recipes.ShapedRecipeBuilder; +import net.minecraft.data.recipes.ShapelessRecipeBuilder; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.ItemTags; +import net.minecraft.world.item.Items; +import net.minecraftforge.common.Tags; +import net.minecraftforge.common.crafting.conditions.IConditionBuilder; +import net.minecraftforge.common.data.ExistingFileHelper; + +import java.util.function.Consumer; + +public class SandmasteryRecipeGen extends BaseRecipeProvider implements IConditionBuilder +{ + public SandmasteryRecipeGen(PackOutput output, ExistingFileHelper existingFileHelper) + { + super(output, existingFileHelper, Sandmastery.MODID); + } + + @Override + protected ResourceLocation makeRL(String path) + { + return Sandmastery.rl(path); + } + + @Override + protected void addRecipes(Consumer consumer) + { + ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS, SandmasteryItems.QIDO_ITEM.get()) + .define('H', Items.GOAT_HORN) + .define('S', Tags.Items.STRING) + .pattern("SSS") + .pattern("S S") + .pattern(" H ") + .unlockedBy("has_material", has(Items.GOAT_HORN)) + .save(consumer); + + ShapedRecipeBuilder.shaped(RecipeCategory.REDSTONE, SandmasteryItems.JAR_ITEM.get()) + .define('G', Tags.Items.GLASS) + .pattern("G G") + .pattern("G G") + .pattern(" G ") + .unlockedBy("has_material", has(Tags.Items.GLASS)) + .save(consumer); + + ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS, SandmasteryItems.SAND_POUCH_ITEM.get()) + .define('L', Tags.Items.LEATHER) + .define('B', Items.LEAD) + .define('J', SandmasteryItems.SAND_JAR_ITEM) + .pattern("BLL") + .pattern("LJL") + .pattern("LLL") + .unlockedBy("has_material", has(SandmasteryItems.SAND_JAR_ITEM)) + .save(consumer); + + ShapedRecipeBuilder.shaped(RecipeCategory.DECORATIONS, SandmasteryBlocks.SAND_SPREADING_TUB_BLOCK.getBlock()) + .define('W', ItemTags.WOODEN_SLABS) + .pattern("W W") + .pattern("WWW") + .unlockedBy("has_material", has(ItemTags.WOODEN_SLABS)) + .save(consumer); + + ShapelessRecipeBuilder.shapeless(RecipeCategory.REDSTONE, SandmasteryItems.SAND_JAR_ITEM.get()) + .requires(SandmasteryBlocks.SAND_JAR_BLOCK.asItem()) + .unlockedBy("has_material", has(SandmasteryItems.SAND_JAR_ITEM)) + .save(consumer); + + ShapelessRecipeBuilder.shapeless(RecipeCategory.DECORATIONS, SandmasteryBlocks.SAND_JAR_BLOCK.asItem()) + .requires(SandmasteryItems.SAND_JAR_ITEM) + .unlockedBy("has_material", has(SandmasteryBlocks.SAND_JAR_BLOCK.asItem())) + .save(consumer); + } +} diff --git a/src/datagen/sandmastery/java/leaf/cosmere/sandmastery/items/SandmasteryItemModelsGen.java b/src/datagen/sandmastery/java/leaf/cosmere/sandmastery/items/SandmasteryItemModelsGen.java new file mode 100644 index 000000000..1021c9e74 --- /dev/null +++ b/src/datagen/sandmastery/java/leaf/cosmere/sandmastery/items/SandmasteryItemModelsGen.java @@ -0,0 +1,66 @@ +/* + * File updated ~ 8 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.sandmastery.items; + +import leaf.cosmere.api.helpers.RegistryHelper; +import leaf.cosmere.api.providers.IItemProvider; +import leaf.cosmere.sandmastery.common.Sandmastery; +import leaf.cosmere.sandmastery.common.items.SandJarItem; +import leaf.cosmere.sandmastery.common.registries.SandmasteryItems; +import net.minecraft.data.PackOutput; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.BlockItem; +import net.minecraft.world.item.Item; +import net.minecraftforge.client.model.generators.ItemModelBuilder; +import net.minecraftforge.client.model.generators.ItemModelProvider; +import net.minecraftforge.client.model.generators.ModelFile; +import net.minecraftforge.common.data.ExistingFileHelper; + +import java.util.function.Supplier; + +public class SandmasteryItemModelsGen extends ItemModelProvider +{ + + public SandmasteryItemModelsGen(PackOutput generator, ExistingFileHelper existingFileHelper) + { + super(generator, Sandmastery.MODID, existingFileHelper); + } + + @Override + protected void registerModels() + { + for (IItemProvider itemRegistryObject : SandmasteryItems.ITEMS.getAllItems()) + { + String path = itemRegistryObject.getRegistryName().getPath(); + Item item = itemRegistryObject.asItem(); + + //blocks have their own model rules + if (item instanceof BlockItem) + { + continue; + } + if (item instanceof SandJarItem) + { + continue; + } + //else normal item texture rules apply + simpleItem(path, path); + } + + } + + public String getPath(Supplier itemSupplier) + { + ResourceLocation location = RegistryHelper.get(itemSupplier.get()); + return location.getPath(); + } + + public ItemModelBuilder simpleItem(String path, String texturePath) + { + return this.getBuilder(path) + .parent(new ModelFile.UncheckedModelFile("item/generated")) + .texture("layer0", modLoc("item/" + texturePath)); + } +} \ No newline at end of file diff --git a/src/datagen/sandmastery/java/leaf/cosmere/sandmastery/items/SandmasteryTagsProvider.java b/src/datagen/sandmastery/java/leaf/cosmere/sandmastery/items/SandmasteryTagsProvider.java new file mode 100644 index 000000000..26076ea66 --- /dev/null +++ b/src/datagen/sandmastery/java/leaf/cosmere/sandmastery/items/SandmasteryTagsProvider.java @@ -0,0 +1,38 @@ +/* + * File updated ~ 8 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.sandmastery.items; + +import leaf.cosmere.api.CosmereTags; +import leaf.cosmere.sandmastery.common.Sandmastery; +import leaf.cosmere.sandmastery.common.registries.SandmasteryBlocks; +import leaf.cosmere.sandmastery.common.registries.SandmasteryItems; +import leaf.cosmere.tag.BaseTagProvider; +import net.minecraft.core.HolderLookup; +import net.minecraft.data.PackOutput; +import net.minecraft.tags.BlockTags; +import net.minecraftforge.common.data.ExistingFileHelper; + +import javax.annotation.Nullable; +import java.util.concurrent.CompletableFuture; + +public class SandmasteryTagsProvider extends BaseTagProvider +{ + public SandmasteryTagsProvider(PackOutput packOutput, CompletableFuture lookupProvider, @Nullable ExistingFileHelper existingFileHelper) + { + super(packOutput, lookupProvider, Sandmastery.MODID, existingFileHelper); + } + + @Override + protected void registerTags(HolderLookup.Provider registries) + { + getItemBuilder(CosmereTags.Items.CURIO_BELT).add(SandmasteryItems.SAND_POUCH_ITEM.asItem()); + + getBlockBuilder(BlockTags.MINEABLE_WITH_SHOVEL).add(SandmasteryBlocks.TALDAIN_BLACK_SAND_LAYER.getBlock(), SandmasteryBlocks.TALDAIN_BLACK_SAND.getBlock(), SandmasteryBlocks.TALDAIN_WHITE_SAND_LAYER.getBlock(), SandmasteryBlocks.TALDAIN_WHITE_SAND.getBlock()); + getBlockBuilder(BlockTags.SAND).add(SandmasteryBlocks.TALDAIN_BLACK_SAND_LAYER.getBlock(), SandmasteryBlocks.TALDAIN_BLACK_SAND.getBlock(), SandmasteryBlocks.TALDAIN_WHITE_SAND_LAYER.getBlock(), SandmasteryBlocks.TALDAIN_WHITE_SAND.getBlock()); + getBlockBuilder(BlockTags.MINEABLE_WITH_PICKAXE).add(SandmasteryBlocks.SAND_JAR_BLOCK.getBlock()); + getBlockBuilder(BlockTags.MINEABLE_WITH_AXE).add(SandmasteryBlocks.SAND_SPREADING_TUB_BLOCK.getBlock()); + } + +} \ No newline at end of file diff --git a/src/datagen/sandmastery/java/leaf/cosmere/sandmastery/loottables/SandmasteryBlockLootTableGen.java b/src/datagen/sandmastery/java/leaf/cosmere/sandmastery/loottables/SandmasteryBlockLootTableGen.java new file mode 100644 index 000000000..7e6583647 --- /dev/null +++ b/src/datagen/sandmastery/java/leaf/cosmere/sandmastery/loottables/SandmasteryBlockLootTableGen.java @@ -0,0 +1,65 @@ +/* + * File updated ~ 8 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.sandmastery.loottables; + +import leaf.cosmere.api.providers.IBlockProvider; +import leaf.cosmere.loottables.BaseBlockLootTables; +import leaf.cosmere.sandmastery.common.blocks.SandJarBlock; +import leaf.cosmere.sandmastery.common.blocks.TaldainBlackSandLayerBlock; +import leaf.cosmere.sandmastery.common.blocks.TaldainWhiteSandLayerBlock; +import leaf.cosmere.sandmastery.common.blocks.TemporarySandBlock; +import leaf.cosmere.sandmastery.common.registries.SandmasteryBlocks; +import leaf.cosmere.sandmastery.common.registries.SandmasteryItems; +import net.minecraft.advancements.critereon.StatePropertiesPredicate; +import net.minecraft.world.item.Items; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.storage.loot.LootContext; +import net.minecraft.world.level.storage.loot.LootPool; +import net.minecraft.world.level.storage.loot.LootTable; +import net.minecraft.world.level.storage.loot.entries.AlternativesEntry; +import net.minecraft.world.level.storage.loot.entries.LootItem; +import net.minecraft.world.level.storage.loot.functions.SetItemCountFunction; +import net.minecraft.world.level.storage.loot.predicates.LootItemBlockStatePropertyCondition; +import net.minecraft.world.level.storage.loot.predicates.LootItemEntityPropertyCondition; +import net.minecraft.world.level.storage.loot.providers.number.ConstantValue; + +public class SandmasteryBlockLootTableGen extends BaseBlockLootTables +{ + @Override + protected void generate() + { + for (IBlockProvider itemRegistryObject : SandmasteryBlocks.BLOCKS.getAllBlocks()) + { + final Block block = itemRegistryObject.getBlock(); + + if (block instanceof SandJarBlock) + { + this.add(block, (jar) -> createSingleItemTable(SandmasteryItems.SAND_JAR_ITEM.asItem())); + } + else if (block instanceof TaldainBlackSandLayerBlock || block instanceof TaldainWhiteSandLayerBlock) + { + Block blackLayer = SandmasteryBlocks.TALDAIN_BLACK_SAND_LAYER.getBlock(); + Block whiteLayer = SandmasteryBlocks.TALDAIN_WHITE_SAND_LAYER.getBlock(); + this.add(SandmasteryBlocks.TALDAIN_BLACK_SAND_LAYER.getBlock(), (layer) -> LootTable.lootTable().withPool(LootPool.lootPool().when(LootItemEntityPropertyCondition.entityPresent(LootContext.EntityTarget.THIS)).add(AlternativesEntry.alternatives(TaldainBlackSandLayerBlock.LAYERS.getPossibleValues(), (layers) -> LootItem.lootTableItem(blackLayer.asItem()).when(LootItemBlockStatePropertyCondition.hasBlockStateProperties(layer).setProperties(StatePropertiesPredicate.Builder.properties().hasProperty(TaldainBlackSandLayerBlock.LAYERS, layers))).apply(SetItemCountFunction.setCount(ConstantValue.exactly(layers.intValue()))))))); + this.add(SandmasteryBlocks.TALDAIN_WHITE_SAND_LAYER.getBlock(), (layer) -> LootTable.lootTable().withPool(LootPool.lootPool().when(LootItemEntityPropertyCondition.entityPresent(LootContext.EntityTarget.THIS)).add(AlternativesEntry.alternatives(TaldainWhiteSandLayerBlock.LAYERS.getPossibleValues(), (layers) -> LootItem.lootTableItem(whiteLayer.asItem()).when(LootItemBlockStatePropertyCondition.hasBlockStateProperties(layer).setProperties(StatePropertiesPredicate.Builder.properties().hasProperty(TaldainWhiteSandLayerBlock.LAYERS, layers))).apply(SetItemCountFunction.setCount(ConstantValue.exactly(layers.intValue()))))))); + } + else if (block instanceof TemporarySandBlock) + { + this.dropOther(block, Items.AIR); + } + else + { + this.dropSelf(block); + } + } + } + + @Override + protected Iterable getKnownBlocks() + { + //todo delete this when moving generate function to use BaseBlockLootTables functions + return SandmasteryBlocks.BLOCKS.getAllBlocks().stream().map(IBlockProvider::getBlock)::iterator; + } +} diff --git a/src/datagen/sandmastery/java/leaf/cosmere/sandmastery/loottables/SandmasteryLootTableGen.java b/src/datagen/sandmastery/java/leaf/cosmere/sandmastery/loottables/SandmasteryLootTableGen.java new file mode 100644 index 000000000..33f28ee4d --- /dev/null +++ b/src/datagen/sandmastery/java/leaf/cosmere/sandmastery/loottables/SandmasteryLootTableGen.java @@ -0,0 +1,22 @@ +/* + * File updated ~ 8 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.sandmastery.loottables; + +import leaf.cosmere.loottables.BaseLootProvider; +import net.minecraft.data.PackOutput; +import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets; + +import java.util.List; + +public class SandmasteryLootTableGen extends BaseLootProvider +{ + public SandmasteryLootTableGen(PackOutput packOutput) + { + super(packOutput, List.of( + new SubProviderEntry(SandmasteryBlockLootTableGen::new, LootContextParamSets.BLOCK) + //,new SubProviderEntry(ExampleEntityLootTableGen::new, LootContextParamSets.ENTITY) + )); + } +} diff --git a/src/datagen/sandmastery/java/leaf/cosmere/sandmastery/patchouli/PatchouliSandmasteryCategory.java b/src/datagen/sandmastery/java/leaf/cosmere/sandmastery/patchouli/PatchouliSandmasteryCategory.java new file mode 100644 index 000000000..7e471c121 --- /dev/null +++ b/src/datagen/sandmastery/java/leaf/cosmere/sandmastery/patchouli/PatchouliSandmasteryCategory.java @@ -0,0 +1,89 @@ +/* + * File updated ~ 8 - 10 - 2022 ~ Leaf + */ + +package leaf.cosmere.sandmastery.patchouli; + +import leaf.cosmere.sandmastery.common.manifestation.SandmasteryManifestation; +import leaf.cosmere.sandmastery.common.registries.SandmasteryManifestations; +import leaf.cosmere.api.Constants; +import leaf.cosmere.api.Metals; +import leaf.cosmere.api.text.StringHelper; +import leaf.cosmere.common.registration.impl.ManifestationRegistryObject; +import leaf.cosmere.patchouli.data.BookStuff; +import leaf.cosmere.patchouli.data.PatchouliTextFormat; + +import java.awt.print.Book; +import java.util.ArrayList; +import java.util.List; + +public class PatchouliSandmasteryCategory +{ + public static void collect(List categories, List entries) + { + // TODO + BookStuff.Category sandmasteryCategory = new BookStuff.Category( + "sandmastery", + "A system of Investiture from Tal'Dain, Possibly involving a Luhel Bond. (WIP)", + "sandmastery:qido"); + categories.add(sandmasteryCategory); + sandmasteryCategory.sortnum = 4; + + // Start a page list + List pages = new ArrayList<>(); + + BookStuff.Entry qido = new BookStuff.Entry("qido", sandmasteryCategory, "sandmastery:qido"); + pages.add(new BookStuff.CraftingPage("sandmastery:qido")); + pages.add(new BookStuff.TextPage("As any good Mastrell knows, hydration is one of the most important aspects of sand mastery. " + + "The Qido is the most common way of carrying water on dayside. Crouch (" + PatchouliTextFormat.Keybind("key.sneak") + ") and use (" + PatchouliTextFormat.Keybind("key.use") + ") on a water source to fill it, and use it like any other bottle to drink from it.")); + qido.pages = pages.toArray(BookStuff.Page[]::new); + pages.clear(); + entries.add(qido); + + BookStuff.Entry sandJar = new BookStuff.Entry("sand_jar", sandmasteryCategory, "sandmastery:sand_jar"); + pages.add(new BookStuff.TextPage("As mentioned previously, the sand from Tal'Dain reacts to physical investiture, which means that it can be measured. " + + "Common technology on this planet seems to use a substance called 'redstone' in order to power their fabrials. A device like the 'Comparator' " + + "Can measure the investiture in the sand jar, and release a redstone signal.")); + pages.add(new BookStuff.TextPage("You can place the sand jar item on the ground as a block by crouching (holding " + PatchouliTextFormat.Keybind("key.sneak") + ") while placing, or you can get the sand out by placing normally. Removing the sand is how you get the starting sand for the sand spreader.")); + sandJar.pages = pages.toArray(BookStuff.Page[]::new); + pages.clear(); + entries.add(sandJar); + + BookStuff.Entry sandSpreader = new BookStuff.Entry("sand_spreader", sandmasteryCategory, "sandmastery:sand_spreading_tub"); + pages.add(new BookStuff.CraftingPage("While you can grow the micro-organisms that contribute to sand mastery in the world, the sand spreading tub creates optimal conditions for the growth, greatly speeding up the process.", "sandmastery:sand_spreading_tub")); + sandSpreader.pages = pages.toArray(BookStuff.Page[]::new); + pages.clear(); + entries.add(sandSpreader); + + BookStuff.Entry sandPouch = new BookStuff.Entry("sand_pouch", sandmasteryCategory, "sandmastery:sand_pouch"); + pages.add(new BookStuff.TextPage("The sand pouch is the only way to ensure you always have the required sand on you, something about this world seems to prevent using sand that is laying in the world. ((In world sand usage is WIP)) It has also been noted that the pouch is seemingly bottomless, nearly impossible to tell how much sand is inside. ((Known bug: sand inside the pouch is invisible upon re-opening the pouch on a server))")); + pages.add(new BookStuff.CraftingPage("sandmastery:sand_pouch")); + sandPouch.pages = pages.toArray(BookStuff.Page[]::new); + pages.clear(); + entries.add(sandPouch); + + // Sandmastery Basics Entry + BookStuff.Entry sandmasteryBasics = new BookStuff.Entry("sandmastery_basics", sandmasteryCategory, "sandmastery:qido"); + + BookStuff.Page firstPage = new BookStuff.TextPage(); + firstPage.setTitle("Sand Mastery (For Dummies)"); + // TODO + firstPage.setText( + "Here is where I shall explain Sand Mastery, a system of Investiture native to Taldain. " + + "The sand from Taldain is rare to find on this planet- perhaps delving into abandoned pyramids will aid in your search. " + + "While normally black, Whenever in the presence of physical investiture- Allomancy and Surgebinding, to name a few- the sand will turn white and spread to nearby sand." + + "This has been observed to be most consistent in a sand spreading tub."); + pages.add(firstPage); + + BookStuff.Page secondPage = new BookStuff.TextPage(); + secondPage.setTitle("Sand Mastery (For Dummies)"); + secondPage.setText("To get started, you will need to be hydrated. You can accomplish this simply by drinking water bottles, but to hold even more water on you at a time consider looking into a Qido. " + + "You will also need to keep sand on you, for that you will need to get a sand pouch, the more sand you put inside, the more charge it will hold." + + "And finally, you will need to charge the sand inside the jar. The sand will charge when in the presence of kinetic investiture, as long as it is not being hidden by something like copper allomancy."); + pages.add(secondPage); + + sandmasteryBasics.pages = pages.toArray(BookStuff.Page[]::new); + pages.clear(); + entries.add(sandmasteryBasics); + } +} diff --git a/src/datagen/sandmastery/java/leaf/cosmere/sandmastery/patchouli/SandmasteryPatchouliGen.java b/src/datagen/sandmastery/java/leaf/cosmere/sandmastery/patchouli/SandmasteryPatchouliGen.java new file mode 100644 index 000000000..5d1f5534b --- /dev/null +++ b/src/datagen/sandmastery/java/leaf/cosmere/sandmastery/patchouli/SandmasteryPatchouliGen.java @@ -0,0 +1,62 @@ +/* + * File updated ~ 9 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.sandmastery.patchouli; + +import leaf.cosmere.api.CosmereAPI; +import leaf.cosmere.patchouli.data.PatchouliProvider; +import leaf.cosmere.sandmastery.common.Sandmastery; +import net.minecraft.data.PackOutput; + +// +// In-Game Documentation generator +// +public class SandmasteryPatchouliGen extends PatchouliProvider +{ + public SandmasteryPatchouliGen(PackOutput generatorIn) + { + super(generatorIn, CosmereAPI.COSMERE_MODID); + } + + @Override + protected void collectInfoForBook() + { + //dynamically figure out all the things we wanna generate categories/entries for? + //------------------------------------------// + // Categories // + //------------------------------------------// + // - Basics // + // - Manifestations (parent category?) // + // - Feruchemy // + // - Allomancy // + // - Hemalurgy // + // - SandMastery // + // - Curios // + // - Machines ? // + // - Challenges ? // + // - // + // - // + // - // + // - // + // - // + //------------------------------------------// + + PatchouliSandmasteryCategory.collect(this.categories, this.entries); + + + } + + /** + * Gets a name for this provider, to use in logging. + */ + public String getName() + { + return "PatchouliGeneration"; + } + + +} + + + diff --git a/src/datagen/soulforgery/java/leaf/cosmere/soulforgery/SoulforgeryDataGenerator.java b/src/datagen/soulforgery/java/leaf/cosmere/soulforgery/SoulforgeryDataGenerator.java new file mode 100644 index 000000000..6af580907 --- /dev/null +++ b/src/datagen/soulforgery/java/leaf/cosmere/soulforgery/SoulforgeryDataGenerator.java @@ -0,0 +1,36 @@ +/* + * File updated ~ 8 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.soulforgery; + +import leaf.cosmere.soulforgery.common.Soulforgery; +import leaf.cosmere.soulforgery.loottables.SoulforgeryLootTableGen; +import leaf.cosmere.soulforgery.patchouli.SoulforgeryPatchouliGen; +import net.minecraft.data.DataGenerator; +import net.minecraft.data.PackOutput; +import net.minecraftforge.common.data.ExistingFileHelper; +import net.minecraftforge.data.event.GatherDataEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod.EventBusSubscriber; +import net.minecraftforge.fml.common.Mod.EventBusSubscriber.Bus; + +@EventBusSubscriber(modid = Soulforgery.MODID, bus = Bus.MOD) +public class SoulforgeryDataGenerator +{ + @SubscribeEvent + public static void gatherData(GatherDataEvent event) + { + DataGenerator generator = event.getGenerator(); + PackOutput packOutput = generator.getPackOutput(); + ExistingFileHelper existingFileHelper = event.getExistingFileHelper(); + + generator.addProvider(true, new SoulforgeryEngLangGen(packOutput)); + generator.addProvider(true, new SoulforgeryTagProvider(packOutput, event.getLookupProvider(), existingFileHelper)); + generator.addProvider(true, new SoulforgeryLootTableGen(packOutput)); + generator.addProvider(true, new SoulforgeryItemModelsGen(packOutput, existingFileHelper)); + generator.addProvider(true, new SoulforgeryRecipeGen(packOutput, existingFileHelper)); + generator.addProvider(true, new SoulforgeryPatchouliGen(packOutput)); + } + +} \ No newline at end of file diff --git a/src/datagen/soulforgery/java/leaf/cosmere/soulforgery/SoulforgeryEngLangGen.java b/src/datagen/soulforgery/java/leaf/cosmere/soulforgery/SoulforgeryEngLangGen.java new file mode 100644 index 000000000..6747b2131 --- /dev/null +++ b/src/datagen/soulforgery/java/leaf/cosmere/soulforgery/SoulforgeryEngLangGen.java @@ -0,0 +1,127 @@ +/* + * File updated ~ 10 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.soulforgery; + +import leaf.cosmere.api.helpers.RegistryHelper; +import leaf.cosmere.api.providers.IEntityTypeProvider; +import leaf.cosmere.api.text.StringHelper; +import leaf.cosmere.soulforgery.common.Soulforgery; +import leaf.cosmere.soulforgery.common.registries.SoulforgeryEntityTypes; +import net.minecraft.data.PackOutput; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.Item; +import net.minecraftforge.common.data.LanguageProvider; +import net.minecraftforge.registries.ForgeRegistries; + +public class SoulforgeryEngLangGen extends LanguageProvider +{ + public SoulforgeryEngLangGen(PackOutput output) + { + super(output, Soulforgery.MODID, "en_us"); + } + + @Override + protected void addTranslations() + { + addItemsAndBlocks(); + addEntities(); + addAdvancements(); + addManifestations(); + addAttributes(); + addPatchouli(); + addTooltips(); + addItemGroups(); + addDamageSources(); + addMobEffects(); + addCurioIdentifiers(); + addConfigs(); + addCommands(); + addKeybindings(); + addStats(); + + } + + + private void addItemsAndBlocks() + { + //Items and Blocks + for (Item item : ForgeRegistries.ITEMS.getValues()) + { + final ResourceLocation registryName = RegistryHelper.get(item); + if (registryName.getNamespace().contentEquals(Soulforgery.MODID)) + { + String localisedString = StringHelper.fixCapitalisation(registryName.getPath()); + add(item.getDescriptionId(), localisedString); + } + } + } + + private void addEntities() + { + //Entities + for (IEntityTypeProvider type : SoulforgeryEntityTypes.ENTITY_TYPES.getAllEntityTypes()) + { + final ResourceLocation id = type.getRegistryName(); + add(type.getEntityType().getDescriptionId(), StringHelper.fixCapitalisation(id.getPath())); + } + } + + private void addAdvancements() + { + + } + + private void addManifestations() + { + } + + private void addAttributes() + { + } + + private void addPatchouli() + { + + } + + private void addTooltips() + { + + } + + private void addItemGroups() + { + //ItemGroups/Tabs + add("tabs.soulforgery.items", "Soulforgery"); + } + + private void addDamageSources() + { + } + + private void addMobEffects() + { + } + + private void addCurioIdentifiers() + { + } + + private void addConfigs() + { + } + + private void addCommands() + { + } + + private void addKeybindings() + { + } + + private void addStats() + { + } +} diff --git a/src/datagen/soulforgery/java/leaf/cosmere/soulforgery/SoulforgeryItemModelsGen.java b/src/datagen/soulforgery/java/leaf/cosmere/soulforgery/SoulforgeryItemModelsGen.java new file mode 100644 index 000000000..27ca332aa --- /dev/null +++ b/src/datagen/soulforgery/java/leaf/cosmere/soulforgery/SoulforgeryItemModelsGen.java @@ -0,0 +1,74 @@ +/* + * File updated ~ 8 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.soulforgery; + +import leaf.cosmere.api.helpers.RegistryHelper; +import leaf.cosmere.api.providers.IItemProvider; +import leaf.cosmere.soulforgery.common.Soulforgery; +import leaf.cosmere.soulforgery.common.registries.SoulforgeryItems; +import net.minecraft.data.PackOutput; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.Item; +import net.minecraftforge.client.model.generators.ItemModelBuilder; +import net.minecraftforge.client.model.generators.ItemModelProvider; +import net.minecraftforge.client.model.generators.ModelFile; +import net.minecraftforge.common.ForgeSpawnEggItem; +import net.minecraftforge.common.data.ExistingFileHelper; + +import java.util.function.Supplier; + +public class SoulforgeryItemModelsGen extends ItemModelProvider +{ + + public SoulforgeryItemModelsGen(PackOutput generator, ExistingFileHelper existingFileHelper) + { + super(generator, Soulforgery.MODID, existingFileHelper); + } + + @Override + protected void registerModels() + { + for (IItemProvider itemRegistryObject : SoulforgeryItems.ITEMS.getAllItems()) + { + String path = itemRegistryObject.getRegistryName().getPath(); + Item item = itemRegistryObject.asItem(); + + if (item instanceof ForgeSpawnEggItem) + { + getBuilder(item.toString()).parent(new ModelFile.UncheckedModelFile("item/template_spawn_egg")); + continue; + } + //if (item instanceof modelOverrideType) + //{ + // this.getBuilder(path) + // .parent(new ModelFile.UncheckedModelFile("soulforgery:item/specificModelParent")) + // .texture("layer0", modLoc("item/" + "texture_name")); + // continue; + //} + //else if (item instanceof hardcodedModelType) + //{ + // //skip + // continue; + //} + + //else normal item texture rules apply + simpleItem(path, path); + } + + } + + public String getPath(Supplier itemSupplier) + { + ResourceLocation location = RegistryHelper.get(itemSupplier.get()); + return location.getPath(); + } + + public ItemModelBuilder simpleItem(String path, String texturePath) + { + return this.getBuilder(path) + .parent(new ModelFile.UncheckedModelFile("item/generated")) + .texture("layer0", modLoc("item/" + texturePath)); + } +} \ No newline at end of file diff --git a/src/datagen/soulforgery/java/leaf/cosmere/soulforgery/SoulforgeryRecipeGen.java b/src/datagen/soulforgery/java/leaf/cosmere/soulforgery/SoulforgeryRecipeGen.java new file mode 100644 index 000000000..fda353bbf --- /dev/null +++ b/src/datagen/soulforgery/java/leaf/cosmere/soulforgery/SoulforgeryRecipeGen.java @@ -0,0 +1,35 @@ +/* + * File updated ~ 4 - 1 - 2025 ~ Leaf + */ + +package leaf.cosmere.soulforgery; + +import leaf.cosmere.BaseRecipeProvider; +import leaf.cosmere.soulforgery.common.Soulforgery; +import net.minecraft.data.PackOutput; +import net.minecraft.data.recipes.FinishedRecipe; +import net.minecraft.resources.ResourceLocation; +import net.minecraftforge.common.crafting.conditions.IConditionBuilder; +import net.minecraftforge.common.data.ExistingFileHelper; + +import java.util.function.Consumer; + +public class SoulforgeryRecipeGen extends BaseRecipeProvider implements IConditionBuilder +{ + public SoulforgeryRecipeGen(PackOutput output, ExistingFileHelper existingFileHelper) + { + super(output, existingFileHelper, Soulforgery.MODID); + } + + @Override + protected ResourceLocation makeRL(String path) + { + return Soulforgery.rl(path); + } + + @Override + protected void addRecipes(Consumer consumer) + { + } + +} diff --git a/src/datagen/soulforgery/java/leaf/cosmere/soulforgery/SoulforgeryTagProvider.java b/src/datagen/soulforgery/java/leaf/cosmere/soulforgery/SoulforgeryTagProvider.java new file mode 100644 index 000000000..9d8669339 --- /dev/null +++ b/src/datagen/soulforgery/java/leaf/cosmere/soulforgery/SoulforgeryTagProvider.java @@ -0,0 +1,80 @@ +/* + * File updated ~ 8 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.soulforgery; + +import leaf.cosmere.api.providers.IBlockProvider; +import leaf.cosmere.soulforgery.common.Soulforgery; +import leaf.cosmere.soulforgery.common.registries.SoulforgeryBlocks; +import leaf.cosmere.tag.BaseTagProvider; +import net.minecraft.core.HolderLookup; +import net.minecraft.data.PackOutput; +import net.minecraftforge.common.data.ExistingFileHelper; + +import javax.annotation.Nullable; +import java.util.List; +import java.util.concurrent.CompletableFuture; + +public class SoulforgeryTagProvider extends BaseTagProvider +{ + public SoulforgeryTagProvider(PackOutput packOutput, CompletableFuture lookupProvider, @Nullable ExistingFileHelper existingFileHelper) + { + super(packOutput, lookupProvider, Soulforgery.MODID, existingFileHelper); + } + + + @Override + protected List getAllBlocks() + { + return SoulforgeryBlocks.BLOCKS.getAllBlocks(); + } + + + @Override + protected void registerTags(HolderLookup.Provider registries) + { + //getItemBuilder(CosmereTags.Items.CURIO_HEAD).add(Soulforgery.Item.asItem()); + + addItems(); + addBlocks(); + addStorageBlocks(); + addEntityTypes(); + addGameEvents(); + + addContainsMetal(); + } + + + private void addItems() + { + + } + + private void addBlocks() + { + //addToTag(BlockTags.NEEDS_STONE_TOOL, BlocksRegistry.METALWORKING_TABLE); + //addToHarvestTag(BlockTags.MINEABLE_WITH_AXE, BlocksRegistry.METALWORKING_TABLE); + + } + + private void addEntityTypes() + { + //getEntityTypeBuilder(CosmereTags.EntityTypes.CONTAINS_METAL).add(EntityType.IRON_GOLEM); + } + + private void addGameEvents() + { + + } + + private void addStorageBlocks() + { + + } + + private void addContainsMetal() + { + + } +} \ No newline at end of file diff --git a/src/datagen/soulforgery/java/leaf/cosmere/soulforgery/loottables/SoulforgeryBlockLootTableGen.java b/src/datagen/soulforgery/java/leaf/cosmere/soulforgery/loottables/SoulforgeryBlockLootTableGen.java new file mode 100644 index 000000000..e92252f94 --- /dev/null +++ b/src/datagen/soulforgery/java/leaf/cosmere/soulforgery/loottables/SoulforgeryBlockLootTableGen.java @@ -0,0 +1,36 @@ +/* + * File updated ~ 8 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.soulforgery.loottables; + +import leaf.cosmere.api.providers.IBlockProvider; +import leaf.cosmere.loottables.BaseBlockLootTables; +import leaf.cosmere.soulforgery.common.registries.SoulforgeryBlocks; +import net.minecraft.world.level.block.Block; + +public class SoulforgeryBlockLootTableGen extends BaseBlockLootTables +{ + @Override + protected void generate() + { + //first catch any blocks that don't drop self, like ores + for (IBlockProvider itemRegistryObject : SoulforgeryBlocks.BLOCKS.getAllBlocks()) + { + final Block block = itemRegistryObject.getBlock(); + //if (block instanceof MetalOreBlock oreBlock) + //{ + // this.add(oreBlock, (ore) -> createOreDrop(ore, ItemsRegistry.METAL_RAW_ORE.get(oreBlock.getMetalType()))); + //} + } + + //then make the rest drop themselves. + dropSelf(SoulforgeryBlocks.BLOCKS.getAllBlocks()); + } + + @Override + protected Iterable getKnownBlocks() + { + return SoulforgeryBlocks.BLOCKS.getAllBlocks().stream().map(IBlockProvider::getBlock)::iterator; + } +} diff --git a/src/datagen/soulforgery/java/leaf/cosmere/soulforgery/loottables/SoulforgeryLootTableGen.java b/src/datagen/soulforgery/java/leaf/cosmere/soulforgery/loottables/SoulforgeryLootTableGen.java new file mode 100644 index 000000000..ba36004c0 --- /dev/null +++ b/src/datagen/soulforgery/java/leaf/cosmere/soulforgery/loottables/SoulforgeryLootTableGen.java @@ -0,0 +1,22 @@ +/* + * File updated ~ 8 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.soulforgery.loottables; + +import leaf.cosmere.loottables.BaseLootProvider; +import net.minecraft.data.PackOutput; +import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets; + +import java.util.List; + +public class SoulforgeryLootTableGen extends BaseLootProvider +{ + public SoulforgeryLootTableGen(PackOutput packOutput) + { + super(packOutput, List.of( + new SubProviderEntry(SoulforgeryBlockLootTableGen::new, LootContextParamSets.BLOCK) + //,new SubProviderEntry(ExampleEntityLootTableGen::new, LootContextParamSets.ENTITY) + )); + } +} diff --git a/src/datagen/soulforgery/java/leaf/cosmere/soulforgery/patchouli/PatchouliSoulforgeryCategory.java b/src/datagen/soulforgery/java/leaf/cosmere/soulforgery/patchouli/PatchouliSoulforgeryCategory.java new file mode 100644 index 000000000..edfd0b5b2 --- /dev/null +++ b/src/datagen/soulforgery/java/leaf/cosmere/soulforgery/patchouli/PatchouliSoulforgeryCategory.java @@ -0,0 +1,47 @@ +/* + * File updated ~ 30 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.soulforgery.patchouli; + +import leaf.cosmere.patchouli.data.BookStuff; + +import java.util.ArrayList; +import java.util.List; + +public class PatchouliSoulforgeryCategory +{ + public static void collect(List categories, List entries) + { + BookStuff.Category soulforgery = new BookStuff.Category( + "soulforgery", + "Soulforgery description that says some stuff.", + "minecraft:paper"); + soulforgery.sortnum = 99; + soulforgery.secret = true; + categories.add(soulforgery); + + //Start a page list. + List pages = new ArrayList<>(); + + //soulforgery basics entry + { + BookStuff.Entry entry = new BookStuff.Entry("soulforgery_basics", soulforgery, soulforgery.icon).setDisplayTitle("Soulforgery (For Dummies)"); + entry.priority = true; + + + BookStuff.Page terminologyPage = new BookStuff.TextPage(); + terminologyPage.setTitle("Terminology"); + terminologyPage.setText( + "In this journal, I shall explain all I have discovered about Soulforgery. $(br)" + + "Firstly, some terminology:"); + pages.add(terminologyPage); + + + entry.pages = pages.toArray(BookStuff.Page[]::new); + pages.clear(); + entries.add(entry); + } + + } +} diff --git a/src/datagen/soulforgery/java/leaf/cosmere/soulforgery/patchouli/SoulforgeryPatchouliGen.java b/src/datagen/soulforgery/java/leaf/cosmere/soulforgery/patchouli/SoulforgeryPatchouliGen.java new file mode 100644 index 000000000..0468a492f --- /dev/null +++ b/src/datagen/soulforgery/java/leaf/cosmere/soulforgery/patchouli/SoulforgeryPatchouliGen.java @@ -0,0 +1,40 @@ +/* + * File updated ~ 9 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.soulforgery.patchouli; + +import leaf.cosmere.api.CosmereAPI; +import leaf.cosmere.patchouli.data.PatchouliProvider; +import leaf.cosmere.soulforgery.common.Soulforgery; +import net.minecraft.data.PackOutput; + +// +// In-Game Documentation generator +// +public class SoulforgeryPatchouliGen extends PatchouliProvider +{ + public SoulforgeryPatchouliGen(PackOutput generatorIn) + { + super(generatorIn, CosmereAPI.COSMERE_MODID); + } + + @Override + protected void collectInfoForBook() + { + PatchouliSoulforgeryCategory.collect(this.categories, this.entries); + } + + /** + * Gets a name for this provider, to use in logging. + */ + public String getName() + { + return "Soulforgery PatchouliGeneration"; + } + + +} + + + diff --git a/src/datagen/surgebinding/java/leaf/cosmere/surgebinding/SurgebindingBlockModelsGen.java b/src/datagen/surgebinding/java/leaf/cosmere/surgebinding/SurgebindingBlockModelsGen.java new file mode 100644 index 000000000..0469e90d7 --- /dev/null +++ b/src/datagen/surgebinding/java/leaf/cosmere/surgebinding/SurgebindingBlockModelsGen.java @@ -0,0 +1,80 @@ +/* + * File updated ~ 8 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.surgebinding; + +import leaf.cosmere.api.helpers.RegistryHelper; +import leaf.cosmere.api.providers.IBlockProvider; +import leaf.cosmere.common.Cosmere; +import leaf.cosmere.surgebinding.common.Surgebinding; +import leaf.cosmere.surgebinding.common.blocks.*; +import leaf.cosmere.surgebinding.common.registries.SurgebindingBlocks; +import net.minecraft.data.PackOutput; +import net.minecraft.world.level.block.Block; +import net.minecraftforge.client.model.generators.BlockStateProvider; +import net.minecraftforge.client.model.generators.ModelFile; +import net.minecraftforge.common.data.ExistingFileHelper; + +import java.util.function.Supplier; + +public class SurgebindingBlockModelsGen extends BlockStateProvider +{ + public SurgebindingBlockModelsGen(PackOutput generator, ExistingFileHelper existingFileHelper) + { + super(generator, Surgebinding.MODID, existingFileHelper); + } + + @Override + protected void registerStatesAndModels() + { + for (IBlockProvider itemRegistryObject : SurgebindingBlocks.BLOCKS.getAllBlocks()) + { + final Block block = itemRegistryObject.getBlock(); + if (block instanceof GemBlock) + { + ModelFile blockModel = models().withExistingParent("gem_block", Cosmere.rl("block/shapes/cube_all_tinted")) + .texture("all", Surgebinding.rl("block/gem_block")); + + simpleBlock(block, blockModel); + continue; + } + else if (block instanceof GemOreBlock) + { + //Special thanks to @Random & @sciwhiz12 on discord who helped me get these running + //To get the overlay working, you need to tell the blocks they have transparency, which I've donne in the ClientSetup script. + final boolean deepslate = RegistryHelper.get(block).getPath().contains("deepslate"); + + final String stoneType = deepslate ? "block/gem_ore_block_deepslate" : "block/gem_ore_block"; + final String stoneFileName = deepslate ? "gem_ore_block_deepslate" : "gem_ore_block"; + + ModelFile blockModel = models().withExistingParent(stoneFileName, Cosmere.rl("block/shapes/cube_with_tint_overlay")) + .texture("all", Surgebinding.rl(stoneType)) + .texture("overlay", Surgebinding.rl("block/gem_ore_block_tint_overlay")); + + simpleBlock(block, blockModel); + continue; + } + else if (block instanceof LavisPolypBlock || block instanceof PrickletacBlock || block instanceof RockbudVariantBlock || block instanceof VinebudBlock) + { + continue; + } + + simpleBlock(itemRegistryObject.getBlock()); + } + + } + + public void simpleBlock(Supplier blockSupplier) + { + simpleBlock(blockSupplier.get()); + } + + + @Override + public void simpleBlock(Block block, ModelFile model) + { + super.simpleBlock(block, model); + this.simpleBlockItem(block, model); + } +} \ No newline at end of file diff --git a/src/datagen/surgebinding/java/leaf/cosmere/surgebinding/SurgebindingDataGenerator.java b/src/datagen/surgebinding/java/leaf/cosmere/surgebinding/SurgebindingDataGenerator.java new file mode 100644 index 000000000..9723238fd --- /dev/null +++ b/src/datagen/surgebinding/java/leaf/cosmere/surgebinding/SurgebindingDataGenerator.java @@ -0,0 +1,47 @@ +/* + * File updated ~ 10 - 1 - 2025 ~ Leaf + */ + +package leaf.cosmere.surgebinding; + +import leaf.cosmere.surgebinding.common.Surgebinding; +import leaf.cosmere.surgebinding.common.registries.SurgebindingBiomes; +import leaf.cosmere.surgebinding.loottables.SurgebindingLootTableGen; +import leaf.cosmere.surgebinding.patchouli.SurgebindingPatchouliGen; +import net.minecraft.core.RegistrySetBuilder; +import net.minecraft.core.registries.Registries; +import net.minecraft.data.DataGenerator; +import net.minecraft.data.PackOutput; +import net.minecraftforge.common.data.ExistingFileHelper; +import net.minecraftforge.data.event.GatherDataEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod.EventBusSubscriber; +import net.minecraftforge.fml.common.Mod.EventBusSubscriber.Bus; + +@EventBusSubscriber(modid = Surgebinding.MODID, bus = Bus.MOD) +public class SurgebindingDataGenerator +{ + private static final RegistrySetBuilder BUILDER = new RegistrySetBuilder() + .add(Registries.BIOME, SurgebindingBiomes::bootstrapBiomes); + + @SubscribeEvent + public static void gatherData(GatherDataEvent event) + { + DataGenerator generator = event.getGenerator(); + PackOutput packOutput = generator.getPackOutput(); + ExistingFileHelper existingFileHelper = event.getExistingFileHelper(); + + + generator.addProvider(true, new SurgebindingEngLangGen(packOutput)); + + generator.addProvider(true, new SurgebindingTagsProvider(packOutput, event.getLookupProvider(), existingFileHelper)); + + generator.addProvider(true, new SurgebindingItemModelsGen(packOutput, existingFileHelper)); + generator.addProvider(true, new SurgebindingBlockModelsGen(packOutput, existingFileHelper)); + generator.addProvider(true, new SurgebindingLootTableGen(packOutput)); + generator.addProvider(true, new SurgebindingRecipeGen(packOutput, existingFileHelper)); + + generator.addProvider(true, new SurgebindingPatchouliGen(packOutput)); + } + +} \ No newline at end of file diff --git a/src/datagen/surgebinding/java/leaf/cosmere/surgebinding/SurgebindingEngLangGen.java b/src/datagen/surgebinding/java/leaf/cosmere/surgebinding/SurgebindingEngLangGen.java new file mode 100644 index 000000000..eb38da191 --- /dev/null +++ b/src/datagen/surgebinding/java/leaf/cosmere/surgebinding/SurgebindingEngLangGen.java @@ -0,0 +1,184 @@ +/* + * File updated ~ 10 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.surgebinding; + +import leaf.cosmere.api.Manifestations; +import leaf.cosmere.api.helpers.RegistryHelper; +import leaf.cosmere.api.manifestation.Manifestation; +import leaf.cosmere.api.providers.IAttributeProvider; +import leaf.cosmere.api.providers.IEntityTypeProvider; +import leaf.cosmere.api.text.StringHelper; +import leaf.cosmere.common.registration.impl.ManifestationRegistryObject; +import leaf.cosmere.surgebinding.common.Surgebinding; +import leaf.cosmere.surgebinding.common.registries.SurgebindingAttributes; +import leaf.cosmere.surgebinding.common.registries.SurgebindingEntityTypes; +import leaf.cosmere.surgebinding.common.registries.SurgebindingManifestations; +import net.minecraft.data.PackOutput; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.Item; +import net.minecraftforge.common.data.LanguageProvider; +import net.minecraftforge.registries.ForgeRegistries; + +import static leaf.cosmere.api.Constants.Strings.KEY_SHARDBLADE; +import static leaf.cosmere.surgebinding.common.registries.SurgebindingAttributes.SURGEBINDING_ATTRIBUTES; + +public class SurgebindingEngLangGen extends LanguageProvider +{ + final String advancementTitleFormat = "advancements.surgebinding.%s.title"; + final String advancementDescriptionFormat = "advancements.surgebinding.%s.description"; + + public SurgebindingEngLangGen(PackOutput output) + { + super(output, Surgebinding.MODID, "en_us"); + } + + @Override + protected void addTranslations() + { + addItemsAndBlocks(); + addEntities(); + addAdvancements(); + addManifestations(); + addAttributes(); + addPatchouli(); + addCreativeTabs(); + addTooltips(); + addDamageSources(); + addMobEffects(); + addCurioIdentifiers(); + addConfigs(); + addCommands(); + addKeybindings(); + addStats(); + + } + + + private void addItemsAndBlocks() + { + //Items and Blocks + for (Item item : ForgeRegistries.ITEMS.getValues()) + { + final ResourceLocation registryName = RegistryHelper.get(item); + if (registryName.getNamespace().contentEquals(Surgebinding.MODID)) + { + String localisedString = StringHelper.fixCapitalisation(registryName.getPath()); + add(item.getDescriptionId(), localisedString); + } + } + + } + + private void addEntities() + { + for (IEntityTypeProvider type : SurgebindingEntityTypes.ENTITY_TYPES.getAllEntityTypes()) + { + final ResourceLocation id = type.getRegistryName(); + add(type.getEntityType().getDescriptionId(), StringHelper.fixCapitalisation(id.getPath())); + } + } + + private void addAdvancements() + { + Manifestations.ManifestationTypes value = Manifestations.ManifestationTypes.SURGEBINDING; + { + add(String.format(advancementTitleFormat, value.getName()), StringHelper.fixCapitalisation(value.getName())); + add(String.format(advancementDescriptionFormat, value.getName()), "Test description: " + StringHelper.fixCapitalisation(value.getName())); + } + } + + private void addManifestations() + { + for (ManifestationRegistryObject manifestationRegistryObject : SurgebindingManifestations.SURGEBINDING_POWERS.values()) + { + Manifestation manifestation = manifestationRegistryObject.getManifestation(); + + //power type + String key = manifestation.getTranslationKey(); + String name = manifestation.getName(); + + //description + String description = "Needs description"; + + String tabName = manifestation.getManifestationType().getName(); + + add(String.format(advancementTitleFormat, tabName + "." + name), StringHelper.fixCapitalisation(name)); + add(String.format(advancementDescriptionFormat, tabName + "." + name), "Test description: " + StringHelper.fixCapitalisation(name)); + + //Name + add(key, StringHelper.fixCapitalisation(name)); + + //todo decide about manifestation descriptions? + final ResourceLocation regName = manifestation.getRegistryName(); + add("manifestation." + regName.getNamespace() + "." + regName.getPath() + ".description", description); + } + + } + + private void addAttributes() + { + //Attributes + SURGEBINDING_ATTRIBUTES.forEach((surgeType, registryObject) -> + { + final String descriptionId = registryObject.getAttribute().getDescriptionId(); + + String name = "Surge of " + StringHelper.fixCapitalisation(surgeType.getName()); + // Attributes are the powers themselves, they need their own names. + add(descriptionId, name); + }); + } + + private void addPatchouli() + { + //todo surgebinding patchouli localisation + } + + + private void addCreativeTabs() + { + //ItemGroups/Tabs + add("tabs.surgebinding.items", "Surgebinding"); + + } + + private void addTooltips() + { + + } + + private void addDamageSources() + { + } + + private void addMobEffects() + { + + } + + private void addCurioIdentifiers() + { + + } + + private void addConfigs() + { + + } + + private void addCommands() + { + + } + + private void addKeybindings() + { + add(KEY_SHARDBLADE, "Summon/Dismiss Shardblade"); + } + + private void addStats() + { + + } +} diff --git a/src/datagen/surgebinding/java/leaf/cosmere/surgebinding/SurgebindingItemModelsGen.java b/src/datagen/surgebinding/java/leaf/cosmere/surgebinding/SurgebindingItemModelsGen.java new file mode 100644 index 000000000..cee38f849 --- /dev/null +++ b/src/datagen/surgebinding/java/leaf/cosmere/surgebinding/SurgebindingItemModelsGen.java @@ -0,0 +1,80 @@ +/* + * File updated ~ 8 - 11 - 2025 ~ Leaf + */ + +package leaf.cosmere.surgebinding; + +import leaf.cosmere.api.helpers.RegistryHelper; +import leaf.cosmere.api.providers.IItemProvider; +import leaf.cosmere.surgebinding.common.Surgebinding; +import leaf.cosmere.surgebinding.common.items.ShardbladeItem; +import leaf.cosmere.surgebinding.common.registries.SurgebindingItems; +import net.minecraft.data.PackOutput; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.BlockItem; +import net.minecraft.world.item.Item; +import net.minecraftforge.client.model.generators.ItemModelBuilder; +import net.minecraftforge.client.model.generators.ItemModelProvider; +import net.minecraftforge.client.model.generators.ModelFile; +import net.minecraftforge.common.ForgeSpawnEggItem; +import net.minecraftforge.common.data.ExistingFileHelper; + +import java.util.function.Supplier; + +public class SurgebindingItemModelsGen extends ItemModelProvider +{ + + public SurgebindingItemModelsGen(PackOutput generator, ExistingFileHelper existingFileHelper) + { + super(generator, Surgebinding.MODID, existingFileHelper); + } + + @Override + protected void registerModels() + { + for (IItemProvider itemRegistryObject : SurgebindingItems.ITEMS.getAllItems()) + { + String path = itemRegistryObject.getRegistryName().getPath(); + Item item = itemRegistryObject.asItem(); + + //blocks have their own model rules + if (item instanceof BlockItem) + { + continue; + } + if (item instanceof ForgeSpawnEggItem) + { + getBuilder(item.toString()).parent(new ModelFile.UncheckedModelFile("item/template_spawn_egg")); + continue; + } + //otherwise set specific textures based on these item types + else if (item instanceof ShardbladeItem) + { + /*if (item instanceof HonorbladeItem honorbladeItem) + { + this.getBuilder(path) + .parent(new ModelFile.UncheckedModelFile("cosmere:item/test_blade")); + }*/ + + continue; + } + + //else normal item texture rules apply + simpleItem(path, path); + } + + } + + public String getPath(Supplier itemSupplier) + { + ResourceLocation location = RegistryHelper.get(itemSupplier.get()); + return location.getPath(); + } + + public ItemModelBuilder simpleItem(String path, String texturePath) + { + return this.getBuilder(path) + .parent(new ModelFile.UncheckedModelFile("item/generated")) + .texture("layer0", modLoc("item/" + texturePath)); + } +} \ No newline at end of file diff --git a/src/datagen/surgebinding/java/leaf/cosmere/surgebinding/SurgebindingRecipeGen.java b/src/datagen/surgebinding/java/leaf/cosmere/surgebinding/SurgebindingRecipeGen.java new file mode 100644 index 000000000..3da826d33 --- /dev/null +++ b/src/datagen/surgebinding/java/leaf/cosmere/surgebinding/SurgebindingRecipeGen.java @@ -0,0 +1,48 @@ +/* + * File updated ~ 4 - 1 - 2025 ~ Leaf + */ + +package leaf.cosmere.surgebinding; + +import leaf.cosmere.BaseRecipeProvider; +import leaf.cosmere.api.CosmereTags; +import leaf.cosmere.api.EnumUtils; +import leaf.cosmere.api.Roshar; +import leaf.cosmere.surgebinding.common.Surgebinding; +import leaf.cosmere.surgebinding.common.registries.SurgebindingBlocks; +import leaf.cosmere.surgebinding.common.registries.SurgebindingItems; +import net.minecraft.data.PackOutput; +import net.minecraft.data.recipes.FinishedRecipe; +import net.minecraft.resources.ResourceLocation; +import net.minecraftforge.common.crafting.conditions.IConditionBuilder; +import net.minecraftforge.common.data.ExistingFileHelper; + +import java.util.function.Consumer; + +public class SurgebindingRecipeGen extends BaseRecipeProvider implements IConditionBuilder +{ + public SurgebindingRecipeGen(PackOutput output, ExistingFileHelper existingFileHelper) + { + super(output, existingFileHelper, Surgebinding.MODID); + } + + @Override + protected ResourceLocation makeRL(String path) + { + return Surgebinding.rl(path); + } + + @Override + protected void addRecipes(Consumer consumer) + { + for (Roshar.Gemstone gemstone : EnumUtils.GEMSTONE_TYPES) + { + compressRecipe(SurgebindingBlocks.GEM_BLOCKS.get(gemstone).getBlock(), CosmereTags.Items.GEM_TAGS.get(gemstone), SurgebindingItems.GEMSTONE_BROAMS.get(gemstone)).save(consumer); + decompressRecipe(consumer, SurgebindingItems.GEMSTONE_BROAMS.get(gemstone).get(), SurgebindingBlocks.GEM_BLOCKS.get(gemstone), gemstone.getName() + "_block_deconstruct"); + + //ores no longer obtained from blocks? + //addOreSmeltingRecipes(consumer, SurgebindingBlocks.GEM_ORE.get(gemstone).getBlock(), SurgebindingItems.GEMSTONE_MARKS.get(gemstone).get(), 1.0f, 1000); + //addOreSmeltingRecipes(consumer, SurgebindingBlocks.GEM_ORE_DEEPSLATE.get(gemstone).getBlock(), SurgebindingItems.GEMSTONE_BROAMS.get(gemstone).get(), 1.0f, 1000); + } + } +} diff --git a/src/datagen/surgebinding/java/leaf/cosmere/surgebinding/SurgebindingTagsProvider.java b/src/datagen/surgebinding/java/leaf/cosmere/surgebinding/SurgebindingTagsProvider.java new file mode 100644 index 000000000..a623c1a87 --- /dev/null +++ b/src/datagen/surgebinding/java/leaf/cosmere/surgebinding/SurgebindingTagsProvider.java @@ -0,0 +1,146 @@ +/* + * File updated ~ 20 - 11 - 2024 ~ Leaf + */ + +package leaf.cosmere.surgebinding; + +import com.google.common.collect.ImmutableList; +import leaf.cosmere.api.CosmereTags; +import leaf.cosmere.api.EnumUtils; +import leaf.cosmere.api.Roshar; +import leaf.cosmere.api.providers.IBlockProvider; +import leaf.cosmere.common.registration.impl.BlockRegistryObject; +import leaf.cosmere.common.registration.impl.ItemRegistryObject; +import leaf.cosmere.surgebinding.common.Surgebinding; +import leaf.cosmere.surgebinding.common.blocks.GemBlock; +import leaf.cosmere.surgebinding.common.items.GemstoneItem; +import leaf.cosmere.surgebinding.common.registries.SurgebindingBiomes; +import leaf.cosmere.surgebinding.common.registries.SurgebindingBlocks; +import leaf.cosmere.surgebinding.common.registries.SurgebindingItems; +import leaf.cosmere.tag.BaseTagProvider; +import leaf.cosmere.tag.IntrinsicCosmereTagBuilder; +import net.minecraft.core.HolderLookup; +import net.minecraft.data.PackOutput; +import net.minecraft.tags.BlockTags; +import net.minecraft.tags.TagKey; +import net.minecraft.world.item.BlockItem; +import net.minecraft.world.item.Item; +import net.minecraft.world.level.block.Block; +import net.minecraftforge.common.Tags; +import net.minecraftforge.common.data.ExistingFileHelper; + +import javax.annotation.Nullable; +import java.util.List; +import java.util.concurrent.CompletableFuture; + +public class SurgebindingTagsProvider extends BaseTagProvider +{ + public SurgebindingTagsProvider(PackOutput packOutput, CompletableFuture lookupProvider, @Nullable ExistingFileHelper existingFileHelper) + { + super(packOutput, lookupProvider, Surgebinding.MODID, existingFileHelper); + } + + @Override + protected List getAllBlocks() + { + return SurgebindingBlocks.BLOCKS.getAllBlocks(); + } + + @Override + protected void registerTags(HolderLookup.Provider registries) + { + addItems(); + addBlocks(); + addStorageBlocks(); + addEntityTypes(); + addGameEvents(); + addBiomes(); + + addContainsMetal(); + } + + private void addItems() + { + for (Roshar.Gemstone gemstone : EnumUtils.GEMSTONE_TYPES) + { + final ItemRegistryObject broamItem = SurgebindingItems.GEMSTONE_BROAMS.get(gemstone); + + addToTag(Tags.Items.GEMS, broamItem); + addToTag(Tags.Items.GEMS, SurgebindingItems.GEMSTONE_MARKS.get(gemstone)); + addToTag(Tags.Items.GEMS, SurgebindingItems.GEMSTONE_CHIPS.get(gemstone)); + + //and let our full sized gems be usable for other recipes + addToTag(CosmereTags.Items.GEM_TAGS.get(gemstone), broamItem); + } + } + + private void addBlocks() + { + for (Roshar.Gemstone gemstone : EnumUtils.GEMSTONE_TYPES) + { + final BlockRegistryObject gemBlock = SurgebindingBlocks.GEM_BLOCKS.get(gemstone); + //final BlockRegistryObject gemOre = SurgebindingBlocks.GEM_ORE.get(gemstone); + //final BlockRegistryObject gemOreDeepslate = SurgebindingBlocks.GEM_ORE_DEEPSLATE.get(gemstone); + + var list = ImmutableList.of(gemBlock);//, gemOre, gemOreDeepslate); + + for (var block : list) + { + addToTag(CosmereTags.Blocks.DRAGON_PROOF, block); + addToHarvestTag(BlockTags.MINEABLE_WITH_PICKAXE, block); + addToTag(BlockTags.NEEDS_IRON_TOOL, block); + } + + addToTag(BlockTags.BEACON_BASE_BLOCKS, gemBlock); + //addToTag(CosmereTags.Blocks.GEM_ORE_BLOCK_TAGS.get(gemstone), gemOre, gemOreDeepslate); + } + + for (BlockRegistryObject plantBlock : SurgebindingBlocks.PLANT_BLOCKS) + { + addToHarvestTag(BlockTags.MINEABLE_WITH_AXE, plantBlock); + addToHarvestTag(BlockTags.MINEABLE_WITH_PICKAXE, plantBlock); + addToHarvestTag(BlockTags.MINEABLE_WITH_SHOVEL, plantBlock); + } + } + + private void addStorageBlocks() + { + final IntrinsicCosmereTagBuilder itemBuilder = getItemBuilder(Tags.Items.STORAGE_BLOCKS); + final IntrinsicCosmereTagBuilder blockBuilder = getBlockBuilder(Tags.Blocks.STORAGE_BLOCKS); + + for (Roshar.Gemstone gemstone : EnumUtils.GEMSTONE_TYPES) + { + final TagKey storageBlockItemTag = CosmereTags.Items.GEM_BLOCK_ITEM_TAGS.get(gemstone); + final TagKey storageBlockTag = CosmereTags.Blocks.GEM_BLOCK_TAGS.get(gemstone); + final BlockRegistryObject blockRegistryObject = SurgebindingBlocks.GEM_BLOCKS.get(gemstone); + + addToTags(storageBlockItemTag, storageBlockTag, blockRegistryObject); + + itemBuilder.add(storageBlockItemTag); + blockBuilder.add(storageBlockTag); + } + } + + private void addEntityTypes() + { + //getEntityTypeBuilder(CosmereTags.EntityTypes.CONTAINS_METAL).add(EntityType.IRON_GOLEM); + } + + private void addGameEvents() + { + + } + + private void addBiomes() + { + getBiomeBuilder(CosmereTags.Biomes.SPAWN_ORES).add(CosmereTags.Biomes.IS_ROSHAR); + + getBiomeBuilder(CosmereTags.Biomes.IS_ROSHAR).add(SurgebindingBiomes.ROSHAR_BIOME_KEY); + } + + + private void addContainsMetal() + { + + } +} \ No newline at end of file diff --git a/src/datagen/surgebinding/java/leaf/cosmere/surgebinding/loottables/SurgebindingBlockLootTableGen.java b/src/datagen/surgebinding/java/leaf/cosmere/surgebinding/loottables/SurgebindingBlockLootTableGen.java new file mode 100644 index 000000000..007c9fcef --- /dev/null +++ b/src/datagen/surgebinding/java/leaf/cosmere/surgebinding/loottables/SurgebindingBlockLootTableGen.java @@ -0,0 +1,33 @@ +/* + * File updated ~ 8 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.surgebinding.loottables; + +import leaf.cosmere.api.providers.IBlockProvider; +import leaf.cosmere.common.registry.BlocksRegistry; +import leaf.cosmere.loottables.BaseBlockLootTables; +import leaf.cosmere.surgebinding.common.blocks.GemOreBlock; +import leaf.cosmere.surgebinding.common.registries.SurgebindingBlocks; +import leaf.cosmere.surgebinding.common.registries.SurgebindingItems; +import net.minecraft.world.level.block.Block; + +public class SurgebindingBlockLootTableGen extends BaseBlockLootTables +{ + @Override + protected void generate() + { + //first catch any blocks that don't drop self, like ores + for (IBlockProvider itemRegistryObject : SurgebindingBlocks.BLOCKS.getAllBlocks()) + { + final Block block = itemRegistryObject.getBlock(); + if (block instanceof GemOreBlock oreBlock) + { + this.add(oreBlock, (ore) -> createOreDrop(ore, SurgebindingItems.GEMSTONE_CHIPS.get(oreBlock.getGemType()))); + } + } + + //then make the rest drop themselves. + dropSelf(SurgebindingBlocks.BLOCKS.getAllBlocks()); + } +} diff --git a/src/datagen/surgebinding/java/leaf/cosmere/surgebinding/loottables/SurgebindingEntityLootTableGen.java b/src/datagen/surgebinding/java/leaf/cosmere/surgebinding/loottables/SurgebindingEntityLootTableGen.java new file mode 100644 index 000000000..e593cfa31 --- /dev/null +++ b/src/datagen/surgebinding/java/leaf/cosmere/surgebinding/loottables/SurgebindingEntityLootTableGen.java @@ -0,0 +1,59 @@ +/* + * File updated ~ 8 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.surgebinding.loottables; + +import leaf.cosmere.api.EnumUtils; +import leaf.cosmere.loottables.BaseEntityLootTables; +import leaf.cosmere.surgebinding.common.registries.SurgebindingEntityTypes; +import leaf.cosmere.surgebinding.common.registries.SurgebindingItems; +import net.minecraft.world.level.storage.loot.LootPool; +import net.minecraft.world.level.storage.loot.LootTable; +import net.minecraft.world.level.storage.loot.entries.LootItem; +import net.minecraft.world.level.storage.loot.functions.LootingEnchantFunction; +import net.minecraft.world.level.storage.loot.functions.SetItemCountFunction; +import net.minecraft.world.level.storage.loot.predicates.LootItemKilledByPlayerCondition; +import net.minecraft.world.level.storage.loot.predicates.LootItemRandomChanceWithLootingCondition; +import net.minecraft.world.level.storage.loot.providers.number.ConstantValue; +import net.minecraft.world.level.storage.loot.providers.number.UniformGenerator; + +public class SurgebindingEntityLootTableGen extends BaseEntityLootTables +{ + + @Override + public void generate() + { + final LootPool.Builder lootPool = LootPool.lootPool() + .name("gems") + .setRolls(ConstantValue.exactly(1)) + .when(LootItemKilledByPlayerCondition.killedByPlayer()) + .when(LootItemRandomChanceWithLootingCondition.randomChanceAndLootingBoost(0.1F, 0.05F)); + + //gems aren't guaranteed to drop, generally. + //The concept that the gems may be damaged while fighting or harvesting. + for (var gemType : EnumUtils.GEMSTONE_TYPES) + { + lootPool.add( + LootItem.lootTableItem(SurgebindingItems.GEMSTONE_BROAMS.get(gemType)) + .apply(SetItemCountFunction.setCount(UniformGenerator.between(-1.0F, 1.0F))) + ); + lootPool.add( + LootItem.lootTableItem(SurgebindingItems.GEMSTONE_MARKS.get(gemType)) + .apply(SetItemCountFunction.setCount(UniformGenerator.between(-1.0F, 2.0F))) + .apply(LootingEnchantFunction.lootingMultiplier(UniformGenerator.between(0.0F, 1.0F))) + ); + //chips are small enough that surely you'll get at least some + lootPool.add( + LootItem.lootTableItem(SurgebindingItems.GEMSTONE_CHIPS.get(gemType)) + .apply(SetItemCountFunction.setCount(UniformGenerator.between(1.0F, 3.0F))) + .apply(LootingEnchantFunction.lootingMultiplier(UniformGenerator.between(0.0F, 1.0F))) + ); + } + + add( + SurgebindingEntityTypes.CHULL, + LootTable.lootTable().withPool(lootPool) + ); + } +} \ No newline at end of file diff --git a/src/datagen/surgebinding/java/leaf/cosmere/surgebinding/loottables/SurgebindingLootTableGen.java b/src/datagen/surgebinding/java/leaf/cosmere/surgebinding/loottables/SurgebindingLootTableGen.java new file mode 100644 index 000000000..11a3017a9 --- /dev/null +++ b/src/datagen/surgebinding/java/leaf/cosmere/surgebinding/loottables/SurgebindingLootTableGen.java @@ -0,0 +1,22 @@ +/* + * File updated ~ 8 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.surgebinding.loottables; + +import leaf.cosmere.loottables.BaseLootProvider; +import net.minecraft.data.PackOutput; +import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets; + +import java.util.List; + +public class SurgebindingLootTableGen extends BaseLootProvider +{ + public SurgebindingLootTableGen(PackOutput output) + { + super(output, List.of( + new SubProviderEntry(SurgebindingBlockLootTableGen::new, LootContextParamSets.BLOCK), + new SubProviderEntry(SurgebindingEntityLootTableGen::new, LootContextParamSets.ENTITY) + )); + } +} diff --git a/src/datagen/surgebinding/java/leaf/cosmere/surgebinding/patchouli/PatchouliSurgebindingCategory.java b/src/datagen/surgebinding/java/leaf/cosmere/surgebinding/patchouli/PatchouliSurgebindingCategory.java new file mode 100644 index 000000000..6eef68601 --- /dev/null +++ b/src/datagen/surgebinding/java/leaf/cosmere/surgebinding/patchouli/PatchouliSurgebindingCategory.java @@ -0,0 +1,40 @@ +/* + * File updated ~ 2 - 10 - 2023 ~ Leaf + */ + +package leaf.cosmere.surgebinding.patchouli; + +import leaf.cosmere.patchouli.data.BookStuff; + +import java.util.ArrayList; +import java.util.List; + +public class PatchouliSurgebindingCategory +{ + public static void collect(List categories, List entries) + { + BookStuff.Category surgebindingCategory = new BookStuff.Category( + "surgebinding", + "The Children of Honor must once again speak the ancient oaths. The Knights Radiant have returned. (WIP)", + "surgebinding:amethyst_broam"); + surgebindingCategory.sortnum = 5; + categories.add(surgebindingCategory); + + List pages = new ArrayList<>(); + + BookStuff.Entry surgebindingBasics = new BookStuff.Entry("surgebinding_basics", surgebindingCategory, surgebindingCategory.icon); + surgebindingBasics.priority = true; + pages.add(new BookStuff.TextPage("One who enters a Nahel Bond with a spren will gain the surgebinding abilities of their specific order. (WIP)", surgebindingCategory.icon)); + + + surgebindingBasics.pages = pages.toArray(BookStuff.Page[]::new); + entries.add(surgebindingBasics); + pages.clear(); + + BookStuff.Entry chullEntry = new BookStuff.Entry("chull", surgebindingCategory, surgebindingCategory.icon); + pages.add(new BookStuff.TextPage("Chull exist, but don't do much as of yet. They are adorable though. (WIP)", surgebindingCategory.icon)); + pages.add(new BookStuff.EntityPage("Look how cute they are!", "Chull", "surgebinding:chull")); + chullEntry.pages = pages.toArray(BookStuff.Page[]::new); + entries.add(chullEntry); + } +} diff --git a/src/datagen/surgebinding/java/leaf/cosmere/surgebinding/patchouli/SurgebindingPatchouliGen.java b/src/datagen/surgebinding/java/leaf/cosmere/surgebinding/patchouli/SurgebindingPatchouliGen.java new file mode 100644 index 000000000..9cdc51508 --- /dev/null +++ b/src/datagen/surgebinding/java/leaf/cosmere/surgebinding/patchouli/SurgebindingPatchouliGen.java @@ -0,0 +1,60 @@ +/* + * File updated ~ 9 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.surgebinding.patchouli; + +import leaf.cosmere.api.CosmereAPI; +import leaf.cosmere.patchouli.data.PatchouliProvider; +import leaf.cosmere.surgebinding.common.Surgebinding; +import net.minecraft.data.PackOutput; + +// +// In-Game Documentation generator +// +public class SurgebindingPatchouliGen extends PatchouliProvider +{ + public SurgebindingPatchouliGen(PackOutput generatorIn) + { + super(generatorIn, CosmereAPI.COSMERE_MODID); + } + + @Override + protected void collectInfoForBook() + { + //dynamically figure out all the things we wanna generate categories/entries for? + //------------------------------------------// + // Categories // + //------------------------------------------// + // - Basics // + // - Manifestations (parent category?) // + // - Feruchemy // + // - Allomancy // + // - Hemalurgy // + // - Curios // + // - Machines ? // + // - Challenges ? // + // - // + // - // + // - // + // - // + // - // + //------------------------------------------// + + PatchouliSurgebindingCategory.collect(this.categories, this.entries); + + + } + + /** + * Gets a name for this provider, to use in logging. + */ + public String getName() + { + return "Surgebinding PatchouliGeneration"; + } + +} + + + diff --git a/src/example/java/leaf/cosmere/example/client/ExampleForgeClientEvents.java b/src/example/java/leaf/cosmere/example/client/ExampleForgeClientEvents.java new file mode 100644 index 000000000..3f4caab90 --- /dev/null +++ b/src/example/java/leaf/cosmere/example/client/ExampleForgeClientEvents.java @@ -0,0 +1,15 @@ +/* + * File updated ~ 22 - 3 - 2024 ~ Leaf + */ + +package leaf.cosmere.example.client; + +import leaf.cosmere.example.common.Example; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.fml.common.Mod; + +@Mod.EventBusSubscriber(modid = Example.MODID, value = Dist.CLIENT) +public class ExampleForgeClientEvents +{ + +} diff --git a/src/example/java/leaf/cosmere/example/client/ExampleKeybindings.java b/src/example/java/leaf/cosmere/example/client/ExampleKeybindings.java new file mode 100644 index 000000000..7fda794e4 --- /dev/null +++ b/src/example/java/leaf/cosmere/example/client/ExampleKeybindings.java @@ -0,0 +1,35 @@ +/* + * File updated ~ 19 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.example.client; + +import com.mojang.blaze3d.platform.InputConstants; +import leaf.cosmere.client.settings.KeyConflictContext; +import leaf.cosmere.example.common.Example; +import net.minecraft.client.KeyMapping; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.client.event.RegisterKeyMappingsEvent; +import net.minecraftforge.client.settings.KeyModifier; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.common.Mod.EventBusSubscriber.Bus; + +@Mod.EventBusSubscriber(value = Dist.CLIENT, modid = Example.MODID, bus = Bus.MOD) +public class ExampleKeybindings +{ + + //public static KeyMapping EXAMPLE_KEYBINDING; + + @SubscribeEvent + public static void register(RegisterKeyMappingsEvent event) + { + //event.register((EXAMPLE_KEYBINDING = new KeyMapping("name", GLFW.GLFW_KEY_G, KEYS_CATEGORY))); + + } + + public static KeyMapping createKeybinding(String description, KeyModifier keyModifier, int keyCode, String category) + { + return new KeyMapping(description, KeyConflictContext.DEFAULT, keyModifier, InputConstants.Type.KEYSYM.getOrCreate(keyCode), category); + } +} diff --git a/src/example/java/leaf/cosmere/example/client/ExampleModClientEvents.java b/src/example/java/leaf/cosmere/example/client/ExampleModClientEvents.java new file mode 100644 index 000000000..298c3bcf1 --- /dev/null +++ b/src/example/java/leaf/cosmere/example/client/ExampleModClientEvents.java @@ -0,0 +1,45 @@ +/* + * File updated ~ 7 - 8 - 2024 ~ Leaf + */ + +package leaf.cosmere.example.client; + +import leaf.cosmere.api.CosmereAPI; +import leaf.cosmere.example.client.render.ExampleRenderers; +import leaf.cosmere.example.common.Example; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.client.event.EntityRenderersEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; + +@Mod.EventBusSubscriber(modid = Example.MODID, value = Dist.CLIENT, bus = Mod.EventBusSubscriber.Bus.MOD) +public class ExampleModClientEvents +{ + @SubscribeEvent + public static void init(final FMLClientSetupEvent event) + { + ExampleRenderers.register(); + CosmereAPI.logger.info("Cosmere Example mod client setup complete!"); + } + + @SubscribeEvent + public static void registerLayers(final EntityRenderersEvent.RegisterLayerDefinitions evt) + { + } + + + /* todo - re setup power icon registration + //special thank you to the chisels and bits team who have an example of how to register other sprites + @SubscribeEvent + public static void registerIconTextures(TextureStitchEvent.Pre event) + { + final TextureAtlas map = event.getAtlas(); + if (!map.location().equals(InventoryMenu.BLOCK_ATLAS)) + { + return; + } + + event.addSprite(Example.rl("icon/example")); + }*/ +} diff --git a/src/example/java/leaf/cosmere/example/client/render/ExampleLayerDefinitions.java b/src/example/java/leaf/cosmere/example/client/render/ExampleLayerDefinitions.java new file mode 100644 index 000000000..dbce20d01 --- /dev/null +++ b/src/example/java/leaf/cosmere/example/client/render/ExampleLayerDefinitions.java @@ -0,0 +1,13 @@ +/* + * File updated ~ 19 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.example.client.render; + +import leaf.cosmere.example.common.Example; +import net.minecraft.client.model.geom.ModelLayerLocation; + +public class ExampleLayerDefinitions +{ + public static final ModelLayerLocation EXAMPLE = new ModelLayerLocation(Example.rl("example_mob_model"), "example_mob_model"); +} diff --git a/src/example/java/leaf/cosmere/example/client/render/ExampleRenderers.java b/src/example/java/leaf/cosmere/example/client/render/ExampleRenderers.java new file mode 100644 index 000000000..cd4bc1fb3 --- /dev/null +++ b/src/example/java/leaf/cosmere/example/client/render/ExampleRenderers.java @@ -0,0 +1,16 @@ +/* + * File updated ~ 19 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.example.client.render; + +public class ExampleRenderers +{ + + public static void register() + { + //EntityRenderers.register(ExampleEntityTypes.EXAMPLE_ENTITY.get(), ExampleEntityRenderer::new); + } + + +} diff --git a/src/example/java/leaf/cosmere/example/common/Example.java b/src/example/java/leaf/cosmere/example/common/Example.java new file mode 100644 index 000000000..5439430e9 --- /dev/null +++ b/src/example/java/leaf/cosmere/example/common/Example.java @@ -0,0 +1,122 @@ +/* + * File updated ~ 19 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.example.common; + +import leaf.cosmere.api.CosmereAPI; +import leaf.cosmere.api.IModModule; +import leaf.cosmere.api.ISpiritwebSubmodule; +import leaf.cosmere.api.Version; +import leaf.cosmere.common.Cosmere; +import leaf.cosmere.common.config.CosmereModConfig; +import leaf.cosmere.example.common.capabilities.ExampleSpiritwebSubmodule; +import leaf.cosmere.example.common.config.ExampleConfigs; +import leaf.cosmere.example.common.registries.*; +import net.minecraft.resources.ResourceLocation; +import net.minecraftforge.eventbus.api.IEventBus; +import net.minecraftforge.fml.ModLoadingContext; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.config.ModConfig; +import net.minecraftforge.fml.event.config.ModConfigEvent; +import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; +import net.minecraftforge.fml.event.lifecycle.InterModEnqueueEvent; +import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; + +@Mod(Example.MODID) +public class Example implements IModModule +{ + public static final String MODID = "example"; + + public static Example instance; + + public final Version versionNumber; + + public Example() + { + Cosmere.addModule(instance = this); + IEventBus modBus = FMLJavaModLoadingContext.get().getModEventBus(); + + ExampleConfigs.registerConfigs(ModLoadingContext.get()); + + modBus.addListener(this::commonSetup); + modBus.addListener(this::onConfigLoad); + modBus.addListener(this::onConfigReload); + modBus.addListener(this::imcQueue); + + ExampleAttributes.ATTRIBUTES.register(modBus); + ExampleBiomes.BIOMES.register(modBus); + ExampleBiomeModifiers.BIOME_MODIFIER_SERIALIZERS.register(modBus); + ExampleBlocks.BLOCKS.register(modBus); + ExampleEffects.EFFECTS.register(modBus); + ExampleFeatures.CONFIGURED_FEATURES.register(modBus); + ExampleFeatures.PLACED_FEATURES.register(modBus); + ExampleEntityTypes.ENTITY_TYPES.register(modBus); + ExampleItems.ITEMS.register(modBus); + ExampleManifestations.MANIFESTATIONS.register(modBus); + ExampleMenuTypes.MENU_TYPES.register(modBus); + ExampleRecipes.SPECIAL_RECIPES.register(modBus); + ExampleStats.STATS.register(modBus); + + versionNumber = new Version(ModLoadingContext.get().getActiveContainer()); + } + + public static ResourceLocation rl(String path) + { + return new ResourceLocation(Example.MODID, path); + } + + private void commonSetup(FMLCommonSetupEvent event) + { + CosmereAPI.logger.info("Cosmere: Example module Version {} initializing...", versionNumber); + + event.enqueueWork(() -> + { + //AllomancyEntityTypes.PrepareEntityAttributes(); + ExampleStats.initStatEntries(); + }); + + + //packetHandler.initialize(); + } + + private void imcQueue(InterModEnqueueEvent event) + { + } + + @Override + public Version getVersion() + { + return versionNumber; + } + + @Override + public String getName() + { + return "Example"; + } + + @Override + public ISpiritwebSubmodule makeSubmodule() + { + return new ExampleSpiritwebSubmodule(); + } + + private void onConfigLoad(ModConfigEvent configEvent) + { + ModConfig config = configEvent.getConfig(); + if (config.getModId().equals(MODID) && config instanceof CosmereModConfig cosmereModConfig) + { + cosmereModConfig.clearCache(); + } + } + + private void onConfigReload(ModConfigEvent.Reloading configEvent) + { + ModConfig config = configEvent.getConfig(); + if (config.getModId().equals(MODID) && config instanceof CosmereModConfig cosmereModConfig) + { + cosmereModConfig.clearCache(); + } + } +} \ No newline at end of file diff --git a/src/example/java/leaf/cosmere/example/common/capabilities/ExampleSpiritwebSubmodule.java b/src/example/java/leaf/cosmere/example/common/capabilities/ExampleSpiritwebSubmodule.java new file mode 100644 index 000000000..8652f1cc1 --- /dev/null +++ b/src/example/java/leaf/cosmere/example/common/capabilities/ExampleSpiritwebSubmodule.java @@ -0,0 +1,70 @@ +/* + * File updated ~ 5 - 3 - 2025 ~ Leaf + */ + +package leaf.cosmere.example.common.capabilities; + +import leaf.cosmere.api.ISpiritwebSubmodule; +import leaf.cosmere.api.manifestation.Manifestation; +import leaf.cosmere.api.spiritweb.ISpiritweb; +import net.minecraft.world.entity.player.Player; +import net.minecraftforge.client.event.RenderLevelStageEvent; + +import java.util.List; + +public class ExampleSpiritwebSubmodule implements ISpiritwebSubmodule +{ + @Override + public void serialize(ISpiritweb spiritweb) + { + + } + + @Override + public void deserialize(ISpiritweb spiritweb) + { + + } + + @Override + public void tickClient(ISpiritweb spiritweb) + { + + } + + @Override + public void tickServer(ISpiritweb spiritweb) + { + + } + + @Override + public void collectMenuInfo(List m_infoText) + { + + } + + @Override + public void renderWorldEffects(ISpiritweb spiritweb, RenderLevelStageEvent event) + { + + } + + @Override + public void GiveStartingItem(Player player) + { + + } + + @Override + public void GiveStartingItem(Player player, Manifestation manifestation) + { + + } + + @Override + public void drainInvestiture(ISpiritweb data, double strength) + { + + } +} diff --git a/src/example/java/leaf/cosmere/example/common/commands/ExampleCommands.java b/src/example/java/leaf/cosmere/example/common/commands/ExampleCommands.java new file mode 100644 index 000000000..b19b4f5b3 --- /dev/null +++ b/src/example/java/leaf/cosmere/example/common/commands/ExampleCommands.java @@ -0,0 +1,23 @@ +/* + * File updated ~ 19 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.example.common.commands; + +import com.mojang.brigadier.CommandDispatcher; +import leaf.cosmere.common.Cosmere; +import leaf.cosmere.example.common.commands.subcommands.ExampleCommand; +import net.minecraft.commands.CommandSourceStack; +import net.minecraft.commands.Commands; + + +public class ExampleCommands +{ + + public static void register(CommandDispatcher dispatcher) + { + dispatcher.register(Commands.literal(Cosmere.MODID) + .then(ExampleCommand.register(dispatcher)) + ); + } +} diff --git a/src/example/java/leaf/cosmere/example/common/commands/subcommands/ExampleCommand.java b/src/example/java/leaf/cosmere/example/common/commands/subcommands/ExampleCommand.java new file mode 100644 index 000000000..f50ebc699 --- /dev/null +++ b/src/example/java/leaf/cosmere/example/common/commands/subcommands/ExampleCommand.java @@ -0,0 +1,50 @@ +/* + * File updated ~ 19 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.example.common.commands.subcommands; + +import com.mojang.brigadier.CommandDispatcher; +import com.mojang.brigadier.builder.ArgumentBuilder; +import com.mojang.brigadier.context.CommandContext; +import com.mojang.brigadier.exceptions.CommandSyntaxException; +import leaf.cosmere.api.text.TextHelper; +import leaf.cosmere.common.commands.subcommands.ModCommand; +import net.minecraft.commands.CommandSourceStack; +import net.minecraft.commands.Commands; +import net.minecraft.commands.arguments.EntityArgument; +import net.minecraft.server.level.ServerPlayer; + +import java.util.Collection; + +public class ExampleCommand extends ModCommand +{ + public static ArgumentBuilder register(CommandDispatcher dispatcher) + { + return Commands.literal("exampleTest") + .requires(context -> context.hasPermission(2)) + .executes(ExampleCommand::exampleTest) + .then(Commands.argument("target", EntityArgument.players()) + .requires(context -> context.hasPermission(2)) + .executes(ExampleCommand::exampleTest)); + } + + private static int exampleTest(CommandContext context) throws CommandSyntaxException + { + Collection players = getPlayers(context, 3); + + for (ServerPlayer player : players) + { + player.displayClientMessage(TextHelper.createText("Test Received"), false); + } + + return SINGLE_SUCCESS; + } + + @Override + public int run(CommandContext context) throws CommandSyntaxException + { + return SINGLE_SUCCESS; + } + +} \ No newline at end of file diff --git a/src/example/java/leaf/cosmere/example/common/config/ExampleConfigs.java b/src/example/java/leaf/cosmere/example/common/config/ExampleConfigs.java new file mode 100644 index 000000000..e4aea8a13 --- /dev/null +++ b/src/example/java/leaf/cosmere/example/common/config/ExampleConfigs.java @@ -0,0 +1,20 @@ +/* + * File updated ~ 19 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.example.common.config; + +import leaf.cosmere.common.config.CosmereConfigHelper; +import net.minecraftforge.fml.ModContainer; +import net.minecraftforge.fml.ModLoadingContext; + +public class ExampleConfigs +{ + public static final ExampleServerConfig SERVER = new ExampleServerConfig(); + + public static void registerConfigs(ModLoadingContext modLoadingContext) + { + ModContainer modContainer = modLoadingContext.getActiveContainer(); + CosmereConfigHelper.registerConfig(modContainer, SERVER); + } +} diff --git a/src/example/java/leaf/cosmere/example/common/config/ExampleServerConfig.java b/src/example/java/leaf/cosmere/example/common/config/ExampleServerConfig.java new file mode 100644 index 000000000..eb0108b78 --- /dev/null +++ b/src/example/java/leaf/cosmere/example/common/config/ExampleServerConfig.java @@ -0,0 +1,54 @@ +/* + * File updated ~ 19 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.example.common.config; + +import leaf.cosmere.common.config.ICosmereConfig; +import net.minecraftforge.common.ForgeConfigSpec; +import net.minecraftforge.fml.config.ModConfig.Type; + +public class ExampleServerConfig implements ICosmereConfig +{ + + private final ForgeConfigSpec configSpec; + + public final ForgeConfigSpec.IntValue EXAMPLE; + + + ExampleServerConfig() + { + ForgeConfigSpec.Builder builder = new ForgeConfigSpec.Builder(); + builder.comment("Example Config. This config is synced between server and client.").push("Example"); + + EXAMPLE = builder.comment("Example.").defineInRange("example", 0, 0, 100); + + + builder.pop(); + configSpec = builder.build(); + } + + @Override + public String getFileName() + { + return "ExampleServer"; + } + + @Override + public ForgeConfigSpec getConfigSpec() + { + return configSpec; + } + + @Override + public Type getConfigType() + { + return Type.SERVER; + } + + @Override + public void clearCache() + { + EXAMPLE.clearCache(); + } +} \ No newline at end of file diff --git a/src/example/java/leaf/cosmere/example/common/eventHandlers/ExampleCommonForgeEvents.java b/src/example/java/leaf/cosmere/example/common/eventHandlers/ExampleCommonForgeEvents.java new file mode 100644 index 000000000..f94b86eb2 --- /dev/null +++ b/src/example/java/leaf/cosmere/example/common/eventHandlers/ExampleCommonForgeEvents.java @@ -0,0 +1,61 @@ +/* + * File updated ~ 19 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.example.common.eventHandlers; + +import leaf.cosmere.example.common.Example; +import leaf.cosmere.example.common.commands.ExampleCommands; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.item.ItemStack; +import net.minecraftforge.event.RegisterCommandsEvent; +import net.minecraftforge.event.entity.player.PlayerInteractEvent; +import net.minecraftforge.event.server.ServerStartedEvent; +import net.minecraftforge.event.server.ServerStoppingEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; + +@Mod.EventBusSubscriber(modid = Example.MODID, bus = Mod.EventBusSubscriber.Bus.FORGE) +public class ExampleCommonForgeEvents +{ + + + @SubscribeEvent + public static void onEntityInteract(PlayerInteractEvent.EntityInteract event) + { + if (!(event.getTarget() instanceof LivingEntity target)) + { + return; + } + + ItemStack stack = event.getEntity().getMainHandItem(); + if (!stack.isEmpty()) + { + //if (stack.getItem() instanceof ExampleItem exampleItem) + //{ + // + //} + } + } + + + @SubscribeEvent + public static void registerCommands(RegisterCommandsEvent event) + { + ExampleCommands.register(event.getDispatcher()); + } + + + @SubscribeEvent + public static void onServerStartingEvent(ServerStartedEvent event) + { + + } + + @SubscribeEvent + public static void onServerStoppingEvent(ServerStoppingEvent event) + { + + } + +} diff --git a/src/example/java/leaf/cosmere/example/common/eventHandlers/ExampleCommonModEvents.java b/src/example/java/leaf/cosmere/example/common/eventHandlers/ExampleCommonModEvents.java new file mode 100644 index 000000000..678f855f4 --- /dev/null +++ b/src/example/java/leaf/cosmere/example/common/eventHandlers/ExampleCommonModEvents.java @@ -0,0 +1,15 @@ +/* + * File updated ~ 19 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.example.common.eventHandlers; + +import leaf.cosmere.example.common.Example; +import net.minecraftforge.fml.common.Mod; + + +@Mod.EventBusSubscriber(modid = Example.MODID, bus = Mod.EventBusSubscriber.Bus.MOD) +public class ExampleCommonModEvents +{ + +} diff --git a/src/example/java/leaf/cosmere/example/common/registries/ExampleAttributes.java b/src/example/java/leaf/cosmere/example/common/registries/ExampleAttributes.java new file mode 100644 index 000000000..d7110a922 --- /dev/null +++ b/src/example/java/leaf/cosmere/example/common/registries/ExampleAttributes.java @@ -0,0 +1,15 @@ +/* + * File updated ~ 19 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.example.common.registries; + +import leaf.cosmere.common.registration.impl.AttributeDeferredRegister; +import leaf.cosmere.example.common.Example; + +public class ExampleAttributes +{ + + public static final AttributeDeferredRegister ATTRIBUTES = new AttributeDeferredRegister(Example.MODID); + +} diff --git a/src/example/java/leaf/cosmere/example/common/registries/ExampleBiomeModifiers.java b/src/example/java/leaf/cosmere/example/common/registries/ExampleBiomeModifiers.java new file mode 100644 index 000000000..862b19314 --- /dev/null +++ b/src/example/java/leaf/cosmere/example/common/registries/ExampleBiomeModifiers.java @@ -0,0 +1,15 @@ +/* + * File updated ~ 19 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.example.common.registries; + +import leaf.cosmere.common.registration.impl.BiomeModifierSerializerDeferredRegister; +import leaf.cosmere.example.common.Example; + +public class ExampleBiomeModifiers +{ + public static final BiomeModifierSerializerDeferredRegister BIOME_MODIFIER_SERIALIZERS = new BiomeModifierSerializerDeferredRegister(Example.MODID); + + +} diff --git a/src/example/java/leaf/cosmere/example/common/registries/ExampleBiomes.java b/src/example/java/leaf/cosmere/example/common/registries/ExampleBiomes.java new file mode 100644 index 000000000..26d8a98fc --- /dev/null +++ b/src/example/java/leaf/cosmere/example/common/registries/ExampleBiomes.java @@ -0,0 +1,15 @@ +/* + * File updated ~ 19 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.example.common.registries; + +import leaf.cosmere.common.registration.impl.BiomeDeferredRegister; +import leaf.cosmere.example.common.Example; + +public class ExampleBiomes +{ + public static final BiomeDeferredRegister BIOMES = new BiomeDeferredRegister(Example.MODID); + + //public static final BiomeRegistryObject EXAMPLE_BIOME = BIOMES.register("example_biome", OverworldBiomes::stonyPeaks); +} diff --git a/src/example/java/leaf/cosmere/example/common/registries/ExampleBlocks.java b/src/example/java/leaf/cosmere/example/common/registries/ExampleBlocks.java new file mode 100644 index 000000000..bebbec4e7 --- /dev/null +++ b/src/example/java/leaf/cosmere/example/common/registries/ExampleBlocks.java @@ -0,0 +1,17 @@ +/* + * File updated ~ 19 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.example.common.registries; + +import leaf.cosmere.common.registration.impl.BlockDeferredRegister; +import leaf.cosmere.example.common.Example; + +public class ExampleBlocks +{ + public static final BlockDeferredRegister BLOCKS = new BlockDeferredRegister(Example.MODID); + + //public static final BlockRegistryObject EXAMPLE_BLOCK = BLOCKS.register("example", BaseBlock::new); + + +} diff --git a/src/example/java/leaf/cosmere/example/common/registries/ExampleCreativeTabs.java b/src/example/java/leaf/cosmere/example/common/registries/ExampleCreativeTabs.java new file mode 100644 index 000000000..e7c1afaae --- /dev/null +++ b/src/example/java/leaf/cosmere/example/common/registries/ExampleCreativeTabs.java @@ -0,0 +1,84 @@ +/* + * File updated ~ 10 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.example.common.registries; + +import leaf.cosmere.common.registration.impl.CreativeTabDeferredRegister; +import leaf.cosmere.common.registration.impl.CreativeTabRegistryObject; +import leaf.cosmere.common.registry.ItemsRegistry; +import leaf.cosmere.example.common.Example; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceKey; +import net.minecraft.world.item.CreativeModeTab; +import net.minecraft.world.item.CreativeModeTabs; +import net.minecraftforge.event.BuildCreativeModeTabContentsEvent; + +public class ExampleCreativeTabs +{ + public static final CreativeTabDeferredRegister CREATIVE_TABS = new CreativeTabDeferredRegister(Example.MODID, ExampleCreativeTabs::addToExistingTabs); + + + public static final CreativeTabRegistryObject ITEMS = + CREATIVE_TABS.registerMain( + Component.translatable("tabs." + Example.MODID + ".items"), + ItemsRegistry.GUIDE,//ExampleItems.ITEMS., + builder -> + builder.withSearchBar()//Allow our tabs to be searchable for convenience purposes + .displayItems((displayParameters, output) -> + { + CreativeTabDeferredRegister.addToDisplay(ExampleItems.ITEMS, output); + CreativeTabDeferredRegister.addToDisplay(ExampleBlocks.BLOCKS, output); + }) + ); + + + private static void addToExistingTabs(BuildCreativeModeTabContentsEvent event) + { + ResourceKey tabKey = event.getTabKey(); + if (tabKey == CreativeModeTabs.BUILDING_BLOCKS) + { + //CreativeTabDeferredRegister.addToDisplay(event, BlocksRegistry.METALWORKING_TABLE); + } + else if (tabKey == CreativeModeTabs.NATURAL_BLOCKS) + { + /*for (var ore : BlocksRegistry.METAL_ORE.values()) + { + CreativeTabDeferredRegister.addToDisplay(event, ore); + } + for (var ore : BlocksRegistry.METAL_ORE_DEEPSLATE.values()) + { + CreativeTabDeferredRegister.addToDisplay(event, ore); + }*/ + } + else if (tabKey == CreativeModeTabs.FUNCTIONAL_BLOCKS) + { + + } + else if (tabKey == CreativeModeTabs.REDSTONE_BLOCKS) + { + + } + else if (tabKey == CreativeModeTabs.TOOLS_AND_UTILITIES) + { + + } + else if (tabKey == CreativeModeTabs.COMBAT) + { + + } + else if (tabKey == CreativeModeTabs.FOOD_AND_DRINKS) + { + //ItemsRegistry.SOME_FOOD.get().addItems(event); + } + else if (tabKey == CreativeModeTabs.SPAWN_EGGS) + { + + } + else if (tabKey == CreativeModeTabs.INGREDIENTS) + { + + } + } + +} diff --git a/src/example/java/leaf/cosmere/example/common/registries/ExampleEffects.java b/src/example/java/leaf/cosmere/example/common/registries/ExampleEffects.java new file mode 100644 index 000000000..e820ed083 --- /dev/null +++ b/src/example/java/leaf/cosmere/example/common/registries/ExampleEffects.java @@ -0,0 +1,16 @@ +/* + * File updated ~ 19 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.example.common.registries; + +import leaf.cosmere.common.registration.impl.CosmereEffectDeferredRegister; +import leaf.cosmere.example.common.Example; + +public class ExampleEffects +{ + + public static final CosmereEffectDeferredRegister EFFECTS = new CosmereEffectDeferredRegister(Example.MODID); + + +} diff --git a/src/example/java/leaf/cosmere/example/common/registries/ExampleEntityTypes.java b/src/example/java/leaf/cosmere/example/common/registries/ExampleEntityTypes.java new file mode 100644 index 000000000..57b01640c --- /dev/null +++ b/src/example/java/leaf/cosmere/example/common/registries/ExampleEntityTypes.java @@ -0,0 +1,13 @@ +/* + * File updated ~ 19 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.example.common.registries; + +import leaf.cosmere.common.registration.impl.EntityTypeDeferredRegister; +import leaf.cosmere.example.common.Example; + +public class ExampleEntityTypes +{ + public static final EntityTypeDeferredRegister ENTITY_TYPES = new EntityTypeDeferredRegister(Example.MODID); +} diff --git a/src/example/java/leaf/cosmere/example/common/registries/ExampleFeatures.java b/src/example/java/leaf/cosmere/example/common/registries/ExampleFeatures.java new file mode 100644 index 000000000..956bebd43 --- /dev/null +++ b/src/example/java/leaf/cosmere/example/common/registries/ExampleFeatures.java @@ -0,0 +1,16 @@ +/* + * File updated ~ 4 - 9 - 2024 ~ Leaf + */ + +package leaf.cosmere.example.common.registries; + +import leaf.cosmere.common.registration.impl.ConfiguredFeatureDeferredRegister; +import leaf.cosmere.common.registration.impl.PlacedFeatureDeferredRegister; +import leaf.cosmere.example.common.Example; + +public class ExampleFeatures +{ + public static final ConfiguredFeatureDeferredRegister CONFIGURED_FEATURES = new ConfiguredFeatureDeferredRegister(Example.MODID); + public static final PlacedFeatureDeferredRegister PLACED_FEATURES = new PlacedFeatureDeferredRegister(Example.MODID); + +} diff --git a/src/example/java/leaf/cosmere/example/common/registries/ExampleItems.java b/src/example/java/leaf/cosmere/example/common/registries/ExampleItems.java new file mode 100644 index 000000000..39b8ee163 --- /dev/null +++ b/src/example/java/leaf/cosmere/example/common/registries/ExampleItems.java @@ -0,0 +1,14 @@ +/* + * File updated ~ 19 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.example.common.registries; + +import leaf.cosmere.common.registration.impl.ItemDeferredRegister; +import leaf.cosmere.example.common.Example; + +public class ExampleItems +{ + public static final ItemDeferredRegister ITEMS = new ItemDeferredRegister(Example.MODID); + +} diff --git a/src/example/java/leaf/cosmere/example/common/registries/ExampleManifestations.java b/src/example/java/leaf/cosmere/example/common/registries/ExampleManifestations.java new file mode 100644 index 000000000..4c4f3920d --- /dev/null +++ b/src/example/java/leaf/cosmere/example/common/registries/ExampleManifestations.java @@ -0,0 +1,18 @@ +/* + * File updated ~ 19 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.example.common.registries; + +import leaf.cosmere.api.manifestation.Manifestation; +import leaf.cosmere.common.registration.impl.ManifestationDeferredRegister; +import leaf.cosmere.common.registration.impl.ManifestationRegistryObject; +import leaf.cosmere.example.common.Example; + +public class ExampleManifestations +{ + public static final ManifestationDeferredRegister MANIFESTATIONS = new ManifestationDeferredRegister(Example.MODID); + + public static final ManifestationRegistryObject EXAMPLE_MANIFESTATION = MANIFESTATIONS.register("example", Manifestation::new); + +} diff --git a/src/example/java/leaf/cosmere/example/common/registries/ExampleMenuTypes.java b/src/example/java/leaf/cosmere/example/common/registries/ExampleMenuTypes.java new file mode 100644 index 000000000..3a45cc780 --- /dev/null +++ b/src/example/java/leaf/cosmere/example/common/registries/ExampleMenuTypes.java @@ -0,0 +1,14 @@ +/* + * File updated ~ 19 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.example.common.registries; + +import leaf.cosmere.common.registration.impl.MenuTypeDeferredRegister; +import leaf.cosmere.example.common.Example; + +public class ExampleMenuTypes +{ + public static final MenuTypeDeferredRegister MENU_TYPES = new MenuTypeDeferredRegister(Example.MODID); + +} diff --git a/src/example/java/leaf/cosmere/example/common/registries/ExampleRecipes.java b/src/example/java/leaf/cosmere/example/common/registries/ExampleRecipes.java new file mode 100644 index 000000000..0582b5060 --- /dev/null +++ b/src/example/java/leaf/cosmere/example/common/registries/ExampleRecipes.java @@ -0,0 +1,15 @@ +/* + * File updated ~ 19 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.example.common.registries; + +import leaf.cosmere.common.registration.impl.RecipeSerializerDeferredRegister; +import leaf.cosmere.example.common.Example; + +// for the non-json based recipes +public class ExampleRecipes +{ + public static final RecipeSerializerDeferredRegister SPECIAL_RECIPES = new RecipeSerializerDeferredRegister(Example.MODID); + +} diff --git a/src/example/java/leaf/cosmere/example/common/registries/ExampleStats.java b/src/example/java/leaf/cosmere/example/common/registries/ExampleStats.java new file mode 100644 index 000000000..9891655a2 --- /dev/null +++ b/src/example/java/leaf/cosmere/example/common/registries/ExampleStats.java @@ -0,0 +1,25 @@ +/* + * File updated ~ 19 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.example.common.registries; + +import leaf.cosmere.common.registration.impl.StatDeferredRegister; +import leaf.cosmere.common.registration.impl.StatRegistryObject; +import leaf.cosmere.example.common.Example; +import net.minecraft.stats.StatFormatter; +import net.minecraft.stats.Stats; + +public class ExampleStats +{ + public static final StatDeferredRegister STATS = new StatDeferredRegister(Example.MODID); + + + public static void initStatEntries() + { + for (StatRegistryObject value : STATS.getAllItems()) + { + Stats.CUSTOM.get(value.get(), StatFormatter.TIME); + } + } +} diff --git a/src/example/java/leaf/cosmere/example/mixin/EntityMixin.java b/src/example/java/leaf/cosmere/example/mixin/EntityMixin.java new file mode 100644 index 000000000..3ca0a6f12 --- /dev/null +++ b/src/example/java/leaf/cosmere/example/mixin/EntityMixin.java @@ -0,0 +1,15 @@ +/* + * File updated ~ 19 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.example.mixin; + +import net.minecraft.world.entity.Entity; +import org.spongepowered.asm.mixin.Mixin; + +@Mixin(Entity.class) +public class EntityMixin +{ + +} + diff --git a/src/example/resources/META-INF/mods.toml b/src/example/resources/META-INF/mods.toml new file mode 100644 index 000000000..897a71366 --- /dev/null +++ b/src/example/resources/META-INF/mods.toml @@ -0,0 +1,25 @@ +modLoader = "javafml" +loaderVersion = "${loader_version}" +issueTrackerURL = "https://github.com/leafreynolds/Cosmere/issues" +license = "MIT" + +[[mods]] +modId = "example" +version = "${version}" +displayName = "Cosmere: Example" +displayURL = "https://www.curseforge.com/minecraft/mc-mods/cosmere" +authors = "Leaf" +credits = ''' + +Special thanks go to: +Ridanisaurus - For many item and block textures. +''' +logoFile = "logo.png" +description = '''Example module for Cosmere.''' + +[[dependencies.example]] +modId = "cosmere" +mandatory = true +versionRange = "[${version}]" +ordering = "AFTER" +side = "BOTH" diff --git a/src/example/resources/example.mixins.json b/src/example/resources/example.mixins.json new file mode 100644 index 000000000..8d4eddd35 --- /dev/null +++ b/src/example/resources/example.mixins.json @@ -0,0 +1,15 @@ +{ + "required": true, + "minVersion": "0.8", + "package": "leaf.cosmere.example.mixin", + "compatibilityLevel": "JAVA_17", + "refmap": "mixins.cosmere.example.refmap.json", + "mixins": [ + "EntityMixin" + ], + "client": [ + ], + "injectors": { + "defaultRequire": 1 + } +} \ No newline at end of file diff --git a/src/example/resources/pack.mcmeta b/src/example/resources/pack.mcmeta new file mode 100644 index 000000000..6820333a2 --- /dev/null +++ b/src/example/resources/pack.mcmeta @@ -0,0 +1,6 @@ +{ + "pack": { + "description": "Resources used for Cosmere Example", + "pack_format": 15 + } +} \ No newline at end of file diff --git a/src/feruchemy/java/leaf/cosmere/feruchemy/client/FeruchemyClientEvents.java b/src/feruchemy/java/leaf/cosmere/feruchemy/client/FeruchemyClientEvents.java new file mode 100644 index 000000000..db413029b --- /dev/null +++ b/src/feruchemy/java/leaf/cosmere/feruchemy/client/FeruchemyClientEvents.java @@ -0,0 +1,141 @@ +/* + * File updated ~ 9 - 8 - 2024 ~ Leaf + */ + +package leaf.cosmere.feruchemy.client; + +import leaf.cosmere.api.helpers.EntityHelper; +import leaf.cosmere.common.registry.AttributesRegistry; +import leaf.cosmere.feruchemy.client.utils.FeruchemyChargeThread; +import leaf.cosmere.feruchemy.common.Feruchemy; +import leaf.cosmere.feruchemy.common.manifestation.FeruchemyAtium; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.client.event.RenderLivingEvent; +import net.minecraftforge.client.event.RenderNameTagEvent; +import net.minecraftforge.client.event.RenderPlayerEvent; +import net.minecraftforge.event.entity.EntityJoinLevelEvent; +import net.minecraftforge.eventbus.api.Event; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; + +@Mod.EventBusSubscriber(modid = Feruchemy.MODID, value = Dist.CLIENT) +public class FeruchemyClientEvents +{ + @SubscribeEvent + public static void onRenderNameplateEvent(RenderNameTagEvent event) + { + if (event.isCanceled() || !(event.getEntity() instanceof LivingEntity livingEntity)) + { + return; + } + + int connection = (int) EntityHelper.getAttributeValue(livingEntity, AttributesRegistry.CONNECTION.getAttribute()); + if (connection <= -2) + { + event.setResult(Event.Result.DENY); + } + + final float atiumScale = FeruchemyAtium.getScale(livingEntity); + if (atiumScale < 1) + { + double scale = atiumScale; + event.getPoseStack().translate(0.0D, scale, 0.0D); + } + } + + @SubscribeEvent + public static void onRenderPlayerPre(RenderPlayerEvent.Pre event) + { + try + { + float scale = FeruchemyAtium.getScale(event.getEntity()); + if (scale > 1.01 || scale < 0.99) + { + event.getPoseStack().pushPose(); + event.getPoseStack().scale(scale, scale, scale); + if (event.getEntity().isCrouching() && scale < 0.2F) + { + event.getPoseStack().translate(0, 1.0, 0); + } + } + } + catch (Exception e) + { + e.printStackTrace(); + } + } + + @SubscribeEvent + public static void onRenderPlayerPost(RenderPlayerEvent.Post event) + { + try + { + float scale = FeruchemyAtium.getScale(event.getEntity()); + if (scale > 1.01 || scale < 0.99) + { + event.getPoseStack().popPose(); + } + } + catch (Exception e) + { + e.printStackTrace(); + } + } + + @SubscribeEvent + public static void onLivingRenderPre(RenderLivingEvent.Pre event) + { + if (event.getEntity() instanceof Player) + { + return; + } + + try + { + float scale = FeruchemyAtium.getScale(event.getEntity()); + if (scale > 1.01 || scale < 0.99) + { + event.getPoseStack().pushPose(); + event.getPoseStack().scale(scale, scale, scale); + } + + } + catch (Exception e) + { + e.printStackTrace(); + } + } + + @SubscribeEvent + public static void onLivingRenderPost(RenderLivingEvent.Post event) + { + if (event.getEntity() instanceof Player) + { + return; + } + + try + { + float scale = FeruchemyAtium.getScale(event.getEntity()); + if (scale > 1.01 || scale < 0.99) + { + event.getPoseStack().popPose(); + } + } + catch (Exception e) + { + e.printStackTrace(); + } + } + + @SubscribeEvent + public static void onEntityJoinLevelEvent(EntityJoinLevelEvent event) + { + if (event.getEntity().level().isClientSide && event.getEntity() instanceof Player) + { + FeruchemyChargeThread.getInstance().start(); + } + } +} diff --git a/src/feruchemy/java/leaf/cosmere/feruchemy/client/FeruchemyClientSetup.java b/src/feruchemy/java/leaf/cosmere/feruchemy/client/FeruchemyClientSetup.java new file mode 100644 index 000000000..b45e2fc3b --- /dev/null +++ b/src/feruchemy/java/leaf/cosmere/feruchemy/client/FeruchemyClientSetup.java @@ -0,0 +1,37 @@ +/* + * File updated ~ 20 - 11 - 2024 ~ Leaf + */ + +package leaf.cosmere.feruchemy.client; + +import leaf.cosmere.api.CosmereAPI; +import leaf.cosmere.feruchemy.client.render.FeruchemyLayerDefinitions; +import leaf.cosmere.feruchemy.client.render.FeruchemyRenderers; +import leaf.cosmere.feruchemy.client.render.model.BraceletModel; +import leaf.cosmere.feruchemy.common.Feruchemy; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.client.event.EntityRenderersEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; + +@Mod.EventBusSubscriber(modid = Feruchemy.MODID, value = Dist.CLIENT, bus = Mod.EventBusSubscriber.Bus.MOD) +public class FeruchemyClientSetup +{ + + @SubscribeEvent + public static void registerLayers(final EntityRenderersEvent.RegisterLayerDefinitions evt) + { + evt.registerLayerDefinition(FeruchemyLayerDefinitions.BRACELET, BraceletModel::createLayer); + //evt.registerLayerDefinition(FeruchemyLayerDefinitions.NECKLACE, NecklaceModel::createLayer); + } + + @SubscribeEvent + public static void init(final FMLClientSetupEvent event) + { + FeruchemyRenderers.register(); + + CosmereAPI.logger.info("Feruchemy client setup complete!"); + } + +} diff --git a/src/feruchemy/java/leaf/cosmere/feruchemy/client/FeruchemyKeybindings.java b/src/feruchemy/java/leaf/cosmere/feruchemy/client/FeruchemyKeybindings.java new file mode 100644 index 000000000..a4d28e82f --- /dev/null +++ b/src/feruchemy/java/leaf/cosmere/feruchemy/client/FeruchemyKeybindings.java @@ -0,0 +1,50 @@ +package leaf.cosmere.feruchemy.client; + + +import leaf.cosmere.api.Activator; +import leaf.cosmere.api.EnumUtils; +import leaf.cosmere.api.Metals; +import leaf.cosmere.client.Keybindings; +import leaf.cosmere.feruchemy.common.Feruchemy; +import leaf.cosmere.feruchemy.common.manifestation.FeruchemyManifestation; +import net.minecraft.client.KeyMapping; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.client.event.RegisterKeyMappingsEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; +import org.lwjgl.glfw.GLFW; + +import java.util.Arrays; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +import static leaf.cosmere.api.Constants.Strings.*; +import static leaf.cosmere.feruchemy.common.registries.FeruchemyManifestations.FERUCHEMY_POWERS; + +@Mod.EventBusSubscriber(value = Dist.CLIENT, modid = Feruchemy.MODID, bus = Mod.EventBusSubscriber.Bus.MOD) +public class FeruchemyKeybindings +{ + public static final Map FERUCHEMY_POWER = + Arrays.stream(EnumUtils.METAL_TYPES) + .filter(Metals.MetalType::hasAssociatedManifestation) + .collect(Collectors.toMap( + Function.identity(), + metalType -> + new KeyMapping(KEY_FERUCHEMY + metalType.getName(), GLFW.GLFW_KEY_UNKNOWN,KEYS_ACTIVATE_CATEGORY) + )); + + @SubscribeEvent + public static void register(RegisterKeyMappingsEvent event) + { + for (Metals.MetalType metalType : FERUCHEMY_POWER.keySet()) + { + KeyMapping key = FERUCHEMY_POWER.get(metalType); + FeruchemyManifestation manifest = FERUCHEMY_POWERS.get(metalType).getManifestation(); + event.register(key); + Activator entry = new Activator(key, manifest); + entry.setCategory("feruchemy"); + Keybindings.activators.add(entry); + } + } +} diff --git a/src/feruchemy/java/leaf/cosmere/feruchemy/client/render/FeruchemyLayerDefinitions.java b/src/feruchemy/java/leaf/cosmere/feruchemy/client/render/FeruchemyLayerDefinitions.java new file mode 100644 index 000000000..5a238b5e6 --- /dev/null +++ b/src/feruchemy/java/leaf/cosmere/feruchemy/client/render/FeruchemyLayerDefinitions.java @@ -0,0 +1,14 @@ +/* + * File updated ~ 8 - 10 - 2022 ~ Leaf + */ + +package leaf.cosmere.feruchemy.client.render; + +import leaf.cosmere.feruchemy.common.Feruchemy; +import net.minecraft.client.model.geom.ModelLayerLocation; + +public class FeruchemyLayerDefinitions +{ + public static final ModelLayerLocation BRACELET = new ModelLayerLocation(Feruchemy.rl("bracelet"), "bracelet"); + public static final ModelLayerLocation NECKLACE = new ModelLayerLocation(Feruchemy.rl("necklace"), "necklace"); +} diff --git a/src/feruchemy/java/leaf/cosmere/feruchemy/client/render/FeruchemyRenderers.java b/src/feruchemy/java/leaf/cosmere/feruchemy/client/render/FeruchemyRenderers.java new file mode 100644 index 000000000..8d3467f64 --- /dev/null +++ b/src/feruchemy/java/leaf/cosmere/feruchemy/client/render/FeruchemyRenderers.java @@ -0,0 +1,29 @@ +/* + * File updated ~ 8 - 10 - 2022 ~ Leaf + */ + +package leaf.cosmere.feruchemy.client.render; + +import leaf.cosmere.common.registration.impl.ItemRegistryObject; +import leaf.cosmere.feruchemy.client.render.renderer.BraceletRenderer; +import leaf.cosmere.feruchemy.common.items.BraceletMetalmindItem; +import leaf.cosmere.feruchemy.common.registries.FeruchemyItems; +import top.theillusivec4.curios.api.client.CuriosRendererRegistry; +import top.theillusivec4.curios.api.client.ICurioRenderer; + +import java.util.function.Supplier; + +public class FeruchemyRenderers +{ + public static void register() + { + final Supplier bracelet = BraceletRenderer::new; + for (ItemRegistryObject itemRegistryObject : FeruchemyItems.METAL_BRACELETS.values()) + { + CuriosRendererRegistry.register(itemRegistryObject.get(), bracelet); + } + CuriosRendererRegistry.register(FeruchemyItems.BANDS_OF_MOURNING.get(), bracelet); + + } + +} diff --git a/src/feruchemy/java/leaf/cosmere/feruchemy/client/render/model/BraceletModel.java b/src/feruchemy/java/leaf/cosmere/feruchemy/client/render/model/BraceletModel.java new file mode 100644 index 000000000..941c14d92 --- /dev/null +++ b/src/feruchemy/java/leaf/cosmere/feruchemy/client/render/model/BraceletModel.java @@ -0,0 +1,217 @@ +/* + * File updated ~ 11 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.feruchemy.client.render.model; + +import com.google.common.collect.ImmutableList; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import leaf.cosmere.api.IHasMetalType; +import leaf.cosmere.common.Cosmere; +import leaf.cosmere.feruchemy.common.registries.FeruchemyItems; +import net.minecraft.client.model.HumanoidModel; +import net.minecraft.client.model.geom.ModelPart; +import net.minecraft.client.model.geom.PartPose; +import net.minecraft.client.model.geom.builders.*; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.entity.ItemRenderer; +import net.minecraft.client.renderer.texture.OverlayTexture; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.item.ItemStack; +import top.theillusivec4.curios.api.SlotContext; + +import javax.annotation.Nonnull; +import java.awt.*; + +public class BraceletModel extends HumanoidModel +{ + private static final ResourceLocation TEXTURE = Cosmere.rl("textures/block/metal_block.png"); + + // Body Parts + private static final String leftArmID = "left_arm"; + private static final String rightArmID = "right_arm"; + + // Categories + private static final String braceletID = "bracelet"; + + // Model Parts + private final ModelPart root; + private final ModelPart rightShoulderSide; + private final ModelPart rightArmUpper; + private final ModelPart rightArmMiddle; + private final ModelPart rightArmLower; + + private final ModelPart leftShoulderSide; + private final ModelPart leftArmUpper; + private final ModelPart leftArmMiddle; + private final ModelPart leftArmLower; + + public BraceletModel(ModelPart part) + { + super(part, RenderType::entityCutoutNoCull); + this.root = part; + ModelPart find = part.getChild(rightArmID); + rightShoulderSide = find.getChild("shoulder_side"); + rightArmUpper = find.getChild("upper"); + rightArmMiddle = find.getChild("middle"); + rightArmLower = find.getChild("lower"); + + find = part.getChild(leftArmID); + leftShoulderSide = find.getChild("shoulder_side"); + leftArmUpper = find.getChild("upper"); + leftArmMiddle = find.getChild("middle"); + leftArmLower = find.getChild("lower"); + } + + public static LayerDefinition createLayer() + { + CubeDeformation cube = new CubeDeformation(0.4F); + MeshDefinition mesh = HumanoidModel.createMesh(cube, 0.0F); + PartDefinition part = mesh.getRoot(); + + final PartDefinition rightArm = part.addOrReplaceChild( + rightArmID, + CubeListBuilder.create(), + PartPose.ZERO + ); + + rightArm.addOrReplaceChild("shoulder_side", + CubeListBuilder.create() + .texOffs(0, 0) + .addBox(-2.9F, 1.0F, -2.0F, 3.0F, 0.5F, 4.0F, cube), + PartPose.ZERO); + + rightArm.addOrReplaceChild("upper", + CubeListBuilder.create() + .texOffs(0, 0) + .addBox(-2.9F, 3.0F, -2.0F, 3.0F, 0.5F, 4.0F, cube), + PartPose.ZERO); + + rightArm.addOrReplaceChild("middle", + CubeListBuilder.create() + .texOffs(0, 0) + .addBox(-2.9F, 5.0F, -2.0F, 3.0F, 0.5F, 4.0F, cube), + PartPose.ZERO); + + rightArm.addOrReplaceChild("lower", + CubeListBuilder.create() + .texOffs(0, 0) + .addBox(-2.9F, 7.0F, -2.0F, 3.0F, 0.5F, 4.0F, cube), + PartPose.ZERO); + + final PartDefinition leftArm = part.addOrReplaceChild( + leftArmID, + CubeListBuilder.create().mirror(), + PartPose.ZERO + ); + + leftArm.addOrReplaceChild("shoulder_side", + CubeListBuilder.create() + .texOffs(0, 0) + .addBox(-0.1F, 1.0F, -2.0F, 3.0F, 0.5F, 4.0F, cube), + PartPose.ZERO); + + leftArm.addOrReplaceChild("upper", + CubeListBuilder.create() + .texOffs(0, 0) + .addBox(-0.1F, 3.0F, -2.0F, 3.0F, 0.5F, 4.0F, cube), + PartPose.ZERO); + + leftArm.addOrReplaceChild("middle", + CubeListBuilder.create() + .texOffs(0, 0) + .addBox(-0.1F, 5.0F, -2.0F, 3.0F, 0.5F, 4.0F, cube), + PartPose.ZERO); + + leftArm.addOrReplaceChild("lower", + CubeListBuilder.create() + .texOffs(0, 0) + .addBox(-0.1F, 7.0F, -2.0F, 3.0F, 0.5F, 4.0F, cube), + PartPose.ZERO); + + return LayerDefinition.create(mesh, 16, 16); + } + + @Override + @Nonnull + protected Iterable headParts() + { + return ImmutableList.of(); + } + + @Override + @Nonnull + protected Iterable bodyParts() + { + return ImmutableList.of( + this.rightArm, + this.leftArm); + } + + public void render(ItemStack stack, SlotContext slotContext, PoseStack matrixStack, MultiBufferSource buffer, int light) + { + final boolean leftHandSide = slotContext.index() % 2 == 0; + + ModelPart modelPartToRender = null; + if (slotContext.identifier().equals(braceletID)) + { + modelPartToRender = switch (slotContext.index()) + { + case 0 -> leftShoulderSide; + case 1 -> rightShoulderSide; + case 2 -> leftArmUpper; + case 3 -> rightArmUpper; + case 4 -> leftArmMiddle; + case 5 -> rightArmMiddle; + case 6 -> leftArmLower; + case 7 -> rightArmLower; + default -> null; + }; + } + + if (modelPartToRender == null) + { + return; + } + + modelPartToRender.copyFrom(this.root.getChild(leftHandSide ? leftArmID : rightArmID)); + + IHasMetalType item = (IHasMetalType) stack.getItem(); + + Color color = item.getMetalType().getColor(); + VertexConsumer vertexBuilder = ItemRenderer.getFoilBuffer( + buffer, + renderType(TEXTURE), + false, + stack.getItem() == FeruchemyItems.BANDS_OF_MOURNING.get()); + + + modelPartToRender.render( + matrixStack, + vertexBuilder, + light, + OverlayTexture.NO_OVERLAY, + color.getRed() / 255f, + color.getGreen() / 255f, + color.getBlue() / 255f, + 1); + + + /* + //debug only, so a spike will render in all locations + renderToBuffer( + matrixStack, + vertexBuilder, + light, + OverlayTexture.NO_OVERLAY, + color.getRed(), + color.getGreen(), + color.getBlue(), + 1);*/ + + + } +} diff --git a/src/feruchemy/java/leaf/cosmere/feruchemy/client/render/renderer/BraceletRenderer.java b/src/feruchemy/java/leaf/cosmere/feruchemy/client/render/renderer/BraceletRenderer.java new file mode 100644 index 000000000..cd9eb8389 --- /dev/null +++ b/src/feruchemy/java/leaf/cosmere/feruchemy/client/render/renderer/BraceletRenderer.java @@ -0,0 +1,63 @@ +/* + * File updated ~ 8 - 10 - 2022 ~ Leaf + */ + +package leaf.cosmere.feruchemy.client.render.renderer; + +import com.mojang.blaze3d.vertex.PoseStack; +import leaf.cosmere.feruchemy.client.render.FeruchemyLayerDefinitions; +import leaf.cosmere.feruchemy.client.render.model.BraceletModel; +import net.minecraft.client.Minecraft; +import net.minecraft.client.model.EntityModel; +import net.minecraft.client.model.geom.ModelPart; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.entity.RenderLayerParent; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.item.ItemStack; +import top.theillusivec4.curios.api.SlotContext; +import top.theillusivec4.curios.api.client.ICurioRenderer; + +public class BraceletRenderer implements ICurioRenderer +{ + BraceletModel model; + + public BraceletRenderer() + { + final ModelPart modelPart = Minecraft.getInstance().getEntityModels().bakeLayer(FeruchemyLayerDefinitions.BRACELET); + model = new BraceletModel(modelPart); + } + + @Override + public > void render( + ItemStack stack, + SlotContext slotContext, + PoseStack matrixStack, + RenderLayerParent renderLayerParent, + MultiBufferSource renderTypeBuffer, + int light, float limbSwing, + float limbSwingAmount, + float partialTicks, + float ageInTicks, + float netHeadYaw, + float headPitch) + { + + LivingEntity entity = slotContext.entity(); + + MobEffectInstance effectInstance = entity.getEffect(MobEffects.INVISIBILITY); + if (effectInstance != null && effectInstance.getDuration() > 0) + { + return; + } + + this.model.prepareMobModel(entity, limbSwing, limbSwingAmount, partialTicks); + this.model.setupAnim(entity, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch); + + ICurioRenderer.followBodyRotations(entity, this.model); + + this.model.render(stack, slotContext, matrixStack, renderTypeBuffer, light); + + } +} diff --git a/src/feruchemy/java/leaf/cosmere/feruchemy/client/utils/FeruchemyChargeThread.java b/src/feruchemy/java/leaf/cosmere/feruchemy/client/utils/FeruchemyChargeThread.java new file mode 100644 index 000000000..47df8f6b3 --- /dev/null +++ b/src/feruchemy/java/leaf/cosmere/feruchemy/client/utils/FeruchemyChargeThread.java @@ -0,0 +1,189 @@ +/* + * File updated ~ 10 - 8 - 2024 ~ Leaf + */ + +package leaf.cosmere.feruchemy.client.utils; + +import leaf.cosmere.api.CosmereAPI; +import leaf.cosmere.api.Metals; +import leaf.cosmere.common.items.ChargeableMetalCurioItem; +import net.minecraft.client.Minecraft; +import net.minecraft.world.item.ItemStack; +import top.theillusivec4.curios.api.CuriosApi; +import top.theillusivec4.curios.api.type.inventory.ICurioStacksHandler; +import top.theillusivec4.curios.api.type.inventory.IDynamicStackHandler; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReentrantLock; + +public class FeruchemyChargeThread implements Runnable +{ + private static final Lock lock = new ReentrantLock(); + private static FeruchemyChargeThread INSTANCE; + private static final HashMap feruchemyChargeMap = new HashMap<>(); + static Thread t; + static boolean isStopping = false; + + public static FeruchemyChargeThread getInstance() + { + if (INSTANCE == null) + { + INSTANCE = new FeruchemyChargeThread(); + } + + return INSTANCE; + } + + public HashMap getCharges() + { + try + { + HashMap retVal = new HashMap<>(); + if (lock.tryLock()) + { + retVal.putAll(feruchemyChargeMap); + lock.unlock(); + } + return retVal; + } + catch (Exception e) + { + e.printStackTrace(); + lock.unlock(); + } + return new HashMap<>(); + } + + public void start() + { + if (t == null || isStopping) + { + CosmereAPI.logger.info("Feruchemy thread started"); + t = new Thread(this, "feruchemy_enumerator_thread"); + isStopping = false; + t.start(); + } + } + + public void stop() + { + if (t != null && !isStopping) + { + isStopping = true; + } + } + + @Override + public void run() + { + Minecraft mc = Minecraft.getInstance(); + + // hashmap to keep track of each metal's f-charge in the inventory + final HashMap metalmindCharges = new HashMap<>(); + + while (!isStopping) + { + try + { + // no serverside action, unloaded levels, or non-existent players allowed >:( + if (mc.level == null || mc.player == null || !mc.level.isClientSide) + { + break; + } + + if (mc.player.tickCount % 2 != 0) // only run on even ticks + { + try + { + Thread.sleep(50); // 20 ticks per 1000ms, 1000/20 = 50, rest for 1 tick + } + catch (Exception e) + { + e.printStackTrace(); + } + continue; + } + + metalmindCharges.clear(); + + // all inventory metalminds are counted + for (ItemStack stack : mc.player.getInventory().items) + { + if (stack.getItem() instanceof ChargeableMetalCurioItem item) + { + // is either f-item or h-item + //if (item.getItemCategory() == FeruchemyItemGroups.METALMINDS) + { + Double chargeToAdd = (double) item.getCharge(stack); + if (metalmindCharges.containsKey(item.getMetalType())) + { + metalmindCharges.put(item.getMetalType(), metalmindCharges.get(item.getMetalType()) + chargeToAdd); + } + else + { + metalmindCharges.put(item.getMetalType(), chargeToAdd); + } + } + } + } + + // all curio metalminds are counted + CuriosApi.getCuriosInventory(mc.player).ifPresent(handler -> + { + Map curios = handler.getCurios(); + for (ICurioStacksHandler stacksHandler : curios.values()) + { + final IDynamicStackHandler stacks = stacksHandler.getStacks(); + + for (int i = 0; i < stacks.getSlots(); i++) + { + final ItemStack stackInSlot = stacks.getStackInSlot(i); + if (stackInSlot.getItem() instanceof ChargeableMetalCurioItem item) + { + Double chargeToAdd = (double) item.getCharge(stackInSlot); + if (metalmindCharges.containsKey(item.getMetalType())) + { + metalmindCharges.put(item.getMetalType(), metalmindCharges.get(item.getMetalType()) + chargeToAdd); + } + else + { + metalmindCharges.put(item.getMetalType(), chargeToAdd); + } + } + } + } + }); + + CuriosApi.getCuriosInventory(mc.player) + .map(mapper -> + { + + return true; + }); + + try + { + if (lock.tryLock()) + { + feruchemyChargeMap.clear(); + feruchemyChargeMap.putAll(metalmindCharges); + lock.unlock(); + } + } + catch (Exception e) + { + e.printStackTrace(); + lock.unlock(); + } + } + catch (Exception e) + { + CosmereAPI.logger.warn(Arrays.toString(e.getStackTrace())); + } + } + stop(); + } +} diff --git a/src/feruchemy/java/leaf/cosmere/feruchemy/common/Feruchemy.java b/src/feruchemy/java/leaf/cosmere/feruchemy/common/Feruchemy.java new file mode 100644 index 000000000..bb6809dd8 --- /dev/null +++ b/src/feruchemy/java/leaf/cosmere/feruchemy/common/Feruchemy.java @@ -0,0 +1,105 @@ +/* + * File updated ~ 10 - 8 - 2024 ~ Leaf + */ + +package leaf.cosmere.feruchemy.common; + +import leaf.cosmere.api.CosmereAPI; +import leaf.cosmere.api.IModModule; +import leaf.cosmere.api.ISpiritwebSubmodule; +import leaf.cosmere.api.Version; +import leaf.cosmere.common.Cosmere; +import leaf.cosmere.common.config.CosmereModConfig; +import leaf.cosmere.feruchemy.common.capabilities.FeruchemySpiritwebSubmodule; +import leaf.cosmere.feruchemy.common.config.FeruchemyConfigs; +import leaf.cosmere.feruchemy.common.registries.*; +import net.minecraft.resources.ResourceLocation; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.eventbus.api.IEventBus; +import net.minecraftforge.fml.ModLoadingContext; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.config.ModConfig; +import net.minecraftforge.fml.event.config.ModConfigEvent; +import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; +import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; + +@Mod(Feruchemy.MODID) +public class Feruchemy implements IModModule +{ + public static final String MODID = "feruchemy"; + + public static Feruchemy instance; + + public final Version versionNumber; + + public Feruchemy() + { + Cosmere.addModule(instance = this); + + IEventBus modBus = FMLJavaModLoadingContext.get().getModEventBus(); + + + FeruchemyConfigs.registerConfigs(ModLoadingContext.get()); + + modBus.addListener(this::commonSetup); + modBus.addListener(this::onConfigLoad); + modBus.addListener(this::onConfigReload); + FeruchemyItems.ITEMS.register(modBus); + FeruchemyAttributes.ATTRIBUTES.register(modBus); + FeruchemyManifestations.MANIFESTATIONS.register(modBus); + FeruchemyLootFunctions.LOOT_FUNCTIONS.register(modBus); + FeruchemyEffects.EFFECTS.register(modBus); + FeruchemyCreativeTabs.CREATIVE_TABS.register(modBus); + + //Set our version number to match the mods.toml file, which matches the one in our build.gradle + versionNumber = new Version(ModLoadingContext.get().getActiveContainer()); + } + + public static ResourceLocation rl(String path) + { + return new ResourceLocation(Feruchemy.MODID, path); + } + + public void commonSetup(FMLCommonSetupEvent event) + { + CosmereAPI.logger.info("Cosmere: Feruchemy module Version {} initializing...", versionNumber); + MinecraftForge.EVENT_BUS.register(this); + + } + + @Override + public Version getVersion() + { + return versionNumber; + } + + @Override + public String getName() + { + return "Feruchemy"; + } + + @Override + public ISpiritwebSubmodule makeSubmodule() + { + return new FeruchemySpiritwebSubmodule(); + } + + private void onConfigLoad(ModConfigEvent configEvent) + { + ModConfig config = configEvent.getConfig(); + if (config.getModId().equals(MODID) && config instanceof CosmereModConfig cosmereModConfig) + { + cosmereModConfig.clearCache(); + } + } + + private void onConfigReload(ModConfigEvent.Reloading configEvent) + { + ModConfig config = configEvent.getConfig(); + if (config.getModId().equals(MODID) && config instanceof CosmereModConfig cosmereModConfig) + { + cosmereModConfig.clearCache(); + } + } +} \ No newline at end of file diff --git a/src/feruchemy/java/leaf/cosmere/feruchemy/common/capabilities/FeruchemySpiritwebSubmodule.java b/src/feruchemy/java/leaf/cosmere/feruchemy/common/capabilities/FeruchemySpiritwebSubmodule.java new file mode 100644 index 000000000..1bbdab9b2 --- /dev/null +++ b/src/feruchemy/java/leaf/cosmere/feruchemy/common/capabilities/FeruchemySpiritwebSubmodule.java @@ -0,0 +1,97 @@ +/* + * File updated ~ 5 - 3 - 2025 ~ Leaf + */ + +package leaf.cosmere.feruchemy.common.capabilities; + +import leaf.cosmere.api.ISpiritwebSubmodule; +import leaf.cosmere.api.Metals; +import leaf.cosmere.api.helpers.PlayerHelper; +import leaf.cosmere.api.manifestation.Manifestation; +import leaf.cosmere.api.math.MathHelper; +import leaf.cosmere.api.spiritweb.ISpiritweb; +import leaf.cosmere.feruchemy.client.utils.FeruchemyChargeThread; +import leaf.cosmere.feruchemy.common.config.FeruchemyConfigs; +import leaf.cosmere.feruchemy.common.items.RingMetalmindItem; +import leaf.cosmere.feruchemy.common.manifestation.FeruchemyManifestation; +import leaf.cosmere.feruchemy.common.registries.FeruchemyItems; +import net.minecraft.client.Minecraft; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; + +import java.util.HashMap; +import java.util.List; + +public class FeruchemySpiritwebSubmodule implements ISpiritwebSubmodule +{ + private static final HashMap metalmindChargesMap = new HashMap<>(); + + @Override + public void GiveStartingItem(Player player) + { + final int startingMetalmindCount = FeruchemyConfigs.SERVER.FULL_FERUCHEMIST_STARTING_METALMIND_COUNT.get(); + final double maxAmount = FeruchemyConfigs.SERVER.STARTING_METALMIND_RANDOMISED_MAX_FILL_AMOUNT.get(); + + for (int i = 0; i < startingMetalmindCount; i++) + { + final float fillAmount = (float) (maxAmount * Math.random()); + int id = MathHelper.randomInt(0, 15); + Metals.MetalType.valueOf(id).ifPresent(metalType -> GiveStartingItem(player, metalType, fillAmount)); + } + } + + @Override + public void GiveStartingItem(Player player, Manifestation manifestation) + { + if (manifestation instanceof FeruchemyManifestation feruchemyManifestation) + { + final double maxAmount = FeruchemyConfigs.SERVER.STARTING_METALMIND_RANDOMISED_MAX_FILL_AMOUNT.get(); + + final float fillAmount = (float) (maxAmount * Math.random()); + GiveStartingItem(player, feruchemyManifestation.getMetalType(), fillAmount); + } + } + + @Override + public void drainInvestiture(ISpiritweb data, double strength) + { + //todo - how should we handle draining feruchemy? + // remove the effects only? can we even detect that properly? + } + + @Override + @OnlyIn(Dist.CLIENT) + public void collectMenuInfo(List m_infoText) + { + if (Minecraft.getInstance().player != null && Minecraft.getInstance().player.tickCount % 2 == 1) // only do on odd tick + { + metalmindChargesMap.clear(); + metalmindChargesMap.putAll(FeruchemyChargeThread.getInstance().getCharges()); + } + + if (!metalmindChargesMap.isEmpty()) + { + for (Metals.MetalType metalType : metalmindChargesMap.keySet()) + { + // todo localisation check + final String text = "F. " + metalType.getName() + ": " + metalmindChargesMap.getOrDefault(metalType, 0D).intValue(); + m_infoText.add(text); + } + } + + ISpiritwebSubmodule.super.collectMenuInfo(m_infoText); + } + + private static void GiveStartingItem(Player player, Metals.MetalType metalType, float fillAmount) + { + final RingMetalmindItem metalmindItem = FeruchemyItems.METAL_RINGS.get(metalType).get(); + ItemStack itemStack = new ItemStack(metalmindItem); + + + metalmindItem.setCharge(itemStack, (int) (metalmindItem.getMaxCharge(itemStack) * fillAmount)); + PlayerHelper.addItem(player, itemStack); + } + +} diff --git a/src/feruchemy/java/leaf/cosmere/feruchemy/common/compat/jei/FeruchemyJEICompat.java b/src/feruchemy/java/leaf/cosmere/feruchemy/common/compat/jei/FeruchemyJEICompat.java new file mode 100644 index 000000000..9a4310a2e --- /dev/null +++ b/src/feruchemy/java/leaf/cosmere/feruchemy/common/compat/jei/FeruchemyJEICompat.java @@ -0,0 +1,51 @@ +/* + * File updated ~ 20 - 11 - 2024 ~ Leaf + */ + +package leaf.cosmere.feruchemy.common.compat.jei; + +import leaf.cosmere.api.Constants; +import leaf.cosmere.api.EnumUtils; +import leaf.cosmere.api.Metals; +import leaf.cosmere.api.text.TextHelper; +import leaf.cosmere.feruchemy.common.registries.FeruchemyItems; +import mezz.jei.api.IModPlugin; +import mezz.jei.api.JeiPlugin; +import mezz.jei.api.constants.VanillaTypes; +import mezz.jei.api.registration.IRecipeRegistration; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.Item; + +@JeiPlugin +public class FeruchemyJEICompat implements IModPlugin +{ + @Override + public ResourceLocation getPluginUid() + { + return Constants.Resources.JEI_FERUCHEMY; + } + + @Override + public void registerRecipes(IRecipeRegistration reg) + { + for (Metals.MetalType metalType : EnumUtils.METAL_TYPES) + { + if (metalType.hasFeruchemicalEffect()) + { + addItemInfoPage(reg, FeruchemyItems.METAL_NECKLACES.get(metalType).asItem()); + addItemInfoPage(reg, FeruchemyItems.METAL_RINGS.get(metalType).asItem()); + addItemInfoPage(reg, FeruchemyItems.METAL_BRACELETS.get(metalType).asItem()); + } + } + } + + private void addItemInfoPage(IRecipeRegistration reg, Item item) + { + reg.addIngredientInfo( + item.getDefaultInstance(), + VanillaTypes.ITEM_STACK, + TextHelper.createTranslatedText(String.format("item.%s.%s.tooltip", getPluginUid().getNamespace(), item) + )); + } + +} diff --git a/src/feruchemy/java/leaf/cosmere/feruchemy/common/config/FeruchemyConfigs.java b/src/feruchemy/java/leaf/cosmere/feruchemy/common/config/FeruchemyConfigs.java new file mode 100644 index 000000000..ff7248148 --- /dev/null +++ b/src/feruchemy/java/leaf/cosmere/feruchemy/common/config/FeruchemyConfigs.java @@ -0,0 +1,21 @@ +/* + * File updated ~ 28 - 2 - 2023 ~ Leaf + */ + +package leaf.cosmere.feruchemy.common.config; + +import leaf.cosmere.common.config.CosmereConfigHelper; +import net.minecraftforge.fml.ModContainer; +import net.minecraftforge.fml.ModLoadingContext; + +public class FeruchemyConfigs +{ + public static final FeruchemyServerConfig SERVER = new FeruchemyServerConfig(); + + public static void registerConfigs(ModLoadingContext modLoadingContext) + { + ModContainer modContainer = modLoadingContext.getActiveContainer(); + CosmereConfigHelper.registerConfig(modContainer, SERVER); + } + +} diff --git a/src/feruchemy/java/leaf/cosmere/feruchemy/common/config/FeruchemyServerConfig.java b/src/feruchemy/java/leaf/cosmere/feruchemy/common/config/FeruchemyServerConfig.java new file mode 100644 index 000000000..3b05c10fd --- /dev/null +++ b/src/feruchemy/java/leaf/cosmere/feruchemy/common/config/FeruchemyServerConfig.java @@ -0,0 +1,68 @@ +/* + * File updated ~ 7 - 6 - 2023 ~ Leaf + */ + +package leaf.cosmere.feruchemy.common.config; + +import leaf.cosmere.common.config.ICosmereConfig; +import net.minecraftforge.common.ForgeConfigSpec; +import net.minecraftforge.fml.config.ModConfig.Type; + +public class FeruchemyServerConfig implements ICosmereConfig +{ + + private final ForgeConfigSpec configSpec; + + public final ForgeConfigSpec.IntValue BENDALLOY_SATURATION_MULTIPLIER; + public final ForgeConfigSpec.IntValue GOLD_TAP_COST_MULTIPLIER; + + public final ForgeConfigSpec.IntValue GOD_METAL_EAT_STRENGTH_MINIMUM; + public final ForgeConfigSpec.IntValue FULL_FERUCHEMIST_STARTING_METALMIND_COUNT; + public final ForgeConfigSpec.DoubleValue STARTING_METALMIND_RANDOMISED_MAX_FILL_AMOUNT; + + FeruchemyServerConfig() + { + ForgeConfigSpec.Builder builder = new ForgeConfigSpec.Builder(); + builder.comment("Feruchemy Config. This config is synced between server and client.").push("feruchemy"); + + BENDALLOY_SATURATION_MULTIPLIER = builder.comment("The cost multiplier for when player is full and needs to start doing saturation").defineInRange("bendalloySaturationMultiplier", 2, 1, Integer.MAX_VALUE); + GOLD_TAP_COST_MULTIPLIER = builder.comment("Healing cost multiplier for tapping").defineInRange("goldTapCostMultiplier", 2, 1, Integer.MAX_VALUE); + GOD_METAL_EAT_STRENGTH_MINIMUM = builder.comment("When the user eats a lerasatium nugget, what should their strength in feruchemy be set to").defineInRange("godMetalMinimumStrength", 16, 1, 32); + FULL_FERUCHEMIST_STARTING_METALMIND_COUNT = builder.comment("How many metalminds should a full feruchemist start with?").defineInRange("fullFeruchemistStartingMetalmindCount", 3, 0, 16); + + STARTING_METALMIND_RANDOMISED_MAX_FILL_AMOUNT = builder + .comment("What is the max amount a starting metalmind can be filled with attribute? The value is randomised, with this set as the max.") + .defineInRange("fullFeruchemistStartingMetalmindFillAmount", 0.6667, 0, 1); + + builder.pop(); + configSpec = builder.build(); + } + + @Override + public String getFileName() + { + return "FeruchemyServer"; + } + + @Override + public ForgeConfigSpec getConfigSpec() + { + return configSpec; + } + + @Override + public Type getConfigType() + { + return Type.SERVER; + } + + @Override + public void clearCache() + { + BENDALLOY_SATURATION_MULTIPLIER.clearCache(); + GOLD_TAP_COST_MULTIPLIER.clearCache(); + GOD_METAL_EAT_STRENGTH_MINIMUM.clearCache(); + FULL_FERUCHEMIST_STARTING_METALMIND_COUNT.clearCache(); + STARTING_METALMIND_RANDOMISED_MAX_FILL_AMOUNT.clearCache(); + } +} \ No newline at end of file diff --git a/src/feruchemy/java/leaf/cosmere/feruchemy/common/effects/FeruchemyEffectBase.java b/src/feruchemy/java/leaf/cosmere/feruchemy/common/effects/FeruchemyEffectBase.java new file mode 100644 index 000000000..17dfa42e3 --- /dev/null +++ b/src/feruchemy/java/leaf/cosmere/feruchemy/common/effects/FeruchemyEffectBase.java @@ -0,0 +1,33 @@ +/* + * File updated ~ 8 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.feruchemy.common.effects; + +import leaf.cosmere.api.IHasMetalType; +import leaf.cosmere.api.Metals; +import leaf.cosmere.api.cosmereEffect.CosmereEffect; + +public class FeruchemyEffectBase extends CosmereEffect implements IHasMetalType +{ + protected final Metals.MetalType metalType; + + public FeruchemyEffectBase(Metals.MetalType type) + { + super(); + metalType = type; + } + + @Override + public Metals.MetalType getMetalType() + { + return this.metalType; + } + + @Override + protected int getTickOffset() + { + return metalType.getID(); + } + +} diff --git a/src/feruchemy/java/leaf/cosmere/feruchemy/common/effects/store/AluminumStoreEffect.java b/src/feruchemy/java/leaf/cosmere/feruchemy/common/effects/store/AluminumStoreEffect.java new file mode 100644 index 000000000..aee0db383 --- /dev/null +++ b/src/feruchemy/java/leaf/cosmere/feruchemy/common/effects/store/AluminumStoreEffect.java @@ -0,0 +1,24 @@ +/* + * File updated ~ 29 - 10 - 2023 ~ Leaf + */ + +package leaf.cosmere.feruchemy.common.effects.store; + +import leaf.cosmere.api.Metals; +import leaf.cosmere.common.registry.AttributesRegistry; +import leaf.cosmere.feruchemy.common.effects.FeruchemyEffectBase; +import net.minecraft.world.entity.ai.attributes.AttributeModifier; + +//luck +public class AluminumStoreEffect extends FeruchemyEffectBase +{ + public AluminumStoreEffect(Metals.MetalType type) + { + super(type); + + addAttributeModifier( + AttributesRegistry.IDENTITY.getAttribute(), + -1.0D, + AttributeModifier.Operation.ADDITION); + } +} diff --git a/src/feruchemy/java/leaf/cosmere/feruchemy/common/effects/store/AtiumStoreEffect.java b/src/feruchemy/java/leaf/cosmere/feruchemy/common/effects/store/AtiumStoreEffect.java new file mode 100644 index 000000000..5bd510176 --- /dev/null +++ b/src/feruchemy/java/leaf/cosmere/feruchemy/common/effects/store/AtiumStoreEffect.java @@ -0,0 +1,62 @@ +/* + * File updated ~ 8 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.feruchemy.common.effects.store; + +import leaf.cosmere.api.Metals; +import leaf.cosmere.api.spiritweb.ISpiritweb; +import leaf.cosmere.common.registry.AttributesRegistry; +import leaf.cosmere.feruchemy.common.effects.FeruchemyEffectBase; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.ai.attributes.AttributeModifier; +import net.minecraft.world.entity.ai.attributes.Attributes; + +//health +public class AtiumStoreEffect extends FeruchemyEffectBase +{ + public AtiumStoreEffect(Metals.MetalType type) + { + super(type); + + //atium attribute, size + addAttributeModifier( + AttributesRegistry.SIZE_ATTRIBUTE.get(), + -0.15D, + AttributeModifier.Operation.ADDITION); + + //reduce related attributes appropriately + addAttributeModifier( + Attributes.MOVEMENT_SPEED, + -0.1D, + AttributeModifier.Operation.MULTIPLY_TOTAL); + addAttributeModifier( + Attributes.MAX_HEALTH, + -0.1D, + AttributeModifier.Operation.MULTIPLY_TOTAL); + addAttributeModifier( + Attributes.KNOCKBACK_RESISTANCE, + -0.1D, + AttributeModifier.Operation.MULTIPLY_TOTAL); + addAttributeModifier( + Attributes.ATTACK_DAMAGE, + -0.1D, + AttributeModifier.Operation.MULTIPLY_TOTAL); + addAttributeModifier( + Attributes.ATTACK_KNOCKBACK, + -0.1D, + AttributeModifier.Operation.MULTIPLY_TOTAL); + } + + + @Override + public void applyEffectTick(ISpiritweb data, double strength) + { + final LivingEntity living = data.getLiving(); + if (living.getHealth() > living.getMaxHealth()) + { + living.setHealth(living.getMaxHealth()); + } + } + +} diff --git a/src/feruchemy/java/leaf/cosmere/feruchemy/common/effects/store/BendalloyStoreEffect.java b/src/feruchemy/java/leaf/cosmere/feruchemy/common/effects/store/BendalloyStoreEffect.java new file mode 100644 index 000000000..51262e3ec --- /dev/null +++ b/src/feruchemy/java/leaf/cosmere/feruchemy/common/effects/store/BendalloyStoreEffect.java @@ -0,0 +1,32 @@ +/* + * File updated ~ 9 - 8 - 2024 ~ Leaf + */ + +package leaf.cosmere.feruchemy.common.effects.store; + +import leaf.cosmere.api.Metals; +import leaf.cosmere.api.spiritweb.ISpiritweb; +import leaf.cosmere.feruchemy.common.effects.FeruchemyEffectBase; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.food.FoodData; + +// food +public class BendalloyStoreEffect extends FeruchemyEffectBase +{ + public BendalloyStoreEffect(Metals.MetalType type) + { + super(type); + } + + + @Override + public void applyEffectTick(ISpiritweb data, double strength) + { + if (data.getLiving() instanceof Player player && !player.level().isClientSide) + { + final FoodData foodData = player.getFoodData(); + foodData.setFoodLevel((int) Math.max(0, foodData.getFoodLevel() - (1 + strength))); + foodData.setSaturation(Math.min(foodData.getFoodLevel(), foodData.getSaturationLevel())); + } + } +} diff --git a/src/feruchemy/java/leaf/cosmere/feruchemy/common/effects/store/BrassStoreEffect.java b/src/feruchemy/java/leaf/cosmere/feruchemy/common/effects/store/BrassStoreEffect.java new file mode 100644 index 000000000..d371707c0 --- /dev/null +++ b/src/feruchemy/java/leaf/cosmere/feruchemy/common/effects/store/BrassStoreEffect.java @@ -0,0 +1,94 @@ +/* + * File updated ~ 9 - 8 - 2024 ~ Leaf + */ + +package leaf.cosmere.feruchemy.common.effects.store; + +import leaf.cosmere.api.Metals; +import leaf.cosmere.api.helpers.EntityHelper; +import leaf.cosmere.common.registry.AttributesRegistry; +import leaf.cosmere.feruchemy.common.effects.FeruchemyEffectBase; +import net.minecraft.world.damagesource.DamageTypes; +import net.minecraft.world.entity.ai.attributes.AttributeModifier; +import net.minecraftforge.event.entity.living.LivingAttackEvent; +import net.minecraftforge.event.entity.living.LivingHurtEvent; + +//warmth +public class BrassStoreEffect extends FeruchemyEffectBase +{ + public BrassStoreEffect(Metals.MetalType type) + { + super(type); + addAttributeModifier( + AttributesRegistry.WARMTH.get(), + -1, // colder when storing + AttributeModifier.Operation.ADDITION); + } + + public static void onLivingHurtEvent(LivingHurtEvent event) + { + if (!event.getSource().is(DamageTypes.ON_FIRE) || event.isCanceled()) + { + return; + } + + //a higher total means hotter + //a lower total means colder + final int total = (int) EntityHelper.getAttributeValue(event.getEntity(), AttributesRegistry.WARMTH.getAttribute()); + if (total < 0) + { + //absolute value, because we're using the mode as the strength for feruchemy + int warmth = Math.abs(total); + final float amount; + switch (warmth) + { + case 1: + amount = event.getAmount() / 2; + break; + case 2: + amount = event.getAmount() / 4; + break; + default: + case 3: + event.setCanceled(true); + return; + } + event.setAmount(amount); + } + } + + + public static void onLivingAttackEvent(LivingAttackEvent event) + { + //todo - check if on fire is what this is meant to be + //and whether we should actually be cancelling damage outright is correct + if (!event.getSource().is(DamageTypes.ON_FIRE) || event.isCanceled()) + { + return; + } + + //a higher total means hotter + //a lower total means colder + final int total = (int) EntityHelper.getAttributeValue(event.getEntity(), AttributesRegistry.WARMTH.getAttribute()); + if (total < 0) + { + //absolute value, because we're using the mode as the strength for feruchemy + int warmth = Math.abs(total); + switch (warmth) + { + case 0: + case 1: + case 2: + break; + default: + case 3: + if (event.getEntity().isOnFire()) + { + event.getEntity().clearFire(); + } + event.setCanceled(true); + } + } + } + +} diff --git a/src/feruchemy/java/leaf/cosmere/feruchemy/common/effects/store/CadmiumStoreEffect.java b/src/feruchemy/java/leaf/cosmere/feruchemy/common/effects/store/CadmiumStoreEffect.java new file mode 100644 index 000000000..74b2166d6 --- /dev/null +++ b/src/feruchemy/java/leaf/cosmere/feruchemy/common/effects/store/CadmiumStoreEffect.java @@ -0,0 +1,66 @@ +/* + * File updated ~ 8 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.feruchemy.common.effects.store; + +import leaf.cosmere.api.Metals; +import leaf.cosmere.api.spiritweb.ISpiritweb; +import leaf.cosmere.feruchemy.common.effects.FeruchemyEffectBase; +import net.minecraft.core.registries.Registries; +import net.minecraft.util.Mth; +import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.damagesource.DamageTypes; +import net.minecraft.world.entity.LivingEntity; + +// air +public class CadmiumStoreEffect extends FeruchemyEffectBase +{ + public CadmiumStoreEffect(Metals.MetalType type) + { + super(type); + } + + @Override + protected boolean isActiveTick(ISpiritweb data) + { + //just make cadmium always run effect tick. + return true; + } + + @Override + protected int getActiveTick() + { + return 50; + } + + @Override + public void applyEffectTick(ISpiritweb data, double strength) + { + final LivingEntity living = data.getLiving(); + if (living.level().isClientSide) + { + return; + } + + final int minAirSupply = -20; + final int maxAirSupply = living.getMaxAirSupply(); + final double potentialNextVal = living.getAirSupply() - 4 - (strength); + + if (strength >= 0.0) + { + // set to just low enough that bubbles appear in the hud, or potentialNextVal, whichever is lower + living.setAirSupply((int) Math.min(potentialNextVal, maxAirSupply-10)); + } + else + { + living.setAirSupply((int) Mth.clamp(potentialNextVal, minAirSupply, maxAirSupply)); + } + + //every 2.5 seconds + if (living.getAirSupply() < -10 && (getTickToCheck(data) % getActiveTick() == 0)) + { + living.hurt(new DamageSource(living.level().registryAccess().registryOrThrow(Registries.DAMAGE_TYPE).getHolderOrThrow(DamageTypes.DROWN)), 2.0F); + } + } +} diff --git a/src/feruchemy/java/leaf/cosmere/feruchemy/common/effects/store/ChromiumStoreEffect.java b/src/feruchemy/java/leaf/cosmere/feruchemy/common/effects/store/ChromiumStoreEffect.java new file mode 100644 index 000000000..c96df41b7 --- /dev/null +++ b/src/feruchemy/java/leaf/cosmere/feruchemy/common/effects/store/ChromiumStoreEffect.java @@ -0,0 +1,30 @@ +/* + * File updated ~ 23 - 10 - 2023 ~ Leaf + */ + +package leaf.cosmere.feruchemy.common.effects.store; + +import leaf.cosmere.api.Metals; +import leaf.cosmere.common.registry.AttributesRegistry; +import leaf.cosmere.feruchemy.common.effects.FeruchemyEffectBase; +import net.minecraft.world.entity.ai.attributes.AttributeModifier; +import net.minecraft.world.entity.ai.attributes.Attributes; + +//luck +public class ChromiumStoreEffect extends FeruchemyEffectBase +{ + public ChromiumStoreEffect(Metals.MetalType type) + { + super(type); + + addAttributeModifier( + Attributes.LUCK, + -1.0D, + AttributeModifier.Operation.ADDITION); + + addAttributeModifier( + AttributesRegistry.COSMERE_FORTUNE.getAttribute(), + -1.0D, + AttributeModifier.Operation.ADDITION); + } +} diff --git a/src/feruchemy/java/leaf/cosmere/feruchemy/common/effects/store/DuraluminStoreEffect.java b/src/feruchemy/java/leaf/cosmere/feruchemy/common/effects/store/DuraluminStoreEffect.java new file mode 100644 index 000000000..ccca09f8a --- /dev/null +++ b/src/feruchemy/java/leaf/cosmere/feruchemy/common/effects/store/DuraluminStoreEffect.java @@ -0,0 +1,49 @@ +/* + * File updated ~ 23 - 10 - 2023 ~ Leaf + */ + +package leaf.cosmere.feruchemy.common.effects.store; + +import leaf.cosmere.api.Metals; +import leaf.cosmere.api.helpers.EntityHelper; +import leaf.cosmere.common.registry.AttributesRegistry; +import leaf.cosmere.feruchemy.common.effects.FeruchemyEffectBase; +import net.minecraft.world.entity.ai.attributes.AttributeModifier; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.event.entity.living.LivingEvent; + +//connection aka ability for people to notice you +public class DuraluminStoreEffect extends FeruchemyEffectBase +{ + public DuraluminStoreEffect(Metals.MetalType type) + { + super(type); + + addAttributeModifier( + AttributesRegistry.CONNECTION.getAttribute(), + -1.0D, + AttributeModifier.Operation.ADDITION); + + MinecraftForge.EVENT_BUS.addListener(this::onLivingVisibilityEvent); + } + + public void onLivingVisibilityEvent(LivingEvent.LivingVisibilityEvent event) + { + if (event.isCanceled()) + { + return; + } + + int attributeValue = (int) EntityHelper.getAttributeValue(event.getEntity(), AttributesRegistry.CONNECTION.getAttribute()); + if (attributeValue < 0) + { + int abs = Math.abs(attributeValue); + + //at max strength and wearing no armor, you could stand a block or two away from a creeper and it won't see you. + //walk right into it though, and it will blow up. + event.modifyVisibility(1f / (abs + 2)); + } + + } + +} diff --git a/src/feruchemy/java/leaf/cosmere/feruchemy/common/effects/store/ElectrumStoreEffect.java b/src/feruchemy/java/leaf/cosmere/feruchemy/common/effects/store/ElectrumStoreEffect.java new file mode 100644 index 000000000..300556ccf --- /dev/null +++ b/src/feruchemy/java/leaf/cosmere/feruchemy/common/effects/store/ElectrumStoreEffect.java @@ -0,0 +1,24 @@ +/* + * File updated ~ 21 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.feruchemy.common.effects.store; + +import leaf.cosmere.api.Metals; +import leaf.cosmere.common.registry.AttributesRegistry; +import leaf.cosmere.feruchemy.common.effects.FeruchemyEffectBase; +import net.minecraft.world.entity.ai.attributes.AttributeModifier; + +//protagonist energy +public class ElectrumStoreEffect extends FeruchemyEffectBase +{ + public ElectrumStoreEffect(Metals.MetalType type) + { + super(type); + + addAttributeModifier( + AttributesRegistry.DETERMINATION.getAttribute(), + -1.0D, + AttributeModifier.Operation.ADDITION); + } +} diff --git a/src/feruchemy/java/leaf/cosmere/feruchemy/common/effects/store/GoldStoreEffect.java b/src/feruchemy/java/leaf/cosmere/feruchemy/common/effects/store/GoldStoreEffect.java new file mode 100644 index 000000000..73ee6b7e0 --- /dev/null +++ b/src/feruchemy/java/leaf/cosmere/feruchemy/common/effects/store/GoldStoreEffect.java @@ -0,0 +1,41 @@ +/* + * File updated ~ 8 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.feruchemy.common.effects.store; + +import leaf.cosmere.api.Metals; +import leaf.cosmere.api.spiritweb.ISpiritweb; +import leaf.cosmere.common.registry.AttributesRegistry; +import leaf.cosmere.feruchemy.common.effects.FeruchemyEffectBase; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.ai.attributes.AttributeModifier; +import net.minecraft.world.entity.ai.attributes.Attributes; + +//health +public class GoldStoreEffect extends FeruchemyEffectBase +{ + public GoldStoreEffect(Metals.MetalType type) + { + super(type); + addAttributeModifier( + Attributes.MAX_HEALTH, + -4.0D, + AttributeModifier.Operation.ADDITION); + addAttributeModifier( + AttributesRegistry.HEALING_STRENGTH.getAttribute(), + -1.0D, + AttributeModifier.Operation.ADDITION); + } + + @Override + public void applyEffectTick(ISpiritweb data, double strength) + { + final LivingEntity living = data.getLiving(); + + if (living.getHealth() > living.getMaxHealth()) + { + living.setHealth(living.getMaxHealth()); + } + } +} diff --git a/src/feruchemy/java/leaf/cosmere/feruchemy/common/effects/store/IronStoreEffect.java b/src/feruchemy/java/leaf/cosmere/feruchemy/common/effects/store/IronStoreEffect.java new file mode 100644 index 000000000..c3381440d --- /dev/null +++ b/src/feruchemy/java/leaf/cosmere/feruchemy/common/effects/store/IronStoreEffect.java @@ -0,0 +1,45 @@ +/* + * File updated ~ 9 - 8 - 2024 ~ Leaf + */ + +package leaf.cosmere.feruchemy.common.effects.store; + +import leaf.cosmere.api.Metals; +import leaf.cosmere.api.helpers.EffectsHelper; +import leaf.cosmere.api.spiritweb.ISpiritweb; +import leaf.cosmere.feruchemy.common.effects.FeruchemyEffectBase; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.ai.attributes.AttributeModifier; +import net.minecraft.world.entity.ai.attributes.Attributes; + + +public class IronStoreEffect extends FeruchemyEffectBase +{ + public IronStoreEffect(Metals.MetalType type) + { + super(type); + addAttributeModifier( + Attributes.KNOCKBACK_RESISTANCE, + -0.3D, + AttributeModifier.Operation.ADDITION); +/* addAttributeModifier( + ForgeMod.ENTITY_GRAVITY.get(), + "89499e2b-8797-4473-89c4-541aa703f17f", + -0.01D, + AttributeModifier.Operation.ADDITION);*/ + } + + @Override + public void applyEffectTick(ISpiritweb data, double strength) + { + final LivingEntity living = data.getLiving(); + //ensure the user has correct buffs at least as strong as their store effect + if (living.level().isClientSide) + { + return; + } + living.addEffect(EffectsHelper.getNewEffect(MobEffects.SLOW_FALLING, (int) strength)); + living.addEffect(EffectsHelper.getNewEffect(MobEffects.JUMP, (int) strength)); + } +} diff --git a/src/feruchemy/java/leaf/cosmere/feruchemy/common/effects/store/PewterStoreEffect.java b/src/feruchemy/java/leaf/cosmere/feruchemy/common/effects/store/PewterStoreEffect.java new file mode 100644 index 000000000..c4cb0b6a4 --- /dev/null +++ b/src/feruchemy/java/leaf/cosmere/feruchemy/common/effects/store/PewterStoreEffect.java @@ -0,0 +1,27 @@ +/* + * File updated ~ 12 - 10 - 2023 ~ Leaf + */ + +package leaf.cosmere.feruchemy.common.effects.store; + +import leaf.cosmere.api.Metals; +import leaf.cosmere.feruchemy.common.effects.FeruchemyEffectBase; +import net.minecraft.world.entity.ai.attributes.AttributeModifier; +import net.minecraft.world.entity.ai.attributes.Attributes; + + +public class PewterStoreEffect extends FeruchemyEffectBase +{ + public PewterStoreEffect(Metals.MetalType type) + { + super(type); + addAttributeModifier( + Attributes.ATTACK_DAMAGE, + -1.0D, + AttributeModifier.Operation.ADDITION); + addAttributeModifier( + Attributes.ATTACK_KNOCKBACK, + -1.0D, + AttributeModifier.Operation.ADDITION); + } +} diff --git a/src/feruchemy/java/leaf/cosmere/feruchemy/common/effects/store/SteelStoreEffect.java b/src/feruchemy/java/leaf/cosmere/feruchemy/common/effects/store/SteelStoreEffect.java new file mode 100644 index 000000000..e69f0aa0d --- /dev/null +++ b/src/feruchemy/java/leaf/cosmere/feruchemy/common/effects/store/SteelStoreEffect.java @@ -0,0 +1,29 @@ +/* + * File updated ~ 12 - 10 - 2023 ~ Leaf + */ + +package leaf.cosmere.feruchemy.common.effects.store; + +import leaf.cosmere.api.Metals; +import leaf.cosmere.feruchemy.common.effects.FeruchemyEffectBase; +import net.minecraft.world.entity.ai.attributes.AttributeModifier; +import net.minecraft.world.entity.ai.attributes.Attributes; + + +public class SteelStoreEffect extends FeruchemyEffectBase +{ + public SteelStoreEffect(Metals.MetalType type) + { + super(type); + + this.addAttributeModifier( + Attributes.ATTACK_SPEED, + -0.1F, + AttributeModifier.Operation.MULTIPLY_TOTAL); + + this.addAttributeModifier( + Attributes.MOVEMENT_SPEED, + -0.15F, + AttributeModifier.Operation.MULTIPLY_TOTAL); + } +} diff --git a/src/feruchemy/java/leaf/cosmere/feruchemy/common/effects/store/ZincStoreEffect.java b/src/feruchemy/java/leaf/cosmere/feruchemy/common/effects/store/ZincStoreEffect.java new file mode 100644 index 000000000..ad5ad38c0 --- /dev/null +++ b/src/feruchemy/java/leaf/cosmere/feruchemy/common/effects/store/ZincStoreEffect.java @@ -0,0 +1,24 @@ +/* + * File updated ~ 12 - 10 - 2023 ~ Leaf + */ + +package leaf.cosmere.feruchemy.common.effects.store; + +import leaf.cosmere.api.Metals; +import leaf.cosmere.common.registry.AttributesRegistry; +import leaf.cosmere.feruchemy.common.effects.FeruchemyEffectBase; +import net.minecraft.world.entity.ai.attributes.AttributeModifier; + + +public class ZincStoreEffect extends FeruchemyEffectBase +{ + public ZincStoreEffect(Metals.MetalType type) + { + super(type); + addAttributeModifier( + AttributesRegistry.XP_RATE_ATTRIBUTE.get(), + -0.15D, + AttributeModifier.Operation.MULTIPLY_TOTAL); + } + +} diff --git a/src/feruchemy/java/leaf/cosmere/feruchemy/common/effects/tap/AluminumTapEffect.java b/src/feruchemy/java/leaf/cosmere/feruchemy/common/effects/tap/AluminumTapEffect.java new file mode 100644 index 000000000..b0437f01c --- /dev/null +++ b/src/feruchemy/java/leaf/cosmere/feruchemy/common/effects/tap/AluminumTapEffect.java @@ -0,0 +1,23 @@ +/* + * File updated ~ 29 - 10 - 2023 ~ Leaf + */ + +package leaf.cosmere.feruchemy.common.effects.tap; + +import leaf.cosmere.api.Metals; +import leaf.cosmere.common.registry.AttributesRegistry; +import leaf.cosmere.feruchemy.common.effects.FeruchemyEffectBase; +import net.minecraft.world.entity.ai.attributes.AttributeModifier; + + +public class AluminumTapEffect extends FeruchemyEffectBase +{ + public AluminumTapEffect(Metals.MetalType type) + { + super(type); + addAttributeModifier( + AttributesRegistry.IDENTITY.getAttribute(), + 1.0D, + AttributeModifier.Operation.ADDITION); + } +} diff --git a/src/feruchemy/java/leaf/cosmere/feruchemy/common/effects/tap/AtiumTapEffect.java b/src/feruchemy/java/leaf/cosmere/feruchemy/common/effects/tap/AtiumTapEffect.java new file mode 100644 index 000000000..bf5cd811d --- /dev/null +++ b/src/feruchemy/java/leaf/cosmere/feruchemy/common/effects/tap/AtiumTapEffect.java @@ -0,0 +1,61 @@ +/* + * File updated ~ 8 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.feruchemy.common.effects.tap; + +import leaf.cosmere.api.Metals; +import leaf.cosmere.api.spiritweb.ISpiritweb; +import leaf.cosmere.common.registry.AttributesRegistry; +import leaf.cosmere.feruchemy.common.effects.FeruchemyEffectBase; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.ai.attributes.AttributeModifier; +import net.minecraft.world.entity.ai.attributes.Attributes; + +//health +public class AtiumTapEffect extends FeruchemyEffectBase +{ + public AtiumTapEffect(Metals.MetalType type) + { + super(type); + + //atium attribute, size + addAttributeModifier( + AttributesRegistry.SIZE_ATTRIBUTE.get(), + 0.15D, + AttributeModifier.Operation.ADDITION); + + //reduce related attributes appropriately + addAttributeModifier( + Attributes.MOVEMENT_SPEED, + 0.1D, + AttributeModifier.Operation.MULTIPLY_TOTAL); + addAttributeModifier( + Attributes.MAX_HEALTH, + 0.1D, + AttributeModifier.Operation.MULTIPLY_TOTAL); + addAttributeModifier( + Attributes.KNOCKBACK_RESISTANCE, + 0.1D, + AttributeModifier.Operation.MULTIPLY_TOTAL); + addAttributeModifier( + Attributes.ATTACK_DAMAGE, + 0.1D, + AttributeModifier.Operation.MULTIPLY_TOTAL); + addAttributeModifier( + Attributes.ATTACK_KNOCKBACK, + 0.1D, + AttributeModifier.Operation.MULTIPLY_TOTAL); + } + + + @Override + public void applyEffectTick(ISpiritweb data, double strength) + { + final LivingEntity living = data.getLiving(); + if (living.getHealth() > living.getMaxHealth()) + { + living.setHealth(living.getMaxHealth()); + } + } +} diff --git a/src/feruchemy/java/leaf/cosmere/feruchemy/common/effects/tap/BendalloyTapEffect.java b/src/feruchemy/java/leaf/cosmere/feruchemy/common/effects/tap/BendalloyTapEffect.java new file mode 100644 index 000000000..76a0cd01c --- /dev/null +++ b/src/feruchemy/java/leaf/cosmere/feruchemy/common/effects/tap/BendalloyTapEffect.java @@ -0,0 +1,41 @@ +/* + * File updated ~ 9 - 8 - 2024 ~ Leaf + */ + +package leaf.cosmere.feruchemy.common.effects.tap; + +import leaf.cosmere.api.Metals; +import leaf.cosmere.api.spiritweb.ISpiritweb; +import leaf.cosmere.feruchemy.common.effects.FeruchemyEffectBase; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.food.FoodData; + + +public class BendalloyTapEffect extends FeruchemyEffectBase +{ + public BendalloyTapEffect(Metals.MetalType type) + { + super(type); + } + + @Override + public void applyEffectTick(ISpiritweb data, double strength) + { + if (data.getLiving() instanceof Player player && !player.level().isClientSide) + { + final FoodData foodData = player.getFoodData(); + final int i = (int) (1 + strength); + if (foodData.needsFood()) + { + foodData.setFoodLevel(foodData.getFoodLevel() + i); + } + else + { + //add saturation after. + foodData.eat(1, i); + } + + //todo add tough as nails mod compatibility? + } + } +} diff --git a/src/feruchemy/java/leaf/cosmere/feruchemy/common/effects/tap/BrassTapEffect.java b/src/feruchemy/java/leaf/cosmere/feruchemy/common/effects/tap/BrassTapEffect.java new file mode 100644 index 000000000..4a938cdfc --- /dev/null +++ b/src/feruchemy/java/leaf/cosmere/feruchemy/common/effects/tap/BrassTapEffect.java @@ -0,0 +1,63 @@ +/* + * File updated ~ 9 - 8 - 2024 ~ Leaf + */ + +package leaf.cosmere.feruchemy.common.effects.tap; + +import leaf.cosmere.api.Metals; +import leaf.cosmere.api.helpers.EntityHelper; +import leaf.cosmere.api.spiritweb.ISpiritweb; +import leaf.cosmere.common.registry.AttributesRegistry; +import leaf.cosmere.feruchemy.common.Feruchemy; +import leaf.cosmere.feruchemy.common.effects.FeruchemyEffectBase; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.ai.attributes.AttributeModifier; +import net.minecraftforge.event.entity.living.LivingDamageEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; + +//https://coppermind.net/wiki/Brass#Feruchemical_Use + +@Mod.EventBusSubscriber(modid = Feruchemy.MODID, bus = Mod.EventBusSubscriber.Bus.FORGE) +public class BrassTapEffect extends FeruchemyEffectBase +{ + public BrassTapEffect(Metals.MetalType type) + { + super(type); + addAttributeModifier( + AttributesRegistry.WARMTH.get(), + 1,//warmer when tapping + AttributeModifier.Operation.ADDITION); + + //reduce frost damage? theres no cold damage in base minecraft is there? + + //add fire damage? + } + + @Override + public void applyEffectTick(ISpiritweb data, double strength) + { + //todo move to config + final LivingEntity living = data.getLiving(); + if (!living.level().isClientSide && strength >= 6 && !living.isInWater()) + { + //set user on fire + living.setSecondsOnFire(3); + } + + } + + @SubscribeEvent + public static void onLivingDamageEvent(LivingDamageEvent event) + { + if (event.getSource().getEntity() instanceof LivingEntity livingEntity) + { + final int total = (int) EntityHelper.getAttributeValue(livingEntity, AttributesRegistry.WARMTH.getAttribute()); + if (total >= 5)//todo move to config + { + //set entity being hit on fire + event.getEntity().setSecondsOnFire(total); + } + } + } +} diff --git a/src/feruchemy/java/leaf/cosmere/feruchemy/common/effects/tap/CadmiumTapEffect.java b/src/feruchemy/java/leaf/cosmere/feruchemy/common/effects/tap/CadmiumTapEffect.java new file mode 100644 index 000000000..3d9708890 --- /dev/null +++ b/src/feruchemy/java/leaf/cosmere/feruchemy/common/effects/tap/CadmiumTapEffect.java @@ -0,0 +1,54 @@ +/* + * File updated ~ 9 - 8 - 2024 ~ Leaf + */ + +package leaf.cosmere.feruchemy.common.effects.tap; + +import leaf.cosmere.api.Metals; +import leaf.cosmere.api.spiritweb.ISpiritweb; +import leaf.cosmere.feruchemy.common.effects.FeruchemyEffectBase; +import net.minecraft.util.Mth; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.ai.attributes.AttributeModifier; +import net.minecraft.world.entity.ai.attributes.Attributes; + + +public class CadmiumTapEffect extends FeruchemyEffectBase +{ + public CadmiumTapEffect(Metals.MetalType type) + { + super(type); + + this.addAttributeModifier( + Attributes.ATTACK_SPEED, + 0.01F, + AttributeModifier.Operation.MULTIPLY_TOTAL); + + this.addAttributeModifier( + Attributes.MOVEMENT_SPEED, + 0.02F, + AttributeModifier.Operation.MULTIPLY_TOTAL); + } + + @Override + protected boolean isActiveTick(ISpiritweb data) + { + //just make cadmium always run effect tick. + return true; + } + + @Override + public void applyEffectTick(ISpiritweb data, double strength) + { + final LivingEntity living = data.getLiving(); + if (living.level().isClientSide) + { + return; + } + final int minAirSupply = living.getAirSupply(); + final int maxAirSupply = living.getMaxAirSupply(); + final double potentialNextVal = minAirSupply + 3 + (strength);//todo find out what 3 means here. + living.setAirSupply((int) Mth.clamp(potentialNextVal, minAirSupply, maxAirSupply)); + + } +} diff --git a/src/feruchemy/java/leaf/cosmere/feruchemy/common/effects/tap/ChromiumTapEffect.java b/src/feruchemy/java/leaf/cosmere/feruchemy/common/effects/tap/ChromiumTapEffect.java new file mode 100644 index 000000000..624cce616 --- /dev/null +++ b/src/feruchemy/java/leaf/cosmere/feruchemy/common/effects/tap/ChromiumTapEffect.java @@ -0,0 +1,30 @@ +/* + * File updated ~ 23 - 10 - 2023 ~ Leaf + */ + +package leaf.cosmere.feruchemy.common.effects.tap; + +import leaf.cosmere.api.Metals; +import leaf.cosmere.common.registry.AttributesRegistry; +import leaf.cosmere.feruchemy.common.effects.FeruchemyEffectBase; +import net.minecraft.world.entity.ai.attributes.AttributeModifier; +import net.minecraft.world.entity.ai.attributes.Attributes; + + +public class ChromiumTapEffect extends FeruchemyEffectBase +{ + public ChromiumTapEffect(Metals.MetalType type) + { + super(type); + + addAttributeModifier( + Attributes.LUCK, + 1.0D, + AttributeModifier.Operation.ADDITION); + + addAttributeModifier( + AttributesRegistry.COSMERE_FORTUNE.getAttribute(), + 1.0D, + AttributeModifier.Operation.ADDITION); + } +} diff --git a/src/feruchemy/java/leaf/cosmere/feruchemy/common/effects/tap/DuraluminTapEffect.java b/src/feruchemy/java/leaf/cosmere/feruchemy/common/effects/tap/DuraluminTapEffect.java new file mode 100644 index 000000000..594b07da8 --- /dev/null +++ b/src/feruchemy/java/leaf/cosmere/feruchemy/common/effects/tap/DuraluminTapEffect.java @@ -0,0 +1,41 @@ +/* + * File updated ~ 9 - 8 - 2024 ~ Leaf + */ + +package leaf.cosmere.feruchemy.common.effects.tap; + +import leaf.cosmere.api.Metals; +import leaf.cosmere.api.helpers.EffectsHelper; +import leaf.cosmere.api.spiritweb.ISpiritweb; +import leaf.cosmere.common.registry.AttributesRegistry; +import leaf.cosmere.feruchemy.common.effects.FeruchemyEffectBase; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.ai.attributes.AttributeModifier; + + +public class DuraluminTapEffect extends FeruchemyEffectBase +{ + public DuraluminTapEffect(Metals.MetalType type) + { + super(type); + + addAttributeModifier( + AttributesRegistry.CONNECTION.getAttribute(), + 1.0D, + AttributeModifier.Operation.ADDITION); + } + + @Override + public void applyEffectTick(ISpiritweb data, double strength) + { + final LivingEntity living = data.getLiving(); + //ensure the user has correct buffs at least as strong as their store effect + if (living.level().isClientSide) + { + return; + } + + living.addEffect(EffectsHelper.getNewEffect(MobEffects.HERO_OF_THE_VILLAGE, (int) strength)); + } +} diff --git a/src/feruchemy/java/leaf/cosmere/feruchemy/common/effects/tap/ElectrumTapEffect.java b/src/feruchemy/java/leaf/cosmere/feruchemy/common/effects/tap/ElectrumTapEffect.java new file mode 100644 index 000000000..f9e2fc92a --- /dev/null +++ b/src/feruchemy/java/leaf/cosmere/feruchemy/common/effects/tap/ElectrumTapEffect.java @@ -0,0 +1,23 @@ +/* + * File updated ~ 23 - 10 - 2023 ~ Leaf + */ + +package leaf.cosmere.feruchemy.common.effects.tap; + +import leaf.cosmere.api.Metals; +import leaf.cosmere.common.registry.AttributesRegistry; +import leaf.cosmere.feruchemy.common.effects.FeruchemyEffectBase; +import net.minecraft.world.entity.ai.attributes.AttributeModifier; + + +public class ElectrumTapEffect extends FeruchemyEffectBase +{ + public ElectrumTapEffect(Metals.MetalType type) + { + super(type); + addAttributeModifier( + AttributesRegistry.DETERMINATION.getAttribute(), + 1.0D, + AttributeModifier.Operation.ADDITION); + } +} diff --git a/src/feruchemy/java/leaf/cosmere/feruchemy/common/effects/tap/GoldTapEffect.java b/src/feruchemy/java/leaf/cosmere/feruchemy/common/effects/tap/GoldTapEffect.java new file mode 100644 index 000000000..cb1fb94fe --- /dev/null +++ b/src/feruchemy/java/leaf/cosmere/feruchemy/common/effects/tap/GoldTapEffect.java @@ -0,0 +1,115 @@ +/* + * File updated ~ 21 - 02 - 2024 ~ Gerbagel + */ + +package leaf.cosmere.feruchemy.common.effects.tap; + +import leaf.cosmere.api.Metals; +import leaf.cosmere.api.helpers.EntityHelper; +import leaf.cosmere.api.spiritweb.ISpiritweb; +import leaf.cosmere.common.charge.MetalmindChargeHelper; +import leaf.cosmere.common.registry.AttributesRegistry; +import leaf.cosmere.feruchemy.common.effects.FeruchemyEffectBase; +import leaf.cosmere.feruchemy.common.manifestation.FeruchemyGold; +import net.minecraft.util.Mth; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.ai.attributes.AttributeModifier; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraftforge.event.entity.living.LivingHurtEvent; + + +public class GoldTapEffect extends FeruchemyEffectBase +{ + + public GoldTapEffect(Metals.MetalType type) + { + super(type); + addAttributeModifier( + AttributesRegistry.HEALING_STRENGTH.getAttribute(), + 1.0D, + AttributeModifier.Operation.ADDITION); + } + + @Override + public void applyEffectTick(ISpiritweb data, double strength) + { + final LivingEntity living = data.getLiving(); + final int i = (int) (strength); + boolean isHealTick; + + // at min tap (1) should be active every 10 seconds // 10 seconds is 200 ticks + int healActiveTick = FeruchemyGold.getHealActiveTick(i); + healActiveTick = Math.max(1, healActiveTick); // can't tick more often than every tick + isHealTick = living.tickCount % healActiveTick == 0; + + if (isHealTick) + { + final int amountToHeal = 1; + + living.heal(amountToHeal); + } + + if (living.tickCount % (getActiveTick() + getTickOffset()) == 0) + { + //todo move to config + final int timeToReduceByInTicks = i * 40; + final int ticksNeededLeftToReduce = 5; + + //remove harmful effects over time + for (MobEffectInstance activeEffect : living.getActiveEffects()) + { + if (!activeEffect.getEffect().isBeneficial() && activeEffect.getDuration() > ticksNeededLeftToReduce) + { + //never reduce down below 5 ticks + final double clamped = Math.max(ticksNeededLeftToReduce, activeEffect.getDuration() - timeToReduceByInTicks); + final int duration = Mth.floor(clamped); + MobEffectInstance newInstance = new MobEffectInstance( + activeEffect.getEffect(), + duration, + activeEffect.getAmplifier(), + activeEffect.isAmbient(), + activeEffect.isVisible(), + activeEffect.showIcon()); + living.removeEffectNoUpdate(activeEffect.getEffect()); + living.addEffect(newInstance); + } + } + } + } + + @Override + protected boolean isActiveTick(ISpiritweb data) + { + return true; + } + + + + public static void onLivingHurtEvent(LivingHurtEvent event) + { + if (event.isCanceled()) + { + return; + } + + if (event.getAmount() > event.getEntity().getHealth()) + { + int strength = (int) EntityHelper.getAttributeValue(event.getEntity(), AttributesRegistry.HEALING_STRENGTH.getAttribute(), 0); + + //take less damage when tapping + if (strength > 6 && event.getEntity() instanceof Player player) + { + // the cost of not dying should be all the extra damage * 50 + int amount = (int) (event.getAmount() - player.getHealth()) * 50; + final ItemStack metalmind = MetalmindChargeHelper.adjustMetalmindChargeExact(player, Metals.MetalType.GOLD, -amount, true, true); + + if (!metalmind.isEmpty()) + { + event.setAmount((float) Math.floor(player.getHealth() - 1)); + } + } + } + } +} diff --git a/src/feruchemy/java/leaf/cosmere/feruchemy/common/effects/tap/IronTapEffect.java b/src/feruchemy/java/leaf/cosmere/feruchemy/common/effects/tap/IronTapEffect.java new file mode 100644 index 000000000..2f65b19d9 --- /dev/null +++ b/src/feruchemy/java/leaf/cosmere/feruchemy/common/effects/tap/IronTapEffect.java @@ -0,0 +1,28 @@ +/* + * File updated ~ 12 - 10 - 2023 ~ Leaf + */ + +package leaf.cosmere.feruchemy.common.effects.tap; + +import leaf.cosmere.api.Metals; +import leaf.cosmere.feruchemy.common.effects.FeruchemyEffectBase; +import net.minecraft.world.entity.ai.attributes.AttributeModifier; +import net.minecraft.world.entity.ai.attributes.Attributes; +import net.minecraftforge.common.ForgeMod; + + +public class IronTapEffect extends FeruchemyEffectBase +{ + public IronTapEffect(Metals.MetalType type) + { + super(type); + addAttributeModifier( + Attributes.KNOCKBACK_RESISTANCE, + 0.1D, + AttributeModifier.Operation.ADDITION); + addAttributeModifier( + ForgeMod.ENTITY_GRAVITY.get(), + 0.01D, + AttributeModifier.Operation.ADDITION); + } +} diff --git a/src/feruchemy/java/leaf/cosmere/feruchemy/common/effects/tap/PewterTapEffect.java b/src/feruchemy/java/leaf/cosmere/feruchemy/common/effects/tap/PewterTapEffect.java new file mode 100644 index 000000000..fd1ebc2a7 --- /dev/null +++ b/src/feruchemy/java/leaf/cosmere/feruchemy/common/effects/tap/PewterTapEffect.java @@ -0,0 +1,28 @@ +/* + * File updated ~ 12 - 10 - 2023 ~ Leaf + */ + +package leaf.cosmere.feruchemy.common.effects.tap; + +import leaf.cosmere.api.Metals; +import leaf.cosmere.feruchemy.common.effects.FeruchemyEffectBase; +import net.minecraft.world.entity.ai.attributes.AttributeModifier; +import net.minecraft.world.entity.ai.attributes.Attributes; + + +public class PewterTapEffect extends FeruchemyEffectBase +{ + public PewterTapEffect(Metals.MetalType type) + { + super(type); + + addAttributeModifier( + Attributes.ATTACK_DAMAGE, + 1.0D, + AttributeModifier.Operation.ADDITION); + addAttributeModifier( + Attributes.ATTACK_KNOCKBACK, + 1.0D, + AttributeModifier.Operation.ADDITION); + } +} diff --git a/src/feruchemy/java/leaf/cosmere/feruchemy/common/effects/tap/SteelTapEffect.java b/src/feruchemy/java/leaf/cosmere/feruchemy/common/effects/tap/SteelTapEffect.java new file mode 100644 index 000000000..3be8e9451 --- /dev/null +++ b/src/feruchemy/java/leaf/cosmere/feruchemy/common/effects/tap/SteelTapEffect.java @@ -0,0 +1,41 @@ +/* + * File updated ~ 12 - 10 - 2023 ~ Leaf + */ + +package leaf.cosmere.feruchemy.common.effects.tap; + +import leaf.cosmere.api.Metals; +import leaf.cosmere.feruchemy.common.effects.FeruchemyEffectBase; +import net.minecraft.util.Mth; +import net.minecraft.world.entity.ai.attributes.AttributeModifier; +import net.minecraft.world.entity.ai.attributes.Attributes; +import net.minecraftforge.client.event.ComputeFovModifierEvent; +import net.minecraftforge.common.MinecraftForge; + + +public class SteelTapEffect extends FeruchemyEffectBase +{ + public SteelTapEffect(Metals.MetalType type) + { + super(type); + + this.addAttributeModifier( + Attributes.ATTACK_SPEED, + 0.1F, + AttributeModifier.Operation.MULTIPLY_TOTAL); + + this.addAttributeModifier( + Attributes.MOVEMENT_SPEED, + 0.2F, + AttributeModifier.Operation.MULTIPLY_TOTAL); + + MinecraftForge.EVENT_BUS.addListener(this::onFOVUpdate); + + } + + public void onFOVUpdate(ComputeFovModifierEvent event) + { + //todo remember to make this better? clamp isn't necessarily the best way to stop it going over the top + event.setNewFovModifier(Mth.clamp(event.getNewFovModifier(), 0.8f, 1.2f)); + } +} diff --git a/src/feruchemy/java/leaf/cosmere/feruchemy/common/effects/tap/ZincTapEffect.java b/src/feruchemy/java/leaf/cosmere/feruchemy/common/effects/tap/ZincTapEffect.java new file mode 100644 index 000000000..e2b9cee9f --- /dev/null +++ b/src/feruchemy/java/leaf/cosmere/feruchemy/common/effects/tap/ZincTapEffect.java @@ -0,0 +1,23 @@ +/* + * File updated ~ 12 - 10 - 2023 ~ Leaf + */ + +package leaf.cosmere.feruchemy.common.effects.tap; + +import leaf.cosmere.api.Metals; +import leaf.cosmere.common.registry.AttributesRegistry; +import leaf.cosmere.feruchemy.common.effects.FeruchemyEffectBase; +import net.minecraft.world.entity.ai.attributes.AttributeModifier; + + +public class ZincTapEffect extends FeruchemyEffectBase +{ + public ZincTapEffect(Metals.MetalType type) + { + super(type); + addAttributeModifier( + AttributesRegistry.XP_RATE_ATTRIBUTE.get(), + 0.15D, + AttributeModifier.Operation.MULTIPLY_TOTAL); + } +} diff --git a/src/feruchemy/java/leaf/cosmere/feruchemy/common/eventHandlers/FeruchemyEntityEventHandler.java b/src/feruchemy/java/leaf/cosmere/feruchemy/common/eventHandlers/FeruchemyEntityEventHandler.java new file mode 100644 index 000000000..0faf7a369 --- /dev/null +++ b/src/feruchemy/java/leaf/cosmere/feruchemy/common/eventHandlers/FeruchemyEntityEventHandler.java @@ -0,0 +1,144 @@ +/* + * File updated ~ 10 - 8 - 2024 ~ Leaf + */ + +package leaf.cosmere.feruchemy.common.eventHandlers; + +import leaf.cosmere.api.Metals; +import leaf.cosmere.api.helpers.EntityHelper; +import leaf.cosmere.common.items.GodMetalAlloyNuggetItem; +import leaf.cosmere.common.items.GodMetalNuggetItem; +import leaf.cosmere.common.items.MetalNuggetItem; +import leaf.cosmere.common.registry.AttributesRegistry; +import leaf.cosmere.feruchemy.common.Feruchemy; +import leaf.cosmere.feruchemy.common.effects.store.BrassStoreEffect; +import leaf.cosmere.feruchemy.common.effects.tap.GoldTapEffect; +import leaf.cosmere.feruchemy.common.manifestation.FeruchemyAtium; +import leaf.cosmere.feruchemy.common.utils.MiscHelper; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.enchantment.Enchantments; +import net.minecraft.world.level.LevelAccessor; +import net.minecraftforge.event.entity.EntityEvent; +import net.minecraftforge.event.entity.living.LivingAttackEvent; +import net.minecraftforge.event.entity.living.LivingEntityUseItemEvent; +import net.minecraftforge.event.entity.living.LivingHurtEvent; +import net.minecraftforge.event.entity.player.PlayerInteractEvent; +import net.minecraftforge.event.level.BlockEvent; +import net.minecraftforge.eventbus.api.EventPriority; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; + +@Mod.EventBusSubscriber(modid = Feruchemy.MODID, bus = Mod.EventBusSubscriber.Bus.FORGE) +public class FeruchemyEntityEventHandler +{ + @SubscribeEvent + public static void onEntityInteract(PlayerInteractEvent.EntityInteract event) + { + if (!(event.getTarget() instanceof LivingEntity target) || event.getEntity().level().isClientSide) + { + return; + } + + ItemStack stack = event.getEntity().getMainHandItem(); + if (!stack.isEmpty()) + { + if (stack.getItem() instanceof MetalNuggetItem metalNuggetItem) + { + // Don't alloy for consuming normal metal nuggets + if (!(stack.getItem() instanceof GodMetalAlloyNuggetItem) && !(stack.getItem() instanceof GodMetalNuggetItem)) return; + // Only consume the nugget if it contains Lerasatium + if (metalNuggetItem.getMetalType().isGodMetal() && metalNuggetItem.getMetalType() != Metals.MetalType.LERASATIUM) return; + + MiscHelper.consumeNugget(target, stack); + stack.shrink(1); + } + } + } + + + @SubscribeEvent + public static void onFinishUsingItem(LivingEntityUseItemEvent.Finish event) + { + if (event.isCanceled()) + { + return; + } + + final LivingEntity livingEntity = event.getEntity(); + if (event.getItem().getItem() instanceof MetalNuggetItem metalNuggetItem) + { + // Don't alloy for consuming normal metal nuggets + if(!(event.getItem().getItem() instanceof GodMetalAlloyNuggetItem) && !(event.getItem().getItem() instanceof GodMetalNuggetItem)) return; + // Only consume the nugget if it contains Lerasatium + if(metalNuggetItem.getMetalType().isGodMetal() && metalNuggetItem.getMetalType() != Metals.MetalType.LERASATIUM) return; + + //no need to shrink item count as it's already done as part of nugget use item finish + MiscHelper.consumeNugget(livingEntity, event.getItem()); + } + } + + + @SubscribeEvent + public static void changeSize(EntityEvent.Size event) + { + final Entity entity = event.getEntity(); + if (entity instanceof LivingEntity livingEntity) + { + float scale = FeruchemyAtium.getScale(livingEntity); + + //only change if scale not 1, else we let the change size event do it's thing unimpeded + if (scale != 1) + { + event.setNewSize(event.getNewSize().scale(scale)); + event.setNewEyeHeight(event.getNewEyeHeight() * scale); + } + } + } + + //Attack event happens first + @SubscribeEvent + public static void onLivingAttackEvent(LivingAttackEvent event) + { + BrassStoreEffect.onLivingAttackEvent(event); + } + + //then living hurt event + @SubscribeEvent + public static void onLivingHurtEvent(LivingHurtEvent event) + { + BrassStoreEffect.onLivingHurtEvent(event); + GoldTapEffect.onLivingHurtEvent(event); + } + + + @SubscribeEvent(priority = EventPriority.LOWEST) + public static void onBreakBlock(BlockEvent.BreakEvent evt) + { + Player player = evt.getPlayer(); + + int totalFortuneBonus = (int) EntityHelper.getAttributeValue(player, AttributesRegistry.COSMERE_FORTUNE.getAttribute()); + + if (totalFortuneBonus == 0) + { + return; + } + + ItemStack stack = player.getMainHandItem(); + int bonusLevel = stack.getEnchantmentLevel(Enchantments.BLOCK_FORTUNE); + int silklevel = stack.getEnchantmentLevel(Enchantments.SILK_TOUCH); + + LevelAccessor level = evt.getLevel(); + evt.setExpToDrop( + evt.getState().getExpDrop( + level, + level.getRandom(), + evt.getPos(), + bonusLevel + totalFortuneBonus, + silklevel + ) + ); + } +} diff --git a/src/feruchemy/java/leaf/cosmere/feruchemy/common/eventHandlers/FeruchemyModBusEventHandler.java b/src/feruchemy/java/leaf/cosmere/feruchemy/common/eventHandlers/FeruchemyModBusEventHandler.java new file mode 100644 index 000000000..9ffc703f2 --- /dev/null +++ b/src/feruchemy/java/leaf/cosmere/feruchemy/common/eventHandlers/FeruchemyModBusEventHandler.java @@ -0,0 +1,39 @@ +/* + * File updated ~ 20 - 11 - 2024 ~ Leaf + */ + +package leaf.cosmere.feruchemy.common.eventHandlers; + +import leaf.cosmere.api.EnumUtils; +import leaf.cosmere.api.Metals; +import leaf.cosmere.common.eventHandlers.ModBusEventHandler; +import leaf.cosmere.feruchemy.common.Feruchemy; +import leaf.cosmere.feruchemy.common.registries.FeruchemyAttributes; +import net.minecraft.world.entity.EntityType; +import net.minecraftforge.event.entity.EntityAttributeModificationEvent; +import net.minecraftforge.eventbus.api.EventPriority; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; + + +@Mod.EventBusSubscriber(modid = Feruchemy.MODID, bus = Mod.EventBusSubscriber.Bus.MOD) +public class FeruchemyModBusEventHandler +{ + + + @SubscribeEvent(priority = EventPriority.HIGH) + public static void onEntityAttributeModificationEvent(EntityAttributeModificationEvent event) + { + for (EntityType entityType : ModBusEventHandler.ENTITIES_THAT_CAN_HAVE_POWERS) + { + for (Metals.MetalType metalType : EnumUtils.METAL_TYPES) + { + if (metalType.hasAssociatedManifestation() && FeruchemyAttributes.FERUCHEMY_ATTRIBUTES.containsKey(metalType)) + { + event.add(entityType, FeruchemyAttributes.FERUCHEMY_ATTRIBUTES.get(metalType).get()); + } + } + + } + } +} diff --git a/src/feruchemy/java/leaf/cosmere/feruchemy/common/investiture/FNicrosilCharge.java b/src/feruchemy/java/leaf/cosmere/feruchemy/common/investiture/FNicrosilCharge.java new file mode 100644 index 000000000..c4d9ce793 --- /dev/null +++ b/src/feruchemy/java/leaf/cosmere/feruchemy/common/investiture/FNicrosilCharge.java @@ -0,0 +1,22 @@ +package leaf.cosmere.feruchemy.common.investiture; + +import leaf.cosmere.api.Manifestations; +import leaf.cosmere.api.manifestation.Manifestation; + +public class FNicrosilCharge extends FeruCharge +{ + SpiritwebInvestiture stored; + public FNicrosilCharge(IInfuseContainer container, double beu, IInvContainer infuser, Manifestation storedType, int mode ) + { + super(container, Manifestations.ManifestationTypes.FERUCHEMY.getManifestation(11), beu, infuser); + stored = new SpiritwebInvestiture(container, storedType, infuser.getSpiritweb().orElse(null), mode); + } + + @Override + public double getBEU() + { + return stored.getBEU() * super.getBEU(); + } + + +} diff --git a/src/feruchemy/java/leaf/cosmere/feruchemy/common/investiture/FeruCharge.java b/src/feruchemy/java/leaf/cosmere/feruchemy/common/investiture/FeruCharge.java new file mode 100644 index 000000000..5a8a4d39e --- /dev/null +++ b/src/feruchemy/java/leaf/cosmere/feruchemy/common/investiture/FeruCharge.java @@ -0,0 +1,17 @@ +package leaf.cosmere.feruchemy.common.investiture; + +import leaf.cosmere.api.Manifestations; +import leaf.cosmere.api.investiture.*; +import leaf.cosmere.api.manifestation.Manifestation; +import leaf.cosmere.common.investiture.Infusion; + +public class FeruCharge extends Infusion +{ + + public FeruCharge(IInfuseContainer container, Manifestation manifest, double beu, IInvContainer infuser) + { + super(container, Manifestations.ManifestArrayBuilder.getArray(manifest), beu, infuser, + InvHelpers.Shard.HARMONY, InvHelpers.InvestitureSource.SELF); + } + +} diff --git a/src/feruchemy/java/leaf/cosmere/feruchemy/common/items/BandsOfMourningItem.java b/src/feruchemy/java/leaf/cosmere/feruchemy/common/items/BandsOfMourningItem.java new file mode 100644 index 000000000..4d7b21756 --- /dev/null +++ b/src/feruchemy/java/leaf/cosmere/feruchemy/common/items/BandsOfMourningItem.java @@ -0,0 +1,94 @@ +/* + * File updated ~ 11 - 8 - 2024 ~ Leaf + */ + +package leaf.cosmere.feruchemy.common.items; + +import com.google.common.collect.Multimap; +import leaf.cosmere.api.Constants; +import leaf.cosmere.api.CosmereAPI; +import leaf.cosmere.api.IHasMetalType; +import leaf.cosmere.api.Metals; +import leaf.cosmere.api.helpers.CompoundNBTHelper; +import leaf.cosmere.api.manifestation.Manifestation; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.world.entity.ai.attributes.Attribute; +import net.minecraft.world.entity.ai.attributes.AttributeModifier; +import net.minecraft.world.item.CreativeModeTab; +import net.minecraft.world.item.ItemStack; +import top.theillusivec4.curios.api.SlotContext; + +import java.util.UUID; + +public class BandsOfMourningItem extends BraceletMetalmindItem +{ + public BandsOfMourningItem() + { + super(Metals.MetalType.HARMONIUM); + } + + @Override + public void addFilled(CreativeModeTab.Output output) + { + ItemStack fullPower = new ItemStack(this); + setCharge(fullPower, getMaxCharge(fullPower)); + + CompoundTag nbt = fullPower.getOrCreateTagElement("StoredInvestiture"); + + for (Manifestation manifestation : CosmereAPI.manifestationRegistry()) + { + final String attributeRegistryName = manifestation.getRegistryName().toString(); + + if (manifestation instanceof IHasMetalType) + { + nbt.putDouble(attributeRegistryName, 20); + } + } + + output.accept(fullPower); + } + + @Override + public float getMaxChargeModifier() + { + return 1; + } + + @Override + public int getMaxCharge(ItemStack stack) + { + return Integer.MAX_VALUE - 100; + } + + + @Override + public Multimap getAttributeModifiers(SlotContext slotContext, UUID uuid, ItemStack stack) + { + Multimap attributeModifiers = super.getAttributeModifiers(slotContext, uuid, stack); + CompoundTag nbt = stack.getOrCreateTagElement("StoredInvestiture"); + + for (Manifestation manifestation : CosmereAPI.manifestationRegistry()) + { + Attribute attribute = manifestation.getAttribute(); + final String attributeRegistryName = manifestation.getRegistryName().toString(); + if (!CompoundNBTHelper.verifyExistance(nbt, attributeRegistryName) || attribute == null) + { + continue; + } + + attributeModifiers.put( + attribute, + new AttributeModifier( + Constants.NBT.UNKEYED_UUID, + attributeRegistryName, + CompoundNBTHelper.getDouble( + nbt, + attributeRegistryName, + 0), + AttributeModifier.Operation.ADDITION)); + + } + + return attributeModifiers; + } +} diff --git a/src/feruchemy/java/leaf/cosmere/feruchemy/common/items/BraceletMetalmindItem.java b/src/feruchemy/java/leaf/cosmere/feruchemy/common/items/BraceletMetalmindItem.java new file mode 100644 index 000000000..63dfa3ded --- /dev/null +++ b/src/feruchemy/java/leaf/cosmere/feruchemy/common/items/BraceletMetalmindItem.java @@ -0,0 +1,70 @@ +/* + * File updated ~ 10 - 8 - 2024 ~ Leaf + */ + +package leaf.cosmere.feruchemy.common.items; + +import leaf.cosmere.api.CosmereAPI; +import leaf.cosmere.api.Metals; +import leaf.cosmere.api.helpers.CompoundNBTHelper; +import leaf.cosmere.api.manifestation.Manifestation; +import leaf.cosmere.common.items.ChargeableMetalCurioItem; +import net.minecraft.ChatFormatting; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.chat.Component; +import net.minecraft.world.entity.ai.attributes.Attribute; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.level.Level; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; + +import java.util.List; + +public class BraceletMetalmindItem extends ChargeableMetalCurioItem +{ + public BraceletMetalmindItem(Metals.MetalType metalType) + { + super(metalType); + } + + @Override + public float getMaxChargeModifier() + { + return (5f / 9f); + } + + @Override + @OnlyIn(Dist.CLIENT) + public void appendHoverText(ItemStack stack, Level worldIn, List tooltip, TooltipFlag flagIn) + { + super.appendHoverText(stack, worldIn, tooltip, flagIn); + + if (this.getMetalType() == Metals.MetalType.NICROSIL && !(stack.getItem() instanceof BandsOfMourningItem)) + { + CompoundTag nbt = stack.getOrCreateTagElement("StoredInvestiture"); + + tooltip.add(Component.empty()); + tooltip.add(Component.literal("When tapping:").withStyle(ChatFormatting.GOLD)); + + for (Manifestation manifestation : CosmereAPI.manifestationRegistry()) + { + Attribute attribute = manifestation.getAttribute(); + final String attributeRegistryName = manifestation.getRegistryName().toString(); + if (!CompoundNBTHelper.verifyExistance(nbt, attributeRegistryName) || attribute == null) + { + continue; + } + + int strength = CompoundNBTHelper.getInt( + nbt, + attributeRegistryName, + 0); + + tooltip.add(Component.literal("+" + strength + " ").append(Component.translatable(manifestation.getTranslationKey())).withStyle(ChatFormatting.BLUE)); + + } + } + } + +} diff --git a/src/feruchemy/java/leaf/cosmere/feruchemy/common/items/NecklaceMetalmindItem.java b/src/feruchemy/java/leaf/cosmere/feruchemy/common/items/NecklaceMetalmindItem.java new file mode 100644 index 000000000..03dbb1083 --- /dev/null +++ b/src/feruchemy/java/leaf/cosmere/feruchemy/common/items/NecklaceMetalmindItem.java @@ -0,0 +1,69 @@ +/* + * File updated ~ 10 - 8 - 2024 ~ Leaf + */ + +package leaf.cosmere.feruchemy.common.items; + +import leaf.cosmere.api.CosmereAPI; +import leaf.cosmere.api.Metals; +import leaf.cosmere.api.helpers.CompoundNBTHelper; +import leaf.cosmere.api.manifestation.Manifestation; +import leaf.cosmere.common.items.ChargeableMetalCurioItem; +import net.minecraft.ChatFormatting; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.chat.Component; +import net.minecraft.world.entity.ai.attributes.Attribute; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.level.Level; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; + +import java.util.List; + +public class NecklaceMetalmindItem extends ChargeableMetalCurioItem +{ + public NecklaceMetalmindItem(Metals.MetalType metalType) + { + super(metalType); + } + + @Override + public float getMaxChargeModifier() + { + return (6f / 9f); + } + + @Override + @OnlyIn(Dist.CLIENT) + public void appendHoverText(ItemStack stack, Level worldIn, List tooltip, TooltipFlag flagIn) + { + super.appendHoverText(stack, worldIn, tooltip, flagIn); + + if (this.getMetalType() == Metals.MetalType.NICROSIL) + { + CompoundTag nbt = stack.getOrCreateTagElement("StoredInvestiture"); + + tooltip.add(Component.empty()); + tooltip.add(Component.literal("When tapping:").withStyle(ChatFormatting.GOLD)); + + for (Manifestation manifestation : CosmereAPI.manifestationRegistry()) + { + Attribute attribute = manifestation.getAttribute(); + final String attributeRegistryName = manifestation.getRegistryName().toString(); + if (!CompoundNBTHelper.verifyExistance(nbt, attributeRegistryName) || attribute == null) + { + continue; + } + + int strength = CompoundNBTHelper.getInt( + nbt, + attributeRegistryName, + 0); + + tooltip.add(Component.literal("+" + strength + " ").append(Component.translatable(manifestation.getTranslationKey())).withStyle(ChatFormatting.BLUE)); + + } + } + } +} diff --git a/src/feruchemy/java/leaf/cosmere/feruchemy/common/items/RingMetalmindItem.java b/src/feruchemy/java/leaf/cosmere/feruchemy/common/items/RingMetalmindItem.java new file mode 100644 index 000000000..65bbcab2f --- /dev/null +++ b/src/feruchemy/java/leaf/cosmere/feruchemy/common/items/RingMetalmindItem.java @@ -0,0 +1,69 @@ +/* + * File updated ~ 10 - 8 - 2024 ~ Leaf + */ + +package leaf.cosmere.feruchemy.common.items; + +import leaf.cosmere.api.CosmereAPI; +import leaf.cosmere.api.Metals; +import leaf.cosmere.api.helpers.CompoundNBTHelper; +import leaf.cosmere.api.manifestation.Manifestation; +import leaf.cosmere.common.items.ChargeableMetalCurioItem; +import net.minecraft.ChatFormatting; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.chat.Component; +import net.minecraft.world.entity.ai.attributes.Attribute; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.level.Level; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; + +import java.util.List; + +public class RingMetalmindItem extends ChargeableMetalCurioItem +{ + public RingMetalmindItem(Metals.MetalType metalType) + { + super(metalType); + } + + @Override + public float getMaxChargeModifier() + { + return (4f / 9f); + } + + @Override + @OnlyIn(Dist.CLIENT) + public void appendHoverText(ItemStack stack, Level worldIn, List tooltip, TooltipFlag flagIn) + { + super.appendHoverText(stack, worldIn, tooltip, flagIn); + + if (this.getMetalType() == Metals.MetalType.NICROSIL) + { + CompoundTag nbt = stack.getOrCreateTagElement("StoredInvestiture"); + + tooltip.add(Component.empty()); + tooltip.add(Component.literal("When tapping:").withStyle(ChatFormatting.GOLD)); + + for (Manifestation manifestation : CosmereAPI.manifestationRegistry()) + { + Attribute attribute = manifestation.getAttribute(); + final String attributeRegistryName = manifestation.getRegistryName().toString(); + if (!CompoundNBTHelper.verifyExistance(nbt, attributeRegistryName) || attribute == null) + { + continue; + } + + int strength = CompoundNBTHelper.getInt( + nbt, + attributeRegistryName, + 0); + + tooltip.add(Component.literal("+" + strength + " ").append(Component.translatable(manifestation.getTranslationKey())).withStyle(ChatFormatting.BLUE)); + + } + } + } +} diff --git a/src/feruchemy/java/leaf/cosmere/feruchemy/common/loot/InvestMetalmindLootFunction.java b/src/feruchemy/java/leaf/cosmere/feruchemy/common/loot/InvestMetalmindLootFunction.java new file mode 100644 index 000000000..17247a1f8 --- /dev/null +++ b/src/feruchemy/java/leaf/cosmere/feruchemy/common/loot/InvestMetalmindLootFunction.java @@ -0,0 +1,74 @@ +/* + * File updated ~ 8 - 10 - 2022 ~ Leaf + */ + +package leaf.cosmere.feruchemy.common.loot; + +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonObject; +import leaf.cosmere.api.Constants; +import leaf.cosmere.api.Metals; +import leaf.cosmere.api.helpers.StackNBTHelper; +import leaf.cosmere.common.charge.IChargeable; +import leaf.cosmere.common.items.ChargeableMetalCurioItem; +import leaf.cosmere.feruchemy.common.registries.FeruchemyLootFunctions; +import net.minecraft.util.Mth; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.storage.loot.LootContext; +import net.minecraft.world.level.storage.loot.functions.LootItemConditionalFunction; +import net.minecraft.world.level.storage.loot.functions.LootItemFunctionType; +import net.minecraft.world.level.storage.loot.predicates.LootItemCondition; + +public class InvestMetalmindLootFunction extends LootItemConditionalFunction +{ + + protected InvestMetalmindLootFunction(LootItemCondition[] conditionsIn) + { + super(conditionsIn); + } + + @Override + public LootItemFunctionType getType() + { + return FeruchemyLootFunctions.INVEST_METALMIND.get(); + } + + @Override + protected ItemStack run(ItemStack stack, LootContext lootContext) + { + if (!(stack.getItem() instanceof IChargeable)) + { + return stack; + } + + ChargeableMetalCurioItem item = (ChargeableMetalCurioItem) stack.getItem(); + final Metals.MetalType metalType = item.getMetalType(); + + if (!metalType.hasFeruchemicalEffect() || metalType == Metals.MetalType.NICROSIL) + { + return stack; + } + + int maxCharge = item.getMaxCharge(stack); + + final int strengthBeforeLuck = 2 + lootContext.getRandom().nextInt(8); + + final float strengthLevel = Mth.clamp(strengthBeforeLuck + lootContext.getLuck(), 1, 10); + + item.setCharge(stack, (int) Mth.lerp(strengthLevel / 10, 1, maxCharge)); + + StackNBTHelper.setUuid(stack, Constants.NBT.ATTUNED_PLAYER, Constants.NBT.UNKEYED_UUID); + StackNBTHelper.setString(stack, Constants.NBT.ATTUNED_PLAYER_NAME, "Unkeyed"); // todo translation + + return stack; + } + + public static class Serializer extends LootItemConditionalFunction.Serializer + { + @Override + public InvestMetalmindLootFunction deserialize(JsonObject jsonObject, JsonDeserializationContext deserializationContext, LootItemCondition[] lootConditions) + { + return new InvestMetalmindLootFunction(lootConditions); + } + } +} \ No newline at end of file diff --git a/src/feruchemy/java/leaf/cosmere/feruchemy/common/manifestation/FeruchemyAluminum.java b/src/feruchemy/java/leaf/cosmere/feruchemy/common/manifestation/FeruchemyAluminum.java new file mode 100644 index 000000000..236d58986 --- /dev/null +++ b/src/feruchemy/java/leaf/cosmere/feruchemy/common/manifestation/FeruchemyAluminum.java @@ -0,0 +1,24 @@ +/* + * File updated ~ 8 - 10 - 2022 ~ Leaf + */ + +package leaf.cosmere.feruchemy.common.manifestation; + +import leaf.cosmere.api.Metals; +import leaf.cosmere.api.spiritweb.ISpiritweb; + +public class FeruchemyAluminum extends FeruchemyManifestation +{ + public FeruchemyAluminum(Metals.MetalType metalType) + { + super(metalType); + } + + + @Override + public int modeMax(ISpiritweb data) + { + return 1; + } + +} diff --git a/src/feruchemy/java/leaf/cosmere/feruchemy/common/manifestation/FeruchemyAtium.java b/src/feruchemy/java/leaf/cosmere/feruchemy/common/manifestation/FeruchemyAtium.java new file mode 100644 index 000000000..3c5c8f5ca --- /dev/null +++ b/src/feruchemy/java/leaf/cosmere/feruchemy/common/manifestation/FeruchemyAtium.java @@ -0,0 +1,75 @@ +/* + * File updated ~ 31 - 10 - 2022 ~ Leaf + */ + +package leaf.cosmere.feruchemy.common.manifestation; + +import leaf.cosmere.api.Metals; +import leaf.cosmere.api.spiritweb.ISpiritweb; +import leaf.cosmere.common.registration.impl.AttributeRegistryObject; +import leaf.cosmere.common.registry.AttributesRegistry; +import leaf.cosmere.feruchemy.common.registries.FeruchemyAttributes; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.ai.attributes.Attribute; +import net.minecraft.world.entity.ai.attributes.AttributeInstance; + +public class FeruchemyAtium extends FeruchemyManifestation +{ + public FeruchemyAtium(Metals.MetalType metalType) + { + super(metalType); + } + + + @Override + public Attribute getAttribute() + { + return FeruchemyAttributes.FERUCHEMY_ATTRIBUTES.get(Metals.MetalType.ELECTRUM).getAttribute(); + } + + @Override + public void onModeChange(ISpiritweb data, int lastMode) + { + super.onModeChange(data, lastMode); + data.getLiving().refreshDimensions(); + } + + public static float getScale(LivingEntity living) + { + /*final int mode = getMode(data); + float v;// = mode * 0.1f; + + if (isStoring(data)) + { + v = mode * 0.1f; + } + else// if (isTapping(data)) + { + final float inverseLerp = MathHelper.InverseLerp(0, 21, Math.abs(mode)); + final float v1 = Easing.easeOutQuad(inverseLerp); + + v = Mth.lerp(v1,0, -0.8f); + } + float scale = 1 + v;*/ + + try + { + + final AttributeRegistryObject metalRelatedAttribute = AttributesRegistry.SIZE_ATTRIBUTE; + if (metalRelatedAttribute != null) + { + AttributeInstance attribute = living.getAttribute(metalRelatedAttribute.get()); + //return modded val + final float v = attribute != null ? (float) attribute.getValue() : 1; + return v; + } + } + catch (Exception e) + { + //player is in a weird uninitialized state when logging in, + //so if it errors, I don't care, just return 1 in those cases. + } + + return 1; + } +} diff --git a/src/feruchemy/java/leaf/cosmere/feruchemy/common/manifestation/FeruchemyBendalloy.java b/src/feruchemy/java/leaf/cosmere/feruchemy/common/manifestation/FeruchemyBendalloy.java new file mode 100644 index 000000000..1f4ebcd29 --- /dev/null +++ b/src/feruchemy/java/leaf/cosmere/feruchemy/common/manifestation/FeruchemyBendalloy.java @@ -0,0 +1,67 @@ +/* + * File updated ~ 26 - 5 - 2023 ~ Leaf + */ + +package leaf.cosmere.feruchemy.common.manifestation; + +import leaf.cosmere.api.Metals; +import leaf.cosmere.api.spiritweb.ISpiritweb; +import leaf.cosmere.feruchemy.common.config.FeruchemyConfigs; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.food.FoodData; + +public class FeruchemyBendalloy extends FeruchemyManifestation +{ + public FeruchemyBendalloy(Metals.MetalType metalType) + { + super(metalType); + } + + @Override + public int getCost(ISpiritweb data) + { + int cost = super.getCost(data); + + if (data.getLiving() instanceof Player player) + { + FoodData foodData = player.getFoodData(); + if (isTapping(data) && !foodData.needsFood() && foodData.getSaturationLevel() < foodData.getFoodLevel()) + { + //currently increase cost if only doing saturation + cost *= FeruchemyConfigs.SERVER.BENDALLOY_SATURATION_MULTIPLIER.get(); + } + } + + return cost; + } + + @Override + public boolean tick(ISpiritweb data) + { + //don't check every tick. + LivingEntity livingEntity = data.getLiving(); + int mode = getMode(data); + if (mode == 0) + { + return false; + } + + if (livingEntity instanceof Player player) + { + FoodData foodData = player.getFoodData(); + if (isStoring(data) && foodData.getFoodLevel() <= 0) + { + //no food to store + return false; + } + else if (isTapping(data) && !(foodData.needsFood() || foodData.getSaturationLevel() < foodData.getFoodLevel())) + { + //already full + return false; + } + } + + return super.tick(data); + } +} diff --git a/src/feruchemy/java/leaf/cosmere/feruchemy/common/manifestation/FeruchemyBronze.java b/src/feruchemy/java/leaf/cosmere/feruchemy/common/manifestation/FeruchemyBronze.java new file mode 100644 index 000000000..5ab6f59ed --- /dev/null +++ b/src/feruchemy/java/leaf/cosmere/feruchemy/common/manifestation/FeruchemyBronze.java @@ -0,0 +1,206 @@ +/* + * File updated ~ 9 - 8 - 2024 ~ Leaf + */ + +package leaf.cosmere.feruchemy.common.manifestation; + +import leaf.cosmere.api.Metals; +import leaf.cosmere.api.spiritweb.ISpiritweb; +import leaf.cosmere.common.cap.entity.SpiritwebCapability; +import net.minecraft.advancements.CriteriaTriggers; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.stats.Stats; +import net.minecraft.world.entity.Pose; +import net.minecraft.world.entity.monster.Monster; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.Vec3; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.event.ForgeEventFactory; +import net.minecraftforge.event.entity.player.SleepingLocationCheckEvent; +import net.minecraftforge.eventbus.api.Event; +import net.minecraftforge.fml.util.ObfuscationReflectionHelper; + +import java.util.List; +import java.util.Optional; + +public class FeruchemyBronze extends FeruchemyManifestation +{ + public FeruchemyBronze(Metals.MetalType metalType) + { + super(metalType); + MinecraftForge.EVENT_BUS.addListener(this::sleepCheck); + } + + @Override + public int modeMin(ISpiritweb data) + { + return -1; + } + + @Override + public int modeMax(ISpiritweb data) + { + return 1; + } + + @Override + public void applyEffectTick(ISpiritweb data) + { + super.applyEffectTick(data); + + //can't store or tap any more + switch (getMode(data)) + { + case -1: + resetSleepTimers(data); + break; + case 1: + trySleep(data); + break; + default: + //remove active effects. + //let the current effect run out. + break; + } + } + + private void resetSleepTimers(ISpiritweb data) + { + ServerPlayer player = (ServerPlayer) data.getLiving(); + //ServerStatsCounter serverstatscounter = player.getStats(); + player.resetStat(Stats.CUSTOM.get(Stats.TIME_SINCE_REST)); + + } + + private void trySleep(ISpiritweb data) + { + ServerPlayer player = (ServerPlayer) data.getLiving(); + + if (player.isSleeping()) + { + return; + } + + + boolean canSleep = canSleep(player); + + if (!canSleep) + { + //todo add message to player saying can't sleep + data.setMode(this, 0); + return; + } + + + player.resetStat(Stats.CUSTOM.get(Stats.TIME_SINCE_REST)); + if (player.isPassenger()) + { + player.stopRiding(); + } + + try + { + player.setPose(Pose.SLEEPING); + /* + Method setPose = ObfuscationReflectionHelper.findMethod(Entity.class, "func_213301_b", Pose.class); + setPose.invoke(player, Pose.SLEEPING); + */ + } + catch (Exception e) + { + } + player.setSleepingPos(player.blockPosition()); + player.setDeltaMovement(Vec3.ZERO); + player.hasImpulse = true; + + try + { + //sleepCounter + ObfuscationReflectionHelper.setPrivateValue(Player.class, player, 0, "f_36110_"); + } + catch (ObfuscationReflectionHelper.UnableToFindFieldException e) + { + try + { + //sleepCounter + ObfuscationReflectionHelper.setPrivateValue(Player.class, player, 0, "sleepCounter"); + } + catch (ObfuscationReflectionHelper.UnableToFindFieldException unableToFindFieldException) + { + } + } + + if (player.level() instanceof ServerLevel serverLevel) + { + serverLevel.updateSleepingPlayerList(); + } + + + player.awardStat(Stats.SLEEP_IN_BED); + CriteriaTriggers.SLEPT_IN_BED.trigger(player); + } + + private boolean canSleep(Player player) + { + Player.BedSleepingProblem ret = ForgeEventFactory.onPlayerSleepInBed(player, Optional.empty()); + if (ret != null) + { + return false; + } + + if (player.isSleeping() || !player.isAlive()) + { + return false;//(PlayerEntity.SleepResult.OTHER_PROBLEM); + } + + if (!player.level().dimensionType().natural()) + { + return false;//(PlayerEntity.SleepResult.NOT_POSSIBLE_HERE); + } + if (player.level().isDay()) + { + return false;//(PlayerEntity.SleepResult.NOT_POSSIBLE_NOW); + } + + if (!ForgeEventFactory.fireSleepingTimeCheck(player, Optional.empty())) + { + return false;//(PlayerEntity.SleepResult.NOT_POSSIBLE_NOW); + } + + if (!player.isCreative()) + { + Vec3 vector3d = player.position(); + List list = player.level().getEntitiesOfClass( + Monster.class, + new AABB( + vector3d.x() - 8D, + vector3d.y() - 5D, + vector3d.z() - 8D, + vector3d.x() + 8D, + vector3d.y() + 5D, + vector3d.z() + 8D), + (entity) -> entity.isPreventingPlayerRest(player)); + + return list.isEmpty(); //(PlayerEntity.SleepResult.NOT_SAFE); + } + + return true; + } + + public void sleepCheck(SleepingLocationCheckEvent event) + { + if (event.getEntity() instanceof Player) + { + SpiritwebCapability.get(event.getEntity()).ifPresent(iSpiritweb -> + { + if (isActive(iSpiritweb)) + { + event.setResult(Event.Result.ALLOW); + } + }); + + } + } +} diff --git a/src/feruchemy/java/leaf/cosmere/feruchemy/common/manifestation/FeruchemyCopper.java b/src/feruchemy/java/leaf/cosmere/feruchemy/common/manifestation/FeruchemyCopper.java new file mode 100644 index 000000000..fbb5acd94 --- /dev/null +++ b/src/feruchemy/java/leaf/cosmere/feruchemy/common/manifestation/FeruchemyCopper.java @@ -0,0 +1,117 @@ +/* + * File updated ~ 7 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.feruchemy.common.manifestation; + +import leaf.cosmere.api.Metals; +import leaf.cosmere.api.math.XPHelper; +import leaf.cosmere.api.spiritweb.ISpiritweb; +import leaf.cosmere.common.charge.MetalmindChargeHelper; +import net.minecraft.util.Mth; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; + +public class FeruchemyCopper extends FeruchemyManifestation +{ + public FeruchemyCopper(Metals.MetalType metalType) + { + super(metalType); + } + + @Override + public int modeMin(ISpiritweb data) + { + return -1; + } + + @Override + public int modeMax(ISpiritweb data) + { + return 1; + } + + @Override + public boolean tick(ISpiritweb data) + { + //don't check every tick. + LivingEntity livingEntity = data.getLiving(); + + if (!(livingEntity instanceof Player playerEntity) || !isActiveTick(data)) + { + return false; + } + + int mode = getMode(data); + + //can't store or tap any more + if (mode == 0) + { + //remove active effects. + //let the current effect run out. + return false; + } + + performXPAdjustment(data, playerEntity); + + //copper doesn't trigger sculk + return false; + } + + + private void performXPAdjustment(ISpiritweb data, Player playerEntity) + { + float experiencePoints;// = playerEntity.isCreative() ? 10 : mode; + + final boolean storing = isStoring(data); + final boolean tapping = isTapping(data); + + if (storing) // active storage + { + //store xp progress, if any. + experiencePoints = playerEntity.experienceProgress * playerEntity.getXpNeededForNextLevel(); + + if (experiencePoints < 1) + { + //else store a level's worth of xp points. + experiencePoints = XPHelper.getXpNeededForNextLevel(playerEntity.experienceLevel - 1); + } + } + else if (tapping) // tapping storage + { + experiencePoints = XPHelper.getXpNeededForNextLevel(playerEntity.experienceLevel); + } + else + { + return; + } + + + //mode < 0 means we are tapping eg. removing from metalmind + //mode > 0 means we are storing eg. adding to the metalmind + + + //successfully added xp to metalmind + final int xp = Mth.floor(experiencePoints); + + + if ((storing && xp <= playerEntity.totalExperience) || tapping) + { + final int adjustValue = storing ? xp : -xp; + final ItemStack itemStack = + MetalmindChargeHelper.adjustMetalmindChargeExact( + playerEntity, + metalType, + adjustValue, + true, + true); + + if (!itemStack.isEmpty()) + { + //adjust player xp + XPHelper.giveExperiencePoints(playerEntity, storing ? -xp : xp); + } + } + } +} diff --git a/src/feruchemy/java/leaf/cosmere/feruchemy/common/manifestation/FeruchemyGold.java b/src/feruchemy/java/leaf/cosmere/feruchemy/common/manifestation/FeruchemyGold.java new file mode 100644 index 000000000..8b5049a50 --- /dev/null +++ b/src/feruchemy/java/leaf/cosmere/feruchemy/common/manifestation/FeruchemyGold.java @@ -0,0 +1,87 @@ +/* + * File updated ~ 21 - 02 - 2024 ~ Gerbagel + */ + +package leaf.cosmere.feruchemy.common.manifestation; + +import leaf.cosmere.api.Metals; +import leaf.cosmere.api.cosmereEffect.CosmereEffect; +import leaf.cosmere.api.cosmereEffect.CosmereEffectInstance; +import leaf.cosmere.api.helpers.EffectsHelper; +import leaf.cosmere.api.spiritweb.ISpiritweb; +import leaf.cosmere.feruchemy.common.config.FeruchemyConfigs; +import net.minecraft.world.entity.ai.attributes.AttributeModifier; +import net.minecraft.world.entity.ai.attributes.Attributes; + +public class FeruchemyGold extends FeruchemyManifestation +{ + private static final int MIN_TAP_FOR_EXTRA_HEALTH = 5; + public FeruchemyGold(Metals.MetalType metalType) + { + super(metalType); + } + + @Override + public int getCost(ISpiritweb data) + { + final int cost = super.getCost(data); + return isTapping(data) + ? cost * FeruchemyConfigs.SERVER.GOLD_TAP_COST_MULTIPLIER.get() + : cost; + } + + @Override + public boolean tick(ISpiritweb data) + { + //don't heal more than needed. + if (!isHealActiveTick(data)) + { + return false; + } + + // we charge them for tapping, + // or if storing, we only want to add to their metalmind every so often. Otherwise gold is too strong. + final boolean spend = isTapping(data) || getActiveTick(data) % 100 == 0; + + //if we are simulating, spend == false + if (canAfford(data, !spend))//success + { + applyEffectTick(data); + //todo, decide if gold should always trigger sculk + //spiritual healing seems like it would be kinda loud, right? + return isTapping(data); + } + return false; + } + + @Override + public void applyEffectTick(ISpiritweb data) + { + int mode = getMode(data); + CosmereEffect effect = getEffect(mode); + CosmereEffectInstance currentEffect = EffectsHelper.getNewEffect(effect, data.getLiving(), Math.abs(mode));//todo check this strength + + if (mode <= 0) + { + int bonusHealth = Math.max(0, -mode - MIN_TAP_FOR_EXTRA_HEALTH + 1); + + currentEffect.setDynamicAttribute(Attributes.MAX_HEALTH, (double) bonusHealth / -mode, AttributeModifier.Operation.ADDITION); + } + + data.addEffect(currentEffect); + + // this updates health immediately rather than waiting for a health update + data.getLiving().setHealth(data.getLiving().getHealth()); + } + + public boolean isHealActiveTick(ISpiritweb data) + { + int healTick = Math.max(1, getHealActiveTick(-getMode(data))); + return data.getLiving().tickCount % healTick == 0; + } + + public static int getHealActiveTick(int strength) + { + return (int) Math.floor(200*Math.pow(strength, -1.5D)); + } +} diff --git a/src/feruchemy/java/leaf/cosmere/feruchemy/common/manifestation/FeruchemyManifestation.java b/src/feruchemy/java/leaf/cosmere/feruchemy/common/manifestation/FeruchemyManifestation.java new file mode 100644 index 000000000..b2f6a1f31 --- /dev/null +++ b/src/feruchemy/java/leaf/cosmere/feruchemy/common/manifestation/FeruchemyManifestation.java @@ -0,0 +1,194 @@ +/* + * File updated ~ 9 - 8 - 2024 ~ Leaf + */ + +package leaf.cosmere.feruchemy.common.manifestation; + +import leaf.cosmere.api.IHasMetalType; +import leaf.cosmere.api.Manifestations; +import leaf.cosmere.api.Metals; +import leaf.cosmere.api.cosmereEffect.CosmereEffect; +import leaf.cosmere.api.cosmereEffect.CosmereEffectInstance; +import leaf.cosmere.api.helpers.EffectsHelper; +import leaf.cosmere.api.manifestation.Manifestation; +import leaf.cosmere.api.spiritweb.ISpiritweb; +import leaf.cosmere.common.charge.MetalmindChargeHelper; +import leaf.cosmere.feruchemy.common.registries.FeruchemyEffects; +import net.minecraft.util.Mth; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.item.ItemStack; + +public class FeruchemyManifestation extends Manifestation implements IHasMetalType +{ + protected final Metals.MetalType metalType; + + public FeruchemyManifestation(Metals.MetalType metalType) + { + super(Manifestations.ManifestationTypes.FERUCHEMY); + this.metalType = metalType; + } + + @Override + public int getPowerID() + { + return metalType.getID(); + } + + @Override + public Metals.MetalType getMetalType() + { + return this.metalType; + } + + @Override + public boolean modeWraps(ISpiritweb data) + { + return false; + } + + //storing is positive, eg adding to store + @Override + public int modeMax(ISpiritweb data) + { + final double strength = getStrength(data, false); + return Mth.floor(strength / 3); + } + + //tapping is negative, eg taking from store + @Override + public int modeMin(ISpiritweb data) + { + final double strength = getStrength(data, false); + return -(Mth.floor(strength)); + } + + @Override + public void onModeChange(ISpiritweb data, int lastMode) + { + super.onModeChange(data, lastMode); + + if (getMode(data) == 0) + { + //todo check if removing effects on mode change is wise. May be better to let them run out as they have already "paid" for them. + final LivingEntity effectSource = data.getLiving(); + data.removeEffect(EffectsHelper.getEffectUUID(getStoringEffect(), effectSource)); + data.removeEffect(EffectsHelper.getEffectUUID(getTappingEffect(), effectSource)); + } + } + + protected CosmereEffect getTappingEffect() + { + return FeruchemyEffects.TAPPING_EFFECTS.get(this.metalType).get(); + } + + protected CosmereEffect getStoringEffect() + { + return FeruchemyEffects.STORING_EFFECTS.get(this.metalType).get(); + } + + public boolean isStoring(ISpiritweb data) + { + return getMode(data) > 0; + } + + public boolean isTapping(ISpiritweb data) + { + return getMode(data) < 0; + } + + public boolean canAfford(ISpiritweb data, boolean simulate) + { + int adjustAmount = getCost(data); + final ItemStack metalmind = MetalmindChargeHelper.adjustMetalmindChargeExact(data, metalType, adjustAmount, !simulate, true); + + if (!metalmind.isEmpty()) + { + return true; + } + + if (!simulate) + { + final int mode = getMode(data); + if (mode < 0) + { + //move towards turning off feruchemy. + data.setMode(this, mode + 1); + } + } + + return false; + } + + public int getCost(ISpiritweb data) + { + int mode = data.getMode(this); + + // if we are tapping + //check if there is charges to tap + if (mode < 0) + { + //wanting to tap + //get cost + return mode >= -modeMax(data) ? mode : -(Mth.abs(Mth.floor(Math.pow(Mth.abs(mode), 1.5d)))); + } + //if we are storing + //check if there is space to store + else if (mode > 0) + { + return mode; + } + return 0; + } + + + @Override + public boolean tick(ISpiritweb data) + { + //don't check every tick. + LivingEntity livingEntity = data.getLiving(); + + int mode = getMode(data); + + if ((!isActiveTick(data)) || mode == 0) + { + //if not active tick, or mode is off + return false; + } + + if (canAfford(data, false))//success + { + applyEffectTick(data); + //todo, move to config so that players can choose how high tap rate needs to be to be picked up by sculk + return isTapping(data) && mode < -4; + } + return false; + } + + @Override + public void applyEffectTick(ISpiritweb data) + { + int mode = getMode(data); + CosmereEffect effect = getEffect(mode); + CosmereEffectInstance currentEffect = EffectsHelper.getNewEffect(effect, data.getLiving(), Math.abs(mode));//todo check this strength + + data.addEffect(currentEffect); + } + + protected CosmereEffect getEffect(int mode) + { + if (mode == 0) + { + return null; + } + else if (mode < 0) + { + return getTappingEffect(); + } + else + { + return getStoringEffect(); + } + + } + +} diff --git a/src/feruchemy/java/leaf/cosmere/feruchemy/common/manifestation/FeruchemyNicrosil.java b/src/feruchemy/java/leaf/cosmere/feruchemy/common/manifestation/FeruchemyNicrosil.java new file mode 100644 index 000000000..61608a0c0 --- /dev/null +++ b/src/feruchemy/java/leaf/cosmere/feruchemy/common/manifestation/FeruchemyNicrosil.java @@ -0,0 +1,210 @@ +/* + * File updated ~ 19 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.feruchemy.common.manifestation; + +import leaf.cosmere.api.Constants; +import leaf.cosmere.api.CosmereAPI; +import leaf.cosmere.api.Metals; +import leaf.cosmere.api.cosmereEffect.CosmereEffect; +import leaf.cosmere.api.cosmereEffect.CosmereEffectInstance; +import leaf.cosmere.api.helpers.CompoundNBTHelper; +import leaf.cosmere.api.helpers.EntityHelper; +import leaf.cosmere.api.manifestation.Manifestation; +import leaf.cosmere.api.spiritweb.ISpiritweb; +import leaf.cosmere.common.charge.MetalmindChargeHelper; +import leaf.cosmere.common.registry.AttributesRegistry; +import leaf.cosmere.feruchemy.common.registries.FeruchemyManifestations; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.ai.attributes.Attribute; +import net.minecraft.world.entity.ai.attributes.AttributeModifier; +import net.minecraft.world.item.ItemStack; + +//storing all the available powers on the user individually +public class FeruchemyNicrosil extends FeruchemyManifestation +{ + public FeruchemyNicrosil(Metals.MetalType metalType) + { + super(metalType); + } + + @Override + public int modeMin(ISpiritweb data) + { + return -1; + } + + @Override + public int modeMax(ISpiritweb data) + { + return 1; + } + + @Override + public boolean tick(ISpiritweb data) + { + //don't check every tick. + LivingEntity livingEntity = data.getLiving(); + + if (!isActiveTick(data)) + { + return false; + } + + int mode = getMode(data); + + int adjustAmount; + + CosmereEffect effect = getEffect(mode); + + // if we are tapping + //check if there is charges to tap + if (mode < 0) + { + //wanting to tap + //get adjustAmount + adjustAmount = mode <= -3 ? -(mode * mode) : mode; + + } + //if we are storing + //check if there is space to store + else if (mode > 0) + { + adjustAmount = mode; + } + //can't store or tap any more + else + { + //remove active effects. + //let the current effect run out. + return false; + } + + final ItemStack itemStack = MetalmindChargeHelper.adjustMetalmindChargeExact(data, metalType, adjustAmount, true, true); + if (!itemStack.isEmpty()) + { + + //storing + if (mode > 0) + { + checkStoreNicrosil(data, itemStack); + return false; + } + //tapping + else + { + checkTapNicrosil(data, itemStack); + return true; + } + } + else + { + //this will clear call onModeChange and then clear nicrosil powers. + data.setMode(this, 0); + } + + return false; + } + + private void checkStoreNicrosil(ISpiritweb data, ItemStack metalmind) + { + //extra metalmind logic. + //if we are actually updating the charge inside + //and if we are adding to it (chargeToGet is negative if adding to metalmind) + // and if the metal is nicrosil, which is the storing investiture type. + //player is storing investiture, + //set the powers they have to the stack. + + CompoundTag nbt = metalmind.getOrCreateTagElement("StoredInvestiture"); + + int identity = (int) EntityHelper.getAttributeValue(data.getLiving(), AttributesRegistry.IDENTITY.getAttribute()); + boolean isStoringIdentity = identity < 1; + + //set unkeyed if no identity set + if (!nbt.contains("identity") && isStoringIdentity) + { + nbt.putUUID("identity", Constants.NBT.UNKEYED_UUID); + } + else if (!nbt.contains("identity") || (nbt.getUUID("identity").compareTo(Constants.NBT.UNKEYED_UUID) == 0)) + { + nbt.putUUID("identity", data.getLiving().getUUID()); + } + + final CosmereEffectInstance effectInstance = CosmereEffectInstance.getOrCreateEffect(getStoringEffect(), data, data.getLiving(), 1); + + //for each power the user has access to + for (Manifestation manifestation : CosmereAPI.manifestationRegistry()) + { + //even if it's granted from hemalurgy/temporary + //update the nbt. + //this will add/remove powers based on what the user currently has. + final double totalStrength = manifestation.getStrength(data, false); + final String registryName = manifestation.getRegistryName().toString(); + if (totalStrength > 0) + { + nbt.putDouble(registryName, totalStrength); + } + //remove if not available + else if (nbt.contains(registryName)) + { + nbt.remove(registryName); + } + + final Attribute attributeRegistryObject = manifestation.getAttribute(); + + //don't disable nicrosil, because we want to keep storing + //don't disable aluminum, because we may be wanting to store without identity + final boolean invalidMetalToDisable = + manifestation == FeruchemyManifestations.FERUCHEMY_POWERS.get(Metals.MetalType.NICROSIL).get() + || manifestation == FeruchemyManifestations.FERUCHEMY_POWERS.get(Metals.MetalType.ALUMINUM).get(); + + if (attributeRegistryObject == null || invalidMetalToDisable) + { + continue; + } + + //also disable all powers + effectInstance.setDynamicAttribute(manifestation.getAttribute(), -1000, AttributeModifier.Operation.ADDITION); + } + + data.addEffect(effectInstance); + } + + private void checkTapNicrosil(ISpiritweb data, ItemStack metalmind) + { + CompoundTag nbt = metalmind.getOrCreateTagElement("StoredInvestiture"); + //for each power the user has access to + //todo add the stored investiture identity to spiritweb data if not there already? + + final CosmereEffectInstance effectInstance = CosmereEffectInstance.getOrCreateEffect(getTappingEffect(), data, data.getLiving(), 1); + + for (Manifestation manifestation : CosmereAPI.manifestationRegistry()) + { + String manifestationName = manifestation.getRegistryName().toString(); + Attribute attribute = manifestation.getAttribute(); + if (CompoundNBTHelper.verifyExistance(nbt, manifestationName)) + { + final double strength = + CompoundNBTHelper.getDouble( + nbt, + manifestationName, + 0); + + effectInstance.setDynamicAttribute(attribute, strength, AttributeModifier.Operation.ADDITION); + } + else + { + //remove any old attributes that don't exist on the item + //this could happen if the user was switching nicrosil metalminds + if (attribute != null) + { + effectInstance.removeDynamicAttribute(attribute); + } + } + } + + data.addEffect(effectInstance); + } +} diff --git a/src/feruchemy/java/leaf/cosmere/feruchemy/common/registries/FeruchemyAttributes.java b/src/feruchemy/java/leaf/cosmere/feruchemy/common/registries/FeruchemyAttributes.java new file mode 100644 index 000000000..c8283cc72 --- /dev/null +++ b/src/feruchemy/java/leaf/cosmere/feruchemy/common/registries/FeruchemyAttributes.java @@ -0,0 +1,38 @@ +/* + * File updated ~ 20 - 11 - 2024 ~ Leaf + */ + +package leaf.cosmere.feruchemy.common.registries; + +import leaf.cosmere.api.EnumUtils; +import leaf.cosmere.api.Metals; +import leaf.cosmere.common.registration.impl.AttributeDeferredRegister; +import leaf.cosmere.common.registration.impl.AttributeRegistryObject; +import leaf.cosmere.feruchemy.common.Feruchemy; +import net.minecraft.world.entity.ai.attributes.Attribute; + +import java.util.Arrays; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +public class FeruchemyAttributes +{ + public static final AttributeDeferredRegister ATTRIBUTES = new AttributeDeferredRegister(Feruchemy.MODID); + + public static final Map> FERUCHEMY_ATTRIBUTES = + Arrays.stream(EnumUtils.METAL_TYPES) + .filter(metalType -> metalType != Metals.MetalType.ATIUM && metalType.hasAssociatedManifestation()) + .collect(Collectors.toMap( + Function.identity(), + type -> + ATTRIBUTES.register( + type.getName(), + Feruchemy.MODID, + 0, + 0, + 16 + ))); + + +} diff --git a/src/feruchemy/java/leaf/cosmere/feruchemy/common/registries/FeruchemyCreativeTabs.java b/src/feruchemy/java/leaf/cosmere/feruchemy/common/registries/FeruchemyCreativeTabs.java new file mode 100644 index 000000000..8725ea474 --- /dev/null +++ b/src/feruchemy/java/leaf/cosmere/feruchemy/common/registries/FeruchemyCreativeTabs.java @@ -0,0 +1,118 @@ +/* + * File updated ~ 20 - 11 - 2024 ~ Leaf + */ + +package leaf.cosmere.feruchemy.common.registries; + +import leaf.cosmere.api.EnumUtils; +import leaf.cosmere.api.Metals; +import leaf.cosmere.common.registration.impl.CreativeTabDeferredRegister; +import leaf.cosmere.common.registration.impl.CreativeTabRegistryObject; +import leaf.cosmere.feruchemy.common.Feruchemy; +import leaf.cosmere.feruchemy.common.items.BraceletMetalmindItem; +import leaf.cosmere.feruchemy.common.items.NecklaceMetalmindItem; +import leaf.cosmere.feruchemy.common.items.RingMetalmindItem; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceKey; +import net.minecraft.world.item.CreativeModeTab; +import net.minecraft.world.item.CreativeModeTabs; +import net.minecraftforge.event.BuildCreativeModeTabContentsEvent; + +public class FeruchemyCreativeTabs +{ + public static final CreativeTabDeferredRegister CREATIVE_TABS = new CreativeTabDeferredRegister(Feruchemy.MODID, FeruchemyCreativeTabs::addToExistingTabs); + + public static final CreativeTabRegistryObject ITEMS = + CREATIVE_TABS.registerMain( + Component.translatable("tabs." + Feruchemy.MODID + ".items"), + FeruchemyItems.BANDS_OF_MOURNING, + builder -> + builder.withSearchBar()//Allow our tabs to be searchable for convenience purposes + .displayItems((displayParameters, output) -> + { + CreativeTabDeferredRegister.addToDisplay(FeruchemyItems.ITEMS, output); + addFilledMetalminds(output); + }) + ); + + private static void addFilledMetalminds(CreativeModeTab.Output output) + { + FeruchemyItems.BANDS_OF_MOURNING.get().addFilled(output); + + //I don't like the multiple for loops, + // but this is how we have them ordered nicely in the creative menu + for (Metals.MetalType metalType : EnumUtils.METAL_TYPES) + { + if (metalType.hasFeruchemicalEffect()) + { + final RingMetalmindItem item = FeruchemyItems.METAL_RINGS.get(metalType).get(); + item.addFilled(output); + } + } + for (Metals.MetalType metalType : EnumUtils.METAL_TYPES) + { + if (metalType.hasFeruchemicalEffect()) + { + final BraceletMetalmindItem item = FeruchemyItems.METAL_BRACELETS.get(metalType).get(); + item.addFilled(output); + } + } + for (Metals.MetalType metalType : EnumUtils.METAL_TYPES) + { + if (metalType.hasFeruchemicalEffect()) + { + final NecklaceMetalmindItem item = FeruchemyItems.METAL_NECKLACES.get(metalType).get(); + item.addFilled(output); + } + } + } + + private static void addToExistingTabs(BuildCreativeModeTabContentsEvent event) + { + ResourceKey tabKey = event.getTabKey(); + if (tabKey == CreativeModeTabs.BUILDING_BLOCKS) + { + //CreativeTabDeferredRegister.addToDisplay(event, BlocksRegistry.METALWORKING_TABLE); + } + else if (tabKey == CreativeModeTabs.NATURAL_BLOCKS) + { + /*for (var ore : BlocksRegistry.METAL_ORE.values()) + { + CreativeTabDeferredRegister.addToDisplay(event, ore); + } + for (var ore : BlocksRegistry.METAL_ORE_DEEPSLATE.values()) + { + CreativeTabDeferredRegister.addToDisplay(event, ore); + }*/ + } + else if (tabKey == CreativeModeTabs.FUNCTIONAL_BLOCKS) + { + + } + else if (tabKey == CreativeModeTabs.REDSTONE_BLOCKS) + { + + } + else if (tabKey == CreativeModeTabs.TOOLS_AND_UTILITIES) + { + + } + else if (tabKey == CreativeModeTabs.COMBAT) + { + + } + else if (tabKey == CreativeModeTabs.FOOD_AND_DRINKS) + { + //ItemsRegistry.SOME_FOOD.get().addItems(event); + } + else if (tabKey == CreativeModeTabs.SPAWN_EGGS) + { + + } + else if (tabKey == CreativeModeTabs.INGREDIENTS) + { + + } + } + +} diff --git a/src/feruchemy/java/leaf/cosmere/feruchemy/common/registries/FeruchemyEffects.java b/src/feruchemy/java/leaf/cosmere/feruchemy/common/registries/FeruchemyEffects.java new file mode 100644 index 000000000..74511c414 --- /dev/null +++ b/src/feruchemy/java/leaf/cosmere/feruchemy/common/registries/FeruchemyEffects.java @@ -0,0 +1,118 @@ +/* + * File updated ~ 20 - 11 - 2024 ~ Leaf + */ + +package leaf.cosmere.feruchemy.common.registries; + +import leaf.cosmere.api.EnumUtils; +import leaf.cosmere.api.Metals; +import leaf.cosmere.api.cosmereEffect.CosmereEffect; +import leaf.cosmere.common.registration.impl.CosmereEffectDeferredRegister; +import leaf.cosmere.common.registration.impl.CosmereEffectRegistryObject; +import leaf.cosmere.feruchemy.common.Feruchemy; +import leaf.cosmere.feruchemy.common.effects.FeruchemyEffectBase; +import leaf.cosmere.feruchemy.common.effects.store.*; +import leaf.cosmere.feruchemy.common.effects.tap.*; + +import java.util.Arrays; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +public class FeruchemyEffects +{ + + public static final CosmereEffectDeferredRegister EFFECTS = new CosmereEffectDeferredRegister(Feruchemy.MODID); + + public static final Map> TAPPING_EFFECTS = + Arrays.stream(EnumUtils.METAL_TYPES) + .filter(Metals.MetalType::hasFeruchemicalEffect) + .collect(Collectors.toMap( + Function.identity(), + type -> EFFECTS.register( + "tapping_" + type.getName(), + () -> makeTappingEffect(type)) + ) + ); + + public static final Map> STORING_EFFECTS = + Arrays.stream(EnumUtils.METAL_TYPES) + .filter(Metals.MetalType::hasFeruchemicalEffect) + .collect(Collectors.toMap( + Function.identity(), + type -> EFFECTS.register( + "storing_" + type.getName(), + () -> makeStoringEffect(type)) + ) + ); + + private static CosmereEffect makeStoringEffect(Metals.MetalType metalType) + { + switch (metalType) + { + case IRON: + return new IronStoreEffect(metalType); + case STEEL: + return (new SteelStoreEffect(metalType)); + case PEWTER: + return new PewterStoreEffect(metalType); + case ZINC: + return new ZincStoreEffect(metalType); + case BRASS: + return new BrassStoreEffect(metalType); + case ALUMINUM: + return new AluminumStoreEffect(metalType); + case DURALUMIN: + return new DuraluminStoreEffect(metalType); + case CHROMIUM: + return new ChromiumStoreEffect(metalType); + case GOLD: + return new GoldStoreEffect(metalType); + case ELECTRUM: + return new ElectrumStoreEffect(metalType); + case CADMIUM: + return new CadmiumStoreEffect(metalType); + case BENDALLOY: + return new BendalloyStoreEffect(metalType); + case ATIUM: + return new AtiumStoreEffect(metalType); + default: + return new FeruchemyEffectBase(metalType); + } + } + + private static CosmereEffect makeTappingEffect(Metals.MetalType metalType) + { + switch (metalType) + { + case IRON: + return new IronTapEffect(metalType); + case STEEL: + return new SteelTapEffect(metalType); + case PEWTER: + return new PewterTapEffect(metalType); + case ZINC: + return new ZincTapEffect(metalType); + case BRASS: + return new BrassTapEffect(metalType); + case ALUMINUM: + return new AluminumTapEffect(metalType); + case DURALUMIN: + return new DuraluminTapEffect(metalType); + case CHROMIUM: + return new ChromiumTapEffect(metalType); + case GOLD: + return new GoldTapEffect(metalType); + case ELECTRUM: + return new ElectrumTapEffect(metalType); + case CADMIUM: + return new CadmiumTapEffect(metalType); + case BENDALLOY: + return new BendalloyTapEffect(metalType); + case ATIUM: + return new AtiumTapEffect(metalType); + default: + return new FeruchemyEffectBase(metalType); + } + } +} diff --git a/src/feruchemy/java/leaf/cosmere/feruchemy/common/registries/FeruchemyItems.java b/src/feruchemy/java/leaf/cosmere/feruchemy/common/registries/FeruchemyItems.java new file mode 100644 index 000000000..5922be629 --- /dev/null +++ b/src/feruchemy/java/leaf/cosmere/feruchemy/common/registries/FeruchemyItems.java @@ -0,0 +1,60 @@ +/* + * File updated ~ 20 - 11 - 2024 ~ Leaf + */ + +package leaf.cosmere.feruchemy.common.registries; + +import leaf.cosmere.api.Constants.RegNameStubs; +import leaf.cosmere.api.EnumUtils; +import leaf.cosmere.api.Metals; +import leaf.cosmere.common.registration.impl.ItemDeferredRegister; +import leaf.cosmere.common.registration.impl.ItemRegistryObject; +import leaf.cosmere.feruchemy.common.Feruchemy; +import leaf.cosmere.feruchemy.common.items.BandsOfMourningItem; +import leaf.cosmere.feruchemy.common.items.BraceletMetalmindItem; +import leaf.cosmere.feruchemy.common.items.NecklaceMetalmindItem; +import leaf.cosmere.feruchemy.common.items.RingMetalmindItem; + +import java.util.Arrays; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +public class FeruchemyItems +{ + public static final ItemDeferredRegister ITEMS = new ItemDeferredRegister(Feruchemy.MODID); + + + public static final ItemRegistryObject BANDS_OF_MOURNING = ITEMS.register("bands_of_mourning", BandsOfMourningItem::new); + + public static final Map> METAL_RINGS = + Arrays.stream(EnumUtils.METAL_TYPES) + .filter(Metals.MetalType::hasFeruchemicalEffect) + .collect(Collectors.toMap( + Function.identity(), + type -> ITEMS.register( + type.getName() + RegNameStubs.RING + RegNameStubs.METALMIND, + () -> new RingMetalmindItem(type) + ))); + + public static final Map> METAL_BRACELETS = + Arrays.stream(EnumUtils.METAL_TYPES) + .filter(Metals.MetalType::hasFeruchemicalEffect) + .collect(Collectors.toMap( + Function.identity(), + type -> ITEMS.register( + type.getName() + RegNameStubs.BRACELET + RegNameStubs.METALMIND, + () -> new BraceletMetalmindItem(type) + ))); + + public static final Map> METAL_NECKLACES = + Arrays.stream(EnumUtils.METAL_TYPES) + .filter(Metals.MetalType::hasFeruchemicalEffect) + .collect(Collectors.toMap( + Function.identity(), + type -> ITEMS.register( + type.getName() + RegNameStubs.NECKLACE + RegNameStubs.METALMIND, + () -> new NecklaceMetalmindItem(type) + ))); + +} diff --git a/src/feruchemy/java/leaf/cosmere/feruchemy/common/registries/FeruchemyLootFunctions.java b/src/feruchemy/java/leaf/cosmere/feruchemy/common/registries/FeruchemyLootFunctions.java new file mode 100644 index 000000000..c08f57926 --- /dev/null +++ b/src/feruchemy/java/leaf/cosmere/feruchemy/common/registries/FeruchemyLootFunctions.java @@ -0,0 +1,19 @@ +/* + * File updated ~ 8 - 10 - 2022 ~ Leaf + */ + +package leaf.cosmere.feruchemy.common.registries; + +import leaf.cosmere.common.registration.impl.LootFunctionDeferredRegister; +import leaf.cosmere.common.registration.impl.LootItemFunctionTypeRegistryObject; +import leaf.cosmere.feruchemy.common.Feruchemy; +import leaf.cosmere.feruchemy.common.loot.InvestMetalmindLootFunction; +import net.minecraft.world.level.storage.loot.functions.LootItemFunctionType; + +public class FeruchemyLootFunctions +{ + public static final LootFunctionDeferredRegister LOOT_FUNCTIONS = new LootFunctionDeferredRegister(Feruchemy.MODID); + + public static final LootItemFunctionTypeRegistryObject INVEST_METALMIND = LOOT_FUNCTIONS.registerType("invest_metalmind", InvestMetalmindLootFunction.Serializer::new); + +} diff --git a/src/feruchemy/java/leaf/cosmere/feruchemy/common/registries/FeruchemyManifestations.java b/src/feruchemy/java/leaf/cosmere/feruchemy/common/registries/FeruchemyManifestations.java new file mode 100644 index 000000000..4bdda7e16 --- /dev/null +++ b/src/feruchemy/java/leaf/cosmere/feruchemy/common/registries/FeruchemyManifestations.java @@ -0,0 +1,59 @@ +/* + * File updated ~ 20 - 11 - 2024 ~ Leaf + */ + +package leaf.cosmere.feruchemy.common.registries; + +import leaf.cosmere.api.EnumUtils; +import leaf.cosmere.api.Metals; +import leaf.cosmere.common.registration.impl.ManifestationDeferredRegister; +import leaf.cosmere.common.registration.impl.ManifestationRegistryObject; +import leaf.cosmere.feruchemy.common.Feruchemy; +import leaf.cosmere.feruchemy.common.manifestation.*; + +import java.util.Arrays; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +public class FeruchemyManifestations +{ + public static final ManifestationDeferredRegister MANIFESTATIONS = new ManifestationDeferredRegister(Feruchemy.MODID); + + + // Feruchemy powers + public static final Map> FERUCHEMY_POWERS = + Arrays.stream(EnumUtils.METAL_TYPES) + .filter(Metals.MetalType::hasAssociatedManifestation) + .collect(Collectors.toMap( + Function.identity(), + metalType -> + MANIFESTATIONS.register( + metalType.getName(), + () -> makeFeruchemyManifestation(metalType))//feruchemy can be base manifestation type because it mostly functions through effects + )); + + private static FeruchemyManifestation makeFeruchemyManifestation(Metals.MetalType metalType) + { + switch (metalType) + { + case COPPER: + return new FeruchemyCopper(metalType); + case BRONZE: + return new FeruchemyBronze(metalType); + case ALUMINUM: + return new FeruchemyAluminum(metalType); + case NICROSIL: + return new FeruchemyNicrosil(metalType); + case GOLD: + return new FeruchemyGold(metalType); + case BENDALLOY: + return new FeruchemyBendalloy(metalType); + case ATIUM: + return new FeruchemyAtium(metalType); + default: + return new FeruchemyManifestation(metalType); + } + } + +} diff --git a/src/feruchemy/java/leaf/cosmere/feruchemy/common/utils/MiscHelper.java b/src/feruchemy/java/leaf/cosmere/feruchemy/common/utils/MiscHelper.java new file mode 100644 index 000000000..615a07849 --- /dev/null +++ b/src/feruchemy/java/leaf/cosmere/feruchemy/common/utils/MiscHelper.java @@ -0,0 +1,51 @@ +/* + * File updated ~ 9 - 8 - 2024 ~ Leaf + */ + +package leaf.cosmere.feruchemy.common.utils; + +import leaf.cosmere.api.IGrantsBaseAttributes; +import leaf.cosmere.api.IHasSize; +import leaf.cosmere.api.Metals; +import leaf.cosmere.api.text.TextHelper; +import leaf.cosmere.common.items.GodMetalNuggetItem; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.ai.attributes.Attribute; +import net.minecraft.world.entity.animal.horse.Llama; +import net.minecraft.world.item.ItemStack; + +import java.util.ArrayList; + +public class MiscHelper +{ + + public static void consumeNugget(LivingEntity livingEntity, ItemStack itemStack) + { + if (livingEntity.level().isClientSide) + { + return; + } + + + if (itemStack.getItem() instanceof IGrantsBaseAttributes attributeItem && itemStack.getItem() instanceof IHasSize sizeItem) + { + Integer size = sizeItem.readMetalAlloySizeNbtData(itemStack); + if (size != null) + { + ArrayList attributes = attributeItem.determineBaseAttributes(itemStack); + attributeItem.grantBaseAttributes(livingEntity, attributes, size); + } + + if (itemStack.getItem() instanceof GodMetalNuggetItem godItem && godItem.getMetalType() == Metals.MetalType.LERASATIUM) + { + if (livingEntity instanceof Llama && !livingEntity.hasCustomName()) + { + //todo translations + livingEntity.setCustomName(TextHelper.createTranslatedText("Full Feruchemist Llama")); + } + } + } + } + + +} diff --git a/src/feruchemy/java/leaf/cosmere/feruchemy/mixin/EntityMixin.java b/src/feruchemy/java/leaf/cosmere/feruchemy/mixin/EntityMixin.java new file mode 100644 index 000000000..29645a110 --- /dev/null +++ b/src/feruchemy/java/leaf/cosmere/feruchemy/mixin/EntityMixin.java @@ -0,0 +1,216 @@ +/* + * File updated ~ 9 - 8 - 2024 ~ Leaf + */ + +package leaf.cosmere.feruchemy.mixin; + +import leaf.cosmere.api.Metals; +import leaf.cosmere.api.cosmereEffect.CosmereEffect; +import leaf.cosmere.common.cap.entity.SpiritwebCapability; +import leaf.cosmere.feruchemy.common.manifestation.FeruchemyAtium; +import leaf.cosmere.feruchemy.common.registries.FeruchemyEffects; +import net.minecraft.core.BlockPos; +import net.minecraft.util.Mth; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityDimensions; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.Pose; +import net.minecraft.world.entity.ai.attributes.Attributes; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.material.FluidState; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.Vec3; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +import java.util.HashMap; +import java.util.Map; + +@Mixin(Entity.class) +public class EntityMixin +{ + + @Inject(at = @At("RETURN"), method = "canEnterPose", cancellable = true) + public void handleCanEnterPose(Pose pose, CallbackInfoReturnable cir) + { + Entity entity = (Entity) (Object) this; + + if (entity instanceof LivingEntity livingEntity) + { + float scale = FeruchemyAtium.getScale(livingEntity); + if (scale > 0.01 || scale < -0.01) + { + EntityDimensions entityDimensions = livingEntity.getDimensions(pose); + entityDimensions = entityDimensions.scale(scale); + double f = entityDimensions.width / 2.0F; + Vec3 vector3d = new Vec3(livingEntity.getX() - f, livingEntity.getY(), livingEntity.getZ() - f); + Vec3 vector3d1 = new Vec3(livingEntity.getX() + f, livingEntity.getY() + (double) entityDimensions.height, livingEntity.getZ() + f); + AABB box = new AABB(vector3d, vector3d1); + + cir.setReturnValue(livingEntity.level().noCollision(livingEntity, box.deflate(1.0E-7D))); + } + } + } + + @Inject(at = @At("RETURN"), method = "isSteppingCarefully", cancellable = true) + public void handleIsSteppingCarefully(CallbackInfoReturnable cir) + { + //exit out early if they're already stepping lightly + if (cir.getReturnValue()) + { + return; + } + + Entity entity = (Entity) (Object) this; + if (entity instanceof LivingEntity livingEntity) + { + SpiritwebCapability.get(livingEntity).ifPresent(data -> + { + CosmereEffect iron = FeruchemyEffects.STORING_EFFECTS.get(Metals.MetalType.IRON).get(); + //todo check this is still working, as the related function only works on server + if (data.totalStrengthOfEffect(iron) > 2) + { + cir.setReturnValue(true); + } + }); + } + } + + //region Feru steel run on water + //Special thanks to ExpandAbility api mod for showing how this works! + //https://github.com/florensie/ExpandAbility/blob/9b80bb256ed4b9dd305c3e1c3b3f6f730b57a237/common/src/main/java/be/florens/expandability/mixin/fluidcollision/EntityMixin.java + // originally they used @modify variable on the return of collide, but I want to use CallbackInfoReturnable to set value inside getting spiritweb data + @Inject(at = @At("RETURN"), method = "collide", cancellable = true) + private void collideWithFluid(CallbackInfoReturnable cir) + { + Vec3 originalDisplacement = cir.getReturnValue(); + + Entity entity = (Entity) (Object) this; + if (!(entity instanceof LivingEntity livingEntity) || livingEntity.isCrouching()) + { + return; + } + + if (livingEntity.isSprinting()) + { + if (livingEntity.getAttributeValue(Attributes.MOVEMENT_SPEED) > 0.3f) + { + if (originalDisplacement.y <= 0.0 && !isTouchingFluid(livingEntity, livingEntity.getBoundingBox().deflate(0.001D))) + { + Map points = findFluidDistances(livingEntity, originalDisplacement); + Double highestDistance = null; + + for (Map.Entry point : points.entrySet()) + { + if (highestDistance == null || (point.getValue() != null && point.getValue() > highestDistance)) + { + highestDistance = point.getValue(); + } + } + + if (highestDistance != null) + { + Vec3 finalDisplacement = new Vec3(originalDisplacement.x, highestDistance, originalDisplacement.z); + AABB finalBox = livingEntity.getBoundingBox().move(finalDisplacement).deflate(0.001D); + if (!isTouchingFluid(livingEntity, finalBox)) + { + livingEntity.fallDistance = 0.0F; + livingEntity.setOnGround(true); + cir.setReturnValue(finalDisplacement); + } + } + } + } + } + + //do nothing, use original value + } + + //Special thanks to ExpandAbility api mod for showing how this works! + @Unique + private static Map findFluidDistances(LivingEntity entity, Vec3 originalDisplacement) + { + AABB box = entity.getBoundingBox().move(originalDisplacement); + + HashMap points = new HashMap<>(); + points.put(new Vec3(box.minX, box.minY, box.minZ), null); + points.put(new Vec3(box.minX, box.minY, box.maxZ), null); + points.put(new Vec3(box.maxX, box.minY, box.minZ), null); + points.put(new Vec3(box.maxX, box.minY, box.maxZ), null); + + double fluidStepHeight = entity.onGround() ? Math.max(1.0, entity.getStepHeight()) : 0.0; + + for (Map.Entry entry : points.entrySet()) + { + for (int i = 0; ; i--) + { + //todo - check this still works. + BlockPos landingPos = BlockPos.containing(entry.getKey().x, entry.getKey().y + i + fluidStepHeight, entry.getKey().z); + FluidState landingState = entity.getCommandSenderWorld().getFluidState(landingPos); + + double distanceToFluidSurface = landingPos.getY() + landingState.getOwnHeight() - entity.getY(); + double limitingVelocity = originalDisplacement.y; + + if (distanceToFluidSurface < limitingVelocity || distanceToFluidSurface > fluidStepHeight) + { + break; + } + + if (!landingState.isEmpty()) + { + entry.setValue(distanceToFluidSurface); + break; + } + } + } + + return points; + } + + //Special thanks to ExpandAbility api mod for showing how this works! + @Unique + private static boolean isTouchingFluid(LivingEntity entity, AABB box) + { + int minX = Mth.floor(box.minX); + int maxX = Mth.ceil(box.maxX); + int minY = Mth.floor(box.minY); + int maxY = Mth.ceil(box.maxY); + int minZ = Mth.floor(box.minZ); + int maxZ = Mth.ceil(box.maxZ); + Level world = entity.getCommandSenderWorld(); + + if (world.hasChunksAt(minX, minY, minZ, maxX, maxY, maxZ)) + { + BlockPos.MutableBlockPos mutable = new BlockPos.MutableBlockPos(); + + for (int i = minX; i < maxX; ++i) + { + for (int j = minY; j < maxY; ++j) + { + for (int k = minZ; k < maxZ; ++k) + { + mutable.set(i, j, k); + FluidState fluidState = world.getFluidState(mutable); + + if (!fluidState.isEmpty()) + { + double surfaceY = fluidState.getHeight(world, mutable) + j; + + if (surfaceY >= box.minY) + { + return true; + } + } + } + } + } + } + + return false; + } + //endregion +} + diff --git a/src/feruchemy/java/leaf/cosmere/feruchemy/mixin/EntityRenderDispatcherMixin.java b/src/feruchemy/java/leaf/cosmere/feruchemy/mixin/EntityRenderDispatcherMixin.java new file mode 100644 index 000000000..d9ce119fe --- /dev/null +++ b/src/feruchemy/java/leaf/cosmere/feruchemy/mixin/EntityRenderDispatcherMixin.java @@ -0,0 +1,32 @@ +/* + * File updated ~ 8 - 10 - 2022 ~ Leaf + */ + +package leaf.cosmere.feruchemy.mixin; + +import com.mojang.blaze3d.vertex.PoseStack; +import leaf.cosmere.feruchemy.common.manifestation.FeruchemyAtium; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.entity.EntityRenderDispatcher; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.level.LevelReader; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.ModifyArg; + +@Mixin(EntityRenderDispatcher.class) +public class EntityRenderDispatcherMixin +{ + + @ModifyArg(method = "render", index = 6, at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/entity/EntityRenderDispatcher;renderShadow(Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource;Lnet/minecraft/world/entity/Entity;FFLnet/minecraft/world/level/LevelReader;F)V")) + private float renderShadowSizeProxy(PoseStack pMatrixStack, MultiBufferSource pBuffer, Entity pEntity, float pWeight, float pPartialTicks, LevelReader pLevel, float pSize) + { + if (pEntity instanceof LivingEntity livingEntity) + { + return pSize * FeruchemyAtium.getScale(livingEntity); + } + + return pSize; + } +} diff --git a/src/feruchemy/java/leaf/cosmere/feruchemy/mixin/GameRendererMixin.java b/src/feruchemy/java/leaf/cosmere/feruchemy/mixin/GameRendererMixin.java new file mode 100644 index 000000000..f704b89b9 --- /dev/null +++ b/src/feruchemy/java/leaf/cosmere/feruchemy/mixin/GameRendererMixin.java @@ -0,0 +1,84 @@ +/* + * File updated ~ 20 - 12 - 2024 ~ Leaf + */ + +package leaf.cosmere.feruchemy.mixin; + +import leaf.cosmere.api.Metals; +import leaf.cosmere.common.cap.entity.SpiritwebCapability; +import leaf.cosmere.feruchemy.common.manifestation.FeruchemyManifestation; +import leaf.cosmere.feruchemy.common.registries.FeruchemyManifestations; +import net.minecraft.client.Camera; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GameRenderer; +import net.minecraft.util.Mth; +import net.minecraft.world.entity.player.Player; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(GameRenderer.class) +public class GameRendererMixin +{ + + @Inject(at = @At("RETURN"), + method = "getFov", + cancellable = true + ) + private void getZoomedFov(Camera activeRenderInfoIn, float partialTicks, boolean useFOVSetting, CallbackInfoReturnable info) + { + double fov = info.getReturnValue(); + + if (!(Minecraft.getInstance().getCameraEntity() instanceof Player player)) + { + return; + } + + SpiritwebCapability.get(player).ifPresent(playerSpiritweb -> + { + final FeruchemyManifestation tinF = FeruchemyManifestations.FERUCHEMY_POWERS.get(Metals.MetalType.TIN).get(); + + if (tinF.isTapping(playerSpiritweb) && tinF.canAfford(playerSpiritweb, true)) + { + final int i = Mth.abs(tinF.getMode(playerSpiritweb)); + final double pow = Math.pow(2, i); + final double v = fov / pow; + info.setReturnValue(v); + } + }); + } + + + @Inject(at = @At("RETURN"), + method = "getRenderDistance", + cancellable = true + ) + private void getRenderDistance(CallbackInfoReturnable info) + { + if (!(Minecraft.getInstance().getCameraEntity() instanceof Player player)) + { + return; + } + + SpiritwebCapability.get(player).ifPresent(playerSpiritweb -> + { + final FeruchemyManifestation tinF = FeruchemyManifestations.FERUCHEMY_POWERS.get(Metals.MetalType.TIN).get(); + + if (tinF.isStoring(playerSpiritweb) && tinF.canAfford(playerSpiritweb, true)) + { + float renderDistance = info.getReturnValue(); + + final int i = Mth.abs(tinF.getMode(playerSpiritweb)); + final double pow = Math.pow(2, i); + final int floor = Mth.floor(pow); + final float v = renderDistance / floor; + + info.setReturnValue(v); + } + + }); + + + } +} diff --git a/src/feruchemy/java/leaf/cosmere/feruchemy/mixin/IForgeEntityMixin.java b/src/feruchemy/java/leaf/cosmere/feruchemy/mixin/IForgeEntityMixin.java new file mode 100644 index 000000000..74b81164a --- /dev/null +++ b/src/feruchemy/java/leaf/cosmere/feruchemy/mixin/IForgeEntityMixin.java @@ -0,0 +1,42 @@ +/* + * File updated ~ 10 - 8 - 2024 ~ Leaf + */ + +package leaf.cosmere.feruchemy.mixin; + +import leaf.cosmere.feruchemy.common.manifestation.FeruchemyAtium; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.ai.attributes.AttributeInstance; +import net.minecraftforge.common.ForgeMod; +import net.minecraftforge.common.extensions.IForgeEntity; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Overwrite; + +@Mixin(IForgeEntity.class) +public interface IForgeEntityMixin +{ + /** + * @author + * @reason + */ + @Overwrite(remap = false) + default float getStepHeight() + { + final Entity self = (Entity) this; + //todo replace this mixin completely with just using the attribute + float vanillaStep = self.maxUpStep(); + if (self instanceof LivingEntity living) + { + AttributeInstance stepHeightAttribute = living.getAttribute(ForgeMod.STEP_HEIGHT_ADDITION.get()); + if (stepHeightAttribute != null) + { + final float max = (float) Math.max(0, vanillaStep + stepHeightAttribute.getValue()); + + + return max * FeruchemyAtium.getScale(living); + } + } + return vanillaStep; + } +} diff --git a/src/feruchemy/java/leaf/cosmere/feruchemy/mixin/LivingEntityMixin.java b/src/feruchemy/java/leaf/cosmere/feruchemy/mixin/LivingEntityMixin.java new file mode 100644 index 000000000..3c74625df --- /dev/null +++ b/src/feruchemy/java/leaf/cosmere/feruchemy/mixin/LivingEntityMixin.java @@ -0,0 +1,31 @@ +/* + * File updated ~ 8 - 10 - 2022 ~ Leaf + */ + +package leaf.cosmere.feruchemy.mixin; + +import leaf.cosmere.feruchemy.common.manifestation.FeruchemyAtium; +import net.minecraft.world.entity.LivingEntity; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(LivingEntity.class) +public class LivingEntityMixin +{ + @Inject(at = @At("RETURN"), method = "getJumpPower", cancellable = true) + protected void handleGetJumpPower(CallbackInfoReturnable cir) + { + LivingEntity livingEntity = (LivingEntity) (Object) this; + cir.setReturnValue(cir.getReturnValue() * FeruchemyAtium.getScale(livingEntity)); + } + + @Inject(at = @At("RETURN"), method = "getSpeed", cancellable = true) + protected void handleGetSpeed(CallbackInfoReturnable cir) + { + LivingEntity livingEntity = (LivingEntity) (Object) this; + cir.setReturnValue(cir.getReturnValue() * FeruchemyAtium.getScale(livingEntity)); + } +} + diff --git a/src/feruchemy/java/leaf/cosmere/feruchemy/mixin/PlayerMixin.java b/src/feruchemy/java/leaf/cosmere/feruchemy/mixin/PlayerMixin.java new file mode 100644 index 000000000..296577858 --- /dev/null +++ b/src/feruchemy/java/leaf/cosmere/feruchemy/mixin/PlayerMixin.java @@ -0,0 +1,20 @@ +/* + * File updated ~ 8 - 10 - 2022 ~ Leaf + */ + +package leaf.cosmere.feruchemy.mixin; + +import net.minecraft.world.entity.player.Player; +import org.spongepowered.asm.mixin.Mixin; + +@Mixin(Player.class) +public class PlayerMixin +{ + /*@Inject(at = @At("RETURN"), method = "getSpeed", cancellable = true) + protected void handleGetSpeed(CallbackInfoReturnable cir) + { + LivingEntity livingEntity = (LivingEntity) (Object) this; + cir.setReturnValue(cir.getReturnValue() * (FeruchemyAtium.getScale(livingEntity))); + }*/ +} + diff --git a/src/feruchemy/resources/META-INF/mods.toml b/src/feruchemy/resources/META-INF/mods.toml new file mode 100644 index 000000000..d81463a72 --- /dev/null +++ b/src/feruchemy/resources/META-INF/mods.toml @@ -0,0 +1,41 @@ +modLoader = "javafml" +loaderVersion = "${loader_version}" +issueTrackerURL = "https://github.com/leafreynolds/Cosmere/issues" +license = "MIT" + +[[mods]] +modId = "feruchemy" +version = "${version}" +displayName = "Cosmere: Feruchemy" +displayURL = "https://www.curseforge.com/minecraft/mc-mods/cosmere" +authors = "Leafy" +credits = ''' + +Luke13234 - Who wrote much of the Ars Arcanum guide book entries. + +Special thanks go to: +Ridanisaurus - For many item and block textures. +''' +logoFile = "logo.png" +description = '''Feruchemy module for Cosmere.''' + +[[dependencies.feruchemy]] +modId = "cosmere" +mandatory = true +versionRange = "[${version}]" +ordering = "AFTER" +side = "BOTH" + +[[dependencies.feruchemy]] +modId = "allomancy" +mandatory = false +versionRange = "[${version}]" +ordering = "AFTER" +side = "BOTH" + +[[dependencies.feruchemy]] +modId = "hemalurgy" +mandatory = false +versionRange = "[${version}]" +ordering = "BEFORE" +side = "BOTH" \ No newline at end of file diff --git a/src/feruchemy/resources/assets/feruchemy/lang/es_es.json b/src/feruchemy/resources/assets/feruchemy/lang/es_es.json new file mode 100644 index 000000000..053dc7c0d --- /dev/null +++ b/src/feruchemy/resources/assets/feruchemy/lang/es_es.json @@ -0,0 +1,259 @@ +{ + "advancements.feruchemy.feruchemy.aluminum.description": "Test description: Feruchemical Aluminum", + "advancements.feruchemy.feruchemy.aluminum.title": "Feruchemical Aluminum", + "advancements.feruchemy.feruchemy.atium.description": "Test description: Feruchemical Atium", + "advancements.feruchemy.feruchemy.atium.title": "Feruchemical Atium", + "advancements.feruchemy.feruchemy.bendalloy.description": "Test description: Feruchemical Bendalloy", + "advancements.feruchemy.feruchemy.bendalloy.title": "Feruchemical Bendalloy", + "advancements.feruchemy.feruchemy.brass.description": "Test description: Feruchemical Brass", + "advancements.feruchemy.feruchemy.brass.title": "Feruchemical Brass", + "advancements.feruchemy.feruchemy.bronze.description": "Test description: Feruchemical Bronze", + "advancements.feruchemy.feruchemy.bronze.title": "Feruchemical Bronze", + "advancements.feruchemy.feruchemy.cadmium.description": "Test description: Feruchemical Cadmium", + "advancements.feruchemy.feruchemy.cadmium.title": "Feruchemical Cadmium", + "advancements.feruchemy.feruchemy.chromium.description": "Test description: Feruchemical Chromium", + "advancements.feruchemy.feruchemy.chromium.title": "Feruchemical Chromium", + "advancements.feruchemy.feruchemy.copper.description": "Test description: Feruchemical Copper", + "advancements.feruchemy.feruchemy.copper.title": "Feruchemical Copper", + "advancements.feruchemy.feruchemy.description": "Test description: Feruchemy", + "advancements.feruchemy.feruchemy.duralumin.description": "Test description: Feruchemical Duralumin", + "advancements.feruchemy.feruchemy.duralumin.title": "Feruchemical Duralumin", + "advancements.feruchemy.feruchemy.electrum.description": "Test description: Feruchemical Electrum", + "advancements.feruchemy.feruchemy.electrum.title": "Feruchemical Electrum", + "advancements.feruchemy.feruchemy.gold.description": "Test description: Feruchemical Gold", + "advancements.feruchemy.feruchemy.gold.title": "Feruchemical Gold", + "advancements.feruchemy.feruchemy.iron.description": "Test description: Feruchemical Iron", + "advancements.feruchemy.feruchemy.iron.title": "Feruchemical Iron", + "advancements.feruchemy.feruchemy.nicrosil.description": "Test description: Feruchemical Nicrosil", + "advancements.feruchemy.feruchemy.nicrosil.title": "Feruchemical Nicrosil", + "advancements.feruchemy.feruchemy.pewter.description": "Test description: Feruchemical Pewter", + "advancements.feruchemy.feruchemy.pewter.title": "Feruchemical Pewter", + "advancements.feruchemy.feruchemy.steel.description": "Test description: Feruchemical Steel", + "advancements.feruchemy.feruchemy.steel.title": "Feruchemical Steel", + "advancements.feruchemy.feruchemy.tin.description": "Test description: Feruchemical Tin", + "advancements.feruchemy.feruchemy.tin.title": "Feruchemical Tin", + "advancements.feruchemy.feruchemy.title": "Feruchemy", + "advancements.feruchemy.feruchemy.zinc.description": "Test description: Feruchemical Zinc", + "advancements.feruchemy.feruchemy.zinc.title": "Feruchemical Zinc", + "effect.feruchemy.storing_aluminum": "Storing Aluminum", + "effect.feruchemy.storing_atium": "Storing Atium", + "effect.feruchemy.storing_bendalloy": "Storing Bendalloy", + "effect.feruchemy.storing_brass": "Storing Brass", + "effect.feruchemy.storing_bronze": "Storing Bronze", + "effect.feruchemy.storing_cadmium": "Storing Cadmium", + "effect.feruchemy.storing_chromium": "Storing Chromium", + "effect.feruchemy.storing_copper": "Storing Copper", + "effect.feruchemy.storing_duralumin": "Storing Duralumin", + "effect.feruchemy.storing_electrum": "Storing Electrum", + "effect.feruchemy.storing_gold": "Storing Gold", + "effect.feruchemy.storing_iron": "Storing Iron", + "effect.feruchemy.storing_nicrosil": "Storing Nicrosil", + "effect.feruchemy.storing_pewter": "Storing Pewter", + "effect.feruchemy.storing_steel": "Storing Steel", + "effect.feruchemy.storing_tin": "Storing Tin", + "effect.feruchemy.storing_zinc": "Storing Zinc", + "effect.feruchemy.tapping_aluminum": "Tapping Aluminum", + "effect.feruchemy.tapping_atium": "Tapping Atium", + "effect.feruchemy.tapping_bendalloy": "Tapping Bendalloy", + "effect.feruchemy.tapping_brass": "Tapping Brass", + "effect.feruchemy.tapping_bronze": "Tapping Bronze", + "effect.feruchemy.tapping_cadmium": "Tapping Cadmium", + "effect.feruchemy.tapping_chromium": "Tapping Chromium", + "effect.feruchemy.tapping_copper": "Tapping Copper", + "effect.feruchemy.tapping_duralumin": "Tapping Duralumin", + "effect.feruchemy.tapping_electrum": "Tapping Electrum", + "effect.feruchemy.tapping_gold": "Tapping Gold", + "effect.feruchemy.tapping_iron": "Tapping Iron", + "effect.feruchemy.tapping_nicrosil": "Tapping Nicrosil", + "effect.feruchemy.tapping_pewter": "Tapping Pewter", + "effect.feruchemy.tapping_steel": "Tapping Steel", + "effect.feruchemy.tapping_tin": "Tapping Tin", + "effect.feruchemy.tapping_zinc": "Tapping Zinc", + "entry.aluminum": "Aluminum - Trueself", + "entry.atium": "Atium - Elderling", + "entry.bendalloy": "Bendalloy - Subsumer", + "entry.brass": "Brass - Firesoul", + "entry.bronze": "Bronze - Sentry", + "entry.cadmium": "Cadmium - Gasper", + "entry.chromium": "Chromium - Spinner", + "entry.copper": "Copper - Archivist", + "entry.duralumin": "Duralumin - Connector", + "entry.electrum": "Electrum - Pinnacle", + "entry.gold": "Gold - Bloodmaker", + "entry.harmonium": "Harmonium - Ferring Harmonium", + "entry.iron": "Iron - Skimmer", + "entry.lead": "Lead - Ferring Lead", + "entry.lerasatium": "Lerasatium - Feruchemist", + "entry.lerasium": "Lerasium - Ferring Lerasium", + "entry.malatium": "Malatium - Ferring Malatium", + "entry.nickel": "Nickel - Ferring Nickel", + "entry.nicrosil": "Nicrosil - Soulbearer", + "entry.pewter": "Pewter - Brute", + "entry.silver": "Silver - Ferring Silver", + "entry.steel": "Steel - Steelrunner", + "entry.tin": "Tin - Windwhisperer", + "entry.zinc": "Zinc - Sparker", + "feruchemy.archivist": "Archivist", + "feruchemy.bloodmaker": "Bloodmaker", + "feruchemy.brute": "Brute", + "feruchemy.connector": "Connector", + "feruchemy.elderling": "Elderling", + "feruchemy.firesoul": "Firesoul", + "feruchemy.gasper": "Gasper", + "feruchemy.pinnacle": "Pinnacle", + "feruchemy.sentry": "Sentry", + "feruchemy.skimmer": "Skimmer", + "feruchemy.soulbearer": "Soulbearer", + "feruchemy.sparker": "Sparker", + "feruchemy.spinner": "Spinner", + "feruchemy.steelrunner": "Steelrunner", + "feruchemy.subsumer": "Subsumer", + "feruchemy.trueself": "Trueself", + "feruchemy.windwhisperer": "Windwhisperer", + "item.feruchemy.aluminum_bracelet_metalmind": "Aluminum Bracelet Metalmind", + "item.feruchemy.aluminum_bracelet_metalmind.tooltip": "Stores Identity. Trueself Ferrings can store their spiritual sense of self within an aluminum metalmind.", + "item.feruchemy.aluminum_necklace_metalmind": "Aluminum Necklace Metalmind", + "item.feruchemy.aluminum_necklace_metalmind.tooltip": "Stores Identity. Trueself Ferrings can store their spiritual sense of self within an aluminum metalmind.", + "item.feruchemy.aluminum_ring_metalmind": "Aluminum Ring Metalmind", + "item.feruchemy.aluminum_ring_metalmind.tooltip": "Stores Identity. Trueself Ferrings can store their spiritual sense of self within an aluminum metalmind.", + "item.feruchemy.atium_bracelet_metalmind": "Atium Bracelet Metalmind", + "item.feruchemy.atium_bracelet_metalmind.tooltip": "Stores Height. Atium ferrings become smaller during active storage, and can tap it later to be come larger.", + "item.feruchemy.atium_necklace_metalmind": "Atium Necklace Metalmind", + "item.feruchemy.atium_necklace_metalmind.tooltip": "Stores Height. Atium ferrings become smaller during active storage, and can tap it later to be come larger.", + "item.feruchemy.atium_ring_metalmind": "Atium Ring Metalmind", + "item.feruchemy.atium_ring_metalmind.tooltip": "Stores Height. Atium ferrings become smaller during active storage, and can tap it later to be come larger.", + "item.feruchemy.bands_of_mourning": "Bands Of Mourning", + "item.feruchemy.bands_of_mourning.tooltip": "Unknown...", + "item.feruchemy.bendalloy_bracelet_metalmind": "Bendalloy Bracelet Metalmind", + "item.feruchemy.bendalloy_bracelet_metalmind.tooltip": "Stores Energy. A Subsumer Ferring using this can consume large quantities of food and store the calories in the metalmind, in exchange for the ability to forgo eating later.", + "item.feruchemy.bendalloy_necklace_metalmind": "Bendalloy Necklace Metalmind", + "item.feruchemy.bendalloy_necklace_metalmind.tooltip": "Stores Energy. A Subsumer Ferring using this can consume large quantities of food and store the calories in the metalmind, in exchange for the ability to forgo eating later.", + "item.feruchemy.bendalloy_ring_metalmind": "Bendalloy Ring Metalmind", + "item.feruchemy.bendalloy_ring_metalmind.tooltip": "Stores Energy. A Subsumer Ferring using this can consume large quantities of food and store the calories in the metalmind, in exchange for the ability to forgo eating later.", + "item.feruchemy.brass_bracelet_metalmind": "Brass Bracelet Metalmind", + "item.feruchemy.brass_bracelet_metalmind.tooltip": "Stores Warmth. Firesoul Ferrings using this will cool themselves in exchange for being able to warm themselves later by tapping the metalmind.", + "item.feruchemy.brass_necklace_metalmind": "Brass Necklace Metalmind", + "item.feruchemy.brass_necklace_metalmind.tooltip": "Stores Warmth. Firesoul Ferrings using this will cool themselves in exchange for being able to warm themselves later by tapping the metalmind.", + "item.feruchemy.brass_ring_metalmind": "Brass Ring Metalmind", + "item.feruchemy.brass_ring_metalmind.tooltip": "Stores Warmth. Firesoul Ferrings using this will cool themselves in exchange for being able to warm themselves later by tapping the metalmind.", + "item.feruchemy.bronze_bracelet_metalmind": "Bronze Bracelet Metalmind", + "item.feruchemy.bronze_bracelet_metalmind.tooltip": "Stores Wakefulness. A Sentry Ferring using this will sleep or be drowsier now in exchange for staying awake longer later.", + "item.feruchemy.bronze_necklace_metalmind": "Bronze Necklace Metalmind", + "item.feruchemy.bronze_necklace_metalmind.tooltip": "Stores Wakefulness. A Sentry Ferring using this will sleep or be drowsier now in exchange for staying awake longer later.", + "item.feruchemy.bronze_ring_metalmind": "Bronze Ring Metalmind", + "item.feruchemy.bronze_ring_metalmind.tooltip": "Stores Wakefulness. A Sentry Ferring using this will sleep or be drowsier now in exchange for staying awake longer later.", + "item.feruchemy.cadmium_bracelet_metalmind": "Cadmium Bracelet Metalmind", + "item.feruchemy.cadmium_bracelet_metalmind.tooltip": "Stores Breath. A Gasper Ferring may hyperventilate while storing breath in exchange for eliminating or reducing the need to breathe later on.", + "item.feruchemy.cadmium_necklace_metalmind": "Cadmium Necklace Metalmind", + "item.feruchemy.cadmium_necklace_metalmind.tooltip": "Stores Breath. A Gasper Ferring may hyperventilate while storing breath in exchange for eliminating or reducing the need to breathe later on.", + "item.feruchemy.cadmium_ring_metalmind": "Cadmium Ring Metalmind", + "item.feruchemy.cadmium_ring_metalmind.tooltip": "Stores Breath. A Gasper Ferring may hyperventilate while storing breath in exchange for eliminating or reducing the need to breathe later on.", + "item.feruchemy.chromium_bracelet_metalmind": "Chromium Bracelet Metalmind", + "item.feruchemy.chromium_bracelet_metalmind.tooltip": "Stores Fortune. A Spinner Ferring will become unlucky during active storage in exchange for increased fortune later.", + "item.feruchemy.chromium_necklace_metalmind": "Chromium Necklace Metalmind", + "item.feruchemy.chromium_necklace_metalmind.tooltip": "Stores Fortune. A Spinner Ferring will become unlucky during active storage in exchange for increased fortune later.", + "item.feruchemy.chromium_ring_metalmind": "Chromium Ring Metalmind", + "item.feruchemy.chromium_ring_metalmind.tooltip": "Stores Fortune. A Spinner Ferring will become unlucky during active storage in exchange for increased fortune later.", + "item.feruchemy.copper_bracelet_metalmind": "Copper Bracelet Metalmind", + "item.feruchemy.copper_bracelet_metalmind.tooltip": "Stores Experience. An Archivist Ferring using this will be able to store experience inside copper, then withdraw it later from the metal.", + "item.feruchemy.copper_necklace_metalmind": "Copper Necklace Metalmind", + "item.feruchemy.copper_necklace_metalmind.tooltip": "Stores Experience. An Archivist Ferring using this will be able to store experience inside copper, then withdraw it later from the metal.", + "item.feruchemy.copper_ring_metalmind": "Copper Ring Metalmind", + "item.feruchemy.copper_ring_metalmind.tooltip": "Stores Experience. An Archivist Ferring using this will be able to store experience inside copper, then withdraw it later from the metal.", + "item.feruchemy.duralumin_bracelet_metalmind": "Duralumin Bracelet Metalmind", + "item.feruchemy.duralumin_bracelet_metalmind.tooltip": "Stores Connection. A Connector Ferring can store spiritual connection inside a metalmind, reducing outside awareness during active storage. Tapping not yet implemented.", + "item.feruchemy.duralumin_necklace_metalmind": "Duralumin Necklace Metalmind", + "item.feruchemy.duralumin_necklace_metalmind.tooltip": "Stores Connection. A Connector Ferring can store spiritual connection inside a metalmind, reducing outside awareness during active storage. Tapping not yet implemented.", + "item.feruchemy.duralumin_ring_metalmind": "Duralumin Ring Metalmind", + "item.feruchemy.duralumin_ring_metalmind.tooltip": "Stores Connection. A Connector Ferring can store spiritual connection inside a metalmind, reducing outside awareness during active storage. Tapping not yet implemented.", + "item.feruchemy.electrum_bracelet_metalmind": "Electrum Bracelet Metalmind", + "item.feruchemy.electrum_bracelet_metalmind.tooltip": "Stores Determination. A Pinnacle Ferring using this will take more damage in exchange for taking less damage later.", + "item.feruchemy.electrum_necklace_metalmind": "Electrum Necklace Metalmind", + "item.feruchemy.electrum_necklace_metalmind.tooltip": "Stores Determination. A Pinnacle Ferring using this will take more damage in exchange for taking less damage later.", + "item.feruchemy.electrum_ring_metalmind": "Electrum Ring Metalmind", + "item.feruchemy.electrum_ring_metalmind.tooltip": "Stores Determination. A Pinnacle Ferring using this will take more damage in exchange for taking less damage later.", + "item.feruchemy.gold_bracelet_metalmind": "Gold Bracelet Metalmind", + "item.feruchemy.gold_bracelet_metalmind.tooltip": "Stores Health. A Bloodmaker Ferring using this will feel sick now in exchange for increased regeneration and healing later.", + "item.feruchemy.gold_necklace_metalmind": "Gold Necklace Metalmind", + "item.feruchemy.gold_necklace_metalmind.tooltip": "Stores Health. A Bloodmaker Ferring using this will feel sick now in exchange for increased regeneration and healing later.", + "item.feruchemy.gold_ring_metalmind": "Gold Ring Metalmind", + "item.feruchemy.gold_ring_metalmind.tooltip": "Stores Health. A Bloodmaker Ferring using this will feel sick now in exchange for increased regeneration and healing later.", + "item.feruchemy.iron_bracelet_metalmind": "Iron Bracelet Metalmind", + "item.feruchemy.iron_bracelet_metalmind.tooltip": "Stores Weight. Less weight slows descent. A Skimmer Ferring using this will decrease the pull of gravity on them in exchange for increasing it later.", + "item.feruchemy.iron_necklace_metalmind": "Iron Necklace Metalmind", + "item.feruchemy.iron_necklace_metalmind.tooltip": "Stores Weight. Less weight slows descent. A Skimmer Ferring using this will decrease the pull of gravity on them in exchange for increasing it later.", + "item.feruchemy.iron_ring_metalmind": "Iron Ring Metalmind", + "item.feruchemy.iron_ring_metalmind.tooltip": "Stores Weight. Less weight slows descent. A Skimmer Ferring using this will decrease the pull of gravity on them in exchange for increasing it later.", + "item.feruchemy.nicrosil_bracelet_metalmind": "Nicrosil Bracelet Metalmind", + "item.feruchemy.nicrosil_bracelet_metalmind.tooltip": "Stores Investiture. Little is known about Soulbearer Ferrings. (Not yet implemented)", + "item.feruchemy.nicrosil_necklace_metalmind": "Nicrosil Necklace Metalmind", + "item.feruchemy.nicrosil_necklace_metalmind.tooltip": "Stores Investiture. Little is known about Soulbearer Ferrings. (Not yet implemented)", + "item.feruchemy.nicrosil_ring_metalmind": "Nicrosil Ring Metalmind", + "item.feruchemy.nicrosil_ring_metalmind.tooltip": "Stores Investiture. Little is known about Soulbearer Ferrings. (Not yet implemented)", + "item.feruchemy.pewter_bracelet_metalmind": "Pewter Bracelet Metalmind", + "item.feruchemy.pewter_bracelet_metalmind.tooltip": "Stores Strength. A Brute Ferring using this will lessen the size of his muscles to increase them later.", + "item.feruchemy.pewter_necklace_metalmind": "Pewter Necklace Metalmind", + "item.feruchemy.pewter_necklace_metalmind.tooltip": "Stores Strength. A Brute Ferring using this will lessen the size of his muscles to increase them later.", + "item.feruchemy.pewter_ring_metalmind": "Pewter Ring Metalmind", + "item.feruchemy.pewter_ring_metalmind.tooltip": "Stores Strength. A Brute Ferring using this will lessen the size of his muscles to increase them later.", + "item.feruchemy.steel_bracelet_metalmind": "Steel Bracelet Metalmind", + "item.feruchemy.steel_bracelet_metalmind.tooltip": "Stores Physical Speed. A Steelrunner Ferring using this will be physically slower now in exchange for being faster later.", + "item.feruchemy.steel_necklace_metalmind": "Steel Necklace Metalmind", + "item.feruchemy.steel_necklace_metalmind.tooltip": "Stores Physical Speed. A Steelrunner Ferring using this will be physically slower now in exchange for being faster later.", + "item.feruchemy.steel_ring_metalmind": "Steel Ring Metalmind", + "item.feruchemy.steel_ring_metalmind.tooltip": "Stores Physical Speed. A Steelrunner Ferring using this will be physically slower now in exchange for being faster later.", + "item.feruchemy.tin_bracelet_metalmind": "Tin Bracelet Metalmind", + "item.feruchemy.tin_bracelet_metalmind.tooltip": "Stores Eyesight senses. Tapping will zoom in.", + "item.feruchemy.tin_necklace_metalmind": "Tin Necklace Metalmind", + "item.feruchemy.tin_necklace_metalmind.tooltip": "Stores Eyesight senses. Tapping will zoom in.", + "item.feruchemy.tin_ring_metalmind": "Tin Ring Metalmind", + "item.feruchemy.tin_ring_metalmind.tooltip": "Stores Eyesight senses. Tapping will zoom in.", + "item.feruchemy.zinc_bracelet_metalmind": "Zinc Bracelet Metalmind", + "item.feruchemy.zinc_bracelet_metalmind.tooltip": "Stores Mental Speed. A Sparker Ferring storing zinc will gain experience very slowly in exchange for gaining experience faster later.", + "item.feruchemy.zinc_necklace_metalmind": "Zinc Necklace Metalmind", + "item.feruchemy.zinc_necklace_metalmind.tooltip": "Stores Mental Speed. A Sparker Ferring storing zinc will gain experience very slowly in exchange for gaining experience faster later.", + "item.feruchemy.zinc_ring_metalmind": "Zinc Ring Metalmind", + "item.feruchemy.zinc_ring_metalmind.tooltip": "Stores Mental Speed. A Sparker Ferring storing zinc will gain experience very slowly in exchange for gaining experience faster later.", + "itemGroup.feruchemy.metalminds": "Feruchemical Metalminds", + "manifestation.feruchemy.aluminum": "Feruchemical Aluminum", + "manifestation.feruchemy.aluminum.description": "Users can tap aluminum", + "manifestation.feruchemy.atium": "Feruchemical Atium", + "manifestation.feruchemy.atium.description": "Users can tap atium", + "manifestation.feruchemy.bendalloy": "Feruchemical Bendalloy", + "manifestation.feruchemy.bendalloy.description": "Users can tap bendalloy", + "manifestation.feruchemy.brass": "Feruchemical Brass", + "manifestation.feruchemy.brass.description": "Users can tap brass", + "manifestation.feruchemy.bronze": "Feruchemical Bronze", + "manifestation.feruchemy.bronze.description": "Users can tap bronze", + "manifestation.feruchemy.cadmium": "Feruchemical Cadmium", + "manifestation.feruchemy.cadmium.description": "Users can tap cadmium", + "manifestation.feruchemy.chromium": "Feruchemical Chromium", + "manifestation.feruchemy.chromium.description": "Users can tap chromium", + "manifestation.feruchemy.copper": "Feruchemical Copper", + "manifestation.feruchemy.copper.description": "Users can tap copper", + "manifestation.feruchemy.duralumin": "Feruchemical Duralumin", + "manifestation.feruchemy.duralumin.description": "Users can tap duralumin", + "manifestation.feruchemy.electrum": "Feruchemical Electrum", + "manifestation.feruchemy.electrum.description": "Users can tap electrum", + "manifestation.feruchemy.gold": "Feruchemical Gold", + "manifestation.feruchemy.gold.description": "Users can tap gold", + "manifestation.feruchemy.iron": "Feruchemical Iron", + "manifestation.feruchemy.iron.description": "Users can tap iron", + "manifestation.feruchemy.nicrosil": "Feruchemical Nicrosil", + "manifestation.feruchemy.nicrosil.description": "Users can tap nicrosil", + "manifestation.feruchemy.pewter": "Feruchemical Pewter", + "manifestation.feruchemy.pewter.description": "Users can tap pewter", + "manifestation.feruchemy.steel": "Feruchemical Steel", + "manifestation.feruchemy.steel.description": "Users can tap steel", + "manifestation.feruchemy.tin": "Feruchemical Tin", + "manifestation.feruchemy.tin.description": "Users can tap tin", + "manifestation.feruchemy.zinc": "Feruchemical Zinc", + "manifestation.feruchemy.zinc.description": "Users can tap zinc", + "tooltip.cosmere.attribute.chromium": "%s%s Luck", + "tooltip.cosmere.attribute.copper": "%s%s%% XP", + "tooltip.cosmere.attribute.duralumin": "", + "tooltip.cosmere.attribute.iron": "%s%s Attack Damage", + "tooltip.cosmere.attribute.nicrosil": "", + "tooltip.cosmere.attribute.tin": "%s%s%% Better Night Vision", + "tooltip.cosmere.attribute.zinc": "%s%s%% Emotional Fortitude" +} \ No newline at end of file diff --git a/src/feruchemy/resources/assets/feruchemy/lang/sv_se.json b/src/feruchemy/resources/assets/feruchemy/lang/sv_se.json new file mode 100644 index 000000000..053dc7c0d --- /dev/null +++ b/src/feruchemy/resources/assets/feruchemy/lang/sv_se.json @@ -0,0 +1,259 @@ +{ + "advancements.feruchemy.feruchemy.aluminum.description": "Test description: Feruchemical Aluminum", + "advancements.feruchemy.feruchemy.aluminum.title": "Feruchemical Aluminum", + "advancements.feruchemy.feruchemy.atium.description": "Test description: Feruchemical Atium", + "advancements.feruchemy.feruchemy.atium.title": "Feruchemical Atium", + "advancements.feruchemy.feruchemy.bendalloy.description": "Test description: Feruchemical Bendalloy", + "advancements.feruchemy.feruchemy.bendalloy.title": "Feruchemical Bendalloy", + "advancements.feruchemy.feruchemy.brass.description": "Test description: Feruchemical Brass", + "advancements.feruchemy.feruchemy.brass.title": "Feruchemical Brass", + "advancements.feruchemy.feruchemy.bronze.description": "Test description: Feruchemical Bronze", + "advancements.feruchemy.feruchemy.bronze.title": "Feruchemical Bronze", + "advancements.feruchemy.feruchemy.cadmium.description": "Test description: Feruchemical Cadmium", + "advancements.feruchemy.feruchemy.cadmium.title": "Feruchemical Cadmium", + "advancements.feruchemy.feruchemy.chromium.description": "Test description: Feruchemical Chromium", + "advancements.feruchemy.feruchemy.chromium.title": "Feruchemical Chromium", + "advancements.feruchemy.feruchemy.copper.description": "Test description: Feruchemical Copper", + "advancements.feruchemy.feruchemy.copper.title": "Feruchemical Copper", + "advancements.feruchemy.feruchemy.description": "Test description: Feruchemy", + "advancements.feruchemy.feruchemy.duralumin.description": "Test description: Feruchemical Duralumin", + "advancements.feruchemy.feruchemy.duralumin.title": "Feruchemical Duralumin", + "advancements.feruchemy.feruchemy.electrum.description": "Test description: Feruchemical Electrum", + "advancements.feruchemy.feruchemy.electrum.title": "Feruchemical Electrum", + "advancements.feruchemy.feruchemy.gold.description": "Test description: Feruchemical Gold", + "advancements.feruchemy.feruchemy.gold.title": "Feruchemical Gold", + "advancements.feruchemy.feruchemy.iron.description": "Test description: Feruchemical Iron", + "advancements.feruchemy.feruchemy.iron.title": "Feruchemical Iron", + "advancements.feruchemy.feruchemy.nicrosil.description": "Test description: Feruchemical Nicrosil", + "advancements.feruchemy.feruchemy.nicrosil.title": "Feruchemical Nicrosil", + "advancements.feruchemy.feruchemy.pewter.description": "Test description: Feruchemical Pewter", + "advancements.feruchemy.feruchemy.pewter.title": "Feruchemical Pewter", + "advancements.feruchemy.feruchemy.steel.description": "Test description: Feruchemical Steel", + "advancements.feruchemy.feruchemy.steel.title": "Feruchemical Steel", + "advancements.feruchemy.feruchemy.tin.description": "Test description: Feruchemical Tin", + "advancements.feruchemy.feruchemy.tin.title": "Feruchemical Tin", + "advancements.feruchemy.feruchemy.title": "Feruchemy", + "advancements.feruchemy.feruchemy.zinc.description": "Test description: Feruchemical Zinc", + "advancements.feruchemy.feruchemy.zinc.title": "Feruchemical Zinc", + "effect.feruchemy.storing_aluminum": "Storing Aluminum", + "effect.feruchemy.storing_atium": "Storing Atium", + "effect.feruchemy.storing_bendalloy": "Storing Bendalloy", + "effect.feruchemy.storing_brass": "Storing Brass", + "effect.feruchemy.storing_bronze": "Storing Bronze", + "effect.feruchemy.storing_cadmium": "Storing Cadmium", + "effect.feruchemy.storing_chromium": "Storing Chromium", + "effect.feruchemy.storing_copper": "Storing Copper", + "effect.feruchemy.storing_duralumin": "Storing Duralumin", + "effect.feruchemy.storing_electrum": "Storing Electrum", + "effect.feruchemy.storing_gold": "Storing Gold", + "effect.feruchemy.storing_iron": "Storing Iron", + "effect.feruchemy.storing_nicrosil": "Storing Nicrosil", + "effect.feruchemy.storing_pewter": "Storing Pewter", + "effect.feruchemy.storing_steel": "Storing Steel", + "effect.feruchemy.storing_tin": "Storing Tin", + "effect.feruchemy.storing_zinc": "Storing Zinc", + "effect.feruchemy.tapping_aluminum": "Tapping Aluminum", + "effect.feruchemy.tapping_atium": "Tapping Atium", + "effect.feruchemy.tapping_bendalloy": "Tapping Bendalloy", + "effect.feruchemy.tapping_brass": "Tapping Brass", + "effect.feruchemy.tapping_bronze": "Tapping Bronze", + "effect.feruchemy.tapping_cadmium": "Tapping Cadmium", + "effect.feruchemy.tapping_chromium": "Tapping Chromium", + "effect.feruchemy.tapping_copper": "Tapping Copper", + "effect.feruchemy.tapping_duralumin": "Tapping Duralumin", + "effect.feruchemy.tapping_electrum": "Tapping Electrum", + "effect.feruchemy.tapping_gold": "Tapping Gold", + "effect.feruchemy.tapping_iron": "Tapping Iron", + "effect.feruchemy.tapping_nicrosil": "Tapping Nicrosil", + "effect.feruchemy.tapping_pewter": "Tapping Pewter", + "effect.feruchemy.tapping_steel": "Tapping Steel", + "effect.feruchemy.tapping_tin": "Tapping Tin", + "effect.feruchemy.tapping_zinc": "Tapping Zinc", + "entry.aluminum": "Aluminum - Trueself", + "entry.atium": "Atium - Elderling", + "entry.bendalloy": "Bendalloy - Subsumer", + "entry.brass": "Brass - Firesoul", + "entry.bronze": "Bronze - Sentry", + "entry.cadmium": "Cadmium - Gasper", + "entry.chromium": "Chromium - Spinner", + "entry.copper": "Copper - Archivist", + "entry.duralumin": "Duralumin - Connector", + "entry.electrum": "Electrum - Pinnacle", + "entry.gold": "Gold - Bloodmaker", + "entry.harmonium": "Harmonium - Ferring Harmonium", + "entry.iron": "Iron - Skimmer", + "entry.lead": "Lead - Ferring Lead", + "entry.lerasatium": "Lerasatium - Feruchemist", + "entry.lerasium": "Lerasium - Ferring Lerasium", + "entry.malatium": "Malatium - Ferring Malatium", + "entry.nickel": "Nickel - Ferring Nickel", + "entry.nicrosil": "Nicrosil - Soulbearer", + "entry.pewter": "Pewter - Brute", + "entry.silver": "Silver - Ferring Silver", + "entry.steel": "Steel - Steelrunner", + "entry.tin": "Tin - Windwhisperer", + "entry.zinc": "Zinc - Sparker", + "feruchemy.archivist": "Archivist", + "feruchemy.bloodmaker": "Bloodmaker", + "feruchemy.brute": "Brute", + "feruchemy.connector": "Connector", + "feruchemy.elderling": "Elderling", + "feruchemy.firesoul": "Firesoul", + "feruchemy.gasper": "Gasper", + "feruchemy.pinnacle": "Pinnacle", + "feruchemy.sentry": "Sentry", + "feruchemy.skimmer": "Skimmer", + "feruchemy.soulbearer": "Soulbearer", + "feruchemy.sparker": "Sparker", + "feruchemy.spinner": "Spinner", + "feruchemy.steelrunner": "Steelrunner", + "feruchemy.subsumer": "Subsumer", + "feruchemy.trueself": "Trueself", + "feruchemy.windwhisperer": "Windwhisperer", + "item.feruchemy.aluminum_bracelet_metalmind": "Aluminum Bracelet Metalmind", + "item.feruchemy.aluminum_bracelet_metalmind.tooltip": "Stores Identity. Trueself Ferrings can store their spiritual sense of self within an aluminum metalmind.", + "item.feruchemy.aluminum_necklace_metalmind": "Aluminum Necklace Metalmind", + "item.feruchemy.aluminum_necklace_metalmind.tooltip": "Stores Identity. Trueself Ferrings can store their spiritual sense of self within an aluminum metalmind.", + "item.feruchemy.aluminum_ring_metalmind": "Aluminum Ring Metalmind", + "item.feruchemy.aluminum_ring_metalmind.tooltip": "Stores Identity. Trueself Ferrings can store their spiritual sense of self within an aluminum metalmind.", + "item.feruchemy.atium_bracelet_metalmind": "Atium Bracelet Metalmind", + "item.feruchemy.atium_bracelet_metalmind.tooltip": "Stores Height. Atium ferrings become smaller during active storage, and can tap it later to be come larger.", + "item.feruchemy.atium_necklace_metalmind": "Atium Necklace Metalmind", + "item.feruchemy.atium_necklace_metalmind.tooltip": "Stores Height. Atium ferrings become smaller during active storage, and can tap it later to be come larger.", + "item.feruchemy.atium_ring_metalmind": "Atium Ring Metalmind", + "item.feruchemy.atium_ring_metalmind.tooltip": "Stores Height. Atium ferrings become smaller during active storage, and can tap it later to be come larger.", + "item.feruchemy.bands_of_mourning": "Bands Of Mourning", + "item.feruchemy.bands_of_mourning.tooltip": "Unknown...", + "item.feruchemy.bendalloy_bracelet_metalmind": "Bendalloy Bracelet Metalmind", + "item.feruchemy.bendalloy_bracelet_metalmind.tooltip": "Stores Energy. A Subsumer Ferring using this can consume large quantities of food and store the calories in the metalmind, in exchange for the ability to forgo eating later.", + "item.feruchemy.bendalloy_necklace_metalmind": "Bendalloy Necklace Metalmind", + "item.feruchemy.bendalloy_necklace_metalmind.tooltip": "Stores Energy. A Subsumer Ferring using this can consume large quantities of food and store the calories in the metalmind, in exchange for the ability to forgo eating later.", + "item.feruchemy.bendalloy_ring_metalmind": "Bendalloy Ring Metalmind", + "item.feruchemy.bendalloy_ring_metalmind.tooltip": "Stores Energy. A Subsumer Ferring using this can consume large quantities of food and store the calories in the metalmind, in exchange for the ability to forgo eating later.", + "item.feruchemy.brass_bracelet_metalmind": "Brass Bracelet Metalmind", + "item.feruchemy.brass_bracelet_metalmind.tooltip": "Stores Warmth. Firesoul Ferrings using this will cool themselves in exchange for being able to warm themselves later by tapping the metalmind.", + "item.feruchemy.brass_necklace_metalmind": "Brass Necklace Metalmind", + "item.feruchemy.brass_necklace_metalmind.tooltip": "Stores Warmth. Firesoul Ferrings using this will cool themselves in exchange for being able to warm themselves later by tapping the metalmind.", + "item.feruchemy.brass_ring_metalmind": "Brass Ring Metalmind", + "item.feruchemy.brass_ring_metalmind.tooltip": "Stores Warmth. Firesoul Ferrings using this will cool themselves in exchange for being able to warm themselves later by tapping the metalmind.", + "item.feruchemy.bronze_bracelet_metalmind": "Bronze Bracelet Metalmind", + "item.feruchemy.bronze_bracelet_metalmind.tooltip": "Stores Wakefulness. A Sentry Ferring using this will sleep or be drowsier now in exchange for staying awake longer later.", + "item.feruchemy.bronze_necklace_metalmind": "Bronze Necklace Metalmind", + "item.feruchemy.bronze_necklace_metalmind.tooltip": "Stores Wakefulness. A Sentry Ferring using this will sleep or be drowsier now in exchange for staying awake longer later.", + "item.feruchemy.bronze_ring_metalmind": "Bronze Ring Metalmind", + "item.feruchemy.bronze_ring_metalmind.tooltip": "Stores Wakefulness. A Sentry Ferring using this will sleep or be drowsier now in exchange for staying awake longer later.", + "item.feruchemy.cadmium_bracelet_metalmind": "Cadmium Bracelet Metalmind", + "item.feruchemy.cadmium_bracelet_metalmind.tooltip": "Stores Breath. A Gasper Ferring may hyperventilate while storing breath in exchange for eliminating or reducing the need to breathe later on.", + "item.feruchemy.cadmium_necklace_metalmind": "Cadmium Necklace Metalmind", + "item.feruchemy.cadmium_necklace_metalmind.tooltip": "Stores Breath. A Gasper Ferring may hyperventilate while storing breath in exchange for eliminating or reducing the need to breathe later on.", + "item.feruchemy.cadmium_ring_metalmind": "Cadmium Ring Metalmind", + "item.feruchemy.cadmium_ring_metalmind.tooltip": "Stores Breath. A Gasper Ferring may hyperventilate while storing breath in exchange for eliminating or reducing the need to breathe later on.", + "item.feruchemy.chromium_bracelet_metalmind": "Chromium Bracelet Metalmind", + "item.feruchemy.chromium_bracelet_metalmind.tooltip": "Stores Fortune. A Spinner Ferring will become unlucky during active storage in exchange for increased fortune later.", + "item.feruchemy.chromium_necklace_metalmind": "Chromium Necklace Metalmind", + "item.feruchemy.chromium_necklace_metalmind.tooltip": "Stores Fortune. A Spinner Ferring will become unlucky during active storage in exchange for increased fortune later.", + "item.feruchemy.chromium_ring_metalmind": "Chromium Ring Metalmind", + "item.feruchemy.chromium_ring_metalmind.tooltip": "Stores Fortune. A Spinner Ferring will become unlucky during active storage in exchange for increased fortune later.", + "item.feruchemy.copper_bracelet_metalmind": "Copper Bracelet Metalmind", + "item.feruchemy.copper_bracelet_metalmind.tooltip": "Stores Experience. An Archivist Ferring using this will be able to store experience inside copper, then withdraw it later from the metal.", + "item.feruchemy.copper_necklace_metalmind": "Copper Necklace Metalmind", + "item.feruchemy.copper_necklace_metalmind.tooltip": "Stores Experience. An Archivist Ferring using this will be able to store experience inside copper, then withdraw it later from the metal.", + "item.feruchemy.copper_ring_metalmind": "Copper Ring Metalmind", + "item.feruchemy.copper_ring_metalmind.tooltip": "Stores Experience. An Archivist Ferring using this will be able to store experience inside copper, then withdraw it later from the metal.", + "item.feruchemy.duralumin_bracelet_metalmind": "Duralumin Bracelet Metalmind", + "item.feruchemy.duralumin_bracelet_metalmind.tooltip": "Stores Connection. A Connector Ferring can store spiritual connection inside a metalmind, reducing outside awareness during active storage. Tapping not yet implemented.", + "item.feruchemy.duralumin_necklace_metalmind": "Duralumin Necklace Metalmind", + "item.feruchemy.duralumin_necklace_metalmind.tooltip": "Stores Connection. A Connector Ferring can store spiritual connection inside a metalmind, reducing outside awareness during active storage. Tapping not yet implemented.", + "item.feruchemy.duralumin_ring_metalmind": "Duralumin Ring Metalmind", + "item.feruchemy.duralumin_ring_metalmind.tooltip": "Stores Connection. A Connector Ferring can store spiritual connection inside a metalmind, reducing outside awareness during active storage. Tapping not yet implemented.", + "item.feruchemy.electrum_bracelet_metalmind": "Electrum Bracelet Metalmind", + "item.feruchemy.electrum_bracelet_metalmind.tooltip": "Stores Determination. A Pinnacle Ferring using this will take more damage in exchange for taking less damage later.", + "item.feruchemy.electrum_necklace_metalmind": "Electrum Necklace Metalmind", + "item.feruchemy.electrum_necklace_metalmind.tooltip": "Stores Determination. A Pinnacle Ferring using this will take more damage in exchange for taking less damage later.", + "item.feruchemy.electrum_ring_metalmind": "Electrum Ring Metalmind", + "item.feruchemy.electrum_ring_metalmind.tooltip": "Stores Determination. A Pinnacle Ferring using this will take more damage in exchange for taking less damage later.", + "item.feruchemy.gold_bracelet_metalmind": "Gold Bracelet Metalmind", + "item.feruchemy.gold_bracelet_metalmind.tooltip": "Stores Health. A Bloodmaker Ferring using this will feel sick now in exchange for increased regeneration and healing later.", + "item.feruchemy.gold_necklace_metalmind": "Gold Necklace Metalmind", + "item.feruchemy.gold_necklace_metalmind.tooltip": "Stores Health. A Bloodmaker Ferring using this will feel sick now in exchange for increased regeneration and healing later.", + "item.feruchemy.gold_ring_metalmind": "Gold Ring Metalmind", + "item.feruchemy.gold_ring_metalmind.tooltip": "Stores Health. A Bloodmaker Ferring using this will feel sick now in exchange for increased regeneration and healing later.", + "item.feruchemy.iron_bracelet_metalmind": "Iron Bracelet Metalmind", + "item.feruchemy.iron_bracelet_metalmind.tooltip": "Stores Weight. Less weight slows descent. A Skimmer Ferring using this will decrease the pull of gravity on them in exchange for increasing it later.", + "item.feruchemy.iron_necklace_metalmind": "Iron Necklace Metalmind", + "item.feruchemy.iron_necklace_metalmind.tooltip": "Stores Weight. Less weight slows descent. A Skimmer Ferring using this will decrease the pull of gravity on them in exchange for increasing it later.", + "item.feruchemy.iron_ring_metalmind": "Iron Ring Metalmind", + "item.feruchemy.iron_ring_metalmind.tooltip": "Stores Weight. Less weight slows descent. A Skimmer Ferring using this will decrease the pull of gravity on them in exchange for increasing it later.", + "item.feruchemy.nicrosil_bracelet_metalmind": "Nicrosil Bracelet Metalmind", + "item.feruchemy.nicrosil_bracelet_metalmind.tooltip": "Stores Investiture. Little is known about Soulbearer Ferrings. (Not yet implemented)", + "item.feruchemy.nicrosil_necklace_metalmind": "Nicrosil Necklace Metalmind", + "item.feruchemy.nicrosil_necklace_metalmind.tooltip": "Stores Investiture. Little is known about Soulbearer Ferrings. (Not yet implemented)", + "item.feruchemy.nicrosil_ring_metalmind": "Nicrosil Ring Metalmind", + "item.feruchemy.nicrosil_ring_metalmind.tooltip": "Stores Investiture. Little is known about Soulbearer Ferrings. (Not yet implemented)", + "item.feruchemy.pewter_bracelet_metalmind": "Pewter Bracelet Metalmind", + "item.feruchemy.pewter_bracelet_metalmind.tooltip": "Stores Strength. A Brute Ferring using this will lessen the size of his muscles to increase them later.", + "item.feruchemy.pewter_necklace_metalmind": "Pewter Necklace Metalmind", + "item.feruchemy.pewter_necklace_metalmind.tooltip": "Stores Strength. A Brute Ferring using this will lessen the size of his muscles to increase them later.", + "item.feruchemy.pewter_ring_metalmind": "Pewter Ring Metalmind", + "item.feruchemy.pewter_ring_metalmind.tooltip": "Stores Strength. A Brute Ferring using this will lessen the size of his muscles to increase them later.", + "item.feruchemy.steel_bracelet_metalmind": "Steel Bracelet Metalmind", + "item.feruchemy.steel_bracelet_metalmind.tooltip": "Stores Physical Speed. A Steelrunner Ferring using this will be physically slower now in exchange for being faster later.", + "item.feruchemy.steel_necklace_metalmind": "Steel Necklace Metalmind", + "item.feruchemy.steel_necklace_metalmind.tooltip": "Stores Physical Speed. A Steelrunner Ferring using this will be physically slower now in exchange for being faster later.", + "item.feruchemy.steel_ring_metalmind": "Steel Ring Metalmind", + "item.feruchemy.steel_ring_metalmind.tooltip": "Stores Physical Speed. A Steelrunner Ferring using this will be physically slower now in exchange for being faster later.", + "item.feruchemy.tin_bracelet_metalmind": "Tin Bracelet Metalmind", + "item.feruchemy.tin_bracelet_metalmind.tooltip": "Stores Eyesight senses. Tapping will zoom in.", + "item.feruchemy.tin_necklace_metalmind": "Tin Necklace Metalmind", + "item.feruchemy.tin_necklace_metalmind.tooltip": "Stores Eyesight senses. Tapping will zoom in.", + "item.feruchemy.tin_ring_metalmind": "Tin Ring Metalmind", + "item.feruchemy.tin_ring_metalmind.tooltip": "Stores Eyesight senses. Tapping will zoom in.", + "item.feruchemy.zinc_bracelet_metalmind": "Zinc Bracelet Metalmind", + "item.feruchemy.zinc_bracelet_metalmind.tooltip": "Stores Mental Speed. A Sparker Ferring storing zinc will gain experience very slowly in exchange for gaining experience faster later.", + "item.feruchemy.zinc_necklace_metalmind": "Zinc Necklace Metalmind", + "item.feruchemy.zinc_necklace_metalmind.tooltip": "Stores Mental Speed. A Sparker Ferring storing zinc will gain experience very slowly in exchange for gaining experience faster later.", + "item.feruchemy.zinc_ring_metalmind": "Zinc Ring Metalmind", + "item.feruchemy.zinc_ring_metalmind.tooltip": "Stores Mental Speed. A Sparker Ferring storing zinc will gain experience very slowly in exchange for gaining experience faster later.", + "itemGroup.feruchemy.metalminds": "Feruchemical Metalminds", + "manifestation.feruchemy.aluminum": "Feruchemical Aluminum", + "manifestation.feruchemy.aluminum.description": "Users can tap aluminum", + "manifestation.feruchemy.atium": "Feruchemical Atium", + "manifestation.feruchemy.atium.description": "Users can tap atium", + "manifestation.feruchemy.bendalloy": "Feruchemical Bendalloy", + "manifestation.feruchemy.bendalloy.description": "Users can tap bendalloy", + "manifestation.feruchemy.brass": "Feruchemical Brass", + "manifestation.feruchemy.brass.description": "Users can tap brass", + "manifestation.feruchemy.bronze": "Feruchemical Bronze", + "manifestation.feruchemy.bronze.description": "Users can tap bronze", + "manifestation.feruchemy.cadmium": "Feruchemical Cadmium", + "manifestation.feruchemy.cadmium.description": "Users can tap cadmium", + "manifestation.feruchemy.chromium": "Feruchemical Chromium", + "manifestation.feruchemy.chromium.description": "Users can tap chromium", + "manifestation.feruchemy.copper": "Feruchemical Copper", + "manifestation.feruchemy.copper.description": "Users can tap copper", + "manifestation.feruchemy.duralumin": "Feruchemical Duralumin", + "manifestation.feruchemy.duralumin.description": "Users can tap duralumin", + "manifestation.feruchemy.electrum": "Feruchemical Electrum", + "manifestation.feruchemy.electrum.description": "Users can tap electrum", + "manifestation.feruchemy.gold": "Feruchemical Gold", + "manifestation.feruchemy.gold.description": "Users can tap gold", + "manifestation.feruchemy.iron": "Feruchemical Iron", + "manifestation.feruchemy.iron.description": "Users can tap iron", + "manifestation.feruchemy.nicrosil": "Feruchemical Nicrosil", + "manifestation.feruchemy.nicrosil.description": "Users can tap nicrosil", + "manifestation.feruchemy.pewter": "Feruchemical Pewter", + "manifestation.feruchemy.pewter.description": "Users can tap pewter", + "manifestation.feruchemy.steel": "Feruchemical Steel", + "manifestation.feruchemy.steel.description": "Users can tap steel", + "manifestation.feruchemy.tin": "Feruchemical Tin", + "manifestation.feruchemy.tin.description": "Users can tap tin", + "manifestation.feruchemy.zinc": "Feruchemical Zinc", + "manifestation.feruchemy.zinc.description": "Users can tap zinc", + "tooltip.cosmere.attribute.chromium": "%s%s Luck", + "tooltip.cosmere.attribute.copper": "%s%s%% XP", + "tooltip.cosmere.attribute.duralumin": "", + "tooltip.cosmere.attribute.iron": "%s%s Attack Damage", + "tooltip.cosmere.attribute.nicrosil": "", + "tooltip.cosmere.attribute.tin": "%s%s%% Better Night Vision", + "tooltip.cosmere.attribute.zinc": "%s%s%% Emotional Fortitude" +} \ No newline at end of file diff --git a/src/feruchemy/resources/assets/feruchemy/textures/gui/hud_background.png b/src/feruchemy/resources/assets/feruchemy/textures/gui/hud_background.png new file mode 100644 index 000000000..cde8d23e5 Binary files /dev/null and b/src/feruchemy/resources/assets/feruchemy/textures/gui/hud_background.png differ diff --git a/src/feruchemy/resources/assets/feruchemy/textures/icon/feruchemy.png b/src/feruchemy/resources/assets/feruchemy/textures/icon/feruchemy.png new file mode 100644 index 000000000..9b17accfd Binary files /dev/null and b/src/feruchemy/resources/assets/feruchemy/textures/icon/feruchemy.png differ diff --git a/src/feruchemy/resources/assets/feruchemy/textures/icon/feruchemy/aluminum.png b/src/feruchemy/resources/assets/feruchemy/textures/icon/feruchemy/aluminum.png new file mode 100644 index 000000000..a878dc03c Binary files /dev/null and b/src/feruchemy/resources/assets/feruchemy/textures/icon/feruchemy/aluminum.png differ diff --git a/src/feruchemy/resources/assets/feruchemy/textures/icon/feruchemy/atium.png b/src/feruchemy/resources/assets/feruchemy/textures/icon/feruchemy/atium.png new file mode 100644 index 000000000..ac99ca8fe Binary files /dev/null and b/src/feruchemy/resources/assets/feruchemy/textures/icon/feruchemy/atium.png differ diff --git a/src/feruchemy/resources/assets/feruchemy/textures/icon/feruchemy/bendalloy.png b/src/feruchemy/resources/assets/feruchemy/textures/icon/feruchemy/bendalloy.png new file mode 100644 index 000000000..fbb7d9432 Binary files /dev/null and b/src/feruchemy/resources/assets/feruchemy/textures/icon/feruchemy/bendalloy.png differ diff --git a/src/feruchemy/resources/assets/feruchemy/textures/icon/feruchemy/brass.png b/src/feruchemy/resources/assets/feruchemy/textures/icon/feruchemy/brass.png new file mode 100644 index 000000000..bad5edf32 Binary files /dev/null and b/src/feruchemy/resources/assets/feruchemy/textures/icon/feruchemy/brass.png differ diff --git a/src/feruchemy/resources/assets/feruchemy/textures/icon/feruchemy/bronze.png b/src/feruchemy/resources/assets/feruchemy/textures/icon/feruchemy/bronze.png new file mode 100644 index 000000000..c9d4a9df9 Binary files /dev/null and b/src/feruchemy/resources/assets/feruchemy/textures/icon/feruchemy/bronze.png differ diff --git a/src/feruchemy/resources/assets/feruchemy/textures/icon/feruchemy/cadmium.png b/src/feruchemy/resources/assets/feruchemy/textures/icon/feruchemy/cadmium.png new file mode 100644 index 000000000..8bd93c3b3 Binary files /dev/null and b/src/feruchemy/resources/assets/feruchemy/textures/icon/feruchemy/cadmium.png differ diff --git a/src/feruchemy/resources/assets/feruchemy/textures/icon/feruchemy/chromium.png b/src/feruchemy/resources/assets/feruchemy/textures/icon/feruchemy/chromium.png new file mode 100644 index 000000000..06d6a43a4 Binary files /dev/null and b/src/feruchemy/resources/assets/feruchemy/textures/icon/feruchemy/chromium.png differ diff --git a/src/feruchemy/resources/assets/feruchemy/textures/icon/feruchemy/copper.png b/src/feruchemy/resources/assets/feruchemy/textures/icon/feruchemy/copper.png new file mode 100644 index 000000000..6944d4459 Binary files /dev/null and b/src/feruchemy/resources/assets/feruchemy/textures/icon/feruchemy/copper.png differ diff --git a/src/feruchemy/resources/assets/feruchemy/textures/icon/feruchemy/duralumin.png b/src/feruchemy/resources/assets/feruchemy/textures/icon/feruchemy/duralumin.png new file mode 100644 index 000000000..3b1ac0136 Binary files /dev/null and b/src/feruchemy/resources/assets/feruchemy/textures/icon/feruchemy/duralumin.png differ diff --git a/src/feruchemy/resources/assets/feruchemy/textures/icon/feruchemy/electrum.png b/src/feruchemy/resources/assets/feruchemy/textures/icon/feruchemy/electrum.png new file mode 100644 index 000000000..ca18fba01 Binary files /dev/null and b/src/feruchemy/resources/assets/feruchemy/textures/icon/feruchemy/electrum.png differ diff --git a/src/feruchemy/resources/assets/feruchemy/textures/icon/feruchemy/gold.png b/src/feruchemy/resources/assets/feruchemy/textures/icon/feruchemy/gold.png new file mode 100644 index 000000000..decd7cd0f Binary files /dev/null and b/src/feruchemy/resources/assets/feruchemy/textures/icon/feruchemy/gold.png differ diff --git a/src/feruchemy/resources/assets/feruchemy/textures/icon/feruchemy/iron.png b/src/feruchemy/resources/assets/feruchemy/textures/icon/feruchemy/iron.png new file mode 100644 index 000000000..853dfd58a Binary files /dev/null and b/src/feruchemy/resources/assets/feruchemy/textures/icon/feruchemy/iron.png differ diff --git a/src/feruchemy/resources/assets/feruchemy/textures/icon/feruchemy/lerasium.png b/src/feruchemy/resources/assets/feruchemy/textures/icon/feruchemy/lerasium.png new file mode 100644 index 000000000..62aceb24b Binary files /dev/null and b/src/feruchemy/resources/assets/feruchemy/textures/icon/feruchemy/lerasium.png differ diff --git a/src/feruchemy/resources/assets/feruchemy/textures/icon/feruchemy/nicrosil.png b/src/feruchemy/resources/assets/feruchemy/textures/icon/feruchemy/nicrosil.png new file mode 100644 index 000000000..1489edc3d Binary files /dev/null and b/src/feruchemy/resources/assets/feruchemy/textures/icon/feruchemy/nicrosil.png differ diff --git a/src/feruchemy/resources/assets/feruchemy/textures/icon/feruchemy/pewter.png b/src/feruchemy/resources/assets/feruchemy/textures/icon/feruchemy/pewter.png new file mode 100644 index 000000000..e534aebba Binary files /dev/null and b/src/feruchemy/resources/assets/feruchemy/textures/icon/feruchemy/pewter.png differ diff --git a/src/feruchemy/resources/assets/feruchemy/textures/icon/feruchemy/steel.png b/src/feruchemy/resources/assets/feruchemy/textures/icon/feruchemy/steel.png new file mode 100644 index 000000000..82e8bcf13 Binary files /dev/null and b/src/feruchemy/resources/assets/feruchemy/textures/icon/feruchemy/steel.png differ diff --git a/src/feruchemy/resources/assets/feruchemy/textures/icon/feruchemy/tin.png b/src/feruchemy/resources/assets/feruchemy/textures/icon/feruchemy/tin.png new file mode 100644 index 000000000..6cdb1d799 Binary files /dev/null and b/src/feruchemy/resources/assets/feruchemy/textures/icon/feruchemy/tin.png differ diff --git a/src/feruchemy/resources/assets/feruchemy/textures/icon/feruchemy/zinc.png b/src/feruchemy/resources/assets/feruchemy/textures/icon/feruchemy/zinc.png new file mode 100644 index 000000000..1afb0e7dd Binary files /dev/null and b/src/feruchemy/resources/assets/feruchemy/textures/icon/feruchemy/zinc.png differ diff --git a/src/feruchemy/resources/assets/feruchemy/textures/item/aluminum_bracelet.png b/src/feruchemy/resources/assets/feruchemy/textures/item/aluminum_bracelet.png new file mode 100644 index 000000000..1ce7ee2a1 Binary files /dev/null and b/src/feruchemy/resources/assets/feruchemy/textures/item/aluminum_bracelet.png differ diff --git a/src/feruchemy/resources/assets/feruchemy/textures/item/aluminum_necklace.png b/src/feruchemy/resources/assets/feruchemy/textures/item/aluminum_necklace.png new file mode 100644 index 000000000..91ceae327 Binary files /dev/null and b/src/feruchemy/resources/assets/feruchemy/textures/item/aluminum_necklace.png differ diff --git a/src/feruchemy/resources/assets/feruchemy/textures/item/aluminum_ring.png b/src/feruchemy/resources/assets/feruchemy/textures/item/aluminum_ring.png new file mode 100644 index 000000000..fef4093e8 Binary files /dev/null and b/src/feruchemy/resources/assets/feruchemy/textures/item/aluminum_ring.png differ diff --git a/src/feruchemy/resources/assets/feruchemy/textures/item/atium_bracelet.png b/src/feruchemy/resources/assets/feruchemy/textures/item/atium_bracelet.png new file mode 100644 index 000000000..648a73a9a Binary files /dev/null and b/src/feruchemy/resources/assets/feruchemy/textures/item/atium_bracelet.png differ diff --git a/src/feruchemy/resources/assets/feruchemy/textures/item/atium_necklace.png b/src/feruchemy/resources/assets/feruchemy/textures/item/atium_necklace.png new file mode 100644 index 000000000..b816c22cd Binary files /dev/null and b/src/feruchemy/resources/assets/feruchemy/textures/item/atium_necklace.png differ diff --git a/src/feruchemy/resources/assets/feruchemy/textures/item/atium_ring.png b/src/feruchemy/resources/assets/feruchemy/textures/item/atium_ring.png new file mode 100644 index 000000000..92a9605f0 Binary files /dev/null and b/src/feruchemy/resources/assets/feruchemy/textures/item/atium_ring.png differ diff --git a/src/feruchemy/resources/assets/feruchemy/textures/item/bands_of_mourning.png b/src/feruchemy/resources/assets/feruchemy/textures/item/bands_of_mourning.png new file mode 100644 index 000000000..1c1f3c6a7 Binary files /dev/null and b/src/feruchemy/resources/assets/feruchemy/textures/item/bands_of_mourning.png differ diff --git a/src/feruchemy/resources/assets/feruchemy/textures/item/bendalloy_bracelet.png b/src/feruchemy/resources/assets/feruchemy/textures/item/bendalloy_bracelet.png new file mode 100644 index 000000000..fa53d0045 Binary files /dev/null and b/src/feruchemy/resources/assets/feruchemy/textures/item/bendalloy_bracelet.png differ diff --git a/src/feruchemy/resources/assets/feruchemy/textures/item/bendalloy_necklace.png b/src/feruchemy/resources/assets/feruchemy/textures/item/bendalloy_necklace.png new file mode 100644 index 000000000..10b30b2ac Binary files /dev/null and b/src/feruchemy/resources/assets/feruchemy/textures/item/bendalloy_necklace.png differ diff --git a/src/feruchemy/resources/assets/feruchemy/textures/item/bendalloy_ring.png b/src/feruchemy/resources/assets/feruchemy/textures/item/bendalloy_ring.png new file mode 100644 index 000000000..ae2f4e62b Binary files /dev/null and b/src/feruchemy/resources/assets/feruchemy/textures/item/bendalloy_ring.png differ diff --git a/src/feruchemy/resources/assets/feruchemy/textures/item/brass_bracelet.png b/src/feruchemy/resources/assets/feruchemy/textures/item/brass_bracelet.png new file mode 100644 index 000000000..8bce057da Binary files /dev/null and b/src/feruchemy/resources/assets/feruchemy/textures/item/brass_bracelet.png differ diff --git a/src/feruchemy/resources/assets/feruchemy/textures/item/brass_necklace.png b/src/feruchemy/resources/assets/feruchemy/textures/item/brass_necklace.png new file mode 100644 index 000000000..fe55d8b06 Binary files /dev/null and b/src/feruchemy/resources/assets/feruchemy/textures/item/brass_necklace.png differ diff --git a/src/feruchemy/resources/assets/feruchemy/textures/item/brass_ring.png b/src/feruchemy/resources/assets/feruchemy/textures/item/brass_ring.png new file mode 100644 index 000000000..d27dfc752 Binary files /dev/null and b/src/feruchemy/resources/assets/feruchemy/textures/item/brass_ring.png differ diff --git a/src/feruchemy/resources/assets/feruchemy/textures/item/bronze_bracelet.png b/src/feruchemy/resources/assets/feruchemy/textures/item/bronze_bracelet.png new file mode 100644 index 000000000..dcb932631 Binary files /dev/null and b/src/feruchemy/resources/assets/feruchemy/textures/item/bronze_bracelet.png differ diff --git a/src/feruchemy/resources/assets/feruchemy/textures/item/bronze_necklace.png b/src/feruchemy/resources/assets/feruchemy/textures/item/bronze_necklace.png new file mode 100644 index 000000000..d633df277 Binary files /dev/null and b/src/feruchemy/resources/assets/feruchemy/textures/item/bronze_necklace.png differ diff --git a/src/feruchemy/resources/assets/feruchemy/textures/item/bronze_ring.png b/src/feruchemy/resources/assets/feruchemy/textures/item/bronze_ring.png new file mode 100644 index 000000000..3134edd32 Binary files /dev/null and b/src/feruchemy/resources/assets/feruchemy/textures/item/bronze_ring.png differ diff --git a/src/feruchemy/resources/assets/feruchemy/textures/item/cadmium_bracelet.png b/src/feruchemy/resources/assets/feruchemy/textures/item/cadmium_bracelet.png new file mode 100644 index 000000000..0df7b59b2 Binary files /dev/null and b/src/feruchemy/resources/assets/feruchemy/textures/item/cadmium_bracelet.png differ diff --git a/src/feruchemy/resources/assets/feruchemy/textures/item/cadmium_necklace.png b/src/feruchemy/resources/assets/feruchemy/textures/item/cadmium_necklace.png new file mode 100644 index 000000000..6bf32db36 Binary files /dev/null and b/src/feruchemy/resources/assets/feruchemy/textures/item/cadmium_necklace.png differ diff --git a/src/feruchemy/resources/assets/feruchemy/textures/item/cadmium_ring.png b/src/feruchemy/resources/assets/feruchemy/textures/item/cadmium_ring.png new file mode 100644 index 000000000..86048cd38 Binary files /dev/null and b/src/feruchemy/resources/assets/feruchemy/textures/item/cadmium_ring.png differ diff --git a/src/feruchemy/resources/assets/feruchemy/textures/item/chromium_bracelet.png b/src/feruchemy/resources/assets/feruchemy/textures/item/chromium_bracelet.png new file mode 100644 index 000000000..78c7ee516 Binary files /dev/null and b/src/feruchemy/resources/assets/feruchemy/textures/item/chromium_bracelet.png differ diff --git a/src/feruchemy/resources/assets/feruchemy/textures/item/chromium_necklace.png b/src/feruchemy/resources/assets/feruchemy/textures/item/chromium_necklace.png new file mode 100644 index 000000000..d4dbe9668 Binary files /dev/null and b/src/feruchemy/resources/assets/feruchemy/textures/item/chromium_necklace.png differ diff --git a/src/feruchemy/resources/assets/feruchemy/textures/item/chromium_ring.png b/src/feruchemy/resources/assets/feruchemy/textures/item/chromium_ring.png new file mode 100644 index 000000000..5dfab6108 Binary files /dev/null and b/src/feruchemy/resources/assets/feruchemy/textures/item/chromium_ring.png differ diff --git a/src/feruchemy/resources/assets/feruchemy/textures/item/copper_bracelet.png b/src/feruchemy/resources/assets/feruchemy/textures/item/copper_bracelet.png new file mode 100644 index 000000000..0bb35c1d2 Binary files /dev/null and b/src/feruchemy/resources/assets/feruchemy/textures/item/copper_bracelet.png differ diff --git a/src/feruchemy/resources/assets/feruchemy/textures/item/copper_necklace.png b/src/feruchemy/resources/assets/feruchemy/textures/item/copper_necklace.png new file mode 100644 index 000000000..2de494bce Binary files /dev/null and b/src/feruchemy/resources/assets/feruchemy/textures/item/copper_necklace.png differ diff --git a/src/feruchemy/resources/assets/feruchemy/textures/item/copper_ring.png b/src/feruchemy/resources/assets/feruchemy/textures/item/copper_ring.png new file mode 100644 index 000000000..dff204b9f Binary files /dev/null and b/src/feruchemy/resources/assets/feruchemy/textures/item/copper_ring.png differ diff --git a/src/feruchemy/resources/assets/feruchemy/textures/item/duralumin_bracelet.png b/src/feruchemy/resources/assets/feruchemy/textures/item/duralumin_bracelet.png new file mode 100644 index 000000000..d2720181d Binary files /dev/null and b/src/feruchemy/resources/assets/feruchemy/textures/item/duralumin_bracelet.png differ diff --git a/src/feruchemy/resources/assets/feruchemy/textures/item/duralumin_necklace.png b/src/feruchemy/resources/assets/feruchemy/textures/item/duralumin_necklace.png new file mode 100644 index 000000000..837acba6f Binary files /dev/null and b/src/feruchemy/resources/assets/feruchemy/textures/item/duralumin_necklace.png differ diff --git a/src/feruchemy/resources/assets/feruchemy/textures/item/duralumin_ring.png b/src/feruchemy/resources/assets/feruchemy/textures/item/duralumin_ring.png new file mode 100644 index 000000000..64be55069 Binary files /dev/null and b/src/feruchemy/resources/assets/feruchemy/textures/item/duralumin_ring.png differ diff --git a/src/feruchemy/resources/assets/feruchemy/textures/item/electrum_bracelet.png b/src/feruchemy/resources/assets/feruchemy/textures/item/electrum_bracelet.png new file mode 100644 index 000000000..4d76c0226 Binary files /dev/null and b/src/feruchemy/resources/assets/feruchemy/textures/item/electrum_bracelet.png differ diff --git a/src/feruchemy/resources/assets/feruchemy/textures/item/electrum_necklace.png b/src/feruchemy/resources/assets/feruchemy/textures/item/electrum_necklace.png new file mode 100644 index 000000000..f64f09d21 Binary files /dev/null and b/src/feruchemy/resources/assets/feruchemy/textures/item/electrum_necklace.png differ diff --git a/src/feruchemy/resources/assets/feruchemy/textures/item/electrum_ring.png b/src/feruchemy/resources/assets/feruchemy/textures/item/electrum_ring.png new file mode 100644 index 000000000..01bb1deab Binary files /dev/null and b/src/feruchemy/resources/assets/feruchemy/textures/item/electrum_ring.png differ diff --git a/src/feruchemy/resources/assets/feruchemy/textures/item/gold_bracelet.png b/src/feruchemy/resources/assets/feruchemy/textures/item/gold_bracelet.png new file mode 100644 index 000000000..b778d657f Binary files /dev/null and b/src/feruchemy/resources/assets/feruchemy/textures/item/gold_bracelet.png differ diff --git a/src/feruchemy/resources/assets/feruchemy/textures/item/gold_necklace.png b/src/feruchemy/resources/assets/feruchemy/textures/item/gold_necklace.png new file mode 100644 index 000000000..caf960134 Binary files /dev/null and b/src/feruchemy/resources/assets/feruchemy/textures/item/gold_necklace.png differ diff --git a/src/feruchemy/resources/assets/feruchemy/textures/item/gold_ring.png b/src/feruchemy/resources/assets/feruchemy/textures/item/gold_ring.png new file mode 100644 index 000000000..50f6cb2e3 Binary files /dev/null and b/src/feruchemy/resources/assets/feruchemy/textures/item/gold_ring.png differ diff --git a/src/feruchemy/resources/assets/feruchemy/textures/item/iron_bracelet.png b/src/feruchemy/resources/assets/feruchemy/textures/item/iron_bracelet.png new file mode 100644 index 000000000..1ae82f290 Binary files /dev/null and b/src/feruchemy/resources/assets/feruchemy/textures/item/iron_bracelet.png differ diff --git a/src/feruchemy/resources/assets/feruchemy/textures/item/iron_necklace.png b/src/feruchemy/resources/assets/feruchemy/textures/item/iron_necklace.png new file mode 100644 index 000000000..111a46c5b Binary files /dev/null and b/src/feruchemy/resources/assets/feruchemy/textures/item/iron_necklace.png differ diff --git a/src/feruchemy/resources/assets/feruchemy/textures/item/iron_ring.png b/src/feruchemy/resources/assets/feruchemy/textures/item/iron_ring.png new file mode 100644 index 000000000..9b4d9a5fa Binary files /dev/null and b/src/feruchemy/resources/assets/feruchemy/textures/item/iron_ring.png differ diff --git a/src/feruchemy/resources/assets/feruchemy/textures/item/lerasatium_bracelet.png b/src/feruchemy/resources/assets/feruchemy/textures/item/lerasatium_bracelet.png new file mode 100644 index 000000000..26373c2ce Binary files /dev/null and b/src/feruchemy/resources/assets/feruchemy/textures/item/lerasatium_bracelet.png differ diff --git a/src/feruchemy/resources/assets/feruchemy/textures/item/lerasatium_necklace.png b/src/feruchemy/resources/assets/feruchemy/textures/item/lerasatium_necklace.png new file mode 100644 index 000000000..e6f3344eb Binary files /dev/null and b/src/feruchemy/resources/assets/feruchemy/textures/item/lerasatium_necklace.png differ diff --git a/src/feruchemy/resources/assets/feruchemy/textures/item/lerasatium_ring.png b/src/feruchemy/resources/assets/feruchemy/textures/item/lerasatium_ring.png new file mode 100644 index 000000000..623022e00 Binary files /dev/null and b/src/feruchemy/resources/assets/feruchemy/textures/item/lerasatium_ring.png differ diff --git a/src/feruchemy/resources/assets/feruchemy/textures/item/lerasium_bracelet.png b/src/feruchemy/resources/assets/feruchemy/textures/item/lerasium_bracelet.png new file mode 100644 index 000000000..cdc5b38ea Binary files /dev/null and b/src/feruchemy/resources/assets/feruchemy/textures/item/lerasium_bracelet.png differ diff --git a/src/feruchemy/resources/assets/feruchemy/textures/item/lerasium_necklace.png b/src/feruchemy/resources/assets/feruchemy/textures/item/lerasium_necklace.png new file mode 100644 index 000000000..8e37a879c Binary files /dev/null and b/src/feruchemy/resources/assets/feruchemy/textures/item/lerasium_necklace.png differ diff --git a/src/feruchemy/resources/assets/feruchemy/textures/item/lerasium_ring.png b/src/feruchemy/resources/assets/feruchemy/textures/item/lerasium_ring.png new file mode 100644 index 000000000..1a87be469 Binary files /dev/null and b/src/feruchemy/resources/assets/feruchemy/textures/item/lerasium_ring.png differ diff --git a/src/feruchemy/resources/assets/feruchemy/textures/item/metal_bracelet.png b/src/feruchemy/resources/assets/feruchemy/textures/item/metal_bracelet.png new file mode 100644 index 000000000..5b4e6896f Binary files /dev/null and b/src/feruchemy/resources/assets/feruchemy/textures/item/metal_bracelet.png differ diff --git a/src/feruchemy/resources/assets/feruchemy/textures/item/metal_necklace.png b/src/feruchemy/resources/assets/feruchemy/textures/item/metal_necklace.png new file mode 100644 index 000000000..207b3c854 Binary files /dev/null and b/src/feruchemy/resources/assets/feruchemy/textures/item/metal_necklace.png differ diff --git a/src/feruchemy/resources/assets/feruchemy/textures/item/metal_ring.png b/src/feruchemy/resources/assets/feruchemy/textures/item/metal_ring.png new file mode 100644 index 000000000..67b9b6f82 Binary files /dev/null and b/src/feruchemy/resources/assets/feruchemy/textures/item/metal_ring.png differ diff --git a/src/feruchemy/resources/assets/feruchemy/textures/item/nicrosil_bracelet.png b/src/feruchemy/resources/assets/feruchemy/textures/item/nicrosil_bracelet.png new file mode 100644 index 000000000..c5fd9f896 Binary files /dev/null and b/src/feruchemy/resources/assets/feruchemy/textures/item/nicrosil_bracelet.png differ diff --git a/src/feruchemy/resources/assets/feruchemy/textures/item/nicrosil_necklace.png b/src/feruchemy/resources/assets/feruchemy/textures/item/nicrosil_necklace.png new file mode 100644 index 000000000..55302846c Binary files /dev/null and b/src/feruchemy/resources/assets/feruchemy/textures/item/nicrosil_necklace.png differ diff --git a/src/feruchemy/resources/assets/feruchemy/textures/item/nicrosil_ring.png b/src/feruchemy/resources/assets/feruchemy/textures/item/nicrosil_ring.png new file mode 100644 index 000000000..0abfc9f4c Binary files /dev/null and b/src/feruchemy/resources/assets/feruchemy/textures/item/nicrosil_ring.png differ diff --git a/src/feruchemy/resources/assets/feruchemy/textures/item/pewter_bracelet.png b/src/feruchemy/resources/assets/feruchemy/textures/item/pewter_bracelet.png new file mode 100644 index 000000000..b26989d53 Binary files /dev/null and b/src/feruchemy/resources/assets/feruchemy/textures/item/pewter_bracelet.png differ diff --git a/src/feruchemy/resources/assets/feruchemy/textures/item/pewter_necklace.png b/src/feruchemy/resources/assets/feruchemy/textures/item/pewter_necklace.png new file mode 100644 index 000000000..d0944071b Binary files /dev/null and b/src/feruchemy/resources/assets/feruchemy/textures/item/pewter_necklace.png differ diff --git a/src/feruchemy/resources/assets/feruchemy/textures/item/pewter_ring.png b/src/feruchemy/resources/assets/feruchemy/textures/item/pewter_ring.png new file mode 100644 index 000000000..006c0ebee Binary files /dev/null and b/src/feruchemy/resources/assets/feruchemy/textures/item/pewter_ring.png differ diff --git a/src/feruchemy/resources/assets/feruchemy/textures/item/steel_bracelet.png b/src/feruchemy/resources/assets/feruchemy/textures/item/steel_bracelet.png new file mode 100644 index 000000000..be62ec0fc Binary files /dev/null and b/src/feruchemy/resources/assets/feruchemy/textures/item/steel_bracelet.png differ diff --git a/src/feruchemy/resources/assets/feruchemy/textures/item/steel_necklace.png b/src/feruchemy/resources/assets/feruchemy/textures/item/steel_necklace.png new file mode 100644 index 000000000..579f73608 Binary files /dev/null and b/src/feruchemy/resources/assets/feruchemy/textures/item/steel_necklace.png differ diff --git a/src/feruchemy/resources/assets/feruchemy/textures/item/steel_ring.png b/src/feruchemy/resources/assets/feruchemy/textures/item/steel_ring.png new file mode 100644 index 000000000..f211cd5d6 Binary files /dev/null and b/src/feruchemy/resources/assets/feruchemy/textures/item/steel_ring.png differ diff --git a/src/feruchemy/resources/assets/feruchemy/textures/item/tin_bracelet.png b/src/feruchemy/resources/assets/feruchemy/textures/item/tin_bracelet.png new file mode 100644 index 000000000..9a14c2751 Binary files /dev/null and b/src/feruchemy/resources/assets/feruchemy/textures/item/tin_bracelet.png differ diff --git a/src/feruchemy/resources/assets/feruchemy/textures/item/tin_necklace.png b/src/feruchemy/resources/assets/feruchemy/textures/item/tin_necklace.png new file mode 100644 index 000000000..81c6d044a Binary files /dev/null and b/src/feruchemy/resources/assets/feruchemy/textures/item/tin_necklace.png differ diff --git a/src/feruchemy/resources/assets/feruchemy/textures/item/tin_ring.png b/src/feruchemy/resources/assets/feruchemy/textures/item/tin_ring.png new file mode 100644 index 000000000..70b4f2cde Binary files /dev/null and b/src/feruchemy/resources/assets/feruchemy/textures/item/tin_ring.png differ diff --git a/src/feruchemy/resources/assets/feruchemy/textures/item/zinc_bracelet.png b/src/feruchemy/resources/assets/feruchemy/textures/item/zinc_bracelet.png new file mode 100644 index 000000000..5114634da Binary files /dev/null and b/src/feruchemy/resources/assets/feruchemy/textures/item/zinc_bracelet.png differ diff --git a/src/feruchemy/resources/assets/feruchemy/textures/item/zinc_necklace.png b/src/feruchemy/resources/assets/feruchemy/textures/item/zinc_necklace.png new file mode 100644 index 000000000..f46f7094b Binary files /dev/null and b/src/feruchemy/resources/assets/feruchemy/textures/item/zinc_necklace.png differ diff --git a/src/feruchemy/resources/assets/feruchemy/textures/item/zinc_ring.png b/src/feruchemy/resources/assets/feruchemy/textures/item/zinc_ring.png new file mode 100644 index 000000000..8365fd3e5 Binary files /dev/null and b/src/feruchemy/resources/assets/feruchemy/textures/item/zinc_ring.png differ diff --git a/src/main/resources/assets/cosmere/textures/mob_effect/storing_aluminum.png b/src/feruchemy/resources/assets/feruchemy/textures/mob_effect/storing_aluminum.png similarity index 100% rename from src/main/resources/assets/cosmere/textures/mob_effect/storing_aluminum.png rename to src/feruchemy/resources/assets/feruchemy/textures/mob_effect/storing_aluminum.png diff --git a/src/main/resources/assets/cosmere/textures/mob_effect/storing_atium.png b/src/feruchemy/resources/assets/feruchemy/textures/mob_effect/storing_atium.png similarity index 100% rename from src/main/resources/assets/cosmere/textures/mob_effect/storing_atium.png rename to src/feruchemy/resources/assets/feruchemy/textures/mob_effect/storing_atium.png diff --git a/src/main/resources/assets/cosmere/textures/mob_effect/storing_bendalloy.png b/src/feruchemy/resources/assets/feruchemy/textures/mob_effect/storing_bendalloy.png similarity index 100% rename from src/main/resources/assets/cosmere/textures/mob_effect/storing_bendalloy.png rename to src/feruchemy/resources/assets/feruchemy/textures/mob_effect/storing_bendalloy.png diff --git a/src/main/resources/assets/cosmere/textures/mob_effect/storing_brass.png b/src/feruchemy/resources/assets/feruchemy/textures/mob_effect/storing_brass.png similarity index 100% rename from src/main/resources/assets/cosmere/textures/mob_effect/storing_brass.png rename to src/feruchemy/resources/assets/feruchemy/textures/mob_effect/storing_brass.png diff --git a/src/main/resources/assets/cosmere/textures/mob_effect/storing_bronze.png b/src/feruchemy/resources/assets/feruchemy/textures/mob_effect/storing_bronze.png similarity index 100% rename from src/main/resources/assets/cosmere/textures/mob_effect/storing_bronze.png rename to src/feruchemy/resources/assets/feruchemy/textures/mob_effect/storing_bronze.png diff --git a/src/main/resources/assets/cosmere/textures/mob_effect/storing_cadmium.png b/src/feruchemy/resources/assets/feruchemy/textures/mob_effect/storing_cadmium.png similarity index 100% rename from src/main/resources/assets/cosmere/textures/mob_effect/storing_cadmium.png rename to src/feruchemy/resources/assets/feruchemy/textures/mob_effect/storing_cadmium.png diff --git a/src/main/resources/assets/cosmere/textures/mob_effect/storing_chromium.png b/src/feruchemy/resources/assets/feruchemy/textures/mob_effect/storing_chromium.png similarity index 100% rename from src/main/resources/assets/cosmere/textures/mob_effect/storing_chromium.png rename to src/feruchemy/resources/assets/feruchemy/textures/mob_effect/storing_chromium.png diff --git a/src/main/resources/assets/cosmere/textures/mob_effect/storing_copper.png b/src/feruchemy/resources/assets/feruchemy/textures/mob_effect/storing_copper.png similarity index 100% rename from src/main/resources/assets/cosmere/textures/mob_effect/storing_copper.png rename to src/feruchemy/resources/assets/feruchemy/textures/mob_effect/storing_copper.png diff --git a/src/main/resources/assets/cosmere/textures/mob_effect/storing_duralumin.png b/src/feruchemy/resources/assets/feruchemy/textures/mob_effect/storing_duralumin.png similarity index 100% rename from src/main/resources/assets/cosmere/textures/mob_effect/storing_duralumin.png rename to src/feruchemy/resources/assets/feruchemy/textures/mob_effect/storing_duralumin.png diff --git a/src/main/resources/assets/cosmere/textures/mob_effect/storing_electrum.png b/src/feruchemy/resources/assets/feruchemy/textures/mob_effect/storing_electrum.png similarity index 100% rename from src/main/resources/assets/cosmere/textures/mob_effect/storing_electrum.png rename to src/feruchemy/resources/assets/feruchemy/textures/mob_effect/storing_electrum.png diff --git a/src/main/resources/assets/cosmere/textures/mob_effect/storing_gold.png b/src/feruchemy/resources/assets/feruchemy/textures/mob_effect/storing_gold.png similarity index 100% rename from src/main/resources/assets/cosmere/textures/mob_effect/storing_gold.png rename to src/feruchemy/resources/assets/feruchemy/textures/mob_effect/storing_gold.png diff --git a/src/main/resources/assets/cosmere/textures/mob_effect/storing_iron.png b/src/feruchemy/resources/assets/feruchemy/textures/mob_effect/storing_iron.png similarity index 100% rename from src/main/resources/assets/cosmere/textures/mob_effect/storing_iron.png rename to src/feruchemy/resources/assets/feruchemy/textures/mob_effect/storing_iron.png diff --git a/src/main/resources/assets/cosmere/textures/mob_effect/storing_nicrosil.png b/src/feruchemy/resources/assets/feruchemy/textures/mob_effect/storing_nicrosil.png similarity index 100% rename from src/main/resources/assets/cosmere/textures/mob_effect/storing_nicrosil.png rename to src/feruchemy/resources/assets/feruchemy/textures/mob_effect/storing_nicrosil.png diff --git a/src/main/resources/assets/cosmere/textures/mob_effect/storing_pewter.png b/src/feruchemy/resources/assets/feruchemy/textures/mob_effect/storing_pewter.png similarity index 100% rename from src/main/resources/assets/cosmere/textures/mob_effect/storing_pewter.png rename to src/feruchemy/resources/assets/feruchemy/textures/mob_effect/storing_pewter.png diff --git a/src/main/resources/assets/cosmere/textures/mob_effect/storing_steel.png b/src/feruchemy/resources/assets/feruchemy/textures/mob_effect/storing_steel.png similarity index 100% rename from src/main/resources/assets/cosmere/textures/mob_effect/storing_steel.png rename to src/feruchemy/resources/assets/feruchemy/textures/mob_effect/storing_steel.png diff --git a/src/main/resources/assets/cosmere/textures/mob_effect/storing_tin.png b/src/feruchemy/resources/assets/feruchemy/textures/mob_effect/storing_tin.png similarity index 100% rename from src/main/resources/assets/cosmere/textures/mob_effect/storing_tin.png rename to src/feruchemy/resources/assets/feruchemy/textures/mob_effect/storing_tin.png diff --git a/src/main/resources/assets/cosmere/textures/mob_effect/storing_zinc.png b/src/feruchemy/resources/assets/feruchemy/textures/mob_effect/storing_zinc.png similarity index 100% rename from src/main/resources/assets/cosmere/textures/mob_effect/storing_zinc.png rename to src/feruchemy/resources/assets/feruchemy/textures/mob_effect/storing_zinc.png diff --git a/src/main/resources/assets/cosmere/textures/mob_effect/tapping_aluminum.png b/src/feruchemy/resources/assets/feruchemy/textures/mob_effect/tapping_aluminum.png similarity index 100% rename from src/main/resources/assets/cosmere/textures/mob_effect/tapping_aluminum.png rename to src/feruchemy/resources/assets/feruchemy/textures/mob_effect/tapping_aluminum.png diff --git a/src/main/resources/assets/cosmere/textures/mob_effect/tapping_atium.png b/src/feruchemy/resources/assets/feruchemy/textures/mob_effect/tapping_atium.png similarity index 100% rename from src/main/resources/assets/cosmere/textures/mob_effect/tapping_atium.png rename to src/feruchemy/resources/assets/feruchemy/textures/mob_effect/tapping_atium.png diff --git a/src/main/resources/assets/cosmere/textures/mob_effect/tapping_bendalloy.png b/src/feruchemy/resources/assets/feruchemy/textures/mob_effect/tapping_bendalloy.png similarity index 100% rename from src/main/resources/assets/cosmere/textures/mob_effect/tapping_bendalloy.png rename to src/feruchemy/resources/assets/feruchemy/textures/mob_effect/tapping_bendalloy.png diff --git a/src/main/resources/assets/cosmere/textures/mob_effect/tapping_brass.png b/src/feruchemy/resources/assets/feruchemy/textures/mob_effect/tapping_brass.png similarity index 100% rename from src/main/resources/assets/cosmere/textures/mob_effect/tapping_brass.png rename to src/feruchemy/resources/assets/feruchemy/textures/mob_effect/tapping_brass.png diff --git a/src/main/resources/assets/cosmere/textures/mob_effect/tapping_bronze.png b/src/feruchemy/resources/assets/feruchemy/textures/mob_effect/tapping_bronze.png similarity index 100% rename from src/main/resources/assets/cosmere/textures/mob_effect/tapping_bronze.png rename to src/feruchemy/resources/assets/feruchemy/textures/mob_effect/tapping_bronze.png diff --git a/src/main/resources/assets/cosmere/textures/mob_effect/tapping_cadmium.png b/src/feruchemy/resources/assets/feruchemy/textures/mob_effect/tapping_cadmium.png similarity index 100% rename from src/main/resources/assets/cosmere/textures/mob_effect/tapping_cadmium.png rename to src/feruchemy/resources/assets/feruchemy/textures/mob_effect/tapping_cadmium.png diff --git a/src/main/resources/assets/cosmere/textures/mob_effect/tapping_chromium.png b/src/feruchemy/resources/assets/feruchemy/textures/mob_effect/tapping_chromium.png similarity index 100% rename from src/main/resources/assets/cosmere/textures/mob_effect/tapping_chromium.png rename to src/feruchemy/resources/assets/feruchemy/textures/mob_effect/tapping_chromium.png diff --git a/src/main/resources/assets/cosmere/textures/mob_effect/tapping_copper.png b/src/feruchemy/resources/assets/feruchemy/textures/mob_effect/tapping_copper.png similarity index 100% rename from src/main/resources/assets/cosmere/textures/mob_effect/tapping_copper.png rename to src/feruchemy/resources/assets/feruchemy/textures/mob_effect/tapping_copper.png diff --git a/src/main/resources/assets/cosmere/textures/mob_effect/tapping_duralumin.png b/src/feruchemy/resources/assets/feruchemy/textures/mob_effect/tapping_duralumin.png similarity index 100% rename from src/main/resources/assets/cosmere/textures/mob_effect/tapping_duralumin.png rename to src/feruchemy/resources/assets/feruchemy/textures/mob_effect/tapping_duralumin.png diff --git a/src/main/resources/assets/cosmere/textures/mob_effect/tapping_electrum.png b/src/feruchemy/resources/assets/feruchemy/textures/mob_effect/tapping_electrum.png similarity index 100% rename from src/main/resources/assets/cosmere/textures/mob_effect/tapping_electrum.png rename to src/feruchemy/resources/assets/feruchemy/textures/mob_effect/tapping_electrum.png diff --git a/src/main/resources/assets/cosmere/textures/mob_effect/tapping_gold.png b/src/feruchemy/resources/assets/feruchemy/textures/mob_effect/tapping_gold.png similarity index 100% rename from src/main/resources/assets/cosmere/textures/mob_effect/tapping_gold.png rename to src/feruchemy/resources/assets/feruchemy/textures/mob_effect/tapping_gold.png diff --git a/src/main/resources/assets/cosmere/textures/mob_effect/tapping_iron.png b/src/feruchemy/resources/assets/feruchemy/textures/mob_effect/tapping_iron.png similarity index 100% rename from src/main/resources/assets/cosmere/textures/mob_effect/tapping_iron.png rename to src/feruchemy/resources/assets/feruchemy/textures/mob_effect/tapping_iron.png diff --git a/src/main/resources/assets/cosmere/textures/mob_effect/tapping_nicrosil.png b/src/feruchemy/resources/assets/feruchemy/textures/mob_effect/tapping_nicrosil.png similarity index 100% rename from src/main/resources/assets/cosmere/textures/mob_effect/tapping_nicrosil.png rename to src/feruchemy/resources/assets/feruchemy/textures/mob_effect/tapping_nicrosil.png diff --git a/src/main/resources/assets/cosmere/textures/mob_effect/tapping_pewter.png b/src/feruchemy/resources/assets/feruchemy/textures/mob_effect/tapping_pewter.png similarity index 100% rename from src/main/resources/assets/cosmere/textures/mob_effect/tapping_pewter.png rename to src/feruchemy/resources/assets/feruchemy/textures/mob_effect/tapping_pewter.png diff --git a/src/main/resources/assets/cosmere/textures/mob_effect/tapping_steel.png b/src/feruchemy/resources/assets/feruchemy/textures/mob_effect/tapping_steel.png similarity index 100% rename from src/main/resources/assets/cosmere/textures/mob_effect/tapping_steel.png rename to src/feruchemy/resources/assets/feruchemy/textures/mob_effect/tapping_steel.png diff --git a/src/main/resources/assets/cosmere/textures/mob_effect/tapping_tin.png b/src/feruchemy/resources/assets/feruchemy/textures/mob_effect/tapping_tin.png similarity index 100% rename from src/main/resources/assets/cosmere/textures/mob_effect/tapping_tin.png rename to src/feruchemy/resources/assets/feruchemy/textures/mob_effect/tapping_tin.png diff --git a/src/main/resources/assets/cosmere/textures/mob_effect/tapping_zinc.png b/src/feruchemy/resources/assets/feruchemy/textures/mob_effect/tapping_zinc.png similarity index 100% rename from src/main/resources/assets/cosmere/textures/mob_effect/tapping_zinc.png rename to src/feruchemy/resources/assets/feruchemy/textures/mob_effect/tapping_zinc.png diff --git a/src/feruchemy/resources/feruchemy.mixins.json b/src/feruchemy/resources/feruchemy.mixins.json new file mode 100644 index 000000000..27b4ed2e2 --- /dev/null +++ b/src/feruchemy/resources/feruchemy.mixins.json @@ -0,0 +1,17 @@ +{ + "required": true, + "minVersion": "0.8", + "package": "leaf.cosmere.feruchemy.mixin", + "compatibilityLevel": "JAVA_17", + "refmap": "mixins.cosmere.feruchemy.refmap.json", + "mixins": [ + "EntityMixin", + "IForgeEntityMixin" + ], + "client": [ + "GameRendererMixin" + ], + "injectors": { + "defaultRequire": 1 + } +} \ No newline at end of file diff --git a/src/feruchemy/resources/pack.mcmeta b/src/feruchemy/resources/pack.mcmeta new file mode 100644 index 000000000..8f652bd67 --- /dev/null +++ b/src/feruchemy/resources/pack.mcmeta @@ -0,0 +1,6 @@ +{ + "pack": { + "description": "Resources used for Cosmere Feruchemy", + "pack_format": 15 + } +} \ No newline at end of file diff --git a/src/hemalurgy/java/leaf/cosmere/hemalurgy/client/HemalurgyClientEvents.java b/src/hemalurgy/java/leaf/cosmere/hemalurgy/client/HemalurgyClientEvents.java new file mode 100644 index 000000000..03eb6db5b --- /dev/null +++ b/src/hemalurgy/java/leaf/cosmere/hemalurgy/client/HemalurgyClientEvents.java @@ -0,0 +1,29 @@ +/* + * File updated ~ 19 - 7 - 2023 ~ Leaf + */ + +package leaf.cosmere.hemalurgy.client; + +import leaf.cosmere.hemalurgy.client.render.renderer.KolossLargeRenderer; +import leaf.cosmere.hemalurgy.client.render.renderer.KolossMediumRenderer; +import leaf.cosmere.hemalurgy.client.render.renderer.KolossSmallRenderer; +import leaf.cosmere.hemalurgy.common.Hemalurgy; +import leaf.cosmere.hemalurgy.common.registries.HemalurgyEntityTypes; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.client.event.EntityRenderersEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; + +@Mod.EventBusSubscriber(modid = Hemalurgy.MODID, value = Dist.CLIENT) +public class HemalurgyClientEvents +{ + @SubscribeEvent + public static void RegisterRenderers(EntityRenderersEvent.RegisterRenderers event) + { + //I don't think this actually works for this? + //see the other reference to koloss renderer constructor + event.registerEntityRenderer(HemalurgyEntityTypes.KOLOSS_LARGE.get(), KolossLargeRenderer::new); + event.registerEntityRenderer(HemalurgyEntityTypes.KOLOSS_MEDIUM.get(), KolossMediumRenderer::new); + event.registerEntityRenderer(HemalurgyEntityTypes.KOLOSS_SMALL.get(), KolossSmallRenderer::new); + } +} diff --git a/src/hemalurgy/java/leaf/cosmere/hemalurgy/client/HemalurgyClientSetup.java b/src/hemalurgy/java/leaf/cosmere/hemalurgy/client/HemalurgyClientSetup.java new file mode 100644 index 000000000..d99a53317 --- /dev/null +++ b/src/hemalurgy/java/leaf/cosmere/hemalurgy/client/HemalurgyClientSetup.java @@ -0,0 +1,39 @@ +/* + * File updated ~ 19 - 7 - 2023 ~ Leaf + */ + +package leaf.cosmere.hemalurgy.client; + +import leaf.cosmere.hemalurgy.client.render.HemalurgyLayerDefinitions; +import leaf.cosmere.hemalurgy.client.render.HemalurgyRenderers; +import leaf.cosmere.hemalurgy.client.render.model.KolossLargeModel; +import leaf.cosmere.hemalurgy.client.render.model.KolossMediumModel; +import leaf.cosmere.hemalurgy.client.render.model.KolossSmallModel; +import leaf.cosmere.hemalurgy.client.render.model.SpikeModel; +import leaf.cosmere.hemalurgy.common.Hemalurgy; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.client.event.EntityRenderersEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; + +@Mod.EventBusSubscriber(modid = Hemalurgy.MODID, value = Dist.CLIENT, bus = Mod.EventBusSubscriber.Bus.MOD) +public class HemalurgyClientSetup +{ + @SubscribeEvent + public static void registerLayers(final EntityRenderersEvent.RegisterLayerDefinitions evt) + { + evt.registerLayerDefinition(HemalurgyLayerDefinitions.SPIKE, SpikeModel::createLayer); + evt.registerLayerDefinition(HemalurgyLayerDefinitions.KOLOSS_SMALL, KolossSmallModel::createBodyLayer); + evt.registerLayerDefinition(HemalurgyLayerDefinitions.KOLOSS_MEDIUM, KolossMediumModel::createBodyLayer); + evt.registerLayerDefinition(HemalurgyLayerDefinitions.KOLOSS_LARGE, KolossLargeModel::createBodyLayer); + } + + @SubscribeEvent + public static void init(final FMLClientSetupEvent event) + { + HemalurgyRenderers.register(); + } + + +} diff --git a/src/hemalurgy/java/leaf/cosmere/hemalurgy/client/render/HemalurgyLayerDefinitions.java b/src/hemalurgy/java/leaf/cosmere/hemalurgy/client/render/HemalurgyLayerDefinitions.java new file mode 100644 index 000000000..f26a0b688 --- /dev/null +++ b/src/hemalurgy/java/leaf/cosmere/hemalurgy/client/render/HemalurgyLayerDefinitions.java @@ -0,0 +1,16 @@ +/* + * File updated ~ 19 - 7 - 2023 ~ Leaf + */ + +package leaf.cosmere.hemalurgy.client.render; + +import leaf.cosmere.hemalurgy.common.Hemalurgy; +import net.minecraft.client.model.geom.ModelLayerLocation; + +public class HemalurgyLayerDefinitions +{ + public static final ModelLayerLocation SPIKE = new ModelLayerLocation(Hemalurgy.rl("spike"), "spike"); + public static final ModelLayerLocation KOLOSS_SMALL = new ModelLayerLocation(Hemalurgy.rl("koloss_small"), "koloss_small"); + public static final ModelLayerLocation KOLOSS_MEDIUM = new ModelLayerLocation(Hemalurgy.rl("koloss_medium"), "koloss_medium"); + public static final ModelLayerLocation KOLOSS_LARGE = new ModelLayerLocation(Hemalurgy.rl("koloss_large"), "koloss_large"); +} diff --git a/src/hemalurgy/java/leaf/cosmere/hemalurgy/client/render/HemalurgyRenderers.java b/src/hemalurgy/java/leaf/cosmere/hemalurgy/client/render/HemalurgyRenderers.java new file mode 100644 index 000000000..025d421e2 --- /dev/null +++ b/src/hemalurgy/java/leaf/cosmere/hemalurgy/client/render/HemalurgyRenderers.java @@ -0,0 +1,36 @@ +/* + * File updated ~ 19 - 7 - 2023 ~ Leaf + */ + +package leaf.cosmere.hemalurgy.client.render; + +import leaf.cosmere.common.registration.impl.ItemRegistryObject; +import leaf.cosmere.hemalurgy.client.render.renderer.KolossLargeRenderer; +import leaf.cosmere.hemalurgy.client.render.renderer.KolossMediumRenderer; +import leaf.cosmere.hemalurgy.client.render.renderer.KolossSmallRenderer; +import leaf.cosmere.hemalurgy.client.render.renderer.SpikeRenderer; +import leaf.cosmere.hemalurgy.common.items.HemalurgicSpikeItem; +import leaf.cosmere.hemalurgy.common.registries.HemalurgyEntityTypes; +import leaf.cosmere.hemalurgy.common.registries.HemalurgyItems; +import net.minecraft.client.renderer.entity.EntityRenderers; +import top.theillusivec4.curios.api.client.CuriosRendererRegistry; +import top.theillusivec4.curios.api.client.ICurioRenderer; + +import java.util.function.Supplier; + +public class HemalurgyRenderers +{ + public static void register() + { + final Supplier spikeRenderer = SpikeRenderer::new; + for (ItemRegistryObject itemRegistryObject : HemalurgyItems.METAL_SPIKE.values()) + { + CuriosRendererRegistry.register(itemRegistryObject.get(), spikeRenderer); + } + + EntityRenderers.register(HemalurgyEntityTypes.KOLOSS_LARGE.get(), KolossLargeRenderer::new); + EntityRenderers.register(HemalurgyEntityTypes.KOLOSS_MEDIUM.get(), KolossMediumRenderer::new); + EntityRenderers.register(HemalurgyEntityTypes.KOLOSS_SMALL.get(), KolossSmallRenderer::new); + } + +} diff --git a/src/hemalurgy/java/leaf/cosmere/hemalurgy/client/render/model/KolossLargeModel.java b/src/hemalurgy/java/leaf/cosmere/hemalurgy/client/render/model/KolossLargeModel.java new file mode 100644 index 000000000..1687a815e --- /dev/null +++ b/src/hemalurgy/java/leaf/cosmere/hemalurgy/client/render/model/KolossLargeModel.java @@ -0,0 +1,189 @@ +/* + * File updated ~ 19 - 7 - 2023 ~ Leaf + */ + +// Made with Blockbench 4.6.1 +// Exported for Minecraft version 1.17 or later with Mojang mappings +// Paste this class into your mod and generate all required imports + +package leaf.cosmere.hemalurgy.client.render.model; + +import com.google.common.collect.ImmutableList; +import com.mojang.blaze3d.vertex.PoseStack; +import net.minecraft.client.model.HumanoidModel; +import net.minecraft.client.model.geom.ModelPart; +import net.minecraft.client.model.geom.PartPose; +import net.minecraft.client.model.geom.builders.*; +import net.minecraft.util.Mth; +import net.minecraft.world.entity.HumanoidArm; +import net.minecraft.world.entity.LivingEntity; + +public class KolossLargeModel extends HumanoidModel +{ + private final ModelPart root; + + public KolossLargeModel(ModelPart root) + { + super(root); + this.root = root; + } + + @Override + protected Iterable headParts() + { + return ImmutableList.of(); + } + + @Override + protected Iterable bodyParts() + { + return ImmutableList.of(this.root); + } + + public static LayerDefinition createBodyLayer() { + MeshDefinition meshdefinition = new MeshDefinition(); + PartDefinition partdefinition = meshdefinition.getRoot(); + + PartDefinition hat = partdefinition.addOrReplaceChild("hat", CubeListBuilder.create(), PartPose.offset(-10.0F, -6.0784F, 3.8832F)); + + PartDefinition head = partdefinition.addOrReplaceChild("head", CubeListBuilder.create().texOffs(56, 158).addBox(-5.9375F, -10.0F, -6.75F, 12.0F, 12.0F, 14.0F, new CubeDeformation(0.0F)) + .texOffs(52, 0).addBox(-4.0625F, 2.0F, -3.75F, 8.0F, 4.0F, 7.0F, new CubeDeformation(0.0F)), PartPose.offset(-0.0552F, -53.7473F, -0.678F)); + + PartDefinition body = partdefinition.addOrReplaceChild("body", CubeListBuilder.create().texOffs(110, 24).addBox(-11.9927F, -47.1152F, -2.1903F, 24.0F, 10.0F, 15.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, 24.0F, 0.0F)); + + PartDefinition body_r1 = body.addOrReplaceChild("body_r1", CubeListBuilder.create().texOffs(94, 77).addBox(-34.5F, 10.9375F, -7.5625F, 2.0F, 2.0F, 10.0F, new CubeDeformation(0.0F)) + .texOffs(72, 24).addBox(-34.5F, -13.9375F, -7.5625F, 2.0F, 2.0F, 10.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(0.0073F, -36.1727F, 3.2478F, 0.0F, -0.1309F, 1.5708F)); + + PartDefinition body_r2 = body.addOrReplaceChild("body_r2", CubeListBuilder.create().texOffs(0, 0).addBox(-35.9375F, -0.75F, -7.0F, 2.0F, 2.0F, 8.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(0.25F, -36.1727F, 2.3941F, 0.0F, -0.1309F, 1.5708F)); + + PartDefinition body_r3 = body.addOrReplaceChild("body_r3", CubeListBuilder.create().texOffs(52, 11).addBox(-30.25F, -2.0F, -24.5625F, 2.0F, 2.0F, 6.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-1.0F, -36.1727F, 20.1794F, 0.0F, -0.1309F, 1.5708F)); + + PartDefinition body_r4 = body.addOrReplaceChild("body_r4", CubeListBuilder.create().texOffs(128, 48).addBox(2.5F, -14.0F, -8.0F, 8.0F, 28.0F, 16.0F, new CubeDeformation(0.0F)) + .texOffs(0, 0).addBox(-13.5F, -17.0F, -10.0F, 16.0F, 34.0F, 20.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(0.0073F, -62.4227F, 3.2478F, 0.0F, -0.1309F, 1.5708F)); + + PartDefinition body_r5 = body.addOrReplaceChild("body_r5", CubeListBuilder.create().texOffs(72, 0).addBox(-12.0F, 10.5F, -8.0F, 24.0F, 8.0F, 16.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(0.0073F, -64.4227F, 3.2478F, 0.1309F, 0.0F, 0.0F)); + + PartDefinition left_arm = partdefinition.addOrReplaceChild("left_arm", CubeListBuilder.create(), PartPose.offset(17.0F, -45.0F, 2.0F)); + + PartDefinition left_arm_r1 = left_arm.addOrReplaceChild("left_arm_r1", CubeListBuilder.create().texOffs(149, 119).addBox(-2.0F, -7.2903F, -6.8003F, 14.0F, 12.0F, 16.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(2.0073F, 0.5773F, -0.7522F, 0.1309F, 0.0F, 0.0F)); + + PartDefinition left_arm_r2 = left_arm.addOrReplaceChild("left_arm_r2", CubeListBuilder.create().texOffs(0, 100).addBox(-1.5299F, 0.4276F, -6.0625F, 12.0F, 23.0F, 15.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(2.0073F, 0.5773F, -0.7522F, 0.0F, 0.0F, -0.2182F)); + + PartDefinition left_arm_r3 = left_arm.addOrReplaceChild("left_arm_r3", CubeListBuilder.create().texOffs(0, 54).addBox(-2.5299F, 20.638F, -2.2242F, 14.0F, 23.0F, 18.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(2.0073F, 0.5773F, -0.7522F, -0.2182F, 0.0F, -0.2182F)); + + PartDefinition right_arm = partdefinition.addOrReplaceChild("right_arm", CubeListBuilder.create(), PartPose.offset(-17.0F, -45.0F, 2.0F)); + + PartDefinition right_arm_r1 = right_arm.addOrReplaceChild("right_arm_r1", CubeListBuilder.create().texOffs(194, 6).addBox(-1.1716F, -64.9073F, 4.4307F, 4.0F, 4.75F, 4.0F, new CubeDeformation(0.0F)) + .texOffs(194, 6).addBox(-1.1716F, -64.9073F, -8.0772F, 4.0F, 4.75F, 12.75F, new CubeDeformation(0.0F)) + .texOffs(194, 6).addBox(-2.8284F, -64.9073F, -8.0772F, 4.0F, 4.75F, 12.75F, new CubeDeformation(0.0F)) + .texOffs(194, 6).addBox(-2.8284F, -64.9073F, 4.4307F, 4.0F, 4.75F, 4.0F, new CubeDeformation(0.0F)) + .texOffs(194, 6).addBox(-1.1716F, -60.5482F, -10.6011F, 4.0F, 5.75F, 22.0F, new CubeDeformation(0.0F)) + .texOffs(194, 6).addBox(-2.8284F, -60.5482F, -10.6011F, 4.0F, 5.75F, 22.0F, new CubeDeformation(0.0F)) + .texOffs(194, 6).addBox(-2.8284F, -60.5482F, 6.9547F, 4.0F, 1.75F, 8.0F, new CubeDeformation(0.0F)) + .texOffs(194, 6).addBox(-1.1716F, -60.5482F, 6.9547F, 4.0F, 1.75F, 8.0F, new CubeDeformation(0.0F)) + .texOffs(194, 6).addBox(-2.8284F, -60.5482F, -14.6011F, 4.0F, 1.75F, 14.0F, new CubeDeformation(0.0F)) + .texOffs(194, 6).addBox(-1.1716F, -60.5482F, -14.6011F, 4.0F, 1.75F, 14.0F, new CubeDeformation(0.0F)) + .texOffs(211, 117).addBox(-3.1419F, 61.7823F, -5.2961F, 6.0F, 1.5F, 4.5F, new CubeDeformation(0.0F)) + .texOffs(211, 117).addBox(-3.1419F, 61.7823F, 0.7961F, 6.0F, 1.5F, 4.5F, new CubeDeformation(0.0F)) + .texOffs(211, 117).addBox(-5.438F, 61.7823F, -3.0F, 10.5F, 1.5F, 6.0F, new CubeDeformation(0.0F)) + .texOffs(211, 117).addBox(0.6542F, 61.7823F, -3.0F, 4.5F, 1.5F, 6.0F, new CubeDeformation(0.0F)) + .texOffs(51, 221).addBox(-2.5F, 32.2391F, -3.0F, 5.0F, 24.0F, 6.0F, new CubeDeformation(0.0F)) + .texOffs(194, 6).addBox(-1.1716F, -55.2609F, -10.0F, 4.0F, 80.0F, 20.0F, new CubeDeformation(0.0F)) + .texOffs(188, 190).addBox(-6.0F, 27.4412F, -6.8296F, 12.0F, 1.0F, 19.0F, new CubeDeformation(0.0F)) + .texOffs(188, 190).addBox(-6.0F, 27.2445F, -4.7739F, 12.0F, 5.0F, 12.25F, new CubeDeformation(0.0F)) + .texOffs(188, 190).addBox(-6.0F, 27.2445F, -7.4761F, 12.0F, 5.0F, 3.25F, new CubeDeformation(0.0F)) + .texOffs(194, 6).addBox(-2.8284F, -55.2609F, -10.0F, 4.0F, 80.0F, 20.0F, new CubeDeformation(0.0F)) + .texOffs(80, 195).addBox(-6.0F, 23.8854F, -14.0F, 12.0F, 4.0F, 28.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-14.0F, 22.2609F, -45.0F, 1.2654F, 0.0F, 0.0F)); + + PartDefinition right_arm_r2 = right_arm.addOrReplaceChild("right_arm_r2", CubeListBuilder.create().texOffs(194, 6).addBox(-2.8284F, -53.1386F, 32.4895F, 4.0F, 3.25F, 4.0F, new CubeDeformation(0.0F)) + .texOffs(194, 6).addBox(-1.1716F, -53.1386F, 32.4895F, 4.0F, 3.25F, 4.0F, new CubeDeformation(0.0F)) + .texOffs(188, 190).addBox(-6.0F, 27.0867F, -17.514F, 12.0F, 1.0F, 8.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-14.0F, 22.2609F, -45.0F, 2.0508F, 0.0F, 0.0F)); + + PartDefinition right_arm_r3 = right_arm.addOrReplaceChild("right_arm_r3", CubeListBuilder.create().texOffs(194, 6).addBox(-2.8284F, -63.0576F, 13.3766F, 4.0F, 4.75F, 4.0F, new CubeDeformation(0.0F)) + .texOffs(194, 6).addBox(-1.1716F, -63.0576F, 13.3766F, 4.0F, 4.75F, 4.0F, new CubeDeformation(0.0F)) + .texOffs(194, 6).addBox(-1.1716F, -59.91F, 9.0114F, 4.0F, 16.0F, 4.0F, new CubeDeformation(0.0F)) + .texOffs(194, 6).addBox(-2.8284F, -59.91F, 9.0114F, 4.0F, 16.0F, 4.0F, new CubeDeformation(0.0F)) + .texOffs(211, 117).addBox(-3.1419F, 53.1062F, -21.7501F, 6.0F, 6.0F, 3.0F, new CubeDeformation(0.0F)) + .texOffs(188, 190).addBox(-6.0F, 30.1203F, -1.737F, 12.0F, 1.0F, 4.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-14.0F, 22.2609F, -45.0F, 1.6581F, 0.0F, 0.0F)); + + PartDefinition right_arm_r4 = right_arm.addOrReplaceChild("right_arm_r4", CubeListBuilder.create().texOffs(194, 6).addBox(-1.1716F, -63.1929F, -17.05F, 4.0F, 4.75F, 4.0F, new CubeDeformation(0.0F)) + .texOffs(194, 6).addBox(-2.8284F, -63.1929F, -17.05F, 4.0F, 4.75F, 4.0F, new CubeDeformation(0.0F)) + .texOffs(194, 6).addBox(-1.1716F, -60.0453F, -12.6848F, 4.0F, 16.0F, 4.0F, new CubeDeformation(0.0F)) + .texOffs(194, 6).addBox(-2.8284F, -60.0453F, -12.6848F, 4.0F, 16.0F, 4.0F, new CubeDeformation(0.0F)) + .texOffs(211, 117).addBox(-3.1419F, 53.1062F, 18.7501F, 6.0F, 6.0F, 3.0F, new CubeDeformation(0.0F)) + .texOffs(188, 190).addBox(-6.0F, 30.1203F, -2.263F, 12.0F, 1.0F, 4.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-14.0F, 22.2609F, -45.0F, 0.8727F, 0.0F, 0.0F)); + + PartDefinition right_arm_r5 = right_arm.addOrReplaceChild("right_arm_r5", CubeListBuilder.create().texOffs(194, 6).addBox(-1.1716F, -53.3886F, -36.2395F, 4.0F, 4.25F, 4.0F, new CubeDeformation(0.0F)) + .texOffs(194, 6).addBox(-2.8284F, -53.3886F, -36.2395F, 4.0F, 4.25F, 4.0F, new CubeDeformation(0.0F)) + .texOffs(188, 190).addBox(-6.0F, 25.0867F, 9.514F, 12.0F, 2.0F, 8.0F, new CubeDeformation(0.0F)) + .texOffs(188, 190).addBox(-6.0F, 9.514F, 25.0867F, 12.0F, 8.0F, 2.0F, new CubeDeformation(0.0F)) + .texOffs(188, 190).addBox(-6.0F, 27.0867F, 9.514F, 12.0F, 1.0F, 8.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-14.0F, 22.2609F, -45.0F, 0.48F, 0.0F, 0.0F)); + + PartDefinition right_arm_r6 = right_arm.addOrReplaceChild("right_arm_r6", CubeListBuilder.create().texOffs(211, 117).addBox(-21.8812F, 53.0519F, -3.0F, 3.0F, 6.0F, 6.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-14.0F, 22.2609F, -45.0F, 1.2419F, 0.3736F, -0.1239F)); + + PartDefinition right_arm_r7 = right_arm.addOrReplaceChild("right_arm_r7", CubeListBuilder.create().texOffs(211, 117).addBox(18.619F, 53.1605F, -3.0F, 3.0F, 6.0F, 6.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-14.0F, 22.2609F, -45.0F, 1.2419F, -0.3736F, 0.1239F)); + + PartDefinition right_arm_r8 = right_arm.addOrReplaceChild("right_arm_r8", CubeListBuilder.create().texOffs(194, 6).addBox(-9.0711F, -59.2609F, 5.0711F, 4.0F, 84.0F, 4.0F, new CubeDeformation(0.0F)) + .texOffs(194, 6).addBox(5.0711F, -59.2609F, -9.0711F, 4.0F, 84.0F, 4.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-14.0F, 22.2609F, -45.0F, 1.3514F, 0.2143F, 0.7617F)); + + PartDefinition right_arm_r9 = right_arm.addOrReplaceChild("right_arm_r9", CubeListBuilder.create().texOffs(64, 36).addBox(-7.75F, -16.5F, -11.9375F, 14.0F, 23.0F, 18.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-13.9925F, 37.1806F, 0.6853F, -0.2182F, 0.0F, 0.2182F)); + + PartDefinition right_arm_r10 = right_arm.addOrReplaceChild("right_arm_r10", CubeListBuilder.create().texOffs(54, 120).addBox(-9.25F, -23.0F, -9.0625F, 12.0F, 23.0F, 15.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-8.3052F, 23.0773F, 2.2478F, 0.0F, 0.0F, 0.2182F)); + + PartDefinition right_arm_r11 = right_arm.addOrReplaceChild("right_arm_r11", CubeListBuilder.create().texOffs(148, 154).addBox(-34.0F, -13.5F, -8.0F, 14.0F, 12.0F, 16.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(20.0073F, 6.5773F, 1.2478F, 0.1309F, 0.0F, 0.0F)); + + PartDefinition left_leg = partdefinition.addOrReplaceChild("left_leg", CubeListBuilder.create().texOffs(94, 97).addBox(-7.2177F, 18.3554F, -9.2339F, 15.0F, 20.0F, 18.0F, new CubeDeformation(0.0F)) + .texOffs(142, 92).addBox(-6.2177F, 17.2404F, -7.9641F, 13.0F, 5.0F, 15.0F, new CubeDeformation(0.0F)), PartPose.offset(10.5645F, -14.9826F, 3.1852F)); + + PartDefinition left_leg_r1 = left_leg.addOrReplaceChild("left_leg_r1", CubeListBuilder.create().texOffs(108, 135).addBox(-6.5F, -10.0F, -7.5F, 13.0F, 20.0F, 15.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-0.5645F, 8.9043F, 0.6981F, -0.1304F, -0.0114F, -0.0865F)); + + PartDefinition right_leg = partdefinition.addOrReplaceChild("right_leg", CubeListBuilder.create().texOffs(46, 77).addBox(-7.7823F, 18.3554F, -9.6506F, 15.0F, 20.0F, 18.0F, new CubeDeformation(0.0F)) + .texOffs(2, 194).addBox(-6.7823F, 17.2404F, -7.7558F, 13.0F, 5.0F, 15.0F, new CubeDeformation(0.0F)), PartPose.offset(-10.5645F, -14.9826F, 2.9768F)); + + PartDefinition right_leg_r1 = right_leg.addOrReplaceChild("right_leg_r1", CubeListBuilder.create().texOffs(0, 143).addBox(-6.5F, -10.0F, -7.5F, 13.0F, 20.0F, 15.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(0.5645F, 8.9043F, 0.9064F, -0.1304F, 0.0114F, 0.0865F)); + + return LayerDefinition.create(meshdefinition, 256, 256); + } + + + + @Override + public void setupAnim(T pEntity, float pLimbSwing, float pLimbSwingAmount, float pAgeInTicks, float pNetHeadYaw, float pHeadPitch) + { + this.head.yRot = pNetHeadYaw * ((float) Math.PI / 180F); + this.head.xRot = pHeadPitch * ((float) Math.PI / 180F); + this.rightLeg.xRot = -1.5F * Mth.triangleWave(pLimbSwing, 13.0F) * pLimbSwingAmount; + this.leftLeg.xRot = 1.5F * Mth.triangleWave(pLimbSwing, 13.0F) * pLimbSwingAmount; + this.rightLeg.yRot = 0.0F; + this.leftLeg.yRot = 0.0F; + } + + @Override + public void prepareMobModel(T pEntity, float pLimbSwing, float pLimbSwingAmount, float pPartialTick) + { + float i = pEntity.getAttackAnim(pPartialTick); + if (i > 0) + { + this.rightArm.xRot = -2.0F + 1.5F * Mth.triangleWave(i - pPartialTick, 10.0F); + this.leftArm.xRot = -2.0F + 1.5F * Mth.triangleWave(i - pPartialTick, 10.0F); + } + else + { + this.rightArm.xRot = (-0.2F + 1.5F * Mth.triangleWave(pLimbSwing, 13.0F)) * pLimbSwingAmount; + this.leftArm.xRot = (-0.2F - 1.5F * Mth.triangleWave(pLimbSwing, 13.0F)) * pLimbSwingAmount; + } + } + + @Override + public void translateToHand(HumanoidArm pSide, PoseStack pPoseStack) + { + float f = pSide == HumanoidArm.RIGHT ? 2.0F : -2.0F; + ModelPart modelpart = this.getArm(pSide); + modelpart.x -= 10; + modelpart.y += 20; + modelpart.translateAndRotate(pPoseStack); + modelpart.x += 10; + modelpart.y -= 20; + + } +} \ No newline at end of file diff --git a/src/hemalurgy/java/leaf/cosmere/hemalurgy/client/render/model/KolossMediumModel.java b/src/hemalurgy/java/leaf/cosmere/hemalurgy/client/render/model/KolossMediumModel.java new file mode 100644 index 000000000..53c7f8fe4 --- /dev/null +++ b/src/hemalurgy/java/leaf/cosmere/hemalurgy/client/render/model/KolossMediumModel.java @@ -0,0 +1,198 @@ +/* + * File updated ~ 19 - 7 - 2023 ~ Leaf + */ + +// Made with Blockbench 4.6.1 +// Exported for Minecraft version 1.17 or later with Mojang mappings +// Paste this class into your mod and generate all required imports + +package leaf.cosmere.hemalurgy.client.render.model; + +import com.google.common.collect.ImmutableList; +import com.mojang.blaze3d.vertex.PoseStack; +import net.minecraft.client.model.HumanoidModel; +import net.minecraft.client.model.geom.ModelPart; +import net.minecraft.client.model.geom.PartPose; +import net.minecraft.client.model.geom.builders.*; +import net.minecraft.util.Mth; +import net.minecraft.world.entity.HumanoidArm; +import net.minecraft.world.entity.LivingEntity; + +public class KolossMediumModel extends HumanoidModel +{ + private final ModelPart root; + + public KolossMediumModel(ModelPart root) + { + super(root); + this.root = root; + } + + @Override + protected Iterable headParts() + { + return ImmutableList.of(); + } + + @Override + protected Iterable bodyParts() + { + return ImmutableList.of(this.root); + } + + public static LayerDefinition createBodyLayer() { + MeshDefinition meshdefinition = new MeshDefinition(); + PartDefinition partdefinition = meshdefinition.getRoot(); + + PartDefinition hat = partdefinition.addOrReplaceChild("hat", CubeListBuilder.create(), PartPose.offset(-10.0F, -6.0784F, 3.8832F)); + + PartDefinition body = partdefinition.addOrReplaceChild("body", CubeListBuilder.create().texOffs(108, 101).addBox(-7.5015F, 16.1433F, -1.7583F, 15.0F, 3.0F, 9.0F, new CubeDeformation(0.0F)) + .texOffs(114, 91).addBox(-7.5015F, 13.1433F, 6.8042F, 15.0F, 3.0F, 0.4375F, new CubeDeformation(0.0F)) + .texOffs(54, 18).addBox(-4.0953F, -9.9935F, -5.7417F, 8.0F, 3.0F, 6.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, -15.375F, 0.0F)); + + PartDefinition body_r1 = body.addOrReplaceChild("body_r1", CubeListBuilder.create().texOffs(82, 137).addBox(-6.9945F, 6.5625F, -0.1023F, 1.5F, 1.5F, 12.0F, new CubeDeformation(0.0F)) + .texOffs(0, 100).addBox(-6.9945F, -8.3438F, 8.8977F, 1.5F, 1.5F, 3.0F, new CubeDeformation(0.0F)) + .texOffs(118, 0).addBox(-6.7445F, -8.0938F, -5.3523F, 2.0F, 2.0F, 15.0F, new CubeDeformation(0.0F)) + .texOffs(137, 45).addBox(-7.4007F, -0.4375F, 0.1789F, 1.5F, 1.5F, 12.0F, new CubeDeformation(0.0F)) + .texOffs(66, 135).addBox(-7.2445F, -0.6875F, -5.8211F, 2.0F, 2.0F, 12.0F, new CubeDeformation(0.0F)) + .texOffs(137, 0).addBox(3.5055F, -0.4375F, -2.3523F, 1.5F, 1.5F, 12.0F, new CubeDeformation(0.0F)) + .texOffs(127, 126).addBox(3.7555F, -0.6875F, -3.8523F, 2.0F, 2.0F, 12.0F, new CubeDeformation(0.0F)) + .texOffs(118, 45).addBox(-6.7445F, 6.8125F, -5.3523F, 2.0F, 2.0F, 15.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(0.2969F, 0.0F, -2.4451F, 0.0F, -0.1309F, 1.5708F)); + + PartDefinition body_r2 = body.addOrReplaceChild("body_r2", CubeListBuilder.create().texOffs(106, 83).addBox(-6.6014F, 8.7943F, 23.4909F, 15.0F, 3.0F, 9.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-0.9002F, 8.6908F, -26.5107F, 0.1309F, 0.0F, 0.0F)); + + PartDefinition body_r3 = body.addOrReplaceChild("body_r3", CubeListBuilder.create().texOffs(42, 27).addBox(-6.6014F, 2.8188F, 22.1768F, 15.0F, 6.0F, 12.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-0.9002F, 8.6908F, -26.5107F, 0.1309F, 0.0F, 0.0F)); + + PartDefinition body_r4 = body.addOrReplaceChild("body_r4", CubeListBuilder.create().texOffs(52, 68).addBox(-3.1812F, -9.8986F, 22.1768F, 6.0F, 18.0F, 12.0F, new CubeDeformation(0.0F)) + .texOffs(0, 0).addBox(-15.1812F, -12.8986F, 20.6768F, 12.0F, 24.0F, 15.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-0.9002F, 8.6908F, -26.5107F, 0.0F, -0.1309F, 1.5708F)); + + PartDefinition right_arm = partdefinition.addOrReplaceChild("right_arm", CubeListBuilder.create(), PartPose.offset(-11.9764F, -19.5725F, -1.2969F)); + + PartDefinition right_arm_r1 = right_arm.addOrReplaceChild("right_arm_r1", CubeListBuilder.create().texOffs(117, 95).addBox(-23.4764F, 18.3248F, 3.8869F, 6.75F, 0.5625F, 4.5F, new CubeDeformation(0.0F)) + .texOffs(84, 6).addBox(-23.4764F, 8.4401F, 12.6465F, 6.75F, 4.5F, 1.125F, new CubeDeformation(0.0F)) + .texOffs(84, 0).addBox(-23.4764F, 17.1998F, 3.8869F, 6.75F, 1.125F, 4.5F, new CubeDeformation(0.0F)) + .texOffs(32, 207).addBox(-21.6924F, -26.9426F, -21.8494F, 2.25F, 2.3906F, 2.25F, new CubeDeformation(0.0F)) + .texOffs(24, 207).addBox(-20.7604F, -26.9426F, -21.8494F, 2.25F, 2.3906F, 2.25F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(11.0777F, 12.8882F, -25.9789F, 0.5236F, 0.0F, 0.0F)); + + PartDefinition right_arm_r2 = right_arm.addOrReplaceChild("right_arm_r2", CubeListBuilder.create().texOffs(28, 104).addBox(-23.4764F, 19.2355F, -3.8081F, 6.75F, 0.5625F, 2.25F, new CubeDeformation(0.0F)) + .texOffs(22, 211).addBox(-21.6924F, -31.4826F, -9.6703F, 2.25F, 9.0F, 2.25F, new CubeDeformation(0.0F)) + .texOffs(14, 214).addBox(-20.7604F, -31.4826F, -9.6703F, 2.25F, 9.0F, 2.25F, new CubeDeformation(0.0F)) + .texOffs(21, 220).addBox(-21.6924F, -33.2531F, -12.1258F, 2.25F, 2.6719F, 2.25F, new CubeDeformation(0.0F)) + .texOffs(34, 207).addBox(-20.7604F, -33.2531F, -12.1258F, 2.25F, 2.6719F, 2.25F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(11.0777F, 12.8882F, -25.9789F, 0.9163F, 0.0F, 0.0F)); + + PartDefinition right_arm_r3 = right_arm.addOrReplaceChild("right_arm_r3", CubeListBuilder.create().texOffs(88, 83).addBox(-23.4764F, 16.7713F, -4.391F, 6.75F, 0.5625F, 2.25F, new CubeDeformation(0.0F)) + .texOffs(30, 205).addBox(-20.7604F, -33.8707F, 1.655F, 2.25F, 9.0F, 2.25F, new CubeDeformation(0.0F)) + .texOffs(18, 205).addBox(-21.6924F, -33.8707F, 1.655F, 2.25F, 9.0F, 2.25F, new CubeDeformation(0.0F)) + .texOffs(31, 209).addBox(-20.7604F, -35.6412F, 4.1104F, 2.25F, 2.6719F, 2.25F, new CubeDeformation(0.0F)) + .texOffs(26, 218).addBox(-21.6924F, -35.6412F, 4.1104F, 2.25F, 2.6719F, 2.25F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(11.0777F, 12.8882F, -25.9789F, 1.7017F, 0.0F, 0.0F)); + + PartDefinition right_arm_r4 = right_arm.addOrReplaceChild("right_arm_r4", CubeListBuilder.create().texOffs(103, 1).addBox(-23.4764F, 13.7715F, -12.9401F, 6.75F, 0.5625F, 4.5F, new CubeDeformation(0.0F)) + .texOffs(32, 213).addBox(-20.7604F, -31.3552F, 15.1868F, 2.25F, 1.8281F, 2.25F, new CubeDeformation(0.0F)) + .texOffs(28, 206).addBox(-21.6924F, -31.3552F, 15.1868F, 2.25F, 1.8281F, 2.25F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(11.0777F, 12.8882F, -25.9789F, 2.0944F, 0.0F, 0.0F)); + + PartDefinition right_arm_r5 = right_arm.addOrReplaceChild("right_arm_r5", CubeListBuilder.create().texOffs(96, 113).addBox(-23.4764F, 16.4732F, -7.4249F, 6.75F, 2.8125F, 1.8281F, new CubeDeformation(0.0F)) + .texOffs(98, 138).addBox(-23.4764F, 16.4732F, -5.905F, 6.75F, 2.8125F, 6.8906F, new CubeDeformation(0.0F)) + .texOffs(128, 62).addBox(-23.4764F, 16.5839F, -7.0613F, 6.75F, 0.5625F, 10.6875F, new CubeDeformation(0.0F)) + .texOffs(26, 182).addBox(-20.7604F, -29.9361F, -8.8446F, 2.25F, 45.0F, 11.25F, new CubeDeformation(0.0F)) + .texOffs(47, 138).addBox(-21.5076F, 19.2827F, -4.9071F, 2.8125F, 13.5F, 3.375F, new CubeDeformation(0.0F)) + .texOffs(27, 212).addBox(-20.7604F, -32.9102F, -11.4328F, 2.25F, 0.9844F, 7.875F, new CubeDeformation(0.0F)) + .texOffs(16, 203).addBox(-21.6924F, -32.9102F, -11.4328F, 2.25F, 0.9844F, 7.875F, new CubeDeformation(0.0F)) + .texOffs(28, 203).addBox(-20.7604F, -32.9102F, 0.6924F, 2.25F, 0.9844F, 4.5F, new CubeDeformation(0.0F)) + .texOffs(29, 215).addBox(-21.6924F, -32.9102F, 0.6924F, 2.25F, 0.9844F, 4.5F, new CubeDeformation(0.0F)) + .texOffs(16, 201).addBox(-21.6924F, -32.9102F, -9.1828F, 2.25F, 3.2344F, 12.375F, new CubeDeformation(0.0F)) + .texOffs(10, 212).addBox(-20.7604F, -32.9102F, -9.1828F, 2.25F, 3.2344F, 12.375F, new CubeDeformation(0.0F)) + .texOffs(20, 215).addBox(-21.6924F, -35.3622F, -0.7273F, 2.25F, 2.6719F, 2.25F, new CubeDeformation(0.0F)) + .texOffs(11, 206).addBox(-21.6924F, -35.3622F, -7.763F, 2.25F, 2.6719F, 7.1719F, new CubeDeformation(0.0F)) + .texOffs(20, 208).addBox(-20.7604F, -35.3622F, -7.763F, 2.25F, 2.6719F, 7.1719F, new CubeDeformation(0.0F)) + .texOffs(26, 205).addBox(-20.7604F, -35.3622F, -0.7273F, 2.25F, 2.6719F, 2.25F, new CubeDeformation(0.0F)) + .texOffs(54, 0).addBox(-23.4764F, 14.5837F, -11.0946F, 6.75F, 2.25F, 15.75F, new CubeDeformation(0.0F)) + .texOffs(0, 182).addBox(-21.6924F, -29.9361F, -8.8446F, 2.25F, 45.0F, 11.25F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(11.0777F, 12.8882F, -25.9789F, 1.309F, 0.0F, 0.0F)); + + PartDefinition right_arm_r6 = right_arm.addOrReplaceChild("right_arm_r6", CubeListBuilder.create().texOffs(0, 188).addBox(-9.0847F, -32.1861F, -21.5929F, 2.25F, 47.25F, 2.25F, new CubeDeformation(0.0F)) + .texOffs(8, 188).addBox(-17.0397F, -32.1861F, -13.638F, 2.25F, 47.25F, 2.25F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(11.0777F, 12.8882F, -25.9789F, 1.3835F, 0.1841F, 0.7681F)); + + PartDefinition right_arm_r7 = right_arm.addOrReplaceChild("right_arm_r7", CubeListBuilder.create().texOffs(76, 74).addBox(-21.8687F, 29.7009F, -15.6484F, 3.375F, 3.375F, 1.6875F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(11.0777F, 12.8882F, -25.9789F, 1.7017F, 0.0F, 0.0F)); + + PartDefinition right_arm_r8 = right_arm.addOrReplaceChild("right_arm_r8", CubeListBuilder.create().texOffs(52, 72).addBox(-21.8687F, 32.1651F, 8.0118F, 3.375F, 3.375F, 1.6875F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(11.0777F, 12.8882F, -25.9789F, 0.9163F, 0.0F, 0.0F)); + + PartDefinition right_arm_r9 = right_arm.addOrReplaceChild("right_arm_r9", CubeListBuilder.create().texOffs(30, 58).addBox(-7.6587F, 38.656F, -4.9071F, 1.6875F, 3.375F, 3.375F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(11.0777F, 12.8882F, -25.9789F, 1.2885F, -0.3786F, 0.1068F)); + + PartDefinition right_arm_r10 = right_arm.addOrReplaceChild("right_arm_r10", CubeListBuilder.create().texOffs(5, 8).addBox(-31.3188F, 23.21F, -4.9071F, 1.6875F, 3.375F, 3.375F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(11.0777F, 12.8882F, -25.9789F, 1.2885F, 0.3786F, -0.1068F)); + + PartDefinition right_arm_r11 = right_arm.addOrReplaceChild("right_arm_r11", CubeListBuilder.create().texOffs(52, 49).addBox(-19.7334F, 35.9007F, -4.9071F, 2.5313F, 0.8438F, 3.375F, new CubeDeformation(0.0F)) + .texOffs(52, 68).addBox(-21.8687F, 35.9007F, -2.7718F, 3.375F, 0.8438F, 2.5313F, new CubeDeformation(0.0F)) + .texOffs(41, 45).addBox(-23.1603F, 35.9007F, -4.9071F, 5.9063F, 0.8438F, 3.375F, new CubeDeformation(0.0F)) + .texOffs(52, 53).addBox(-21.8687F, 35.9007F, -6.1987F, 3.375F, 0.8438F, 2.5313F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(11.0777F, 12.8882F, -25.9789F, 1.309F, 0.0F, 0.0F)); + + PartDefinition right_arm_r12 = right_arm.addOrReplaceChild("right_arm_r12", CubeListBuilder.create().texOffs(90, 58).addBox(-22.715F, -3.1661F, 21.3761F, 9.0F, 15.0F, 10.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(11.0762F, 12.8882F, -25.2138F, -0.2182F, 0.0F, 0.2182F)); + + PartDefinition right_arm_r13 = right_arm.addOrReplaceChild("right_arm_r13", CubeListBuilder.create().texOffs(40, 98).addBox(-19.1014F, -15.1812F, 22.1768F, 8.0F, 9.0F, 12.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(11.0762F, 12.8882F, -25.2138F, 0.1309F, 0.0F, 0.0F)); + + PartDefinition right_arm_r14 = right_arm.addOrReplaceChild("right_arm_r14", CubeListBuilder.create().texOffs(105, 113).addBox(-22.215F, -11.7218F, 21.8383F, 8.0F, 16.0F, 9.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(11.0762F, 12.8882F, -25.2138F, 0.0F, 0.0F, 0.2182F)); + + PartDefinition left_arm = partdefinition.addOrReplaceChild("left_arm", CubeListBuilder.create(), PartPose.offset(11.9734F, -19.5857F, -1.2954F)); + + PartDefinition left_arm_r1 = left_arm.addOrReplaceChild("left_arm_r1", CubeListBuilder.create().texOffs(70, 110).mirror().addBox(15.9578F, -11.2246F, 21.8383F, 8.0F, 16.0F, 9.0F, new CubeDeformation(0.0F)).mirror(false), PartPose.offsetAndRotation(-12.8736F, 12.9015F, -25.2153F, 0.0F, 0.0F, -0.2182F)); + + PartDefinition left_arm_r2 = left_arm.addOrReplaceChild("left_arm_r2", CubeListBuilder.create().texOffs(90, 8).mirror().addBox(15.4578F, -2.7212F, 21.4792F, 9.0F, 15.0F, 10.0F, new CubeDeformation(0.0F)).mirror(false), PartPose.offsetAndRotation(-12.8736F, 12.9015F, -25.2153F, -0.2182F, 0.0F, -0.2182F)); + + PartDefinition left_arm_r3 = left_arm.addOrReplaceChild("left_arm_r3", CubeListBuilder.create().texOffs(0, 95).mirror().addBox(12.8986F, -15.1812F, 22.1768F, 8.0F, 9.0F, 12.0F, new CubeDeformation(0.0F)).mirror(false), PartPose.offsetAndRotation(-12.8736F, 12.9015F, -25.2153F, 0.1309F, 0.0F, 0.0F)); + + PartDefinition left_leg = partdefinition.addOrReplaceChild("left_leg", CubeListBuilder.create().texOffs(88, 34).addBox(-4.1265F, 8.4852F, -5.0834F, 9.0F, 12.0F, 11.0F, new CubeDeformation(0.0F)), PartPose.offset(6.0F, 3.5148F, 1.3485F)); + + PartDefinition left_leg_r1 = left_leg.addOrReplaceChild("left_leg_r1", CubeListBuilder.create().texOffs(16, 119).addBox(3.1486F, 4.2399F, 26.0595F, 8.0F, 11.5F, 9.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-6.9002F, -10.199F, -27.8592F, -0.1309F, 0.0F, 0.0F)); + + PartDefinition right_leg = partdefinition.addOrReplaceChild("right_leg", CubeListBuilder.create().texOffs(77, 87).addBox(-4.8765F, 8.4852F, -4.9584F, 9.0F, 12.0F, 11.0F, new CubeDeformation(0.0F)), PartPose.offset(-6.0F, 3.5148F, 1.2235F)); + + PartDefinition right_leg_r1 = right_leg.addOrReplaceChild("right_leg_r1", CubeListBuilder.create().texOffs(119, 24).addBox(-9.3514F, 4.2399F, 26.0595F, 8.0F, 11.5F, 9.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(5.0998F, -10.199F, -27.7342F, -0.1309F, 0.0F, 0.0F)); + + PartDefinition head = partdefinition.addOrReplaceChild("head", CubeListBuilder.create().texOffs(170, 52).addBox(-5.9547F, -10.125F, -4.4849F, 12.0F, 12.0F, 12.0F, new CubeDeformation(0.0F)), PartPose.offset(-0.0469F, -27.2435F, -2.7568F)); + + return LayerDefinition.create(meshdefinition, 256, 256); + } + + + + + + + @Override + public void setupAnim(T pEntity, float pLimbSwing, float pLimbSwingAmount, float pAgeInTicks, float pNetHeadYaw, float pHeadPitch) + { + this.head.yRot = pNetHeadYaw * ((float) Math.PI / 180F); + this.head.xRot = pHeadPitch * ((float) Math.PI / 180F); + this.rightLeg.xRot = -1.5F * Mth.triangleWave(pLimbSwing, 13.0F) * pLimbSwingAmount; + this.leftLeg.xRot = 1.5F * Mth.triangleWave(pLimbSwing, 13.0F) * pLimbSwingAmount; + this.rightLeg.yRot = 0.0F; + this.leftLeg.yRot = 0.0F; + } + + @Override + public void prepareMobModel(T pEntity, float pLimbSwing, float pLimbSwingAmount, float pPartialTick) + { + float i = pEntity.getAttackAnim(pPartialTick); + if (i > 0) + { + this.rightArm.xRot = -2.0F + 1.5F * Mth.triangleWave(i - pPartialTick, 10.0F); + this.leftArm.xRot = -2.0F + 1.5F * Mth.triangleWave(i - pPartialTick, 10.0F); + } + else + { + this.rightArm.xRot = (-0.2F + 1.5F * Mth.triangleWave(pLimbSwing, 13.0F)) * pLimbSwingAmount; + this.leftArm.xRot = (-0.2F - 1.5F * Mth.triangleWave(pLimbSwing, 13.0F)) * pLimbSwingAmount; + } + } + + @Override + public void translateToHand(HumanoidArm pSide, PoseStack pPoseStack) + { + float f = pSide == HumanoidArm.RIGHT ? 2.0F : -2.0F; + ModelPart modelpart = this.getArm(pSide); + modelpart.x -= 4; + modelpart.y += 4; + modelpart.translateAndRotate(pPoseStack); + modelpart.x += 4; + modelpart.y -= 4; + + } +} \ No newline at end of file diff --git a/src/hemalurgy/java/leaf/cosmere/hemalurgy/client/render/model/KolossSmallModel.java b/src/hemalurgy/java/leaf/cosmere/hemalurgy/client/render/model/KolossSmallModel.java new file mode 100644 index 000000000..42a6704c6 --- /dev/null +++ b/src/hemalurgy/java/leaf/cosmere/hemalurgy/client/render/model/KolossSmallModel.java @@ -0,0 +1,171 @@ +/* + * File updated ~ 19 - 7 - 2023 ~ Leaf + */ + +// Made with Blockbench 4.6.1 +// Exported for Minecraft version 1.17 or later with Mojang mappings +// Paste this class into your mod and generate all required imports + +package leaf.cosmere.hemalurgy.client.render.model; + +import com.google.common.collect.ImmutableList; +import com.mojang.blaze3d.vertex.PoseStack; +import net.minecraft.client.model.HumanoidModel; +import net.minecraft.client.model.geom.ModelPart; +import net.minecraft.client.model.geom.PartPose; +import net.minecraft.client.model.geom.builders.*; +import net.minecraft.util.Mth; +import net.minecraft.world.entity.HumanoidArm; +import net.minecraft.world.entity.LivingEntity; + +public class KolossSmallModel extends HumanoidModel +{ + private final ModelPart root; + + public KolossSmallModel(ModelPart root) + { + super(root); + this.root = root; + } + + @Override + protected Iterable headParts() + { + return ImmutableList.of(); + } + + @Override + protected Iterable bodyParts() + { + return ImmutableList.of(this.root); + } + + + public static LayerDefinition createBodyLayer() { + MeshDefinition meshdefinition = new MeshDefinition(); + PartDefinition partdefinition = meshdefinition.getRoot(); + + PartDefinition hat = partdefinition.addOrReplaceChild("hat", CubeListBuilder.create(), PartPose.offset(-10.0F, -6.0784F, 3.8832F)); + + PartDefinition head = partdefinition.addOrReplaceChild("head", CubeListBuilder.create().texOffs(32, 25).addBox(-4.0F, -4.0F, -4.0F, 8.0F, 8.0F, 8.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, -4.5F, 0.0F)); + + PartDefinition body = partdefinition.addOrReplaceChild("body", CubeListBuilder.create().texOffs(0, 11).addBox(-7.5F, -8.25F, -3.0F, 15.0F, 5.0F, 6.0F, new CubeDeformation(0.0F)) + .texOffs(0, 22).addBox(-6.5F, -3.25F, -3.5F, 13.0F, 4.0F, 7.0F, new CubeDeformation(0.0F)) + .texOffs(0, 0).addBox(-7.0F, 0.75F, -4.0F, 14.0F, 3.0F, 8.0F, new CubeDeformation(0.0F)) + .texOffs(0, 35).addBox(-6.0F, 3.75F, -3.0F, 12.0F, 2.0F, 6.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, 7.75F, 0.0F)); + + PartDefinition right_arm = partdefinition.addOrReplaceChild("right_arm", CubeListBuilder.create(), PartPose.offset(-7.3659F, 1.5282F, 0.0F)); + + PartDefinition right_arm_r1 = right_arm.addOrReplaceChild("right_arm_r1", CubeListBuilder.create().texOffs(0, 67).addBox(-0.2929F, -16.2268F, 1.1077F, 1.0F, 1.1875F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 67).addBox(-0.2929F, -16.2268F, -2.0193F, 1.0F, 1.1875F, 3.1875F, new CubeDeformation(0.0F)) + .texOffs(0, 67).addBox(-0.7071F, -16.2268F, -2.0193F, 1.0F, 1.1875F, 3.1875F, new CubeDeformation(0.0F)) + .texOffs(0, 67).addBox(-0.7071F, -16.2268F, 1.1077F, 1.0F, 1.1875F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 67).addBox(-0.2929F, -15.137F, -2.6503F, 1.0F, 1.4375F, 5.5F, new CubeDeformation(0.0F)) + .texOffs(0, 67).addBox(-0.7071F, -15.137F, -2.6503F, 1.0F, 1.4375F, 5.5F, new CubeDeformation(0.0F)) + .texOffs(0, 67).addBox(-0.7071F, -15.137F, 1.7387F, 1.0F, 0.4375F, 2.0F, new CubeDeformation(0.0F)) + .texOffs(0, 67).addBox(-0.2929F, -15.137F, 1.7387F, 1.0F, 0.4375F, 2.0F, new CubeDeformation(0.0F)) + .texOffs(0, 67).addBox(-0.7071F, -15.137F, -3.6503F, 1.0F, 0.4375F, 3.5F, new CubeDeformation(0.0F)) + .texOffs(0, 67).addBox(-0.2929F, -15.137F, -3.6503F, 1.0F, 0.4375F, 3.5F, new CubeDeformation(0.0F)) + .texOffs(2, 105).addBox(-0.7855F, 15.4456F, -1.324F, 1.5F, 0.375F, 1.125F, new CubeDeformation(0.0F)) + .texOffs(2, 105).addBox(-0.7855F, 15.4456F, 0.199F, 1.5F, 0.375F, 1.125F, new CubeDeformation(0.0F)) + .texOffs(2, 105).addBox(-1.3595F, 15.4456F, -0.75F, 2.625F, 0.375F, 1.5F, new CubeDeformation(0.0F)) + .texOffs(2, 105).addBox(0.1635F, 15.4456F, -0.75F, 1.125F, 0.375F, 1.5F, new CubeDeformation(0.0F)) + .texOffs(51, 100).addBox(-0.625F, 8.0598F, -0.75F, 1.25F, 6.0F, 1.5F, new CubeDeformation(0.0F)) + .texOffs(0, 67).addBox(-0.2929F, -13.8152F, -2.5F, 1.0F, 20.0F, 5.0F, new CubeDeformation(0.0F)) + .texOffs(41, 66).addBox(-1.5F, 6.8603F, -1.7074F, 3.0F, 0.25F, 4.75F, new CubeDeformation(0.0F)) + .texOffs(41, 66).addBox(-1.5F, 6.8111F, -1.1935F, 3.0F, 1.25F, 3.0625F, new CubeDeformation(0.0F)) + .texOffs(41, 66).addBox(-1.5F, 6.8111F, -1.869F, 3.0F, 1.25F, 0.8125F, new CubeDeformation(0.0F)) + .texOffs(0, 67).addBox(-0.7071F, -13.8152F, -2.5F, 1.0F, 20.0F, 5.0F, new CubeDeformation(0.0F)) + .texOffs(41, 66).addBox(-1.5F, 5.9713F, -3.5F, 3.0F, 1.0F, 7.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-3.1966F, 9.287F, -11.0F, 1.5708F, 0.0F, 0.0F)); + + PartDefinition right_arm_r2 = right_arm.addOrReplaceChild("right_arm_r2", CubeListBuilder.create().texOffs(0, 67).addBox(-0.7071F, -13.2846F, 8.1224F, 1.0F, 0.8125F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 67).addBox(-0.2929F, -13.2846F, 8.1224F, 1.0F, 0.8125F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(41, 66).addBox(-1.5F, 6.7717F, -4.3785F, 3.0F, 0.25F, 2.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-3.1966F, 9.287F, -11.0F, 2.3562F, 0.0F, 0.0F)); + + PartDefinition right_arm_r3 = right_arm.addOrReplaceChild("right_arm_r3", CubeListBuilder.create().texOffs(0, 67).addBox(-0.7071F, -15.7644F, 3.3442F, 1.0F, 1.1875F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 67).addBox(-0.2929F, -15.7644F, 3.3442F, 1.0F, 1.1875F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 67).addBox(-0.2929F, -14.9775F, 2.2529F, 1.0F, 4.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 67).addBox(-0.7071F, -14.9775F, 2.2529F, 1.0F, 4.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(2, 105).addBox(-0.7855F, 13.2765F, -5.4375F, 1.5F, 1.5F, 0.75F, new CubeDeformation(0.0F)) + .texOffs(41, 66).addBox(-1.5F, 7.5301F, -0.4342F, 3.0F, 0.25F, 1.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-3.1966F, 9.287F, -11.0F, 1.9635F, 0.0F, 0.0F)); + + PartDefinition right_arm_r4 = right_arm.addOrReplaceChild("right_arm_r4", CubeListBuilder.create().texOffs(0, 67).addBox(-0.2929F, -15.7982F, -4.2625F, 1.0F, 1.1875F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 67).addBox(-0.7071F, -15.7982F, -4.2625F, 1.0F, 1.1875F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 67).addBox(-0.2929F, -15.0113F, -3.1712F, 1.0F, 4.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 67).addBox(-0.7071F, -15.0113F, -3.1712F, 1.0F, 4.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(2, 105).addBox(-0.7855F, 13.2765F, 4.6875F, 1.5F, 1.5F, 0.75F, new CubeDeformation(0.0F)) + .texOffs(41, 66).addBox(-1.5F, 7.5301F, -0.5658F, 3.0F, 0.25F, 1.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-3.1966F, 9.287F, -11.0F, 1.1781F, 0.0F, 0.0F)); + + PartDefinition right_arm_r5 = right_arm.addOrReplaceChild("right_arm_r5", CubeListBuilder.create().texOffs(0, 67).addBox(-0.2929F, -13.3471F, -9.0599F, 1.0F, 1.0625F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 67).addBox(-0.7071F, -13.3471F, -9.0599F, 1.0F, 1.0625F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(41, 66).addBox(-1.5F, 6.2717F, 2.3785F, 3.0F, 0.5F, 2.0F, new CubeDeformation(0.0F)) + .texOffs(41, 66).addBox(-1.5F, 2.3785F, 6.2717F, 3.0F, 2.0F, 0.5F, new CubeDeformation(0.0F)) + .texOffs(41, 66).addBox(-1.5F, 6.7717F, 2.3785F, 3.0F, 0.25F, 2.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-3.1966F, 9.287F, -11.0F, 0.7854F, 0.0F, 0.0F)); + + PartDefinition right_arm_r6 = right_arm.addOrReplaceChild("right_arm_r6", CubeListBuilder.create().texOffs(2, 105).addBox(-5.4703F, 13.263F, -0.75F, 0.75F, 1.5F, 1.5F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-3.1966F, 9.287F, -11.0F, 1.5708F, 0.3927F, 0.0F)); + + PartDefinition right_arm_r7 = right_arm.addOrReplaceChild("right_arm_r7", CubeListBuilder.create().texOffs(2, 105).addBox(4.6547F, 13.2901F, -0.75F, 0.75F, 1.5F, 1.5F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-3.1966F, 9.287F, -11.0F, 1.5708F, -0.3927F, 0.0F)); + + PartDefinition right_arm_r8 = right_arm.addOrReplaceChild("right_arm_r8", CubeListBuilder.create().texOffs(0, 67).addBox(-2.2678F, -14.8152F, 1.2678F, 1.0F, 21.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 67).addBox(1.2678F, -14.8152F, -2.2678F, 1.0F, 21.0F, 1.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-3.1966F, 9.287F, -11.0F, 1.5708F, 0.0F, 0.7854F)); + + PartDefinition right_arm_r9 = right_arm.addOrReplaceChild("right_arm_r9", CubeListBuilder.create().texOffs(0, 43).addBox(2.1875F, -6.0F, -2.5F, 4.0F, 10.0F, 5.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-6.7591F, 5.9718F, 0.0F, 0.0F, 0.0F, 0.2182F)); + + PartDefinition right_arm_r10 = right_arm.addOrReplaceChild("right_arm_r10", CubeListBuilder.create().texOffs(12, 52).addBox(-2.0F, -2.5F, -3.0F, 4.0F, 5.0F, 6.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-1.5456F, 0.0982F, 0.0F, 0.0F, 0.0F, 0.2182F)); + + PartDefinition left_arm = partdefinition.addOrReplaceChild("left_arm", CubeListBuilder.create(), PartPose.offset(7.3354F, 1.535F, 0.0F)); + + PartDefinition left_arm_r1 = left_arm.addOrReplaceChild("left_arm_r1", CubeListBuilder.create().texOffs(56, 16).addBox(-2.0F, -2.5F, -3.0F, 4.0F, 5.0F, 6.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(1.5761F, 0.0914F, 0.0F, 0.0F, 0.0F, -0.2182F)); + + PartDefinition left_arm_r2 = left_arm.addOrReplaceChild("left_arm_r2", CubeListBuilder.create().texOffs(51, 41).addBox(-6.25F, -6.0F, -2.5F, 4.0F, 10.0F, 5.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(6.7896F, 5.965F, 0.0F, 0.0F, 0.0F, -0.2182F)); + + PartDefinition right_leg = partdefinition.addOrReplaceChild("right_leg", CubeListBuilder.create().texOffs(31, 41).addBox(-2.5F, -0.5F, -2.5F, 5.0F, 11.0F, 5.0F, new CubeDeformation(0.0F)), PartPose.offset(-3.0F, 13.5F, 0.0F)); + + PartDefinition left_leg = partdefinition.addOrReplaceChild("left_leg", CubeListBuilder.create().texOffs(42, 6).addBox(-2.5F, -0.5F, -2.5F, 5.0F, 11.0F, 5.0F, new CubeDeformation(0.0F)), PartPose.offset(3.25F, 13.5F, 0.0F)); + + PartDefinition right_arm2 = partdefinition.addOrReplaceChild("right_arm2", CubeListBuilder.create(), PartPose.offset(-9.1077F, -6.0991F, 8.2071F)); + + return LayerDefinition.create(meshdefinition, 128, 128); + } + + + @Override + public void setupAnim(T pEntity, float pLimbSwing, float pLimbSwingAmount, float pAgeInTicks, float pNetHeadYaw, float pHeadPitch) + { + this.head.yRot = pNetHeadYaw * ((float) Math.PI / 180F); + this.head.xRot = pHeadPitch * ((float) Math.PI / 180F); + this.rightLeg.xRot = -1.5F * Mth.triangleWave(pLimbSwing, 13.0F) * pLimbSwingAmount; + this.leftLeg.xRot = 1.5F * Mth.triangleWave(pLimbSwing, 13.0F) * pLimbSwingAmount; + this.rightLeg.yRot = 0.0F; + this.leftLeg.yRot = 0.0F; + } + + @Override + public void prepareMobModel(T pEntity, float pLimbSwing, float pLimbSwingAmount, float pPartialTick) + { + float i = pEntity.getAttackAnim(pPartialTick); + if (i > 0) + { + this.rightArm.xRot = -2.0F + 1.5F * Mth.triangleWave(i - pPartialTick, 10.0F); + this.leftArm.xRot = -2.0F + 1.5F * Mth.triangleWave(i - pPartialTick, 10.0F); + } + else + { + this.rightArm.xRot = (-0.2F + 1.5F * Mth.triangleWave(pLimbSwing, 13.0F)) * pLimbSwingAmount; + this.leftArm.xRot = (-0.2F - 1.5F * Mth.triangleWave(pLimbSwing, 13.0F)) * pLimbSwingAmount; + } + } + + @Override + public void translateToHand(HumanoidArm pSide, PoseStack pPoseStack) + { + float f = pSide == HumanoidArm.RIGHT ? 2.0F : -2.0F; + ModelPart modelpart = this.getArm(pSide); + modelpart.x -= 4; + modelpart.y += 4; + modelpart.translateAndRotate(pPoseStack); + modelpart.x += 4; + modelpart.y -= 4; + + } +} \ No newline at end of file diff --git a/src/hemalurgy/java/leaf/cosmere/hemalurgy/client/render/model/SpikeModel.java b/src/hemalurgy/java/leaf/cosmere/hemalurgy/client/render/model/SpikeModel.java new file mode 100644 index 000000000..fbd1af770 --- /dev/null +++ b/src/hemalurgy/java/leaf/cosmere/hemalurgy/client/render/model/SpikeModel.java @@ -0,0 +1,722 @@ +/* + * File updated ~ 11 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.hemalurgy.client.render.model; + +import com.google.common.collect.ImmutableList; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import leaf.cosmere.api.IHasMetalType; +import leaf.cosmere.api.helpers.CompoundNBTHelper; +import leaf.cosmere.common.Cosmere; +import leaf.cosmere.common.cap.entity.SpiritwebCapability; +import net.minecraft.client.model.HumanoidModel; +import net.minecraft.client.model.geom.ModelPart; +import net.minecraft.client.model.geom.PartPose; +import net.minecraft.client.model.geom.builders.*; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.entity.ItemRenderer; +import net.minecraft.client.renderer.texture.OverlayTexture; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.item.ItemStack; +import top.theillusivec4.curios.api.SlotContext; + +import javax.annotation.Nonnull; +import java.awt.*; + +public class SpikeModel extends HumanoidModel +{ + private static final ResourceLocation TEXTURE = Cosmere.rl("textures/block/metal_block.png"); + + // Body Parts + private static final String headID = "head"; + private static final String bodyID = "body"; + private static final String leftArmID = "left_arm"; + private static final String rightArmID = "right_arm"; + private static final String leftLegID = "left_leg"; + private static final String rightLegID = "right_leg"; + + // Categories + private static final String eyeRootID = "eyeRoot"; + private static final String eyesID = "eyes"; + private static final String linchpinID = "linchpin"; + private static final String physicalID = "physical"; + private static final String mentalID = "mental"; + private static final String spiritualID = "spiritual"; + private static final String temporalID = "temporal"; + + // Model Parts + private final ModelPart root; + private final ModelPart eyeRoot; + private final ModelPart eyeLeftFront; + private final ModelPart eyeRightFront; + private final ModelPart eyeLeftBack; + private final ModelPart eyeRightBack; + + private final ModelPart linchpin; + + private final ModelPart upperBack; + private final ModelPart upperMiddleBack; + private final ModelPart lowerMiddleBack; + private final ModelPart lowerBack; + + private final ModelPart upperChest; + private final ModelPart lowerChest; + + private final ModelPart rightShoulderTop; + private final ModelPart leftShoulderTop; + private final ModelPart rightShoulderSide; + private final ModelPart leftShoulderSide; + private final ModelPart rightShoulderBack; + private final ModelPart leftShoulderBack; + + private final ModelPart ribLeftTop; + private final ModelPart ribLeftTopMiddle; + private final ModelPart ribLeftBottomMiddle; + private final ModelPart ribLeftBottom; + private final ModelPart ribRightTop; + private final ModelPart ribRightTopMiddle; + private final ModelPart ribRightBottomMiddle; + private final ModelPart ribRightBottom; + + private final ModelPart rightArmUpper; + private final ModelPart rightArmUpperBack; + private final ModelPart rightArmMiddle; + private final ModelPart rightArmLower; + + private final ModelPart leftArmUpper; + private final ModelPart leftArmUpperBack; + private final ModelPart leftArmMiddle; + private final ModelPart leftArmLower; + + private final ModelPart rightHand; + private final ModelPart leftHand; + + private final ModelPart rightLegUpper; + private final ModelPart rightLegUpperMiddle; + private final ModelPart rightLegLowerMiddle; + private final ModelPart rightLegLower; + + private final ModelPart leftLegUpper; + private final ModelPart leftLegUpperMiddle; + private final ModelPart leftLegLowerMiddle; + private final ModelPart leftLegLower; + + public SpikeModel(ModelPart part) + { + super(part, RenderType::entityCutoutNoCull); + this.root = part; + + ModelPart find = this.root.getChild(headID); + eyeRoot = find.getChild(eyeRootID); + eyeLeftFront = eyeRoot.getChild("left_eye_front"); + eyeRightFront = eyeRoot.getChild("right_eye_front"); + eyeLeftBack = eyeRoot.getChild("left_eye_back"); + eyeRightBack = eyeRoot.getChild("right_eye_back"); + + find = part.getChild(bodyID); + linchpin = find.getChild("linchpin"); + upperBack = find.getChild("upper_back"); + upperMiddleBack = find.getChild("upper_middle_back"); + lowerMiddleBack = find.getChild("lower_middle_back"); + lowerBack = find.getChild("lower_back"); + + upperChest = find.getChild("upper_chest"); + lowerChest = find.getChild("lower_chest"); + + ribLeftTop = find.getChild("rib_left_top"); + ribLeftTopMiddle = find.getChild("rib_left_top_middle"); + ribLeftBottomMiddle = find.getChild("rib_left_bottom_middle"); + ribLeftBottom = find.getChild("rib_left_bottom"); + ribRightTop = find.getChild("rib_right_top"); + ribRightTopMiddle = find.getChild("rib_right_top_middle"); + ribRightBottomMiddle = find.getChild("rib_right_bottom_middle"); + ribRightBottom = find.getChild("rib_right_bottom"); + + find = part.getChild(rightArmID); + rightShoulderTop = find.getChild("shoulder_top"); + rightShoulderSide = find.getChild("shoulder_side"); + rightShoulderBack = find.getChild("shoulder_back"); + + rightArmUpper = find.getChild("upper"); + rightArmUpperBack = find.getChild("back"); + rightArmMiddle = find.getChild("middle"); + rightArmLower = find.getChild("lower"); + + rightHand = find.getChild("hand"); + + find = part.getChild(leftArmID); + leftShoulderTop = find.getChild("shoulder_top"); + leftShoulderSide = find.getChild("shoulder_side"); + leftShoulderBack = find.getChild("shoulder_back"); + + leftArmUpper = find.getChild("upper"); + leftArmUpperBack = find.getChild("back"); + leftArmMiddle = find.getChild("middle"); + leftArmLower = find.getChild("lower"); + + leftHand = find.getChild("hand"); + + find = part.getChild(rightLegID); + rightLegUpper = find.getChild("upper"); + rightLegUpperMiddle = find.getChild("upper_middle"); + rightLegLowerMiddle = find.getChild("lower_middle"); + rightLegLower = find.getChild("lower"); + + leftLegUpper = find.getChild("upper"); + leftLegUpperMiddle = find.getChild("upper_middle"); + leftLegLowerMiddle = find.getChild("lower_middle"); + leftLegLower = find.getChild("lower"); + } + + public static LayerDefinition createLayer() + { + CubeDeformation cube = new CubeDeformation(0.4F); + MeshDefinition mesh = HumanoidModel.createMesh(cube, 0.0F); + PartDefinition part = mesh.getRoot(); + + + final PartDefinition head = part.addOrReplaceChild( + headID, + CubeListBuilder.create(), + PartPose.ZERO + ); + final PartDefinition eyeRoot = head.addOrReplaceChild( + eyeRootID, + CubeListBuilder.create(), + PartPose.ZERO + ); + + eyeRoot.addOrReplaceChild( + "right_eye_front", + CubeListBuilder.create() + .texOffs(0, 0) + .addBox(-3.0F, -3.0F, -4.25F, 2.0F, 2.0F, 5, cube), + PartPose.ZERO); + + eyeRoot.addOrReplaceChild( + "right_eye_back", + CubeListBuilder.create() + .texOffs(0, 0) + .addBox(-2.25F, -2.25F, 3.0F, 0.5F, 0.5F, 1, cube), + PartPose.ZERO); + + eyeRoot.addOrReplaceChild( + "left_eye_front", + CubeListBuilder.create() + .texOffs(0, 0) + .addBox(1.0F, -3.0F, -4.25F, 2.0F, 2.0F, 5, cube), + PartPose.ZERO); + + eyeRoot.addOrReplaceChild( + "left_eye_back", + CubeListBuilder.create() + .texOffs(0, 0) + .addBox(1.75F, -2.25F, 3.0F, 0.5F, 0.5F, 1, cube), + PartPose.ZERO); + + + final PartDefinition body = part.addOrReplaceChild( + bodyID, + CubeListBuilder.create(), + PartPose.ZERO + ); + + body.addOrReplaceChild( + "linchpin", + CubeListBuilder.create() + .texOffs(0, 0) + .addBox(-0.25F, 1.0F, 1.5F, 0.5F, 0.5F, 0.5F, cube), + PartPose.ZERO); + + body.addOrReplaceChild( + "upper_back", + CubeListBuilder.create() + .texOffs(0, 0) + .addBox(-0.25F, 3.5F, 1.5F, 0.5F, 0.5F, 0.5F, cube), + PartPose.ZERO); + + body.addOrReplaceChild( + "upper_middle_back", + CubeListBuilder.create() + .texOffs(0, 0) + .addBox(-0.25F, 5.5F, 1.5F, 0.5F, 0.5F, 0.5F, cube), + PartPose.ZERO); + + body.addOrReplaceChild( + "lower_middle_back", + CubeListBuilder.create() + .texOffs(0, 0) + .addBox(-0.25F, 7.5F, 1.5F, 0.5F, 0.5F, 0.5F, cube), + PartPose.ZERO); + + body.addOrReplaceChild( + "lower_back", + CubeListBuilder.create() + .texOffs(0, 0) + .addBox(-0.25F, 9.5F, 1.5F, 0.5F, 0.5F, 0.5F, cube), + PartPose.ZERO); + + body.addOrReplaceChild( + "upper_chest", + CubeListBuilder.create() + .texOffs(0, 0) + .addBox(-0.25F, 5.5F, -2.03125F, 0.5F, 0.5F, 0.5F, cube), + PartPose.ZERO); + + body.addOrReplaceChild( + "lower_chest", + CubeListBuilder.create() + .texOffs(0, 0) + .addBox(-0.25F, 9.5F, -2.03125F, 0.5F, 0.5F, 0.5F, cube), + PartPose.ZERO); + + body.addOrReplaceChild( + "rib_right_top", + CubeListBuilder.create() + .texOffs(0, 0) + .addBox(-2.5F, 4.0F, -2.03125F, 0.5F, 0.5F, 4.0625F, cube), + PartPose.ZERO); + + body.addOrReplaceChild( + "rib_right_top_middle", + CubeListBuilder.create() + .texOffs(0, 0) + .addBox(-2.5F, 6.0F, -2.03125F, 0.5F, 0.5F, 4.0625F, cube), + PartPose.ZERO); + + body.addOrReplaceChild( + "rib_right_bottom_middle", + CubeListBuilder.create() + .texOffs(0, 0) + .addBox(-2.5F, 8.0F, -2.03125F, 0.5F, 0.5F, 4.0625F, cube), + PartPose.ZERO); + + body.addOrReplaceChild( + "rib_right_bottom", + CubeListBuilder.create() + .texOffs(0, 0) + .addBox(-2.5F, 10.0F, -2.03125F, 0.5F, 0.5F, 4.0625F, cube), + PartPose.ZERO); + + body.addOrReplaceChild( + "rib_left_top", + CubeListBuilder.create() + .texOffs(0, 0) + .addBox(2F, 4.0F, -2.03125F, 0.5F, 0.5F, 4.0625F, cube), + PartPose.ZERO); + + body.addOrReplaceChild( + "rib_left_top_middle", + CubeListBuilder.create() + .texOffs(0, 0) + .addBox(2F, 6.0F, -2.03125F, 0.5F, 0.5F, 4.0625F, cube), + PartPose.ZERO); + + body.addOrReplaceChild( + "rib_left_bottom_middle", + CubeListBuilder.create() + .texOffs(0, 0) + .addBox(2F, 8.0F, -2.03125F, 0.5F, 0.5F, 4.0625F, cube), + PartPose.ZERO); + + body.addOrReplaceChild( + "rib_left_bottom", + CubeListBuilder.create() + .texOffs(0, 0) + .addBox(2F, 10.0F, -2.03125F, 0.5F, 0.5F, 4.0625F, cube), + PartPose.ZERO); + + final PartDefinition rightArm = part.addOrReplaceChild( + rightArmID, + CubeListBuilder.create(), + PartPose.ZERO + ); + + rightArm.addOrReplaceChild("shoulder_top", + CubeListBuilder.create() + .texOffs(0, 0) + .addBox(-1.25F, -2.0F, -0.25F, 0.5F, 1.0F, 0.5F, cube), + PartPose.ZERO); + + rightArm.addOrReplaceChild("shoulder_side", + CubeListBuilder.create() + .texOffs(0, 0) + .addBox(-3.0F, 0.0F, -0.25F, 2.0F, 0.5F, 0.5F, cube), + PartPose.ZERO); + + rightArm.addOrReplaceChild("shoulder_back", + CubeListBuilder.create() + .texOffs(0, 0) + .addBox(-1.25F, 0.0F, 0.0625F, 0.5F, 0.5F, 2.0F, cube), + PartPose.ZERO); + + rightArm.addOrReplaceChild("upper", + CubeListBuilder.create() + .texOffs(0, 0) + .addBox(-3.0F, 2.0F, -0.25F, 2.0F, 0.5F, 0.5F, cube), + PartPose.ZERO); + + rightArm.addOrReplaceChild("back", + CubeListBuilder.create() + .texOffs(0, 0) + .addBox(-1.25F, 2.0F, 0.0625F, 0.5F, 0.5F, 2.0F, cube), + PartPose.ZERO); + + rightArm.addOrReplaceChild("middle", + CubeListBuilder.create() + .texOffs(0, 0) + .addBox(-3.0F, 4.0F, -0.25F, 2.0F, 0.5F, 0.5F, cube), + PartPose.ZERO); + + rightArm.addOrReplaceChild("lower", + CubeListBuilder.create() + .texOffs(0, 0) + .addBox(-3.0F, 6.0F, -0.25F, 2.0F, 0.5F, 0.5F, cube), + PartPose.ZERO); + + rightArm.addOrReplaceChild("hand", + CubeListBuilder.create() + .texOffs(0, 0) + .addBox(-3.0F, 8.0F, -0.25F, 2.0F, 0.5F, 0.5F, cube), + PartPose.ZERO); + + + final PartDefinition leftArm = part.addOrReplaceChild( + leftArmID, + CubeListBuilder.create().mirror(), + PartPose.ZERO + ); + + leftArm.addOrReplaceChild("shoulder_top", + CubeListBuilder.create() + .texOffs(0, 0) + .addBox(0.75F, -2.0F, -0.25F, 0.5F, 1.0F, 0.5F, cube), + PartPose.ZERO); + + leftArm.addOrReplaceChild("shoulder_side", + CubeListBuilder.create() + .texOffs(0, 0) + .addBox(1.0F, 0.0F, -0.25F, 2.0F, 0.5F, 0.5F, cube), + PartPose.ZERO); + + leftArm.addOrReplaceChild("shoulder_back", + CubeListBuilder.create() + .texOffs(0, 0) + .addBox(0.75F, 0.0F, 0.0625F, 0.5F, 0.5F, 2.0F, cube), + PartPose.ZERO); + + leftArm.addOrReplaceChild("upper", + CubeListBuilder.create() + .texOffs(0, 0) + .addBox(1.0F, 2.0F, -0.25F, 2.0F, 0.5F, 0.5F, cube), + PartPose.ZERO); + + leftArm.addOrReplaceChild("back", + CubeListBuilder.create() + .texOffs(0, 0) + .addBox(0.75F, 2.0F, 0.0625F, 0.5F, 0.5F, 2.0F, cube), + PartPose.ZERO); + + leftArm.addOrReplaceChild("middle", + CubeListBuilder.create() + .texOffs(0, 0) + .addBox(1.0F, 4.0F, -0.25F, 2.0F, 0.5F, 0.5F, cube), + PartPose.ZERO); + + leftArm.addOrReplaceChild("lower", + CubeListBuilder.create() + .texOffs(0, 0) + .addBox(1.0F, 6.0F, -0.25F, 2.0F, 0.5F, 0.5F, cube), + PartPose.ZERO); + + leftArm.addOrReplaceChild("hand", + CubeListBuilder.create() + .texOffs(0, 0) + .addBox(1.0F, 8.0F, -0.25F, 2.0F, 0.5F, 0.5F, cube), + PartPose.ZERO); + + final PartDefinition rightLeg = part.addOrReplaceChild( + rightLegID, + CubeListBuilder.create(), + PartPose.ZERO + ); + + rightLeg.addOrReplaceChild("upper", + CubeListBuilder.create() + .texOffs(0, 0) + .addBox(-0.25F, 2.0F, -2.03125F, 0.5F, 0.5F, 4.0625F, cube), + PartPose.ZERO); + + rightLeg.addOrReplaceChild("upper_middle", + CubeListBuilder.create() + .texOffs(0, 0) + .addBox(-0.25F, 4.0F, -2.03125F, 0.5F, 0.5F, 4.0625F, cube), + PartPose.ZERO); + + rightLeg.addOrReplaceChild("lower_middle", + CubeListBuilder.create() + .texOffs(0, 0) + .addBox(-0.25F, 6.0F, -2.03125F, 0.5F, 0.5F, 4.0625F, cube), + PartPose.ZERO); + + rightLeg.addOrReplaceChild("lower", + CubeListBuilder.create() + .texOffs(0, 0) + .addBox(-0.25F, 8.0F, -2.03125F, 0.5F, 0.5F, 4.0625F, cube), + PartPose.ZERO); + + + final PartDefinition leftLeg = part.addOrReplaceChild( + leftLegID, + CubeListBuilder.create().mirror(), + PartPose.ZERO + ); + + leftLeg.addOrReplaceChild("upper", + CubeListBuilder.create() + .texOffs(0, 0) + .addBox(-0.25F, 2.0F, -2.03125F, 0.5F, 0.5F, 4.0625F, cube), + PartPose.ZERO); + + leftLeg.addOrReplaceChild("upper_middle", + CubeListBuilder.create() + .texOffs(0, 0) + .addBox(-0.25F, 4.0F, -2.03125F, 0.5F, 0.5F, 4.0625F, cube), + PartPose.ZERO); + + leftLeg.addOrReplaceChild("lower_middle", + CubeListBuilder.create() + .texOffs(0, 0) + .addBox(-0.25F, 6.0F, -2.03125F, 0.5F, 0.5F, 4.0625F, cube), + PartPose.ZERO); + + leftLeg.addOrReplaceChild("lower", + CubeListBuilder.create() + .texOffs(0, 0) + .addBox(-0.25F, 8.0F, -2.03125F, 0.5F, 0.5F, 4.0625F, cube), + PartPose.ZERO); + + return LayerDefinition.create(mesh, 16, 16); + } + + @Override + @Nonnull + protected Iterable headParts() + { + return ImmutableList.of(this.head); + } + + @Override + @Nonnull + protected Iterable bodyParts() + { + return ImmutableList.of( + this.body, + this.rightArm, + this.leftArm, + this.rightLeg, + this.leftLeg, + this.hat); + } + + public void render(ItemStack stack, SlotContext slotContext, PoseStack matrixStack, MultiBufferSource buffer, int light) + { + final int slotIndex = slotContext.index() + 1;//adding 1 for the is left ha + final boolean leftHandSide = slotIndex % 2 != 0; + + + ModelPart modelPartToRender = null; + switch (slotContext.identifier()) + { + //iron, steel, tin, pewter + case eyesID: + //left + eyeLeftFront.visible = leftHandSide; + eyeLeftBack.visible = leftHandSide; + //right + eyeRightFront.visible = !leftHandSide; + eyeRightBack.visible = !leftHandSide; + + SpiritwebCapability.get(slotContext.entity()).ifPresent((data) -> + { + eyeRoot.y = CompoundNBTHelper.getInt(data.getCompoundTag(), "eye_height", 0); + }); + + //we can call render on the head directly since we have made other spike not visible. + //we do this so that we can use the eye height and have it follow proper head rotations + modelPartToRender = head; + + break; + //iron, steel, tin, pewter, god metals, gold + case linchpinID: + modelPartToRender = linchpin; + modelPartToRender.copyFrom(this.root.getChild(bodyID)); + break; + //iron, steel, tin, pewter + case physicalID: + switch (slotIndex)//linchpin and eyes handle the rest of the physcical spike locations + { + case 1, 2 -> + { + modelPartToRender = leftHandSide ? upperChest : lowerChest; + modelPartToRender.copyFrom(this.root.getChild(bodyID)); + } + case 3, 4 -> + { + modelPartToRender = leftHandSide ? ribLeftTop : ribRightTop; + modelPartToRender.copyFrom(this.root.getChild(bodyID)); + } + case 5, 6 -> + { + modelPartToRender = leftHandSide ? leftShoulderTop : rightShoulderTop; + modelPartToRender.copyFrom(this.root.getChild(leftHandSide ? leftArmID : rightArmID)); + } + case 7, 8 -> + { + modelPartToRender = leftHandSide ? leftLegUpper : rightLegUpper; + modelPartToRender.copyFrom(this.root.getChild(leftHandSide ? leftLegID : rightLegID)); + } + default -> modelPartToRender = null; + } + break; + + //zinc,brass,copper,bronze + case mentalID: + switch (slotIndex) + { + case 1, 2 -> + { + modelPartToRender = leftHandSide ? upperBack : upperMiddleBack; + modelPartToRender.copyFrom(this.root.getChild(bodyID)); + } + case 3, 4 -> + { + modelPartToRender = leftHandSide ? lowerMiddleBack : lowerBack; + modelPartToRender.copyFrom(this.root.getChild(bodyID)); + } + case 5, 6 -> + { + modelPartToRender = leftHandSide ? ribLeftTopMiddle : ribRightTopMiddle; + modelPartToRender.copyFrom(this.root.getChild(bodyID)); + } + case 7, 8 -> + { + modelPartToRender = leftHandSide ? leftArmUpper : rightArmUpper; + modelPartToRender.copyFrom(this.root.getChild(leftHandSide ? leftArmID : rightArmID)); + } + case 9, 10 -> + { + modelPartToRender = leftHandSide ? leftLegUpperMiddle : rightLegUpperMiddle; + modelPartToRender.copyFrom(this.root.getChild(leftHandSide ? leftLegID : rightLegID)); + } + default -> modelPartToRender = null; + } + break; + + //chromium, nicrosil, aluminum, duralumin + case spiritualID: + switch (slotIndex) + { + case 1, 2 -> + { + modelPartToRender = leftHandSide ? ribLeftBottom : ribRightBottom; + modelPartToRender.copyFrom(this.root.getChild(bodyID)); + } + case 3, 4 -> + { + modelPartToRender = leftHandSide ? leftShoulderSide : rightShoulderSide; + modelPartToRender.copyFrom(this.root.getChild(leftHandSide ? leftArmID : rightArmID)); + } + //need more spike locations? spiritual doesn't steal powers, but it can steal luck + + default -> modelPartToRender = null; + } + break; + + //cadmium, bendalloy, gold, electrum + case temporalID: + switch (slotIndex) + { + case 1, 2 -> + { + modelPartToRender = leftHandSide ? ribLeftBottomMiddle : ribRightBottomMiddle; + modelPartToRender.copyFrom(this.root.getChild(bodyID)); + } + case 3, 4 -> + { + modelPartToRender = leftHandSide ? leftShoulderBack : rightShoulderBack; + modelPartToRender.copyFrom(this.root.getChild(leftHandSide ? leftArmID : rightArmID)); + } + case 5, 6 -> + { + modelPartToRender = leftHandSide ? leftArmUpperBack : rightArmUpperBack; + modelPartToRender.copyFrom(this.root.getChild(leftHandSide ? leftArmID : rightArmID)); + } + case 7, 8 -> + { + modelPartToRender = leftHandSide ? leftArmMiddle : rightArmMiddle; + modelPartToRender.copyFrom(this.root.getChild(leftHandSide ? leftLegID : rightLegID)); + } + case 9, 10 -> + { + modelPartToRender = leftHandSide ? leftHand : rightHand; + modelPartToRender.copyFrom(this.root.getChild(leftHandSide ? leftArmID : rightArmID)); + } + case 11, 12 -> + { + modelPartToRender = leftHandSide ? leftLegLowerMiddle : rightLegLowerMiddle; + modelPartToRender.copyFrom(this.root.getChild(leftHandSide ? leftLegID : rightLegID)); + } + case 13, 14 -> + { + modelPartToRender = leftHandSide ? leftArmLower : rightArmLower; + modelPartToRender.copyFrom(this.root.getChild(leftHandSide ? leftArmID : rightArmID)); + } + case 15, 16 -> + { + modelPartToRender = leftHandSide ? leftLegLower : rightLegLower; + modelPartToRender.copyFrom(this.root.getChild(leftHandSide ? leftLegID : rightLegID)); + } + default -> modelPartToRender = null; + } + break; + } + + if (modelPartToRender == null) + { + return; + } + + IHasMetalType item = (IHasMetalType) stack.getItem(); + + Color color = item.getMetalType().getColor(); + VertexConsumer vertexBuilder = ItemRenderer.getFoilBuffer(buffer, renderType(TEXTURE), false, false); + + + modelPartToRender.render( + matrixStack, + vertexBuilder, + light, + OverlayTexture.NO_OVERLAY, + color.getRed() / 255f, + color.getGreen() / 255f, + color.getBlue() / 255f, + 1); + + /* + //debug only, so a spike will render in all locations + renderToBuffer( + matrixStack, + vertexBuilder, + light, + OverlayTexture.NO_OVERLAY, + color.getRed(), + color.getGreen(), + color.getBlue(), + 1);*/ + } +} diff --git a/src/hemalurgy/java/leaf/cosmere/hemalurgy/client/render/renderer/KolossLargeRenderer.java b/src/hemalurgy/java/leaf/cosmere/hemalurgy/client/render/renderer/KolossLargeRenderer.java new file mode 100644 index 000000000..dba100004 --- /dev/null +++ b/src/hemalurgy/java/leaf/cosmere/hemalurgy/client/render/renderer/KolossLargeRenderer.java @@ -0,0 +1,42 @@ +/* + * File updated ~ 7 - 8 - 2024 ~ Leaf + */ + +package leaf.cosmere.hemalurgy.client.render.renderer; + +import leaf.cosmere.hemalurgy.client.render.HemalurgyLayerDefinitions; +import leaf.cosmere.hemalurgy.client.render.model.KolossLargeModel; +import leaf.cosmere.hemalurgy.common.Hemalurgy; +import leaf.cosmere.hemalurgy.common.entity.Koloss; +import net.minecraft.client.renderer.entity.EntityRendererProvider; +import net.minecraft.client.renderer.entity.MobRenderer; +import net.minecraft.resources.ResourceLocation; + +public class KolossLargeRenderer extends MobRenderer> +{ + private static final ResourceLocation TEXTURE = Hemalurgy.rl("textures/entity/koloss/koloss_large.png"); + + public KolossLargeRenderer(EntityRendererProvider.Context context) + { + super(context, new KolossLargeModel<>(context.bakeLayer(HemalurgyLayerDefinitions.KOLOSS_LARGE)), 1.0F); + + /*this.addLayer(new KolossItemInHandLayer<>(this, context.getItemInHandRenderer()) + { + public void render(PoseStack poseStack, MultiBufferSource pBuffer, int pPackedLight, Koloss pLivingEntity, float pLimbSwing, float pLimbSwingAmount, float pPartialTicks, float pAgeInTicks, float pNetHeadYaw, float pHeadPitch) + { + //only show weapon if aggressive? + //if (pLivingEntity.isAggressive()) + { + super.render(poseStack, pBuffer, pPackedLight, pLivingEntity, pLimbSwing, pLimbSwingAmount, pPartialTicks, pAgeInTicks, pNetHeadYaw, pHeadPitch); + } + } + });*/ + + } + + @Override + public ResourceLocation getTextureLocation(Koloss pEntity) + { + return TEXTURE; + } +} diff --git a/src/hemalurgy/java/leaf/cosmere/hemalurgy/client/render/renderer/KolossMediumRenderer.java b/src/hemalurgy/java/leaf/cosmere/hemalurgy/client/render/renderer/KolossMediumRenderer.java new file mode 100644 index 000000000..66d5c0b2e --- /dev/null +++ b/src/hemalurgy/java/leaf/cosmere/hemalurgy/client/render/renderer/KolossMediumRenderer.java @@ -0,0 +1,42 @@ +/* + * File updated ~ 7 - 8 - 2024 ~ Leaf + */ + +package leaf.cosmere.hemalurgy.client.render.renderer; + +import leaf.cosmere.hemalurgy.client.render.HemalurgyLayerDefinitions; +import leaf.cosmere.hemalurgy.client.render.model.KolossMediumModel; +import leaf.cosmere.hemalurgy.common.Hemalurgy; +import leaf.cosmere.hemalurgy.common.entity.Koloss; +import net.minecraft.client.renderer.entity.EntityRendererProvider; +import net.minecraft.client.renderer.entity.MobRenderer; +import net.minecraft.resources.ResourceLocation; + +public class KolossMediumRenderer extends MobRenderer> +{ + private static final ResourceLocation TEXTURE = Hemalurgy.rl("textures/entity/koloss/koloss_medium.png"); + + public KolossMediumRenderer(EntityRendererProvider.Context context) + { + super(context, new KolossMediumModel<>(context.bakeLayer(HemalurgyLayerDefinitions.KOLOSS_MEDIUM)), 1.0F); + + /*this.addLayer(new KolossItemInHandLayer<>(this, context.getItemInHandRenderer()) + { + public void render(PoseStack poseStack, MultiBufferSource pBuffer, int pPackedLight, Koloss pLivingEntity, float pLimbSwing, float pLimbSwingAmount, float pPartialTicks, float pAgeInTicks, float pNetHeadYaw, float pHeadPitch) + { + //only show weapon if aggressive? + //if (pLivingEntity.isAggressive()) + { + super.render(poseStack, pBuffer, pPackedLight, pLivingEntity, pLimbSwing, pLimbSwingAmount, pPartialTicks, pAgeInTicks, pNetHeadYaw, pHeadPitch); + } + } + });*/ + + } + + @Override + public ResourceLocation getTextureLocation(Koloss pEntity) + { + return TEXTURE; + } +} diff --git a/src/hemalurgy/java/leaf/cosmere/hemalurgy/client/render/renderer/KolossSmallRenderer.java b/src/hemalurgy/java/leaf/cosmere/hemalurgy/client/render/renderer/KolossSmallRenderer.java new file mode 100644 index 000000000..d9b028412 --- /dev/null +++ b/src/hemalurgy/java/leaf/cosmere/hemalurgy/client/render/renderer/KolossSmallRenderer.java @@ -0,0 +1,42 @@ +/* + * File updated ~ 7 - 8 - 2024 ~ Leaf + */ + +package leaf.cosmere.hemalurgy.client.render.renderer; + +import leaf.cosmere.hemalurgy.client.render.HemalurgyLayerDefinitions; +import leaf.cosmere.hemalurgy.client.render.model.KolossSmallModel; +import leaf.cosmere.hemalurgy.common.Hemalurgy; +import leaf.cosmere.hemalurgy.common.entity.Koloss; +import net.minecraft.client.renderer.entity.EntityRendererProvider; +import net.minecraft.client.renderer.entity.MobRenderer; +import net.minecraft.resources.ResourceLocation; + +public class KolossSmallRenderer extends MobRenderer> +{ + private static final ResourceLocation TEXTURE = Hemalurgy.rl("textures/entity/koloss/koloss_small.png"); + + public KolossSmallRenderer(EntityRendererProvider.Context context) + { + super(context, new KolossSmallModel<>(context.bakeLayer(HemalurgyLayerDefinitions.KOLOSS_SMALL)), 1.0F); + + /*this.addLayer(new KolossItemInHandLayer<>(this, context.getItemInHandRenderer()) + { + public void render(PoseStack poseStack, MultiBufferSource pBuffer, int pPackedLight, Koloss pLivingEntity, float pLimbSwing, float pLimbSwingAmount, float pPartialTicks, float pAgeInTicks, float pNetHeadYaw, float pHeadPitch) + { + //only show weapon if aggressive? + //if (pLivingEntity.isAggressive()) + { + super.render(poseStack, pBuffer, pPackedLight, pLivingEntity, pLimbSwing, pLimbSwingAmount, pPartialTicks, pAgeInTicks, pNetHeadYaw, pHeadPitch); + } + } + });*/ + + } + + @Override + public ResourceLocation getTextureLocation(Koloss pEntity) + { + return TEXTURE; + } +} diff --git a/src/hemalurgy/java/leaf/cosmere/hemalurgy/client/render/renderer/SpikeRenderer.java b/src/hemalurgy/java/leaf/cosmere/hemalurgy/client/render/renderer/SpikeRenderer.java new file mode 100644 index 000000000..ffcf6d0a2 --- /dev/null +++ b/src/hemalurgy/java/leaf/cosmere/hemalurgy/client/render/renderer/SpikeRenderer.java @@ -0,0 +1,60 @@ +/* + * File updated ~ 7 - 8 - 2023 ~ Leaf + */ + +package leaf.cosmere.hemalurgy.client.render.renderer; + +import com.mojang.blaze3d.vertex.PoseStack; +import leaf.cosmere.hemalurgy.client.render.HemalurgyLayerDefinitions; +import leaf.cosmere.hemalurgy.client.render.model.SpikeModel; +import net.minecraft.client.Minecraft; +import net.minecraft.client.model.EntityModel; +import net.minecraft.client.model.geom.ModelPart; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.entity.RenderLayerParent; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.item.ItemStack; +import top.theillusivec4.curios.api.SlotContext; +import top.theillusivec4.curios.api.client.ICurioRenderer; + +public class SpikeRenderer implements ICurioRenderer +{ + SpikeModel model; + + public SpikeRenderer() + { + final ModelPart modelPart = Minecraft.getInstance().getEntityModels().bakeLayer(HemalurgyLayerDefinitions.SPIKE); + model = new SpikeModel(modelPart); + } + + @Override + public > void render( + ItemStack stack, + SlotContext slotContext, + PoseStack matrixStack, + RenderLayerParent renderLayerParent, + MultiBufferSource renderTypeBuffer, + int light, float limbSwing, + float limbSwingAmount, + float partialTicks, + float ageInTicks, + float netHeadYaw, + float headPitch) + { + LivingEntity entity = slotContext.entity(); + + MobEffectInstance effectInstance = entity.getEffect(MobEffects.INVISIBILITY); + if (effectInstance != null && effectInstance.getDuration() > 0) + { + return; + } + + this.model.prepareMobModel(entity, limbSwing, limbSwingAmount, partialTicks); + this.model.setupAnim(entity, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch); + + ICurioRenderer.followBodyRotations(entity, this.model); + this.model.render(stack, slotContext, matrixStack, renderTypeBuffer, light); + } +} diff --git a/src/hemalurgy/java/leaf/cosmere/hemalurgy/common/Hemalurgy.java b/src/hemalurgy/java/leaf/cosmere/hemalurgy/common/Hemalurgy.java new file mode 100644 index 000000000..c23eab5f0 --- /dev/null +++ b/src/hemalurgy/java/leaf/cosmere/hemalurgy/common/Hemalurgy.java @@ -0,0 +1,105 @@ +/* + * File updated ~ 10 - 8 - 2024 ~ Leaf + */ + +package leaf.cosmere.hemalurgy.common; + +import leaf.cosmere.api.CosmereAPI; +import leaf.cosmere.api.IModModule; +import leaf.cosmere.api.ISpiritwebSubmodule; +import leaf.cosmere.api.Version; +import leaf.cosmere.common.Cosmere; +import leaf.cosmere.common.config.CosmereModConfig; +import leaf.cosmere.hemalurgy.common.capabilities.HemalurgySpiritwebSubmodule; +import leaf.cosmere.hemalurgy.common.config.HemalurgyConfigs; +import leaf.cosmere.hemalurgy.common.registries.*; +import net.minecraft.resources.ResourceLocation; +import net.minecraftforge.eventbus.api.IEventBus; +import net.minecraftforge.fml.ModLoadingContext; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.config.ModConfig; +import net.minecraftforge.fml.event.config.ModConfigEvent; +import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; +import net.minecraftforge.fml.event.lifecycle.InterModEnqueueEvent; +import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; + +@Mod(Hemalurgy.MODID) +public class Hemalurgy implements IModModule +{ + public static final String MODID = "hemalurgy"; + + public static Hemalurgy instance; + + public final Version versionNumber; + + public Hemalurgy() + { + Cosmere.addModule(instance = this); + IEventBus modBus = FMLJavaModLoadingContext.get().getModEventBus(); + + HemalurgyConfigs.registerConfigs(ModLoadingContext.get()); + + modBus.addListener(this::commonSetup); + modBus.addListener(this::onConfigLoad); + modBus.addListener(this::onConfigReload); + modBus.addListener(this::imcQueue); + + HemalurgyAttributes.ATTRIBUTES.register(modBus); + HemalurgyItems.ITEMS.register(modBus); + HemalurgyLootFunctions.LOOT_FUNCTIONS.register(modBus); + HemalurgyEntityTypes.ENTITY_TYPES.register(modBus); + HemalurgyCreativeTabs.CREATIVE_TABS.register(modBus); + + versionNumber = new Version(ModLoadingContext.get().getActiveContainer()); + } + + public static ResourceLocation rl(String path) + { + return new ResourceLocation(Hemalurgy.MODID, path); + } + + private void commonSetup(FMLCommonSetupEvent event) + { + CosmereAPI.logger.info("Cosmere: Hemalurgy module Version {} initializing...", versionNumber); + } + + private void imcQueue(InterModEnqueueEvent event) + { + } + + @Override + public Version getVersion() + { + return versionNumber; + } + + @Override + public String getName() + { + return "Hemalurgy"; + } + + @Override + public ISpiritwebSubmodule makeSubmodule() + { + return new HemalurgySpiritwebSubmodule(); + } + + private void onConfigLoad(ModConfigEvent configEvent) + { + ModConfig config = configEvent.getConfig(); + if (config.getModId().equals(MODID) && config instanceof CosmereModConfig cosmereModConfig) + { + cosmereModConfig.clearCache(); + } + } + + private void onConfigReload(ModConfigEvent.Reloading configEvent) + { + ModConfig config = configEvent.getConfig(); + if (config.getModId().equals(MODID) && config instanceof CosmereModConfig cosmereModConfig) + { + cosmereModConfig.clearCache(); + } + } +} \ No newline at end of file diff --git a/src/hemalurgy/java/leaf/cosmere/hemalurgy/common/capabilities/HemalurgySpiritwebSubmodule.java b/src/hemalurgy/java/leaf/cosmere/hemalurgy/common/capabilities/HemalurgySpiritwebSubmodule.java new file mode 100644 index 000000000..78510dcf4 --- /dev/null +++ b/src/hemalurgy/java/leaf/cosmere/hemalurgy/common/capabilities/HemalurgySpiritwebSubmodule.java @@ -0,0 +1,69 @@ +/* + * File updated ~ 5 - 3 - 2025 ~ Leaf + */ + +package leaf.cosmere.hemalurgy.common.capabilities; + +import leaf.cosmere.api.CosmereAPI; +import leaf.cosmere.api.ISpiritwebSubmodule; +import leaf.cosmere.api.spiritweb.ISpiritweb; +import leaf.cosmere.common.cap.entity.SpiritwebCapability; +import leaf.cosmere.hemalurgy.common.config.HemalurgyConfigs; +import leaf.cosmere.hemalurgy.common.config.HemalurgyServerConfig; +import leaf.cosmere.hemalurgy.common.registries.HemalurgyAttributes; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.world.entity.ai.attributes.AttributeInstance; +import net.minecraft.world.entity.player.Player; + +public class HemalurgySpiritwebSubmodule implements ISpiritwebSubmodule +{ + @Override + public void tickServer(ISpiritweb spiritweb) + { + //check player for spiritweb integrity? + + final int tickToCheck = HemalurgyConfigs.SERVER.SPIRITWEB_INTEGRITY_TICK_CHECK.get(); + if (spiritweb.getLiving().tickCount % tickToCheck == 0) + { + AttributeInstance attributeInstance = spiritweb.getLiving().getAttribute(HemalurgyAttributes.SPIRITWEB_INTEGRITY.get()); + if (attributeInstance != null) + { + int intensity = (int) attributeInstance.getValue(); + if (intensity < HemalurgyAttributes.SPIRITWEB_INTEGRITY.getAttribute().getDefaultValue()) + { + // bloodlust effect? whispers? having hemalurgy at all should probably result in some weird stuff + } + if (intensity < 0) + { + if (spiritweb.getLiving() instanceof Player player) + { + //ideas: + //nausea + //slowness + //darkness + //blindness + //random messages + switch (intensity) + { + default: // illegal? perhaps + case -3: + player.addEffect(new MobEffectInstance(MobEffects.CONFUSION, tickToCheck*2, (intensity*-1)-3, false, false, false)); // confusion = nausea + case -2: + player.addEffect(new MobEffectInstance(MobEffects.DARKNESS, tickToCheck*2, (intensity*-1)-2, false, false, false)); + case -1: + player.addEffect(new MobEffectInstance(MobEffects.BLINDNESS, tickToCheck*2, (intensity*-1)-1, false, false, false)); + break; + } + } + } + } + } + } + + @Override + public void drainInvestiture(ISpiritweb data, double strength) + { + + } +} diff --git a/src/hemalurgy/java/leaf/cosmere/hemalurgy/common/capabilities/world/HemalurgyWorldCapability.java b/src/hemalurgy/java/leaf/cosmere/hemalurgy/common/capabilities/world/HemalurgyWorldCapability.java new file mode 100644 index 000000000..b4af72b92 --- /dev/null +++ b/src/hemalurgy/java/leaf/cosmere/hemalurgy/common/capabilities/world/HemalurgyWorldCapability.java @@ -0,0 +1,79 @@ +/* + * File updated ~ 30 - 7 - 2023 ~ Leaf + */ + +package leaf.cosmere.hemalurgy.common.capabilities.world; + +import com.google.common.collect.ImmutableList; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.server.MinecraftServer; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.level.CustomSpawner; +import net.minecraft.world.level.Level; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.capabilities.CapabilityManager; +import net.minecraftforge.common.capabilities.CapabilityToken; +import net.minecraftforge.common.util.LazyOptional; + +import javax.annotation.Nonnull; +import java.util.List; + +public class HemalurgyWorldCapability implements IHemalurgyWorldCap +{ + //Injection + public static final Capability CAPABILITY = CapabilityManager.get(new CapabilityToken<>() + { + }); + + private final Level level; + private CompoundTag m_nbt = null; + private final List customSpawners; + + public HemalurgyWorldCapability(Level level) + { + this.level = level; + customSpawners = ImmutableList.of(new KolossPatrolSpawner()); + + } + + @Nonnull + public static LazyOptional get(Level level) + { + return level != null ? level.getCapability(HemalurgyWorldCapability.CAPABILITY, null) + : LazyOptional.empty(); + } + + + @Override + public CompoundTag serializeNBT() + { + if (m_nbt == null) + { + m_nbt = new CompoundTag(); + } + + return m_nbt; + } + + @Override + public void deserializeNBT(CompoundTag nbt) + { + m_nbt = nbt; + } + + @Override + public void tick() + { + if (level instanceof ServerLevel serverLevel) + { + final MinecraftServer server = serverLevel.getServer(); + for (CustomSpawner customSpawner : customSpawners) + { + customSpawner.tick( + serverLevel, + server.isSpawningMonsters(), + server.isSpawningAnimals()); + } + } + } +} diff --git a/src/hemalurgy/java/leaf/cosmere/hemalurgy/common/capabilities/world/IHemalurgyWorldCap.java b/src/hemalurgy/java/leaf/cosmere/hemalurgy/common/capabilities/world/IHemalurgyWorldCap.java new file mode 100644 index 000000000..525256ab3 --- /dev/null +++ b/src/hemalurgy/java/leaf/cosmere/hemalurgy/common/capabilities/world/IHemalurgyWorldCap.java @@ -0,0 +1,14 @@ +/* + * File updated ~ 30 - 7 - 2023 ~ Leaf + */ + +package leaf.cosmere.hemalurgy.common.capabilities.world; + +import net.minecraft.nbt.CompoundTag; +import net.minecraftforge.common.util.INBTSerializable; + +public interface IHemalurgyWorldCap extends INBTSerializable +{ + + void tick(); +} diff --git a/src/hemalurgy/java/leaf/cosmere/hemalurgy/common/capabilities/world/KolossPatrolSpawner.java b/src/hemalurgy/java/leaf/cosmere/hemalurgy/common/capabilities/world/KolossPatrolSpawner.java new file mode 100644 index 000000000..5a305be1f --- /dev/null +++ b/src/hemalurgy/java/leaf/cosmere/hemalurgy/common/capabilities/world/KolossPatrolSpawner.java @@ -0,0 +1,179 @@ +/* + * File updated ~ 10 - 8 - 2024 ~ Leaf + */ + +package leaf.cosmere.hemalurgy.common.capabilities.world; + +import leaf.cosmere.common.registration.impl.EntityTypeRegistryObject; +import leaf.cosmere.hemalurgy.common.entity.Koloss; +import leaf.cosmere.hemalurgy.common.registries.HemalurgyEntityTypes; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Holder; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.tags.BiomeTags; +import net.minecraft.util.RandomSource; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.MobSpawnType; +import net.minecraft.world.entity.SpawnGroupData; +import net.minecraft.world.entity.monster.PatrollingMonster; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.CustomSpawner; +import net.minecraft.world.level.GameRules; +import net.minecraft.world.level.NaturalSpawner; +import net.minecraft.world.level.biome.Biome; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.Heightmap; +import net.minecraft.world.level.levelgen.PatrolSpawner; + +/** + * Koloss spawn patrol version of {@link PatrolSpawner}. + */ +public class KolossPatrolSpawner implements CustomSpawner +{ + private int nextTick; + + public int tick(ServerLevel pLevel, boolean pSpawnEnemies, boolean pSpawnFriendlies) + { + if (!pSpawnEnemies) + { + return 0; + } + else if (!pLevel.getGameRules().getBoolean(GameRules.RULE_DO_PATROL_SPAWNING)) + { + return 0; + } + else + { + RandomSource randomsource = pLevel.random; + --this.nextTick; + if (this.nextTick > 0) + { + return 0; + } + else + { + this.nextTick += 12000 + randomsource.nextInt(1200); + long i = pLevel.getDayTime() / 24000L; + if (i >= 5L && pLevel.isDay()) + { + if (randomsource.nextInt(5) != 0) + { + return 0; + } + else + { + int j = pLevel.players().size(); + if (j < 1) + { + return 0; + } + else + { + Player player = pLevel.players().get(randomsource.nextInt(j)); + if (player.isSpectator()) + { + return 0; + } + else if (pLevel.isCloseToVillage(player.blockPosition(), 2)) + { + return 0; + } + else + { + int k = (24 + randomsource.nextInt(24)) * (randomsource.nextBoolean() ? -1 : 1); + int l = (24 + randomsource.nextInt(24)) * (randomsource.nextBoolean() ? -1 : 1); + BlockPos.MutableBlockPos blockpos$mutableblockpos = player.blockPosition().mutable().move(k, 0, l); + int i1 = 10; + if (!pLevel.hasChunksAt(blockpos$mutableblockpos.getX() - 10, blockpos$mutableblockpos.getZ() - 10, blockpos$mutableblockpos.getX() + 10, blockpos$mutableblockpos.getZ() + 10)) + { + return 0; + } + else + { + Holder holder = pLevel.getBiome(blockpos$mutableblockpos); + if (holder.is(BiomeTags.WITHOUT_PATROL_SPAWNS)) + { + return 0; + } + else + { + int j1 = 0; + int k1 = (int) Math.ceil((double) pLevel.getCurrentDifficultyAt(blockpos$mutableblockpos).getEffectiveDifficulty()) + 1; + + for (int l1 = 0; l1 < k1; ++l1) + { + ++j1; + blockpos$mutableblockpos.setY(pLevel.getHeightmapPos(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, blockpos$mutableblockpos).getY()); + if (l1 == 0) + { + if (!this.spawnPatrolMember(pLevel, blockpos$mutableblockpos, randomsource, true)) + { + break; + } + } + else + { + this.spawnPatrolMember(pLevel, blockpos$mutableblockpos, randomsource, false); + } + + blockpos$mutableblockpos.setX(blockpos$mutableblockpos.getX() + randomsource.nextInt(5) - randomsource.nextInt(5)); + blockpos$mutableblockpos.setZ(blockpos$mutableblockpos.getZ() + randomsource.nextInt(5) - randomsource.nextInt(5)); + } + + return j1; + } + } + } + } + } + } + else + { + return 0; + } + } + } + } + + private boolean spawnPatrolMember(ServerLevel pLevel, BlockPos pPos, RandomSource pRandom, boolean pLeader) + { + BlockState blockstate = pLevel.getBlockState(pPos); + if (!NaturalSpawner.isValidEmptySpawnBlock(pLevel, pPos, blockstate, blockstate.getFluidState(), HemalurgyEntityTypes.KOLOSS_LARGE.getEntityType())) + { + return false; + } + else if (!PatrollingMonster.checkPatrollingMonsterSpawnRules(EntityType.PILLAGER, pLevel, MobSpawnType.PATROL, pPos, pRandom)) + { + return false; + } + else + { + final EntityTypeRegistryObject kolossType = + pLeader + ? HemalurgyEntityTypes.KOLOSS_LARGE + : pLevel.random.nextBoolean() + ? HemalurgyEntityTypes.KOLOSS_MEDIUM + : HemalurgyEntityTypes.KOLOSS_SMALL; + + PatrollingMonster patrollingmonster = kolossType.getEntityType().create(pLevel); + if (patrollingmonster != null) + { + if (pLeader) + { + patrollingmonster.setPatrolLeader(true); + patrollingmonster.findPatrolTarget(); + } + + patrollingmonster.setPos((double) pPos.getX(), (double) pPos.getY(), (double) pPos.getZ()); + patrollingmonster.finalizeSpawn(pLevel, pLevel.getCurrentDifficultyAt(pPos), MobSpawnType.PATROL, (SpawnGroupData) null, (CompoundTag) null); + pLevel.addFreshEntityWithPassengers(patrollingmonster); + return true; + } + else + { + return false; + } + } + } +} diff --git a/src/hemalurgy/java/leaf/cosmere/hemalurgy/common/compat/jei/HemalurgyJEICompat.java b/src/hemalurgy/java/leaf/cosmere/hemalurgy/common/compat/jei/HemalurgyJEICompat.java new file mode 100644 index 000000000..99530111f --- /dev/null +++ b/src/hemalurgy/java/leaf/cosmere/hemalurgy/common/compat/jei/HemalurgyJEICompat.java @@ -0,0 +1,50 @@ +/* + * File updated ~ 20 - 11 - 2024 ~ Leaf + */ + +package leaf.cosmere.hemalurgy.common.compat.jei; + +import leaf.cosmere.api.Constants; +import leaf.cosmere.api.EnumUtils; +import leaf.cosmere.api.Metals; +import leaf.cosmere.api.text.TextHelper; +import leaf.cosmere.hemalurgy.common.registries.HemalurgyItems; +import mezz.jei.api.IModPlugin; +import mezz.jei.api.JeiPlugin; +import mezz.jei.api.constants.VanillaTypes; +import mezz.jei.api.registration.IRecipeRegistration; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.Item; + +@JeiPlugin +public class HemalurgyJEICompat implements IModPlugin +{ + @Override + public ResourceLocation getPluginUid() + { + return Constants.Resources.JEI_HEMALURGY; + } + + + @Override + public void registerRecipes(IRecipeRegistration reg) + { + for (Metals.MetalType metalType : EnumUtils.METAL_TYPES) + { + if (metalType.hasHemalurgicEffect()) + { + addItemInfoPage(reg, HemalurgyItems.METAL_SPIKE.get(metalType).asItem()); + } + } + } + + private void addItemInfoPage(IRecipeRegistration reg, Item item) + { + reg.addIngredientInfo( + item.getDefaultInstance(), + VanillaTypes.ITEM_STACK, + TextHelper.createTranslatedText(String.format("item.%s.%s.tooltip", getPluginUid().getNamespace(), item) + )); + } + +} diff --git a/src/hemalurgy/java/leaf/cosmere/hemalurgy/common/config/HemalurgyConfigs.java b/src/hemalurgy/java/leaf/cosmere/hemalurgy/common/config/HemalurgyConfigs.java new file mode 100644 index 000000000..fa576380a --- /dev/null +++ b/src/hemalurgy/java/leaf/cosmere/hemalurgy/common/config/HemalurgyConfigs.java @@ -0,0 +1,21 @@ +/* + * File updated ~ 28 - 2 - 2023 ~ Leaf + */ + +package leaf.cosmere.hemalurgy.common.config; + +import leaf.cosmere.common.config.CosmereConfigHelper; +import net.minecraftforge.fml.ModContainer; +import net.minecraftforge.fml.ModLoadingContext; + +public class HemalurgyConfigs +{ + public static final HemalurgyServerConfig SERVER = new HemalurgyServerConfig(); + + public static void registerConfigs(ModLoadingContext modLoadingContext) + { + ModContainer modContainer = modLoadingContext.getActiveContainer(); + CosmereConfigHelper.registerConfig(modContainer, SERVER); + } + +} diff --git a/src/hemalurgy/java/leaf/cosmere/hemalurgy/common/config/HemalurgyServerConfig.java b/src/hemalurgy/java/leaf/cosmere/hemalurgy/common/config/HemalurgyServerConfig.java new file mode 100644 index 000000000..fa510bde9 --- /dev/null +++ b/src/hemalurgy/java/leaf/cosmere/hemalurgy/common/config/HemalurgyServerConfig.java @@ -0,0 +1,70 @@ +/* + * File updated ~ 7 - 6 - 2023 ~ Leaf + */ + +package leaf.cosmere.hemalurgy.common.config; + +import leaf.cosmere.common.config.ICosmereConfig; +import net.minecraftforge.common.ForgeConfigSpec; +import net.minecraftforge.fml.config.ModConfig.Type; + +public class HemalurgyServerConfig implements ICosmereConfig +{ + + private final ForgeConfigSpec configSpec; + + // Boost amount for Duralumin and Nicrosil + public final ForgeConfigSpec.IntValue SPIRITWEB_INTEGRITY_TICK_CHECK; + public final ForgeConfigSpec.IntValue LERASATIUM_MAX_SPIKE_STRENGTH; + public final ForgeConfigSpec.IntValue CHROMIUM_MAX_SPIKE_STRENGTH; + public final ForgeConfigSpec.IntValue DEFAULT_POWER_MAX_SPIKE_STRENGTH; + public final ForgeConfigSpec.IntValue LINCHPIN_SPIKE_SPIRITWEB_BONUS; + public final ForgeConfigSpec.IntValue ALLOMANTIC_PEWTER_SPIRITWEB_BONUS; + public final ForgeConfigSpec.IntValue FERUCHEMICAL_GOLD_SPIRITWEB_BONUS; + + + HemalurgyServerConfig() + { + ForgeConfigSpec.Builder builder = new ForgeConfigSpec.Builder(); + builder.comment("Hemalurgy Config. This config is synced between server and client.").push("hemalurgy"); + + SPIRITWEB_INTEGRITY_TICK_CHECK = builder.comment("What tick count should be used to check spiritweb integrity? There are 20 ticks in a second.").defineInRange("integrityCheckTick", 20, 1, 1234567890); + + LERASATIUM_MAX_SPIKE_STRENGTH = builder.comment("What is the maximum strength a lerasatium spike can hold.").defineInRange("lerasatiumMaxSpikeStrength", 5, 1, 20); + CHROMIUM_MAX_SPIKE_STRENGTH = builder.comment("What is the maximum strength a chromium spike can hold.").defineInRange("chromiumMaxSpikeStrength", 3, 1, 5); + DEFAULT_POWER_MAX_SPIKE_STRENGTH = builder.comment("What is the maximum strength all other power spikes can hold.").defineInRange("powerMaxSpikeStrength", 7, 1, 20); + LINCHPIN_SPIKE_SPIRITWEB_BONUS = builder.comment("What bonus does a linchpin spike grant spiritweb integrity.").defineInRange("linchpinSpikeSpiritwebBonus", 3, 0, 100); + ALLOMANTIC_PEWTER_SPIRITWEB_BONUS = builder.comment("What bonus does Allomantic pewter grant spiritweb integrity.").defineInRange("allomanticPewterSpiritwebBonus", 3, 0, 100); + FERUCHEMICAL_GOLD_SPIRITWEB_BONUS = builder.comment("What bonus does Feruchemical gold grant spiritweb integrity.").defineInRange("feruchemicalGoldSpiritwebBonus", 6, 0, 100); + + builder.pop(); + configSpec = builder.build(); + } + + @Override + public String getFileName() + { + return "HemalurgyServer"; + } + + @Override + public ForgeConfigSpec getConfigSpec() + { + return configSpec; + } + + @Override + public Type getConfigType() + { + return Type.SERVER; + } + + @Override + public void clearCache() + { + SPIRITWEB_INTEGRITY_TICK_CHECK.clearCache(); + LERASATIUM_MAX_SPIKE_STRENGTH.clearCache(); + CHROMIUM_MAX_SPIKE_STRENGTH.clearCache(); + DEFAULT_POWER_MAX_SPIKE_STRENGTH.clearCache(); + } +} \ No newline at end of file diff --git a/src/hemalurgy/java/leaf/cosmere/hemalurgy/common/entity/Koloss.java b/src/hemalurgy/java/leaf/cosmere/hemalurgy/common/entity/Koloss.java new file mode 100644 index 000000000..9e196af8b --- /dev/null +++ b/src/hemalurgy/java/leaf/cosmere/hemalurgy/common/entity/Koloss.java @@ -0,0 +1,182 @@ +/* + * File updated ~ 31 - 7 - 2023 ~ Leaf + */ + +package leaf.cosmere.hemalurgy.common.entity; + +import leaf.cosmere.api.Metals; +import leaf.cosmere.common.registration.impl.ItemRegistryObject; +import leaf.cosmere.hemalurgy.common.items.HemalurgicSpikeItem; +import leaf.cosmere.hemalurgy.common.registries.HemalurgyItems; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.util.RandomSource; +import net.minecraft.world.DifficultyInstance; +import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.Mob; +import net.minecraft.world.entity.MobSpawnType; +import net.minecraft.world.entity.SpawnGroupData; +import net.minecraft.world.entity.ai.attributes.AttributeSupplier; +import net.minecraft.world.entity.ai.attributes.Attributes; +import net.minecraft.world.entity.ai.goal.FloatGoal; +import net.minecraft.world.entity.ai.goal.LookAtPlayerGoal; +import net.minecraft.world.entity.ai.goal.MeleeAttackGoal; +import net.minecraft.world.entity.ai.goal.RandomStrollGoal; +import net.minecraft.world.entity.ai.goal.target.HurtByTargetGoal; +import net.minecraft.world.entity.ai.goal.target.NearestAttackableTargetGoal; +import net.minecraft.world.entity.ai.navigation.GroundPathNavigation; +import net.minecraft.world.entity.animal.IronGolem; +import net.minecraft.world.entity.monster.AbstractIllager; +import net.minecraft.world.entity.monster.Monster; +import net.minecraft.world.entity.npc.AbstractVillager; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.entity.raid.Raider; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraftforge.common.ForgeMod; +import org.jetbrains.annotations.Nullable; + +public class Koloss extends AbstractIllager +{ + public Koloss(EntityType pEntityType, Level pLevel) + { + super(pEntityType, pLevel); + } + + protected void registerGoals() + { + super.registerGoals(); + this.goalSelector.addGoal(0, new FloatGoal(this)); + this.goalSelector.addGoal(2, new AbstractIllager.RaiderOpenDoorGoal(this)); + this.goalSelector.addGoal(2, new MeleeAttackGoal(this, 1.2D, false)); + this.goalSelector.addGoal(3, new Raider.HoldGroundAttackGoal(this, 10.0F)); + this.targetSelector.addGoal(1, (new HurtByTargetGoal(this, Raider.class)).setAlertOthers()); + this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true)); + this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, AbstractVillager.class, true)); + this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, IronGolem.class, true)); + this.goalSelector.addGoal(8, new RandomStrollGoal(this, 0.6D)); + this.goalSelector.addGoal(9, new LookAtPlayerGoal(this, Player.class, 3.0F, 1.0F)); + this.goalSelector.addGoal(10, new LookAtPlayerGoal(this, Mob.class, 8.0F)); + } + + @Override + public boolean isBaby() + { + return false; + } + + @Override + public void applyRaidBuffs(int pWave, boolean pUnusedFalse) + { + + } + + @Override + public SoundEvent getCelebrateSound() + { + return SoundEvents.RAVAGER_CELEBRATE; + } + + + public static AttributeSupplier.Builder smallAttributes() + { + + return Monster.createMonsterAttributes() + .add(Attributes.MOVEMENT_SPEED, (double) 0.33F) + .add(Attributes.FOLLOW_RANGE, 40.0D) + .add(Attributes.MAX_HEALTH, 40.0D) + .add(Attributes.KNOCKBACK_RESISTANCE, 0.5d) + .add(Attributes.ARMOR, 7.0d) + .add(Attributes.ARMOR_TOUGHNESS, 0.0d) + .add(Attributes.LUCK, -1.0d) + .add(Attributes.ATTACK_DAMAGE, 4.0D) + .add(Attributes.ATTACK_KNOCKBACK, 1.1D) + .add(ForgeMod.STEP_HEIGHT_ADDITION.get(), 1.1D); + } + + public static AttributeSupplier.Builder mediumAttributes() + { + + return Monster.createMonsterAttributes() + .add(Attributes.MOVEMENT_SPEED, (double) 0.3F) + .add(Attributes.FOLLOW_RANGE, 40.0D) + .add(Attributes.MAX_HEALTH, 70.0D) + .add(Attributes.KNOCKBACK_RESISTANCE, 0.6d) + .add(Attributes.ARMOR, 3.5d) + .add(Attributes.ARMOR_TOUGHNESS, 0.0d) + .add(Attributes.LUCK, -1.0d) + .add(Attributes.ATTACK_DAMAGE, 8.0D) + .add(Attributes.ATTACK_KNOCKBACK, 1.3D) + .add(ForgeMod.STEP_HEIGHT_ADDITION.get(), 1.1D); + + } + + public static AttributeSupplier.Builder largeAttributes() + { + + return Monster.createMonsterAttributes() + .add(Attributes.MOVEMENT_SPEED, (double) 0.25F) + .add(Attributes.FOLLOW_RANGE, 40.0D) + .add(Attributes.MAX_HEALTH, 100.0D) + .add(Attributes.KNOCKBACK_RESISTANCE, 0.75d) + .add(Attributes.ARMOR, 1.0d) + .add(Attributes.ARMOR_TOUGHNESS, 4.0d) + .add(Attributes.LUCK, -1.0d) + .add(Attributes.ATTACK_DAMAGE, 12.0D) + .add(Attributes.ATTACK_KNOCKBACK, 1.5D) + .add(ForgeMod.STEP_HEIGHT_ADDITION.get(), 1.1D); + } + + @Nullable + @Override + public SpawnGroupData finalizeSpawn(ServerLevelAccessor pLevel, DifficultyInstance pDifficulty, MobSpawnType pReason, @Nullable SpawnGroupData pSpawnData, @Nullable CompoundTag pDataTag) + { + SpawnGroupData spawngroupdata = super.finalizeSpawn(pLevel, pDifficulty, pReason, pSpawnData, pDataTag); + ((GroundPathNavigation) this.getNavigation()).setCanOpenDoors(true); + RandomSource randomsource = pLevel.getRandom(); + this.populateDefaultEquipmentSlots(randomsource, pDifficulty); + this.populateDefaultEquipmentEnchantments(randomsource, pDifficulty); + return spawngroupdata; + } + + @Override + protected void populateDefaultEquipmentSlots(RandomSource pRandom, DifficultyInstance pDifficulty) + { + final Item value = HemalurgyItems.KOLOSS_SWORD.get(); + if (value != null) + { + //don't actually give them a sword for now, it's easier to balance. + //Instead, we just add it as a potential drop. + //this.setItemSlot(EquipmentSlot.MAINHAND, new ItemStack(value)); + } + } + + + @Override + protected void dropCustomDeathLoot(DamageSource pSource, int pLooting, boolean pRecentlyHit) + { + super.dropCustomDeathLoot(pSource, pLooting, pRecentlyHit); + + if (this.random.nextInt(100) < 25) + { + this.spawnAtLocation(new ItemStack(HemalurgyItems.KOLOSS_SWORD)); + } + final ItemRegistryObject ironSpike = HemalurgyItems.METAL_SPIKE.get(Metals.MetalType.IRON); + if (this.random.nextInt(100) < 10) + { + final ItemStack weakSpike = new ItemStack(ironSpike); + ironSpike.get().Invest(weakSpike, Metals.MetalType.IRON, 8, this.getUUID()); + this.spawnAtLocation(weakSpike); + } + if (this.random.nextInt(100) < 5) + { + final ItemStack strongSpike = new ItemStack(ironSpike); + ironSpike.get().Invest(strongSpike, Metals.MetalType.IRON, 16, this.getUUID()); + this.spawnAtLocation(strongSpike); + } + } +} diff --git a/src/hemalurgy/java/leaf/cosmere/hemalurgy/common/eventHandlers/HemalurgyCapabilitiesHandler.java b/src/hemalurgy/java/leaf/cosmere/hemalurgy/common/eventHandlers/HemalurgyCapabilitiesHandler.java new file mode 100644 index 000000000..e4eea44a9 --- /dev/null +++ b/src/hemalurgy/java/leaf/cosmere/hemalurgy/common/eventHandlers/HemalurgyCapabilitiesHandler.java @@ -0,0 +1,83 @@ +/* + * File updated ~ 30 - 7 - 2023 ~ Leaf + */ + +package leaf.cosmere.hemalurgy.common.eventHandlers; + +import leaf.cosmere.api.Constants; +import leaf.cosmere.hemalurgy.common.Hemalurgy; +import leaf.cosmere.hemalurgy.common.capabilities.world.HemalurgyWorldCapability; +import leaf.cosmere.hemalurgy.common.capabilities.world.IHemalurgyWorldCap; +import net.minecraft.core.Direction; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.MinecraftServer; +import net.minecraft.world.level.Level; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.capabilities.ICapabilitySerializable; +import net.minecraftforge.common.util.LazyOptional; +import net.minecraftforge.event.AttachCapabilitiesEvent; +import net.minecraftforge.event.TickEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; + +import javax.annotation.Nonnull; + +@Mod.EventBusSubscriber(modid = Hemalurgy.MODID, bus = Mod.EventBusSubscriber.Bus.FORGE) +public class HemalurgyCapabilitiesHandler +{ + @SubscribeEvent + public static void attachWorldCapabilities(AttachCapabilitiesEvent event) + { + Level level = event.getObject(); + + final ResourceLocation location = event.getObject().dimension().location(); + if (location.toString().contains("overworld")) + { + event.addCapability(Constants.Resources.HEMALURGY_WORLD_CAP, new ICapabilitySerializable() + { + final HemalurgyWorldCapability worldCapability = new HemalurgyWorldCapability(level); + final LazyOptional worldCapInstance = LazyOptional.of(() -> worldCapability); + + @Nonnull + @Override + public LazyOptional getCapability(@Nonnull Capability cap, @javax.annotation.Nullable Direction side) + { + return cap == HemalurgyWorldCapability.CAPABILITY ? (LazyOptional) worldCapInstance + : LazyOptional.empty(); + } + + @Override + public CompoundTag serializeNBT() + { + return worldCapability.serializeNBT(); + } + + @Override + public void deserializeNBT(CompoundTag nbt) + { + worldCapability.deserializeNBT(nbt); + } + }); + } + + } + + @SubscribeEvent + public static void onWorldTick(TickEvent.LevelTickEvent event) + { + Level level = event.level; + if (event.phase == TickEvent.Phase.END && event.side.isServer()) + { + MinecraftServer server = level.getServer(); + if (server != null && server.getPlayerList().getPlayerCount() == 0) + { + return; + } + + HemalurgyWorldCapability.get(level).ifPresent(IHemalurgyWorldCap::tick); + + } + + } +} diff --git a/src/hemalurgy/java/leaf/cosmere/hemalurgy/common/eventHandlers/HemalurgyEntityEventHandler.java b/src/hemalurgy/java/leaf/cosmere/hemalurgy/common/eventHandlers/HemalurgyEntityEventHandler.java new file mode 100644 index 000000000..d5f656621 --- /dev/null +++ b/src/hemalurgy/java/leaf/cosmere/hemalurgy/common/eventHandlers/HemalurgyEntityEventHandler.java @@ -0,0 +1,94 @@ +/* + * File updated ~ 8 - 10 - 2022 ~ Leaf + */ + +package leaf.cosmere.hemalurgy.common.eventHandlers; + +import leaf.cosmere.api.CosmereAPI; +import leaf.cosmere.api.manifestation.Manifestation; +import leaf.cosmere.api.text.TextHelper; +import leaf.cosmere.hemalurgy.common.Hemalurgy; +import leaf.cosmere.hemalurgy.common.items.HemalurgicSpikeItem; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.ai.attributes.Attribute; +import net.minecraft.world.entity.ai.attributes.AttributeInstance; +import net.minecraft.world.entity.ai.attributes.AttributeMap; +import net.minecraft.world.entity.animal.Cat; +import net.minecraft.world.item.ItemStack; +import net.minecraftforge.event.entity.player.PlayerInteractEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; + +@Mod.EventBusSubscriber(modid = Hemalurgy.MODID, bus = Mod.EventBusSubscriber.Bus.FORGE) +public class HemalurgyEntityEventHandler +{ + @SubscribeEvent + public static void onEntityInteract(PlayerInteractEvent.EntityInteract event) + { + if (!(event.getTarget() instanceof LivingEntity target)) + { + return; + } + + ItemStack stack = event.getEntity().getMainHandItem(); + if (!stack.isEmpty()) + { + if (stack.getItem() instanceof HemalurgicSpikeItem spike) + { + //https://www.theoryland.com/intvmain.php?i=977#43 + if (!(event.getTarget() instanceof Cat cat)) + { + return; + } + + //only apply spike if it has a power + //no accidentally losing spikes + if (!spike.hemalurgicIdentityExists(stack)) + { + return; + } + + //todo random list of catquisitor names + target.setCustomName(TextHelper.createTranslatedText("Catquisitor")); + + boolean spikeApplied = false; + + try + { + for (Manifestation manifestation : CosmereAPI.manifestationRegistry()) + { + final double hemalurgicStrength = spike.getHemalurgicStrength(stack, manifestation); + if (hemalurgicStrength > 0) + { + final Attribute regAttribute = manifestation.getAttribute(); + if (regAttribute == null) + { + continue; + } + spikeApplied = true; + + final AttributeMap catAttributes = cat.getAttributes(); + final AttributeInstance instance = catAttributes.getInstance(regAttribute); + + if (instance != null) + { + instance.setBaseValue(hemalurgicStrength); + } + } + } + } + catch (Exception ignored) + { + } + + if (spikeApplied && !event.getEntity().isCreative()) + { + stack.shrink(1); + } + } + + } + + } + +} diff --git a/src/hemalurgy/java/leaf/cosmere/hemalurgy/common/eventHandlers/HemalurgyModBusEventHandler.java b/src/hemalurgy/java/leaf/cosmere/hemalurgy/common/eventHandlers/HemalurgyModBusEventHandler.java new file mode 100644 index 000000000..c6c897b86 --- /dev/null +++ b/src/hemalurgy/java/leaf/cosmere/hemalurgy/common/eventHandlers/HemalurgyModBusEventHandler.java @@ -0,0 +1,37 @@ +/* + * File updated ~ 30 - 7 - 2023 ~ Leaf + */ + +package leaf.cosmere.hemalurgy.common.eventHandlers; + +import leaf.cosmere.hemalurgy.common.Hemalurgy; +import leaf.cosmere.hemalurgy.common.entity.Koloss; +import leaf.cosmere.hemalurgy.common.registries.HemalurgyAttributes; +import leaf.cosmere.hemalurgy.common.registries.HemalurgyEntityTypes; +import net.minecraft.world.entity.EntityType; +import net.minecraftforge.event.entity.EntityAttributeCreationEvent; +import net.minecraftforge.event.entity.EntityAttributeModificationEvent; +import net.minecraftforge.eventbus.api.EventPriority; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; + + +@Mod.EventBusSubscriber(modid = Hemalurgy.MODID, bus = Mod.EventBusSubscriber.Bus.MOD) +public class HemalurgyModBusEventHandler +{ + + @SubscribeEvent(priority = EventPriority.HIGH) + public static void onEntityAttributeModificationEvent(EntityAttributeModificationEvent event) + { + event.add(EntityType.PLAYER, HemalurgyAttributes.SPIRITWEB_INTEGRITY.getAttribute()); + } + + + @SubscribeEvent + public static void entityAttributeEvent(EntityAttributeCreationEvent event) + { + event.put(HemalurgyEntityTypes.KOLOSS_LARGE.get(), Koloss.largeAttributes().build()); + event.put(HemalurgyEntityTypes.KOLOSS_MEDIUM.get(), Koloss.mediumAttributes().build()); + event.put(HemalurgyEntityTypes.KOLOSS_SMALL.get(), Koloss.smallAttributes().build()); + } +} diff --git a/src/hemalurgy/java/leaf/cosmere/hemalurgy/common/items/HemalurgicSpikeItem.java b/src/hemalurgy/java/leaf/cosmere/hemalurgy/common/items/HemalurgicSpikeItem.java new file mode 100644 index 000000000..3d0ebd957 --- /dev/null +++ b/src/hemalurgy/java/leaf/cosmere/hemalurgy/common/items/HemalurgicSpikeItem.java @@ -0,0 +1,450 @@ +/* + * File updated ~ 15 - 11 - 2025 ~ Leaf + */ + +package leaf.cosmere.hemalurgy.common.items; + +import com.google.common.collect.ImmutableMultimap; +import com.google.common.collect.LinkedHashMultimap; +import com.google.common.collect.Multimap; +import leaf.cosmere.api.CosmereAPI; +import leaf.cosmere.api.Manifestations; +import leaf.cosmere.api.Metals; +import leaf.cosmere.api.manifestation.Manifestation; +import leaf.cosmere.common.cap.entity.SpiritwebCapability; +import leaf.cosmere.common.items.ChargeableMetalCurioItem; +import leaf.cosmere.hemalurgy.common.Hemalurgy; +import leaf.cosmere.hemalurgy.common.config.HemalurgyConfigs; +import leaf.cosmere.hemalurgy.common.registries.HemalurgyAttributes; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.ai.attributes.Attribute; +import net.minecraft.world.entity.ai.attributes.AttributeModifier; +import net.minecraft.world.entity.ai.attributes.Attributes; +import net.minecraft.world.entity.item.ItemEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.CreativeModeTab; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.item.enchantment.EnchantmentHelper; +import net.minecraft.world.level.Level; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.common.util.LazyOptional; +import net.minecraftforge.event.entity.living.LivingDeathEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; +import top.theillusivec4.curios.api.CuriosApi; +import top.theillusivec4.curios.api.SlotContext; +import top.theillusivec4.curios.api.type.capability.ICuriosItemHandler; + +import javax.annotation.Nonnull; +import java.util.Collection; +import java.util.List; +import java.util.UUID; +import java.util.function.Predicate; + +import static leaf.cosmere.common.registry.CosmereDamageTypesRegistry.SPIKED; + +//Other ideas? +//Spike Guns? +//https://wob.coppermind.net/events/390-stuttgart-signing/#e12677 + +@Mod.EventBusSubscriber(modid = Hemalurgy.MODID, bus = Mod.EventBusSubscriber.Bus.FORGE) +public class HemalurgicSpikeItem extends ChargeableMetalCurioItem implements IHemalurgicInfo +{ + /** + * Modifiers applied when the item is in the mainhand of a user. copied from sword item + */ + private final Multimap attributeModifiers; + + public HemalurgicSpikeItem(Metals.MetalType metalType) + { + super(metalType); + + //todo decide on damage + float attackDamage = 2f + 1f;//tier.getAttackDamage(); + ImmutableMultimap.Builder builder = ImmutableMultimap.builder(); + builder.put(Attributes.ATTACK_DAMAGE, new AttributeModifier(BASE_ATTACK_DAMAGE_UUID, "Weapon modifier", attackDamage, AttributeModifier.Operation.ADDITION)); + builder.put(Attributes.ATTACK_SPEED, new AttributeModifier(BASE_ATTACK_SPEED_UUID, "Weapon modifier", -2.4f, AttributeModifier.Operation.ADDITION)); + this.attributeModifiers = builder.build(); + } + + @Override + public boolean canUnequip(SlotContext context, ItemStack stack) + { + boolean hasBindingCurse = EnchantmentHelper.hasBindingCurse(stack); + return (!hasBindingCurse || (context.entity() instanceof Player player && player.isCreative())); + } + + + /** + * generate new map of attributes for when used as a curio item. + */ + @Override + public Multimap getAttributeModifiers(SlotContext slotContext, UUID uuid, ItemStack stack) + { + Multimap attributeModifiers = LinkedHashMultimap.create(); + + Metals.MetalType metalType = getMetalType(); + if (stack.getItem() instanceof IHemalurgicInfo hemalurgicInfo) + { + //add hemalurgic attributes, if any. + hemalurgicInfo.getHemalurgicAttributes(attributeModifiers, stack, metalType); + + // add spiritweb buffs, if any + UUID hemalurgicIdentity = getHemalurgicIdentity(stack); + if (hemalurgicIdentity != null) + { + int spiritwebIntegrity = -1; + if (slotContext.identifier().equals("linchpin")) + { + // linchpin always gives a bonus (+3 default) + spiritwebIntegrity += HemalurgyConfigs.SERVER.LINCHPIN_SPIKE_SPIRITWEB_BONUS.get(); + Manifestation aPewter = CosmereAPI.manifestationRegistry().getValue(new ResourceLocation("allomancy", Metals.MetalType.PEWTER.getName())); + if (aPewter != null && attributeModifiers.containsKey(aPewter.getAttribute())) + { + // pewter gives an additional bonus (+3 default) + spiritwebIntegrity += HemalurgyConfigs.SERVER.ALLOMANTIC_PEWTER_SPIRITWEB_BONUS.get(); + } + Manifestation fGold = CosmereAPI.manifestationRegistry().getValue((new ResourceLocation("feruchemy", Metals.MetalType.GOLD.getName()))); + if (fGold != null && attributeModifiers.containsKey(fGold.getAttribute())) + { + // f-gold gives an extra bonus (+6 default) + spiritwebIntegrity += HemalurgyConfigs.SERVER.FERUCHEMICAL_GOLD_SPIRITWEB_BONUS.get(); + } + } + + attributeModifiers.put(HemalurgyAttributes.SPIRITWEB_INTEGRITY.getAttribute(), + new AttributeModifier( + hemalurgicIdentity, + "Spiritweb Integrity", + spiritwebIntegrity, + AttributeModifier.Operation.ADDITION + )); + } + } + + + return attributeModifiers; + } + + @Override + public float getMaxChargeModifier() + { + //spikes are only about a quarter as effective at holding charges. + //really we should change how much power a spike can steal as well, + //todo power stolen is adjusted by attribute stored in metal. + return (0.5f / 9f); + } + + @Override + public void addFilled(CreativeModeTab.Output output) + { + super.addFilled(output); + + if (getMetalType().hasFeruchemicalEffect()) + { + //what powers can this metal type contain + + if (this.getMetalType() == Metals.MetalType.IRON) + { + ItemStack filledIronSpike = new ItemStack(this); + //steals physical strength + //don't steal modified values, only base value + //todo decide how much strength is reasonable to steal and how much goes to waste + //currently will try 70% + double strengthToAdd = 15 * 0.7D;// Iron golems have the most base attack damage of normal mods (giants have 50??). Ravagers have + + + Invest(filledIronSpike, this.getMetalType(), strengthToAdd, UUID.randomUUID()); + + output.accept(filledIronSpike); + } + else if (this.getMetalType() == Metals.MetalType.TIN) + { + ItemStack filledSpike = new ItemStack(this); + Invest(filledSpike, this.getMetalType(), 0.25f, UUID.randomUUID()); + output.accept(filledSpike); + } + else if (this.getMetalType() == Metals.MetalType.COPPER) + { + ItemStack filledSpike = new ItemStack(this); + Invest(filledSpike, this.getMetalType(), 0.5f, UUID.randomUUID()); + output.accept(filledSpike); + } + + + Collection hemalurgyStealWhitelist = getMetalType().getHemalurgyStealWhitelist(); + if (hemalurgyStealWhitelist != null) + { + for (Metals.MetalType stealType : hemalurgyStealWhitelist) + { + if (!stealType.hasAssociatedManifestation()) + { + continue; + } + try + { + + //then we've found something to steal! + switch (this.getMetalType()) + { + //steals allomantic abilities + case STEEL, BRONZE, CADMIUM, ELECTRUM -> + { + ItemStack allomancySpike = new ItemStack(this); + Manifestation allomancyMani = CosmereAPI.manifestationRegistry().getValue(new ResourceLocation("allomancy", stealType.getName())); + if (allomancyMani != null) + { + Invest(allomancySpike, allomancyMani, 7, UUID.randomUUID()); + output.accept(allomancySpike); + } + } + //steals feruchemical abilities + case PEWTER, BRASS, BENDALLOY, GOLD -> + { + ItemStack feruchemySpike = new ItemStack(this); + Manifestation feruchemyMani = CosmereAPI.manifestationRegistry().getValue(new ResourceLocation("feruchemy", stealType.getName())); + if (feruchemyMani != null) + { + Invest(feruchemySpike, feruchemyMani, 7, UUID.randomUUID()); + output.accept(feruchemySpike); + } + } + } + + + } + catch (Exception e) + { + CosmereAPI.logger.info(String.format("remove %s from whitelist for %s spikes", stealType, getMetalType())); + } + } + } + } + + if (this.getMetalType() == Metals.MetalType.LERASATIUM) + { + ItemStack bound = new ItemStack(this); + final UUID identity = UUID.randomUUID(); + for (Manifestation manifestation : CosmereAPI.manifestationRegistry()) + { + //lerasatium creative mode hide surge powers for now + if (manifestation.getManifestationType() == Manifestations.ManifestationTypes.SURGEBINDING) + { + continue; + } + + Invest(bound, manifestation, 5, identity); + } + + output.accept(bound); + } + } + + //todo hemalurgic decay + //https://wob.coppermind.net/events/332/#e9534 + //https://wob.coppermind.net/events/121/#e5060 + private void addDecay(ItemStack stack) + { + + } + + @Override + public void inventoryTick(ItemStack stack, Level worldIn, Entity entityIn, int itemSlot, boolean isSelected) + { + super.inventoryTick(stack, worldIn, entityIn, itemSlot, isSelected); + + //todo //add decay + + //add decay if not equipped + addDecay(stack); + { + // unless its in a jar? + } + } + + @Override + public boolean onEntityItemUpdate(ItemStack stack, ItemEntity entity) + { + //todo //add decay + + + return false; + } + + + @Override + @OnlyIn(Dist.CLIENT) + public void appendHoverText(ItemStack stack, Level worldIn, List tooltip, TooltipFlag flagIn) + { + super.appendHoverText(stack, worldIn, tooltip, flagIn); + + // no extra info if there isn't any + if (getHemalurgicIdentity(stack) == null) + { + return; + } + + + //stolen identities listed? + + //extra investiture powers added + addInvestitureInformation(stack, tooltip); + + //etc? + + //don't need to do the attributes, since thats covered by curio + } + + @SubscribeEvent + public static void onEntityDeath(LivingDeathEvent event) + { + if (event.getEntity().level().isClientSide()) + { + return; + } + + if (event.getSource().getEntity() instanceof Player playerEntity) + { + SpiritwebCapability.get(playerEntity).ifPresent(iSpiritweb -> + { + ItemStack itemstack = playerEntity.getMainHandItem(); + if (itemstack.getItem() instanceof HemalurgicSpikeItem spikeItem) + { + //entity was killed by a spike + //pass in killed entity for the item to figure out what to do + spikeItem.killedEntity(itemstack, playerEntity, event.getEntity()); + } + + }); + } + } + + public void killedEntity(ItemStack stack, Player playerEntity, LivingEntity entityKilled) + { + //https://wob.coppermind.net/events/332/#e9569 + + // do nothing if an identity exists and doesn't match + if (!matchHemalurgicIdentity(stack, entityKilled.getUUID())) + { + return; + } + + // ensure we set the stolen identity + stealFromSpiritweb(stack, getMetalType(), playerEntity, entityKilled); + } + + @Override + public boolean isFoil(@Nonnull ItemStack stack) + { + return super.isFoil(stack) || hemalurgicIdentityExists(stack); + } + + /** + * Gets a map of item attribute modifiers, used by damage when used as melee weapon. + */ + @Override + public Multimap getAttributeModifiers(EquipmentSlot equipmentSlot, ItemStack stack) + { + switch (equipmentSlot) + { + case MAINHAND: + case OFFHAND: + return this.attributeModifiers; + case FEET: + case LEGS: + case CHEST: + case HEAD: + break; + } + + + return super.getAttributeModifiers(equipmentSlot, stack); + } + + @Override + public boolean canEquip(SlotContext slotContext, ItemStack stack) + { + //do not allow players to wear two spikes of the same metal empowered by the same killed entity UUID + if (slotContext.entity() instanceof Player player) + { + final UUID stackWeWantToEquipUUID = getHemalurgicIdentity(stack); + + HemalurgicSpikeItem item = (HemalurgicSpikeItem) stack.getItem(); + Metals.MetalType stackMetal = item.getMetalType(); + + if (stackWeWantToEquipUUID != null) + { + Predicate spikePredicate = stackToFind -> + { + final boolean isSpike = stackToFind.getItem() instanceof HemalurgicSpikeItem; + + if (!isSpike) + { + return false; + } + + final HemalurgicSpikeItem foundSpikeItem = (HemalurgicSpikeItem) stackToFind.getItem(); + final UUID foundSpikeUUID = getHemalurgicIdentity(stackToFind); + + final boolean matchingSpikeIdentity = foundSpikeItem.getMetalType() == getMetalType() + && foundSpikeUUID != null + && foundSpikeUUID.compareTo(stackWeWantToEquipUUID) == 0; + + Metals.MetalType testStackMetal = foundSpikeItem.getMetalType(); + final boolean onlyOneIronAllowed = stackMetal == Metals.MetalType.IRON && stackMetal == testStackMetal; + + return matchingSpikeIdentity || onlyOneIronAllowed; + }; + + + final LazyOptional curiosInventory = CuriosApi.getCuriosInventory(player); + + if (!curiosInventory.isPresent()) + { + return false; + } + + ICuriosItemHandler curiosInv = curiosInventory.resolve().get(); + + return curiosInv.findFirstCurio(spikePredicate).isEmpty(); + } + } + return true; + } + + + @Override + public void onEquip(SlotContext slotContext, ItemStack prevStack, ItemStack stack) + { + //todo better logic. + boolean isEquipping = prevStack == null || stack.getItem() != prevStack.getItem(); + + if (isEquipping) + { + //then do hemalurgy spike logic + //hurt the user + //spiritweb attributes are handled in metalmind + slotContext.entity().hurt(SPIKED.source(slotContext.entity().level()), 4); + } + + } + + @Override + public void onUnequip(SlotContext slotContext, ItemStack newStack, ItemStack stack) + { + super.onUnequip(slotContext, newStack, stack); + + //only damage if removing the spike. We can ignore replacing the spike with another spike. + boolean isUnequipping = newStack.isEmpty() || !newStack.is(stack.getItem()); + if (isUnequipping) + { + slotContext.entity().hurt(SPIKED.source(slotContext.entity().level()), 4); + } + } +} diff --git a/src/hemalurgy/java/leaf/cosmere/hemalurgy/common/items/IHemalurgicInfo.java b/src/hemalurgy/java/leaf/cosmere/hemalurgy/common/items/IHemalurgicInfo.java new file mode 100644 index 000000000..ae136c1fc --- /dev/null +++ b/src/hemalurgy/java/leaf/cosmere/hemalurgy/common/items/IHemalurgicInfo.java @@ -0,0 +1,517 @@ +/* + * File updated ~ 20 - 11 - 2024 ~ Leaf + */ + +package leaf.cosmere.hemalurgy.common.items; + +import com.google.common.collect.Multimap; +import leaf.cosmere.api.*; +import leaf.cosmere.api.helpers.CompoundNBTHelper; +import leaf.cosmere.api.helpers.StackNBTHelper; +import leaf.cosmere.api.manifestation.Manifestation; +import leaf.cosmere.api.text.TextHelper; +import leaf.cosmere.common.cap.entity.SpiritwebCapability; +import leaf.cosmere.common.registry.AttributesRegistry; +import leaf.cosmere.hemalurgy.common.config.HemalurgyConfigs; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.ai.attributes.Attribute; +import net.minecraft.world.entity.ai.attributes.AttributeModifier; +import net.minecraft.world.entity.ai.attributes.Attributes; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraftforge.registries.IForgeRegistry; + +import java.util.*; + + +public interface IHemalurgicInfo +{ + String stolen_identity_tag = "stolen_identity_tag"; + List whiteList = new ArrayList(4); + + default boolean matchHemalurgicIdentity(ItemStack stack, UUID uniqueID) + { + if (!hemalurgicIdentityExists(stack)) + { + return true; + } + + return StackNBTHelper.getUuid(stack, stolen_identity_tag).compareTo(uniqueID) == 0; + } + + default boolean hemalurgicIdentityExists(ItemStack stack) + { + return StackNBTHelper.verifyExistance(stack, stolen_identity_tag); + } + + default void setHemalurgicIdentity(ItemStack stack, UUID uniqueID) + { + StackNBTHelper.setUuid(stack, stolen_identity_tag, uniqueID); + + } + + default UUID getHemalurgicIdentity(ItemStack stack) + { + return StackNBTHelper.getUuid(stack, stolen_identity_tag); + } + + default CompoundTag getHemalurgicInfo(ItemStack stack) + { + return stack.getOrCreateTagElement("hemalurgy"); + } + + default void stealFromSpiritweb(ItemStack stack, Metals.MetalType spikeMetalType, Player playerEntity, LivingEntity entityKilled) + { + //todo + //we should probably check a config to see if pvp real stealing of attributes is wanted. + boolean isPlayerEntity = (entityKilled instanceof Player); + + + //Steals non-manifestation based abilities. traits inherent to an entity? + if (getAttributes(stack, spikeMetalType, playerEntity, entityKilled)) + { + return; + } + + List manifestationsFound = new ArrayList<>(); + SpiritwebCapability.get(entityKilled).ifPresent(entityKilledSpiritWeb -> + { + //only grab innate manifestations, not ones added by hemalurgy + manifestationsFound.addAll(entityKilledSpiritWeb.getAvailableManifestations(true)); + + + if (!manifestationsFound.isEmpty()) + { + whiteList.clear(); + + //The type of thing you can steal is dependant on the type of metal. + Collection hemalurgyStealWhitelist = spikeMetalType.getHemalurgyStealWhitelist(); + if (hemalurgyStealWhitelist != null) + { + whiteList.addAll(hemalurgyStealWhitelist); + } + + switch (spikeMetalType) + { + //steals allomantic abilities + case STEEL: + case BRONZE: + case CADMIUM: + case ELECTRUM: + { + Manifestation manifestation = getRandomMetalPowerFromList(manifestationsFound, whiteList, Manifestations.ManifestationTypes.ALLOMANCY); + if (manifestation != null) + { + Invest(stack, manifestation, manifestation.getStrength(entityKilledSpiritWeb, true) * 0.7f, entityKilled.getUUID()); + entityKilledSpiritWeb.removeManifestation(manifestation); + return; + } + + } + break; + //steals feruchemical abilities + case PEWTER: + case BRASS: + case BENDALLOY: + case GOLD: + { + Manifestation manifestation = getRandomMetalPowerFromList(manifestationsFound, whiteList, Manifestations.ManifestationTypes.FERUCHEMY); + if (manifestation != null) + { + Invest(stack, manifestation, manifestation.getStrength(entityKilledSpiritWeb, true) * 0.7f, entityKilled.getUUID()); + entityKilledSpiritWeb.removeManifestation(manifestation); + return; + } + } + break; + //The god metals don't follow the 'normal' rules. + //Todo decide if they can steal powers from other investiture types or just scadrial related + case ATIUM: + { + //Steals any one power + Manifestation manifestation; + + Manifestation atiumAllomancy = CosmereAPI.manifestationRegistry().getValue(new ResourceLocation("allomancy", Metals.MetalType.ATIUM.getName())); + Manifestation atiumFeruchemy = CosmereAPI.manifestationRegistry().getValue(new ResourceLocation("feruchemy", Metals.MetalType.ATIUM.getName())); + + if (manifestationsFound.contains(atiumFeruchemy)) + { + manifestation = atiumFeruchemy; + } + else if (manifestationsFound.contains(atiumAllomancy)) + { + manifestation = atiumAllomancy; + } + else + { + //todo decide if we just pick a random power + Collections.shuffle(manifestationsFound); + manifestation = manifestationsFound.get(0); + } + + //then try steal it + if (manifestation != null) + { + Invest(stack, manifestation, manifestation.getStrength(entityKilledSpiritWeb, true) * 0.7f, entityKilled.getUUID()); + entityKilledSpiritWeb.removeManifestation(manifestation); + return; + } + } + break; + case LERASATIUM: + { + for (Manifestation manifestation : manifestationsFound) + { + Invest(stack, manifestation, manifestation.getStrength(entityKilledSpiritWeb, true) * 0.5f, entityKilled.getUUID()); + entityKilledSpiritWeb.removeManifestation(manifestation); + } + } + break; + } + } + }); + + } + + private boolean getAttributes(ItemStack stack, Metals.MetalType spikeMetalType, Player playerEntity, LivingEntity entityKilled) + { + switch (spikeMetalType) + { + case LERASIUM: + for (Metals.MetalType metalType : EnumUtils.METAL_TYPES) + { + //all **attribute** metals EXCEPT lerasium + switch (metalType) + { + case IRON: + case TIN: + case COPPER: + case ZINC: + case ALUMINUM: + case DURALUMIN: + case CHROMIUM: + case NICROSIL: + getAttributes(stack, metalType, playerEntity, entityKilled); + break; + } + } + return true; + case IRON: + case TIN: + case COPPER: + case ZINC: + case ALUMINUM: + case DURALUMIN: + case CHROMIUM: + case NICROSIL: + + //Non-Manifestation based hemalurgy all comes here + //How much is already stored? (like koloss spikes could keep storing strength on the same spike) + final double strengthCurrent = getHemalurgicStrength(stack, spikeMetalType); + //how much should we add. + final double entityAbilityStrength = spikeMetalType.getEntityAbilityStrength(entityKilled, playerEntity); + final double strengthToAdd = strengthCurrent + entityAbilityStrength; + if (strengthToAdd > 0.01 || strengthToAdd < -0.01) + { + Invest(stack, spikeMetalType, strengthToAdd, entityKilled.getUUID()); + } + return true; + } + return false; + } + + default Manifestation getRandomMetalPowerFromList( + List manifestationsFound, + List whiteList, + Manifestations.ManifestationTypes powerType) + { + Collections.shuffle(whiteList); + + //then check the entity has those types to steal + for (Metals.MetalType typeToTrySteal : whiteList) + { + int i = manifestationsFound.indexOf(powerType.getManifestation(typeToTrySteal.getID())); + //if it exists in the list + if (i >= 0) + { + //then we've found something to steal! + return manifestationsFound.get(i); + } + } + + return null; + } + + default Multimap getHemalurgicAttributes(Multimap attributeModifiers, ItemStack stack, Metals.MetalType metalType) + { + UUID hemalurgicIdentity = getHemalurgicIdentity(stack); + + if (metalType == Metals.MetalType.ALUMINUM) + { + for (Manifestation manifestation : CosmereAPI.manifestationRegistry()) + { + final Attribute attribute = manifestation.getAttribute(); + if (attribute == null) + { + continue; + } + + //prevent all other powers being used. + attributeModifiers.put( + attribute, + new AttributeModifier( + Constants.NBT.ALUMINUM_UUID, + manifestation.getTranslationKey(), + -100, + AttributeModifier.Operation.ADDITION)); + } + return attributeModifiers; + } + else if (hemalurgicIdentity == null) + { + return attributeModifiers; + } + + final double strength = getHemalurgicStrength(stack, metalType); + + { + Attribute attribute = null; + AttributeModifier.Operation attributeModifier = AttributeModifier.Operation.ADDITION; + + switch (metalType) + { + case IRON: + attribute = Attributes.ATTACK_DAMAGE; + + final Attribute xpGainRate = AttributesRegistry.XP_RATE_ATTRIBUTE.getAttribute(); + attributeModifiers.put( + xpGainRate, + new AttributeModifier( + hemalurgicIdentity, + "Kolossification", + -0.15, + AttributeModifier.Operation.ADDITION)); + break; + case TIN: + //TIN: + //Steals senses + //a type of night vision + attribute = AttributesRegistry.NIGHT_VISION_ATTRIBUTE.getAttribute(); + break; + case COPPER: + //Copper: + //Steals mental fortitude, memory, and intelligence + attribute = AttributesRegistry.XP_RATE_ATTRIBUTE.getAttribute(); + break; + case CHROMIUM: + attribute = Attributes.LUCK; + break; + /* + case ZINC: + //Steals emotional fortitude + //todo figure out what that means + break; + case NICROSIL: + //Steals Investiture + //todo figure out what that means + //shardblades? + break;*/ + default: + //?? + break; + } + + if (attribute != null) + { + attributeModifiers.put( + attribute, + new AttributeModifier( + hemalurgicIdentity, + "Hemalurgic " + metalType.getName(), + strength, + attributeModifier)); + } + } + + + for (Manifestation manifestation : CosmereAPI.manifestationRegistry()) + { + String path = manifestation.getName(); + + final double hemalurgicStrength = getHemalurgicStrength(stack, manifestation); + if (hemalurgicStrength > 0) + { + final Attribute regAttribute = manifestation.getAttribute(); + if (regAttribute == null) + { + continue; + } + + attributeModifiers.put( + regAttribute, + new AttributeModifier( + hemalurgicIdentity, + String.format("Hemalurgic-%s: %s", path, hemalurgicIdentity.toString()), + hemalurgicStrength, + AttributeModifier.Operation.ADDITION)); + } + } + + return attributeModifiers; + } + + default double getHemalurgicStrength(ItemStack stack, Metals.MetalType metalType) + { + return getHemalurgicStrength(stack, metalType.getName()); + } + + default double getHemalurgicStrength(ItemStack stack, Manifestation manifestation) + { + return getHemalurgicStrength(stack, manifestation.getRegistryName().toString()); + } + + default double getHemalurgicStrength(ItemStack stack, String name) + { + double strength = CompoundNBTHelper.getDouble( + getHemalurgicInfo(stack), + name, + 0); + + HemalurgicSpikeItem spikeItem = (HemalurgicSpikeItem) stack.getItem(); + switch (spikeItem.getMetalType()) + { + case IRON, TIN, COPPER, ZINC, NICROSIL -> + { + //nil + } + case LERASATIUM -> + { + //lerasatium spikes can't give more than 5 + final int max = HemalurgyConfigs.SERVER.LERASATIUM_MAX_SPIKE_STRENGTH.get(); + strength = Math.min(max, strength); + } + case CHROMIUM -> + { + final int max = HemalurgyConfigs.SERVER.CHROMIUM_MAX_SPIKE_STRENGTH.get(); + strength = Math.min(max, strength); + } + default -> + { + //other spikes can't give more than 7 + final int max = HemalurgyConfigs.SERVER.DEFAULT_POWER_MAX_SPIKE_STRENGTH.get(); + strength = Math.min(max, strength); + } + } + + return strength; + } + + default void setHemalurgicStrength(ItemStack stack, String name, double val) + { + CompoundNBTHelper.setDouble(getHemalurgicInfo(stack), name, val); + } + + + default void addInvestitureInformation(ItemStack stack, List tooltip) + { + if (!hemalurgicIdentityExists(stack)) + { + return; + } + + tooltip.add(TextHelper.createTranslatedText(Constants.Strings.CONTAINED_POWERS_FOUND)); + + //iterate through all metals, because lerasium spikes steal all attributes + for (Metals.MetalType metalType : EnumUtils.METAL_TYPES) + { + //all **attribute** metals EXCEPT lerasium + switch (metalType) + { + case IRON: + case TIN: + case COPPER: + case ZINC: + case ALUMINUM: + case DURALUMIN: + case CHROMIUM: + case NICROSIL: + if (hasHemalurgicPower(stack, metalType)) + { + double hemalurgicStrength = getHemalurgicStrength(stack, metalType); + + switch (metalType) + { + case IRON, CHROMIUM -> + { + // don't display as percentage + } + default -> + { + //but everything else does + hemalurgicStrength = hemalurgicStrength * 100; + } + } + double roundOff = (double) Math.round(hemalurgicStrength * 100) / 100; + + String sign = roundOff > 0 ? "+" : ""; + + tooltip.add(TextHelper.createTranslatedText( + "tooltip.cosmere.attribute." + metalType.getName(), + sign, + roundOff + )); + } + break; + } + } + + IForgeRegistry manifestations = CosmereAPI.manifestationRegistry(); + for (Manifestation manifestation : manifestations) + { + // if this spike has that power + if (hasHemalurgicPower(stack, manifestation)) + { + //then grant it + tooltip.add(manifestation.getTextComponent()); + } + } + } + + default boolean hasHemalurgicPower(ItemStack stack, Manifestation manifestation) + { + return getHemalurgicStrength(stack, manifestation) > 0; + } + + default boolean hasHemalurgicPower(ItemStack stack, Metals.MetalType metalType) + { + final double hemalurgicStrength = getHemalurgicStrength(stack, metalType); + final double marginOfError = 0.01; + return hemalurgicStrength > marginOfError || hemalurgicStrength < -marginOfError; + } + + default void Invest(ItemStack stack, Manifestation manifestation, double level, UUID identity) + { + Invest(stack, manifestation.getRegistryName().toString(), level, identity); + } + + default void Invest(ItemStack stack, Metals.MetalType metalType, double level, UUID identity) + { + Invest(stack, metalType.getName(), level, identity); + } + + default void Invest(ItemStack stack, String manifestation, double level, UUID identity) + { + setHemalurgicStrength(stack, manifestation, level); + setHemalurgicIdentity(stack, identity); + } + + default void Divest(ItemStack stack) + { + StackNBTHelper.removeEntry(stack, "hemalurgy"); + StackNBTHelper.removeEntry(stack, stolen_identity_tag); + } +} + diff --git a/src/hemalurgy/java/leaf/cosmere/hemalurgy/common/loot/InvestSpikeLootFunction.java b/src/hemalurgy/java/leaf/cosmere/hemalurgy/common/loot/InvestSpikeLootFunction.java new file mode 100644 index 000000000..02a5a744d --- /dev/null +++ b/src/hemalurgy/java/leaf/cosmere/hemalurgy/common/loot/InvestSpikeLootFunction.java @@ -0,0 +1,158 @@ +/* + * File updated ~ 29 - 10 - 2023 ~ Leaf + */ + +package leaf.cosmere.hemalurgy.common.loot; + +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonObject; +import leaf.cosmere.api.CosmereAPI; +import leaf.cosmere.api.Metals; +import leaf.cosmere.api.manifestation.Manifestation; +import leaf.cosmere.hemalurgy.common.items.HemalurgicSpikeItem; +import leaf.cosmere.hemalurgy.common.registries.HemalurgyLootFunctions; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.Mth; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.storage.loot.LootContext; +import net.minecraft.world.level.storage.loot.functions.LootItemConditionalFunction; +import net.minecraft.world.level.storage.loot.functions.LootItemFunctionType; +import net.minecraft.world.level.storage.loot.predicates.LootItemCondition; + +import java.util.Collection; +import java.util.Optional; +import java.util.UUID; + +public class InvestSpikeLootFunction extends LootItemConditionalFunction +{ + + protected InvestSpikeLootFunction(LootItemCondition[] conditionsIn) + { + super(conditionsIn); + } + + + @Override + public LootItemFunctionType getType() + { + return HemalurgyLootFunctions.INVEST_SPIKE.get(); + } + + @Override + protected ItemStack run(ItemStack stack, LootContext lootContext) + { + if (!(stack.getItem() instanceof HemalurgicSpikeItem item)) + { + return stack; + } + + final Metals.MetalType spikeMetalType = item.getMetalType(); + + if (!spikeMetalType.hasHemalurgicEffect()) + { + return stack; + } + + Collection hemalurgyStealWhitelist = spikeMetalType.getHemalurgyStealWhitelist(); + + Optional stealType = + hemalurgyStealWhitelist == null + ? Optional.empty() + : hemalurgyStealWhitelist + .stream() + .filter(Metals.MetalType::hasAssociatedManifestation) + .skip(lootContext.getRandom().nextInt(hemalurgyStealWhitelist.size())) + .findFirst(); + + //todo metal types that aren't able to store powers. + if (stealType.isEmpty()) + { + CosmereAPI.logger.error(spikeMetalType + " has empty Stealtype on trying to invest spike loot"); + return stack; + } + + final float strengthLevel = Mth.clamp(5 + lootContext.getLuck(), 1, 10); + Manifestation allomancyMani = CosmereAPI.manifestationRegistry().getValue(new ResourceLocation("allomancy", stealType.get().getName())); + Manifestation feruchemyMani = CosmereAPI.manifestationRegistry().getValue(new ResourceLocation("feruchemy", stealType.get().getName())); + + switch (spikeMetalType) + { + //todo metal types that aren't able to store powers. + /* + case IRON: + // add strength + item.Invest(stack, spikeMetalType, strengthLevel, UUID.randomUUID()); + + break; + case TIN: + case COPPER: + case CHROMIUM: + { + item.Invest(stack, spikeMetalType, strengthLevel / 10, UUID.randomUUID()); + } + break;*/ + //steals allomantic abilities + case STEEL: + case BRONZE: + case CADMIUM: + case ELECTRUM: + { + if (!stealType.isPresent()) + { + return stack; + } + item.Invest(stack, allomancyMani, strengthLevel, UUID.randomUUID()); + } + break; + //steals feruchemical abilities + case PEWTER: + case BRASS: + case BENDALLOY: + case GOLD: + { + if (!stealType.isPresent()) + { + return stack; + } + + item.Invest(stack, feruchemyMani, strengthLevel, UUID.randomUUID()); + } + break; + case ATIUM: + + if (!stealType.isPresent()) + { + return stack; + } + + boolean isAllomancy = lootContext.getRandom().nextBoolean(); + Manifestation manifestation; + if (isAllomancy) + { + manifestation = allomancyMani; + } + else + { + manifestation = feruchemyMani; + } + + if (manifestation != null) + { + item.Invest(stack, manifestation, strengthLevel, UUID.randomUUID()); + } + + break; + } + + return stack; + } + + public static class Serializer extends LootItemConditionalFunction.Serializer + { + @Override + public InvestSpikeLootFunction deserialize(JsonObject jsonObject, JsonDeserializationContext deserializationContext, LootItemCondition[] lootConditions) + { + return new InvestSpikeLootFunction(lootConditions); + } + } +} \ No newline at end of file diff --git a/src/hemalurgy/java/leaf/cosmere/hemalurgy/common/registries/HemalurgyAttributes.java b/src/hemalurgy/java/leaf/cosmere/hemalurgy/common/registries/HemalurgyAttributes.java new file mode 100644 index 000000000..50d2816a5 --- /dev/null +++ b/src/hemalurgy/java/leaf/cosmere/hemalurgy/common/registries/HemalurgyAttributes.java @@ -0,0 +1,26 @@ +/* + * File updated ~ 24 - 10 - 2022 ~ Leaf + */ + +package leaf.cosmere.hemalurgy.common.registries; + +import leaf.cosmere.common.registration.impl.AttributeDeferredRegister; +import leaf.cosmere.common.registration.impl.AttributeRegistryObject; +import leaf.cosmere.hemalurgy.common.Hemalurgy; +import net.minecraft.world.entity.ai.attributes.Attribute; + +public class HemalurgyAttributes +{ + + public static final AttributeDeferredRegister ATTRIBUTES = new AttributeDeferredRegister(Hemalurgy.MODID); + + public static final AttributeRegistryObject SPIRITWEB_INTEGRITY = + ATTRIBUTES.register( + "spiritweb_integrity", + Hemalurgy.MODID, + 3, + -16, + 16); + + +} diff --git a/src/hemalurgy/java/leaf/cosmere/hemalurgy/common/registries/HemalurgyCreativeTabs.java b/src/hemalurgy/java/leaf/cosmere/hemalurgy/common/registries/HemalurgyCreativeTabs.java new file mode 100644 index 000000000..89a851b39 --- /dev/null +++ b/src/hemalurgy/java/leaf/cosmere/hemalurgy/common/registries/HemalurgyCreativeTabs.java @@ -0,0 +1,95 @@ +/* + * File updated ~ 20 - 11 - 2024 ~ Leaf + */ + +package leaf.cosmere.hemalurgy.common.registries; + +import leaf.cosmere.api.EnumUtils; +import leaf.cosmere.api.Metals; +import leaf.cosmere.common.registration.impl.CreativeTabDeferredRegister; +import leaf.cosmere.common.registration.impl.CreativeTabRegistryObject; +import leaf.cosmere.hemalurgy.common.Hemalurgy; +import leaf.cosmere.hemalurgy.common.items.HemalurgicSpikeItem; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceKey; +import net.minecraft.world.item.CreativeModeTab; +import net.minecraft.world.item.CreativeModeTabs; +import net.minecraftforge.event.BuildCreativeModeTabContentsEvent; + +public class HemalurgyCreativeTabs +{ + public static final CreativeTabDeferredRegister CREATIVE_TABS = new CreativeTabDeferredRegister(Hemalurgy.MODID, HemalurgyCreativeTabs::addToExistingTabs); + + public static final CreativeTabRegistryObject ITEMS = + CREATIVE_TABS.registerMain( + Component.translatable("tabs." + Hemalurgy.MODID + ".items"), + HemalurgyItems.METAL_SPIKE.entrySet().stream().findAny().get().getValue(), + builder -> + builder.withSearchBar()//Allow our tabs to be searchable for convenience purposes + .displayItems((displayParameters, output) -> + { + CreativeTabDeferredRegister.addToDisplay(HemalurgyItems.ITEMS, output); + addFilledSpikes(output); + }) + ); + + private static void addToExistingTabs(BuildCreativeModeTabContentsEvent event) + { + ResourceKey tabKey = event.getTabKey(); + if (tabKey == CreativeModeTabs.BUILDING_BLOCKS) + { + //CreativeTabDeferredRegister.addToDisplay(event, BlocksRegistry.METALWORKING_TABLE); + } + else if (tabKey == CreativeModeTabs.NATURAL_BLOCKS) + { + /*for (var ore : BlocksRegistry.METAL_ORE.values()) + { + CreativeTabDeferredRegister.addToDisplay(event, ore); + } + for (var ore : BlocksRegistry.METAL_ORE_DEEPSLATE.values()) + { + CreativeTabDeferredRegister.addToDisplay(event, ore); + }*/ + } + else if (tabKey == CreativeModeTabs.FUNCTIONAL_BLOCKS) + { + + } + else if (tabKey == CreativeModeTabs.REDSTONE_BLOCKS) + { + + } + else if (tabKey == CreativeModeTabs.TOOLS_AND_UTILITIES) + { + + } + else if (tabKey == CreativeModeTabs.COMBAT) + { + + } + else if (tabKey == CreativeModeTabs.FOOD_AND_DRINKS) + { + //ItemsRegistry.SOME_FOOD.get().addItems(event); + } + else if (tabKey == CreativeModeTabs.SPAWN_EGGS) + { + + } + else if (tabKey == CreativeModeTabs.INGREDIENTS) + { + + } + } + + private static void addFilledSpikes(CreativeModeTab.Output output) + { + for (Metals.MetalType metalType : EnumUtils.METAL_TYPES) + { + if (metalType.hasHemalurgicEffect()) + { + final HemalurgicSpikeItem item = HemalurgyItems.METAL_SPIKE.get(metalType).get(); + item.addFilled(output); + } + } + } +} diff --git a/src/hemalurgy/java/leaf/cosmere/hemalurgy/common/registries/HemalurgyEntityTypes.java b/src/hemalurgy/java/leaf/cosmere/hemalurgy/common/registries/HemalurgyEntityTypes.java new file mode 100644 index 000000000..bc57ba3a3 --- /dev/null +++ b/src/hemalurgy/java/leaf/cosmere/hemalurgy/common/registries/HemalurgyEntityTypes.java @@ -0,0 +1,49 @@ +/* + * File updated ~ 19 - 7 - 2023 ~ Leaf + */ + +package leaf.cosmere.hemalurgy.common.registries; + +import leaf.cosmere.common.registration.impl.EntityTypeDeferredRegister; +import leaf.cosmere.common.registration.impl.EntityTypeRegistryObject; +import leaf.cosmere.hemalurgy.common.Hemalurgy; +import leaf.cosmere.hemalurgy.common.entity.Koloss; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.MobCategory; + +public class HemalurgyEntityTypes +{ + public static final EntityTypeDeferredRegister ENTITY_TYPES = new EntityTypeDeferredRegister(Hemalurgy.MODID); + + public static final EntityTypeRegistryObject KOLOSS_LARGE = + ENTITY_TYPES.register( + "koloss_large", + EntityType.Builder.of(Koloss::new, MobCategory.MISC) + .setShouldReceiveVelocityUpdates(false) + .updateInterval(1) + .setTrackingRange(8) + .clientTrackingRange(10) + .sized(2.5F, 5.5F) + ); + public static final EntityTypeRegistryObject KOLOSS_MEDIUM = + ENTITY_TYPES.register( + "koloss_medium", + EntityType.Builder.of(Koloss::new, MobCategory.MISC) + .setShouldReceiveVelocityUpdates(false) + .updateInterval(1) + .setTrackingRange(8) + .clientTrackingRange(10) + .sized(1.5f, 4) + ); + public static final EntityTypeRegistryObject KOLOSS_SMALL = + ENTITY_TYPES.register( + "koloss_small", + EntityType.Builder.of(Koloss::new, MobCategory.MISC) + .setShouldReceiveVelocityUpdates(false) + .updateInterval(1) + .setTrackingRange(8) + .clientTrackingRange(10) + .sized(1, 2) + ); + +} diff --git a/src/hemalurgy/java/leaf/cosmere/hemalurgy/common/registries/HemalurgyItems.java b/src/hemalurgy/java/leaf/cosmere/hemalurgy/common/registries/HemalurgyItems.java new file mode 100644 index 000000000..b4e8a4b63 --- /dev/null +++ b/src/hemalurgy/java/leaf/cosmere/hemalurgy/common/registries/HemalurgyItems.java @@ -0,0 +1,45 @@ +/* + * File updated ~ 20 - 11 - 2024 ~ Leaf + */ + +package leaf.cosmere.hemalurgy.common.registries; + +import leaf.cosmere.api.Constants.RegNameStubs; +import leaf.cosmere.api.EnumUtils; +import leaf.cosmere.api.Metals; +import leaf.cosmere.common.properties.PropTypes; +import leaf.cosmere.common.registration.impl.ItemDeferredRegister; +import leaf.cosmere.common.registration.impl.ItemRegistryObject; +import leaf.cosmere.hemalurgy.common.Hemalurgy; +import leaf.cosmere.hemalurgy.common.items.HemalurgicSpikeItem; +import net.minecraft.world.item.SwordItem; +import net.minecraft.world.item.Tiers; +import net.minecraftforge.common.ForgeSpawnEggItem; + +import java.util.Arrays; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +public class HemalurgyItems +{ + public static final ItemDeferredRegister ITEMS = new ItemDeferredRegister(Hemalurgy.MODID); + + //public static final ItemRegistryObject JAR_OF_BLOOD = ITEMS.register("jar_of_blood", () -> (new BaseItem(PropTypes.Items.ONE.get().tab(CosmereItemGroups.ITEMS)))); + + public static final Map> METAL_SPIKE = + Arrays.stream(EnumUtils.METAL_TYPES) + .filter(Metals.MetalType::hasHemalurgicEffect) + .collect(Collectors.toMap( + Function.identity(), + type -> ITEMS.register( + type.getName() + RegNameStubs.SPIKE, + () -> new HemalurgicSpikeItem(type) + ))); + + public static final ItemRegistryObject KOLOSS_SWORD = ITEMS.register("koloss_sword", () -> new SwordItem(Tiers.IRON, 10, -2.4F, PropTypes.Items.ONE.get())); + + public static final ItemRegistryObject SMALL_KOLOSS_EGG = ITEMS.registerSpawnEgg(HemalurgyEntityTypes.KOLOSS_SMALL, 0x314f64, 0x413222); + public static final ItemRegistryObject MEDIUM_KOLOSS_EGG = ITEMS.registerSpawnEgg(HemalurgyEntityTypes.KOLOSS_MEDIUM, 0x314f64, 0x401815); + public static final ItemRegistryObject LARGE_KOLOSS_EGG = ITEMS.registerSpawnEgg(HemalurgyEntityTypes.KOLOSS_LARGE, 0x314f64, 0x5a0b0b); +} diff --git a/src/hemalurgy/java/leaf/cosmere/hemalurgy/common/registries/HemalurgyLootFunctions.java b/src/hemalurgy/java/leaf/cosmere/hemalurgy/common/registries/HemalurgyLootFunctions.java new file mode 100644 index 000000000..9d6f309da --- /dev/null +++ b/src/hemalurgy/java/leaf/cosmere/hemalurgy/common/registries/HemalurgyLootFunctions.java @@ -0,0 +1,19 @@ +/* + * File updated ~ 8 - 10 - 2022 ~ Leaf + */ + +package leaf.cosmere.hemalurgy.common.registries; + +import leaf.cosmere.common.registration.impl.LootFunctionDeferredRegister; +import leaf.cosmere.common.registration.impl.LootItemFunctionTypeRegistryObject; +import leaf.cosmere.hemalurgy.common.Hemalurgy; +import leaf.cosmere.hemalurgy.common.loot.InvestSpikeLootFunction; +import net.minecraft.world.level.storage.loot.functions.LootItemFunctionType; + +public class HemalurgyLootFunctions +{ + public static final LootFunctionDeferredRegister LOOT_FUNCTIONS = new LootFunctionDeferredRegister(Hemalurgy.MODID); + + public static final LootItemFunctionTypeRegistryObject INVEST_SPIKE = LOOT_FUNCTIONS.registerType("invest_spike", InvestSpikeLootFunction.Serializer::new); + +} diff --git a/src/hemalurgy/resources/META-INF/mods.toml b/src/hemalurgy/resources/META-INF/mods.toml new file mode 100644 index 000000000..0716df648 --- /dev/null +++ b/src/hemalurgy/resources/META-INF/mods.toml @@ -0,0 +1,42 @@ +modLoader = "javafml" +loaderVersion = "${loader_version}" +issueTrackerURL = "https://github.com/leafreynolds/Cosmere/issues" +license = "MIT" + +[[mods]] +modId = "hemalurgy" +version = "${version}" +displayName = "Cosmere: Hemalurgy" +displayURL = "https://www.curseforge.com/minecraft/mc-mods/cosmere" +authors = "Leafy" +credits = ''' + +Arkamis - for the initial information in the guide book +Luke13234 - Who then updated it to what it is today + +Special thanks go to: +Ridanisaurus - For many item and block textures. +''' +logoFile = "logo.png" +description = '''Hemalurgy module for Cosmere.''' + +[[dependencies.hemalurgy]] +modId = "cosmere" +mandatory = true +versionRange = "[${version}]" +ordering = "AFTER" +side = "BOTH" + +[[dependencies.hemalurgy]] +modId = "allomancy" +mandatory = false +versionRange = "[${version}]" +ordering = "AFTER" +side = "BOTH" + +[[dependencies.hemalurgy]] +modId = "feruchemy" +mandatory = false +versionRange = "[${version}]" +ordering = "AFTER" +side = "BOTH" \ No newline at end of file diff --git a/src/hemalurgy/resources/assets/hemalurgy/lang/es_es.json b/src/hemalurgy/resources/assets/hemalurgy/lang/es_es.json new file mode 100644 index 000000000..1b699bc89 --- /dev/null +++ b/src/hemalurgy/resources/assets/hemalurgy/lang/es_es.json @@ -0,0 +1,88 @@ +{ + "command.cosmere.eyeheight.set.success": "Establecer la altura de los ojos en %s", + "curios.identifier.linchpin": "Clavo pezonero", + "curios.identifier.mental": "Mental Quadrant", + "curios.identifier.physical": "Physical Quadrant", + "curios.identifier.spiritual": "Spiritual Quadrant", + "curios.identifier.temporal": "Temporal Quadrant", + "death.attack.spiked": "%1$s no tuvo cuidado con su clavo hemalúrgico", + "death.attack.spiked.player": "%1$s no tuvo cuidado con su clavo metalúrgico mientras combatía con %2$s", + "entity.hemalurgy.koloss_large": "Koloss Large", + "entity.hemalurgy.koloss_medium": "Koloss Medium", + "entity.hemalurgy.koloss_small": "Koloss Small", + "entry.hemalurgic_aluminum": "Aluminio", + "entry.hemalurgic_atium": "Atium", + "entry.hemalurgic_bendalloy": "Bendaleo", + "entry.hemalurgic_brass": "Latón", + "entry.hemalurgic_bronze": "Bronce", + "entry.hemalurgic_cadmium": "Cadmio", + "entry.hemalurgic_chromium": "Cromo", + "entry.hemalurgic_copper": "Cobre", + "entry.hemalurgic_duralumin": "Duraluminio", + "entry.hemalurgic_electrum": "Electrum", + "entry.hemalurgic_gold": "Oro", + "entry.hemalurgic_harmonium": "Ettmetal", + "entry.hemalurgic_iron": "Hierro", + "entry.hemalurgic_lead": "Plomo", + "entry.hemalurgic_lerasatium": "Lerasatium", + "entry.hemalurgic_lerasium": "Lerasium", + "entry.hemalurgic_malatium": "Malatium", + "entry.hemalurgic_nickel": "Niquel", + "entry.hemalurgic_nicrosil": "Nicrosil", + "entry.hemalurgic_pewter": "Peltre", + "entry.hemalurgic_silver": "Plata", + "entry.hemalurgic_steel": "Acero", + "entry.hemalurgic_tin": "Estaño", + "entry.hemalurgic_zinc": "Zinc", + "item.hemalurgy.aluminum_spike": "Clavo de Aluminio", + "item.hemalurgy.aluminum_spike.tooltip": "Quita todos los poderes.", + "item.hemalurgy.atium_spike": "Clavo de Atium", + "item.hemalurgy.atium_spike.tooltip": "Roba un poder Alomántico o Ferruquímico.", + "item.hemalurgy.bendalloy_spike": "Clavo de Bendaleo", + "item.hemalurgy.bendalloy_spike.tooltip": "Roba un poder Ferruquímico Espiritual.", + "item.hemalurgy.brass_spike": "Clavo de Latón", + "item.hemalurgy.brass_spike.tooltip": "Roba un poder Ferruquímico Cognitivo.", + "item.hemalurgy.bronze_spike": "Clavo de Bronce", + "item.hemalurgy.bronze_spike.tooltip": "Roba un poder Alomántico Mental.", + "item.hemalurgy.cadmium_spike": "Clavo de Cadmio", + "item.hemalurgy.cadmium_spike.tooltip": "Roba un poder Alomántico Temporal.", + "item.hemalurgy.chromium_spike": "Clavo de Cromo", + "item.hemalurgy.chromium_spike.tooltip": "Podría robar el destino...", + "item.hemalurgy.copper_spike": "Clavo de Cobre", + "item.hemalurgy.copper_spike.tooltip": "Roba la fortaleza mental, la memoria y la inteligencia.", + "item.hemalurgy.duralumin_spike": "Clavo de Duraluminio", + "item.hemalurgy.duralumin_spike.tooltip": "Roba Conexión/Identidad.", + "item.hemalurgy.electrum_spike": "Clavo de Electrum", + "item.hemalurgy.electrum_spike.tooltip": "Roba un poder Alomántico de mejora.", + "item.hemalurgy.gold_spike": "Clavo de Oro", + "item.hemalurgy.gold_spike.tooltip": "Roba un poder Ferruquímico Híbrido.", + "item.hemalurgy.iron_spike": "Clavo de Hierro", + "item.hemalurgy.iron_spike.tooltip": "Roba fuerza física.", + "item.hemalurgy.koloss_large_spawn_egg": "Koloss Large Spawn Egg", + "item.hemalurgy.koloss_medium_spawn_egg": "Koloss Medium Spawn Egg", + "item.hemalurgy.koloss_small_spawn_egg": "Koloss Small Spawn Egg", + "item.hemalurgy.koloss_sword": "Koloss Sword", + "item.hemalurgy.lerasatium_spike": "Clavo de Lerasatium", + "item.hemalurgy.lerasatium_spike.tooltip": "Desconocido...", + "item.hemalurgy.lerasium_spike": "Clavo de Lerasium", + "item.hemalurgy.lerasium_spike.tooltip": "Roba todos los poderes...", + "item.hemalurgy.nicrosil_spike": "Clavo de Nicrosil", + "item.hemalurgy.nicrosil_spike.tooltip": "Roba la investidura.", + "item.hemalurgy.pewter_spike": "Clavo de Peltre", + "item.hemalurgy.pewter_spike.tooltip": "Roba un poder Ferruquímico Físico.", + "item.hemalurgy.steel_spike": "Clavo de Acero", + "item.hemalurgy.steel_spike.tooltip": "Roba un poder Alomantico Físico.", + "item.hemalurgy.tin_spike": "Clavo de Estaño", + "item.hemalurgy.tin_spike.tooltip": "Roba los sentidos.", + "item.hemalurgy.zinc_spike": "Clavo de Zinc", + "item.hemalurgy.zinc_spike.tooltip": "Roba la fortaleza emocional.", + "itemGroup.hemalurgy.spikes": "Clavos Hemalúrgicos", + "tooltip.cosmere.attribute.chromium": "%s%s Suerte", + "tooltip.cosmere.attribute.copper": "%s%s%% Experiencia", + "tooltip.cosmere.attribute.duralumin": "", + "tooltip.cosmere.attribute.iron": "%s%s Daño de Ataque", + "tooltip.cosmere.attribute.nicrosil": "", + "tooltip.cosmere.attribute.tin": "%s%s%% Mejor Visión Nocturna", + "tooltip.cosmere.attribute.zinc": "%s%s%% Fortaleza Emocional", + "tooltip.cosmere.power.found": "Carga Hemalúrgica:" +} \ No newline at end of file diff --git a/src/hemalurgy/resources/assets/hemalurgy/lang/sv_se.json b/src/hemalurgy/resources/assets/hemalurgy/lang/sv_se.json new file mode 100644 index 000000000..35bd048bd --- /dev/null +++ b/src/hemalurgy/resources/assets/hemalurgy/lang/sv_se.json @@ -0,0 +1,88 @@ +{ + "command.cosmere.eyeheight.set.success": "Set eye height to %s", + "curios.identifier.linchpin": "Linchpin Spike", + "curios.identifier.mental": "Mental Quadrant", + "curios.identifier.physical": "Physical Quadrant", + "curios.identifier.spiritual": "Spiritual Quadrant", + "curios.identifier.temporal": "Temporal Quadrant", + "death.attack.spiked": "%1$s was not careful with their hemalurgic spike", + "death.attack.spiked.player": "%1$s was not careful with their hemalurgic spike while fighting %2$s", + "entity.hemalurgy.koloss_large": "Koloss Large", + "entity.hemalurgy.koloss_medium": "Koloss Medium", + "entity.hemalurgy.koloss_small": "Koloss Small", + "entry.hemalurgic_aluminum": "Aluminum", + "entry.hemalurgic_atium": "Atium", + "entry.hemalurgic_bendalloy": "Bendalloy", + "entry.hemalurgic_brass": "Brass", + "entry.hemalurgic_bronze": "Bronze", + "entry.hemalurgic_cadmium": "Cadmium", + "entry.hemalurgic_chromium": "Chromium", + "entry.hemalurgic_copper": "Copper", + "entry.hemalurgic_duralumin": "Duralumin", + "entry.hemalurgic_electrum": "Electrum", + "entry.hemalurgic_gold": "Gold", + "entry.hemalurgic_harmonium": "Harmonium", + "entry.hemalurgic_iron": "Iron", + "entry.hemalurgic_lead": "Lead", + "entry.hemalurgic_lerasatium": "Lerasatium", + "entry.hemalurgic_lerasium": "Lerasium", + "entry.hemalurgic_malatium": "Malatium", + "entry.hemalurgic_nickel": "Nickel", + "entry.hemalurgic_nicrosil": "Nicrosil", + "entry.hemalurgic_pewter": "Pewter", + "entry.hemalurgic_silver": "Silver", + "entry.hemalurgic_steel": "Steel", + "entry.hemalurgic_tin": "Tin", + "entry.hemalurgic_zinc": "Zinc", + "item.hemalurgy.aluminum_spike": "Aluminum Spike", + "item.hemalurgy.aluminum_spike.tooltip": "Removes all powers.", + "item.hemalurgy.atium_spike": "Atium Spike", + "item.hemalurgy.atium_spike.tooltip": "Steals an Allomantic or Feruchemical power. Must be refined.", + "item.hemalurgy.bendalloy_spike": "Bendalloy Spike", + "item.hemalurgy.bendalloy_spike.tooltip": "Steals a Spiritual Feruchemical power.", + "item.hemalurgy.brass_spike": "Brass Spike", + "item.hemalurgy.brass_spike.tooltip": "Steals a cognitive feruchemical power.", + "item.hemalurgy.bronze_spike": "Bronze Spike", + "item.hemalurgy.bronze_spike.tooltip": "Steals a Mental Allomantic power.", + "item.hemalurgy.cadmium_spike": "Cadmium Spike", + "item.hemalurgy.cadmium_spike.tooltip": "Steals a Temporal Allomantic power.", + "item.hemalurgy.chromium_spike": "Chromium Spike", + "item.hemalurgy.chromium_spike.tooltip": "Might steal destiny...", + "item.hemalurgy.copper_spike": "Copper Spike", + "item.hemalurgy.copper_spike.tooltip": "Steals mental fortitude, memory, and intelligence.", + "item.hemalurgy.duralumin_spike": "Duralumin Spike", + "item.hemalurgy.duralumin_spike.tooltip": "Steals Connection/Identity.", + "item.hemalurgy.electrum_spike": "Electrum Spike", + "item.hemalurgy.electrum_spike.tooltip": "Steals an Enhancement Allomantic power.", + "item.hemalurgy.gold_spike": "Gold Spike", + "item.hemalurgy.gold_spike.tooltip": "Steals a Hybrid Feruchemical power.", + "item.hemalurgy.iron_spike": "Iron Spike", + "item.hemalurgy.iron_spike.tooltip": "Steals physical strength.", + "item.hemalurgy.koloss_large_spawn_egg": "Koloss Large Spawn Egg", + "item.hemalurgy.koloss_medium_spawn_egg": "Koloss Medium Spawn Egg", + "item.hemalurgy.koloss_small_spawn_egg": "Koloss Small Spawn Egg", + "item.hemalurgy.koloss_sword": "Koloss Sword", + "item.hemalurgy.lerasatium_spike": "Lerasatium Spike", + "item.hemalurgy.lerasatium_spike.tooltip": "Unknown...", + "item.hemalurgy.lerasium_spike": "Lerasium Spike", + "item.hemalurgy.lerasium_spike.tooltip": "Steals all powers...", + "item.hemalurgy.nicrosil_spike": "Nicrosil Spike", + "item.hemalurgy.nicrosil_spike.tooltip": "Steals Investiture.", + "item.hemalurgy.pewter_spike": "Pewter Spike", + "item.hemalurgy.pewter_spike.tooltip": "Steals a physical feruchemical power.", + "item.hemalurgy.steel_spike": "Steel Spike", + "item.hemalurgy.steel_spike.tooltip": "Steals a physical allomantic power.", + "item.hemalurgy.tin_spike": "Tin Spike", + "item.hemalurgy.tin_spike.tooltip": "Steals senses.", + "item.hemalurgy.zinc_spike": "Zinc Spike", + "item.hemalurgy.zinc_spike.tooltip": "Steals emotional fortitude.", + "itemGroup.hemalurgy.spikes": "Hemalurgic Spikes", + "tooltip.cosmere.attribute.chromium": "%s%s Luck", + "tooltip.cosmere.attribute.copper": "%s%s%% XP", + "tooltip.cosmere.attribute.duralumin": "", + "tooltip.cosmere.attribute.iron": "%s%s Attack Damage", + "tooltip.cosmere.attribute.nicrosil": "", + "tooltip.cosmere.attribute.tin": "%s%s%% Better Night Vision", + "tooltip.cosmere.attribute.zinc": "%s%s%% Emotional Fortitude", + "tooltip.cosmere.power.found": "Hemalurgic Charge:" +} \ No newline at end of file diff --git a/src/hemalurgy/resources/assets/hemalurgy/models/item/koloss_sword.json b/src/hemalurgy/resources/assets/hemalurgy/models/item/koloss_sword.json new file mode 100644 index 000000000..9755a1e05 --- /dev/null +++ b/src/hemalurgy/resources/assets/hemalurgy/models/item/koloss_sword.json @@ -0,0 +1,636 @@ +{ + "credit": "Made with Blockbench", + "texture_size": [32, 32], + "textures": { + "1": "hemalurgy:item/koloss_sword" + }, + "elements": [ + { + "from": [4.5, 8.21342, 6.5], + "to": [11.5, 9.21342, 9.5], + "rotation": {"angle": 0, "axis": "y", "origin": [9.5, 8.21342, 6.5]}, + "faces": { + "north": {"uv": [10.5, 8.5, 13, 9], "texture": "#1"}, + "east": {"uv": [12.5, 4.5, 14, 5], "texture": "#1"}, + "south": {"uv": [10.5, 9, 13, 9.5], "texture": "#1"}, + "west": {"uv": [12.5, 5, 14, 5.5], "texture": "#1"}, + "up": {"uv": [4, 11.5, 1.5, 10], "texture": "#1"}, + "down": {"uv": [12.5, 10, 10, 11.5], "texture": "#1"} + } + }, + { + "from": [4.36582, 7.44058, 6.5], + "to": [6.36582, 7.69058, 9.5], + "rotation": {"angle": -45, "axis": "z", "origin": [5.86582, 7.56558, 7.5]}, + "faces": { + "north": {"uv": [1.5, 14, 2.5, 14.5], "texture": "#1"}, + "east": {"uv": [12.5, 6.5, 14, 7], "texture": "#1"}, + "south": {"uv": [3, 14, 4, 14.5], "texture": "#1"}, + "west": {"uv": [12.5, 9.5, 14, 10], "texture": "#1"}, + "up": {"uv": [11.5, 3, 10.5, 1.5], "texture": "#1"}, + "down": {"uv": [11.5, 3, 10.5, 4.5], "texture": "#1"} + } + }, + { + "from": [4.36582, 7.69058, 6.5], + "to": [6.36582, 8.19058, 9.5], + "rotation": {"angle": -45, "axis": "z", "origin": [5.86582, 7.56558, 7.5]}, + "faces": { + "north": {"uv": [14, 5, 15, 5.5], "texture": "#1"}, + "east": {"uv": [13.5, 13.5, 15, 14], "texture": "#1"}, + "south": {"uv": [5.5, 14, 6.5, 14.5], "texture": "#1"}, + "west": {"uv": [14, 1.5, 15.5, 2], "texture": "#1"}, + "up": {"uv": [11.5, 8.5, 10.5, 7], "texture": "#1"}, + "down": {"uv": [9.5, 10.5, 8.5, 12], "texture": "#1"} + } + }, + { + "from": [6.2926, 8.07446, 6.5], + "to": [11.0426, 8.32446, 9.5], + "rotation": {"angle": 0, "axis": "y", "origin": [8.0426, 8.44946, 7.5]}, + "faces": { + "north": {"uv": [10.5, 9.5, 12.5, 10], "texture": "#1"}, + "east": {"uv": [13.5, 12, 15, 12.5], "texture": "#1"}, + "south": {"uv": [2.5, 11.5, 4.5, 12], "texture": "#1"}, + "west": {"uv": [13.5, 13, 15, 13.5], "texture": "#1"}, + "up": {"uv": [6, 11.5, 4, 10], "texture": "#1"}, + "down": {"uv": [12.5, 0, 10.5, 1.5], "texture": "#1"} + } + }, + { + "from": [6.13099, 7.12363, 6.5], + "to": [6.94349, 8.37363, 9.5], + "rotation": {"angle": 0, "axis": "y", "origin": [6.63099, 7.24863, 7.5]}, + "faces": { + "north": {"uv": [13.5, 14, 14, 14.5], "texture": "#1"}, + "east": {"uv": [13, 9, 14.5, 9.5], "texture": "#1"}, + "south": {"uv": [14, 14, 14.5, 14.5], "texture": "#1"}, + "west": {"uv": [13, 12.5, 14.5, 13], "texture": "#1"}, + "up": {"uv": [10, 14.5, 9.5, 13], "texture": "#1"}, + "down": {"uv": [13.5, 13, 13, 14.5], "texture": "#1"} + } + }, + { + "from": [6.80651, 7.12363, 6.5], + "to": [9.86901, 8.37363, 9.5], + "rotation": {"angle": 0, "axis": "y", "origin": [9.55651, 7.24863, 7.5]}, + "faces": { + "north": {"uv": [14.5, 0, 15, 0.5], "texture": "#1"}, + "east": {"uv": [3, 13.5, 4.5, 14], "texture": "#1"}, + "south": {"uv": [14.5, 0.5, 15, 1], "texture": "#1"}, + "west": {"uv": [4.5, 13.5, 6, 14], "texture": "#1"}, + "up": {"uv": [7.5, 15, 7, 13.5], "texture": "#1"}, + "down": {"uv": [14, 7, 13.5, 8.5], "texture": "#1"} + } + }, + { + "from": [4.50978, 8.01257, 6.5], + "to": [5.50978, 8.26257, 9.5], + "rotation": {"angle": -22.5, "axis": "z", "origin": [5.00978, 8.13757, 7.5]}, + "faces": { + "north": {"uv": [11.5, 14, 12, 14.5], "texture": "#1"}, + "east": {"uv": [12.5, 10, 14, 10.5], "texture": "#1"}, + "south": {"uv": [14, 11.5, 14.5, 12], "texture": "#1"}, + "west": {"uv": [12.5, 10.5, 14, 11], "texture": "#1"}, + "up": {"uv": [12, 14, 11.5, 12.5], "texture": "#1"}, + "down": {"uv": [12.5, 12.5, 12, 14], "texture": "#1"} + } + }, + { + "from": [9.63418, 7.44058, 6.5], + "to": [11.63418, 7.69058, 9.5], + "rotation": {"angle": 45, "axis": "z", "origin": [10.13418, 7.56558, 7.5]}, + "faces": { + "north": {"uv": [4, 14, 5, 14.5], "texture": "#1"}, + "east": {"uv": [3, 13, 4.5, 13.5], "texture": "#1"}, + "south": {"uv": [14, 4.5, 15, 5], "texture": "#1"}, + "west": {"uv": [13, 8.5, 14.5, 9], "texture": "#1"}, + "up": {"uv": [11.5, 6, 10.5, 4.5], "texture": "#1"}, + "down": {"uv": [7, 10.5, 6, 12], "texture": "#1"} + } + }, + { + "from": [9.50918, 7.06558, 6.5], + "to": [10.00918, 9.06558, 9.5], + "rotation": {"angle": -45, "axis": "z", "origin": [10.13418, 7.56558, 7.5]}, + "faces": { + "north": {"uv": [10, 13.5, 10.5, 14.5], "texture": "#1"}, + "east": {"uv": [10.5, 6, 12, 7], "texture": "#1"}, + "south": {"uv": [5, 14, 5.5, 15], "texture": "#1"}, + "west": {"uv": [7, 10.5, 8.5, 11.5], "texture": "#1"}, + "up": {"uv": [8, 15, 7.5, 13.5], "texture": "#1"}, + "down": {"uv": [8.5, 13.5, 8, 15], "texture": "#1"} + } + }, + { + "from": [10.49022, 8.01257, 6.5], + "to": [11.49022, 8.26257, 9.5], + "rotation": {"angle": 22.5, "axis": "z", "origin": [10.99022, 8.13757, 7.5]}, + "faces": { + "north": {"uv": [12, 14, 12.5, 14.5], "texture": "#1"}, + "east": {"uv": [12.5, 11, 14, 11.5], "texture": "#1"}, + "south": {"uv": [12.5, 14, 13, 14.5], "texture": "#1"}, + "west": {"uv": [12.5, 11.5, 14, 12], "texture": "#1"}, + "up": {"uv": [13, 14, 12.5, 12.5], "texture": "#1"}, + "down": {"uv": [3, 13, 2.5, 14.5], "texture": "#1"} + } + }, + { + "from": [5.5, 9, 7.29289], + "to": [10.5, 29, 8.29289], + "rotation": {"angle": 0, "axis": "y", "origin": [7, 4, 6.79289]}, + "faces": { + "north": {"uv": [0, 0, 1.5, 10], "texture": "#1"}, + "east": {"uv": [0, 10, 0.5, 20], "texture": "#1"}, + "south": {"uv": [1.5, 0, 3, 10], "texture": "#1"}, + "west": {"uv": [10, 0, 10.5, 10], "texture": "#1"}, + "up": {"uv": [14, 6, 12.5, 5.5], "texture": "#1"}, + "down": {"uv": [14, 6, 12.5, 6.5], "texture": "#1"} + } + }, + { + "from": [5.5, 9, 7.70711], + "to": [10.5, 29, 8.70711], + "rotation": {"angle": 0, "axis": "y", "origin": [10, 26, 0.20711]}, + "faces": { + "north": {"uv": [3, 0, 4.5, 10], "texture": "#1"}, + "east": {"uv": [0.5, 10, 1, 20], "texture": "#1"}, + "south": {"uv": [4.5, 0, 6, 10], "texture": "#1"}, + "west": {"uv": [1, 10, 1.5, 20], "texture": "#1"}, + "up": {"uv": [15.5, 2.5, 14, 2], "texture": "#1"}, + "down": {"uv": [15.5, 2.5, 14, 3], "texture": "#1"} + } + }, + { + "from": [4.31166, 26.07565, 7.29289], + "to": [5.31166, 30.07565, 8.29289], + "rotation": {"angle": 22.5, "axis": "z", "origin": [4.81166, 30.07565, 8]}, + "faces": { + "north": {"uv": [11.5, 4, 12, 6], "texture": "#1"}, + "east": {"uv": [4.5, 11.5, 5, 13.5], "texture": "#1"}, + "south": {"uv": [5, 11.5, 5.5, 13.5], "texture": "#1"}, + "west": {"uv": [5.5, 11.5, 6, 13.5], "texture": "#1"}, + "up": {"uv": [15.5, 6, 15, 5.5], "texture": "#1"}, + "down": {"uv": [6.5, 15, 6, 15.5], "texture": "#1"} + } + }, + { + "from": [4.31166, 26.07565, 7.70711], + "to": [5.31166, 30.07565, 8.70711], + "rotation": {"angle": 22.5, "axis": "z", "origin": [4.81166, 30.07565, 8]}, + "faces": { + "north": {"uv": [7, 11.5, 7.5, 13.5], "texture": "#1"}, + "east": {"uv": [7.5, 11.5, 8, 13.5], "texture": "#1"}, + "south": {"uv": [8, 11.5, 8.5, 13.5], "texture": "#1"}, + "west": {"uv": [10, 11.5, 10.5, 13.5], "texture": "#1"}, + "up": {"uv": [15.5, 6.5, 15, 6], "texture": "#1"}, + "down": {"uv": [7, 15, 6.5, 15.5], "texture": "#1"} + } + }, + { + "from": [4.34972, 29.88431, 7.70711], + "to": [7.84972, 30.32181, 8.70711], + "rotation": {"angle": 0, "axis": "y", "origin": [5.34972, 30.00931, 8.20711]}, + "faces": { + "north": {"uv": [11.5, 7, 13.5, 7.5], "texture": "#1"}, + "east": {"uv": [15, 6.5, 15.5, 7], "texture": "#1"}, + "south": {"uv": [11.5, 7.5, 13.5, 8], "texture": "#1"}, + "west": {"uv": [7, 15, 7.5, 15.5], "texture": "#1"}, + "up": {"uv": [13.5, 8.5, 11.5, 8], "texture": "#1"}, + "down": {"uv": [12.5, 11.5, 10.5, 12], "texture": "#1"} + } + }, + { + "from": [4.34972, 29.88431, 7.29289], + "to": [7.84972, 30.32181, 8.29289], + "rotation": {"angle": 0, "axis": "y", "origin": [5.34972, 30.00931, 7.79289]}, + "faces": { + "north": {"uv": [12, 1.5, 14, 2], "texture": "#1"}, + "east": {"uv": [15, 7, 15.5, 7.5], "texture": "#1"}, + "south": {"uv": [12, 2, 14, 2.5], "texture": "#1"}, + "west": {"uv": [7.5, 15, 8, 15.5], "texture": "#1"}, + "up": {"uv": [4.5, 12.5, 2.5, 12], "texture": "#1"}, + "down": {"uv": [14, 2.5, 12, 3], "texture": "#1"} + } + }, + { + "from": [5.34972, 28.88431, 7.70711], + "to": [10.84972, 30.32181, 8.70711], + "rotation": {"angle": 0, "axis": "y", "origin": [7.34972, 30.00931, 8.20711]}, + "faces": { + "north": {"uv": [2.5, 12.5, 4.5, 13], "texture": "#1"}, + "east": {"uv": [15, 10, 15.5, 10.5], "texture": "#1"}, + "south": {"uv": [12.5, 3, 14.5, 3.5], "texture": "#1"}, + "west": {"uv": [10.5, 15, 11, 15.5], "texture": "#1"}, + "up": {"uv": [14.5, 4, 12.5, 3.5], "texture": "#1"}, + "down": {"uv": [14.5, 4, 12.5, 4.5], "texture": "#1"} + } + }, + { + "from": [5.34972, 28.88431, 7.29289], + "to": [10.84972, 30.32181, 8.29289], + "rotation": {"angle": 0, "axis": "y", "origin": [4.34972, 30.00931, 7.79289]}, + "faces": { + "north": {"uv": [11.5, 12, 13.5, 12.5], "texture": "#1"}, + "east": {"uv": [15, 9.5, 15.5, 10], "texture": "#1"}, + "south": {"uv": [12.5, 0, 14.5, 0.5], "texture": "#1"}, + "west": {"uv": [10, 15, 10.5, 15.5], "texture": "#1"}, + "up": {"uv": [14.5, 1, 12.5, 0.5], "texture": "#1"}, + "down": {"uv": [14.5, 1, 12.5, 1.5], "texture": "#1"} + } + }, + { + "from": [9.73867, 29.88431, 7.29289], + "to": [11.73867, 30.32181, 8.29289], + "rotation": {"angle": 0, "axis": "y", "origin": [10.73867, 30.00931, 7.79289]}, + "faces": { + "north": {"uv": [14, 10, 15, 10.5], "texture": "#1"}, + "east": {"uv": [15, 9, 15.5, 9.5], "texture": "#1"}, + "south": {"uv": [10.5, 14, 11.5, 14.5], "texture": "#1"}, + "west": {"uv": [9.5, 15, 10, 15.5], "texture": "#1"}, + "up": {"uv": [15, 11, 14, 10.5], "texture": "#1"}, + "down": {"uv": [15, 11, 14, 11.5], "texture": "#1"} + } + }, + { + "from": [9.10769, 30.2241, 7.29289], + "to": [10.10769, 31.4116, 8.29289], + "rotation": {"angle": 0, "axis": "y", "origin": [9.10769, 30.0991, 7.79289]}, + "faces": { + "north": {"uv": [15.5, 8, 16, 8.5], "texture": "#1"}, + "east": {"uv": [8.5, 15.5, 9, 16], "texture": "#1"}, + "south": {"uv": [15.5, 8.5, 16, 9], "texture": "#1"}, + "west": {"uv": [9, 15.5, 9.5, 16], "texture": "#1"}, + "up": {"uv": [16, 9.5, 15.5, 9], "texture": "#1"}, + "down": {"uv": [10, 15.5, 9.5, 16], "texture": "#1"} + } + }, + { + "from": [5.9807, 30.2241, 7.29289], + "to": [9.1682, 31.4116, 8.29289], + "rotation": {"angle": 0, "axis": "y", "origin": [8.9807, 30.0991, 7.79289]}, + "faces": { + "north": {"uv": [15.5, 9.5, 16, 10], "texture": "#1"}, + "east": {"uv": [10, 15.5, 10.5, 16], "texture": "#1"}, + "south": {"uv": [15.5, 10, 16, 10.5], "texture": "#1"}, + "west": {"uv": [10.5, 15.5, 11, 16], "texture": "#1"}, + "up": {"uv": [16, 11, 15.5, 10.5], "texture": "#1"}, + "down": {"uv": [11.5, 15.5, 11, 16], "texture": "#1"} + } + }, + { + "from": [9.10769, 30.2241, 7.70711], + "to": [10.10769, 31.4116, 8.70711], + "rotation": {"angle": 0, "axis": "y", "origin": [9.10769, 30.0991, 8.20711]}, + "faces": { + "north": {"uv": [15.5, 12.5, 16, 13], "texture": "#1"}, + "east": {"uv": [13, 15.5, 13.5, 16], "texture": "#1"}, + "south": {"uv": [15.5, 13, 16, 13.5], "texture": "#1"}, + "west": {"uv": [13.5, 15.5, 14, 16], "texture": "#1"}, + "up": {"uv": [16, 14, 15.5, 13.5], "texture": "#1"}, + "down": {"uv": [14.5, 15.5, 14, 16], "texture": "#1"} + } + }, + { + "from": [5.9807, 30.2241, 7.70711], + "to": [9.1682, 31.4116, 8.70711], + "rotation": {"angle": 0, "axis": "y", "origin": [8.9807, 30.0991, 8.20711]}, + "faces": { + "north": {"uv": [15.5, 11, 16, 11.5], "texture": "#1"}, + "east": {"uv": [11.5, 15.5, 12, 16], "texture": "#1"}, + "south": {"uv": [15.5, 11.5, 16, 12], "texture": "#1"}, + "west": {"uv": [12, 15.5, 12.5, 16], "texture": "#1"}, + "up": {"uv": [16, 12.5, 15.5, 12], "texture": "#1"}, + "down": {"uv": [13, 15.5, 12.5, 16], "texture": "#1"} + } + }, + { + "from": [10.73044, 29.67693, 7.29289], + "to": [11.73044, 30.73943, 8.29289], + "rotation": {"angle": -45, "axis": "z", "origin": [11.23044, 30.52068, 7.79289]}, + "faces": { + "north": {"uv": [15, 10.5, 15.5, 11], "texture": "#1"}, + "east": {"uv": [11, 15, 11.5, 15.5], "texture": "#1"}, + "south": {"uv": [15, 11, 15.5, 11.5], "texture": "#1"}, + "west": {"uv": [11.5, 15, 12, 15.5], "texture": "#1"}, + "up": {"uv": [15.5, 12, 15, 11.5], "texture": "#1"}, + "down": {"uv": [12.5, 15, 12, 15.5], "texture": "#1"} + } + }, + { + "from": [9.98591, 30.04941, 7.29289], + "to": [10.98591, 31.23691, 8.29289], + "rotation": {"angle": -22.5, "axis": "z", "origin": [10.48591, 31.01816, 7.79289]}, + "faces": { + "north": {"uv": [15, 12, 15.5, 12.5], "texture": "#1"}, + "east": {"uv": [12.5, 15, 13, 15.5], "texture": "#1"}, + "south": {"uv": [15, 12.5, 15.5, 13], "texture": "#1"}, + "west": {"uv": [13, 15, 13.5, 15.5], "texture": "#1"}, + "up": {"uv": [15.5, 13.5, 15, 13], "texture": "#1"}, + "down": {"uv": [14, 15, 13.5, 15.5], "texture": "#1"} + } + }, + { + "from": [9.98591, 30.04941, 7.70711], + "to": [10.98591, 31.23691, 8.70711], + "rotation": {"angle": -22.5, "axis": "z", "origin": [10.48591, 31.01816, 8.20711]}, + "faces": { + "north": {"uv": [15.5, 0, 16, 0.5], "texture": "#1"}, + "east": {"uv": [15.5, 0.5, 16, 1], "texture": "#1"}, + "south": {"uv": [15.5, 1, 16, 1.5], "texture": "#1"}, + "west": {"uv": [1.5, 15.5, 2, 16], "texture": "#1"}, + "up": {"uv": [16, 2, 15.5, 1.5], "texture": "#1"}, + "down": {"uv": [2.5, 15.5, 2, 16], "texture": "#1"} + } + }, + { + "from": [10.73044, 29.67693, 7.70711], + "to": [11.73044, 30.73943, 8.70711], + "rotation": {"angle": -45, "axis": "z", "origin": [11.23044, 30.52068, 8.20711]}, + "faces": { + "north": {"uv": [15, 13.5, 15.5, 14], "texture": "#1"}, + "east": {"uv": [14, 15, 14.5, 15.5], "texture": "#1"}, + "south": {"uv": [15, 14, 15.5, 14.5], "texture": "#1"}, + "west": {"uv": [14.5, 15, 15, 15.5], "texture": "#1"}, + "up": {"uv": [15.5, 15, 15, 14.5], "texture": "#1"}, + "down": {"uv": [15.5, 15, 15, 15.5], "texture": "#1"} + } + }, + { + "from": [4.35795, 29.92693, 7.29289], + "to": [5.35795, 30.73943, 8.29289], + "rotation": {"angle": 45, "axis": "z", "origin": [4.85795, 30.52068, 7.79289]}, + "faces": { + "north": {"uv": [15.5, 6.5, 16, 7], "texture": "#1"}, + "east": {"uv": [7, 15.5, 7.5, 16], "texture": "#1"}, + "south": {"uv": [15.5, 7, 16, 7.5], "texture": "#1"}, + "west": {"uv": [7.5, 15.5, 8, 16], "texture": "#1"}, + "up": {"uv": [16, 8, 15.5, 7.5], "texture": "#1"}, + "down": {"uv": [8.5, 15.5, 8, 16], "texture": "#1"} + } + }, + { + "from": [5.10248, 30.04941, 7.29289], + "to": [6.10248, 31.23691, 8.29289], + "rotation": {"angle": 22.5, "axis": "z", "origin": [5.60248, 31.01816, 7.79289]}, + "faces": { + "north": {"uv": [15.5, 5, 16, 5.5], "texture": "#1"}, + "east": {"uv": [5.5, 15.5, 6, 16], "texture": "#1"}, + "south": {"uv": [15.5, 5.5, 16, 6], "texture": "#1"}, + "west": {"uv": [6, 15.5, 6.5, 16], "texture": "#1"}, + "up": {"uv": [16, 6.5, 15.5, 6], "texture": "#1"}, + "down": {"uv": [7, 15.5, 6.5, 16], "texture": "#1"} + } + }, + { + "from": [4.35795, 29.92693, 7.70711], + "to": [5.35795, 30.73943, 8.70711], + "rotation": {"angle": 45, "axis": "z", "origin": [4.85795, 30.52068, 8.20711]}, + "faces": { + "north": {"uv": [15.5, 3.5, 16, 4], "texture": "#1"}, + "east": {"uv": [4, 15.5, 4.5, 16], "texture": "#1"}, + "south": {"uv": [15.5, 4, 16, 4.5], "texture": "#1"}, + "west": {"uv": [4.5, 15.5, 5, 16], "texture": "#1"}, + "up": {"uv": [16, 5, 15.5, 4.5], "texture": "#1"}, + "down": {"uv": [5.5, 15.5, 5, 16], "texture": "#1"} + } + }, + { + "from": [5.10248, 30.04941, 7.70711], + "to": [6.10248, 31.23691, 8.70711], + "rotation": {"angle": 22.5, "axis": "z", "origin": [5.60248, 31.01816, 8.20711]}, + "faces": { + "north": {"uv": [15.5, 2, 16, 2.5], "texture": "#1"}, + "east": {"uv": [2.5, 15.5, 3, 16], "texture": "#1"}, + "south": {"uv": [15.5, 2.5, 16, 3], "texture": "#1"}, + "west": {"uv": [3, 15.5, 3.5, 16], "texture": "#1"}, + "up": {"uv": [16, 3.5, 15.5, 3], "texture": "#1"}, + "down": {"uv": [4, 15.5, 3.5, 16], "texture": "#1"} + } + }, + { + "from": [9.73867, 29.88431, 7.70711], + "to": [11.73867, 30.32181, 8.70711], + "rotation": {"angle": 0, "axis": "y", "origin": [10.73867, 30.00931, 8.20711]}, + "faces": { + "north": {"uv": [14, 7.5, 15, 8], "texture": "#1"}, + "east": {"uv": [15, 8.5, 15.5, 9], "texture": "#1"}, + "south": {"uv": [14, 8, 15, 8.5], "texture": "#1"}, + "west": {"uv": [9, 15, 9.5, 15.5], "texture": "#1"}, + "up": {"uv": [9.5, 14.5, 8.5, 14], "texture": "#1"}, + "down": {"uv": [15, 9.5, 14, 10], "texture": "#1"} + } + }, + { + "from": [10.77673, 26.07565, 7.70711], + "to": [11.77673, 30.07565, 8.70711], + "rotation": {"angle": -22.5, "axis": "z", "origin": [11.27673, 30.07565, 8]}, + "faces": { + "north": {"uv": [8.5, 12, 9, 14], "texture": "#1"}, + "east": {"uv": [9, 12, 9.5, 14], "texture": "#1"}, + "south": {"uv": [10.5, 12, 11, 14], "texture": "#1"}, + "west": {"uv": [11, 12, 11.5, 14], "texture": "#1"}, + "up": {"uv": [15.5, 8.5, 15, 8], "texture": "#1"}, + "down": {"uv": [9, 15, 8.5, 15.5], "texture": "#1"} + } + }, + { + "from": [10.77673, 26.07565, 7.29289], + "to": [11.77673, 30.07565, 8.29289], + "rotation": {"angle": -22.5, "axis": "z", "origin": [11.27673, 30.07565, 8]}, + "faces": { + "north": {"uv": [12, 3, 12.5, 5], "texture": "#1"}, + "east": {"uv": [12, 5, 12.5, 7], "texture": "#1"}, + "south": {"uv": [6, 12, 6.5, 14], "texture": "#1"}, + "west": {"uv": [6.5, 12, 7, 14], "texture": "#1"}, + "up": {"uv": [15.5, 8, 15, 7.5], "texture": "#1"}, + "down": {"uv": [8.5, 15, 8, 15.5], "texture": "#1"} + } + }, + { + "from": [8.3441, -0.60492, 7.21452], + "to": [9.0941, 0.89508, 8.71452], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8.3441, 0.14508, 7.96452]}, + "faces": { + "north": {"uv": [3, 14.5, 3.5, 15], "texture": "#1"}, + "east": {"uv": [14.5, 3, 15, 3.5], "texture": "#1"}, + "south": {"uv": [3.5, 14.5, 4, 15], "texture": "#1"}, + "west": {"uv": [14.5, 3.5, 15, 4], "texture": "#1"}, + "up": {"uv": [4.5, 15, 4, 14.5], "texture": "#1"}, + "down": {"uv": [15, 4, 14.5, 4.5], "texture": "#1"} + } + }, + { + "from": [7.02008, -0.0309, 7.21452], + "to": [7.77008, 1.4691, 8.71452], + "rotation": {"angle": -22.5, "axis": "z", "origin": [6.27008, 0.7191, 7.96452]}, + "faces": { + "north": {"uv": [6, 14.5, 6.5, 15], "texture": "#1"}, + "east": {"uv": [14.5, 6.5, 15, 7], "texture": "#1"}, + "south": {"uv": [14.5, 7, 15, 7.5], "texture": "#1"}, + "west": {"uv": [8.5, 14.5, 9, 15], "texture": "#1"}, + "up": {"uv": [15, 9, 14.5, 8.5], "texture": "#1"}, + "down": {"uv": [9.5, 14.5, 9, 15], "texture": "#1"} + } + }, + { + "from": [7.25, -0.38966, 8.2658], + "to": [8.75, 1.11034, 9.0158], + "rotation": {"angle": -22.5, "axis": "x", "origin": [8, 0.36034, 8.8283]}, + "faces": { + "north": {"uv": [14.5, 11.5, 15, 12], "texture": "#1"}, + "east": {"uv": [12, 14.5, 12.5, 15], "texture": "#1"}, + "south": {"uv": [12.5, 14.5, 13, 15], "texture": "#1"}, + "west": {"uv": [14.5, 12.5, 15, 13], "texture": "#1"}, + "up": {"uv": [13.5, 15, 13, 14.5], "texture": "#1"}, + "down": {"uv": [14, 14.5, 13.5, 15], "texture": "#1"} + } + }, + { + "from": [7.25, -0.63582, 8.16354], + "to": [8.75, -0.26082, 9.28854], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -0.44832, 8.53854]}, + "faces": { + "north": {"uv": [14, 14.5, 14.5, 15], "texture": "#1"}, + "east": {"uv": [14.5, 14, 15, 14.5], "texture": "#1"}, + "south": {"uv": [14.5, 14.5, 15, 15], "texture": "#1"}, + "west": {"uv": [15, 0, 15.5, 0.5], "texture": "#1"}, + "up": {"uv": [15.5, 1, 15, 0.5], "texture": "#1"}, + "down": {"uv": [15.5, 1, 15, 1.5], "texture": "#1"} + } + }, + { + "from": [7.25, -0.63582, 6.64049], + "to": [8.75, -0.26082, 9.26549], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -0.44832, 8.51549]}, + "faces": { + "north": {"uv": [1.5, 15, 2, 15.5], "texture": "#1"}, + "east": {"uv": [14, 5.5, 15, 6], "texture": "#1"}, + "south": {"uv": [2, 15, 2.5, 15.5], "texture": "#1"}, + "west": {"uv": [14, 6, 15, 6.5], "texture": "#1"}, + "up": {"uv": [7, 15, 6.5, 14], "texture": "#1"}, + "down": {"uv": [14.5, 6.5, 14, 7.5], "texture": "#1"} + } + }, + { + "from": [8.19903, -0.63582, 7.21452], + "to": [9.32403, -0.26082, 8.71452], + "rotation": {"angle": 0, "axis": "y", "origin": [8.76153, -0.44832, 7.96452]}, + "faces": { + "north": {"uv": [2.5, 15, 3, 15.5], "texture": "#1"}, + "east": {"uv": [3, 15, 3.5, 15.5], "texture": "#1"}, + "south": {"uv": [15, 3, 15.5, 3.5], "texture": "#1"}, + "west": {"uv": [3.5, 15, 4, 15.5], "texture": "#1"}, + "up": {"uv": [15.5, 4, 15, 3.5], "texture": "#1"}, + "down": {"uv": [4.5, 15, 4, 15.5], "texture": "#1"} + } + }, + { + "from": [6.67597, -0.63582, 7.21452], + "to": [7.80097, -0.26082, 8.71452], + "rotation": {"angle": 0, "axis": "y", "origin": [7.23847, -0.44832, 7.96452]}, + "faces": { + "north": {"uv": [15, 4, 15.5, 4.5], "texture": "#1"}, + "east": {"uv": [4.5, 15, 5, 15.5], "texture": "#1"}, + "south": {"uv": [15, 4.5, 15.5, 5], "texture": "#1"}, + "west": {"uv": [5, 15, 5.5, 15.5], "texture": "#1"}, + "up": {"uv": [15.5, 5.5, 15, 5], "texture": "#1"}, + "down": {"uv": [6, 15, 5.5, 15.5], "texture": "#1"} + } + }, + { + "from": [7.25, -0.38966, 6.91323], + "to": [8.75, 1.11034, 7.66323], + "rotation": {"angle": 22.5, "axis": "x", "origin": [8, 0.36034, 7.10073]}, + "faces": { + "north": {"uv": [14.5, 9, 15, 9.5], "texture": "#1"}, + "east": {"uv": [9.5, 14.5, 10, 15], "texture": "#1"}, + "south": {"uv": [10, 14.5, 10.5, 15], "texture": "#1"}, + "west": {"uv": [10.5, 14.5, 11, 15], "texture": "#1"}, + "up": {"uv": [11.5, 15, 11, 14.5], "texture": "#1"}, + "down": {"uv": [12, 14.5, 11.5, 15], "texture": "#1"} + } + }, + { + "from": [7.25, 1.125, 7.375], + "to": [8.75, 7.125, 8.625], + "rotation": {"angle": 0, "axis": "y", "origin": [9, 7.125, 7.0625]}, + "faces": { + "north": {"uv": [9.5, 10.5, 10, 13], "texture": "#1"}, + "east": {"uv": [1.5, 11.5, 2, 14], "texture": "#1"}, + "south": {"uv": [11.5, 1.5, 12, 4], "texture": "#1"}, + "west": {"uv": [2, 11.5, 2.5, 14], "texture": "#1"}, + "up": {"uv": [5, 15, 4.5, 14.5], "texture": "#1"}, + "down": {"uv": [6, 14.5, 5.5, 15], "texture": "#1"} + } + }, + { + "from": [5, 9, 7.5], + "to": [6, 30, 8.5], + "rotation": {"angle": -45, "axis": "y", "origin": [5.5, 10, 8]}, + "faces": { + "north": {"uv": [6, 0, 6.5, 10.5], "texture": "#1"}, + "east": {"uv": [6.5, 0, 7, 10.5], "texture": "#1"}, + "south": {"uv": [7, 0, 7.5, 10.5], "texture": "#1"}, + "west": {"uv": [7.5, 0, 8, 10.5], "texture": "#1"}, + "up": {"uv": [15, 1.5, 14.5, 1], "texture": "#1"}, + "down": {"uv": [2, 14.5, 1.5, 15], "texture": "#1"} + } + }, + { + "from": [10, 9, 7.5], + "to": [11, 30, 8.5], + "rotation": {"angle": -45, "axis": "y", "origin": [10.5, 10, 8]}, + "faces": { + "north": {"uv": [8, 0, 8.5, 10.5], "texture": "#1"}, + "east": {"uv": [8.5, 0, 9, 10.5], "texture": "#1"}, + "south": {"uv": [9, 0, 9.5, 10.5], "texture": "#1"}, + "west": {"uv": [9.5, 0, 10, 10.5], "texture": "#1"}, + "up": {"uv": [2.5, 15, 2, 14.5], "texture": "#1"}, + "down": {"uv": [3, 14.5, 2.5, 15], "texture": "#1"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [0, 90, 0], + "translation": [0, 6, 1.75], + "scale": [2, 2, 2] + }, + "thirdperson_lefthand": { + "rotation": [0, 90, 0], + "translation": [0, 6, 1.75], + "scale": [2, 2, 2] + }, + "firstperson_righthand": { + "rotation": [0, 90, 0], + "translation": [0, 0.5, -1.75], + "scale": [1.5, 1.5, 1.5] + }, + "firstperson_lefthand": { + "rotation": [0, 90, 0], + "translation": [0, 0.75, -1.75], + "scale": [1.5, 1.5, 1.5] + }, + "ground": { + "translation": [0, 5, 0] + }, + "gui": { + "rotation": [0, 0, -45], + "translation": [-2, -2, 0], + "scale": [0.5, 0.5, 0.5] + }, + "fixed": { + "translation": [0, -3, 0], + "scale": [0.5, 0.5, 0.5] + } + }, + "groups": [ + { + "name": "Everything", + "origin": [8, 8, 8], + "color": 0, + "children": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44] + } + ] +} \ No newline at end of file diff --git a/src/hemalurgy/resources/assets/hemalurgy/models/item/spike.json b/src/hemalurgy/resources/assets/hemalurgy/models/item/spike.json new file mode 100644 index 000000000..e9034443e --- /dev/null +++ b/src/hemalurgy/resources/assets/hemalurgy/models/item/spike.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:item/generated", + "display": { + "gui": { + "rotation": [ + 0, + 0, + 180 + ] + } + } +} \ No newline at end of file diff --git a/src/hemalurgy/resources/assets/hemalurgy/textures/entity/koloss/koloss_large.png b/src/hemalurgy/resources/assets/hemalurgy/textures/entity/koloss/koloss_large.png new file mode 100644 index 000000000..0bb28f27e Binary files /dev/null and b/src/hemalurgy/resources/assets/hemalurgy/textures/entity/koloss/koloss_large.png differ diff --git a/src/hemalurgy/resources/assets/hemalurgy/textures/entity/koloss/koloss_medium.png b/src/hemalurgy/resources/assets/hemalurgy/textures/entity/koloss/koloss_medium.png new file mode 100644 index 000000000..90bb1d26b Binary files /dev/null and b/src/hemalurgy/resources/assets/hemalurgy/textures/entity/koloss/koloss_medium.png differ diff --git a/src/hemalurgy/resources/assets/hemalurgy/textures/entity/koloss/koloss_small.png b/src/hemalurgy/resources/assets/hemalurgy/textures/entity/koloss/koloss_small.png new file mode 100644 index 000000000..ee7ce6a85 Binary files /dev/null and b/src/hemalurgy/resources/assets/hemalurgy/textures/entity/koloss/koloss_small.png differ diff --git a/src/hemalurgy/resources/assets/hemalurgy/textures/item/aluminum_spike.png b/src/hemalurgy/resources/assets/hemalurgy/textures/item/aluminum_spike.png new file mode 100644 index 000000000..a82514b35 Binary files /dev/null and b/src/hemalurgy/resources/assets/hemalurgy/textures/item/aluminum_spike.png differ diff --git a/src/hemalurgy/resources/assets/hemalurgy/textures/item/atium_spike.png b/src/hemalurgy/resources/assets/hemalurgy/textures/item/atium_spike.png new file mode 100644 index 000000000..626893e12 Binary files /dev/null and b/src/hemalurgy/resources/assets/hemalurgy/textures/item/atium_spike.png differ diff --git a/src/hemalurgy/resources/assets/hemalurgy/textures/item/bendalloy_spike.png b/src/hemalurgy/resources/assets/hemalurgy/textures/item/bendalloy_spike.png new file mode 100644 index 000000000..da6d3f6d9 Binary files /dev/null and b/src/hemalurgy/resources/assets/hemalurgy/textures/item/bendalloy_spike.png differ diff --git a/src/hemalurgy/resources/assets/hemalurgy/textures/item/brass_spike.png b/src/hemalurgy/resources/assets/hemalurgy/textures/item/brass_spike.png new file mode 100644 index 000000000..1f161692c Binary files /dev/null and b/src/hemalurgy/resources/assets/hemalurgy/textures/item/brass_spike.png differ diff --git a/src/hemalurgy/resources/assets/hemalurgy/textures/item/bronze_spike.png b/src/hemalurgy/resources/assets/hemalurgy/textures/item/bronze_spike.png new file mode 100644 index 000000000..71f74497b Binary files /dev/null and b/src/hemalurgy/resources/assets/hemalurgy/textures/item/bronze_spike.png differ diff --git a/src/hemalurgy/resources/assets/hemalurgy/textures/item/cadmium_spike.png b/src/hemalurgy/resources/assets/hemalurgy/textures/item/cadmium_spike.png new file mode 100644 index 000000000..43ae49110 Binary files /dev/null and b/src/hemalurgy/resources/assets/hemalurgy/textures/item/cadmium_spike.png differ diff --git a/src/hemalurgy/resources/assets/hemalurgy/textures/item/chromium_spike.png b/src/hemalurgy/resources/assets/hemalurgy/textures/item/chromium_spike.png new file mode 100644 index 000000000..88927bd57 Binary files /dev/null and b/src/hemalurgy/resources/assets/hemalurgy/textures/item/chromium_spike.png differ diff --git a/src/hemalurgy/resources/assets/hemalurgy/textures/item/copper_spike.png b/src/hemalurgy/resources/assets/hemalurgy/textures/item/copper_spike.png new file mode 100644 index 000000000..03f745dd1 Binary files /dev/null and b/src/hemalurgy/resources/assets/hemalurgy/textures/item/copper_spike.png differ diff --git a/src/hemalurgy/resources/assets/hemalurgy/textures/item/duralumin_spike.png b/src/hemalurgy/resources/assets/hemalurgy/textures/item/duralumin_spike.png new file mode 100644 index 000000000..09fe2fffd Binary files /dev/null and b/src/hemalurgy/resources/assets/hemalurgy/textures/item/duralumin_spike.png differ diff --git a/src/hemalurgy/resources/assets/hemalurgy/textures/item/electrum_spike.png b/src/hemalurgy/resources/assets/hemalurgy/textures/item/electrum_spike.png new file mode 100644 index 000000000..d08e5eacb Binary files /dev/null and b/src/hemalurgy/resources/assets/hemalurgy/textures/item/electrum_spike.png differ diff --git a/src/hemalurgy/resources/assets/hemalurgy/textures/item/gold_spike.png b/src/hemalurgy/resources/assets/hemalurgy/textures/item/gold_spike.png new file mode 100644 index 000000000..d18b804f1 Binary files /dev/null and b/src/hemalurgy/resources/assets/hemalurgy/textures/item/gold_spike.png differ diff --git a/src/hemalurgy/resources/assets/hemalurgy/textures/item/iron_spike.png b/src/hemalurgy/resources/assets/hemalurgy/textures/item/iron_spike.png new file mode 100644 index 000000000..30686221b Binary files /dev/null and b/src/hemalurgy/resources/assets/hemalurgy/textures/item/iron_spike.png differ diff --git a/src/hemalurgy/resources/assets/hemalurgy/textures/item/koloss_sword.png b/src/hemalurgy/resources/assets/hemalurgy/textures/item/koloss_sword.png new file mode 100644 index 000000000..58e933397 Binary files /dev/null and b/src/hemalurgy/resources/assets/hemalurgy/textures/item/koloss_sword.png differ diff --git a/src/hemalurgy/resources/assets/hemalurgy/textures/item/lerasatium_spike.png b/src/hemalurgy/resources/assets/hemalurgy/textures/item/lerasatium_spike.png new file mode 100644 index 000000000..fa1192967 Binary files /dev/null and b/src/hemalurgy/resources/assets/hemalurgy/textures/item/lerasatium_spike.png differ diff --git a/src/hemalurgy/resources/assets/hemalurgy/textures/item/lerasium_spike.png b/src/hemalurgy/resources/assets/hemalurgy/textures/item/lerasium_spike.png new file mode 100644 index 000000000..ebe0d0ffb Binary files /dev/null and b/src/hemalurgy/resources/assets/hemalurgy/textures/item/lerasium_spike.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/metal_spike.png b/src/hemalurgy/resources/assets/hemalurgy/textures/item/metal_spike.png similarity index 84% rename from src/main/resources/assets/cosmere/textures/item/metal_spike.png rename to src/hemalurgy/resources/assets/hemalurgy/textures/item/metal_spike.png index 9d33e0f87..7f110f2da 100644 Binary files a/src/main/resources/assets/cosmere/textures/item/metal_spike.png and b/src/hemalurgy/resources/assets/hemalurgy/textures/item/metal_spike.png differ diff --git a/src/hemalurgy/resources/assets/hemalurgy/textures/item/nicrosil_spike.png b/src/hemalurgy/resources/assets/hemalurgy/textures/item/nicrosil_spike.png new file mode 100644 index 000000000..742e8a3c4 Binary files /dev/null and b/src/hemalurgy/resources/assets/hemalurgy/textures/item/nicrosil_spike.png differ diff --git a/src/hemalurgy/resources/assets/hemalurgy/textures/item/pewter_spike.png b/src/hemalurgy/resources/assets/hemalurgy/textures/item/pewter_spike.png new file mode 100644 index 000000000..13364fa60 Binary files /dev/null and b/src/hemalurgy/resources/assets/hemalurgy/textures/item/pewter_spike.png differ diff --git a/src/hemalurgy/resources/assets/hemalurgy/textures/item/steel_spike.png b/src/hemalurgy/resources/assets/hemalurgy/textures/item/steel_spike.png new file mode 100644 index 000000000..a362fbc73 Binary files /dev/null and b/src/hemalurgy/resources/assets/hemalurgy/textures/item/steel_spike.png differ diff --git a/src/hemalurgy/resources/assets/hemalurgy/textures/item/tin_spike.png b/src/hemalurgy/resources/assets/hemalurgy/textures/item/tin_spike.png new file mode 100644 index 000000000..72b20690e Binary files /dev/null and b/src/hemalurgy/resources/assets/hemalurgy/textures/item/tin_spike.png differ diff --git a/src/hemalurgy/resources/assets/hemalurgy/textures/item/zinc_spike.png b/src/hemalurgy/resources/assets/hemalurgy/textures/item/zinc_spike.png new file mode 100644 index 000000000..a4f73a8ba Binary files /dev/null and b/src/hemalurgy/resources/assets/hemalurgy/textures/item/zinc_spike.png differ diff --git a/src/hemalurgy/resources/hemalurgy.mixins.json b/src/hemalurgy/resources/hemalurgy.mixins.json new file mode 100644 index 000000000..2aac09512 --- /dev/null +++ b/src/hemalurgy/resources/hemalurgy.mixins.json @@ -0,0 +1,14 @@ +{ + "required": true, + "minVersion": "0.8", + "package": "leaf.cosmere.hemalurgy.mixin", + "compatibilityLevel": "JAVA_17", + "refmap": "mixins.cosmere.hemalurgy.refmap.json", + "mixins": [ + ], + "client": [ + ], + "injectors": { + "defaultRequire": 1 + } +} \ No newline at end of file diff --git a/src/hemalurgy/resources/pack.mcmeta b/src/hemalurgy/resources/pack.mcmeta new file mode 100644 index 000000000..b79d325a8 --- /dev/null +++ b/src/hemalurgy/resources/pack.mcmeta @@ -0,0 +1,6 @@ +{ + "pack": { + "description": "Resources used for Cosmere Hemalurgy", + "pack_format": 15 + } +} \ No newline at end of file diff --git a/src/main/generated/.cache/cache b/src/main/generated/.cache/cache deleted file mode 100644 index b30b55263..000000000 --- a/src/main/generated/.cache/cache +++ /dev/null @@ -1,797 +0,0 @@ -edaa7877000a497242bfd5901b6773cfa26fc309 assets/cosmere/blockstates/aluminum_block.json -b118f65ac1078511bdff353013a20ebe62732b22 assets/cosmere/blockstates/aluminum_ore.json -edaa7877000a497242bfd5901b6773cfa26fc309 assets/cosmere/blockstates/atium_block.json -edaa7877000a497242bfd5901b6773cfa26fc309 assets/cosmere/blockstates/bendalloy_block.json -edaa7877000a497242bfd5901b6773cfa26fc309 assets/cosmere/blockstates/brass_block.json -edaa7877000a497242bfd5901b6773cfa26fc309 assets/cosmere/blockstates/bronze_block.json -edaa7877000a497242bfd5901b6773cfa26fc309 assets/cosmere/blockstates/cadmium_block.json -b118f65ac1078511bdff353013a20ebe62732b22 assets/cosmere/blockstates/cadmium_ore.json -edaa7877000a497242bfd5901b6773cfa26fc309 assets/cosmere/blockstates/chromium_block.json -b118f65ac1078511bdff353013a20ebe62732b22 assets/cosmere/blockstates/chromium_ore.json -edaa7877000a497242bfd5901b6773cfa26fc309 assets/cosmere/blockstates/copper_block.json -b118f65ac1078511bdff353013a20ebe62732b22 assets/cosmere/blockstates/copper_ore.json -edaa7877000a497242bfd5901b6773cfa26fc309 assets/cosmere/blockstates/duralumin_block.json -edaa7877000a497242bfd5901b6773cfa26fc309 assets/cosmere/blockstates/electrum_block.json -7dfa2fadeaa6bc2b99a30823035a6c970054afb4 assets/cosmere/blockstates/gem_block.json -edaa7877000a497242bfd5901b6773cfa26fc309 assets/cosmere/blockstates/harmonium_block.json -edaa7877000a497242bfd5901b6773cfa26fc309 assets/cosmere/blockstates/lead_block.json -b118f65ac1078511bdff353013a20ebe62732b22 assets/cosmere/blockstates/lead_ore.json -edaa7877000a497242bfd5901b6773cfa26fc309 assets/cosmere/blockstates/lerasatium_block.json -edaa7877000a497242bfd5901b6773cfa26fc309 assets/cosmere/blockstates/lerasium_block.json -edaa7877000a497242bfd5901b6773cfa26fc309 assets/cosmere/blockstates/malatium_block.json -edaa7877000a497242bfd5901b6773cfa26fc309 assets/cosmere/blockstates/nickel_block.json -b118f65ac1078511bdff353013a20ebe62732b22 assets/cosmere/blockstates/nickel_ore.json -edaa7877000a497242bfd5901b6773cfa26fc309 assets/cosmere/blockstates/nicrosil_block.json -edaa7877000a497242bfd5901b6773cfa26fc309 assets/cosmere/blockstates/pewter_block.json -edaa7877000a497242bfd5901b6773cfa26fc309 assets/cosmere/blockstates/silver_block.json -b118f65ac1078511bdff353013a20ebe62732b22 assets/cosmere/blockstates/silver_ore.json -edaa7877000a497242bfd5901b6773cfa26fc309 assets/cosmere/blockstates/steel_block.json -edaa7877000a497242bfd5901b6773cfa26fc309 assets/cosmere/blockstates/tin_block.json -b118f65ac1078511bdff353013a20ebe62732b22 assets/cosmere/blockstates/tin_ore.json -edaa7877000a497242bfd5901b6773cfa26fc309 assets/cosmere/blockstates/zinc_block.json -b118f65ac1078511bdff353013a20ebe62732b22 assets/cosmere/blockstates/zinc_ore.json -3e85f76d55843632fb3dfa1ac16665029ae51448 assets/cosmere/lang/en_us.json -e9fe228cb639a8823d11fe37d1d1b079e9bd4cb7 assets/cosmere/models/block/gem_block.json -b66394816822b5feda05810c580e11ddb986f4a0 assets/cosmere/models/block/metal_block.json -645553d67807b60210c1bfae147ccd31ec88eaf0 assets/cosmere/models/block/ore_block.json -a503e66f7bf5e2931eab954d102be9f32aa7191b assets/cosmere/models/item/aluminum_block.json -c47bd16e2bcdc40ae090cc10098ea3ce36528e8c assets/cosmere/models/item/aluminum_bracelet_metalmind.json -695cefddc4a8e95a59550e4c02160fc8cadf75ca assets/cosmere/models/item/aluminum_ingot.json -10f9380cf2778b89c363a92139e9af0b91012529 assets/cosmere/models/item/aluminum_necklace_metalmind.json -9380f4ba003c9edcd932e027c4abe4900ac23b20 assets/cosmere/models/item/aluminum_nugget.json -b0505539f57c33b8c0275af4c13cebc88e1c80b1 assets/cosmere/models/item/aluminum_ore.json -b4b59a71160a8130d6ed2b18ebb204cbf0eb4ef1 assets/cosmere/models/item/aluminum_ring_metalmind.json -e34436395cae4a9d60a64e0c5c69d9dc45687c63 assets/cosmere/models/item/aluminum_spike.json -a503e66f7bf5e2931eab954d102be9f32aa7191b assets/cosmere/models/item/atium_block.json -c47bd16e2bcdc40ae090cc10098ea3ce36528e8c assets/cosmere/models/item/atium_bracelet_metalmind.json -695cefddc4a8e95a59550e4c02160fc8cadf75ca assets/cosmere/models/item/atium_ingot.json -10f9380cf2778b89c363a92139e9af0b91012529 assets/cosmere/models/item/atium_necklace_metalmind.json -9380f4ba003c9edcd932e027c4abe4900ac23b20 assets/cosmere/models/item/atium_nugget.json -b4b59a71160a8130d6ed2b18ebb204cbf0eb4ef1 assets/cosmere/models/item/atium_ring_metalmind.json -e34436395cae4a9d60a64e0c5c69d9dc45687c63 assets/cosmere/models/item/atium_spike.json -e64d67fe3876939a73c3c5776979d204cabbda20 assets/cosmere/models/item/bendalloy_blend.json -a503e66f7bf5e2931eab954d102be9f32aa7191b assets/cosmere/models/item/bendalloy_block.json -c47bd16e2bcdc40ae090cc10098ea3ce36528e8c assets/cosmere/models/item/bendalloy_bracelet_metalmind.json -695cefddc4a8e95a59550e4c02160fc8cadf75ca assets/cosmere/models/item/bendalloy_ingot.json -10f9380cf2778b89c363a92139e9af0b91012529 assets/cosmere/models/item/bendalloy_necklace_metalmind.json -9380f4ba003c9edcd932e027c4abe4900ac23b20 assets/cosmere/models/item/bendalloy_nugget.json -b4b59a71160a8130d6ed2b18ebb204cbf0eb4ef1 assets/cosmere/models/item/bendalloy_ring_metalmind.json -e34436395cae4a9d60a64e0c5c69d9dc45687c63 assets/cosmere/models/item/bendalloy_spike.json -e64d67fe3876939a73c3c5776979d204cabbda20 assets/cosmere/models/item/brass_blend.json -a503e66f7bf5e2931eab954d102be9f32aa7191b assets/cosmere/models/item/brass_block.json -c47bd16e2bcdc40ae090cc10098ea3ce36528e8c assets/cosmere/models/item/brass_bracelet_metalmind.json -695cefddc4a8e95a59550e4c02160fc8cadf75ca assets/cosmere/models/item/brass_ingot.json -10f9380cf2778b89c363a92139e9af0b91012529 assets/cosmere/models/item/brass_necklace_metalmind.json -9380f4ba003c9edcd932e027c4abe4900ac23b20 assets/cosmere/models/item/brass_nugget.json -b4b59a71160a8130d6ed2b18ebb204cbf0eb4ef1 assets/cosmere/models/item/brass_ring_metalmind.json -e34436395cae4a9d60a64e0c5c69d9dc45687c63 assets/cosmere/models/item/brass_spike.json -e64d67fe3876939a73c3c5776979d204cabbda20 assets/cosmere/models/item/bronze_blend.json -a503e66f7bf5e2931eab954d102be9f32aa7191b assets/cosmere/models/item/bronze_block.json -c47bd16e2bcdc40ae090cc10098ea3ce36528e8c assets/cosmere/models/item/bronze_bracelet_metalmind.json -695cefddc4a8e95a59550e4c02160fc8cadf75ca assets/cosmere/models/item/bronze_ingot.json -10f9380cf2778b89c363a92139e9af0b91012529 assets/cosmere/models/item/bronze_necklace_metalmind.json -9380f4ba003c9edcd932e027c4abe4900ac23b20 assets/cosmere/models/item/bronze_nugget.json -b4b59a71160a8130d6ed2b18ebb204cbf0eb4ef1 assets/cosmere/models/item/bronze_ring_metalmind.json -e34436395cae4a9d60a64e0c5c69d9dc45687c63 assets/cosmere/models/item/bronze_spike.json -a503e66f7bf5e2931eab954d102be9f32aa7191b assets/cosmere/models/item/cadmium_block.json -c47bd16e2bcdc40ae090cc10098ea3ce36528e8c assets/cosmere/models/item/cadmium_bracelet_metalmind.json -695cefddc4a8e95a59550e4c02160fc8cadf75ca assets/cosmere/models/item/cadmium_ingot.json -10f9380cf2778b89c363a92139e9af0b91012529 assets/cosmere/models/item/cadmium_necklace_metalmind.json -9380f4ba003c9edcd932e027c4abe4900ac23b20 assets/cosmere/models/item/cadmium_nugget.json -b0505539f57c33b8c0275af4c13cebc88e1c80b1 assets/cosmere/models/item/cadmium_ore.json -b4b59a71160a8130d6ed2b18ebb204cbf0eb4ef1 assets/cosmere/models/item/cadmium_ring_metalmind.json -e34436395cae4a9d60a64e0c5c69d9dc45687c63 assets/cosmere/models/item/cadmium_spike.json -a503e66f7bf5e2931eab954d102be9f32aa7191b assets/cosmere/models/item/chromium_block.json -c47bd16e2bcdc40ae090cc10098ea3ce36528e8c assets/cosmere/models/item/chromium_bracelet_metalmind.json -695cefddc4a8e95a59550e4c02160fc8cadf75ca assets/cosmere/models/item/chromium_ingot.json -10f9380cf2778b89c363a92139e9af0b91012529 assets/cosmere/models/item/chromium_necklace_metalmind.json -9380f4ba003c9edcd932e027c4abe4900ac23b20 assets/cosmere/models/item/chromium_nugget.json -b0505539f57c33b8c0275af4c13cebc88e1c80b1 assets/cosmere/models/item/chromium_ore.json -b4b59a71160a8130d6ed2b18ebb204cbf0eb4ef1 assets/cosmere/models/item/chromium_ring_metalmind.json -e34436395cae4a9d60a64e0c5c69d9dc45687c63 assets/cosmere/models/item/chromium_spike.json -a503e66f7bf5e2931eab954d102be9f32aa7191b assets/cosmere/models/item/copper_block.json -c47bd16e2bcdc40ae090cc10098ea3ce36528e8c assets/cosmere/models/item/copper_bracelet_metalmind.json -9380f4ba003c9edcd932e027c4abe4900ac23b20 assets/cosmere/models/item/copper_clip.json -695cefddc4a8e95a59550e4c02160fc8cadf75ca assets/cosmere/models/item/copper_ingot.json -10f9380cf2778b89c363a92139e9af0b91012529 assets/cosmere/models/item/copper_necklace_metalmind.json -9380f4ba003c9edcd932e027c4abe4900ac23b20 assets/cosmere/models/item/copper_nugget.json -b0505539f57c33b8c0275af4c13cebc88e1c80b1 assets/cosmere/models/item/copper_ore.json -b4b59a71160a8130d6ed2b18ebb204cbf0eb4ef1 assets/cosmere/models/item/copper_ring_metalmind.json -e34436395cae4a9d60a64e0c5c69d9dc45687c63 assets/cosmere/models/item/copper_spike.json -e64d67fe3876939a73c3c5776979d204cabbda20 assets/cosmere/models/item/duralumin_blend.json -a503e66f7bf5e2931eab954d102be9f32aa7191b assets/cosmere/models/item/duralumin_block.json -c47bd16e2bcdc40ae090cc10098ea3ce36528e8c assets/cosmere/models/item/duralumin_bracelet_metalmind.json -695cefddc4a8e95a59550e4c02160fc8cadf75ca assets/cosmere/models/item/duralumin_ingot.json -10f9380cf2778b89c363a92139e9af0b91012529 assets/cosmere/models/item/duralumin_necklace_metalmind.json -9380f4ba003c9edcd932e027c4abe4900ac23b20 assets/cosmere/models/item/duralumin_nugget.json -b4b59a71160a8130d6ed2b18ebb204cbf0eb4ef1 assets/cosmere/models/item/duralumin_ring_metalmind.json -e34436395cae4a9d60a64e0c5c69d9dc45687c63 assets/cosmere/models/item/duralumin_spike.json -e64d67fe3876939a73c3c5776979d204cabbda20 assets/cosmere/models/item/electrum_blend.json -a503e66f7bf5e2931eab954d102be9f32aa7191b assets/cosmere/models/item/electrum_block.json -c47bd16e2bcdc40ae090cc10098ea3ce36528e8c assets/cosmere/models/item/electrum_bracelet_metalmind.json -695cefddc4a8e95a59550e4c02160fc8cadf75ca assets/cosmere/models/item/electrum_ingot.json -10f9380cf2778b89c363a92139e9af0b91012529 assets/cosmere/models/item/electrum_necklace_metalmind.json -9380f4ba003c9edcd932e027c4abe4900ac23b20 assets/cosmere/models/item/electrum_nugget.json -b4b59a71160a8130d6ed2b18ebb204cbf0eb4ef1 assets/cosmere/models/item/electrum_ring_metalmind.json -e34436395cae4a9d60a64e0c5c69d9dc45687c63 assets/cosmere/models/item/electrum_spike.json -093a7aadc79fe47013d29ba53bb9df540b27dba5 assets/cosmere/models/item/gem_block.json -9380f4ba003c9edcd932e027c4abe4900ac23b20 assets/cosmere/models/item/gold_boxing.json -c47bd16e2bcdc40ae090cc10098ea3ce36528e8c assets/cosmere/models/item/gold_bracelet_metalmind.json -10f9380cf2778b89c363a92139e9af0b91012529 assets/cosmere/models/item/gold_necklace_metalmind.json -9380f4ba003c9edcd932e027c4abe4900ac23b20 assets/cosmere/models/item/gold_nugget.json -b4b59a71160a8130d6ed2b18ebb204cbf0eb4ef1 assets/cosmere/models/item/gold_ring_metalmind.json -e34436395cae4a9d60a64e0c5c69d9dc45687c63 assets/cosmere/models/item/gold_spike.json -f9c2f8e60d6f55d0b91bf2558b3d7f6a84f3b9b5 assets/cosmere/models/item/guide.json -a503e66f7bf5e2931eab954d102be9f32aa7191b assets/cosmere/models/item/harmonium_block.json -695cefddc4a8e95a59550e4c02160fc8cadf75ca assets/cosmere/models/item/harmonium_ingot.json -9380f4ba003c9edcd932e027c4abe4900ac23b20 assets/cosmere/models/item/harmonium_nugget.json -f11e9a45aa354d4df9e7636e8c902c2f681766a0 assets/cosmere/models/item/investiture.json -c47bd16e2bcdc40ae090cc10098ea3ce36528e8c assets/cosmere/models/item/iron_bracelet_metalmind.json -10f9380cf2778b89c363a92139e9af0b91012529 assets/cosmere/models/item/iron_necklace_metalmind.json -9380f4ba003c9edcd932e027c4abe4900ac23b20 assets/cosmere/models/item/iron_nugget.json -b4b59a71160a8130d6ed2b18ebb204cbf0eb4ef1 assets/cosmere/models/item/iron_ring_metalmind.json -e34436395cae4a9d60a64e0c5c69d9dc45687c63 assets/cosmere/models/item/iron_spike.json -9e352e2717f6edf732b4bbf3d212914a7b51285d assets/cosmere/models/item/jar_empty.json -a10cbf1bb54747fe560d25c247d500ec9d69aa46 assets/cosmere/models/item/jar_of_blood.json -a503e66f7bf5e2931eab954d102be9f32aa7191b assets/cosmere/models/item/lead_block.json -695cefddc4a8e95a59550e4c02160fc8cadf75ca assets/cosmere/models/item/lead_ingot.json -9380f4ba003c9edcd932e027c4abe4900ac23b20 assets/cosmere/models/item/lead_nugget.json -b0505539f57c33b8c0275af4c13cebc88e1c80b1 assets/cosmere/models/item/lead_ore.json -a503e66f7bf5e2931eab954d102be9f32aa7191b assets/cosmere/models/item/lerasatium_block.json -695cefddc4a8e95a59550e4c02160fc8cadf75ca assets/cosmere/models/item/lerasatium_ingot.json -9380f4ba003c9edcd932e027c4abe4900ac23b20 assets/cosmere/models/item/lerasatium_nugget.json -a503e66f7bf5e2931eab954d102be9f32aa7191b assets/cosmere/models/item/lerasium_block.json -695cefddc4a8e95a59550e4c02160fc8cadf75ca assets/cosmere/models/item/lerasium_ingot.json -9380f4ba003c9edcd932e027c4abe4900ac23b20 assets/cosmere/models/item/lerasium_nugget.json -e34436395cae4a9d60a64e0c5c69d9dc45687c63 assets/cosmere/models/item/lerasium_spike.json -a503e66f7bf5e2931eab954d102be9f32aa7191b assets/cosmere/models/item/malatium_block.json -695cefddc4a8e95a59550e4c02160fc8cadf75ca assets/cosmere/models/item/malatium_ingot.json -9380f4ba003c9edcd932e027c4abe4900ac23b20 assets/cosmere/models/item/malatium_nugget.json -45d33d2231ada448f0a42f23b32d57a9737f201c assets/cosmere/models/item/metal_file.json -9d01417efc6918521ae556205bb9211690ff7815 assets/cosmere/models/item/metal_vial.json -9176709acb147045124b3b6d6e9145513a7db4d6 assets/cosmere/models/item/mist_cloak.json -a503e66f7bf5e2931eab954d102be9f32aa7191b assets/cosmere/models/item/nickel_block.json -695cefddc4a8e95a59550e4c02160fc8cadf75ca assets/cosmere/models/item/nickel_ingot.json -9380f4ba003c9edcd932e027c4abe4900ac23b20 assets/cosmere/models/item/nickel_nugget.json -b0505539f57c33b8c0275af4c13cebc88e1c80b1 assets/cosmere/models/item/nickel_ore.json -e64d67fe3876939a73c3c5776979d204cabbda20 assets/cosmere/models/item/nicrosil_blend.json -a503e66f7bf5e2931eab954d102be9f32aa7191b assets/cosmere/models/item/nicrosil_block.json -c47bd16e2bcdc40ae090cc10098ea3ce36528e8c assets/cosmere/models/item/nicrosil_bracelet_metalmind.json -695cefddc4a8e95a59550e4c02160fc8cadf75ca assets/cosmere/models/item/nicrosil_ingot.json -10f9380cf2778b89c363a92139e9af0b91012529 assets/cosmere/models/item/nicrosil_necklace_metalmind.json -9380f4ba003c9edcd932e027c4abe4900ac23b20 assets/cosmere/models/item/nicrosil_nugget.json -b4b59a71160a8130d6ed2b18ebb204cbf0eb4ef1 assets/cosmere/models/item/nicrosil_ring_metalmind.json -e34436395cae4a9d60a64e0c5c69d9dc45687c63 assets/cosmere/models/item/nicrosil_spike.json -6d89a042c6a452025eff1c4db53e238f51db0d0b assets/cosmere/models/item/obsidian_dagger.json -e64d67fe3876939a73c3c5776979d204cabbda20 assets/cosmere/models/item/pewter_blend.json -a503e66f7bf5e2931eab954d102be9f32aa7191b assets/cosmere/models/item/pewter_block.json -c47bd16e2bcdc40ae090cc10098ea3ce36528e8c assets/cosmere/models/item/pewter_bracelet_metalmind.json -695cefddc4a8e95a59550e4c02160fc8cadf75ca assets/cosmere/models/item/pewter_ingot.json -10f9380cf2778b89c363a92139e9af0b91012529 assets/cosmere/models/item/pewter_necklace_metalmind.json -9380f4ba003c9edcd932e027c4abe4900ac23b20 assets/cosmere/models/item/pewter_nugget.json -b4b59a71160a8130d6ed2b18ebb204cbf0eb4ef1 assets/cosmere/models/item/pewter_ring_metalmind.json -e34436395cae4a9d60a64e0c5c69d9dc45687c63 assets/cosmere/models/item/pewter_spike.json -e64d67fe3876939a73c3c5776979d204cabbda20 assets/cosmere/models/item/raw_aluminum_ore.json -e64d67fe3876939a73c3c5776979d204cabbda20 assets/cosmere/models/item/raw_cadmium_ore.json -e64d67fe3876939a73c3c5776979d204cabbda20 assets/cosmere/models/item/raw_chromium_ore.json -e64d67fe3876939a73c3c5776979d204cabbda20 assets/cosmere/models/item/raw_copper_ore.json -e64d67fe3876939a73c3c5776979d204cabbda20 assets/cosmere/models/item/raw_lead_ore.json -e64d67fe3876939a73c3c5776979d204cabbda20 assets/cosmere/models/item/raw_nickel_ore.json -e64d67fe3876939a73c3c5776979d204cabbda20 assets/cosmere/models/item/raw_silver_ore.json -e64d67fe3876939a73c3c5776979d204cabbda20 assets/cosmere/models/item/raw_tin_ore.json -e64d67fe3876939a73c3c5776979d204cabbda20 assets/cosmere/models/item/raw_zinc_ore.json -a503e66f7bf5e2931eab954d102be9f32aa7191b assets/cosmere/models/item/silver_block.json -695cefddc4a8e95a59550e4c02160fc8cadf75ca assets/cosmere/models/item/silver_ingot.json -9380f4ba003c9edcd932e027c4abe4900ac23b20 assets/cosmere/models/item/silver_nugget.json -b0505539f57c33b8c0275af4c13cebc88e1c80b1 assets/cosmere/models/item/silver_ore.json -e64d67fe3876939a73c3c5776979d204cabbda20 assets/cosmere/models/item/steel_blend.json -a503e66f7bf5e2931eab954d102be9f32aa7191b assets/cosmere/models/item/steel_block.json -c47bd16e2bcdc40ae090cc10098ea3ce36528e8c assets/cosmere/models/item/steel_bracelet_metalmind.json -695cefddc4a8e95a59550e4c02160fc8cadf75ca assets/cosmere/models/item/steel_ingot.json -10f9380cf2778b89c363a92139e9af0b91012529 assets/cosmere/models/item/steel_necklace_metalmind.json -9380f4ba003c9edcd932e027c4abe4900ac23b20 assets/cosmere/models/item/steel_nugget.json -b4b59a71160a8130d6ed2b18ebb204cbf0eb4ef1 assets/cosmere/models/item/steel_ring_metalmind.json -e34436395cae4a9d60a64e0c5c69d9dc45687c63 assets/cosmere/models/item/steel_spike.json -a503e66f7bf5e2931eab954d102be9f32aa7191b assets/cosmere/models/item/tin_block.json -c47bd16e2bcdc40ae090cc10098ea3ce36528e8c assets/cosmere/models/item/tin_bracelet_metalmind.json -695cefddc4a8e95a59550e4c02160fc8cadf75ca assets/cosmere/models/item/tin_ingot.json -10f9380cf2778b89c363a92139e9af0b91012529 assets/cosmere/models/item/tin_necklace_metalmind.json -9380f4ba003c9edcd932e027c4abe4900ac23b20 assets/cosmere/models/item/tin_nugget.json -b0505539f57c33b8c0275af4c13cebc88e1c80b1 assets/cosmere/models/item/tin_ore.json -b4b59a71160a8130d6ed2b18ebb204cbf0eb4ef1 assets/cosmere/models/item/tin_ring_metalmind.json -e34436395cae4a9d60a64e0c5c69d9dc45687c63 assets/cosmere/models/item/tin_spike.json -a503e66f7bf5e2931eab954d102be9f32aa7191b assets/cosmere/models/item/zinc_block.json -c47bd16e2bcdc40ae090cc10098ea3ce36528e8c assets/cosmere/models/item/zinc_bracelet_metalmind.json -695cefddc4a8e95a59550e4c02160fc8cadf75ca assets/cosmere/models/item/zinc_ingot.json -10f9380cf2778b89c363a92139e9af0b91012529 assets/cosmere/models/item/zinc_necklace_metalmind.json -9380f4ba003c9edcd932e027c4abe4900ac23b20 assets/cosmere/models/item/zinc_nugget.json -b0505539f57c33b8c0275af4c13cebc88e1c80b1 assets/cosmere/models/item/zinc_ore.json -b4b59a71160a8130d6ed2b18ebb204cbf0eb4ef1 assets/cosmere/models/item/zinc_ring_metalmind.json -e34436395cae4a9d60a64e0c5c69d9dc45687c63 assets/cosmere/models/item/zinc_spike.json -ab512e49bf64eb8c2e3b799eec207ae80ca0e223 data/cosmere/advancements/recipes/cosmere.blocks/aluminum_block.json -8caa4c55f7de56c8f4a0c9552aa1976a1f9ef3c8 data/cosmere/advancements/recipes/cosmere.blocks/atium_block.json -6b9f11fdeeeadbcc31481a4d52a5c19a8ec1188c data/cosmere/advancements/recipes/cosmere.blocks/bendalloy_block.json -6352fcf6a885ee79a3f64a9a743b49456689c8a4 data/cosmere/advancements/recipes/cosmere.blocks/brass_block.json -57e21ab697c01abe757a5cb0943cf3f4ad63f06b data/cosmere/advancements/recipes/cosmere.blocks/bronze_block.json -b8dcebeb0b2de266a6efd8f8867699f2751fec9d data/cosmere/advancements/recipes/cosmere.blocks/cadmium_block.json -3131682fc1a35afef55c2e9343720ec06e5c7f4b data/cosmere/advancements/recipes/cosmere.blocks/chromium_block.json -0ab7df826b0479341e643de4014dafbee2171f7c data/cosmere/advancements/recipes/cosmere.blocks/copper_block.json -9432344c517a7ea41afca47ac12ad8072dc6ea17 data/cosmere/advancements/recipes/cosmere.blocks/duralumin_block.json -8fe40f53e25824ef3491ba0eab2df79871ca7edc data/cosmere/advancements/recipes/cosmere.blocks/electrum_block.json -5773123fea8352fa03eec9bc1430a0443fc6f224 data/cosmere/advancements/recipes/cosmere.blocks/harmonium_block.json -1a0aa676dc9b26a236a037628157288dde8373fe data/cosmere/advancements/recipes/cosmere.blocks/lead_block.json -db116e042eae254e0a83ada568028d438ade2b32 data/cosmere/advancements/recipes/cosmere.blocks/lerasatium_block.json -898f7d1be97861d04bc588cd35ecd8023f399884 data/cosmere/advancements/recipes/cosmere.blocks/lerasium_block.json -aa49970716ee55b78755e54fcbb50531e592d216 data/cosmere/advancements/recipes/cosmere.blocks/malatium_block.json -dfbb963058f7cfb1dd706d82fafa427a860cf37b data/cosmere/advancements/recipes/cosmere.blocks/nickel_block.json -e79e32108693c93dff53caff1be412bff7a268f9 data/cosmere/advancements/recipes/cosmere.blocks/nicrosil_block.json -fc0c5cebe021fb12da68f8069578aa64bb21e1b2 data/cosmere/advancements/recipes/cosmere.blocks/pewter_block.json -5a29cb4a4fa545bc42f1dc5a69723639760c1b2a data/cosmere/advancements/recipes/cosmere.blocks/silver_block.json -5e5b67da702e9f3e45c4b7f58673a1f3720abb3e data/cosmere/advancements/recipes/cosmere.blocks/steel_block.json -ff3ca6578bf8fabb04e73867e9c07099a4dbf244 data/cosmere/advancements/recipes/cosmere.blocks/tin_block.json -e3d9cc0a78b746e7276828ce421cc42e513cf86a data/cosmere/advancements/recipes/cosmere.blocks/zinc_block.json -947d18a8ccbb5ecbcda120ae9f4f83f6884ea45d data/cosmere/advancements/recipes/cosmere.items/alloying/blend/bendalloy.json -5f6cfe0b6dad06292b4945f70d46a1e2cd9690f0 data/cosmere/advancements/recipes/cosmere.items/alloying/blend/brass.json -003a9b027799621bc9625c326bc59e0aedc924ec data/cosmere/advancements/recipes/cosmere.items/alloying/blend/bronze.json -b3780fed9d3e05e18477f6cee095a7abcce5257d data/cosmere/advancements/recipes/cosmere.items/alloying/blend/duralumin.json -85d1afaa1aa4f0ad5198d18c0b1933048a2b1c11 data/cosmere/advancements/recipes/cosmere.items/alloying/blend/electrum.json -2322bb96abae9d6eae2afc33e439be84b5b7c30c data/cosmere/advancements/recipes/cosmere.items/alloying/blend/nicrosil.json -fb74228f45bdb67c7bee84096690d9f5ebfbcb44 data/cosmere/advancements/recipes/cosmere.items/alloying/blend/pewter.json -ef6073e3983c6595626307218729d225d0b067ed data/cosmere/advancements/recipes/cosmere.items/alloying/blend/steel.json -498460970397bf9ad35d0f37b0d85bdb7d420a80 data/cosmere/advancements/recipes/cosmere.items/aluminum_ingot.json -a43380c743d681c3ab827682094f41593400b95a data/cosmere/advancements/recipes/cosmere.items/aluminum_ingot_from_blasting_aluminum_ore.json -dc00aed08b52b55e8eb806ed5d03ffd40641aa69 data/cosmere/advancements/recipes/cosmere.items/aluminum_ingot_from_blasting_raw_aluminum_ore.json -50af84f6b63bc103c6c120062b9848a97bb93895 data/cosmere/advancements/recipes/cosmere.items/aluminum_ingot_from_smelting_aluminum_ore.json -41b77c92ed79d8087f823c310fb9dc44ba88736c data/cosmere/advancements/recipes/cosmere.items/aluminum_ingot_from_smelting_raw_aluminum_ore.json -278acf388fbb8defcc88abb3e456865342d2427a data/cosmere/advancements/recipes/cosmere.items/atium_ingot.json -4b3c7c7c54c0e335edccf441fc878d1df35f4747 data/cosmere/advancements/recipes/cosmere.items/bendalloy_ingot.json -a54d72d85ca2e608168c8490c390eb3f88424e84 data/cosmere/advancements/recipes/cosmere.items/bendalloy_ingot_from_blasting_bendalloy_blend.json -ac261834bcd682d51216c6a9127da1f6bc9afb51 data/cosmere/advancements/recipes/cosmere.items/bendalloy_ingot_from_smelting_bendalloy_blend.json -7d9fd8365626564b292c175aab892a4622fc1e87 data/cosmere/advancements/recipes/cosmere.items/brass_ingot.json -4a29abf24948e999d678413aa9f33019a5edf366 data/cosmere/advancements/recipes/cosmere.items/brass_ingot_from_blasting_brass_blend.json -3068405a2f890b5be30dbccc49b46229efdca64b data/cosmere/advancements/recipes/cosmere.items/brass_ingot_from_smelting_brass_blend.json -e677c51a78bcd3f261a6618e4b5db95c6a38e9c5 data/cosmere/advancements/recipes/cosmere.items/bronze_ingot.json -70949a051d9bcebaabd41ae97836092a5ed27915 data/cosmere/advancements/recipes/cosmere.items/bronze_ingot_from_blasting_bronze_blend.json -a74cb1ccac57a84e6200b42da3f1eafeae6e1d35 data/cosmere/advancements/recipes/cosmere.items/bronze_ingot_from_smelting_bronze_blend.json -a62aec2e815bd82968c928a02dfff6dc1197a8e8 data/cosmere/advancements/recipes/cosmere.items/cadmium_ingot.json -85b07e41b46d538c28cd2252fafd218abcfde4a1 data/cosmere/advancements/recipes/cosmere.items/cadmium_ingot_from_blasting_cadmium_ore.json -52a7854e599b2170852a596b4561774662e2a649 data/cosmere/advancements/recipes/cosmere.items/cadmium_ingot_from_blasting_raw_cadmium_ore.json -439216f17ffb7a8d4d00f360c50c9039bcd34758 data/cosmere/advancements/recipes/cosmere.items/cadmium_ingot_from_smelting_cadmium_ore.json -0424ae471fb93f02486de783c8298f480503447d data/cosmere/advancements/recipes/cosmere.items/cadmium_ingot_from_smelting_raw_cadmium_ore.json -15e0a16a95f2e8d98c05d5aeb3d0ab41182a0788 data/cosmere/advancements/recipes/cosmere.items/chromium_ingot.json -f72d43f41db4916bbefa0a896ac0ac1d402239e4 data/cosmere/advancements/recipes/cosmere.items/chromium_ingot_from_blasting_chromium_ore.json -fa156b51fc31b7ef0a98617e4087807c0429f2ca data/cosmere/advancements/recipes/cosmere.items/chromium_ingot_from_blasting_raw_chromium_ore.json -2b24cf271fe4f40aa136644e3ea8c03a87c3b602 data/cosmere/advancements/recipes/cosmere.items/chromium_ingot_from_smelting_chromium_ore.json -adadb2b149d2107ab0499119cd894658733cf1f1 data/cosmere/advancements/recipes/cosmere.items/chromium_ingot_from_smelting_raw_chromium_ore.json -08aabeae9c29fd9ec05bd01b689ec0eb8c8486d2 data/cosmere/advancements/recipes/cosmere.items/conversions/aluminum_block_deconstruct.json -d0fede2b4e62b1ead6e3ff8bf2986ace9ec48534 data/cosmere/advancements/recipes/cosmere.items/conversions/aluminum_item_deconstruct.json -60a6694558d7f92e8491a378bcb48bb92e335697 data/cosmere/advancements/recipes/cosmere.items/conversions/atium_block_deconstruct.json -ee35012373e3a6697c63f56cb861d170ae06e544 data/cosmere/advancements/recipes/cosmere.items/conversions/atium_item_deconstruct.json -c8790f8bc9afa9f5104df0b7a19d0a615bda3896 data/cosmere/advancements/recipes/cosmere.items/conversions/bendalloy_block_deconstruct.json -925bfbff7ec91286cb98d56029f673b33828f27b data/cosmere/advancements/recipes/cosmere.items/conversions/bendalloy_item_deconstruct.json -9096f191d09d771f8126a061aacd1c87d7b8363b data/cosmere/advancements/recipes/cosmere.items/conversions/brass_block_deconstruct.json -67b258cdf0a105b3d952e67d02277e75a17eadee data/cosmere/advancements/recipes/cosmere.items/conversions/brass_item_deconstruct.json -57ffd18848f9a2e9b523eb4d5398dab433b8b430 data/cosmere/advancements/recipes/cosmere.items/conversions/bronze_block_deconstruct.json -ce91872b772658046d9a6aff188ae58feb016f8c data/cosmere/advancements/recipes/cosmere.items/conversions/bronze_item_deconstruct.json -2ff79186cb3964041394ecbf6db41afef60b4c13 data/cosmere/advancements/recipes/cosmere.items/conversions/cadmium_block_deconstruct.json -6a23ef3e2b15994dd50cec88bb799bf9a33b776d data/cosmere/advancements/recipes/cosmere.items/conversions/cadmium_item_deconstruct.json -be77da6336ee435698443c401511a25a4b38133c data/cosmere/advancements/recipes/cosmere.items/conversions/chromium_block_deconstruct.json -68f5fa1fdad861cadbec51b184ef20058935b5a4 data/cosmere/advancements/recipes/cosmere.items/conversions/chromium_item_deconstruct.json -f69a9471f6dbe73b8f604541b947c9fbde39d621 data/cosmere/advancements/recipes/cosmere.items/conversions/copper_block_deconstruct.json -589e5795249758e68e67d490611c320763fdd72d data/cosmere/advancements/recipes/cosmere.items/conversions/copper_item_deconstruct.json -d38789fd0a23420911af2d7d8ceed1a528bec950 data/cosmere/advancements/recipes/cosmere.items/conversions/duralumin_block_deconstruct.json -1d1510f53ffe392c381c1f5151b66e2debfc3f4a data/cosmere/advancements/recipes/cosmere.items/conversions/duralumin_item_deconstruct.json -70f44b2be4628409ea822d17d9c22e46e0c68cd3 data/cosmere/advancements/recipes/cosmere.items/conversions/electrum_block_deconstruct.json -ea70c76238f4bbee4981236fb6da62cbab80176d data/cosmere/advancements/recipes/cosmere.items/conversions/electrum_item_deconstruct.json -56adba4451a48b99c1781cb648efdad692da77d3 data/cosmere/advancements/recipes/cosmere.items/conversions/harmonium_block_deconstruct.json -edad1520149bc1f818a6f256be9ac61312b2beea data/cosmere/advancements/recipes/cosmere.items/conversions/harmonium_item_deconstruct.json -fd48c4483f8bffc24ceed9e2661c4655237acbe2 data/cosmere/advancements/recipes/cosmere.items/conversions/lead_block_deconstruct.json -9ad18e7bd42adbcee49bdd3d91c1a9143500fa3e data/cosmere/advancements/recipes/cosmere.items/conversions/lead_item_deconstruct.json -8947b86d1512cb38da5bc1040b2b7e36ca049d8f data/cosmere/advancements/recipes/cosmere.items/conversions/lerasatium_block_deconstruct.json -ed9052c34cab0715cafbddb690d49dfd5d703612 data/cosmere/advancements/recipes/cosmere.items/conversions/lerasatium_item_deconstruct.json -b451103b08704b0aa0a24674a6b5be4528f41881 data/cosmere/advancements/recipes/cosmere.items/conversions/lerasium_block_deconstruct.json -b82a5cc5535c428651a564013c3a3a9fadab732a data/cosmere/advancements/recipes/cosmere.items/conversions/lerasium_item_deconstruct.json -257a55c42cba3ffdd4002658645b169c80ee1f8e data/cosmere/advancements/recipes/cosmere.items/conversions/malatium_block_deconstruct.json -ccf8f567ca1543e5a08d4deb46a3535ed1519765 data/cosmere/advancements/recipes/cosmere.items/conversions/malatium_item_deconstruct.json -0482136c694f4b11894312b323dbbfbf6230a186 data/cosmere/advancements/recipes/cosmere.items/conversions/nickel_block_deconstruct.json -1635f6ef27ccdc14e0b51afc7e732ad579b205e7 data/cosmere/advancements/recipes/cosmere.items/conversions/nickel_item_deconstruct.json -1a40f55b0ff37083ce48ffacd3281f1e04e2faa0 data/cosmere/advancements/recipes/cosmere.items/conversions/nicrosil_block_deconstruct.json -6a0fdbf9e59cf7412cfdc97793cc1eeac3a3c81b data/cosmere/advancements/recipes/cosmere.items/conversions/nicrosil_item_deconstruct.json -a96f1c40550dd69a43ffaebe1e4f81afdc462264 data/cosmere/advancements/recipes/cosmere.items/conversions/pewter_block_deconstruct.json -97de1b402ee601b4d01d01a4227c40d7f6b33a34 data/cosmere/advancements/recipes/cosmere.items/conversions/pewter_item_deconstruct.json -6ce9b527a91f5031c4c96d812064a514fe3c017c data/cosmere/advancements/recipes/cosmere.items/conversions/silver_block_deconstruct.json -894a073c9d269997fb45279921dc417e26def84a data/cosmere/advancements/recipes/cosmere.items/conversions/silver_item_deconstruct.json -af127338fab468b2d537ada68def812e90779b8f data/cosmere/advancements/recipes/cosmere.items/conversions/steel_block_deconstruct.json -c2c3061b52409a3442419572c0ace777a107e57e data/cosmere/advancements/recipes/cosmere.items/conversions/steel_item_deconstruct.json -0bdf02eb18717f1eb790c32e9898689c85a579ef data/cosmere/advancements/recipes/cosmere.items/conversions/tin_block_deconstruct.json -b24a1aaec03be8b02d861d5b8e516af600a87107 data/cosmere/advancements/recipes/cosmere.items/conversions/tin_item_deconstruct.json -2aa2d7a890b9433f407dc521d54dc7cc25bfbf97 data/cosmere/advancements/recipes/cosmere.items/conversions/zinc_block_deconstruct.json -040be0f243e6b33254bd0e62c4e678bd8c59fc34 data/cosmere/advancements/recipes/cosmere.items/conversions/zinc_item_deconstruct.json -85110a1990240eaee9a25eed3ca3163a371e5d07 data/cosmere/advancements/recipes/cosmere.items/copper_ingot.json -df149e4f7f767a6612832d2dae6772f47615cc22 data/cosmere/advancements/recipes/cosmere.items/copper_ingot_from_blasting_copper_ore.json -62d09e0e7eaef22239d1bf1e4cac5b181551214b data/cosmere/advancements/recipes/cosmere.items/copper_ingot_from_blasting_raw_copper_ore.json -734e67e3a4d07fe0acdf65da32c8ab5b88f107db data/cosmere/advancements/recipes/cosmere.items/copper_ingot_from_smelting_copper_ore.json -f5aaf5bbdde85e71f8c11d1029ed5c8bcad70232 data/cosmere/advancements/recipes/cosmere.items/copper_ingot_from_smelting_raw_copper_ore.json -13558b45b7550fa4ee9ecbc154e948ff1908f78b data/cosmere/advancements/recipes/cosmere.items/duralumin_ingot.json -36ad04869fc23f6f8596db0589fd4415039dde15 data/cosmere/advancements/recipes/cosmere.items/duralumin_ingot_from_blasting_duralumin_blend.json -f00b01230d0e87f52957ca2e29a5ce95e58eda2e data/cosmere/advancements/recipes/cosmere.items/duralumin_ingot_from_smelting_duralumin_blend.json -a751764013ba0b2cb0af715b63d9429d7be3c2de data/cosmere/advancements/recipes/cosmere.items/electrum_ingot.json -7ff52f0767cfee321a64289a51d341cb358bbaa8 data/cosmere/advancements/recipes/cosmere.items/electrum_ingot_from_blasting_electrum_blend.json -5bd5a3ebb6128d29ccb1fa2b0ff9631d6b40b55c data/cosmere/advancements/recipes/cosmere.items/electrum_ingot_from_smelting_electrum_blend.json -6f3a2b6dec56215bf9330c7fcbce1b49d88b2d88 data/cosmere/advancements/recipes/cosmere.items/guide_from_blasting_iron_spike.json -b65546b3e2b783fddb4cfbec78ea9170422a6e82 data/cosmere/advancements/recipes/cosmere.items/guide_from_smelting_iron_spike.json -0d759206ad2c38f61db73d450fec0914ff7103e4 data/cosmere/advancements/recipes/cosmere.items/harmonium_ingot.json -64ffdc60d4b74f42ca92fa5145969212bf4e8161 data/cosmere/advancements/recipes/cosmere.items/lead_ingot.json -6004d87644e726ab6794e56d3efbe81b7427b702 data/cosmere/advancements/recipes/cosmere.items/lead_ingot_from_blasting_lead_ore.json -760175b716f9d1c79c363ddc8b6e00ccb4ee1f85 data/cosmere/advancements/recipes/cosmere.items/lead_ingot_from_blasting_raw_lead_ore.json -6b0b005c2a1581b11e676fcbc1090b2fd4b850b9 data/cosmere/advancements/recipes/cosmere.items/lead_ingot_from_smelting_lead_ore.json -baa7f3b501517e455124c2924e70dfa3e0098038 data/cosmere/advancements/recipes/cosmere.items/lead_ingot_from_smelting_raw_lead_ore.json -448a1cd1844a118af8aecb02f9ebb9d3dd1cb0e9 data/cosmere/advancements/recipes/cosmere.items/lerasatium_ingot.json -61aa5a2b15b2ccfae34987801d1c8e9bdb832198 data/cosmere/advancements/recipes/cosmere.items/lerasium_ingot.json -288bbcbd1a7b91dacd8add31ee3929840944c638 data/cosmere/advancements/recipes/cosmere.items/malatium_ingot.json -833cda8cfc15ad61c66246c8775b0caa85219f92 data/cosmere/advancements/recipes/cosmere.items/nickel_ingot.json -f2931a212e2a5727f278450d979e3a52756e6a6a data/cosmere/advancements/recipes/cosmere.items/nickel_ingot_from_blasting_nickel_ore.json -ce346f1ff7b526c1322f45b064ae2b977f6baacd data/cosmere/advancements/recipes/cosmere.items/nickel_ingot_from_blasting_raw_nickel_ore.json -a05efc46ad1c4850f829775de8f70dcd607960c1 data/cosmere/advancements/recipes/cosmere.items/nickel_ingot_from_smelting_nickel_ore.json -202202d4739cbafc2d5e4f30b39f6e7c36fa0fff data/cosmere/advancements/recipes/cosmere.items/nickel_ingot_from_smelting_raw_nickel_ore.json -35e2626c555ad498d40a7dab90131f1c4dd4592c data/cosmere/advancements/recipes/cosmere.items/nicrosil_ingot.json -c0822e75521d50dbe42eb71f8b81447982b8fe39 data/cosmere/advancements/recipes/cosmere.items/nicrosil_ingot_from_blasting_nicrosil_blend.json -17d33fe85e8105dc5c1f976d14bb8c2fde9e5b1f data/cosmere/advancements/recipes/cosmere.items/nicrosil_ingot_from_smelting_nicrosil_blend.json -c4f1702ab8d8735505a4469041b209404f563d51 data/cosmere/advancements/recipes/cosmere.items/pewter_ingot.json -5e547a672544fa1ca7ee9f2c6de9f30b032ff286 data/cosmere/advancements/recipes/cosmere.items/pewter_ingot_from_blasting_pewter_blend.json -ec98f4c2de8ffacfd30d282d43bd7da247f9c7c7 data/cosmere/advancements/recipes/cosmere.items/pewter_ingot_from_smelting_pewter_blend.json -96f532e960f3c275398f416bab0c44ba3e6ad56d data/cosmere/advancements/recipes/cosmere.items/silver_ingot.json -7b9c2f1e2c832328c18ce336e883b5f2f773ffd9 data/cosmere/advancements/recipes/cosmere.items/silver_ingot_from_blasting_raw_silver_ore.json -ff0f043a23fa5eaafde7865cf309855cb330a8db data/cosmere/advancements/recipes/cosmere.items/silver_ingot_from_blasting_silver_ore.json -90df5b49028934826976cb95c2bef40c04f12cff data/cosmere/advancements/recipes/cosmere.items/silver_ingot_from_smelting_raw_silver_ore.json -526e53c32f511334ae698502642678eceaddaaee data/cosmere/advancements/recipes/cosmere.items/silver_ingot_from_smelting_silver_ore.json -4e5c2b829f0c867234e2b97c6e2f25387f959f2f data/cosmere/advancements/recipes/cosmere.items/steel_ingot.json -03a5d74f588f7c271215ff64d6ebf91a2735500d data/cosmere/advancements/recipes/cosmere.items/steel_ingot_from_blasting_steel_blend.json -a08ba448690cdea66656a842e408f33de9a6a640 data/cosmere/advancements/recipes/cosmere.items/steel_ingot_from_smelting_steel_blend.json -87b445c4d65319cf91c4fb1acb181afa9a13563a data/cosmere/advancements/recipes/cosmere.items/tin_ingot.json -efc7832a654dba0bbf03e8e6e30fc582cb38a505 data/cosmere/advancements/recipes/cosmere.items/tin_ingot_from_blasting_raw_tin_ore.json -5bfa7fedab06a69379e9928b83aa3429d9679898 data/cosmere/advancements/recipes/cosmere.items/tin_ingot_from_blasting_tin_ore.json -8b0b950485c10b37bd3844ef382d281cb05dd112 data/cosmere/advancements/recipes/cosmere.items/tin_ingot_from_smelting_raw_tin_ore.json -b560174b812438a9f695fa0b6a9725f760e1af00 data/cosmere/advancements/recipes/cosmere.items/tin_ingot_from_smelting_tin_ore.json -5bbcab5036b3c9533b48577da2f0837ca5c3cb03 data/cosmere/advancements/recipes/cosmere.items/zinc_ingot.json -0a2cc74003e9ff542869b7819a62be10f2724177 data/cosmere/advancements/recipes/cosmere.items/zinc_ingot_from_blasting_raw_zinc_ore.json -571744ba3c1cbd516782e6697be855889c187e62 data/cosmere/advancements/recipes/cosmere.items/zinc_ingot_from_blasting_zinc_ore.json -226176a8ec72213ed11519700c5ead9c3530bc76 data/cosmere/advancements/recipes/cosmere.items/zinc_ingot_from_smelting_raw_zinc_ore.json -ce687a7ea7eaf89fa121327fbbd0b7a4a6750a0b data/cosmere/advancements/recipes/cosmere.items/zinc_ingot_from_smelting_zinc_ore.json -3ef6828e5cdf771f02ebe36ce09368b4a5926eba data/cosmere/advancements/recipes/cosmere.metalminds/aluminum_bracelet_metalmind.json -7e668fac713e52759565d9f58f205963e9ee4d00 data/cosmere/advancements/recipes/cosmere.metalminds/aluminum_necklace_metalmind.json -0fc9bffd253d78d8d142ab0d3ade16e5c5a65a88 data/cosmere/advancements/recipes/cosmere.metalminds/aluminum_ring_metalmind.json -4b9a6db3441505eb84d41f8da93ecbba779fe64a data/cosmere/advancements/recipes/cosmere.metalminds/aluminum_spike.json -6197e9da9950e6ffded52a6699312bbba1999fb9 data/cosmere/advancements/recipes/cosmere.metalminds/atium_bracelet_metalmind.json -5d373abd71a4af578998e969304271654e63fd5f data/cosmere/advancements/recipes/cosmere.metalminds/atium_necklace_metalmind.json -3a8f341fae3b491af2575b734970826d040adda1 data/cosmere/advancements/recipes/cosmere.metalminds/atium_ring_metalmind.json -b614860a2bd3576a35c21a56309fc841498296af data/cosmere/advancements/recipes/cosmere.metalminds/atium_spike.json -1c4777a76cb2b403403428f09b9ab131931b6e99 data/cosmere/advancements/recipes/cosmere.metalminds/bendalloy_bracelet_metalmind.json -c31ea9b580319c13dbca7f2a2bb247e989811988 data/cosmere/advancements/recipes/cosmere.metalminds/bendalloy_necklace_metalmind.json -68b76ca9ceac2fa84f9af67b55f0ea2a825b2463 data/cosmere/advancements/recipes/cosmere.metalminds/bendalloy_ring_metalmind.json -a94d7ff094de6e305a10c8446254522bea96313d data/cosmere/advancements/recipes/cosmere.metalminds/bendalloy_spike.json -a853338d650837102b5e9b4711f7e6e0234cabc1 data/cosmere/advancements/recipes/cosmere.metalminds/brass_bracelet_metalmind.json -b65c00eef685c935f0fdd464c59a185606b98dfd data/cosmere/advancements/recipes/cosmere.metalminds/brass_necklace_metalmind.json -3c8661c6740e4cb19c21c05be2ff5b703cd94e40 data/cosmere/advancements/recipes/cosmere.metalminds/brass_ring_metalmind.json -a5f44030b58b3755ea1ab956dd60a61f52ee454b data/cosmere/advancements/recipes/cosmere.metalminds/brass_spike.json -27970b63d11ece52b87324d7d00b22c65e7e9091 data/cosmere/advancements/recipes/cosmere.metalminds/bronze_bracelet_metalmind.json -2bf27bfaebb3ebad820f459c5c14d5dc91a93c41 data/cosmere/advancements/recipes/cosmere.metalminds/bronze_necklace_metalmind.json -fa2e45bfb6a3d231daf9af8c26fcb58d9e1768db data/cosmere/advancements/recipes/cosmere.metalminds/bronze_ring_metalmind.json -933b0bfedb7447a5e0a7c47235a8559fa3783dac data/cosmere/advancements/recipes/cosmere.metalminds/bronze_spike.json -114866c534009ef1d8109051d7b44683683f35d9 data/cosmere/advancements/recipes/cosmere.metalminds/cadmium_bracelet_metalmind.json -3f81543c919f9f4bcb79e9042cbb4944921cf118 data/cosmere/advancements/recipes/cosmere.metalminds/cadmium_necklace_metalmind.json -1370796473bdd65c6469de67a3b275d0ca056f75 data/cosmere/advancements/recipes/cosmere.metalminds/cadmium_ring_metalmind.json -0e07fb4b783527a1ed9a6a44a87e43f85f87aec9 data/cosmere/advancements/recipes/cosmere.metalminds/cadmium_spike.json -36b9ee417e8d5dda868843d419d47f6f4056cb67 data/cosmere/advancements/recipes/cosmere.metalminds/chromium_bracelet_metalmind.json -291c43cbb941f2373870f2bd07f2c529d9fa181d data/cosmere/advancements/recipes/cosmere.metalminds/chromium_necklace_metalmind.json -0799691a5d0f6bf6414c121c710dc96f3dc659af data/cosmere/advancements/recipes/cosmere.metalminds/chromium_ring_metalmind.json -f277c37e16a5c2f1db7a6cdf18b8a562bbab72ef data/cosmere/advancements/recipes/cosmere.metalminds/chromium_spike.json -28658fdf053e00bb6f3c5727eac1d5c3c5a358d9 data/cosmere/advancements/recipes/cosmere.metalminds/copper_bracelet_metalmind.json -6e0e33026a3166583fb5080693ee6d7e5dce968b data/cosmere/advancements/recipes/cosmere.metalminds/copper_necklace_metalmind.json -8e32df416937a5bf18720f0df24b8532e79ccb22 data/cosmere/advancements/recipes/cosmere.metalminds/copper_ring_metalmind.json -422f7cbb5469f53ee0799ac07b5ab11b433725df data/cosmere/advancements/recipes/cosmere.metalminds/copper_spike.json -a5dcd9798437107f95859ed65cfceec2477d2de6 data/cosmere/advancements/recipes/cosmere.metalminds/duralumin_bracelet_metalmind.json -2ee8fc8ca90b3fc378fc40391aaef5b7bb82c4f3 data/cosmere/advancements/recipes/cosmere.metalminds/duralumin_necklace_metalmind.json -0920afc5991dd97ed5c1ad319dadce0bd83658b9 data/cosmere/advancements/recipes/cosmere.metalminds/duralumin_ring_metalmind.json -0bebc1b414de68f0c2b476e74316b87a2dc22c5c data/cosmere/advancements/recipes/cosmere.metalminds/duralumin_spike.json -c4ec0f829a590dbec3d7c7716f40ca63da47d547 data/cosmere/advancements/recipes/cosmere.metalminds/electrum_bracelet_metalmind.json -67e4cb9c7fd88c9b7592c44013dbbc1df609b735 data/cosmere/advancements/recipes/cosmere.metalminds/electrum_necklace_metalmind.json -597d3820e7f64a7d0722b9d2a4854602dfb9a52d data/cosmere/advancements/recipes/cosmere.metalminds/electrum_ring_metalmind.json -43dfac1c5d23810e7094c5f1041bf1958677d90d data/cosmere/advancements/recipes/cosmere.metalminds/electrum_spike.json -47bffebd78fb17fd498571034cdaf55e77129b6b data/cosmere/advancements/recipes/cosmere.metalminds/gold_bracelet_metalmind.json -579855928114627c82bedc2067c5745af57b10e1 data/cosmere/advancements/recipes/cosmere.metalminds/gold_necklace_metalmind.json -551651f36bd0940a6957da51bacb127475206e38 data/cosmere/advancements/recipes/cosmere.metalminds/gold_ring_metalmind.json -935bbeb4de6a6be7b718b10c90de82109c20fc83 data/cosmere/advancements/recipes/cosmere.metalminds/gold_spike.json -b0f7ec07dd0f6ac1fe88900a7e9bf1d22821c7a0 data/cosmere/advancements/recipes/cosmere.metalminds/iron_bracelet_metalmind.json -dadfabc13d0da9f2b157e5817de5c47db4801f48 data/cosmere/advancements/recipes/cosmere.metalminds/iron_necklace_metalmind.json -0faf1189819f14bec5486e2e8d77ef3b0da9754c data/cosmere/advancements/recipes/cosmere.metalminds/iron_ring_metalmind.json -ba0d062556a308dbe7bf698114290cbf6f036d5a data/cosmere/advancements/recipes/cosmere.metalminds/iron_spike.json -947031e54eea0f2bb6b852a88b7244cede795f78 data/cosmere/advancements/recipes/cosmere.metalminds/lerasium_spike.json -9d5b1b56b15e57e4693581e4ddd279d9d883c4f0 data/cosmere/advancements/recipes/cosmere.metalminds/nicrosil_bracelet_metalmind.json -0ed687db2b438df20c50559d2df12cf35cb56538 data/cosmere/advancements/recipes/cosmere.metalminds/nicrosil_necklace_metalmind.json -13b96732a8225a434e24f3b4c3caae784ad5b5d8 data/cosmere/advancements/recipes/cosmere.metalminds/nicrosil_ring_metalmind.json -281c69a3ab5f639a336b5ea987933cb3305113e1 data/cosmere/advancements/recipes/cosmere.metalminds/nicrosil_spike.json -1a6df026ae3f0f3149d20165a32817c6134a91d1 data/cosmere/advancements/recipes/cosmere.metalminds/pewter_bracelet_metalmind.json -928d50b788377a764a44f663de505bbbc7cd85d6 data/cosmere/advancements/recipes/cosmere.metalminds/pewter_necklace_metalmind.json -a9bdc25368215de4a0c3f71df60acf71da586957 data/cosmere/advancements/recipes/cosmere.metalminds/pewter_ring_metalmind.json -a8921f36242a162e5d0e94bff0c632e20b531991 data/cosmere/advancements/recipes/cosmere.metalminds/pewter_spike.json -b9886a60fb57881ce084bc31b540b0bf9874ab12 data/cosmere/advancements/recipes/cosmere.metalminds/steel_bracelet_metalmind.json -cd600fb4c60196ce111de31b63e7ac295f27f66c data/cosmere/advancements/recipes/cosmere.metalminds/steel_necklace_metalmind.json -37cf08f686cb92266552760cb39ef607976db303 data/cosmere/advancements/recipes/cosmere.metalminds/steel_ring_metalmind.json -a60d00a7b0f01514f83986fdc66d2d0d58cd5e55 data/cosmere/advancements/recipes/cosmere.metalminds/steel_spike.json -e0a820e1c6cd7c805f69a73fa77cb6641337c3c1 data/cosmere/advancements/recipes/cosmere.metalminds/tin_bracelet_metalmind.json -545663fce48d3397a9f0505b1151b5b0585fe6fc data/cosmere/advancements/recipes/cosmere.metalminds/tin_necklace_metalmind.json -e864e2b083c60228de9dd5525aae7dd352107de6 data/cosmere/advancements/recipes/cosmere.metalminds/tin_ring_metalmind.json -7af20519358128afc953b8aa41501c80030d0def data/cosmere/advancements/recipes/cosmere.metalminds/tin_spike.json -f8b8a7bac4c11ce8845467a10f9b66ffb7a7f80c data/cosmere/advancements/recipes/cosmere.metalminds/zinc_bracelet_metalmind.json -3b81f440de9c04802297bb01202eb6012db17a78 data/cosmere/advancements/recipes/cosmere.metalminds/zinc_necklace_metalmind.json -36c4dc3ce4cccb0d2031d3f21c29e8dcb9792d7b data/cosmere/advancements/recipes/cosmere.metalminds/zinc_ring_metalmind.json -bc6447b7fcdeea5ed8fae4d9873a6a2e68b445a6 data/cosmere/advancements/recipes/cosmere.metalminds/zinc_spike.json -08b90675fb50a796fb5392491e632cf106740b5f data/cosmere/loot_tables/blocks/aluminum_block.json -5952fd0d7734c39c968923de109a3d5b06210dde data/cosmere/loot_tables/blocks/aluminum_ore.json -ab2cc611a239262afa9346636821e0be41509db6 data/cosmere/loot_tables/blocks/atium_block.json -aefddbf7a50beb09c3b186e462b41f32cc0a4f3f data/cosmere/loot_tables/blocks/bendalloy_block.json -df80c2e7988b8becf0c5c0c3c097ee28663342ad data/cosmere/loot_tables/blocks/brass_block.json -bdba4e1594cdd4f82ae2f6dc85df181b146cf76f data/cosmere/loot_tables/blocks/bronze_block.json -233de3a9f131c7a59829e66a5e182d0b19bca4d1 data/cosmere/loot_tables/blocks/cadmium_block.json -c2a018bb912a9926ff537cdc2c5be90943865bd8 data/cosmere/loot_tables/blocks/cadmium_ore.json -de66daec7b0b10e3990407f11c2e58d853f7312f data/cosmere/loot_tables/blocks/chromium_block.json -3d618eb93a360041c2c5276b8e4a5b4ef732047f data/cosmere/loot_tables/blocks/chromium_ore.json -7984f63a14219d935bace8eca8de89f56ad73060 data/cosmere/loot_tables/blocks/copper_block.json -5aaadc2fed3a2ba646e83590598713af5310cac2 data/cosmere/loot_tables/blocks/copper_ore.json -6a98aa4340f0952f9216441959fb3f85795c93d9 data/cosmere/loot_tables/blocks/duralumin_block.json -67328ba357834bbf6624e2e9252bc7656b36c732 data/cosmere/loot_tables/blocks/electrum_block.json -ae550f2e70aa654bd18f3839c2e6ad666ec210bb data/cosmere/loot_tables/blocks/gem_block.json -07a17dc44cd4680664696917672410ec623bfbbd data/cosmere/loot_tables/blocks/harmonium_block.json -32dfb9a5f716d719a23c0231b9fe53d0476d8aba data/cosmere/loot_tables/blocks/lead_block.json -ca0808cbb0b0f99019748c3506c876b2f497710c data/cosmere/loot_tables/blocks/lead_ore.json -ed087df0e93d4725cd15a549e542c6d5a2089dce data/cosmere/loot_tables/blocks/lerasatium_block.json -f296d224216142d13dfcc76dd2db5a5fdc3e8992 data/cosmere/loot_tables/blocks/lerasium_block.json -5ee2891109c30cfdea86f9cdb3c48834c8a6ffd6 data/cosmere/loot_tables/blocks/malatium_block.json -17c8511131913ac28d55b6511bc5867762fbd3d7 data/cosmere/loot_tables/blocks/nickel_block.json -a0c95aba2004a8460ad789e320f7ca095cdd174f data/cosmere/loot_tables/blocks/nickel_ore.json -444342885d79187e98bcd6a940843760c93b1c04 data/cosmere/loot_tables/blocks/nicrosil_block.json -f2c40b7fa056c419d6b5a6b8280257bacc56c0a9 data/cosmere/loot_tables/blocks/pewter_block.json -862eae3d4a288e4c1bac4530c93168c1c4c16de8 data/cosmere/loot_tables/blocks/silver_block.json -8da4ca604f663f4a9831925455a722a43b6f6235 data/cosmere/loot_tables/blocks/silver_ore.json -b9543382e9ce98cefaea9ba5fc7fda19fdebb73a data/cosmere/loot_tables/blocks/steel_block.json -0b59877fbebd282dcd8927e913cc85137491acd6 data/cosmere/loot_tables/blocks/tin_block.json -74a449937f84466b8b8796cccc115a632fa194f7 data/cosmere/loot_tables/blocks/tin_ore.json -05d8a0b0c9c41fdfda2aaa7132a01fce3f94db1a data/cosmere/loot_tables/blocks/zinc_block.json -f64f747e9fef16cbd9f5fda5d5bea0e5c9073b96 data/cosmere/loot_tables/blocks/zinc_ore.json -ef929c9d842ecbe88bce267f06307ec24586f3bd data/cosmere/recipes/alloying/blend/bendalloy.json -8bfd08347f094726f7f398b1ce406a7d8b7600f4 data/cosmere/recipes/alloying/blend/brass.json -eb541ff21f858cc1553b142cad3ad0365e0bedbf data/cosmere/recipes/alloying/blend/bronze.json -9d9508473983fed527bce8535701db131bf6fc88 data/cosmere/recipes/alloying/blend/duralumin.json -215a13a61dd03503f245589b9f62867fc8d01cbf data/cosmere/recipes/alloying/blend/electrum.json -8a162671927664e50492e5260ffb2752a728effe data/cosmere/recipes/alloying/blend/nicrosil.json -a66d22363758cd30a0b524e5976fdb9a0b738f60 data/cosmere/recipes/alloying/blend/pewter.json -89d949e41d124d28b55485de4dba3aa17f3f8c7a data/cosmere/recipes/alloying/blend/steel.json -0ef450c28fae11c06e23607e74106975c6a7b9a0 data/cosmere/recipes/aluminum_block.json -506ed252c05dfb3f5a8abf4097c561bb59bba36f data/cosmere/recipes/aluminum_bracelet_metalmind.json -6121ad14fcba5701f2a7c333f226960e84520e6d data/cosmere/recipes/aluminum_ingot.json -f3bfe73753b9f5d6998799369c49d65e9acd5be4 data/cosmere/recipes/aluminum_ingot_from_blasting_aluminum_ore.json -be00eb698167172a2e742178b13070b1004f9aec data/cosmere/recipes/aluminum_ingot_from_blasting_raw_aluminum_ore.json -2132a921ba638483e17843346337ff809134523e data/cosmere/recipes/aluminum_ingot_from_smelting_aluminum_ore.json -754efaff7b6f6cd1841142152843c975f7710056 data/cosmere/recipes/aluminum_ingot_from_smelting_raw_aluminum_ore.json -3a86d74e8510fcea791e5569e77dd60684d664cc data/cosmere/recipes/aluminum_necklace_metalmind.json -138b215cec5b9290c80c4383e0b0da73b3269d17 data/cosmere/recipes/aluminum_ring_metalmind.json -6cba329c0d6f37f5bfacd1bc155bcc824b63eeca data/cosmere/recipes/aluminum_spike.json -49dd97cddbc1619421e12a2cab9a8d98f9303390 data/cosmere/recipes/atium_block.json -aa47f518bed610096ca6e1dc89610435dbc3c650 data/cosmere/recipes/atium_bracelet_metalmind.json -11185be68cc8a7f32de6dd505386437b6de4022f data/cosmere/recipes/atium_ingot.json -dbcc26423850b986ff3d5b45c6e61b3f00bc09f8 data/cosmere/recipes/atium_necklace_metalmind.json -4b1afa09eb20cb25c011df205b78a36aa55a6ff1 data/cosmere/recipes/atium_ring_metalmind.json -77fe9248e60fffb870ba47f23da4992817c2af5c data/cosmere/recipes/atium_spike.json -0f5a891010d2e0d2ad941a55594aa0773fc04308 data/cosmere/recipes/bendalloy_block.json -22be0cccb52ac7d9cb65c1b2f1971d73a4780e58 data/cosmere/recipes/bendalloy_bracelet_metalmind.json -c617841f10dc75eff565b48d112f3a5345b59f7f data/cosmere/recipes/bendalloy_ingot.json -1b3e05290b63dbaf90d8705b1d35a407aeee9c43 data/cosmere/recipes/bendalloy_ingot_from_blasting_bendalloy_blend.json -2fd345d0cb812e85762199bd5b2330dab6d0aa79 data/cosmere/recipes/bendalloy_ingot_from_smelting_bendalloy_blend.json -7f57ca98369b896f27a458d035c0b9ae2d5b80aa data/cosmere/recipes/bendalloy_necklace_metalmind.json -ba2403077f121357f06b467b4f5784a853973e84 data/cosmere/recipes/bendalloy_ring_metalmind.json -545eefa124001a153ed4462aaf91b7596e2edbb0 data/cosmere/recipes/bendalloy_spike.json -9bf8af83995c10458e0f0e727818fd92117fbbe3 data/cosmere/recipes/brass_block.json -90c184ec1325c8cf4eab21475c7d6326970996b2 data/cosmere/recipes/brass_bracelet_metalmind.json -82699b618032a685647fa590e95b862ce3a042b8 data/cosmere/recipes/brass_ingot.json -b0ec3895cfa2acafb042f7f12766a86cda6feec7 data/cosmere/recipes/brass_ingot_from_blasting_brass_blend.json -de8a0756d6b37d912ed661665d00e5f679b9d205 data/cosmere/recipes/brass_ingot_from_smelting_brass_blend.json -8346231ea537b83e6db57c2861cfdc5328457451 data/cosmere/recipes/brass_necklace_metalmind.json -18f70cd8a6acdf865b7a854bd3b5a181a6cb3980 data/cosmere/recipes/brass_ring_metalmind.json -f7756125afca95dd2c2f57825bbe99dbec781641 data/cosmere/recipes/brass_spike.json -60e029f07a6f84ddb7412ebad965ba0a5d93ad82 data/cosmere/recipes/bronze_block.json -e67153a6b09b51b49596049e065904d0ada68cdf data/cosmere/recipes/bronze_bracelet_metalmind.json -88aeeace1efc145a24dc929aced92e0cfeefa425 data/cosmere/recipes/bronze_ingot.json -6c9af39e46f51635ba244b0533070425e303d8b7 data/cosmere/recipes/bronze_ingot_from_blasting_bronze_blend.json -b26a432587d5ca8c1eadd05ac7f76b2664cd0dd7 data/cosmere/recipes/bronze_ingot_from_smelting_bronze_blend.json -3d8279f909ca1fec7f95b642acdeba6a93b4fe60 data/cosmere/recipes/bronze_necklace_metalmind.json -78f73c622247c0189a5ce48de715ae300ccac2dc data/cosmere/recipes/bronze_ring_metalmind.json -70b5a1bd2fb0921ec74e675c0e9886011692757c data/cosmere/recipes/bronze_spike.json -ef46a7076937d0918dc583ea272305154acbed64 data/cosmere/recipes/cadmium_block.json -93fc12b05ce1cd649c49ef006d56bc42b87e1f5f data/cosmere/recipes/cadmium_bracelet_metalmind.json -67f749a1056518de5fcf635fc9a1fcea6e457b36 data/cosmere/recipes/cadmium_ingot.json -8cd625b36205e09f865fe41aca1a7e535374a5a6 data/cosmere/recipes/cadmium_ingot_from_blasting_cadmium_ore.json -e810ac3f78cabf49031645e43ae5231e7ca2020c data/cosmere/recipes/cadmium_ingot_from_blasting_raw_cadmium_ore.json -6ef73f1a7ee6ca4f511c3392d848d0274e95979b data/cosmere/recipes/cadmium_ingot_from_smelting_cadmium_ore.json -82ebd79b178e9fbc05ad7df20c2163e6ffa7f2ea data/cosmere/recipes/cadmium_ingot_from_smelting_raw_cadmium_ore.json -c6b927d3ee8193f27e2b34a095e0d58aaad27cdb data/cosmere/recipes/cadmium_necklace_metalmind.json -1f49da0ddcba9feedaf0ef8519f45b397aa1165f data/cosmere/recipes/cadmium_ring_metalmind.json -6f4b77d96841dec59d74546a8bf1a57646ee035a data/cosmere/recipes/cadmium_spike.json -92f1920a4776a16b9fcd37a014b25471c048c3e7 data/cosmere/recipes/chromium_block.json -084aec2261c6609879e48fb8f26f92be2a8a9ee9 data/cosmere/recipes/chromium_bracelet_metalmind.json -4d1657dec440ba525cf5a36ea39d446378770ad6 data/cosmere/recipes/chromium_ingot.json -252aa0dac63c71da2504432129a3d6dad8a51f82 data/cosmere/recipes/chromium_ingot_from_blasting_chromium_ore.json -9675e1a6108d0faf6f4611066d394df4f5472b8c data/cosmere/recipes/chromium_ingot_from_blasting_raw_chromium_ore.json -b4a34dd8e63e4abf15832ef75979b196c35c3a8f data/cosmere/recipes/chromium_ingot_from_smelting_chromium_ore.json -3403bc47f964005763bd3487f05c1a1dd41f6b4e data/cosmere/recipes/chromium_ingot_from_smelting_raw_chromium_ore.json -0c986fe8027aff177f4bfb0ac4536963407aebb2 data/cosmere/recipes/chromium_necklace_metalmind.json -b0ebcfa3257d09d0fb98eb1fea7d314cb5e6dedb data/cosmere/recipes/chromium_ring_metalmind.json -e5385615bbd03bb63a0ad04e5483aee17ee0bd7e data/cosmere/recipes/chromium_spike.json -4ef66d6416a73b836aec8febc167a7e2cc26fcf0 data/cosmere/recipes/conversions/aluminum_block_deconstruct.json -6985224580e7e397afe4f27ef235ae4ff8cee8e1 data/cosmere/recipes/conversions/aluminum_item_deconstruct.json -b0de1869585c65cf8f93d1219142f8ddd1d78200 data/cosmere/recipes/conversions/atium_block_deconstruct.json -6ed0b289040e37722745187a8a299c8e5012d108 data/cosmere/recipes/conversions/atium_item_deconstruct.json -484e09e8623544e3cd883bf6556bfba910939952 data/cosmere/recipes/conversions/bendalloy_block_deconstruct.json -d602d7edac59e9ec2690ce1893c7c3c5338e9c36 data/cosmere/recipes/conversions/bendalloy_item_deconstruct.json -d4086b819842a0730bb19d4627ceabce3aa5be39 data/cosmere/recipes/conversions/brass_block_deconstruct.json -fbce5ad475886e3b4d47c27ae032c228d4ac1c33 data/cosmere/recipes/conversions/brass_item_deconstruct.json -545e583ac636d9f2655caa16cc89d0da9f44f2b9 data/cosmere/recipes/conversions/bronze_block_deconstruct.json -99e04bcaf24b2e568fc47d9cb0583e31801d47e4 data/cosmere/recipes/conversions/bronze_item_deconstruct.json -4e4943745137aa98b59cc8531c4300d3ce51a3c0 data/cosmere/recipes/conversions/cadmium_block_deconstruct.json -67d6f697c5f2be80da3481ae8bda462ed24d1db3 data/cosmere/recipes/conversions/cadmium_item_deconstruct.json -92a9b29b35e7c4130cb38acaf152fbb210899d93 data/cosmere/recipes/conversions/chromium_block_deconstruct.json -f0d8f89389f8f6c643940b9679eeeb146a582de6 data/cosmere/recipes/conversions/chromium_item_deconstruct.json -0ea6379f720fbb20b1a973cc0affcf1b655feb27 data/cosmere/recipes/conversions/copper_block_deconstruct.json -9455595ae40eb04847eafaf73b7753cc4eea5c13 data/cosmere/recipes/conversions/copper_item_deconstruct.json -cdfeadfcc04a58e3aa76ff0c2be64da27eb04908 data/cosmere/recipes/conversions/duralumin_block_deconstruct.json -97c4bec12d653b40846856b1da2379db783be573 data/cosmere/recipes/conversions/duralumin_item_deconstruct.json -1b4f6f3500410bfad3038438ff70027ea1e6be62 data/cosmere/recipes/conversions/electrum_block_deconstruct.json -fb054e3492e8697b307cafbeda4231a7d5eca268 data/cosmere/recipes/conversions/electrum_item_deconstruct.json -849a430b0aa4d920b0e64666086e48af14e409ca data/cosmere/recipes/conversions/harmonium_block_deconstruct.json -1714a552b2f9f9efa6a1713d93dcd8ed0ea197bb data/cosmere/recipes/conversions/harmonium_item_deconstruct.json -8497010f6a42b4deaddb50519c8f0b412a773d96 data/cosmere/recipes/conversions/lead_block_deconstruct.json -cee84dd79033a2df90c091b5dbe534e3f1b053d9 data/cosmere/recipes/conversions/lead_item_deconstruct.json -aac90b6e151aba349742aa1d78b8c67178268a0f data/cosmere/recipes/conversions/lerasatium_block_deconstruct.json -533539ca935e8e94c3d0ad8a503ab2f6d9b794c7 data/cosmere/recipes/conversions/lerasatium_item_deconstruct.json -1bd7e0cb007a46551753e935dfa29a330c27e9ab data/cosmere/recipes/conversions/lerasium_block_deconstruct.json -cea5df01d889d0d9b0325717571af98a141fae39 data/cosmere/recipes/conversions/lerasium_item_deconstruct.json -5cfad0a7ce4e70692c29af20b8bf94480e399a78 data/cosmere/recipes/conversions/malatium_block_deconstruct.json -f270665cff41d2ac060ba30e5b30923f4c65ed92 data/cosmere/recipes/conversions/malatium_item_deconstruct.json -0db22ae186cff013b3fcff62cb1dbf3b707a2de4 data/cosmere/recipes/conversions/nickel_block_deconstruct.json -e0f79c8bdd67556b050060578144fef6e63cc356 data/cosmere/recipes/conversions/nickel_item_deconstruct.json -4557a7f641c9fd2d5c9cd075c306f4658cc315b1 data/cosmere/recipes/conversions/nicrosil_block_deconstruct.json -bbbe1c4d64334e6d487d2e9c53bd59a1fd4e8ae3 data/cosmere/recipes/conversions/nicrosil_item_deconstruct.json -320738bfa6ed301685509ff4d38c61881f0eac8a data/cosmere/recipes/conversions/pewter_block_deconstruct.json -87d8ebee028955f284a653d89de24e4868c4b600 data/cosmere/recipes/conversions/pewter_item_deconstruct.json -8eb8dee546f6e94bef902ea7632f54bfac6a4fca data/cosmere/recipes/conversions/silver_block_deconstruct.json -989b540c3816cfc47916d470009558d35fc84eaf data/cosmere/recipes/conversions/silver_item_deconstruct.json -3058ffbc1c9505997161fa593401c721ed327f12 data/cosmere/recipes/conversions/steel_block_deconstruct.json -c340a6967b06c13c39591e00f66fcf6fc83f22cd data/cosmere/recipes/conversions/steel_item_deconstruct.json -7d6c123cf0f7cc5e1b3fc9e0feeee5c0b9c61cfc data/cosmere/recipes/conversions/tin_block_deconstruct.json -76424cf07a60be5566c22b6d4a53e935686591e1 data/cosmere/recipes/conversions/tin_item_deconstruct.json -8c949d6d6463ed3089075530a6f880db2d0de30d data/cosmere/recipes/conversions/zinc_block_deconstruct.json -2d35c8f4e4cb3339744bdc53d02ecee172c54571 data/cosmere/recipes/conversions/zinc_item_deconstruct.json -db44dca11fa6ca65769adc50e14e6225b38cdb8e data/cosmere/recipes/copper_block.json -099a8ede1affebe67611cd5861d5728edc6ed467 data/cosmere/recipes/copper_bracelet_metalmind.json -f784fbb6a27286794b40b975a1a4fcb10c5885c9 data/cosmere/recipes/copper_ingot.json -770c48807a8f867632f2506e0e4350bcdea0a30a data/cosmere/recipes/copper_ingot_from_blasting_copper_ore.json -60bc782c1ef8842c1f80369044252712dfdab0c9 data/cosmere/recipes/copper_ingot_from_blasting_raw_copper_ore.json -ef2ffbd67afba4e5b66c4ab468868041f2ac027f data/cosmere/recipes/copper_ingot_from_smelting_copper_ore.json -f1a312d31fdcbe6f99a132e4a980051559448756 data/cosmere/recipes/copper_ingot_from_smelting_raw_copper_ore.json -2148db355285f3c5c75c412cdfbbf3aa49045986 data/cosmere/recipes/copper_necklace_metalmind.json -471ddafd08611bd63733294974c863273b1ff2b1 data/cosmere/recipes/copper_ring_metalmind.json -cf3ab884b2de5d9432909e8cdacf6227a4b23c80 data/cosmere/recipes/copper_spike.json -dbd24fe40cf4dc7d85613cbaa8798e18184d74e0 data/cosmere/recipes/duralumin_block.json -65364f5f43fa6376eccda09df807c8a7e91fc14c data/cosmere/recipes/duralumin_bracelet_metalmind.json -1d281fa63a9250aa9ec4cd9178aa3c2d7a46a28a data/cosmere/recipes/duralumin_ingot.json -410cb109b0ca8225f2f63a9540c23bef2c9a1177 data/cosmere/recipes/duralumin_ingot_from_blasting_duralumin_blend.json -467f79f6c6bfc39b128a875040f5695e32bdd435 data/cosmere/recipes/duralumin_ingot_from_smelting_duralumin_blend.json -8cb274a1fe8844c5a05c81c551b4c232817af9ec data/cosmere/recipes/duralumin_necklace_metalmind.json -6f47a13e61da17937480bf516eeab6158fe3786f data/cosmere/recipes/duralumin_ring_metalmind.json -5cae5ebf8cf2613617d8fd47a6f8a9dde8fa01d3 data/cosmere/recipes/duralumin_spike.json -06ccc61ca954781d90f1732d2efae411a42891ad data/cosmere/recipes/electrum_block.json -65f7c27630360ee9fbb1293fb25a6c8abddeb5b1 data/cosmere/recipes/electrum_bracelet_metalmind.json -1d225134e99f1ba1d55307274a2698730d5aa0bb data/cosmere/recipes/electrum_ingot.json -e8101b64538c95fa4570bfa614b0820ee60287e3 data/cosmere/recipes/electrum_ingot_from_blasting_electrum_blend.json -4d302d78c042225e48013698fc031e32e91cbb25 data/cosmere/recipes/electrum_ingot_from_smelting_electrum_blend.json -07256e66c53e3c57c223787462f76e0cb62c6e1a data/cosmere/recipes/electrum_necklace_metalmind.json -8b6ad6a4e34e53c8f00fc0ac082ecd0f2ad6266a data/cosmere/recipes/electrum_ring_metalmind.json -e02bdb31286ec9a621d267076f1d8fbe541a5def data/cosmere/recipes/electrum_spike.json -10ab2858592858a0bf8de5980795efad78860fca data/cosmere/recipes/gold_bracelet_metalmind.json -24c82e30b8e63e4298784a03802a6a4b3df44a77 data/cosmere/recipes/gold_necklace_metalmind.json -ccee24004af723466af30fba536ba4c5a39a465c data/cosmere/recipes/gold_ring_metalmind.json -5a83cae9d62d858dae1773ecb04e71c5fc892faf data/cosmere/recipes/gold_spike.json -94c9a6e0f165ae28950d5b14f8a071efee6bd037 data/cosmere/recipes/guide_from_blasting_iron_spike.json -d299ec1f281d95d1d52aba0e788bbbf811f03191 data/cosmere/recipes/guide_from_smelting_iron_spike.json -25c90d0707fbd67eee203168189dd21952a1c5cf data/cosmere/recipes/harmonium_block.json -d6a1ffa255ea739cb958e1842127a51dba6819bd data/cosmere/recipes/harmonium_ingot.json -b1911459e088b811408604ab74c1ffa7fe491063 data/cosmere/recipes/iron_bracelet_metalmind.json -9792d4c3696337dfac6d006b0b32d50ec42b444a data/cosmere/recipes/iron_necklace_metalmind.json -5c9fccf34be586bbdcdff265da73da391ab55cf4 data/cosmere/recipes/iron_ring_metalmind.json -a1a101b751cd28e3b945142cdcd03dbd960c44f6 data/cosmere/recipes/iron_spike.json -0b366993c33a24e8be3037ef2f3808e21cab3726 data/cosmere/recipes/lead_block.json -8b776d63c3f466a9f159f5557144b7df76ee4332 data/cosmere/recipes/lead_ingot.json -f21e354195a4fe37e474e574db709be9079d45b4 data/cosmere/recipes/lead_ingot_from_blasting_lead_ore.json -e7bc46e414ebcf943fbd37e00960e5f4a0bdcf16 data/cosmere/recipes/lead_ingot_from_blasting_raw_lead_ore.json -561455826f64c8463a70f9797f0b991eaa75e761 data/cosmere/recipes/lead_ingot_from_smelting_lead_ore.json -c2445f24c5925d732921171fbfa66864c59a7f14 data/cosmere/recipes/lead_ingot_from_smelting_raw_lead_ore.json -b8f3198b4be02f2e8f527a889b8fb8400f7bde94 data/cosmere/recipes/lerasatium_block.json -9c4f793d8b11d5325374c1b49c3d2faa6c956c70 data/cosmere/recipes/lerasatium_ingot.json -dd2ff61f372ff445523089553ac376a09c44b740 data/cosmere/recipes/lerasium_block.json -7410b8a0ad886ff31a5642e3be908a6b1deb1261 data/cosmere/recipes/lerasium_ingot.json -5bd239ddfe87f1ce25bdf1b604683adba453d000 data/cosmere/recipes/lerasium_spike.json -cb123ca5fd8f39e2c3fd8a2662244b8bcc330bb4 data/cosmere/recipes/malatium_block.json -c6c8c4d290b8624c11982ad2431c8bba7627afa3 data/cosmere/recipes/malatium_ingot.json -495d57488ff18f32c787b50726938b6138cb580a data/cosmere/recipes/nickel_block.json -cfafd2d5b45667269d2af355179e698438d688dd data/cosmere/recipes/nickel_ingot.json -2ac13b480bfa8d19745a6110e7dfbc517f6e2962 data/cosmere/recipes/nickel_ingot_from_blasting_nickel_ore.json -dde582b1906a8c3ff0d6aa1c45e92ced5be4aaba data/cosmere/recipes/nickel_ingot_from_blasting_raw_nickel_ore.json -610fdb3aac9172a213ff415e99e01b5844541ba1 data/cosmere/recipes/nickel_ingot_from_smelting_nickel_ore.json -7a417a22399913313abc38cf709a5b81d9a5c4cb data/cosmere/recipes/nickel_ingot_from_smelting_raw_nickel_ore.json -cb20ecd2c571a963d75950b760b9ca9c4acd173c data/cosmere/recipes/nicrosil_block.json -51f888a526c6fa99fe8d6ed9f9b5b9f99df26ea4 data/cosmere/recipes/nicrosil_bracelet_metalmind.json -3cbd76d125cac5293b91420fa132bd8544211df4 data/cosmere/recipes/nicrosil_ingot.json -bcabe7bea031ee5cc4744e175d79c849265b7b9b data/cosmere/recipes/nicrosil_ingot_from_blasting_nicrosil_blend.json -47c19d8e1f4ebf988f7f2a184f817a35301b8c7e data/cosmere/recipes/nicrosil_ingot_from_smelting_nicrosil_blend.json -9c4647ec78b2d46fe9f440f7171c16b051037435 data/cosmere/recipes/nicrosil_necklace_metalmind.json -3479dae0b2364b83ae1a16f1e47a2e58936e0f05 data/cosmere/recipes/nicrosil_ring_metalmind.json -7e1121acb8f69830030332e62277570efb44b0a6 data/cosmere/recipes/nicrosil_spike.json -3d9fb73591ba87ccac3522dfb30ba42de9c11a04 data/cosmere/recipes/pewter_block.json -38bdbe71c999794d1ae6c0388130717e4c29fac3 data/cosmere/recipes/pewter_bracelet_metalmind.json -a98892969a36beb354d39f4f8ed2e18064b3f760 data/cosmere/recipes/pewter_ingot.json -003c5c7d10453d74487757ff0ea5a74122762c12 data/cosmere/recipes/pewter_ingot_from_blasting_pewter_blend.json -601e7e18de15913499f4e45bbc514b70e5069906 data/cosmere/recipes/pewter_ingot_from_smelting_pewter_blend.json -1993500cbbfe0e49752f4cef638975e3f3798ce9 data/cosmere/recipes/pewter_necklace_metalmind.json -ab8cfecb3d649c4427ce1c5921c3155d24c4433d data/cosmere/recipes/pewter_ring_metalmind.json -93d47bf854cac5cf562ae8c28c8b1128f06f37bb data/cosmere/recipes/pewter_spike.json -86656b59aeb6fbb5729743d2a2300dc211ecb860 data/cosmere/recipes/silver_block.json -670ae65731ea07ab24220bb5d79a1be19aa8d896 data/cosmere/recipes/silver_ingot.json -051a1226407d70d54e7a2c83fad87666cecb8726 data/cosmere/recipes/silver_ingot_from_blasting_raw_silver_ore.json -f749d7dda0df96c16738a9bab32756dd68506333 data/cosmere/recipes/silver_ingot_from_blasting_silver_ore.json -6c32db3ca62d33e94110cf3f738771cbddba9861 data/cosmere/recipes/silver_ingot_from_smelting_raw_silver_ore.json -e969c9b6fe1375859ca7bb8450edd411e5b1e660 data/cosmere/recipes/silver_ingot_from_smelting_silver_ore.json -f5d343e746297147639ed667959a3d4428412048 data/cosmere/recipes/steel_block.json -8b3b68a4fa277e937997ce0ec36596d867e9ff64 data/cosmere/recipes/steel_bracelet_metalmind.json -8b98d8f1805140713da9f15215c9aa847f492c07 data/cosmere/recipes/steel_ingot.json -9662fe13ef031b81bb06fd4747340d322914134e data/cosmere/recipes/steel_ingot_from_blasting_steel_blend.json -02c25f66f14de317103868a0a2f3b881e4dcf503 data/cosmere/recipes/steel_ingot_from_smelting_steel_blend.json -45c0073f967149912e440ec815ae8b3c2d82fe1a data/cosmere/recipes/steel_necklace_metalmind.json -3b397185e9387a50ea31c53465cb4d5b071a4dd3 data/cosmere/recipes/steel_ring_metalmind.json -c894ff30d634ea164fb87471ff622ed6d11a4c01 data/cosmere/recipes/steel_spike.json -9a668edb8db14dff8d23bef24452242f27464f76 data/cosmere/recipes/tin_block.json -0a76cdd7416eeb092fa2f08549bd4b75073faffb data/cosmere/recipes/tin_bracelet_metalmind.json -e6d59c5dabb22fd25104e9ed1b592be10c08aff7 data/cosmere/recipes/tin_ingot.json -93cbe84fc62bf7f86c48184a088b3cf06a678cbb data/cosmere/recipes/tin_ingot_from_blasting_raw_tin_ore.json -89eb682989fe47e9b945240c61e05241c05180ba data/cosmere/recipes/tin_ingot_from_blasting_tin_ore.json -0b165fcb472b68f317ad0ed5846486181b5e0b50 data/cosmere/recipes/tin_ingot_from_smelting_raw_tin_ore.json -46b9bfd86b15331ef94692663983b06dfb6e6979 data/cosmere/recipes/tin_ingot_from_smelting_tin_ore.json -da9b1cecef9d64e1d3701e674f64a0a1fea43fbe data/cosmere/recipes/tin_necklace_metalmind.json -01293513d056c29b5fbcd268a8c2a34a661355fe data/cosmere/recipes/tin_ring_metalmind.json -c160392ed2e859ed0a16aef8be0210b17f066d69 data/cosmere/recipes/tin_spike.json -f91e61a028810c908110cc319394e705c636ff91 data/cosmere/recipes/vial_mixing.json -140d4d017421de2be8a820d145f2176917fcf66d data/cosmere/recipes/zinc_block.json -05b03661d452571811faeb5fe734bfd5f645a9b5 data/cosmere/recipes/zinc_bracelet_metalmind.json -d453bb75c019f01dce3e5edcba3e63ddee3d3aef data/cosmere/recipes/zinc_ingot.json -48bce7a0a8032ae4f0cb293a1d83d9bc23c56f74 data/cosmere/recipes/zinc_ingot_from_blasting_raw_zinc_ore.json -be0661d2dd2fb5b6bede37848e9461b6c1806a1d data/cosmere/recipes/zinc_ingot_from_blasting_zinc_ore.json -878c2ce641234bb37c2f5178f6f81416a336712c data/cosmere/recipes/zinc_ingot_from_smelting_raw_zinc_ore.json -5f596bd1ec74174b4fca9ddd0149fa824fe24708 data/cosmere/recipes/zinc_ingot_from_smelting_zinc_ore.json -ed6a87feb899ae5b200917e672ff0b2c6288a3a2 data/cosmere/recipes/zinc_necklace_metalmind.json -d352310114b79384c7e7a85db73f583994e21a39 data/cosmere/recipes/zinc_ring_metalmind.json -b13e7ce18075d01f96e28353132144b271ddfa08 data/cosmere/recipes/zinc_spike.json -6b0291b7ca4411d32c2e8892f97decbbcd600d54 data/curios/tags/items/bracelet.json -b37675f80320064d0f85e5df877ce3291f7e861c data/curios/tags/items/curio.json -a56651e1a439ed3471a2f66d479ce5d01335bfa0 data/curios/tags/items/necklace.json -a22fbd2ddafbaca357c69bc23bc044525ea05fc1 data/curios/tags/items/ring.json -f963f2d004e93e755b9b88c212159e1999e442a9 data/forge/tags/blocks/storage_blocks.json -3d5ad66889ba2954ba4b68386cc07115f0bf68d1 data/forge/tags/blocks/storage_blocks/aluminum.json -96e63f4f07ad6d42e660685736c6a5c2b0ab10ad data/forge/tags/blocks/storage_blocks/atium.json -8089c719ff8e3087b61312aa93353796afc57bb7 data/forge/tags/blocks/storage_blocks/bendalloy.json -ef813b6a50eaf58d9139dd0c06301e3476c23d63 data/forge/tags/blocks/storage_blocks/brass.json -9133d3705a7fbe29c6601191bbe11c1add59842c data/forge/tags/blocks/storage_blocks/bronze.json -3f87488dac7510ec39f65c260c78fcf2ec829244 data/forge/tags/blocks/storage_blocks/cadmium.json -a79e8672364e8603c7c086d57a6025321af95734 data/forge/tags/blocks/storage_blocks/chromium.json -8dbc9fb6e36a500fd92fc81002da7d0ab0bbc127 data/forge/tags/blocks/storage_blocks/copper.json -3d325af60096937fef50c0015376621807ae256f data/forge/tags/blocks/storage_blocks/duralumin.json -57c051b1164b95f290922016bb0a5e52084b8021 data/forge/tags/blocks/storage_blocks/electrum.json -f4a2b5fe28dfe455d85dcb3eb723008d09e7b33e data/forge/tags/blocks/storage_blocks/harmonium.json -9d497f32f468ea3b88ff6ac465e37c97bbacb3c1 data/forge/tags/blocks/storage_blocks/lead.json -47a87fed041123f2c24e35e3a1e490afcb7b8b85 data/forge/tags/blocks/storage_blocks/lerasatium.json -cb26b1d53c744f1be5e94d4bbffb57eaa5d44055 data/forge/tags/blocks/storage_blocks/lerasium.json -db1aceb49a4b13da9f50c0d4a249c3577e53b633 data/forge/tags/blocks/storage_blocks/malatium.json -07213e9beeadc7a1d0b7bb2b46c976172d0d3ce6 data/forge/tags/blocks/storage_blocks/nickel.json -02b73e102f4c87ad6c5fdf424ef52b89185897c2 data/forge/tags/blocks/storage_blocks/nicrosil.json -c263527b3a980fa055242e5a14f9abb8d7b3669f data/forge/tags/blocks/storage_blocks/pewter.json -3fbf6e7c64e36bf8905dfbb2c6d2214e92892025 data/forge/tags/blocks/storage_blocks/silver.json -dcbe0dd7a0ee71d3369df355128a650b44d03fd1 data/forge/tags/blocks/storage_blocks/steel.json -2186f095063727aa76a726cb4f4203e9c01f0d53 data/forge/tags/blocks/storage_blocks/tin.json -ae07d8a5dc1b927d44e31a4b974a18a1ff70b79b data/forge/tags/blocks/storage_blocks/zinc.json -923618653a5da1a3e7c61e5d4f870bb89e525d60 data/forge/tags/items/ingots.json -e1e14cdbd80f6a0fed198cbf570e0f55647ba5bc data/forge/tags/items/ingots/aluminum.json -955c5a6dda0e6ef7a1125f926cbeddcf34b637c2 data/forge/tags/items/ingots/atium.json -a9c2d028922915591dcf4e6af6833ef21f827a89 data/forge/tags/items/ingots/bendalloy.json -85d1b680920c204793035324dba108a0f22ec1a2 data/forge/tags/items/ingots/brass.json -bd61e0117a847dca76d0cddf0cf0fe644218bab6 data/forge/tags/items/ingots/bronze.json -ee39a52d8438b685c014ac5a418d3af02e8362cc data/forge/tags/items/ingots/cadmium.json -c58ed8aedd348ebc7b8735b4e240ba1ca7878ec1 data/forge/tags/items/ingots/chromium.json -83b3139347e9d031681ee95b86bc812d6d130022 data/forge/tags/items/ingots/copper.json -bf7c707dd0c1657784f2c0ca98df356a14a45a91 data/forge/tags/items/ingots/duralumin.json -7e922977520acdeb4bfa6bde73bbdcaa7f8a0d24 data/forge/tags/items/ingots/electrum.json -0c2cafa86b3722e2ee6b2799df25c9e7f4280c80 data/forge/tags/items/ingots/harmonium.json -cf4e47c6475a04d3ff32dde96a36bf01abb8c188 data/forge/tags/items/ingots/lead.json -00e9fd62be97a82e0bacf52367cbef968eb83db8 data/forge/tags/items/ingots/lerasatium.json -4f4b4b33171735a51711fd5de84185b8db0beaff data/forge/tags/items/ingots/lerasium.json -8c223b44738b4843d181618938ef3cf6ad95aae3 data/forge/tags/items/ingots/malatium.json -6d3c183f3d7e64f37548cd73e59748189806cfef data/forge/tags/items/ingots/nickel.json -42141799f6cd617cbd28c5d3c0b97636cc89cceb data/forge/tags/items/ingots/nicrosil.json -cdc20152426446c115e43c30f4cde8058da87508 data/forge/tags/items/ingots/pewter.json -2baccffebad52799de85dc9e11edb69fb2efcbb2 data/forge/tags/items/ingots/silver.json -fdae27ccb542afd72fc55eac4afd85aa7877ee05 data/forge/tags/items/ingots/steel.json -91ad6514a79c168d199f4ef881d1aa850a4f190d data/forge/tags/items/ingots/tin.json -c29268230199db02071e46f93ade8069f537b2f5 data/forge/tags/items/ingots/zinc.json -bfe9b6d421835d83e8d8ded2f7af8ff6611540b5 data/forge/tags/items/nuggets.json -9781d8396c057817bf1ca60de1c1d9379943f4c4 data/forge/tags/items/nuggets/aluminum.json -bbc1d3c0089641635715bc311e778a537f527d13 data/forge/tags/items/nuggets/atium.json -0eb4e884ef0c47b8946ee3bf119c5d0dcfa016ae data/forge/tags/items/nuggets/bendalloy.json -6426f283d83ef2545a5c1a5d1fba0ef18842f5dd data/forge/tags/items/nuggets/brass.json -7660cfdb0146ec57000c66cd83d51811de8f08c5 data/forge/tags/items/nuggets/bronze.json -082c70dc187c6f75d2b95f70be05d9e685d215e1 data/forge/tags/items/nuggets/cadmium.json -b313765b38b68ccdd0df8f152638146f259c1f5e data/forge/tags/items/nuggets/chromium.json -0daf0c138e9d2fafbf306e4ca66245b20b113468 data/forge/tags/items/nuggets/copper.json -837efb57da9f1c0f8216d7ac33540d66ec4db7be data/forge/tags/items/nuggets/duralumin.json -5bf05cbcb51412e55324a07484dd3867c2f4c292 data/forge/tags/items/nuggets/electrum.json -11218d2fde2fcb50e313d329cb1a2df84d21bb2b data/forge/tags/items/nuggets/harmonium.json -45169689ed5667abac00da9950cd20c8740a4335 data/forge/tags/items/nuggets/lead.json -8fcfbd9323c8cad44f7f8350340f2449c86ff6d5 data/forge/tags/items/nuggets/lerasatium.json -2b9d7605369b7d330ba280f45d5ab4c12ad6bdee data/forge/tags/items/nuggets/lerasium.json -f5120621a79bd56bec07c61d5ded67eea9997a76 data/forge/tags/items/nuggets/malatium.json -e3dd21fc4a2ef56289e102fa6a08e82e46027f3c data/forge/tags/items/nuggets/nickel.json -f59dee005861689e2d5335f475d39ca587725f28 data/forge/tags/items/nuggets/nicrosil.json -07920c7bdc1d09436ab27270613e6f580d1c744c data/forge/tags/items/nuggets/pewter.json -45423d42c45718866d512e7dbc57f15f2f125617 data/forge/tags/items/nuggets/silver.json -31726e301b6d1798698825f390dc46e2b2824947 data/forge/tags/items/nuggets/steel.json -26d4e2dded22cf2dec9f5d26c4e8851cc9d5a2a7 data/forge/tags/items/nuggets/tin.json -57ad2b990da7ef8ebcdf45451bcf3564f60bb2fa data/forge/tags/items/nuggets/zinc.json -979a79dbdb8a490e550ce19045335f2b87d97d54 data/forge/tags/items/raw/aluminum.json -218a8f126d873e0271641b652331d08f6c707388 data/forge/tags/items/raw/bendalloy.json -cee76efe589672fd718ee3c09342ce3b84c6cbbd data/forge/tags/items/raw/brass.json -c4765f0747da1146d378568813a6022750baeab4 data/forge/tags/items/raw/bronze.json -ff2b08cdd1bef52a34eeaf70906b923a75a1ba37 data/forge/tags/items/raw/cadmium.json -fad25922761338ee51148b75c1f9b4a0f55c832b data/forge/tags/items/raw/chromium.json -082b8cfd85e7475c8c8e30875b5dcac92e429cf2 data/forge/tags/items/raw/copper.json -723ac5ad1792eea5a6c7d46b2c803b098302a8eb data/forge/tags/items/raw/duralumin.json -050c4e42f992c2e14c6aa47574fe23ac39a37f8c data/forge/tags/items/raw/electrum.json -5de0cc5f0733376a7fef274a2e60e391ea2aec1b data/forge/tags/items/raw/lead.json -6034c0399eadf3bdc5f92ee5b27beee09796ab77 data/forge/tags/items/raw/nickel.json -8adb3ddefba131dccc4a420b1659c40e77bca793 data/forge/tags/items/raw/nicrosil.json -52d40975a6da5e22f502bc9fc002c10d576833cc data/forge/tags/items/raw/pewter.json -5dd70e57464ffcad901d6084335b21b16b98458b data/forge/tags/items/raw/silver.json -417762db9433c7a4340557013b440f6c01342f78 data/forge/tags/items/raw/steel.json -bae99e6f06e5dec13233d0fc0a1116dd5b166c63 data/forge/tags/items/raw/tin.json -d413d0dad40fc884762eda82b9f39a50cc0a3010 data/forge/tags/items/raw/zinc.json -367e2363fc55412303425572a910c5b7e30e849d data/forge/tags/items/storage_blocks.json -3d5ad66889ba2954ba4b68386cc07115f0bf68d1 data/forge/tags/items/storage_blocks/aluminum.json -96e63f4f07ad6d42e660685736c6a5c2b0ab10ad data/forge/tags/items/storage_blocks/atium.json -8089c719ff8e3087b61312aa93353796afc57bb7 data/forge/tags/items/storage_blocks/bendalloy.json -ef813b6a50eaf58d9139dd0c06301e3476c23d63 data/forge/tags/items/storage_blocks/brass.json -9133d3705a7fbe29c6601191bbe11c1add59842c data/forge/tags/items/storage_blocks/bronze.json -3f87488dac7510ec39f65c260c78fcf2ec829244 data/forge/tags/items/storage_blocks/cadmium.json -a79e8672364e8603c7c086d57a6025321af95734 data/forge/tags/items/storage_blocks/chromium.json -8dbc9fb6e36a500fd92fc81002da7d0ab0bbc127 data/forge/tags/items/storage_blocks/copper.json -3d325af60096937fef50c0015376621807ae256f data/forge/tags/items/storage_blocks/duralumin.json -57c051b1164b95f290922016bb0a5e52084b8021 data/forge/tags/items/storage_blocks/electrum.json -f4a2b5fe28dfe455d85dcb3eb723008d09e7b33e data/forge/tags/items/storage_blocks/harmonium.json -9d497f32f468ea3b88ff6ac465e37c97bbacb3c1 data/forge/tags/items/storage_blocks/lead.json -47a87fed041123f2c24e35e3a1e490afcb7b8b85 data/forge/tags/items/storage_blocks/lerasatium.json -cb26b1d53c744f1be5e94d4bbffb57eaa5d44055 data/forge/tags/items/storage_blocks/lerasium.json -db1aceb49a4b13da9f50c0d4a249c3577e53b633 data/forge/tags/items/storage_blocks/malatium.json -07213e9beeadc7a1d0b7bb2b46c976172d0d3ce6 data/forge/tags/items/storage_blocks/nickel.json -02b73e102f4c87ad6c5fdf424ef52b89185897c2 data/forge/tags/items/storage_blocks/nicrosil.json -c263527b3a980fa055242e5a14f9abb8d7b3669f data/forge/tags/items/storage_blocks/pewter.json -3fbf6e7c64e36bf8905dfbb2c6d2214e92892025 data/forge/tags/items/storage_blocks/silver.json -dcbe0dd7a0ee71d3369df355128a650b44d03fd1 data/forge/tags/items/storage_blocks/steel.json -2186f095063727aa76a726cb4f4203e9c01f0d53 data/forge/tags/items/storage_blocks/tin.json -ae07d8a5dc1b927d44e31a4b974a18a1ff70b79b data/forge/tags/items/storage_blocks/zinc.json -e41ca9272ddd7549f0065c670b382c34c92d81bb data/minecraft/tags/blocks/beacon_base_blocks.json -8e54c7bc31ce3b75e637dee823f964ad5abc5596 data/minecraft/tags/blocks/dragon_immune.json -8e54c7bc31ce3b75e637dee823f964ad5abc5596 data/minecraft/tags/blocks/wither_immune.json diff --git a/src/main/generated/assets/cosmere/blockstates/aluminum_block.json b/src/main/generated/assets/cosmere/blockstates/aluminum_block.json deleted file mode 100644 index cc4caa40d..000000000 --- a/src/main/generated/assets/cosmere/blockstates/aluminum_block.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "variants": { - "": { - "model": "cosmere:block/metal_block" - } - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/blockstates/aluminum_ore.json b/src/main/generated/assets/cosmere/blockstates/aluminum_ore.json deleted file mode 100644 index 9b149921f..000000000 --- a/src/main/generated/assets/cosmere/blockstates/aluminum_ore.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "variants": { - "": { - "model": "cosmere:block/ore_block" - } - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/blockstates/atium_block.json b/src/main/generated/assets/cosmere/blockstates/atium_block.json deleted file mode 100644 index cc4caa40d..000000000 --- a/src/main/generated/assets/cosmere/blockstates/atium_block.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "variants": { - "": { - "model": "cosmere:block/metal_block" - } - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/blockstates/bendalloy_block.json b/src/main/generated/assets/cosmere/blockstates/bendalloy_block.json deleted file mode 100644 index cc4caa40d..000000000 --- a/src/main/generated/assets/cosmere/blockstates/bendalloy_block.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "variants": { - "": { - "model": "cosmere:block/metal_block" - } - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/blockstates/brass_block.json b/src/main/generated/assets/cosmere/blockstates/brass_block.json deleted file mode 100644 index cc4caa40d..000000000 --- a/src/main/generated/assets/cosmere/blockstates/brass_block.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "variants": { - "": { - "model": "cosmere:block/metal_block" - } - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/blockstates/bronze_block.json b/src/main/generated/assets/cosmere/blockstates/bronze_block.json deleted file mode 100644 index cc4caa40d..000000000 --- a/src/main/generated/assets/cosmere/blockstates/bronze_block.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "variants": { - "": { - "model": "cosmere:block/metal_block" - } - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/blockstates/cadmium_block.json b/src/main/generated/assets/cosmere/blockstates/cadmium_block.json deleted file mode 100644 index cc4caa40d..000000000 --- a/src/main/generated/assets/cosmere/blockstates/cadmium_block.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "variants": { - "": { - "model": "cosmere:block/metal_block" - } - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/blockstates/cadmium_ore.json b/src/main/generated/assets/cosmere/blockstates/cadmium_ore.json deleted file mode 100644 index 9b149921f..000000000 --- a/src/main/generated/assets/cosmere/blockstates/cadmium_ore.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "variants": { - "": { - "model": "cosmere:block/ore_block" - } - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/blockstates/chromium_block.json b/src/main/generated/assets/cosmere/blockstates/chromium_block.json deleted file mode 100644 index cc4caa40d..000000000 --- a/src/main/generated/assets/cosmere/blockstates/chromium_block.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "variants": { - "": { - "model": "cosmere:block/metal_block" - } - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/blockstates/chromium_ore.json b/src/main/generated/assets/cosmere/blockstates/chromium_ore.json deleted file mode 100644 index 9b149921f..000000000 --- a/src/main/generated/assets/cosmere/blockstates/chromium_ore.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "variants": { - "": { - "model": "cosmere:block/ore_block" - } - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/blockstates/copper_block.json b/src/main/generated/assets/cosmere/blockstates/copper_block.json deleted file mode 100644 index cc4caa40d..000000000 --- a/src/main/generated/assets/cosmere/blockstates/copper_block.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "variants": { - "": { - "model": "cosmere:block/metal_block" - } - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/blockstates/copper_ore.json b/src/main/generated/assets/cosmere/blockstates/copper_ore.json deleted file mode 100644 index 9b149921f..000000000 --- a/src/main/generated/assets/cosmere/blockstates/copper_ore.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "variants": { - "": { - "model": "cosmere:block/ore_block" - } - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/blockstates/duralumin_block.json b/src/main/generated/assets/cosmere/blockstates/duralumin_block.json deleted file mode 100644 index cc4caa40d..000000000 --- a/src/main/generated/assets/cosmere/blockstates/duralumin_block.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "variants": { - "": { - "model": "cosmere:block/metal_block" - } - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/blockstates/electrum_block.json b/src/main/generated/assets/cosmere/blockstates/electrum_block.json deleted file mode 100644 index cc4caa40d..000000000 --- a/src/main/generated/assets/cosmere/blockstates/electrum_block.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "variants": { - "": { - "model": "cosmere:block/metal_block" - } - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/blockstates/gem_block.json b/src/main/generated/assets/cosmere/blockstates/gem_block.json deleted file mode 100644 index b7fffd50d..000000000 --- a/src/main/generated/assets/cosmere/blockstates/gem_block.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "variants": { - "": { - "model": "cosmere:block/gem_block" - } - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/blockstates/harmonium_block.json b/src/main/generated/assets/cosmere/blockstates/harmonium_block.json deleted file mode 100644 index cc4caa40d..000000000 --- a/src/main/generated/assets/cosmere/blockstates/harmonium_block.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "variants": { - "": { - "model": "cosmere:block/metal_block" - } - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/blockstates/lead_block.json b/src/main/generated/assets/cosmere/blockstates/lead_block.json deleted file mode 100644 index cc4caa40d..000000000 --- a/src/main/generated/assets/cosmere/blockstates/lead_block.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "variants": { - "": { - "model": "cosmere:block/metal_block" - } - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/blockstates/lead_ore.json b/src/main/generated/assets/cosmere/blockstates/lead_ore.json deleted file mode 100644 index 9b149921f..000000000 --- a/src/main/generated/assets/cosmere/blockstates/lead_ore.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "variants": { - "": { - "model": "cosmere:block/ore_block" - } - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/blockstates/lerasatium_block.json b/src/main/generated/assets/cosmere/blockstates/lerasatium_block.json deleted file mode 100644 index cc4caa40d..000000000 --- a/src/main/generated/assets/cosmere/blockstates/lerasatium_block.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "variants": { - "": { - "model": "cosmere:block/metal_block" - } - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/blockstates/lerasium_block.json b/src/main/generated/assets/cosmere/blockstates/lerasium_block.json deleted file mode 100644 index cc4caa40d..000000000 --- a/src/main/generated/assets/cosmere/blockstates/lerasium_block.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "variants": { - "": { - "model": "cosmere:block/metal_block" - } - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/blockstates/malatium_block.json b/src/main/generated/assets/cosmere/blockstates/malatium_block.json deleted file mode 100644 index cc4caa40d..000000000 --- a/src/main/generated/assets/cosmere/blockstates/malatium_block.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "variants": { - "": { - "model": "cosmere:block/metal_block" - } - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/blockstates/nickel_block.json b/src/main/generated/assets/cosmere/blockstates/nickel_block.json deleted file mode 100644 index cc4caa40d..000000000 --- a/src/main/generated/assets/cosmere/blockstates/nickel_block.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "variants": { - "": { - "model": "cosmere:block/metal_block" - } - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/blockstates/nickel_ore.json b/src/main/generated/assets/cosmere/blockstates/nickel_ore.json deleted file mode 100644 index 9b149921f..000000000 --- a/src/main/generated/assets/cosmere/blockstates/nickel_ore.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "variants": { - "": { - "model": "cosmere:block/ore_block" - } - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/blockstates/nicrosil_block.json b/src/main/generated/assets/cosmere/blockstates/nicrosil_block.json deleted file mode 100644 index cc4caa40d..000000000 --- a/src/main/generated/assets/cosmere/blockstates/nicrosil_block.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "variants": { - "": { - "model": "cosmere:block/metal_block" - } - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/blockstates/pewter_block.json b/src/main/generated/assets/cosmere/blockstates/pewter_block.json deleted file mode 100644 index cc4caa40d..000000000 --- a/src/main/generated/assets/cosmere/blockstates/pewter_block.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "variants": { - "": { - "model": "cosmere:block/metal_block" - } - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/blockstates/silver_block.json b/src/main/generated/assets/cosmere/blockstates/silver_block.json deleted file mode 100644 index cc4caa40d..000000000 --- a/src/main/generated/assets/cosmere/blockstates/silver_block.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "variants": { - "": { - "model": "cosmere:block/metal_block" - } - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/blockstates/silver_ore.json b/src/main/generated/assets/cosmere/blockstates/silver_ore.json deleted file mode 100644 index 9b149921f..000000000 --- a/src/main/generated/assets/cosmere/blockstates/silver_ore.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "variants": { - "": { - "model": "cosmere:block/ore_block" - } - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/blockstates/steel_block.json b/src/main/generated/assets/cosmere/blockstates/steel_block.json deleted file mode 100644 index cc4caa40d..000000000 --- a/src/main/generated/assets/cosmere/blockstates/steel_block.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "variants": { - "": { - "model": "cosmere:block/metal_block" - } - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/blockstates/tin_block.json b/src/main/generated/assets/cosmere/blockstates/tin_block.json deleted file mode 100644 index cc4caa40d..000000000 --- a/src/main/generated/assets/cosmere/blockstates/tin_block.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "variants": { - "": { - "model": "cosmere:block/metal_block" - } - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/blockstates/tin_ore.json b/src/main/generated/assets/cosmere/blockstates/tin_ore.json deleted file mode 100644 index 9b149921f..000000000 --- a/src/main/generated/assets/cosmere/blockstates/tin_ore.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "variants": { - "": { - "model": "cosmere:block/ore_block" - } - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/blockstates/zinc_block.json b/src/main/generated/assets/cosmere/blockstates/zinc_block.json deleted file mode 100644 index cc4caa40d..000000000 --- a/src/main/generated/assets/cosmere/blockstates/zinc_block.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "variants": { - "": { - "model": "cosmere:block/metal_block" - } - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/blockstates/zinc_ore.json b/src/main/generated/assets/cosmere/blockstates/zinc_ore.json deleted file mode 100644 index 9b149921f..000000000 --- a/src/main/generated/assets/cosmere/blockstates/zinc_ore.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "variants": { - "": { - "model": "cosmere:block/ore_block" - } - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/lang/en_us.json b/src/main/generated/assets/cosmere/lang/en_us.json deleted file mode 100644 index f2030c152..000000000 --- a/src/main/generated/assets/cosmere/lang/en_us.json +++ /dev/null @@ -1,318 +0,0 @@ -{ - "argument.cosmere.power.invalid": "Invalid power", - "block.cosmere.aluminum_block": "Aluminum Block", - "block.cosmere.aluminum_ore": "Aluminum Ore", - "block.cosmere.atium_block": "Atium Block", - "block.cosmere.bendalloy_block": "Bendalloy Block", - "block.cosmere.brass_block": "Brass Block", - "block.cosmere.bronze_block": "Bronze Block", - "block.cosmere.cadmium_block": "Cadmium Block", - "block.cosmere.cadmium_ore": "Cadmium Ore", - "block.cosmere.chromium_block": "Chromium Block", - "block.cosmere.chromium_ore": "Chromium Ore", - "block.cosmere.copper_block": "Copper Block", - "block.cosmere.copper_ore": "Copper Ore", - "block.cosmere.duralumin_block": "Duralumin Block", - "block.cosmere.electrum_block": "Electrum Block", - "block.cosmere.gem_block": "Gem Block", - "block.cosmere.harmonium_block": "Harmonium Block", - "block.cosmere.lead_block": "Lead Block", - "block.cosmere.lead_ore": "Lead Ore", - "block.cosmere.lerasatium_block": "Lerasatium Block", - "block.cosmere.lerasium_block": "Lerasium Block", - "block.cosmere.malatium_block": "Malatium Block", - "block.cosmere.nickel_block": "Nickel Block", - "block.cosmere.nickel_ore": "Nickel Ore", - "block.cosmere.nicrosil_block": "Nicrosil Block", - "block.cosmere.pewter_block": "Pewter Block", - "block.cosmere.silver_block": "Silver Block", - "block.cosmere.silver_ore": "Silver Ore", - "block.cosmere.steel_block": "Steel Block", - "block.cosmere.tin_block": "Tin Block", - "block.cosmere.tin_ore": "Tin Ore", - "block.cosmere.zinc_block": "Zinc Block", - "block.cosmere.zinc_ore": "Zinc Ore", - "command.cosmere.power.found": "Powers found for: %s \n", - "command.cosmere.power.set.fail": "Failed to update power", - "command.cosmere.power.set.success": "Successfully set power to: %s", - "cosmere.landing": "The Cosmere is filled with many fantastical things. I have left my findings written within this book.", - "effect.cosmere.allomancy_boost": "Allomancy Boost", - "effect.cosmere.burning_copper": "Burning Copper", - "effect.cosmere.storing_aluminum": "Storing Aluminum", - "effect.cosmere.storing_atium": "Storing Atium", - "effect.cosmere.storing_bendalloy": "Storing Bendalloy", - "effect.cosmere.storing_brass": "Storing Brass", - "effect.cosmere.storing_bronze": "Storing Bronze", - "effect.cosmere.storing_cadmium": "Storing Cadmium", - "effect.cosmere.storing_chromium": "Storing Chromium", - "effect.cosmere.storing_copper": "Storing Copper", - "effect.cosmere.storing_duralumin": "Storing Duralumin", - "effect.cosmere.storing_electrum": "Storing Electrum", - "effect.cosmere.storing_gold": "Storing Gold", - "effect.cosmere.storing_iron": "Storing Iron", - "effect.cosmere.storing_nicrosil": "Storing Nicrosil", - "effect.cosmere.storing_pewter": "Storing Pewter", - "effect.cosmere.storing_steel": "Storing Steel", - "effect.cosmere.storing_tin": "Storing Tin", - "effect.cosmere.storing_zinc": "Storing Zinc", - "effect.cosmere.tapping_aluminum": "Tapping Aluminum", - "effect.cosmere.tapping_atium": "Tapping Atium", - "effect.cosmere.tapping_bendalloy": "Tapping Bendalloy", - "effect.cosmere.tapping_brass": "Tapping Brass", - "effect.cosmere.tapping_bronze": "Tapping Bronze", - "effect.cosmere.tapping_cadmium": "Tapping Cadmium", - "effect.cosmere.tapping_chromium": "Tapping Chromium", - "effect.cosmere.tapping_copper": "Tapping Copper", - "effect.cosmere.tapping_duralumin": "Tapping Duralumin", - "effect.cosmere.tapping_electrum": "Tapping Electrum", - "effect.cosmere.tapping_gold": "Tapping Gold", - "effect.cosmere.tapping_iron": "Tapping Iron", - "effect.cosmere.tapping_nicrosil": "Tapping Nicrosil", - "effect.cosmere.tapping_pewter": "Tapping Pewter", - "effect.cosmere.tapping_steel": "Tapping Steel", - "effect.cosmere.tapping_tin": "Tapping Tin", - "effect.cosmere.tapping_zinc": "Tapping Zinc", - "entity.cosmere.spren_flame": "Spren Flame", - "gui.cosmere.button.back": "Back", - "gui.cosmere.cancel": "> Cancel", - "gui.cosmere.confirm": "> Confirm", - "gui.cosmere.mode.decrease": "Decrease", - "gui.cosmere.mode.increase": "Increase", - "gui.cosmere.next": "> Next", - "gui.cosmere.other.active": "Active", - "gui.cosmere.other.inactive": "Inactive", - "gui.cosmere.previous": "> Previous", - "gui.cosmere.save": "> Save", - "gui.cosmere.select": "> Select", - "item.cosmere.aluminum_bracelet_metalmind": "Aluminum Bracelet Metalmind", - "item.cosmere.aluminum_ingot": "Aluminum Ingot", - "item.cosmere.aluminum_necklace_metalmind": "Aluminum Necklace Metalmind", - "item.cosmere.aluminum_nugget": "Aluminum Nugget", - "item.cosmere.aluminum_ring_metalmind": "Aluminum Ring Metalmind", - "item.cosmere.aluminum_spike": "Aluminum Spike", - "item.cosmere.atium_bracelet_metalmind": "Atium Bracelet Metalmind", - "item.cosmere.atium_ingot": "Atium Ingot", - "item.cosmere.atium_necklace_metalmind": "Atium Necklace Metalmind", - "item.cosmere.atium_nugget": "Atium Nugget", - "item.cosmere.atium_ring_metalmind": "Atium Ring Metalmind", - "item.cosmere.atium_spike": "Atium Spike", - "item.cosmere.bendalloy_blend": "Bendalloy Blend", - "item.cosmere.bendalloy_bracelet_metalmind": "Bendalloy Bracelet Metalmind", - "item.cosmere.bendalloy_ingot": "Bendalloy Ingot", - "item.cosmere.bendalloy_necklace_metalmind": "Bendalloy Necklace Metalmind", - "item.cosmere.bendalloy_nugget": "Bendalloy Nugget", - "item.cosmere.bendalloy_ring_metalmind": "Bendalloy Ring Metalmind", - "item.cosmere.bendalloy_spike": "Bendalloy Spike", - "item.cosmere.brass_blend": "Brass Blend", - "item.cosmere.brass_bracelet_metalmind": "Brass Bracelet Metalmind", - "item.cosmere.brass_ingot": "Brass Ingot", - "item.cosmere.brass_necklace_metalmind": "Brass Necklace Metalmind", - "item.cosmere.brass_nugget": "Brass Nugget", - "item.cosmere.brass_ring_metalmind": "Brass Ring Metalmind", - "item.cosmere.brass_spike": "Brass Spike", - "item.cosmere.bronze_blend": "Bronze Blend", - "item.cosmere.bronze_bracelet_metalmind": "Bronze Bracelet Metalmind", - "item.cosmere.bronze_ingot": "Bronze Ingot", - "item.cosmere.bronze_necklace_metalmind": "Bronze Necklace Metalmind", - "item.cosmere.bronze_nugget": "Bronze Nugget", - "item.cosmere.bronze_ring_metalmind": "Bronze Ring Metalmind", - "item.cosmere.bronze_spike": "Bronze Spike", - "item.cosmere.cadmium_bracelet_metalmind": "Cadmium Bracelet Metalmind", - "item.cosmere.cadmium_ingot": "Cadmium Ingot", - "item.cosmere.cadmium_necklace_metalmind": "Cadmium Necklace Metalmind", - "item.cosmere.cadmium_nugget": "Cadmium Nugget", - "item.cosmere.cadmium_ring_metalmind": "Cadmium Ring Metalmind", - "item.cosmere.cadmium_spike": "Cadmium Spike", - "item.cosmere.chromium_bracelet_metalmind": "Chromium Bracelet Metalmind", - "item.cosmere.chromium_ingot": "Chromium Ingot", - "item.cosmere.chromium_necklace_metalmind": "Chromium Necklace Metalmind", - "item.cosmere.chromium_nugget": "Chromium Nugget", - "item.cosmere.chromium_ring_metalmind": "Chromium Ring Metalmind", - "item.cosmere.chromium_spike": "Chromium Spike", - "item.cosmere.copper_bracelet_metalmind": "Copper Bracelet Metalmind", - "item.cosmere.copper_clip": "Copper Clip", - "item.cosmere.copper_ingot": "Copper Ingot", - "item.cosmere.copper_necklace_metalmind": "Copper Necklace Metalmind", - "item.cosmere.copper_nugget": "Copper Nugget", - "item.cosmere.copper_ring_metalmind": "Copper Ring Metalmind", - "item.cosmere.copper_spike": "Copper Spike", - "item.cosmere.duralumin_blend": "Duralumin Blend", - "item.cosmere.duralumin_bracelet_metalmind": "Duralumin Bracelet Metalmind", - "item.cosmere.duralumin_ingot": "Duralumin Ingot", - "item.cosmere.duralumin_necklace_metalmind": "Duralumin Necklace Metalmind", - "item.cosmere.duralumin_nugget": "Duralumin Nugget", - "item.cosmere.duralumin_ring_metalmind": "Duralumin Ring Metalmind", - "item.cosmere.duralumin_spike": "Duralumin Spike", - "item.cosmere.electrum_blend": "Electrum Blend", - "item.cosmere.electrum_bracelet_metalmind": "Electrum Bracelet Metalmind", - "item.cosmere.electrum_ingot": "Electrum Ingot", - "item.cosmere.electrum_necklace_metalmind": "Electrum Necklace Metalmind", - "item.cosmere.electrum_nugget": "Electrum Nugget", - "item.cosmere.electrum_ring_metalmind": "Electrum Ring Metalmind", - "item.cosmere.electrum_spike": "Electrum Spike", - "item.cosmere.gold_boxing": "Gold Boxing", - "item.cosmere.gold_bracelet_metalmind": "Gold Bracelet Metalmind", - "item.cosmere.gold_necklace_metalmind": "Gold Necklace Metalmind", - "item.cosmere.gold_nugget": "Gold Nugget", - "item.cosmere.gold_ring_metalmind": "Gold Ring Metalmind", - "item.cosmere.gold_spike": "Gold Spike", - "item.cosmere.guide": "Ars Arcanum", - "item.cosmere.harmonium_ingot": "Harmonium Ingot", - "item.cosmere.harmonium_nugget": "Harmonium Nugget", - "item.cosmere.investiture": "Investiture", - "item.cosmere.iron_bracelet_metalmind": "Iron Bracelet Metalmind", - "item.cosmere.iron_necklace_metalmind": "Iron Necklace Metalmind", - "item.cosmere.iron_nugget": "Iron Nugget", - "item.cosmere.iron_ring_metalmind": "Iron Ring Metalmind", - "item.cosmere.iron_spike": "Iron Spike", - "item.cosmere.jar_empty": "Jar Empty", - "item.cosmere.jar_of_blood": "Jar Of Blood", - "item.cosmere.lead_ingot": "Lead Ingot", - "item.cosmere.lead_nugget": "Lead Nugget", - "item.cosmere.lerasatium_ingot": "Lerasatium Ingot", - "item.cosmere.lerasatium_nugget": "Lerasatium Nugget", - "item.cosmere.lerasium_ingot": "Lerasium Ingot", - "item.cosmere.lerasium_nugget": "Lerasium Nugget", - "item.cosmere.lerasium_spike": "Lerasium Spike", - "item.cosmere.malatium_ingot": "Malatium Ingot", - "item.cosmere.malatium_nugget": "Malatium Nugget", - "item.cosmere.master_sword": "Master Sword", - "item.cosmere.metal_file": "Metal File", - "item.cosmere.metal_vial": "Metal Vial", - "item.cosmere.mist_cloak": "Mist Cloak", - "item.cosmere.nickel_ingot": "Nickel Ingot", - "item.cosmere.nickel_nugget": "Nickel Nugget", - "item.cosmere.nicrosil_blend": "Nicrosil Blend", - "item.cosmere.nicrosil_bracelet_metalmind": "Nicrosil Bracelet Metalmind", - "item.cosmere.nicrosil_ingot": "Nicrosil Ingot", - "item.cosmere.nicrosil_necklace_metalmind": "Nicrosil Necklace Metalmind", - "item.cosmere.nicrosil_nugget": "Nicrosil Nugget", - "item.cosmere.nicrosil_ring_metalmind": "Nicrosil Ring Metalmind", - "item.cosmere.nicrosil_spike": "Nicrosil Spike", - "item.cosmere.night_blood": "Night Blood", - "item.cosmere.obsidian_dagger": "Obsidian Dagger", - "item.cosmere.pewter_blend": "Pewter Blend", - "item.cosmere.pewter_bracelet_metalmind": "Pewter Bracelet Metalmind", - "item.cosmere.pewter_ingot": "Pewter Ingot", - "item.cosmere.pewter_necklace_metalmind": "Pewter Necklace Metalmind", - "item.cosmere.pewter_nugget": "Pewter Nugget", - "item.cosmere.pewter_ring_metalmind": "Pewter Ring Metalmind", - "item.cosmere.pewter_spike": "Pewter Spike", - "item.cosmere.raw_aluminum_ore": "Raw Aluminum Ore", - "item.cosmere.raw_cadmium_ore": "Raw Cadmium Ore", - "item.cosmere.raw_chromium_ore": "Raw Chromium Ore", - "item.cosmere.raw_copper_ore": "Raw Copper Ore", - "item.cosmere.raw_lead_ore": "Raw Lead Ore", - "item.cosmere.raw_nickel_ore": "Raw Nickel Ore", - "item.cosmere.raw_silver_ore": "Raw Silver Ore", - "item.cosmere.raw_tin_ore": "Raw Tin Ore", - "item.cosmere.raw_zinc_ore": "Raw Zinc Ore", - "item.cosmere.silver_ingot": "Silver Ingot", - "item.cosmere.silver_nugget": "Silver Nugget", - "item.cosmere.steel_blend": "Steel Blend", - "item.cosmere.steel_bracelet_metalmind": "Steel Bracelet Metalmind", - "item.cosmere.steel_ingot": "Steel Ingot", - "item.cosmere.steel_necklace_metalmind": "Steel Necklace Metalmind", - "item.cosmere.steel_nugget": "Steel Nugget", - "item.cosmere.steel_ring_metalmind": "Steel Ring Metalmind", - "item.cosmere.steel_spike": "Steel Spike", - "item.cosmere.test_blade": "Test Blade", - "item.cosmere.tin_bracelet_metalmind": "Tin Bracelet Metalmind", - "item.cosmere.tin_ingot": "Tin Ingot", - "item.cosmere.tin_necklace_metalmind": "Tin Necklace Metalmind", - "item.cosmere.tin_nugget": "Tin Nugget", - "item.cosmere.tin_ring_metalmind": "Tin Ring Metalmind", - "item.cosmere.tin_spike": "Tin Spike", - "item.cosmere.zinc_bracelet_metalmind": "Zinc Bracelet Metalmind", - "item.cosmere.zinc_ingot": "Zinc Ingot", - "item.cosmere.zinc_necklace_metalmind": "Zinc Necklace Metalmind", - "item.cosmere.zinc_nugget": "Zinc Nugget", - "item.cosmere.zinc_ring_metalmind": "Zinc Ring Metalmind", - "item.cosmere.zinc_spike": "Zinc Spike", - "itemGroup.cosmere.blocks": "Cosmere Blocks", - "itemGroup.cosmere.items": "Cosmere Items", - "itemGroup.cosmere.metalminds": "Cosmere Metalminds", - "key.cosmere.allomancy.pull": "Pull", - "key.cosmere.allomancy.push": "Push", - "key.cosmere.powers.next": "Mode Next", - "key.cosmere.powers.previous": "Mode Previous", - "key.cosmere.powers.toggle": "Toggle Current Powers", - "keys.cosmere.main": "Cosmere", - "manifestation.cosmere.aluminum_gnat": "Aluminum Gnat", - "manifestation.cosmere.aluminum_gnat.description": "Users can burn ALUMINUM", - "manifestation.cosmere.archivist": "Archivist", - "manifestation.cosmere.archivist.description": "Users can tap COPPER", - "manifestation.cosmere.augur": "Augur", - "manifestation.cosmere.augur.description": "Users can burn GOLD", - "manifestation.cosmere.bloodmaker": "Bloodmaker", - "manifestation.cosmere.bloodmaker.description": "Users can tap GOLD", - "manifestation.cosmere.brute": "Brute", - "manifestation.cosmere.brute.description": "Users can tap PEWTER", - "manifestation.cosmere.coinshot": "Coinshot", - "manifestation.cosmere.coinshot.description": "Users can burn STEEL", - "manifestation.cosmere.connector": "Connector", - "manifestation.cosmere.connector.description": "Users can tap DURALUMIN", - "manifestation.cosmere.duralumin_gnat": "Duralumin Gnat", - "manifestation.cosmere.duralumin_gnat.description": "Users can burn DURALUMIN", - "manifestation.cosmere.elderling": "Elderling", - "manifestation.cosmere.elderling.description": "Users can tap ATIUM", - "manifestation.cosmere.firesoul": "Firesoul", - "manifestation.cosmere.firesoul.description": "Users can tap BRASS", - "manifestation.cosmere.gasper": "Gasper", - "manifestation.cosmere.gasper.description": "Users can tap CADMIUM", - "manifestation.cosmere.leecher": "Leecher", - "manifestation.cosmere.leecher.description": "Users can burn CHROMIUM", - "manifestation.cosmere.lurcher": "Lurcher", - "manifestation.cosmere.lurcher.description": "Users can burn IRON", - "manifestation.cosmere.nicroburst": "Nicroburst", - "manifestation.cosmere.nicroburst.description": "Users can burn NICROSIL", - "manifestation.cosmere.none": "None", - "manifestation.cosmere.none.description": "No Special Powers", - "manifestation.cosmere.oracle": "Oracle", - "manifestation.cosmere.oracle.description": "Users can burn ELECTRUM", - "manifestation.cosmere.pinnacle": "Pinnacle", - "manifestation.cosmere.pinnacle.description": "Users can tap ELECTRUM", - "manifestation.cosmere.pulser": "Pulser", - "manifestation.cosmere.pulser.description": "Users can burn CADMIUM", - "manifestation.cosmere.rioter": "Rioter", - "manifestation.cosmere.rioter.description": "Users can burn ZINC", - "manifestation.cosmere.seeker": "Seeker", - "manifestation.cosmere.seeker.description": "Users can burn BRONZE", - "manifestation.cosmere.seer": "Seer", - "manifestation.cosmere.seer.description": "Users can burn ATIUM", - "manifestation.cosmere.sentry": "Sentry", - "manifestation.cosmere.sentry.description": "Users can tap BRONZE", - "manifestation.cosmere.skimmer": "Skimmer", - "manifestation.cosmere.skimmer.description": "Users can tap IRON", - "manifestation.cosmere.slider": "Slider", - "manifestation.cosmere.slider.description": "Users can burn BENDALLOY", - "manifestation.cosmere.smoker": "Smoker", - "manifestation.cosmere.smoker.description": "Users can burn COPPER", - "manifestation.cosmere.soother": "Soother", - "manifestation.cosmere.soother.description": "Users can burn BRASS", - "manifestation.cosmere.soulbearer": "Soulbearer", - "manifestation.cosmere.soulbearer.description": "Users can tap NICROSIL", - "manifestation.cosmere.sparker": "Sparker", - "manifestation.cosmere.sparker.description": "Users can tap ZINC", - "manifestation.cosmere.spinner": "Spinner", - "manifestation.cosmere.spinner.description": "Users can tap CHROMIUM", - "manifestation.cosmere.steelrunner": "Steelrunner", - "manifestation.cosmere.steelrunner.description": "Users can tap STEEL", - "manifestation.cosmere.subsumer": "Subsumer", - "manifestation.cosmere.subsumer.description": "Users can tap BENDALLOY", - "manifestation.cosmere.thug": "Thug", - "manifestation.cosmere.thug.description": "Users can burn PEWTER", - "manifestation.cosmere.tineye": "Tineye", - "manifestation.cosmere.tineye.description": "Users can burn TIN", - "manifestation.cosmere.trueself": "Trueself", - "manifestation.cosmere.trueself.description": "Users can tap ALUMINUM", - "manifestation.cosmere.windwhisper": "Windwhisper", - "manifestation.cosmere.windwhisper.description": "Users can tap TIN", - "power.cosmere.mode.set": "Mode set to: %s", - "power.cosmere.toggle.active": "Power now active: %s", - "power.cosmere.toggle.inactive": "Power now inactive: %s", - "tooltip.cosmere.power.found": "Contained Powers:", - "tooltip.item.info.control": "\u00A77Hold \u00A78[\u00A7eControl\u00A78]", - "tooltip.item.info.shift": "\u00A77Hold \u00A78[\u00A7eShift\u00A78]", - "tooltip.item.info.shift_control": "\u00A77Hold \u00A78[\u00A7eShift\u00A78] \u00A77and \u00A78[\u00A7eControl\u00A78]" -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/block/gem_block.json b/src/main/generated/assets/cosmere/models/block/gem_block.json deleted file mode 100644 index 480958d39..000000000 --- a/src/main/generated/assets/cosmere/models/block/gem_block.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/cube_all", - "textures": { - "all": "cosmere:block/gem_block" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/block/metal_block.json b/src/main/generated/assets/cosmere/models/block/metal_block.json deleted file mode 100644 index 3702bb29d..000000000 --- a/src/main/generated/assets/cosmere/models/block/metal_block.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "cosmere:block/shapes/cube_all_tinted", - "textures": { - "all": "cosmere:block/metal_block" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/block/ore_block.json b/src/main/generated/assets/cosmere/models/block/ore_block.json deleted file mode 100644 index 7f5d5217c..000000000 --- a/src/main/generated/assets/cosmere/models/block/ore_block.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent": "cosmere:block/shapes/cube_with_tint_overlay", - "textures": { - "all": "cosmere:block/ore_block", - "overlay": "cosmere:block/ore_block_tint_overlay" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/aluminum_block.json b/src/main/generated/assets/cosmere/models/item/aluminum_block.json deleted file mode 100644 index 2e23b3488..000000000 --- a/src/main/generated/assets/cosmere/models/item/aluminum_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "cosmere:block/metal_block" -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/aluminum_bracelet_metalmind.json b/src/main/generated/assets/cosmere/models/item/aluminum_bracelet_metalmind.json deleted file mode 100644 index 06680964f..000000000 --- a/src/main/generated/assets/cosmere/models/item/aluminum_bracelet_metalmind.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_bracelet" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/aluminum_ingot.json b/src/main/generated/assets/cosmere/models/item/aluminum_ingot.json deleted file mode 100644 index 5c9389bbb..000000000 --- a/src/main/generated/assets/cosmere/models/item/aluminum_ingot.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_ingot" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/aluminum_necklace_metalmind.json b/src/main/generated/assets/cosmere/models/item/aluminum_necklace_metalmind.json deleted file mode 100644 index 04b70df77..000000000 --- a/src/main/generated/assets/cosmere/models/item/aluminum_necklace_metalmind.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_necklace" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/aluminum_nugget.json b/src/main/generated/assets/cosmere/models/item/aluminum_nugget.json deleted file mode 100644 index e2f75ac57..000000000 --- a/src/main/generated/assets/cosmere/models/item/aluminum_nugget.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_nugget" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/aluminum_ore.json b/src/main/generated/assets/cosmere/models/item/aluminum_ore.json deleted file mode 100644 index 385ef680b..000000000 --- a/src/main/generated/assets/cosmere/models/item/aluminum_ore.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "cosmere:block/ore_block" -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/aluminum_ring_metalmind.json b/src/main/generated/assets/cosmere/models/item/aluminum_ring_metalmind.json deleted file mode 100644 index 49975cba1..000000000 --- a/src/main/generated/assets/cosmere/models/item/aluminum_ring_metalmind.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_ring" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/aluminum_spike.json b/src/main/generated/assets/cosmere/models/item/aluminum_spike.json deleted file mode 100644 index 476db69e3..000000000 --- a/src/main/generated/assets/cosmere/models/item/aluminum_spike.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_spike" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/atium_block.json b/src/main/generated/assets/cosmere/models/item/atium_block.json deleted file mode 100644 index 2e23b3488..000000000 --- a/src/main/generated/assets/cosmere/models/item/atium_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "cosmere:block/metal_block" -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/atium_bracelet_metalmind.json b/src/main/generated/assets/cosmere/models/item/atium_bracelet_metalmind.json deleted file mode 100644 index 06680964f..000000000 --- a/src/main/generated/assets/cosmere/models/item/atium_bracelet_metalmind.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_bracelet" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/atium_ingot.json b/src/main/generated/assets/cosmere/models/item/atium_ingot.json deleted file mode 100644 index 5c9389bbb..000000000 --- a/src/main/generated/assets/cosmere/models/item/atium_ingot.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_ingot" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/atium_necklace_metalmind.json b/src/main/generated/assets/cosmere/models/item/atium_necklace_metalmind.json deleted file mode 100644 index 04b70df77..000000000 --- a/src/main/generated/assets/cosmere/models/item/atium_necklace_metalmind.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_necklace" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/atium_nugget.json b/src/main/generated/assets/cosmere/models/item/atium_nugget.json deleted file mode 100644 index e2f75ac57..000000000 --- a/src/main/generated/assets/cosmere/models/item/atium_nugget.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_nugget" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/atium_ring_metalmind.json b/src/main/generated/assets/cosmere/models/item/atium_ring_metalmind.json deleted file mode 100644 index 49975cba1..000000000 --- a/src/main/generated/assets/cosmere/models/item/atium_ring_metalmind.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_ring" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/atium_spike.json b/src/main/generated/assets/cosmere/models/item/atium_spike.json deleted file mode 100644 index 476db69e3..000000000 --- a/src/main/generated/assets/cosmere/models/item/atium_spike.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_spike" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/bendalloy_blend.json b/src/main/generated/assets/cosmere/models/item/bendalloy_blend.json deleted file mode 100644 index cc5a03884..000000000 --- a/src/main/generated/assets/cosmere/models/item/bendalloy_blend.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_raw" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/bendalloy_block.json b/src/main/generated/assets/cosmere/models/item/bendalloy_block.json deleted file mode 100644 index 2e23b3488..000000000 --- a/src/main/generated/assets/cosmere/models/item/bendalloy_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "cosmere:block/metal_block" -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/bendalloy_bracelet_metalmind.json b/src/main/generated/assets/cosmere/models/item/bendalloy_bracelet_metalmind.json deleted file mode 100644 index 06680964f..000000000 --- a/src/main/generated/assets/cosmere/models/item/bendalloy_bracelet_metalmind.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_bracelet" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/bendalloy_ingot.json b/src/main/generated/assets/cosmere/models/item/bendalloy_ingot.json deleted file mode 100644 index 5c9389bbb..000000000 --- a/src/main/generated/assets/cosmere/models/item/bendalloy_ingot.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_ingot" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/bendalloy_necklace_metalmind.json b/src/main/generated/assets/cosmere/models/item/bendalloy_necklace_metalmind.json deleted file mode 100644 index 04b70df77..000000000 --- a/src/main/generated/assets/cosmere/models/item/bendalloy_necklace_metalmind.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_necklace" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/bendalloy_nugget.json b/src/main/generated/assets/cosmere/models/item/bendalloy_nugget.json deleted file mode 100644 index e2f75ac57..000000000 --- a/src/main/generated/assets/cosmere/models/item/bendalloy_nugget.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_nugget" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/bendalloy_ring_metalmind.json b/src/main/generated/assets/cosmere/models/item/bendalloy_ring_metalmind.json deleted file mode 100644 index 49975cba1..000000000 --- a/src/main/generated/assets/cosmere/models/item/bendalloy_ring_metalmind.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_ring" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/bendalloy_spike.json b/src/main/generated/assets/cosmere/models/item/bendalloy_spike.json deleted file mode 100644 index 476db69e3..000000000 --- a/src/main/generated/assets/cosmere/models/item/bendalloy_spike.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_spike" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/brass_blend.json b/src/main/generated/assets/cosmere/models/item/brass_blend.json deleted file mode 100644 index cc5a03884..000000000 --- a/src/main/generated/assets/cosmere/models/item/brass_blend.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_raw" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/brass_block.json b/src/main/generated/assets/cosmere/models/item/brass_block.json deleted file mode 100644 index 2e23b3488..000000000 --- a/src/main/generated/assets/cosmere/models/item/brass_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "cosmere:block/metal_block" -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/brass_bracelet_metalmind.json b/src/main/generated/assets/cosmere/models/item/brass_bracelet_metalmind.json deleted file mode 100644 index 06680964f..000000000 --- a/src/main/generated/assets/cosmere/models/item/brass_bracelet_metalmind.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_bracelet" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/brass_ingot.json b/src/main/generated/assets/cosmere/models/item/brass_ingot.json deleted file mode 100644 index 5c9389bbb..000000000 --- a/src/main/generated/assets/cosmere/models/item/brass_ingot.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_ingot" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/brass_necklace_metalmind.json b/src/main/generated/assets/cosmere/models/item/brass_necklace_metalmind.json deleted file mode 100644 index 04b70df77..000000000 --- a/src/main/generated/assets/cosmere/models/item/brass_necklace_metalmind.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_necklace" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/brass_nugget.json b/src/main/generated/assets/cosmere/models/item/brass_nugget.json deleted file mode 100644 index e2f75ac57..000000000 --- a/src/main/generated/assets/cosmere/models/item/brass_nugget.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_nugget" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/brass_ring_metalmind.json b/src/main/generated/assets/cosmere/models/item/brass_ring_metalmind.json deleted file mode 100644 index 49975cba1..000000000 --- a/src/main/generated/assets/cosmere/models/item/brass_ring_metalmind.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_ring" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/brass_spike.json b/src/main/generated/assets/cosmere/models/item/brass_spike.json deleted file mode 100644 index 476db69e3..000000000 --- a/src/main/generated/assets/cosmere/models/item/brass_spike.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_spike" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/bronze_blend.json b/src/main/generated/assets/cosmere/models/item/bronze_blend.json deleted file mode 100644 index cc5a03884..000000000 --- a/src/main/generated/assets/cosmere/models/item/bronze_blend.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_raw" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/bronze_block.json b/src/main/generated/assets/cosmere/models/item/bronze_block.json deleted file mode 100644 index 2e23b3488..000000000 --- a/src/main/generated/assets/cosmere/models/item/bronze_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "cosmere:block/metal_block" -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/bronze_bracelet_metalmind.json b/src/main/generated/assets/cosmere/models/item/bronze_bracelet_metalmind.json deleted file mode 100644 index 06680964f..000000000 --- a/src/main/generated/assets/cosmere/models/item/bronze_bracelet_metalmind.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_bracelet" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/bronze_ingot.json b/src/main/generated/assets/cosmere/models/item/bronze_ingot.json deleted file mode 100644 index 5c9389bbb..000000000 --- a/src/main/generated/assets/cosmere/models/item/bronze_ingot.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_ingot" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/bronze_necklace_metalmind.json b/src/main/generated/assets/cosmere/models/item/bronze_necklace_metalmind.json deleted file mode 100644 index 04b70df77..000000000 --- a/src/main/generated/assets/cosmere/models/item/bronze_necklace_metalmind.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_necklace" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/bronze_nugget.json b/src/main/generated/assets/cosmere/models/item/bronze_nugget.json deleted file mode 100644 index e2f75ac57..000000000 --- a/src/main/generated/assets/cosmere/models/item/bronze_nugget.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_nugget" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/bronze_ring_metalmind.json b/src/main/generated/assets/cosmere/models/item/bronze_ring_metalmind.json deleted file mode 100644 index 49975cba1..000000000 --- a/src/main/generated/assets/cosmere/models/item/bronze_ring_metalmind.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_ring" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/bronze_spike.json b/src/main/generated/assets/cosmere/models/item/bronze_spike.json deleted file mode 100644 index 476db69e3..000000000 --- a/src/main/generated/assets/cosmere/models/item/bronze_spike.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_spike" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/cadmium_block.json b/src/main/generated/assets/cosmere/models/item/cadmium_block.json deleted file mode 100644 index 2e23b3488..000000000 --- a/src/main/generated/assets/cosmere/models/item/cadmium_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "cosmere:block/metal_block" -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/cadmium_bracelet_metalmind.json b/src/main/generated/assets/cosmere/models/item/cadmium_bracelet_metalmind.json deleted file mode 100644 index 06680964f..000000000 --- a/src/main/generated/assets/cosmere/models/item/cadmium_bracelet_metalmind.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_bracelet" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/cadmium_ingot.json b/src/main/generated/assets/cosmere/models/item/cadmium_ingot.json deleted file mode 100644 index 5c9389bbb..000000000 --- a/src/main/generated/assets/cosmere/models/item/cadmium_ingot.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_ingot" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/cadmium_necklace_metalmind.json b/src/main/generated/assets/cosmere/models/item/cadmium_necklace_metalmind.json deleted file mode 100644 index 04b70df77..000000000 --- a/src/main/generated/assets/cosmere/models/item/cadmium_necklace_metalmind.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_necklace" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/cadmium_nugget.json b/src/main/generated/assets/cosmere/models/item/cadmium_nugget.json deleted file mode 100644 index e2f75ac57..000000000 --- a/src/main/generated/assets/cosmere/models/item/cadmium_nugget.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_nugget" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/cadmium_ore.json b/src/main/generated/assets/cosmere/models/item/cadmium_ore.json deleted file mode 100644 index 385ef680b..000000000 --- a/src/main/generated/assets/cosmere/models/item/cadmium_ore.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "cosmere:block/ore_block" -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/cadmium_ring_metalmind.json b/src/main/generated/assets/cosmere/models/item/cadmium_ring_metalmind.json deleted file mode 100644 index 49975cba1..000000000 --- a/src/main/generated/assets/cosmere/models/item/cadmium_ring_metalmind.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_ring" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/cadmium_spike.json b/src/main/generated/assets/cosmere/models/item/cadmium_spike.json deleted file mode 100644 index 476db69e3..000000000 --- a/src/main/generated/assets/cosmere/models/item/cadmium_spike.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_spike" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/chromium_block.json b/src/main/generated/assets/cosmere/models/item/chromium_block.json deleted file mode 100644 index 2e23b3488..000000000 --- a/src/main/generated/assets/cosmere/models/item/chromium_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "cosmere:block/metal_block" -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/chromium_bracelet_metalmind.json b/src/main/generated/assets/cosmere/models/item/chromium_bracelet_metalmind.json deleted file mode 100644 index 06680964f..000000000 --- a/src/main/generated/assets/cosmere/models/item/chromium_bracelet_metalmind.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_bracelet" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/chromium_ingot.json b/src/main/generated/assets/cosmere/models/item/chromium_ingot.json deleted file mode 100644 index 5c9389bbb..000000000 --- a/src/main/generated/assets/cosmere/models/item/chromium_ingot.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_ingot" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/chromium_necklace_metalmind.json b/src/main/generated/assets/cosmere/models/item/chromium_necklace_metalmind.json deleted file mode 100644 index 04b70df77..000000000 --- a/src/main/generated/assets/cosmere/models/item/chromium_necklace_metalmind.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_necklace" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/chromium_nugget.json b/src/main/generated/assets/cosmere/models/item/chromium_nugget.json deleted file mode 100644 index e2f75ac57..000000000 --- a/src/main/generated/assets/cosmere/models/item/chromium_nugget.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_nugget" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/chromium_ore.json b/src/main/generated/assets/cosmere/models/item/chromium_ore.json deleted file mode 100644 index 385ef680b..000000000 --- a/src/main/generated/assets/cosmere/models/item/chromium_ore.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "cosmere:block/ore_block" -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/chromium_ring_metalmind.json b/src/main/generated/assets/cosmere/models/item/chromium_ring_metalmind.json deleted file mode 100644 index 49975cba1..000000000 --- a/src/main/generated/assets/cosmere/models/item/chromium_ring_metalmind.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_ring" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/chromium_spike.json b/src/main/generated/assets/cosmere/models/item/chromium_spike.json deleted file mode 100644 index 476db69e3..000000000 --- a/src/main/generated/assets/cosmere/models/item/chromium_spike.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_spike" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/copper_block.json b/src/main/generated/assets/cosmere/models/item/copper_block.json deleted file mode 100644 index 2e23b3488..000000000 --- a/src/main/generated/assets/cosmere/models/item/copper_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "cosmere:block/metal_block" -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/copper_bracelet_metalmind.json b/src/main/generated/assets/cosmere/models/item/copper_bracelet_metalmind.json deleted file mode 100644 index 06680964f..000000000 --- a/src/main/generated/assets/cosmere/models/item/copper_bracelet_metalmind.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_bracelet" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/copper_clip.json b/src/main/generated/assets/cosmere/models/item/copper_clip.json deleted file mode 100644 index e2f75ac57..000000000 --- a/src/main/generated/assets/cosmere/models/item/copper_clip.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_nugget" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/copper_ingot.json b/src/main/generated/assets/cosmere/models/item/copper_ingot.json deleted file mode 100644 index 5c9389bbb..000000000 --- a/src/main/generated/assets/cosmere/models/item/copper_ingot.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_ingot" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/copper_necklace_metalmind.json b/src/main/generated/assets/cosmere/models/item/copper_necklace_metalmind.json deleted file mode 100644 index 04b70df77..000000000 --- a/src/main/generated/assets/cosmere/models/item/copper_necklace_metalmind.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_necklace" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/copper_nugget.json b/src/main/generated/assets/cosmere/models/item/copper_nugget.json deleted file mode 100644 index e2f75ac57..000000000 --- a/src/main/generated/assets/cosmere/models/item/copper_nugget.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_nugget" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/copper_ore.json b/src/main/generated/assets/cosmere/models/item/copper_ore.json deleted file mode 100644 index 385ef680b..000000000 --- a/src/main/generated/assets/cosmere/models/item/copper_ore.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "cosmere:block/ore_block" -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/copper_ring_metalmind.json b/src/main/generated/assets/cosmere/models/item/copper_ring_metalmind.json deleted file mode 100644 index 49975cba1..000000000 --- a/src/main/generated/assets/cosmere/models/item/copper_ring_metalmind.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_ring" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/copper_spike.json b/src/main/generated/assets/cosmere/models/item/copper_spike.json deleted file mode 100644 index 476db69e3..000000000 --- a/src/main/generated/assets/cosmere/models/item/copper_spike.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_spike" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/duralumin_blend.json b/src/main/generated/assets/cosmere/models/item/duralumin_blend.json deleted file mode 100644 index cc5a03884..000000000 --- a/src/main/generated/assets/cosmere/models/item/duralumin_blend.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_raw" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/duralumin_block.json b/src/main/generated/assets/cosmere/models/item/duralumin_block.json deleted file mode 100644 index 2e23b3488..000000000 --- a/src/main/generated/assets/cosmere/models/item/duralumin_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "cosmere:block/metal_block" -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/duralumin_bracelet_metalmind.json b/src/main/generated/assets/cosmere/models/item/duralumin_bracelet_metalmind.json deleted file mode 100644 index 06680964f..000000000 --- a/src/main/generated/assets/cosmere/models/item/duralumin_bracelet_metalmind.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_bracelet" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/duralumin_ingot.json b/src/main/generated/assets/cosmere/models/item/duralumin_ingot.json deleted file mode 100644 index 5c9389bbb..000000000 --- a/src/main/generated/assets/cosmere/models/item/duralumin_ingot.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_ingot" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/duralumin_necklace_metalmind.json b/src/main/generated/assets/cosmere/models/item/duralumin_necklace_metalmind.json deleted file mode 100644 index 04b70df77..000000000 --- a/src/main/generated/assets/cosmere/models/item/duralumin_necklace_metalmind.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_necklace" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/duralumin_nugget.json b/src/main/generated/assets/cosmere/models/item/duralumin_nugget.json deleted file mode 100644 index e2f75ac57..000000000 --- a/src/main/generated/assets/cosmere/models/item/duralumin_nugget.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_nugget" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/duralumin_ring_metalmind.json b/src/main/generated/assets/cosmere/models/item/duralumin_ring_metalmind.json deleted file mode 100644 index 49975cba1..000000000 --- a/src/main/generated/assets/cosmere/models/item/duralumin_ring_metalmind.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_ring" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/duralumin_spike.json b/src/main/generated/assets/cosmere/models/item/duralumin_spike.json deleted file mode 100644 index 476db69e3..000000000 --- a/src/main/generated/assets/cosmere/models/item/duralumin_spike.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_spike" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/electrum_blend.json b/src/main/generated/assets/cosmere/models/item/electrum_blend.json deleted file mode 100644 index cc5a03884..000000000 --- a/src/main/generated/assets/cosmere/models/item/electrum_blend.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_raw" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/electrum_block.json b/src/main/generated/assets/cosmere/models/item/electrum_block.json deleted file mode 100644 index 2e23b3488..000000000 --- a/src/main/generated/assets/cosmere/models/item/electrum_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "cosmere:block/metal_block" -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/electrum_bracelet_metalmind.json b/src/main/generated/assets/cosmere/models/item/electrum_bracelet_metalmind.json deleted file mode 100644 index 06680964f..000000000 --- a/src/main/generated/assets/cosmere/models/item/electrum_bracelet_metalmind.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_bracelet" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/electrum_ingot.json b/src/main/generated/assets/cosmere/models/item/electrum_ingot.json deleted file mode 100644 index 5c9389bbb..000000000 --- a/src/main/generated/assets/cosmere/models/item/electrum_ingot.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_ingot" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/electrum_necklace_metalmind.json b/src/main/generated/assets/cosmere/models/item/electrum_necklace_metalmind.json deleted file mode 100644 index 04b70df77..000000000 --- a/src/main/generated/assets/cosmere/models/item/electrum_necklace_metalmind.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_necklace" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/electrum_nugget.json b/src/main/generated/assets/cosmere/models/item/electrum_nugget.json deleted file mode 100644 index e2f75ac57..000000000 --- a/src/main/generated/assets/cosmere/models/item/electrum_nugget.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_nugget" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/electrum_ring_metalmind.json b/src/main/generated/assets/cosmere/models/item/electrum_ring_metalmind.json deleted file mode 100644 index 49975cba1..000000000 --- a/src/main/generated/assets/cosmere/models/item/electrum_ring_metalmind.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_ring" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/electrum_spike.json b/src/main/generated/assets/cosmere/models/item/electrum_spike.json deleted file mode 100644 index 476db69e3..000000000 --- a/src/main/generated/assets/cosmere/models/item/electrum_spike.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_spike" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/gem_block.json b/src/main/generated/assets/cosmere/models/item/gem_block.json deleted file mode 100644 index c38cc01a7..000000000 --- a/src/main/generated/assets/cosmere/models/item/gem_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "cosmere:block/gem_block" -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/gold_boxing.json b/src/main/generated/assets/cosmere/models/item/gold_boxing.json deleted file mode 100644 index e2f75ac57..000000000 --- a/src/main/generated/assets/cosmere/models/item/gold_boxing.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_nugget" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/gold_bracelet_metalmind.json b/src/main/generated/assets/cosmere/models/item/gold_bracelet_metalmind.json deleted file mode 100644 index 06680964f..000000000 --- a/src/main/generated/assets/cosmere/models/item/gold_bracelet_metalmind.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_bracelet" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/gold_necklace_metalmind.json b/src/main/generated/assets/cosmere/models/item/gold_necklace_metalmind.json deleted file mode 100644 index 04b70df77..000000000 --- a/src/main/generated/assets/cosmere/models/item/gold_necklace_metalmind.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_necklace" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/gold_nugget.json b/src/main/generated/assets/cosmere/models/item/gold_nugget.json deleted file mode 100644 index e2f75ac57..000000000 --- a/src/main/generated/assets/cosmere/models/item/gold_nugget.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_nugget" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/gold_ring_metalmind.json b/src/main/generated/assets/cosmere/models/item/gold_ring_metalmind.json deleted file mode 100644 index 49975cba1..000000000 --- a/src/main/generated/assets/cosmere/models/item/gold_ring_metalmind.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_ring" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/gold_spike.json b/src/main/generated/assets/cosmere/models/item/gold_spike.json deleted file mode 100644 index 476db69e3..000000000 --- a/src/main/generated/assets/cosmere/models/item/gold_spike.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_spike" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/harmonium_block.json b/src/main/generated/assets/cosmere/models/item/harmonium_block.json deleted file mode 100644 index 2e23b3488..000000000 --- a/src/main/generated/assets/cosmere/models/item/harmonium_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "cosmere:block/metal_block" -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/harmonium_ingot.json b/src/main/generated/assets/cosmere/models/item/harmonium_ingot.json deleted file mode 100644 index 5c9389bbb..000000000 --- a/src/main/generated/assets/cosmere/models/item/harmonium_ingot.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_ingot" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/harmonium_nugget.json b/src/main/generated/assets/cosmere/models/item/harmonium_nugget.json deleted file mode 100644 index e2f75ac57..000000000 --- a/src/main/generated/assets/cosmere/models/item/harmonium_nugget.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_nugget" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/investiture.json b/src/main/generated/assets/cosmere/models/item/investiture.json deleted file mode 100644 index 1a16d76c7..000000000 --- a/src/main/generated/assets/cosmere/models/item/investiture.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/investiture" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/iron_bracelet_metalmind.json b/src/main/generated/assets/cosmere/models/item/iron_bracelet_metalmind.json deleted file mode 100644 index 06680964f..000000000 --- a/src/main/generated/assets/cosmere/models/item/iron_bracelet_metalmind.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_bracelet" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/iron_necklace_metalmind.json b/src/main/generated/assets/cosmere/models/item/iron_necklace_metalmind.json deleted file mode 100644 index 04b70df77..000000000 --- a/src/main/generated/assets/cosmere/models/item/iron_necklace_metalmind.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_necklace" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/iron_nugget.json b/src/main/generated/assets/cosmere/models/item/iron_nugget.json deleted file mode 100644 index e2f75ac57..000000000 --- a/src/main/generated/assets/cosmere/models/item/iron_nugget.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_nugget" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/iron_ring_metalmind.json b/src/main/generated/assets/cosmere/models/item/iron_ring_metalmind.json deleted file mode 100644 index 49975cba1..000000000 --- a/src/main/generated/assets/cosmere/models/item/iron_ring_metalmind.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_ring" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/iron_spike.json b/src/main/generated/assets/cosmere/models/item/iron_spike.json deleted file mode 100644 index 476db69e3..000000000 --- a/src/main/generated/assets/cosmere/models/item/iron_spike.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_spike" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/jar_empty.json b/src/main/generated/assets/cosmere/models/item/jar_empty.json deleted file mode 100644 index 87d078659..000000000 --- a/src/main/generated/assets/cosmere/models/item/jar_empty.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/jar_empty" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/jar_of_blood.json b/src/main/generated/assets/cosmere/models/item/jar_of_blood.json deleted file mode 100644 index d3bf0f379..000000000 --- a/src/main/generated/assets/cosmere/models/item/jar_of_blood.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/jar_of_blood" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/lead_block.json b/src/main/generated/assets/cosmere/models/item/lead_block.json deleted file mode 100644 index 2e23b3488..000000000 --- a/src/main/generated/assets/cosmere/models/item/lead_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "cosmere:block/metal_block" -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/lead_ingot.json b/src/main/generated/assets/cosmere/models/item/lead_ingot.json deleted file mode 100644 index 5c9389bbb..000000000 --- a/src/main/generated/assets/cosmere/models/item/lead_ingot.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_ingot" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/lead_nugget.json b/src/main/generated/assets/cosmere/models/item/lead_nugget.json deleted file mode 100644 index e2f75ac57..000000000 --- a/src/main/generated/assets/cosmere/models/item/lead_nugget.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_nugget" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/lead_ore.json b/src/main/generated/assets/cosmere/models/item/lead_ore.json deleted file mode 100644 index 385ef680b..000000000 --- a/src/main/generated/assets/cosmere/models/item/lead_ore.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "cosmere:block/ore_block" -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/lerasatium_block.json b/src/main/generated/assets/cosmere/models/item/lerasatium_block.json deleted file mode 100644 index 2e23b3488..000000000 --- a/src/main/generated/assets/cosmere/models/item/lerasatium_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "cosmere:block/metal_block" -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/lerasatium_ingot.json b/src/main/generated/assets/cosmere/models/item/lerasatium_ingot.json deleted file mode 100644 index 5c9389bbb..000000000 --- a/src/main/generated/assets/cosmere/models/item/lerasatium_ingot.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_ingot" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/lerasatium_nugget.json b/src/main/generated/assets/cosmere/models/item/lerasatium_nugget.json deleted file mode 100644 index e2f75ac57..000000000 --- a/src/main/generated/assets/cosmere/models/item/lerasatium_nugget.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_nugget" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/lerasium_block.json b/src/main/generated/assets/cosmere/models/item/lerasium_block.json deleted file mode 100644 index 2e23b3488..000000000 --- a/src/main/generated/assets/cosmere/models/item/lerasium_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "cosmere:block/metal_block" -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/lerasium_ingot.json b/src/main/generated/assets/cosmere/models/item/lerasium_ingot.json deleted file mode 100644 index 5c9389bbb..000000000 --- a/src/main/generated/assets/cosmere/models/item/lerasium_ingot.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_ingot" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/lerasium_nugget.json b/src/main/generated/assets/cosmere/models/item/lerasium_nugget.json deleted file mode 100644 index e2f75ac57..000000000 --- a/src/main/generated/assets/cosmere/models/item/lerasium_nugget.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_nugget" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/lerasium_spike.json b/src/main/generated/assets/cosmere/models/item/lerasium_spike.json deleted file mode 100644 index 476db69e3..000000000 --- a/src/main/generated/assets/cosmere/models/item/lerasium_spike.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_spike" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/malatium_block.json b/src/main/generated/assets/cosmere/models/item/malatium_block.json deleted file mode 100644 index 2e23b3488..000000000 --- a/src/main/generated/assets/cosmere/models/item/malatium_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "cosmere:block/metal_block" -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/malatium_ingot.json b/src/main/generated/assets/cosmere/models/item/malatium_ingot.json deleted file mode 100644 index 5c9389bbb..000000000 --- a/src/main/generated/assets/cosmere/models/item/malatium_ingot.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_ingot" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/malatium_nugget.json b/src/main/generated/assets/cosmere/models/item/malatium_nugget.json deleted file mode 100644 index e2f75ac57..000000000 --- a/src/main/generated/assets/cosmere/models/item/malatium_nugget.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_nugget" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/metal_file.json b/src/main/generated/assets/cosmere/models/item/metal_file.json deleted file mode 100644 index 5d4e67dd1..000000000 --- a/src/main/generated/assets/cosmere/models/item/metal_file.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_file" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/metal_vial.json b/src/main/generated/assets/cosmere/models/item/metal_vial.json deleted file mode 100644 index 75d563088..000000000 --- a/src/main/generated/assets/cosmere/models/item/metal_vial.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_vial" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/mist_cloak.json b/src/main/generated/assets/cosmere/models/item/mist_cloak.json deleted file mode 100644 index d6af2e28f..000000000 --- a/src/main/generated/assets/cosmere/models/item/mist_cloak.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/mist_cloak" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/nickel_block.json b/src/main/generated/assets/cosmere/models/item/nickel_block.json deleted file mode 100644 index 2e23b3488..000000000 --- a/src/main/generated/assets/cosmere/models/item/nickel_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "cosmere:block/metal_block" -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/nickel_ingot.json b/src/main/generated/assets/cosmere/models/item/nickel_ingot.json deleted file mode 100644 index 5c9389bbb..000000000 --- a/src/main/generated/assets/cosmere/models/item/nickel_ingot.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_ingot" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/nickel_nugget.json b/src/main/generated/assets/cosmere/models/item/nickel_nugget.json deleted file mode 100644 index e2f75ac57..000000000 --- a/src/main/generated/assets/cosmere/models/item/nickel_nugget.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_nugget" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/nickel_ore.json b/src/main/generated/assets/cosmere/models/item/nickel_ore.json deleted file mode 100644 index 385ef680b..000000000 --- a/src/main/generated/assets/cosmere/models/item/nickel_ore.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "cosmere:block/ore_block" -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/nicrosil_blend.json b/src/main/generated/assets/cosmere/models/item/nicrosil_blend.json deleted file mode 100644 index cc5a03884..000000000 --- a/src/main/generated/assets/cosmere/models/item/nicrosil_blend.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_raw" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/nicrosil_block.json b/src/main/generated/assets/cosmere/models/item/nicrosil_block.json deleted file mode 100644 index 2e23b3488..000000000 --- a/src/main/generated/assets/cosmere/models/item/nicrosil_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "cosmere:block/metal_block" -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/nicrosil_bracelet_metalmind.json b/src/main/generated/assets/cosmere/models/item/nicrosil_bracelet_metalmind.json deleted file mode 100644 index 06680964f..000000000 --- a/src/main/generated/assets/cosmere/models/item/nicrosil_bracelet_metalmind.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_bracelet" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/nicrosil_ingot.json b/src/main/generated/assets/cosmere/models/item/nicrosil_ingot.json deleted file mode 100644 index 5c9389bbb..000000000 --- a/src/main/generated/assets/cosmere/models/item/nicrosil_ingot.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_ingot" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/nicrosil_necklace_metalmind.json b/src/main/generated/assets/cosmere/models/item/nicrosil_necklace_metalmind.json deleted file mode 100644 index 04b70df77..000000000 --- a/src/main/generated/assets/cosmere/models/item/nicrosil_necklace_metalmind.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_necklace" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/nicrosil_nugget.json b/src/main/generated/assets/cosmere/models/item/nicrosil_nugget.json deleted file mode 100644 index e2f75ac57..000000000 --- a/src/main/generated/assets/cosmere/models/item/nicrosil_nugget.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_nugget" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/nicrosil_ring_metalmind.json b/src/main/generated/assets/cosmere/models/item/nicrosil_ring_metalmind.json deleted file mode 100644 index 49975cba1..000000000 --- a/src/main/generated/assets/cosmere/models/item/nicrosil_ring_metalmind.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_ring" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/nicrosil_spike.json b/src/main/generated/assets/cosmere/models/item/nicrosil_spike.json deleted file mode 100644 index 476db69e3..000000000 --- a/src/main/generated/assets/cosmere/models/item/nicrosil_spike.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_spike" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/obsidian_dagger.json b/src/main/generated/assets/cosmere/models/item/obsidian_dagger.json deleted file mode 100644 index 8a466b4be..000000000 --- a/src/main/generated/assets/cosmere/models/item/obsidian_dagger.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/obsidian_dagger" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/pewter_blend.json b/src/main/generated/assets/cosmere/models/item/pewter_blend.json deleted file mode 100644 index cc5a03884..000000000 --- a/src/main/generated/assets/cosmere/models/item/pewter_blend.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_raw" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/pewter_block.json b/src/main/generated/assets/cosmere/models/item/pewter_block.json deleted file mode 100644 index 2e23b3488..000000000 --- a/src/main/generated/assets/cosmere/models/item/pewter_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "cosmere:block/metal_block" -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/pewter_bracelet_metalmind.json b/src/main/generated/assets/cosmere/models/item/pewter_bracelet_metalmind.json deleted file mode 100644 index 06680964f..000000000 --- a/src/main/generated/assets/cosmere/models/item/pewter_bracelet_metalmind.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_bracelet" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/pewter_ingot.json b/src/main/generated/assets/cosmere/models/item/pewter_ingot.json deleted file mode 100644 index 5c9389bbb..000000000 --- a/src/main/generated/assets/cosmere/models/item/pewter_ingot.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_ingot" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/pewter_necklace_metalmind.json b/src/main/generated/assets/cosmere/models/item/pewter_necklace_metalmind.json deleted file mode 100644 index 04b70df77..000000000 --- a/src/main/generated/assets/cosmere/models/item/pewter_necklace_metalmind.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_necklace" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/pewter_nugget.json b/src/main/generated/assets/cosmere/models/item/pewter_nugget.json deleted file mode 100644 index e2f75ac57..000000000 --- a/src/main/generated/assets/cosmere/models/item/pewter_nugget.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_nugget" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/pewter_ring_metalmind.json b/src/main/generated/assets/cosmere/models/item/pewter_ring_metalmind.json deleted file mode 100644 index 49975cba1..000000000 --- a/src/main/generated/assets/cosmere/models/item/pewter_ring_metalmind.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_ring" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/pewter_spike.json b/src/main/generated/assets/cosmere/models/item/pewter_spike.json deleted file mode 100644 index 476db69e3..000000000 --- a/src/main/generated/assets/cosmere/models/item/pewter_spike.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_spike" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/raw_aluminum_ore.json b/src/main/generated/assets/cosmere/models/item/raw_aluminum_ore.json deleted file mode 100644 index cc5a03884..000000000 --- a/src/main/generated/assets/cosmere/models/item/raw_aluminum_ore.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_raw" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/raw_cadmium_ore.json b/src/main/generated/assets/cosmere/models/item/raw_cadmium_ore.json deleted file mode 100644 index cc5a03884..000000000 --- a/src/main/generated/assets/cosmere/models/item/raw_cadmium_ore.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_raw" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/raw_chromium_ore.json b/src/main/generated/assets/cosmere/models/item/raw_chromium_ore.json deleted file mode 100644 index cc5a03884..000000000 --- a/src/main/generated/assets/cosmere/models/item/raw_chromium_ore.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_raw" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/raw_copper_ore.json b/src/main/generated/assets/cosmere/models/item/raw_copper_ore.json deleted file mode 100644 index cc5a03884..000000000 --- a/src/main/generated/assets/cosmere/models/item/raw_copper_ore.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_raw" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/raw_lead_ore.json b/src/main/generated/assets/cosmere/models/item/raw_lead_ore.json deleted file mode 100644 index cc5a03884..000000000 --- a/src/main/generated/assets/cosmere/models/item/raw_lead_ore.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_raw" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/raw_nickel_ore.json b/src/main/generated/assets/cosmere/models/item/raw_nickel_ore.json deleted file mode 100644 index cc5a03884..000000000 --- a/src/main/generated/assets/cosmere/models/item/raw_nickel_ore.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_raw" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/raw_silver_ore.json b/src/main/generated/assets/cosmere/models/item/raw_silver_ore.json deleted file mode 100644 index cc5a03884..000000000 --- a/src/main/generated/assets/cosmere/models/item/raw_silver_ore.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_raw" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/raw_tin_ore.json b/src/main/generated/assets/cosmere/models/item/raw_tin_ore.json deleted file mode 100644 index cc5a03884..000000000 --- a/src/main/generated/assets/cosmere/models/item/raw_tin_ore.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_raw" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/raw_zinc_ore.json b/src/main/generated/assets/cosmere/models/item/raw_zinc_ore.json deleted file mode 100644 index cc5a03884..000000000 --- a/src/main/generated/assets/cosmere/models/item/raw_zinc_ore.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_raw" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/silver_block.json b/src/main/generated/assets/cosmere/models/item/silver_block.json deleted file mode 100644 index 2e23b3488..000000000 --- a/src/main/generated/assets/cosmere/models/item/silver_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "cosmere:block/metal_block" -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/silver_ingot.json b/src/main/generated/assets/cosmere/models/item/silver_ingot.json deleted file mode 100644 index 5c9389bbb..000000000 --- a/src/main/generated/assets/cosmere/models/item/silver_ingot.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_ingot" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/silver_nugget.json b/src/main/generated/assets/cosmere/models/item/silver_nugget.json deleted file mode 100644 index e2f75ac57..000000000 --- a/src/main/generated/assets/cosmere/models/item/silver_nugget.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_nugget" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/silver_ore.json b/src/main/generated/assets/cosmere/models/item/silver_ore.json deleted file mode 100644 index 385ef680b..000000000 --- a/src/main/generated/assets/cosmere/models/item/silver_ore.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "cosmere:block/ore_block" -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/steel_blend.json b/src/main/generated/assets/cosmere/models/item/steel_blend.json deleted file mode 100644 index cc5a03884..000000000 --- a/src/main/generated/assets/cosmere/models/item/steel_blend.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_raw" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/steel_block.json b/src/main/generated/assets/cosmere/models/item/steel_block.json deleted file mode 100644 index 2e23b3488..000000000 --- a/src/main/generated/assets/cosmere/models/item/steel_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "cosmere:block/metal_block" -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/steel_bracelet_metalmind.json b/src/main/generated/assets/cosmere/models/item/steel_bracelet_metalmind.json deleted file mode 100644 index 06680964f..000000000 --- a/src/main/generated/assets/cosmere/models/item/steel_bracelet_metalmind.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_bracelet" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/steel_ingot.json b/src/main/generated/assets/cosmere/models/item/steel_ingot.json deleted file mode 100644 index 5c9389bbb..000000000 --- a/src/main/generated/assets/cosmere/models/item/steel_ingot.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_ingot" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/steel_necklace_metalmind.json b/src/main/generated/assets/cosmere/models/item/steel_necklace_metalmind.json deleted file mode 100644 index 04b70df77..000000000 --- a/src/main/generated/assets/cosmere/models/item/steel_necklace_metalmind.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_necklace" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/steel_nugget.json b/src/main/generated/assets/cosmere/models/item/steel_nugget.json deleted file mode 100644 index e2f75ac57..000000000 --- a/src/main/generated/assets/cosmere/models/item/steel_nugget.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_nugget" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/steel_ring_metalmind.json b/src/main/generated/assets/cosmere/models/item/steel_ring_metalmind.json deleted file mode 100644 index 49975cba1..000000000 --- a/src/main/generated/assets/cosmere/models/item/steel_ring_metalmind.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_ring" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/steel_spike.json b/src/main/generated/assets/cosmere/models/item/steel_spike.json deleted file mode 100644 index 476db69e3..000000000 --- a/src/main/generated/assets/cosmere/models/item/steel_spike.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_spike" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/tin_block.json b/src/main/generated/assets/cosmere/models/item/tin_block.json deleted file mode 100644 index 2e23b3488..000000000 --- a/src/main/generated/assets/cosmere/models/item/tin_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "cosmere:block/metal_block" -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/tin_bracelet_metalmind.json b/src/main/generated/assets/cosmere/models/item/tin_bracelet_metalmind.json deleted file mode 100644 index 06680964f..000000000 --- a/src/main/generated/assets/cosmere/models/item/tin_bracelet_metalmind.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_bracelet" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/tin_ingot.json b/src/main/generated/assets/cosmere/models/item/tin_ingot.json deleted file mode 100644 index 5c9389bbb..000000000 --- a/src/main/generated/assets/cosmere/models/item/tin_ingot.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_ingot" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/tin_necklace_metalmind.json b/src/main/generated/assets/cosmere/models/item/tin_necklace_metalmind.json deleted file mode 100644 index 04b70df77..000000000 --- a/src/main/generated/assets/cosmere/models/item/tin_necklace_metalmind.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_necklace" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/tin_nugget.json b/src/main/generated/assets/cosmere/models/item/tin_nugget.json deleted file mode 100644 index e2f75ac57..000000000 --- a/src/main/generated/assets/cosmere/models/item/tin_nugget.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_nugget" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/tin_ore.json b/src/main/generated/assets/cosmere/models/item/tin_ore.json deleted file mode 100644 index 385ef680b..000000000 --- a/src/main/generated/assets/cosmere/models/item/tin_ore.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "cosmere:block/ore_block" -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/tin_ring_metalmind.json b/src/main/generated/assets/cosmere/models/item/tin_ring_metalmind.json deleted file mode 100644 index 49975cba1..000000000 --- a/src/main/generated/assets/cosmere/models/item/tin_ring_metalmind.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_ring" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/tin_spike.json b/src/main/generated/assets/cosmere/models/item/tin_spike.json deleted file mode 100644 index 476db69e3..000000000 --- a/src/main/generated/assets/cosmere/models/item/tin_spike.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_spike" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/zinc_block.json b/src/main/generated/assets/cosmere/models/item/zinc_block.json deleted file mode 100644 index 2e23b3488..000000000 --- a/src/main/generated/assets/cosmere/models/item/zinc_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "cosmere:block/metal_block" -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/zinc_bracelet_metalmind.json b/src/main/generated/assets/cosmere/models/item/zinc_bracelet_metalmind.json deleted file mode 100644 index 06680964f..000000000 --- a/src/main/generated/assets/cosmere/models/item/zinc_bracelet_metalmind.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_bracelet" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/zinc_ingot.json b/src/main/generated/assets/cosmere/models/item/zinc_ingot.json deleted file mode 100644 index 5c9389bbb..000000000 --- a/src/main/generated/assets/cosmere/models/item/zinc_ingot.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_ingot" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/zinc_necklace_metalmind.json b/src/main/generated/assets/cosmere/models/item/zinc_necklace_metalmind.json deleted file mode 100644 index 04b70df77..000000000 --- a/src/main/generated/assets/cosmere/models/item/zinc_necklace_metalmind.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_necklace" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/zinc_nugget.json b/src/main/generated/assets/cosmere/models/item/zinc_nugget.json deleted file mode 100644 index e2f75ac57..000000000 --- a/src/main/generated/assets/cosmere/models/item/zinc_nugget.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_nugget" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/zinc_ore.json b/src/main/generated/assets/cosmere/models/item/zinc_ore.json deleted file mode 100644 index 385ef680b..000000000 --- a/src/main/generated/assets/cosmere/models/item/zinc_ore.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "cosmere:block/ore_block" -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/zinc_ring_metalmind.json b/src/main/generated/assets/cosmere/models/item/zinc_ring_metalmind.json deleted file mode 100644 index 49975cba1..000000000 --- a/src/main/generated/assets/cosmere/models/item/zinc_ring_metalmind.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_ring" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/cosmere/models/item/zinc_spike.json b/src/main/generated/assets/cosmere/models/item/zinc_spike.json deleted file mode 100644 index 476db69e3..000000000 --- a/src/main/generated/assets/cosmere/models/item/zinc_spike.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "cosmere:item/metal_spike" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.blocks/aluminum_block.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.blocks/aluminum_block.json deleted file mode 100644 index b53a2d08c..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.blocks/aluminum_block.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:aluminum_block" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/aluminum" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:aluminum_block" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.blocks/atium_block.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.blocks/atium_block.json deleted file mode 100644 index da05d347c..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.blocks/atium_block.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:atium_block" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/atium" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:atium_block" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.blocks/bendalloy_block.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.blocks/bendalloy_block.json deleted file mode 100644 index f30baac6a..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.blocks/bendalloy_block.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:bendalloy_block" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/bendalloy" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:bendalloy_block" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.blocks/brass_block.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.blocks/brass_block.json deleted file mode 100644 index 13b83b63d..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.blocks/brass_block.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:brass_block" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/brass" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:brass_block" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.blocks/bronze_block.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.blocks/bronze_block.json deleted file mode 100644 index 0f8384f38..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.blocks/bronze_block.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:bronze_block" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/bronze" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:bronze_block" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.blocks/cadmium_block.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.blocks/cadmium_block.json deleted file mode 100644 index c348249c9..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.blocks/cadmium_block.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:cadmium_block" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/cadmium" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:cadmium_block" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.blocks/chromium_block.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.blocks/chromium_block.json deleted file mode 100644 index 07a2541f6..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.blocks/chromium_block.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:chromium_block" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/chromium" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:chromium_block" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.blocks/copper_block.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.blocks/copper_block.json deleted file mode 100644 index 5bb75d627..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.blocks/copper_block.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:copper_block" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/copper" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:copper_block" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.blocks/duralumin_block.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.blocks/duralumin_block.json deleted file mode 100644 index da5f421c2..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.blocks/duralumin_block.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:duralumin_block" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/duralumin" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:duralumin_block" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.blocks/electrum_block.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.blocks/electrum_block.json deleted file mode 100644 index b2f4b8807..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.blocks/electrum_block.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:electrum_block" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/electrum" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:electrum_block" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.blocks/harmonium_block.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.blocks/harmonium_block.json deleted file mode 100644 index daec986af..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.blocks/harmonium_block.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:harmonium_block" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/harmonium" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:harmonium_block" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.blocks/lead_block.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.blocks/lead_block.json deleted file mode 100644 index 7721f3dd5..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.blocks/lead_block.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:lead_block" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/lead" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:lead_block" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.blocks/lerasatium_block.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.blocks/lerasatium_block.json deleted file mode 100644 index 1d16f7a13..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.blocks/lerasatium_block.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:lerasatium_block" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/lerasatium" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:lerasatium_block" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.blocks/lerasium_block.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.blocks/lerasium_block.json deleted file mode 100644 index a46989abf..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.blocks/lerasium_block.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:lerasium_block" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/lerasium" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:lerasium_block" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.blocks/malatium_block.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.blocks/malatium_block.json deleted file mode 100644 index 9cf6776bd..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.blocks/malatium_block.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:malatium_block" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/malatium" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:malatium_block" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.blocks/nickel_block.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.blocks/nickel_block.json deleted file mode 100644 index 7bcb759b8..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.blocks/nickel_block.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:nickel_block" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/nickel" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:nickel_block" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.blocks/nicrosil_block.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.blocks/nicrosil_block.json deleted file mode 100644 index e99279cd5..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.blocks/nicrosil_block.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:nicrosil_block" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/nicrosil" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:nicrosil_block" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.blocks/pewter_block.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.blocks/pewter_block.json deleted file mode 100644 index 34df36535..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.blocks/pewter_block.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:pewter_block" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/pewter" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:pewter_block" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.blocks/silver_block.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.blocks/silver_block.json deleted file mode 100644 index 2516d83c4..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.blocks/silver_block.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:silver_block" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/silver" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:silver_block" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.blocks/steel_block.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.blocks/steel_block.json deleted file mode 100644 index e87540983..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.blocks/steel_block.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:steel_block" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/steel" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:steel_block" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.blocks/tin_block.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.blocks/tin_block.json deleted file mode 100644 index 5359f6c24..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.blocks/tin_block.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:tin_block" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/tin" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:tin_block" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.blocks/zinc_block.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.blocks/zinc_block.json deleted file mode 100644 index b80ae0e9e..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.blocks/zinc_block.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:zinc_block" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/zinc" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:zinc_block" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/alloying/blend/bendalloy.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/alloying/blend/bendalloy.json deleted file mode 100644 index 26f2edb52..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/alloying/blend/bendalloy.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:alloying/blend/bendalloy" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:bendalloy_blend" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:alloying/blend/bendalloy" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/alloying/blend/brass.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/alloying/blend/brass.json deleted file mode 100644 index fc392000b..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/alloying/blend/brass.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:alloying/blend/brass" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:brass_blend" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:alloying/blend/brass" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/alloying/blend/bronze.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/alloying/blend/bronze.json deleted file mode 100644 index d415df7db..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/alloying/blend/bronze.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:alloying/blend/bronze" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:bronze_blend" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:alloying/blend/bronze" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/alloying/blend/duralumin.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/alloying/blend/duralumin.json deleted file mode 100644 index 092f61229..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/alloying/blend/duralumin.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:alloying/blend/duralumin" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:duralumin_blend" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:alloying/blend/duralumin" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/alloying/blend/electrum.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/alloying/blend/electrum.json deleted file mode 100644 index aff7dd992..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/alloying/blend/electrum.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:alloying/blend/electrum" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:electrum_blend" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:alloying/blend/electrum" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/alloying/blend/nicrosil.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/alloying/blend/nicrosil.json deleted file mode 100644 index 2fb5e28a1..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/alloying/blend/nicrosil.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:alloying/blend/nicrosil" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:nicrosil_blend" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:alloying/blend/nicrosil" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/alloying/blend/pewter.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/alloying/blend/pewter.json deleted file mode 100644 index 50e81154b..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/alloying/blend/pewter.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:alloying/blend/pewter" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:pewter_blend" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:alloying/blend/pewter" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/alloying/blend/steel.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/alloying/blend/steel.json deleted file mode 100644 index db8e8ed37..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/alloying/blend/steel.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:alloying/blend/steel" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:steel_blend" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:alloying/blend/steel" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/aluminum_ingot.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/aluminum_ingot.json deleted file mode 100644 index 9527bf65e..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/aluminum_ingot.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:aluminum_ingot" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:nuggets/aluminum" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:aluminum_ingot" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/aluminum_ingot_from_blasting_aluminum_ore.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/aluminum_ingot_from_blasting_aluminum_ore.json deleted file mode 100644 index 39aa48e85..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/aluminum_ingot_from_blasting_aluminum_ore.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:aluminum_ingot_from_blasting_aluminum_ore" - ] - }, - "criteria": { - "has_ore": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:aluminum_ore" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:aluminum_ingot_from_blasting_aluminum_ore" - } - } - }, - "requirements": [ - [ - "has_ore", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/aluminum_ingot_from_blasting_raw_aluminum_ore.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/aluminum_ingot_from_blasting_raw_aluminum_ore.json deleted file mode 100644 index 69cae78e2..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/aluminum_ingot_from_blasting_raw_aluminum_ore.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:aluminum_ingot_from_blasting_raw_aluminum_ore" - ] - }, - "criteria": { - "has_ore": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:raw_aluminum_ore" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:aluminum_ingot_from_blasting_raw_aluminum_ore" - } - } - }, - "requirements": [ - [ - "has_ore", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/aluminum_ingot_from_smelting_aluminum_ore.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/aluminum_ingot_from_smelting_aluminum_ore.json deleted file mode 100644 index de23fd168..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/aluminum_ingot_from_smelting_aluminum_ore.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:aluminum_ingot_from_smelting_aluminum_ore" - ] - }, - "criteria": { - "has_ore": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:aluminum_ore" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:aluminum_ingot_from_smelting_aluminum_ore" - } - } - }, - "requirements": [ - [ - "has_ore", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/aluminum_ingot_from_smelting_raw_aluminum_ore.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/aluminum_ingot_from_smelting_raw_aluminum_ore.json deleted file mode 100644 index fafe20948..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/aluminum_ingot_from_smelting_raw_aluminum_ore.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:aluminum_ingot_from_smelting_raw_aluminum_ore" - ] - }, - "criteria": { - "has_ore": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:raw_aluminum_ore" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:aluminum_ingot_from_smelting_raw_aluminum_ore" - } - } - }, - "requirements": [ - [ - "has_ore", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/atium_ingot.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/atium_ingot.json deleted file mode 100644 index 20126fd64..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/atium_ingot.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:atium_ingot" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:nuggets/atium" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:atium_ingot" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/bendalloy_ingot.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/bendalloy_ingot.json deleted file mode 100644 index 14f10845a..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/bendalloy_ingot.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:bendalloy_ingot" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:nuggets/bendalloy" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:bendalloy_ingot" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/bendalloy_ingot_from_blasting_bendalloy_blend.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/bendalloy_ingot_from_blasting_bendalloy_blend.json deleted file mode 100644 index 7ca2ef3cc..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/bendalloy_ingot_from_blasting_bendalloy_blend.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:bendalloy_ingot_from_blasting_bendalloy_blend" - ] - }, - "criteria": { - "has_ore": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:bendalloy_blend" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:bendalloy_ingot_from_blasting_bendalloy_blend" - } - } - }, - "requirements": [ - [ - "has_ore", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/bendalloy_ingot_from_smelting_bendalloy_blend.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/bendalloy_ingot_from_smelting_bendalloy_blend.json deleted file mode 100644 index 3f7aacd90..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/bendalloy_ingot_from_smelting_bendalloy_blend.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:bendalloy_ingot_from_smelting_bendalloy_blend" - ] - }, - "criteria": { - "has_ore": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:bendalloy_blend" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:bendalloy_ingot_from_smelting_bendalloy_blend" - } - } - }, - "requirements": [ - [ - "has_ore", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/brass_ingot.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/brass_ingot.json deleted file mode 100644 index 4152cdb66..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/brass_ingot.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:brass_ingot" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:nuggets/brass" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:brass_ingot" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/brass_ingot_from_blasting_brass_blend.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/brass_ingot_from_blasting_brass_blend.json deleted file mode 100644 index d878f1e73..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/brass_ingot_from_blasting_brass_blend.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:brass_ingot_from_blasting_brass_blend" - ] - }, - "criteria": { - "has_ore": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:brass_blend" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:brass_ingot_from_blasting_brass_blend" - } - } - }, - "requirements": [ - [ - "has_ore", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/brass_ingot_from_smelting_brass_blend.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/brass_ingot_from_smelting_brass_blend.json deleted file mode 100644 index 9e89e09fe..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/brass_ingot_from_smelting_brass_blend.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:brass_ingot_from_smelting_brass_blend" - ] - }, - "criteria": { - "has_ore": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:brass_blend" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:brass_ingot_from_smelting_brass_blend" - } - } - }, - "requirements": [ - [ - "has_ore", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/bronze_ingot.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/bronze_ingot.json deleted file mode 100644 index e6f543c6b..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/bronze_ingot.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:bronze_ingot" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:nuggets/bronze" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:bronze_ingot" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/bronze_ingot_from_blasting_bronze_blend.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/bronze_ingot_from_blasting_bronze_blend.json deleted file mode 100644 index b4ef30936..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/bronze_ingot_from_blasting_bronze_blend.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:bronze_ingot_from_blasting_bronze_blend" - ] - }, - "criteria": { - "has_ore": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:bronze_blend" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:bronze_ingot_from_blasting_bronze_blend" - } - } - }, - "requirements": [ - [ - "has_ore", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/bronze_ingot_from_smelting_bronze_blend.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/bronze_ingot_from_smelting_bronze_blend.json deleted file mode 100644 index b09f9e32e..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/bronze_ingot_from_smelting_bronze_blend.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:bronze_ingot_from_smelting_bronze_blend" - ] - }, - "criteria": { - "has_ore": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:bronze_blend" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:bronze_ingot_from_smelting_bronze_blend" - } - } - }, - "requirements": [ - [ - "has_ore", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/cadmium_ingot.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/cadmium_ingot.json deleted file mode 100644 index ce7bebddd..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/cadmium_ingot.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:cadmium_ingot" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:nuggets/cadmium" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:cadmium_ingot" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/cadmium_ingot_from_blasting_cadmium_ore.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/cadmium_ingot_from_blasting_cadmium_ore.json deleted file mode 100644 index f1187e9a1..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/cadmium_ingot_from_blasting_cadmium_ore.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:cadmium_ingot_from_blasting_cadmium_ore" - ] - }, - "criteria": { - "has_ore": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:cadmium_ore" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:cadmium_ingot_from_blasting_cadmium_ore" - } - } - }, - "requirements": [ - [ - "has_ore", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/cadmium_ingot_from_blasting_raw_cadmium_ore.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/cadmium_ingot_from_blasting_raw_cadmium_ore.json deleted file mode 100644 index 5d195d5be..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/cadmium_ingot_from_blasting_raw_cadmium_ore.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:cadmium_ingot_from_blasting_raw_cadmium_ore" - ] - }, - "criteria": { - "has_ore": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:raw_cadmium_ore" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:cadmium_ingot_from_blasting_raw_cadmium_ore" - } - } - }, - "requirements": [ - [ - "has_ore", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/cadmium_ingot_from_smelting_cadmium_ore.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/cadmium_ingot_from_smelting_cadmium_ore.json deleted file mode 100644 index d08be9259..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/cadmium_ingot_from_smelting_cadmium_ore.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:cadmium_ingot_from_smelting_cadmium_ore" - ] - }, - "criteria": { - "has_ore": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:cadmium_ore" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:cadmium_ingot_from_smelting_cadmium_ore" - } - } - }, - "requirements": [ - [ - "has_ore", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/cadmium_ingot_from_smelting_raw_cadmium_ore.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/cadmium_ingot_from_smelting_raw_cadmium_ore.json deleted file mode 100644 index 0f4fcb3aa..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/cadmium_ingot_from_smelting_raw_cadmium_ore.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:cadmium_ingot_from_smelting_raw_cadmium_ore" - ] - }, - "criteria": { - "has_ore": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:raw_cadmium_ore" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:cadmium_ingot_from_smelting_raw_cadmium_ore" - } - } - }, - "requirements": [ - [ - "has_ore", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/chromium_ingot.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/chromium_ingot.json deleted file mode 100644 index f6b4c7f8b..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/chromium_ingot.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:chromium_ingot" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:nuggets/chromium" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:chromium_ingot" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/chromium_ingot_from_blasting_chromium_ore.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/chromium_ingot_from_blasting_chromium_ore.json deleted file mode 100644 index 08d45fcd5..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/chromium_ingot_from_blasting_chromium_ore.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:chromium_ingot_from_blasting_chromium_ore" - ] - }, - "criteria": { - "has_ore": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:chromium_ore" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:chromium_ingot_from_blasting_chromium_ore" - } - } - }, - "requirements": [ - [ - "has_ore", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/chromium_ingot_from_blasting_raw_chromium_ore.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/chromium_ingot_from_blasting_raw_chromium_ore.json deleted file mode 100644 index e74e2554c..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/chromium_ingot_from_blasting_raw_chromium_ore.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:chromium_ingot_from_blasting_raw_chromium_ore" - ] - }, - "criteria": { - "has_ore": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:raw_chromium_ore" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:chromium_ingot_from_blasting_raw_chromium_ore" - } - } - }, - "requirements": [ - [ - "has_ore", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/chromium_ingot_from_smelting_chromium_ore.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/chromium_ingot_from_smelting_chromium_ore.json deleted file mode 100644 index 046df973f..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/chromium_ingot_from_smelting_chromium_ore.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:chromium_ingot_from_smelting_chromium_ore" - ] - }, - "criteria": { - "has_ore": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:chromium_ore" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:chromium_ingot_from_smelting_chromium_ore" - } - } - }, - "requirements": [ - [ - "has_ore", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/chromium_ingot_from_smelting_raw_chromium_ore.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/chromium_ingot_from_smelting_raw_chromium_ore.json deleted file mode 100644 index bf2317129..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/chromium_ingot_from_smelting_raw_chromium_ore.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:chromium_ingot_from_smelting_raw_chromium_ore" - ] - }, - "criteria": { - "has_ore": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:raw_chromium_ore" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:chromium_ingot_from_smelting_raw_chromium_ore" - } - } - }, - "requirements": [ - [ - "has_ore", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/aluminum_block_deconstruct.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/aluminum_block_deconstruct.json deleted file mode 100644 index 7dbad3dfe..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/aluminum_block_deconstruct.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:conversions/aluminum_block_deconstruct" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:aluminum_ingot" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:conversions/aluminum_block_deconstruct" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/aluminum_item_deconstruct.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/aluminum_item_deconstruct.json deleted file mode 100644 index 9d5264c7a..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/aluminum_item_deconstruct.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:conversions/aluminum_item_deconstruct" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:aluminum_nugget" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:conversions/aluminum_item_deconstruct" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/atium_block_deconstruct.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/atium_block_deconstruct.json deleted file mode 100644 index 0fd2ab2ef..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/atium_block_deconstruct.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:conversions/atium_block_deconstruct" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:atium_ingot" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:conversions/atium_block_deconstruct" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/atium_item_deconstruct.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/atium_item_deconstruct.json deleted file mode 100644 index f9f6967a3..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/atium_item_deconstruct.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:conversions/atium_item_deconstruct" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:atium_nugget" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:conversions/atium_item_deconstruct" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/bendalloy_block_deconstruct.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/bendalloy_block_deconstruct.json deleted file mode 100644 index cd601c14e..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/bendalloy_block_deconstruct.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:conversions/bendalloy_block_deconstruct" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:bendalloy_ingot" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:conversions/bendalloy_block_deconstruct" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/bendalloy_item_deconstruct.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/bendalloy_item_deconstruct.json deleted file mode 100644 index 3e800d72c..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/bendalloy_item_deconstruct.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:conversions/bendalloy_item_deconstruct" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:bendalloy_nugget" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:conversions/bendalloy_item_deconstruct" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/brass_block_deconstruct.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/brass_block_deconstruct.json deleted file mode 100644 index 9df447655..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/brass_block_deconstruct.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:conversions/brass_block_deconstruct" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:brass_ingot" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:conversions/brass_block_deconstruct" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/brass_item_deconstruct.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/brass_item_deconstruct.json deleted file mode 100644 index 4221bcd00..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/brass_item_deconstruct.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:conversions/brass_item_deconstruct" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:brass_nugget" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:conversions/brass_item_deconstruct" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/bronze_block_deconstruct.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/bronze_block_deconstruct.json deleted file mode 100644 index bdf2e0bea..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/bronze_block_deconstruct.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:conversions/bronze_block_deconstruct" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:bronze_ingot" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:conversions/bronze_block_deconstruct" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/bronze_item_deconstruct.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/bronze_item_deconstruct.json deleted file mode 100644 index dd452b52e..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/bronze_item_deconstruct.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:conversions/bronze_item_deconstruct" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:bronze_nugget" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:conversions/bronze_item_deconstruct" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/cadmium_block_deconstruct.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/cadmium_block_deconstruct.json deleted file mode 100644 index 779a99c49..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/cadmium_block_deconstruct.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:conversions/cadmium_block_deconstruct" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:cadmium_ingot" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:conversions/cadmium_block_deconstruct" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/cadmium_item_deconstruct.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/cadmium_item_deconstruct.json deleted file mode 100644 index ae7e4de84..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/cadmium_item_deconstruct.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:conversions/cadmium_item_deconstruct" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:cadmium_nugget" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:conversions/cadmium_item_deconstruct" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/chromium_block_deconstruct.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/chromium_block_deconstruct.json deleted file mode 100644 index 1f17fb124..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/chromium_block_deconstruct.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:conversions/chromium_block_deconstruct" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:chromium_ingot" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:conversions/chromium_block_deconstruct" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/chromium_item_deconstruct.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/chromium_item_deconstruct.json deleted file mode 100644 index 1d16b3e60..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/chromium_item_deconstruct.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:conversions/chromium_item_deconstruct" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:chromium_nugget" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:conversions/chromium_item_deconstruct" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/copper_block_deconstruct.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/copper_block_deconstruct.json deleted file mode 100644 index 54e2cbc9c..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/copper_block_deconstruct.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:conversions/copper_block_deconstruct" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:copper_ingot" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:conversions/copper_block_deconstruct" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/copper_item_deconstruct.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/copper_item_deconstruct.json deleted file mode 100644 index 347dbef91..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/copper_item_deconstruct.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:conversions/copper_item_deconstruct" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:copper_nugget" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:conversions/copper_item_deconstruct" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/duralumin_block_deconstruct.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/duralumin_block_deconstruct.json deleted file mode 100644 index eb0e5f5f3..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/duralumin_block_deconstruct.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:conversions/duralumin_block_deconstruct" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:duralumin_ingot" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:conversions/duralumin_block_deconstruct" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/duralumin_item_deconstruct.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/duralumin_item_deconstruct.json deleted file mode 100644 index 403fd8800..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/duralumin_item_deconstruct.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:conversions/duralumin_item_deconstruct" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:duralumin_nugget" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:conversions/duralumin_item_deconstruct" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/electrum_block_deconstruct.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/electrum_block_deconstruct.json deleted file mode 100644 index d0c51d424..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/electrum_block_deconstruct.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:conversions/electrum_block_deconstruct" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:electrum_ingot" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:conversions/electrum_block_deconstruct" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/electrum_item_deconstruct.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/electrum_item_deconstruct.json deleted file mode 100644 index 322a81103..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/electrum_item_deconstruct.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:conversions/electrum_item_deconstruct" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:electrum_nugget" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:conversions/electrum_item_deconstruct" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/harmonium_block_deconstruct.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/harmonium_block_deconstruct.json deleted file mode 100644 index e15fa7043..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/harmonium_block_deconstruct.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:conversions/harmonium_block_deconstruct" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:harmonium_ingot" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:conversions/harmonium_block_deconstruct" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/harmonium_item_deconstruct.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/harmonium_item_deconstruct.json deleted file mode 100644 index 9a5c45a5c..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/harmonium_item_deconstruct.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:conversions/harmonium_item_deconstruct" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:harmonium_nugget" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:conversions/harmonium_item_deconstruct" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/lead_block_deconstruct.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/lead_block_deconstruct.json deleted file mode 100644 index ec7334de1..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/lead_block_deconstruct.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:conversions/lead_block_deconstruct" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:lead_ingot" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:conversions/lead_block_deconstruct" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/lead_item_deconstruct.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/lead_item_deconstruct.json deleted file mode 100644 index a170b333c..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/lead_item_deconstruct.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:conversions/lead_item_deconstruct" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:lead_nugget" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:conversions/lead_item_deconstruct" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/lerasatium_block_deconstruct.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/lerasatium_block_deconstruct.json deleted file mode 100644 index 54a8f0055..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/lerasatium_block_deconstruct.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:conversions/lerasatium_block_deconstruct" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:lerasatium_ingot" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:conversions/lerasatium_block_deconstruct" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/lerasatium_item_deconstruct.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/lerasatium_item_deconstruct.json deleted file mode 100644 index 68c57fda4..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/lerasatium_item_deconstruct.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:conversions/lerasatium_item_deconstruct" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:lerasatium_nugget" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:conversions/lerasatium_item_deconstruct" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/lerasium_block_deconstruct.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/lerasium_block_deconstruct.json deleted file mode 100644 index 3a9925c51..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/lerasium_block_deconstruct.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:conversions/lerasium_block_deconstruct" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:lerasium_ingot" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:conversions/lerasium_block_deconstruct" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/lerasium_item_deconstruct.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/lerasium_item_deconstruct.json deleted file mode 100644 index 539707027..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/lerasium_item_deconstruct.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:conversions/lerasium_item_deconstruct" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:lerasium_nugget" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:conversions/lerasium_item_deconstruct" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/malatium_block_deconstruct.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/malatium_block_deconstruct.json deleted file mode 100644 index ebf00bd9a..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/malatium_block_deconstruct.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:conversions/malatium_block_deconstruct" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:malatium_ingot" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:conversions/malatium_block_deconstruct" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/malatium_item_deconstruct.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/malatium_item_deconstruct.json deleted file mode 100644 index 987fd34f4..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/malatium_item_deconstruct.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:conversions/malatium_item_deconstruct" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:malatium_nugget" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:conversions/malatium_item_deconstruct" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/nickel_block_deconstruct.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/nickel_block_deconstruct.json deleted file mode 100644 index 9c0461362..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/nickel_block_deconstruct.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:conversions/nickel_block_deconstruct" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:nickel_ingot" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:conversions/nickel_block_deconstruct" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/nickel_item_deconstruct.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/nickel_item_deconstruct.json deleted file mode 100644 index f0839623c..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/nickel_item_deconstruct.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:conversions/nickel_item_deconstruct" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:nickel_nugget" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:conversions/nickel_item_deconstruct" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/nicrosil_block_deconstruct.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/nicrosil_block_deconstruct.json deleted file mode 100644 index ec808bba0..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/nicrosil_block_deconstruct.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:conversions/nicrosil_block_deconstruct" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:nicrosil_ingot" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:conversions/nicrosil_block_deconstruct" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/nicrosil_item_deconstruct.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/nicrosil_item_deconstruct.json deleted file mode 100644 index 6e11bc202..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/nicrosil_item_deconstruct.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:conversions/nicrosil_item_deconstruct" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:nicrosil_nugget" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:conversions/nicrosil_item_deconstruct" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/pewter_block_deconstruct.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/pewter_block_deconstruct.json deleted file mode 100644 index e9da030c6..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/pewter_block_deconstruct.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:conversions/pewter_block_deconstruct" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:pewter_ingot" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:conversions/pewter_block_deconstruct" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/pewter_item_deconstruct.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/pewter_item_deconstruct.json deleted file mode 100644 index d7d9f16bc..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/pewter_item_deconstruct.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:conversions/pewter_item_deconstruct" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:pewter_nugget" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:conversions/pewter_item_deconstruct" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/silver_block_deconstruct.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/silver_block_deconstruct.json deleted file mode 100644 index 9ab42a85a..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/silver_block_deconstruct.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:conversions/silver_block_deconstruct" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:silver_ingot" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:conversions/silver_block_deconstruct" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/silver_item_deconstruct.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/silver_item_deconstruct.json deleted file mode 100644 index 2f757a331..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/silver_item_deconstruct.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:conversions/silver_item_deconstruct" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:silver_nugget" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:conversions/silver_item_deconstruct" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/steel_block_deconstruct.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/steel_block_deconstruct.json deleted file mode 100644 index d023c2f55..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/steel_block_deconstruct.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:conversions/steel_block_deconstruct" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:steel_ingot" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:conversions/steel_block_deconstruct" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/steel_item_deconstruct.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/steel_item_deconstruct.json deleted file mode 100644 index 8842529e1..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/steel_item_deconstruct.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:conversions/steel_item_deconstruct" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:steel_nugget" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:conversions/steel_item_deconstruct" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/tin_block_deconstruct.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/tin_block_deconstruct.json deleted file mode 100644 index c243dbc7a..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/tin_block_deconstruct.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:conversions/tin_block_deconstruct" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:tin_ingot" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:conversions/tin_block_deconstruct" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/tin_item_deconstruct.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/tin_item_deconstruct.json deleted file mode 100644 index 0b3431f9d..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/tin_item_deconstruct.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:conversions/tin_item_deconstruct" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:tin_nugget" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:conversions/tin_item_deconstruct" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/zinc_block_deconstruct.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/zinc_block_deconstruct.json deleted file mode 100644 index 6740cf5be..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/zinc_block_deconstruct.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:conversions/zinc_block_deconstruct" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:zinc_ingot" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:conversions/zinc_block_deconstruct" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/zinc_item_deconstruct.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/zinc_item_deconstruct.json deleted file mode 100644 index 85ec1fc00..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/conversions/zinc_item_deconstruct.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:conversions/zinc_item_deconstruct" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:zinc_nugget" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:conversions/zinc_item_deconstruct" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/copper_ingot.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/copper_ingot.json deleted file mode 100644 index aab2bbddc..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/copper_ingot.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:copper_ingot" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:nuggets/copper" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:copper_ingot" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/copper_ingot_from_blasting_copper_ore.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/copper_ingot_from_blasting_copper_ore.json deleted file mode 100644 index 8860ae2bf..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/copper_ingot_from_blasting_copper_ore.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:copper_ingot_from_blasting_copper_ore" - ] - }, - "criteria": { - "has_ore": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:copper_ore" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:copper_ingot_from_blasting_copper_ore" - } - } - }, - "requirements": [ - [ - "has_ore", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/copper_ingot_from_blasting_raw_copper_ore.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/copper_ingot_from_blasting_raw_copper_ore.json deleted file mode 100644 index f3ab7bf33..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/copper_ingot_from_blasting_raw_copper_ore.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:copper_ingot_from_blasting_raw_copper_ore" - ] - }, - "criteria": { - "has_ore": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:raw_copper_ore" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:copper_ingot_from_blasting_raw_copper_ore" - } - } - }, - "requirements": [ - [ - "has_ore", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/copper_ingot_from_smelting_copper_ore.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/copper_ingot_from_smelting_copper_ore.json deleted file mode 100644 index 80c45aa8e..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/copper_ingot_from_smelting_copper_ore.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:copper_ingot_from_smelting_copper_ore" - ] - }, - "criteria": { - "has_ore": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:copper_ore" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:copper_ingot_from_smelting_copper_ore" - } - } - }, - "requirements": [ - [ - "has_ore", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/copper_ingot_from_smelting_raw_copper_ore.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/copper_ingot_from_smelting_raw_copper_ore.json deleted file mode 100644 index c9ea5c7b8..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/copper_ingot_from_smelting_raw_copper_ore.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:copper_ingot_from_smelting_raw_copper_ore" - ] - }, - "criteria": { - "has_ore": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:raw_copper_ore" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:copper_ingot_from_smelting_raw_copper_ore" - } - } - }, - "requirements": [ - [ - "has_ore", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/duralumin_ingot.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/duralumin_ingot.json deleted file mode 100644 index 7190db198..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/duralumin_ingot.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:duralumin_ingot" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:nuggets/duralumin" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:duralumin_ingot" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/duralumin_ingot_from_blasting_duralumin_blend.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/duralumin_ingot_from_blasting_duralumin_blend.json deleted file mode 100644 index db5920cf5..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/duralumin_ingot_from_blasting_duralumin_blend.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:duralumin_ingot_from_blasting_duralumin_blend" - ] - }, - "criteria": { - "has_ore": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:duralumin_blend" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:duralumin_ingot_from_blasting_duralumin_blend" - } - } - }, - "requirements": [ - [ - "has_ore", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/duralumin_ingot_from_smelting_duralumin_blend.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/duralumin_ingot_from_smelting_duralumin_blend.json deleted file mode 100644 index 772eb54d8..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/duralumin_ingot_from_smelting_duralumin_blend.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:duralumin_ingot_from_smelting_duralumin_blend" - ] - }, - "criteria": { - "has_ore": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:duralumin_blend" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:duralumin_ingot_from_smelting_duralumin_blend" - } - } - }, - "requirements": [ - [ - "has_ore", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/electrum_ingot.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/electrum_ingot.json deleted file mode 100644 index d5bf03e80..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/electrum_ingot.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:electrum_ingot" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:nuggets/electrum" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:electrum_ingot" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/electrum_ingot_from_blasting_electrum_blend.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/electrum_ingot_from_blasting_electrum_blend.json deleted file mode 100644 index bf4fd1bd9..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/electrum_ingot_from_blasting_electrum_blend.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:electrum_ingot_from_blasting_electrum_blend" - ] - }, - "criteria": { - "has_ore": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:electrum_blend" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:electrum_ingot_from_blasting_electrum_blend" - } - } - }, - "requirements": [ - [ - "has_ore", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/electrum_ingot_from_smelting_electrum_blend.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/electrum_ingot_from_smelting_electrum_blend.json deleted file mode 100644 index 8470f9014..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/electrum_ingot_from_smelting_electrum_blend.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:electrum_ingot_from_smelting_electrum_blend" - ] - }, - "criteria": { - "has_ore": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:electrum_blend" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:electrum_ingot_from_smelting_electrum_blend" - } - } - }, - "requirements": [ - [ - "has_ore", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/guide_from_blasting_iron_spike.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/guide_from_blasting_iron_spike.json deleted file mode 100644 index 0c6b8a56e..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/guide_from_blasting_iron_spike.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:guide_from_blasting_iron_spike" - ] - }, - "criteria": { - "has_ore": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:iron_spike" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:guide_from_blasting_iron_spike" - } - } - }, - "requirements": [ - [ - "has_ore", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/guide_from_smelting_iron_spike.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/guide_from_smelting_iron_spike.json deleted file mode 100644 index 7a8eafe04..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/guide_from_smelting_iron_spike.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:guide_from_smelting_iron_spike" - ] - }, - "criteria": { - "has_ore": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:iron_spike" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:guide_from_smelting_iron_spike" - } - } - }, - "requirements": [ - [ - "has_ore", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/harmonium_ingot.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/harmonium_ingot.json deleted file mode 100644 index 7ab641a82..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/harmonium_ingot.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:harmonium_ingot" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:nuggets/harmonium" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:harmonium_ingot" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/lead_ingot.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/lead_ingot.json deleted file mode 100644 index cbb488f72..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/lead_ingot.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:lead_ingot" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:nuggets/lead" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:lead_ingot" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/lead_ingot_from_blasting_lead_ore.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/lead_ingot_from_blasting_lead_ore.json deleted file mode 100644 index d1c11caba..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/lead_ingot_from_blasting_lead_ore.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:lead_ingot_from_blasting_lead_ore" - ] - }, - "criteria": { - "has_ore": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:lead_ore" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:lead_ingot_from_blasting_lead_ore" - } - } - }, - "requirements": [ - [ - "has_ore", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/lead_ingot_from_blasting_raw_lead_ore.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/lead_ingot_from_blasting_raw_lead_ore.json deleted file mode 100644 index 3a650ee37..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/lead_ingot_from_blasting_raw_lead_ore.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:lead_ingot_from_blasting_raw_lead_ore" - ] - }, - "criteria": { - "has_ore": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:raw_lead_ore" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:lead_ingot_from_blasting_raw_lead_ore" - } - } - }, - "requirements": [ - [ - "has_ore", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/lead_ingot_from_smelting_lead_ore.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/lead_ingot_from_smelting_lead_ore.json deleted file mode 100644 index a7bbbc2dc..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/lead_ingot_from_smelting_lead_ore.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:lead_ingot_from_smelting_lead_ore" - ] - }, - "criteria": { - "has_ore": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:lead_ore" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:lead_ingot_from_smelting_lead_ore" - } - } - }, - "requirements": [ - [ - "has_ore", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/lead_ingot_from_smelting_raw_lead_ore.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/lead_ingot_from_smelting_raw_lead_ore.json deleted file mode 100644 index 51cb8a093..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/lead_ingot_from_smelting_raw_lead_ore.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:lead_ingot_from_smelting_raw_lead_ore" - ] - }, - "criteria": { - "has_ore": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:raw_lead_ore" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:lead_ingot_from_smelting_raw_lead_ore" - } - } - }, - "requirements": [ - [ - "has_ore", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/lerasatium_ingot.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/lerasatium_ingot.json deleted file mode 100644 index e56e1a39f..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/lerasatium_ingot.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:lerasatium_ingot" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:nuggets/lerasatium" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:lerasatium_ingot" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/lerasium_ingot.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/lerasium_ingot.json deleted file mode 100644 index e674aef3d..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/lerasium_ingot.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:lerasium_ingot" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:nuggets/lerasium" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:lerasium_ingot" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/malatium_ingot.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/malatium_ingot.json deleted file mode 100644 index 288f7f1e2..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/malatium_ingot.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:malatium_ingot" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:nuggets/malatium" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:malatium_ingot" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/nickel_ingot.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/nickel_ingot.json deleted file mode 100644 index 609c25ad2..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/nickel_ingot.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:nickel_ingot" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:nuggets/nickel" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:nickel_ingot" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/nickel_ingot_from_blasting_nickel_ore.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/nickel_ingot_from_blasting_nickel_ore.json deleted file mode 100644 index eec14f7ff..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/nickel_ingot_from_blasting_nickel_ore.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:nickel_ingot_from_blasting_nickel_ore" - ] - }, - "criteria": { - "has_ore": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:nickel_ore" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:nickel_ingot_from_blasting_nickel_ore" - } - } - }, - "requirements": [ - [ - "has_ore", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/nickel_ingot_from_blasting_raw_nickel_ore.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/nickel_ingot_from_blasting_raw_nickel_ore.json deleted file mode 100644 index 91eed7968..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/nickel_ingot_from_blasting_raw_nickel_ore.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:nickel_ingot_from_blasting_raw_nickel_ore" - ] - }, - "criteria": { - "has_ore": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:raw_nickel_ore" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:nickel_ingot_from_blasting_raw_nickel_ore" - } - } - }, - "requirements": [ - [ - "has_ore", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/nickel_ingot_from_smelting_nickel_ore.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/nickel_ingot_from_smelting_nickel_ore.json deleted file mode 100644 index dc8559bc1..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/nickel_ingot_from_smelting_nickel_ore.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:nickel_ingot_from_smelting_nickel_ore" - ] - }, - "criteria": { - "has_ore": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:nickel_ore" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:nickel_ingot_from_smelting_nickel_ore" - } - } - }, - "requirements": [ - [ - "has_ore", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/nickel_ingot_from_smelting_raw_nickel_ore.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/nickel_ingot_from_smelting_raw_nickel_ore.json deleted file mode 100644 index dc117ac39..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/nickel_ingot_from_smelting_raw_nickel_ore.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:nickel_ingot_from_smelting_raw_nickel_ore" - ] - }, - "criteria": { - "has_ore": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:raw_nickel_ore" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:nickel_ingot_from_smelting_raw_nickel_ore" - } - } - }, - "requirements": [ - [ - "has_ore", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/nicrosil_ingot.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/nicrosil_ingot.json deleted file mode 100644 index 9a400de2d..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/nicrosil_ingot.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:nicrosil_ingot" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:nuggets/nicrosil" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:nicrosil_ingot" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/nicrosil_ingot_from_blasting_nicrosil_blend.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/nicrosil_ingot_from_blasting_nicrosil_blend.json deleted file mode 100644 index 413c48b4a..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/nicrosil_ingot_from_blasting_nicrosil_blend.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:nicrosil_ingot_from_blasting_nicrosil_blend" - ] - }, - "criteria": { - "has_ore": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:nicrosil_blend" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:nicrosil_ingot_from_blasting_nicrosil_blend" - } - } - }, - "requirements": [ - [ - "has_ore", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/nicrosil_ingot_from_smelting_nicrosil_blend.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/nicrosil_ingot_from_smelting_nicrosil_blend.json deleted file mode 100644 index bc5af31a2..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/nicrosil_ingot_from_smelting_nicrosil_blend.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:nicrosil_ingot_from_smelting_nicrosil_blend" - ] - }, - "criteria": { - "has_ore": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:nicrosil_blend" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:nicrosil_ingot_from_smelting_nicrosil_blend" - } - } - }, - "requirements": [ - [ - "has_ore", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/pewter_ingot.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/pewter_ingot.json deleted file mode 100644 index 7a1fc201d..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/pewter_ingot.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:pewter_ingot" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:nuggets/pewter" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:pewter_ingot" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/pewter_ingot_from_blasting_pewter_blend.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/pewter_ingot_from_blasting_pewter_blend.json deleted file mode 100644 index 29535a51d..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/pewter_ingot_from_blasting_pewter_blend.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:pewter_ingot_from_blasting_pewter_blend" - ] - }, - "criteria": { - "has_ore": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:pewter_blend" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:pewter_ingot_from_blasting_pewter_blend" - } - } - }, - "requirements": [ - [ - "has_ore", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/pewter_ingot_from_smelting_pewter_blend.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/pewter_ingot_from_smelting_pewter_blend.json deleted file mode 100644 index 07330381b..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/pewter_ingot_from_smelting_pewter_blend.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:pewter_ingot_from_smelting_pewter_blend" - ] - }, - "criteria": { - "has_ore": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:pewter_blend" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:pewter_ingot_from_smelting_pewter_blend" - } - } - }, - "requirements": [ - [ - "has_ore", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/silver_ingot.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/silver_ingot.json deleted file mode 100644 index 2a6b63d09..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/silver_ingot.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:silver_ingot" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:nuggets/silver" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:silver_ingot" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/silver_ingot_from_blasting_raw_silver_ore.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/silver_ingot_from_blasting_raw_silver_ore.json deleted file mode 100644 index a800b776b..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/silver_ingot_from_blasting_raw_silver_ore.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:silver_ingot_from_blasting_raw_silver_ore" - ] - }, - "criteria": { - "has_ore": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:raw_silver_ore" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:silver_ingot_from_blasting_raw_silver_ore" - } - } - }, - "requirements": [ - [ - "has_ore", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/silver_ingot_from_blasting_silver_ore.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/silver_ingot_from_blasting_silver_ore.json deleted file mode 100644 index b45833197..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/silver_ingot_from_blasting_silver_ore.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:silver_ingot_from_blasting_silver_ore" - ] - }, - "criteria": { - "has_ore": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:silver_ore" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:silver_ingot_from_blasting_silver_ore" - } - } - }, - "requirements": [ - [ - "has_ore", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/silver_ingot_from_smelting_raw_silver_ore.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/silver_ingot_from_smelting_raw_silver_ore.json deleted file mode 100644 index 650896a86..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/silver_ingot_from_smelting_raw_silver_ore.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:silver_ingot_from_smelting_raw_silver_ore" - ] - }, - "criteria": { - "has_ore": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:raw_silver_ore" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:silver_ingot_from_smelting_raw_silver_ore" - } - } - }, - "requirements": [ - [ - "has_ore", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/silver_ingot_from_smelting_silver_ore.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/silver_ingot_from_smelting_silver_ore.json deleted file mode 100644 index ce7012058..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/silver_ingot_from_smelting_silver_ore.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:silver_ingot_from_smelting_silver_ore" - ] - }, - "criteria": { - "has_ore": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:silver_ore" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:silver_ingot_from_smelting_silver_ore" - } - } - }, - "requirements": [ - [ - "has_ore", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/steel_ingot.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/steel_ingot.json deleted file mode 100644 index 2b546cc22..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/steel_ingot.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:steel_ingot" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:nuggets/steel" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:steel_ingot" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/steel_ingot_from_blasting_steel_blend.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/steel_ingot_from_blasting_steel_blend.json deleted file mode 100644 index 6e8725fc9..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/steel_ingot_from_blasting_steel_blend.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:steel_ingot_from_blasting_steel_blend" - ] - }, - "criteria": { - "has_ore": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:steel_blend" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:steel_ingot_from_blasting_steel_blend" - } - } - }, - "requirements": [ - [ - "has_ore", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/steel_ingot_from_smelting_steel_blend.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/steel_ingot_from_smelting_steel_blend.json deleted file mode 100644 index 75b5f792e..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/steel_ingot_from_smelting_steel_blend.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:steel_ingot_from_smelting_steel_blend" - ] - }, - "criteria": { - "has_ore": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:steel_blend" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:steel_ingot_from_smelting_steel_blend" - } - } - }, - "requirements": [ - [ - "has_ore", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/tin_ingot.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/tin_ingot.json deleted file mode 100644 index 46a33beaa..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/tin_ingot.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:tin_ingot" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:nuggets/tin" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:tin_ingot" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/tin_ingot_from_blasting_raw_tin_ore.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/tin_ingot_from_blasting_raw_tin_ore.json deleted file mode 100644 index 38df58117..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/tin_ingot_from_blasting_raw_tin_ore.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:tin_ingot_from_blasting_raw_tin_ore" - ] - }, - "criteria": { - "has_ore": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:raw_tin_ore" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:tin_ingot_from_blasting_raw_tin_ore" - } - } - }, - "requirements": [ - [ - "has_ore", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/tin_ingot_from_blasting_tin_ore.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/tin_ingot_from_blasting_tin_ore.json deleted file mode 100644 index 22bb3fe71..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/tin_ingot_from_blasting_tin_ore.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:tin_ingot_from_blasting_tin_ore" - ] - }, - "criteria": { - "has_ore": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:tin_ore" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:tin_ingot_from_blasting_tin_ore" - } - } - }, - "requirements": [ - [ - "has_ore", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/tin_ingot_from_smelting_raw_tin_ore.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/tin_ingot_from_smelting_raw_tin_ore.json deleted file mode 100644 index 711f7d737..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/tin_ingot_from_smelting_raw_tin_ore.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:tin_ingot_from_smelting_raw_tin_ore" - ] - }, - "criteria": { - "has_ore": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:raw_tin_ore" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:tin_ingot_from_smelting_raw_tin_ore" - } - } - }, - "requirements": [ - [ - "has_ore", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/tin_ingot_from_smelting_tin_ore.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/tin_ingot_from_smelting_tin_ore.json deleted file mode 100644 index fb93970e8..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/tin_ingot_from_smelting_tin_ore.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:tin_ingot_from_smelting_tin_ore" - ] - }, - "criteria": { - "has_ore": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:tin_ore" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:tin_ingot_from_smelting_tin_ore" - } - } - }, - "requirements": [ - [ - "has_ore", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/zinc_ingot.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/zinc_ingot.json deleted file mode 100644 index 492348483..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/zinc_ingot.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:zinc_ingot" - ] - }, - "criteria": { - "has_item": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:nuggets/zinc" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:zinc_ingot" - } - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/zinc_ingot_from_blasting_raw_zinc_ore.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/zinc_ingot_from_blasting_raw_zinc_ore.json deleted file mode 100644 index 4a2481bc1..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/zinc_ingot_from_blasting_raw_zinc_ore.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:zinc_ingot_from_blasting_raw_zinc_ore" - ] - }, - "criteria": { - "has_ore": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:raw_zinc_ore" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:zinc_ingot_from_blasting_raw_zinc_ore" - } - } - }, - "requirements": [ - [ - "has_ore", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/zinc_ingot_from_blasting_zinc_ore.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/zinc_ingot_from_blasting_zinc_ore.json deleted file mode 100644 index a475117db..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/zinc_ingot_from_blasting_zinc_ore.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:zinc_ingot_from_blasting_zinc_ore" - ] - }, - "criteria": { - "has_ore": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:zinc_ore" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:zinc_ingot_from_blasting_zinc_ore" - } - } - }, - "requirements": [ - [ - "has_ore", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/zinc_ingot_from_smelting_raw_zinc_ore.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/zinc_ingot_from_smelting_raw_zinc_ore.json deleted file mode 100644 index 777326dca..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/zinc_ingot_from_smelting_raw_zinc_ore.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:zinc_ingot_from_smelting_raw_zinc_ore" - ] - }, - "criteria": { - "has_ore": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:raw_zinc_ore" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:zinc_ingot_from_smelting_raw_zinc_ore" - } - } - }, - "requirements": [ - [ - "has_ore", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/zinc_ingot_from_smelting_zinc_ore.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/zinc_ingot_from_smelting_zinc_ore.json deleted file mode 100644 index 77a1c2884..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.items/zinc_ingot_from_smelting_zinc_ore.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:zinc_ingot_from_smelting_zinc_ore" - ] - }, - "criteria": { - "has_ore": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "cosmere:zinc_ore" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:zinc_ingot_from_smelting_zinc_ore" - } - } - }, - "requirements": [ - [ - "has_ore", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/aluminum_bracelet_metalmind.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/aluminum_bracelet_metalmind.json deleted file mode 100644 index 511d036ab..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/aluminum_bracelet_metalmind.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:aluminum_bracelet_metalmind" - ] - }, - "criteria": { - "has_material": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/aluminum" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:aluminum_bracelet_metalmind" - } - } - }, - "requirements": [ - [ - "has_material", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/aluminum_necklace_metalmind.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/aluminum_necklace_metalmind.json deleted file mode 100644 index a7545c084..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/aluminum_necklace_metalmind.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:aluminum_necklace_metalmind" - ] - }, - "criteria": { - "has_material": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/aluminum" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:aluminum_necklace_metalmind" - } - } - }, - "requirements": [ - [ - "has_material", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/aluminum_ring_metalmind.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/aluminum_ring_metalmind.json deleted file mode 100644 index 09a1326f6..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/aluminum_ring_metalmind.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:aluminum_ring_metalmind" - ] - }, - "criteria": { - "has_material": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/aluminum" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:aluminum_ring_metalmind" - } - } - }, - "requirements": [ - [ - "has_material", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/aluminum_spike.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/aluminum_spike.json deleted file mode 100644 index 375b94feb..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/aluminum_spike.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:aluminum_spike" - ] - }, - "criteria": { - "has_material": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/aluminum" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:aluminum_spike" - } - } - }, - "requirements": [ - [ - "has_material", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/atium_bracelet_metalmind.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/atium_bracelet_metalmind.json deleted file mode 100644 index 861f44787..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/atium_bracelet_metalmind.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:atium_bracelet_metalmind" - ] - }, - "criteria": { - "has_material": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/atium" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:atium_bracelet_metalmind" - } - } - }, - "requirements": [ - [ - "has_material", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/atium_necklace_metalmind.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/atium_necklace_metalmind.json deleted file mode 100644 index ae5e84b42..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/atium_necklace_metalmind.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:atium_necklace_metalmind" - ] - }, - "criteria": { - "has_material": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/atium" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:atium_necklace_metalmind" - } - } - }, - "requirements": [ - [ - "has_material", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/atium_ring_metalmind.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/atium_ring_metalmind.json deleted file mode 100644 index a8b001f49..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/atium_ring_metalmind.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:atium_ring_metalmind" - ] - }, - "criteria": { - "has_material": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/atium" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:atium_ring_metalmind" - } - } - }, - "requirements": [ - [ - "has_material", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/atium_spike.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/atium_spike.json deleted file mode 100644 index 0775cfa5f..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/atium_spike.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:atium_spike" - ] - }, - "criteria": { - "has_material": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/atium" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:atium_spike" - } - } - }, - "requirements": [ - [ - "has_material", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/bendalloy_bracelet_metalmind.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/bendalloy_bracelet_metalmind.json deleted file mode 100644 index 2bf99476d..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/bendalloy_bracelet_metalmind.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:bendalloy_bracelet_metalmind" - ] - }, - "criteria": { - "has_material": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/bendalloy" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:bendalloy_bracelet_metalmind" - } - } - }, - "requirements": [ - [ - "has_material", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/bendalloy_necklace_metalmind.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/bendalloy_necklace_metalmind.json deleted file mode 100644 index 5b82e7aa3..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/bendalloy_necklace_metalmind.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:bendalloy_necklace_metalmind" - ] - }, - "criteria": { - "has_material": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/bendalloy" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:bendalloy_necklace_metalmind" - } - } - }, - "requirements": [ - [ - "has_material", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/bendalloy_ring_metalmind.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/bendalloy_ring_metalmind.json deleted file mode 100644 index 3f7e4be1a..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/bendalloy_ring_metalmind.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:bendalloy_ring_metalmind" - ] - }, - "criteria": { - "has_material": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/bendalloy" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:bendalloy_ring_metalmind" - } - } - }, - "requirements": [ - [ - "has_material", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/bendalloy_spike.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/bendalloy_spike.json deleted file mode 100644 index ad21167c1..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/bendalloy_spike.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:bendalloy_spike" - ] - }, - "criteria": { - "has_material": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/bendalloy" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:bendalloy_spike" - } - } - }, - "requirements": [ - [ - "has_material", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/brass_bracelet_metalmind.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/brass_bracelet_metalmind.json deleted file mode 100644 index de51ad138..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/brass_bracelet_metalmind.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:brass_bracelet_metalmind" - ] - }, - "criteria": { - "has_material": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/brass" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:brass_bracelet_metalmind" - } - } - }, - "requirements": [ - [ - "has_material", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/brass_necklace_metalmind.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/brass_necklace_metalmind.json deleted file mode 100644 index acd69c630..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/brass_necklace_metalmind.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:brass_necklace_metalmind" - ] - }, - "criteria": { - "has_material": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/brass" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:brass_necklace_metalmind" - } - } - }, - "requirements": [ - [ - "has_material", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/brass_ring_metalmind.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/brass_ring_metalmind.json deleted file mode 100644 index e3007328c..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/brass_ring_metalmind.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:brass_ring_metalmind" - ] - }, - "criteria": { - "has_material": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/brass" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:brass_ring_metalmind" - } - } - }, - "requirements": [ - [ - "has_material", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/brass_spike.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/brass_spike.json deleted file mode 100644 index d3490ad46..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/brass_spike.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:brass_spike" - ] - }, - "criteria": { - "has_material": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/brass" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:brass_spike" - } - } - }, - "requirements": [ - [ - "has_material", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/bronze_bracelet_metalmind.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/bronze_bracelet_metalmind.json deleted file mode 100644 index 21c9c98d1..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/bronze_bracelet_metalmind.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:bronze_bracelet_metalmind" - ] - }, - "criteria": { - "has_material": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/bronze" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:bronze_bracelet_metalmind" - } - } - }, - "requirements": [ - [ - "has_material", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/bronze_necklace_metalmind.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/bronze_necklace_metalmind.json deleted file mode 100644 index 084af9d4d..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/bronze_necklace_metalmind.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:bronze_necklace_metalmind" - ] - }, - "criteria": { - "has_material": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/bronze" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:bronze_necklace_metalmind" - } - } - }, - "requirements": [ - [ - "has_material", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/bronze_ring_metalmind.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/bronze_ring_metalmind.json deleted file mode 100644 index 9c3b45f1a..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/bronze_ring_metalmind.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:bronze_ring_metalmind" - ] - }, - "criteria": { - "has_material": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/bronze" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:bronze_ring_metalmind" - } - } - }, - "requirements": [ - [ - "has_material", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/bronze_spike.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/bronze_spike.json deleted file mode 100644 index 6ce0b0d39..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/bronze_spike.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:bronze_spike" - ] - }, - "criteria": { - "has_material": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/bronze" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:bronze_spike" - } - } - }, - "requirements": [ - [ - "has_material", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/cadmium_bracelet_metalmind.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/cadmium_bracelet_metalmind.json deleted file mode 100644 index 0f37ac83f..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/cadmium_bracelet_metalmind.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:cadmium_bracelet_metalmind" - ] - }, - "criteria": { - "has_material": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/cadmium" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:cadmium_bracelet_metalmind" - } - } - }, - "requirements": [ - [ - "has_material", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/cadmium_necklace_metalmind.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/cadmium_necklace_metalmind.json deleted file mode 100644 index bcec5a59f..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/cadmium_necklace_metalmind.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:cadmium_necklace_metalmind" - ] - }, - "criteria": { - "has_material": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/cadmium" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:cadmium_necklace_metalmind" - } - } - }, - "requirements": [ - [ - "has_material", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/cadmium_ring_metalmind.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/cadmium_ring_metalmind.json deleted file mode 100644 index b21c59988..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/cadmium_ring_metalmind.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:cadmium_ring_metalmind" - ] - }, - "criteria": { - "has_material": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/cadmium" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:cadmium_ring_metalmind" - } - } - }, - "requirements": [ - [ - "has_material", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/cadmium_spike.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/cadmium_spike.json deleted file mode 100644 index 154cb24a9..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/cadmium_spike.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:cadmium_spike" - ] - }, - "criteria": { - "has_material": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/cadmium" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:cadmium_spike" - } - } - }, - "requirements": [ - [ - "has_material", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/chromium_bracelet_metalmind.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/chromium_bracelet_metalmind.json deleted file mode 100644 index 218a64fe5..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/chromium_bracelet_metalmind.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:chromium_bracelet_metalmind" - ] - }, - "criteria": { - "has_material": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/chromium" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:chromium_bracelet_metalmind" - } - } - }, - "requirements": [ - [ - "has_material", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/chromium_necklace_metalmind.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/chromium_necklace_metalmind.json deleted file mode 100644 index 2aec2b69d..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/chromium_necklace_metalmind.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:chromium_necklace_metalmind" - ] - }, - "criteria": { - "has_material": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/chromium" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:chromium_necklace_metalmind" - } - } - }, - "requirements": [ - [ - "has_material", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/chromium_ring_metalmind.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/chromium_ring_metalmind.json deleted file mode 100644 index 308fa495a..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/chromium_ring_metalmind.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:chromium_ring_metalmind" - ] - }, - "criteria": { - "has_material": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/chromium" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:chromium_ring_metalmind" - } - } - }, - "requirements": [ - [ - "has_material", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/chromium_spike.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/chromium_spike.json deleted file mode 100644 index c6b6a4095..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/chromium_spike.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:chromium_spike" - ] - }, - "criteria": { - "has_material": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/chromium" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:chromium_spike" - } - } - }, - "requirements": [ - [ - "has_material", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/copper_bracelet_metalmind.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/copper_bracelet_metalmind.json deleted file mode 100644 index be6530f46..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/copper_bracelet_metalmind.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:copper_bracelet_metalmind" - ] - }, - "criteria": { - "has_material": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/copper" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:copper_bracelet_metalmind" - } - } - }, - "requirements": [ - [ - "has_material", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/copper_necklace_metalmind.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/copper_necklace_metalmind.json deleted file mode 100644 index 979e21480..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/copper_necklace_metalmind.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:copper_necklace_metalmind" - ] - }, - "criteria": { - "has_material": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/copper" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:copper_necklace_metalmind" - } - } - }, - "requirements": [ - [ - "has_material", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/copper_ring_metalmind.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/copper_ring_metalmind.json deleted file mode 100644 index 884910076..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/copper_ring_metalmind.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:copper_ring_metalmind" - ] - }, - "criteria": { - "has_material": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/copper" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:copper_ring_metalmind" - } - } - }, - "requirements": [ - [ - "has_material", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/copper_spike.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/copper_spike.json deleted file mode 100644 index 187c4a7db..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/copper_spike.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:copper_spike" - ] - }, - "criteria": { - "has_material": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/copper" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:copper_spike" - } - } - }, - "requirements": [ - [ - "has_material", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/duralumin_bracelet_metalmind.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/duralumin_bracelet_metalmind.json deleted file mode 100644 index 0b67c28a3..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/duralumin_bracelet_metalmind.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:duralumin_bracelet_metalmind" - ] - }, - "criteria": { - "has_material": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/duralumin" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:duralumin_bracelet_metalmind" - } - } - }, - "requirements": [ - [ - "has_material", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/duralumin_necklace_metalmind.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/duralumin_necklace_metalmind.json deleted file mode 100644 index d03533045..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/duralumin_necklace_metalmind.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:duralumin_necklace_metalmind" - ] - }, - "criteria": { - "has_material": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/duralumin" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:duralumin_necklace_metalmind" - } - } - }, - "requirements": [ - [ - "has_material", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/duralumin_ring_metalmind.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/duralumin_ring_metalmind.json deleted file mode 100644 index 325618880..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/duralumin_ring_metalmind.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:duralumin_ring_metalmind" - ] - }, - "criteria": { - "has_material": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/duralumin" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:duralumin_ring_metalmind" - } - } - }, - "requirements": [ - [ - "has_material", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/duralumin_spike.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/duralumin_spike.json deleted file mode 100644 index 86dabce7b..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/duralumin_spike.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:duralumin_spike" - ] - }, - "criteria": { - "has_material": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/duralumin" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:duralumin_spike" - } - } - }, - "requirements": [ - [ - "has_material", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/electrum_bracelet_metalmind.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/electrum_bracelet_metalmind.json deleted file mode 100644 index b81fff869..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/electrum_bracelet_metalmind.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:electrum_bracelet_metalmind" - ] - }, - "criteria": { - "has_material": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/electrum" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:electrum_bracelet_metalmind" - } - } - }, - "requirements": [ - [ - "has_material", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/electrum_necklace_metalmind.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/electrum_necklace_metalmind.json deleted file mode 100644 index fadb04193..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/electrum_necklace_metalmind.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:electrum_necklace_metalmind" - ] - }, - "criteria": { - "has_material": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/electrum" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:electrum_necklace_metalmind" - } - } - }, - "requirements": [ - [ - "has_material", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/electrum_ring_metalmind.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/electrum_ring_metalmind.json deleted file mode 100644 index 7c159f9b4..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/electrum_ring_metalmind.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:electrum_ring_metalmind" - ] - }, - "criteria": { - "has_material": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/electrum" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:electrum_ring_metalmind" - } - } - }, - "requirements": [ - [ - "has_material", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/electrum_spike.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/electrum_spike.json deleted file mode 100644 index 8aae60fae..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/electrum_spike.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:electrum_spike" - ] - }, - "criteria": { - "has_material": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/electrum" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:electrum_spike" - } - } - }, - "requirements": [ - [ - "has_material", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/gold_bracelet_metalmind.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/gold_bracelet_metalmind.json deleted file mode 100644 index b76093b7c..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/gold_bracelet_metalmind.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:gold_bracelet_metalmind" - ] - }, - "criteria": { - "has_material": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/gold" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:gold_bracelet_metalmind" - } - } - }, - "requirements": [ - [ - "has_material", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/gold_necklace_metalmind.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/gold_necklace_metalmind.json deleted file mode 100644 index e7786b93b..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/gold_necklace_metalmind.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:gold_necklace_metalmind" - ] - }, - "criteria": { - "has_material": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/gold" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:gold_necklace_metalmind" - } - } - }, - "requirements": [ - [ - "has_material", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/gold_ring_metalmind.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/gold_ring_metalmind.json deleted file mode 100644 index 9fe9eb165..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/gold_ring_metalmind.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:gold_ring_metalmind" - ] - }, - "criteria": { - "has_material": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/gold" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:gold_ring_metalmind" - } - } - }, - "requirements": [ - [ - "has_material", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/gold_spike.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/gold_spike.json deleted file mode 100644 index f2c004487..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/gold_spike.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:gold_spike" - ] - }, - "criteria": { - "has_material": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/gold" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:gold_spike" - } - } - }, - "requirements": [ - [ - "has_material", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/iron_bracelet_metalmind.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/iron_bracelet_metalmind.json deleted file mode 100644 index 1f6bc152e..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/iron_bracelet_metalmind.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:iron_bracelet_metalmind" - ] - }, - "criteria": { - "has_material": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/iron" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:iron_bracelet_metalmind" - } - } - }, - "requirements": [ - [ - "has_material", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/iron_necklace_metalmind.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/iron_necklace_metalmind.json deleted file mode 100644 index 99e21f31d..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/iron_necklace_metalmind.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:iron_necklace_metalmind" - ] - }, - "criteria": { - "has_material": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/iron" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:iron_necklace_metalmind" - } - } - }, - "requirements": [ - [ - "has_material", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/iron_ring_metalmind.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/iron_ring_metalmind.json deleted file mode 100644 index 0bb5c9af8..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/iron_ring_metalmind.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:iron_ring_metalmind" - ] - }, - "criteria": { - "has_material": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/iron" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:iron_ring_metalmind" - } - } - }, - "requirements": [ - [ - "has_material", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/iron_spike.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/iron_spike.json deleted file mode 100644 index 8391bcf0c..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/iron_spike.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:iron_spike" - ] - }, - "criteria": { - "has_material": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/iron" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:iron_spike" - } - } - }, - "requirements": [ - [ - "has_material", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/lerasium_spike.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/lerasium_spike.json deleted file mode 100644 index 8f6334484..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/lerasium_spike.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:lerasium_spike" - ] - }, - "criteria": { - "has_material": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/lerasium" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:lerasium_spike" - } - } - }, - "requirements": [ - [ - "has_material", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/nicrosil_bracelet_metalmind.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/nicrosil_bracelet_metalmind.json deleted file mode 100644 index 2b3ecf30b..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/nicrosil_bracelet_metalmind.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:nicrosil_bracelet_metalmind" - ] - }, - "criteria": { - "has_material": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/nicrosil" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:nicrosil_bracelet_metalmind" - } - } - }, - "requirements": [ - [ - "has_material", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/nicrosil_necklace_metalmind.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/nicrosil_necklace_metalmind.json deleted file mode 100644 index 020c6324e..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/nicrosil_necklace_metalmind.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:nicrosil_necklace_metalmind" - ] - }, - "criteria": { - "has_material": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/nicrosil" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:nicrosil_necklace_metalmind" - } - } - }, - "requirements": [ - [ - "has_material", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/nicrosil_ring_metalmind.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/nicrosil_ring_metalmind.json deleted file mode 100644 index e0e1c3f49..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/nicrosil_ring_metalmind.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:nicrosil_ring_metalmind" - ] - }, - "criteria": { - "has_material": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/nicrosil" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:nicrosil_ring_metalmind" - } - } - }, - "requirements": [ - [ - "has_material", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/nicrosil_spike.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/nicrosil_spike.json deleted file mode 100644 index 0d2857796..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/nicrosil_spike.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:nicrosil_spike" - ] - }, - "criteria": { - "has_material": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/nicrosil" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:nicrosil_spike" - } - } - }, - "requirements": [ - [ - "has_material", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/pewter_bracelet_metalmind.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/pewter_bracelet_metalmind.json deleted file mode 100644 index cf5b5413b..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/pewter_bracelet_metalmind.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:pewter_bracelet_metalmind" - ] - }, - "criteria": { - "has_material": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/pewter" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:pewter_bracelet_metalmind" - } - } - }, - "requirements": [ - [ - "has_material", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/pewter_necklace_metalmind.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/pewter_necklace_metalmind.json deleted file mode 100644 index 1d7dd764c..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/pewter_necklace_metalmind.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:pewter_necklace_metalmind" - ] - }, - "criteria": { - "has_material": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/pewter" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:pewter_necklace_metalmind" - } - } - }, - "requirements": [ - [ - "has_material", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/pewter_ring_metalmind.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/pewter_ring_metalmind.json deleted file mode 100644 index b829a7894..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/pewter_ring_metalmind.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:pewter_ring_metalmind" - ] - }, - "criteria": { - "has_material": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/pewter" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:pewter_ring_metalmind" - } - } - }, - "requirements": [ - [ - "has_material", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/pewter_spike.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/pewter_spike.json deleted file mode 100644 index 82546c6e3..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/pewter_spike.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:pewter_spike" - ] - }, - "criteria": { - "has_material": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/pewter" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:pewter_spike" - } - } - }, - "requirements": [ - [ - "has_material", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/steel_bracelet_metalmind.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/steel_bracelet_metalmind.json deleted file mode 100644 index 4bc828687..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/steel_bracelet_metalmind.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:steel_bracelet_metalmind" - ] - }, - "criteria": { - "has_material": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/steel" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:steel_bracelet_metalmind" - } - } - }, - "requirements": [ - [ - "has_material", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/steel_necklace_metalmind.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/steel_necklace_metalmind.json deleted file mode 100644 index 3c49e7013..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/steel_necklace_metalmind.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:steel_necklace_metalmind" - ] - }, - "criteria": { - "has_material": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/steel" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:steel_necklace_metalmind" - } - } - }, - "requirements": [ - [ - "has_material", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/steel_ring_metalmind.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/steel_ring_metalmind.json deleted file mode 100644 index fefef055c..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/steel_ring_metalmind.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:steel_ring_metalmind" - ] - }, - "criteria": { - "has_material": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/steel" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:steel_ring_metalmind" - } - } - }, - "requirements": [ - [ - "has_material", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/steel_spike.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/steel_spike.json deleted file mode 100644 index 0c0e3c494..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/steel_spike.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:steel_spike" - ] - }, - "criteria": { - "has_material": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/steel" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:steel_spike" - } - } - }, - "requirements": [ - [ - "has_material", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/tin_bracelet_metalmind.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/tin_bracelet_metalmind.json deleted file mode 100644 index 7d95cc245..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/tin_bracelet_metalmind.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:tin_bracelet_metalmind" - ] - }, - "criteria": { - "has_material": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/tin" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:tin_bracelet_metalmind" - } - } - }, - "requirements": [ - [ - "has_material", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/tin_necklace_metalmind.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/tin_necklace_metalmind.json deleted file mode 100644 index 5672e9614..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/tin_necklace_metalmind.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:tin_necklace_metalmind" - ] - }, - "criteria": { - "has_material": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/tin" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:tin_necklace_metalmind" - } - } - }, - "requirements": [ - [ - "has_material", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/tin_ring_metalmind.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/tin_ring_metalmind.json deleted file mode 100644 index 8d854e7dd..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/tin_ring_metalmind.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:tin_ring_metalmind" - ] - }, - "criteria": { - "has_material": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/tin" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:tin_ring_metalmind" - } - } - }, - "requirements": [ - [ - "has_material", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/tin_spike.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/tin_spike.json deleted file mode 100644 index 74b7292c9..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/tin_spike.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:tin_spike" - ] - }, - "criteria": { - "has_material": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/tin" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:tin_spike" - } - } - }, - "requirements": [ - [ - "has_material", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/zinc_bracelet_metalmind.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/zinc_bracelet_metalmind.json deleted file mode 100644 index 029637c8a..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/zinc_bracelet_metalmind.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:zinc_bracelet_metalmind" - ] - }, - "criteria": { - "has_material": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/zinc" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:zinc_bracelet_metalmind" - } - } - }, - "requirements": [ - [ - "has_material", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/zinc_necklace_metalmind.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/zinc_necklace_metalmind.json deleted file mode 100644 index 30cc252fc..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/zinc_necklace_metalmind.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:zinc_necklace_metalmind" - ] - }, - "criteria": { - "has_material": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/zinc" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:zinc_necklace_metalmind" - } - } - }, - "requirements": [ - [ - "has_material", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/zinc_ring_metalmind.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/zinc_ring_metalmind.json deleted file mode 100644 index 9ce7e746a..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/zinc_ring_metalmind.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:zinc_ring_metalmind" - ] - }, - "criteria": { - "has_material": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/zinc" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:zinc_ring_metalmind" - } - } - }, - "requirements": [ - [ - "has_material", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/zinc_spike.json b/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/zinc_spike.json deleted file mode 100644 index a3b6a496d..000000000 --- a/src/main/generated/data/cosmere/advancements/recipes/cosmere.metalminds/zinc_spike.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "cosmere:zinc_spike" - ] - }, - "criteria": { - "has_material": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "tag": "forge:ingots/zinc" - } - ] - } - }, - "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", - "conditions": { - "recipe": "cosmere:zinc_spike" - } - } - }, - "requirements": [ - [ - "has_material", - "has_the_recipe" - ] - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/loot_tables/blocks/aluminum_block.json b/src/main/generated/data/cosmere/loot_tables/blocks/aluminum_block.json deleted file mode 100644 index 18584afdb..000000000 --- a/src/main/generated/data/cosmere/loot_tables/blocks/aluminum_block.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "cosmere:aluminum_block" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/loot_tables/blocks/aluminum_ore.json b/src/main/generated/data/cosmere/loot_tables/blocks/aluminum_ore.json deleted file mode 100644 index d30832c99..000000000 --- a/src/main/generated/data/cosmere/loot_tables/blocks/aluminum_ore.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:alternatives", - "children": [ - { - "type": "minecraft:item", - "conditions": [ - { - "condition": "minecraft:match_tool", - "predicate": { - "enchantments": [ - { - "enchantment": "minecraft:silk_touch", - "levels": { - "min": 1 - } - } - ] - } - } - ], - "name": "cosmere:aluminum_ore" - }, - { - "type": "minecraft:item", - "functions": [ - { - "function": "minecraft:apply_bonus", - "enchantment": "minecraft:fortune", - "formula": "minecraft:ore_drops" - }, - { - "function": "minecraft:explosion_decay" - } - ], - "name": "cosmere:raw_aluminum_ore" - } - ] - } - ] - } - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/loot_tables/blocks/atium_block.json b/src/main/generated/data/cosmere/loot_tables/blocks/atium_block.json deleted file mode 100644 index 3918fed37..000000000 --- a/src/main/generated/data/cosmere/loot_tables/blocks/atium_block.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "cosmere:atium_block" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/loot_tables/blocks/bendalloy_block.json b/src/main/generated/data/cosmere/loot_tables/blocks/bendalloy_block.json deleted file mode 100644 index d31bf47f6..000000000 --- a/src/main/generated/data/cosmere/loot_tables/blocks/bendalloy_block.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "cosmere:bendalloy_block" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/loot_tables/blocks/brass_block.json b/src/main/generated/data/cosmere/loot_tables/blocks/brass_block.json deleted file mode 100644 index 508473ea6..000000000 --- a/src/main/generated/data/cosmere/loot_tables/blocks/brass_block.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "cosmere:brass_block" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/loot_tables/blocks/bronze_block.json b/src/main/generated/data/cosmere/loot_tables/blocks/bronze_block.json deleted file mode 100644 index d4d2d6164..000000000 --- a/src/main/generated/data/cosmere/loot_tables/blocks/bronze_block.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "cosmere:bronze_block" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/loot_tables/blocks/cadmium_block.json b/src/main/generated/data/cosmere/loot_tables/blocks/cadmium_block.json deleted file mode 100644 index 20dfa5ef1..000000000 --- a/src/main/generated/data/cosmere/loot_tables/blocks/cadmium_block.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "cosmere:cadmium_block" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/loot_tables/blocks/cadmium_ore.json b/src/main/generated/data/cosmere/loot_tables/blocks/cadmium_ore.json deleted file mode 100644 index 6be13136e..000000000 --- a/src/main/generated/data/cosmere/loot_tables/blocks/cadmium_ore.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:alternatives", - "children": [ - { - "type": "minecraft:item", - "conditions": [ - { - "condition": "minecraft:match_tool", - "predicate": { - "enchantments": [ - { - "enchantment": "minecraft:silk_touch", - "levels": { - "min": 1 - } - } - ] - } - } - ], - "name": "cosmere:cadmium_ore" - }, - { - "type": "minecraft:item", - "functions": [ - { - "function": "minecraft:apply_bonus", - "enchantment": "minecraft:fortune", - "formula": "minecraft:ore_drops" - }, - { - "function": "minecraft:explosion_decay" - } - ], - "name": "cosmere:raw_cadmium_ore" - } - ] - } - ] - } - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/loot_tables/blocks/chromium_block.json b/src/main/generated/data/cosmere/loot_tables/blocks/chromium_block.json deleted file mode 100644 index d4c54ebe0..000000000 --- a/src/main/generated/data/cosmere/loot_tables/blocks/chromium_block.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "cosmere:chromium_block" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/loot_tables/blocks/chromium_ore.json b/src/main/generated/data/cosmere/loot_tables/blocks/chromium_ore.json deleted file mode 100644 index 2f7352561..000000000 --- a/src/main/generated/data/cosmere/loot_tables/blocks/chromium_ore.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:alternatives", - "children": [ - { - "type": "minecraft:item", - "conditions": [ - { - "condition": "minecraft:match_tool", - "predicate": { - "enchantments": [ - { - "enchantment": "minecraft:silk_touch", - "levels": { - "min": 1 - } - } - ] - } - } - ], - "name": "cosmere:chromium_ore" - }, - { - "type": "minecraft:item", - "functions": [ - { - "function": "minecraft:apply_bonus", - "enchantment": "minecraft:fortune", - "formula": "minecraft:ore_drops" - }, - { - "function": "minecraft:explosion_decay" - } - ], - "name": "cosmere:raw_chromium_ore" - } - ] - } - ] - } - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/loot_tables/blocks/copper_block.json b/src/main/generated/data/cosmere/loot_tables/blocks/copper_block.json deleted file mode 100644 index 3936c9d76..000000000 --- a/src/main/generated/data/cosmere/loot_tables/blocks/copper_block.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "cosmere:copper_block" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/loot_tables/blocks/copper_ore.json b/src/main/generated/data/cosmere/loot_tables/blocks/copper_ore.json deleted file mode 100644 index 63e4254e7..000000000 --- a/src/main/generated/data/cosmere/loot_tables/blocks/copper_ore.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:alternatives", - "children": [ - { - "type": "minecraft:item", - "conditions": [ - { - "condition": "minecraft:match_tool", - "predicate": { - "enchantments": [ - { - "enchantment": "minecraft:silk_touch", - "levels": { - "min": 1 - } - } - ] - } - } - ], - "name": "cosmere:copper_ore" - }, - { - "type": "minecraft:item", - "functions": [ - { - "function": "minecraft:apply_bonus", - "enchantment": "minecraft:fortune", - "formula": "minecraft:ore_drops" - }, - { - "function": "minecraft:explosion_decay" - } - ], - "name": "cosmere:raw_copper_ore" - } - ] - } - ] - } - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/loot_tables/blocks/duralumin_block.json b/src/main/generated/data/cosmere/loot_tables/blocks/duralumin_block.json deleted file mode 100644 index 11e3313c5..000000000 --- a/src/main/generated/data/cosmere/loot_tables/blocks/duralumin_block.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "cosmere:duralumin_block" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/loot_tables/blocks/electrum_block.json b/src/main/generated/data/cosmere/loot_tables/blocks/electrum_block.json deleted file mode 100644 index 4dc702422..000000000 --- a/src/main/generated/data/cosmere/loot_tables/blocks/electrum_block.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "cosmere:electrum_block" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/loot_tables/blocks/gem_block.json b/src/main/generated/data/cosmere/loot_tables/blocks/gem_block.json deleted file mode 100644 index 8723176ad..000000000 --- a/src/main/generated/data/cosmere/loot_tables/blocks/gem_block.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "cosmere:gem_block" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/loot_tables/blocks/harmonium_block.json b/src/main/generated/data/cosmere/loot_tables/blocks/harmonium_block.json deleted file mode 100644 index 094a81aed..000000000 --- a/src/main/generated/data/cosmere/loot_tables/blocks/harmonium_block.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "cosmere:harmonium_block" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/loot_tables/blocks/lead_block.json b/src/main/generated/data/cosmere/loot_tables/blocks/lead_block.json deleted file mode 100644 index 63f3b1be0..000000000 --- a/src/main/generated/data/cosmere/loot_tables/blocks/lead_block.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "cosmere:lead_block" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/loot_tables/blocks/lead_ore.json b/src/main/generated/data/cosmere/loot_tables/blocks/lead_ore.json deleted file mode 100644 index 6acfb5c98..000000000 --- a/src/main/generated/data/cosmere/loot_tables/blocks/lead_ore.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:alternatives", - "children": [ - { - "type": "minecraft:item", - "conditions": [ - { - "condition": "minecraft:match_tool", - "predicate": { - "enchantments": [ - { - "enchantment": "minecraft:silk_touch", - "levels": { - "min": 1 - } - } - ] - } - } - ], - "name": "cosmere:lead_ore" - }, - { - "type": "minecraft:item", - "functions": [ - { - "function": "minecraft:apply_bonus", - "enchantment": "minecraft:fortune", - "formula": "minecraft:ore_drops" - }, - { - "function": "minecraft:explosion_decay" - } - ], - "name": "cosmere:raw_lead_ore" - } - ] - } - ] - } - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/loot_tables/blocks/lerasatium_block.json b/src/main/generated/data/cosmere/loot_tables/blocks/lerasatium_block.json deleted file mode 100644 index affafeca7..000000000 --- a/src/main/generated/data/cosmere/loot_tables/blocks/lerasatium_block.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "cosmere:lerasatium_block" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/loot_tables/blocks/lerasium_block.json b/src/main/generated/data/cosmere/loot_tables/blocks/lerasium_block.json deleted file mode 100644 index 46588adde..000000000 --- a/src/main/generated/data/cosmere/loot_tables/blocks/lerasium_block.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "cosmere:lerasium_block" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/loot_tables/blocks/malatium_block.json b/src/main/generated/data/cosmere/loot_tables/blocks/malatium_block.json deleted file mode 100644 index 842fa1f1c..000000000 --- a/src/main/generated/data/cosmere/loot_tables/blocks/malatium_block.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "cosmere:malatium_block" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/loot_tables/blocks/nickel_block.json b/src/main/generated/data/cosmere/loot_tables/blocks/nickel_block.json deleted file mode 100644 index 68b1d0e1b..000000000 --- a/src/main/generated/data/cosmere/loot_tables/blocks/nickel_block.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "cosmere:nickel_block" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/loot_tables/blocks/nickel_ore.json b/src/main/generated/data/cosmere/loot_tables/blocks/nickel_ore.json deleted file mode 100644 index c386de9d6..000000000 --- a/src/main/generated/data/cosmere/loot_tables/blocks/nickel_ore.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:alternatives", - "children": [ - { - "type": "minecraft:item", - "conditions": [ - { - "condition": "minecraft:match_tool", - "predicate": { - "enchantments": [ - { - "enchantment": "minecraft:silk_touch", - "levels": { - "min": 1 - } - } - ] - } - } - ], - "name": "cosmere:nickel_ore" - }, - { - "type": "minecraft:item", - "functions": [ - { - "function": "minecraft:apply_bonus", - "enchantment": "minecraft:fortune", - "formula": "minecraft:ore_drops" - }, - { - "function": "minecraft:explosion_decay" - } - ], - "name": "cosmere:raw_nickel_ore" - } - ] - } - ] - } - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/loot_tables/blocks/nicrosil_block.json b/src/main/generated/data/cosmere/loot_tables/blocks/nicrosil_block.json deleted file mode 100644 index 7f7f20002..000000000 --- a/src/main/generated/data/cosmere/loot_tables/blocks/nicrosil_block.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "cosmere:nicrosil_block" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/loot_tables/blocks/pewter_block.json b/src/main/generated/data/cosmere/loot_tables/blocks/pewter_block.json deleted file mode 100644 index 3742454dd..000000000 --- a/src/main/generated/data/cosmere/loot_tables/blocks/pewter_block.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "cosmere:pewter_block" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/loot_tables/blocks/silver_block.json b/src/main/generated/data/cosmere/loot_tables/blocks/silver_block.json deleted file mode 100644 index ed9ad4af2..000000000 --- a/src/main/generated/data/cosmere/loot_tables/blocks/silver_block.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "cosmere:silver_block" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/loot_tables/blocks/silver_ore.json b/src/main/generated/data/cosmere/loot_tables/blocks/silver_ore.json deleted file mode 100644 index 7f170e96d..000000000 --- a/src/main/generated/data/cosmere/loot_tables/blocks/silver_ore.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:alternatives", - "children": [ - { - "type": "minecraft:item", - "conditions": [ - { - "condition": "minecraft:match_tool", - "predicate": { - "enchantments": [ - { - "enchantment": "minecraft:silk_touch", - "levels": { - "min": 1 - } - } - ] - } - } - ], - "name": "cosmere:silver_ore" - }, - { - "type": "minecraft:item", - "functions": [ - { - "function": "minecraft:apply_bonus", - "enchantment": "minecraft:fortune", - "formula": "minecraft:ore_drops" - }, - { - "function": "minecraft:explosion_decay" - } - ], - "name": "cosmere:raw_silver_ore" - } - ] - } - ] - } - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/loot_tables/blocks/steel_block.json b/src/main/generated/data/cosmere/loot_tables/blocks/steel_block.json deleted file mode 100644 index c320b139b..000000000 --- a/src/main/generated/data/cosmere/loot_tables/blocks/steel_block.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "cosmere:steel_block" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/loot_tables/blocks/tin_block.json b/src/main/generated/data/cosmere/loot_tables/blocks/tin_block.json deleted file mode 100644 index 88ed81129..000000000 --- a/src/main/generated/data/cosmere/loot_tables/blocks/tin_block.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "cosmere:tin_block" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/loot_tables/blocks/tin_ore.json b/src/main/generated/data/cosmere/loot_tables/blocks/tin_ore.json deleted file mode 100644 index 6f09468fb..000000000 --- a/src/main/generated/data/cosmere/loot_tables/blocks/tin_ore.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:alternatives", - "children": [ - { - "type": "minecraft:item", - "conditions": [ - { - "condition": "minecraft:match_tool", - "predicate": { - "enchantments": [ - { - "enchantment": "minecraft:silk_touch", - "levels": { - "min": 1 - } - } - ] - } - } - ], - "name": "cosmere:tin_ore" - }, - { - "type": "minecraft:item", - "functions": [ - { - "function": "minecraft:apply_bonus", - "enchantment": "minecraft:fortune", - "formula": "minecraft:ore_drops" - }, - { - "function": "minecraft:explosion_decay" - } - ], - "name": "cosmere:raw_tin_ore" - } - ] - } - ] - } - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/loot_tables/blocks/zinc_block.json b/src/main/generated/data/cosmere/loot_tables/blocks/zinc_block.json deleted file mode 100644 index f28948994..000000000 --- a/src/main/generated/data/cosmere/loot_tables/blocks/zinc_block.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "cosmere:zinc_block" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/loot_tables/blocks/zinc_ore.json b/src/main/generated/data/cosmere/loot_tables/blocks/zinc_ore.json deleted file mode 100644 index d8e52be15..000000000 --- a/src/main/generated/data/cosmere/loot_tables/blocks/zinc_ore.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:alternatives", - "children": [ - { - "type": "minecraft:item", - "conditions": [ - { - "condition": "minecraft:match_tool", - "predicate": { - "enchantments": [ - { - "enchantment": "minecraft:silk_touch", - "levels": { - "min": 1 - } - } - ] - } - } - ], - "name": "cosmere:zinc_ore" - }, - { - "type": "minecraft:item", - "functions": [ - { - "function": "minecraft:apply_bonus", - "enchantment": "minecraft:fortune", - "formula": "minecraft:ore_drops" - }, - { - "function": "minecraft:explosion_decay" - } - ], - "name": "cosmere:raw_zinc_ore" - } - ] - } - ] - } - ] -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/alloying/blend/bendalloy.json b/src/main/generated/data/cosmere/recipes/alloying/blend/bendalloy.json deleted file mode 100644 index 3c3657994..000000000 --- a/src/main/generated/data/cosmere/recipes/alloying/blend/bendalloy.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "ingredients": [ - { - "tag": "forge:raw/cadmium" - }, - { - "tag": "forge:raw/lead" - }, - { - "tag": "forge:raw/lead" - }, - { - "tag": "forge:raw/lead" - }, - { - "tag": "forge:raw/lead" - }, - { - "tag": "forge:raw/lead" - }, - { - "tag": "forge:raw/lead" - }, - { - "tag": "forge:raw/tin" - }, - { - "tag": "forge:raw/tin" - } - ], - "result": { - "item": "cosmere:bendalloy_blend", - "count": 9 - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/alloying/blend/brass.json b/src/main/generated/data/cosmere/recipes/alloying/blend/brass.json deleted file mode 100644 index 032eee46e..000000000 --- a/src/main/generated/data/cosmere/recipes/alloying/blend/brass.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "ingredients": [ - { - "tag": "forge:raw/zinc" - }, - { - "tag": "forge:raw/copper" - } - ], - "result": { - "item": "cosmere:brass_blend", - "count": 2 - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/alloying/blend/bronze.json b/src/main/generated/data/cosmere/recipes/alloying/blend/bronze.json deleted file mode 100644 index d58880cc4..000000000 --- a/src/main/generated/data/cosmere/recipes/alloying/blend/bronze.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "ingredients": [ - { - "tag": "forge:raw/copper" - }, - { - "tag": "forge:raw/copper" - }, - { - "tag": "forge:raw/copper" - }, - { - "tag": "forge:raw/tin" - } - ], - "result": { - "item": "cosmere:bronze_blend", - "count": 4 - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/alloying/blend/duralumin.json b/src/main/generated/data/cosmere/recipes/alloying/blend/duralumin.json deleted file mode 100644 index eed5d5fef..000000000 --- a/src/main/generated/data/cosmere/recipes/alloying/blend/duralumin.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "ingredients": [ - { - "tag": "forge:raw/aluminum" - }, - { - "tag": "forge:raw/aluminum" - }, - { - "tag": "forge:raw/aluminum" - }, - { - "tag": "forge:raw/aluminum" - }, - { - "tag": "forge:raw/copper" - } - ], - "result": { - "item": "cosmere:duralumin_blend", - "count": 5 - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/alloying/blend/electrum.json b/src/main/generated/data/cosmere/recipes/alloying/blend/electrum.json deleted file mode 100644 index 4137773ee..000000000 --- a/src/main/generated/data/cosmere/recipes/alloying/blend/electrum.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "ingredients": [ - { - "tag": "forge:ingots/gold" - }, - { - "tag": "forge:raw/silver" - } - ], - "result": { - "item": "cosmere:electrum_blend", - "count": 2 - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/alloying/blend/nicrosil.json b/src/main/generated/data/cosmere/recipes/alloying/blend/nicrosil.json deleted file mode 100644 index 008718884..000000000 --- a/src/main/generated/data/cosmere/recipes/alloying/blend/nicrosil.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "ingredients": [ - { - "tag": "forge:raw/chromium" - }, - { - "tag": "forge:raw/nickel" - }, - { - "tag": "forge:raw/nickel" - }, - { - "tag": "forge:raw/nickel" - } - ], - "result": { - "item": "cosmere:nicrosil_blend", - "count": 4 - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/alloying/blend/pewter.json b/src/main/generated/data/cosmere/recipes/alloying/blend/pewter.json deleted file mode 100644 index b5a34b804..000000000 --- a/src/main/generated/data/cosmere/recipes/alloying/blend/pewter.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "ingredients": [ - { - "tag": "forge:raw/tin" - }, - { - "tag": "forge:raw/tin" - }, - { - "tag": "forge:raw/tin" - }, - { - "tag": "forge:raw/tin" - }, - { - "tag": "forge:raw/lead" - } - ], - "result": { - "item": "cosmere:pewter_blend", - "count": 5 - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/alloying/blend/steel.json b/src/main/generated/data/cosmere/recipes/alloying/blend/steel.json deleted file mode 100644 index 62ecb0b4d..000000000 --- a/src/main/generated/data/cosmere/recipes/alloying/blend/steel.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "ingredients": [ - { - "tag": "forge:ingots/iron" - }, - { - "tag": "forge:ingots/iron" - }, - { - "tag": "forge:ingots/iron" - }, - [ - { - "item": "minecraft:coal" - }, - { - "item": "minecraft:charcoal" - } - ] - ], - "result": { - "item": "cosmere:steel_blend", - "count": 4 - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/aluminum_block.json b/src/main/generated/data/cosmere/recipes/aluminum_block.json deleted file mode 100644 index f346c5228..000000000 --- a/src/main/generated/data/cosmere/recipes/aluminum_block.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - "III", - "III", - "III" - ], - "key": { - "I": { - "tag": "forge:ingots/aluminum" - } - }, - "result": { - "item": "cosmere:aluminum_block" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/aluminum_bracelet_metalmind.json b/src/main/generated/data/cosmere/recipes/aluminum_bracelet_metalmind.json deleted file mode 100644 index b1fd3b18c..000000000 --- a/src/main/generated/data/cosmere/recipes/aluminum_bracelet_metalmind.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "group": "bracelet", - "pattern": [ - " X ", - "X X", - "X X" - ], - "key": { - "X": { - "tag": "forge:ingots/aluminum" - } - }, - "result": { - "item": "cosmere:aluminum_bracelet_metalmind" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/aluminum_ingot.json b/src/main/generated/data/cosmere/recipes/aluminum_ingot.json deleted file mode 100644 index 9f4f70250..000000000 --- a/src/main/generated/data/cosmere/recipes/aluminum_ingot.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - "III", - "III", - "III" - ], - "key": { - "I": { - "tag": "forge:nuggets/aluminum" - } - }, - "result": { - "item": "cosmere:aluminum_ingot" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/aluminum_ingot_from_blasting_aluminum_ore.json b/src/main/generated/data/cosmere/recipes/aluminum_ingot_from_blasting_aluminum_ore.json deleted file mode 100644 index ef7c50b13..000000000 --- a/src/main/generated/data/cosmere/recipes/aluminum_ingot_from_blasting_aluminum_ore.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:blasting", - "ingredient": { - "item": "cosmere:aluminum_ore" - }, - "result": "cosmere:aluminum_ingot", - "experience": 1.0, - "cookingtime": 100 -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/aluminum_ingot_from_blasting_raw_aluminum_ore.json b/src/main/generated/data/cosmere/recipes/aluminum_ingot_from_blasting_raw_aluminum_ore.json deleted file mode 100644 index 51e675390..000000000 --- a/src/main/generated/data/cosmere/recipes/aluminum_ingot_from_blasting_raw_aluminum_ore.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:blasting", - "ingredient": { - "item": "cosmere:raw_aluminum_ore" - }, - "result": "cosmere:aluminum_ingot", - "experience": 1.0, - "cookingtime": 100 -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/aluminum_ingot_from_smelting_aluminum_ore.json b/src/main/generated/data/cosmere/recipes/aluminum_ingot_from_smelting_aluminum_ore.json deleted file mode 100644 index 19fa8cbf3..000000000 --- a/src/main/generated/data/cosmere/recipes/aluminum_ingot_from_smelting_aluminum_ore.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:smelting", - "ingredient": { - "item": "cosmere:aluminum_ore" - }, - "result": "cosmere:aluminum_ingot", - "experience": 1.0, - "cookingtime": 200 -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/aluminum_ingot_from_smelting_raw_aluminum_ore.json b/src/main/generated/data/cosmere/recipes/aluminum_ingot_from_smelting_raw_aluminum_ore.json deleted file mode 100644 index c81bcc726..000000000 --- a/src/main/generated/data/cosmere/recipes/aluminum_ingot_from_smelting_raw_aluminum_ore.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:smelting", - "ingredient": { - "item": "cosmere:raw_aluminum_ore" - }, - "result": "cosmere:aluminum_ingot", - "experience": 1.0, - "cookingtime": 200 -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/aluminum_necklace_metalmind.json b/src/main/generated/data/cosmere/recipes/aluminum_necklace_metalmind.json deleted file mode 100644 index a6dc15911..000000000 --- a/src/main/generated/data/cosmere/recipes/aluminum_necklace_metalmind.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "group": "necklace", - "pattern": [ - "XXX", - "X X", - " X " - ], - "key": { - "X": { - "tag": "forge:ingots/aluminum" - } - }, - "result": { - "item": "cosmere:aluminum_necklace_metalmind" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/aluminum_ring_metalmind.json b/src/main/generated/data/cosmere/recipes/aluminum_ring_metalmind.json deleted file mode 100644 index 5fe9de936..000000000 --- a/src/main/generated/data/cosmere/recipes/aluminum_ring_metalmind.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "group": "ring", - "pattern": [ - " X ", - "X X", - " X " - ], - "key": { - "X": { - "tag": "forge:ingots/aluminum" - } - }, - "result": { - "item": "cosmere:aluminum_ring_metalmind" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/aluminum_spike.json b/src/main/generated/data/cosmere/recipes/aluminum_spike.json deleted file mode 100644 index 6e4b355e8..000000000 --- a/src/main/generated/data/cosmere/recipes/aluminum_spike.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "group": "spike", - "pattern": [ - " X ", - " X " - ], - "key": { - "X": { - "tag": "forge:ingots/aluminum" - } - }, - "result": { - "item": "cosmere:aluminum_spike" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/atium_block.json b/src/main/generated/data/cosmere/recipes/atium_block.json deleted file mode 100644 index 4c0df787e..000000000 --- a/src/main/generated/data/cosmere/recipes/atium_block.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - "III", - "III", - "III" - ], - "key": { - "I": { - "tag": "forge:ingots/atium" - } - }, - "result": { - "item": "cosmere:atium_block" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/atium_bracelet_metalmind.json b/src/main/generated/data/cosmere/recipes/atium_bracelet_metalmind.json deleted file mode 100644 index 93cb29c26..000000000 --- a/src/main/generated/data/cosmere/recipes/atium_bracelet_metalmind.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "group": "bracelet", - "pattern": [ - " X ", - "X X", - "X X" - ], - "key": { - "X": { - "tag": "forge:ingots/atium" - } - }, - "result": { - "item": "cosmere:atium_bracelet_metalmind" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/atium_ingot.json b/src/main/generated/data/cosmere/recipes/atium_ingot.json deleted file mode 100644 index 93faa5711..000000000 --- a/src/main/generated/data/cosmere/recipes/atium_ingot.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - "III", - "III", - "III" - ], - "key": { - "I": { - "tag": "forge:nuggets/atium" - } - }, - "result": { - "item": "cosmere:atium_ingot" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/atium_necklace_metalmind.json b/src/main/generated/data/cosmere/recipes/atium_necklace_metalmind.json deleted file mode 100644 index 251f08505..000000000 --- a/src/main/generated/data/cosmere/recipes/atium_necklace_metalmind.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "group": "necklace", - "pattern": [ - "XXX", - "X X", - " X " - ], - "key": { - "X": { - "tag": "forge:ingots/atium" - } - }, - "result": { - "item": "cosmere:atium_necklace_metalmind" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/atium_ring_metalmind.json b/src/main/generated/data/cosmere/recipes/atium_ring_metalmind.json deleted file mode 100644 index 0c9861603..000000000 --- a/src/main/generated/data/cosmere/recipes/atium_ring_metalmind.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "group": "ring", - "pattern": [ - " X ", - "X X", - " X " - ], - "key": { - "X": { - "tag": "forge:ingots/atium" - } - }, - "result": { - "item": "cosmere:atium_ring_metalmind" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/atium_spike.json b/src/main/generated/data/cosmere/recipes/atium_spike.json deleted file mode 100644 index 9bc67d0df..000000000 --- a/src/main/generated/data/cosmere/recipes/atium_spike.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "group": "spike", - "pattern": [ - " X ", - " X " - ], - "key": { - "X": { - "tag": "forge:ingots/atium" - } - }, - "result": { - "item": "cosmere:atium_spike" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/bendalloy_block.json b/src/main/generated/data/cosmere/recipes/bendalloy_block.json deleted file mode 100644 index 3ac55fa7f..000000000 --- a/src/main/generated/data/cosmere/recipes/bendalloy_block.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - "III", - "III", - "III" - ], - "key": { - "I": { - "tag": "forge:ingots/bendalloy" - } - }, - "result": { - "item": "cosmere:bendalloy_block" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/bendalloy_bracelet_metalmind.json b/src/main/generated/data/cosmere/recipes/bendalloy_bracelet_metalmind.json deleted file mode 100644 index 72aeb107b..000000000 --- a/src/main/generated/data/cosmere/recipes/bendalloy_bracelet_metalmind.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "group": "bracelet", - "pattern": [ - " X ", - "X X", - "X X" - ], - "key": { - "X": { - "tag": "forge:ingots/bendalloy" - } - }, - "result": { - "item": "cosmere:bendalloy_bracelet_metalmind" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/bendalloy_ingot.json b/src/main/generated/data/cosmere/recipes/bendalloy_ingot.json deleted file mode 100644 index 0b685a48a..000000000 --- a/src/main/generated/data/cosmere/recipes/bendalloy_ingot.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - "III", - "III", - "III" - ], - "key": { - "I": { - "tag": "forge:nuggets/bendalloy" - } - }, - "result": { - "item": "cosmere:bendalloy_ingot" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/bendalloy_ingot_from_blasting_bendalloy_blend.json b/src/main/generated/data/cosmere/recipes/bendalloy_ingot_from_blasting_bendalloy_blend.json deleted file mode 100644 index 39bfcd17b..000000000 --- a/src/main/generated/data/cosmere/recipes/bendalloy_ingot_from_blasting_bendalloy_blend.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:blasting", - "ingredient": { - "item": "cosmere:bendalloy_blend" - }, - "result": "cosmere:bendalloy_ingot", - "experience": 1.0, - "cookingtime": 100 -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/bendalloy_ingot_from_smelting_bendalloy_blend.json b/src/main/generated/data/cosmere/recipes/bendalloy_ingot_from_smelting_bendalloy_blend.json deleted file mode 100644 index 45b2af122..000000000 --- a/src/main/generated/data/cosmere/recipes/bendalloy_ingot_from_smelting_bendalloy_blend.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:smelting", - "ingredient": { - "item": "cosmere:bendalloy_blend" - }, - "result": "cosmere:bendalloy_ingot", - "experience": 1.0, - "cookingtime": 200 -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/bendalloy_necklace_metalmind.json b/src/main/generated/data/cosmere/recipes/bendalloy_necklace_metalmind.json deleted file mode 100644 index f6589e3eb..000000000 --- a/src/main/generated/data/cosmere/recipes/bendalloy_necklace_metalmind.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "group": "necklace", - "pattern": [ - "XXX", - "X X", - " X " - ], - "key": { - "X": { - "tag": "forge:ingots/bendalloy" - } - }, - "result": { - "item": "cosmere:bendalloy_necklace_metalmind" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/bendalloy_ring_metalmind.json b/src/main/generated/data/cosmere/recipes/bendalloy_ring_metalmind.json deleted file mode 100644 index 5fce04d1c..000000000 --- a/src/main/generated/data/cosmere/recipes/bendalloy_ring_metalmind.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "group": "ring", - "pattern": [ - " X ", - "X X", - " X " - ], - "key": { - "X": { - "tag": "forge:ingots/bendalloy" - } - }, - "result": { - "item": "cosmere:bendalloy_ring_metalmind" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/bendalloy_spike.json b/src/main/generated/data/cosmere/recipes/bendalloy_spike.json deleted file mode 100644 index 0f8401b80..000000000 --- a/src/main/generated/data/cosmere/recipes/bendalloy_spike.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "group": "spike", - "pattern": [ - " X ", - " X " - ], - "key": { - "X": { - "tag": "forge:ingots/bendalloy" - } - }, - "result": { - "item": "cosmere:bendalloy_spike" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/brass_block.json b/src/main/generated/data/cosmere/recipes/brass_block.json deleted file mode 100644 index 45e917e5c..000000000 --- a/src/main/generated/data/cosmere/recipes/brass_block.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - "III", - "III", - "III" - ], - "key": { - "I": { - "tag": "forge:ingots/brass" - } - }, - "result": { - "item": "cosmere:brass_block" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/brass_bracelet_metalmind.json b/src/main/generated/data/cosmere/recipes/brass_bracelet_metalmind.json deleted file mode 100644 index e9d18b6f7..000000000 --- a/src/main/generated/data/cosmere/recipes/brass_bracelet_metalmind.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "group": "bracelet", - "pattern": [ - " X ", - "X X", - "X X" - ], - "key": { - "X": { - "tag": "forge:ingots/brass" - } - }, - "result": { - "item": "cosmere:brass_bracelet_metalmind" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/brass_ingot.json b/src/main/generated/data/cosmere/recipes/brass_ingot.json deleted file mode 100644 index 6af03ef77..000000000 --- a/src/main/generated/data/cosmere/recipes/brass_ingot.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - "III", - "III", - "III" - ], - "key": { - "I": { - "tag": "forge:nuggets/brass" - } - }, - "result": { - "item": "cosmere:brass_ingot" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/brass_ingot_from_blasting_brass_blend.json b/src/main/generated/data/cosmere/recipes/brass_ingot_from_blasting_brass_blend.json deleted file mode 100644 index 89982ca4b..000000000 --- a/src/main/generated/data/cosmere/recipes/brass_ingot_from_blasting_brass_blend.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:blasting", - "ingredient": { - "item": "cosmere:brass_blend" - }, - "result": "cosmere:brass_ingot", - "experience": 1.0, - "cookingtime": 100 -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/brass_ingot_from_smelting_brass_blend.json b/src/main/generated/data/cosmere/recipes/brass_ingot_from_smelting_brass_blend.json deleted file mode 100644 index a641cfdf3..000000000 --- a/src/main/generated/data/cosmere/recipes/brass_ingot_from_smelting_brass_blend.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:smelting", - "ingredient": { - "item": "cosmere:brass_blend" - }, - "result": "cosmere:brass_ingot", - "experience": 1.0, - "cookingtime": 200 -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/brass_necklace_metalmind.json b/src/main/generated/data/cosmere/recipes/brass_necklace_metalmind.json deleted file mode 100644 index c3dfcf424..000000000 --- a/src/main/generated/data/cosmere/recipes/brass_necklace_metalmind.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "group": "necklace", - "pattern": [ - "XXX", - "X X", - " X " - ], - "key": { - "X": { - "tag": "forge:ingots/brass" - } - }, - "result": { - "item": "cosmere:brass_necklace_metalmind" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/brass_ring_metalmind.json b/src/main/generated/data/cosmere/recipes/brass_ring_metalmind.json deleted file mode 100644 index 87a8a4f2c..000000000 --- a/src/main/generated/data/cosmere/recipes/brass_ring_metalmind.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "group": "ring", - "pattern": [ - " X ", - "X X", - " X " - ], - "key": { - "X": { - "tag": "forge:ingots/brass" - } - }, - "result": { - "item": "cosmere:brass_ring_metalmind" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/brass_spike.json b/src/main/generated/data/cosmere/recipes/brass_spike.json deleted file mode 100644 index 2aaa1b220..000000000 --- a/src/main/generated/data/cosmere/recipes/brass_spike.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "group": "spike", - "pattern": [ - " X ", - " X " - ], - "key": { - "X": { - "tag": "forge:ingots/brass" - } - }, - "result": { - "item": "cosmere:brass_spike" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/bronze_block.json b/src/main/generated/data/cosmere/recipes/bronze_block.json deleted file mode 100644 index d2fb1ffca..000000000 --- a/src/main/generated/data/cosmere/recipes/bronze_block.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - "III", - "III", - "III" - ], - "key": { - "I": { - "tag": "forge:ingots/bronze" - } - }, - "result": { - "item": "cosmere:bronze_block" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/bronze_bracelet_metalmind.json b/src/main/generated/data/cosmere/recipes/bronze_bracelet_metalmind.json deleted file mode 100644 index d4eccf923..000000000 --- a/src/main/generated/data/cosmere/recipes/bronze_bracelet_metalmind.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "group": "bracelet", - "pattern": [ - " X ", - "X X", - "X X" - ], - "key": { - "X": { - "tag": "forge:ingots/bronze" - } - }, - "result": { - "item": "cosmere:bronze_bracelet_metalmind" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/bronze_ingot.json b/src/main/generated/data/cosmere/recipes/bronze_ingot.json deleted file mode 100644 index 3b3e266f2..000000000 --- a/src/main/generated/data/cosmere/recipes/bronze_ingot.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - "III", - "III", - "III" - ], - "key": { - "I": { - "tag": "forge:nuggets/bronze" - } - }, - "result": { - "item": "cosmere:bronze_ingot" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/bronze_ingot_from_blasting_bronze_blend.json b/src/main/generated/data/cosmere/recipes/bronze_ingot_from_blasting_bronze_blend.json deleted file mode 100644 index 7c11d27cd..000000000 --- a/src/main/generated/data/cosmere/recipes/bronze_ingot_from_blasting_bronze_blend.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:blasting", - "ingredient": { - "item": "cosmere:bronze_blend" - }, - "result": "cosmere:bronze_ingot", - "experience": 1.0, - "cookingtime": 100 -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/bronze_ingot_from_smelting_bronze_blend.json b/src/main/generated/data/cosmere/recipes/bronze_ingot_from_smelting_bronze_blend.json deleted file mode 100644 index 1c0e297c1..000000000 --- a/src/main/generated/data/cosmere/recipes/bronze_ingot_from_smelting_bronze_blend.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:smelting", - "ingredient": { - "item": "cosmere:bronze_blend" - }, - "result": "cosmere:bronze_ingot", - "experience": 1.0, - "cookingtime": 200 -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/bronze_necklace_metalmind.json b/src/main/generated/data/cosmere/recipes/bronze_necklace_metalmind.json deleted file mode 100644 index dfdd38731..000000000 --- a/src/main/generated/data/cosmere/recipes/bronze_necklace_metalmind.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "group": "necklace", - "pattern": [ - "XXX", - "X X", - " X " - ], - "key": { - "X": { - "tag": "forge:ingots/bronze" - } - }, - "result": { - "item": "cosmere:bronze_necklace_metalmind" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/bronze_ring_metalmind.json b/src/main/generated/data/cosmere/recipes/bronze_ring_metalmind.json deleted file mode 100644 index e298d169c..000000000 --- a/src/main/generated/data/cosmere/recipes/bronze_ring_metalmind.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "group": "ring", - "pattern": [ - " X ", - "X X", - " X " - ], - "key": { - "X": { - "tag": "forge:ingots/bronze" - } - }, - "result": { - "item": "cosmere:bronze_ring_metalmind" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/bronze_spike.json b/src/main/generated/data/cosmere/recipes/bronze_spike.json deleted file mode 100644 index 42c040339..000000000 --- a/src/main/generated/data/cosmere/recipes/bronze_spike.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "group": "spike", - "pattern": [ - " X ", - " X " - ], - "key": { - "X": { - "tag": "forge:ingots/bronze" - } - }, - "result": { - "item": "cosmere:bronze_spike" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/cadmium_block.json b/src/main/generated/data/cosmere/recipes/cadmium_block.json deleted file mode 100644 index 6ed020bf6..000000000 --- a/src/main/generated/data/cosmere/recipes/cadmium_block.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - "III", - "III", - "III" - ], - "key": { - "I": { - "tag": "forge:ingots/cadmium" - } - }, - "result": { - "item": "cosmere:cadmium_block" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/cadmium_bracelet_metalmind.json b/src/main/generated/data/cosmere/recipes/cadmium_bracelet_metalmind.json deleted file mode 100644 index 1020062e4..000000000 --- a/src/main/generated/data/cosmere/recipes/cadmium_bracelet_metalmind.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "group": "bracelet", - "pattern": [ - " X ", - "X X", - "X X" - ], - "key": { - "X": { - "tag": "forge:ingots/cadmium" - } - }, - "result": { - "item": "cosmere:cadmium_bracelet_metalmind" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/cadmium_ingot.json b/src/main/generated/data/cosmere/recipes/cadmium_ingot.json deleted file mode 100644 index 2e389625d..000000000 --- a/src/main/generated/data/cosmere/recipes/cadmium_ingot.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - "III", - "III", - "III" - ], - "key": { - "I": { - "tag": "forge:nuggets/cadmium" - } - }, - "result": { - "item": "cosmere:cadmium_ingot" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/cadmium_ingot_from_blasting_cadmium_ore.json b/src/main/generated/data/cosmere/recipes/cadmium_ingot_from_blasting_cadmium_ore.json deleted file mode 100644 index 3e437e1a8..000000000 --- a/src/main/generated/data/cosmere/recipes/cadmium_ingot_from_blasting_cadmium_ore.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:blasting", - "ingredient": { - "item": "cosmere:cadmium_ore" - }, - "result": "cosmere:cadmium_ingot", - "experience": 1.0, - "cookingtime": 100 -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/cadmium_ingot_from_blasting_raw_cadmium_ore.json b/src/main/generated/data/cosmere/recipes/cadmium_ingot_from_blasting_raw_cadmium_ore.json deleted file mode 100644 index b830cda3b..000000000 --- a/src/main/generated/data/cosmere/recipes/cadmium_ingot_from_blasting_raw_cadmium_ore.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:blasting", - "ingredient": { - "item": "cosmere:raw_cadmium_ore" - }, - "result": "cosmere:cadmium_ingot", - "experience": 1.0, - "cookingtime": 100 -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/cadmium_ingot_from_smelting_cadmium_ore.json b/src/main/generated/data/cosmere/recipes/cadmium_ingot_from_smelting_cadmium_ore.json deleted file mode 100644 index a2545d976..000000000 --- a/src/main/generated/data/cosmere/recipes/cadmium_ingot_from_smelting_cadmium_ore.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:smelting", - "ingredient": { - "item": "cosmere:cadmium_ore" - }, - "result": "cosmere:cadmium_ingot", - "experience": 1.0, - "cookingtime": 200 -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/cadmium_ingot_from_smelting_raw_cadmium_ore.json b/src/main/generated/data/cosmere/recipes/cadmium_ingot_from_smelting_raw_cadmium_ore.json deleted file mode 100644 index f15a7cb17..000000000 --- a/src/main/generated/data/cosmere/recipes/cadmium_ingot_from_smelting_raw_cadmium_ore.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:smelting", - "ingredient": { - "item": "cosmere:raw_cadmium_ore" - }, - "result": "cosmere:cadmium_ingot", - "experience": 1.0, - "cookingtime": 200 -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/cadmium_necklace_metalmind.json b/src/main/generated/data/cosmere/recipes/cadmium_necklace_metalmind.json deleted file mode 100644 index 1a1401033..000000000 --- a/src/main/generated/data/cosmere/recipes/cadmium_necklace_metalmind.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "group": "necklace", - "pattern": [ - "XXX", - "X X", - " X " - ], - "key": { - "X": { - "tag": "forge:ingots/cadmium" - } - }, - "result": { - "item": "cosmere:cadmium_necklace_metalmind" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/cadmium_ring_metalmind.json b/src/main/generated/data/cosmere/recipes/cadmium_ring_metalmind.json deleted file mode 100644 index b24bf088f..000000000 --- a/src/main/generated/data/cosmere/recipes/cadmium_ring_metalmind.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "group": "ring", - "pattern": [ - " X ", - "X X", - " X " - ], - "key": { - "X": { - "tag": "forge:ingots/cadmium" - } - }, - "result": { - "item": "cosmere:cadmium_ring_metalmind" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/cadmium_spike.json b/src/main/generated/data/cosmere/recipes/cadmium_spike.json deleted file mode 100644 index 6d5a19087..000000000 --- a/src/main/generated/data/cosmere/recipes/cadmium_spike.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "group": "spike", - "pattern": [ - " X ", - " X " - ], - "key": { - "X": { - "tag": "forge:ingots/cadmium" - } - }, - "result": { - "item": "cosmere:cadmium_spike" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/chromium_block.json b/src/main/generated/data/cosmere/recipes/chromium_block.json deleted file mode 100644 index 6ce97b2c6..000000000 --- a/src/main/generated/data/cosmere/recipes/chromium_block.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - "III", - "III", - "III" - ], - "key": { - "I": { - "tag": "forge:ingots/chromium" - } - }, - "result": { - "item": "cosmere:chromium_block" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/chromium_bracelet_metalmind.json b/src/main/generated/data/cosmere/recipes/chromium_bracelet_metalmind.json deleted file mode 100644 index bde759b74..000000000 --- a/src/main/generated/data/cosmere/recipes/chromium_bracelet_metalmind.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "group": "bracelet", - "pattern": [ - " X ", - "X X", - "X X" - ], - "key": { - "X": { - "tag": "forge:ingots/chromium" - } - }, - "result": { - "item": "cosmere:chromium_bracelet_metalmind" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/chromium_ingot.json b/src/main/generated/data/cosmere/recipes/chromium_ingot.json deleted file mode 100644 index 2bc145c48..000000000 --- a/src/main/generated/data/cosmere/recipes/chromium_ingot.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - "III", - "III", - "III" - ], - "key": { - "I": { - "tag": "forge:nuggets/chromium" - } - }, - "result": { - "item": "cosmere:chromium_ingot" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/chromium_ingot_from_blasting_chromium_ore.json b/src/main/generated/data/cosmere/recipes/chromium_ingot_from_blasting_chromium_ore.json deleted file mode 100644 index a5b16a799..000000000 --- a/src/main/generated/data/cosmere/recipes/chromium_ingot_from_blasting_chromium_ore.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:blasting", - "ingredient": { - "item": "cosmere:chromium_ore" - }, - "result": "cosmere:chromium_ingot", - "experience": 1.0, - "cookingtime": 100 -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/chromium_ingot_from_blasting_raw_chromium_ore.json b/src/main/generated/data/cosmere/recipes/chromium_ingot_from_blasting_raw_chromium_ore.json deleted file mode 100644 index ed9211d26..000000000 --- a/src/main/generated/data/cosmere/recipes/chromium_ingot_from_blasting_raw_chromium_ore.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:blasting", - "ingredient": { - "item": "cosmere:raw_chromium_ore" - }, - "result": "cosmere:chromium_ingot", - "experience": 1.0, - "cookingtime": 100 -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/chromium_ingot_from_smelting_chromium_ore.json b/src/main/generated/data/cosmere/recipes/chromium_ingot_from_smelting_chromium_ore.json deleted file mode 100644 index 789df3f9d..000000000 --- a/src/main/generated/data/cosmere/recipes/chromium_ingot_from_smelting_chromium_ore.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:smelting", - "ingredient": { - "item": "cosmere:chromium_ore" - }, - "result": "cosmere:chromium_ingot", - "experience": 1.0, - "cookingtime": 200 -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/chromium_ingot_from_smelting_raw_chromium_ore.json b/src/main/generated/data/cosmere/recipes/chromium_ingot_from_smelting_raw_chromium_ore.json deleted file mode 100644 index 2ec60fec1..000000000 --- a/src/main/generated/data/cosmere/recipes/chromium_ingot_from_smelting_raw_chromium_ore.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:smelting", - "ingredient": { - "item": "cosmere:raw_chromium_ore" - }, - "result": "cosmere:chromium_ingot", - "experience": 1.0, - "cookingtime": 200 -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/chromium_necklace_metalmind.json b/src/main/generated/data/cosmere/recipes/chromium_necklace_metalmind.json deleted file mode 100644 index a31bc7daa..000000000 --- a/src/main/generated/data/cosmere/recipes/chromium_necklace_metalmind.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "group": "necklace", - "pattern": [ - "XXX", - "X X", - " X " - ], - "key": { - "X": { - "tag": "forge:ingots/chromium" - } - }, - "result": { - "item": "cosmere:chromium_necklace_metalmind" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/chromium_ring_metalmind.json b/src/main/generated/data/cosmere/recipes/chromium_ring_metalmind.json deleted file mode 100644 index 9a1cd58b6..000000000 --- a/src/main/generated/data/cosmere/recipes/chromium_ring_metalmind.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "group": "ring", - "pattern": [ - " X ", - "X X", - " X " - ], - "key": { - "X": { - "tag": "forge:ingots/chromium" - } - }, - "result": { - "item": "cosmere:chromium_ring_metalmind" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/chromium_spike.json b/src/main/generated/data/cosmere/recipes/chromium_spike.json deleted file mode 100644 index 2be5877cc..000000000 --- a/src/main/generated/data/cosmere/recipes/chromium_spike.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "group": "spike", - "pattern": [ - " X ", - " X " - ], - "key": { - "X": { - "tag": "forge:ingots/chromium" - } - }, - "result": { - "item": "cosmere:chromium_spike" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/conversions/aluminum_block_deconstruct.json b/src/main/generated/data/cosmere/recipes/conversions/aluminum_block_deconstruct.json deleted file mode 100644 index 470ef1d9a..000000000 --- a/src/main/generated/data/cosmere/recipes/conversions/aluminum_block_deconstruct.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "ingredients": [ - { - "tag": "forge:storage_blocks/aluminum" - } - ], - "result": { - "item": "cosmere:aluminum_ingot", - "count": 9 - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/conversions/aluminum_item_deconstruct.json b/src/main/generated/data/cosmere/recipes/conversions/aluminum_item_deconstruct.json deleted file mode 100644 index 086dd03aa..000000000 --- a/src/main/generated/data/cosmere/recipes/conversions/aluminum_item_deconstruct.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "ingredients": [ - { - "tag": "forge:ingots/aluminum" - } - ], - "result": { - "item": "cosmere:aluminum_nugget", - "count": 9 - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/conversions/atium_block_deconstruct.json b/src/main/generated/data/cosmere/recipes/conversions/atium_block_deconstruct.json deleted file mode 100644 index c02ea1680..000000000 --- a/src/main/generated/data/cosmere/recipes/conversions/atium_block_deconstruct.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "ingredients": [ - { - "tag": "forge:storage_blocks/atium" - } - ], - "result": { - "item": "cosmere:atium_ingot", - "count": 9 - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/conversions/atium_item_deconstruct.json b/src/main/generated/data/cosmere/recipes/conversions/atium_item_deconstruct.json deleted file mode 100644 index 2901e66e3..000000000 --- a/src/main/generated/data/cosmere/recipes/conversions/atium_item_deconstruct.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "ingredients": [ - { - "tag": "forge:ingots/atium" - } - ], - "result": { - "item": "cosmere:atium_nugget", - "count": 9 - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/conversions/bendalloy_block_deconstruct.json b/src/main/generated/data/cosmere/recipes/conversions/bendalloy_block_deconstruct.json deleted file mode 100644 index 70df2f417..000000000 --- a/src/main/generated/data/cosmere/recipes/conversions/bendalloy_block_deconstruct.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "ingredients": [ - { - "tag": "forge:storage_blocks/bendalloy" - } - ], - "result": { - "item": "cosmere:bendalloy_ingot", - "count": 9 - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/conversions/bendalloy_item_deconstruct.json b/src/main/generated/data/cosmere/recipes/conversions/bendalloy_item_deconstruct.json deleted file mode 100644 index e06aad518..000000000 --- a/src/main/generated/data/cosmere/recipes/conversions/bendalloy_item_deconstruct.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "ingredients": [ - { - "tag": "forge:ingots/bendalloy" - } - ], - "result": { - "item": "cosmere:bendalloy_nugget", - "count": 9 - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/conversions/brass_block_deconstruct.json b/src/main/generated/data/cosmere/recipes/conversions/brass_block_deconstruct.json deleted file mode 100644 index 2139d3422..000000000 --- a/src/main/generated/data/cosmere/recipes/conversions/brass_block_deconstruct.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "ingredients": [ - { - "tag": "forge:storage_blocks/brass" - } - ], - "result": { - "item": "cosmere:brass_ingot", - "count": 9 - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/conversions/brass_item_deconstruct.json b/src/main/generated/data/cosmere/recipes/conversions/brass_item_deconstruct.json deleted file mode 100644 index 79cd8ded0..000000000 --- a/src/main/generated/data/cosmere/recipes/conversions/brass_item_deconstruct.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "ingredients": [ - { - "tag": "forge:ingots/brass" - } - ], - "result": { - "item": "cosmere:brass_nugget", - "count": 9 - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/conversions/bronze_block_deconstruct.json b/src/main/generated/data/cosmere/recipes/conversions/bronze_block_deconstruct.json deleted file mode 100644 index 190cf5669..000000000 --- a/src/main/generated/data/cosmere/recipes/conversions/bronze_block_deconstruct.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "ingredients": [ - { - "tag": "forge:storage_blocks/bronze" - } - ], - "result": { - "item": "cosmere:bronze_ingot", - "count": 9 - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/conversions/bronze_item_deconstruct.json b/src/main/generated/data/cosmere/recipes/conversions/bronze_item_deconstruct.json deleted file mode 100644 index 382d81bd1..000000000 --- a/src/main/generated/data/cosmere/recipes/conversions/bronze_item_deconstruct.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "ingredients": [ - { - "tag": "forge:ingots/bronze" - } - ], - "result": { - "item": "cosmere:bronze_nugget", - "count": 9 - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/conversions/cadmium_block_deconstruct.json b/src/main/generated/data/cosmere/recipes/conversions/cadmium_block_deconstruct.json deleted file mode 100644 index 0c0446935..000000000 --- a/src/main/generated/data/cosmere/recipes/conversions/cadmium_block_deconstruct.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "ingredients": [ - { - "tag": "forge:storage_blocks/cadmium" - } - ], - "result": { - "item": "cosmere:cadmium_ingot", - "count": 9 - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/conversions/cadmium_item_deconstruct.json b/src/main/generated/data/cosmere/recipes/conversions/cadmium_item_deconstruct.json deleted file mode 100644 index 13ca06c9b..000000000 --- a/src/main/generated/data/cosmere/recipes/conversions/cadmium_item_deconstruct.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "ingredients": [ - { - "tag": "forge:ingots/cadmium" - } - ], - "result": { - "item": "cosmere:cadmium_nugget", - "count": 9 - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/conversions/chromium_block_deconstruct.json b/src/main/generated/data/cosmere/recipes/conversions/chromium_block_deconstruct.json deleted file mode 100644 index 356afbe91..000000000 --- a/src/main/generated/data/cosmere/recipes/conversions/chromium_block_deconstruct.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "ingredients": [ - { - "tag": "forge:storage_blocks/chromium" - } - ], - "result": { - "item": "cosmere:chromium_ingot", - "count": 9 - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/conversions/chromium_item_deconstruct.json b/src/main/generated/data/cosmere/recipes/conversions/chromium_item_deconstruct.json deleted file mode 100644 index ca681bc54..000000000 --- a/src/main/generated/data/cosmere/recipes/conversions/chromium_item_deconstruct.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "ingredients": [ - { - "tag": "forge:ingots/chromium" - } - ], - "result": { - "item": "cosmere:chromium_nugget", - "count": 9 - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/conversions/copper_block_deconstruct.json b/src/main/generated/data/cosmere/recipes/conversions/copper_block_deconstruct.json deleted file mode 100644 index a5fa41c40..000000000 --- a/src/main/generated/data/cosmere/recipes/conversions/copper_block_deconstruct.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "ingredients": [ - { - "tag": "forge:storage_blocks/copper" - } - ], - "result": { - "item": "cosmere:copper_ingot", - "count": 9 - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/conversions/copper_item_deconstruct.json b/src/main/generated/data/cosmere/recipes/conversions/copper_item_deconstruct.json deleted file mode 100644 index 858525da0..000000000 --- a/src/main/generated/data/cosmere/recipes/conversions/copper_item_deconstruct.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "ingredients": [ - { - "tag": "forge:ingots/copper" - } - ], - "result": { - "item": "cosmere:copper_nugget", - "count": 9 - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/conversions/duralumin_block_deconstruct.json b/src/main/generated/data/cosmere/recipes/conversions/duralumin_block_deconstruct.json deleted file mode 100644 index 853189535..000000000 --- a/src/main/generated/data/cosmere/recipes/conversions/duralumin_block_deconstruct.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "ingredients": [ - { - "tag": "forge:storage_blocks/duralumin" - } - ], - "result": { - "item": "cosmere:duralumin_ingot", - "count": 9 - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/conversions/duralumin_item_deconstruct.json b/src/main/generated/data/cosmere/recipes/conversions/duralumin_item_deconstruct.json deleted file mode 100644 index d3f8b5b5d..000000000 --- a/src/main/generated/data/cosmere/recipes/conversions/duralumin_item_deconstruct.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "ingredients": [ - { - "tag": "forge:ingots/duralumin" - } - ], - "result": { - "item": "cosmere:duralumin_nugget", - "count": 9 - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/conversions/electrum_block_deconstruct.json b/src/main/generated/data/cosmere/recipes/conversions/electrum_block_deconstruct.json deleted file mode 100644 index a5080bc44..000000000 --- a/src/main/generated/data/cosmere/recipes/conversions/electrum_block_deconstruct.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "ingredients": [ - { - "tag": "forge:storage_blocks/electrum" - } - ], - "result": { - "item": "cosmere:electrum_ingot", - "count": 9 - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/conversions/electrum_item_deconstruct.json b/src/main/generated/data/cosmere/recipes/conversions/electrum_item_deconstruct.json deleted file mode 100644 index 1b19d13f1..000000000 --- a/src/main/generated/data/cosmere/recipes/conversions/electrum_item_deconstruct.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "ingredients": [ - { - "tag": "forge:ingots/electrum" - } - ], - "result": { - "item": "cosmere:electrum_nugget", - "count": 9 - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/conversions/harmonium_block_deconstruct.json b/src/main/generated/data/cosmere/recipes/conversions/harmonium_block_deconstruct.json deleted file mode 100644 index 79b1c06d8..000000000 --- a/src/main/generated/data/cosmere/recipes/conversions/harmonium_block_deconstruct.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "ingredients": [ - { - "tag": "forge:storage_blocks/harmonium" - } - ], - "result": { - "item": "cosmere:harmonium_ingot", - "count": 9 - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/conversions/harmonium_item_deconstruct.json b/src/main/generated/data/cosmere/recipes/conversions/harmonium_item_deconstruct.json deleted file mode 100644 index b3269d89a..000000000 --- a/src/main/generated/data/cosmere/recipes/conversions/harmonium_item_deconstruct.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "ingredients": [ - { - "tag": "forge:ingots/harmonium" - } - ], - "result": { - "item": "cosmere:harmonium_nugget", - "count": 9 - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/conversions/lead_block_deconstruct.json b/src/main/generated/data/cosmere/recipes/conversions/lead_block_deconstruct.json deleted file mode 100644 index 5df409a97..000000000 --- a/src/main/generated/data/cosmere/recipes/conversions/lead_block_deconstruct.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "ingredients": [ - { - "tag": "forge:storage_blocks/lead" - } - ], - "result": { - "item": "cosmere:lead_ingot", - "count": 9 - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/conversions/lead_item_deconstruct.json b/src/main/generated/data/cosmere/recipes/conversions/lead_item_deconstruct.json deleted file mode 100644 index 726972f90..000000000 --- a/src/main/generated/data/cosmere/recipes/conversions/lead_item_deconstruct.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "ingredients": [ - { - "tag": "forge:ingots/lead" - } - ], - "result": { - "item": "cosmere:lead_nugget", - "count": 9 - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/conversions/lerasatium_block_deconstruct.json b/src/main/generated/data/cosmere/recipes/conversions/lerasatium_block_deconstruct.json deleted file mode 100644 index d3437b756..000000000 --- a/src/main/generated/data/cosmere/recipes/conversions/lerasatium_block_deconstruct.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "ingredients": [ - { - "tag": "forge:storage_blocks/lerasatium" - } - ], - "result": { - "item": "cosmere:lerasatium_ingot", - "count": 9 - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/conversions/lerasatium_item_deconstruct.json b/src/main/generated/data/cosmere/recipes/conversions/lerasatium_item_deconstruct.json deleted file mode 100644 index df3bee5cc..000000000 --- a/src/main/generated/data/cosmere/recipes/conversions/lerasatium_item_deconstruct.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "ingredients": [ - { - "tag": "forge:ingots/lerasatium" - } - ], - "result": { - "item": "cosmere:lerasatium_nugget", - "count": 9 - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/conversions/lerasium_block_deconstruct.json b/src/main/generated/data/cosmere/recipes/conversions/lerasium_block_deconstruct.json deleted file mode 100644 index 0c4c6c8ee..000000000 --- a/src/main/generated/data/cosmere/recipes/conversions/lerasium_block_deconstruct.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "ingredients": [ - { - "tag": "forge:storage_blocks/lerasium" - } - ], - "result": { - "item": "cosmere:lerasium_ingot", - "count": 9 - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/conversions/lerasium_item_deconstruct.json b/src/main/generated/data/cosmere/recipes/conversions/lerasium_item_deconstruct.json deleted file mode 100644 index e00ae84b7..000000000 --- a/src/main/generated/data/cosmere/recipes/conversions/lerasium_item_deconstruct.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "ingredients": [ - { - "tag": "forge:ingots/lerasium" - } - ], - "result": { - "item": "cosmere:lerasium_nugget", - "count": 9 - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/conversions/malatium_block_deconstruct.json b/src/main/generated/data/cosmere/recipes/conversions/malatium_block_deconstruct.json deleted file mode 100644 index 834f0fdf3..000000000 --- a/src/main/generated/data/cosmere/recipes/conversions/malatium_block_deconstruct.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "ingredients": [ - { - "tag": "forge:storage_blocks/malatium" - } - ], - "result": { - "item": "cosmere:malatium_ingot", - "count": 9 - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/conversions/malatium_item_deconstruct.json b/src/main/generated/data/cosmere/recipes/conversions/malatium_item_deconstruct.json deleted file mode 100644 index df0965145..000000000 --- a/src/main/generated/data/cosmere/recipes/conversions/malatium_item_deconstruct.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "ingredients": [ - { - "tag": "forge:ingots/malatium" - } - ], - "result": { - "item": "cosmere:malatium_nugget", - "count": 9 - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/conversions/nickel_block_deconstruct.json b/src/main/generated/data/cosmere/recipes/conversions/nickel_block_deconstruct.json deleted file mode 100644 index 872f4282a..000000000 --- a/src/main/generated/data/cosmere/recipes/conversions/nickel_block_deconstruct.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "ingredients": [ - { - "tag": "forge:storage_blocks/nickel" - } - ], - "result": { - "item": "cosmere:nickel_ingot", - "count": 9 - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/conversions/nickel_item_deconstruct.json b/src/main/generated/data/cosmere/recipes/conversions/nickel_item_deconstruct.json deleted file mode 100644 index b74c58419..000000000 --- a/src/main/generated/data/cosmere/recipes/conversions/nickel_item_deconstruct.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "ingredients": [ - { - "tag": "forge:ingots/nickel" - } - ], - "result": { - "item": "cosmere:nickel_nugget", - "count": 9 - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/conversions/nicrosil_block_deconstruct.json b/src/main/generated/data/cosmere/recipes/conversions/nicrosil_block_deconstruct.json deleted file mode 100644 index 6623e59b1..000000000 --- a/src/main/generated/data/cosmere/recipes/conversions/nicrosil_block_deconstruct.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "ingredients": [ - { - "tag": "forge:storage_blocks/nicrosil" - } - ], - "result": { - "item": "cosmere:nicrosil_ingot", - "count": 9 - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/conversions/nicrosil_item_deconstruct.json b/src/main/generated/data/cosmere/recipes/conversions/nicrosil_item_deconstruct.json deleted file mode 100644 index bb0ed5021..000000000 --- a/src/main/generated/data/cosmere/recipes/conversions/nicrosil_item_deconstruct.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "ingredients": [ - { - "tag": "forge:ingots/nicrosil" - } - ], - "result": { - "item": "cosmere:nicrosil_nugget", - "count": 9 - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/conversions/pewter_block_deconstruct.json b/src/main/generated/data/cosmere/recipes/conversions/pewter_block_deconstruct.json deleted file mode 100644 index c148533f2..000000000 --- a/src/main/generated/data/cosmere/recipes/conversions/pewter_block_deconstruct.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "ingredients": [ - { - "tag": "forge:storage_blocks/pewter" - } - ], - "result": { - "item": "cosmere:pewter_ingot", - "count": 9 - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/conversions/pewter_item_deconstruct.json b/src/main/generated/data/cosmere/recipes/conversions/pewter_item_deconstruct.json deleted file mode 100644 index eb8c9e5db..000000000 --- a/src/main/generated/data/cosmere/recipes/conversions/pewter_item_deconstruct.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "ingredients": [ - { - "tag": "forge:ingots/pewter" - } - ], - "result": { - "item": "cosmere:pewter_nugget", - "count": 9 - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/conversions/silver_block_deconstruct.json b/src/main/generated/data/cosmere/recipes/conversions/silver_block_deconstruct.json deleted file mode 100644 index 59fb0f3de..000000000 --- a/src/main/generated/data/cosmere/recipes/conversions/silver_block_deconstruct.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "ingredients": [ - { - "tag": "forge:storage_blocks/silver" - } - ], - "result": { - "item": "cosmere:silver_ingot", - "count": 9 - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/conversions/silver_item_deconstruct.json b/src/main/generated/data/cosmere/recipes/conversions/silver_item_deconstruct.json deleted file mode 100644 index 55b2151a6..000000000 --- a/src/main/generated/data/cosmere/recipes/conversions/silver_item_deconstruct.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "ingredients": [ - { - "tag": "forge:ingots/silver" - } - ], - "result": { - "item": "cosmere:silver_nugget", - "count": 9 - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/conversions/steel_block_deconstruct.json b/src/main/generated/data/cosmere/recipes/conversions/steel_block_deconstruct.json deleted file mode 100644 index 342cd3528..000000000 --- a/src/main/generated/data/cosmere/recipes/conversions/steel_block_deconstruct.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "ingredients": [ - { - "tag": "forge:storage_blocks/steel" - } - ], - "result": { - "item": "cosmere:steel_ingot", - "count": 9 - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/conversions/steel_item_deconstruct.json b/src/main/generated/data/cosmere/recipes/conversions/steel_item_deconstruct.json deleted file mode 100644 index 228dccdd5..000000000 --- a/src/main/generated/data/cosmere/recipes/conversions/steel_item_deconstruct.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "ingredients": [ - { - "tag": "forge:ingots/steel" - } - ], - "result": { - "item": "cosmere:steel_nugget", - "count": 9 - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/conversions/tin_block_deconstruct.json b/src/main/generated/data/cosmere/recipes/conversions/tin_block_deconstruct.json deleted file mode 100644 index 4862ba6b7..000000000 --- a/src/main/generated/data/cosmere/recipes/conversions/tin_block_deconstruct.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "ingredients": [ - { - "tag": "forge:storage_blocks/tin" - } - ], - "result": { - "item": "cosmere:tin_ingot", - "count": 9 - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/conversions/tin_item_deconstruct.json b/src/main/generated/data/cosmere/recipes/conversions/tin_item_deconstruct.json deleted file mode 100644 index d5e0201e9..000000000 --- a/src/main/generated/data/cosmere/recipes/conversions/tin_item_deconstruct.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "ingredients": [ - { - "tag": "forge:ingots/tin" - } - ], - "result": { - "item": "cosmere:tin_nugget", - "count": 9 - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/conversions/zinc_block_deconstruct.json b/src/main/generated/data/cosmere/recipes/conversions/zinc_block_deconstruct.json deleted file mode 100644 index 74268649b..000000000 --- a/src/main/generated/data/cosmere/recipes/conversions/zinc_block_deconstruct.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "ingredients": [ - { - "tag": "forge:storage_blocks/zinc" - } - ], - "result": { - "item": "cosmere:zinc_ingot", - "count": 9 - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/conversions/zinc_item_deconstruct.json b/src/main/generated/data/cosmere/recipes/conversions/zinc_item_deconstruct.json deleted file mode 100644 index b34c8a0b6..000000000 --- a/src/main/generated/data/cosmere/recipes/conversions/zinc_item_deconstruct.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "ingredients": [ - { - "tag": "forge:ingots/zinc" - } - ], - "result": { - "item": "cosmere:zinc_nugget", - "count": 9 - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/copper_block.json b/src/main/generated/data/cosmere/recipes/copper_block.json deleted file mode 100644 index d355ac473..000000000 --- a/src/main/generated/data/cosmere/recipes/copper_block.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - "III", - "III", - "III" - ], - "key": { - "I": { - "tag": "forge:ingots/copper" - } - }, - "result": { - "item": "cosmere:copper_block" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/copper_bracelet_metalmind.json b/src/main/generated/data/cosmere/recipes/copper_bracelet_metalmind.json deleted file mode 100644 index be3c4ff05..000000000 --- a/src/main/generated/data/cosmere/recipes/copper_bracelet_metalmind.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "group": "bracelet", - "pattern": [ - " X ", - "X X", - "X X" - ], - "key": { - "X": { - "tag": "forge:ingots/copper" - } - }, - "result": { - "item": "cosmere:copper_bracelet_metalmind" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/copper_ingot.json b/src/main/generated/data/cosmere/recipes/copper_ingot.json deleted file mode 100644 index fdf7ea7dd..000000000 --- a/src/main/generated/data/cosmere/recipes/copper_ingot.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - "III", - "III", - "III" - ], - "key": { - "I": { - "tag": "forge:nuggets/copper" - } - }, - "result": { - "item": "cosmere:copper_ingot" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/copper_ingot_from_blasting_copper_ore.json b/src/main/generated/data/cosmere/recipes/copper_ingot_from_blasting_copper_ore.json deleted file mode 100644 index 82bdf004c..000000000 --- a/src/main/generated/data/cosmere/recipes/copper_ingot_from_blasting_copper_ore.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:blasting", - "ingredient": { - "item": "cosmere:copper_ore" - }, - "result": "cosmere:copper_ingot", - "experience": 1.0, - "cookingtime": 100 -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/copper_ingot_from_blasting_raw_copper_ore.json b/src/main/generated/data/cosmere/recipes/copper_ingot_from_blasting_raw_copper_ore.json deleted file mode 100644 index 892a4de94..000000000 --- a/src/main/generated/data/cosmere/recipes/copper_ingot_from_blasting_raw_copper_ore.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:blasting", - "ingredient": { - "item": "cosmere:raw_copper_ore" - }, - "result": "cosmere:copper_ingot", - "experience": 1.0, - "cookingtime": 100 -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/copper_ingot_from_smelting_copper_ore.json b/src/main/generated/data/cosmere/recipes/copper_ingot_from_smelting_copper_ore.json deleted file mode 100644 index 3398391e0..000000000 --- a/src/main/generated/data/cosmere/recipes/copper_ingot_from_smelting_copper_ore.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:smelting", - "ingredient": { - "item": "cosmere:copper_ore" - }, - "result": "cosmere:copper_ingot", - "experience": 1.0, - "cookingtime": 200 -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/copper_ingot_from_smelting_raw_copper_ore.json b/src/main/generated/data/cosmere/recipes/copper_ingot_from_smelting_raw_copper_ore.json deleted file mode 100644 index 890960007..000000000 --- a/src/main/generated/data/cosmere/recipes/copper_ingot_from_smelting_raw_copper_ore.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:smelting", - "ingredient": { - "item": "cosmere:raw_copper_ore" - }, - "result": "cosmere:copper_ingot", - "experience": 1.0, - "cookingtime": 200 -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/copper_necklace_metalmind.json b/src/main/generated/data/cosmere/recipes/copper_necklace_metalmind.json deleted file mode 100644 index 2bed7c92b..000000000 --- a/src/main/generated/data/cosmere/recipes/copper_necklace_metalmind.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "group": "necklace", - "pattern": [ - "XXX", - "X X", - " X " - ], - "key": { - "X": { - "tag": "forge:ingots/copper" - } - }, - "result": { - "item": "cosmere:copper_necklace_metalmind" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/copper_ring_metalmind.json b/src/main/generated/data/cosmere/recipes/copper_ring_metalmind.json deleted file mode 100644 index a87ad8c77..000000000 --- a/src/main/generated/data/cosmere/recipes/copper_ring_metalmind.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "group": "ring", - "pattern": [ - " X ", - "X X", - " X " - ], - "key": { - "X": { - "tag": "forge:ingots/copper" - } - }, - "result": { - "item": "cosmere:copper_ring_metalmind" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/copper_spike.json b/src/main/generated/data/cosmere/recipes/copper_spike.json deleted file mode 100644 index 9a0e5f5cb..000000000 --- a/src/main/generated/data/cosmere/recipes/copper_spike.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "group": "spike", - "pattern": [ - " X ", - " X " - ], - "key": { - "X": { - "tag": "forge:ingots/copper" - } - }, - "result": { - "item": "cosmere:copper_spike" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/duralumin_block.json b/src/main/generated/data/cosmere/recipes/duralumin_block.json deleted file mode 100644 index b97d4f801..000000000 --- a/src/main/generated/data/cosmere/recipes/duralumin_block.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - "III", - "III", - "III" - ], - "key": { - "I": { - "tag": "forge:ingots/duralumin" - } - }, - "result": { - "item": "cosmere:duralumin_block" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/duralumin_bracelet_metalmind.json b/src/main/generated/data/cosmere/recipes/duralumin_bracelet_metalmind.json deleted file mode 100644 index f1cacb941..000000000 --- a/src/main/generated/data/cosmere/recipes/duralumin_bracelet_metalmind.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "group": "bracelet", - "pattern": [ - " X ", - "X X", - "X X" - ], - "key": { - "X": { - "tag": "forge:ingots/duralumin" - } - }, - "result": { - "item": "cosmere:duralumin_bracelet_metalmind" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/duralumin_ingot.json b/src/main/generated/data/cosmere/recipes/duralumin_ingot.json deleted file mode 100644 index b8d1f3db8..000000000 --- a/src/main/generated/data/cosmere/recipes/duralumin_ingot.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - "III", - "III", - "III" - ], - "key": { - "I": { - "tag": "forge:nuggets/duralumin" - } - }, - "result": { - "item": "cosmere:duralumin_ingot" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/duralumin_ingot_from_blasting_duralumin_blend.json b/src/main/generated/data/cosmere/recipes/duralumin_ingot_from_blasting_duralumin_blend.json deleted file mode 100644 index 1391f4cd9..000000000 --- a/src/main/generated/data/cosmere/recipes/duralumin_ingot_from_blasting_duralumin_blend.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:blasting", - "ingredient": { - "item": "cosmere:duralumin_blend" - }, - "result": "cosmere:duralumin_ingot", - "experience": 1.0, - "cookingtime": 100 -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/duralumin_ingot_from_smelting_duralumin_blend.json b/src/main/generated/data/cosmere/recipes/duralumin_ingot_from_smelting_duralumin_blend.json deleted file mode 100644 index fa1d48827..000000000 --- a/src/main/generated/data/cosmere/recipes/duralumin_ingot_from_smelting_duralumin_blend.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:smelting", - "ingredient": { - "item": "cosmere:duralumin_blend" - }, - "result": "cosmere:duralumin_ingot", - "experience": 1.0, - "cookingtime": 200 -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/duralumin_necklace_metalmind.json b/src/main/generated/data/cosmere/recipes/duralumin_necklace_metalmind.json deleted file mode 100644 index 02345f688..000000000 --- a/src/main/generated/data/cosmere/recipes/duralumin_necklace_metalmind.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "group": "necklace", - "pattern": [ - "XXX", - "X X", - " X " - ], - "key": { - "X": { - "tag": "forge:ingots/duralumin" - } - }, - "result": { - "item": "cosmere:duralumin_necklace_metalmind" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/duralumin_ring_metalmind.json b/src/main/generated/data/cosmere/recipes/duralumin_ring_metalmind.json deleted file mode 100644 index ae5105a0f..000000000 --- a/src/main/generated/data/cosmere/recipes/duralumin_ring_metalmind.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "group": "ring", - "pattern": [ - " X ", - "X X", - " X " - ], - "key": { - "X": { - "tag": "forge:ingots/duralumin" - } - }, - "result": { - "item": "cosmere:duralumin_ring_metalmind" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/duralumin_spike.json b/src/main/generated/data/cosmere/recipes/duralumin_spike.json deleted file mode 100644 index 562af9da2..000000000 --- a/src/main/generated/data/cosmere/recipes/duralumin_spike.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "group": "spike", - "pattern": [ - " X ", - " X " - ], - "key": { - "X": { - "tag": "forge:ingots/duralumin" - } - }, - "result": { - "item": "cosmere:duralumin_spike" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/electrum_block.json b/src/main/generated/data/cosmere/recipes/electrum_block.json deleted file mode 100644 index c2631e0b2..000000000 --- a/src/main/generated/data/cosmere/recipes/electrum_block.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - "III", - "III", - "III" - ], - "key": { - "I": { - "tag": "forge:ingots/electrum" - } - }, - "result": { - "item": "cosmere:electrum_block" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/electrum_bracelet_metalmind.json b/src/main/generated/data/cosmere/recipes/electrum_bracelet_metalmind.json deleted file mode 100644 index 4130e1944..000000000 --- a/src/main/generated/data/cosmere/recipes/electrum_bracelet_metalmind.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "group": "bracelet", - "pattern": [ - " X ", - "X X", - "X X" - ], - "key": { - "X": { - "tag": "forge:ingots/electrum" - } - }, - "result": { - "item": "cosmere:electrum_bracelet_metalmind" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/electrum_ingot.json b/src/main/generated/data/cosmere/recipes/electrum_ingot.json deleted file mode 100644 index c82185449..000000000 --- a/src/main/generated/data/cosmere/recipes/electrum_ingot.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - "III", - "III", - "III" - ], - "key": { - "I": { - "tag": "forge:nuggets/electrum" - } - }, - "result": { - "item": "cosmere:electrum_ingot" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/electrum_ingot_from_blasting_electrum_blend.json b/src/main/generated/data/cosmere/recipes/electrum_ingot_from_blasting_electrum_blend.json deleted file mode 100644 index 117aed4b3..000000000 --- a/src/main/generated/data/cosmere/recipes/electrum_ingot_from_blasting_electrum_blend.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:blasting", - "ingredient": { - "item": "cosmere:electrum_blend" - }, - "result": "cosmere:electrum_ingot", - "experience": 1.0, - "cookingtime": 100 -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/electrum_ingot_from_smelting_electrum_blend.json b/src/main/generated/data/cosmere/recipes/electrum_ingot_from_smelting_electrum_blend.json deleted file mode 100644 index d3dc3315d..000000000 --- a/src/main/generated/data/cosmere/recipes/electrum_ingot_from_smelting_electrum_blend.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:smelting", - "ingredient": { - "item": "cosmere:electrum_blend" - }, - "result": "cosmere:electrum_ingot", - "experience": 1.0, - "cookingtime": 200 -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/electrum_necklace_metalmind.json b/src/main/generated/data/cosmere/recipes/electrum_necklace_metalmind.json deleted file mode 100644 index 19980ca6c..000000000 --- a/src/main/generated/data/cosmere/recipes/electrum_necklace_metalmind.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "group": "necklace", - "pattern": [ - "XXX", - "X X", - " X " - ], - "key": { - "X": { - "tag": "forge:ingots/electrum" - } - }, - "result": { - "item": "cosmere:electrum_necklace_metalmind" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/electrum_ring_metalmind.json b/src/main/generated/data/cosmere/recipes/electrum_ring_metalmind.json deleted file mode 100644 index 55e328e26..000000000 --- a/src/main/generated/data/cosmere/recipes/electrum_ring_metalmind.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "group": "ring", - "pattern": [ - " X ", - "X X", - " X " - ], - "key": { - "X": { - "tag": "forge:ingots/electrum" - } - }, - "result": { - "item": "cosmere:electrum_ring_metalmind" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/electrum_spike.json b/src/main/generated/data/cosmere/recipes/electrum_spike.json deleted file mode 100644 index 98c892dff..000000000 --- a/src/main/generated/data/cosmere/recipes/electrum_spike.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "group": "spike", - "pattern": [ - " X ", - " X " - ], - "key": { - "X": { - "tag": "forge:ingots/electrum" - } - }, - "result": { - "item": "cosmere:electrum_spike" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/gold_bracelet_metalmind.json b/src/main/generated/data/cosmere/recipes/gold_bracelet_metalmind.json deleted file mode 100644 index 32448a47b..000000000 --- a/src/main/generated/data/cosmere/recipes/gold_bracelet_metalmind.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "group": "bracelet", - "pattern": [ - " X ", - "X X", - "X X" - ], - "key": { - "X": { - "tag": "forge:ingots/gold" - } - }, - "result": { - "item": "cosmere:gold_bracelet_metalmind" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/gold_necklace_metalmind.json b/src/main/generated/data/cosmere/recipes/gold_necklace_metalmind.json deleted file mode 100644 index 8390da860..000000000 --- a/src/main/generated/data/cosmere/recipes/gold_necklace_metalmind.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "group": "necklace", - "pattern": [ - "XXX", - "X X", - " X " - ], - "key": { - "X": { - "tag": "forge:ingots/gold" - } - }, - "result": { - "item": "cosmere:gold_necklace_metalmind" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/gold_ring_metalmind.json b/src/main/generated/data/cosmere/recipes/gold_ring_metalmind.json deleted file mode 100644 index 3a57a05c4..000000000 --- a/src/main/generated/data/cosmere/recipes/gold_ring_metalmind.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "group": "ring", - "pattern": [ - " X ", - "X X", - " X " - ], - "key": { - "X": { - "tag": "forge:ingots/gold" - } - }, - "result": { - "item": "cosmere:gold_ring_metalmind" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/gold_spike.json b/src/main/generated/data/cosmere/recipes/gold_spike.json deleted file mode 100644 index ae979cc33..000000000 --- a/src/main/generated/data/cosmere/recipes/gold_spike.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "group": "spike", - "pattern": [ - " X ", - " X " - ], - "key": { - "X": { - "tag": "forge:ingots/gold" - } - }, - "result": { - "item": "cosmere:gold_spike" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/guide_from_blasting_iron_spike.json b/src/main/generated/data/cosmere/recipes/guide_from_blasting_iron_spike.json deleted file mode 100644 index 53375d22c..000000000 --- a/src/main/generated/data/cosmere/recipes/guide_from_blasting_iron_spike.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:blasting", - "ingredient": { - "item": "cosmere:iron_spike" - }, - "result": "cosmere:guide", - "experience": 1.0, - "cookingtime": 100 -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/guide_from_smelting_iron_spike.json b/src/main/generated/data/cosmere/recipes/guide_from_smelting_iron_spike.json deleted file mode 100644 index 6d5bb8406..000000000 --- a/src/main/generated/data/cosmere/recipes/guide_from_smelting_iron_spike.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:smelting", - "ingredient": { - "item": "cosmere:iron_spike" - }, - "result": "cosmere:guide", - "experience": 1.0, - "cookingtime": 200 -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/harmonium_block.json b/src/main/generated/data/cosmere/recipes/harmonium_block.json deleted file mode 100644 index 03b6a7484..000000000 --- a/src/main/generated/data/cosmere/recipes/harmonium_block.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - "III", - "III", - "III" - ], - "key": { - "I": { - "tag": "forge:ingots/harmonium" - } - }, - "result": { - "item": "cosmere:harmonium_block" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/harmonium_ingot.json b/src/main/generated/data/cosmere/recipes/harmonium_ingot.json deleted file mode 100644 index cf3879f3b..000000000 --- a/src/main/generated/data/cosmere/recipes/harmonium_ingot.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - "III", - "III", - "III" - ], - "key": { - "I": { - "tag": "forge:nuggets/harmonium" - } - }, - "result": { - "item": "cosmere:harmonium_ingot" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/iron_bracelet_metalmind.json b/src/main/generated/data/cosmere/recipes/iron_bracelet_metalmind.json deleted file mode 100644 index 152fa6bd8..000000000 --- a/src/main/generated/data/cosmere/recipes/iron_bracelet_metalmind.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "group": "bracelet", - "pattern": [ - " X ", - "X X", - "X X" - ], - "key": { - "X": { - "tag": "forge:ingots/iron" - } - }, - "result": { - "item": "cosmere:iron_bracelet_metalmind" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/iron_necklace_metalmind.json b/src/main/generated/data/cosmere/recipes/iron_necklace_metalmind.json deleted file mode 100644 index d37945343..000000000 --- a/src/main/generated/data/cosmere/recipes/iron_necklace_metalmind.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "group": "necklace", - "pattern": [ - "XXX", - "X X", - " X " - ], - "key": { - "X": { - "tag": "forge:ingots/iron" - } - }, - "result": { - "item": "cosmere:iron_necklace_metalmind" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/iron_ring_metalmind.json b/src/main/generated/data/cosmere/recipes/iron_ring_metalmind.json deleted file mode 100644 index ec834a8bc..000000000 --- a/src/main/generated/data/cosmere/recipes/iron_ring_metalmind.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "group": "ring", - "pattern": [ - " X ", - "X X", - " X " - ], - "key": { - "X": { - "tag": "forge:ingots/iron" - } - }, - "result": { - "item": "cosmere:iron_ring_metalmind" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/iron_spike.json b/src/main/generated/data/cosmere/recipes/iron_spike.json deleted file mode 100644 index e0b6f117b..000000000 --- a/src/main/generated/data/cosmere/recipes/iron_spike.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "group": "spike", - "pattern": [ - " X ", - " X " - ], - "key": { - "X": { - "tag": "forge:ingots/iron" - } - }, - "result": { - "item": "cosmere:iron_spike" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/lead_block.json b/src/main/generated/data/cosmere/recipes/lead_block.json deleted file mode 100644 index 9c81acd80..000000000 --- a/src/main/generated/data/cosmere/recipes/lead_block.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - "III", - "III", - "III" - ], - "key": { - "I": { - "tag": "forge:ingots/lead" - } - }, - "result": { - "item": "cosmere:lead_block" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/lead_ingot.json b/src/main/generated/data/cosmere/recipes/lead_ingot.json deleted file mode 100644 index 535b5eb62..000000000 --- a/src/main/generated/data/cosmere/recipes/lead_ingot.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - "III", - "III", - "III" - ], - "key": { - "I": { - "tag": "forge:nuggets/lead" - } - }, - "result": { - "item": "cosmere:lead_ingot" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/lead_ingot_from_blasting_lead_ore.json b/src/main/generated/data/cosmere/recipes/lead_ingot_from_blasting_lead_ore.json deleted file mode 100644 index 887b6707d..000000000 --- a/src/main/generated/data/cosmere/recipes/lead_ingot_from_blasting_lead_ore.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:blasting", - "ingredient": { - "item": "cosmere:lead_ore" - }, - "result": "cosmere:lead_ingot", - "experience": 1.0, - "cookingtime": 100 -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/lead_ingot_from_blasting_raw_lead_ore.json b/src/main/generated/data/cosmere/recipes/lead_ingot_from_blasting_raw_lead_ore.json deleted file mode 100644 index 8fefc052b..000000000 --- a/src/main/generated/data/cosmere/recipes/lead_ingot_from_blasting_raw_lead_ore.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:blasting", - "ingredient": { - "item": "cosmere:raw_lead_ore" - }, - "result": "cosmere:lead_ingot", - "experience": 1.0, - "cookingtime": 100 -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/lead_ingot_from_smelting_lead_ore.json b/src/main/generated/data/cosmere/recipes/lead_ingot_from_smelting_lead_ore.json deleted file mode 100644 index 02ffca2de..000000000 --- a/src/main/generated/data/cosmere/recipes/lead_ingot_from_smelting_lead_ore.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:smelting", - "ingredient": { - "item": "cosmere:lead_ore" - }, - "result": "cosmere:lead_ingot", - "experience": 1.0, - "cookingtime": 200 -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/lead_ingot_from_smelting_raw_lead_ore.json b/src/main/generated/data/cosmere/recipes/lead_ingot_from_smelting_raw_lead_ore.json deleted file mode 100644 index d637afff0..000000000 --- a/src/main/generated/data/cosmere/recipes/lead_ingot_from_smelting_raw_lead_ore.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:smelting", - "ingredient": { - "item": "cosmere:raw_lead_ore" - }, - "result": "cosmere:lead_ingot", - "experience": 1.0, - "cookingtime": 200 -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/lerasatium_block.json b/src/main/generated/data/cosmere/recipes/lerasatium_block.json deleted file mode 100644 index d55002800..000000000 --- a/src/main/generated/data/cosmere/recipes/lerasatium_block.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - "III", - "III", - "III" - ], - "key": { - "I": { - "tag": "forge:ingots/lerasatium" - } - }, - "result": { - "item": "cosmere:lerasatium_block" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/lerasatium_ingot.json b/src/main/generated/data/cosmere/recipes/lerasatium_ingot.json deleted file mode 100644 index 4827d3f7c..000000000 --- a/src/main/generated/data/cosmere/recipes/lerasatium_ingot.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - "III", - "III", - "III" - ], - "key": { - "I": { - "tag": "forge:nuggets/lerasatium" - } - }, - "result": { - "item": "cosmere:lerasatium_ingot" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/lerasium_block.json b/src/main/generated/data/cosmere/recipes/lerasium_block.json deleted file mode 100644 index 696f4245e..000000000 --- a/src/main/generated/data/cosmere/recipes/lerasium_block.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - "III", - "III", - "III" - ], - "key": { - "I": { - "tag": "forge:ingots/lerasium" - } - }, - "result": { - "item": "cosmere:lerasium_block" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/lerasium_ingot.json b/src/main/generated/data/cosmere/recipes/lerasium_ingot.json deleted file mode 100644 index beadd85e0..000000000 --- a/src/main/generated/data/cosmere/recipes/lerasium_ingot.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - "III", - "III", - "III" - ], - "key": { - "I": { - "tag": "forge:nuggets/lerasium" - } - }, - "result": { - "item": "cosmere:lerasium_ingot" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/lerasium_spike.json b/src/main/generated/data/cosmere/recipes/lerasium_spike.json deleted file mode 100644 index fb97b796a..000000000 --- a/src/main/generated/data/cosmere/recipes/lerasium_spike.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "group": "spike", - "pattern": [ - " X ", - " X " - ], - "key": { - "X": { - "tag": "forge:ingots/lerasium" - } - }, - "result": { - "item": "cosmere:lerasium_spike" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/malatium_block.json b/src/main/generated/data/cosmere/recipes/malatium_block.json deleted file mode 100644 index 95cfd8e75..000000000 --- a/src/main/generated/data/cosmere/recipes/malatium_block.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - "III", - "III", - "III" - ], - "key": { - "I": { - "tag": "forge:ingots/malatium" - } - }, - "result": { - "item": "cosmere:malatium_block" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/malatium_ingot.json b/src/main/generated/data/cosmere/recipes/malatium_ingot.json deleted file mode 100644 index 84b179dd0..000000000 --- a/src/main/generated/data/cosmere/recipes/malatium_ingot.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - "III", - "III", - "III" - ], - "key": { - "I": { - "tag": "forge:nuggets/malatium" - } - }, - "result": { - "item": "cosmere:malatium_ingot" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/nickel_block.json b/src/main/generated/data/cosmere/recipes/nickel_block.json deleted file mode 100644 index cf4470dcc..000000000 --- a/src/main/generated/data/cosmere/recipes/nickel_block.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - "III", - "III", - "III" - ], - "key": { - "I": { - "tag": "forge:ingots/nickel" - } - }, - "result": { - "item": "cosmere:nickel_block" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/nickel_ingot.json b/src/main/generated/data/cosmere/recipes/nickel_ingot.json deleted file mode 100644 index 2aa6ba58b..000000000 --- a/src/main/generated/data/cosmere/recipes/nickel_ingot.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - "III", - "III", - "III" - ], - "key": { - "I": { - "tag": "forge:nuggets/nickel" - } - }, - "result": { - "item": "cosmere:nickel_ingot" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/nickel_ingot_from_blasting_nickel_ore.json b/src/main/generated/data/cosmere/recipes/nickel_ingot_from_blasting_nickel_ore.json deleted file mode 100644 index b10744453..000000000 --- a/src/main/generated/data/cosmere/recipes/nickel_ingot_from_blasting_nickel_ore.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:blasting", - "ingredient": { - "item": "cosmere:nickel_ore" - }, - "result": "cosmere:nickel_ingot", - "experience": 1.0, - "cookingtime": 100 -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/nickel_ingot_from_blasting_raw_nickel_ore.json b/src/main/generated/data/cosmere/recipes/nickel_ingot_from_blasting_raw_nickel_ore.json deleted file mode 100644 index 07a04a9b0..000000000 --- a/src/main/generated/data/cosmere/recipes/nickel_ingot_from_blasting_raw_nickel_ore.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:blasting", - "ingredient": { - "item": "cosmere:raw_nickel_ore" - }, - "result": "cosmere:nickel_ingot", - "experience": 1.0, - "cookingtime": 100 -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/nickel_ingot_from_smelting_nickel_ore.json b/src/main/generated/data/cosmere/recipes/nickel_ingot_from_smelting_nickel_ore.json deleted file mode 100644 index d964cec4d..000000000 --- a/src/main/generated/data/cosmere/recipes/nickel_ingot_from_smelting_nickel_ore.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:smelting", - "ingredient": { - "item": "cosmere:nickel_ore" - }, - "result": "cosmere:nickel_ingot", - "experience": 1.0, - "cookingtime": 200 -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/nickel_ingot_from_smelting_raw_nickel_ore.json b/src/main/generated/data/cosmere/recipes/nickel_ingot_from_smelting_raw_nickel_ore.json deleted file mode 100644 index 0acc69a8c..000000000 --- a/src/main/generated/data/cosmere/recipes/nickel_ingot_from_smelting_raw_nickel_ore.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:smelting", - "ingredient": { - "item": "cosmere:raw_nickel_ore" - }, - "result": "cosmere:nickel_ingot", - "experience": 1.0, - "cookingtime": 200 -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/nicrosil_block.json b/src/main/generated/data/cosmere/recipes/nicrosil_block.json deleted file mode 100644 index 52a549d27..000000000 --- a/src/main/generated/data/cosmere/recipes/nicrosil_block.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - "III", - "III", - "III" - ], - "key": { - "I": { - "tag": "forge:ingots/nicrosil" - } - }, - "result": { - "item": "cosmere:nicrosil_block" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/nicrosil_bracelet_metalmind.json b/src/main/generated/data/cosmere/recipes/nicrosil_bracelet_metalmind.json deleted file mode 100644 index d054b45b5..000000000 --- a/src/main/generated/data/cosmere/recipes/nicrosil_bracelet_metalmind.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "group": "bracelet", - "pattern": [ - " X ", - "X X", - "X X" - ], - "key": { - "X": { - "tag": "forge:ingots/nicrosil" - } - }, - "result": { - "item": "cosmere:nicrosil_bracelet_metalmind" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/nicrosil_ingot.json b/src/main/generated/data/cosmere/recipes/nicrosil_ingot.json deleted file mode 100644 index 108f6a039..000000000 --- a/src/main/generated/data/cosmere/recipes/nicrosil_ingot.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - "III", - "III", - "III" - ], - "key": { - "I": { - "tag": "forge:nuggets/nicrosil" - } - }, - "result": { - "item": "cosmere:nicrosil_ingot" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/nicrosil_ingot_from_blasting_nicrosil_blend.json b/src/main/generated/data/cosmere/recipes/nicrosil_ingot_from_blasting_nicrosil_blend.json deleted file mode 100644 index 1fe7a0a5e..000000000 --- a/src/main/generated/data/cosmere/recipes/nicrosil_ingot_from_blasting_nicrosil_blend.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:blasting", - "ingredient": { - "item": "cosmere:nicrosil_blend" - }, - "result": "cosmere:nicrosil_ingot", - "experience": 1.0, - "cookingtime": 100 -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/nicrosil_ingot_from_smelting_nicrosil_blend.json b/src/main/generated/data/cosmere/recipes/nicrosil_ingot_from_smelting_nicrosil_blend.json deleted file mode 100644 index cdbc2822a..000000000 --- a/src/main/generated/data/cosmere/recipes/nicrosil_ingot_from_smelting_nicrosil_blend.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:smelting", - "ingredient": { - "item": "cosmere:nicrosil_blend" - }, - "result": "cosmere:nicrosil_ingot", - "experience": 1.0, - "cookingtime": 200 -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/nicrosil_necklace_metalmind.json b/src/main/generated/data/cosmere/recipes/nicrosil_necklace_metalmind.json deleted file mode 100644 index 38f015ce6..000000000 --- a/src/main/generated/data/cosmere/recipes/nicrosil_necklace_metalmind.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "group": "necklace", - "pattern": [ - "XXX", - "X X", - " X " - ], - "key": { - "X": { - "tag": "forge:ingots/nicrosil" - } - }, - "result": { - "item": "cosmere:nicrosil_necklace_metalmind" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/nicrosil_ring_metalmind.json b/src/main/generated/data/cosmere/recipes/nicrosil_ring_metalmind.json deleted file mode 100644 index 9808fcd6c..000000000 --- a/src/main/generated/data/cosmere/recipes/nicrosil_ring_metalmind.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "group": "ring", - "pattern": [ - " X ", - "X X", - " X " - ], - "key": { - "X": { - "tag": "forge:ingots/nicrosil" - } - }, - "result": { - "item": "cosmere:nicrosil_ring_metalmind" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/nicrosil_spike.json b/src/main/generated/data/cosmere/recipes/nicrosil_spike.json deleted file mode 100644 index 807d609ba..000000000 --- a/src/main/generated/data/cosmere/recipes/nicrosil_spike.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "group": "spike", - "pattern": [ - " X ", - " X " - ], - "key": { - "X": { - "tag": "forge:ingots/nicrosil" - } - }, - "result": { - "item": "cosmere:nicrosil_spike" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/pewter_block.json b/src/main/generated/data/cosmere/recipes/pewter_block.json deleted file mode 100644 index 4d51e46e5..000000000 --- a/src/main/generated/data/cosmere/recipes/pewter_block.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - "III", - "III", - "III" - ], - "key": { - "I": { - "tag": "forge:ingots/pewter" - } - }, - "result": { - "item": "cosmere:pewter_block" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/pewter_bracelet_metalmind.json b/src/main/generated/data/cosmere/recipes/pewter_bracelet_metalmind.json deleted file mode 100644 index 8468cd911..000000000 --- a/src/main/generated/data/cosmere/recipes/pewter_bracelet_metalmind.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "group": "bracelet", - "pattern": [ - " X ", - "X X", - "X X" - ], - "key": { - "X": { - "tag": "forge:ingots/pewter" - } - }, - "result": { - "item": "cosmere:pewter_bracelet_metalmind" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/pewter_ingot.json b/src/main/generated/data/cosmere/recipes/pewter_ingot.json deleted file mode 100644 index 1838d0ef2..000000000 --- a/src/main/generated/data/cosmere/recipes/pewter_ingot.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - "III", - "III", - "III" - ], - "key": { - "I": { - "tag": "forge:nuggets/pewter" - } - }, - "result": { - "item": "cosmere:pewter_ingot" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/pewter_ingot_from_blasting_pewter_blend.json b/src/main/generated/data/cosmere/recipes/pewter_ingot_from_blasting_pewter_blend.json deleted file mode 100644 index edb0f4dd8..000000000 --- a/src/main/generated/data/cosmere/recipes/pewter_ingot_from_blasting_pewter_blend.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:blasting", - "ingredient": { - "item": "cosmere:pewter_blend" - }, - "result": "cosmere:pewter_ingot", - "experience": 1.0, - "cookingtime": 100 -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/pewter_ingot_from_smelting_pewter_blend.json b/src/main/generated/data/cosmere/recipes/pewter_ingot_from_smelting_pewter_blend.json deleted file mode 100644 index 7822a95a1..000000000 --- a/src/main/generated/data/cosmere/recipes/pewter_ingot_from_smelting_pewter_blend.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:smelting", - "ingredient": { - "item": "cosmere:pewter_blend" - }, - "result": "cosmere:pewter_ingot", - "experience": 1.0, - "cookingtime": 200 -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/pewter_necklace_metalmind.json b/src/main/generated/data/cosmere/recipes/pewter_necklace_metalmind.json deleted file mode 100644 index 825b37942..000000000 --- a/src/main/generated/data/cosmere/recipes/pewter_necklace_metalmind.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "group": "necklace", - "pattern": [ - "XXX", - "X X", - " X " - ], - "key": { - "X": { - "tag": "forge:ingots/pewter" - } - }, - "result": { - "item": "cosmere:pewter_necklace_metalmind" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/pewter_ring_metalmind.json b/src/main/generated/data/cosmere/recipes/pewter_ring_metalmind.json deleted file mode 100644 index 3a273fe4c..000000000 --- a/src/main/generated/data/cosmere/recipes/pewter_ring_metalmind.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "group": "ring", - "pattern": [ - " X ", - "X X", - " X " - ], - "key": { - "X": { - "tag": "forge:ingots/pewter" - } - }, - "result": { - "item": "cosmere:pewter_ring_metalmind" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/pewter_spike.json b/src/main/generated/data/cosmere/recipes/pewter_spike.json deleted file mode 100644 index e73106b70..000000000 --- a/src/main/generated/data/cosmere/recipes/pewter_spike.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "group": "spike", - "pattern": [ - " X ", - " X " - ], - "key": { - "X": { - "tag": "forge:ingots/pewter" - } - }, - "result": { - "item": "cosmere:pewter_spike" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/silver_block.json b/src/main/generated/data/cosmere/recipes/silver_block.json deleted file mode 100644 index e52c4e588..000000000 --- a/src/main/generated/data/cosmere/recipes/silver_block.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - "III", - "III", - "III" - ], - "key": { - "I": { - "tag": "forge:ingots/silver" - } - }, - "result": { - "item": "cosmere:silver_block" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/silver_ingot.json b/src/main/generated/data/cosmere/recipes/silver_ingot.json deleted file mode 100644 index 1509eb0f9..000000000 --- a/src/main/generated/data/cosmere/recipes/silver_ingot.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - "III", - "III", - "III" - ], - "key": { - "I": { - "tag": "forge:nuggets/silver" - } - }, - "result": { - "item": "cosmere:silver_ingot" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/silver_ingot_from_blasting_raw_silver_ore.json b/src/main/generated/data/cosmere/recipes/silver_ingot_from_blasting_raw_silver_ore.json deleted file mode 100644 index a9a32803d..000000000 --- a/src/main/generated/data/cosmere/recipes/silver_ingot_from_blasting_raw_silver_ore.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:blasting", - "ingredient": { - "item": "cosmere:raw_silver_ore" - }, - "result": "cosmere:silver_ingot", - "experience": 1.0, - "cookingtime": 100 -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/silver_ingot_from_blasting_silver_ore.json b/src/main/generated/data/cosmere/recipes/silver_ingot_from_blasting_silver_ore.json deleted file mode 100644 index 8edf81fa9..000000000 --- a/src/main/generated/data/cosmere/recipes/silver_ingot_from_blasting_silver_ore.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:blasting", - "ingredient": { - "item": "cosmere:silver_ore" - }, - "result": "cosmere:silver_ingot", - "experience": 1.0, - "cookingtime": 100 -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/silver_ingot_from_smelting_raw_silver_ore.json b/src/main/generated/data/cosmere/recipes/silver_ingot_from_smelting_raw_silver_ore.json deleted file mode 100644 index 828941b6d..000000000 --- a/src/main/generated/data/cosmere/recipes/silver_ingot_from_smelting_raw_silver_ore.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:smelting", - "ingredient": { - "item": "cosmere:raw_silver_ore" - }, - "result": "cosmere:silver_ingot", - "experience": 1.0, - "cookingtime": 200 -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/silver_ingot_from_smelting_silver_ore.json b/src/main/generated/data/cosmere/recipes/silver_ingot_from_smelting_silver_ore.json deleted file mode 100644 index 6b193e3eb..000000000 --- a/src/main/generated/data/cosmere/recipes/silver_ingot_from_smelting_silver_ore.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:smelting", - "ingredient": { - "item": "cosmere:silver_ore" - }, - "result": "cosmere:silver_ingot", - "experience": 1.0, - "cookingtime": 200 -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/steel_block.json b/src/main/generated/data/cosmere/recipes/steel_block.json deleted file mode 100644 index f3f12d159..000000000 --- a/src/main/generated/data/cosmere/recipes/steel_block.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - "III", - "III", - "III" - ], - "key": { - "I": { - "tag": "forge:ingots/steel" - } - }, - "result": { - "item": "cosmere:steel_block" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/steel_bracelet_metalmind.json b/src/main/generated/data/cosmere/recipes/steel_bracelet_metalmind.json deleted file mode 100644 index 6b6625220..000000000 --- a/src/main/generated/data/cosmere/recipes/steel_bracelet_metalmind.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "group": "bracelet", - "pattern": [ - " X ", - "X X", - "X X" - ], - "key": { - "X": { - "tag": "forge:ingots/steel" - } - }, - "result": { - "item": "cosmere:steel_bracelet_metalmind" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/steel_ingot.json b/src/main/generated/data/cosmere/recipes/steel_ingot.json deleted file mode 100644 index ac1b1370a..000000000 --- a/src/main/generated/data/cosmere/recipes/steel_ingot.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - "III", - "III", - "III" - ], - "key": { - "I": { - "tag": "forge:nuggets/steel" - } - }, - "result": { - "item": "cosmere:steel_ingot" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/steel_ingot_from_blasting_steel_blend.json b/src/main/generated/data/cosmere/recipes/steel_ingot_from_blasting_steel_blend.json deleted file mode 100644 index b00205db9..000000000 --- a/src/main/generated/data/cosmere/recipes/steel_ingot_from_blasting_steel_blend.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:blasting", - "ingredient": { - "item": "cosmere:steel_blend" - }, - "result": "cosmere:steel_ingot", - "experience": 1.0, - "cookingtime": 100 -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/steel_ingot_from_smelting_steel_blend.json b/src/main/generated/data/cosmere/recipes/steel_ingot_from_smelting_steel_blend.json deleted file mode 100644 index 71facd737..000000000 --- a/src/main/generated/data/cosmere/recipes/steel_ingot_from_smelting_steel_blend.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:smelting", - "ingredient": { - "item": "cosmere:steel_blend" - }, - "result": "cosmere:steel_ingot", - "experience": 1.0, - "cookingtime": 200 -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/steel_necklace_metalmind.json b/src/main/generated/data/cosmere/recipes/steel_necklace_metalmind.json deleted file mode 100644 index f75ec6a39..000000000 --- a/src/main/generated/data/cosmere/recipes/steel_necklace_metalmind.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "group": "necklace", - "pattern": [ - "XXX", - "X X", - " X " - ], - "key": { - "X": { - "tag": "forge:ingots/steel" - } - }, - "result": { - "item": "cosmere:steel_necklace_metalmind" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/steel_ring_metalmind.json b/src/main/generated/data/cosmere/recipes/steel_ring_metalmind.json deleted file mode 100644 index 98c079a1d..000000000 --- a/src/main/generated/data/cosmere/recipes/steel_ring_metalmind.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "group": "ring", - "pattern": [ - " X ", - "X X", - " X " - ], - "key": { - "X": { - "tag": "forge:ingots/steel" - } - }, - "result": { - "item": "cosmere:steel_ring_metalmind" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/steel_spike.json b/src/main/generated/data/cosmere/recipes/steel_spike.json deleted file mode 100644 index c0e70444e..000000000 --- a/src/main/generated/data/cosmere/recipes/steel_spike.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "group": "spike", - "pattern": [ - " X ", - " X " - ], - "key": { - "X": { - "tag": "forge:ingots/steel" - } - }, - "result": { - "item": "cosmere:steel_spike" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/tin_block.json b/src/main/generated/data/cosmere/recipes/tin_block.json deleted file mode 100644 index 9e8772957..000000000 --- a/src/main/generated/data/cosmere/recipes/tin_block.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - "III", - "III", - "III" - ], - "key": { - "I": { - "tag": "forge:ingots/tin" - } - }, - "result": { - "item": "cosmere:tin_block" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/tin_bracelet_metalmind.json b/src/main/generated/data/cosmere/recipes/tin_bracelet_metalmind.json deleted file mode 100644 index 9f8c2d561..000000000 --- a/src/main/generated/data/cosmere/recipes/tin_bracelet_metalmind.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "group": "bracelet", - "pattern": [ - " X ", - "X X", - "X X" - ], - "key": { - "X": { - "tag": "forge:ingots/tin" - } - }, - "result": { - "item": "cosmere:tin_bracelet_metalmind" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/tin_ingot.json b/src/main/generated/data/cosmere/recipes/tin_ingot.json deleted file mode 100644 index 60be94fd5..000000000 --- a/src/main/generated/data/cosmere/recipes/tin_ingot.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - "III", - "III", - "III" - ], - "key": { - "I": { - "tag": "forge:nuggets/tin" - } - }, - "result": { - "item": "cosmere:tin_ingot" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/tin_ingot_from_blasting_raw_tin_ore.json b/src/main/generated/data/cosmere/recipes/tin_ingot_from_blasting_raw_tin_ore.json deleted file mode 100644 index 7363fa0b8..000000000 --- a/src/main/generated/data/cosmere/recipes/tin_ingot_from_blasting_raw_tin_ore.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:blasting", - "ingredient": { - "item": "cosmere:raw_tin_ore" - }, - "result": "cosmere:tin_ingot", - "experience": 1.0, - "cookingtime": 100 -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/tin_ingot_from_blasting_tin_ore.json b/src/main/generated/data/cosmere/recipes/tin_ingot_from_blasting_tin_ore.json deleted file mode 100644 index 017323881..000000000 --- a/src/main/generated/data/cosmere/recipes/tin_ingot_from_blasting_tin_ore.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:blasting", - "ingredient": { - "item": "cosmere:tin_ore" - }, - "result": "cosmere:tin_ingot", - "experience": 1.0, - "cookingtime": 100 -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/tin_ingot_from_smelting_raw_tin_ore.json b/src/main/generated/data/cosmere/recipes/tin_ingot_from_smelting_raw_tin_ore.json deleted file mode 100644 index ffdcc352e..000000000 --- a/src/main/generated/data/cosmere/recipes/tin_ingot_from_smelting_raw_tin_ore.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:smelting", - "ingredient": { - "item": "cosmere:raw_tin_ore" - }, - "result": "cosmere:tin_ingot", - "experience": 1.0, - "cookingtime": 200 -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/tin_ingot_from_smelting_tin_ore.json b/src/main/generated/data/cosmere/recipes/tin_ingot_from_smelting_tin_ore.json deleted file mode 100644 index e77311dc9..000000000 --- a/src/main/generated/data/cosmere/recipes/tin_ingot_from_smelting_tin_ore.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:smelting", - "ingredient": { - "item": "cosmere:tin_ore" - }, - "result": "cosmere:tin_ingot", - "experience": 1.0, - "cookingtime": 200 -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/tin_necklace_metalmind.json b/src/main/generated/data/cosmere/recipes/tin_necklace_metalmind.json deleted file mode 100644 index aedafcf43..000000000 --- a/src/main/generated/data/cosmere/recipes/tin_necklace_metalmind.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "group": "necklace", - "pattern": [ - "XXX", - "X X", - " X " - ], - "key": { - "X": { - "tag": "forge:ingots/tin" - } - }, - "result": { - "item": "cosmere:tin_necklace_metalmind" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/tin_ring_metalmind.json b/src/main/generated/data/cosmere/recipes/tin_ring_metalmind.json deleted file mode 100644 index 5ccf65ae5..000000000 --- a/src/main/generated/data/cosmere/recipes/tin_ring_metalmind.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "group": "ring", - "pattern": [ - " X ", - "X X", - " X " - ], - "key": { - "X": { - "tag": "forge:ingots/tin" - } - }, - "result": { - "item": "cosmere:tin_ring_metalmind" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/tin_spike.json b/src/main/generated/data/cosmere/recipes/tin_spike.json deleted file mode 100644 index c1550cc5a..000000000 --- a/src/main/generated/data/cosmere/recipes/tin_spike.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "group": "spike", - "pattern": [ - " X ", - " X " - ], - "key": { - "X": { - "tag": "forge:ingots/tin" - } - }, - "result": { - "item": "cosmere:tin_spike" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/vial_mixing.json b/src/main/generated/data/cosmere/recipes/vial_mixing.json deleted file mode 100644 index 2c26a0623..000000000 --- a/src/main/generated/data/cosmere/recipes/vial_mixing.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "type": "cosmere:vial_mix" -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/zinc_block.json b/src/main/generated/data/cosmere/recipes/zinc_block.json deleted file mode 100644 index 95d8eef46..000000000 --- a/src/main/generated/data/cosmere/recipes/zinc_block.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - "III", - "III", - "III" - ], - "key": { - "I": { - "tag": "forge:ingots/zinc" - } - }, - "result": { - "item": "cosmere:zinc_block" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/zinc_bracelet_metalmind.json b/src/main/generated/data/cosmere/recipes/zinc_bracelet_metalmind.json deleted file mode 100644 index 660c4cb53..000000000 --- a/src/main/generated/data/cosmere/recipes/zinc_bracelet_metalmind.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "group": "bracelet", - "pattern": [ - " X ", - "X X", - "X X" - ], - "key": { - "X": { - "tag": "forge:ingots/zinc" - } - }, - "result": { - "item": "cosmere:zinc_bracelet_metalmind" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/zinc_ingot.json b/src/main/generated/data/cosmere/recipes/zinc_ingot.json deleted file mode 100644 index 17c7183de..000000000 --- a/src/main/generated/data/cosmere/recipes/zinc_ingot.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - "III", - "III", - "III" - ], - "key": { - "I": { - "tag": "forge:nuggets/zinc" - } - }, - "result": { - "item": "cosmere:zinc_ingot" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/zinc_ingot_from_blasting_raw_zinc_ore.json b/src/main/generated/data/cosmere/recipes/zinc_ingot_from_blasting_raw_zinc_ore.json deleted file mode 100644 index 869845e20..000000000 --- a/src/main/generated/data/cosmere/recipes/zinc_ingot_from_blasting_raw_zinc_ore.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:blasting", - "ingredient": { - "item": "cosmere:raw_zinc_ore" - }, - "result": "cosmere:zinc_ingot", - "experience": 1.0, - "cookingtime": 100 -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/zinc_ingot_from_blasting_zinc_ore.json b/src/main/generated/data/cosmere/recipes/zinc_ingot_from_blasting_zinc_ore.json deleted file mode 100644 index 3e58dffcd..000000000 --- a/src/main/generated/data/cosmere/recipes/zinc_ingot_from_blasting_zinc_ore.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:blasting", - "ingredient": { - "item": "cosmere:zinc_ore" - }, - "result": "cosmere:zinc_ingot", - "experience": 1.0, - "cookingtime": 100 -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/zinc_ingot_from_smelting_raw_zinc_ore.json b/src/main/generated/data/cosmere/recipes/zinc_ingot_from_smelting_raw_zinc_ore.json deleted file mode 100644 index 6fb174e6a..000000000 --- a/src/main/generated/data/cosmere/recipes/zinc_ingot_from_smelting_raw_zinc_ore.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:smelting", - "ingredient": { - "item": "cosmere:raw_zinc_ore" - }, - "result": "cosmere:zinc_ingot", - "experience": 1.0, - "cookingtime": 200 -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/zinc_ingot_from_smelting_zinc_ore.json b/src/main/generated/data/cosmere/recipes/zinc_ingot_from_smelting_zinc_ore.json deleted file mode 100644 index c4688c16e..000000000 --- a/src/main/generated/data/cosmere/recipes/zinc_ingot_from_smelting_zinc_ore.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "minecraft:smelting", - "ingredient": { - "item": "cosmere:zinc_ore" - }, - "result": "cosmere:zinc_ingot", - "experience": 1.0, - "cookingtime": 200 -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/zinc_necklace_metalmind.json b/src/main/generated/data/cosmere/recipes/zinc_necklace_metalmind.json deleted file mode 100644 index cc89844fe..000000000 --- a/src/main/generated/data/cosmere/recipes/zinc_necklace_metalmind.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "group": "necklace", - "pattern": [ - "XXX", - "X X", - " X " - ], - "key": { - "X": { - "tag": "forge:ingots/zinc" - } - }, - "result": { - "item": "cosmere:zinc_necklace_metalmind" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/zinc_ring_metalmind.json b/src/main/generated/data/cosmere/recipes/zinc_ring_metalmind.json deleted file mode 100644 index c0209f034..000000000 --- a/src/main/generated/data/cosmere/recipes/zinc_ring_metalmind.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "group": "ring", - "pattern": [ - " X ", - "X X", - " X " - ], - "key": { - "X": { - "tag": "forge:ingots/zinc" - } - }, - "result": { - "item": "cosmere:zinc_ring_metalmind" - } -} \ No newline at end of file diff --git a/src/main/generated/data/cosmere/recipes/zinc_spike.json b/src/main/generated/data/cosmere/recipes/zinc_spike.json deleted file mode 100644 index b606df8fe..000000000 --- a/src/main/generated/data/cosmere/recipes/zinc_spike.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "group": "spike", - "pattern": [ - " X ", - " X " - ], - "key": { - "X": { - "tag": "forge:ingots/zinc" - } - }, - "result": { - "item": "cosmere:zinc_spike" - } -} \ No newline at end of file diff --git a/src/main/generated/data/curios/tags/items/bracelet.json b/src/main/generated/data/curios/tags/items/bracelet.json deleted file mode 100644 index 0d74bc4e8..000000000 --- a/src/main/generated/data/curios/tags/items/bracelet.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:iron_bracelet_metalmind", - "cosmere:steel_bracelet_metalmind", - "cosmere:tin_bracelet_metalmind", - "cosmere:pewter_bracelet_metalmind", - "cosmere:zinc_bracelet_metalmind", - "cosmere:brass_bracelet_metalmind", - "cosmere:copper_bracelet_metalmind", - "cosmere:bronze_bracelet_metalmind", - "cosmere:aluminum_bracelet_metalmind", - "cosmere:duralumin_bracelet_metalmind", - "cosmere:chromium_bracelet_metalmind", - "cosmere:nicrosil_bracelet_metalmind", - "cosmere:cadmium_bracelet_metalmind", - "cosmere:bendalloy_bracelet_metalmind", - "cosmere:gold_bracelet_metalmind", - "cosmere:electrum_bracelet_metalmind", - "cosmere:atium_bracelet_metalmind" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/curios/tags/items/curio.json b/src/main/generated/data/curios/tags/items/curio.json deleted file mode 100644 index 1e0c006e9..000000000 --- a/src/main/generated/data/curios/tags/items/curio.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:iron_spike", - "cosmere:steel_spike", - "cosmere:tin_spike", - "cosmere:pewter_spike", - "cosmere:zinc_spike", - "cosmere:brass_spike", - "cosmere:copper_spike", - "cosmere:bronze_spike", - "cosmere:aluminum_spike", - "cosmere:duralumin_spike", - "cosmere:chromium_spike", - "cosmere:nicrosil_spike", - "cosmere:cadmium_spike", - "cosmere:bendalloy_spike", - "cosmere:gold_spike", - "cosmere:electrum_spike", - "cosmere:atium_spike", - "cosmere:lerasium_spike" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/curios/tags/items/necklace.json b/src/main/generated/data/curios/tags/items/necklace.json deleted file mode 100644 index cecc4abe9..000000000 --- a/src/main/generated/data/curios/tags/items/necklace.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:iron_necklace_metalmind", - "cosmere:steel_necklace_metalmind", - "cosmere:tin_necklace_metalmind", - "cosmere:pewter_necklace_metalmind", - "cosmere:zinc_necklace_metalmind", - "cosmere:brass_necklace_metalmind", - "cosmere:copper_necklace_metalmind", - "cosmere:bronze_necklace_metalmind", - "cosmere:aluminum_necklace_metalmind", - "cosmere:duralumin_necklace_metalmind", - "cosmere:chromium_necklace_metalmind", - "cosmere:nicrosil_necklace_metalmind", - "cosmere:cadmium_necklace_metalmind", - "cosmere:bendalloy_necklace_metalmind", - "cosmere:gold_necklace_metalmind", - "cosmere:electrum_necklace_metalmind", - "cosmere:atium_necklace_metalmind" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/curios/tags/items/ring.json b/src/main/generated/data/curios/tags/items/ring.json deleted file mode 100644 index d164fc590..000000000 --- a/src/main/generated/data/curios/tags/items/ring.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:iron_ring_metalmind", - "cosmere:steel_ring_metalmind", - "cosmere:tin_ring_metalmind", - "cosmere:pewter_ring_metalmind", - "cosmere:zinc_ring_metalmind", - "cosmere:brass_ring_metalmind", - "cosmere:copper_ring_metalmind", - "cosmere:bronze_ring_metalmind", - "cosmere:aluminum_ring_metalmind", - "cosmere:duralumin_ring_metalmind", - "cosmere:chromium_ring_metalmind", - "cosmere:nicrosil_ring_metalmind", - "cosmere:cadmium_ring_metalmind", - "cosmere:bendalloy_ring_metalmind", - "cosmere:gold_ring_metalmind", - "cosmere:electrum_ring_metalmind", - "cosmere:atium_ring_metalmind" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/blocks/storage_blocks.json b/src/main/generated/data/forge/tags/blocks/storage_blocks.json deleted file mode 100644 index d0aa6331c..000000000 --- a/src/main/generated/data/forge/tags/blocks/storage_blocks.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:steel_block", - "cosmere:tin_block", - "cosmere:pewter_block", - "cosmere:zinc_block", - "cosmere:brass_block", - "cosmere:copper_block", - "cosmere:bronze_block", - "cosmere:aluminum_block", - "cosmere:duralumin_block", - "cosmere:chromium_block", - "cosmere:nicrosil_block", - "cosmere:cadmium_block", - "cosmere:bendalloy_block", - "cosmere:electrum_block", - "cosmere:atium_block", - "cosmere:lerasium_block", - "cosmere:harmonium_block", - "cosmere:malatium_block", - "cosmere:lerasatium_block", - "cosmere:nickel_block", - "cosmere:lead_block", - "cosmere:silver_block" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/blocks/storage_blocks/aluminum.json b/src/main/generated/data/forge/tags/blocks/storage_blocks/aluminum.json deleted file mode 100644 index 075d2b79b..000000000 --- a/src/main/generated/data/forge/tags/blocks/storage_blocks/aluminum.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:aluminum_block" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/blocks/storage_blocks/atium.json b/src/main/generated/data/forge/tags/blocks/storage_blocks/atium.json deleted file mode 100644 index 5a0e54535..000000000 --- a/src/main/generated/data/forge/tags/blocks/storage_blocks/atium.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:atium_block" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/blocks/storage_blocks/bendalloy.json b/src/main/generated/data/forge/tags/blocks/storage_blocks/bendalloy.json deleted file mode 100644 index 09506f83d..000000000 --- a/src/main/generated/data/forge/tags/blocks/storage_blocks/bendalloy.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:bendalloy_block" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/blocks/storage_blocks/brass.json b/src/main/generated/data/forge/tags/blocks/storage_blocks/brass.json deleted file mode 100644 index 38f45d2be..000000000 --- a/src/main/generated/data/forge/tags/blocks/storage_blocks/brass.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:brass_block" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/blocks/storage_blocks/bronze.json b/src/main/generated/data/forge/tags/blocks/storage_blocks/bronze.json deleted file mode 100644 index a89b319be..000000000 --- a/src/main/generated/data/forge/tags/blocks/storage_blocks/bronze.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:bronze_block" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/blocks/storage_blocks/cadmium.json b/src/main/generated/data/forge/tags/blocks/storage_blocks/cadmium.json deleted file mode 100644 index 4d5251782..000000000 --- a/src/main/generated/data/forge/tags/blocks/storage_blocks/cadmium.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:cadmium_block" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/blocks/storage_blocks/chromium.json b/src/main/generated/data/forge/tags/blocks/storage_blocks/chromium.json deleted file mode 100644 index eba0a7fff..000000000 --- a/src/main/generated/data/forge/tags/blocks/storage_blocks/chromium.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:chromium_block" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/blocks/storage_blocks/copper.json b/src/main/generated/data/forge/tags/blocks/storage_blocks/copper.json deleted file mode 100644 index 4681753c0..000000000 --- a/src/main/generated/data/forge/tags/blocks/storage_blocks/copper.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:copper_block" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/blocks/storage_blocks/duralumin.json b/src/main/generated/data/forge/tags/blocks/storage_blocks/duralumin.json deleted file mode 100644 index f2826771e..000000000 --- a/src/main/generated/data/forge/tags/blocks/storage_blocks/duralumin.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:duralumin_block" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/blocks/storage_blocks/electrum.json b/src/main/generated/data/forge/tags/blocks/storage_blocks/electrum.json deleted file mode 100644 index 39e610547..000000000 --- a/src/main/generated/data/forge/tags/blocks/storage_blocks/electrum.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:electrum_block" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/blocks/storage_blocks/harmonium.json b/src/main/generated/data/forge/tags/blocks/storage_blocks/harmonium.json deleted file mode 100644 index b89793121..000000000 --- a/src/main/generated/data/forge/tags/blocks/storage_blocks/harmonium.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:harmonium_block" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/blocks/storage_blocks/lead.json b/src/main/generated/data/forge/tags/blocks/storage_blocks/lead.json deleted file mode 100644 index 13e069c6d..000000000 --- a/src/main/generated/data/forge/tags/blocks/storage_blocks/lead.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:lead_block" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/blocks/storage_blocks/lerasatium.json b/src/main/generated/data/forge/tags/blocks/storage_blocks/lerasatium.json deleted file mode 100644 index 17d6e6815..000000000 --- a/src/main/generated/data/forge/tags/blocks/storage_blocks/lerasatium.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:lerasatium_block" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/blocks/storage_blocks/lerasium.json b/src/main/generated/data/forge/tags/blocks/storage_blocks/lerasium.json deleted file mode 100644 index f8cc0f443..000000000 --- a/src/main/generated/data/forge/tags/blocks/storage_blocks/lerasium.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:lerasium_block" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/blocks/storage_blocks/malatium.json b/src/main/generated/data/forge/tags/blocks/storage_blocks/malatium.json deleted file mode 100644 index 5e3b83f6c..000000000 --- a/src/main/generated/data/forge/tags/blocks/storage_blocks/malatium.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:malatium_block" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/blocks/storage_blocks/nickel.json b/src/main/generated/data/forge/tags/blocks/storage_blocks/nickel.json deleted file mode 100644 index 122546115..000000000 --- a/src/main/generated/data/forge/tags/blocks/storage_blocks/nickel.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:nickel_block" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/blocks/storage_blocks/nicrosil.json b/src/main/generated/data/forge/tags/blocks/storage_blocks/nicrosil.json deleted file mode 100644 index 720144bee..000000000 --- a/src/main/generated/data/forge/tags/blocks/storage_blocks/nicrosil.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:nicrosil_block" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/blocks/storage_blocks/pewter.json b/src/main/generated/data/forge/tags/blocks/storage_blocks/pewter.json deleted file mode 100644 index 19745cae3..000000000 --- a/src/main/generated/data/forge/tags/blocks/storage_blocks/pewter.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:pewter_block" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/blocks/storage_blocks/silver.json b/src/main/generated/data/forge/tags/blocks/storage_blocks/silver.json deleted file mode 100644 index ee31583b0..000000000 --- a/src/main/generated/data/forge/tags/blocks/storage_blocks/silver.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:silver_block" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/blocks/storage_blocks/steel.json b/src/main/generated/data/forge/tags/blocks/storage_blocks/steel.json deleted file mode 100644 index 530d517a4..000000000 --- a/src/main/generated/data/forge/tags/blocks/storage_blocks/steel.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:steel_block" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/blocks/storage_blocks/tin.json b/src/main/generated/data/forge/tags/blocks/storage_blocks/tin.json deleted file mode 100644 index b1f3fac82..000000000 --- a/src/main/generated/data/forge/tags/blocks/storage_blocks/tin.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:tin_block" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/blocks/storage_blocks/zinc.json b/src/main/generated/data/forge/tags/blocks/storage_blocks/zinc.json deleted file mode 100644 index 2be9bfb3b..000000000 --- a/src/main/generated/data/forge/tags/blocks/storage_blocks/zinc.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:zinc_block" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/ingots.json b/src/main/generated/data/forge/tags/items/ingots.json deleted file mode 100644 index 3fc833e27..000000000 --- a/src/main/generated/data/forge/tags/items/ingots.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:steel_ingot", - "#forge:ingots/steel", - "cosmere:tin_ingot", - "#forge:ingots/tin", - "cosmere:pewter_ingot", - "#forge:ingots/pewter", - "cosmere:zinc_ingot", - "#forge:ingots/zinc", - "cosmere:brass_ingot", - "#forge:ingots/brass", - "cosmere:copper_ingot", - "#forge:ingots/copper", - "cosmere:bronze_ingot", - "#forge:ingots/bronze", - "cosmere:aluminum_ingot", - "#forge:ingots/aluminum", - "cosmere:duralumin_ingot", - "#forge:ingots/duralumin", - "cosmere:chromium_ingot", - "#forge:ingots/chromium", - "cosmere:nicrosil_ingot", - "#forge:ingots/nicrosil", - "cosmere:cadmium_ingot", - "#forge:ingots/cadmium", - "cosmere:bendalloy_ingot", - "#forge:ingots/bendalloy", - "cosmere:electrum_ingot", - "#forge:ingots/electrum", - "cosmere:atium_ingot", - "#forge:ingots/atium", - "cosmere:lerasium_ingot", - "#forge:ingots/lerasium", - "cosmere:harmonium_ingot", - "#forge:ingots/harmonium", - "cosmere:malatium_ingot", - "#forge:ingots/malatium", - "cosmere:lerasatium_ingot", - "#forge:ingots/lerasatium", - "cosmere:nickel_ingot", - "#forge:ingots/nickel", - "cosmere:lead_ingot", - "#forge:ingots/lead", - "cosmere:silver_ingot", - "#forge:ingots/silver" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/ingots/aluminum.json b/src/main/generated/data/forge/tags/items/ingots/aluminum.json deleted file mode 100644 index 3a7fea2a3..000000000 --- a/src/main/generated/data/forge/tags/items/ingots/aluminum.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:aluminum_ingot" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/ingots/atium.json b/src/main/generated/data/forge/tags/items/ingots/atium.json deleted file mode 100644 index 91a5c2513..000000000 --- a/src/main/generated/data/forge/tags/items/ingots/atium.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:atium_ingot" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/ingots/bendalloy.json b/src/main/generated/data/forge/tags/items/ingots/bendalloy.json deleted file mode 100644 index 0523f0d8d..000000000 --- a/src/main/generated/data/forge/tags/items/ingots/bendalloy.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:bendalloy_ingot" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/ingots/brass.json b/src/main/generated/data/forge/tags/items/ingots/brass.json deleted file mode 100644 index a4ccfe503..000000000 --- a/src/main/generated/data/forge/tags/items/ingots/brass.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:brass_ingot" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/ingots/bronze.json b/src/main/generated/data/forge/tags/items/ingots/bronze.json deleted file mode 100644 index e0659f152..000000000 --- a/src/main/generated/data/forge/tags/items/ingots/bronze.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:bronze_ingot" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/ingots/cadmium.json b/src/main/generated/data/forge/tags/items/ingots/cadmium.json deleted file mode 100644 index 9be09dcab..000000000 --- a/src/main/generated/data/forge/tags/items/ingots/cadmium.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:cadmium_ingot" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/ingots/chromium.json b/src/main/generated/data/forge/tags/items/ingots/chromium.json deleted file mode 100644 index 4fcd9b314..000000000 --- a/src/main/generated/data/forge/tags/items/ingots/chromium.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:chromium_ingot" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/ingots/copper.json b/src/main/generated/data/forge/tags/items/ingots/copper.json deleted file mode 100644 index ffb2a84e9..000000000 --- a/src/main/generated/data/forge/tags/items/ingots/copper.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:copper_ingot" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/ingots/duralumin.json b/src/main/generated/data/forge/tags/items/ingots/duralumin.json deleted file mode 100644 index 1f4dc01cb..000000000 --- a/src/main/generated/data/forge/tags/items/ingots/duralumin.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:duralumin_ingot" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/ingots/electrum.json b/src/main/generated/data/forge/tags/items/ingots/electrum.json deleted file mode 100644 index 5064601c5..000000000 --- a/src/main/generated/data/forge/tags/items/ingots/electrum.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:electrum_ingot" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/ingots/harmonium.json b/src/main/generated/data/forge/tags/items/ingots/harmonium.json deleted file mode 100644 index c46d46f4b..000000000 --- a/src/main/generated/data/forge/tags/items/ingots/harmonium.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:harmonium_ingot" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/ingots/lead.json b/src/main/generated/data/forge/tags/items/ingots/lead.json deleted file mode 100644 index 75138a350..000000000 --- a/src/main/generated/data/forge/tags/items/ingots/lead.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:lead_ingot" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/ingots/lerasatium.json b/src/main/generated/data/forge/tags/items/ingots/lerasatium.json deleted file mode 100644 index 0814c5887..000000000 --- a/src/main/generated/data/forge/tags/items/ingots/lerasatium.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:lerasatium_ingot" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/ingots/lerasium.json b/src/main/generated/data/forge/tags/items/ingots/lerasium.json deleted file mode 100644 index f47f037a3..000000000 --- a/src/main/generated/data/forge/tags/items/ingots/lerasium.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:lerasium_ingot" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/ingots/malatium.json b/src/main/generated/data/forge/tags/items/ingots/malatium.json deleted file mode 100644 index 4f519bc83..000000000 --- a/src/main/generated/data/forge/tags/items/ingots/malatium.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:malatium_ingot" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/ingots/nickel.json b/src/main/generated/data/forge/tags/items/ingots/nickel.json deleted file mode 100644 index abe58167d..000000000 --- a/src/main/generated/data/forge/tags/items/ingots/nickel.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:nickel_ingot" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/ingots/nicrosil.json b/src/main/generated/data/forge/tags/items/ingots/nicrosil.json deleted file mode 100644 index a1d0732ee..000000000 --- a/src/main/generated/data/forge/tags/items/ingots/nicrosil.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:nicrosil_ingot" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/ingots/pewter.json b/src/main/generated/data/forge/tags/items/ingots/pewter.json deleted file mode 100644 index 81e78d471..000000000 --- a/src/main/generated/data/forge/tags/items/ingots/pewter.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:pewter_ingot" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/ingots/silver.json b/src/main/generated/data/forge/tags/items/ingots/silver.json deleted file mode 100644 index 1b25f1fe5..000000000 --- a/src/main/generated/data/forge/tags/items/ingots/silver.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:silver_ingot" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/ingots/steel.json b/src/main/generated/data/forge/tags/items/ingots/steel.json deleted file mode 100644 index 7226f5b4b..000000000 --- a/src/main/generated/data/forge/tags/items/ingots/steel.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:steel_ingot" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/ingots/tin.json b/src/main/generated/data/forge/tags/items/ingots/tin.json deleted file mode 100644 index 30751d95c..000000000 --- a/src/main/generated/data/forge/tags/items/ingots/tin.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:tin_ingot" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/ingots/zinc.json b/src/main/generated/data/forge/tags/items/ingots/zinc.json deleted file mode 100644 index eda4a4c22..000000000 --- a/src/main/generated/data/forge/tags/items/ingots/zinc.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:zinc_ingot" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/nuggets.json b/src/main/generated/data/forge/tags/items/nuggets.json deleted file mode 100644 index db6a78342..000000000 --- a/src/main/generated/data/forge/tags/items/nuggets.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "replace": false, - "values": [ - "#forge:nuggets/steel", - "cosmere:steel_nugget", - "#forge:nuggets/tin", - "cosmere:tin_nugget", - "#forge:nuggets/pewter", - "cosmere:pewter_nugget", - "#forge:nuggets/zinc", - "cosmere:zinc_nugget", - "#forge:nuggets/brass", - "cosmere:brass_nugget", - "#forge:nuggets/copper", - "cosmere:copper_nugget", - "#forge:nuggets/bronze", - "cosmere:bronze_nugget", - "#forge:nuggets/aluminum", - "cosmere:aluminum_nugget", - "#forge:nuggets/duralumin", - "cosmere:duralumin_nugget", - "#forge:nuggets/chromium", - "cosmere:chromium_nugget", - "#forge:nuggets/nicrosil", - "cosmere:nicrosil_nugget", - "#forge:nuggets/cadmium", - "cosmere:cadmium_nugget", - "#forge:nuggets/bendalloy", - "cosmere:bendalloy_nugget", - "#forge:nuggets/electrum", - "cosmere:electrum_nugget", - "#forge:nuggets/atium", - "cosmere:atium_nugget", - "#forge:nuggets/lerasium", - "cosmere:lerasium_nugget", - "#forge:nuggets/harmonium", - "cosmere:harmonium_nugget", - "#forge:nuggets/malatium", - "cosmere:malatium_nugget", - "#forge:nuggets/lerasatium", - "cosmere:lerasatium_nugget", - "#forge:nuggets/nickel", - "cosmere:nickel_nugget", - "#forge:nuggets/lead", - "cosmere:lead_nugget", - "#forge:nuggets/silver", - "cosmere:silver_nugget" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/nuggets/aluminum.json b/src/main/generated/data/forge/tags/items/nuggets/aluminum.json deleted file mode 100644 index 9a7275b5d..000000000 --- a/src/main/generated/data/forge/tags/items/nuggets/aluminum.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:aluminum_nugget" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/nuggets/atium.json b/src/main/generated/data/forge/tags/items/nuggets/atium.json deleted file mode 100644 index 7ae8a21c4..000000000 --- a/src/main/generated/data/forge/tags/items/nuggets/atium.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:atium_nugget" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/nuggets/bendalloy.json b/src/main/generated/data/forge/tags/items/nuggets/bendalloy.json deleted file mode 100644 index 676e2c485..000000000 --- a/src/main/generated/data/forge/tags/items/nuggets/bendalloy.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:bendalloy_nugget" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/nuggets/brass.json b/src/main/generated/data/forge/tags/items/nuggets/brass.json deleted file mode 100644 index 16e8559ae..000000000 --- a/src/main/generated/data/forge/tags/items/nuggets/brass.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:brass_nugget" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/nuggets/bronze.json b/src/main/generated/data/forge/tags/items/nuggets/bronze.json deleted file mode 100644 index 3f9b74b1c..000000000 --- a/src/main/generated/data/forge/tags/items/nuggets/bronze.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:bronze_nugget" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/nuggets/cadmium.json b/src/main/generated/data/forge/tags/items/nuggets/cadmium.json deleted file mode 100644 index f04bd7135..000000000 --- a/src/main/generated/data/forge/tags/items/nuggets/cadmium.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:cadmium_nugget" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/nuggets/chromium.json b/src/main/generated/data/forge/tags/items/nuggets/chromium.json deleted file mode 100644 index a29698b67..000000000 --- a/src/main/generated/data/forge/tags/items/nuggets/chromium.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:chromium_nugget" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/nuggets/copper.json b/src/main/generated/data/forge/tags/items/nuggets/copper.json deleted file mode 100644 index b4d60d3ca..000000000 --- a/src/main/generated/data/forge/tags/items/nuggets/copper.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:copper_nugget" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/nuggets/duralumin.json b/src/main/generated/data/forge/tags/items/nuggets/duralumin.json deleted file mode 100644 index 2e03b3881..000000000 --- a/src/main/generated/data/forge/tags/items/nuggets/duralumin.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:duralumin_nugget" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/nuggets/electrum.json b/src/main/generated/data/forge/tags/items/nuggets/electrum.json deleted file mode 100644 index 341eb2bb1..000000000 --- a/src/main/generated/data/forge/tags/items/nuggets/electrum.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:electrum_nugget" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/nuggets/harmonium.json b/src/main/generated/data/forge/tags/items/nuggets/harmonium.json deleted file mode 100644 index 1a98e0442..000000000 --- a/src/main/generated/data/forge/tags/items/nuggets/harmonium.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:harmonium_nugget" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/nuggets/lead.json b/src/main/generated/data/forge/tags/items/nuggets/lead.json deleted file mode 100644 index 3f6956c70..000000000 --- a/src/main/generated/data/forge/tags/items/nuggets/lead.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:lead_nugget" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/nuggets/lerasatium.json b/src/main/generated/data/forge/tags/items/nuggets/lerasatium.json deleted file mode 100644 index 6f03291b7..000000000 --- a/src/main/generated/data/forge/tags/items/nuggets/lerasatium.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:lerasatium_nugget" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/nuggets/lerasium.json b/src/main/generated/data/forge/tags/items/nuggets/lerasium.json deleted file mode 100644 index 19341c4b0..000000000 --- a/src/main/generated/data/forge/tags/items/nuggets/lerasium.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:lerasium_nugget" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/nuggets/malatium.json b/src/main/generated/data/forge/tags/items/nuggets/malatium.json deleted file mode 100644 index 78be22d44..000000000 --- a/src/main/generated/data/forge/tags/items/nuggets/malatium.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:malatium_nugget" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/nuggets/nickel.json b/src/main/generated/data/forge/tags/items/nuggets/nickel.json deleted file mode 100644 index c18d7a897..000000000 --- a/src/main/generated/data/forge/tags/items/nuggets/nickel.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:nickel_nugget" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/nuggets/nicrosil.json b/src/main/generated/data/forge/tags/items/nuggets/nicrosil.json deleted file mode 100644 index b8194993c..000000000 --- a/src/main/generated/data/forge/tags/items/nuggets/nicrosil.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:nicrosil_nugget" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/nuggets/pewter.json b/src/main/generated/data/forge/tags/items/nuggets/pewter.json deleted file mode 100644 index 2309c6853..000000000 --- a/src/main/generated/data/forge/tags/items/nuggets/pewter.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:pewter_nugget" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/nuggets/silver.json b/src/main/generated/data/forge/tags/items/nuggets/silver.json deleted file mode 100644 index 32a94e52d..000000000 --- a/src/main/generated/data/forge/tags/items/nuggets/silver.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:silver_nugget" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/nuggets/steel.json b/src/main/generated/data/forge/tags/items/nuggets/steel.json deleted file mode 100644 index 9ca9d07a4..000000000 --- a/src/main/generated/data/forge/tags/items/nuggets/steel.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:steel_nugget" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/nuggets/tin.json b/src/main/generated/data/forge/tags/items/nuggets/tin.json deleted file mode 100644 index f3d3bf1f8..000000000 --- a/src/main/generated/data/forge/tags/items/nuggets/tin.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:tin_nugget" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/nuggets/zinc.json b/src/main/generated/data/forge/tags/items/nuggets/zinc.json deleted file mode 100644 index 70a8583c8..000000000 --- a/src/main/generated/data/forge/tags/items/nuggets/zinc.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:zinc_nugget" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/raw/aluminum.json b/src/main/generated/data/forge/tags/items/raw/aluminum.json deleted file mode 100644 index a87b5a4ca..000000000 --- a/src/main/generated/data/forge/tags/items/raw/aluminum.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:raw_aluminum_ore" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/raw/bendalloy.json b/src/main/generated/data/forge/tags/items/raw/bendalloy.json deleted file mode 100644 index 40e2545b5..000000000 --- a/src/main/generated/data/forge/tags/items/raw/bendalloy.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:bendalloy_blend" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/raw/brass.json b/src/main/generated/data/forge/tags/items/raw/brass.json deleted file mode 100644 index d76219fb7..000000000 --- a/src/main/generated/data/forge/tags/items/raw/brass.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:brass_blend" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/raw/bronze.json b/src/main/generated/data/forge/tags/items/raw/bronze.json deleted file mode 100644 index 5158333a0..000000000 --- a/src/main/generated/data/forge/tags/items/raw/bronze.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:bronze_blend" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/raw/cadmium.json b/src/main/generated/data/forge/tags/items/raw/cadmium.json deleted file mode 100644 index 53d57eb7a..000000000 --- a/src/main/generated/data/forge/tags/items/raw/cadmium.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:raw_cadmium_ore" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/raw/chromium.json b/src/main/generated/data/forge/tags/items/raw/chromium.json deleted file mode 100644 index 2877515fc..000000000 --- a/src/main/generated/data/forge/tags/items/raw/chromium.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:raw_chromium_ore" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/raw/copper.json b/src/main/generated/data/forge/tags/items/raw/copper.json deleted file mode 100644 index 7378dde9b..000000000 --- a/src/main/generated/data/forge/tags/items/raw/copper.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:raw_copper_ore" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/raw/duralumin.json b/src/main/generated/data/forge/tags/items/raw/duralumin.json deleted file mode 100644 index de6d6335f..000000000 --- a/src/main/generated/data/forge/tags/items/raw/duralumin.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:duralumin_blend" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/raw/electrum.json b/src/main/generated/data/forge/tags/items/raw/electrum.json deleted file mode 100644 index 20bc9c72b..000000000 --- a/src/main/generated/data/forge/tags/items/raw/electrum.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:electrum_blend" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/raw/lead.json b/src/main/generated/data/forge/tags/items/raw/lead.json deleted file mode 100644 index e390f0f12..000000000 --- a/src/main/generated/data/forge/tags/items/raw/lead.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:raw_lead_ore" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/raw/nickel.json b/src/main/generated/data/forge/tags/items/raw/nickel.json deleted file mode 100644 index 8dd9db323..000000000 --- a/src/main/generated/data/forge/tags/items/raw/nickel.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:raw_nickel_ore" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/raw/nicrosil.json b/src/main/generated/data/forge/tags/items/raw/nicrosil.json deleted file mode 100644 index 356e3efff..000000000 --- a/src/main/generated/data/forge/tags/items/raw/nicrosil.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:nicrosil_blend" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/raw/pewter.json b/src/main/generated/data/forge/tags/items/raw/pewter.json deleted file mode 100644 index ef717c868..000000000 --- a/src/main/generated/data/forge/tags/items/raw/pewter.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:pewter_blend" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/raw/silver.json b/src/main/generated/data/forge/tags/items/raw/silver.json deleted file mode 100644 index f3b7fffbd..000000000 --- a/src/main/generated/data/forge/tags/items/raw/silver.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:raw_silver_ore" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/raw/steel.json b/src/main/generated/data/forge/tags/items/raw/steel.json deleted file mode 100644 index ffad46b38..000000000 --- a/src/main/generated/data/forge/tags/items/raw/steel.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:steel_blend" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/raw/tin.json b/src/main/generated/data/forge/tags/items/raw/tin.json deleted file mode 100644 index 43c405f04..000000000 --- a/src/main/generated/data/forge/tags/items/raw/tin.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:raw_tin_ore" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/raw/zinc.json b/src/main/generated/data/forge/tags/items/raw/zinc.json deleted file mode 100644 index c4ffa62ea..000000000 --- a/src/main/generated/data/forge/tags/items/raw/zinc.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:raw_zinc_ore" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/storage_blocks.json b/src/main/generated/data/forge/tags/items/storage_blocks.json deleted file mode 100644 index e6f0e9762..000000000 --- a/src/main/generated/data/forge/tags/items/storage_blocks.json +++ /dev/null @@ -1,489 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:steel_block", - "cosmere:tin_block", - "cosmere:pewter_block", - "cosmere:zinc_block", - "cosmere:brass_block", - "cosmere:copper_block", - "cosmere:bronze_block", - "cosmere:aluminum_block", - "cosmere:duralumin_block", - "cosmere:chromium_block", - "cosmere:nicrosil_block", - "cosmere:cadmium_block", - "cosmere:bendalloy_block", - "cosmere:electrum_block", - "cosmere:atium_block", - "cosmere:lerasium_block", - "cosmere:harmonium_block", - "cosmere:malatium_block", - "cosmere:lerasatium_block", - "cosmere:nickel_block", - "cosmere:lead_block", - "cosmere:silver_block", - "cosmere:steel_block", - "cosmere:tin_block", - "cosmere:pewter_block", - "cosmere:zinc_block", - "cosmere:brass_block", - "cosmere:copper_block", - "cosmere:bronze_block", - "cosmere:aluminum_block", - "cosmere:duralumin_block", - "cosmere:chromium_block", - "cosmere:nicrosil_block", - "cosmere:cadmium_block", - "cosmere:bendalloy_block", - "cosmere:electrum_block", - "cosmere:atium_block", - "cosmere:lerasium_block", - "cosmere:harmonium_block", - "cosmere:malatium_block", - "cosmere:lerasatium_block", - "cosmere:nickel_block", - "cosmere:lead_block", - "cosmere:silver_block", - "cosmere:steel_block", - "cosmere:tin_block", - "cosmere:pewter_block", - "cosmere:zinc_block", - "cosmere:brass_block", - "cosmere:copper_block", - "cosmere:bronze_block", - "cosmere:aluminum_block", - "cosmere:duralumin_block", - "cosmere:chromium_block", - "cosmere:nicrosil_block", - "cosmere:cadmium_block", - "cosmere:bendalloy_block", - "cosmere:electrum_block", - "cosmere:atium_block", - "cosmere:lerasium_block", - "cosmere:harmonium_block", - "cosmere:malatium_block", - "cosmere:lerasatium_block", - "cosmere:nickel_block", - "cosmere:lead_block", - "cosmere:silver_block", - "cosmere:steel_block", - "cosmere:tin_block", - "cosmere:pewter_block", - "cosmere:zinc_block", - "cosmere:brass_block", - "cosmere:copper_block", - "cosmere:bronze_block", - "cosmere:aluminum_block", - "cosmere:duralumin_block", - "cosmere:chromium_block", - "cosmere:nicrosil_block", - "cosmere:cadmium_block", - "cosmere:bendalloy_block", - "cosmere:electrum_block", - "cosmere:atium_block", - "cosmere:lerasium_block", - "cosmere:harmonium_block", - "cosmere:malatium_block", - "cosmere:lerasatium_block", - "cosmere:nickel_block", - "cosmere:lead_block", - "cosmere:silver_block", - "cosmere:steel_block", - "cosmere:tin_block", - "cosmere:pewter_block", - "cosmere:zinc_block", - "cosmere:brass_block", - "cosmere:copper_block", - "cosmere:bronze_block", - "cosmere:aluminum_block", - "cosmere:duralumin_block", - "cosmere:chromium_block", - "cosmere:nicrosil_block", - "cosmere:cadmium_block", - "cosmere:bendalloy_block", - "cosmere:electrum_block", - "cosmere:atium_block", - "cosmere:lerasium_block", - "cosmere:harmonium_block", - "cosmere:malatium_block", - "cosmere:lerasatium_block", - "cosmere:nickel_block", - "cosmere:lead_block", - "cosmere:silver_block", - "cosmere:steel_block", - "cosmere:tin_block", - "cosmere:pewter_block", - "cosmere:zinc_block", - "cosmere:brass_block", - "cosmere:copper_block", - "cosmere:bronze_block", - "cosmere:aluminum_block", - "cosmere:duralumin_block", - "cosmere:chromium_block", - "cosmere:nicrosil_block", - "cosmere:cadmium_block", - "cosmere:bendalloy_block", - "cosmere:electrum_block", - "cosmere:atium_block", - "cosmere:lerasium_block", - "cosmere:harmonium_block", - "cosmere:malatium_block", - "cosmere:lerasatium_block", - "cosmere:nickel_block", - "cosmere:lead_block", - "cosmere:silver_block", - "cosmere:steel_block", - "cosmere:tin_block", - "cosmere:pewter_block", - "cosmere:zinc_block", - "cosmere:brass_block", - "cosmere:copper_block", - "cosmere:bronze_block", - "cosmere:aluminum_block", - "cosmere:duralumin_block", - "cosmere:chromium_block", - "cosmere:nicrosil_block", - "cosmere:cadmium_block", - "cosmere:bendalloy_block", - "cosmere:electrum_block", - "cosmere:atium_block", - "cosmere:lerasium_block", - "cosmere:harmonium_block", - "cosmere:malatium_block", - "cosmere:lerasatium_block", - "cosmere:nickel_block", - "cosmere:lead_block", - "cosmere:silver_block", - "cosmere:steel_block", - "cosmere:tin_block", - "cosmere:pewter_block", - "cosmere:zinc_block", - "cosmere:brass_block", - "cosmere:copper_block", - "cosmere:bronze_block", - "cosmere:aluminum_block", - "cosmere:duralumin_block", - "cosmere:chromium_block", - "cosmere:nicrosil_block", - "cosmere:cadmium_block", - "cosmere:bendalloy_block", - "cosmere:electrum_block", - "cosmere:atium_block", - "cosmere:lerasium_block", - "cosmere:harmonium_block", - "cosmere:malatium_block", - "cosmere:lerasatium_block", - "cosmere:nickel_block", - "cosmere:lead_block", - "cosmere:silver_block", - "cosmere:steel_block", - "cosmere:tin_block", - "cosmere:pewter_block", - "cosmere:zinc_block", - "cosmere:brass_block", - "cosmere:copper_block", - "cosmere:bronze_block", - "cosmere:aluminum_block", - "cosmere:duralumin_block", - "cosmere:chromium_block", - "cosmere:nicrosil_block", - "cosmere:cadmium_block", - "cosmere:bendalloy_block", - "cosmere:electrum_block", - "cosmere:atium_block", - "cosmere:lerasium_block", - "cosmere:harmonium_block", - "cosmere:malatium_block", - "cosmere:lerasatium_block", - "cosmere:nickel_block", - "cosmere:lead_block", - "cosmere:silver_block", - "cosmere:steel_block", - "cosmere:tin_block", - "cosmere:pewter_block", - "cosmere:zinc_block", - "cosmere:brass_block", - "cosmere:copper_block", - "cosmere:bronze_block", - "cosmere:aluminum_block", - "cosmere:duralumin_block", - "cosmere:chromium_block", - "cosmere:nicrosil_block", - "cosmere:cadmium_block", - "cosmere:bendalloy_block", - "cosmere:electrum_block", - "cosmere:atium_block", - "cosmere:lerasium_block", - "cosmere:harmonium_block", - "cosmere:malatium_block", - "cosmere:lerasatium_block", - "cosmere:nickel_block", - "cosmere:lead_block", - "cosmere:silver_block", - "cosmere:steel_block", - "cosmere:tin_block", - "cosmere:pewter_block", - "cosmere:zinc_block", - "cosmere:brass_block", - "cosmere:copper_block", - "cosmere:bronze_block", - "cosmere:aluminum_block", - "cosmere:duralumin_block", - "cosmere:chromium_block", - "cosmere:nicrosil_block", - "cosmere:cadmium_block", - "cosmere:bendalloy_block", - "cosmere:electrum_block", - "cosmere:atium_block", - "cosmere:lerasium_block", - "cosmere:harmonium_block", - "cosmere:malatium_block", - "cosmere:lerasatium_block", - "cosmere:nickel_block", - "cosmere:lead_block", - "cosmere:silver_block", - "cosmere:steel_block", - "cosmere:tin_block", - "cosmere:pewter_block", - "cosmere:zinc_block", - "cosmere:brass_block", - "cosmere:copper_block", - "cosmere:bronze_block", - "cosmere:aluminum_block", - "cosmere:duralumin_block", - "cosmere:chromium_block", - "cosmere:nicrosil_block", - "cosmere:cadmium_block", - "cosmere:bendalloy_block", - "cosmere:electrum_block", - "cosmere:atium_block", - "cosmere:lerasium_block", - "cosmere:harmonium_block", - "cosmere:malatium_block", - "cosmere:lerasatium_block", - "cosmere:nickel_block", - "cosmere:lead_block", - "cosmere:silver_block", - "cosmere:steel_block", - "cosmere:tin_block", - "cosmere:pewter_block", - "cosmere:zinc_block", - "cosmere:brass_block", - "cosmere:copper_block", - "cosmere:bronze_block", - "cosmere:aluminum_block", - "cosmere:duralumin_block", - "cosmere:chromium_block", - "cosmere:nicrosil_block", - "cosmere:cadmium_block", - "cosmere:bendalloy_block", - "cosmere:electrum_block", - "cosmere:atium_block", - "cosmere:lerasium_block", - "cosmere:harmonium_block", - "cosmere:malatium_block", - "cosmere:lerasatium_block", - "cosmere:nickel_block", - "cosmere:lead_block", - "cosmere:silver_block", - "cosmere:steel_block", - "cosmere:tin_block", - "cosmere:pewter_block", - "cosmere:zinc_block", - "cosmere:brass_block", - "cosmere:copper_block", - "cosmere:bronze_block", - "cosmere:aluminum_block", - "cosmere:duralumin_block", - "cosmere:chromium_block", - "cosmere:nicrosil_block", - "cosmere:cadmium_block", - "cosmere:bendalloy_block", - "cosmere:electrum_block", - "cosmere:atium_block", - "cosmere:lerasium_block", - "cosmere:harmonium_block", - "cosmere:malatium_block", - "cosmere:lerasatium_block", - "cosmere:nickel_block", - "cosmere:lead_block", - "cosmere:silver_block", - "cosmere:steel_block", - "cosmere:tin_block", - "cosmere:pewter_block", - "cosmere:zinc_block", - "cosmere:brass_block", - "cosmere:copper_block", - "cosmere:bronze_block", - "cosmere:aluminum_block", - "cosmere:duralumin_block", - "cosmere:chromium_block", - "cosmere:nicrosil_block", - "cosmere:cadmium_block", - "cosmere:bendalloy_block", - "cosmere:electrum_block", - "cosmere:atium_block", - "cosmere:lerasium_block", - "cosmere:harmonium_block", - "cosmere:malatium_block", - "cosmere:lerasatium_block", - "cosmere:nickel_block", - "cosmere:lead_block", - "cosmere:silver_block", - "cosmere:steel_block", - "cosmere:tin_block", - "cosmere:pewter_block", - "cosmere:zinc_block", - "cosmere:brass_block", - "cosmere:copper_block", - "cosmere:bronze_block", - "cosmere:aluminum_block", - "cosmere:duralumin_block", - "cosmere:chromium_block", - "cosmere:nicrosil_block", - "cosmere:cadmium_block", - "cosmere:bendalloy_block", - "cosmere:electrum_block", - "cosmere:atium_block", - "cosmere:lerasium_block", - "cosmere:harmonium_block", - "cosmere:malatium_block", - "cosmere:lerasatium_block", - "cosmere:nickel_block", - "cosmere:lead_block", - "cosmere:silver_block", - "cosmere:steel_block", - "cosmere:tin_block", - "cosmere:pewter_block", - "cosmere:zinc_block", - "cosmere:brass_block", - "cosmere:copper_block", - "cosmere:bronze_block", - "cosmere:aluminum_block", - "cosmere:duralumin_block", - "cosmere:chromium_block", - "cosmere:nicrosil_block", - "cosmere:cadmium_block", - "cosmere:bendalloy_block", - "cosmere:electrum_block", - "cosmere:atium_block", - "cosmere:lerasium_block", - "cosmere:harmonium_block", - "cosmere:malatium_block", - "cosmere:lerasatium_block", - "cosmere:nickel_block", - "cosmere:lead_block", - "cosmere:silver_block", - "cosmere:steel_block", - "cosmere:tin_block", - "cosmere:pewter_block", - "cosmere:zinc_block", - "cosmere:brass_block", - "cosmere:copper_block", - "cosmere:bronze_block", - "cosmere:aluminum_block", - "cosmere:duralumin_block", - "cosmere:chromium_block", - "cosmere:nicrosil_block", - "cosmere:cadmium_block", - "cosmere:bendalloy_block", - "cosmere:electrum_block", - "cosmere:atium_block", - "cosmere:lerasium_block", - "cosmere:harmonium_block", - "cosmere:malatium_block", - "cosmere:lerasatium_block", - "cosmere:nickel_block", - "cosmere:lead_block", - "cosmere:silver_block", - "cosmere:steel_block", - "cosmere:tin_block", - "cosmere:pewter_block", - "cosmere:zinc_block", - "cosmere:brass_block", - "cosmere:copper_block", - "cosmere:bronze_block", - "cosmere:aluminum_block", - "cosmere:duralumin_block", - "cosmere:chromium_block", - "cosmere:nicrosil_block", - "cosmere:cadmium_block", - "cosmere:bendalloy_block", - "cosmere:electrum_block", - "cosmere:atium_block", - "cosmere:lerasium_block", - "cosmere:harmonium_block", - "cosmere:malatium_block", - "cosmere:lerasatium_block", - "cosmere:nickel_block", - "cosmere:lead_block", - "cosmere:silver_block", - "cosmere:steel_block", - "cosmere:tin_block", - "cosmere:pewter_block", - "cosmere:zinc_block", - "cosmere:brass_block", - "cosmere:copper_block", - "cosmere:bronze_block", - "cosmere:aluminum_block", - "cosmere:duralumin_block", - "cosmere:chromium_block", - "cosmere:nicrosil_block", - "cosmere:cadmium_block", - "cosmere:bendalloy_block", - "cosmere:electrum_block", - "cosmere:atium_block", - "cosmere:lerasium_block", - "cosmere:harmonium_block", - "cosmere:malatium_block", - "cosmere:lerasatium_block", - "cosmere:nickel_block", - "cosmere:lead_block", - "cosmere:silver_block", - "cosmere:steel_block", - "cosmere:tin_block", - "cosmere:pewter_block", - "cosmere:zinc_block", - "cosmere:brass_block", - "cosmere:copper_block", - "cosmere:bronze_block", - "cosmere:aluminum_block", - "cosmere:duralumin_block", - "cosmere:chromium_block", - "cosmere:nicrosil_block", - "cosmere:cadmium_block", - "cosmere:bendalloy_block", - "cosmere:electrum_block", - "cosmere:atium_block", - "cosmere:lerasium_block", - "cosmere:harmonium_block", - "cosmere:malatium_block", - "cosmere:lerasatium_block", - "cosmere:nickel_block", - "cosmere:lead_block", - "cosmere:silver_block", - "cosmere:steel_block", - "cosmere:tin_block", - "cosmere:pewter_block", - "cosmere:zinc_block", - "cosmere:brass_block", - "cosmere:copper_block", - "cosmere:bronze_block", - "cosmere:aluminum_block", - "cosmere:duralumin_block", - "cosmere:chromium_block", - "cosmere:nicrosil_block", - "cosmere:cadmium_block", - "cosmere:bendalloy_block", - "cosmere:electrum_block", - "cosmere:atium_block", - "cosmere:lerasium_block", - "cosmere:harmonium_block", - "cosmere:malatium_block", - "cosmere:lerasatium_block", - "cosmere:nickel_block", - "cosmere:lead_block", - "cosmere:silver_block" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/storage_blocks/aluminum.json b/src/main/generated/data/forge/tags/items/storage_blocks/aluminum.json deleted file mode 100644 index 075d2b79b..000000000 --- a/src/main/generated/data/forge/tags/items/storage_blocks/aluminum.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:aluminum_block" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/storage_blocks/atium.json b/src/main/generated/data/forge/tags/items/storage_blocks/atium.json deleted file mode 100644 index 5a0e54535..000000000 --- a/src/main/generated/data/forge/tags/items/storage_blocks/atium.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:atium_block" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/storage_blocks/bendalloy.json b/src/main/generated/data/forge/tags/items/storage_blocks/bendalloy.json deleted file mode 100644 index 09506f83d..000000000 --- a/src/main/generated/data/forge/tags/items/storage_blocks/bendalloy.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:bendalloy_block" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/storage_blocks/brass.json b/src/main/generated/data/forge/tags/items/storage_blocks/brass.json deleted file mode 100644 index 38f45d2be..000000000 --- a/src/main/generated/data/forge/tags/items/storage_blocks/brass.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:brass_block" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/storage_blocks/bronze.json b/src/main/generated/data/forge/tags/items/storage_blocks/bronze.json deleted file mode 100644 index a89b319be..000000000 --- a/src/main/generated/data/forge/tags/items/storage_blocks/bronze.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:bronze_block" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/storage_blocks/cadmium.json b/src/main/generated/data/forge/tags/items/storage_blocks/cadmium.json deleted file mode 100644 index 4d5251782..000000000 --- a/src/main/generated/data/forge/tags/items/storage_blocks/cadmium.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:cadmium_block" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/storage_blocks/chromium.json b/src/main/generated/data/forge/tags/items/storage_blocks/chromium.json deleted file mode 100644 index eba0a7fff..000000000 --- a/src/main/generated/data/forge/tags/items/storage_blocks/chromium.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:chromium_block" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/storage_blocks/copper.json b/src/main/generated/data/forge/tags/items/storage_blocks/copper.json deleted file mode 100644 index 4681753c0..000000000 --- a/src/main/generated/data/forge/tags/items/storage_blocks/copper.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:copper_block" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/storage_blocks/duralumin.json b/src/main/generated/data/forge/tags/items/storage_blocks/duralumin.json deleted file mode 100644 index f2826771e..000000000 --- a/src/main/generated/data/forge/tags/items/storage_blocks/duralumin.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:duralumin_block" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/storage_blocks/electrum.json b/src/main/generated/data/forge/tags/items/storage_blocks/electrum.json deleted file mode 100644 index 39e610547..000000000 --- a/src/main/generated/data/forge/tags/items/storage_blocks/electrum.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:electrum_block" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/storage_blocks/harmonium.json b/src/main/generated/data/forge/tags/items/storage_blocks/harmonium.json deleted file mode 100644 index b89793121..000000000 --- a/src/main/generated/data/forge/tags/items/storage_blocks/harmonium.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:harmonium_block" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/storage_blocks/lead.json b/src/main/generated/data/forge/tags/items/storage_blocks/lead.json deleted file mode 100644 index 13e069c6d..000000000 --- a/src/main/generated/data/forge/tags/items/storage_blocks/lead.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:lead_block" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/storage_blocks/lerasatium.json b/src/main/generated/data/forge/tags/items/storage_blocks/lerasatium.json deleted file mode 100644 index 17d6e6815..000000000 --- a/src/main/generated/data/forge/tags/items/storage_blocks/lerasatium.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:lerasatium_block" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/storage_blocks/lerasium.json b/src/main/generated/data/forge/tags/items/storage_blocks/lerasium.json deleted file mode 100644 index f8cc0f443..000000000 --- a/src/main/generated/data/forge/tags/items/storage_blocks/lerasium.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:lerasium_block" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/storage_blocks/malatium.json b/src/main/generated/data/forge/tags/items/storage_blocks/malatium.json deleted file mode 100644 index 5e3b83f6c..000000000 --- a/src/main/generated/data/forge/tags/items/storage_blocks/malatium.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:malatium_block" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/storage_blocks/nickel.json b/src/main/generated/data/forge/tags/items/storage_blocks/nickel.json deleted file mode 100644 index 122546115..000000000 --- a/src/main/generated/data/forge/tags/items/storage_blocks/nickel.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:nickel_block" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/storage_blocks/nicrosil.json b/src/main/generated/data/forge/tags/items/storage_blocks/nicrosil.json deleted file mode 100644 index 720144bee..000000000 --- a/src/main/generated/data/forge/tags/items/storage_blocks/nicrosil.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:nicrosil_block" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/storage_blocks/pewter.json b/src/main/generated/data/forge/tags/items/storage_blocks/pewter.json deleted file mode 100644 index 19745cae3..000000000 --- a/src/main/generated/data/forge/tags/items/storage_blocks/pewter.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:pewter_block" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/storage_blocks/silver.json b/src/main/generated/data/forge/tags/items/storage_blocks/silver.json deleted file mode 100644 index ee31583b0..000000000 --- a/src/main/generated/data/forge/tags/items/storage_blocks/silver.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:silver_block" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/storage_blocks/steel.json b/src/main/generated/data/forge/tags/items/storage_blocks/steel.json deleted file mode 100644 index 530d517a4..000000000 --- a/src/main/generated/data/forge/tags/items/storage_blocks/steel.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:steel_block" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/storage_blocks/tin.json b/src/main/generated/data/forge/tags/items/storage_blocks/tin.json deleted file mode 100644 index b1f3fac82..000000000 --- a/src/main/generated/data/forge/tags/items/storage_blocks/tin.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:tin_block" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/items/storage_blocks/zinc.json b/src/main/generated/data/forge/tags/items/storage_blocks/zinc.json deleted file mode 100644 index 2be9bfb3b..000000000 --- a/src/main/generated/data/forge/tags/items/storage_blocks/zinc.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:zinc_block" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/minecraft/tags/blocks/beacon_base_blocks.json b/src/main/generated/data/minecraft/tags/blocks/beacon_base_blocks.json deleted file mode 100644 index e672dfa4c..000000000 --- a/src/main/generated/data/minecraft/tags/blocks/beacon_base_blocks.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:gem_block", - "cosmere:steel_block", - "cosmere:tin_block", - "cosmere:pewter_block", - "cosmere:zinc_block", - "cosmere:brass_block", - "cosmere:copper_block", - "cosmere:bronze_block", - "cosmere:aluminum_block", - "cosmere:duralumin_block", - "cosmere:chromium_block", - "cosmere:nicrosil_block", - "cosmere:cadmium_block", - "cosmere:bendalloy_block", - "cosmere:electrum_block", - "cosmere:atium_block", - "cosmere:lerasium_block", - "cosmere:harmonium_block", - "cosmere:malatium_block", - "cosmere:lerasatium_block", - "cosmere:nickel_block", - "cosmere:lead_block", - "cosmere:silver_block" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/minecraft/tags/blocks/dragon_immune.json b/src/main/generated/data/minecraft/tags/blocks/dragon_immune.json deleted file mode 100644 index 2a3fb3d7e..000000000 --- a/src/main/generated/data/minecraft/tags/blocks/dragon_immune.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:gem_block" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/minecraft/tags/blocks/wither_immune.json b/src/main/generated/data/minecraft/tags/blocks/wither_immune.json deleted file mode 100644 index 2a3fb3d7e..000000000 --- a/src/main/generated/data/minecraft/tags/blocks/wither_immune.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "cosmere:gem_block" - ] -} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/Cosmere.java b/src/main/java/leaf/cosmere/Cosmere.java deleted file mode 100644 index d8138d248..000000000 --- a/src/main/java/leaf/cosmere/Cosmere.java +++ /dev/null @@ -1,89 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere; - -import leaf.cosmere.cap.entity.ISpiritweb; -import leaf.cosmere.cap.entity.SpiritwebCapability; -import leaf.cosmere.client.ClientSetup; -import leaf.cosmere.compat.curios.CuriosCompat; -import leaf.cosmere.handlers.ColorHandler; -import leaf.cosmere.utils.helpers.LogHelper; -import leaf.cosmere.network.Network; -import leaf.cosmere.registry.*; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.common.capabilities.CapabilityManager; -import net.minecraftforge.eventbus.api.IEventBus; -import net.minecraftforge.fml.DistExecutor; -import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; -import net.minecraftforge.fml.event.lifecycle.FMLLoadCompleteEvent; -import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; - -@Mod(Cosmere.MODID) -public class Cosmere -{ - public static final String MODID = "cosmere"; - - public Cosmere() - { - LogHelper.info("Registering Cosmere related mcgubbins!"); - IEventBus modBus = FMLJavaModLoadingContext.get().getModEventBus(); - - modBus.addListener(this::commonSetup); - modBus.addListener(this::loadComplete); - - DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> FMLJavaModLoadingContext.get().getModEventBus().addListener(ClientSetup::init)); - DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> FMLJavaModLoadingContext.get().getModEventBus().addListener(ClientSetup::registerIconTextures)); - DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> FMLJavaModLoadingContext.get().getModEventBus().addListener(ClientSetup::retrieveRegisteredIconSprites)); - - - MinecraftForge.EVENT_BUS.register(this); - - //Register our deferred registries - BlocksRegistry.BLOCKS.register(modBus); - ItemsRegistry.ITEMS.register(modBus); - EffectsRegistry.EFFECTS.register(modBus); - LootModifierRegistry.LOOT_MODIFIERS.register(modBus); - ManifestationRegistry.MANIFESTATIONS.register(modBus); - AttributesRegistry.ATTRIBUTES.register(modBus); - EntityRegistry.ENTITIES.register(modBus); - - FeatureRegistry.FEATURES.register(modBus); - RecipeRegistry.SPECIAL_RECIPES.register(modBus); - - AdvancementTriggerRegistry.init(); - - Network.init(); - - // init cross mod compatibility stuff, if relevant - CuriosCompat.init(); - } - - private void commonSetup(FMLCommonSetupEvent event) - { - event.enqueueWork(() -> - { - FeatureRegistry.registerConfiguredFeatures(); - EntityRegistry.PrepareEntityAttributes(); - }); - - //Entity Caps - CapabilityManager.INSTANCE.register(ISpiritweb.class, new ISpiritweb.Storage(), () -> new SpiritwebCapability(null)); - - DataSerializersRegistry.register(); - - LogHelper.info("Common setup complete!"); - } - - private void loadComplete(FMLLoadCompleteEvent event) - { - event.enqueueWork(() -> - { - ColorHandler.init(); - - }); - } -} diff --git a/src/main/java/leaf/cosmere/blocks/BaseBlock.java b/src/main/java/leaf/cosmere/blocks/BaseBlock.java deleted file mode 100644 index 1f0680767..000000000 --- a/src/main/java/leaf/cosmere/blocks/BaseBlock.java +++ /dev/null @@ -1,24 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.blocks; - -import net.minecraft.block.Block; -import net.minecraft.block.SoundType; - -public class BaseBlock extends Block -{ - - public BaseBlock(Properties properties, SoundType sound, float hardness, float resistance) - { - - super(properties.sound(sound).hardnessAndResistance(hardness, resistance)); - } - - public BaseBlock(Properties properties) - { - super(properties); - - } -} diff --git a/src/main/java/leaf/cosmere/blocks/MetalBlock.java b/src/main/java/leaf/cosmere/blocks/MetalBlock.java deleted file mode 100644 index 05080bd81..000000000 --- a/src/main/java/leaf/cosmere/blocks/MetalBlock.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.blocks; - -import leaf.cosmere.constants.Metals; -import leaf.cosmere.items.IHasMetalType; -import leaf.cosmere.properties.PropTypes; -import net.minecraft.block.SoundType; - -public class MetalBlock extends BaseBlock implements IHasMetalType -{ - private final Metals.MetalType metalType; - - public MetalBlock(Metals.MetalType metalType) - { - super(PropTypes.Blocks.METAL.get(), SoundType.METAL, 1F, 2F); - this.metalType = metalType; - } - - @Override - public Metals.MetalType getMetalType() - { - return this.metalType; - } -} diff --git a/src/main/java/leaf/cosmere/blocks/MetalOreBlock.java b/src/main/java/leaf/cosmere/blocks/MetalOreBlock.java deleted file mode 100644 index 88ffe35f4..000000000 --- a/src/main/java/leaf/cosmere/blocks/MetalOreBlock.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.blocks; - -import leaf.cosmere.constants.Metals; -import leaf.cosmere.items.IHasMetalType; -import leaf.cosmere.properties.PropTypes; -import net.minecraft.block.OreBlock; - -public class MetalOreBlock extends OreBlock implements IHasMetalType -{ - private final Metals.MetalType metalType; - - public MetalOreBlock(Metals.MetalType metalType) - { - super(PropTypes.Blocks.METAL.get()); - this.metalType = metalType; - } - - @Override - public Metals.MetalType getMetalType() - { - return this.metalType; - } -} diff --git a/src/main/java/leaf/cosmere/blocks/TileBlock.java b/src/main/java/leaf/cosmere/blocks/TileBlock.java deleted file mode 100644 index 47de079b7..000000000 --- a/src/main/java/leaf/cosmere/blocks/TileBlock.java +++ /dev/null @@ -1,15 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.blocks; - -import net.minecraft.block.Block; - -public class TileBlock extends Block -{ - public TileBlock(Block.Properties properties) - { - super(properties); - } -} diff --git a/src/main/java/leaf/cosmere/cap/Capabilities.java b/src/main/java/leaf/cosmere/cap/Capabilities.java deleted file mode 100644 index d9a21f611..000000000 --- a/src/main/java/leaf/cosmere/cap/Capabilities.java +++ /dev/null @@ -1,15 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.cap; - -import leaf.cosmere.cap.entity.ISpiritweb; -import net.minecraftforge.common.capabilities.Capability; -import net.minecraftforge.common.capabilities.CapabilityInject; - -public class Capabilities -{ - @CapabilityInject(ISpiritweb.class) - public static final Capability SPIRITWEB_CAPABILITY = null; -} diff --git a/src/main/java/leaf/cosmere/cap/entity/ISpiritweb.java b/src/main/java/leaf/cosmere/cap/entity/ISpiritweb.java deleted file mode 100644 index 8dea45322..000000000 --- a/src/main/java/leaf/cosmere/cap/entity/ISpiritweb.java +++ /dev/null @@ -1,134 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - * - * Special thank you to the Suff and their mod Regeneration. - * That mod taught me how to add ticking capabilities to entities and have them sync - * https://github.com/WhoCraft/Regeneration - */ - -package leaf.cosmere.cap.entity; - -import leaf.cosmere.cap.Capabilities; -import leaf.cosmere.constants.Manifestations; -import leaf.cosmere.constants.Metals; -import leaf.cosmere.manifestation.AManifestation; -import net.minecraft.entity.Entity; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.player.ServerPlayerEntity; -import net.minecraft.nbt.CompoundNBT; -import net.minecraft.nbt.INBT; -import net.minecraft.util.Direction; -import net.minecraft.util.math.BlockPos; -import net.minecraftforge.client.event.RenderWorldLastEvent; -import net.minecraftforge.common.capabilities.Capability; -import net.minecraftforge.common.capabilities.ICapabilitySerializable; -import net.minecraftforge.common.util.INBTSerializable; -import net.minecraftforge.common.util.LazyOptional; - -import javax.annotation.Nullable; -import java.util.List; - -public interface ISpiritweb extends INBTSerializable -{ - void tick(); - - LivingEntity getLiving(); - - boolean hasManifestation(Manifestations.ManifestationTypes type, int powerID); - - boolean hasManifestation(Manifestations.ManifestationTypes type, int powerID, boolean ignoreTemporaryPower); - - void giveManifestation(Manifestations.ManifestationTypes type, int powerID); - - void removeManifestation(Manifestations.ManifestationTypes type, int powerID); - - AManifestation manifestation(); - - AManifestation manifestation(Manifestations.ManifestationTypes powerType, int powerID); - - boolean manifestationActive(Manifestations.ManifestationTypes powerType, int powerID); - - boolean selectedManifestationActive(); - - int nextMode(Manifestations.ManifestationTypes powerType, int powerID); - - int previousMode(Manifestations.ManifestationTypes powerType, int powerID); - - void setMode(Manifestations.ManifestationTypes powerType, int powerID, int mode); - - int getMode(Manifestations.ManifestationTypes powerType, int powerID); - - void syncToClients(@Nullable ServerPlayerEntity serverPlayerEntity); - - void deactivateCurrentManifestation(); - - void deactivateManifestations(); - - void clearManifestations(); - - List getAvailableManifestations(); - - List getAvailableManifestations(boolean ignoreTemporaryPower); - - String changeManifestation(int dir); - - void renderWorldEffects(RenderWorldLastEvent event); - - void setSelectedManifestation(AManifestation manifestation); - - int getIngestedMetal(Metals.MetalType metalType); - - boolean adjustIngestedMetal(Metals.MetalType metalType, int i, boolean doAdjust); - - class Storage implements Capability.IStorage - { - - @Override - public INBT writeNBT(Capability capability, ISpiritweb instance, Direction side) - { - return instance.serializeNBT(); - } - - @Override - public void readNBT(Capability capability, ISpiritweb instance, Direction side, INBT nbt) - { - if (nbt instanceof CompoundNBT) - { - instance.deserializeNBT((CompoundNBT) nbt); - } - } - } - - - class Provider implements ICapabilitySerializable - { - - ISpiritweb data; - - public Provider(ISpiritweb data) - { - this.data = data; - } - - @SuppressWarnings("unchecked") - @Override - public LazyOptional getCapability(Capability cap, Direction side) - { - return cap == Capabilities.SPIRITWEB_CAPABILITY ? (LazyOptional) LazyOptional.of(() -> data) - : LazyOptional.empty(); - } - - @Override - public CompoundNBT serializeNBT() - { - return data.serializeNBT(); - } - - @Override - public void deserializeNBT(CompoundNBT nbt) - { - data.deserializeNBT(nbt); - } - - } -} diff --git a/src/main/java/leaf/cosmere/cap/entity/SpiritwebCapability.java b/src/main/java/leaf/cosmere/cap/entity/SpiritwebCapability.java deleted file mode 100644 index aa1bedcca..000000000 --- a/src/main/java/leaf/cosmere/cap/entity/SpiritwebCapability.java +++ /dev/null @@ -1,650 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - * - * Special thank you to the Suff and their mod Regeneration. - * That mod taught me how to add ticking capabilities to entities and have them sync - * https://github.com/WhoCraft/Regeneration - */ - -package leaf.cosmere.cap.entity; - -import com.google.common.collect.LinkedHashMultimap; -import com.google.common.collect.Multimap; -import com.mojang.blaze3d.matrix.MatrixStack; -import leaf.cosmere.client.gui.DrawUtils; -import leaf.cosmere.constants.Manifestations.ManifestationTypes; -import leaf.cosmere.constants.Metals; -import leaf.cosmere.manifestation.AManifestation; -import leaf.cosmere.manifestation.allomancy.AllomancyIronSteel; -import leaf.cosmere.network.Network; -import leaf.cosmere.network.packets.SyncPlayerSpiritwebMessage; -import leaf.cosmere.registry.AttributesRegistry; -import leaf.cosmere.registry.ManifestationRegistry; -import net.minecraft.block.Blocks; -import net.minecraft.client.MainWindow; -import net.minecraft.client.Minecraft; -import net.minecraft.client.resources.I18n; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.ai.attributes.Attribute; -import net.minecraft.entity.ai.attributes.ModifiableAttributeInstance; -import net.minecraft.entity.player.ServerPlayerEntity; -import net.minecraft.item.ItemStack; -import net.minecraft.item.Items; -import net.minecraft.nbt.CompoundNBT; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.vector.Vector3d; -import net.minecraft.world.server.ServerWorld; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; -import net.minecraftforge.client.event.RenderWorldLastEvent; -import net.minecraftforge.common.capabilities.Capability; -import net.minecraftforge.common.capabilities.CapabilityInject; -import net.minecraftforge.common.util.LazyOptional; -import net.minecraftforge.fml.RegistryObject; - -import javax.annotation.Nonnull; -import javax.annotation.Nullable; -import java.awt.*; -import java.util.List; -import java.util.*; -import java.util.function.Function; -import java.util.stream.Collectors; - -/* - "The actual outlet of the power is not chosen by the practitioner, but instead is hardwritten into their Spiritweb" - -Khriss - https://coppermind.net/wiki/Ars_Arcanum#The_Alloy_of_Law - */ - -public class SpiritwebCapability implements ISpiritweb -{ - //region Render stuff. - final static ItemStack positiveActiveStack = new ItemStack(Blocks.SOUL_TORCH); - final static ItemStack negativeActiveStack = new ItemStack(Blocks.REDSTONE_TORCH); - final static ItemStack inactiveStack = new ItemStack(Items.STICK); - //endregion - - - //Injection - @CapabilityInject(ISpiritweb.class) - public static final Capability CAPABILITY = null; - - //detect if capability has been set up yet - private boolean didSetup = false; - - private final LivingEntity livingEntity; - - public final Map MANIFESTATIONS_MODE = - Arrays.stream(ManifestationTypes.values()) - .collect(Collectors.toMap( - Function.identity(), - type -> new int[Metals.MetalType.values().length]));//todo come back here eventually because not all power types will be the same as num metals. and some metals don't have powers >:( - - private AManifestation selectedManifestation = ManifestationRegistry.NONE.get(); - - //biochromatic breaths stored. - //todo, figure out how the passive buff works - private int biochromaticBreathStored = 0; - - //stormlight stored - - private int stormlightStored = 0; - - //metals ingested - public final Map METALS_INGESTED = - Arrays.stream(Metals.MetalType.values()) - .collect(Collectors.toMap(Function.identity(), type -> 0)); - - public List pushBlocks = new ArrayList<>(4); - public List pushEntities = new ArrayList<>(4); - - public List pullBlocks = new ArrayList<>(4); - public List pullEntities = new ArrayList<>(4); - - - public SpiritwebCapability(LivingEntity ent) - { - this.livingEntity = ent; - } - - - @Nonnull - public static LazyOptional get(LivingEntity entity) - { - return entity instanceof LivingEntity ? entity.getCapability(SpiritwebCapability.CAPABILITY, null) - : LazyOptional.empty(); - } - - @Override - public CompoundNBT serializeNBT() - { - CompoundNBT nbt = new CompoundNBT(); - - nbt.putString("selected_power", selectedManifestation.getRegistryName().toString()); - nbt.putInt("stored_breaths", biochromaticBreathStored); - nbt.putInt("stored_stormlight", stormlightStored); - - for (ManifestationTypes manifestationType : ManifestationTypes.values()) - { - String manifestationTypeName = manifestationType.name().toLowerCase(); - nbt.putIntArray(manifestationTypeName + "_mode", MANIFESTATIONS_MODE.get(manifestationType)); - } - - for (Metals.MetalType metalType : Metals.MetalType.values()) - { - nbt.putInt(metalType.name().toLowerCase() + "_ingested", METALS_INGESTED.get(metalType)); - } - - return nbt; - } - - @Override - public void deserializeNBT(CompoundNBT nbt) - { - for (ManifestationTypes manifestationType : ManifestationTypes.values()) - { - String manifestationTypeName = manifestationType.name().toLowerCase(); - - int[] storedIntArray = nbt.getIntArray(manifestationTypeName + "_mode"); - int length = storedIntArray.length; - - for (int i = 0; i < length; i++) - { - //doing it this way for backwards compatibility in cases where we add new powers. - MANIFESTATIONS_MODE.get(manifestationType)[i] = storedIntArray[i]; - } - } - selectedManifestation = ManifestationRegistry.fromID(nbt.getString("selected_power")); - - biochromaticBreathStored = nbt.getInt("stored_breaths"); - stormlightStored = nbt.getInt("stored_stormlight"); - - for (Metals.MetalType metalType : Metals.MetalType.values()) - { - METALS_INGESTED.put(metalType, nbt.getInt(metalType.name().toLowerCase() + "_ingested")); - } - } - - @Override - public void tick() - { - if (!livingEntity.world.isRemote) - { - //Login setup - if (!didSetup) - { - syncToClients(null); - didSetup = true; - } - - //Tick - for (AManifestation manifestation : ManifestationRegistry.MANIFESTATION_REGISTRY.get()) - { - //don't tick powers that the user doesn't have - //don't tick powers that are not active - if (manifestationActive(manifestation.getManifestationType(), manifestation.getPowerID())) - { - manifestation.tick(this); - } - } - - //tick metals - if (livingEntity.ticksExisted % 1200 == 0) - { - //metals can't stay in your system forever, y'know? - for (Metals.MetalType metalType : Metals.MetalType.values()) - { - Integer metalIngestAmount = METALS_INGESTED.get(metalType); - if (metalIngestAmount > 0) - { - //todo decide how and when we poison the user for eating metal, that sure ain't safe champ. - - - //todo, decide what's appropriate for reducing ingested metal amounts - METALS_INGESTED.put(metalType, metalIngestAmount - 1); - } - } - - - } - - //tick stormlight - if (stormlightStored > 0 && livingEntity.ticksExisted % 100 == 0) - { - //todo decide what's appropriate for reducing stormlight - //maybe reducing cost based on how many ideals they have sworn? - stormlightStored--; - } - - } - else - { - AManifestation iron = ManifestationRegistry.ALLOMANCY_POWERS.get(Metals.MetalType.IRON).get(); - - if (manifestationActive(iron.getManifestationType(), iron.getPowerID())) - { - ((AllomancyIronSteel) iron).performEffect(this); - } - - AManifestation steel = ManifestationRegistry.ALLOMANCY_POWERS.get(Metals.MetalType.STEEL).get(); - if (manifestationActive(steel.getManifestationType(), steel.getPowerID())) - { - ((AllomancyIronSteel) steel).performEffect(this); - } - } - } - - @Override - public LivingEntity getLiving() - { - return livingEntity; - } - - @Override - public int getIngestedMetal(Metals.MetalType metalType) - { - return METALS_INGESTED.get(metalType); - } - - @Override - public boolean adjustIngestedMetal(Metals.MetalType metalType, int val, boolean doAdjust) - { - int ingestedMetal = getIngestedMetal(metalType); - val = Math.min(ingestedMetal, val); - - if (ingestedMetal >= val) - { - if (doAdjust) - { - METALS_INGESTED.put(metalType, ingestedMetal + val); - } - - return true; - } - return false; - } - - @OnlyIn(Dist.CLIENT) - @Override - public void renderWorldEffects(RenderWorldLastEvent event) - { - Multimap> linesToDrawByColor = LinkedHashMultimap.create(); - - //if user has iron or steel manifestation - if (hasManifestation(ManifestationTypes.ALLOMANCY, Metals.MetalType.IRON.getID()) - || hasManifestation(ManifestationTypes.ALLOMANCY, Metals.MetalType.STEEL.getID())) - { - AllomancyIronSteel iron = (AllomancyIronSteel) ManifestationRegistry.ALLOMANCY_POWERS.get(Metals.MetalType.IRON).get(); - AllomancyIronSteel steel = (AllomancyIronSteel) ManifestationRegistry.ALLOMANCY_POWERS.get(Metals.MetalType.STEEL).get(); - - //is zero if the manifestation is not active. - int range = Math.max(iron.getRange(this), steel.getRange(this)); - - if (range > 0) - { - linesToDrawByColor.put(Color.BLUE, AllomancyIronSteel.getDrawLines(range)); - } - } - if (linesToDrawByColor.size() > 0) - { - Vector3d originPoint = getLiving().getClientEyePosition(Minecraft.getInstance().getRenderPartialTicks()).add(0, -1, 0); - for (Map.Entry> entry : linesToDrawByColor.entries()) - { - //For all found things, draw the line - DrawUtils.drawLinesFromPoint(event, originPoint, entry.getValue(), entry.getKey()); - } - } - } - - - public void renderSelectedHUD(MatrixStack ms) - { - Minecraft mc = Minecraft.getInstance(); - MainWindow mainWindow = mc.getMainWindow(); - int x = 10; - int y = mainWindow.getScaledHeight() / 5; - - //todo translations - String stringToDraw = "Selected Power: " + I18n.format(selectedManifestation.translation().getString()); - mc.fontRenderer.drawStringWithShadow(ms, stringToDraw, x + 18, y, 0xFF4444); - - int mode = getMode(selectedManifestation.getManifestationType(), selectedManifestation.getPowerID()); - String stringToDraw2 = "Mode: " + mode; - mc.fontRenderer.drawStringWithShadow(ms, stringToDraw2, x + 18, y + 10, 0xFF4444); - - - ItemStack stack; - - if (mode > 0) - { - stack = positiveActiveStack; - } - else if (mode < 0) - { - stack = negativeActiveStack; - } - else - { - stack = inactiveStack; - } - - mc.getItemRenderer().renderItemAndEffectIntoGUI(stack, x, y); - - } - - @Override - public void setSelectedManifestation(AManifestation manifestation) - { - selectedManifestation = manifestation; - } - - public boolean hasAnyPowers() - { - for (AManifestation manifestation : ManifestationRegistry.MANIFESTATION_REGISTRY.get()) - { - String path = manifestation.getRegistryName().getPath(); - - if (!AttributesRegistry.MANIFESTATION_STRENGTH_ATTRIBUTES.containsKey(path)) - { - continue; - } - - RegistryObject attributeRegistryObject = AttributesRegistry.MANIFESTATION_STRENGTH_ATTRIBUTES.get(path); - Attribute attribute = attributeRegistryObject.get(); - - ModifiableAttributeInstance manifestationAttribute = livingEntity.getAttribute(attribute); - if (manifestationAttribute == null) - { - continue; - } - - if (manifestationAttribute.getValue() > 5) - { - return true; - } - } - - - return false; - } - - @Override - public boolean hasManifestation(ManifestationTypes manifestationTypeID, int powerID) - { - return hasManifestation(manifestationTypeID, powerID, false); - } - - @Override - public boolean hasManifestation(ManifestationTypes manifestationTypeID, int powerID, boolean ignoreTemporaryPower) - { - AManifestation manifestation = manifestationTypeID.getManifestation(powerID); - String manifestationName = manifestation.getRegistryName().getPath(); - if (!AttributesRegistry.MANIFESTATION_STRENGTH_ATTRIBUTES.containsKey(manifestationName)) - { - return false; - } - - Attribute attribute = AttributesRegistry.MANIFESTATION_STRENGTH_ATTRIBUTES.get(manifestationName).get(); - ModifiableAttributeInstance manifestationAttribute = livingEntity.getAttribute(attribute); - - if (manifestationAttribute != null) - { - double manifestationStrength = - ignoreTemporaryPower ? manifestationAttribute.getBaseValue() : manifestationAttribute.getValue(); - - return manifestationStrength > 5; - } - return false; - } - - - @Override - public void giveManifestation(ManifestationTypes manifestationTypeID, int powerID) - { - AManifestation manifestation = manifestationTypeID.getManifestation(powerID); - - String manifestationName = manifestation.getRegistryName().getPath(); - if (!AttributesRegistry.MANIFESTATION_STRENGTH_ATTRIBUTES.containsKey(manifestationName)) - { - return; - } - RegistryObject attributeRegistryObject = AttributesRegistry.MANIFESTATION_STRENGTH_ATTRIBUTES.get(manifestationName); - - Attribute attribute = attributeRegistryObject.get(); - ModifiableAttributeInstance manifestationAttribute = livingEntity.getAttribute(attribute); - - if (manifestationAttribute != null) - { - manifestationAttribute.setBaseValue(10); - - /*AttributeModifier attributeModifier = AttributeHelper.makeAttribute(manifestationName, "inherent ", 10, AttributeModifier.Operation.ADDITION); - manifestationAttribute.removeModifier(attributeModifier); - manifestationAttribute.applyNonPersistentModifier(attributeModifier);*/ - - } - } - - @Override - public void removeManifestation(ManifestationTypes manifestationTypeID, int powerID) - { - AManifestation manifestation = manifestationTypeID.getManifestation(powerID); - String path = manifestation.getRegistryName().getPath(); - - if (!AttributesRegistry.MANIFESTATION_STRENGTH_ATTRIBUTES.containsKey(path)) - { - return; - } - - RegistryObject attributeRegistryObject = AttributesRegistry.MANIFESTATION_STRENGTH_ATTRIBUTES.get(path); - - Attribute attribute = attributeRegistryObject.get(); - ModifiableAttributeInstance manifestationAttribute = livingEntity.getAttribute(attribute); - if (manifestationAttribute != null) - { - manifestationAttribute.setBaseValue(0); - } - } - - @Override - public boolean manifestationActive(ManifestationTypes manifestationType, int powerID) - { - if (!hasManifestation(manifestationType, powerID)) - { - return false; - } - - int[] manifestationPowersModes = MANIFESTATIONS_MODE.get(manifestationType); - - if (manifestationType == ManifestationTypes.NONE || manifestationPowersModes.length == 0) - { - return false; - } - - return manifestationPowersModes[powerID] != 0; - } - - @Override - public boolean selectedManifestationActive() - { - if (selectedManifestation == null) - { - return false; - } - - return manifestationActive(selectedManifestation.getManifestationType(), selectedManifestation.getPowerID()); - } - - @Override - public void deactivateCurrentManifestation() - { - MANIFESTATIONS_MODE.get(selectedManifestation.getManifestationType())[selectedManifestation.getPowerID()] = 0; - } - - @Override - public void deactivateManifestations() - { - for (ManifestationTypes manifestationTypes : ManifestationTypes.values()) - { - Arrays.fill(MANIFESTATIONS_MODE.get(manifestationTypes), 0); - } - } - - @Override - public void clearManifestations() - { - deactivateManifestations(); - - for (AManifestation manifestation : ManifestationRegistry.MANIFESTATION_REGISTRY.get()) - { - removeManifestation(manifestation.getManifestationType(), manifestation.getPowerID()); - } - } - - @Override - public List getAvailableManifestations() - { - return getAvailableManifestations(false); - } - - @Override - public List getAvailableManifestations(boolean ignoreTemporaryPower) - { - List list = new ArrayList(); - - for (int i = 0; i < 16; i++) - { - for (ManifestationTypes manifestationTypes : ManifestationTypes.values()) - { - if (hasManifestation(manifestationTypes, i, ignoreTemporaryPower)) - { - list.add(manifestationTypes.getManifestation(i)); - } - } - } - - return list; - } - - @Override - public AManifestation manifestation() - { - return selectedManifestation; - } - - - @Override - public AManifestation manifestation(ManifestationTypes manifestationType, int powerID) - { - return manifestationType.getManifestation(powerID); - } - - @Override - public String changeManifestation(int dir) - { - List unlockedManifestations = getAvailableManifestations(); - - if (selectedManifestation == ManifestationRegistry.NONE.get()) - { - selectedManifestation = unlockedManifestations.get(0); - } - else - { - for (int index = 0; index < unlockedManifestations.size(); index++) - { - AManifestation manifestation = unlockedManifestations.get(index); - if (selectedManifestation == manifestation) - { - //found a match, - int selection = index; - - selection += (dir < 0) ? 1 : -1; - selection = (selection + unlockedManifestations.size()) % unlockedManifestations.size(); - - selectedManifestation = unlockedManifestations.get(selection); - break; - } - - } - } - return selectedManifestation.translation().getKey(); - } - - @Override - public void setMode(ManifestationTypes manifestationTypeID, int powerID, int mode) - { - MANIFESTATIONS_MODE.get(manifestationTypeID)[powerID] = mode; - } - - @Override - public int getMode(ManifestationTypes manifestationTypeID, int powerID) - { - return MANIFESTATIONS_MODE.get(manifestationTypeID)[powerID]; - } - - @Override - public int nextMode(ManifestationTypes manifestationType, int powerID) - { - - AManifestation aim = manifestationType.getManifestation(powerID); - - int currentMode = getMode(manifestationType, powerID); - - if (aim.modeWraps(this) && currentMode == aim.modeMax(this)) - { - int modeMin = aim.modeMin(this); - this.setMode(manifestationType, powerID, modeMin); - return modeMin; - } - - int mode = Math.min(currentMode + 1, aim.modeMax(this)); - this.setMode(manifestationType, powerID, mode); - - return mode; - } - - @Override - public int previousMode(ManifestationTypes manifestationType, int powerID) - { - AManifestation aim = manifestationType.getManifestation(powerID); - - int currentMode = getMode(manifestationType, powerID); - - if (aim.modeWraps(this) && currentMode == aim.modeMin(this)) - { - int modeMax = aim.modeMax(this); - this.setMode(manifestationType, powerID, modeMax); - return modeMax; - } - - int mode = Math.max(currentMode - 1, aim.modeMin(this)); - this.setMode(manifestationType, powerID, mode); - return mode; - } - - @Override - public void syncToClients(@Nullable ServerPlayerEntity serverPlayerEntity) - { - if (livingEntity != null && livingEntity.world.isRemote) - { - throw new IllegalStateException("Don't sync client -> server"); - } - - if (manifestation() == ManifestationRegistry.NONE.get()) - { - //find first power - Optional first = getAvailableManifestations().stream().findFirst(); - first.ifPresent(this::setSelectedManifestation); - } - - CompoundNBT nbt = serializeNBT(); - - if (serverPlayerEntity == null) - { - Network.sendToAllInWorld(new SyncPlayerSpiritwebMessage(this.livingEntity.getEntityId(), nbt), (ServerWorld) livingEntity.world); - } - else - { - Network.sendTo(new SyncPlayerSpiritwebMessage(this.livingEntity.getEntityId(), nbt), serverPlayerEntity); - } - } -} diff --git a/src/main/java/leaf/cosmere/charge/IChargeable.java b/src/main/java/leaf/cosmere/charge/IChargeable.java deleted file mode 100644 index 230aa141b..000000000 --- a/src/main/java/leaf/cosmere/charge/IChargeable.java +++ /dev/null @@ -1,151 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - * - * Special thank you to Vazkii and their Mod Botania for providing the itemstack NBT interaction example! - * https://github.com/Vazkii/Botania - * I've used their example of storing mana as the basis for storing different types of feruchemical attributes. - * In future, will also be doing it for gems and stormlight. - */ - -package leaf.cosmere.charge; - -import leaf.cosmere.constants.Constants; -import leaf.cosmere.constants.Metals; -import leaf.cosmere.utils.helpers.StackNBTHelper; -import leaf.cosmere.utils.helpers.PlayerHelper; -import leaf.cosmere.registry.EffectsRegistry; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.ItemStack; -import net.minecraft.potion.EffectInstance; -import net.minecraft.util.math.MathHelper; - -import java.util.UUID; - -//item based chargeable -public interface IChargeable -{ - default int getMaxCharge(ItemStack itemStack) - { - return MathHelper.floor(18000 * getMaxChargeModifier()); - } - - default float getMaxChargeModifier() - { - return 1; - } - - default int getCharge(ItemStack itemStack) - { - return StackNBTHelper.getInt(itemStack, Constants.NBT.CHARGE_LEVEL, 0); - } - - default void setCharge(ItemStack itemStack, int chargeLevel) - { - StackNBTHelper.setInt(itemStack, Constants.NBT.CHARGE_LEVEL, MathHelper.clamp(chargeLevel, 0, this.getMaxCharge(itemStack))); - } - - default boolean trySetAttunedPlayer(ItemStack itemStack, PlayerEntity entity) - { - UUID attunedPlayerID = getAttunedPlayer(itemStack); - UUID playerID = entity.getUniqueID(); - - boolean noAttunedPlayer = attunedPlayerID == null; - - if (noAttunedPlayer) - { - //No attuned player! Check to see whether they are storing identity - EffectInstance storingIdentity = entity.getActivePotionEffect(EffectsRegistry.STORING_EFFECTS.get(Metals.MetalType.ALUMINUM).get()); - //if they are - if (storingIdentity != null && storingIdentity.getDuration() > 0) - { - //then set the metalmind to "unsealed". Any feruchemist with access to that power can use the metalmind - StackNBTHelper.setUuid(itemStack,Constants.NBT.ATTUNED_PLAYER, Constants.NBT.UNSEALED_UUID); - StackNBTHelper.setString(itemStack, Constants.NBT.ATTUNED_PLAYER_NAME, "Unsealed"); // todo translation - return true; - - } - } - - //if theres no attuned player on the metalmind - //or if the player is attuned to the metalmind - //or if the metalmind is unsealed (anyone can access) - if (noAttunedPlayer || attunedPlayerID.compareTo(playerID) == 0 || attunedPlayerID.compareTo(Constants.NBT.UNSEALED_UUID) == 0) - { - if (noAttunedPlayer) - { - setAttunedPlayer(itemStack, entity); - setAttunedPlayerName(itemStack, entity); - } - //auto success if that player is already attuned - return true; - } - - return false; - } - - default void setAttunedPlayer(ItemStack itemStack, PlayerEntity entity) - { - StackNBTHelper.setUuid(itemStack, Constants.NBT.ATTUNED_PLAYER, entity.getUniqueID()); - } - - default UUID getAttunedPlayer(ItemStack itemStack) - { - return StackNBTHelper.getUuid(itemStack, Constants.NBT.ATTUNED_PLAYER); - } - - default void setAttunedPlayerName(ItemStack itemStack, PlayerEntity entity) - { - String playerName = PlayerHelper.getPlayerName(entity.getUniqueID(), entity.getServer()); - StackNBTHelper.setString(itemStack, Constants.NBT.ATTUNED_PLAYER_NAME, playerName); - } - - default String getAttunedPlayerName(ItemStack itemStack) - { - return StackNBTHelper.getString(itemStack, Constants.NBT.ATTUNED_PLAYER_NAME, ""); - } - - default boolean getPlayerIsAttuned(ItemStack itemStack, PlayerEntity entity) - { - EffectInstance storingIdentityEffect = entity.getActivePotionEffect(EffectsRegistry.STORING_EFFECTS.get(Metals.MetalType.ALUMINUM).get()); - boolean noIdentityPlayer = storingIdentityEffect != null && storingIdentityEffect.getDuration() > 0; - - UUID itemAttunedPlayerUUID = getAttunedPlayer(itemStack); - //null means not attuned at all, so can assume player is attuned with it - return noIdentityPlayer || itemAttunedPlayerUUID == null || itemAttunedPlayerUUID == entity.getUniqueID(); - } - - - default void adjustCharge(ItemStack stack, int chargeToAdjustBy) - { - int currentCharge = getCharge(stack); - int goalCharge = currentCharge + chargeToAdjustBy; - int actualGoalCharge = Math.min(goalCharge, getMaxCharge(stack)); - int finalChargeValue = (int) (actualGoalCharge / stack.getCount()); - - setCharge(stack, finalChargeValue); - } - - default void increaseCurrentCharge(ItemStack itemStack) - { - int currentCharge = getCharge(itemStack); - int nextChargeLevel = currentCharge + 1; - setCharge(itemStack, (int) nextChargeLevel); - } - - default void decreaseCurrentCharge(ItemStack itemStack) - { - int currentCharge = getCharge(itemStack); - int nextChargeLevel = currentCharge - 1; - setCharge(itemStack, (int) nextChargeLevel); - } - - default boolean canGiveChargeToItem(ItemStack stackInSlot, ItemStack stack) - { - return true; - } - - default boolean canReceiveChargeFromItem(ItemStack stack, ItemStack stackInSlot) - { - return true; - } -} diff --git a/src/main/java/leaf/cosmere/charge/ItemChargeHelper.java b/src/main/java/leaf/cosmere/charge/ItemChargeHelper.java deleted file mode 100644 index 356994904..000000000 --- a/src/main/java/leaf/cosmere/charge/ItemChargeHelper.java +++ /dev/null @@ -1,392 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - * - * Special thank you to Vazkii and their Mod Botania for providing the itemstack NBT interaction example! - * https://github.com/Vazkii/Botania - * I've used their example of storing mana as the basis for storing different types of feruchemical attributes. - * In future, will also be doing it for gems and stormlight. - */ - -package leaf.cosmere.charge; - -import com.google.common.collect.Iterables; -import leaf.cosmere.compat.curios.CuriosCompat; -import leaf.cosmere.constants.Constants; -import leaf.cosmere.constants.Metals; -import leaf.cosmere.items.CapWrapper; -import leaf.cosmere.registry.EffectsRegistry; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.inventory.IInventory; -import net.minecraft.item.ItemStack; -import net.minecraft.potion.EffectInstance; -import net.minecraftforge.items.wrapper.EmptyHandler; -import net.minecraftforge.items.wrapper.PlayerInvWrapper; -import top.theillusivec4.curios.api.CuriosApi; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -public class ItemChargeHelper -{ - - public static List getChargeItems(PlayerEntity player) - { - if (player == null) - { - return Collections.emptyList(); - } - - IInventory acc = new CapWrapper(new PlayerInvWrapper(player.inventory)); - - List toReturn = getChargeableItemStacks(acc); - - return toReturn; - } - - public static List getChargeCurios(PlayerEntity player) - { - if (player == null || !CuriosCompat.CuriosIsPresent()) - { - return Collections.emptyList(); - } - - IInventory acc = new CapWrapper(CuriosApi.getCuriosHelper().getEquippedCurios(player).orElseGet(EmptyHandler::new)); - - List toReturn = getChargeableItemStacks(acc); - - return toReturn; - } - - private static List getChargeableItemStacks(IInventory acc) - { - List toReturn = new ArrayList<>(acc.getSizeInventory()); - - for (int slot = 0; slot < acc.getSizeInventory(); slot++) - { - ItemStack stackInSlot = acc.getStackInSlot(slot); - - if (!stackInSlot.isEmpty() && stackInSlot.getItem() instanceof IChargeable) - { - toReturn.add(stackInSlot); - } - } - return toReturn; - } - - public static int requestCharge(ItemStack stack, PlayerEntity player, int chargeToGet, boolean remove) - { - return requestCharge(stack, player, chargeToGet, remove, false); - } - - public static int requestCharge(ItemStack stack, PlayerEntity player, int chargeToGet, boolean remove, boolean checkPlayerID) - { - if (stack.isEmpty()) - { - return 0; - } - - List items = getChargeItems(player); - List acc = getChargeCurios(player); - for (ItemStack stackInSlot : Iterables.concat(items, acc)) - { - if (stackInSlot == stack) - { - continue; - } - IChargeable chargeItem = (IChargeable) stackInSlot.getItem(); - if (chargeItem.canGiveChargeToItem(stackInSlot, stack) && chargeItem.getCharge(stackInSlot) > 0) - { - if (stack.getItem() instanceof IChargeable && !((IChargeable) stack.getItem()).canReceiveChargeFromItem(stack, stackInSlot)) - { - continue; - } - //don't let non attuned players use the charge if not allowed. - if (checkPlayerID && !chargeItem.getPlayerIsAttuned(stackInSlot, player)) - { - continue; - } - - int charge = Math.min(chargeToGet, chargeItem.getCharge(stackInSlot)); - - if (remove) - { - chargeItem.adjustCharge(stackInSlot, -charge); - } - - return charge; - } - } - - return 0; - } - - - public static ItemStack adjustChargeExact(PlayerEntity player, int chargeToGet, boolean remove) - { - return adjustChargeExact(player, chargeToGet, remove, false); - } - - public static ItemStack adjustChargeExact(PlayerEntity player, int chargeToGet, boolean remove, boolean checkPlayer) - { - List items = getChargeItems(player); - List acc = getChargeCurios(player); - - return adjustChargeExact(player, chargeToGet, remove, checkPlayer, items, acc); - } - - public static ItemStack adjustChargeExact(PlayerEntity player, int chargeToGet, boolean remove, boolean checkPlayer, List items, List acc) - { - EffectInstance storingIdentity = player.getActivePotionEffect(EffectsRegistry.STORING_EFFECTS.get(Metals.MetalType.ALUMINUM).get()); - boolean isStoringIdentity = (storingIdentity != null && storingIdentity.getDuration() > 0); - - - for (ItemStack stackInSlot : Iterables.concat(items, acc)) - { - IChargeable chargeItemSlot = (IChargeable) stackInSlot.getItem(); - - boolean playerUnableToAccess = !chargeItemSlot.trySetAttunedPlayer(stackInSlot, player); - if (checkPlayer && playerUnableToAccess //if we need to make sure the player has access and they do not - || //or if the player is trying to store in an unsealed metalmind but have identity - chargeToGet < 0 && !isStoringIdentity && chargeItemSlot.getAttunedPlayer(stackInSlot).compareTo(Constants.NBT.UNSEALED_UUID) == 0) - { - continue; - } - - if (chargeItemSlot.getCharge(stackInSlot) > chargeToGet) - { - if (remove) - { - chargeItemSlot.adjustCharge(stackInSlot, -chargeToGet); - } - - return stackInSlot; - } - } - - return null; - } - - - public static boolean requestChargeExact(ItemStack stack, PlayerEntity player, int chargeToGet, boolean remove) - { - if (stack.isEmpty()) - { - return false; - } - - List items = getChargeItems(player); - List acc = getChargeCurios(player); - for (ItemStack stackInSlot : Iterables.concat(items, acc)) - { - if (stackInSlot == stack) - { - continue; - } - IChargeable chargeItemSlot = (IChargeable) stackInSlot.getItem(); - if (chargeItemSlot.canGiveChargeToItem(stackInSlot, stack) && chargeItemSlot.getCharge(stackInSlot) > chargeToGet) - { - if (stack.getItem() instanceof IChargeable && !((IChargeable) stack.getItem()).canReceiveChargeFromItem(stack, stackInSlot)) - { - continue; - } - - if (remove) - { - chargeItemSlot.adjustCharge(stackInSlot, -chargeToGet); - } - - return true; - } - } - - return false; - } - - public static int dispatchCharge(PlayerEntity player, int chargeToSend, boolean add) - { - List items = getChargeItems(player); - List acc = getChargeCurios(player); - for (ItemStack stackInSlot : Iterables.concat(items, acc)) - { - IChargeable chargeItemSlot = (IChargeable) stackInSlot.getItem(); - - int received; - if (chargeItemSlot.getCharge(stackInSlot) + chargeToSend <= chargeItemSlot.getMaxCharge(stackInSlot)) - { - received = chargeToSend; - } - else - { - received = chargeToSend - (chargeItemSlot.getCharge(stackInSlot) + chargeToSend - chargeItemSlot.getMaxCharge(stackInSlot)); - } - - if (add) - { - chargeItemSlot.adjustCharge(stackInSlot, chargeToSend); - } - - return received; - } - - return 0; - } - - public static int dispatchCharge(ItemStack stack, PlayerEntity player, int chargeToSend, boolean add) - { - if (stack.isEmpty()) - { - return 0; - } - - List items = getChargeItems(player); - List acc = getChargeCurios(player); - for (ItemStack stackInSlot : Iterables.concat(items, acc)) - { - if (stackInSlot == stack) - { - continue; - } - IChargeable chargeItemSlot = (IChargeable) stackInSlot.getItem(); - if (chargeItemSlot.canReceiveChargeFromItem(stackInSlot, stack)) - { - if (stack.getItem() instanceof IChargeable && !((IChargeable) stack.getItem()).canGiveChargeToItem(stack, stackInSlot)) - { - continue; - } - - int received; - if (chargeItemSlot.getCharge(stackInSlot) + chargeToSend <= chargeItemSlot.getMaxCharge(stackInSlot)) - { - received = chargeToSend; - } - else - { - received = chargeToSend - (chargeItemSlot.getCharge(stackInSlot) + chargeToSend - chargeItemSlot.getMaxCharge(stackInSlot)); - } - - if (add) - { - chargeItemSlot.adjustCharge(stackInSlot, chargeToSend); - } - - return received; - } - } - - return 0; - } - - - public static boolean dispatchChargeExact(ItemStack stack, PlayerEntity player, int chargeToSend, boolean add) - { - if (stack.isEmpty()) - { - return false; - } - - List items = getChargeItems(player); - List acc = getChargeCurios(player); - for (ItemStack stackInSlot : Iterables.concat(items, acc)) - { - if (stackInSlot == stack) - { - continue; - } - IChargeable chargeItemSlot = (IChargeable) stackInSlot.getItem(); - if (chargeItemSlot.getCharge(stackInSlot) + chargeToSend <= chargeItemSlot.getMaxCharge(stackInSlot) && chargeItemSlot.canReceiveChargeFromItem(stackInSlot, stack)) - { - if (stack.getItem() instanceof IChargeable && !((IChargeable) stack.getItem()).canGiveChargeToItem(stack, stackInSlot)) - { - continue; - } - - if (add) - { - chargeItemSlot.adjustCharge(stackInSlot, chargeToSend); - } - - return true; - } - } - - return false; - } - - private static int discountChargeForTool(ItemStack stack, PlayerEntity player, int inCost) - { - float multiplier = Math.max(0F, 1F - getFullDiscountForTools(player, stack)); - return (int) (inCost * multiplier); - } - - - public static int requestChargeForTool(ItemStack stack, PlayerEntity player, int chargeToGet, boolean remove) - { - int cost = discountChargeForTool(stack, player, chargeToGet); - return requestCharge(stack, player, cost, remove); - } - - - public static boolean requestChargeExactForTool(ItemStack stack, PlayerEntity player, int chargeToGet, boolean remove) - { - int cost = discountChargeForTool(stack, player, chargeToGet); - return requestChargeExact(stack, player, cost, remove); - } - - - public static int getInvocationCountForTool(ItemStack stack, PlayerEntity player, int chargeToGet) - { - if (stack.isEmpty()) - { - return 0; - } - - int cost = discountChargeForTool(stack, player, chargeToGet); - int invocations = 0; - - List items = getChargeItems(player); - List acc = getChargeCurios(player); - for (ItemStack stackInSlot : Iterables.concat(items, acc)) - { - if (stackInSlot == stack) - { - continue; - } - IChargeable chargeItemSlot = (IChargeable) stackInSlot.getItem(); - int availableCharge = chargeItemSlot.getCharge(stackInSlot); - if (chargeItemSlot.canGiveChargeToItem(stackInSlot, stack) && availableCharge > cost) - { - if (stack.getItem() instanceof IChargeable && !((IChargeable) stack.getItem()).canReceiveChargeFromItem(stack, stackInSlot)) - { - continue; - } - - invocations += availableCharge / cost; - } - } - - return invocations; - } - - - public static float getFullDiscountForTools(PlayerEntity player, ItemStack tool) - { - float discount = 0F; - //todo discount - /*for (int i = 0; i < player.inventory.armorInventory.size(); i++) { - ItemStack armor = player.inventory.armorInventory.get(i); - if (!armor.isEmpty() && armor.getItem() instanceof IChargeDiscountArmor) { - discount += ((IChargeDiscountArmor) armor.getItem()).getDiscount(armor, i, player, tool); - } - } - - int unbreaking = EnchantmentHelper.getEnchantmentLevel(Enchantments.UNBREAKING, tool); - discount += unbreaking * 0.05F; - - ChargeDiscountEvent event = new ChargeDiscountEvent(player, discount, tool); - MinecraftForge.EVENT_BUS.post(event); - discount = event.getDiscount();*/ - - return discount; - } -} diff --git a/src/main/java/leaf/cosmere/charge/MetalmindChargeHelper.java b/src/main/java/leaf/cosmere/charge/MetalmindChargeHelper.java deleted file mode 100644 index 3490b4a40..000000000 --- a/src/main/java/leaf/cosmere/charge/MetalmindChargeHelper.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * File created ~ 29 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.charge; - -import leaf.cosmere.cap.entity.ISpiritweb; -import leaf.cosmere.constants.Manifestations; -import leaf.cosmere.constants.Metals; -import leaf.cosmere.items.Metalmind; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.CompoundNBT; - -import java.util.List; - -public class MetalmindChargeHelper -{ - public static boolean adjustMetalmindChargeExact(ISpiritweb data, Metals.MetalType metalType, int chargeToGet, boolean remove, boolean checkPlayer) - { - PlayerEntity player = (PlayerEntity) data.getLiving(); - ItemStack metalmind = adjustMetalmindChargeExact(player, metalType, chargeToGet, remove, checkPlayer); - boolean success = metalmind != null; - - //extra metalmind logic. - //if we are actually updating the charge inside - //and if we are adding to it (chargeToGet is negative if adding to metalmind) - // and if the metal is nicrosil, which is the storing investiture type. - if (success && remove && chargeToGet < 0 && metalType == Metals.MetalType.NICROSIL) - { - //player is storing investiture, - //set the powers they have to the stack. - - CompoundNBT nbt = metalmind.getOrCreateChildTag("StoredInvestiture"); - //for each power the user has access to - for (Manifestations.ManifestationTypes manifestationType : Manifestations.ManifestationTypes.values()) - { - for (int i = 0; i < 16; i++) - { - //even if it's granted from hemalurgy/temporary - //update the nbt. - //this will add/remove powers based on what the user currently has. - //todo, come back to this later when more sleep. bugs me about losing potential stored powers - nbt.putBoolean( - manifestationType.getManifestation(i).getRegistryName().getPath(), - data.hasManifestation(manifestationType, i) - ); - } - } - } - - return success; - } - - public static ItemStack adjustMetalmindChargeExact(PlayerEntity player, Metals.MetalType metalType, int chargeToGet, boolean remove, boolean checkPlayer) - { - List items = ItemChargeHelper.getChargeItems(player); - List acc = ItemChargeHelper.getChargeCurios(player); - - //remove items that don't match the metal type we are looking for - items.removeIf(obj -> - { - boolean objectIsNotMetalmind = !(obj.getItem() instanceof Metalmind); - boolean metalMindIsNotCorrectType = ((Metalmind) obj.getItem()).getMetalType() != metalType; - - return (objectIsNotMetalmind || metalMindIsNotCorrectType); - } - ); - acc.removeIf(obj -> - { - boolean objectIsNotMetalmind = !(obj.getItem() instanceof Metalmind); - boolean metalMindIsNotCorrectType = ((Metalmind) obj.getItem()).getMetalType() != metalType; - - return (objectIsNotMetalmind || metalMindIsNotCorrectType); - } - ); - - return ItemChargeHelper.adjustChargeExact(player, chargeToGet, remove, checkPlayer, items, acc); - } -} diff --git a/src/main/java/leaf/cosmere/client/ClientEvents.java b/src/main/java/leaf/cosmere/client/ClientEvents.java deleted file mode 100644 index d2ba7484e..000000000 --- a/src/main/java/leaf/cosmere/client/ClientEvents.java +++ /dev/null @@ -1,165 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.client; - -import com.mojang.blaze3d.systems.RenderSystem; -import leaf.cosmere.Cosmere; -import leaf.cosmere.cap.entity.SpiritwebCapability; -import leaf.cosmere.client.gui.SpiritwebMenu; -import leaf.cosmere.network.Network; -import leaf.cosmere.network.packets.ChangeManifestationModeMessage; -import leaf.cosmere.network.packets.ChangeSelectedManifestationMessage; -import leaf.cosmere.network.packets.DeactivateCurrentManifestationsMessage; -import leaf.cosmere.registry.KeybindingRegistry; -import net.minecraft.client.Minecraft; -import net.minecraft.client.entity.player.ClientPlayerEntity; -import net.minecraft.client.settings.KeyBinding; -import net.minecraft.item.ItemStack; -import net.minecraft.profiler.IProfiler; -import net.minecraft.util.Hand; -import net.minecraft.util.math.MathHelper; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.client.event.InputEvent; -import net.minecraftforge.client.event.InputEvent.MouseScrollEvent; -import net.minecraftforge.client.event.InputUpdateEvent; -import net.minecraftforge.client.event.RenderGameOverlayEvent; -import net.minecraftforge.client.event.RenderWorldLastEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.common.Mod; - -@Mod.EventBusSubscriber(modid = Cosmere.MODID, value = Dist.CLIENT) -public class ClientEvents -{ - - @SubscribeEvent - public static void handleScroll(MouseScrollEvent event) - { - final ClientPlayerEntity player = Minecraft.getInstance().player; - final ItemStack held = player.getHeldItem(Hand.MAIN_HAND); - - SpiritwebCapability.get(player).ifPresent(spiritweb -> - { - - if (held.isEmpty() && player.isCrouching() && event.isRightDown()) - { - final int delta = MathHelper.clamp((int) Math.round(event.getScrollDelta()), -1, 1); - - Network.sendToServer(new ChangeManifestationModeMessage(spiritweb.manifestation().getManifestationType(), spiritweb.manifestation().getPowerID(), delta)); - - event.setCanceled(true); - - } - }); - } - - @SubscribeEvent - public static void input(InputUpdateEvent event) - { - if (event.getMovementInput().jump) - { - } - } - - @SubscribeEvent - public static void onKey(InputEvent.KeyInputEvent event) - { - final ClientPlayerEntity player = Minecraft.getInstance().player; - - if (player == null) - { - return; - } - - SpiritwebCapability.get(player).ifPresent(spiritweb -> - { - if (isKeyPressed(event, KeybindingRegistry.MANIFESTATION_TOGGLE)) - { - //if crouching, only turn off. - if (player.isCrouching() && spiritweb.selectedManifestationActive()) - { - Network.sendToServer(new DeactivateCurrentManifestationsMessage()); - } - //otherwise do a normal toggle - else if (!player.isCrouching()) - { - //todo decide if there is an activation state? - } - } - //check keybinds with modifiers first? - else if (isKeyPressed(event, KeybindingRegistry.MANIFESTATION_MODE_PREVIOUS)) - { - Network.sendToServer(new ChangeSelectedManifestationMessage(-1)); - } - else if (isKeyPressed(event, KeybindingRegistry.MANIFESTATION_MODE_NEXT)) - { - Network.sendToServer(new ChangeSelectedManifestationMessage(1)); - } - }); - } - - private static boolean isKeyPressed(InputEvent.KeyInputEvent event, KeyBinding keyBinding) - { - return event.getKey() == keyBinding.getKey().getKeyCode() && keyBinding.isPressed(); - } - - @SubscribeEvent - public static void onRenderGUI(final RenderGameOverlayEvent.Post event) - { - renderSpiritwebHUD(event); - } - - @SubscribeEvent - public static void onRenderWorldLastEvent(final RenderWorldLastEvent event) - { - renderManifestationsHUD(event); - } - - public static void renderManifestationsHUD(final RenderWorldLastEvent event) - { - Minecraft mc = Minecraft.getInstance(); - IProfiler profiler = mc.getProfiler(); - ClientPlayerEntity playerEntity = mc.player; - { - profiler.startSection("cosmere-hud"); - - if (Minecraft.getInstance().playerController.shouldDrawHUD()) - { - SpiritwebCapability.get(playerEntity).ifPresent(spiritweb -> - { - profiler.startSection(spiritweb.manifestation().getRegistryName().getNamespace()); - spiritweb.renderWorldEffects(event); - profiler.endSection(); - - }); - } - profiler.endSection(); - - RenderSystem.color4f(1F, 1F, 1F, 1F); - } - - } - - public static void renderSpiritwebHUD(final RenderGameOverlayEvent.Post event) - { - final RenderGameOverlayEvent.ElementType type = event.getType(); - if (type != RenderGameOverlayEvent.ElementType.ALL) - { - return; - } - - SpiritwebCapability.get(Minecraft.getInstance().player).ifPresent(cap -> - { - SpiritwebCapability spiritweb = (SpiritwebCapability) cap; - spiritweb.renderSelectedHUD(event.getMatrixStack()); - - if (spiritweb.hasAnyPowers()) - { - SpiritwebMenu.instance.postRender(event, spiritweb); - } - }); - - } - -} diff --git a/src/main/java/leaf/cosmere/client/ClientForgeEvents.java b/src/main/java/leaf/cosmere/client/ClientForgeEvents.java new file mode 100644 index 000000000..816408bc5 --- /dev/null +++ b/src/main/java/leaf/cosmere/client/ClientForgeEvents.java @@ -0,0 +1,214 @@ +/* + * File updated ~ 12 - 11 - 2023 ~ Leaf + * File updated ~ 5 - 2 - 2025 ~ SoaringEaqle + */ + +package leaf.cosmere.client; + +import com.mojang.blaze3d.platform.InputConstants; +import leaf.cosmere.api.Activator; +import leaf.cosmere.api.manifestation.Manifestation; +import leaf.cosmere.common.Cosmere; +import leaf.cosmere.common.cap.entity.SpiritwebCapability; +import leaf.cosmere.common.fog.FogManager; +import leaf.cosmere.common.network.packets.ChangeManifestationModeMessage; +import leaf.cosmere.common.network.packets.ChangeSelectedManifestationMessage; +import leaf.cosmere.common.network.packets.DeactivateManifestationsMessage; +import leaf.cosmere.common.network.packets.SetSelectedManifestationMessage; +import net.minecraft.client.KeyMapping; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.network.chat.Component; +import net.minecraft.util.Mth; +import net.minecraft.util.profiling.ProfilerFiller; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.item.ItemStack; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.client.event.ClientPlayerNetworkEvent; +import net.minecraftforge.client.event.InputEvent; +import net.minecraftforge.client.event.InputEvent.MouseScrollingEvent; +import net.minecraftforge.client.event.RenderLevelStageEvent; +import net.minecraftforge.eventbus.api.EventPriority; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; + +@Mod.EventBusSubscriber(modid = Cosmere.MODID, value = Dist.CLIENT) +public class ClientForgeEvents +{ + + @SubscribeEvent + public static void handleScroll(MouseScrollingEvent event) + { + final LocalPlayer player = Minecraft.getInstance().player; + final ItemStack held = player.getItemInHand(InteractionHand.MAIN_HAND); + + SpiritwebCapability.get(player).ifPresent(spiritweb -> + { + + if (held.isEmpty() && player.isCrouching() && event.isRightDown()) + { + final int delta = Mth.clamp((int) Math.round(event.getScrollDelta()), -1, 1); + + Cosmere.packetHandler().sendToServer(new ChangeManifestationModeMessage(spiritweb.getSelectedManifestation(), delta)); + + event.setCanceled(true); + + } + }); + } + + @SubscribeEvent + public static void onKey(InputEvent.Key event) + { + final LocalPlayer player = Minecraft.getInstance().player; + + if (player == null) + { + return; + } + + SpiritwebCapability.get(player).ifPresent(spiritweb -> + { + Manifestation selected = spiritweb.getSelectedManifestation(); + if (isKeyPressed(event, Keybindings.MANIFESTATIONS_DEACTIVATE)) + { + // just deactivate + Cosmere.packetHandler().sendToServer(new DeactivateManifestationsMessage()); + //if all powers are deactivated, the power save state is off. + + } + + //check keybinds with modifiers first? + if (isKeyPressed(event, Keybindings.MANIFESTATION_PREVIOUS)) + { + Cosmere.packetHandler().sendToServer(new ChangeSelectedManifestationMessage(-1)); + } + else if (isKeyPressed(event, Keybindings.MANIFESTATION_NEXT)) + { + Cosmere.packetHandler().sendToServer(new ChangeSelectedManifestationMessage(1)); + } + + final boolean modeIncreasePressed = isKeyPressed(event, Keybindings.MANIFESTATION_MODE_INCREASE); + final boolean modeDecreasedPressed = isKeyPressed(event, Keybindings.MANIFESTATION_MODE_DECREASE); + + if (modeIncreasePressed || modeDecreasedPressed) + { + int modifier; + if (Screen.hasShiftDown()) + { + modifier = 5; + } + else if (Screen.hasControlDown()) + { + modifier = 10; + } + else + { + modifier = 1; + } + Cosmere.packetHandler().sendToServer(new ChangeManifestationModeMessage(selected, modeIncreasePressed ? modifier : -modifier)); + } + + for (Activator activator : Keybindings.activators) + { + if (isKeyPressed(event, activator.getKeyMapping())) + { + Manifestation manifestation = activator.getManifestation(); + Cosmere.packetHandler().sendToServer(new SetSelectedManifestationMessage(manifestation)); + selected = manifestation; + //not changing sandmastery mode because ribbon allotment. no need for the rest. might be implemented later. + if (activator.getCategory().equals("sandmastery")) + { + break; + } + int modifier = -selected.getMode(spiritweb); + + //if inactive turn on + if (!selected.isActive(spiritweb)) + { + //if inactive and feruchemic ability tap 5 + //else level one + modifier += activator.getCategory().equals("feruchemy")? -5: 1; + Cosmere.packetHandler().sendToServer(new ChangeManifestationModeMessage(selected,modifier)); + spiritweb.getLiving().sendSystemMessage(Component.literal("Activated " + + Component.translatable(selected.getTranslationKey()))); + + } + else + { + Cosmere.packetHandler().sendToServer(new ChangeManifestationModeMessage(selected,modifier)); + spiritweb.getLiving().sendSystemMessage(Component.literal("Deactivated " + + Component.translatable(selected.getTranslationKey()))); + } + } + } + + //PowerSaveActivator/Saver + if(!(isKeyHeld(Keybindings.ACTIVATE_POWER_SAVE) || isKeyHeld(Keybindings.SAVE_POWER_SAVE))) + { + return; + } + + for (PowerSaveState.PowerSaves powerSave: PowerSaveState.PowerSaves.values()) + { + if(isKeyPressed(event, Keybindings.getKey(powerSave.getNum()))) + { + if(isKeyHeld(Keybindings.ACTIVATE_POWER_SAVE)) + { + powerSave.activate(spiritweb); + } + else if(isKeyHeld(Keybindings.SAVE_POWER_SAVE)) + { + powerSave.addManifestations(spiritweb); + } + } + } + + }); + } + + private static boolean isKeyPressed(InputEvent.Key event, KeyMapping keyBinding) + { + return event.getKey() == keyBinding.getKey().getValue() && keyBinding.consumeClick(); + } + + private static boolean isKeyHeld(KeyMapping keyBinding) + { + InputConstants.Key key = keyBinding.getKey(); + return InputConstants.isKeyDown(Minecraft.getInstance() + .getWindow() + .getWindow(), + key.getValue()); + } + + @SubscribeEvent(priority = EventPriority.HIGHEST) + public static void onRenderLevelLastEvent(final RenderLevelStageEvent event) + { + if (event.getStage() != RenderLevelStageEvent.Stage.AFTER_PARTICLES) + { + return; + } + + Minecraft mc = Minecraft.getInstance(); + ProfilerFiller profiler = mc.getProfiler(); + LocalPlayer playerEntity = mc.player; + { + profiler.push("cosmere-world-effects"); + { + SpiritwebCapability.get(playerEntity).ifPresent(spiritweb -> + { + spiritweb.renderWorldEffects(event); + }); + } + profiler.pop(); + } + + } + + @SubscribeEvent + public static void onClientPlayerClone(ClientPlayerNetworkEvent.Clone event) + { + FogManager.resetFog(); + } +} diff --git a/src/main/java/leaf/cosmere/client/ClientHelper.java b/src/main/java/leaf/cosmere/client/ClientHelper.java deleted file mode 100644 index 344da20ed..000000000 --- a/src/main/java/leaf/cosmere/client/ClientHelper.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.client; - -import leaf.cosmere.client.gui.SpriteIconPositioning; -import leaf.cosmere.manifestation.AManifestation; -import net.minecraft.client.renderer.texture.TextureAtlasSprite; - -import java.util.HashMap; - -public class ClientHelper -{ - public static ClientHelper instance = new ClientHelper(); - public static TextureAtlasSprite arrowUp; - public static TextureAtlasSprite arrowDown; - public static TextureAtlasSprite on; - public static TextureAtlasSprite off; - private final HashMap manifestationSprites = new HashMap<>(); - public static TextureAtlasSprite blank; - public static SpriteIconPositioning blankSIP; - - public void setIconForManifestation(AManifestation manifestation, SpriteIconPositioning sip) - { - manifestationSprites.put(manifestation, sip); - } - - public SpriteIconPositioning getIconForManifestation(AManifestation manifestation) - { - if(!manifestationSprites.containsKey(manifestation)) - { - return blankSIP; - } - return manifestationSprites.get(manifestation); - } -} diff --git a/src/main/java/leaf/cosmere/client/ClientModEvents.java b/src/main/java/leaf/cosmere/client/ClientModEvents.java new file mode 100644 index 000000000..092378426 --- /dev/null +++ b/src/main/java/leaf/cosmere/client/ClientModEvents.java @@ -0,0 +1,91 @@ +/* + * File updated ~ 8 - 10 - 2022 ~ Leaf + */ + +package leaf.cosmere.client; + +import com.mojang.blaze3d.vertex.PoseStack; +import leaf.cosmere.api.CosmereAPI; +import leaf.cosmere.client.gui.SpiritwebMenu; +import leaf.cosmere.client.render.CosmereRenderers; +import leaf.cosmere.common.Cosmere; +import leaf.cosmere.common.cap.entity.SpiritwebCapability; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.renderer.texture.TextureAtlas; +import net.minecraft.world.inventory.InventoryMenu; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.client.event.EntityRenderersEvent; +import net.minecraftforge.client.event.RegisterGuiOverlaysEvent; +import net.minecraftforge.client.event.TextureStitchEvent; +import net.minecraftforge.client.gui.overlay.VanillaGuiOverlay; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; + +@Mod.EventBusSubscriber(modid = Cosmere.MODID, value = Dist.CLIENT, bus = Mod.EventBusSubscriber.Bus.MOD) +public class ClientModEvents +{ + + + @SubscribeEvent + public static void addLayers(EntityRenderersEvent.AddLayers evt) + { + CosmereRenderers.load(); + } + + + @SubscribeEvent + public static void init(final FMLClientSetupEvent event) + { + CosmereAPI.logger.info("Cosmere client setup complete!"); + } + + + //special thank you to the chisels and bits team who have an example of how to register other sprites +// @SubscribeEvent +// public static void registerIconTextures(TextureStitchEvent event) +// { +// final TextureAtlas map = event.getAtlas(); +// if (!map.location().equals(InventoryMenu.BLOCK_ATLAS)) +// { +// return; +// } +// +// event.addSprite(Cosmere.rl("icon/blank")); +// event.addSprite(Cosmere.rl("icon/arrow_up")); +// event.addSprite(Cosmere.rl("icon/arrow_down")); +// event.addSprite(Cosmere.rl("icon/on")); +// event.addSprite(Cosmere.rl("icon/off")); +// } + + + @SubscribeEvent + public static void registerGuiOverlays(RegisterGuiOverlaysEvent event) + { + event.registerBelow( + VanillaGuiOverlay.DEBUG_TEXT.id(), + "hud", + (gui, guiGraphics, partialTick, width, height) -> renderSpiritwebHUD(guiGraphics) + ); + } + + public static void renderSpiritwebHUD(final GuiGraphics guiGraphics) + { + final Minecraft mc = Minecraft.getInstance(); + SpiritwebCapability.get(mc.player).ifPresent(cap -> + { + SpiritwebCapability spiritweb = (SpiritwebCapability) cap; + + //normal hud stuff + if (mc.screen != SpiritwebMenu.instance) + { + spiritweb.renderSelectedHUD(guiGraphics); + } + + //actual menu stuff + SpiritwebMenu.instance.postRender(spiritweb); + }); + + } +} diff --git a/src/main/java/leaf/cosmere/client/ClientSetup.java b/src/main/java/leaf/cosmere/client/ClientSetup.java deleted file mode 100644 index 633febb02..000000000 --- a/src/main/java/leaf/cosmere/client/ClientSetup.java +++ /dev/null @@ -1,175 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.client; - -import leaf.cosmere.Cosmere; -import leaf.cosmere.client.gui.SpriteIconPositioning; -import leaf.cosmere.client.renderer.entity.*; -import leaf.cosmere.constants.Metals; -import leaf.cosmere.registry.*; -import leaf.cosmere.utils.helpers.LogHelper; -import leaf.cosmere.utils.helpers.ResourceLocationHelper; -import leaf.cosmere.manifestation.AManifestation; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.RenderType; -import net.minecraft.client.renderer.RenderTypeLookup; -import net.minecraft.client.renderer.texture.AtlasTexture; -import net.minecraft.inventory.container.PlayerContainer; -import net.minecraft.resources.IResource; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; -import net.minecraftforge.client.event.TextureStitchEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.client.registry.*; -import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; - -import java.awt.image.BufferedImage; -import java.io.IOException; -import java.util.Locale; - -@Mod.EventBusSubscriber(modid = Cosmere.MODID, value = Dist.CLIENT, bus = Mod.EventBusSubscriber.Bus.MOD) -public class ClientSetup -{ - - - @SubscribeEvent - public static void init(final FMLClientSetupEvent event) - { - event.enqueueWork(() -> - { - }); - - //special thank you to @Random on the forge discord who told me that you have to tell the block it has transparency - for (Metals.MetalType metalType : Metals.MetalType.values()) - { - if (!metalType.hasOre()) - continue; - - RenderType cutoutMipped = RenderType.getCutoutMipped(); - RenderTypeLookup.setRenderLayer(metalType.getOreBlock(), cutoutMipped); - } - - RenderingRegistry.registerEntityRenderingHandler(EntityRegistry.SPREN_FIRE.get(), SprenFlameRenderer::new); - - LogHelper.info("Client setup complete!"); - } - - //special thank you to the chisels and bits team who have an example of how to to register other sprites - @SubscribeEvent - public static void registerIconTextures(TextureStitchEvent.Pre event) - { - final AtlasTexture map = event.getMap(); - if (!map.getTextureLocation().equals(PlayerContainer.LOCATION_BLOCKS_TEXTURE)) - { - return; - } - - event.addSprite(ResourceLocationHelper.prefix("icon/blank")); - event.addSprite(ResourceLocationHelper.prefix("icon/arrow_up")); - event.addSprite(ResourceLocationHelper.prefix("icon/arrow_down")); - event.addSprite(ResourceLocationHelper.prefix("icon/on")); - event.addSprite(ResourceLocationHelper.prefix("icon/off")); - - for (final Metals.MetalType metalType : Metals.MetalType.values()) - { - if (!metalType.hasAssociatedManifestation()) - continue; - - String metalToLower = metalType.toString().toLowerCase(Locale.ROOT); - event.addSprite(ResourceLocationHelper.prefix("icon/allomancy/" + metalToLower)); - event.addSprite(ResourceLocationHelper.prefix("icon/feruchemy/" + metalToLower)); - } - } - - //special thank you to the chisels and bits team who have an example of how to to register other sprites - @SubscribeEvent - public static void retrieveRegisteredIconSprites(final TextureStitchEvent.Post event) - { - final AtlasTexture map = event.getMap(); - if (!map.getTextureLocation().equals(PlayerContainer.LOCATION_BLOCKS_TEXTURE)) - { - return; - } - - ClientHelper.blank = map.getSprite(ResourceLocationHelper.prefix("icon/blank")); - ClientHelper.arrowUp = map.getSprite(ResourceLocationHelper.prefix("icon/arrow_up")); - ClientHelper.arrowDown = map.getSprite(ResourceLocationHelper.prefix("icon/arrow_down")); - ClientHelper.on = map.getSprite(ResourceLocationHelper.prefix("icon/on")); - ClientHelper.off = map.getSprite(ResourceLocationHelper.prefix("icon/off")); - - ClientHelper.blankSIP = getSIP(map,"blank"); - - for (final Metals.MetalType metalType : Metals.MetalType.values()) - { - if (!metalType.hasAssociatedManifestation()) - continue; - - //get allomantic version - AManifestation allo = ManifestationRegistry.ALLOMANCY_POWERS.get(metalType).get(); - AManifestation feru = ManifestationRegistry.FERUCHEMY_POWERS.get(metalType).get(); - - ClientHelper.instance.setIconForManifestation(allo, getSIP(map, "allomancy/" + metalType.toString())); - ClientHelper.instance.setIconForManifestation(feru, getSIP(map, "feruchemy/" + metalType.toString())); - } - } - - @OnlyIn(Dist.CLIENT) - private static SpriteIconPositioning getSIP(final AtlasTexture map, final String path) - { - final SpriteIconPositioning sip = new SpriteIconPositioning(); - - final ResourceLocation sprite = new ResourceLocation("cosmere", "icon/" + path.toLowerCase(Locale.ROOT)); - final ResourceLocation png = new ResourceLocation("cosmere", "textures/icon/" + path.toLowerCase(Locale.ROOT) + ".png"); - - sip.sprite = map.getSprite(sprite); - - try - { - final IResource iresource = Minecraft.getInstance().getResourceManager().getResource(png); - final BufferedImage bi = TextureUtils.readBufferedImage(iresource.getInputStream()); - - int bottom = 0; - int right = 0; - sip.left = bi.getWidth(); - sip.top = bi.getHeight(); - - for (int x = 0; x < bi.getWidth(); x++) - { - for (int y = 0; y < bi.getHeight(); y++) - { - final int color = bi.getRGB(x, y); - final int a = color >> 24 & 0xff; - if (a > 0) - { - sip.left = Math.min(sip.left, x); - right = Math.max(right, x); - - sip.top = Math.min(sip.top, y); - bottom = Math.max(bottom, y); - } - } - } - - sip.height = bottom - sip.top + 1; - sip.width = right - sip.left + 1; - - sip.left /= bi.getWidth(); - sip.width /= bi.getWidth(); - sip.top /= bi.getHeight(); - sip.height /= bi.getHeight(); - } catch (final IOException e) - { - sip.height = 1; - sip.width = 1; - sip.left = 0; - sip.top = 0; - } - - return sip; - } - -} diff --git a/src/main/java/leaf/cosmere/client/Keybindings.java b/src/main/java/leaf/cosmere/client/Keybindings.java new file mode 100644 index 000000000..03a1f970c --- /dev/null +++ b/src/main/java/leaf/cosmere/client/Keybindings.java @@ -0,0 +1,74 @@ +/* + * File updated ~ 24 - 4 - 2021 ~ Leaf + * File updated ~ 2 - 5 - 2025 ~ SoaringEaqle + */ + +package leaf.cosmere.client; + +import com.mojang.blaze3d.platform.InputConstants; +import leaf.cosmere.api.Activator; +import leaf.cosmere.client.settings.KeyConflictContext; +import leaf.cosmere.common.Cosmere; +import net.minecraft.client.KeyMapping; +import net.minecraft.client.Minecraft; +import net.minecraft.client.Options; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.client.event.RegisterKeyMappingsEvent; +import net.minecraftforge.client.settings.KeyModifier; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.common.Mod.EventBusSubscriber.Bus; +import org.lwjgl.glfw.GLFW; + +import java.util.ArrayList; +import java.util.Vector; + +import static leaf.cosmere.api.Constants.Strings.*; + +@Mod.EventBusSubscriber(value = Dist.CLIENT, modid = Cosmere.MODID, bus = Bus.MOD) +public class Keybindings +{ + + public static ArrayList activators = new ArrayList(); + + public static KeyMapping MANIFESTATION_MENU; + public static KeyMapping MANIFESTATIONS_DEACTIVATE; + public static KeyMapping MANIFESTATION_NEXT; + public static KeyMapping MANIFESTATION_PREVIOUS; + public static KeyMapping MANIFESTATION_USE_ACTIVE; + + public static KeyMapping MANIFESTATION_MODE_INCREASE; + public static KeyMapping MANIFESTATION_MODE_DECREASE; + + public static KeyMapping ACTIVATE_POWER_SAVE; + public static KeyMapping SAVE_POWER_SAVE; + @SubscribeEvent + public static void register(RegisterKeyMappingsEvent event) + { + event.register((MANIFESTATION_MENU = new KeyMapping(KEY_MANIFESTATION_MENU, GLFW.GLFW_KEY_G, KEYS_CATEGORY))); + event.register(MANIFESTATIONS_DEACTIVATE = new KeyMapping(KEY_DEACTIVATE_ALL_POWERS, GLFW.GLFW_KEY_C, KEYS_CATEGORY)); + + event.register(MANIFESTATION_NEXT = new KeyMapping(KEY_MANIFESTATION_NEXT, GLFW.GLFW_KEY_V, KEYS_CATEGORY)); + event.register(MANIFESTATION_PREVIOUS = createKeybinding(KEY_MANIFESTATION_PREVIOUS, KeyModifier.SHIFT, GLFW.GLFW_KEY_V, KEYS_CATEGORY)); + + event.register(MANIFESTATION_USE_ACTIVE = new KeyMapping(KEY_MANIFESTATION_USE_ACTIVE, GLFW.GLFW_KEY_RIGHT_CONTROL, KEYS_CATEGORY)); + + event.register(MANIFESTATION_MODE_INCREASE = new KeyMapping(KEY_MANIFESTATION_MODE_INCREASE, GLFW.GLFW_KEY_KP_ADD, KEYS_CATEGORY)); + event.register(MANIFESTATION_MODE_DECREASE = new KeyMapping(KEY_MANIFESTATION_MODE_DECREASE, GLFW.GLFW_KEY_KP_SUBTRACT, KEYS_CATEGORY)); + + event.register(ACTIVATE_POWER_SAVE = new KeyMapping(KEY_ACTIVATE, GLFW.GLFW_KEY_R, KEYS_CATEGORY)); + event.register(SAVE_POWER_SAVE = new KeyMapping(KEY_SAVE_ACTIVATOR, GLFW.GLFW_KEY_T, KEYS_CATEGORY)); + + } + + public static KeyMapping createKeybinding(String description, KeyModifier keyModifier, int keyCode, String category) + { + return new KeyMapping(description, KeyConflictContext.DEFAULT, keyModifier, InputConstants.Type.KEYSYM.getOrCreate(keyCode), category); + } + + public static KeyMapping getKey(int i) + { + return Minecraft.getInstance().options.keyHotbarSlots[i]; + } + +} diff --git a/src/main/java/leaf/cosmere/client/PowerSaveState.java b/src/main/java/leaf/cosmere/client/PowerSaveState.java new file mode 100644 index 000000000..2f04a3eb3 --- /dev/null +++ b/src/main/java/leaf/cosmere/client/PowerSaveState.java @@ -0,0 +1,205 @@ +/* + * File updated ~ 10 - 6 - 2025 ~ SoaringEaqle + */ + +package leaf.cosmere.client; + +import leaf.cosmere.api.CosmereAPI; +import leaf.cosmere.api.manifestation.Manifestation; +import leaf.cosmere.api.spiritweb.ISpiritweb; +import leaf.cosmere.common.Cosmere; +import leaf.cosmere.common.config.CosmereConfigs; +import leaf.cosmere.common.network.packets.ChangeManifestationModeMessage; +import leaf.cosmere.common.registry.ManifestationRegistry; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.chat.Component; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.*; + +public class PowerSaveState +{ + + public enum PowerSaves + { + POWER_SAVE_1(0), + POWER_SAVE_2(1), + POWER_SAVE_3(2), + POWER_SAVE_4(3), + POWER_SAVE_5(4), + POWER_SAVE_6(5), + POWER_SAVE_7(6), + POWER_SAVE_8(7), + POWER_SAVE_9(8); + + private HashMap manifestations = new HashMap<>(); + private final int num; + + public static Optional valueOf(int value) + { + return Arrays.stream(values()) + .filter(powerTypes -> powerTypes.num == value) + .findFirst(); + } + + PowerSaves(int num) + { + this.num = num; + + } + + public String getName() + { + return "Power Save State " + (num + 1); + } + + public int getNum() + { + return num; + } + + + + public boolean isActive(ISpiritweb spiritweb) + { + Map active = spiritweb.getManifestations(); + for (Map.Entry entry : manifestations.entrySet()) + { + Map.Entry activeEntry = getEntry(active, entry.getKey()); + if (activeEntry == null) + { + return false; + } + if (!entry.equals(activeEntry)) + { + return false; + } + } + return true; + } + + + public boolean hasManifestation(Manifestation manifestation) + { + return manifestations.containsKey(manifestation); + } + + public void activate(ISpiritweb spiritweb) + { + boolean toActivate = !isActive(spiritweb); + + for (Manifestation manifestation : manifestations.keySet()) + { + int modifier = -(manifestation.getMode(spiritweb)); + if (toActivate) + { + modifier += manifestations.get(manifestation); + } + Cosmere.packetHandler().sendToServer(new ChangeManifestationModeMessage(manifestation, modifier)); + + } + if(CosmereConfigs.CLIENT_CONFIG.disableActivatorChatMessage.get()) + { + return; + } + + if(toActivate) + { + spiritweb.getLiving().sendSystemMessage(Component.literal("Activating " + getName())); + } + else + { + spiritweb.getLiving().sendSystemMessage(Component.literal("Deactivating " + getName())); + } + manifestations.keySet().forEach((manifest) -> + + + spiritweb.getLiving() + .sendSystemMessage(Component.literal( + Component.translatable( + manifest.getTranslationKey() + ).getString() + ": " + (toActivate ? manifestations.get(manifest) : 0) + )) + ); + + } + + public void addManifestations(ISpiritweb spiritweb) + { + manifestations = spiritweb.getManifestations(false, true); + if(CosmereConfigs.CLIENT_CONFIG.disableActivatorChatMessage.get()) + { + return; + } + spiritweb.getLiving().sendSystemMessage(Component.literal("Saved new " + getName())); + manifestations.forEach((manifestation, integer) -> + spiritweb.getLiving() + .sendSystemMessage(Component.literal( + Component.translatable( + manifestation.getTranslationKey() + ).getString() + ": " + integer))); + + + } + + private void setManifestations(HashMap manifestations) + { + this.manifestations = manifestations; + } + } + + private static Map.@Nullable Entry getEntry(@NotNull Map map, Manifestation manifestation) + { + for (Map.Entry entry : map.entrySet()) + { + Manifestation maniType = ManifestationRegistry.fromID(manifestation.getRegistryName()); + Manifestation entryType = ManifestationRegistry.fromID(entry.getKey().getRegistryName()); + if (maniType.equals(entryType)) + { + return entry; + } + } + return null; + + } + public static CompoundTag serialize() + { + CompoundTag nbt = new CompoundTag(); + for(PowerSaves saveState: PowerSaves.values()) + { + CompoundTag data = new CompoundTag(); + for(Manifestation manifest: saveState.manifestations.keySet()) + { + data.putInt(manifest.getRegistryName().toString(),saveState.manifestations.get(manifest)); + } + nbt.put(Integer.toString(saveState.num), data); + } + return nbt; + } + + + public static void deserialize(CompoundTag nbt) + { + for(PowerSaves state : PowerSaves.values()) + { + CompoundTag data = (CompoundTag) nbt.get(Integer.toString(state.num)); + + HashMap manifestations = new HashMap<>(); + + for (Manifestation manifestation : CosmereAPI.manifestationRegistry()) + { + final String manifestationLoc = manifestation.getRegistryName().toString(); + + if (data.contains(manifestationLoc)) + { + manifestations.put(manifestation, data.getInt(manifestationLoc)); + } + } + + state.setManifestations(manifestations); + } + } + + +} diff --git a/src/main/java/leaf/cosmere/client/TextureUtils.java b/src/main/java/leaf/cosmere/client/TextureUtils.java deleted file mode 100644 index b165f30de..000000000 --- a/src/main/java/leaf/cosmere/client/TextureUtils.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.client; - -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; -import org.apache.commons.io.IOUtils; - -import javax.imageio.ImageIO; -import java.awt.image.BufferedImage; -import java.io.IOException; -import java.io.InputStream; - -@OnlyIn(Dist.CLIENT) -public final class TextureUtils -{ - - private TextureUtils() - { - throw new IllegalStateException("Tried to initialize: TextureUtils but this is a Utility class."); - } - - - //special thank you to the chisels and bits team who have an example of how to to register other sprites - public static BufferedImage readBufferedImage(InputStream imageStream) throws IOException - { - BufferedImage bufferedimage; - - try - { - bufferedimage = ImageIO.read(imageStream); - } - finally - { - IOUtils.closeQuietly(imageStream); - } - - return bufferedimage; - } - -} diff --git a/src/main/java/leaf/cosmere/client/gui/ButtonAction.java b/src/main/java/leaf/cosmere/client/gui/ButtonAction.java index fd8e35706..1a2143452 100644 --- a/src/main/java/leaf/cosmere/client/gui/ButtonAction.java +++ b/src/main/java/leaf/cosmere/client/gui/ButtonAction.java @@ -1,13 +1,13 @@ /* - * File created ~ 24 - 4 - 2021 ~ Leaf + * File updated ~ 24 - 4 - 2021 ~ Leaf */ package leaf.cosmere.client.gui; public enum ButtonAction { - INACTIVE, - ACTIVE, - MODE_INCREASE, - MODE_DECREASE, + INACTIVE, + ACTIVE, + MODE_INCREASE, + MODE_DECREASE, } diff --git a/src/main/java/leaf/cosmere/client/gui/DrawUtils.java b/src/main/java/leaf/cosmere/client/gui/DrawUtils.java deleted file mode 100644 index eb98f15f7..000000000 --- a/src/main/java/leaf/cosmere/client/gui/DrawUtils.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * File created ~ 5 - 5 - 2021 ~ Leaf - */ - -package leaf.cosmere.client.gui; - -import com.mojang.blaze3d.matrix.MatrixStack; -import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.IVertexBuilder; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.IRenderTypeBuffer; -import net.minecraft.client.renderer.RenderType; -import net.minecraft.util.math.vector.Matrix4f; -import net.minecraft.util.math.vector.Vector3d; -import net.minecraftforge.client.event.RenderWorldLastEvent; - -import java.awt.*; -import java.util.List; - -public class DrawUtils -{ - - //https://forums.minecraftforge.net/topic/81895-problems-with-rendering-a-line-1152/?tab=comments#comment-388662 - public static void drawLinesFromPoint(RenderWorldLastEvent event, Vector3d point, List endPoints, Color color) - { - IRenderTypeBuffer.Impl buffer = Minecraft.getInstance().getRenderTypeBuffers().getBufferSource(); - IVertexBuilder builder = buffer.getBuffer(RenderType.LINES); - - //move where the line is in the world. otherwise it is drawn around origin 0,0,0 I think? - Vector3d view = Minecraft.getInstance().gameRenderer.getActiveRenderInfo().getProjectedView(); - MatrixStack matrixStack = event.getMatrixStack(); - RenderSystem.lineWidth(3); - - matrixStack.push(); - matrixStack.translate(-view.x, -view.y, -view.z); - Matrix4f matrix = matrixStack.getLast().getMatrix(); - - for (Vector3d endPoint : endPoints) - { - builder.pos(matrix,(float) point.getX(), (float) point.getY(), (float) point.getZ()) - .color(color.getRed(), color.getGreen(), color.getBlue(), color.getAlpha()) - .endVertex(); - - builder.pos(matrix, (float) endPoint.getX(), (float) endPoint.getY(), (float) endPoint.getZ()) - .color(color.getRed(), color.getGreen(), color.getBlue(), color.getAlpha()) - .endVertex(); - } - - matrixStack.pop(); - RenderSystem.disableDepthTest(); - buffer.finish(RenderType.LINES); - - } -} diff --git a/src/main/java/leaf/cosmere/client/gui/SpiritwebMenu.java b/src/main/java/leaf/cosmere/client/gui/SpiritwebMenu.java index ea5aa0394..1d85048de 100644 --- a/src/main/java/leaf/cosmere/client/gui/SpiritwebMenu.java +++ b/src/main/java/leaf/cosmere/client/gui/SpiritwebMenu.java @@ -1,683 +1,960 @@ /* - * File created ~ 24 - 4 - 2021 ~ Leaf - * - * Special thank you to the Chisels and Bits team for their example of rendering a dynamic menu based on given elements! - * https://github.com/ChiselsAndBits/Chisels-and-Bits - * - * At the moment it's just showing all manifestation powers that a user has, - * but eventually will be subclassed to show menus by power type instead. - * + * File updated ~ 10 - 2 - 2023 ~ Leaf */ package leaf.cosmere.client.gui; import com.google.common.base.Stopwatch; -import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.platform.GlStateManager; +import com.mojang.blaze3d.platform.Window; import com.mojang.blaze3d.systems.RenderSystem; -import leaf.cosmere.cap.entity.SpiritwebCapability; -import leaf.cosmere.client.ClientHelper; -import leaf.cosmere.manifestation.AManifestation; -import leaf.cosmere.network.Network; -import leaf.cosmere.network.packets.ChangeManifestationModeMessage; -import leaf.cosmere.network.packets.DeactivateCurrentManifestationsMessage; -import leaf.cosmere.network.packets.SetSelectedManifestationMessage; -import leaf.cosmere.utils.helpers.MathHelper; -import leaf.cosmere.utils.math.Vector2; -import net.minecraft.client.MainWindow; +import com.mojang.blaze3d.vertex.*; +import leaf.cosmere.api.*; +import leaf.cosmere.api.manifestation.Manifestation; +import leaf.cosmere.api.math.MathHelper; +import leaf.cosmere.api.math.Vector2; +import leaf.cosmere.client.Keybindings; +import leaf.cosmere.common.Cosmere; +import leaf.cosmere.common.cap.entity.SpiritwebCapability; +import leaf.cosmere.common.network.packets.ChangeManifestationModeMessage; +import leaf.cosmere.common.network.packets.SetSelectedManifestationMessage; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.renderer.BufferBuilder; -import net.minecraft.client.renderer.Tessellator; -import net.minecraft.client.renderer.texture.TextureAtlasSprite; -import net.minecraft.client.renderer.vertex.DefaultVertexFormats; -import net.minecraft.client.resources.I18n; -import net.minecraft.client.settings.KeyBinding; -import net.minecraft.inventory.container.PlayerContainer; -import net.minecraft.util.Direction; -import net.minecraft.util.text.StringTextComponent; -import net.minecraftforge.client.event.RenderGameOverlayEvent; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.client.renderer.GameRenderer; +import net.minecraft.client.resources.language.I18n; +import net.minecraft.core.Direction; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; +import org.jetbrains.annotations.NotNull; import org.lwjgl.opengl.GL11; import java.util.ArrayList; -import java.util.Locale; +import java.util.HashSet; +import java.util.List; +import java.util.Set; import java.util.concurrent.TimeUnit; -import static leaf.cosmere.registry.KeybindingRegistry.MANIFESTATION_MENU; - public class SpiritwebMenu extends Screen { - - private final float TIME_SCALE = 0.01f; - final double TEXT_DISTANCE = 30; - - public static final SpiritwebMenu instance = new SpiritwebMenu(); - private SpiritwebCapability spiritweb = null; - - private float visibility = 0.0f; - private boolean canShow = true; - private Stopwatch lastChange = Stopwatch.createStarted(); - public AManifestation switchToPower = null; - public ButtonAction doAction = null; - public boolean actionUsed = false; - - protected ArrayList radialButtonRegions = new ArrayList<>(); - protected ArrayList sidedMenuButtons = new ArrayList<>(); - - protected SpiritwebMenu() - { - super(new StringTextComponent("Menu")); - } - - public boolean raiseVisibility() - { - if (!canShow()) - { - return false; - } - - visibility = MathHelper.clamp01(visibility + lastChange.elapsed(TimeUnit.MILLISECONDS) * TIME_SCALE); - lastChange = Stopwatch.createStarted(); - return true; - } - - public void decreaseVisibility() - { - setCanShow(true); - visibility = MathHelper.clamp01(visibility - lastChange.elapsed(TimeUnit.MILLISECONDS) * TIME_SCALE); - lastChange = Stopwatch.createStarted(); - } - - public boolean canShow() - { - return canShow; - } - - public void setCanShow(final boolean canShow) - { - this.canShow = canShow; - } - - public boolean isVisible() - { - return visibility > 0.001; - } - - public void setScaledResolution(final int scaledWidth, final int scaledHeight) - { - width = scaledWidth; - height = scaledHeight; - } - - @Override - public Minecraft getMinecraft() - { - return Minecraft.getInstance(); - } - - - public void postRender(RenderGameOverlayEvent.Post event, SpiritwebCapability spiritweb) - { - this.spiritweb = spiritweb; - final boolean wasVisible = isVisible(); - - if (!MANIFESTATION_MENU.isInvalid() && MANIFESTATION_MENU.isKeyDown()) - { - actionUsed = false; - if (raiseVisibility()) - { - getMinecraft().mouseHelper.ungrabMouse(); - } - } - else - { - if (!actionUsed) - { - if (switchToPower != null) - { - //todo open menu sound - //ClientSide.instance.playRadialMenu(); - - Network.sendToServer(new SetSelectedManifestationMessage(switchToPower)); - } - - if (doAction != null) - { - //todo open menu sound - //ClientSide.instance.playRadialMenu(); - switch (doAction) - { -/* case ROLL_X: - PacketRotateVoxelBlob pri = new PacketRotateVoxelBlob(Direction.Axis.X, Rotation.CLOCKWISE_90); - ChiselsAndBits.getNetworkChannel().sendToServer(pri); - break;*/ - - case INACTIVE: - //deactivate current - if (spiritweb.selectedManifestationActive()) - { - Network.sendToServer(new DeactivateCurrentManifestationsMessage()); - } - break; - case ACTIVE: - //activate current - if (!spiritweb.selectedManifestationActive()) - { - //Network.sendToServer(new ToggleManifestationMessage()); - } - break; - case MODE_INCREASE: - //change mode to positive - Network.sendToServer(new ChangeManifestationModeMessage(spiritweb.manifestation().getManifestationType(), spiritweb.manifestation().getPowerID(), 1)); - break; - case MODE_DECREASE: - //change mode to negative. - Network.sendToServer(new ChangeManifestationModeMessage(spiritweb.manifestation().getManifestationType(), spiritweb.manifestation().getPowerID(), -1)); - break; - } - } - } - - actionUsed = true; - decreaseVisibility(); - } - - if (isVisible()) - { - final MainWindow window = event.getWindow(); - init(Minecraft.getInstance(), window.getScaledWidth(), window.getScaledHeight()); - setScaledResolution(window.getScaledWidth(), window.getScaledHeight()); - - if (!wasVisible) - { - getMinecraft().currentScreen = SpiritwebMenu.instance; - getMinecraft().mouseHelper.ungrabMouse(); - } - - if (getMinecraft().mouseHelper.isMouseGrabbed()) - { - KeyBinding.unPressAllKeys(); - } - } - else - { - if (wasVisible) - { - getMinecraft().mouseHelper.grabMouse(); - } - } - } - - @Override - public boolean mouseClicked(final double mouseX, final double mouseY, final int button) - { - this.visibility = 0f; - canShow = false; - this.minecraft.displayGuiScreen(null); - - if (this.minecraft.currentScreen == null) - { - this.minecraft.setGameFocused(true); - this.minecraft.getSoundHandler().resume(); - this.minecraft.mouseHelper.grabMouse(); - } - return true; - } - - private static class SidedMenuButton - { - - public double x1, x2; - public double y1, y2; - public boolean highlighted; - - public final ButtonAction action; - public TextureAtlasSprite icon; - public int color; - public String name; - public Direction textSide; - - public SidedMenuButton( - final String name, - final ButtonAction action, - final double x, - final double y, - final TextureAtlasSprite ico, - final Direction textSide) - { - this.name = name; - this.action = action; - x1 = x; - x2 = x + 18; - y1 = y; - y2 = y + 18; - icon = ico; - color = 0xffffff; - this.textSide = textSide; - } - - public SidedMenuButton( - final String name, - final ButtonAction action, - final double x, - final double y, - final int col, - final Direction textSide) - { - this.name = name; - this.action = action; - x1 = x; - x2 = x + 18; - y1 = y; - y2 = y + 18; - color = col; - this.textSide = textSide; - } - - } - - static class RadialButtonRegion - { - - public final AManifestation manifestation; - public double centerX; - public double centerY; - public boolean highlighted; - - public RadialButtonRegion(final AManifestation manifestation) - { - this.manifestation = manifestation; - } - - } - - protected void SetupButtons() - { - - //todo buttons - //todo button icons - sidedMenuButtons.add(spiritweb.selectedManifestationActive() - ? new SidedMenuButton("gui.cosmere.other.inactive", ButtonAction.INACTIVE, TEXT_DISTANCE + 20, -50, ClientHelper.off, Direction.WEST) - : new SidedMenuButton("gui.cosmere.other.active", ButtonAction.ACTIVE, TEXT_DISTANCE + 20, -50, ClientHelper.on, Direction.WEST)); - - sidedMenuButtons.add(new SidedMenuButton("gui.cosmere.mode.increase", ButtonAction.MODE_INCREASE, TEXT_DISTANCE * 2, -10, ClientHelper.arrowUp, Direction.EAST)); - sidedMenuButtons.add(new SidedMenuButton("gui.cosmere.mode.decrease", ButtonAction.MODE_DECREASE, TEXT_DISTANCE * 2, 10, ClientHelper.arrowDown, Direction.EAST)); - - - for (AManifestation manifestation : spiritweb.getAvailableManifestations()) - { - radialButtonRegions.add(new RadialButtonRegion(manifestation)); - } - } - - @Override - public void render(final MatrixStack matrixStack, final int mouseX, final int mouseY, final float partialTicks) - { - if (spiritweb == null) - { - return; - } - - matrixStack.push(); - - final int start = (int) (visibility * 98) << 24; - final int end = (int) (visibility * 128) << 24; - - fillGradient(matrixStack, 0, 0, width, height, start, end); - - RenderSystem.disableTexture(); - RenderSystem.enableBlend(); - RenderSystem.disableAlphaTest(); - RenderSystem.blendFuncSeparate(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, 1, 0); - RenderSystem.shadeModel(GL11.GL_SMOOTH); - final Tessellator tessellator = Tessellator.getInstance(); - final BufferBuilder buffer = tessellator.getBuffer(); - - buffer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_COLOR); - - final double mouseVecX = mouseX - width / 2f; - final double mouseVecY = (mouseY - height / 2f); - - final double middle_x = width / 2f; - final double middle_y = height / 2f; - - radialButtonRegions.clear(); - sidedMenuButtons.clear(); - - SetupButtons(); - - switchToPower = null; - doAction = null; - - setupRadialButtons(buffer, mouseVecX, mouseVecY, middle_x, middle_y); - - setupSidedButtons(buffer, mouseVecX, mouseVecY, middle_x, middle_y); - - //draw out what we've asked for - tessellator.draw(); - - //then we switch to icons - RenderSystem.shadeModel(GL11.GL_FLAT); - - RenderSystem.enableTexture(); - RenderSystem.color4f(1, 1, 1, 1.0f); - RenderSystem.disableBlend(); - RenderSystem.enableAlphaTest(); - RenderSystem.bindTexture(Minecraft.getInstance().getTextureManager().getTexture(PlayerContainer.LOCATION_BLOCKS_TEXTURE).getGlTextureId()); - - buffer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX_COLOR); - - //put the icons on the region buttons - setupRadialButtonIcons(buffer, middle_x, middle_y); - - //put the icons on the sided buttons - setupSidedButtonIcons(buffer, middle_x, middle_y); - - tessellator.draw(); - - // draw radial button strings - setupRadialButtonStrings(matrixStack, (int) middle_x, (int) middle_y); - - //draw sided button strings - setupSidedButtonStrings(matrixStack, middle_x, middle_y); - - //do extra text info stuff - setupAnyExtraInfoTexts(matrixStack, (int) middle_y); - - matrixStack.pop(); - } - - private void setupAnyExtraInfoTexts(MatrixStack matrixStack, int middle_y) - { - int x = 10; - final int[] y = {middle_y / 2}; - - spiritweb.METALS_INGESTED.forEach((key, value) -> - { - if (value > 0) - { - //todo localisation check - final String text = key.name().toLowerCase(Locale.ROOT) + ": " + value; - font.drawStringWithShadow(matrixStack, text, x, (int) y[0], 0xffffffff); - y[0] += 10; - } - }); - } - - private void setupSidedButtonStrings(MatrixStack matrixStack, double middle_x, double middle_y) - { - for (final SidedMenuButton sideButton : sidedMenuButtons) - { - //but only if that sided button is highlighted - if (sideButton.highlighted) - { - final String text = I18n.format(sideButton.name); - - switch (sideButton.textSide) - { - case WEST: - font.drawStringWithShadow(matrixStack, text, (int) (middle_x + sideButton.x1 - 8) - font.getStringWidth(text), (int) (middle_y + sideButton.y1 + 6), 0xffffffff); - break; - case EAST: - font.drawStringWithShadow(matrixStack, text, (int) (middle_x + sideButton.x2 + 8), (int) (middle_y + sideButton.y1 + 6), 0xffffffff); - break; - case UP: - font.drawStringWithShadow(matrixStack, text, (int) (middle_x + (sideButton.x1 + sideButton.x2) * 0.5 - font.getStringWidth(text) * 0.5), (int) (middle_y + sideButton.y1 - 14), 0xffffffff); - break; - case DOWN: - font.drawStringWithShadow(matrixStack, text, (int) (middle_x + (sideButton.x1 + sideButton.x2) * 0.5 - font.getStringWidth(text) * 0.5), (int) (middle_y + sideButton.y1 + 24), 0xffffffff); - break; - } - - } - } - } - - private void setupRadialButtonStrings(MatrixStack matrixStack, int middle_x, int middle_y) - { - for (final RadialButtonRegion button : radialButtonRegions) - { - //but only if that button is highlighted - if (button.highlighted) - { - final double x = button.centerX; - final double y = button.centerY; - - int fixed_x = (int) x;//(x + TEXT_DISTANCE); - final int fixed_y = (int) y;//(y + TEXT_DISTANCE); - - //todo localisation check - final String text = I18n.format(button.manifestation.translation().getKey()); - - fixed_x = (int) (x < 0 - ? fixed_x - (font.getStringWidth(text) + TEXT_DISTANCE) - : fixed_x + TEXT_DISTANCE); - - font.drawStringWithShadow(matrixStack, text, middle_x + fixed_x, middle_y + fixed_y, 0xffffffff); - - //no need to keep searching, we only keep one highlighted at a time. - break; - } - } - } - - private void setupSidedButtonIcons(BufferBuilder buffer, double middle_x, double middle_y) - { - for (final SidedMenuButton button : sidedMenuButtons) - { - final float f = switchToPower == null ? 1.0f : 0.5f; - final float a = 1.0f; - - final double u1 = 0; - final double u2 = 16; - final double v1 = 0; - final double v2 = 16; - - final TextureAtlasSprite sprite = button.icon == null ? ClientHelper.blank : button.icon; - - final double btnx1 = button.x1 + 1; - final double btnx2 = button.x2 - 1; - final double btny1 = button.y1 + 1; - final double btny2 = button.y2 - 1; - - final float red = f * ((button.color >> 16 & 0xff) / 255.0f); - final float green = f * ((button.color >> 8 & 0xff) / 255.0f); - final float blue = f * ((button.color & 0xff) / 255.0f); - - buffer.pos(middle_x + btnx1, middle_y + btny1, 0).tex(sprite.getInterpolatedU(u1), sprite.getInterpolatedV(v1)).color(red, green, blue, a).endVertex(); - buffer.pos(middle_x + btnx1, middle_y + btny2, 0).tex(sprite.getInterpolatedU(u1), sprite.getInterpolatedV(v2)).color(red, green, blue, a).endVertex(); - buffer.pos(middle_x + btnx2, middle_y + btny2, 0).tex(sprite.getInterpolatedU(u2), sprite.getInterpolatedV(v2)).color(red, green, blue, a).endVertex(); - buffer.pos(middle_x + btnx2, middle_y + btny1, 0).tex(sprite.getInterpolatedU(u2), sprite.getInterpolatedV(v1)).color(red, green, blue, a).endVertex(); - } - } - - private void setupRadialButtonIcons(BufferBuilder buffer, double middle_x, double middle_y) - { - for (final RadialButtonRegion mnuRgn : radialButtonRegions) - { - final double x = mnuRgn.centerX; - final double y = mnuRgn.centerY; - - final SpriteIconPositioning sip = ClientHelper.instance.getIconForManifestation(mnuRgn.manifestation); - - final double scalex = 15 * sip.width * 0.5; - final double scaley = 15 * sip.height * 0.5; - final double x1 = x - scalex; - final double x2 = x + scalex; - final double y1 = y - scaley; - final double y2 = y + scaley; - - final TextureAtlasSprite sprite = sip.sprite; - - final float f = 1.0f; - final float a = 1.0f; - - final double u1 = sip.left * 16.0; - final double u2 = (sip.left + sip.width) * 16.0; - final double v1 = sip.top * 16.0; - final double v2 = (sip.top + sip.height) * 16.0; - - buffer.pos(middle_x + x1, middle_y + y1, 0).tex(sprite.getInterpolatedU(u1), sprite.getInterpolatedV(v1)).color(f, f, f, a).endVertex(); - buffer.pos(middle_x + x1, middle_y + y2, 0).tex(sprite.getInterpolatedU(u1), sprite.getInterpolatedV(v2)).color(f, f, f, a).endVertex(); - buffer.pos(middle_x + x2, middle_y + y2, 0).tex(sprite.getInterpolatedU(u2), sprite.getInterpolatedV(v2)).color(f, f, f, a).endVertex(); - buffer.pos(middle_x + x2, middle_y + y1, 0).tex(sprite.getInterpolatedU(u2), sprite.getInterpolatedV(v1)).color(f, f, f, a).endVertex(); - } - } - - private void setupSidedButtons(BufferBuilder buffer, double mouseVecX, double mouseVecY, double middle_x, double middle_y) - { - for (final SidedMenuButton button : sidedMenuButtons) - { - final float a = 0.5f; - float f = 0f; - - if (button.x1 <= mouseVecX && button.x2 >= mouseVecX && button.y1 <= mouseVecY && button.y2 >= mouseVecY) - { - f = 1; - button.highlighted = true; - doAction = button.action; - } - - //set first triangle - buffer.pos(middle_x + button.x1, middle_y + button.y1, 0).color(f, f, f, a).endVertex(); - buffer.pos(middle_x + button.x1, middle_y + button.y2, 0).color(f, f, f, a).endVertex(); - //set second triangle - buffer.pos(middle_x + button.x2, middle_y + button.y2, 0).color(f, f, f, a).endVertex(); - buffer.pos(middle_x + button.x2, middle_y + button.y1, 0).color(f, f, f, a).endVertex(); - } - } - - private void setupRadialButtons(BufferBuilder buffer, double mouseVecX, double mouseVecY, double middle_x, double middle_y) - { - if (!radialButtonRegions.isEmpty()) - { - - final float ring_inner_edge = -10; - final float ring_outer_edge = -50; - - // todo test if I can get down to one button only - final int totalButtons = radialButtonRegions.size(); - - Vector2 innerEdge; - Vector2 outerEdge; - - boolean smallMode = radialButtonRegions.size() == 2; - - innerEdge = new Vector2(0, ring_inner_edge); - outerEdge = new Vector2(0, ring_outer_edge); - - - for (final RadialButtonRegion region : radialButtonRegions) - { - //left side inner point - double x1m1; - double y1m1; - - //left side outer point - double x2m1; - double y2m1; - - //right side inner point - double x1m2; - double y1m2; - //right side outer point - double x2m2; - double y2m2; - - if (smallMode) - { - //1 - x1m1 = outerEdge.x; - y1m1 = outerEdge.y; - outerEdge.Rotate(60); - - //2 - x2m1 = outerEdge.x; - y2m1 = outerEdge.y; - outerEdge.Rotate(60); - - //3 - x1m2 = outerEdge.x; - y1m2 = outerEdge.y; - outerEdge.Rotate(60); - - //4 - x2m2 = outerEdge.x; - y2m2 = outerEdge.y; - } - else - { - - //left side inner point - x1m1 = innerEdge.x; - y1m1 = innerEdge.y; - - //left side outer point - x2m1 = outerEdge.x; - y2m1 = outerEdge.y; - - //rotate vectors around the point - innerEdge.Rotate(-(360f / totalButtons)); - outerEdge.Rotate(-(360f / totalButtons)); - - //right side inner point - x1m2 = innerEdge.x; - y1m2 = innerEdge.y; - //right side outer point - x2m2 = outerEdge.x; - y2m2 = outerEdge.y; - - } - - //the center of a regular polygon can be found by adding up - // all corner positions and divide by the total count - region.centerX = (x1m1 + x2m1 + x1m2 + x2m2) / 4; - region.centerY = (y1m1 + y2m1 + y1m2 + y2m2) / 4; - - - final float a = 0.5f; - float f = 0f; - - final boolean showHighlight = - MathHelper.inTriangle( - x1m1, y1m1, - x2m2, y2m2, - x2m1, y2m1, - mouseVecX, mouseVecY) - || MathHelper.inTriangle( - x1m1, y1m1, - x1m2, y1m2, - x2m2, y2m2, - mouseVecX, mouseVecY); - - //if mouse is within the region, as defined by the two triangles - //if (begin_rad <= mouseAngle && mouseAngle <= end_rad && showHighlight) - if (showHighlight) - { - f = 1; - region.highlighted = true; - switchToPower = region.manifestation; - } - - - if (smallMode) - { - buffer.pos(middle_x + x2m1, middle_y + y2m1, 0).color(f, f, f, a).endVertex(); - buffer.pos(middle_x + x1m1, middle_y + y1m1, 0).color(f, f, f, a).endVertex(); - buffer.pos(middle_x + x2m2, middle_y + y2m2, 0).color(f, f, f, a).endVertex(); - buffer.pos(middle_x + x1m2, middle_y + y1m2, 0).color(f, f, f, a).endVertex(); - } - else - { - //set the square pos - buffer.pos(middle_x + x1m1, middle_y + y1m1, 0).color(f, f, f, a).endVertex(); - buffer.pos(middle_x + x2m1, middle_y + y2m1, 0).color(f, f, f, a).endVertex(); - buffer.pos(middle_x + x2m2, middle_y + y2m2, 0).color(f, f, f, a).endVertex(); - buffer.pos(middle_x + x1m2, middle_y + y1m2, 0).color(f, f, f, a).endVertex(); - } - - } - } - } + final double TEXT_DISTANCE = 30; + + public static final SpiritwebMenu instance = new SpiritwebMenu(); + private SpiritwebCapability spiritweb = null; + + private float visibility = 0.0f; + private Stopwatch lastChange = Stopwatch.createStarted(); + public Manifestation selectedManifestation = null; + public SidedMenuButton doAction = null; + private Manifestations.ManifestationTypes selectedPowerType = Manifestations.ManifestationTypes.ALLOMANCY; + + protected ArrayList radialMenuButtons = new ArrayList<>(); + protected ArrayList sidedMenuButtons = new ArrayList<>(); + protected ArrayList metalQuadrants = new ArrayList<>(); + + private final List m_infoText = new ArrayList<>(); + + protected SpiritwebMenu() + { + super(Component.literal("Menu")); + this.minecraft = getMinecraft(); + } + + @Override + public boolean isPauseScreen() + { + return false; + } + + public void raiseVisibility() + { + final float TIME_SCALE = 0.01f; + visibility = MathHelper.clamp01(visibility + lastChange.elapsed(TimeUnit.MILLISECONDS) * TIME_SCALE); + lastChange = Stopwatch.createStarted(); + } + + public void setScaledResolution(final int scaledWidth, final int scaledHeight) + { + width = scaledWidth; + height = scaledHeight; + } + + @Override + public Minecraft getMinecraft() + { + return Minecraft.getInstance(); + } + + + public void postRender(SpiritwebCapability spiritweb) + { + if (Keybindings.MANIFESTATION_MENU.consumeClick()) + { + final Window window = this.minecraft.getWindow(); + init(this.minecraft, window.getGuiScaledWidth(), window.getGuiScaledHeight()); + setScaledResolution(window.getGuiScaledWidth(), window.getGuiScaledHeight()); + this.spiritweb = spiritweb; + this.minecraft.setScreen(SpiritwebMenu.instance); + visibility = 0; + lastChange = Stopwatch.createStarted(); + + selectedManifestation = spiritweb.getSelectedManifestation(); + + SetupButtons(); + } + if (this.minecraft.screen == SpiritwebMenu.instance) + { + raiseVisibility(); + } + } + + @Override + public boolean keyReleased(int pKeyCode, int pScanCode, int pModifiers) + { + if (Keybindings.MANIFESTATION_MENU.matches(pKeyCode, pScanCode)) + { + for (RadialMenuButton radialMenuButton : radialMenuButtons) + { + if (radialMenuButton.highlighted) + { + Cosmere.packetHandler().sendToServer(new SetSelectedManifestationMessage(radialMenuButton.manifestation)); + break; + } + } + + CloseScreen(); + } + return super.keyReleased(pKeyCode, pScanCode, pModifiers); + } + + @Override + public boolean mouseClicked(final double mouseX, final double mouseY, final int button) + { + for (RadialMenuButton radialMenuButton : radialMenuButtons) + { + if (radialMenuButton.highlighted) + { + if (button == 0) + { + Cosmere.packetHandler().sendToServer(new ChangeManifestationModeMessage(radialMenuButton.manifestation, 1)); + } + else + { + Cosmere.packetHandler().sendToServer(new ChangeManifestationModeMessage(radialMenuButton.manifestation, -1)); + } + return true; + } + } + for (SidedMenuButton sidedMenuButton : sidedMenuButtons) + { + if (sidedMenuButton.highlighted) + { + if (sidedMenuButton.powerType != -1) + { + selectedPowerType = Manifestations.ManifestationTypes.valueOf(doAction.powerType).get(); + SetupButtons(); + } + else if (sidedMenuButton.action != null) + { + //do other action + } + + return true; + } + } + return true; + } + + private void CloseScreen() + { + this.minecraft.setScreen(null); + } + + private static class SidedMenuButton + { + + public double x1, x2; + public double y1, y2; + public boolean highlighted; + + public final ButtonAction action; + public final int powerType; + public int color; + public String name; + public Direction textSide; + + public SidedMenuButton( + final String name, + final ButtonAction action, + final double x, + final double y, + final Direction textSide) + { + this.name = name; + this.action = action; + this.powerType = -1; + x1 = x; + x2 = x + 18; + y1 = y; + y2 = y + 18; + color = 0xffffff; + this.textSide = textSide; + } + + public SidedMenuButton( + final String name, + final int powerType, + final double x, + final double y, + final Direction textSide) + { + this.name = name; + this.action = null; + this.powerType = powerType; + x1 = x; + x2 = x + 18; + y1 = y; + y2 = y + 18; + color = 0xffffff; + this.textSide = textSide; + } + } + + static class RadialMenuButton + { + + public final Manifestation manifestation; + public double centerX; + public double centerY; + public boolean highlighted; + + public RadialMenuButton(final Manifestation manifestation) + { + this.manifestation = manifestation; + } + + } + + static class MetalQuadrant + { + public final Metals.MetalType metalType; + public double centerX; + public double centerY; + public static double width = 50; + public static double height = 40; + + public MetalQuadrant(final Metals.MetalType metalType, double centerX, double centerY) + { + this.metalType = metalType; + this.centerX = centerX; + this.centerY = centerY; + } + + } + + protected void SetupButtons() + { + radialMenuButtons.clear(); + sidedMenuButtons.clear(); + metalQuadrants.clear(); + + if (selectedPowerType == Manifestations.ManifestationTypes.ALLOMANCY || selectedPowerType == Manifestations.ManifestationTypes.FERUCHEMY) + { + // adding manually one-by-one was better than a for loop, as there would have to be a switch case anyway + + // add physical metals + double quadCenterX = width/2F - MetalQuadrant.width*3; // these multiplications are kinda random, but if it works, it works + double quadCenterY = height/2F - MetalQuadrant.height*0.75; + metalQuadrants.add(new MetalQuadrant(Metals.MetalType.IRON, + quadCenterX - MetalQuadrant.width/2, + quadCenterY - MetalQuadrant.height/2)); + + metalQuadrants.add(new MetalQuadrant(Metals.MetalType.STEEL, + quadCenterX + 2 + MetalQuadrant.width/2, + quadCenterY - MetalQuadrant.height/2)); + + metalQuadrants.add(new MetalQuadrant(Metals.MetalType.TIN, + quadCenterX - MetalQuadrant.width/2, + quadCenterY + 2 + MetalQuadrant.height/2)); + + metalQuadrants.add(new MetalQuadrant(Metals.MetalType.PEWTER, + quadCenterX + 2 + MetalQuadrant.width/2, + quadCenterY + 2 + MetalQuadrant.height/2)); + + // add mental metals + quadCenterX = width/2 + MetalQuadrant.width*3; + metalQuadrants.add(new MetalQuadrant(Metals.MetalType.ZINC, + quadCenterX - MetalQuadrant.width/2, + quadCenterY - MetalQuadrant.height/2)); + + metalQuadrants.add(new MetalQuadrant(Metals.MetalType.BRASS, + quadCenterX + 2 + MetalQuadrant.width/2, + quadCenterY - MetalQuadrant.height/2)); + + metalQuadrants.add(new MetalQuadrant(Metals.MetalType.COPPER, + quadCenterX - MetalQuadrant.width/2, + quadCenterY + 2 + MetalQuadrant.height/2)); + + metalQuadrants.add(new MetalQuadrant(Metals.MetalType.BRONZE, + quadCenterX + 2 + MetalQuadrant.width/2, + quadCenterY + 2 + MetalQuadrant.height/2)); + + // add enhancement metals + quadCenterX = width/2F - MetalQuadrant.width*3; + quadCenterY = height/2F + MetalQuadrant.height*1.75; + metalQuadrants.add(new MetalQuadrant(Metals.MetalType.ALUMINUM, + quadCenterX - MetalQuadrant.width/2, + quadCenterY - MetalQuadrant.height/2)); + + metalQuadrants.add(new MetalQuadrant(Metals.MetalType.DURALUMIN, + quadCenterX + 2 + MetalQuadrant.width/2, + quadCenterY - MetalQuadrant.height/2)); + + metalQuadrants.add(new MetalQuadrant(Metals.MetalType.CHROMIUM, + quadCenterX - MetalQuadrant.width/2, + quadCenterY + 2 + MetalQuadrant.height/2)); + + metalQuadrants.add(new MetalQuadrant(Metals.MetalType.NICROSIL, + quadCenterX + 2 + MetalQuadrant.width/2, + quadCenterY + 2 + MetalQuadrant.height/2)); + + // add temporal metals + quadCenterX = width/2 + MetalQuadrant.width*3; + metalQuadrants.add(new MetalQuadrant(Metals.MetalType.GOLD, + quadCenterX - MetalQuadrant.width/2, + quadCenterY - MetalQuadrant.height/2)); + + metalQuadrants.add(new MetalQuadrant(Metals.MetalType.ELECTRUM, + quadCenterX + 2 + MetalQuadrant.width/2, + quadCenterY - MetalQuadrant.height/2)); + + metalQuadrants.add(new MetalQuadrant(Metals.MetalType.CADMIUM, + quadCenterX - MetalQuadrant.width/2, + quadCenterY + 2 + MetalQuadrant.height/2)); + + metalQuadrants.add(new MetalQuadrant(Metals.MetalType.BENDALLOY, + quadCenterX + 2 + MetalQuadrant.width/2, + quadCenterY + 2 + MetalQuadrant.height/2)); + + // add atium + metalQuadrants.add(new MetalQuadrant(Metals.MetalType.ATIUM, + width/2D, + quadCenterY + MetalQuadrant.height/2)); + } + + final List availableManifestations = spiritweb.getAvailableManifestations(); + + if (availableManifestations.size() <= 16) + { + for (Manifestation manifestation : availableManifestations) + { + radialMenuButtons.add(new RadialMenuButton(manifestation)); + } + } + else + { + Set foundPowerTypes = new HashSet<>(); + + for (Manifestation manifestation : availableManifestations) + { + if (manifestation.getManifestationType() == selectedPowerType) + { + radialMenuButtons.add(new RadialMenuButton(manifestation)); + } + foundPowerTypes.add(manifestation.getManifestationType()); + } + + for (Manifestations.ManifestationTypes foundPowerType : foundPowerTypes) + { + final int index = foundPowerType.getID() - 1; + final double v = TEXT_DISTANCE * index; + sidedMenuButtons.add( + new SidedMenuButton( + foundPowerType.getName(), + foundPowerType.getID(), + v - ((TEXT_DISTANCE * foundPowerTypes.size()) / 2) + 5, + -90, + Direction.UP) + ); + + } + } + } + + @Override + public void render(final GuiGraphics guiGraphics, final int mouseX, final int mouseY, final float partialTicks) + { + PoseStack matrixStack = guiGraphics.pose(); + if (spiritweb == null) + { + return; + } + + matrixStack.pushPose(); + + final int start = (int) (visibility * 98) << 24; + final int end = (int) (visibility * 128) << 24; + + guiGraphics.fillGradient(0, 0, width, height, start, end); + + //RenderSystem.disableTexture(); + RenderSystem.enableBlend(); + RenderSystem.blendFuncSeparate(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, 1, 0); + final Tesselator tessellator = Tesselator.getInstance(); + final BufferBuilder buffer = tessellator.getBuilder(); + + buffer.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR); + + final double mouseVecX = mouseX - width / 2f; + final double mouseVecY = (mouseY - height / 2f); + + final double middle_x = width / 2f; + final double middle_y = height / 2f; + + selectedManifestation = null; + doAction = null; + + //render the button backgrounds + renderRadialButtons(buffer, mouseVecX, mouseVecY, middle_x, middle_y); + renderSidedButtons(buffer, mouseVecX, mouseVecY, middle_x, middle_y); + + //render the metal quadrant backgrounds + renderMetalQuadrants(buffer); + + //draw out what we've asked for + tessellator.end(); + + drawIcons(guiGraphics, buffer, middle_x, middle_y); + + + // draw radial button strings + renderRadialButtonStrings(guiGraphics, (int) middle_x, (int) middle_y); + //draw sided button strings + renderSidedButtonStrings(guiGraphics, middle_x, middle_y); + //draw quadrant strings + renderMetalQuadrantsStrings(guiGraphics); + //do extra text info stuff + renderAnyExtraInfoTexts(guiGraphics, (int) middle_x, (int) middle_y); + + matrixStack.popPose(); + } + + private void drawIcons(@NotNull GuiGraphics guiGraphics, BufferBuilder buffer, double middle_x, double middle_y) + { + PoseStack matrixStack = guiGraphics.pose(); + matrixStack.pushPose(); + //RenderSystem.enableTexture(); + RenderSystem.enableBlend(); + + //then we switch to icons + RenderSystem.blendFunc(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA); + RenderSystem.setShader(GameRenderer::getPositionTexShader); + //RenderSystem.bindTexture(Minecraft.getInstance().getTextureManager().getTexture(InventoryMenu.BLOCK_ATLAS).getId()); + //buffer.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX_COLOR); + + //put the icons on the region buttons + renderRadialButtonIcons(guiGraphics, middle_x, middle_y); + //put the icons on the sided buttons + renderSidedButtonIcons(guiGraphics, middle_x, middle_y); + + matrixStack.popPose(); + } + + private void renderAnyExtraInfoTexts(GuiGraphics guiGraphics, int middle_x, int middle_y) + { + int leftSideX = 10; + final int[] y = {(int) middle_y / 2}; + + if (selectedPowerType == Manifestations.ManifestationTypes.SANDMASTERY) + { + m_infoText.clear(); + + for (ISpiritwebSubmodule spiritwebSubmodule : spiritweb.getSubmodules().values()) + { + spiritwebSubmodule.collectMenuInfo(m_infoText); + } + + for (String s : m_infoText) + { + if (s.toLowerCase().contains("hydration")) + { + guiGraphics.drawString(font, s, leftSideX, y[0], 0xffffffff); + y[0] += 10; + } + } + } + + if (selectedManifestation == null) + { + return; + } + + y[0] = (int) middle_y / 2; + int rightSideX = middle_x + 35; + + guiGraphics.drawString(font, I18n.get(selectedManifestation.getTranslationKey()), rightSideX, y[0], 0xffffffff); + //todo mode translation + guiGraphics.drawString(font, "Mode: " + spiritweb.getMode(selectedManifestation), rightSideX, y[0] + 10, 0xffffffff); + + } + + private void renderMetalQuadrantsStrings(GuiGraphics guiGraphics) + { + PoseStack matrixStack = guiGraphics.pose(); + m_infoText.clear(); + + List maniList = spiritweb.getAvailableManifestations(); + int maniListSize = maniList.size(); + boolean manifestationNotNull = selectedManifestation != null; + boolean inMetalSubmenu = (selectedPowerType == Manifestations.ManifestationTypes.ALLOMANCY || selectedPowerType == Manifestations.ManifestationTypes.FERUCHEMY) && maniListSize > 16; + boolean shouldShowAllomancy = maniListSize <= 16 && manifestationNotNull && selectedManifestation.getManifestationType() == Manifestations.ManifestationTypes.ALLOMANCY; + boolean shouldShowFeruchemy = maniListSize <= 16 && manifestationNotNull && selectedManifestation.getManifestationType() == Manifestations.ManifestationTypes.FERUCHEMY; + boolean manifestationIsSelected = shouldShowAllomancy || shouldShowFeruchemy; + + for (ISpiritwebSubmodule submodule : spiritweb.getSubmodules().values()) + { + submodule.collectMenuInfo(m_infoText); + } + + for (MetalQuadrant quad : metalQuadrants) + { + boolean foundNumber = false; + boolean selectedAllomancyType = selectedPowerType == Manifestations.ManifestationTypes.ALLOMANCY || shouldShowAllomancy; + boolean selectedFeruchemyType = selectedPowerType == Manifestations.ManifestationTypes.FERUCHEMY || shouldShowFeruchemy; + + // if there are submenus, or if a manifestation is selected in the menu, proceed + if (inMetalSubmenu || manifestationIsSelected) + { + for (String s : m_infoText) + { + if (((inMetalSubmenu && selectedAllomancyType) || shouldShowAllomancy) && s.toLowerCase().contains("a. " + quad.metalType.getName()) && maniList.contains(Manifestations.ManifestationTypes.ALLOMANCY.getManifestation(quad.metalType.getID()))) + { + String displayString = s.split(":")[1].stripLeading(); + guiGraphics.drawString(font, displayString, (int) (quad.centerX - font.width(displayString)/2F), (int) quad.centerY + font.lineHeight, 0xffffffff); + + displayString = quad.metalType.getName().substring(0,1).toUpperCase() + quad.metalType.getName().substring(1); + guiGraphics.drawString(font, displayString, (int) (quad.centerX - font.width(displayString)/2F), (int) (quad.centerY - font.lineHeight*1.5F), 0xffffffff); + + foundNumber = true; + break; + } + else if (((inMetalSubmenu && selectedFeruchemyType) || shouldShowFeruchemy) && s.toLowerCase().contains("f. " + quad.metalType.getName()) && maniList.contains(Manifestations.ManifestationTypes.FERUCHEMY.getManifestation(quad.metalType.getID()))) + { + String displayString = s.split(":")[1].stripLeading(); + guiGraphics.drawString(font, displayString, (int) (quad.centerX - font.width(displayString)/2F), (int) quad.centerY + font.lineHeight, 0xffffffff); + + displayString = quad.metalType.getName().substring(0,1).toUpperCase() + quad.metalType.getName().substring(1); + guiGraphics.drawString(font, displayString, (int) (quad.centerX - font.width(displayString)/2F), (int) (quad.centerY - font.lineHeight*1.5F), 0xffffffff); + + foundNumber = true; + break; + } + } + } + + boolean alloManiListContains = maniList.contains(Manifestations.ManifestationTypes.ALLOMANCY.getManifestation(quad.metalType.getID())); + boolean feruManiListContains = maniList.contains(Manifestations.ManifestationTypes.FERUCHEMY.getManifestation(quad.metalType.getID())); + + boolean shouldDrawMetalNames = !foundNumber && ((inMetalSubmenu && ((selectedAllomancyType && alloManiListContains) || (selectedFeruchemyType && feruManiListContains))) + || (!inMetalSubmenu && ((shouldShowAllomancy && alloManiListContains) || (shouldShowFeruchemy && feruManiListContains)))); + if (shouldDrawMetalNames) + { + String displayString; + displayString = "0"; + guiGraphics.drawString(font, displayString, (int) (quad.centerX - font.width(displayString)/2F), (int) (quad.centerY + font.lineHeight), 0xffffffff); + + displayString = quad.metalType.getName().substring(0,1).toUpperCase() + quad.metalType.getName().substring(1); + guiGraphics.drawString(font, displayString, (int) (quad.centerX - font.width(displayString)/2F), (int) (quad.centerY - font.lineHeight*1.5F), 0xffffffff); + } + } + } + + private void renderSidedButtonStrings(GuiGraphics guiGraphics, double middle_x, double middle_y) + { + for (final SidedMenuButton sideButton : sidedMenuButtons) + { + //but only if that sided button is highlighted + if (sideButton.highlighted) + { + final String text = I18n.get(sideButton.name); + + switch (sideButton.textSide) + { + case WEST: + guiGraphics.drawString(font, text, (int) (middle_x + sideButton.x1 - 8) - font.width(text), (int) (middle_y + sideButton.y1 + 6), 0xffffffff); + break; + case EAST: + guiGraphics.drawString(font, text, (int) (middle_x + sideButton.x2 + 8), (int) (middle_y + sideButton.y1 + 6), 0xffffffff); + break; + case UP: + guiGraphics.drawString(font, text, (int) (middle_x + (sideButton.x1 + sideButton.x2) * 0.5 - font.width(text) * 0.5), (int) (middle_y + sideButton.y1 - 14), 0xffffffff); + break; + case DOWN: + guiGraphics.drawString(font, text, (int) (middle_x + (sideButton.x1 + sideButton.x2) * 0.5 - font.width(text) * 0.5), (int) (middle_y + sideButton.y1 + 24), 0xffffffff); + break; + } + + } + } + } + + private void renderRadialButtonStrings(GuiGraphics guiGraphics, int middle_x, int middle_y) + { + for (final RadialMenuButton button : radialMenuButtons) + { + //but only if that button is highlighted + if (button.highlighted) + { + final double x = button.centerX; + final double y = button.centerY; + + int fixed_x = (int) x;//(x + TEXT_DISTANCE); + final int fixed_y = (int) y;//(y + TEXT_DISTANCE); + + //todo localisation check + final String text = I18n.get(button.manifestation.getTranslationKey()); + + fixed_x = (int) (x < 0 + ? fixed_x - (font.width(text) + TEXT_DISTANCE) + : fixed_x + TEXT_DISTANCE); + + guiGraphics.drawString(font, text, middle_x + fixed_x, middle_y + fixed_y, 0xffffffff); + + //no need to keep searching, we only keep one highlighted at a time. + break; + } + } + } + + private void renderSidedButtonIcons(GuiGraphics guiGraphics, double middleX, double middleY) + { + final StringBuilder stringBuilder = new StringBuilder(); + for (final SidedMenuButton button : sidedMenuButtons) + { + stringBuilder.setLength(0); + final double x = (button.x1 + button.x2) / 2 + 0.01; + final double y = (button.y1 + button.y2) / 2 + 0.01; + + stringBuilder + .append("textures/icon/") + .append(button.name) + .append(".png"); + + //RenderSystem.setShaderTexture(0, new ResourceLocation(button.name, stringBuilder.toString())); + guiGraphics.blit(new ResourceLocation(button.name, stringBuilder.toString()), (int) (middleX + x - 8), (int) (middleY + y - 8), 16, 16, 0, 0, 18, 18, 18, 18); + + } + } + + private void renderRadialButtonIcons(GuiGraphics guiGraphics, double middleX, double middleY) + { + final StringBuilder stringBuilder = new StringBuilder(); + for (final RadialMenuButton menuRegion : radialMenuButtons) + { + stringBuilder.setLength(0); + final double x = menuRegion.centerX; + final double y = menuRegion.centerY; + + final double scalex = 15 * 0.5; + final double scaley = 15 * 0.5; + final double x1 = x - scalex; + final double y1 = y - scaley; + + Manifestation mani = menuRegion.manifestation; + final Manifestations.ManifestationTypes manifestationType = mani.getManifestationType(); + String manifestationTypeName = manifestationType.getName(); + stringBuilder + .append("textures/icon/") + .append(manifestationTypeName) + .append("/"); + + switch (manifestationType) + { + case ALLOMANCY: + case FERUCHEMY: + if (mani instanceof IHasMetalType metalType) + { + stringBuilder.append(metalType.getMetalType().getName()); + } + break; + case SURGEBINDING: + stringBuilder.append(mani.getName()); + break; + case AON_DOR: + break; + case AWAKENING: + break; + } + + stringBuilder.append(".png"); + final ResourceLocation textureLocation = new ResourceLocation(mani.getRegistryName().getNamespace(), stringBuilder.toString()); + RenderSystem.setShaderTexture(0, textureLocation); + guiGraphics.blit(textureLocation, + (int) (middleX + x1), + (int) (middleY + y1), + 16, + 16, + 0, + 0, + 18, + 18, + 18, + 18); + + } + } + + private void renderSidedButtons(BufferBuilder buffer, double mouseVecX, double mouseVecY, double middle_x, double middle_y) + { + for (final SidedMenuButton button : sidedMenuButtons) + { + final float a = 0.5f; + float f; + + if (button.x1 <= mouseVecX && button.x2 >= mouseVecX && button.y1 <= mouseVecY && button.y2 >= mouseVecY) + { + f = 1; + button.highlighted = true; + doAction = button; + } + else + { + button.highlighted = false; + + //highlight button, but don't draw string unless mouse over + f = selectedPowerType.getID() == button.powerType + ? 1 + : 0; + } + + //set first triangle + buffer.vertex(middle_x + button.x1, middle_y + button.y1, 0).color(f, f, f, a).endVertex(); + buffer.vertex(middle_x + button.x1, middle_y + button.y2, 0).color(f, f, f, a).endVertex(); + //set second triangle + buffer.vertex(middle_x + button.x2, middle_y + button.y2, 0).color(f, f, f, a).endVertex(); + buffer.vertex(middle_x + button.x2, middle_y + button.y1, 0).color(f, f, f, a).endVertex(); + } + } + + private void renderMetalQuadrants(BufferBuilder buffer) + { + List maniList = spiritweb.getAvailableManifestations(); + boolean manifestationIsSelected = selectedManifestation != null && maniList.size() <= 16 && (selectedManifestation.getManifestationType() == Manifestations.ManifestationTypes.ALLOMANCY || selectedManifestation.getManifestationType() == Manifestations.ManifestationTypes.FERUCHEMY); + boolean allomancySubmenuOpen = selectedPowerType == Manifestations.ManifestationTypes.ALLOMANCY && maniList.size() > 16; + boolean feruchemySubmenuOpen = selectedPowerType == Manifestations.ManifestationTypes.FERUCHEMY && maniList.size() > 16; + boolean hasSubmenu = allomancySubmenuOpen || feruchemySubmenuOpen; + boolean allomancySelected = !hasSubmenu && manifestationIsSelected && selectedManifestation.getManifestationType() == Manifestations.ManifestationTypes.ALLOMANCY; + boolean feruchemySelected = !hasSubmenu && manifestationIsSelected && selectedManifestation.getManifestationType() == Manifestations.ManifestationTypes.FERUCHEMY; + int r = 0, g = 0, b = 0, a = 127; // 127 is halfway between 0 and 255, so 0.5 transparency + + for (MetalQuadrant quadrant : metalQuadrants) + { + Manifestation alloMani = Manifestations.ManifestationTypes.ALLOMANCY.getManifestation(quadrant.metalType.getID()); + Manifestation feruMani = Manifestations.ManifestationTypes.FERUCHEMY.getManifestation(quadrant.metalType.getID()); + + // if player doesn't have the manifestation, skip it + if ((hasSubmenu && ((allomancySubmenuOpen && maniList.contains(alloMani)) || (feruchemySubmenuOpen && maniList.contains(feruMani)))) + || (!hasSubmenu && ((allomancySelected && maniList.contains(alloMani)) || (feruchemySelected && maniList.contains(feruMani))))) + { + buffer.vertex(quadrant.centerX-MetalQuadrant.width/2, quadrant.centerY-MetalQuadrant.height/2, 0).color(r, g, b, a).endVertex(); + buffer.vertex(quadrant.centerX-MetalQuadrant.width/2, quadrant.centerY+MetalQuadrant.height/2, 0).color(r, g, b, a).endVertex(); + buffer.vertex(quadrant.centerX+MetalQuadrant.width/2, quadrant.centerY+MetalQuadrant.height/2, 0).color(r, g, b, a).endVertex(); + buffer.vertex(quadrant.centerX+MetalQuadrant.width/2, quadrant.centerY-MetalQuadrant.height/2, 0).color(r, g, b, a).endVertex(); + } + } + } + + private void renderRadialButtons(BufferBuilder buffer, double mouseVecX, double mouseVecY, double middle_x, double middle_y) + { + if (!radialMenuButtons.isEmpty()) + { + final float ring_inner_edge = -20; + final float ring_outer_edge = -60; + + // todo test if I can get down to one button only + final int totalButtons = radialMenuButtons.size(); + + Vector2 innerEdge; + Vector2 outerEdge; + + int drawMode = radialMenuButtons.size(); + + innerEdge = new Vector2(0, ring_inner_edge); + outerEdge = new Vector2(0, ring_outer_edge); + + int i = radialMenuButtons.size() - 1; + while (i >= 0) + { + RadialMenuButton region = radialMenuButtons.get(i); + //left side inner point + double x1m1; + double y1m1; + + //left side outer point + double x2m1; + double y2m1; + + //right side inner point + double x1m2; + double y1m2; + //right side outer point + double x2m2; + double y2m2; + + if (drawMode == 1) + { + //1 + x1m1 = outerEdge.x; + y1m1 = outerEdge.y; + outerEdge.Rotate(90); + + //2 + x2m1 = outerEdge.x; + y2m1 = outerEdge.y; + outerEdge.Rotate(90); + + //3 + x1m2 = outerEdge.x; + y1m2 = outerEdge.y; + outerEdge.Rotate(90); + + } + else if (drawMode == 2) + { + //1 + x1m1 = outerEdge.x; + y1m1 = outerEdge.y; + outerEdge.Rotate(60); + + //2 + x2m1 = outerEdge.x; + y2m1 = outerEdge.y; + outerEdge.Rotate(60); + + //3 + x1m2 = outerEdge.x; + y1m2 = outerEdge.y; + outerEdge.Rotate(60); + + } + else + { + + //left side inner point + x1m1 = innerEdge.x; + y1m1 = innerEdge.y; + + //left side outer point + x2m1 = outerEdge.x; + y2m1 = outerEdge.y; + + //rotate vectors around the point + innerEdge.Rotate(-(360f / totalButtons)); + outerEdge.Rotate(-(360f / totalButtons)); + + //right side inner point + x1m2 = innerEdge.x; + y1m2 = innerEdge.y; + + } + //4 or right side outer point + x2m2 = outerEdge.x; + y2m2 = outerEdge.y; + + //the center of a regular polygon can be found by adding up + // all corner positions and divide by the total count + region.centerX = (x1m1 + x2m1 + x1m2 + x2m2) / 4; + region.centerY = (y1m1 + y2m1 + y1m2 + y2m2) / 4; + + + final float a = 0.5f; + float f = 0f; + + final boolean showHighlight; + if (drawMode <= 2) + { + showHighlight = + MathHelper.inTriangle( + x1m1, y1m1, + x2m1, y2m1, + x1m2, y1m2, + mouseVecX, mouseVecY) + || MathHelper.inTriangle( + x1m2, y1m2, + x2m2, y2m2, + x1m1, y1m1, + mouseVecX, mouseVecY); + } + else + { + showHighlight = + MathHelper.inTriangle( + x1m1, y1m1, + x2m2, y2m2, + x2m1, y2m1, + mouseVecX, mouseVecY) + || MathHelper.inTriangle( + x1m1, y1m1, + x1m2, y1m2, + x2m2, y2m2, + mouseVecX, mouseVecY); + } + + //if mouse is within the region, as defined by the two triangles + //if (begin_rad <= mouseAngle && mouseAngle <= end_rad && showHighlight) + if (showHighlight) + { + f = 0.1f; + region.highlighted = true; + selectedManifestation = region.manifestation; + } + else + { + region.highlighted = false; + } + + float lerpPositive = 0; + float lerpNegative = 0; + + if (region.manifestation != null) + { + int mode = region.manifestation.getMode(spiritweb); + int modeMin = region.manifestation.modeMin(spiritweb); + int modeMax = region.manifestation.modeMax(spiritweb); + + if (mode > 0) + { + lerpPositive = MathHelper.InverseLerp(0, modeMax, mode) - 0.1f; + } + else if (mode < 0) + { + lerpNegative = MathHelper.InverseLerp(0, Math.abs(modeMin), Math.abs(mode)) - 0.1f; + } + } + + float r = lerpPositive + f; + float g = f; + float b = lerpNegative + f; + + if (drawMode <= 2) + { + buffer.vertex(middle_x + x2m1, middle_y + y2m1, 0).color(r, g, b, a).endVertex(); + buffer.vertex(middle_x + x1m1, middle_y + y1m1, 0).color(r, g, b, a).endVertex(); + } + else + { + //set the square pos + buffer.vertex(middle_x + x1m1, middle_y + y1m1, 0).color(r, g, b, a).endVertex(); + buffer.vertex(middle_x + x2m1, middle_y + y2m1, 0).color(r, g, b, a).endVertex(); + } + + buffer.vertex(middle_x + x2m2, middle_y + y2m2, 0).color(r, g, b, a).endVertex(); + buffer.vertex(middle_x + x1m2, middle_y + y1m2, 0).color(r, g, b, a).endVertex(); + + i--; + } + } + } } \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/client/gui/SpriteIconPositioning.java b/src/main/java/leaf/cosmere/client/gui/SpriteIconPositioning.java deleted file mode 100644 index 3a0682cf8..000000000 --- a/src/main/java/leaf/cosmere/client/gui/SpriteIconPositioning.java +++ /dev/null @@ -1,20 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - * - * Special thank you to the Chisels and Bits team for their example of rendering a dynamic menu based on given elements! - * https://github.com/ChiselsAndBits/Chisels-and-Bits - */ - -package leaf.cosmere.client.gui; - -import net.minecraft.client.renderer.texture.TextureAtlasSprite; - -public class SpriteIconPositioning -{ - public TextureAtlasSprite sprite; - - public double left; - public double top; - public double width; - public double height; -} diff --git a/src/main/java/leaf/cosmere/client/render/CosmereRenderers.java b/src/main/java/leaf/cosmere/client/render/CosmereRenderers.java new file mode 100644 index 000000000..dc0a42d1f --- /dev/null +++ b/src/main/java/leaf/cosmere/client/render/CosmereRenderers.java @@ -0,0 +1,36 @@ +package leaf.cosmere.client.render; + +import net.minecraft.world.item.Item; +import top.theillusivec4.curios.api.client.ICurioRenderer; + +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; +import java.util.concurrent.ConcurrentHashMap; +import java.util.function.Supplier; + +public class CosmereRenderers +{ + private static final Map> RENDERER_REGISTRY = new ConcurrentHashMap<>(); + private static final Map RENDERERS = new HashMap<>(); + + + public static void register(Item item, Supplier renderer) + { + RENDERER_REGISTRY.put(item, renderer); + } + + public static Optional getRenderer(Item item) + { + return Optional.ofNullable(RENDERERS.get(item)); + } + + + public static void load() + { + for (Map.Entry> entry : RENDERER_REGISTRY.entrySet()) + { + RENDERERS.put(entry.getKey(), entry.getValue().get()); + } + } +} diff --git a/src/main/java/leaf/cosmere/client/renderer/entity/SprenFlameRenderer.java b/src/main/java/leaf/cosmere/client/renderer/entity/SprenFlameRenderer.java deleted file mode 100644 index 25f467282..000000000 --- a/src/main/java/leaf/cosmere/client/renderer/entity/SprenFlameRenderer.java +++ /dev/null @@ -1,40 +0,0 @@ -package leaf.cosmere.client.renderer.entity; - -import com.mojang.blaze3d.matrix.*; -import leaf.cosmere.client.renderer.entity.model.*; -import leaf.cosmere.entities.spren.*; -import leaf.cosmere.utils.helpers.*; -import net.minecraft.client.renderer.entity.*; -import net.minecraft.util.*; -import net.minecraft.util.math.MathHelper; -import net.minecraftforge.api.distmarker.*; - -@OnlyIn(Dist.CLIENT) -public class SprenFlameRenderer extends MobRenderer> -{ - private static final ResourceLocation FIRE_SPREN_TEXTURES = ResourceLocationHelper.prefix("textures/entity/spren_flame.png"); - - public SprenFlameRenderer(EntityRendererManager renderManagerIn) - { - super(renderManagerIn, new SprenFlameModel(), 0.25F); - } - - /** - * Returns the location of an entity's texture. - */ - public ResourceLocation getEntityTexture(SprenFlameEntity entity) - { - return FIRE_SPREN_TEXTURES; - } - - protected void preRenderCallback(SprenFlameEntity entitylivingbaseIn, MatrixStack matrixStackIn, float partialTickTime) - { - matrixStackIn.scale(0.8F, 0.8F, 0.8F); - } - - protected void applyRotations(SprenFlameEntity entityLiving, MatrixStack matrixStackIn, float ageInTicks, float rotationYaw, float partialTicks) - { - matrixStackIn.translate(0.0D, (double) (MathHelper.cos(ageInTicks * 0.3F) * 0.1F), 0.0D); - super.applyRotations(entityLiving, matrixStackIn, ageInTicks, rotationYaw, partialTicks); - } -} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/client/renderer/entity/model/SprenFlameModel.java b/src/main/java/leaf/cosmere/client/renderer/entity/model/SprenFlameModel.java deleted file mode 100644 index db01c0429..000000000 --- a/src/main/java/leaf/cosmere/client/renderer/entity/model/SprenFlameModel.java +++ /dev/null @@ -1,141 +0,0 @@ -package leaf.cosmere.client.renderer.entity.model;// Made with Blockbench 3.8.3 -// Exported for Minecraft version 1.15 - 1.16 -// Paste this class into your mod and generate all required imports - - -import com.google.common.collect.*; -import com.mojang.blaze3d.matrix.*; -import com.mojang.blaze3d.vertex.*; -import leaf.cosmere.entities.spren.*; -import net.minecraft.client.renderer.entity.model.*; -import net.minecraft.client.renderer.model.*; -import net.minecraft.entity.*; -import net.minecraft.entity.passive.*; -import net.minecraft.util.math.*; - -public class SprenFlameModel extends AgeableModel -{ - private final ModelRenderer body; - private final ModelRenderer wingLeft; - private final ModelRenderer wingLeftUpper_r1; - private final ModelRenderer wingLeftLower_r1; - private final ModelRenderer wingRight; - private final ModelRenderer wingRightLower_r1; - private final ModelRenderer wingRightUpper_r1; - - private float bodyPitch; - - public SprenFlameModel() - { - textureWidth = 16; - textureHeight = 16; - - body = new ModelRenderer(this); - body.setRotationPoint(0.0F, 24.0F, 0.0F); - body.setTextureOffset(0, 0).addBox(-2.0F, -4.0F, 0.0F, 4.0F, 4.0F, 0.0F, 0.0F, false); - body.setTextureOffset(0, 0).addBox(-1.0F, -3.0F, -1.0F, 2.0F, 2.0F, 2.0F, 0.0F, false); - - wingLeft = new ModelRenderer(this); - wingLeft.setRotationPoint(0.0F, 0.0F, 0.0F); - body.addChild(wingLeft); - - - wingLeftUpper_r1 = new ModelRenderer(this); - wingLeftUpper_r1.setRotationPoint(0.0F, 0.0F, 0.0F); - wingLeft.addChild(wingLeftUpper_r1); - setRotationAngle(wingLeftUpper_r1, 0.0F, 0.7854F, -0.1745F); - wingLeftUpper_r1.setTextureOffset(0, 0).addBox(1.0F, -3.75F, 1.0F, 4.0F, 3.0F, 0.0F, 0.0F, false); - - wingLeftLower_r1 = new ModelRenderer(this); - wingLeftLower_r1.setRotationPoint(0.0F, 0.0F, 0.0F); - wingLeft.addChild(wingLeftLower_r1); - setRotationAngle(wingLeftLower_r1, 0.0F, 0.3491F, 0.0F); - wingLeftLower_r1.setTextureOffset(0, 0).addBox(0.5F, -1.0F, 0.0F, 3.0F, 2.0F, 0.0F, 0.0F, false); - - wingRight = new ModelRenderer(this); - wingRight.setRotationPoint(0.0F, 0.0F, 0.0F); - body.addChild(wingRight); - - - wingRightLower_r1 = new ModelRenderer(this); - wingRightLower_r1.setRotationPoint(0.0F, 0.0F, 0.0F); - wingRight.addChild(wingRightLower_r1); - setRotationAngle(wingRightLower_r1, 0.0F, -0.3491F, 0.0F); - wingRightLower_r1.setTextureOffset(0, 0).addBox(-3.5F, -1.0F, 0.0F, 3.0F, 2.0F, 0.0F, 0.0F, false); - - wingRightUpper_r1 = new ModelRenderer(this); - wingRightUpper_r1.setRotationPoint(0.0F, 0.0F, 0.0F); - wingRight.addChild(wingRightUpper_r1); - setRotationAngle(wingRightUpper_r1, 0.0F, -0.7854F, 0.1745F); - wingRightUpper_r1.setTextureOffset(0, 0).addBox(-5.0F, -3.75F, 1.0F, 4.0F, 3.0F, 0.0F, 0.0F, false); - } - - @Override - public void setRotationAngles(T entityIn, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch) - { - this.wingRight.rotateAngleX = 0.0F; - - this.body.rotateAngleX = 0.0F; - this.body.rotationPointY = 19.0F; - - boolean flag = entityIn.isOnGround() && entityIn.getMotion().lengthSquared() < 1.0E-7D; - if (flag) - { - this.wingRight.rotateAngleY = -0.2618F; - this.wingRight.rotateAngleZ = 0.0F; - this.wingLeft.rotateAngleX = 0.0F; - this.wingLeft.rotateAngleY = 0.2618F; - this.wingLeft.rotateAngleZ = 0.0F; - } - else - { - float f = ageInTicks * 2.1F; - this.wingRight.rotateAngleY = 0.0F; - this.wingRight.rotateAngleZ = MathHelper.cos(f) * (float) Math.PI * 0.15F; - this.wingLeft.rotateAngleX = this.wingRight.rotateAngleX; - this.wingLeft.rotateAngleY = this.wingRight.rotateAngleY; - this.wingLeft.rotateAngleZ = -this.wingRight.rotateAngleZ; - this.body.rotateAngleX = 0.0F; - this.body.rotateAngleY = 180.0F; - this.body.rotateAngleZ = 0.0F; - } - - - if (this.bodyPitch > 0.0F) - { - this.body.rotateAngleX = ModelUtils.func_228283_a_(this.body.rotateAngleX, 3.0915928F, this.bodyPitch); - } - } - - @Override - public void render(MatrixStack matrixStack, IVertexBuilder buffer, int packedLight, int packedOverlay, float red, float green, float blue, float alpha) - { - body.render(matrixStack, buffer, packedLight, packedOverlay); - } - - @Override - protected Iterable getHeadParts() - { - return ImmutableList.of(); - } - - - @Override - protected Iterable getBodyParts() - { - return ImmutableList.of(this.body); - } - - public void setLivingAnimations(T entityIn, float limbSwing, float limbSwingAmount, float partialTick) - { - super.setLivingAnimations(entityIn, limbSwing, limbSwingAmount, partialTick); - this.bodyPitch = entityIn.getBodyPitch(partialTick); - } - - public void setRotationAngle(ModelRenderer modelRenderer, float x, float y, float z) - { - modelRenderer.rotateAngleX = x; - modelRenderer.rotateAngleY = y; - modelRenderer.rotateAngleZ = z; - } -} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/client/renderer/wearables/BraceletModel.java b/src/main/java/leaf/cosmere/client/renderer/wearables/BraceletModel.java deleted file mode 100644 index 0210c2d0a..000000000 --- a/src/main/java/leaf/cosmere/client/renderer/wearables/BraceletModel.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - * - * Special thank you to TheIllusiveC4 and their mod Curios for their example of rendering an extra model on the player. - * https://github.com/TheIllusiveC4/Curios - * - * Eventually this script will change to take in where exactly the user is spiked. - * https://coppermind.net/w/images/Hemalurgy_table.jpg - * - */ - -package leaf.cosmere.client.renderer.wearables; - -import com.mojang.blaze3d.matrix.*; -import com.mojang.blaze3d.vertex.*; -import net.minecraft.client.renderer.entity.model.*; -import net.minecraft.client.renderer.model.*; -import net.minecraft.entity.*; -import top.theillusivec4.curios.api.*; - -import javax.annotation.*; -import java.util.*; - -public class BraceletModel extends CurioModel -{ - - public BraceletModel() - { - super(1f); - - //left arm - this.bipedLeftArm = new ModelRenderer(this, 0, 0); - this.bipedLeftArm.mirror = true; - this.bipedLeftArm.setRotationPoint(-5.0F, 2.0F, 0.0F); - this.bipedLeftArm.addBox(-2.0F, 4.0F, -0.5F, 5, 1, 1, 0.4F); - - //right arm - this.bipedRightArm = new ModelRenderer(this, 0, 0); - this.bipedRightArm.setRotationPoint(-5.0F, 2.0F, 0.0F); - this.bipedRightArm.addBox(-3.0F, 4.0F, -0.5F, 5, 1, 1, 0.4F); - - //left leg - this.bipedLeftLeg = new ModelRenderer(this, 0, 0); - this.bipedLeftLeg.mirror = true; - this.bipedLeftLeg.setRotationPoint(-5.0F, 2.0F, 0.0F); - this.bipedLeftLeg.addBox(0.0F, 4.0F, -0.5F, 1, 1, 5, 0.4F); - - //right leg - this.bipedRightLeg = new ModelRenderer(this, 0, 0); - this.bipedRightLeg.setRotationPoint(-5.0F, 2.0F, 0.0F); - this.bipedRightLeg.addBox(-1.0F, 4.0F, -0.5F, 1, 1, 5, 0.4F); - - } - - @Override - public void render(@Nonnull MatrixStack matrixStack, @Nonnull IVertexBuilder vertexBuilder, int light, int overlay, float red, float green, float blue, float alpha) - { - Optional slotTypePreset = SlotTypePreset.findPreset(renderMode); - if (!slotTypePreset.isPresent()) - { - return; - } - - super.render(matrixStack, vertexBuilder, light, overlay, red, green, blue, alpha); - } -} diff --git a/src/main/java/leaf/cosmere/client/renderer/wearables/CurioModel.java b/src/main/java/leaf/cosmere/client/renderer/wearables/CurioModel.java deleted file mode 100644 index 93516563b..000000000 --- a/src/main/java/leaf/cosmere/client/renderer/wearables/CurioModel.java +++ /dev/null @@ -1,81 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - * - * Special thank you to TheIllusiveC4 and their mod Curios for their example of rendering an extra model on the player. - * https://github.com/TheIllusiveC4/Curios - * - * Eventually this script will change to take in where exactly the user is spiked. - * https://coppermind.net/w/images/Hemalurgy_table.jpg - * - */ - -package leaf.cosmere.client.renderer.wearables; - -import com.mojang.blaze3d.matrix.*; -import com.mojang.blaze3d.vertex.*; -import net.minecraft.client.renderer.entity.model.*; -import net.minecraft.client.renderer.model.*; -import net.minecraft.entity.*; -import top.theillusivec4.curios.api.*; - -import javax.annotation.*; -import java.util.*; - -public abstract class CurioModel extends BipedModel -{ - public String renderMode; - public int renderIndex; - - public CurioModel(float modelSize) - { - super(modelSize); - this.textureWidth = 16; - this.textureHeight = 16; - } - - public void setRotationAngles(@Nonnull T entity, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float netHeadPitch) - { - } - - @Override - public void render(@Nonnull MatrixStack matrixStack, @Nonnull IVertexBuilder vertexBuilder, int light, int overlay, float red, float green, float blue, float alpha) - { - Optional slotTypePreset = SlotTypePreset.findPreset(renderMode); - if (!slotTypePreset.isPresent()) - { - return; - } - - switch (slotTypePreset.get()) - { - case BACK: - case BODY: - this.bipedBody.render(matrixStack, vertexBuilder, light, overlay, red, green, blue, alpha); - break; - case BRACELET: - case HANDS: - case RING: - if (renderIndex == 0) - { - this.bipedLeftArm.render(matrixStack, vertexBuilder, light, overlay, red, green, blue, alpha); - } - else - { - this.bipedRightArm.render(matrixStack, vertexBuilder, light, overlay, red, green, blue, alpha); - } - break; - case BELT: - break; - case CHARM: - if (renderIndex == 0) - { - this.bipedLeftLeg.render(matrixStack, vertexBuilder, light, overlay, red, green, blue, alpha); - } - else - { - this.bipedRightLeg.render(matrixStack, vertexBuilder, light, overlay, red, green, blue, alpha); - } - break; - } - } -} diff --git a/src/main/java/leaf/cosmere/client/renderer/wearables/SpikeModel.java b/src/main/java/leaf/cosmere/client/renderer/wearables/SpikeModel.java deleted file mode 100644 index 5f278faac..000000000 --- a/src/main/java/leaf/cosmere/client/renderer/wearables/SpikeModel.java +++ /dev/null @@ -1,105 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - * - * Special thank you to TheIllusiveC4 and their mod Curios for their example of rendering an extra model on the player. - * https://github.com/TheIllusiveC4/Curios - * - * Eventually this script will change to take in where exactly the user is spiked. - * https://coppermind.net/w/images/Hemalurgy_table.jpg - * - */ - -package leaf.cosmere.client.renderer.wearables; - -import com.mojang.blaze3d.matrix.MatrixStack; -import com.mojang.blaze3d.vertex.IVertexBuilder; -import net.minecraft.client.renderer.model.ModelRenderer; -import net.minecraft.entity.LivingEntity; -import top.theillusivec4.curios.api.SlotTypePreset; - -import javax.annotation.Nonnull; -import java.util.Optional; - -public class SpikeModel extends CurioModel -{ - public ModelRenderer leftEyeSpike; - public ModelRenderer rightEyeSpike; - public ModelRenderer neckSpike; - - public SpikeModel() - { - super(1f); - - //left eye - this.leftEyeSpike = new ModelRenderer(this, 0, 0); - this.leftEyeSpike.setRotationPoint(0.0F, 0.0F, 0.0F); - this.leftEyeSpike.addBox(1.0F, -3.0F, -7.0F, 2.0F, 2.0F, 14.0F, 0.0F); - - //right eye - this.rightEyeSpike = new ModelRenderer(this, 0, 0); - this.rightEyeSpike.setRotationPoint(0.0F, 0.0F, 0.0F); - this.rightEyeSpike.addBox(-3.0F, -3.0F, -7.0F, 2.0F, 2.0F, 14.0F, 0.0F); - - //neck - this.neckSpike = new ModelRenderer(this, 0, 0); - this.neckSpike.setRotationPoint(0.0F, 0.0F, 0.0F); - this.neckSpike.addBox(-0.5F, -1.0F, 4.0F, 1.0F, 1.0F, 2.0F, 0.0F); - - //body - this.bipedBody = new ModelRenderer(this, 16, 16); - this.bipedBody.setRotationPoint(0.0F, 0.0F, 0.0F); - this.bipedBody.addBox(-1F, 2.0F, 0.0F, 2.0F, 2.0F, 3.0F, 0.0F); - - //left arm - this.bipedLeftArm = new ModelRenderer(this, 0, 0); - this.bipedLeftArm.mirror = true; - this.bipedLeftArm.setRotationPoint(-5.0F, 2.0F, 0.0F); - this.bipedLeftArm.addBox(-2.0F, 4.0F, -0.5F, 5, 1, 1, 0.4F); - - //right arm - this.bipedRightArm = new ModelRenderer(this, 0, 0); - this.bipedRightArm.setRotationPoint(-5.0F, 2.0F, 0.0F); - this.bipedRightArm.addBox(-3.0F, 4.0F, -0.5F, 5, 1, 1, 0.4F); - - //left leg - this.bipedLeftLeg = new ModelRenderer(this, 0, 0); - this.bipedLeftLeg.mirror = true; - this.bipedLeftLeg.setRotationPoint(-5.0F, 2.0F, 0.0F); - this.bipedLeftLeg.addBox(0.0F, 4.0F, -0.5F, 1, 1, 5, 0.4F); - - //right leg - this.bipedRightLeg = new ModelRenderer(this, 0, 0); - this.bipedRightLeg.setRotationPoint(-5.0F, 2.0F, 0.0F); - this.bipedRightLeg.addBox(-1.0F, 4.0F, -0.5F, 1, 1, 5, 0.4F); - - } - - @Override - public void render(@Nonnull MatrixStack matrixStack, @Nonnull IVertexBuilder vertexBuilder, int light, int overlay, float red, float green, float blue, float alpha) - { - Optional slotTypePreset = SlotTypePreset.findPreset(renderMode); - if (!slotTypePreset.isPresent()) - { - return; - } - - switch (slotTypePreset.get()) - { - case HEAD: - if (renderIndex == 0) - { - this.leftEyeSpike.render(matrixStack, vertexBuilder, light, overlay, red, green, blue, alpha); - } - else - { - this.rightEyeSpike.render(matrixStack, vertexBuilder, light, overlay, red, green, blue, alpha); - } - break; - case NECKLACE: - this.neckSpike.render(matrixStack, vertexBuilder, light, overlay, red, green, blue, alpha); - break; - } - - super.render(matrixStack, vertexBuilder, light, overlay, red, green, blue, alpha); - } -} diff --git a/src/main/java/leaf/cosmere/client/settings/KeyConflictContext.java b/src/main/java/leaf/cosmere/client/settings/KeyConflictContext.java index 2744967be..08b820d58 100644 --- a/src/main/java/leaf/cosmere/client/settings/KeyConflictContext.java +++ b/src/main/java/leaf/cosmere/client/settings/KeyConflictContext.java @@ -1,5 +1,5 @@ /* - * File created ~ 24 - 4 - 2021 ~ Leaf + * File updated ~ 24 - 4 - 2021 ~ Leaf */ package leaf.cosmere.client.settings; @@ -8,17 +8,17 @@ public class KeyConflictContext implements IKeyConflictContext { - public static final KeyConflictContext DEFAULT = new KeyConflictContext(); + public static final KeyConflictContext DEFAULT = new KeyConflictContext(); - @Override - public boolean isActive() - { - return true; - } + @Override + public boolean isActive() + { + return true; + } - @Override - public boolean conflicts(IKeyConflictContext other) - { - return false; - } + @Override + public boolean conflicts(IKeyConflictContext other) + { + return false; + } } diff --git a/src/main/java/leaf/cosmere/commands/CosmereCommand.java b/src/main/java/leaf/cosmere/commands/CosmereCommand.java deleted file mode 100644 index 10f9a0b3a..000000000 --- a/src/main/java/leaf/cosmere/commands/CosmereCommand.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - * - * Special thank you to the New Tardis Mod team. - * That mod taught me how to correctly add new commands, among other things! - * https://tardis-mod.com/books/home/page/links#bkmrk-source - */ - -package leaf.cosmere.commands; - -import com.mojang.brigadier.CommandDispatcher; -import leaf.cosmere.Cosmere; -import leaf.cosmere.commands.subcommands.ManifestationCommand; -import leaf.cosmere.commands.subcommands.TestCommand; -import net.minecraft.command.CommandSource; -import net.minecraft.command.Commands; - - -public class CosmereCommand -{ - - public static void register(CommandDispatcher dispatcher) - { - dispatcher.register(Commands.literal(Cosmere.MODID) - .then(TestCommand.register(dispatcher)) - .then(ManifestationCommand.register(dispatcher)) - ); - } -} diff --git a/src/main/java/leaf/cosmere/commands/arguments/ManifestationsArgumentType.java b/src/main/java/leaf/cosmere/commands/arguments/ManifestationsArgumentType.java deleted file mode 100644 index f6198dfa0..000000000 --- a/src/main/java/leaf/cosmere/commands/arguments/ManifestationsArgumentType.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.commands.arguments; - -import com.mojang.brigadier.StringReader; -import com.mojang.brigadier.arguments.ArgumentType; -import com.mojang.brigadier.context.CommandContext; -import com.mojang.brigadier.exceptions.CommandSyntaxException; -import com.mojang.brigadier.exceptions.DynamicCommandExceptionType; -import com.mojang.brigadier.suggestion.Suggestions; -import com.mojang.brigadier.suggestion.SuggestionsBuilder; -import leaf.cosmere.constants.Constants; -import leaf.cosmere.utils.helpers.CommandHelper; -import leaf.cosmere.manifestation.AManifestation; -import leaf.cosmere.registry.ManifestationRegistry; -import net.minecraft.command.ISuggestionProvider; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.text.TranslationTextComponent; - -import java.util.Collections; -import java.util.concurrent.CompletableFuture; - -public class ManifestationsArgumentType implements ArgumentType -{ - public static final DynamicCommandExceptionType INVALID_MANIFESTATION_EXCEPTION = - new DynamicCommandExceptionType((manifestation) -> - new TranslationTextComponent(Constants.Strings.POWER_INVALID, manifestation)); - - public static ManifestationsArgumentType createArgument() - { - return new ManifestationsArgumentType(); - } - - @Override - public AManifestation parse(StringReader reader) throws CommandSyntaxException - { - ResourceLocation location = ResourceLocation.read(reader); - AManifestation manifestation = ManifestationRegistry.MANIFESTATION_REGISTRY.get().getValue(location); - if (manifestation != null) - { - return manifestation; - } - throw INVALID_MANIFESTATION_EXCEPTION.create(location); - } - - @Override - public CompletableFuture listSuggestions(CommandContext context, SuggestionsBuilder builder) - { - return ISuggestionProvider.suggest(Collections.emptyList(), CommandHelper.addManifestationNamesWithTooltip(builder)); - } - -} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/commands/permissions/PermissionEnum.java b/src/main/java/leaf/cosmere/commands/permissions/PermissionEnum.java deleted file mode 100644 index eb69d8574..000000000 --- a/src/main/java/leaf/cosmere/commands/permissions/PermissionEnum.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.commands.permissions; - -import leaf.cosmere.Cosmere; -import net.minecraftforge.server.permission.DefaultPermissionLevel; - -import java.text.MessageFormat; - -public enum PermissionEnum -{ - TEST("test", DefaultPermissionLevel.OP, ""), - ; - - private final String path; - private final DefaultPermissionLevel level; - private final String description; - - PermissionEnum(String path, DefaultPermissionLevel level, String description) - { - this.path = path; - this.level = level; - this.description = description; - } - - public String getNode() - { - return MessageFormat.format("{0}.command.{1}", Cosmere.MODID, this.path); - } - - public DefaultPermissionLevel getLevel() - { - return level; - } - - public String getDescription() - { - return description; - } -} diff --git a/src/main/java/leaf/cosmere/commands/permissions/PermissionManager.java b/src/main/java/leaf/cosmere/commands/permissions/PermissionManager.java deleted file mode 100644 index 0fc0f5f5a..000000000 --- a/src/main/java/leaf/cosmere/commands/permissions/PermissionManager.java +++ /dev/null @@ -1,18 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.commands.permissions; - -import net.minecraftforge.server.permission.PermissionAPI; - -import java.util.Arrays; - -public class PermissionManager -{ - - public static void init() - { - Arrays.stream(PermissionEnum.values()).forEach(perm -> PermissionAPI.registerNode(perm.getNode(), perm.getLevel(), perm.getDescription())); - } -} diff --git a/src/main/java/leaf/cosmere/commands/subcommands/ManifestationCommand.java b/src/main/java/leaf/cosmere/commands/subcommands/ManifestationCommand.java deleted file mode 100644 index 49b5b8bd8..000000000 --- a/src/main/java/leaf/cosmere/commands/subcommands/ManifestationCommand.java +++ /dev/null @@ -1,189 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.commands.subcommands; - -import com.mojang.brigadier.Command; -import com.mojang.brigadier.CommandDispatcher; -import com.mojang.brigadier.builder.ArgumentBuilder; -import com.mojang.brigadier.context.CommandContext; -import com.mojang.brigadier.exceptions.CommandSyntaxException; -import leaf.cosmere.cap.entity.SpiritwebCapability; -import leaf.cosmere.commands.arguments.ManifestationsArgumentType; -import leaf.cosmere.constants.Constants; -import leaf.cosmere.manifestation.AManifestation; -import leaf.cosmere.registry.ManifestationRegistry; -import leaf.cosmere.utils.helpers.EntityHelper; -import leaf.cosmere.utils.helpers.TextHelper; -import net.minecraft.command.CommandSource; -import net.minecraft.command.Commands; -import net.minecraft.entity.player.ServerPlayerEntity; -import net.minecraft.util.text.StringTextComponent; -import net.minecraft.util.text.TextComponent; -import net.minecraft.util.text.TranslationTextComponent; - -import static leaf.cosmere.constants.Constants.Strings.POWERS_FOUND; - -public class ManifestationCommand extends ModCommand -{ - - @Override - public int run(CommandContext context) throws CommandSyntaxException - { - return Command.SINGLE_SUCCESS; - } - - private static int check(CommandContext context, ServerPlayerEntity player) - { - SpiritwebCapability.get(player).ifPresent(spiritweb -> - { - CommandSource source = context.getSource(); - - TranslationTextComponent powersFound = new TranslationTextComponent(POWERS_FOUND, TextHelper.getPlayerTextObject(context.getSource().getWorld(), player.getUniqueID())); - - final TextComponent leftBracketTextComponent = new StringTextComponent("["); - final TextComponent rightBracketTextComponent = new StringTextComponent("]"); - final StringTextComponent space = new StringTextComponent(" "); - - //figure out which manifestations a player has - for (AManifestation manifestation : spiritweb.getAvailableManifestations()) - { - powersFound.appendSibling(leftBracketTextComponent); - powersFound.appendSibling(TextHelper.createTextWithTooltip( - manifestation.translation(), - manifestation.description())); - powersFound.appendSibling(rightBracketTextComponent); - powersFound.appendSibling(space); - } - source.sendFeedback(powersFound, true); - }); - - return Command.SINGLE_SUCCESS; - } - - private static int clear(CommandContext context, ServerPlayerEntity player) - { - SpiritwebCapability.get(player).ifPresent(iSpiritweb -> - { - CommandSource source = context.getSource(); - iSpiritweb.clearManifestations(); - iSpiritweb.syncToClients(null); - TextComponent playerTextObject = TextHelper.getPlayerTextObject(context.getSource().getWorld(), player.getUniqueID()); - source.sendFeedback(new TranslationTextComponent(Constants.Strings.POWER_SET_SUCCESS, playerTextObject), false); - }); - - return Command.SINGLE_SUCCESS; - } - - private static int reroll(CommandContext context, ServerPlayerEntity player) - { - SpiritwebCapability.get(player).ifPresent(iSpiritweb -> - { - CommandSource source = context.getSource(); - iSpiritweb.clearManifestations(); - EntityHelper.giveEntityStartingManifestation(player, (SpiritwebCapability) iSpiritweb); - //set to none so that it auto updates to the new available ones on sync - iSpiritweb.setSelectedManifestation(ManifestationRegistry.NONE.get()); - iSpiritweb.syncToClients(null); - TextComponent playerTextObject = TextHelper.getPlayerTextObject(context.getSource().getWorld(), player.getUniqueID()); - source.sendFeedback(new TranslationTextComponent(Constants.Strings.POWER_SET_SUCCESS, playerTextObject), false); - }); - - return Command.SINGLE_SUCCESS; - } - - private static int set(CommandContext context, ServerPlayerEntity player) - { - CommandSource source = context.getSource(); - AManifestation manifestation = context.getArgument("manifestation", AManifestation.class); - - TextComponent playerText = TextHelper.getPlayerTextObject(source.getWorld(), player.getUniqueID()); - - TextComponent manifestationText = TextHelper.createTextWithTooltip(manifestation.translation(), manifestation.description()); - - if (player == null || manifestation == null) - { - source.sendErrorMessage(new TranslationTextComponent(Constants.Strings.POWER_SET_FAIL, playerText, manifestationText)); - return 0; - } - SpiritwebCapability.get(player).ifPresent((spiritweb) -> - { - spiritweb.clearManifestations(); - spiritweb.giveManifestation(manifestation.getManifestationType(), manifestation.getPowerID()); - spiritweb.syncToClients(null); - source.sendFeedback(new TranslationTextComponent(Constants.Strings.POWER_SET_SUCCESS, playerText, manifestationText), false); - }); - return Command.SINGLE_SUCCESS; - } - - private static int give(CommandContext context, ServerPlayerEntity player) - { - CommandSource source = context.getSource(); - AManifestation manifestation = context.getArgument("manifestation", AManifestation.class); - - TextComponent playerText = TextHelper.getPlayerTextObject(source.getWorld(), player.getUniqueID()); - - TextComponent manifestationText = TextHelper.createTextWithTooltip(manifestation.translation(), manifestation.description()); - - if (player == null || manifestation == null) - { - source.sendErrorMessage(new TranslationTextComponent(Constants.Strings.POWER_SET_FAIL, playerText, manifestationText)); - return 0; - } - SpiritwebCapability.get(player).ifPresent((spiritweb) -> - { - spiritweb.giveManifestation(manifestation.getManifestationType(), manifestation.getPowerID()); - source.sendFeedback(new TranslationTextComponent(Constants.Strings.POWER_SET_SUCCESS, playerText, manifestationText), false); - spiritweb.syncToClients(null); - }); - return Command.SINGLE_SUCCESS; - } - - private static int remove(CommandContext context, ServerPlayerEntity player) - { - CommandSource source = context.getSource(); - AManifestation manifestation = context.getArgument("manifestation", AManifestation.class); - - TextComponent playerText = TextHelper.getPlayerTextObject(source.getWorld(), player.getUniqueID()); - - TextComponent manifestationText = TextHelper.createTextWithTooltip(manifestation.translation(), manifestation.description()); - - if (player == null || manifestation == null) - { - source.sendErrorMessage(new TranslationTextComponent(Constants.Strings.POWER_SET_FAIL, playerText, manifestationText)); - return 0; - } - SpiritwebCapability.get(player).ifPresent((spiritweb) -> - { - spiritweb.removeManifestation(manifestation.getManifestationType(), manifestation.getPowerID()); - spiritweb.syncToClients(null); - source.sendFeedback(new TranslationTextComponent(Constants.Strings.POWER_SET_SUCCESS, playerText, manifestationText), false); - }); - return Command.SINGLE_SUCCESS; - } - - public static ArgumentBuilder register(CommandDispatcher dispatcher) - { - return Commands.literal("powers") - .requires(context -> context.hasPermissionLevel(2)) - .then(Commands.literal("check") - .executes(context -> check(context, context.getSource().asPlayer()))) -/* .then(Commands.literal("clear") - .executes(context -> clear(context, context.getSource().asPlayer()))) - .then(Commands.literal("set") - .then(Commands.argument("manifestation", ManifestationsArgumentType.createArgument()) - .executes(context -> set(context, context.getSource().asPlayer()))) - )*/ - .then(Commands.literal("reroll") - .executes(context -> reroll(context, context.getSource().asPlayer()))) - .then(Commands.literal("give") - .then(Commands.argument("manifestation", ManifestationsArgumentType.createArgument()) - .executes(context -> give(context, context.getSource().asPlayer())))) - .then(Commands.literal("remove") - .then(Commands.argument("manifestation", ManifestationsArgumentType.createArgument()) - .executes(context -> remove(context, context.getSource().asPlayer())))) - ; // end add - } - -} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/commands/subcommands/ModCommand.java b/src/main/java/leaf/cosmere/commands/subcommands/ModCommand.java deleted file mode 100644 index 002136079..000000000 --- a/src/main/java/leaf/cosmere/commands/subcommands/ModCommand.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.commands.subcommands; - -import com.mojang.brigadier.Command; -import com.mojang.brigadier.exceptions.CommandSyntaxException; -import net.minecraft.command.CommandSource; - -public abstract class ModCommand implements Command -{ - private int permLevel = 2; - - public ModCommand(){} - - public ModCommand(int level) - { - this.permLevel = level; - } - - public boolean canExecute(CommandSource source) throws CommandSyntaxException - { - return source.hasPermissionLevel(permLevel); - } -} diff --git a/src/main/java/leaf/cosmere/commands/subcommands/TestCommand.java b/src/main/java/leaf/cosmere/commands/subcommands/TestCommand.java deleted file mode 100644 index d2c24c1d3..000000000 --- a/src/main/java/leaf/cosmere/commands/subcommands/TestCommand.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.commands.subcommands; - -import com.mojang.brigadier.CommandDispatcher; -import com.mojang.brigadier.builder.ArgumentBuilder; -import com.mojang.brigadier.context.CommandContext; -import com.mojang.brigadier.exceptions.CommandSyntaxException; -import net.minecraft.command.CommandSource; -import net.minecraft.command.Commands; -import net.minecraft.entity.player.ServerPlayerEntity; -import net.minecraft.util.text.TranslationTextComponent; -import net.minecraft.world.server.ServerWorld; - -public class TestCommand extends ModCommand -{ - - private static int testSub(CommandContext context, ServerPlayerEntity player) - { - return testSub(context, player.getServerWorld()); - } - - private static int testSub(CommandContext context, ServerWorld world) - { - CommandSource source = context.getSource(); - source.sendFeedback(new TranslationTextComponent("command.cosmere.test.sub"), true); - - return SINGLE_SUCCESS; - } - - public static ArgumentBuilder register(CommandDispatcher dispatcher) - { - return Commands.literal("test") - .requires(context -> context.hasPermissionLevel(2)).then(Commands.literal("sub").executes(context -> testSub(context, context.getSource().asPlayer()))); // end add - } - - @Override - public int run(CommandContext context) throws CommandSyntaxException - { - return SINGLE_SUCCESS; - } - -} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/common/Cosmere.java b/src/main/java/leaf/cosmere/common/Cosmere.java new file mode 100644 index 000000000..e9aaef126 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/Cosmere.java @@ -0,0 +1,190 @@ +/* + * File updated ~ 20 - 12 - 2024 ~ Leaf + */ + +package leaf.cosmere.common; + +import leaf.cosmere.api.*; +import leaf.cosmere.common.cap.entity.SpiritwebCapability; +import leaf.cosmere.common.compat.curios.CuriosCompat; +import leaf.cosmere.common.compat.patchouli.PatchouliCompat; +import leaf.cosmere.common.config.CosmereConfigs; +import leaf.cosmere.common.config.CosmereModConfig; +import leaf.cosmere.common.eventHandlers.ColorHandler; +import leaf.cosmere.common.network.NetworkPacketHandler; +import leaf.cosmere.common.registry.*; +import net.minecraft.resources.ResourceLocation; +import net.minecraftforge.common.capabilities.RegisterCapabilitiesEvent; +import net.minecraftforge.eventbus.api.IEventBus; +import net.minecraftforge.fml.ModLoadingContext; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.config.ModConfig; +import net.minecraftforge.fml.event.config.ModConfigEvent; +import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; +import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; +import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; + +import java.util.HashMap; +import java.util.Map; + +@Mod(Cosmere.MODID) +public class Cosmere +{ + + public static final String MODID = CosmereAPI.COSMERE_MODID; + public static final Map modulesLoaded = new HashMap<>(); + + public static Cosmere instance; + + public final Version versionNumber; + private final NetworkPacketHandler packetHandler; + + + public Cosmere() + { + instance = this; + + CosmereConfigs.registerConfigs(ModLoadingContext.get()); + + IEventBus modBus = FMLJavaModLoadingContext.get().getModEventBus(); + modBus.addListener(this::onCommonSetup); + modBus.addListener(this::onClientSetup); + modBus.addListener(this::onAddCaps); + modBus.addListener(this::onConfigLoad); + modBus.addListener(this::onConfigReload); + + //Set our version number to match the mods.toml file, which matches the one in our build.gradle + versionNumber = new Version(ModLoadingContext.get().getActiveContainer()); + + + //Register our deferred registries + ItemsRegistry.ITEMS.register(modBus); + BlocksRegistry.BLOCKS.register(modBus); + EntityTypeRegistry.ENTITY_TYPES.register(modBus); + AttributesRegistry.ATTRIBUTES.register(modBus); + ManifestationRegistry.MANIFESTATIONS.createAndRegisterManifestation(modBus); + CosmereEffectsRegistry.EFFECTS.createAndRegister(modBus); + PoiTypesRegistry.POINT_OF_INTERESTS.register(modBus); + VillagerProfessionRegistry.VILLAGE_PROFESSIONS.register(modBus); + BiomeModifierRegistry.BIOME_MODIFIER_SERIALIZERS.register(modBus); + LootFunctionRegistry.LOOT_FUNCTIONS.register(modBus); + GameEventRegistry.GAME_EVENTS.register(modBus); + ArgumentTypeRegistry.ARGUMENT_TYPE_INFOS.register(modBus); + CosmereRecipesRegistry.RECIPE_SERIALIZERS.register(modBus); + + CreativeTabsRegistry.CREATIVE_TABS.register(modBus); + BiomeRegistry.BIOMES.register(modBus); + LootModifiersRegistry.LOOT_MODIFIERS.register(modBus); + FeatureRegistry.FEATURES.register(modBus); + IntProviderTypesRegistry.INT_PROVIDER_TYPES.register(modBus); + HeightProviderTypesRegistry.HEIGHT_PROVIDER_TYPES.register(modBus); + + DimensionRegistry.register(); + + AdvancementTriggerRegistry.init(); + + packetHandler = new NetworkPacketHandler(); + + // init cross mod compatibility stuff, if relevant + CuriosCompat.init(); + PatchouliCompat.init(); + } + + public static synchronized void addModule(IModModule modModule) + { + modulesLoaded.put(modModule.getName(), modModule); + } + + public static boolean isModuleLoaded(String moduleName) + { + return modulesLoaded.containsKey(moduleName); + } + + public static NetworkPacketHandler packetHandler() + { + return instance.packetHandler; + } + + public static ResourceLocation rl(String path) + { + return new ResourceLocation(Cosmere.MODID, path); + } + + public static Map makeSpiritwebSubmodules() + { + Map spiritwebSubmoduleMap = new HashMap<>(); + + for (IModModule iModModule : modulesLoaded.values()) + { + ISpiritwebSubmodule iSpiritwebSubmodule = iModModule.makeSubmodule(); + if (iSpiritwebSubmodule != null) + { + Manifestations.ManifestationTypes maniType = null; + switch (iModModule.getName()) + { + case "Example": + maniType = Manifestations.ManifestationTypes.NONE; + break; + case "Allomancy": + maniType = Manifestations.ManifestationTypes.ALLOMANCY; + break; + case "Feruchemy": + maniType = Manifestations.ManifestationTypes.FERUCHEMY; + break; + case "Hemalurgy": + maniType = Manifestations.ManifestationTypes.HEMALURGY; + break; + case "Surgebinding": + maniType = Manifestations.ManifestationTypes.SURGEBINDING; + break; + case "Sandmastery": + maniType = Manifestations.ManifestationTypes.SANDMASTERY; + break; + case "Aviar": + maniType = Manifestations.ManifestationTypes.AVIAR; + break; + } + + spiritwebSubmoduleMap.put(maniType, iSpiritwebSubmodule); + } + } + + return spiritwebSubmoduleMap; + } + + private void onCommonSetup(FMLCommonSetupEvent event) + { + //Initialization notification + CosmereAPI.logger.info("Cosmere Version {} initializing...", versionNumber); + + packetHandler.initialize(); + } + + private void onConfigLoad(ModConfigEvent configEvent) + { + ModConfig config = configEvent.getConfig(); + if (config.getModId().equals(MODID) && config instanceof CosmereModConfig cosmereModConfig) + { + cosmereModConfig.clearCache(); + } + } + + private void onConfigReload(ModConfigEvent.Reloading configEvent) + { + ModConfig config = configEvent.getConfig(); + if (config.getModId().equals(MODID) && config instanceof CosmereModConfig cosmereModConfig) + { + cosmereModConfig.clearCache(); + } + } + + private void onAddCaps(RegisterCapabilitiesEvent capabilitiesEvent) + { + capabilitiesEvent.register(SpiritwebCapability.class); + } + + private void onClientSetup(FMLClientSetupEvent event) + { + event.enqueueWork(ColorHandler::init); + } +} diff --git a/src/main/java/leaf/cosmere/common/blocks/BaseBlock.java b/src/main/java/leaf/cosmere/common/blocks/BaseBlock.java new file mode 100644 index 000000000..41203fa23 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/blocks/BaseBlock.java @@ -0,0 +1,29 @@ +/* + * File updated ~ 17 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.common.blocks; + +import leaf.cosmere.common.properties.PropTypes; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.SoundType; + +public class BaseBlock extends Block +{ + + public BaseBlock() + { + this(PropTypes.Blocks.METAL.get(), SoundType.METAL, 1F, 2F); + } + + public BaseBlock(Properties properties, SoundType sound, float hardness, float resistance) + { + super(properties.sound(sound).strength(hardness, resistance)); + } + + public BaseBlock(Properties properties) + { + super(properties); + + } +} diff --git a/src/main/java/leaf/cosmere/common/blocks/BaseFallingBlock.java b/src/main/java/leaf/cosmere/common/blocks/BaseFallingBlock.java new file mode 100644 index 000000000..e00013fff --- /dev/null +++ b/src/main/java/leaf/cosmere/common/blocks/BaseFallingBlock.java @@ -0,0 +1,24 @@ +/* + * File updated ~ 24 - 4 - 2021 ~ Leaf + */ + +package leaf.cosmere.common.blocks; + +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.FallingBlock; +import net.minecraft.world.level.block.SoundType; + +public class BaseFallingBlock extends FallingBlock +{ + + public BaseFallingBlock(Properties properties, SoundType sound, float hardness, float resistance) + { + super(properties.sound(sound).strength(hardness, resistance)); + } + + public BaseFallingBlock(Properties properties) + { + super(properties); + + } +} diff --git a/src/main/java/leaf/cosmere/common/blocks/MetalBlock.java b/src/main/java/leaf/cosmere/common/blocks/MetalBlock.java new file mode 100644 index 000000000..32d7f7176 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/blocks/MetalBlock.java @@ -0,0 +1,27 @@ +/* + * File updated ~ 24 - 4 - 2021 ~ Leaf + */ + +package leaf.cosmere.common.blocks; + +import leaf.cosmere.api.IHasMetalType; +import leaf.cosmere.api.Metals; +import leaf.cosmere.common.properties.PropTypes; +import net.minecraft.world.level.block.SoundType; + +public class MetalBlock extends BaseBlock implements IHasMetalType +{ + private final Metals.MetalType metalType; + + public MetalBlock(Metals.MetalType metalType) + { + super(PropTypes.Blocks.METAL.get(), SoundType.METAL, 3F, 3F); + this.metalType = metalType; + } + + @Override + public Metals.MetalType getMetalType() + { + return this.metalType; + } +} diff --git a/src/main/java/leaf/cosmere/common/blocks/MetalOreBlock.java b/src/main/java/leaf/cosmere/common/blocks/MetalOreBlock.java new file mode 100644 index 000000000..e95bfc8d6 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/blocks/MetalOreBlock.java @@ -0,0 +1,28 @@ +/* + * File updated ~ 24 - 4 - 2021 ~ Leaf + */ + +package leaf.cosmere.common.blocks; + +import leaf.cosmere.api.IHasMetalType; +import leaf.cosmere.api.Metals; +import leaf.cosmere.common.properties.PropTypes; +import net.minecraft.util.valueproviders.UniformInt; +import net.minecraft.world.level.block.DropExperienceBlock; + +public class MetalOreBlock extends DropExperienceBlock implements IHasMetalType +{ + private final Metals.MetalType metalType; + + public MetalOreBlock(Metals.MetalType metalType) + { + super(PropTypes.Blocks.ORE.get().strength(3f, 3f).requiresCorrectToolForDrops(), UniformInt.of(0, 2)); + this.metalType = metalType; + } + + @Override + public Metals.MetalType getMetalType() + { + return this.metalType; + } +} diff --git a/src/main/java/leaf/cosmere/common/blocks/MetalworkingTableBlock.java b/src/main/java/leaf/cosmere/common/blocks/MetalworkingTableBlock.java new file mode 100644 index 000000000..2b368d8cd --- /dev/null +++ b/src/main/java/leaf/cosmere/common/blocks/MetalworkingTableBlock.java @@ -0,0 +1,16 @@ +/* + * File updated ~ 20 - 3 - 2022 ~ Leaf + */ + +package leaf.cosmere.common.blocks; + +import leaf.cosmere.common.properties.PropTypes; +import net.minecraft.world.level.block.SoundType; + +public class MetalworkingTableBlock extends BaseBlock +{ + public MetalworkingTableBlock() + { + super(PropTypes.Blocks.METAL.get(), SoundType.METAL, 1F, 2F); + } +} diff --git a/src/main/java/leaf/cosmere/common/blocks/TileBlock.java b/src/main/java/leaf/cosmere/common/blocks/TileBlock.java new file mode 100644 index 000000000..d29ca2f2c --- /dev/null +++ b/src/main/java/leaf/cosmere/common/blocks/TileBlock.java @@ -0,0 +1,15 @@ +/* + * File updated ~ 24 - 4 - 2021 ~ Leaf + */ + +package leaf.cosmere.common.blocks; + +import net.minecraft.world.level.block.Block; + +public class TileBlock extends Block +{ + public TileBlock(Properties properties) + { + super(properties); + } +} diff --git a/src/main/java/leaf/cosmere/common/cap/entity/SpiritwebCapability.java b/src/main/java/leaf/cosmere/common/cap/entity/SpiritwebCapability.java new file mode 100644 index 000000000..32881e757 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/cap/entity/SpiritwebCapability.java @@ -0,0 +1,1303 @@ +/* + * File updated ~ 19 - 11 - 2023 ~ Leaf + * File updated ~ 2 - 5 - 2025 ~ SoaringEaqle + */ + +package leaf.cosmere.common.cap.entity; + +import com.google.common.collect.Maps; +import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.blaze3d.vertex.*; +import leaf.cosmere.api.*; +import leaf.cosmere.api.cosmereEffect.CosmereEffect; +import leaf.cosmere.api.cosmereEffect.CosmereEffectInstance; +import leaf.cosmere.api.investiture.KineticInvestiture; +import leaf.cosmere.api.manifestation.Manifestation; +import leaf.cosmere.api.spiritweb.ISpiritweb; +import leaf.cosmere.client.PowerSaveState; +import leaf.cosmere.common.Cosmere; +import leaf.cosmere.common.config.CosmereConfigs; +import leaf.cosmere.common.investiture.Infusion; +import leaf.cosmere.common.network.packets.SyncPlayerSpiritwebMessage; +import leaf.cosmere.common.registry.AttributesRegistry; +import leaf.cosmere.common.registry.GameEventRegistry; +import leaf.cosmere.common.registry.ManifestationRegistry; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.renderer.GameRenderer; +import net.minecraft.client.resources.language.I18n; +import net.minecraft.core.BlockPos; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.ListTag; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.util.Mth; +import net.minecraft.util.profiling.ProfilerFiller; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.ai.attributes.Attribute; +import net.minecraft.world.entity.ai.attributes.AttributeInstance; +import net.minecraft.world.entity.ai.attributes.AttributeMap; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.client.event.RenderLevelStageEvent; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.capabilities.CapabilityManager; +import net.minecraftforge.common.capabilities.CapabilityToken; +import net.minecraftforge.common.util.LazyOptional; +import net.minecraftforge.event.entity.player.PlayerEvent; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import java.io.FileNotFoundException; +import java.util.*; +import java.util.List; + +/* + "The actual outlet of the power is not chosen by the practitioner, but instead is hardwritten into their Spiritweb" + -Khriss + https://coppermind.net/wiki/Ars_Arcanum#The_Alloy_of_Law + */ + +public class SpiritwebCapability implements ISpiritweb +{ + //Injection + public static final Capability CAPABILITY = CapabilityManager.get(new CapabilityToken<>() + { + }); + + //detect if capability has been set up yet + private boolean didSetup = false; + private boolean hasBeenInitialized = false; + + private final LivingEntity livingEntity; + + public final Map MANIFESTATIONS_MODE = new HashMap<>(); + + private Manifestation selectedManifestation = ManifestationRegistry.NONE.get(); + + + public List pushBlocks = new ArrayList<>(4); + public List pushEntities = new ArrayList<>(4); + + public List pullBlocks = new ArrayList<>(4); + public List pullEntities = new ArrayList<>(4); + public int pushPullWeight = 1; + private CompoundTag nbt; + + private final Map activeEffects = Maps.newHashMap(); + + private final Map spiritwebSubmodules; + + private Map> powerSaveStorage; + + public final Set infusions = new HashSet<>(); + public final Set investitures = new HashSet<>(); + private double maxBEU; + + + + + public SpiritwebCapability(LivingEntity ent) + { + this.livingEntity = ent; + spiritwebSubmodules = Cosmere.makeSpiritwebSubmodules(); + } + + + @Nonnull + public static LazyOptional get(LivingEntity entity) + { + return entity != null ? entity.getCapability(SpiritwebCapability.CAPABILITY, null) + : LazyOptional.empty(); + } + + @Override + public CompoundTag serializeNBT() + { + if (this.nbt == null) + { + this.nbt = new CompoundTag(); + } + + nbt.putBoolean("assigned_powers", hasBeenInitialized); + nbt.putString("selected_power", selectedManifestation.getRegistryName().toString()); + + final CompoundTag modeNBT = new CompoundTag(); + for (Manifestation manifestation : CosmereAPI.manifestationRegistry()) + { + if (MANIFESTATIONS_MODE.containsKey(manifestation)) + { + modeNBT.putInt(manifestation.getRegistryName().toString(), MANIFESTATIONS_MODE.get(manifestation)); + } + } + nbt.put("manifestation_modes", modeNBT); + + if (this.activeEffects.isEmpty()) + { + nbt.remove("ActiveEffects"); + } + else + { + ListTag listtag = new ListTag(); + for (CosmereEffectInstance cosmereEffectInstance : this.activeEffects.values()) + { + listtag.add(cosmereEffectInstance.save(new CompoundTag())); + } + + nbt.put("ActiveEffects", listtag); + } + + for (ISpiritwebSubmodule spiritwebSubmodule : spiritwebSubmodules.values()) + { + spiritwebSubmodule.serialize(this); + } + + nbt.put("PowerSaveStates", PowerSaveState.serialize()); + + return nbt; + } + + @Override + public void deserializeNBT(CompoundTag compoundTag) + { + this.nbt = compoundTag; + + hasBeenInitialized = compoundTag.getBoolean("assigned_powers"); + CompoundTag modeNBT = compoundTag.getCompound("manifestation_modes"); + + for (Manifestation manifestation : CosmereAPI.manifestationRegistry()) + { + final String manifestationLoc = manifestation.getRegistryName().toString(); + + int oldManifestationMode = MANIFESTATIONS_MODE.getOrDefault(manifestation, 0); + int newManifestationMode = 0; + + if (modeNBT.contains(manifestationLoc)) + { + newManifestationMode = modeNBT.getInt(manifestationLoc); + MANIFESTATIONS_MODE.put(manifestation, newManifestationMode); + } + else + { + MANIFESTATIONS_MODE.remove(manifestation); + } + + if (getLiving().level().isClientSide && oldManifestationMode != newManifestationMode) + { + manifestation.onModeChange(this, oldManifestationMode); + } + } + selectedManifestation = ManifestationRegistry.fromID(compoundTag.getString("selected_power")); + + if (compoundTag.contains("ActiveEffects")) + { + ListTag listtag = (ListTag) compoundTag.get("ActiveEffects"); + for (int i = 0; i < listtag.size(); ++i) + { + CompoundTag compoundtag = listtag.getCompound(i); + CosmereEffectInstance cosmereEffectInstance = CosmereEffectInstance.load(compoundtag); + if (cosmereEffectInstance != null) + { + this.activeEffects.put(cosmereEffectInstance.getUUID(), cosmereEffectInstance); + this.onEffectUpdated(cosmereEffectInstance, true, (Entity) null); + } + } + } + + for (ISpiritwebSubmodule spiritwebSubmodule : spiritwebSubmodules.values()) + { + spiritwebSubmodule.deserialize(this); + } + if(nbt.contains("PowerSaveStates")) + { + PowerSaveState.deserialize((CompoundTag) nbt.get("PowerSaveStates")); + } + + } + + @Override + public CompoundTag getCompoundTag() + { + return nbt; + } + + @Override + public ISpiritwebSubmodule getSubmodule(Manifestations.ManifestationTypes manifestationType) + { + return spiritwebSubmodules.get(manifestationType); + } + + @Override + public Map getSubmodules() + { + return spiritwebSubmodules; + } + + @Override + public void tickEffects() + { + Iterator iterator = this.activeEffects.keySet().iterator(); + + try + { + while (iterator.hasNext()) + { + UUID uuidOfEffedInstance = iterator.next(); + CosmereEffectInstance cosmereEffectInstance = this.activeEffects.get(uuidOfEffedInstance); + if (!cosmereEffectInstance.tick(this)) + { + if (!this.getLiving().level().isClientSide) + { + iterator.remove(); + this.onEffectRemoved(cosmereEffectInstance); + } + } + else if (cosmereEffectInstance.getDuration() % 600 == 0) + { + //this was copied from mob effect code, serverplayer + // overrides the section to send effect packet updates + //we don't do that, as everything on spiritweb gets synced at once + //todo decide if we wanna remove + this.onEffectUpdated(cosmereEffectInstance, false, (Entity) null); + } + } + } + catch (ConcurrentModificationException concurrentmodificationexception) + { + //ignore + } + } + + @Override + public void addEffect(CosmereEffectInstance newEffect) + { + this.addEffect(newEffect, (Entity) null); + } + + @Override + public void addEffect(CosmereEffectInstance newEffect, @Nullable Entity sourceEntity) + { + CosmereEffectInstance cosmereEffectInstance = this.activeEffects.get(newEffect.getUUID()); + + if (cosmereEffectInstance != null) + { + //remove old copy + removeEffect(cosmereEffectInstance.getUUID()); + } + + this.activeEffects.put(newEffect.getUUID(), newEffect); + this.onEffectAdded(newEffect, sourceEntity); + } + + @Override + public void onEffectAdded(CosmereEffectInstance effectInstance, Entity sourceEntity) + { + if (!this.getLiving().level().isClientSide) + { + effectInstance.applyAttributeModifiers(this.getLiving(), this.getLiving().getAttributes()); + } + + //todo do something with source entity here + } + + @Override + public void onEffectUpdated(CosmereEffectInstance cosmereEffectInstance, boolean forced, Entity entity) + { + final LivingEntity livingEntity = this.getLiving(); + if (forced && !livingEntity.level().isClientSide) + { + cosmereEffectInstance.removeAttributeModifiers(livingEntity.getAttributes()); + cosmereEffectInstance.applyAttributeModifiers(livingEntity, livingEntity.getAttributes()); + } + } + + @Override + public void removeEffect(UUID uuid) + { + if (!this.getLiving().level().isClientSide) + { + final CosmereEffectInstance effectInstance = this.activeEffects.remove(uuid); + onEffectRemoved(effectInstance); + } + } + + @Override + public void onEffectRemoved(CosmereEffectInstance cosmereEffectInstance) + { + if (!this.getLiving().level().isClientSide && cosmereEffectInstance != null) + { + cosmereEffectInstance.removeAttributeModifiers(this.getLiving().getAttributes()); + } + } + + @Override + public CosmereEffectInstance getEffect(UUID uuid) + { + return this.activeEffects.get(uuid); + } + + @Override + public boolean hasEffect(CosmereEffect effect) + { + List effectList = this.activeEffects.values().stream().filter(effectInstance -> + effectInstance.getEffect().equals(effect)).toList(); + return !effectList.isEmpty(); + } + + @Override + public Set> getEffects() + { + return this.activeEffects.entrySet(); + } + + //get the sum total strength of all matching effects in list of effects affecting target + @Override + public int totalStrengthOfEffect(CosmereEffect cosmereEffect) + { + return this.activeEffects.values().stream().filter(effectInstance -> effectInstance.getEffect() == cosmereEffect).mapToInt(o -> (int) o.getStrength()).sum(); + } + + @Override + public void tick() + { + //if server + if (!livingEntity.level().isClientSide) + { + //Login sync + if (!didSetup) + { + syncToClients(null); + didSetup = true; + } + + // Clean up and decay at the end of every other second + if(getLiving().tickCount % 40 == 39) + { + tickServer(); + } + if(getLiving().tickCount % 20 == 19) + { + for (IInvestiture invest : infusions) + { + invest.calculateCurrentMaxDraw(); + } + } + + final LivingEntity spiritWebEntity = getLiving(); + if (selectedManifestation != ManifestationRegistry.NONE.get() && !hasManifestation(selectedManifestation)) + { + selectedManifestation = ManifestationRegistry.NONE.get(); + if (spiritWebEntity instanceof ServerPlayer serverPlayer) + { + syncToClients(serverPlayer); + } + } + + boolean shouldTriggerSculkEvent = false; + + //Tick + for (Manifestation manifestation : CosmereAPI.manifestationRegistry()) + { + //don't tick powers that the user doesn't have + //don't tick powers that are not active + if (manifestation.isActive(this)) + { + //ordering here matters (: tick must always run + shouldTriggerSculkEvent = manifestation.tick(this) || shouldTriggerSculkEvent; + } + } + + //An example from mekanism had the event triggering every two seconds + if (shouldTriggerSculkEvent && (spiritWebEntity.tickCount % 40 == 0) && CosmereConfigs.SERVER_CONFIG.SCULK_CAN_HEAR_KINETIC_INVESTITURE.get()) + { + // if the target is properly concealed, we don't trigger investiture game events + final AttributeMap targetAttributes = spiritWebEntity.getAttributes(); + double concealmentStrength = 0; + final Attribute cognitiveConcealmentAttr = AttributesRegistry.COGNITIVE_CONCEALMENT.get(); + if (targetAttributes.hasAttribute(cognitiveConcealmentAttr)) + { + concealmentStrength = targetAttributes.getValue(cognitiveConcealmentAttr); + } + //but the concealment needs to be strong enough? + //todo move this to a config so people can define how strong the concealment needs to be + if (concealmentStrength < 2) + { + spiritWebEntity.gameEvent(GameEventRegistry.KINETIC_INVESTITURE.get()); + } + } + + for (ISpiritwebSubmodule spiritwebSubmodule : spiritwebSubmodules.values()) + { + spiritwebSubmodule.tickServer(this); + } + + this.tickEffects(); + } + else//if client + { + + for (ISpiritwebSubmodule spiritwebSubmodule : spiritwebSubmodules.values()) + { + spiritwebSubmodule.tickClient(this); + } + } + } + + private void tickServer() + { + for(Infusion invest: infusions) + { + if (invest.getBEU() <= 0) + { + infusions.remove(invest); + } + } + for(KineticInvestiture invest: investitures) + { + invest.decay(); + if (invest.getBEU() <= 0) + { + infusions.remove(invest); + } + } + } + + @Override + public LivingEntity getLiving() + { + return livingEntity; + } + + + //Copy things from an old spiritweb into the new one. + //Eg a player has died and we need to make sure they get their stormlight and breaths back. + @Override + public void onPlayerClone(PlayerEvent.Clone event, ISpiritweb oldSpiritWeb) + { + var oldWeb = (SpiritwebCapability) oldSpiritWeb; + + //TODO config options that let you choose what can be transferred + + //transfer attributes + var oldAttMap = oldWeb.getLiving().getAttributes(); + var newAttMap = getLiving().getAttributes(); + + // A player's manifestations is now determined by attributes, which lets me do cool things like mess with strength in a power. + // So if we've set a base value for an attribute on the player, copy it to the new one. + for (Manifestation manifestation : CosmereAPI.manifestationRegistry()) + { + //attribute registry name is now the same as the manifestation registry name, so this function + //doesn't need to be able to access the attribute registries of sub mods :) + Attribute attribute = manifestation.getAttribute(); + if (attribute != null) + { + AttributeInstance oldAttr = oldAttMap.getInstance(attribute); + AttributeInstance newAttr = newAttMap.getInstance(attribute); + + if (newAttr != null && oldAttr != null) + { + //copy all changes to the entity attribute instance + //this should clear out any attributes applied at cloning and replace with copies of the old ones + newAttr.load(oldAttr.save()); + } + } + } + + //forcibly serialize the old web, then deserialize it into the new one + //before, it was just a copy of whatever was saved the last time it was synced. + deserializeNBT(oldWeb.serializeNBT().copy()); + + if (event.isWasDeath()) + { + for (ISpiritwebSubmodule spiritwebSubmodule : spiritwebSubmodules.values()) + { + spiritwebSubmodule.resetOnDeath(this); + } + } + } + + @OnlyIn(Dist.CLIENT) + @Override + public void renderWorldEffects(RenderLevelStageEvent event) + { + ProfilerFiller profiler = Minecraft.getInstance().getProfiler(); + + for (Map.Entry set : spiritwebSubmodules.entrySet()) + { + ISpiritwebSubmodule spiritwebSubmodule = set.getValue(); + + final boolean isDebugModule = set.getKey() == null; + if (!isDebugModule) + { + profiler.push(set.getKey().getName()); + } + + spiritwebSubmodule.renderWorldEffects(this, event); + + if (!isDebugModule) + { + profiler.pop(); + } + } + } + + + public void renderSelectedHUD(GuiGraphics gg) + { + if (CosmereConfigs.CLIENT_CONFIG.disableSelectedManifestationHud.get() || selectedManifestation.getManifestationType() == Manifestations.ManifestationTypes.NONE) + { + return; + } + + Minecraft mc = Minecraft.getInstance(); + int startX = CosmereConfigs.CLIENT_CONFIG.hudXCoordinate.get(); + int startY = CosmereConfigs.CLIENT_CONFIG.hudYCoordinate.get(); + int size = CosmereConfigs.CLIENT_CONFIG.hudSize.get(); + + String stringToDraw = I18n.get(selectedManifestation.getTextComponent().getString()); + int xOffset = -5; + float textScale = size / (float) (mc.font.width(stringToDraw) - 20); + gg.pose().pushPose(); + gg.pose().scale(textScale, textScale, 1f); + gg.drawString(mc.font, stringToDraw, (int) ((startX + xOffset) / textScale), (int) ((startY + size + 5) / textScale), 0xFFFFFF); + gg.pose().popPose(); + + int mode = getMode(selectedManifestation); + + String stringToDraw2 = ""; + + gg.pose().pushPose(); + RenderSystem.setShader(GameRenderer::getPositionTexShader); + RenderSystem.enableBlend(); + RenderSystem.defaultBlendFunc(); + Tesselator tesselator = Tesselator.getInstance(); + BufferBuilder buffer = tesselator.getBuilder(); + + // draw square + try { + final ResourceLocation textureLocation = new ResourceLocation(selectedManifestation.getRegistryName().getNamespace(), "textures/gui/hud_background.png"); + mc.getResourceManager().getResourceOrThrow(textureLocation); + + RenderSystem.setShaderTexture(0, textureLocation); + gg.blit(textureLocation, + startX, + startY, + size, + size, + 0, + 0, + 18, + 18, + 18, + 18); + } + catch (FileNotFoundException ex) // backup in case no texture + { + RenderSystem.setShader(GameRenderer::getPositionColorShader); + buffer.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR); + int color = 0xCC000000; + //set first triangle + buffer.vertex(startX, startY, 0).color(color).endVertex(); + buffer.vertex(startX, startY + size, 0).color(color).endVertex(); + //set second triangle + buffer.vertex(startX + size, startY + size, 0).color(color).endVertex(); + buffer.vertex(startX + size, startY, 0).color(color).endVertex(); + tesselator.end(); + } + + // draw manifestation icon + { + final StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.setLength(0); + String manifestationTypeName = selectedManifestation.getManifestationType().getName(); + stringBuilder + .append("textures/icon/") + .append(manifestationTypeName) + .append("/"); + switch (selectedManifestation.getManifestationType()) + { + case ALLOMANCY: + case FERUCHEMY: + if (selectedManifestation instanceof IHasMetalType metalType) + { + stringBuilder.append(metalType.getMetalType().getName()); + } + break; + case SURGEBINDING: + stringBuilder.append(selectedManifestation.getName()); + break; + case AON_DOR: + break; + case AWAKENING: + break; + } + stringBuilder.append(".png"); + + final ResourceLocation textureLocation = new ResourceLocation(selectedManifestation.getRegistryName().getNamespace(), stringBuilder.toString()); + RenderSystem.setShaderTexture(0, textureLocation); + int posX = startX + 4; + int posY = startY + 2; + if (selectedManifestation.getManifestationType() != Manifestations.ManifestationTypes.ALLOMANCY && selectedManifestation.getManifestationType() != Manifestations.ManifestationTypes.FERUCHEMY) + { + posX = startX + 2; + } + gg.blit(textureLocation, + posX, + posY, + size-4, + size-4, + 0, + 0, + 18, + 18, + 18, + 18); + } + + // todo draw pentagon +// { +// int color = 0xCC000000; +// float centerX = (float) mc.getWindow().getGuiScaledWidth() /2;//startX + (float) size / 2; +// float centerY = (float) mc.getWindow().getGuiScaledHeight() /2;//startY + size + 10; +// float[][] pentagonVertices = calculatePentagonVertices(centerX, centerY, 40, 0.5f); +// +// RenderSystem.setShader(GameRenderer::getPositionColorShader); +// buffer.begin(VertexFormat.Mode.TRIANGLE_FAN, DefaultVertexFormat.POSITION_COLOR); +// +// buffer.vertex(centerX, centerY, 0).color(color).endVertex(); // Center point for triangle fan +// for (float[] vertex : pentagonVertices) +// { +// buffer.vertex(vertex[0], vertex[1], 0).color(color).endVertex(); +// } +// buffer.vertex(pentagonVertices[0][0], pentagonVertices[0][1], 0).color(color).endVertex(); +// tesselator.end(); +// } + + gg.pose().popPose(); + RenderSystem.disableBlend(); + + //todo migrate drawing text to manifestation, this shouldn't be in main module. + if (selectedManifestation.getManifestationType() == Manifestations.ManifestationTypes.FERUCHEMY) + { + //todo translations + if (mode < 0) + { + stringToDraw2 = "T" + mode; + } + else if (mode > 0) + { + stringToDraw2 = "S" + mode; + } + else + { + //don't draw + //stringToDraw2 = ""; + } + } + else if (selectedManifestation.getManifestationType() == Manifestations.ManifestationTypes.ALLOMANCY) + { + String rate; + + switch (mode) + { + case -2 -> rate = "CF"; + case -1 -> rate = "C"; + default -> rate = ""; + case 1 -> rate = "B"; + case 2, 3 -> rate = "F";//copper has a 3rd mode for only smoking self + } + stringToDraw2 = rate; + } + + //todo translations + if (!stringToDraw2.isEmpty()) + { + int yOffset = (size / 2) - (stringToDraw2.length() * mc.font.lineHeight) / 2; // center the text vertically + for (char c : stringToDraw2.toCharArray()) + { + if (c == '-') + c = '|'; + xOffset = mc.font.width(String.valueOf(c)) / 2 - 4; + gg.drawString(mc.font, String.valueOf(c), startX - xOffset, startY + yOffset, 0xFFFFFF); + yOffset += mc.font.lineHeight; + } + } + } + + static float[][] calculatePentagonVertices(float centerX, float centerY, float radius, float scaleY) + { +// for i in range(5): +// angle = 2 * math.pi * i / 5 # Divide 360° into 5 angles (in radians) +// x = cx + radius * math.cos(angle) +// y = cy + radius * math.sin(angle) +// vertices.append((x, y)) +// return vertices + float[][] vertices = new float[5][2]; + for (int i = 0; i < 5; i++) { + double angle = 2 * Math.PI * ((double) i / 5); + vertices[i][0] = centerX + (float) (radius * Math.cos(angle)); + vertices[i][1] = centerY + (float) (radius * Math.sin(angle)); // Scale Y + } + return vertices; + } + + @Override + public void setSelectedManifestation(Manifestation manifestation) + { + selectedManifestation = manifestation; + } + + @Override + public Manifestation getSelectedManifestation() + { + return selectedManifestation; + } + + public boolean hasBeenInitialized() + { + return hasBeenInitialized; + } + + public void setHasBeenInitialized() + { + hasBeenInitialized = true; + } + + public void setHasNotBeenInitialized() + { + hasBeenInitialized = false; + } + + public boolean hasAnyPowers() + { + for (Manifestation manifestation : CosmereAPI.manifestationRegistry()) + { + final Attribute attribute = manifestation.getAttribute(); + if (attribute == null) + { + continue; + } + + AttributeInstance manifestationAttribute = livingEntity.getAttribute(attribute); + if (manifestationAttribute == null) + { + continue; + } + + if (manifestationAttribute.getValue() > 5) + { + setHasBeenInitialized(); + return true; + } + } + + return false; + } + + @Override + public boolean hasManifestation(Manifestation manifestation) + { + return hasManifestation(manifestation, false); + } + + @Override + public boolean hasManifestation(Manifestation manifestation, boolean ignoreTemporaryPower) + { + final Attribute attribute = manifestation.getAttribute(); + if (attribute == null) + { + return false; + } + + AttributeMap attributeManager = livingEntity.getAttributes(); + if (attributeManager.hasAttribute(attribute)) + { + double manifestationStrength = + ignoreTemporaryPower + ? attributeManager.getBaseValue(attribute) + : attributeManager.getValue(attribute); + return manifestationStrength >= 1; + } + + return false; + } + + + @Override + public void giveManifestation(Manifestation manifestation, int baseValue) + { + final Attribute attribute = manifestation.getAttribute(); + if (attribute == null) + { + return; + } + AttributeInstance manifestationAttribute = livingEntity.getAttribute(attribute); + + if (manifestationAttribute != null) + { + manifestationAttribute.setBaseValue(baseValue); + } + + hasBeenInitialized = true; + } + + @Override + public void removeManifestation(Manifestation manifestation) + { + final Attribute attribute = manifestation.getAttribute(); + if (attribute == null) + { + return; + } + + AttributeInstance manifestationAttribute = livingEntity.getAttribute(attribute); + if (manifestationAttribute != null) + { + manifestationAttribute.setBaseValue(0); + } + } + + @Override + public boolean canTickManifestation(Manifestation manifestation) + { + if (!hasManifestation(manifestation)) + { + return false; + } + + if (MANIFESTATIONS_MODE.containsKey(manifestation)) + { + return MANIFESTATIONS_MODE.get(manifestation) != 0; + } + + return false; + } + + @Override + public void deactivateCurrentManifestation() + { + MANIFESTATIONS_MODE.remove(selectedManifestation); + } + + @Override + public void deactivateManifestations() + { + MANIFESTATIONS_MODE.clear(); + } + + @Override + public void clearManifestations() + { + deactivateManifestations(); + + for (Manifestation manifestation : CosmereAPI.manifestationRegistry()) + { + removeManifestation(manifestation); + } + } + + @Override + public List getAvailableManifestations() + { + return getAvailableManifestations(false); + } + + @Override + public List getAvailableManifestations(boolean ignoreTemporaryPower) + { + List list = new ArrayList(); + + //todo intelligently handle multiple powers + for (Manifestation manifestation : CosmereAPI.manifestationRegistry()) + { + if (manifestation == ManifestationRegistry.NONE.getManifestation()) + { + continue; + } + + if (hasManifestation(manifestation, ignoreTemporaryPower)) + { + list.add(manifestation); + } + } + + return list; + } + + @Override + public HashMap getManifestations() + { + return getManifestations(false, false); + } + + @Override + public HashMap getManifestations(boolean ignoreTemporaryPower, boolean ignoreInactivePower) + { + HashMap list = new HashMap<>(); + for(Manifestation manifestation: CosmereAPI.manifestationRegistry()) + { + if (manifestation == ManifestationRegistry.NONE.getManifestation()) + { + continue; + } + if (hasManifestation(manifestation, ignoreTemporaryPower)) + { + if(!ignoreInactivePower) + { + list.put(manifestation,MANIFESTATIONS_MODE.get(manifestation)); + } + else if((MANIFESTATIONS_MODE.get(manifestation)) != null && MANIFESTATIONS_MODE.get(manifestation) != 0) + { + list.put(manifestation,MANIFESTATIONS_MODE.get(manifestation)); + } + + } + } + return list; + } + + @Override + public String changeManifestation(int dir) + { + List unlockedManifestations = getAvailableManifestations(); + + if (selectedManifestation == ManifestationRegistry.NONE.get()) + { + selectedManifestation = unlockedManifestations.get(0); + } + else + { + for (int index = 0; index < unlockedManifestations.size(); index++) + { + Manifestation manifestation = unlockedManifestations.get(index); + if (selectedManifestation == manifestation) + { + //found a match, + int selection = index; + + selection += (dir < 0) ? 1 : -1; + selection = (selection + unlockedManifestations.size()) % unlockedManifestations.size(); + + selectedManifestation = unlockedManifestations.get(selection); + break; + } + + } + } + return selectedManifestation.getTranslationKey(); + } + + @Override + public void setMode(Manifestation manifestation, int mode) + { + final int pMax = manifestation.modeMax(this); + final int pMin = manifestation.modeMin(this); + mode = Mth.clamp(mode, pMin, pMax); + int lastMode = MANIFESTATIONS_MODE.put(manifestation, mode); + manifestation.onModeChange(this, lastMode); + } + + @Override + public int getMode(Manifestation manifestation) + { + if (manifestation != null) + { + return MANIFESTATIONS_MODE.getOrDefault(manifestation, 0); + } + return 0; + } + + @Override + public int nextMode(Manifestation aim) + { + int currentMode = getMode(aim); + + if (aim.modeWraps(this) && currentMode == aim.modeMax(this)) + { + int modeMin = aim.modeMin(this); + this.setMode(aim, modeMin); + return modeMin; + } + + int mode = Math.min(currentMode + 1, aim.modeMax(this)); + this.setMode(aim, mode); + + return mode; + } + + @Override + public int previousMode(Manifestation aim) + { + int currentMode = getMode(aim); + + if (aim.modeWraps(this) && currentMode == aim.modeMin(this)) + { + int modeMax = aim.modeMax(this); + this.setMode(aim, modeMax); + return modeMax; + } + + int mode = Math.max(currentMode - 1, aim.modeMin(this)); + this.setMode(aim, mode); + return mode; + } + + @Override + public void syncToClients(@Nullable ServerPlayer serverPlayerEntity) + { + if (livingEntity != null && livingEntity.level().isClientSide) + { + throw new IllegalStateException("Don't sync client -> server"); + } + + if (getSelectedManifestation() == ManifestationRegistry.NONE.get()) + { + //find first power + Optional first = getAvailableManifestations().stream().findFirst(); + first.ifPresent(this::setSelectedManifestation); + } + + CompoundTag nbt = serializeNBT(); + + if (serverPlayerEntity == null) + { + Cosmere.packetHandler().sendToAllInWorld(new SyncPlayerSpiritwebMessage(this.livingEntity.getId(), nbt), (ServerLevel) livingEntity.level()); + } + else + { + Cosmere.packetHandler().sendTo(new SyncPlayerSpiritwebMessage(this.livingEntity.getId(), nbt), serverPlayerEntity); + } + } + + @Override + public double currentBEU() + { + double out = 0; + for(IInvestiture invest : infusions) + { + out += invest.getBEU(); + } + for(IInvestiture invest : investitures) + { + out += invest.getBEU(); + } + return out; + } + + + public double currentBEUDraw(List list) + { + double sub = 0; + for(KineticInvestiture invest: list) + { + sub += invest.getCurrentMaxDraw(); + } + return sub; + } + + + @Override + public double getMaxBEU() + { + return maxBEU; + } + + @Override + public void setMaxBEU(double maxBEU) + { + this.maxBEU = maxBEU; + } + + @Override + public boolean hasInvestiture(IInvestiture investiture) + { + return !investitures.stream().filter(investiture1 -> investiture == investiture1).toList().isEmpty(); + } + + @Override + public HashSet availableInvestitures(Manifestation manifest) + { + HashSet out = new HashSet<>(); + for (KineticInvestiture invest : investitures) + { + if(Arrays.stream(invest.getApplicableManifestations()).anyMatch(m1 -> m1.equals(manifest))) + { + out.add(invest); + } + } + return out; + } + + @Override + public void mergeOrAddInvestiture(IInvestiture invest) + { + if (invest instanceof Infusion infusion) + { + for (Infusion investiture : infusions) + { + if(infusion.merge(investiture)) + { + investiture.setBEU(0); + } + } + infusions.add(infusion); + } + else if (invest instanceof KineticInvestiture kInvest) + { + for (KineticInvestiture investiture : investitures) + { + if(kInvest.merge(investiture)) + { + investiture.setBEU(0); + } + } + investitures.add(kInvest); + } + } + @Override + public KineticInvestiture findInvestiture(Manifestation[] appManifest) + { + for (KineticInvestiture invest : investitures) + { + if (Arrays.equals(invest.getApplicableManifestations(), appManifest)) + { + return invest; + } + } + return null; + } + + + + @Override + // Clears out empty investiture objects from the ArrayList and the game memory + // Objects in use elsewhere will not be removed, and can re-attach themselves later using the "reattach()" method + public void clean() + { + infusions.removeIf(investiture -> investiture.getBEU() == 0); + System.gc(); + } + + public double runInvestiturePull(Manifestation manifestation) + { + + /*Steps + 1. Available list of all investiture that can apply to input. + 2. Create an output variable. + 3. Sum max currently available + 4. If - sum is less than manifestation min + T. a. return 0. + 5. for 5x - Start at 1: + a. If - output >= manifestation max + T. a. break. + b. Temp list of all available with the given priority. + c. If - temp is empty + T. a. continue; + d. Find the max currently available beu's for the priority + e. Create temp variable. + f. If - the max currently available is less than or equal to manifestation max: + T. a. For - each in Temp list + i. add max currently available to temp + F. a. see below. + g. Add last pull to output. + 6. clean list. + 7. return output + */ + + + ArrayList availInvestitures = new ArrayList<>(); + for(IInvestiture invest: availableInvestitures(manifestation)) + { + if(invest instanceof KineticInvestiture invest1) + { + availInvestitures.add(invest1); + } + } + double out = 0; + + //Test to see if the minimum amount of investiture is available + //If not return + if(currentBEUDraw(availInvestitures) < manifestation.minInvestitureDraw(this)) + { + return 0; + } + + + //Loops through each priority + for(int i = 1; i <= 5; i++) + { + if(out > manifestation.maxInvestitureDraw(this)) + { + break; + } + //Temporary list of values of given priority + ArrayList temp = new ArrayList<>(); + double tempTotal = 0; + + //Adds infusions to temporary list + for (KineticInvestiture invest : availInvestitures) + { + // remove empty investiture sets + if(invest.getBEU() == 0) + { + availInvestitures.remove(invest); + } + else if(invest.getPriority() == i) + { + temp.add(invest); + tempTotal += invest.getBEU(); + } + } + //Don't need to loop through an empty list. + if(temp.isEmpty()) + { + continue; + } + double theoryMax = manifestation.maxInvestitureDraw(this) - out; + //If current total is less than max, pull all investiture from each source of the priority + if(tempTotal <= theoryMax) + { + for(KineticInvestiture invest: temp) + { + out += invest.drain(); + + } + } + //Else, pull a percentage relative to each investiture's total. + else + { + + double tempOut = 0; + for(KineticInvestiture invest: temp) + { + double toDraw = ((invest.getBEU()/tempTotal) * theoryMax); + tempOut += invest.removeBEU(toDraw, true); + } + int index = 0; + + //Checking that investiture gets pulled correctly + while(tempOut < theoryMax) + { + KineticInvestiture invest = temp.get(index); + if(invest.getBEU() > 0) + { + tempOut += 1; + invest.removeBEU(1, true); + } + if(invest.getBEU() == 0) + { + temp.remove(index); + } + index = index >= temp.size() ? 0 : index + 1; + } + + out += tempOut; + } + } + clean(); + return out; + } + +} diff --git a/src/main/java/leaf/cosmere/common/charge/IChargeable.java b/src/main/java/leaf/cosmere/common/charge/IChargeable.java new file mode 100644 index 000000000..9697e567c --- /dev/null +++ b/src/main/java/leaf/cosmere/common/charge/IChargeable.java @@ -0,0 +1,177 @@ +/* + * File updated ~ 28 - 2 - 2023 ~ Leaf + */ + +package leaf.cosmere.common.charge; + +import leaf.cosmere.api.Constants; +import leaf.cosmere.api.IHasMetalType; +import leaf.cosmere.api.Manifestations; +import leaf.cosmere.api.Metals; +import leaf.cosmere.api.helpers.StackNBTHelper; +import leaf.cosmere.api.spiritweb.ISpiritweb; +import leaf.cosmere.common.cap.entity.SpiritwebCapability; +import leaf.cosmere.common.config.CosmereConfigs; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.Mth; +import net.minecraft.world.effect.MobEffect; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraftforge.registries.ForgeRegistries; + +import java.util.Optional; +import java.util.UUID; + +//item based chargeable +public interface IChargeable +{ + default int getMaxCharge(ItemStack itemStack) + { + final int maxCharge = CosmereConfigs.SERVER_CONFIG.CHARGEABLE_MAX_VALUE.get(); + return Mth.floor(maxCharge * getMaxChargeModifier()) * itemStack.getCount(); + } + + default float getMaxChargeModifier() + { + return 1; + } + + default int getCharge(ItemStack itemStack) + { + return StackNBTHelper.getInt(itemStack, Constants.NBT.CHARGE_LEVEL, 0) * itemStack.getCount(); + } + + default void setCharge(ItemStack itemStack, int chargeLevel) + { + StackNBTHelper.setInt(itemStack, Constants.NBT.CHARGE_LEVEL, Mth.clamp(chargeLevel, 0, this.getMaxCharge(itemStack))); + + if (chargeLevel == 0 && getAttunedPlayer(itemStack) != null) + { + StackNBTHelper.removeEntry(itemStack, Constants.NBT.ATTUNED_PLAYER); + StackNBTHelper.removeEntry(itemStack, Constants.NBT.ATTUNED_PLAYER_NAME); + } + } + + default boolean trySetAttunedPlayer(ItemStack itemStack, Player entity) + { + if (itemStack.getItem() instanceof IHasMetalType metalType) + { + UUID attunedPlayerID = getAttunedPlayer(itemStack); + UUID playerID = entity.getUUID(); + boolean noAttunedPlayer = attunedPlayerID == null; + + //only allow unkeyed metalminds if they aren't aluminum + if (noAttunedPlayer && metalType.getMetalType() != Metals.MetalType.ALUMINUM) + { + //No attuned player! Check to see whether they are storing identity + boolean isStoringIdentity = false; + { + Optional data = SpiritwebCapability.get(entity).filter(obj -> true); + if (data.isPresent()) { + isStoringIdentity = Manifestations.ManifestationTypes.FERUCHEMY.getManifestation(Metals.MetalType.ALUMINUM.getID()).getMode(data.get()) > 0; + } + } + + //if they are + if (isStoringIdentity) + { + //then set the metalmind to "unsealed". Any feruchemist with access to that power can use the metalmind + StackNBTHelper.setUuid(itemStack, Constants.NBT.ATTUNED_PLAYER, Constants.NBT.UNKEYED_UUID); + StackNBTHelper.setString(itemStack, Constants.NBT.ATTUNED_PLAYER_NAME, "Unkeyed"); // todo translation + return true; + + } + } + + //if theres no attuned player on the metalmind + //or if the player is attuned to the metalmind + //or if the metalmind is unsealed (anyone can access) + if (noAttunedPlayer || attunedPlayerID.compareTo(playerID) == 0 || attunedPlayerID.compareTo(Constants.NBT.UNKEYED_UUID) == 0) + { + if (noAttunedPlayer && getCharge(itemStack) > 0) + { + setAttunedPlayer(itemStack, entity); + setAttunedPlayerName(itemStack, entity); + } + //auto success if that player is already attuned + return true; + } + + } + return false; + } + + default void setAttunedPlayer(ItemStack itemStack, Player entity) + { + StackNBTHelper.setUuid(itemStack, Constants.NBT.ATTUNED_PLAYER, entity.getUUID()); + } + + default UUID getAttunedPlayer(ItemStack itemStack) + { + return StackNBTHelper.getUuid(itemStack, Constants.NBT.ATTUNED_PLAYER); + } + + default void setAttunedPlayerName(ItemStack itemStack, Player entity) + { + String playerName = entity.getDisplayName().getString(); + StackNBTHelper.setString(itemStack, Constants.NBT.ATTUNED_PLAYER_NAME, playerName); + } + + default String getAttunedPlayerName(ItemStack itemStack) + { + return StackNBTHelper.getString(itemStack, Constants.NBT.ATTUNED_PLAYER_NAME, ""); + } + + default boolean getPlayerIsAttuned(ItemStack itemStack, Player entity) + { + //todo clean up + final MobEffect aluminumStoreEffect = ForgeRegistries.MOB_EFFECTS.getValue(new ResourceLocation("feruchemy", "storing_" + Metals.MetalType.ALUMINUM.getName())); + assert aluminumStoreEffect != null; + MobEffectInstance storingIdentityEffect = entity.getEffect(aluminumStoreEffect); + boolean noIdentityPlayer = storingIdentityEffect != null && storingIdentityEffect.getDuration() > 0; + + UUID itemAttunedPlayerUUID = getAttunedPlayer(itemStack); + //null means not attuned at all, so can assume player is attuned with it + return noIdentityPlayer || itemAttunedPlayerUUID == null || itemAttunedPlayerUUID == entity.getUUID(); + } + + + default void adjustCharge(ItemStack stack, int chargeToAdjustBy) + { + int currentCharge = getCharge(stack); + int goalCharge = currentCharge + chargeToAdjustBy; + int actualGoalCharge = Math.min(goalCharge, getMaxCharge(stack)); + int finalChargeValue = actualGoalCharge / stack.getCount(); + + setCharge(stack, finalChargeValue); + } + + default void increaseCurrentCharge(ItemStack itemStack) + { + increaseCurrentCharge(itemStack, 1); + } + + default void increaseCurrentCharge(ItemStack stack, int i) + { + setCharge(stack, getCharge(stack) + i); + } + + default void decreaseCurrentCharge(ItemStack itemStack) + { + int currentCharge = getCharge(itemStack); + int nextChargeLevel = currentCharge - 1; + setCharge(itemStack, nextChargeLevel); + } + + default boolean canGiveChargeToItem(ItemStack stackInSlot, ItemStack stack) + { + return true; + } + + default boolean canReceiveChargeFromItem(ItemStack stack, ItemStack stackInSlot) + { + return true; + } + +} diff --git a/src/main/java/leaf/cosmere/common/charge/IInvestable.java b/src/main/java/leaf/cosmere/common/charge/IInvestable.java new file mode 100644 index 000000000..e5b61f676 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/charge/IInvestable.java @@ -0,0 +1,6 @@ +package leaf.cosmere.common.charge; + +public class IInvestable +{ + +} diff --git a/src/main/java/leaf/cosmere/common/charge/ItemChargeHelper.java b/src/main/java/leaf/cosmere/common/charge/ItemChargeHelper.java new file mode 100644 index 000000000..48eb2518c --- /dev/null +++ b/src/main/java/leaf/cosmere/common/charge/ItemChargeHelper.java @@ -0,0 +1,416 @@ +/* + * File updated ~ 24 - 10 - 2022 ~ Leaf + */ + +package leaf.cosmere.common.charge; + +import com.google.common.collect.Iterables; +import leaf.cosmere.api.Constants; +import leaf.cosmere.api.Manifestations; +import leaf.cosmere.api.Metals; +import leaf.cosmere.api.spiritweb.ISpiritweb; +import leaf.cosmere.common.cap.entity.SpiritwebCapability; +import leaf.cosmere.common.compat.curios.CuriosCompat; +import leaf.cosmere.common.items.CapWrapper; +import net.minecraft.world.Container; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraftforge.common.util.LazyOptional; +import net.minecraftforge.items.wrapper.EmptyHandler; +import net.minecraftforge.items.wrapper.PlayerInvWrapper; +import top.theillusivec4.curios.api.CuriosApi; +import top.theillusivec4.curios.api.type.capability.ICuriosItemHandler; + +import java.util.*; + +public class ItemChargeHelper +{ + + public static List getChargeItems(Player player) + { + if (player == null) + { + return Collections.emptyList(); + } + + Container acc = new CapWrapper(new PlayerInvWrapper(player.getInventory())); + + List toReturn = getChargeableItemStacks(acc); + + return toReturn; + } + + public static List getChargeCurios(Player player) + { + if (player == null || !CuriosCompat.CuriosIsPresent()) + { + return Collections.emptyList(); + } + + + LazyOptional curiosItemHandler = CuriosApi.getCuriosInventory(player); + Container acc = null; + if (curiosItemHandler.resolve().isPresent()) + { + acc = new CapWrapper(curiosItemHandler.resolve().get().getEquippedCurios()); + } + + List toReturn = (acc != null) ? getChargeableItemStacks(acc) : new ArrayList<>(); + + return toReturn; + } + + private static List getChargeableItemStacks(Container acc) + { + List toReturn = new ArrayList<>(acc.getContainerSize()); + + for (int slot = 0; slot < acc.getContainerSize(); slot++) + { + ItemStack stackInSlot = acc.getItem(slot); + + if (!stackInSlot.isEmpty() && stackInSlot.getItem() instanceof IChargeable) + { + toReturn.add(stackInSlot); + } + } + return toReturn; + } + + public static int requestCharge(ItemStack stack, Player player, int chargeToGet, boolean remove) + { + return requestCharge(stack, player, chargeToGet, remove, false); + } + + public static int requestCharge(ItemStack stack, Player player, int chargeToGet, boolean remove, boolean checkPlayerID) + { + if (stack.isEmpty()) + { + return 0; + } + + List items = getChargeItems(player); + List acc = getChargeCurios(player); + for (ItemStack stackInSlot : Iterables.concat(items, acc)) + { + if (stackInSlot == stack) + { + continue; + } + IChargeable chargeItem = (IChargeable) stackInSlot.getItem(); + if (chargeItem.canGiveChargeToItem(stackInSlot, stack) && chargeItem.getCharge(stackInSlot) > 0) + { + if (stack.getItem() instanceof IChargeable && !((IChargeable) stack.getItem()).canReceiveChargeFromItem(stack, stackInSlot)) + { + continue; + } + //don't let non attuned players use the charge if not allowed. + if (checkPlayerID && !chargeItem.getPlayerIsAttuned(stackInSlot, player)) + { + continue; + } + + int charge = Math.min(chargeToGet, chargeItem.getCharge(stackInSlot)); + + if (remove) + { + chargeItem.adjustCharge(stackInSlot, -charge); + } + + return charge; + } + } + + return 0; + } + + + public static ItemStack adjustChargeExact(Player player, int chargeToGet, boolean remove) + { + return adjustChargeExact(player, chargeToGet, remove, false); + } + + public static ItemStack adjustChargeExact(Player player, int chargeToGet, boolean remove, boolean checkPlayer) + { + List items = getChargeItems(player); + List acc = getChargeCurios(player); + + return adjustChargeExact(player, chargeToGet, remove, checkPlayer, items, acc); + } + + public static ItemStack adjustChargeExact(Player player, int adjustValue, boolean doAdjust, boolean checkPlayer, List items, List acc) + { + boolean isStoringIdentity = false; + { + //do aluminum checks + Optional data = SpiritwebCapability.get(player).filter(obj -> true); + if (data.isPresent()) + { + isStoringIdentity = Manifestations.ManifestationTypes.FERUCHEMY.getManifestation(Metals.MetalType.ALUMINUM.getID()).getMode(data.get()) > 0; + } + } + + for (ItemStack stackInSlot : Iterables.concat(items, acc)) + { + IChargeable chargeItemSlot = (IChargeable) stackInSlot.getItem(); + boolean storing = adjustValue > 0; + + int slotCharge = chargeItemSlot.getCharge(stackInSlot); + int slotMaxCharge = chargeItemSlot.getMaxCharge(stackInSlot); + + //if draining, skip empty. + if (!storing && slotCharge <= 0 || storing && slotCharge >= slotMaxCharge) + { + continue; + } + + boolean playerUnableToAccess = !chargeItemSlot.trySetAttunedPlayer(stackInSlot, player); + final UUID attunedPlayer = chargeItemSlot.getAttunedPlayer(stackInSlot); + if (checkPlayer && playerUnableToAccess //if we need to make sure the player has access and they do not + || //or if the player is trying to store in an unsealed metalmind but have identity + storing && !isStoringIdentity && attunedPlayer != null && attunedPlayer.compareTo(Constants.NBT.UNKEYED_UUID) == 0) + { + continue; + } + + + if ((storing && (slotCharge + adjustValue) <= slotMaxCharge)//storing and can fit in this item + || !storing && slotCharge >= (-adjustValue)) + { + if (doAdjust) + { + chargeItemSlot.adjustCharge(stackInSlot, adjustValue); + } + + return stackInSlot; + } + } + + return ItemStack.EMPTY; + } + + + public static boolean requestChargeExact(ItemStack stack, Player player, int chargeToGet, boolean remove) + { + if (stack.isEmpty()) + { + return false; + } + + List items = getChargeItems(player); + List acc = getChargeCurios(player); + for (ItemStack stackInSlot : Iterables.concat(items, acc)) + { + if (stackInSlot == stack) + { + continue; + } + IChargeable chargeItemSlot = (IChargeable) stackInSlot.getItem(); + if (chargeItemSlot.canGiveChargeToItem(stackInSlot, stack) && chargeItemSlot.getCharge(stackInSlot) > chargeToGet) + { + if (stack.getItem() instanceof IChargeable && !((IChargeable) stack.getItem()).canReceiveChargeFromItem(stack, stackInSlot)) + { + continue; + } + + if (remove) + { + chargeItemSlot.adjustCharge(stackInSlot, -chargeToGet); + } + + return true; + } + } + + return false; + } + + public static int dispatchCharge(Player player, int chargeToSend, boolean add) + { + List items = getChargeItems(player); + List acc = getChargeCurios(player); + + Iterable itemStacksIterable = Iterables.concat(items, acc); + + for (ItemStack stackInSlot : itemStacksIterable) + { + IChargeable chargeItemSlot = (IChargeable) stackInSlot.getItem(); + + int received; + if (chargeItemSlot.getCharge(stackInSlot) + chargeToSend <= chargeItemSlot.getMaxCharge(stackInSlot)) + { + received = chargeToSend; + } + else + { + received = chargeToSend - (chargeItemSlot.getCharge(stackInSlot) + chargeToSend - chargeItemSlot.getMaxCharge(stackInSlot)); + } + + if (add) + { + chargeItemSlot.adjustCharge(stackInSlot, chargeToSend); + } + + return received; + } + + return 0; + } + + public static int dispatchCharge(ItemStack stack, Player player, int chargeToSend, boolean add) + { + if (stack.isEmpty()) + { + return 0; + } + + List items = getChargeItems(player); + List acc = getChargeCurios(player); + for (ItemStack stackInSlot : Iterables.concat(items, acc)) + { + if (stackInSlot == stack) + { + continue; + } + IChargeable chargeItemSlot = (IChargeable) stackInSlot.getItem(); + if (chargeItemSlot.canReceiveChargeFromItem(stackInSlot, stack)) + { + if (stack.getItem() instanceof IChargeable && !((IChargeable) stack.getItem()).canGiveChargeToItem(stack, stackInSlot)) + { + continue; + } + + int received; + if (chargeItemSlot.getCharge(stackInSlot) + chargeToSend <= chargeItemSlot.getMaxCharge(stackInSlot)) + { + received = chargeToSend; + } + else + { + received = chargeToSend - (chargeItemSlot.getCharge(stackInSlot) + chargeToSend - chargeItemSlot.getMaxCharge(stackInSlot)); + } + + if (add) + { + chargeItemSlot.adjustCharge(stackInSlot, chargeToSend); + } + + return received; + } + } + + return 0; + } + + + public static boolean dispatchChargeExact(ItemStack stack, Player player, int chargeToSend, boolean add) + { + if (stack.isEmpty()) + { + return false; + } + + List items = getChargeItems(player); + List acc = getChargeCurios(player); + for (ItemStack stackInSlot : Iterables.concat(items, acc)) + { + if (stackInSlot == stack) + { + continue; + } + IChargeable chargeItemSlot = (IChargeable) stackInSlot.getItem(); + if (chargeItemSlot.getCharge(stackInSlot) + chargeToSend <= chargeItemSlot.getMaxCharge(stackInSlot) && chargeItemSlot.canReceiveChargeFromItem(stackInSlot, stack)) + { + if (stack.getItem() instanceof IChargeable && !((IChargeable) stack.getItem()).canGiveChargeToItem(stack, stackInSlot)) + { + continue; + } + + if (add) + { + chargeItemSlot.adjustCharge(stackInSlot, chargeToSend); + } + + return true; + } + } + + return false; + } + + private static int discountChargeForTool(ItemStack stack, Player player, int inCost) + { + float multiplier = Math.max(0F, 1F - getFullDiscountForTools(player, stack)); + return (int) (inCost * multiplier); + } + + + public static int requestChargeForTool(ItemStack stack, Player player, int chargeToGet, boolean remove) + { + int cost = discountChargeForTool(stack, player, chargeToGet); + return requestCharge(stack, player, cost, remove); + } + + + public static boolean requestChargeExactForTool(ItemStack stack, Player player, int chargeToGet, boolean remove) + { + int cost = discountChargeForTool(stack, player, chargeToGet); + return requestChargeExact(stack, player, cost, remove); + } + + + public static int getInvocationCountForTool(ItemStack stack, Player player, int chargeToGet) + { + if (stack.isEmpty()) + { + return 0; + } + + int cost = discountChargeForTool(stack, player, chargeToGet); + int invocations = 0; + + List items = getChargeItems(player); + List acc = getChargeCurios(player); + for (ItemStack stackInSlot : Iterables.concat(items, acc)) + { + if (stackInSlot == stack) + { + continue; + } + IChargeable chargeItemSlot = (IChargeable) stackInSlot.getItem(); + int availableCharge = chargeItemSlot.getCharge(stackInSlot); + if (chargeItemSlot.canGiveChargeToItem(stackInSlot, stack) && availableCharge > cost) + { + if (stack.getItem() instanceof IChargeable && !((IChargeable) stack.getItem()).canReceiveChargeFromItem(stack, stackInSlot)) + { + continue; + } + + invocations += availableCharge / cost; + } + } + + return invocations; + } + + + public static float getFullDiscountForTools(Player player, ItemStack tool) + { + float discount = 0F; + //todo discount + /*for (int i = 0; i < player.inventory.armorInventory.size(); i++) { + ItemStack armor = player.inventory.armorInventory.get(i); + if (!armor.isEmpty() && armor.getItem() instanceof IChargeDiscountArmor) { + discount += ((IChargeDiscountArmor) armor.getItem()).getDiscount(armor, i, player, tool); + } + } + + int unbreaking = EnchantmentHelper.getEnchantmentLevel(Enchantments.UNBREAKING, tool); + discount += unbreaking * 0.05F; + + ChargeDiscountEvent event = new ChargeDiscountEvent(player, discount, tool); + MinecraftForge.EVENT_BUS.post(event); + discount = event.getDiscount();*/ + + return discount; + } +} diff --git a/src/main/java/leaf/cosmere/common/charge/MetalmindChargeHelper.java b/src/main/java/leaf/cosmere/common/charge/MetalmindChargeHelper.java new file mode 100644 index 000000000..a1319774f --- /dev/null +++ b/src/main/java/leaf/cosmere/common/charge/MetalmindChargeHelper.java @@ -0,0 +1,61 @@ +/* + * File updated ~ 24 - 10 - 2022 ~ Leaf + */ + +package leaf.cosmere.common.charge; + +import leaf.cosmere.api.Metals; +import leaf.cosmere.api.spiritweb.ISpiritweb; +import leaf.cosmere.common.items.ChargeableMetalCurioItem; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; + +import java.util.List; +import java.util.function.Predicate; + +public class MetalmindChargeHelper +{ + public static ItemStack adjustMetalmindChargeExact(ISpiritweb data, Metals.MetalType metalType, int adjustAmount, boolean remove, boolean checkPlayer) + { + if (data.getLiving() instanceof Player player) + { + return adjustMetalmindChargeExact(player, metalType, adjustAmount, remove, checkPlayer); + } + else + { + //todo ?? + return ItemStack.EMPTY; + } + } + + private static Predicate getIsItemInvalidMetalmind(Metals.MetalType metalType) + { + return obj -> + { + if (obj.getItem() instanceof final ChargeableMetalCurioItem item) + { + //Correct metal or harmonium which I'm using as universal + final Metals.MetalType itemMetalType = item.getMetalType(); + return itemMetalType != metalType && itemMetalType != Metals.MetalType.HARMONIUM; + } + return false; + }; + } + + public static ItemStack adjustMetalmindChargeExact(Player player, Metals.MetalType metalType, int adjustValue, boolean remove, boolean checkPlayer) + { + List items = ItemChargeHelper.getChargeItems(player); + List acc = ItemChargeHelper.getChargeCurios(player); + + //remove items that don't match the metal type we are looking for + items.removeIf(getIsItemInvalidMetalmind(metalType)); + acc.removeIf(getIsItemInvalidMetalmind(metalType)); + + if (items.isEmpty() && acc.isEmpty()) + { + return ItemStack.EMPTY; + } + + return ItemChargeHelper.adjustChargeExact(player, adjustValue, remove, checkPlayer, items, acc); + } +} diff --git a/src/main/java/leaf/cosmere/common/commands/CosmereCommand.java b/src/main/java/leaf/cosmere/common/commands/CosmereCommand.java new file mode 100644 index 000000000..87fb9dfb6 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/commands/CosmereCommand.java @@ -0,0 +1,36 @@ +/* + * File updated ~ 24 - 4 - 2021 ~ Leaf + * + * Special thank you to the New Tardis Mod team. + * That mod taught me how to correctly add new commands, among other things! + * https://tardis-mod.com/books/home/page/links#bkmrk-source + */ + +package leaf.cosmere.common.commands; + +import com.mojang.brigadier.CommandDispatcher; +import leaf.cosmere.common.Cosmere; +import leaf.cosmere.common.commands.arguments.AllomancyArgumentType; +import leaf.cosmere.common.commands.arguments.FeruchemyArgumentType; +import leaf.cosmere.common.commands.arguments.ManifestationsArgumentType; +import leaf.cosmere.common.commands.subcommands.*; +import net.minecraft.commands.CommandSourceStack; +import net.minecraft.commands.Commands; +import net.minecraft.commands.synchronization.ArgumentTypeInfos; +import net.minecraft.commands.synchronization.SingletonArgumentInfo; + + +public class CosmereCommand +{ + + public static void register(CommandDispatcher dispatcher) + { + dispatcher.register(Commands.literal(Cosmere.MODID) + .then(EyeCommand.register(dispatcher)) + .then(ManifestationCommand.register(dispatcher)) + .then(SummonCommand.register(dispatcher)) + .then(CosmereEffectCommand.register(dispatcher)) + .then(ChooseMetalbornPowersCommand.register(dispatcher)) + ); + } +} diff --git a/src/main/java/leaf/cosmere/common/commands/arguments/AllomancyArgumentType.java b/src/main/java/leaf/cosmere/common/commands/arguments/AllomancyArgumentType.java new file mode 100644 index 000000000..3b5394595 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/commands/arguments/AllomancyArgumentType.java @@ -0,0 +1,80 @@ +package leaf.cosmere.common.commands.arguments; + +import com.mojang.brigadier.StringReader; +import com.mojang.brigadier.context.CommandContext; +import com.mojang.brigadier.exceptions.CommandSyntaxException; +import com.mojang.brigadier.exceptions.DynamicCommandExceptionType; +import com.mojang.brigadier.suggestion.Suggestions; +import com.mojang.brigadier.suggestion.SuggestionsBuilder; +import leaf.cosmere.api.Constants; +import leaf.cosmere.api.CosmereAPI; +import leaf.cosmere.api.Manifestations; +import leaf.cosmere.api.Metals; +import leaf.cosmere.api.manifestation.Manifestation; + +import com.mojang.brigadier.arguments.ArgumentType; +import net.minecraft.ChatFormatting; +import net.minecraft.commands.SharedSuggestionProvider; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; + +import java.util.Collection; +import java.util.Collections; +import java.util.concurrent.CompletableFuture; +import java.util.stream.Stream; + +public class AllomancyArgumentType implements ArgumentType +{ + private static final Collection EXAMPLES = Stream.of( + "allomancy:" + Metals.MetalType.STEEL.getName() + ).toList(); + + public static final DynamicCommandExceptionType INVALID_MANIFESTATION_EXCEPTION = + new DynamicCommandExceptionType((manifestation) -> + Component.translatable(Constants.Strings.POWER_INVALID, manifestation)); + + public static SuggestionsBuilder addAllomancyNamesWithTooltip(SuggestionsBuilder builder) + { + for (Manifestation manifestation : CosmereAPI.manifestationRegistry()) + { + if (manifestation.getManifestationType().equals(Manifestations.ManifestationTypes.ALLOMANCY) || manifestation.getName().equals("none")) + { + builder.suggest(manifestation.getRegistryName().toString(), Component.translatable(manifestation.getTranslationKey()).withStyle((style) -> style.withColor(ChatFormatting.GREEN))); + } + } + + builder.buildFuture(); + return builder; + } + + public static AllomancyArgumentType createArgument() + { + return new AllomancyArgumentType(); + } + + @Override + public Manifestation parse(StringReader reader) throws CommandSyntaxException + { + ResourceLocation location = ResourceLocation.read(reader); + Manifestation manifestation = CosmereAPI.manifestationRegistry().getValue(location); + if (manifestation != null) + { + return manifestation; + } + throw INVALID_MANIFESTATION_EXCEPTION.create(location); + } + + @Override + public CompletableFuture listSuggestions(CommandContext context, SuggestionsBuilder builder) + { + return context.getSource() instanceof SharedSuggestionProvider + ? SharedSuggestionProvider.suggest(Collections.emptyList(), addAllomancyNamesWithTooltip(builder)) + : Suggestions.empty(); + } + + @Override + public Collection getExamples() + { + return EXAMPLES; + } +} diff --git a/src/main/java/leaf/cosmere/common/commands/arguments/FeruchemyArgumentType.java b/src/main/java/leaf/cosmere/common/commands/arguments/FeruchemyArgumentType.java new file mode 100644 index 000000000..efdc11fab --- /dev/null +++ b/src/main/java/leaf/cosmere/common/commands/arguments/FeruchemyArgumentType.java @@ -0,0 +1,79 @@ +package leaf.cosmere.common.commands.arguments; + +import com.mojang.brigadier.StringReader; +import com.mojang.brigadier.arguments.ArgumentType; +import com.mojang.brigadier.context.CommandContext; +import com.mojang.brigadier.exceptions.CommandSyntaxException; +import com.mojang.brigadier.exceptions.DynamicCommandExceptionType; +import com.mojang.brigadier.suggestion.Suggestions; +import com.mojang.brigadier.suggestion.SuggestionsBuilder; +import leaf.cosmere.api.Constants; +import leaf.cosmere.api.CosmereAPI; +import leaf.cosmere.api.Manifestations; +import leaf.cosmere.api.Metals; +import leaf.cosmere.api.manifestation.Manifestation; +import net.minecraft.ChatFormatting; +import net.minecraft.commands.SharedSuggestionProvider; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; + +import java.util.Collection; +import java.util.Collections; +import java.util.concurrent.CompletableFuture; +import java.util.stream.Stream; + +public class FeruchemyArgumentType implements ArgumentType +{ + private static final Collection EXAMPLES = Stream.of( + "feruchemy:" + Metals.MetalType.IRON.getName() + ).toList(); + + public static final DynamicCommandExceptionType INVALID_MANIFESTATION_EXCEPTION = + new DynamicCommandExceptionType((manifestation) -> + Component.translatable(Constants.Strings.POWER_INVALID, manifestation)); + + public static SuggestionsBuilder addFeruchemyNamesWithTooltip(SuggestionsBuilder builder) + { + for (Manifestation manifestation : CosmereAPI.manifestationRegistry()) + { + if (manifestation.getManifestationType().equals(Manifestations.ManifestationTypes.FERUCHEMY) || manifestation.getName().equals("none")) + { + builder.suggest(manifestation.getRegistryName().toString(), Component.translatable(manifestation.getTranslationKey()).withStyle((style) -> style.withColor(ChatFormatting.GREEN))); + } + } + + builder.buildFuture(); + return builder; + } + + public static FeruchemyArgumentType createArgument() + { + return new FeruchemyArgumentType(); + } + + @Override + public Manifestation parse(StringReader reader) throws CommandSyntaxException + { + ResourceLocation location = ResourceLocation.read(reader); + Manifestation manifestation = CosmereAPI.manifestationRegistry().getValue(location); + if (manifestation != null) + { + return manifestation; + } + throw INVALID_MANIFESTATION_EXCEPTION.create(location); + } + + @Override + public CompletableFuture listSuggestions(CommandContext context, SuggestionsBuilder builder) + { + return context.getSource() instanceof SharedSuggestionProvider + ? SharedSuggestionProvider.suggest(Collections.emptyList(), addFeruchemyNamesWithTooltip(builder)) + : Suggestions.empty(); + } + + @Override + public Collection getExamples() + { + return EXAMPLES; + } +} diff --git a/src/main/java/leaf/cosmere/common/commands/arguments/ManifestationsArgumentType.java b/src/main/java/leaf/cosmere/common/commands/arguments/ManifestationsArgumentType.java new file mode 100644 index 000000000..cfac2e116 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/commands/arguments/ManifestationsArgumentType.java @@ -0,0 +1,80 @@ +/* + * File updated ~ 24 - 4 - 2021 ~ Leaf + */ + +package leaf.cosmere.common.commands.arguments; + +import com.mojang.brigadier.StringReader; +import com.mojang.brigadier.arguments.ArgumentType; +import com.mojang.brigadier.context.CommandContext; +import com.mojang.brigadier.exceptions.CommandSyntaxException; +import com.mojang.brigadier.exceptions.DynamicCommandExceptionType; +import com.mojang.brigadier.suggestion.Suggestions; +import com.mojang.brigadier.suggestion.SuggestionsBuilder; +import leaf.cosmere.api.Constants; +import leaf.cosmere.api.CosmereAPI; +import leaf.cosmere.api.Metals; +import leaf.cosmere.api.manifestation.Manifestation; +import net.minecraft.ChatFormatting; +import net.minecraft.commands.SharedSuggestionProvider; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; + +import java.util.Collection; +import java.util.Collections; +import java.util.concurrent.CompletableFuture; +import java.util.stream.Stream; + +public class ManifestationsArgumentType implements ArgumentType +{ + private static final Collection EXAMPLES = Stream.of( + "feruchemy:" + Metals.MetalType.STEEL.getName(), + "allomancy:" + Metals.MetalType.IRON.getName()) + .toList(); + + @Override + public Collection getExamples() + { + return EXAMPLES; + } + + public static final DynamicCommandExceptionType INVALID_MANIFESTATION_EXCEPTION = + new DynamicCommandExceptionType((manifestation) -> + Component.translatable(Constants.Strings.POWER_INVALID, manifestation)); + + public static ManifestationsArgumentType createArgument() + { + return new ManifestationsArgumentType(); + } + + @Override + public Manifestation parse(StringReader reader) throws CommandSyntaxException + { + ResourceLocation location = ResourceLocation.read(reader); + Manifestation manifestation = CosmereAPI.manifestationRegistry().getValue(location); + if (manifestation != null) + { + return manifestation; + } + throw INVALID_MANIFESTATION_EXCEPTION.create(location); + } + + @Override + public CompletableFuture listSuggestions(CommandContext context, SuggestionsBuilder builder) + { + return context.getSource() instanceof SharedSuggestionProvider + ? SharedSuggestionProvider.suggest(Collections.emptyList(), addManifestationNamesWithTooltip(builder)) + : Suggestions.empty(); + } + + public static SuggestionsBuilder addManifestationNamesWithTooltip(SuggestionsBuilder builder) + { + for (Manifestation manifestation : CosmereAPI.manifestationRegistry()) + { + builder.suggest(manifestation.getRegistryName().toString(), Component.translatable(manifestation.getTranslationKey()).withStyle((style) -> style.withColor(ChatFormatting.GREEN))); + } + + builder.buildFuture(); + return builder; + } +} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/common/commands/subcommands/ChooseMetalbornPowersCommand.java b/src/main/java/leaf/cosmere/common/commands/subcommands/ChooseMetalbornPowersCommand.java new file mode 100644 index 000000000..7d6c39229 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/commands/subcommands/ChooseMetalbornPowersCommand.java @@ -0,0 +1,260 @@ +package leaf.cosmere.common.commands.subcommands; + +import com.mojang.brigadier.CommandDispatcher; +import com.mojang.brigadier.builder.ArgumentBuilder; +import com.mojang.brigadier.context.CommandContext; +import com.mojang.brigadier.exceptions.CommandSyntaxException; +import leaf.cosmere.api.Manifestations; +import leaf.cosmere.api.Metals; +import leaf.cosmere.api.manifestation.Manifestation; +import leaf.cosmere.api.text.TextHelper; +import leaf.cosmere.common.cap.entity.SpiritwebCapability; +import leaf.cosmere.common.commands.arguments.AllomancyArgumentType; +import leaf.cosmere.common.commands.arguments.FeruchemyArgumentType; +import leaf.cosmere.common.config.CosmereConfigs; +import leaf.cosmere.common.config.CosmereServerConfig; +import leaf.cosmere.common.eventHandlers.EntityEventHandler; +import net.minecraft.commands.CommandSourceStack; +import net.minecraft.commands.Commands; +import net.minecraft.commands.arguments.EntityArgument; +import net.minecraft.network.chat.ClickEvent; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.MutableComponent; +import net.minecraft.network.chat.Style; +import net.minecraft.server.level.ServerPlayer; +import net.minecraftforge.fml.ModList; + +import java.util.Collection; +import java.util.HashMap; +import java.util.UUID; +import java.util.concurrent.atomic.AtomicBoolean; + +import static leaf.cosmere.common.commands.subcommands.ManifestationCommand.ReportPowersFoundOnPlayer; + +public class ChooseMetalbornPowersCommand extends ModCommand +{ + private static final HashMap commandConfirmationQueue = new HashMap<>(); + + public static ArgumentBuilder register(CommandDispatcher dispatcher) + { + return Commands.literal("choose_metalborn_powers") + .then(Commands.argument("allomanticPower", AllomancyArgumentType.createArgument()) + .requires(CommandSourceStack::isPlayer) + .executes(ChooseMetalbornPowersCommand::addMetalbornPowers) + .then(Commands.argument("feruchemicalPower", FeruchemyArgumentType.createArgument()) + .requires(CommandSourceStack::isPlayer) + .executes(ChooseMetalbornPowersCommand::addMetalbornPowers))) + .then(Commands.literal("confirm") + .requires(CommandSourceStack::isPlayer) + .executes(ChooseMetalbornPowersCommand::confirmMetalbornPowers)) + .then(Commands.literal("random") + .requires(CommandSourceStack::isPlayer) + .executes(ChooseMetalbornPowersCommand::random)) + .then(Commands.literal("reset") + .requires(context -> context.hasPermission(2)) + .executes(ChooseMetalbornPowersCommand::resetPowers) + .then(Commands.argument("target", EntityArgument.players()) + .executes(ChooseMetalbornPowersCommand::resetPowers))); + } + + private static int addMetalbornPowers(CommandContext context) throws CommandSyntaxException + { + CommandSourceStack source = context.getSource(); + if (!ModList.get().isLoaded("allomancy") || !ModList.get().isLoaded("feruchemy")) + { + source.sendFailure(Component.literal("Allomancer or Feruchemist not installed; cannot choose powers")); + + return SINGLE_SUCCESS; + } + + ServerPlayer player = source.getPlayerOrException(); + AtomicBoolean isInitialized = new AtomicBoolean(false); + + SpiritwebCapability.get(player).ifPresent(spiritweb -> + { + SpiritwebCapability spiritwebCap = (SpiritwebCapability) spiritweb; + isInitialized.set(spiritwebCap.hasBeenInitialized()); + }); + + if (CosmereConfigs.SERVER_CONFIG.POWER_GENERATION.get() == CosmereServerConfig.PowerGeneration.PICK && !isInitialized.get()) + { + // cosmere:none is also an acceptable input + Manifestation allomanticPower = context.getArgument("allomanticPower", Manifestation.class); + Manifestation feruchemicalPower = context.getArgument("feruchemicalPower", Manifestation.class); + + // hate using string compares, but it's the only way as the NONE ManifestationType includes aviars and other undefined manifestations + boolean allomanticIsValid = allomanticPower.getManifestationType().equals(Manifestations.ManifestationTypes.ALLOMANCY) || allomanticPower.getName().equals("none"); + boolean feruchemicalIsValid = feruchemicalPower.getManifestationType().equals(Manifestations.ManifestationTypes.FERUCHEMY) || feruchemicalPower.getName().equals("none"); + boolean isCompoundingPair = allomanticPower.getName().equals(feruchemicalPower.getName()) + || (allomanticPower.getName().equals(Metals.MetalType.ELECTRUM.getName()) && feruchemicalPower.getName().equals(Metals.MetalType.ATIUM.getName())) + || (allomanticPower.getName().equals(Metals.MetalType.ATIUM.getName()) && feruchemicalPower.getName().equals(Metals.MetalType.ELECTRUM.getName())); + + if (allomanticIsValid && feruchemicalIsValid && !isCompoundingPair) + { + CommandQueueItem queueItem = new CommandQueueItem(allomanticPower, feruchemicalPower, false); + commandConfirmationQueue.put(player.getUUID(), queueItem); + + source.sendSystemMessage(Component.literal("You have chosen §aallomantic " + allomanticPower.getName() + " §fand §aferuchemical " + feruchemicalPower.getName())); // todo translatable string + + sendConfirmationMessage(source); + } + else + { + if (!allomanticIsValid) + { + source.sendFailure(Component.literal("Invalid argument; argument 1 is not allomantic or none")); + } + if (!feruchemicalIsValid) + { + source.sendFailure(Component.literal("Invalid argument; argument 2 is not feruchemical or none")); + } + if (isCompoundingPair) + { + source.sendFailure(Component.literal("Cannot choose compounding pair")); + } + } + } + else + { + if (CosmereConfigs.SERVER_CONFIG.POWER_GENERATION.get() != CosmereServerConfig.PowerGeneration.PICK) + { + source.sendFailure(Component.literal("Server config does not allow non-random metalborn choice")); // todo translatable string + } + else if (isInitialized.get()) + { + source.sendFailure(Component.literal("Powers already chosen; cannot choose again")); // todo translatable string + } + } + + return SINGLE_SUCCESS; + } + + private static int confirmMetalbornPowers(CommandContext context) throws CommandSyntaxException + { + CommandSourceStack source = context.getSource(); + ServerPlayer player = source.getPlayerOrException(); + + if (commandConfirmationQueue.containsKey(player.getUUID())) + { + CommandQueueItem queueItem = commandConfirmationQueue.get(player.getUUID()); + + SpiritwebCapability.get(player).ifPresent(spiritweb -> + { + SpiritwebCapability spiritwebCap = (SpiritwebCapability) spiritweb; + + if (!queueItem.randomPowers) + { + // always give natural level manifestation; do nothing if cosmere:none is selected + if (!queueItem.allomanticPower.getManifestationType().equals(Manifestations.ManifestationTypes.NONE)) + { + spiritweb.giveManifestation(queueItem.allomanticPower, 9); + source.sendSuccess(() -> Component.literal("Successfully added allomantic " + queueItem.allomanticPower.getName() + " to " + player.getName().getString()), false); // todo localisation string + + // give player metal vial according to what they chose + spiritwebCap.getSubmodule(Manifestations.ManifestationTypes.ALLOMANCY).GiveStartingItem(player, queueItem.allomanticPower); + } + if (!queueItem.feruchemicalPower.getManifestationType().equals(Manifestations.ManifestationTypes.NONE)) + { + spiritweb.giveManifestation(queueItem.feruchemicalPower, 9); + source.sendSuccess(() -> Component.literal("Successfully added feruchemical " + queueItem.feruchemicalPower.getName() + " to " + player.getName().getString()), false); // todo localisation string + + // give player metal vial according to what they chose + spiritwebCap.getSubmodule(Manifestations.ManifestationTypes.FERUCHEMY).GiveStartingItem(player, queueItem.feruchemicalPower); + } + + // adds non-metalborn powers + EntityEventHandler.addOtherPowers(spiritwebCap); + } + else + { + EntityEventHandler.giveEntityStartingManifestation(player, spiritwebCap); + spiritwebCap.setHasBeenInitialized(); + } + + spiritwebCap.setHasBeenInitialized(); + + ReportPowersFoundOnPlayer(context, player); + spiritweb.syncToClients(null); + }); + + commandConfirmationQueue.remove(player.getUUID()); + } + else + { + context.getSource().sendFailure(Component.literal("No powers selected.")); + } + + return SINGLE_SUCCESS; + } + + private static int random(CommandContext context) throws CommandSyntaxException + { + CommandSourceStack source = context.getSource(); + AtomicBoolean isInitialized = new AtomicBoolean(false); + + SpiritwebCapability.get(source.getPlayerOrException()).ifPresent(spiritweb -> + { + SpiritwebCapability spiritwebCap = (SpiritwebCapability) spiritweb; + isInitialized.set(spiritwebCap.hasBeenInitialized()); + }); + + if (!isInitialized.get()) + { + if (source.getEntity() instanceof ServerPlayer player) + { + CommandQueueItem queueItem = new CommandQueueItem(null, null, true); + commandConfirmationQueue.put(player.getUUID(), queueItem); + + source.sendSystemMessage(Component.literal("You have chosen to receive §arandom powers")); + sendConfirmationMessage(source); + } + } + else + { + source.sendFailure(Component.literal("Powers already chosen; cannot choose again")); // todo translatable string + } + + return SINGLE_SUCCESS; + } + + private static int resetPowers(CommandContext context) throws CommandSyntaxException + { + + Collection players = getPlayers(context, 3); + + for (ServerPlayer player : players) + { + SpiritwebCapability.get(player).ifPresent(spiritweb -> + { + spiritweb.clearManifestations(); + ((SpiritwebCapability) spiritweb).setHasNotBeenInitialized(); + spiritweb.syncToClients(null); + + context.getSource().sendSuccess(() -> Component.literal("Successfully reset player " + player.getName().getString()), false); + }); + } + + return SINGLE_SUCCESS; + } + + private static void sendConfirmationMessage(CommandSourceStack source) + { + // todo translatable string + String command = "/cosmere choose_metalborn_powers confirm"; + MutableComponent confirmComponent = Component.literal("§6Click "); + confirmComponent.append(TextHelper.createTextWithTooltip( + Component.literal("§a§nhere§r ").setStyle(Style.EMPTY.withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, command))), + Component.literal("Confirm"))); + confirmComponent.append(Component.literal("§6to confirm power choice")); + + source.sendSuccess(() -> confirmComponent, false); + } + + @Override + public int run(CommandContext commandContext) throws CommandSyntaxException + { + return SINGLE_SUCCESS; + } + + private record CommandQueueItem(Manifestation allomanticPower, Manifestation feruchemicalPower, boolean randomPowers) {} +} diff --git a/src/main/java/leaf/cosmere/common/commands/subcommands/CosmereEffectCommand.java b/src/main/java/leaf/cosmere/common/commands/subcommands/CosmereEffectCommand.java new file mode 100644 index 000000000..9c2a76473 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/commands/subcommands/CosmereEffectCommand.java @@ -0,0 +1,156 @@ +/* + * File updated ~ 15 - 10 - 2022 ~ Leaf + */ + +package leaf.cosmere.common.commands.subcommands; + +import com.mojang.brigadier.CommandDispatcher; +import com.mojang.brigadier.builder.ArgumentBuilder; +import com.mojang.brigadier.context.CommandContext; +import com.mojang.brigadier.exceptions.CommandSyntaxException; +import leaf.cosmere.api.Constants; +import leaf.cosmere.api.cosmereEffect.AttributeModifierInfo; +import leaf.cosmere.api.cosmereEffect.CosmereEffectInstance; +import leaf.cosmere.api.text.TextHelper; +import leaf.cosmere.common.cap.entity.SpiritwebCapability; +import net.minecraft.commands.CommandSourceStack; +import net.minecraft.commands.Commands; +import net.minecraft.commands.arguments.EntityArgument; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.MutableComponent; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.entity.ai.attributes.Attribute; +import net.minecraft.world.entity.ai.attributes.AttributeModifier; + +import java.util.Collection; +import java.util.Map; +import java.util.Set; +import java.util.UUID; + +public class CosmereEffectCommand extends ModCommand +{ + public static ArgumentBuilder register(CommandDispatcher dispatcher) + { + return Commands.literal("effects") + .requires(context -> context.hasPermission(2)) + .then(Commands.literal("check") + .executes(CosmereEffectCommand::checkEffects) + .then(Commands.argument("target", EntityArgument.players()) + .requires(context -> context.hasPermission(2)) + .executes(CosmereEffectCommand::checkEffects))) + .then(Commands.literal("clear") + .requires(context -> context.hasPermission(2)) + .executes(CosmereEffectCommand::clear) + .then(Commands.argument("target", EntityArgument.players()) + .executes(CosmereEffectCommand::clear))); + } + + private static int checkEffects(CommandContext context) throws CommandSyntaxException + { + + Collection players = getPlayers(context, 3); + + for (ServerPlayer player : players) + { + reportEffectsFoundOnPlayer(context, player); + } + + return SINGLE_SUCCESS; + } + + private static void reportEffectsFoundOnPlayer(CommandContext context, ServerPlayer player) + { + SpiritwebCapability.get(player).ifPresent(spiritweb -> + { + CommandSourceStack source = context.getSource(); + + MutableComponent found = Component.translatable(Constants.Strings.EFFECTS_FOUND, TextHelper.getPlayerTextObject(player.serverLevel(), player.getUUID())); + + final MutableComponent leftBracketTextComponent = Component.literal("["); + final MutableComponent rightBracketTextComponent = Component.literal("]"); + final MutableComponent space = Component.literal(" "); + StringBuilder stringBuilder = new StringBuilder(); + + //figure out which manifestations a player has + for (Map.Entry entry : spiritweb.getEffects()) + { + found.append(leftBracketTextComponent); + final MutableComponent baseText = (MutableComponent) entry.getValue().getTextComponent(); + + stringBuilder.append("Ticks Remaining: ").append(entry.getValue().getDuration()).append("\n"); + stringBuilder.append("Attribute Multiplier: x").append(entry.getValue().getStrength()).append("\n"); + + for (Map.Entry attributeEntry : entry.getValue().getEffect().getAttributeModifiers().entrySet()) + { + final AttributeModifierInfo attributeModifierInfo = attributeEntry.getValue(); + + final String attributeName = attributeModifierInfo.getAttribute().getDescriptionId(); + final double amount = attributeModifierInfo.getAmount(); + final AttributeModifier.Operation operation = attributeModifierInfo.getOperation(); + + stringBuilder.append(attributeName).append(": ").append(amount).append(" : Operation: ").append(operation) + .append("\n"); + } + + for (Map.Entry attributeEntry : entry.getValue().getDynamicModifiers().entrySet()) + { + final AttributeModifierInfo attributeModifierInfo = attributeEntry.getValue(); + + final String attributeName = attributeModifierInfo.getAttribute().getDescriptionId(); + final double amount = attributeModifierInfo.getAmount(); + final AttributeModifier.Operation operation = attributeModifierInfo.getOperation(); + + stringBuilder.append(attributeName).append(": ").append(amount).append(" : Operation: ").append(operation) + .append("\n"); + } + + + final String s = stringBuilder.toString(); + stringBuilder.setLength(0); + + final MutableComponent tooltip = Component.literal(s); + + found.append(TextHelper.createTextWithTooltip( + baseText, + tooltip)); + found.append(rightBracketTextComponent); + found.append(space); + } + source.sendSuccess(() -> found, true); + }); + } + + + private static int clear(CommandContext context) throws CommandSyntaxException + { + Collection players = getPlayers(context, 3); + + for (ServerPlayer player : players) + { + SpiritwebCapability.get(player).ifPresent(iSpiritweb -> + { + CommandSourceStack source = context.getSource(); + + final Set> playerEffects = iSpiritweb.getEffects(); + for (Map.Entry entry : playerEffects) + { + iSpiritweb.onEffectRemoved(entry.getValue()); + } + playerEffects.clear(); + + iSpiritweb.syncToClients(null); + MutableComponent playerTextObject = TextHelper.getPlayerTextObject(context.getSource().getLevel(), player.getUUID()); + source.sendSuccess(() -> Component.translatable(Constants.Strings.EFFECTS_CLEAR, playerTextObject), false); + }); + } + + return SINGLE_SUCCESS; + } + + @Override + public int run(CommandContext context) throws CommandSyntaxException + { + return SINGLE_SUCCESS; + } + +} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/common/commands/subcommands/EyeCommand.java b/src/main/java/leaf/cosmere/common/commands/subcommands/EyeCommand.java new file mode 100644 index 000000000..80f423540 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/commands/subcommands/EyeCommand.java @@ -0,0 +1,62 @@ +/* + * File updated ~ 15 - 10 - 2022 ~ Leaf + */ + +package leaf.cosmere.common.commands.subcommands; + +import com.mojang.brigadier.CommandDispatcher; +import com.mojang.brigadier.arguments.IntegerArgumentType; +import com.mojang.brigadier.builder.ArgumentBuilder; +import com.mojang.brigadier.context.CommandContext; +import com.mojang.brigadier.exceptions.CommandSyntaxException; +import leaf.cosmere.api.Constants; +import leaf.cosmere.api.helpers.CompoundNBTHelper; +import leaf.cosmere.api.text.TextHelper; +import leaf.cosmere.common.cap.entity.SpiritwebCapability; +import net.minecraft.commands.CommandSourceStack; +import net.minecraft.commands.Commands; +import net.minecraft.commands.arguments.EntityArgument; +import net.minecraft.server.level.ServerPlayer; + +import java.util.Collection; + +public class EyeCommand extends ModCommand +{ + //todo move this to hemalurgy? + + public static ArgumentBuilder register(CommandDispatcher dispatcher) + { + return Commands.literal("eyeHeight") + .then(Commands.argument("height", IntegerArgumentType.integer(0, 3)) + .executes(EyeCommand::setEyeHeight) + .then(Commands.argument("target", EntityArgument.players()) + .requires(context -> context.hasPermission(2)) + .executes(EyeCommand::setEyeHeight))); + } + + private static int setEyeHeight(CommandContext context) throws CommandSyntaxException + { + Collection players = getPlayers(context, 3); + int value = IntegerArgumentType.getInteger(context, "height"); + + for (ServerPlayer player : players) + { + SpiritwebCapability.get(player).ifPresent((spiritweb) -> + { + CompoundNBTHelper.setInt(spiritweb.getCompoundTag(), "eye_height", -value); + spiritweb.syncToClients(null); + }); + } + + context.getSource().sendSuccess(() -> TextHelper.createTranslatedText(Constants.Strings.SET_EYE_HEIGHT_SUCCESS, value), true); + + return SINGLE_SUCCESS; + } + + @Override + public int run(CommandContext context) throws CommandSyntaxException + { + return SINGLE_SUCCESS; + } + +} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/common/commands/subcommands/ManifestationCommand.java b/src/main/java/leaf/cosmere/common/commands/subcommands/ManifestationCommand.java new file mode 100644 index 000000000..6e6a07d3b --- /dev/null +++ b/src/main/java/leaf/cosmere/common/commands/subcommands/ManifestationCommand.java @@ -0,0 +1,201 @@ +/* + * File updated ~ 27 - 2 - 2023 ~ Leaf + */ + +package leaf.cosmere.common.commands.subcommands; + +import com.mojang.brigadier.CommandDispatcher; +import com.mojang.brigadier.builder.ArgumentBuilder; +import com.mojang.brigadier.context.CommandContext; +import com.mojang.brigadier.exceptions.CommandSyntaxException; +import leaf.cosmere.api.Constants; +import leaf.cosmere.api.manifestation.Manifestation; +import leaf.cosmere.api.text.TextHelper; +import leaf.cosmere.common.cap.entity.SpiritwebCapability; +import leaf.cosmere.common.commands.arguments.ManifestationsArgumentType; +import leaf.cosmere.common.eventHandlers.EntityEventHandler; +import leaf.cosmere.common.registry.ManifestationRegistry; +import net.minecraft.commands.CommandSourceStack; +import net.minecraft.commands.Commands; +import net.minecraft.commands.arguments.EntityArgument; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.MutableComponent; +import net.minecraft.server.level.ServerPlayer; + +import java.util.Collection; + +public class ManifestationCommand extends ModCommand +{ + + @Override + public int run(CommandContext context) throws CommandSyntaxException + { + return SINGLE_SUCCESS; + } + + private static int check(CommandContext context) throws CommandSyntaxException + { + Collection players = getPlayers(context, 3); + + for (ServerPlayer player : players) + { + ReportPowersFoundOnPlayer(context, player); + } + + return SINGLE_SUCCESS; + } + + public static void ReportPowersFoundOnPlayer(CommandContext context, ServerPlayer player) + { + SpiritwebCapability.get(player).ifPresent(spiritweb -> + { + CommandSourceStack source = context.getSource(); + + MutableComponent powersFound = Component.translatable(Constants.Strings.POWERS_FOUND, TextHelper.getPlayerTextObject(player.serverLevel(), player.getUUID())); + + final MutableComponent leftBracketTextComponent = Component.literal("["); + final MutableComponent rightBracketTextComponent = Component.literal("]"); + final MutableComponent space = Component.literal(" "); + + //figure out which manifestations a player has + for (Manifestation manifestation : spiritweb.getAvailableManifestations()) + { + powersFound.append(leftBracketTextComponent); + final double baseStrength = manifestation.getStrength(spiritweb, true); + final double totalStrength = manifestation.getStrength(spiritweb, false); + powersFound.append(TextHelper.createTextWithTooltip( + (MutableComponent) manifestation.getTextComponent(), + Component.translatable(Constants.Strings.POWER_STRENGTH, baseStrength, totalStrength))); + powersFound.append(rightBracketTextComponent); + powersFound.append(space); + } + source.sendSuccess(() -> powersFound, true); + }); + } + + private static int clear(CommandContext context) throws CommandSyntaxException + { + Collection players = getPlayers(context, 3); + + for (ServerPlayer player : players) + { + SpiritwebCapability.get(player).ifPresent(iSpiritweb -> + { + CommandSourceStack source = context.getSource(); + iSpiritweb.clearManifestations(); + iSpiritweb.syncToClients(null); + MutableComponent playerTextObject = TextHelper.getPlayerTextObject(context.getSource().getLevel(), player.getUUID()); + source.sendSuccess(() -> Component.translatable(Constants.Strings.POWER_SET_SUCCESS, playerTextObject), false); + }); + } + + return SINGLE_SUCCESS; + } + + private static int reroll(CommandContext context) throws CommandSyntaxException + { + Collection players = getPlayers(context, 3); + + for (ServerPlayer player : players) + { + SpiritwebCapability.get(player).ifPresent(iSpiritweb -> + { + CommandSourceStack source = context.getSource(); + iSpiritweb.clearManifestations(); + EntityEventHandler.giveEntityStartingManifestation(player, (SpiritwebCapability) iSpiritweb); + //set to none so that it auto updates to the new available ones on sync + iSpiritweb.setSelectedManifestation(ManifestationRegistry.NONE.get()); + iSpiritweb.syncToClients(null); + MutableComponent playerTextObject = TextHelper.getPlayerTextObject(player.serverLevel(), player.getUUID()); + source.sendSuccess(() -> Component.translatable(Constants.Strings.POWER_SET_SUCCESS, playerTextObject), false); + ReportPowersFoundOnPlayer(context, player); + }); + } + + + return SINGLE_SUCCESS; + } + + + private static int give(CommandContext context) throws CommandSyntaxException + { + Collection players = getPlayers(context, 4); + + for (ServerPlayer player : players) + { + CommandSourceStack source = context.getSource(); + Manifestation manifestation = context.getArgument("manifestation", Manifestation.class); + + MutableComponent playerText = TextHelper.getPlayerTextObject(player.serverLevel(), player.getUUID()); + + MutableComponent manifestationText = (MutableComponent) manifestation.getTextComponent(); + + SpiritwebCapability.get(player).ifPresent((spiritweb) -> + { + //todo change this so that the user sets the strength in the command + spiritweb.giveManifestation(manifestation, 9); + source.sendSuccess(() -> Component.translatable(Constants.Strings.POWER_SET_SUCCESS, playerText, manifestationText), false); + ReportPowersFoundOnPlayer(context, player); + spiritweb.syncToClients(null); + }); + } + return SINGLE_SUCCESS; + } + + private static int remove(CommandContext context) throws CommandSyntaxException + { + Collection players = getPlayers(context, 4); + + for (ServerPlayer player : players) + { + CommandSourceStack source = context.getSource(); + Manifestation manifestation = context.getArgument("manifestation", Manifestation.class); + + MutableComponent playerText = TextHelper.getPlayerTextObject(source.getLevel(), player.getUUID()); + + MutableComponent manifestationText = (MutableComponent) manifestation.getTextComponent(); + + SpiritwebCapability.get(player).ifPresent((spiritweb) -> + { + spiritweb.removeManifestation(manifestation); + spiritweb.syncToClients(null); + source.sendSuccess(() -> Component.translatable(Constants.Strings.POWER_SET_SUCCESS, playerText, manifestationText), false); + ReportPowersFoundOnPlayer(context, player); + }); + } + return SINGLE_SUCCESS; + } + + public static ArgumentBuilder register(CommandDispatcher dispatcher) + { + return Commands.literal("powers") + .then(Commands.literal("check") + .executes(ManifestationCommand::check) + .then(Commands.argument("target", EntityArgument.players()) + .requires(context -> context.hasPermission(2)) + .executes(ManifestationCommand::check))) + .then(Commands.literal("clear") + .requires(context -> context.hasPermission(2)) + .executes(ManifestationCommand::clear) + .then(Commands.argument("target", EntityArgument.players()) + .executes(ManifestationCommand::clear))) + .then(Commands.literal("reroll") + .requires(context -> context.hasPermission(2)) + .executes(ManifestationCommand::reroll) + .then(Commands.argument("target", EntityArgument.players()) + .executes(ManifestationCommand::reroll))) + .then(Commands.literal("give") + .requires(context -> context.hasPermission(2)) + .then(Commands.argument("manifestation", ManifestationsArgumentType.createArgument()) + .executes(ManifestationCommand::give) + .then(Commands.argument("target", EntityArgument.players()) + .executes(ManifestationCommand::give)))) + .then(Commands.literal("remove") + .requires(context -> context.hasPermission(2)) + .then(Commands.argument("manifestation", ManifestationsArgumentType.createArgument()) + .executes(ManifestationCommand::remove) + .then(Commands.argument("target", EntityArgument.players()) + .executes(ManifestationCommand::remove)))) + ; // end add + } +} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/common/commands/subcommands/ModCommand.java b/src/main/java/leaf/cosmere/common/commands/subcommands/ModCommand.java new file mode 100644 index 000000000..e9a658072 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/commands/subcommands/ModCommand.java @@ -0,0 +1,38 @@ +/* + * File updated ~ 24 - 4 - 2021 ~ Leaf + */ + +package leaf.cosmere.common.commands.subcommands; + +import com.mojang.brigadier.Command; +import com.mojang.brigadier.context.CommandContext; +import com.mojang.brigadier.exceptions.CommandSyntaxException; +import net.minecraft.commands.CommandSourceStack; +import net.minecraft.commands.arguments.EntityArgument; +import net.minecraft.server.level.ServerPlayer; + +import java.util.ArrayList; +import java.util.Collection; + +public abstract class ModCommand implements Command +{ + public ModCommand() + { + } + + //I'm not entirely certain this works. + public static Collection getPlayers(CommandContext context, int numOfParams) throws CommandSyntaxException + { + Collection players = new ArrayList<>(); + final String[] s = context.getInput().split(" "); + if (s.length <= numOfParams) + { + players.add(context.getSource().getPlayerOrException()); + } + else + { + players = EntityArgument.getPlayers(context, "target"); + } + return players; + } +} diff --git a/src/main/java/leaf/cosmere/common/commands/subcommands/SummonCommand.java b/src/main/java/leaf/cosmere/common/commands/subcommands/SummonCommand.java new file mode 100644 index 000000000..aa9c7a39f --- /dev/null +++ b/src/main/java/leaf/cosmere/common/commands/subcommands/SummonCommand.java @@ -0,0 +1,73 @@ +/* + * File updated ~ 24 - 4 - 2021 ~ Leaf + */ + +package leaf.cosmere.common.commands.subcommands; + +import com.mojang.brigadier.CommandDispatcher; +import com.mojang.brigadier.builder.ArgumentBuilder; +import com.mojang.brigadier.context.CommandContext; +import com.mojang.brigadier.exceptions.CommandSyntaxException; +import leaf.cosmere.api.manifestation.Manifestation; +import leaf.cosmere.common.cap.entity.SpiritwebCapability; +import leaf.cosmere.common.commands.arguments.ManifestationsArgumentType; +import net.minecraft.commands.CommandSourceStack; +import net.minecraft.commands.Commands; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.npc.Villager; + +public class SummonCommand extends ModCommand +{ + @Override + public int run(CommandContext context) throws CommandSyntaxException + { + return SINGLE_SUCCESS; + } + + public static ArgumentBuilder register(CommandDispatcher dispatcher) + { + return Commands.literal("summon_metalborn") + .requires(context -> context.hasPermission(2)) + //.executes(SummonCommand::spawnEntity) + .then(Commands.argument("manifestation", ManifestationsArgumentType.createArgument()) + .executes(SummonCommand::spawnEntity)) + ; // end add + } + + private static int spawnEntity(CommandContext context) throws CommandSyntaxException + { + Manifestation manifestation = null; + + try + { + manifestation = context.getArgument("manifestation", Manifestation.class); + } + catch (Exception ignored) + { + } + + //todo allow not setting a specific manifestation +/* if (manifestation == null) + { + boolean isAllomancy = MathHelper.randomBool(); + int powerID = MathHelper.randomInt(0, 15); + final Metals.MetalType metalType = Metals.MetalType.valueOf(powerID).get(); + manifestation = isAllomancy ? ManifestationRegistry.ALLOMANCY_POWERS.get(metalType).get() + : FeruchemyManifestations.FERUCHEMY_POWERS.get(metalType).get(); + }*/ + ServerPlayer serverPlayer = context.getSource().getPlayerOrException(); + Villager entity = new Villager(EntityType.VILLAGER, serverPlayer.serverLevel()); + entity.moveTo(serverPlayer.position()); + context.getSource().getLevel().addFreshEntity(entity); + + final Manifestation finalManifestation = manifestation; + SpiritwebCapability.get(entity).ifPresent((spiritweb) -> + { + spiritweb.giveManifestation(finalManifestation, 10); + spiritweb.syncToClients(null); + }); + + return SINGLE_SUCCESS; + } +} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/common/commands/subcommands/TestCommand.java b/src/main/java/leaf/cosmere/common/commands/subcommands/TestCommand.java new file mode 100644 index 000000000..059d68e45 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/commands/subcommands/TestCommand.java @@ -0,0 +1,45 @@ +/* + * File updated ~ 24 - 4 - 2021 ~ Leaf + */ + +package leaf.cosmere.common.commands.subcommands; + +import com.mojang.brigadier.CommandDispatcher; +import com.mojang.brigadier.builder.ArgumentBuilder; +import com.mojang.brigadier.context.CommandContext; +import com.mojang.brigadier.exceptions.CommandSyntaxException; +import net.minecraft.commands.CommandSourceStack; +import net.minecraft.commands.Commands; +import net.minecraft.network.chat.Component; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.ServerPlayer; + +public class TestCommand extends ModCommand +{ + + private static int testSub(CommandContext context, ServerPlayer player) + { + return testSub(context, player.serverLevel()); + } + + private static int testSub(CommandContext context, ServerLevel world) + { + CommandSourceStack source = context.getSource(); + source.sendSuccess(() -> Component.translatable("command.cosmere.test.sub"), true); + + return SINGLE_SUCCESS; + } + + public static ArgumentBuilder register(CommandDispatcher dispatcher) + { + return Commands.literal("test") + .requires(context -> context.hasPermission(2)).then(Commands.literal("sub").executes(context -> testSub(context, context.getSource().getPlayerOrException()))); // end add + } + + @Override + public int run(CommandContext context) throws CommandSyntaxException + { + return SINGLE_SUCCESS; + } + +} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/common/compat/curios/CuriosCompat.java b/src/main/java/leaf/cosmere/common/compat/curios/CuriosCompat.java new file mode 100644 index 000000000..83be18270 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/compat/curios/CuriosCompat.java @@ -0,0 +1,44 @@ +/* + * File updated ~ 10 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.common.compat.curios; + +import net.minecraftforge.fml.ModList; +import net.minecraftforge.fml.event.lifecycle.InterModEnqueueEvent; + +public class CuriosCompat +{ + private static boolean curiosModDetected; + + + public static boolean CuriosIsPresent() + { + return curiosModDetected; + } + + public static void init() + { + curiosModDetected = ModList.get().isLoaded("curios"); + + if (!curiosModDetected) + { + return; + } + + //IEventBus modBus = FMLJavaModLoadingContext.get().getModEventBus(); + //modBus.addListener(CuriosCompat::registerSlots); + } + + + private static void registerSlots(InterModEnqueueEvent event) + { + if (!curiosModDetected) + { + return; + } + + // Handled in datapacks now, leaving this code commented out and this comment in case this breaks in the future and we come looking + // Docs: https://docs.illusivesoulworks.com/curios/slots/slot-register + } +} diff --git a/src/main/java/leaf/cosmere/common/compat/jei/JEICompat.java b/src/main/java/leaf/cosmere/common/compat/jei/JEICompat.java new file mode 100644 index 000000000..a0f9f7f32 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/compat/jei/JEICompat.java @@ -0,0 +1,41 @@ +/* + * File updated ~ 24 - 4 - 2021 ~ Leaf + */ + +package leaf.cosmere.common.compat.jei; + +import leaf.cosmere.api.Constants; +import leaf.cosmere.api.text.TextHelper; +import leaf.cosmere.common.registry.ItemsRegistry; +import mezz.jei.api.IModPlugin; +import mezz.jei.api.JeiPlugin; +import mezz.jei.api.constants.VanillaTypes; +import mezz.jei.api.registration.IRecipeRegistration; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.Item; + +@JeiPlugin +public class JEICompat implements IModPlugin +{ + @Override + public ResourceLocation getPluginUid() + { + return Constants.Resources.JEI; + } + + @Override + public void registerRecipes(IRecipeRegistration reg) + { + addItemInfoPage(reg, ItemsRegistry.GUIDE.get()); + } + + private void addItemInfoPage(IRecipeRegistration reg, Item item) + { + reg.addIngredientInfo( + item.getDefaultInstance(), + VanillaTypes.ITEM_STACK, + TextHelper.createTranslatedText(String.format("item.%s.%s.tooltip", getPluginUid().getNamespace(), item) + )); + } + +} diff --git a/src/main/java/leaf/cosmere/common/compat/patchouli/PatchouliCompat.java b/src/main/java/leaf/cosmere/common/compat/patchouli/PatchouliCompat.java new file mode 100644 index 000000000..14e1dff53 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/compat/patchouli/PatchouliCompat.java @@ -0,0 +1,25 @@ +/* + * File updated ~ 31 - 3 - 2022 ~ Leaf + */ + +package leaf.cosmere.common.compat.patchouli; + +import leaf.cosmere.api.CosmereAPI; +import net.minecraftforge.fml.ModList; + +public class PatchouliCompat +{ + private static boolean patchouliModDetected; + + public static boolean PatchouliIsPresent() + { + return patchouliModDetected; + } + + public static void init() + { + patchouliModDetected = ModList.get().isLoaded("patchouli"); + CosmereAPI.logger.info("Patchouli detected, cosmere can use it's guide item."); + } + +} diff --git a/src/main/java/leaf/cosmere/common/config/CosmereClientConfig.java b/src/main/java/leaf/cosmere/common/config/CosmereClientConfig.java new file mode 100644 index 000000000..b0a267352 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/config/CosmereClientConfig.java @@ -0,0 +1,62 @@ +/* + * File updated ~ 10 - 6 - 2025 ~ Soar + */ + +package leaf.cosmere.common.config; + +import net.minecraftforge.common.ForgeConfigSpec; +import net.minecraftforge.fml.config.ModConfig.Type; + +public class CosmereClientConfig implements ICosmereConfig +{ + private final ForgeConfigSpec configSpec; + public final ForgeConfigSpec.BooleanValue disableItemTinting; + public final ForgeConfigSpec.BooleanValue disableSelectedManifestationHud; + public final ForgeConfigSpec.IntValue hudXCoordinate; + public final ForgeConfigSpec.IntValue hudYCoordinate; + public final ForgeConfigSpec.IntValue hudSize; + public final ForgeConfigSpec.BooleanValue disableActivatorChatMessage; + + + CosmereClientConfig() + { + ForgeConfigSpec.Builder builder = new ForgeConfigSpec.Builder(); + builder.comment("Client Config. This config only exists on the client").push("cosmere"); + + disableItemTinting = builder.comment("Lets you disable cosmere item and block tinting for metal items and blocks").define("disableItemTinting", false); + + disableSelectedManifestationHud = builder.comment("Disables the HUD for selected power").define("disableSelectedManifestationHud", false); + + hudXCoordinate = builder.comment("X coordinate for the HUD").defineInRange("hudXCoordinate", 10, 0, Integer.MAX_VALUE); + hudYCoordinate = builder.comment("Y coordinate for the HUD").defineInRange("hudYCoordinate", 20, 0, Integer.MAX_VALUE); + hudSize = builder.comment("Size of the icon in the HUD; both width and height").defineInRange("hudSize", 40, 0, Integer.MAX_VALUE); + + disableActivatorChatMessage = builder.comment("Disables the chat message alerting you when you active or save a power state").define("disableActivatorChatMessage", false); + builder.pop(); + configSpec = builder.build(); + } + + @Override + public String getFileName() + { + return "CosmereClient"; + } + + @Override + public ForgeConfigSpec getConfigSpec() + { + return configSpec; + } + + @Override + public Type getConfigType() + { + return Type.CLIENT; + } + + @Override + public void clearCache() + { + disableItemTinting.clearCache(); + } +} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/common/config/CosmereConfigHelper.java b/src/main/java/leaf/cosmere/common/config/CosmereConfigHelper.java new file mode 100644 index 000000000..23523aa91 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/config/CosmereConfigHelper.java @@ -0,0 +1,19 @@ +/* + * File updated ~ 27 - 2 - 2023 ~ Leaf + */ + +package leaf.cosmere.common.config; + +import net.minecraftforge.fml.ModContainer; + +public class CosmereConfigHelper +{ + public static void registerConfig(ModContainer modContainer, ICosmereConfig config) + { + CosmereModConfig modConfig = new CosmereModConfig(modContainer, config); + if (config.addToContainer()) + { + modContainer.addConfig(modConfig); + } + } +} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/common/config/CosmereConfigs.java b/src/main/java/leaf/cosmere/common/config/CosmereConfigs.java new file mode 100644 index 000000000..2452322e4 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/config/CosmereConfigs.java @@ -0,0 +1,23 @@ +/* + * File updated ~ 10 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.common.config; + +import net.minecraftforge.fml.ModContainer; +import net.minecraftforge.fml.ModLoadingContext; + +public class CosmereConfigs +{ + public static final CosmereClientConfig CLIENT_CONFIG = new CosmereClientConfig(); + public static final CosmereServerConfig SERVER_CONFIG = new CosmereServerConfig(); + public static final CosmereWorldConfig WORLD_CONFIG = new CosmereWorldConfig(); + + public static void registerConfigs(ModLoadingContext modLoadingContext) + { + ModContainer modContainer = modLoadingContext.getActiveContainer(); + CosmereConfigHelper.registerConfig(modContainer, CLIENT_CONFIG); + CosmereConfigHelper.registerConfig(modContainer, SERVER_CONFIG); + CosmereConfigHelper.registerConfig(modContainer, WORLD_CONFIG); + } +} diff --git a/src/main/java/leaf/cosmere/common/config/CosmereModConfig.java b/src/main/java/leaf/cosmere/common/config/CosmereModConfig.java new file mode 100644 index 000000000..84ee2f210 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/config/CosmereModConfig.java @@ -0,0 +1,68 @@ +/* + * File updated ~ 7 - 6 - 2023 ~ Leaf + */ + +package leaf.cosmere.common.config; + +import com.electronwill.nightconfig.core.file.CommentedFileConfig; +import leaf.cosmere.common.Cosmere; +import net.minecraftforge.fml.ModContainer; +import net.minecraftforge.fml.config.ConfigFileTypeHandler; +import net.minecraftforge.fml.config.ModConfig; +import net.minecraftforge.fml.loading.FMLPaths; + +import java.nio.file.Path; +import java.util.function.Function; + + +public class CosmereModConfig extends ModConfig +{ + + private static final CosmereConfigFileTypeHandler COSMERE_TOML = new CosmereConfigFileTypeHandler(); + + private final ICosmereConfig cosmereConfig; + + public CosmereModConfig(ModContainer container, ICosmereConfig config) + { + //registers the passed in config and sets it up in the cosmere folder. + super(config.getConfigType(), config.getConfigSpec(), container, Cosmere.MODID + "/" + config.getFileName() + ".toml"); + this.cosmereConfig = config; + } + + @Override + public ConfigFileTypeHandler getHandler() + { + return COSMERE_TOML; + } + + public void clearCache() + { + cosmereConfig.clearCache(); + } + + private static class CosmereConfigFileTypeHandler extends ConfigFileTypeHandler + { + + private static Path getPath(Path configBasePath) + { + //TY Mekanism for showing how to keep configs in the normal config folder + if (configBasePath.endsWith("serverconfig")) + { + return FMLPaths.CONFIGDIR.get(); + } + return configBasePath; + } + + @Override + public Function reader(Path configBasePath) + { + return super.reader(getPath(configBasePath)); + } + + @Override + public void unload(Path configBasePath, ModConfig config) + { + super.unload(getPath(configBasePath), config); + } + } +} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/common/config/CosmereServerConfig.java b/src/main/java/leaf/cosmere/common/config/CosmereServerConfig.java new file mode 100644 index 000000000..7c18f7e87 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/config/CosmereServerConfig.java @@ -0,0 +1,92 @@ +/* + * File updated ~ 29 - 2 - 2024 ~ Leaf + */ + +package leaf.cosmere.common.config; + +import net.minecraftforge.common.ForgeConfigSpec; +import net.minecraftforge.fml.config.ModConfig.Type; + +public class CosmereServerConfig implements ICosmereConfig +{ + + private final ForgeConfigSpec configSpec; + + public final ForgeConfigSpec.IntValue CHARGEABLE_MAX_VALUE; + public final ForgeConfigSpec.BooleanValue SCULK_CAN_HEAR_KINETIC_INVESTITURE; + public final ForgeConfigSpec.IntValue PLAYER_METALBORN_CHANCE; + public final ForgeConfigSpec.IntValue FULLBORN_POWERS_CHANCE; + public final ForgeConfigSpec.IntValue TWINBORN_POWERS_CHANCE_PLAYER; + public final ForgeConfigSpec.IntValue TWINBORN_POWERS_CHANCE_MOB; + public final ForgeConfigSpec.IntValue PLAYER_MISTING_TO_FERRING_DISTRIBUTION; + public final ForgeConfigSpec.IntValue RAIDER_POWERS_CHANCE; + public final ForgeConfigSpec.IntValue MOB_POWERS_CHANCE; + public final ForgeConfigSpec.DoubleValue EMOTIONAL_POWERS_SINGLE_TARGET_RANGE_MULTIPLIER; + public final ForgeConfigSpec.EnumValue POWER_GENERATION; + + + CosmereServerConfig() + { + ForgeConfigSpec.Builder builder = new ForgeConfigSpec.Builder(); + builder.comment("Cosmere Server Config. This config is synced between server and client.").push("cosmere"); + + CHARGEABLE_MAX_VALUE = builder.comment("What is the max value for chargeables? This value is modified based on the object").defineInRange("chargeableMaxValue", 18000, 1000, 1000000); + SCULK_CAN_HEAR_KINETIC_INVESTITURE = builder.comment("Can sculk and Warden hear people using powers if the user isn't copper clouded").define("sculkHearsKineticInvestiture", true); + + MOB_POWERS_CHANCE = builder.comment("1 in how many mobs should have powers?").defineInRange("mobPowerChance", 16, 1, 123456); + RAIDER_POWERS_CHANCE = builder.comment("1 in how many Raiders should have powers?").defineInRange("raiderPowerChance", 64, 1, 123456); + + PLAYER_METALBORN_CHANCE = builder.comment("1 in how many players should be metalborn?").defineInRange("playerMetalbornChance", 1, 1, 123456); + FULLBORN_POWERS_CHANCE = builder.comment("1 in how many should powered individuals should have full powers of one type").defineInRange("fullPowersChance", 16, 1, 123456); + TWINBORN_POWERS_CHANCE_PLAYER = builder.comment("If not full born, 1 in how many powered players should be twinborn? If players are not twinborn, they will be either a misting or ferring.").defineInRange("twinbornPowersChancePlayer", 1, 1, 123456); + TWINBORN_POWERS_CHANCE_MOB = builder.comment("If not full born, 1 in how many powered mobs should be twinborn?").defineInRange("twinbornPowersChanceMob", 16, 1, 123456); + PLAYER_MISTING_TO_FERRING_DISTRIBUTION = builder.comment("Ratio defined as a percentage of how many metalborn players are mistings vs ferrings. E.g. 25 means 25%, or 1 in 4 players will be mistings.").defineInRange("playerMistingToFerringDistribution", 50, 0, 100); + + EMOTIONAL_POWERS_SINGLE_TARGET_RANGE_MULTIPLIER = builder.comment("Multiplier for emotional allomancy range when singe-targeting").defineInRange("emotionalAllomancySingleTargetRange", 1.5D, 1D, 123456D); + + POWER_GENERATION = builder.comment("Power generation method. RANDOM assigns random powers on spawn, PICK allows players to choose allomantic and feruchemical abilities, and NONE assigns nothing").defineEnum("powerGeneration", PowerGeneration.RANDOM); + + builder.pop(); + configSpec = builder.build(); + } + + @Override + public String getFileName() + { + return "CosmereServer"; + } + + @Override + public ForgeConfigSpec getConfigSpec() + { + return configSpec; + } + + @Override + public Type getConfigType() + { + return Type.SERVER; + } + + @Override + public void clearCache() + { + CHARGEABLE_MAX_VALUE.clearCache(); + SCULK_CAN_HEAR_KINETIC_INVESTITURE.clearCache(); + MOB_POWERS_CHANCE.clearCache(); + RAIDER_POWERS_CHANCE.clearCache(); + FULLBORN_POWERS_CHANCE.clearCache(); + TWINBORN_POWERS_CHANCE_MOB.clearCache(); + TWINBORN_POWERS_CHANCE_PLAYER.clearCache(); + PLAYER_MISTING_TO_FERRING_DISTRIBUTION.clearCache(); + EMOTIONAL_POWERS_SINGLE_TARGET_RANGE_MULTIPLIER.clearCache(); + } + + public enum PowerGeneration + { + NONE, + RANDOM, + PICK + // todo: ORIGINS later + } +} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/common/config/CosmereWorldConfig.java b/src/main/java/leaf/cosmere/common/config/CosmereWorldConfig.java new file mode 100644 index 000000000..e682de9e0 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/config/CosmereWorldConfig.java @@ -0,0 +1,145 @@ +/* + * File updated ~ 20 - 11 - 2024 ~ Leaf + */ + +package leaf.cosmere.common.config; + +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableList.Builder; +import leaf.cosmere.common.resource.ore.BaseOreConfig; +import leaf.cosmere.common.resource.ore.OreType; +import leaf.cosmere.common.util.CosmereEnumUtils; +import leaf.cosmere.common.world.height.ConfigurableHeightRange; +import net.minecraftforge.common.ForgeConfigSpec; +import net.minecraftforge.fml.config.ModConfig.Type; + +import java.util.EnumMap; +import java.util.List; +import java.util.Map; +import java.util.function.BooleanSupplier; + +public class CosmereWorldConfig implements ICosmereConfig +{ + + private final ForgeConfigSpec configSpec; + + private final Map ores = new EnumMap<>(OreType.class); + + + CosmereWorldConfig() + { + ForgeConfigSpec.Builder builder = new ForgeConfigSpec.Builder(); + builder.comment("World generation settings for Cosmere. This config is synced from server to client") + .push("world_generation"); + + for (OreType ore : CosmereEnumUtils.ORE_TYPES) + { + ores.put(ore, new OreConfig(builder, ore)); + } + + builder.pop(); + configSpec = builder.build(); + } + + @Override + public String getFileName() + { + return "world"; + } + + @Override + public ForgeConfigSpec getConfigSpec() + { + return configSpec; + } + + @Override + public Type getConfigType() + { + return Type.SERVER; + } + + @Override + public boolean addToContainer() + { + return false; + } + + public OreVeinConfig getVeinConfig(OreType.OreVeinType oreVeinType) + { + return ores.get(oreVeinType.type()).veinConfigs.get(oreVeinType.index()); + } + + public record OreVeinConfig(BooleanSupplier shouldGenerate, + ForgeConfigSpec.ConfigValue perChunk, + ForgeConfigSpec.ConfigValue maxVeinSize, + ForgeConfigSpec.ConfigValue discardChanceOnAirExposure, + ConfigurableHeightRange range) + { + } + + private static class OreConfig + { + + private final ForgeConfigSpec.BooleanValue shouldGenerate; + private final List veinConfigs; + + private OreConfig(ForgeConfigSpec.Builder builder, OreType oreType) + { + String ore = oreType.getMetalType().getName(); + + builder.comment("Generation Settings for " + ore + " ore.") + .push(ore); + + this.shouldGenerate = builder + .comment("Determines if " + ore + " ore should be added to world generation.") + .define("shouldGenerate", true); + + Builder veinBuilder = ImmutableList.builder(); + + for (BaseOreConfig baseConfig : oreType.getBaseConfigs()) + { + String veinType = baseConfig.name() + " " + ore + " vein"; + + builder.comment(veinType + " Generation Settings.") + .push(baseConfig.name()); + + ForgeConfigSpec.BooleanValue shouldVeinTypeGenerate = builder + .comment("Determines if " + veinType + "s should be added to world generation. Note: Requires generating " + ore + " ore to be enabled.") + .define("shouldGenerate", true); + + veinBuilder.add( + new OreVeinConfig( + () -> this.shouldGenerate.get() && shouldVeinTypeGenerate.get(), + builder.comment("Chance that " + veinType + "s generates in a chunk.") + .defineInRange("perChunk", baseConfig.perChunk(), 1, 256), + builder.comment("Maximum number of blocks in a " + veinType + ".") + .defineInRange("maxVeinSize", baseConfig.maxVeinSize(), 1, 64), + builder.comment("Chance that blocks that are directly exposed to air in a " + veinType + " are not placed.") + .defineInRange("discardChanceOnAirExposure", baseConfig.discardChanceOnAirExposure(), 0, 1), + ConfigurableHeightRange.create(builder, veinType, baseConfig) + )); + builder.pop(); + } + veinConfigs = veinBuilder.build(); + builder.pop(); + } + } + + @Override + public void clearCache() + { + for (OreType ore : CosmereEnumUtils.ORE_TYPES) + { + final OreConfig oreConfig = ores.get(ore); + oreConfig.shouldGenerate.clearCache(); + for (var veinConfig : oreConfig.veinConfigs) + { + veinConfig.discardChanceOnAirExposure.clearCache(); + veinConfig.maxVeinSize.clearCache(); + veinConfig.perChunk.clearCache(); + veinConfig.range.plateau().clearCache(); + } + } + } +} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/common/config/ICosmereConfig.java b/src/main/java/leaf/cosmere/common/config/ICosmereConfig.java new file mode 100644 index 000000000..19fc74b8b --- /dev/null +++ b/src/main/java/leaf/cosmere/common/config/ICosmereConfig.java @@ -0,0 +1,35 @@ +/* + * File updated ~ 7 - 6 - 2023 ~ Leaf + */ + +package leaf.cosmere.common.config; + +import net.minecraftforge.common.ForgeConfigSpec; +import net.minecraftforge.fml.config.ModConfig; + +public interface ICosmereConfig +{ + + String getFileName(); + + ForgeConfigSpec getConfigSpec(); + + ModConfig.Type getConfigType(); + + default void save() + { + getConfigSpec().save(); + } + + /** + * Whether the config should be synced to client? + * If it's added to the mod container, I think that lets forge handle overriding values. + * If false, then it creates the file, so it can be tracked, but not overridden + */ + default boolean addToContainer() + { + return true; + } + + void clearCache(); +} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/common/effects/DrainInvestitureEffect.java b/src/main/java/leaf/cosmere/common/effects/DrainInvestitureEffect.java new file mode 100644 index 000000000..225bf7114 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/effects/DrainInvestitureEffect.java @@ -0,0 +1,34 @@ +/* + * File updated ~ 5 - 3 - 2025 ~ Leaf + */ + +package leaf.cosmere.common.effects; + +import leaf.cosmere.api.ISpiritwebSubmodule; +import leaf.cosmere.api.Manifestations; +import leaf.cosmere.api.Metals; +import leaf.cosmere.api.cosmereEffect.CosmereEffect; +import leaf.cosmere.api.spiritweb.ISpiritweb; + +import java.util.Map; + +public class DrainInvestitureEffect extends CosmereEffect +{ + @Override + protected int getTickOffset() + { + return Metals.MetalType.NICROSIL.getID(); + } + + @Override + public void applyEffectTick(ISpiritweb data, double strength) + { + //todo boost metal drain balancing + + final Map submodules = data.getSubmodules(); + for (ISpiritwebSubmodule module : submodules.values()) + { + module.drainInvestiture(data, strength); + } + } +} diff --git a/src/main/java/leaf/cosmere/common/effects/FillInvestitureEffect.java b/src/main/java/leaf/cosmere/common/effects/FillInvestitureEffect.java new file mode 100644 index 000000000..fe71668c2 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/effects/FillInvestitureEffect.java @@ -0,0 +1,5 @@ +package leaf.cosmere.common.effects; + +public class FillInvestitureEffect +{ +} diff --git a/src/main/java/leaf/cosmere/common/eventHandlers/CapabilitiesHandler.java b/src/main/java/leaf/cosmere/common/eventHandlers/CapabilitiesHandler.java new file mode 100644 index 000000000..e404aa796 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/eventHandlers/CapabilitiesHandler.java @@ -0,0 +1,168 @@ +/* + * File updated ~ 2 - 6 - 2023 ~ Leaf + */ + +package leaf.cosmere.common.eventHandlers; + +import leaf.cosmere.api.Constants; +import leaf.cosmere.api.spiritweb.ISpiritweb; +import leaf.cosmere.common.Cosmere; +import leaf.cosmere.common.cap.entity.SpiritwebCapability; +import leaf.cosmere.common.items.InvestableItemBase; +import net.minecraft.core.Direction; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.animal.Cat; +import net.minecraft.world.entity.animal.horse.Llama; +import net.minecraft.world.entity.monster.Ravager; +import net.minecraft.world.entity.monster.ZombieVillager; +import net.minecraft.world.entity.monster.piglin.AbstractPiglin; +import net.minecraft.world.entity.monster.warden.Warden; +import net.minecraft.world.entity.npc.AbstractVillager; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.entity.raid.Raider; +import net.minecraft.world.item.ItemStack; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.capabilities.ICapabilitySerializable; +import net.minecraftforge.common.util.LazyOptional; +import net.minecraftforge.event.AttachCapabilitiesEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; + +import javax.annotation.Nonnull; + +@Mod.EventBusSubscriber(modid = Cosmere.MODID, bus = Mod.EventBusSubscriber.Bus.FORGE) +public class CapabilitiesHandler +{ + + @SubscribeEvent + public static void attachEntityCapabilities(AttachCapabilitiesEvent event) + { + Entity eventEntity = event.getObject(); + + if (isValidSpiritWebEntity(eventEntity)) + { + LivingEntity livingEntity = (LivingEntity) eventEntity; + event.addCapability(Constants.Resources.SPIRITWEB_CAP, new ICapabilitySerializable() + { + final SpiritwebCapability spiritweb = new SpiritwebCapability(livingEntity); + final LazyOptional spiritwebInstance = LazyOptional.of(() -> spiritweb); + + @Nonnull + @Override + public LazyOptional getCapability(@Nonnull Capability cap, @javax.annotation.Nullable Direction side) + { + return cap == SpiritwebCapability.CAPABILITY ? (LazyOptional) spiritwebInstance + : LazyOptional.empty(); + } + + @Override + public CompoundTag serializeNBT() + { + return spiritweb.serializeNBT(); + } + + @Override + public void deserializeNBT(CompoundTag nbt) + { + spiritweb.deserializeNBT(nbt); + } + }); + } + if(isValidInfusionContainer(eventEntity)) + { + LivingEntity livingEntity = (LivingEntity) eventEntity; + + event.addCapability(Constants.Resources.INV_CONTAINER_CAP, new ICapabilitySerializable() + { + final InvestitureContainer investitureContainer = new InvestitureContainer(livingEntity); + final LazyOptional invContainerInstance = LazyOptional.of(() -> investitureContainer); + + @Nonnull + @Override + public LazyOptional getCapability(@Nonnull Capability cap, @javax.annotation.Nullable Direction side) + { + return cap == InvestitureContainer.CAPABILITY ? (LazyOptional) invContainerInstance + : LazyOptional.empty(); + } + + @Override + public CompoundTag serializeNBT() + { + return investitureContainer.serializeNBT(); + } + + @Override + public void deserializeNBT(CompoundTag nbt) + { + investitureContainer.deserializeNBT(nbt); + } + }); + } + } + + @SubscribeEvent + public static void attachItemCapabilities(AttachCapabilitiesEvent event) + { + ItemStack eventStack = event.getObject(); + + if (isValidInfusionContainer(eventStack)) + { + event.addCapability(Constants.Resources.INV_CONTAINER_CAP, new ICapabilitySerializable() + { + final InfusionContainer investitureContainer = new InfusionContainer<>(eventStack); + final LazyOptional invContainerInstance = LazyOptional.of(() -> investitureContainer); + + @Nonnull + @Override + public LazyOptional getCapability(@Nonnull Capability cap, @javax.annotation.Nullable Direction side) + { + return cap == InvestitureContainer.CAPABILITY ? (LazyOptional) invContainerInstance + : LazyOptional.empty(); + } + + @Override + public CompoundTag serializeNBT() + { + return investitureContainer.serializeNBT(); + } + + @Override + public void deserializeNBT(CompoundTag nbt) + { + investitureContainer.deserializeNBT(nbt); + } + }); + } + } + + public static boolean isValidSpiritWebEntity(Entity entity) + { + return entity instanceof Player + || entity instanceof AbstractVillager + || entity instanceof ZombieVillager + || (entity instanceof Raider && !(entity instanceof Ravager)) + || entity instanceof AbstractPiglin + || entity instanceof Warden + || entity instanceof Llama + || entity instanceof Cat; + } + + public static boolean isValidInfusionContainer(Entity entity) + { + return isValidSpiritWebEntity(entity); + //add block entities + } + + //Alternative for investiture container for entities that can only be affected by investiture, but can't use it. + public static boolean isValidInfusionEntity(Entity entity) + { + return (entity instanceof LivingEntity && !isValidInfusionContainer(entity)); + } + + public static boolean isValidInfusionContainer(ItemStack stack) + { + return stack.getItem() instanceof InvestableItemBase; + } +} diff --git a/src/main/java/leaf/cosmere/common/eventHandlers/ColorHandler.java b/src/main/java/leaf/cosmere/common/eventHandlers/ColorHandler.java new file mode 100644 index 000000000..c5a300573 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/eventHandlers/ColorHandler.java @@ -0,0 +1,89 @@ +/* + * File updated ~ 8 - 11 - 2025 ~ Leaf + */ + +package leaf.cosmere.common.eventHandlers; + +import leaf.cosmere.api.IHasColour; +import leaf.cosmere.api.helpers.RegistryHelper; +import leaf.cosmere.common.config.CosmereConfigs; +import net.minecraft.client.Minecraft; +import net.minecraft.client.color.block.BlockColor; +import net.minecraft.client.color.block.BlockColors; +import net.minecraft.client.color.item.ItemColor; +import net.minecraft.client.color.item.ItemColors; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.BlockItem; +import net.minecraft.world.item.Item; +import net.minecraft.world.level.block.Block; +import net.minecraftforge.registries.ForgeRegistries; + +public final class ColorHandler +{ + + public static void init() + { + if (CosmereConfigs.CLIENT_CONFIG.disableItemTinting.get()) + { + return; + } + + BlockColors blockColors = Minecraft.getInstance().getBlockColors(); + ItemColors itemColors = Minecraft.getInstance().getItemColors(); + + ItemColor itemColorHandler = + (itemStack, tintIndex) -> tintIndex == 0 + ? ((IHasColour) itemStack.getItem()).getColourValue() + : -1; + + ItemColor blockItemColorHandler = + (itemStack, tintIndex) -> tintIndex == 0 + ? Minecraft.getInstance().getBlockColors().getColor(((BlockItem) itemStack.getItem()).getBlock().defaultBlockState(), null, null, tintIndex) + : -1; + + BlockColor cosmereBlockColorHandler = + (blockState, world, pos, tintIndex) -> tintIndex == 0 + ? ((IHasColour) blockState.getBlock()).getColourValue() + : -1; + + + for (Item item : ForgeRegistries.ITEMS) + { + final ResourceLocation registryName = RegistryHelper.get(item); + + final String itemNamespace = registryName.getNamespace(); + + if (item instanceof BlockItem blockItem) + { + if (!itemNamespace.equals("surgebinding") + && !itemNamespace.equals("cosmeretools")) + { + continue; + } + + final Block block = blockItem.getBlock(); + if (block instanceof IHasColour) + { + itemColors.register(blockItemColorHandler, block); + blockColors.register(cosmereBlockColorHandler, block); + } + } + else + { + //todo temp? + if (//!itemNamespace.equals("surgebinding") && + !itemNamespace.equals("cosmeretools") + //&& !itemNamespace.equals("cosmere") + ) + { + continue; + } + + if (item instanceof IHasColour) + { + itemColors.register(itemColorHandler, item); + } + } + } + } +} diff --git a/src/main/java/leaf/cosmere/common/eventHandlers/CommonEvents.java b/src/main/java/leaf/cosmere/common/eventHandlers/CommonEvents.java new file mode 100644 index 000000000..5e8526a59 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/eventHandlers/CommonEvents.java @@ -0,0 +1,231 @@ +/* + * File updated ~ 9 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.common.eventHandlers; + + +import leaf.cosmere.common.Cosmere; +import leaf.cosmere.common.commands.CosmereCommand; +import leaf.cosmere.common.registration.impl.ItemRegistryObject; +import leaf.cosmere.common.registry.BlocksRegistry; +import leaf.cosmere.common.registry.ItemsRegistry; +import leaf.cosmere.common.registry.VillagerProfessionRegistry; +import net.minecraft.world.entity.npc.VillagerTrades; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Rarity; +import net.minecraftforge.common.BasicItemListing; +import net.minecraftforge.event.AddReloadListenerEvent; +import net.minecraftforge.event.RegisterCommandsEvent; +import net.minecraftforge.event.village.VillagerTradesEvent; +import net.minecraftforge.eventbus.api.EventPriority; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; + +import java.util.List; + +@Mod.EventBusSubscriber(modid = Cosmere.MODID, bus = Mod.EventBusSubscriber.Bus.FORGE) +public class CommonEvents +{ + @SubscribeEvent + public static void registerCommands(RegisterCommandsEvent event) + { + CosmereCommand.register(event.getDispatcher()); + } + + + @SubscribeEvent + public static void registerTrades(VillagerTradesEvent event) + { + if (event.getType() == VillagerProfessionRegistry.METAL_TRADER.get()) + { + for (int i = 1; i <= 5; i++) + { + final List tradesForLevel = event.getTrades().get(i); + switch (i) + { + case 1: + { + addNuggetTrades(tradesForLevel, Rarity.COMMON); + } + break; + case 2: + { + addRawOreTrades(tradesForLevel, Rarity.COMMON); + } + break; + case 3: + case 4: + { + addBlendTrades(tradesForLevel, Rarity.COMMON); + } + break; + case 5: + { + //addNuggetTrades(tradesForLevel, Rarity.EPIC); + addOreTrades(tradesForLevel, Rarity.COMMON); + } + break; + } + } + } + } + + private static void addNuggetTrades(List tradesForLevel, Rarity rarity) + { + for (ItemRegistryObject item : ItemsRegistry.METAL_NUGGETS.values()) + { + if (item.get().getRarity(ItemStack.EMPTY) == rarity) + { + ItemStack itemStackForSale = new ItemStack(item.get(), 1); + tradesForLevel.add(makeTrade(itemStackForSale)); + } + } + } + + private static void addBlendTrades(List tradesForLevel, Rarity rarity) + { + for (ItemRegistryObject item : ItemsRegistry.METAL_RAW_BLEND.values()) + { + if (item.get().getRarity(ItemStack.EMPTY) == rarity) + { + ItemStack itemStackForSale = new ItemStack(item.get(), 1); + tradesForLevel.add(makeTrade(itemStackForSale)); + } + } + } + + private static void addRawOreTrades(List tradesForLevel, Rarity rarity) + { + for (ItemRegistryObject item : ItemsRegistry.METAL_RAW_ORE.values()) + { + if (item.get().getRarity(ItemStack.EMPTY) == rarity) + { + ItemStack itemStackForSale = new ItemStack(item.get(), 1); + tradesForLevel.add(makeTrade(itemStackForSale)); + } + } + } + + private static void addOreTrades(List tradesForLevel, Rarity rarity) + { + for (var oreType : BlocksRegistry.METAL_ORE.values()) + { + if (oreType.stone().getBlock().asItem().getRarity(ItemStack.EMPTY) == rarity) + { + ItemStack itemStackForSale = new ItemStack(oreType.stone().getBlock().asItem(), 1); + tradesForLevel.add(makeTrade(itemStackForSale)); + } + } + } + + + private static VillagerTrades.ItemListing makeTrade(ItemStack itemStack) + { + + itemStack.setCount(getCount(itemStack)); + + return new BasicItemListing( + getCost(itemStack), + itemStack, + getMaxTradesPerDay(itemStack), + getXpPerTrade(itemStack)); + + } + + private static int getCost(ItemStack item) + { + int cost = 0; + switch (item.getItem().getRarity(item)) + { + case COMMON: + cost = 1; + break; + case UNCOMMON: + cost = 16; + break; + case RARE: + cost = 32; + break; + case EPIC: + cost = 64; + break; + } + + return cost; + } + + private static int getCount(ItemStack item) + { + int count = 0; + switch (item.getItem().getRarity(item)) + { + case COMMON: + count = 16; + break; + case UNCOMMON: + count = 8; + break; + case RARE: + count = 4; + break; + case EPIC: + count = 1; + break; + } + + return count; + } + + private static int getMaxTradesPerDay(ItemStack item) + { + int count = 0; + switch (item.getItem().getRarity(item)) + { + case COMMON: + count = 8; + break; + case UNCOMMON: + count = 5; + break; + case RARE: + count = 3; + break; + case EPIC: + count = 1; + break; + } + + return count; + } + + private static int getXpPerTrade(ItemStack item) + { + int count = 0; + switch (item.getItem().getRarity(item)) + { + case COMMON: + count = 2; + break; + case UNCOMMON: + count = 4; + break; + case RARE: + count = 6; + break; + case EPIC: + count = 8; + break; + } + + return count; + } + + + @SubscribeEvent(priority = EventPriority.HIGH) + public static void onResourceReload(AddReloadListenerEvent event) + { + //event.addListener(new RecipeReloadListener(event.getServerResources())); + } +} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/common/eventHandlers/EntityEventHandler.java b/src/main/java/leaf/cosmere/common/eventHandlers/EntityEventHandler.java new file mode 100644 index 000000000..120341568 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/eventHandlers/EntityEventHandler.java @@ -0,0 +1,379 @@ +/* + * File updated ~ 9 - 1 - 2025 ~ Leaf + */ + +package leaf.cosmere.common.eventHandlers; + +import leaf.cosmere.api.CosmereAPI; +import leaf.cosmere.api.Manifestations; +import leaf.cosmere.api.Metals; +import leaf.cosmere.api.helpers.EntityHelper; +import leaf.cosmere.api.manifestation.Manifestation; +import leaf.cosmere.api.math.MathHelper; +import leaf.cosmere.api.spiritweb.ISpiritweb; +import leaf.cosmere.common.Cosmere; +import leaf.cosmere.common.cap.entity.SpiritwebCapability; +import leaf.cosmere.common.config.CosmereConfigs; +import leaf.cosmere.common.config.CosmereServerConfig; +import leaf.cosmere.common.registry.AttributesRegistry; +import net.minecraft.network.chat.ClickEvent; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.MutableComponent; +import net.minecraft.network.chat.Style; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.Mth; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.ai.attributes.Attribute; +import net.minecraft.world.entity.ai.attributes.AttributeInstance; +import net.minecraft.world.entity.monster.Ravager; +import net.minecraft.world.entity.monster.ZombieVillager; +import net.minecraft.world.entity.monster.piglin.AbstractPiglin; +import net.minecraft.world.entity.monster.warden.Warden; +import net.minecraft.world.entity.npc.AbstractVillager; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.entity.raid.Raider; +import net.minecraftforge.event.entity.EntityJoinLevelEvent; +import net.minecraftforge.event.entity.living.LivingEvent; +import net.minecraftforge.event.entity.living.LivingHurtEvent; +import net.minecraftforge.event.entity.living.LootingLevelEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.ModList; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.registries.ForgeRegistries; + +@Mod.EventBusSubscriber(modid = Cosmere.MODID, bus = Mod.EventBusSubscriber.Bus.FORGE) +public class EntityEventHandler +{ + + @SubscribeEvent + public static void onEntityJoinWorldEvent(EntityJoinLevelEvent event) + { + Entity eventEntity = event.getEntity(); + + if (eventEntity.level().isClientSide || !(eventEntity instanceof LivingEntity livingEntity)) + { + return; + } + + SpiritwebCapability.get(livingEntity).ifPresent(iSpiritweb -> + { + SpiritwebCapability spiritweb = (SpiritwebCapability) iSpiritweb; + + //find out if any innate powers exist on the entity first + //if they do + if (spiritweb.hasBeenInitialized() || spiritweb.hasAnyPowers()) + { + //then skip + //no need to give them extras just for rejoining the world. + return; + } + + //players always start with powers + if (eventEntity instanceof Player) + { + //todo choose based on planet? eg scadrial gets twinborn, roshar gets surgebinding etc? + if (CosmereConfigs.SERVER_CONFIG.POWER_GENERATION.get() == CosmereServerConfig.PowerGeneration.NONE) + { + // no powers + spiritweb.setHasBeenInitialized(); + } + else if (CosmereConfigs.SERVER_CONFIG.POWER_GENERATION.get() == CosmereServerConfig.PowerGeneration.RANDOM) + { + //give random power + giveEntityStartingManifestation(livingEntity, spiritweb); + spiritweb.setHasBeenInitialized(); + } + else + { + // spiritweb not initialized yet in this case + Player player = (Player) eventEntity; + + String command = "/cosmere choose_metalborn_powers "; + MutableComponent instructionComponent = Component.literal("To choose powers, use "); + instructionComponent.append(Component.literal("§6§n/cosmere choose_metalborn_powers [allomancy] [feruchemy]") + .setStyle(Style.EMPTY.withClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, command)))); + + player.sendSystemMessage(instructionComponent); + } + } + else if (canStartWithPowers(eventEntity)) + { + //random 1/16 + // only 1 in 16 will have the gene + + + final int raiderPowersChance = CosmereConfigs.SERVER_CONFIG.RAIDER_POWERS_CHANCE.get(); + final int mobPowersChance = CosmereConfigs.SERVER_CONFIG.MOB_POWERS_CHANCE.get(); + final int chance = eventEntity instanceof Raider ? raiderPowersChance : mobPowersChance; + if (MathHelper.chance(chance)) + { + giveEntityStartingManifestation(livingEntity, spiritweb); + } + + spiritweb.setHasBeenInitialized(); + } + else if (eventEntity instanceof Warden warden) + { + //todo move this out + final Attribute attribute = ForgeRegistries.ATTRIBUTES.getValue(new ResourceLocation("allomancy:bronze")); + if (attribute == null) + { + return; + } + AttributeInstance manifestationAttribute = livingEntity.getAttribute(attribute); + + if (manifestationAttribute != null) + { + manifestationAttribute.setBaseValue(9); + } + + spiritweb.setHasBeenInitialized(); + } + }); + } + + public static boolean canStartWithPowers(Entity entity) + { + //thanks to type erasure, java neutered their generics system. + //No nice checking of parent types for us. + + return entity instanceof Player + || entity instanceof AbstractVillager + || entity instanceof ZombieVillager + || (entity instanceof Raider && !(entity instanceof Ravager)) + || entity instanceof AbstractPiglin; + } + + //todo eventually we want to replace this. + // Maybe an origins style menu that lets you choose a randomised power by world type + // Each mod could report the available powers, and what other mods they're allowed to spawn powers with (allomancy/feruchemy) + public static void giveEntityStartingManifestation(LivingEntity entity, SpiritwebCapability spiritwebCapability) + { + boolean isPlayerEntity = entity instanceof Player; + + if (isPlayerEntity) + { + if (!MathHelper.chance(CosmereConfigs.SERVER_CONFIG.PLAYER_METALBORN_CHANCE.get())) + { + // if player isn't metalborn, no need to continue + // a bit messy to do this but oh well, we want to change it anyway // tech debt? what's that? + addOtherPowers(spiritwebCapability); + return; + } + } + + final Integer chanceOfFullPowers = CosmereConfigs.SERVER_CONFIG.FULLBORN_POWERS_CHANCE.get(); + final Integer chanceOfTwinborn = isPlayerEntity ? CosmereConfigs.SERVER_CONFIG.TWINBORN_POWERS_CHANCE_PLAYER.get() : CosmereConfigs.SERVER_CONFIG.TWINBORN_POWERS_CHANCE_MOB.get(); + //low chance of having full powers of one type + //0-15 inclusive is normal powers. + boolean isFullPowersFromOneType = MathHelper.chance(chanceOfFullPowers); + + //small chance of being twin born, but only if not having full powers above + //except for players who are guaranteed having at least two powers. + boolean isTwinborn = MathHelper.chance(chanceOfTwinborn); + + //randomise the given powers from allomancy and feruchemy + int allomancyPowerID = MathHelper.randomInt(0, 15); + int feruchemyPowerID = MathHelper.randomInt(0, 15); + + final Metals.MetalType allomancyMetal = Metals.MetalType.valueOf(allomancyPowerID).get(); + final Metals.MetalType feruchemyMetal = Metals.MetalType.valueOf(feruchemyPowerID).get(); + + final boolean allomancyLoaded = ModList.get().isLoaded("allomancy"); + final boolean feruchemyLoaded = ModList.get().isLoaded("feruchemy"); + + //if not twinborn, pick one power + boolean isAllomancy = MathHelper.randomBool(); + + if (isFullPowersFromOneType) + { + //ooh full powers + + final Manifestations.ManifestationTypes manifestationType; + if (allomancyLoaded && feruchemyLoaded) + { + manifestationType = isAllomancy + ? Manifestations.ManifestationTypes.ALLOMANCY + : Manifestations.ManifestationTypes.FERUCHEMY; + } + else if (allomancyLoaded) + { + manifestationType = Manifestations.ManifestationTypes.ALLOMANCY; + } + else if (feruchemyLoaded) + { + manifestationType = Manifestations.ManifestationTypes.FERUCHEMY; + } + else + { + // ...why are we here? + return; + } + + + CosmereAPI.logger.info("Entity {} has full powers! {}", spiritwebCapability.getLiving().getName().getString(), manifestationType); + + for (Manifestation manifestation : CosmereAPI.manifestationRegistry()) + { + if (manifestation.getManifestationType() == manifestationType) + { + spiritwebCapability.giveManifestation(manifestation, 9); + + } + } + if (spiritwebCapability.getLiving() instanceof Player player) + { + spiritwebCapability.getSubmodule(manifestationType).GiveStartingItem(player); + } + } + else + { + final Manifestation allomancyPower = Manifestations.ManifestationTypes.ALLOMANCY.getManifestation(allomancyMetal.getID()); + final Manifestation feruchemyPower = Manifestations.ManifestationTypes.FERUCHEMY.getManifestation(feruchemyMetal.getID()); + if (isTwinborn) + { + if (allomancyLoaded) + { + spiritwebCapability.giveManifestation(allomancyPower, 9); + if (spiritwebCapability.getLiving() instanceof Player player) + { + spiritwebCapability.getSubmodule(Manifestations.ManifestationTypes.ALLOMANCY).GiveStartingItem(player, allomancyPower); + } + CosmereAPI.logger.info( + "Entity {} has been granted allomantic {}!", + spiritwebCapability.getLiving().getName().getString(), + allomancyMetal); + } + if (feruchemyLoaded) + { + spiritwebCapability.giveManifestation(feruchemyPower, 9); + + if (spiritwebCapability.getLiving() instanceof Player player) + { + spiritwebCapability.getSubmodule(Manifestations.ManifestationTypes.FERUCHEMY).GiveStartingItem(player, feruchemyPower); + } + CosmereAPI.logger.info( + "Entity {} has been granted feruchemical {}!", + spiritwebCapability.getLiving().getName().getString(), + feruchemyMetal); + } + } + else + { + Manifestation manifestation; + isAllomancy = isPlayerEntity ? MathHelper.randomInt(0, 99) < CosmereConfigs.SERVER_CONFIG.PLAYER_MISTING_TO_FERRING_DISTRIBUTION.get() : MathHelper.randomBool(); + if (allomancyLoaded && feruchemyLoaded) + { + manifestation = + isAllomancy + ? allomancyPower + : feruchemyPower; + } + else if (allomancyLoaded) + { + manifestation = allomancyPower; + } + else if (feruchemyLoaded) + { + manifestation = feruchemyPower; + } + else + { + // again, why are we here? + return; + } + + spiritwebCapability.giveManifestation(manifestation, 9); + if (spiritwebCapability.getLiving() instanceof Player player) + { + spiritwebCapability.getSubmodule(isAllomancy ? Manifestations.ManifestationTypes.ALLOMANCY : Manifestations.ManifestationTypes.FERUCHEMY).GiveStartingItem(player, manifestation); + } + CosmereAPI.logger.info("Entity {} has been granted {}, with metal {}!", + spiritwebCapability.getLiving().getName().getString(), + isAllomancy + ? Manifestations.ManifestationTypes.ALLOMANCY.getName() + : Manifestations.ManifestationTypes.FERUCHEMY.getName(), + isAllomancy + ? allomancyMetal + : feruchemyMetal); + + //at this time, players are twin-born minimum, so no need to try give powers here + } + } + + // TODO We wanna change how powers are granted, as cosmere library mod shouldn't be in charge of this + addOtherPowers(spiritwebCapability); + } + + public static void addOtherPowers(SpiritwebCapability spiritwebCapability) + { + for (Manifestation manifestation : CosmereAPI.manifestationRegistry()) + { + if (manifestation.getManifestationType() == Manifestations.ManifestationTypes.SANDMASTERY) + { + final int ribbonCount = MathHelper.randomInt(1, 24); + spiritwebCapability.giveManifestation(manifestation, ribbonCount); + //Break here because there is only one attribute for ribbons. + CosmereAPI.logger.info("Setting entity {} ribbons to {}", spiritwebCapability.getLiving().getName().getString(), ribbonCount); + break; + } + } + } + + + @SubscribeEvent + public static void onLivingTick(LivingEvent.LivingTickEvent event) + { + SpiritwebCapability.get(event.getEntity()).ifPresent(ISpiritweb::tick); + } + + + @SubscribeEvent + public static void onLootingLevelEvent(LootingLevelEvent event) + { + if (event.getDamageSource() == null) + { + return; + } + if (!event.getEntity().level().isClientSide && event.getDamageSource().getEntity() instanceof LivingEntity sourceLiving) + { + int total = (int) EntityHelper.getAttributeValue(sourceLiving, AttributesRegistry.COSMERE_FORTUNE.getAttribute()); + if (total != 0) + { + event.setLootingLevel(event.getLootingLevel() + total); + } + } + } + + @SubscribeEvent + public static void onLivingHurtEvent(LivingHurtEvent event) + { + if (event.isCanceled()) + { + return; + } + + float total = (float) EntityHelper.getAttributeValue(event.getEntity(), AttributesRegistry.DETERMINATION.getAttribute()); + + //ignore if no determination changes, players default to 0 + //should we todo config this? + if (total > 0.1) + { + final float maxDetermination = 23.125f;//can we detect this properly? not really + final float percentageOfMaxDetermination = total / maxDetermination; + + //increase damage reduction + float damageReduction = 1 - Mth.lerp(percentageOfMaxDetermination, 0, 0.80f); + event.setAmount(event.getAmount() * damageReduction); + } + else if (total < -0.1) + { + //increase damage taken + final float minDetermination = 3f;//can we detect this properly? not really + final float percentageOfMinDetermination = Math.abs(total) / minDetermination; + float damageIncrease = Mth.lerp(percentageOfMinDetermination, 1, 1.25f); + event.setAmount(event.getAmount() * damageIncrease); + } + } +} diff --git a/src/main/java/leaf/cosmere/common/eventHandlers/ModBusEventHandler.java b/src/main/java/leaf/cosmere/common/eventHandlers/ModBusEventHandler.java new file mode 100644 index 000000000..bfbd978a1 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/eventHandlers/ModBusEventHandler.java @@ -0,0 +1,60 @@ +/* + * File updated ~ 26 - 10 - 2023 ~ Leaf + */ + +package leaf.cosmere.common.eventHandlers; + +import leaf.cosmere.common.Cosmere; +import leaf.cosmere.common.registry.AttributesRegistry; +import net.minecraft.world.entity.EntityType; +import net.minecraftforge.event.entity.EntityAttributeModificationEvent; +import net.minecraftforge.eventbus.api.EventPriority; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; + + +@Mod.EventBusSubscriber(modid = Cosmere.MODID, bus = Mod.EventBusSubscriber.Bus.MOD) +public class ModBusEventHandler +{ + //one place that multiple sub mods can reference? + public final static EntityType[] ENTITIES_THAT_CAN_HAVE_POWERS = { + EntityType.PLAYER, + + EntityType.VILLAGER, + EntityType.ZOMBIE_VILLAGER, + EntityType.WANDERING_TRADER, + + EntityType.EVOKER, + EntityType.ILLUSIONER, + EntityType.PILLAGER, + EntityType.VINDICATOR, + EntityType.WITCH, + + EntityType.PIGLIN, + EntityType.PIGLIN_BRUTE, + + EntityType.CAT, + EntityType.LLAMA, + EntityType.TRADER_LLAMA, + }; + + + @SubscribeEvent(priority = EventPriority.HIGH) + public static void onEntityAttributeModificationEvent(EntityAttributeModificationEvent event) + { + event.add(EntityType.PLAYER, AttributesRegistry.XP_RATE_ATTRIBUTE.getAttribute()); + event.add(EntityType.PLAYER, AttributesRegistry.NIGHT_VISION_ATTRIBUTE.getAttribute()); + event.add(EntityType.PLAYER, AttributesRegistry.SIZE_ATTRIBUTE.get()); + + for (EntityType entityType : ModBusEventHandler.ENTITIES_THAT_CAN_HAVE_POWERS) + { + event.add(entityType, AttributesRegistry.COGNITIVE_CONCEALMENT.get()); + event.add(entityType, AttributesRegistry.CONNECTION.get()); + event.add(entityType, AttributesRegistry.COSMERE_FORTUNE.get()); + event.add(entityType, AttributesRegistry.IDENTITY.get()); + event.add(entityType, AttributesRegistry.DETERMINATION.get()); + event.add(entityType, AttributesRegistry.WARMTH.get()); + event.add(entityType, AttributesRegistry.HEALING_STRENGTH.get()); + } + } +} diff --git a/src/main/java/leaf/cosmere/common/eventHandlers/PlayerEventHandler.java b/src/main/java/leaf/cosmere/common/eventHandlers/PlayerEventHandler.java new file mode 100644 index 000000000..f877eab27 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/eventHandlers/PlayerEventHandler.java @@ -0,0 +1,90 @@ +/* + * File updated ~ 10 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.common.eventHandlers; + +import leaf.cosmere.common.Cosmere; +import leaf.cosmere.common.cap.entity.SpiritwebCapability; +import leaf.cosmere.common.registration.impl.AttributeRegistryObject; +import leaf.cosmere.common.registry.AttributesRegistry; +import net.minecraft.world.entity.ai.attributes.Attribute; +import net.minecraft.world.entity.ai.attributes.AttributeInstance; +import net.minecraftforge.event.entity.item.ItemTossEvent; +import net.minecraftforge.event.entity.player.PlayerEvent; +import net.minecraftforge.event.entity.player.PlayerXpEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; + +@Mod.EventBusSubscriber(modid = Cosmere.MODID, bus = Mod.EventBusSubscriber.Bus.FORGE) +public class PlayerEventHandler +{ + @SubscribeEvent + public static void onPlayerClone(PlayerEvent.Clone event) + { + event.getOriginal().revive(); + + SpiritwebCapability.get(event.getOriginal()).ifPresent((oldSpiritWeb) -> + SpiritwebCapability.get(event.getEntity()).ifPresent((newSpiritWeb) -> + { + //copy across anything from the old player if needed + //Metals ingested? + //Stormlight? + + newSpiritWeb.onPlayerClone(event, oldSpiritWeb); + })); + } + + @SubscribeEvent + public static void onTrackPlayer(PlayerEvent.StartTracking startTracking) + { + SpiritwebCapability.get(startTracking.getEntity()).ifPresent(cap -> + { + cap.syncToClients(null); + }); + } + + @SubscribeEvent + public void onItemTossEvent(ItemTossEvent event) + { + if (!event.getPlayer().level().isClientSide) + { + //if (event.getEntityItem().getItem().getItem() instanceof ItemShardBlade) + { + /* + //if we haven't got a shard blade in inv, put it in the inventory + if (event.getPlayer().getCapability(CosmereCapabilities.SUMMON_SHARDBLADE, null).getInventoryShardblade().getStackInSlot(0) == null) + { + event.getPlayer().getCapability(CosmereCapabilities.SUMMON_SHARDBLADE, null).setIsShardbladeInInventory(true); + + ItemStack itemStack = event.getEntityItem().getEntityItem(); + ItemStack test = itemStack.copy(); + + event.getPlayer().getCapability(CosmereCapabilities.SUMMON_SHARDBLADE, null).getInventoryShardblade().setInventorySlotContents(0, test); + + + event.getEntityItem().isDead = true; + } + PacketDispatcher.sendTo(new SyncShardbladeData(event.getPlayer().getCapability(CosmereCapabilities.SUMMON_SHARDBLADE, null)), (EntityPlayerMP) event.getPlayer()); + */ + } + } + } + + @SubscribeEvent + public void onXPChange(PlayerXpEvent.XpChange event) + { + boolean isRemote = event.getEntity().level().isClientSide; + if (isRemote) + { + return; + } + + AttributeRegistryObject xpGainRateAttribute = AttributesRegistry.XP_RATE_ATTRIBUTE; + AttributeInstance attribute = event.getEntity().getAttribute(xpGainRateAttribute.get()); + if (attribute != null) + { + event.setAmount((int) (event.getAmount() * attribute.getValue())); + } + } +} diff --git a/src/main/java/leaf/cosmere/common/fog/FogManager.java b/src/main/java/leaf/cosmere/common/fog/FogManager.java new file mode 100644 index 000000000..2bad1178e --- /dev/null +++ b/src/main/java/leaf/cosmere/common/fog/FogManager.java @@ -0,0 +1,142 @@ +/* + * File updated ~ 10 - 8 - 2024 ~ Leaf + */ + +package leaf.cosmere.common.fog; + +import leaf.cosmere.api.CosmereAPI; +import leaf.cosmere.api.InterpolatedValue; +import net.minecraft.client.Camera; +import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.core.BlockPos; +import net.minecraft.util.CubicSampler; +import net.minecraft.util.Mth; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.level.biome.BiomeManager; +import net.minecraft.world.phys.Vec3; +import org.jetbrains.annotations.Nullable; + +import java.util.Objects; +import java.util.Optional; + +// Based on Fog Looks Good Now by Birsy +// acquired on 04/11/2023 - in accordance with their CC0-1.0 license, which allows for use to take and modify code. +// Fantastic mod, very straightforward to understand and modify, so big thanks to them :) +//https://github.com/birsy/Fog-Looks-Good-Now/tree/main +public class FogManager +{ + @Nullable + public static FogManager densityManager; + + public static FogManager getDensityManager() + { + return Objects.requireNonNull(densityManager, "Attempted to call getDensityManager before it finished loading!"); + } + + public static Optional getDensityManagerOptional() + { + return Optional.ofNullable(densityManager); + } + + private final Minecraft mc; + public InterpolatedValue fogStart; + public InterpolatedValue fogEnd; + + public Vec3 unlitFogColor = Vec3.ZERO; + + public FogManager() + { + this.mc = Minecraft.getInstance(); + this.fogStart = new InterpolatedValue(0.9F); + this.fogEnd = new InterpolatedValue(1.0F); + } + + public void tick() + { + BlockPos pos = this.mc.gameRenderer.getMainCamera().getBlockPosition(); + + if (this.mc.level == null) + { + return; + } + ClientLevel pLevel = this.mc.level; + boolean isFogDense = pLevel.effects().isFoggyAt(pos.getX(), pos.getZ()) || this.mc.gui.getBossOverlay().shouldCreateWorldFog(); + float density = isFogDense ? 0.9F : 1.0F; + + Camera camera = this.mc.gameRenderer.getMainCamera(); + BiomeManager biomemanager = pLevel.getBiomeManager(); + Vec3 playerPos = camera.getPosition().subtract(2.0D, 2.0D, 2.0D).scale(0.25D); + this.unlitFogColor = CubicSampler.gaussianSampleVec3( + playerPos, + (p_109033_, p_109034_, p_109035_) -> + pLevel.effects().getBrightnessDependentFogColor( + Vec3.fromRGB24( + biomemanager.getNoiseBiomeAtQuart(p_109033_, p_109034_, p_109035_) + .value() + .getFogColor() + ), + 1) + ); + + getDarknessEffectedFog(this.fogStart.defaultValue, this.fogEnd.defaultValue * density); + + } + + public void getDarknessEffectedFog(float fs, float fd) + { + float renderDistance = mc.gameRenderer.getRenderDistance() * 16; + + Entity entity = mc.cameraEntity; + float fogStart = fs; + float fogEnd = fd; + this.fogEnd.setInterpolationSpeed(0.05f); + this.fogStart.setInterpolationSpeed(0.05f); + if (entity instanceof LivingEntity e) + { + if (e.hasEffect(MobEffects.BLINDNESS)) + { + fogStart = (4 * 16) / renderDistance; + fogEnd = (8 * 16) / renderDistance; + } + else if (e.hasEffect(MobEffects.DARKNESS)) + { + MobEffectInstance effect = e.getEffect(MobEffects.DARKNESS); + if (!effect.getFactorData().isEmpty()) + { + float factor = this.mc.options.darknessEffectScale().get().floatValue(); + float intensity = effect.getFactorData().get().getFactor(e, mc.getPartialTick()) * factor; + float darkness = 1 - (calculateDarknessScale(e, effect.getFactorData().get().getFactor(e, mc.getPartialTick()), mc.getPartialTick())); + CosmereAPI.logger.info("FogManager darkness intensity: " + intensity); + fogStart = ((8.0F * 16) / renderDistance) * darkness; + fogEnd = ((15.0F * 16) / renderDistance); + } + } + } + this.fogStart.interpolate(fogStart); + this.fogEnd.interpolate(fogEnd); + } + + private float calculateDarknessScale(LivingEntity pEntity, float darknessFactor, float partialTicks) + { + float factor = this.mc.options.darknessEffectScale().get().floatValue(); + float f = 0.45F * darknessFactor; + return Math.max(0.0F, Mth.cos(((float) pEntity.tickCount - partialTicks) * (float) Math.PI * 0.025F) * f) * factor; + } + + public void close() + { + } + + public static void resetFog() + { + if (densityManager != null) + { + densityManager.fogStart.setDefaultValue(0.9F); + densityManager.fogEnd.setDefaultValue(1.0F); + } + } +} diff --git a/src/main/java/leaf/cosmere/common/investiture/Infusion.java b/src/main/java/leaf/cosmere/common/investiture/Infusion.java new file mode 100644 index 000000000..509ac0492 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/investiture/Infusion.java @@ -0,0 +1,247 @@ +package leaf.cosmere.common.investiture; + +import leaf.cosmere.api.CosmereAPI; +import leaf.cosmere.api.investiture.IInvestiture; +import leaf.cosmere.api.investiture.InvHelpers; +import leaf.cosmere.api.investiture.KineticInvestiture; +import leaf.cosmere.api.manifestation.Manifestation; +import leaf.cosmere.api.spiritweb.ISpiritweb; +import leaf.cosmere.common.cap.entity.SpiritwebCapability; +import net.minecraft.client.Minecraft; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.world.entity.LivingEntity; + +import java.util.List; + +public class Infusion implements IInvestiture +{ + private ISpiritweb container; + private ISpiritweb infuser; + private InvHelpers.Shard shard; + private Manifestation[] applicableManifestations; + private double beu; + private double currentMaxDraw; + + private CompoundTag nbt; + + public Infusion(ISpiritweb container, Manifestation manifest, List investitures) + { + + beu = 0; + this.container = container; + for(KineticInvestiture investiture: investitures) + { + if(investiture.isUsable(manifest)) + { + beu += investiture.getBEU(); + investiture.setBEU(0); + if(this.shard == null) + { + this.shard = investiture.getShard(); + } + else if(investiture.getShard() != this.shard) + { + InvHelpers.Shard shard1 = this.shard; + { + this.shard = switcher(shard1, investiture.getShard()); + } + } + } + } + applicableManifestations = new Manifestation[]{manifest}; + infuser = investitures.get(0).getContainer(); + } + + public Infusion(ISpiritweb container, Manifestation[] manifest, double beu, ISpiritweb infuser, + InvHelpers.Shard shard, InvHelpers.InvestitureSource source + ) + { + this.container = container; + this.infuser = infuser; + this.applicableManifestations = manifest; + this.beu = beu; + this.shard = shard;} + + @Override + public double getBEU() + { + return beu; + } + + @Override + public void setBEU(double beu) + { + this.beu = beu; + } + + @Override + public Manifestation[] getApplicableManifestations() + { + return applicableManifestations; + } + + @Override + public InvHelpers.Shard getShard() + { + return shard; + } + + + @Override + public ISpiritweb getContainer() + { + return container; + } + + @Override + public double getCurrentMaxDraw() + { + return currentMaxDraw; + } + + @Override + public void calculateCurrentMaxDraw() + { + currentMaxDraw = Math.min(beu, applicableManifestations[0].maxInvestitureDraw(infuser)); + } + + public boolean merge(Infusion other) + { + if(this == other) + { + return false; + } + if(this.shard == other.shard + && this.getContainer().equals(other.getContainer())) + { + this.beu += other.getBEU(); + other.setBEU(0); + return true; + } + return false; + } + + @Override + public CompoundTag serializeNBT() + { + if (this.nbt == null) + { + this.nbt = new CompoundTag(); + } + nbt.putString("shard", shard.getName().toLowerCase()); + nbt.putInt("manifestations_length", applicableManifestations.length); + final CompoundTag manifestationNBT = new CompoundTag(); + for (int i = 0; i < applicableManifestations.length; i++) + { + manifestationNBT.putInt(applicableManifestations[i].getRegistryName().toString(), i); + } + nbt.put("manifestations", manifestationNBT); + nbt.putDouble("beu", beu); + + nbt.putInt("infuser", infuser.getLiving().getId()); + + return nbt; + } + + @Override + public void deserializeNBT(CompoundTag nbt) + { + this.nbt = nbt; + beu = nbt.getDouble("beu"); + shard = InvHelpers.Shard.valueOf(nbt.getString("shard")); + applicableManifestations = new Manifestation[nbt.getInt("manifestations_length")]; + CompoundTag manifestNBT = nbt.getCompound("manifestations"); + for (Manifestation manifestation : CosmereAPI.manifestationRegistry()) + { + final String manifestationLoc = manifestation.getRegistryName().toString(); + + if (manifestNBT.contains(manifestationLoc)) + { + applicableManifestations[manifestNBT.getInt(manifestationLoc)] = manifestation; + } + } + if (Minecraft.getInstance().level.getEntity(nbt.getInt("infuser")) instanceof LivingEntity entity) + { + infuser = SpiritwebCapability.get(entity).resolve().get(); + } + } + + private static InvHelpers.Shard switcher(InvHelpers.Shard shard1, InvHelpers.Shard shard2) + { + int int1 = 0; + switch (shard1) + { + case DOMINION, DEVOTION, DOR: + int1 += 1; + break; + case PRESERVATION, RUIN, HARMONY: + int1 += 3; + break; + case HONOR, ODIUM, RETRIBUTION: + int1 += 5; + break; + case PURE: + int1 += 20; + break; + default: + int1 += 0; + + } + + switch (shard2) + { + case DOMINION, DEVOTION, DOR: + int1 += 1; + break; + case PRESERVATION, RUIN, HARMONY: + int1 += 3; + break; + case HONOR, ODIUM, RETRIBUTION: + int1 += 5; + break; + case PURE: + int1 += 20; + break; + default: + int1 += 0; + + } + + if (int1>20) + { + int1 = 20; + } + return switch (int1) + { + case 2 -> InvHelpers.Shard.DOR; + case 6 -> InvHelpers.Shard.HARMONY; + case 10 -> InvHelpers.Shard.RETRIBUTION; + case 20 -> InvHelpers.Shard.PURE; + default -> InvHelpers.Shard.NONE; + }; + } +// +// public static Infusion buildFromNBT(CompoundTag nbt, IInfuseContainer container) +// { +// Manifestation[] array = new Manifestation[nbt.getInt("manifestations_length")]; +// CompoundTag manifestNBT = nbt.getCompound("manifestations"); +// for (Manifestation manifestation : CosmereAPI.manifestationRegistry()) +// { +// final String manifestationLoc = manifestation.getRegistryName().toString(); +// +// if (manifestNBT.contains(manifestationLoc)) +// { +// array[manifestNBT.getInt(manifestationLoc)] = manifestation; +// } +// } +// +// UUID uuid = nbt.getUUID("infuser"); +// Entity infuse = Minecraft.getInstance().level.getServer().getAllLevels().iterator().next().getEntity(uuid); +// +// Infusion invest = new Infusion(container, array, +// nbt.getDouble("beu"), Infusor, InvHelpers.Shard.valueOf(nbt.getString("shard")), +// InvHelpers.InvestitureSource.valueOf(nbt.getString("source"))); +// invest.nbt = nbt; +// return invest; +// } +} diff --git a/src/main/java/leaf/cosmere/common/investiture/Perpendicularity.java b/src/main/java/leaf/cosmere/common/investiture/Perpendicularity.java new file mode 100644 index 000000000..2f8989c2a --- /dev/null +++ b/src/main/java/leaf/cosmere/common/investiture/Perpendicularity.java @@ -0,0 +1,10 @@ +/* +* File created ~ 15 - 9 - 25 + */ + +package leaf.cosmere.common.investiture; + +public class Perpendicularity implements IInvCreator +{ + +} diff --git a/src/main/java/leaf/cosmere/common/items/AlloyNuggetItem.java b/src/main/java/leaf/cosmere/common/items/AlloyNuggetItem.java new file mode 100644 index 000000000..b496dc3a7 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/items/AlloyNuggetItem.java @@ -0,0 +1,22 @@ +package leaf.cosmere.common.items; + +import leaf.cosmere.api.Metals.MetalType; + +import java.awt.*; +import java.util.ArrayList; + +public class AlloyNuggetItem extends MetalNuggetItem +{ + MetalType alloyedMetalType; + + public AlloyNuggetItem(MetalType metalType, MetalType alloyedMetalType) + { + super(metalType); + this.alloyedMetalType = alloyedMetalType; + } + + public MetalType getAlloyedMetalType() + { + return alloyedMetalType; + } +} diff --git a/src/main/java/leaf/cosmere/common/items/BaseItem.java b/src/main/java/leaf/cosmere/common/items/BaseItem.java new file mode 100644 index 000000000..93ecabd64 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/items/BaseItem.java @@ -0,0 +1,36 @@ +/* + * File updated ~ 10 - 8 - 2024 ~ Leaf + */ + +package leaf.cosmere.common.items; + +import leaf.cosmere.common.properties.PropTypes; +import net.minecraft.util.Mth; +import net.minecraft.world.item.Item; + +public class BaseItem extends Item +{ + public BaseItem() + { + super(PropTypes.Items.SIXTY_FOUR.get()); + } + + public BaseItem(Properties prop) + { + super(prop); + } + + protected int getBarWidth(float value, float max) + { + final float percentage = value / max; + final float lerp = Mth.lerp(percentage, 0, 13); + return Math.round(lerp); + } + + protected int getBarColour(float value, float max) + { + float f = 1 - Math.max(0.0F, (max - value) / max); + return Mth.hsvToRgb(f / 3.0F, 1.0F, 1.0F); + } + +} diff --git a/src/main/java/leaf/cosmere/common/items/CapWrapper.java b/src/main/java/leaf/cosmere/common/items/CapWrapper.java new file mode 100644 index 000000000..8e0ab9b90 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/items/CapWrapper.java @@ -0,0 +1,90 @@ +/* + * File updated ~ 24 - 4 - 2021 ~ Leaf + * Largely copied from the Botania Mod! + * this is used for detecting items and curios that have charge interface attached + */ + +package leaf.cosmere.common.items; + +import net.minecraft.world.Container; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraftforge.items.IItemHandler; +import net.minecraftforge.items.IItemHandlerModifiable; + +public class CapWrapper implements Container +{ + private final IItemHandler handler; + + public CapWrapper(IItemHandler handler) + { + this.handler = handler; + } + + @Override + public int getContainerSize() + { + return handler.getSlots(); + } + + @Override + public boolean isEmpty() + { + for (int i = 0; i < getContainerSize(); i++) + { + if (!getItem(i).isEmpty()) + { + return false; + } + } + return true; + } + + @Override + public ItemStack getItem(int index) + { + return handler.getStackInSlot(index); + } + + @Override + public ItemStack removeItem(int index, int count) + { + return handler.extractItem(index, count, false); + } + + @Override + public ItemStack removeItemNoUpdate(int index) + { + return handler.extractItem(index, Integer.MAX_VALUE, false); + } + + @Override + public void setItem(int index, ItemStack stack) + { + if (handler instanceof IItemHandlerModifiable) + { + ((IItemHandlerModifiable) handler).setStackInSlot(index, stack); + } + } + + @Override + public void setChanged() + { + + } + + @Override + public boolean stillValid(Player player) + { + return false; + } + + @Override + public void clearContent() + { + for (int i = 0; i < getContainerSize(); i++) + { + removeItemNoUpdate(i); + } + } +} diff --git a/src/main/java/leaf/cosmere/common/items/ChargeableItemBase.java b/src/main/java/leaf/cosmere/common/items/ChargeableItemBase.java new file mode 100644 index 000000000..4e7cc4f80 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/items/ChargeableItemBase.java @@ -0,0 +1,82 @@ +/* + * File updated ~ 11 - 8 - 2024 ~ Leaf + */ + +package leaf.cosmere.common.items; + +import leaf.cosmere.api.text.TextHelper; +import leaf.cosmere.common.charge.IChargeable; +import net.minecraft.ChatFormatting; +import net.minecraft.network.chat.Component; +import net.minecraft.world.item.CreativeModeTab; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.level.Level; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import org.jetbrains.annotations.NotNull; + +import java.util.List; +import java.util.UUID; + +public abstract class ChargeableItemBase extends BaseItem implements IChargeable +{ + public ChargeableItemBase(Properties prop) + { + super(prop); + } + + public void addFilled(CreativeModeTab.Output output) + { + output.accept(new ItemStack(this)); + ItemStack fullPower = new ItemStack(this); + setCharge(fullPower, getMaxCharge(fullPower)); + output.accept(fullPower); + } + + @Override + public int getEntityLifespan(ItemStack itemStack, Level world) + { + return Integer.MAX_VALUE; + } + + @Override + @OnlyIn(Dist.CLIENT) + public void appendHoverText(ItemStack stack, Level worldIn, List tooltip, TooltipFlag flagIn) + { + String attunedPlayerName = getAttunedPlayerName(stack); + UUID attunedPlayer = getAttunedPlayer(stack); + if (attunedPlayer != null) + { + tooltip.add(TextHelper.createText(attunedPlayerName)); + } + tooltip.add(TextHelper.createText(String.format("%s/%s", getCharge(stack), getMaxCharge(stack))).withStyle(ChatFormatting.GRAY)); + } + + @Override + public boolean isBarVisible(@NotNull ItemStack stack) + { + return getCharge(stack) > 1; + } + + @Override + public int getBarWidth(@NotNull ItemStack stack) + { + int maxCharge = getMaxCharge(stack); + int charge = getCharge(stack); + + return getBarWidth(charge, maxCharge); + } + + @Override + public int getBarColor(@NotNull ItemStack stack) + { + return getBarColour(getCharge(stack), getMaxCharge(stack)); + } + + @Override + public boolean isFoil(@NotNull ItemStack stack) + { + return getCharge(stack) > 0; + } +} diff --git a/src/main/java/leaf/cosmere/common/items/ChargeableMetalCurioItem.java b/src/main/java/leaf/cosmere/common/items/ChargeableMetalCurioItem.java new file mode 100644 index 000000000..7bf5d4d31 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/items/ChargeableMetalCurioItem.java @@ -0,0 +1,92 @@ +/* + * File updated ~ 10 - 8 - 2024 ~ Leaf + */ + +package leaf.cosmere.common.items; + +import leaf.cosmere.api.Constants; +import leaf.cosmere.api.CosmereAPI; +import leaf.cosmere.api.IHasMetalType; +import leaf.cosmere.api.Metals; +import leaf.cosmere.api.manifestation.Manifestation; +import leaf.cosmere.common.cap.entity.SpiritwebCapability; +import leaf.cosmere.common.properties.PropTypes; +import net.minecraft.network.chat.Component; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.ai.attributes.Attribute; +import net.minecraft.world.entity.ai.attributes.AttributeInstance; +import net.minecraft.world.item.ItemStack; +import top.theillusivec4.curios.api.SlotContext; +import top.theillusivec4.curios.api.type.capability.ICurioItem; + +import java.util.List; + +public class ChargeableMetalCurioItem extends InvestableItemBase implements IHasMetalType, ICurioItem +{ + private final Metals.MetalType metalType; + + public ChargeableMetalCurioItem(Metals.MetalType metalType) + { + super(PropTypes.Items.ONE.get().rarity(metalType.getRarity())); + this.metalType = metalType; + } + + @Override + public Metals.MetalType getMetalType() + { + return this.metalType; + } + + + //@Override + //public boolean showAttributesTooltip(String identifier, ItemStack stack) + //{ + // return false; + //} + + @Override + public List getAttributesTooltip(List tooltips, ItemStack stack) + { + return ICurioItem.super.getAttributesTooltip(tooltips, stack); + } + + @Override + public boolean makesPiglinsNeutral(SlotContext slotContext, ItemStack stack) + { + return makesPiglinsNeutral(stack, slotContext.entity()); + } + + @Override + public boolean makesPiglinsNeutral(ItemStack stack, LivingEntity wearer) + { + return this.metalType == Metals.MetalType.GOLD; + } + + @Override + public void onUnequip(SlotContext slotContext, ItemStack newStack, ItemStack stack) + { + ICurioItem.super.onUnequip(slotContext, newStack, stack); + + //Clear any nicrosil feruchemy based powers + if (this.metalType == Metals.MetalType.NICROSIL) + { + SpiritwebCapability.get(slotContext.entity()).ifPresent(data -> + { + for (Manifestation manifestation : CosmereAPI.manifestationRegistry()) + { + Attribute attribute = manifestation.getAttribute(); + if (attribute == null) + { + continue; + } + + final AttributeInstance attributeInstance = data.getLiving().getAttribute(attribute); + if (attributeInstance != null) + { + attributeInstance.removeModifier(Constants.NBT.FERU_NICROSIL_UUID); + } + } + }); + } + } +} diff --git a/src/main/java/leaf/cosmere/common/items/GodMetalAlloyNuggetItem.java b/src/main/java/leaf/cosmere/common/items/GodMetalAlloyNuggetItem.java new file mode 100644 index 000000000..5f5ecfdbe --- /dev/null +++ b/src/main/java/leaf/cosmere/common/items/GodMetalAlloyNuggetItem.java @@ -0,0 +1,156 @@ +package leaf.cosmere.common.items; + +import leaf.cosmere.api.IGrantsBaseAttributes; +import leaf.cosmere.api.IHasSize; +import leaf.cosmere.api.Manifestations; +import leaf.cosmere.api.Metals; +import leaf.cosmere.common.cap.entity.SpiritwebCapability; +import leaf.cosmere.common.util.CosmereAttributeUtils; +import net.minecraft.ChatFormatting; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.MutableComponent; +import net.minecraft.network.chat.Style; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.ai.attributes.Attribute; +import net.minecraft.world.entity.ai.attributes.RangedAttribute; +import net.minecraft.world.item.CreativeModeTab; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Rarity; +import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.level.Level; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; + +import java.util.ArrayList; +import java.util.List; + +import static leaf.cosmere.common.util.CosmereAttributeUtils.grantBaseAttribute; + +public class GodMetalAlloyNuggetItem extends AlloyNuggetItem implements IHasSize, IGrantsBaseAttributes +{ + public static int MIN_SIZE = 1; + public static int MAX_SIZE = 16; + + public GodMetalAlloyNuggetItem(Metals.MetalType metalType, Metals.MetalType alloyedMetalType) + { + + super(metalType, alloyedMetalType); + } + + public int getMinSize() + { + return MIN_SIZE; + } + + public int getMaxSize() + { + return MAX_SIZE; + } + + public void addFilled(CreativeModeTab.Output output, int size) + { + ItemStack itemStack = new ItemStack(this); + writeMetalAlloySizeNbtData(itemStack, size); + output.accept(itemStack); + } + + @Override + @OnlyIn(Dist.CLIENT) + public void appendHoverText(ItemStack stack, Level worldIn, List tooltip, TooltipFlag flagIn) + { + Integer size = readMetalAlloySizeNbtData(stack); + + MutableComponent metalListComponent = Component.empty(); + metalListComponent.append(Component.translatable(this.getMetalType().getTranslationKey()) + .withStyle(Style.EMPTY.withColor(this.getMetalType().getColorValue()))); + + metalListComponent.append(Component.literal(" / ").withStyle(ChatFormatting.WHITE)); + metalListComponent.append(Component.translatable(alloyedMetalType.getTranslationKey()) + .withStyle(Style.EMPTY.withColor(alloyedMetalType.getColorValue()))); + + tooltip.add(metalListComponent); + tooltip.add(Component.literal("Size: ").withStyle(ChatFormatting.WHITE).append( + Component.literal(size + "/" + MAX_SIZE).withStyle(ChatFormatting.GRAY))); + + ArrayList attributes = determineBaseAttributes(stack); + + if (!attributes.isEmpty() & size != null) + { + tooltip.add(Component.empty()); + tooltip.add(Component.literal("When consumed:").withStyle(ChatFormatting.GOLD)); + for (Attribute attribute : attributes) + { + tooltip.add(Component.literal("+" + size + " ").append( + Component.translatable(attribute.getDescriptionId())) + .withStyle(ChatFormatting.BLUE)); + } + } + } + + @Override + public Rarity getRarity(ItemStack itemStack) + { + Integer size = readMetalAlloySizeNbtData(itemStack); + if (size == null) + { + return Rarity.COMMON; + } + + if (size <= 8) + { + return Rarity.UNCOMMON; + } + else if (size == MAX_SIZE) + { + return Rarity.EPIC; + } + return Rarity.RARE; + } + + public ArrayList determineBaseAttributes(ItemStack itemStack) + { + ArrayList attributes = new ArrayList<>(); + + if (this.getMetalType() == Metals.MetalType.LERASIUM) + { + Attribute attribute = CosmereAttributeUtils.getAttribute(Manifestations.ManifestationTypes.ALLOMANCY, alloyedMetalType.getID()); + if (attribute != null) + { + attributes.add(attribute); + } + } + else if (this.getMetalType() == Metals.MetalType.LERASATIUM) + { + Attribute attribute = CosmereAttributeUtils.getAttribute(Manifestations.ManifestationTypes.FERUCHEMY, alloyedMetalType.getID()); + if (attribute != null) + { + attributes.add(attribute); + } + } + return attributes; + } + + @Override + public void grantBaseAttributes(LivingEntity livingEntity, ArrayList attributes, int strength) + { + SpiritwebCapability.get(livingEntity).ifPresent(iSpiritweb -> + { + SpiritwebCapability spiritweb = (SpiritwebCapability) iSpiritweb; + + for (Attribute attribute : attributes) + { + if (!(attribute instanceof RangedAttribute rangedAttribute)) + { + return; + } + grantBaseAttribute(livingEntity, rangedAttribute, strength); + } + + if (livingEntity instanceof ServerPlayer serverPlayer) + { + spiritweb.syncToClients(serverPlayer); + } + }); + } +} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/common/items/GodMetalNuggetItem.java b/src/main/java/leaf/cosmere/common/items/GodMetalNuggetItem.java new file mode 100644 index 000000000..e404e38ac --- /dev/null +++ b/src/main/java/leaf/cosmere/common/items/GodMetalNuggetItem.java @@ -0,0 +1,178 @@ +package leaf.cosmere.common.items; + +import leaf.cosmere.api.*; +import leaf.cosmere.common.cap.entity.SpiritwebCapability; +import leaf.cosmere.common.util.CosmereAttributeUtils; +import net.minecraft.ChatFormatting; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.chat.Component; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.SlotAccess; +import net.minecraft.world.entity.ai.attributes.Attribute; +import net.minecraft.world.entity.ai.attributes.RangedAttribute; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.inventory.ClickAction; +import net.minecraft.world.inventory.Slot; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.level.Level; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; + +import java.util.ArrayList; +import java.util.List; + +import static leaf.cosmere.common.util.CosmereAttributeUtils.grantBaseAttribute; + +public class GodMetalNuggetItem extends MetalNuggetItem implements IHasSize, IGrantsBaseAttributes +{ + public static int MIN_SIZE = 1; + public static int MAX_SIZE = 16; + + public GodMetalNuggetItem(Metals.MetalType metalType) + { + super(metalType); + } + + @Override + public int getMaxSize() + { + return MAX_SIZE; + } + + @Override + public int getMinSize() + { + return MIN_SIZE; + } + + @Override + public void onCraftedBy(ItemStack itemStack, Level level, Player player) + { + CompoundTag nbt = itemStack.getOrCreateTag(); + if (!nbt.contains("nuggetSize")) + { + writeMetalAlloySizeNbtData(itemStack, getMaxSize()); + } + } + + // God Metals shouldn't hurt + @Override + public ItemStack finishUsingItem(ItemStack itemstack, Level pLevel, LivingEntity pLivingEntity) + { + if (pLevel.isClientSide) + { + return itemstack; + } + + if (pLivingEntity instanceof Player player && !player.isCreative()) + { + itemstack.shrink(1); + } + + return itemstack; + } + + @Override + public boolean hasCraftingRemainingItem(ItemStack stack) + { + return true; + } + + @Override + public ItemStack getCraftingRemainingItem(ItemStack stack) + { + return ItemStack.EMPTY; + } + + @Override + public boolean isFoil(ItemStack itemStack) + { + // God Metals should have foil + return super.isFoil(itemStack); + } + + @Override + @OnlyIn(Dist.CLIENT) + public void appendHoverText(ItemStack stack, Level worldIn, List tooltip, TooltipFlag flagIn) + { + Integer size = readMetalAlloySizeNbtData(stack); + + tooltip.add(Component.literal("Size: ").withStyle(ChatFormatting.WHITE).append( + Component.literal(size + "/" + MAX_SIZE).withStyle(ChatFormatting.GRAY))); + + ArrayList attributes = determineBaseAttributes(stack); + + if (!attributes.isEmpty()) + { + tooltip.add(Component.empty()); + tooltip.add(Component.literal("When consumed:").withStyle(ChatFormatting.GOLD)); + for (Attribute attribute : attributes) + { + tooltip.add(Component.literal("+" + size + " ").append( + Component.translatable(attribute.getDescriptionId())) + .withStyle(ChatFormatting.BLUE)); + } + } + } + + public boolean overrideOtherStackedOnMe(ItemStack pStack, ItemStack pOther, Slot pSlot, ClickAction pAction, Player pPlayer, SlotAccess pAccess) + { + return false; + } + + @Override + public ArrayList determineBaseAttributes(ItemStack itemStack) + { + ArrayList attributes = new ArrayList<>(); + + if (this.getMetalType() == Metals.MetalType.LERASIUM) + { + for (Metals.MetalType metal : EnumUtils.METAL_TYPES) + { + Attribute attribute = CosmereAttributeUtils.getAttribute(Manifestations.ManifestationTypes.ALLOMANCY, metal.getID()); + if (attribute != null) + { + attributes.add(attribute); + } + } + } + else if (this.getMetalType() == Metals.MetalType.LERASATIUM) + { + for (Metals.MetalType metal : EnumUtils.METAL_TYPES) + { + Attribute attribute = CosmereAttributeUtils.getAttribute(Manifestations.ManifestationTypes.FERUCHEMY, metal.getID()); + if (attribute != null) + { + attributes.add(attribute); + } + } + } + return attributes; + } + + @Override + public void grantBaseAttributes(LivingEntity livingEntity, ArrayList attributes, int strength) + { + SpiritwebCapability.get(livingEntity).ifPresent(iSpiritweb -> + { + SpiritwebCapability spiritweb = (SpiritwebCapability) iSpiritweb; + + for (Attribute attribute : attributes) + { + if (!(attribute instanceof RangedAttribute rangedAttribute)) + { + return; + } + grantBaseAttribute(livingEntity, rangedAttribute, strength); + } + + if (livingEntity instanceof ServerPlayer serverPlayer) + { + spiritweb.syncToClients(serverPlayer); + } + }); + } + +} diff --git a/src/main/java/leaf/cosmere/common/items/GuideItem.java b/src/main/java/leaf/cosmere/common/items/GuideItem.java new file mode 100644 index 000000000..c0400c30d --- /dev/null +++ b/src/main/java/leaf/cosmere/common/items/GuideItem.java @@ -0,0 +1,118 @@ +/* + * File updated ~ 11 - 1 - 2025 ~ Leaf + */ + +package leaf.cosmere.common.items; + +import leaf.cosmere.api.Constants; +import leaf.cosmere.api.text.TextHelper; +import leaf.cosmere.common.compat.patchouli.PatchouliCompat; +import leaf.cosmere.common.properties.PropTypes; +import leaf.cosmere.common.registry.ItemsRegistry; +import net.minecraft.ChatFormatting; +import net.minecraft.network.chat.Component; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Rarity; +import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.level.ClipContext; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import vazkii.patchouli.api.PatchouliAPI; + +import javax.annotation.Nonnull; +import java.util.List; + +public class GuideItem extends Item +{ + + public GuideItem() + { + super(PropTypes.Items.ONE.get().rarity(Rarity.RARE)); + } + + public static boolean isOpen() + { + return ItemsRegistry.GUIDE.getRegistryName().equals(PatchouliAPI.get().getOpenBookGui()); + } + + + public static Component getTitle(ItemStack stack) + { + Component title = stack.getHoverName(); + + String akashicTomeNBT = "akashictome:displayName"; + if (stack.hasTag() && stack.getTag().contains(akashicTomeNBT)) + { + title = Component.Serializer.fromJson(stack.getTag().getString(akashicTomeNBT)); + } + + return title; + } + + // Random item to expose this as public + public static BlockHitResult doRayTrace(Level world, Player player, ClipContext.Fluid fluidMode) + { + return Item.getPlayerPOVHitResult(world, player, fluidMode); + } + + /* + @Override + public void fillItemGroup(@Nonnull ItemGroup tab, @Nonnull NonNullList list) { + if (isInGroup(tab)) { + list.add(new ItemStack(this)); + + } + } + */ + @Override + @OnlyIn(Dist.CLIENT) + public void appendHoverText(ItemStack stack, Level worldIn, List tooltip, TooltipFlag flagIn) + { + tooltip.add(getEdition().copy().withStyle(ChatFormatting.GRAY)); + } + + public static Component getEdition() + { + if (PatchouliCompat.PatchouliIsPresent()) + { + try + { + return PatchouliAPI.get().getSubtitle(ItemsRegistry.GUIDE.getRegistryName()); + } + catch (IllegalArgumentException e) + { + return Component.empty(); + } + } + else + { + return TextHelper.createTranslatedText(Constants.Strings.PATCHOULI_NOT_INSTALLED); + } + } + + @Nonnull + @Override + public InteractionResultHolder use(Level worldIn, Player playerIn, InteractionHand handIn) + { + ItemStack stack = playerIn.getItemInHand(handIn); + + if (!PatchouliCompat.PatchouliIsPresent()) + { + playerIn.sendSystemMessage(TextHelper.createTranslatedText(Constants.Strings.PATCHOULI_NOT_INSTALLED)); + } + else if (playerIn instanceof ServerPlayer player) + { + PatchouliAPI.get().openBookGUI(player, ItemsRegistry.GUIDE.getRegistryName()); + } + + return new InteractionResultHolder<>(InteractionResult.SUCCESS, stack); + } +} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/common/items/InvestableItemBase.java b/src/main/java/leaf/cosmere/common/items/InvestableItemBase.java new file mode 100644 index 000000000..4197497b8 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/items/InvestableItemBase.java @@ -0,0 +1,187 @@ +package leaf.cosmere.common.items; + +import leaf.cosmere.api.Constants; +import leaf.cosmere.api.IHasMetalType; +import leaf.cosmere.api.Manifestations; +import leaf.cosmere.api.Metals; +import leaf.cosmere.api.helpers.StackNBTHelper; +import leaf.cosmere.api.spiritweb.ISpiritweb; +import leaf.cosmere.api.text.TextHelper; +import leaf.cosmere.common.cap.entity.SpiritwebCapability; +import leaf.cosmere.common.config.CosmereConfigs; +import net.minecraft.ChatFormatting; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.Mth; +import net.minecraft.world.effect.MobEffect; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.item.ItemEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.level.Level; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.registries.ForgeRegistries; +import org.jetbrains.annotations.NotNull; + +import java.util.List; +import java.util.Optional; +import java.util.UUID; + +public abstract class InvestableItemBase extends BaseItem +{ + public InvestableItemBase(Properties prop) + { + super(prop); + } + + public IInfuseContainer getAsContainer(ItemStack stack) + { + return !InfusionContainer.get(stack).isPresent() ? null : InfusionContainer.get(stack).resolve().get(); + } + + @Override + public int getEntityLifespan(ItemStack itemStack, Level world) + { + return Integer.MAX_VALUE; + } + + @Override + @OnlyIn(Dist.CLIENT) + public void appendHoverText(ItemStack stack, Level worldIn, List tooltip, TooltipFlag flagIn) + { + String attunedPlayerName = getAttunedPlayerName(stack); + UUID attunedPlayer = getAttunedPlayer(stack); + if (attunedPlayer != null) + { + tooltip.add(TextHelper.createText(attunedPlayerName)); + } + tooltip.add(TextHelper.createText(String.format("%s/%s", getCharge(stack), getMaxCharge(stack))).withStyle(ChatFormatting.GRAY)); + } + + @Override + public boolean isBarVisible(@NotNull ItemStack stack) + { + return getCharge(stack) > 1; + } + + public int getCharge(ItemStack stack) + { + return getAsContainer(stack).currentBEU(); + } + + public int getMaxCharge(ItemStack stack) + { + final int maxCharge = CosmereConfigs.SERVER_CONFIG.CHARGEABLE_MAX_VALUE.get(); + return Mth.floor(maxCharge * getMaxChargeModifier()) * stack.getCount(); + } + + public float getMaxChargeModifier() + { + return 1; + } + + public boolean trySetAttunedPlayer(ItemStack itemStack, Player entity) + { + if (itemStack.getItem() instanceof IHasMetalType metalType) + { + UUID attunedPlayerID = getAttunedPlayer(itemStack); + UUID playerID = entity.getUUID(); + boolean noAttunedPlayer = attunedPlayerID == null; + + //only allow unkeyed metalminds if they aren't aluminum + if (noAttunedPlayer && metalType.getMetalType() != Metals.MetalType.ALUMINUM) + { + //No attuned player! Check to see whether they are storing identity + boolean isStoringIdentity = false; + { + Optional data = SpiritwebCapability.get(entity).filter(obj -> true); + if (data.isPresent()) { + isStoringIdentity = Manifestations.ManifestationTypes.FERUCHEMY.getManifestation(Metals.MetalType.ALUMINUM.getID()).getMode(data.get()) > 0; + } + } + + //if they are + if (isStoringIdentity) + { + //then set the metalmind to "unsealed". Any feruchemist with access to that power can use the metalmind + StackNBTHelper.setUuid(itemStack, Constants.NBT.ATTUNED_PLAYER, Constants.NBT.UNKEYED_UUID); + StackNBTHelper.setString(itemStack, Constants.NBT.ATTUNED_PLAYER_NAME, "Unkeyed"); // todo translation + return true; + + } + } + + //if theres no attuned player on the metalmind + //or if the player is attuned to the metalmind + //or if the metalmind is unsealed (anyone can access) + if (noAttunedPlayer || attunedPlayerID.compareTo(playerID) == 0 || attunedPlayerID.compareTo(Constants.NBT.UNKEYED_UUID) == 0) + { + if (noAttunedPlayer && getCharge(itemStack) > 0) + { + setAttunedPlayer(itemStack, entity); + setAttunedPlayerName(itemStack, entity); + } + //auto success if that player is already attuned + return true; + } + + } + return false; + } + + private void setAttunedPlayer(ItemStack itemStack, Player entity) + { + StackNBTHelper.setUuid(itemStack, Constants.NBT.ATTUNED_PLAYER, entity.getUUID()); + } + + protected UUID getAttunedPlayer(ItemStack itemStack) + { + return StackNBTHelper.getUuid(itemStack, Constants.NBT.ATTUNED_PLAYER); + } + + private void setAttunedPlayerName(ItemStack itemStack, Player entity) + { + String playerName = entity.getDisplayName().getString(); + StackNBTHelper.setString(itemStack, Constants.NBT.ATTUNED_PLAYER_NAME, playerName); + } + + protected String getAttunedPlayerName(ItemStack itemStack) + { + return StackNBTHelper.getString(itemStack, Constants.NBT.ATTUNED_PLAYER_NAME, ""); + } + + public boolean getPlayerIsAttuned(ItemStack itemStack, Player entity) + { + //todo clean up + final MobEffect aluminumStoreEffect = ForgeRegistries.MOB_EFFECTS.getValue(new ResourceLocation("feruchemy", "storing_" + Metals.MetalType.ALUMINUM.getName())); + assert aluminumStoreEffect != null; + MobEffectInstance storingIdentityEffect = entity.getEffect(aluminumStoreEffect); + boolean noIdentityPlayer = storingIdentityEffect != null && storingIdentityEffect.getDuration() > 0; + + UUID itemAttunedPlayerUUID = getAttunedPlayer(itemStack); + //null means not attuned at all, so can assume player is attuned with it + return noIdentityPlayer || itemAttunedPlayerUUID == null || itemAttunedPlayerUUID == entity.getUUID(); + } + @Override + public boolean onEntityItemUpdate(ItemStack stack, ItemEntity entityItem) + { + InvestitureContainer.get(stack).ifPresent(cap -> + { + cap.setEntityAssociate(entityItem); + }); + return super.onEntityItemUpdate(stack, entityItem); + } + + @Override + public void inventoryTick(ItemStack stack, Level level, Entity entity, int slot, boolean selected) + { + InvestitureContainer.get(stack).ifPresent(cap -> + { + cap.setEntityAssociate(entity); + }); + super.inventoryTick(stack, level, entity, slot, selected); + } +} diff --git a/src/main/java/leaf/cosmere/common/items/MetalIngotItem.java b/src/main/java/leaf/cosmere/common/items/MetalIngotItem.java new file mode 100644 index 000000000..6956a0c29 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/items/MetalIngotItem.java @@ -0,0 +1,25 @@ +/* + * File updated ~ 24 - 4 - 2021 ~ Leaf + */ + +package leaf.cosmere.common.items; + +import leaf.cosmere.api.Metals; +import net.minecraft.world.item.ItemStack; + +public class MetalIngotItem extends MetalItem +{ + + public MetalIngotItem(Metals.MetalType metalType) + { + super(metalType); + } + + + @Override + public boolean isPiglinCurrency(ItemStack stack) + { + final Metals.MetalType metalType = this.getMetalType(); + return metalType == Metals.MetalType.GOLD || metalType == Metals.MetalType.ELECTRUM; + } +} diff --git a/src/main/java/leaf/cosmere/common/items/MetalItem.java b/src/main/java/leaf/cosmere/common/items/MetalItem.java new file mode 100644 index 000000000..a6d773ef5 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/items/MetalItem.java @@ -0,0 +1,41 @@ +/* + * File updated ~ 10 - 8 - 2024 ~ Leaf + */ + +package leaf.cosmere.common.items; + +import leaf.cosmere.api.IHasMetalType; +import leaf.cosmere.api.Metals; +import leaf.cosmere.common.properties.PropTypes; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; + +public class MetalItem extends BaseItem implements IHasMetalType +{ + private final Metals.MetalType metalType; + + public MetalItem(Metals.MetalType metalType) + { + super(PropTypes.Items.SIXTY_FOUR.get().rarity(metalType.getRarity())); + + this.metalType = metalType; + } + + + /** + * Returns true if the item can be used on the given entity, e.g. shears on sheep. + */ + public InteractionResult interactLivingEntity(ItemStack stack, Player playerIn, LivingEntity target, InteractionHand hand) + { + return InteractionResult.PASS; + } + + @Override + public Metals.MetalType getMetalType() + { + return this.metalType; + } +} diff --git a/src/main/java/leaf/cosmere/common/items/MetalNuggetItem.java b/src/main/java/leaf/cosmere/common/items/MetalNuggetItem.java new file mode 100644 index 000000000..77287da0b --- /dev/null +++ b/src/main/java/leaf/cosmere/common/items/MetalNuggetItem.java @@ -0,0 +1,81 @@ +/* + * File updated ~ 10 - 8 - 2024 ~ Leaf + */ + +package leaf.cosmere.common.items; + +import leaf.cosmere.api.IGrantsBaseAttributes; +import leaf.cosmere.api.Metals; +import leaf.cosmere.common.registry.CosmereDamageTypesRegistry; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.UseAnim; +import net.minecraft.world.level.Level; + +import javax.annotation.Nonnull; + +public class MetalNuggetItem extends MetalItem +{ + public MetalNuggetItem(Metals.MetalType metalType) + { + super(metalType); + } + + + @Nonnull + @Override + public UseAnim getUseAnimation(ItemStack stack) + { + return UseAnim.EAT; + } + + + @Override + public int getUseDuration(ItemStack stack) + { + //be annoying enough that people prefer metal vials + return 16; + } + + @Nonnull + @Override + public InteractionResultHolder use(Level world, Player player, @Nonnull InteractionHand hand) + { + ItemStack stack = player.getItemInHand(hand); + + // Skip eating if it is a god metal, but not if it gives you powers + if (!(stack.getItem() instanceof IGrantsBaseAttributes) && this.getMetalType().isGodMetal()) + { + return InteractionResultHolder.pass(stack); + } + + if (player.canEat(true)) + { + player.startUsingItem(hand); + return InteractionResultHolder.consume(stack); + } + return InteractionResultHolder.pass(stack); + } + + @Override + public ItemStack finishUsingItem(ItemStack itemstack, Level pLevel, LivingEntity pLivingEntity) + { + if (pLevel.isClientSide) + { + return itemstack; + } + + if (pLivingEntity instanceof Player player && !player.isCreative()) + { + itemstack.shrink(1); + } + + pLivingEntity.hurt(CosmereDamageTypesRegistry.EAT_METAL.source(pLivingEntity.level()), 1); + + return itemstack; + } + +} diff --git a/src/main/java/leaf/cosmere/common/items/MetalRawOreItem.java b/src/main/java/leaf/cosmere/common/items/MetalRawOreItem.java new file mode 100644 index 000000000..d89f4e019 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/items/MetalRawOreItem.java @@ -0,0 +1,16 @@ +/* + * File updated ~ 29 - 4 - 2021 ~ Leaf + */ + +package leaf.cosmere.common.items; + +import leaf.cosmere.api.Metals; + +public class MetalRawOreItem extends MetalItem +{ + public MetalRawOreItem(Metals.MetalType metalType) + { + super(metalType); + } + +} diff --git a/src/main/java/leaf/cosmere/common/loot/FortuneBonusModifier.java b/src/main/java/leaf/cosmere/common/loot/FortuneBonusModifier.java new file mode 100644 index 000000000..c0780a0a6 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/loot/FortuneBonusModifier.java @@ -0,0 +1,103 @@ +/* + * File updated ~ 10 - 8 - 2024 ~ Leaf + */ + +package leaf.cosmere.common.loot; + +import com.google.common.base.Suppliers; +import com.mojang.serialization.Codec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import it.unimi.dsi.fastutil.objects.ObjectArrayList; +import leaf.cosmere.api.helpers.EntityHelper; +import leaf.cosmere.common.registry.AttributesRegistry; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.enchantment.Enchantment; +import net.minecraft.world.item.enchantment.EnchantmentHelper; +import net.minecraft.world.item.enchantment.Enchantments; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.storage.loot.LootContext; +import net.minecraft.world.level.storage.loot.LootParams; +import net.minecraft.world.level.storage.loot.LootTable; +import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets; +import net.minecraft.world.level.storage.loot.parameters.LootContextParams; +import net.minecraft.world.level.storage.loot.predicates.LootItemCondition; +import net.minecraft.world.phys.Vec3; +import net.minecraftforge.common.loot.IGlobalLootModifier; +import net.minecraftforge.common.loot.LootModifier; +import org.jetbrains.annotations.NotNull; + +import java.util.Map; +import java.util.function.Supplier; + + +//Thank you Curios for the example ! +// modified to work with the chromium feruchemy effects. + +public class FortuneBonusModifier extends LootModifier +{ + protected FortuneBonusModifier(LootItemCondition[] conditions) + { + super(conditions); + } + + public static final Supplier> CODEC = Suppliers.memoize(() -> + RecordCodecBuilder.create(inst -> codecStart(inst).apply(inst, FortuneBonusModifier::new))); + + @Override + public Codec codec() + { + return CODEC.get(); + } + + @Override + protected @NotNull ObjectArrayList doApply(ObjectArrayList generatedLoot, LootContext context) + { + final String hasCosmereFortuneBonus = "HasCosmereFortuneBonus"; + + ItemStack tool = context.getParamOrNull(LootContextParams.TOOL); + + if (tool != null && (!tool.hasTag() || tool.getTag() == null || !tool.getTag().getBoolean(hasCosmereFortuneBonus))) + { + Entity entity = context.getParamOrNull(LootContextParams.THIS_ENTITY); + BlockState blockState = context.getParamOrNull(LootContextParams.BLOCK_STATE); + Vec3 origin = context.getParamOrNull(LootContextParams.ORIGIN); + + if (blockState != null && entity instanceof LivingEntity livingEntity) + { + int totalFortuneBonus = (int) EntityHelper.getAttributeValue(livingEntity, AttributesRegistry.COSMERE_FORTUNE.getAttribute()); + + //bonus for tapping amplifier. + + if (totalFortuneBonus != 0) + { + ItemStack fakeTool = tool.isEmpty() ? new ItemStack(Items.BARRIER) : tool.copy(); + + fakeTool.getOrCreateTag().putBoolean(hasCosmereFortuneBonus, true); + + Map enchantments = EnchantmentHelper.getEnchantments(fakeTool); + enchantments.put(Enchantments.BLOCK_FORTUNE, EnchantmentHelper.getTagEnchantmentLevel(Enchantments.BLOCK_FORTUNE, fakeTool) + totalFortuneBonus); + + EnchantmentHelper.setEnchantments(enchantments, fakeTool); + + LootParams lootparams = (new LootParams.Builder(context.getLevel())) + .withParameter(LootContextParams.ORIGIN, origin) + .withParameter(LootContextParams.THIS_ENTITY, entity) + .withParameter(LootContextParams.BLOCK_STATE, blockState) + .withParameter(LootContextParams.TOOL, fakeTool) + .create(LootContextParamSets.BLOCK); + + + LootTable lootTable = context.getLevel().getServer().getLootData().getLootTable(blockState.getBlock().getLootTable()); + + return lootTable.getRandomItems(lootparams); + } + } + } + + //otherwise return the context that was passed in. no modification needed. + return generatedLoot; + } +} diff --git a/src/main/java/leaf/cosmere/common/loot/LootHandler.java b/src/main/java/leaf/cosmere/common/loot/LootHandler.java new file mode 100644 index 000000000..144284eda --- /dev/null +++ b/src/main/java/leaf/cosmere/common/loot/LootHandler.java @@ -0,0 +1,70 @@ +/* + * File updated ~ 29 - 7 - 2021 ~ Leaf + * Thank you botania! Pretty much directly copied from botania as this is so much easier to work with! + */ +package leaf.cosmere.common.loot; + +import leaf.cosmere.common.Cosmere; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.storage.loot.LootPool; +import net.minecraft.world.level.storage.loot.entries.LootPoolEntryContainer; +import net.minecraft.world.level.storage.loot.entries.LootTableReference; +import net.minecraft.world.level.storage.loot.providers.number.UniformGenerator; +import net.minecraftforge.event.LootTableLoadEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; + +@Mod.EventBusSubscriber(modid = Cosmere.MODID, bus = Mod.EventBusSubscriber.Bus.FORGE) +public final class LootHandler +{ + + @SubscribeEvent + public static void lootLoad(LootTableLoadEvent evt) + { + String prefix = "minecraft:chests/"; + String name = evt.getName().toString(); + + if (name.startsWith(prefix)) + { + String file = name.substring(name.indexOf(prefix) + prefix.length()); + switch (file) + { + case "abandoned_mineshaft": + case "bastion_treasure": + case "bastion_other": + case "bastion_bridge": + case "desert_pyramid": + case "end_city_treasure": + case "jungle_temple": + case "simple_dungeon": + case "spawn_bonus_chest": + case "stronghold_corridor": + case "stronghold_crossing": + case "stronghold_library": + case "village_blacksmith": + case "woodland_mansion": + evt.getTable().addPool(getInjectPool(file)); + break; + default: + break; + } + } + } + + public static LootPool getInjectPool(String entryName) + { + return LootPool.lootPool() + .add(getInjectEntry(entryName, 1)) + .setBonusRolls(UniformGenerator.between(0, 1)) + .name("cosmere_inject") + .build(); + } + + private static LootPoolEntryContainer.Builder getInjectEntry(String name, int weight) + { + ResourceLocation table = Cosmere.rl("inject/" + name); + return LootTableReference.lootTableReference(table) + .setWeight(weight); + } + +} diff --git a/src/main/java/leaf/cosmere/common/loot/RandomiseMetalTypeLootFunction.java b/src/main/java/leaf/cosmere/common/loot/RandomiseMetalTypeLootFunction.java new file mode 100644 index 000000000..62de87963 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/loot/RandomiseMetalTypeLootFunction.java @@ -0,0 +1,87 @@ +/* + * File updated ~ 26 - 3 - 2022 ~ Leaf + */ + +package leaf.cosmere.common.loot; + +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonObject; +import leaf.cosmere.api.IHasMetalType; +import leaf.cosmere.common.registry.LootFunctionRegistry; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.storage.loot.LootContext; +import net.minecraft.world.level.storage.loot.functions.LootItemConditionalFunction; +import net.minecraft.world.level.storage.loot.functions.LootItemFunctionType; +import net.minecraft.world.level.storage.loot.predicates.LootItemCondition; +import net.minecraftforge.registries.ForgeRegistries; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +public class RandomiseMetalTypeLootFunction extends LootItemConditionalFunction +{ + + protected RandomiseMetalTypeLootFunction(LootItemCondition[] conditionsIn) + { + super(conditionsIn); + } + + + @Override + public LootItemFunctionType getType() + { + return LootFunctionRegistry.RANDOMISE_METALTYPE.get(); + } + + @Override + protected ItemStack run(ItemStack stack, LootContext lootContext) + { + final Item item = stack.getItem(); + if (!(item instanceof IHasMetalType)) + { + return stack; + } + + List itemsOfClass = new ArrayList<>(); + for (Item value : ForgeRegistries.ITEMS.getValues()) + { + if (value.getClass().equals(item.getClass())) + { + IHasMetalType iHasMetalType = (IHasMetalType) value; + switch (iHasMetalType.getMetalType()) + { + case LERASIUM: + case HARMONIUM: + case LERASATIUM: + break; + default: + itemsOfClass.add(value); + break; + } + } + } + + Collections.shuffle(itemsOfClass); + var random = itemsOfClass.stream().findFirst(); + if (random.isPresent()) + { + CompoundTag nbt = stack.getOrCreateTag().copy(); + stack = new ItemStack(random.get(), stack.getCount()); + stack.setTag(nbt); + } + + return stack; + } + + public static class Serializer extends LootItemConditionalFunction.Serializer + { + @Override + public RandomiseMetalTypeLootFunction deserialize(JsonObject jsonObject, JsonDeserializationContext deserializationContext, LootItemCondition[] lootConditions) + { + return new RandomiseMetalTypeLootFunction(lootConditions); + } + } +} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/common/network/BasePacketHandler.java b/src/main/java/leaf/cosmere/common/network/BasePacketHandler.java new file mode 100644 index 000000000..55a7fe284 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/network/BasePacketHandler.java @@ -0,0 +1,100 @@ +package leaf.cosmere.common.network; + +import leaf.cosmere.api.Version; +import net.minecraft.core.BlockPos; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraftforge.common.util.FakePlayer; +import net.minecraftforge.network.NetworkDirection; +import net.minecraftforge.network.NetworkRegistry; +import net.minecraftforge.network.PacketDistributor; +import net.minecraftforge.network.simple.SimpleChannel; + +import java.util.Optional; +import java.util.function.Function; + +public abstract class BasePacketHandler +{ + + protected static SimpleChannel createChannel(ResourceLocation name, Version version) + { + String protocolVersion = version.toString(); + return NetworkRegistry.ChannelBuilder.named(name) + .clientAcceptedVersions(protocolVersion::equals) + .serverAcceptedVersions(protocolVersion::equals) + .networkProtocolVersion(() -> protocolVersion) + .simpleChannel(); + } + + protected abstract SimpleChannel getChannel(); + + public abstract void initialize(); + + private int index = 0; + + protected void registerClientToServer(Class type, Function decoder) + { + registerMessage(type, decoder, NetworkDirection.PLAY_TO_SERVER); + } + + protected void registerServerToClient(Class type, Function decoder) + { + registerMessage(type, decoder, NetworkDirection.PLAY_TO_CLIENT); + } + + private void registerMessage(Class type, Function decoder, NetworkDirection networkDirection) + { + getChannel().registerMessage(index++, type, ICosmerePacket::encode, decoder, ICosmerePacket::handle, Optional.of(networkDirection)); + } + + + /** + * Sends a packet to the server.
+ * Must be called Client side. + */ + public void sendToServer(Object msg) + { + getChannel().sendToServer(msg); + } + + /** + * Send a packet to a specific player.
+ * Must be called Server side. + */ + public void sendTo(Object msg, ServerPlayer player) + { + if (!(player instanceof FakePlayer)) + { + getChannel().send(PacketDistributor.PLAYER.with(() -> player), msg); + } + } + + public void sendPacketToAll(Object packet) + { + getChannel().send(PacketDistributor.ALL.noArg(), packet); + } + + + public void sendToAllAround(Object mes, ResourceKey dim, BlockPos pos, int radius) + { + getChannel().send(PacketDistributor.NEAR.with(() -> new PacketDistributor.TargetPoint(pos.getX(), pos.getY(), pos.getZ(), radius, dim)), mes); + } + + public void sendToAllInWorld(Object mes, ServerLevel world) + { + getChannel().send(PacketDistributor.DIMENSION.with(world::dimension), mes); + } + + public void sendToTrackingTE(Object mes, BlockEntity te) + { + if (te != null && !te.getLevel().isClientSide) + { + getChannel().send(PacketDistributor.TRACKING_CHUNK.with(() -> te.getLevel().getChunkAt(te.getBlockPos())), mes); + } + } +} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/common/network/ICosmerePacket.java b/src/main/java/leaf/cosmere/common/network/ICosmerePacket.java new file mode 100644 index 000000000..0d62c9e0c --- /dev/null +++ b/src/main/java/leaf/cosmere/common/network/ICosmerePacket.java @@ -0,0 +1,23 @@ +package leaf.cosmere.common.network; + +import net.minecraft.network.FriendlyByteBuf; +import net.minecraftforge.network.NetworkEvent; + +import java.util.function.Supplier; + +public interface ICosmerePacket +{ + void handle(NetworkEvent.Context context); + + void encode(FriendlyByteBuf buffer); + + static void handle(PACKET message, Supplier ctx) + { + if (message != null) + { + NetworkEvent.Context context = ctx.get(); + context.enqueueWork(() -> message.handle(context)); + context.setPacketHandled(true); + } + } +} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/common/network/NetworkPacketHandler.java b/src/main/java/leaf/cosmere/common/network/NetworkPacketHandler.java new file mode 100644 index 000000000..5a84312ce --- /dev/null +++ b/src/main/java/leaf/cosmere/common/network/NetworkPacketHandler.java @@ -0,0 +1,40 @@ +/* + * File updated ~ 24 - 4 - 2021 ~ Leaf + * + * Special thank you to the New Tardis Mod team. + * That mod taught me how to do proper syncing between server and client. + * https://tardis-mod.com/books/home/page/links#bkmrk-source + */ + +package leaf.cosmere.common.network; + +import leaf.cosmere.common.Cosmere; +import leaf.cosmere.common.network.packets.*; +import net.minecraftforge.network.simple.SimpleChannel; + +public class NetworkPacketHandler extends BasePacketHandler +{ + private final SimpleChannel NETWORK_CHANNEL = createChannel(Cosmere.rl(Cosmere.MODID), Cosmere.instance.versionNumber); + + @Override + protected SimpleChannel getChannel() + { + return NETWORK_CHANNEL; + } + + @Override + public void initialize() + { + //server to client + registerServerToClient(SyncPlayerSpiritwebMessage.class, SyncPlayerSpiritwebMessage::decode); + + //client to server + registerClientToServer(DeactivateManifestationsMessage.class, DeactivateManifestationsMessage::new); + registerClientToServer(ChangeManifestationModeMessage.class, ChangeManifestationModeMessage::decode); + registerClientToServer(ChangeSelectedManifestationMessage.class, ChangeSelectedManifestationMessage::decode); + registerClientToServer(SetSelectedManifestationMessage.class, SetSelectedManifestationMessage::decode); + + } + + +} diff --git a/src/main/java/leaf/cosmere/common/network/packets/ChangeManifestationModeMessage.java b/src/main/java/leaf/cosmere/common/network/packets/ChangeManifestationModeMessage.java new file mode 100644 index 000000000..6543a3bc2 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/network/packets/ChangeManifestationModeMessage.java @@ -0,0 +1,70 @@ +/* + * File updated ~ 24 - 4 - 2021 ~ Leaf + */ + +package leaf.cosmere.common.network.packets; + +import leaf.cosmere.api.CosmereAPI; +import leaf.cosmere.api.manifestation.Manifestation; +import leaf.cosmere.common.cap.entity.SpiritwebCapability; +import leaf.cosmere.common.network.ICosmerePacket; +import leaf.cosmere.common.registry.ManifestationRegistry; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.server.MinecraftServer; +import net.minecraft.server.level.ServerPlayer; +import net.minecraftforge.network.NetworkEvent; + +public class ChangeManifestationModeMessage implements ICosmerePacket +{ + Manifestation manifestation; + int modifier; + + public ChangeManifestationModeMessage(Manifestation manifestation, int dir) + { + this.manifestation = manifestation; + this.modifier = dir; + } + + @Override + public void handle(NetworkEvent.Context context) + { + ServerPlayer sender = context.getSender(); + MinecraftServer server = sender.getServer(); + server.submitAsync(() -> SpiritwebCapability.get(sender).ifPresent((data) -> + { + int finalModifier = manifestation.getModeModifier(data, manifestation, modifier); + if (finalModifier == 1) + { + data.nextMode(manifestation); + } + else if (finalModifier == -1) + { + data.previousMode(manifestation); + } + else if (finalModifier != 0) + { + int newMode = finalModifier + manifestation.getMode(data); + data.setMode(manifestation, newMode); + } + + data.syncToClients(null); + })); + context.setPacketHandled(true); + } + + @Override + public void encode(FriendlyByteBuf buf) + { + String namespace = manifestation.getRegistryName().toString(); + buf.writeUtf(namespace); + buf.writeInt(modifier); + } + + public static ChangeManifestationModeMessage decode(FriendlyByteBuf buf) + { + String location = buf.readUtf(); + final int dir = buf.readInt(); + return new ChangeManifestationModeMessage(ManifestationRegistry.fromID(location), dir); + } + +} diff --git a/src/main/java/leaf/cosmere/common/network/packets/ChangeSelectedManifestationMessage.java b/src/main/java/leaf/cosmere/common/network/packets/ChangeSelectedManifestationMessage.java new file mode 100644 index 000000000..01ea202a5 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/network/packets/ChangeSelectedManifestationMessage.java @@ -0,0 +1,48 @@ +/* + * File updated ~ 24 - 4 - 2021 ~ Leaf + */ + +package leaf.cosmere.common.network.packets; + +import leaf.cosmere.common.cap.entity.SpiritwebCapability; +import leaf.cosmere.common.network.ICosmerePacket; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.server.MinecraftServer; +import net.minecraft.server.level.ServerPlayer; +import net.minecraftforge.network.NetworkEvent; + +public class ChangeSelectedManifestationMessage implements ICosmerePacket +{ + int dir; + + public ChangeSelectedManifestationMessage(int dir) + { + this.dir = dir; + } + + @Override + public void handle(NetworkEvent.Context context) + { + ServerPlayer sender = context.getSender(); + MinecraftServer server = sender.getServer(); + server.submitAsync(() -> SpiritwebCapability.get(sender).ifPresent((cap) -> + { + cap.changeManifestation(dir); + cap.syncToClients(null); + })); + context.setPacketHandled(true); + } + + + @Override + public void encode(FriendlyByteBuf buf) + { + buf.writeInt(dir); + } + + public static ChangeSelectedManifestationMessage decode(FriendlyByteBuf buf) + { + return new ChangeSelectedManifestationMessage(buf.readInt()); + } + +} diff --git a/src/main/java/leaf/cosmere/common/network/packets/DeactivateManifestationsMessage.java b/src/main/java/leaf/cosmere/common/network/packets/DeactivateManifestationsMessage.java new file mode 100644 index 000000000..677429fd8 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/network/packets/DeactivateManifestationsMessage.java @@ -0,0 +1,51 @@ +/* + * File updated ~ 24 - 4 - 2021 ~ Leaf + */ + +package leaf.cosmere.common.network.packets; + +import leaf.cosmere.common.cap.entity.SpiritwebCapability; +import leaf.cosmere.common.network.ICosmerePacket; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.chat.MutableComponent; +import net.minecraft.server.MinecraftServer; +import net.minecraft.server.level.ServerPlayer; +import net.minecraftforge.network.NetworkEvent; + +import static leaf.cosmere.api.Constants.Translations.POWER_INACTIVE; + +public class DeactivateManifestationsMessage implements ICosmerePacket +{ + + public DeactivateManifestationsMessage() + { + } + + public DeactivateManifestationsMessage(FriendlyByteBuf buffer) + { + } + + @Override + public void handle(NetworkEvent.Context context) + { + ServerPlayer sender = context.getSender(); + MinecraftServer server = sender.getServer(); + server.submitAsync(() -> SpiritwebCapability.get(sender).ifPresent((cap) -> + { + MutableComponent manifestationText = POWER_INACTIVE; + + cap.deactivateManifestations(); + + sender.sendSystemMessage(manifestationText); + cap.syncToClients(null); + })); + context.setPacketHandled(true); + } + + @Override + public void encode(FriendlyByteBuf buf) + { + + } + +} diff --git a/src/main/java/leaf/cosmere/common/network/packets/SetSelectedManifestationMessage.java b/src/main/java/leaf/cosmere/common/network/packets/SetSelectedManifestationMessage.java new file mode 100644 index 000000000..07795df70 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/network/packets/SetSelectedManifestationMessage.java @@ -0,0 +1,52 @@ +/* + * File updated ~ 24 - 4 - 2021 ~ Leaf + */ + +package leaf.cosmere.common.network.packets; + +import leaf.cosmere.api.manifestation.Manifestation; +import leaf.cosmere.common.cap.entity.SpiritwebCapability; +import leaf.cosmere.common.network.ICosmerePacket; +import leaf.cosmere.common.registry.ManifestationRegistry; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.server.MinecraftServer; +import net.minecraft.server.level.ServerPlayer; +import net.minecraftforge.network.NetworkEvent; + +public class SetSelectedManifestationMessage implements ICosmerePacket +{ + Manifestation manifestation; + + public SetSelectedManifestationMessage(Manifestation manifestation) + { + this.manifestation = manifestation; + } + + @Override + public void handle(NetworkEvent.Context context) + { + ServerPlayer sender = context.getSender(); + MinecraftServer server = sender.getServer(); + server.submitAsync(() -> SpiritwebCapability.get(sender).ifPresent((cap) -> + { + cap.setSelectedManifestation(manifestation); + cap.syncToClients(null); + })); + context.setPacketHandled(true); + } + + + @Override + public void encode(FriendlyByteBuf buf) + { + String namespace = manifestation.getRegistryName().toString(); + buf.writeUtf(namespace); + } + + public static SetSelectedManifestationMessage decode(FriendlyByteBuf buf) + { + String location = buf.readUtf(); + return new SetSelectedManifestationMessage(ManifestationRegistry.fromID(location)); + } + +} diff --git a/src/main/java/leaf/cosmere/common/network/packets/SyncPlayerInvestitureContainerMessage.java b/src/main/java/leaf/cosmere/common/network/packets/SyncPlayerInvestitureContainerMessage.java new file mode 100644 index 000000000..d17e499bd --- /dev/null +++ b/src/main/java/leaf/cosmere/common/network/packets/SyncPlayerInvestitureContainerMessage.java @@ -0,0 +1,53 @@ +/* + * File updated ~ 24 - 4 - 2021 ~ Leaf + */ + +package leaf.cosmere.common.network.packets; + +import leaf.cosmere.common.network.ICosmerePacket; +import net.minecraft.client.Minecraft; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; +import net.minecraftforge.network.NetworkEvent; + +public class SyncPlayerInvestitureContainerMessage implements ICosmerePacket +{ + public int entityID; + public CompoundTag entityNBT; + + public SyncPlayerInvestitureContainerMessage(int entityID, CompoundTag entityNBT) + { + this.entityID = entityID; + this.entityNBT = entityNBT; + } + + @Override + public void encode(FriendlyByteBuf buf) + { + buf.writeInt(entityID); + buf.writeNbt(entityNBT); + } + + public static SyncPlayerInvestitureContainerMessage decode(FriendlyByteBuf buf) + { + return new SyncPlayerInvestitureContainerMessage(buf.readInt(), buf.readNbt()); + } + + @Override + public void handle(NetworkEvent.Context cont) + { + Entity result = Minecraft.getInstance().level.getEntity(entityID); + if (result != null) + { + InvestitureContainer.get((LivingEntity) result).ifPresent((c) -> + { + c.deserializeNBT(entityNBT); + c.getEntity().refreshDimensions(); + }); + + } + } + +} diff --git a/src/main/java/leaf/cosmere/common/network/packets/SyncPlayerSpiritwebMessage.java b/src/main/java/leaf/cosmere/common/network/packets/SyncPlayerSpiritwebMessage.java new file mode 100644 index 000000000..51fe48327 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/network/packets/SyncPlayerSpiritwebMessage.java @@ -0,0 +1,54 @@ +/* + * File updated ~ 24 - 4 - 2021 ~ Leaf + */ + +package leaf.cosmere.common.network.packets; + +import leaf.cosmere.common.cap.entity.SpiritwebCapability; +import leaf.cosmere.common.network.ICosmerePacket; +import net.minecraft.client.Minecraft; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; +import net.minecraftforge.network.NetworkEvent; + +public class SyncPlayerSpiritwebMessage implements ICosmerePacket +{ + public int entityID; + public CompoundTag entityNBT; + + public SyncPlayerSpiritwebMessage(int entityID, CompoundTag entityNBT) + { + this.entityID = entityID; + this.entityNBT = entityNBT; + } + + @Override + public void encode(FriendlyByteBuf buf) + { + buf.writeInt(entityID); + buf.writeNbt(entityNBT); + } + + public static SyncPlayerSpiritwebMessage decode(FriendlyByteBuf buf) + { + return new SyncPlayerSpiritwebMessage(buf.readInt(), buf.readNbt()); + } + + @Override + public void handle(NetworkEvent.Context cont) + { + Entity result = Minecraft.getInstance().level.getEntity(entityID); + if (result != null) + { + SpiritwebCapability.get((LivingEntity) result).ifPresent((c) -> + { + c.deserializeNBT(entityNBT); + c.getLiving().refreshDimensions(); + }); + + } + } + +} diff --git a/src/main/java/leaf/cosmere/common/network/packets/SyncPushPullMessage.java b/src/main/java/leaf/cosmere/common/network/packets/SyncPushPullMessage.java new file mode 100644 index 000000000..42f485616 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/network/packets/SyncPushPullMessage.java @@ -0,0 +1,98 @@ +/* + * File updated ~ 24 - 4 - 2021 ~ Leaf + */ + +package leaf.cosmere.common.network.packets; + +import leaf.cosmere.api.CosmereAPI; +import leaf.cosmere.api.helpers.CodecHelper; +import leaf.cosmere.common.cap.entity.SpiritwebCapability; +import leaf.cosmere.common.network.ICosmerePacket; +import net.minecraft.core.BlockPos; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.NbtOps; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.server.MinecraftServer; +import net.minecraft.server.level.ServerPlayer; +import net.minecraftforge.network.NetworkEvent; + +import java.util.List; + +public class SyncPushPullMessage implements ICosmerePacket +{ + public CompoundTag data; + + public SyncPushPullMessage(CompoundTag data) + { + this.data = data; + } + + @Override + public void encode(FriendlyByteBuf buf) + { + buf.writeNbt(data); + } + + public static SyncPushPullMessage decode(FriendlyByteBuf buf) + { + return new SyncPushPullMessage(buf.readNbt()); + } + + @Override + public void handle(NetworkEvent.Context context) + { + ServerPlayer sender = context.getSender(); + MinecraftServer server = sender.getServer(); + server.submitAsync(() -> SpiritwebCapability.get(sender).ifPresent((cap) -> + { + SpiritwebCapability spiritweb = (SpiritwebCapability) cap; + + final String pushBlocks = "pushBlocks"; + final String pullBlocks = "pullBlocks"; + + boolean isPushMessage = data.contains(pushBlocks); + String target = isPushMessage ? pushBlocks : pullBlocks; + + CodecHelper.BlockPosListCodec.decode(NbtOps.INSTANCE, + data.getList(target, net.minecraft.nbt.Tag.TAG_INT_ARRAY)) + .resultOrPartial(CosmereAPI.logger::error) + .ifPresent(listINBTPair -> + { + List messageBlocks = listINBTPair.getFirst(); + + if (isPushMessage) + { + spiritweb.pushBlocks.clear(); + spiritweb.pushBlocks.addAll(messageBlocks); + } + else + { + spiritweb.pullBlocks.clear(); + spiritweb.pullBlocks.addAll(messageBlocks); + } + }); + + if (isPushMessage) + { + spiritweb.pushEntities.clear(); + final int[] pushEntities = data.getIntArray("pushEntities"); + for (int id : pushEntities) + { + spiritweb.pushEntities.add(id); + } + } + else + { + spiritweb.pullEntities.clear(); + final int[] pullEntities = data.getIntArray("pullEntities"); + for (int id : pullEntities) + { + spiritweb.pullEntities.add(id); + } + } + + spiritweb.pushPullWeight = data.getInt("weight"); + })); + } + +} diff --git a/src/main/java/leaf/cosmere/common/properties/PropTypes.java b/src/main/java/leaf/cosmere/common/properties/PropTypes.java new file mode 100644 index 000000000..010fb7296 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/properties/PropTypes.java @@ -0,0 +1,49 @@ +/* + * File updated ~ 10 - 8 - 2024 ~ Leaf + */ + +package leaf.cosmere.common.properties; + +import net.minecraft.world.item.Item; +import net.minecraft.world.item.Rarity; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockBehaviour; + +import java.util.function.Supplier; + +public class PropTypes +{ + public static class Blocks + { + public static final Supplier EXAMPLE = () -> Block.Properties.copy(net.minecraft.world.level.block.Blocks.GLASS).strength(2.0F, 6.0F); + public static final Supplier ORE = () -> + Block.Properties + .copy(net.minecraft.world.level.block.Blocks.STONE) + .strength(2.0F, 6.0F) + .requiresCorrectToolForDrops(); + + public static final Supplier METAL = () -> + Block.Properties + .copy(net.minecraft.world.level.block.Blocks.IRON_BLOCK) + .strength(2.0F, 6.0F) + .requiresCorrectToolForDrops(); + public static final Supplier SAND = () -> + BlockBehaviour.Properties + .copy(net.minecraft.world.level.block.Blocks.SAND) + .strength(0.5f); + } + + public static class Items + { + // todo: remove commented out tabs + public static final Supplier SHARDBLADE = () -> new Item.Properties() + //.tab(CosmereItemGroups.ITEMS) + .stacksTo(1) + .fireResistant() + .rarity(Rarity.EPIC); + + public static final Supplier ONE = () -> new Item.Properties().stacksTo(1); + public static final Supplier SIXTEEN = () -> new Item.Properties().stacksTo(16); + public static final Supplier SIXTY_FOUR = () -> new Item.Properties().stacksTo(64); + } +} diff --git a/src/main/java/leaf/cosmere/common/recipes/GodMetalAlloyNuggetRecipe.java b/src/main/java/leaf/cosmere/common/recipes/GodMetalAlloyNuggetRecipe.java new file mode 100644 index 000000000..ef7b69fec --- /dev/null +++ b/src/main/java/leaf/cosmere/common/recipes/GodMetalAlloyNuggetRecipe.java @@ -0,0 +1,169 @@ +package leaf.cosmere.common.recipes; + +import leaf.cosmere.api.IHasSize; +import leaf.cosmere.api.Metals.MetalType; +import leaf.cosmere.api.providers.IItemProvider; +import leaf.cosmere.common.Cosmere; +import leaf.cosmere.common.items.GodMetalAlloyNuggetItem; +import leaf.cosmere.common.items.GodMetalNuggetItem; +import leaf.cosmere.common.items.MetalNuggetItem; +import leaf.cosmere.common.registry.CosmereRecipesRegistry; +import leaf.cosmere.common.registry.ItemsRegistry; +import net.minecraft.core.NonNullList; +import net.minecraft.core.RegistryAccess; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.inventory.CraftingContainer; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.crafting.CraftingBookCategory; +import net.minecraft.world.item.crafting.CustomRecipe; +import net.minecraft.world.item.crafting.Ingredient; +import net.minecraft.world.item.crafting.RecipeSerializer; +import net.minecraft.world.level.Level; +import org.jetbrains.annotations.NotNull; + +import javax.annotation.Nonnull; + +public class GodMetalAlloyNuggetRecipe extends CustomRecipe +{ + + public GodMetalAlloyNuggetRecipe(ResourceLocation loc, CraftingBookCategory pCategory) + { + super(loc, pCategory); + } + + @Override + public boolean matches(CraftingContainer inv, @Nonnull Level world) + { + Ingredient INGREDIENT_GOD_METAL_NUG = Ingredient.of( + ItemsRegistry.GOD_METAL_NUGGETS.get(MetalType.LERASIUM), + ItemsRegistry.GOD_METAL_NUGGETS.get(MetalType.LERASATIUM) + ); + + Ingredient INGREDIENT_COSMERE_METAL_NUG = Ingredient.of( + ItemsRegistry.METAL_NUGGETS.values().stream().map(IItemProvider::getItemStack) + ); + + Ingredient INGREDIENT_MC_METAL_NUG = Ingredient.of( + Items.IRON_NUGGET, + Items.GOLD_NUGGET + ); + + if(!INGREDIENT_GOD_METAL_NUG.test(inv.getItem(4))) return false; + if(inv.getItem(4).getCount() != 1) return false; + + MetalType metalType = null; + for(int i = 0; i < inv.getContainerSize(); i++) + { + if(i == 4) continue; + ItemStack itemStack = inv.getItem(i); + + if(INGREDIENT_COSMERE_METAL_NUG.test(itemStack)) + { + MetalNuggetItem item = (MetalNuggetItem) itemStack.getItem(); + if(i == 0) metalType = item.getMetalType(); + if(metalType != item.getMetalType()) return false; + } + else if(INGREDIENT_MC_METAL_NUG.test(itemStack)) + { + Item item = itemStack.getItem(); + MetalType newMetalType; + if (item == Items.IRON_NUGGET) + { + newMetalType = MetalType.IRON; + } + else if(item == Items.GOLD_NUGGET) + { + newMetalType = MetalType.GOLD; + } + else { + return false; + } + if(i == 0) metalType = newMetalType; + if(metalType != newMetalType) return false; + } + else + { + return false; + } + } + return true; + } + + @Override + public ItemStack assemble(CraftingContainer inv, RegistryAccess pRegistryAccess) + { + GodMetalNuggetItem godMetalNuggetItem = (GodMetalNuggetItem) inv.getItem(4).getItem(); + MetalType godMetalType = godMetalNuggetItem.getMetalType(); + + MetalType metalType = null; + if(inv.getItem(0).getItem() == Items.IRON_NUGGET) + { + metalType = MetalType.IRON; + } + else if (inv.getItem(0).getItem() == Items.GOLD_NUGGET) + { + metalType = MetalType.GOLD; + } + else + { + MetalNuggetItem metalNuggetItem = (MetalNuggetItem) inv.getItem(0).getItem(); + metalType = metalNuggetItem.getMetalType(); + } + + ItemStack itemStack = new ItemStack(ItemsRegistry.GOD_METAL_ALLOY_NUGGETS.get(godMetalType).get(metalType)); + GodMetalAlloyNuggetItem item = (GodMetalAlloyNuggetItem) itemStack.getItem(); + + item.writeMetalAlloySizeNbtData(itemStack, 2); + itemStack.setCount(8); + + return itemStack; + } + + @Override + public boolean canCraftInDimensions(int width, int height) + { + // Must have 9 items + return width * height == 9; + } + + @Override + public @Nonnull ResourceLocation getId() + { + return new ResourceLocation(Cosmere.MODID, "crafting_god_metal_alloy_nugget_recipe"); + } + + @Override + public @Nonnull RecipeSerializer getSerializer() + { + return CosmereRecipesRegistry.GOD_METAL_ALLOY_NUGGET_RECIPE.get(); + } + + + public @NotNull NonNullList getRemainingItems(CraftingContainer pContainer) { + NonNullList nonnulllist = NonNullList.withSize(pContainer.getContainerSize(), ItemStack.EMPTY); + + for(int i = 0; i < nonnulllist.size(); ++i) { + ItemStack item = pContainer.getItem(i); + if (item.hasCraftingRemainingItem()) { + nonnulllist.set(i, getCraftingRemainingItem(item)); + } + } + + return nonnulllist; + } + + public ItemStack getCraftingRemainingItem(ItemStack stack) { + ItemStack out = stack.copy(); + IHasSize item = (IHasSize) stack.getItem(); + int size = item.readMetalAlloySizeNbtData(stack); + + int newSize = size - 1; + if (newSize < 1) return ItemStack.EMPTY; + + item.writeMetalAlloySizeNbtData(out, newSize); + return out; + } + +} diff --git a/src/main/java/leaf/cosmere/common/recipes/GodMetalNuggetsCompress.java b/src/main/java/leaf/cosmere/common/recipes/GodMetalNuggetsCompress.java new file mode 100644 index 000000000..fe06201e8 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/recipes/GodMetalNuggetsCompress.java @@ -0,0 +1,161 @@ +package leaf.cosmere.common.recipes; + +import leaf.cosmere.api.IHasSize; +import leaf.cosmere.api.Metals.MetalType; +import leaf.cosmere.api.providers.IItemProvider; +import leaf.cosmere.common.Cosmere; +import leaf.cosmere.common.items.GodMetalAlloyNuggetItem; +import leaf.cosmere.common.items.GodMetalNuggetItem; +import leaf.cosmere.common.registry.CosmereRecipesRegistry; +import leaf.cosmere.common.registry.ItemsRegistry; +import net.minecraft.core.NonNullList; +import net.minecraft.core.RegistryAccess; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.inventory.CraftingContainer; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.CraftingBookCategory; +import net.minecraft.world.item.crafting.CustomRecipe; +import net.minecraft.world.item.crafting.Ingredient; +import net.minecraft.world.item.crafting.RecipeSerializer; +import net.minecraft.world.level.Level; +import org.jetbrains.annotations.NotNull; + +import javax.annotation.Nonnull; + +public class GodMetalNuggetsCompress extends CustomRecipe +{ + + Ingredient INGREDIENT_GOD_METAL_ALLOY_NUG = Ingredient.of(ItemsRegistry.GOD_METAL_ALLOY_NUGGETS.values().stream() + .flatMap(inner -> inner.values().stream()) + .map(IItemProvider::getItemStack)); + + Ingredient INGREDIENT_GOD_METAL_NUG = Ingredient.of(ItemsRegistry.GOD_METAL_NUGGETS.values().stream() + .map(IItemProvider::getItemStack)); + + public GodMetalNuggetsCompress(ResourceLocation loc, CraftingBookCategory pCategory) + { + super(loc, pCategory); + } + + @Override + public boolean matches(CraftingContainer inv, @Nonnull Level world) + { + MetalType godMetalType = null; + MetalType alloyedMetalType = null; + int totalSize = 0; + int numItems = 0; + boolean isAlloy = false; + boolean isGod = false; + for(int i = 0; i < inv.getContainerSize(); i++) + { + ItemStack itemStack = inv.getItem(i); + if(itemStack.isEmpty()) continue; + if(INGREDIENT_GOD_METAL_ALLOY_NUG.test(inv.getItem(i))) + { + isAlloy = true; + numItems++; + GodMetalAlloyNuggetItem item = (GodMetalAlloyNuggetItem) itemStack.getItem(); + + if(godMetalType == null) godMetalType = item.getMetalType(); + if(godMetalType != item.getMetalType()) return false; + + if(alloyedMetalType == null) alloyedMetalType = item.getAlloyedMetalType(); + if(alloyedMetalType != item.getAlloyedMetalType()) return false; + + totalSize += item.readMetalAlloySizeNbtData(itemStack); + if(totalSize > item.getMaxSize()) return false; + } + else if (INGREDIENT_GOD_METAL_NUG.test(inv.getItem(i))) + { + isGod = true; + numItems++; + GodMetalNuggetItem item = (GodMetalNuggetItem) itemStack.getItem(); + + if(godMetalType == null) godMetalType = item.getMetalType(); + if(godMetalType != item.getMetalType()) return false; + + totalSize += item.readMetalAlloySizeNbtData(itemStack); + if(totalSize > item.getMaxSize()) return false; + } + else + { + return false; + } + } + + if(numItems < 2) return false; + if(isGod && isAlloy) return false; + + return true; + } + + @Override + public ItemStack assemble(CraftingContainer inv, RegistryAccess pRegistryAccess) + { + int totalSize = 0; + MetalType godMetalType = null; + MetalType alloyedMetalType = null; + + for(int i = 0; i < inv.getContainerSize(); i++) + { + if(!inv.getItem(i).isEmpty()) + { + ItemStack curItemStack = inv.getItem(i); + if(INGREDIENT_GOD_METAL_ALLOY_NUG.test(inv.getItem(i))) + { + GodMetalAlloyNuggetItem curItem = (GodMetalAlloyNuggetItem) curItemStack.getItem(); + godMetalType = curItem.getMetalType(); + alloyedMetalType = curItem.getAlloyedMetalType(); + totalSize += curItem.readMetalAlloySizeNbtData(curItemStack); + } + else if (INGREDIENT_GOD_METAL_NUG.test(inv.getItem(i))) + { + GodMetalNuggetItem curItem = (GodMetalNuggetItem) curItemStack.getItem(); + godMetalType = curItem.getMetalType(); + totalSize += curItem.readMetalAlloySizeNbtData(curItemStack); + } + } + } + + ItemStack itemStack; + if(alloyedMetalType != null) + { + itemStack = new ItemStack(ItemsRegistry.GOD_METAL_ALLOY_NUGGETS.get(godMetalType).get(alloyedMetalType)); + } + else + { + itemStack = new ItemStack(ItemsRegistry.GOD_METAL_NUGGETS.get(godMetalType)); + } + + IHasSize item = (IHasSize) itemStack.getItem(); + + item.writeMetalAlloySizeNbtData(itemStack, totalSize); + itemStack.setCount(1); + + return itemStack; + } + + @Override + public boolean canCraftInDimensions(int width, int height) + { + // We need a 3x3 grid + return width * height == 9; + } + + @Override + public @Nonnull ResourceLocation getId() + { + return new ResourceLocation(Cosmere.MODID, "crafting_god_metal_nuggets_compress"); + } + + @Override + public @Nonnull RecipeSerializer getSerializer() + { + return CosmereRecipesRegistry.GOD_METAL_NUGGETS_COMPRESS.get(); + } + + public @NotNull NonNullList getRemainingItems(CraftingContainer pContainer) { + return NonNullList.withSize(pContainer.getContainerSize(), ItemStack.EMPTY); + } + +} diff --git a/src/main/java/leaf/cosmere/common/recipes/GodMetalNuggetsDecompress.java b/src/main/java/leaf/cosmere/common/recipes/GodMetalNuggetsDecompress.java new file mode 100644 index 000000000..e7acdd1b7 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/recipes/GodMetalNuggetsDecompress.java @@ -0,0 +1,128 @@ +package leaf.cosmere.common.recipes; + +import leaf.cosmere.api.IHasSize; +import leaf.cosmere.api.providers.IItemProvider; +import leaf.cosmere.common.Cosmere; +import leaf.cosmere.common.items.GodMetalAlloyNuggetItem; +import leaf.cosmere.common.items.GodMetalNuggetItem; +import leaf.cosmere.common.registry.CosmereRecipesRegistry; +import leaf.cosmere.common.registry.ItemsRegistry; +import net.minecraft.core.NonNullList; +import net.minecraft.core.RegistryAccess; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.Container; +import net.minecraft.world.inventory.CraftingContainer; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.CraftingBookCategory; +import net.minecraft.world.item.crafting.CustomRecipe; +import net.minecraft.world.item.crafting.Ingredient; +import net.minecraft.world.item.crafting.RecipeSerializer; +import net.minecraft.world.level.Level; +import org.jetbrains.annotations.NotNull; + +import javax.annotation.Nonnull; + +public class GodMetalNuggetsDecompress extends CustomRecipe { + + Ingredient INGREDIENT_GOD_METAL_ALLOY_NUG = Ingredient.of(ItemsRegistry.GOD_METAL_ALLOY_NUGGETS.values().stream() + .flatMap(inner -> inner.values().stream()) + .map(IItemProvider::getItemStack)); + + Ingredient INGREDIENT_GOD_METAL_NUG = Ingredient.of(ItemsRegistry.GOD_METAL_NUGGETS.values().stream() + .map(IItemProvider::getItemStack)); + + public GodMetalNuggetsDecompress(ResourceLocation loc, CraftingBookCategory pCategory) + { + super(loc, pCategory); + } + + @Override + public boolean matches(CraftingContainer inv, @Nonnull Level world) + { + int itemCount = 0; + IHasSize item = null; + for(int i = 0; i < inv.getContainerSize(); i++) + { + ItemStack itemStack = inv.getItem(i); + if(itemStack.isEmpty()) continue; + + if(INGREDIENT_GOD_METAL_ALLOY_NUG.test(inv.getItem(i)) || INGREDIENT_GOD_METAL_NUG.test(inv.getItem(i))) + { + itemCount++; + if(itemCount > 1) return false; + + item = (IHasSize) itemStack.getItem(); + int currentSize = item.readMetalAlloySizeNbtData(itemStack); + if(currentSize == item.getMinSize()) return false; // No splitting smallest size + if(currentSize % 2 == 1) return false; // No odd splitting + } + else { + return false; + } + } + if(itemCount != 1) return false; + + return true; + } + + @Override + public ItemStack assemble(CraftingContainer inv, RegistryAccess pRegistryAccess) + { + Item item = null; + int index = 0; + for(int i = 0; i < inv.getContainerSize(); i++) + { + if(!inv.getItem(i).isEmpty()) + { + item = inv.getItem(i).getItem(); + index = i; + break; + } + } + ItemStack itemStack = ItemStack.EMPTY; + + if(INGREDIENT_GOD_METAL_ALLOY_NUG.test(inv.getItem(index))) + { + GodMetalAlloyNuggetItem gItem = (GodMetalAlloyNuggetItem) item; + int currentSize = gItem.readMetalAlloySizeNbtData(inv.getItem(index)); + itemStack = new ItemStack(ItemsRegistry.GOD_METAL_ALLOY_NUGGETS.get(gItem.getMetalType()).get(gItem.getAlloyedMetalType())); + gItem.writeMetalAlloySizeNbtData(itemStack, currentSize / 2); + itemStack.setCount(2); + } + else if (INGREDIENT_GOD_METAL_NUG.test(inv.getItem(index))) + { + GodMetalNuggetItem gItem = (GodMetalNuggetItem) item; + int currentSize = gItem.readMetalAlloySizeNbtData(inv.getItem(index)); + itemStack = new ItemStack(ItemsRegistry.GOD_METAL_NUGGETS.get(gItem.getMetalType())); + gItem.writeMetalAlloySizeNbtData(itemStack, currentSize / 2); + itemStack.setCount(2); + } + + return itemStack; + } + + @Override + public boolean canCraftInDimensions(int width, int height) + { + // We need a 3x3 grid + return width * height == 9; + } + + @Override + public @Nonnull ResourceLocation getId() + { + return new ResourceLocation(Cosmere.MODID, "crafting_god_metal_nuggets_decompress"); + } + + @Override + public @Nonnull RecipeSerializer getSerializer() + { + return CosmereRecipesRegistry.GOD_METAL_NUGGETS_DECOMPRESS.get(); + } + + public @NotNull NonNullList getRemainingItems(CraftingContainer pContainer) { + return NonNullList.withSize(pContainer.getContainerSize(), ItemStack.EMPTY); + } + +} diff --git a/src/main/java/leaf/cosmere/common/registration/DoubleDeferredRegister.java b/src/main/java/leaf/cosmere/common/registration/DoubleDeferredRegister.java new file mode 100644 index 000000000..cd8b0c996 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/registration/DoubleDeferredRegister.java @@ -0,0 +1,61 @@ +package leaf.cosmere.common.registration; + +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceKey; +import net.minecraftforge.eventbus.api.IEventBus; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.IForgeRegistry; +import net.minecraftforge.registries.RegistryObject; + +import java.util.function.BiFunction; +import java.util.function.Function; +import java.util.function.Supplier; + +public class DoubleDeferredRegister +{ + + private final DeferredRegister primaryRegister; + private final DeferredRegister secondaryRegister; + + public DoubleDeferredRegister(DeferredRegister primaryRegistry, DeferredRegister secondaryRegistry) + { + this.primaryRegister = primaryRegistry; + this.secondaryRegister = secondaryRegistry; + } + + public DoubleDeferredRegister(String modid, IForgeRegistry primaryRegistry, IForgeRegistry secondaryRegistry) + { + this(DeferredRegister.create(primaryRegistry, modid), DeferredRegister.create(secondaryRegistry, modid)); + } + + protected DoubleDeferredRegister(String modid, ResourceKey> primaryRegistryName, + ResourceKey> secondaryRegistryName) + { + this(DeferredRegister.create(primaryRegistryName, modid), DeferredRegister.create(secondaryRegistryName, modid)); + } + + public

> W register(String name, Supplier primarySupplier, + Supplier secondarySupplier, BiFunction, RegistryObject, W> objectWrapper) + { + return objectWrapper.apply(primaryRegister.register(name, primarySupplier), secondaryRegister.register(name, secondarySupplier)); + } + + public

> W register(String name, Supplier primarySupplier, + Function secondarySupplier, BiFunction, RegistryObject, W> objectWrapper) + { + return registerAdvanced(name, primarySupplier, secondarySupplier.compose(RegistryObject::get), objectWrapper); + } + + public

> W registerAdvanced(String name, Supplier primarySupplier, + Function, S> secondarySupplier, BiFunction, RegistryObject, W> objectWrapper) + { + RegistryObject

primaryObject = primaryRegister.register(name, primarySupplier); + return objectWrapper.apply(primaryObject, secondaryRegister.register(name, () -> secondarySupplier.apply(primaryObject))); + } + + public void register(IEventBus bus) + { + primaryRegister.register(bus); + secondaryRegister.register(bus); + } +} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/common/registration/DoubleWrappedRegistryObject.java b/src/main/java/leaf/cosmere/common/registration/DoubleWrappedRegistryObject.java new file mode 100644 index 000000000..aad60a3ca --- /dev/null +++ b/src/main/java/leaf/cosmere/common/registration/DoubleWrappedRegistryObject.java @@ -0,0 +1,32 @@ +package leaf.cosmere.common.registration; + +import net.minecraftforge.registries.RegistryObject; + +public class DoubleWrappedRegistryObject implements INamedEntry +{ + + protected final RegistryObject primaryRO; + protected final RegistryObject secondaryRO; + + public DoubleWrappedRegistryObject(RegistryObject primaryRO, RegistryObject secondaryRO) + { + this.primaryRO = primaryRO; + this.secondaryRO = secondaryRO; + } + + public PRIMARY getPrimary() + { + return primaryRO.get(); + } + + public SECONDARY getSecondary() + { + return secondaryRO.get(); + } + + @Override + public String getInternalRegistryName() + { + return primaryRO.getId().getPath(); + } +} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/common/registration/INamedEntry.java b/src/main/java/leaf/cosmere/common/registration/INamedEntry.java new file mode 100644 index 000000000..7982455cc --- /dev/null +++ b/src/main/java/leaf/cosmere/common/registration/INamedEntry.java @@ -0,0 +1,6 @@ +package leaf.cosmere.common.registration; + +public interface INamedEntry +{ + String getInternalRegistryName(); +} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/common/registration/WrappedDeferredRegister.java b/src/main/java/leaf/cosmere/common/registration/WrappedDeferredRegister.java new file mode 100644 index 000000000..28f2ceb92 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/registration/WrappedDeferredRegister.java @@ -0,0 +1,62 @@ +package leaf.cosmere.common.registration; + +import leaf.cosmere.common.Cosmere; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceKey; +import net.minecraftforge.eventbus.api.IEventBus; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.IForgeRegistry; +import net.minecraftforge.registries.RegistryBuilder; +import net.minecraftforge.registries.RegistryObject; + +import java.util.function.Function; +import java.util.function.Supplier; +import java.util.function.UnaryOperator; + +public class WrappedDeferredRegister +{ + protected final DeferredRegister internal; + protected final String modid; + + protected WrappedDeferredRegister(DeferredRegister internal, String modid) + { + this.internal = internal; + this.modid = modid; + } + + protected WrappedDeferredRegister(String modid, IForgeRegistry registry) + { + this(DeferredRegister.create(registry, modid), modid); + } + + protected WrappedDeferredRegister(String modid, ResourceKey> registryName) + { + this(DeferredRegister.create(registryName, modid), modid); + } + + protected > W register(String name, Supplier sup, Function, W> objectWrapper) + { + return objectWrapper.apply(internal.register(name, sup)); + } + + public void register(IEventBus bus) + { + internal.register(bus); + } + + public void createAndRegister(IEventBus bus) + { + createAndRegister(bus, UnaryOperator.identity()); + } + + public void createAndRegister(IEventBus bus, UnaryOperator> builder) + { + internal.makeRegistry(() -> builder.apply(new RegistryBuilder<>())); + register(bus); + } + + public void createAndRegisterManifestation(IEventBus bus) + { + createAndRegister(bus, builder -> builder.hasTags().setDefaultKey(Cosmere.rl("none"))); + } +} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/common/registration/WrappedRegistryObject.java b/src/main/java/leaf/cosmere/common/registration/WrappedRegistryObject.java new file mode 100644 index 000000000..faf1d5d44 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/registration/WrappedRegistryObject.java @@ -0,0 +1,33 @@ +package leaf.cosmere.common.registration; + +import net.minecraftforge.registries.RegistryObject; + +import java.util.function.Supplier; + +public class WrappedRegistryObject implements Supplier, INamedEntry +{ + + protected RegistryObject registryObject; + + protected WrappedRegistryObject(RegistryObject registryObject) + { + this.registryObject = registryObject; + } + + @Override + public T get() + { + return registryObject.get(); + } + + public RegistryObject getRegistryObject() + { + return registryObject; + } + + @Override + public String getInternalRegistryName() + { + return registryObject.getId().getPath(); + } +} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/common/registration/impl/AttributeDeferredRegister.java b/src/main/java/leaf/cosmere/common/registration/impl/AttributeDeferredRegister.java new file mode 100644 index 000000000..edeea8ec1 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/registration/impl/AttributeDeferredRegister.java @@ -0,0 +1,47 @@ +package leaf.cosmere.common.registration.impl; + +import leaf.cosmere.api.providers.IAttributeProvider; +import leaf.cosmere.common.registration.WrappedDeferredRegister; +import net.minecraft.world.entity.ai.attributes.Attribute; +import net.minecraft.world.entity.ai.attributes.RangedAttribute; +import net.minecraftforge.registries.ForgeRegistries; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.function.Supplier; + +public class AttributeDeferredRegister extends WrappedDeferredRegister +{ + private final List allAttributes = new ArrayList<>(); + + public AttributeDeferredRegister(String modid) + { + super(modid, ForgeRegistries.ATTRIBUTES); + } + + public AttributeRegistryObject register(String name, Supplier sup) + { + AttributeRegistryObject registeredItem = register(name, sup, AttributeRegistryObject::new); + allAttributes.add(registeredItem); + return registeredItem; + } + + public AttributeRegistryObject register(String registryName, String modid, float defaultVal, float min, float max) + { + return register( + registryName, + () -> new RangedAttribute( + "attribute." + modid + "." + registryName, + defaultVal, + min, + max) + .setSyncable(true) + ); + } + + public List getAllAttributes() + { + return Collections.unmodifiableList(allAttributes); + } +} diff --git a/src/main/java/leaf/cosmere/common/registration/impl/AttributeRegistryObject.java b/src/main/java/leaf/cosmere/common/registration/impl/AttributeRegistryObject.java new file mode 100644 index 000000000..9b6f4126f --- /dev/null +++ b/src/main/java/leaf/cosmere/common/registration/impl/AttributeRegistryObject.java @@ -0,0 +1,23 @@ +package leaf.cosmere.common.registration.impl; + +import leaf.cosmere.api.providers.IAttributeProvider; +import leaf.cosmere.common.registration.WrappedRegistryObject; +import net.minecraft.world.entity.ai.attributes.Attribute; +import net.minecraftforge.registries.RegistryObject; +import org.jetbrains.annotations.NotNull; + +public class AttributeRegistryObject extends WrappedRegistryObject implements IAttributeProvider +{ + public AttributeRegistryObject(RegistryObject registryObject) + { + super(registryObject); + } + + @NotNull + @Override + public ATTRIBUTE getAttribute() + { + return get(); + } + +} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/common/registration/impl/BiomeDeferredRegister.java b/src/main/java/leaf/cosmere/common/registration/impl/BiomeDeferredRegister.java new file mode 100644 index 000000000..45f0206c6 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/registration/impl/BiomeDeferredRegister.java @@ -0,0 +1,21 @@ +package leaf.cosmere.common.registration.impl; + +import leaf.cosmere.common.registration.WrappedDeferredRegister; +import net.minecraft.world.level.biome.Biome; +import net.minecraftforge.registries.ForgeRegistries; + +import java.util.function.Supplier; + +public class BiomeDeferredRegister extends WrappedDeferredRegister +{ + + public BiomeDeferredRegister(String modid) + { + super(modid, ForgeRegistries.Keys.BIOMES); + } + + public BiomeRegistryObject register(String name, Supplier sup) + { + return register(name, sup, BiomeRegistryObject::new); + } +} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/common/registration/impl/BiomeModifierSerializerDeferredRegister.java b/src/main/java/leaf/cosmere/common/registration/impl/BiomeModifierSerializerDeferredRegister.java new file mode 100644 index 000000000..a28fd10e6 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/registration/impl/BiomeModifierSerializerDeferredRegister.java @@ -0,0 +1,22 @@ +package leaf.cosmere.common.registration.impl; + +import com.mojang.serialization.Codec; +import leaf.cosmere.common.registration.WrappedDeferredRegister; +import net.minecraftforge.common.world.BiomeModifier; +import net.minecraftforge.registries.ForgeRegistries; + +import java.util.function.Supplier; + +public class BiomeModifierSerializerDeferredRegister extends WrappedDeferredRegister> +{ + + public BiomeModifierSerializerDeferredRegister(String modid) + { + super(modid, ForgeRegistries.Keys.BIOME_MODIFIER_SERIALIZERS); + } + + public BiomeModifierSerializerRegistryObject register(String name, Supplier> sup) + { + return register(name, sup, BiomeModifierSerializerRegistryObject::new); + } +} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/common/registration/impl/BiomeModifierSerializerRegistryObject.java b/src/main/java/leaf/cosmere/common/registration/impl/BiomeModifierSerializerRegistryObject.java new file mode 100644 index 000000000..66cae3661 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/registration/impl/BiomeModifierSerializerRegistryObject.java @@ -0,0 +1,15 @@ +package leaf.cosmere.common.registration.impl; + +import com.mojang.serialization.Codec; +import leaf.cosmere.common.registration.WrappedRegistryObject; +import net.minecraftforge.common.world.BiomeModifier; +import net.minecraftforge.registries.RegistryObject; + +public class BiomeModifierSerializerRegistryObject extends WrappedRegistryObject> +{ + + public BiomeModifierSerializerRegistryObject(RegistryObject> registryObject) + { + super(registryObject); + } +} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/common/registration/impl/BiomeRegistryObject.java b/src/main/java/leaf/cosmere/common/registration/impl/BiomeRegistryObject.java new file mode 100644 index 000000000..29b3e3dbf --- /dev/null +++ b/src/main/java/leaf/cosmere/common/registration/impl/BiomeRegistryObject.java @@ -0,0 +1,14 @@ +package leaf.cosmere.common.registration.impl; + +import leaf.cosmere.common.registration.WrappedRegistryObject; +import net.minecraft.world.level.biome.Biome; +import net.minecraftforge.registries.RegistryObject; + +public class BiomeRegistryObject extends WrappedRegistryObject +{ + + public BiomeRegistryObject(RegistryObject registryObject) + { + super(registryObject); + } +} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/common/registration/impl/BlockDeferredRegister.java b/src/main/java/leaf/cosmere/common/registration/impl/BlockDeferredRegister.java new file mode 100644 index 000000000..a21c9f27a --- /dev/null +++ b/src/main/java/leaf/cosmere/common/registration/impl/BlockDeferredRegister.java @@ -0,0 +1,64 @@ +/* + * File updated ~ 10 - 8 - 2024 ~ Leaf + */ + +package leaf.cosmere.common.registration.impl; + +import leaf.cosmere.api.providers.IBlockProvider; +import leaf.cosmere.common.registration.DoubleDeferredRegister; +import net.minecraft.world.item.BlockItem; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.Rarity; +import net.minecraft.world.level.block.Block; +import net.minecraftforge.registries.ForgeRegistries; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.function.BiFunction; +import java.util.function.Function; +import java.util.function.Supplier; + +public class BlockDeferredRegister extends DoubleDeferredRegister +{ + + private final List allBlocks = new ArrayList<>(); + + public BlockDeferredRegister(String modid) + { + super(modid, ForgeRegistries.BLOCKS, ForgeRegistries.ITEMS); + } + + //Normal block registration + public BlockRegistryObject register(String name, Supplier blockSupplier) + { + return registerDefaultProperties(name, blockSupplier, BlockItem::new, Rarity.COMMON); + } + + //register blocks with rarity + public BlockRegistryObject registerWithRarity(String name, Supplier blockSupplier, Rarity rarity) + { + //don't confuse BlockItem with block, + return registerDefaultProperties(name, blockSupplier, BlockItem::new, rarity); + } + + public BlockRegistryObject registerDefaultProperties(String name, Supplier blockSupplier, + BiFunction itemCreator, Rarity rarity) + { + return register(name, blockSupplier, block -> itemCreator.apply(block, new Item.Properties().rarity(rarity))); + } + + public BlockRegistryObject register(String name, Supplier blockSupplier, + Function itemCreator) + { + //registers a block item to go with the block + BlockRegistryObject registeredBlock = register(name, blockSupplier, itemCreator, BlockRegistryObject::new); + allBlocks.add(registeredBlock); + return registeredBlock; + } + + public List getAllBlocks() + { + return Collections.unmodifiableList(allBlocks); + } +} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/common/registration/impl/BlockRegistryObject.java b/src/main/java/leaf/cosmere/common/registration/impl/BlockRegistryObject.java new file mode 100644 index 000000000..379c9c764 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/registration/impl/BlockRegistryObject.java @@ -0,0 +1,31 @@ +package leaf.cosmere.common.registration.impl; + +import leaf.cosmere.api.providers.IBlockProvider; +import leaf.cosmere.common.registration.DoubleWrappedRegistryObject; +import net.minecraft.world.item.Item; +import net.minecraft.world.level.block.Block; +import net.minecraftforge.registries.RegistryObject; +import org.jetbrains.annotations.NotNull; + +public class BlockRegistryObject extends DoubleWrappedRegistryObject implements IBlockProvider +{ + + public BlockRegistryObject(RegistryObject blockRegistryObject, RegistryObject itemRegistryObject) + { + super(blockRegistryObject, itemRegistryObject); + } + + @NotNull + @Override + public BLOCK getBlock() + { + return getPrimary(); + } + + @NotNull + @Override + public ITEM asItem() + { + return getSecondary(); + } +} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/common/registration/impl/ConfiguredFeatureDeferredRegister.java b/src/main/java/leaf/cosmere/common/registration/impl/ConfiguredFeatureDeferredRegister.java new file mode 100644 index 000000000..df86d9814 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/registration/impl/ConfiguredFeatureDeferredRegister.java @@ -0,0 +1,22 @@ +package leaf.cosmere.common.registration.impl; + +import leaf.cosmere.common.registration.WrappedDeferredRegister; +import net.minecraft.core.Registry; +import net.minecraft.core.registries.Registries; +import net.minecraft.world.level.levelgen.feature.ConfiguredFeature; + +import java.util.function.Supplier; + +public class ConfiguredFeatureDeferredRegister extends WrappedDeferredRegister> +{ + + public ConfiguredFeatureDeferredRegister(String modid) + { + super(modid, Registries.CONFIGURED_FEATURE); + } + + public > ConfiguredFeatureRegistryObject register(String name, Supplier sup) + { + return register(name, sup, ConfiguredFeatureRegistryObject::new); + } +} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/common/registration/impl/ConfiguredFeatureRegistryObject.java b/src/main/java/leaf/cosmere/common/registration/impl/ConfiguredFeatureRegistryObject.java new file mode 100644 index 000000000..ec080325d --- /dev/null +++ b/src/main/java/leaf/cosmere/common/registration/impl/ConfiguredFeatureRegistryObject.java @@ -0,0 +1,13 @@ +package leaf.cosmere.common.registration.impl; + +import leaf.cosmere.common.registration.WrappedRegistryObject; +import net.minecraft.world.level.levelgen.feature.ConfiguredFeature; +import net.minecraftforge.registries.RegistryObject; + +public class ConfiguredFeatureRegistryObject> extends WrappedRegistryObject +{ + public ConfiguredFeatureRegistryObject(RegistryObject registryObject) + { + super(registryObject); + } +} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/common/registration/impl/CosmereEffectDeferredRegister.java b/src/main/java/leaf/cosmere/common/registration/impl/CosmereEffectDeferredRegister.java new file mode 100644 index 000000000..fd66c0fc1 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/registration/impl/CosmereEffectDeferredRegister.java @@ -0,0 +1,39 @@ +/* + * File updated ~ 27 - 10 - 2023 ~ Leaf + */ + +package leaf.cosmere.common.registration.impl; + +import leaf.cosmere.api.CosmereAPI; +import leaf.cosmere.api.cosmereEffect.CosmereEffect; +import leaf.cosmere.api.providers.ICosmereEffectProvider; +import leaf.cosmere.common.registration.WrappedDeferredRegister; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.function.Supplier; + +public class CosmereEffectDeferredRegister extends WrappedDeferredRegister +{ + private final List effectsInRegistry = new ArrayList<>(); + + + public CosmereEffectDeferredRegister(String modid) + { + super(modid, CosmereAPI.cosmereEffectRegistryName()); + } + + public CosmereEffectRegistryObject register(String name, Supplier sup) + { + final CosmereEffectRegistryObject registeredItem = register(name, sup, CosmereEffectRegistryObject::new); + effectsInRegistry.add(registeredItem); + return registeredItem; + } + + + public List getEffectsInRegistry() + { + return Collections.unmodifiableList(effectsInRegistry); + } +} diff --git a/src/main/java/leaf/cosmere/common/registration/impl/CosmereEffectRegistryObject.java b/src/main/java/leaf/cosmere/common/registration/impl/CosmereEffectRegistryObject.java new file mode 100644 index 000000000..913799b04 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/registration/impl/CosmereEffectRegistryObject.java @@ -0,0 +1,27 @@ +/* + * File updated ~ 8 - 10 - 2023 ~ Leaf + */ + +package leaf.cosmere.common.registration.impl; + +import leaf.cosmere.api.cosmereEffect.CosmereEffect; +import leaf.cosmere.api.providers.ICosmereEffectProvider; +import leaf.cosmere.common.registration.WrappedRegistryObject; +import net.minecraftforge.registries.RegistryObject; +import org.jetbrains.annotations.NotNull; + +public class CosmereEffectRegistryObject extends WrappedRegistryObject implements ICosmereEffectProvider +{ + public CosmereEffectRegistryObject(RegistryObject registryObject) + { + super(registryObject); + } + + @NotNull + @Override + public COSMERE_EFFECT getEffect() + { + return get(); + } + +} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/common/registration/impl/CreativeTabDeferredRegister.java b/src/main/java/leaf/cosmere/common/registration/impl/CreativeTabDeferredRegister.java new file mode 100644 index 000000000..e2aba0725 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/registration/impl/CreativeTabDeferredRegister.java @@ -0,0 +1,136 @@ +/* + * File updated ~ 10 - 8 - 2024 ~ Leaf + */ + +package leaf.cosmere.common.registration.impl; + +import leaf.cosmere.api.providers.IBlockProvider; +import leaf.cosmere.api.providers.IItemProvider; +import leaf.cosmere.common.registration.WrappedDeferredRegister; +import net.minecraft.core.registries.Registries; +import net.minecraft.network.chat.Component; +import net.minecraft.world.item.CreativeModeTab; +import net.minecraft.world.level.ItemLike; +import net.minecraftforge.event.BuildCreativeModeTabContentsEvent; +import net.minecraftforge.eventbus.api.IEventBus; + +import java.util.function.Consumer; +import java.util.function.UnaryOperator; + +public class CreativeTabDeferredRegister extends WrappedDeferredRegister +{ + + private final Consumer addToExistingTabs; + private final String modid; + + public CreativeTabDeferredRegister(String modid) + { + this(modid, event -> + { + }); + } + + public CreativeTabDeferredRegister(String modid, Consumer addToExistingTabs) + { + super(modid, Registries.CREATIVE_MODE_TAB); + this.modid = modid; + this.addToExistingTabs = addToExistingTabs; + } + + @Override + public void register(IEventBus bus) + { + super.register(bus); + bus.addListener(addToExistingTabs); + } + + /** + * @apiNote We manually require the title and icon to be passed so that we ensure all tabs have one. + */ + public CreativeTabRegistryObject registerMain(Component title, IItemProvider icon, UnaryOperator operator) + { + return register(modid, title, icon, operator); + } + + /** + * @apiNote We manually require the title and icon to be passed so that we ensure all tabs have one. + */ + public CreativeTabRegistryObject register(String name, Component title, IItemProvider icon, UnaryOperator operator) + { + return register(name, () -> + { + CreativeModeTab.Builder builder = CreativeModeTab.builder() + .title(title) + .icon(icon::getItemStack) + .withTabFactory(CosmereCreativeTab::new); + return operator.apply(builder).build(); + }, CreativeTabRegistryObject::new); + } + + public static void addToDisplay(CreativeModeTab.Output output, ItemLike... items) + { + for (ItemLike item : items) + { + addToDisplay(output, item); + } + } + + public static void addToDisplay(CreativeModeTab.Output output, ItemLike itemLike) + { + if (itemLike.asItem() instanceof ICustomCreativeTabContents contents) + { + if (contents.addDefault()) + { + output.accept(itemLike); + } + contents.addItems(output); + } + else + { + output.accept(itemLike); + } + } + + public static void addToDisplay(ItemDeferredRegister register, CreativeModeTab.Output output) + { + for (IItemProvider itemProvider : register.getAllItems()) + { + addToDisplay(output, itemProvider); + } + } + + public static void addToDisplay(BlockDeferredRegister register, CreativeModeTab.Output output) + { + for (IBlockProvider itemProvider : register.getAllBlocks()) + { + addToDisplay(output, itemProvider); + } + } + + public interface ICustomCreativeTabContents + { + + void addItems(CreativeModeTab.Output tabOutput); + + default boolean addDefault() + { + return true; + } + } + + public static class CosmereCreativeTab extends CreativeModeTab + { + + protected CosmereCreativeTab(Builder builder) + { + super(builder); + } + + @Override + public int getLabelColor() + { + //todo better colours references + return 0xFF404040; + } + } +} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/common/registration/impl/CreativeTabRegistryObject.java b/src/main/java/leaf/cosmere/common/registration/impl/CreativeTabRegistryObject.java new file mode 100644 index 000000000..3c3e7bfaf --- /dev/null +++ b/src/main/java/leaf/cosmere/common/registration/impl/CreativeTabRegistryObject.java @@ -0,0 +1,18 @@ +/* + * File updated ~ 9 - 8 - 2024 ~ Leaf + */ + +package leaf.cosmere.common.registration.impl; + +import leaf.cosmere.common.registration.WrappedRegistryObject; +import net.minecraft.world.item.CreativeModeTab; +import net.minecraftforge.registries.RegistryObject; + +public class CreativeTabRegistryObject extends WrappedRegistryObject +{ + + public CreativeTabRegistryObject(RegistryObject registryObject) + { + super(registryObject); + } +} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/common/registration/impl/EntityTypeDeferredRegister.java b/src/main/java/leaf/cosmere/common/registration/impl/EntityTypeDeferredRegister.java new file mode 100644 index 000000000..3a0e9f617 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/registration/impl/EntityTypeDeferredRegister.java @@ -0,0 +1,73 @@ +package leaf.cosmere.common.registration.impl; + +import leaf.cosmere.api.CosmereAPI; +import leaf.cosmere.api.providers.IEntityTypeProvider; +import leaf.cosmere.common.registration.WrappedDeferredRegister; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.ai.attributes.AttributeSupplier.Builder; +import net.minecraftforge.event.entity.EntityAttributeCreationEvent; +import net.minecraftforge.eventbus.api.IEventBus; +import net.minecraftforge.registries.ForgeRegistries; + +import java.util.*; +import java.util.function.Supplier; + +public class EntityTypeDeferredRegister extends WrappedDeferredRegister> +{ + + private Map, Supplier> livingEntityAttributes = new HashMap<>(); + + private final List allEntityTypes = new ArrayList<>(); + + public EntityTypeDeferredRegister(String modid) + { + super(modid, ForgeRegistries.ENTITY_TYPES); + } + + public EntityTypeRegistryObject register(String name, EntityType.Builder builder, Supplier attributes) + { + EntityTypeRegistryObject entityTypeRO = register(name, builder); + livingEntityAttributes.put(entityTypeRO, attributes); + return entityTypeRO; + } + + public EntityTypeRegistryObject register(String name, EntityType.Builder builder) + { + final EntityTypeRegistryObject registryObject = register(name, () -> builder.build(name), EntityTypeRegistryObject::new); + allEntityTypes.add(registryObject); + return registryObject; + } + + @Override + public void register(IEventBus bus) + { + super.register(bus); + bus.addListener(this::registerEntityAttributes); + } + + private void registerEntityAttributes(EntityAttributeCreationEvent event) + { + if (livingEntityAttributes == null) + { + CosmereAPI.logger.error("GlobalEntityTypeAttributes have already been set. This should not happen."); + } + else + { + //Register our living entity attributes + for (Map.Entry, Supplier> entry : livingEntityAttributes.entrySet()) + { + event.put(entry.getKey().get(), entry.getValue().get().build()); + } + //And set the map to null to allow it to be garbage collected + livingEntityAttributes = null; + } + } + + + public List getAllEntityTypes() + { + return Collections.unmodifiableList(allEntityTypes); + } +} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/common/registration/impl/EntityTypeRegistryObject.java b/src/main/java/leaf/cosmere/common/registration/impl/EntityTypeRegistryObject.java new file mode 100644 index 000000000..f9068a17b --- /dev/null +++ b/src/main/java/leaf/cosmere/common/registration/impl/EntityTypeRegistryObject.java @@ -0,0 +1,25 @@ +package leaf.cosmere.common.registration.impl; + +import leaf.cosmere.api.providers.IEntityTypeProvider; +import leaf.cosmere.common.registration.WrappedRegistryObject; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityType; +import net.minecraftforge.registries.RegistryObject; +import org.jetbrains.annotations.NotNull; + +public class EntityTypeRegistryObject extends WrappedRegistryObject> implements IEntityTypeProvider +{ + + public EntityTypeRegistryObject(RegistryObject> registryObject) + { + super(registryObject); + } + + @NotNull + @Override + public EntityType getEntityType() + { + return get(); + } + +} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/common/registration/impl/FeatureDeferredRegister.java b/src/main/java/leaf/cosmere/common/registration/impl/FeatureDeferredRegister.java new file mode 100644 index 000000000..d43ded9a8 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/registration/impl/FeatureDeferredRegister.java @@ -0,0 +1,26 @@ +/* + * File updated ~ 20 - 11 - 2024 ~ Leaf + */ + +package leaf.cosmere.common.registration.impl; + +import leaf.cosmere.common.registration.WrappedDeferredRegister; +import net.minecraft.world.level.levelgen.feature.Feature; +import net.minecraft.world.level.levelgen.feature.configurations.FeatureConfiguration; +import net.minecraftforge.registries.ForgeRegistries; + +import java.util.function.Supplier; + +public class FeatureDeferredRegister extends WrappedDeferredRegister> +{ + + public FeatureDeferredRegister(String modid) + { + super(modid, ForgeRegistries.FEATURES); + } + + public > FeatureRegistryObject register(String name, Supplier sup) + { + return register(name, sup, FeatureRegistryObject::new); + } +} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/common/registration/impl/FeatureRegistryObject.java b/src/main/java/leaf/cosmere/common/registration/impl/FeatureRegistryObject.java new file mode 100644 index 000000000..bd6b43e77 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/registration/impl/FeatureRegistryObject.java @@ -0,0 +1,19 @@ +/* + * File updated ~ 20 - 11 - 2024 ~ Leaf + */ + +package leaf.cosmere.common.registration.impl; + +import leaf.cosmere.common.registration.WrappedRegistryObject; +import net.minecraft.world.level.levelgen.feature.Feature; +import net.minecraft.world.level.levelgen.feature.configurations.FeatureConfiguration; +import net.minecraftforge.registries.RegistryObject; + +public class FeatureRegistryObject> extends WrappedRegistryObject +{ + + public FeatureRegistryObject(RegistryObject registryObject) + { + super(registryObject); + } +} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/common/registration/impl/GameEventDeferredRegister.java b/src/main/java/leaf/cosmere/common/registration/impl/GameEventDeferredRegister.java new file mode 100644 index 000000000..1f8abe439 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/registration/impl/GameEventDeferredRegister.java @@ -0,0 +1,32 @@ +package leaf.cosmere.common.registration.impl; + +import leaf.cosmere.common.registration.WrappedDeferredRegister; +import net.minecraft.core.Registry; +import net.minecraft.core.registries.Registries; +import net.minecraft.world.level.gameevent.GameEvent; + +import java.util.function.Supplier; + +public class GameEventDeferredRegister extends WrappedDeferredRegister +{ + + public GameEventDeferredRegister(String modid) + { + super(modid, Registries.GAME_EVENT); + } + + public GameEventRegistryObject register(String name) + { + return register(name, 16); + } + + public GameEventRegistryObject register(String name, int notificationRadius) + { + return register(name, () -> new GameEvent(modid + ":" + name, notificationRadius)); + } + + public GameEventRegistryObject register(String name, Supplier sup) + { + return register(name, sup, GameEventRegistryObject::new); + } +} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/common/registration/impl/GameEventRegistryObject.java b/src/main/java/leaf/cosmere/common/registration/impl/GameEventRegistryObject.java new file mode 100644 index 000000000..c97ccbd9b --- /dev/null +++ b/src/main/java/leaf/cosmere/common/registration/impl/GameEventRegistryObject.java @@ -0,0 +1,14 @@ +package leaf.cosmere.common.registration.impl; + +import leaf.cosmere.common.registration.WrappedRegistryObject; +import net.minecraft.world.level.gameevent.GameEvent; +import net.minecraftforge.registries.RegistryObject; + +public class GameEventRegistryObject extends WrappedRegistryObject +{ + + public GameEventRegistryObject(RegistryObject registryObject) + { + super(registryObject); + } +} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/common/registration/impl/GlobalLootModifierDeferredRegister.java b/src/main/java/leaf/cosmere/common/registration/impl/GlobalLootModifierDeferredRegister.java new file mode 100644 index 000000000..a55baf7cd --- /dev/null +++ b/src/main/java/leaf/cosmere/common/registration/impl/GlobalLootModifierDeferredRegister.java @@ -0,0 +1,23 @@ +package leaf.cosmere.common.registration.impl; + +import com.mojang.serialization.Codec; +import leaf.cosmere.common.registration.WrappedDeferredRegister; +import net.minecraftforge.common.loot.IGlobalLootModifier; +import net.minecraftforge.registries.ForgeRegistries; + +import java.util.function.Supplier; + +public class GlobalLootModifierDeferredRegister> extends WrappedDeferredRegister> +{ + + public GlobalLootModifierDeferredRegister(String modid) + { + super(modid, ForgeRegistries.Keys.GLOBAL_LOOT_MODIFIER_SERIALIZERS); + } + + public GlobalLootModifierRegistryObject register(String name, final Supplier sup) + { + return register(name, sup, GlobalLootModifierRegistryObject::new); + } + +} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/common/registration/impl/GlobalLootModifierRegistryObject.java b/src/main/java/leaf/cosmere/common/registration/impl/GlobalLootModifierRegistryObject.java new file mode 100644 index 000000000..7b9e55b7b --- /dev/null +++ b/src/main/java/leaf/cosmere/common/registration/impl/GlobalLootModifierRegistryObject.java @@ -0,0 +1,14 @@ +package leaf.cosmere.common.registration.impl; + +import com.mojang.serialization.Codec; +import leaf.cosmere.common.registration.WrappedRegistryObject; +import net.minecraftforge.common.loot.IGlobalLootModifier; +import net.minecraftforge.registries.RegistryObject; + +public class GlobalLootModifierRegistryObject> extends WrappedRegistryObject +{ + public GlobalLootModifierRegistryObject(RegistryObject registryObject) + { + super(registryObject); + } +} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/common/registration/impl/HeightProviderTypeDeferredRegister.java b/src/main/java/leaf/cosmere/common/registration/impl/HeightProviderTypeDeferredRegister.java new file mode 100644 index 000000000..752e93d14 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/registration/impl/HeightProviderTypeDeferredRegister.java @@ -0,0 +1,31 @@ +/* + * File updated ~ 20 - 11 - 2024 ~ Leaf + */ + +package leaf.cosmere.common.registration.impl; + +import com.mojang.serialization.Codec; +import leaf.cosmere.common.registration.WrappedDeferredRegister; +import net.minecraft.core.registries.Registries; +import net.minecraft.world.level.levelgen.heightproviders.HeightProvider; +import net.minecraft.world.level.levelgen.heightproviders.HeightProviderType; + +import java.util.function.Supplier; + +public class HeightProviderTypeDeferredRegister extends WrappedDeferredRegister> +{ + public HeightProviderTypeDeferredRegister(String modid) + { + super(modid, Registries.HEIGHT_PROVIDER_TYPE); + } + + public HeightProviderTypeRegistryObject register(String name, Codec codec) + { + return register(name, () -> () -> codec); + } + + public HeightProviderTypeRegistryObject register(String name, Supplier> sup) + { + return register(name, sup, HeightProviderTypeRegistryObject::new); + } +} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/common/registration/impl/HeightProviderTypeRegistryObject.java b/src/main/java/leaf/cosmere/common/registration/impl/HeightProviderTypeRegistryObject.java new file mode 100644 index 000000000..049192479 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/registration/impl/HeightProviderTypeRegistryObject.java @@ -0,0 +1,18 @@ +/* + * File updated ~ 20 - 11 - 2024 ~ Leaf + */ + +package leaf.cosmere.common.registration.impl; + +import leaf.cosmere.common.registration.WrappedRegistryObject; +import net.minecraft.world.level.levelgen.heightproviders.HeightProvider; +import net.minecraft.world.level.levelgen.heightproviders.HeightProviderType; +import net.minecraftforge.registries.RegistryObject; + +public class HeightProviderTypeRegistryObject extends WrappedRegistryObject> +{ + public HeightProviderTypeRegistryObject(RegistryObject> registryObject) + { + super(registryObject); + } +} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/common/registration/impl/IntProviderTypeDeferredRegister.java b/src/main/java/leaf/cosmere/common/registration/impl/IntProviderTypeDeferredRegister.java new file mode 100644 index 000000000..469140a45 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/registration/impl/IntProviderTypeDeferredRegister.java @@ -0,0 +1,32 @@ +/* + * File updated ~ 20 - 11 - 2024 ~ Leaf + */ + +package leaf.cosmere.common.registration.impl; + +import com.mojang.serialization.Codec; +import leaf.cosmere.common.registration.WrappedDeferredRegister; +import net.minecraft.core.registries.Registries; +import net.minecraft.util.valueproviders.IntProvider; +import net.minecraft.util.valueproviders.IntProviderType; + +import java.util.function.Supplier; + +public class IntProviderTypeDeferredRegister extends WrappedDeferredRegister> +{ + + public IntProviderTypeDeferredRegister(String modid) + { + super(modid, Registries.INT_PROVIDER_TYPE); + } + + public IntProviderTypeRegistryObject register(String name, Codec codec) + { + return register(name, () -> () -> codec); + } + + public IntProviderTypeRegistryObject register(String name, Supplier> sup) + { + return register(name, sup, IntProviderTypeRegistryObject::new); + } +} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/common/registration/impl/IntProviderTypeRegistryObject.java b/src/main/java/leaf/cosmere/common/registration/impl/IntProviderTypeRegistryObject.java new file mode 100644 index 000000000..4e80a89a5 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/registration/impl/IntProviderTypeRegistryObject.java @@ -0,0 +1,19 @@ +/* + * File updated ~ 20 - 11 - 2024 ~ Leaf + */ + +package leaf.cosmere.common.registration.impl; + +import leaf.cosmere.common.registration.WrappedRegistryObject; +import net.minecraft.util.valueproviders.IntProvider; +import net.minecraft.util.valueproviders.IntProviderType; +import net.minecraftforge.registries.RegistryObject; + +public class IntProviderTypeRegistryObject extends WrappedRegistryObject> +{ + + public IntProviderTypeRegistryObject(RegistryObject> registryObject) + { + super(registryObject); + } +} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/common/registration/impl/ItemDeferredRegister.java b/src/main/java/leaf/cosmere/common/registration/impl/ItemDeferredRegister.java new file mode 100644 index 000000000..f0d410dfa --- /dev/null +++ b/src/main/java/leaf/cosmere/common/registration/impl/ItemDeferredRegister.java @@ -0,0 +1,80 @@ +/* + * File updated ~ 10 - 8 - 2024 ~ Leaf + */ + +package leaf.cosmere.common.registration.impl; + +import leaf.cosmere.api.providers.IItemProvider; +import leaf.cosmere.common.registration.WrappedDeferredRegister; +import net.minecraft.world.entity.Mob; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.Rarity; +import net.minecraftforge.common.ForgeSpawnEggItem; +import net.minecraftforge.registries.ForgeRegistries; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.function.Function; +import java.util.function.Supplier; + +public class ItemDeferredRegister extends WrappedDeferredRegister +{ + + private final List allItems = new ArrayList<>(); + + public ItemDeferredRegister(String modid) + { + super(modid, ForgeRegistries.ITEMS); + } + + public static Item.Properties getCosmereDefaultProperties() + { + return new Item.Properties(); + } + + public ItemRegistryObject register(String name) + { + return register(name, Item::new); + } + + public ItemRegistryObject registerUnburnable(String name) + { + return registerUnburnable(name, Item::new); + } + + public ItemRegistryObject register(String name, Rarity rarity) + { + return register(name, properties -> new Item(properties.rarity(rarity))); + } + + + public ItemRegistryObject register(String name, Function sup) + { + return register(name, () -> sup.apply(getCosmereDefaultProperties())); + } + + public ItemRegistryObject registerUnburnable(String name, Function sup) + { + return register(name, () -> sup.apply(getCosmereDefaultProperties().fireResistant())); + } + + public ItemRegistryObject register(String name, Supplier sup) + { + ItemRegistryObject registeredItem = register(name, sup, ItemRegistryObject::new); + allItems.add(registeredItem); + return registeredItem; + } + + public ItemRegistryObject registerSpawnEgg(EntityTypeRegistryObject entityTypeProvider, + int primaryColor, int secondaryColor) + { + return register(entityTypeProvider.getInternalRegistryName() + "_spawn_egg", props -> new ForgeSpawnEggItem(entityTypeProvider, primaryColor, + secondaryColor, props)); + } + + public List getAllItems() + { + return Collections.unmodifiableList(allItems); + } +} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/common/registration/impl/ItemRegistryObject.java b/src/main/java/leaf/cosmere/common/registration/impl/ItemRegistryObject.java new file mode 100644 index 000000000..4d66f8a1a --- /dev/null +++ b/src/main/java/leaf/cosmere/common/registration/impl/ItemRegistryObject.java @@ -0,0 +1,23 @@ +package leaf.cosmere.common.registration.impl; + +import leaf.cosmere.api.providers.IItemProvider; +import leaf.cosmere.common.registration.WrappedRegistryObject; +import net.minecraft.world.item.Item; +import net.minecraftforge.registries.RegistryObject; +import org.jetbrains.annotations.NotNull; + +public class ItemRegistryObject extends WrappedRegistryObject implements IItemProvider +{ + + public ItemRegistryObject(RegistryObject registryObject) + { + super(registryObject); + } + + @NotNull + @Override + public ITEM asItem() + { + return get(); + } +} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/common/registration/impl/LootFunctionDeferredRegister.java b/src/main/java/leaf/cosmere/common/registration/impl/LootFunctionDeferredRegister.java new file mode 100644 index 000000000..838cb0aa3 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/registration/impl/LootFunctionDeferredRegister.java @@ -0,0 +1,28 @@ +package leaf.cosmere.common.registration.impl; + +import leaf.cosmere.common.registration.WrappedDeferredRegister; +import net.minecraft.core.Registry; +import net.minecraft.core.registries.Registries; +import net.minecraft.world.level.storage.loot.functions.LootItemConditionalFunction; +import net.minecraft.world.level.storage.loot.functions.LootItemFunctionType; + +import java.util.function.Supplier; + +public class LootFunctionDeferredRegister extends WrappedDeferredRegister +{ + + public LootFunctionDeferredRegister(String modid) + { + super(modid, Registries.LOOT_FUNCTION_TYPE); + } + + public LootItemFunctionTypeRegistryObject registerType(String name, Supplier> sup) + { + return register(name, () -> new LootItemFunctionType(sup.get())); + } + + public LootItemFunctionTypeRegistryObject register(String name, Supplier sup) + { + return register(name, sup, LootItemFunctionTypeRegistryObject::new); + } +} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/common/registration/impl/LootItemFunctionTypeRegistryObject.java b/src/main/java/leaf/cosmere/common/registration/impl/LootItemFunctionTypeRegistryObject.java new file mode 100644 index 000000000..01df93d68 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/registration/impl/LootItemFunctionTypeRegistryObject.java @@ -0,0 +1,14 @@ +package leaf.cosmere.common.registration.impl; + +import leaf.cosmere.common.registration.WrappedRegistryObject; +import net.minecraft.world.level.storage.loot.functions.LootItemFunctionType; +import net.minecraftforge.registries.RegistryObject; + +public class LootItemFunctionTypeRegistryObject extends WrappedRegistryObject +{ + + public LootItemFunctionTypeRegistryObject(RegistryObject registryObject) + { + super(registryObject); + } +} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/common/registration/impl/ManifestationDeferredRegister.java b/src/main/java/leaf/cosmere/common/registration/impl/ManifestationDeferredRegister.java new file mode 100644 index 000000000..f0f9b527b --- /dev/null +++ b/src/main/java/leaf/cosmere/common/registration/impl/ManifestationDeferredRegister.java @@ -0,0 +1,21 @@ +package leaf.cosmere.common.registration.impl; + +import leaf.cosmere.api.CosmereAPI; +import leaf.cosmere.api.manifestation.Manifestation; +import leaf.cosmere.common.registration.WrappedDeferredRegister; + +import java.util.function.Supplier; + +public class ManifestationDeferredRegister extends WrappedDeferredRegister +{ + public ManifestationDeferredRegister(String modid) + { + super(modid, CosmereAPI.manifestationRegistryName()); + } + + + public ManifestationRegistryObject register(String name, Supplier sup) + { + return register(name, sup, ManifestationRegistryObject::new); + } +} diff --git a/src/main/java/leaf/cosmere/common/registration/impl/ManifestationRegistryObject.java b/src/main/java/leaf/cosmere/common/registration/impl/ManifestationRegistryObject.java new file mode 100644 index 000000000..d3d5e46f0 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/registration/impl/ManifestationRegistryObject.java @@ -0,0 +1,23 @@ +package leaf.cosmere.common.registration.impl; + +import leaf.cosmere.api.manifestation.Manifestation; +import leaf.cosmere.api.providers.IManifestationProvider; +import leaf.cosmere.common.registration.WrappedRegistryObject; +import net.minecraftforge.registries.RegistryObject; +import org.jetbrains.annotations.NotNull; + +public class ManifestationRegistryObject extends WrappedRegistryObject implements IManifestationProvider +{ + + public ManifestationRegistryObject(RegistryObject registryObject) + { + super(registryObject); + } + + @NotNull + @Override + public MANIFESTATION getManifestation() + { + return get(); + } +} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/common/registration/impl/MenuTypeDeferredRegister.java b/src/main/java/leaf/cosmere/common/registration/impl/MenuTypeDeferredRegister.java new file mode 100644 index 000000000..85e4435b2 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/registration/impl/MenuTypeDeferredRegister.java @@ -0,0 +1,21 @@ +package leaf.cosmere.common.registration.impl; + +import leaf.cosmere.common.registration.WrappedDeferredRegister; +import net.minecraft.world.inventory.MenuType; +import net.minecraftforge.registries.ForgeRegistries; + +import java.util.function.Supplier; + +public class MenuTypeDeferredRegister extends WrappedDeferredRegister> +{ + + public MenuTypeDeferredRegister(String modid) + { + super(modid, ForgeRegistries.MENU_TYPES); + } + + public MenuTypeRegistryObject> register(String name, Supplier> sup) + { + return register(name, sup, MenuTypeRegistryObject::new); + } +} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/common/registration/impl/MenuTypeRegistryObject.java b/src/main/java/leaf/cosmere/common/registration/impl/MenuTypeRegistryObject.java new file mode 100644 index 000000000..9e279265e --- /dev/null +++ b/src/main/java/leaf/cosmere/common/registration/impl/MenuTypeRegistryObject.java @@ -0,0 +1,13 @@ +package leaf.cosmere.common.registration.impl; + +import leaf.cosmere.common.registration.WrappedRegistryObject; +import net.minecraft.world.inventory.MenuType; +import net.minecraftforge.registries.RegistryObject; + +public class MenuTypeRegistryObject> extends WrappedRegistryObject +{ + public MenuTypeRegistryObject(RegistryObject registryObject) + { + super(registryObject); + } +} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/common/registration/impl/MobEffectDeferredRegister.java b/src/main/java/leaf/cosmere/common/registration/impl/MobEffectDeferredRegister.java new file mode 100644 index 000000000..150d8cb7d --- /dev/null +++ b/src/main/java/leaf/cosmere/common/registration/impl/MobEffectDeferredRegister.java @@ -0,0 +1,34 @@ +package leaf.cosmere.common.registration.impl; + +import leaf.cosmere.api.providers.IMobEffectProvider; +import leaf.cosmere.common.registration.WrappedDeferredRegister; +import net.minecraft.world.effect.MobEffect; +import net.minecraftforge.registries.ForgeRegistries; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.function.Supplier; + +public class MobEffectDeferredRegister extends WrappedDeferredRegister +{ + private final List allMobEffects = new ArrayList<>(); + + public MobEffectDeferredRegister(String modid) + { + super(modid, ForgeRegistries.MOB_EFFECTS); + } + + public MobEffectRegistryObject register(String name, Supplier sup) + { + MobEffectRegistryObject registeredItem = register(name, sup, MobEffectRegistryObject::new); + allMobEffects.add(registeredItem); + return registeredItem; + } + + + public List getAllMobEffects() + { + return Collections.unmodifiableList(allMobEffects); + } +} diff --git a/src/main/java/leaf/cosmere/common/registration/impl/MobEffectRegistryObject.java b/src/main/java/leaf/cosmere/common/registration/impl/MobEffectRegistryObject.java new file mode 100644 index 000000000..d4d1bb5fc --- /dev/null +++ b/src/main/java/leaf/cosmere/common/registration/impl/MobEffectRegistryObject.java @@ -0,0 +1,23 @@ +package leaf.cosmere.common.registration.impl; + +import leaf.cosmere.api.providers.IMobEffectProvider; +import leaf.cosmere.common.registration.WrappedRegistryObject; +import net.minecraft.world.effect.MobEffect; +import net.minecraftforge.registries.RegistryObject; +import org.jetbrains.annotations.NotNull; + +public class MobEffectRegistryObject extends WrappedRegistryObject implements IMobEffectProvider +{ + public MobEffectRegistryObject(RegistryObject registryObject) + { + super(registryObject); + } + + @NotNull + @Override + public MOB_EFFECT getMobEffect() + { + return get(); + } + +} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/common/registration/impl/POITypeDeferredRegister.java b/src/main/java/leaf/cosmere/common/registration/impl/POITypeDeferredRegister.java new file mode 100644 index 000000000..c41947953 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/registration/impl/POITypeDeferredRegister.java @@ -0,0 +1,38 @@ +package leaf.cosmere.common.registration.impl; + +import com.google.common.collect.ImmutableSet; +import leaf.cosmere.common.registration.WrappedDeferredRegister; +import net.minecraft.core.Registry; +import net.minecraft.core.registries.Registries; +import net.minecraft.world.entity.ai.village.poi.PoiType; +import net.minecraft.world.item.BlockItem; +import net.minecraft.world.level.block.Block; + +import java.util.function.Supplier; + +public class POITypeDeferredRegister extends WrappedDeferredRegister +{ + public POITypeDeferredRegister(String modid) + { + super(modid, Registries.POINT_OF_INTEREST_TYPE); + } + + private PoiType registerPOIType(Block block) + { + return new PoiType( + ImmutableSet.copyOf(block.getStateDefinition().getPossibleStates()),//states + 1, //tickets(?) + 1);//range + } + + public POITypeRegistryObject registerPOI(String name, Supplier> block) + { + return register(name, () -> registerPOIType(block.get().getBlock())); + } + + private POITypeRegistryObject register(String name, Supplier supplier) + { + return register(name, supplier, POITypeRegistryObject::new); + } + +} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/common/registration/impl/POITypeRegistryObject.java b/src/main/java/leaf/cosmere/common/registration/impl/POITypeRegistryObject.java new file mode 100644 index 000000000..f591a8c3c --- /dev/null +++ b/src/main/java/leaf/cosmere/common/registration/impl/POITypeRegistryObject.java @@ -0,0 +1,14 @@ +package leaf.cosmere.common.registration.impl; + +import leaf.cosmere.common.registration.WrappedRegistryObject; +import net.minecraft.world.entity.ai.village.poi.PoiType; +import net.minecraftforge.registries.RegistryObject; + +public class POITypeRegistryObject extends WrappedRegistryObject +{ + + public POITypeRegistryObject(RegistryObject registryObject) + { + super(registryObject); + } +} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/common/registration/impl/PlacedFeatureDeferredRegister.java b/src/main/java/leaf/cosmere/common/registration/impl/PlacedFeatureDeferredRegister.java new file mode 100644 index 000000000..d727c348b --- /dev/null +++ b/src/main/java/leaf/cosmere/common/registration/impl/PlacedFeatureDeferredRegister.java @@ -0,0 +1,22 @@ +package leaf.cosmere.common.registration.impl; + +import leaf.cosmere.common.registration.WrappedDeferredRegister; +import net.minecraft.core.Registry; +import net.minecraft.core.registries.Registries; +import net.minecraft.world.level.levelgen.placement.PlacedFeature; + +import java.util.function.Supplier; + +public class PlacedFeatureDeferredRegister extends WrappedDeferredRegister +{ + + public PlacedFeatureDeferredRegister(String modid) + { + super(modid, Registries.PLACED_FEATURE); + } + + public PlacedFeatureRegistryObject register(String name, Supplier sup) + { + return register(name, sup, PlacedFeatureRegistryObject::new); + } +} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/common/registration/impl/PlacedFeatureRegistryObject.java b/src/main/java/leaf/cosmere/common/registration/impl/PlacedFeatureRegistryObject.java new file mode 100644 index 000000000..38f258523 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/registration/impl/PlacedFeatureRegistryObject.java @@ -0,0 +1,14 @@ +package leaf.cosmere.common.registration.impl; + +import leaf.cosmere.common.registration.WrappedRegistryObject; +import net.minecraft.world.level.levelgen.placement.PlacedFeature; +import net.minecraftforge.registries.RegistryObject; + +public class PlacedFeatureRegistryObject extends WrappedRegistryObject +{ + + public PlacedFeatureRegistryObject(RegistryObject registryObject) + { + super(registryObject); + } +} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/common/registration/impl/RecipeSerializerDeferredRegister.java b/src/main/java/leaf/cosmere/common/registration/impl/RecipeSerializerDeferredRegister.java new file mode 100644 index 000000000..8da0ee518 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/registration/impl/RecipeSerializerDeferredRegister.java @@ -0,0 +1,26 @@ +/* + * File updated ~ 10 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.common.registration.impl; + +import leaf.cosmere.common.registration.WrappedDeferredRegister; +import net.minecraft.world.item.crafting.Recipe; +import net.minecraft.world.item.crafting.RecipeSerializer; +import net.minecraftforge.registries.ForgeRegistries; + +import java.util.function.Supplier; + +public class RecipeSerializerDeferredRegister extends WrappedDeferredRegister> +{ + + public RecipeSerializerDeferredRegister(String modid) + { + super(modid, ForgeRegistries.RECIPE_SERIALIZERS); + } + + public > RecipeSerializerRegistryObject register(String name, Supplier> sup) + { + return register(name, sup, RecipeSerializerRegistryObject::new); + } +} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/common/registration/impl/RecipeSerializerRegistryObject.java b/src/main/java/leaf/cosmere/common/registration/impl/RecipeSerializerRegistryObject.java new file mode 100644 index 000000000..89587d600 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/registration/impl/RecipeSerializerRegistryObject.java @@ -0,0 +1,18 @@ +/* + * File updated ~ 10 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.common.registration.impl; + +import leaf.cosmere.common.registration.WrappedRegistryObject; +import net.minecraft.world.item.crafting.Recipe; +import net.minecraft.world.item.crafting.RecipeSerializer; +import net.minecraftforge.registries.RegistryObject; + +public class RecipeSerializerRegistryObject> extends WrappedRegistryObject> +{ + public RecipeSerializerRegistryObject(RegistryObject> registryObject) + { + super(registryObject); + } +} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/common/registration/impl/StatDeferredRegister.java b/src/main/java/leaf/cosmere/common/registration/impl/StatDeferredRegister.java new file mode 100644 index 000000000..272ed7ce3 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/registration/impl/StatDeferredRegister.java @@ -0,0 +1,44 @@ +/* + * File updated ~ 17 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.common.registration.impl; + +import leaf.cosmere.common.registration.WrappedDeferredRegister; +import net.minecraft.core.Registry; +import net.minecraft.core.registries.Registries; +import net.minecraft.resources.ResourceLocation; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.function.Supplier; + +public class StatDeferredRegister extends WrappedDeferredRegister +{ + + private final List allItems = new ArrayList<>(); + + public StatDeferredRegister(String modid) + { + super(modid, Registries.CUSTOM_STAT); + } + + + public StatRegistryObject register(String name) + { + return register(name, () -> new ResourceLocation(name)); + } + + public StatRegistryObject register(String name, Supplier supplier) + { + final StatRegistryObject statRegistryObject = register(name, supplier, StatRegistryObject::new); + allItems.add(statRegistryObject); + return statRegistryObject; + } + + public List getAllItems() + { + return Collections.unmodifiableList(allItems); + } +} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/common/registration/impl/StatRegistryObject.java b/src/main/java/leaf/cosmere/common/registration/impl/StatRegistryObject.java new file mode 100644 index 000000000..f4c7c58f3 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/registration/impl/StatRegistryObject.java @@ -0,0 +1,14 @@ +package leaf.cosmere.common.registration.impl; + +import leaf.cosmere.common.registration.WrappedRegistryObject; +import net.minecraft.resources.ResourceLocation; +import net.minecraftforge.registries.RegistryObject; + +public class StatRegistryObject extends WrappedRegistryObject +{ + + public StatRegistryObject(RegistryObject registryObject) + { + super(registryObject); + } +} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/common/registration/impl/VillagerProfessionDeferredRegister.java b/src/main/java/leaf/cosmere/common/registration/impl/VillagerProfessionDeferredRegister.java new file mode 100644 index 000000000..d8da2057c --- /dev/null +++ b/src/main/java/leaf/cosmere/common/registration/impl/VillagerProfessionDeferredRegister.java @@ -0,0 +1,46 @@ +package leaf.cosmere.common.registration.impl; + +import com.google.common.collect.ImmutableSet; +import leaf.cosmere.common.registration.WrappedDeferredRegister; +import net.minecraft.core.Holder; +import net.minecraft.core.Registry; +import net.minecraft.core.registries.Registries; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.world.entity.ai.village.poi.PoiType; +import net.minecraft.world.entity.npc.VillagerProfession; + +import java.util.function.Predicate; +import java.util.function.Supplier; + +public class VillagerProfessionDeferredRegister extends WrappedDeferredRegister +{ + public VillagerProfessionDeferredRegister(String modid) + { + super(modid, Registries.VILLAGER_PROFESSION); + } + + private static VillagerProfession registerProfession(String name, POITypeRegistryObject poi, SoundEvent workSound) + { + Predicate> heldJobSite = (poiType) -> poiType == poi.getRegistryObject().getHolder().get(); + Predicate> acquirableJobSite = (poiType) -> poiType == poi.getRegistryObject().getHolder().get(); + + return new VillagerProfession( + name, + heldJobSite, + acquirableJobSite, + ImmutableSet.of(), + ImmutableSet.of(), + workSound); + } + + public VillagerProfessionRegistryObject register(String name, POITypeRegistryObject poi, SoundEvent soundEvent) + { + return register(name, () -> registerProfession(name, poi, soundEvent)); + } + + + public VillagerProfessionRegistryObject register(String name, Supplier sup) + { + return register(name, sup, VillagerProfessionRegistryObject::new); + } +} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/common/registration/impl/VillagerProfessionRegistryObject.java b/src/main/java/leaf/cosmere/common/registration/impl/VillagerProfessionRegistryObject.java new file mode 100644 index 000000000..54b2e2854 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/registration/impl/VillagerProfessionRegistryObject.java @@ -0,0 +1,13 @@ +package leaf.cosmere.common.registration.impl; + +import leaf.cosmere.common.registration.WrappedRegistryObject; +import net.minecraftforge.registries.RegistryObject; + +public class VillagerProfessionRegistryObject extends WrappedRegistryObject +{ + + public VillagerProfessionRegistryObject(RegistryObject registryObject) + { + super(registryObject); + } +} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/common/registry/AdvancementTriggerRegistry.java b/src/main/java/leaf/cosmere/common/registry/AdvancementTriggerRegistry.java new file mode 100644 index 000000000..3d6fc609d --- /dev/null +++ b/src/main/java/leaf/cosmere/common/registry/AdvancementTriggerRegistry.java @@ -0,0 +1,15 @@ +/* + * File updated ~ 24 - 4 - 2021 ~ Leaf + */ + +package leaf.cosmere.common.registry; + +public class AdvancementTriggerRegistry +{ + //public static final TriggerBase COSMERE = new TriggerBase("cosmere"); + + public static void init() + { + //CriteriaTriggers.register(COSMERE); + } +} diff --git a/src/main/java/leaf/cosmere/common/registry/ArgumentTypeRegistry.java b/src/main/java/leaf/cosmere/common/registry/ArgumentTypeRegistry.java new file mode 100644 index 000000000..fd81f2b72 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/registry/ArgumentTypeRegistry.java @@ -0,0 +1,33 @@ +package leaf.cosmere.common.registry; + +import leaf.cosmere.common.Cosmere; +import leaf.cosmere.common.commands.arguments.AllomancyArgumentType; +import leaf.cosmere.common.commands.arguments.FeruchemyArgumentType; +import leaf.cosmere.common.commands.arguments.ManifestationsArgumentType; +import net.minecraft.commands.synchronization.ArgumentTypeInfo; +import net.minecraft.commands.synchronization.ArgumentTypeInfos; +import net.minecraft.commands.synchronization.SingletonArgumentInfo; +import net.minecraftforge.eventbus.api.IEventBus; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.RegistryObject; + +public class ArgumentTypeRegistry +{ + public static final DeferredRegister> ARGUMENT_TYPE_INFOS = DeferredRegister.create(ForgeRegistries.COMMAND_ARGUMENT_TYPES, Cosmere.MODID); + + public static final RegistryObject> MANIFESTATION_ARGUMENT_TYPE = ARGUMENT_TYPE_INFOS.register("manifestation_argument_type", + () -> ArgumentTypeInfos.registerByClass( + ManifestationsArgumentType.class, + SingletonArgumentInfo.contextFree(ManifestationsArgumentType::createArgument))); + + public static final RegistryObject> ALLOMANCY_ARGUMENT_TYPE = ARGUMENT_TYPE_INFOS.register("allomancy_argument_type", + () -> ArgumentTypeInfos.registerByClass( + AllomancyArgumentType.class, + SingletonArgumentInfo.contextFree(AllomancyArgumentType::createArgument))); + + public static final RegistryObject> FERUCHEMY_ARGUMENT_TYPE = ARGUMENT_TYPE_INFOS.register("feruchemy_argument_type", + () -> ArgumentTypeInfos.registerByClass( + FeruchemyArgumentType.class, + SingletonArgumentInfo.contextFree(FeruchemyArgumentType::createArgument))); +} diff --git a/src/main/java/leaf/cosmere/common/registry/AttributesRegistry.java b/src/main/java/leaf/cosmere/common/registry/AttributesRegistry.java new file mode 100644 index 000000000..e759c711d --- /dev/null +++ b/src/main/java/leaf/cosmere/common/registry/AttributesRegistry.java @@ -0,0 +1,79 @@ +/* + * File updated ~ 8 - 1 - 2025 ~ Leaf + */ + +package leaf.cosmere.common.registry; + +import leaf.cosmere.common.Cosmere; +import leaf.cosmere.common.registration.impl.AttributeDeferredRegister; +import leaf.cosmere.common.registration.impl.AttributeRegistryObject; +import net.minecraft.world.entity.ai.attributes.Attribute; + +public class AttributesRegistry +{ + public static final AttributeDeferredRegister ATTRIBUTES = new AttributeDeferredRegister(Cosmere.MODID); + + public static final AttributeRegistryObject NIGHT_VISION_ATTRIBUTE = ATTRIBUTES.register("night_vision", Cosmere.MODID, 0, 0, 1); + public static final AttributeRegistryObject XP_RATE_ATTRIBUTE = ATTRIBUTES.register("xp_gain_rate", Cosmere.MODID, 1, 0, 20); + + public static final AttributeRegistryObject SIZE_ATTRIBUTE = ATTRIBUTES.register("size", Cosmere.MODID, 1, 0.1f, 20); + + + //copper clouds, aviaar, light weavers, aluminum cages? + public static final AttributeRegistryObject COGNITIVE_CONCEALMENT = + ATTRIBUTES.register( + "cognitive_concealment", + Cosmere.MODID, + 0, + 0, + 99); + + public static final AttributeRegistryObject CONNECTION = + ATTRIBUTES.register( + "connection", + Cosmere.MODID, + 0, + -99, + 99); + + public static final AttributeRegistryObject COSMERE_FORTUNE = + ATTRIBUTES.register( + "cosmere_fortune", + Cosmere.MODID, + 0, + -99, + 99); + + public static final AttributeRegistryObject IDENTITY = + ATTRIBUTES.register( + "identity", + Cosmere.MODID, + 1, + -99, + 99); + + public static final AttributeRegistryObject DETERMINATION = + ATTRIBUTES.register( + "determination", + Cosmere.MODID, + 0, + -99, + 99); + + public static final AttributeRegistryObject WARMTH = + ATTRIBUTES.register( + "warmth", + Cosmere.MODID, + 0, + -99, + 99); + + public static final AttributeRegistryObject HEALING_STRENGTH = + ATTRIBUTES.register( + "healing_strength", + Cosmere.MODID, + 0, + -99, + 99); + +} diff --git a/src/main/java/leaf/cosmere/common/registry/BiomeModifierRegistry.java b/src/main/java/leaf/cosmere/common/registry/BiomeModifierRegistry.java new file mode 100644 index 000000000..790abe572 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/registry/BiomeModifierRegistry.java @@ -0,0 +1,15 @@ +/* + * File updated ~ 20 - 11 - 2024 ~ Leaf + */ + +package leaf.cosmere.common.registry; + +import leaf.cosmere.common.Cosmere; +import leaf.cosmere.common.registration.impl.BiomeModifierSerializerDeferredRegister; + +public class BiomeModifierRegistry +{ + public static final BiomeModifierSerializerDeferredRegister BIOME_MODIFIER_SERIALIZERS = new BiomeModifierSerializerDeferredRegister(Cosmere.MODID); + + +} diff --git a/src/main/java/leaf/cosmere/common/registry/BiomeRegistry.java b/src/main/java/leaf/cosmere/common/registry/BiomeRegistry.java new file mode 100644 index 000000000..7ad37d1c8 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/registry/BiomeRegistry.java @@ -0,0 +1,43 @@ +/* + * File updated ~ 3 - 7 - 2022 ~ Leaf + */ + +package leaf.cosmere.common.registry; + +import leaf.cosmere.common.Cosmere; +import leaf.cosmere.common.registration.impl.BiomeDeferredRegister; +import leaf.cosmere.common.registration.impl.BiomeRegistryObject; +import net.minecraft.core.HolderGetter; +import net.minecraft.core.Registry; +import net.minecraft.core.registries.Registries; +import net.minecraft.data.worldgen.BootstapContext; +import net.minecraft.data.worldgen.biome.OverworldBiomes; +import net.minecraft.resources.ResourceKey; +import net.minecraft.world.level.biome.Biome; +import net.minecraft.world.level.levelgen.NoiseGeneratorSettings; +import net.minecraft.world.level.levelgen.carver.ConfiguredWorldCarver; +import net.minecraft.world.level.levelgen.placement.PlacedFeature; + +public class BiomeRegistry +{ + public static final BiomeDeferredRegister BIOMES = new BiomeDeferredRegister(Cosmere.MODID); + + //public static final BiomeRegistryObject SHADESMAR_BIOME = BIOMES.register("shadesmar_biome", OverworldBiomes::stonyPeaks); + + //resource keys + public static final ResourceKey SHADESMAR_BIOME_KEY = ResourceKey.create(Registries.BIOME, Cosmere.rl("shadesmar_biome")); + public static final ResourceKey SHADESMAR_NOISE_SETTINGS = ResourceKey.create(Registries.NOISE_SETTINGS, Cosmere.rl("shadesmar_biome")); + + public static void bootstrapBiomes(BootstapContext context) + { + HolderGetter> carverGetter = context.lookup(Registries.CONFIGURED_CARVER); + HolderGetter placedFeatureGetter = context.lookup(Registries.PLACED_FEATURE); + + register(context, SHADESMAR_BIOME_KEY, OverworldBiomes.stonyPeaks(placedFeatureGetter, carverGetter)); + } + + private static void register(BootstapContext context, ResourceKey key, Biome biome) + { + context.register(key, biome); + } +} diff --git a/src/main/java/leaf/cosmere/common/registry/BlocksRegistry.java b/src/main/java/leaf/cosmere/common/registry/BlocksRegistry.java new file mode 100644 index 000000000..8b49c1e1f --- /dev/null +++ b/src/main/java/leaf/cosmere/common/registry/BlocksRegistry.java @@ -0,0 +1,66 @@ +/* + * File updated ~ 20 - 11 - 2024 ~ Leaf + */ + +package leaf.cosmere.common.registry; + +import leaf.cosmere.api.Constants; +import leaf.cosmere.api.EnumUtils; +import leaf.cosmere.api.Metals; +import leaf.cosmere.common.Cosmere; +import leaf.cosmere.common.blocks.MetalBlock; +import leaf.cosmere.common.blocks.MetalOreBlock; +import leaf.cosmere.common.blocks.MetalworkingTableBlock; +import leaf.cosmere.common.registration.impl.BlockDeferredRegister; +import leaf.cosmere.common.registration.impl.BlockRegistryObject; +import leaf.cosmere.common.resource.ore.OreBlockType; +import leaf.cosmere.common.resource.ore.OreType; +import leaf.cosmere.common.util.CosmereEnumUtils; +import net.minecraft.world.item.BlockItem; +import net.minecraft.world.level.block.Block; + +import java.util.Arrays; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +/* Special thank you to SizableShrimp from the Forge Project discord! + * Java isn't my first programming language, so I didn't know you could collect and set up items like this! + * Makes setting up items for metals a breeze~ + */ +public class BlocksRegistry +{ + public static final BlockDeferredRegister BLOCKS = new BlockDeferredRegister(Cosmere.MODID); + + public static final BlockRegistryObject METALWORKING_TABLE = BLOCKS.register("metalworking_table", MetalworkingTableBlock::new); + + public static final Map> METAL_BLOCKS = + Arrays.stream(EnumUtils.METAL_TYPES) + .filter(type -> type.hasMaterialItem() && type != Metals.MetalType.COPPER) + .collect(Collectors.toMap( + Function.identity(), + metalType -> BLOCKS.registerWithRarity( + metalType.getName() + Constants.RegNameStubs.BLOCK, + () -> new MetalBlock(metalType), + metalType.getRarity()))); + + + public static final Map METAL_ORE = + Arrays.stream(CosmereEnumUtils.ORE_TYPES) + .collect(Collectors.toMap( + Function.identity(), + oreType -> + { + final Metals.MetalType metalType = oreType.getMetalType(); + final BlockRegistryObject stoneOre = BLOCKS.registerWithRarity( + metalType.getName() + Constants.RegNameStubs.ORE, + () -> new MetalOreBlock(metalType), + metalType.getRarity()); + final BlockRegistryObject deepslateOre = BLOCKS.registerWithRarity( + Constants.RegNameStubs.DEEPSLATE + metalType.getName() + Constants.RegNameStubs.ORE, + () -> new MetalOreBlock(metalType), + metalType.getRarity()); + return new OreBlockType(stoneOre, deepslateOre); + })); + +} diff --git a/src/main/java/leaf/cosmere/common/registry/CosmereDamageTypesRegistry.java b/src/main/java/leaf/cosmere/common/registry/CosmereDamageTypesRegistry.java new file mode 100644 index 000000000..44cb4c110 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/registry/CosmereDamageTypesRegistry.java @@ -0,0 +1,74 @@ +/* + * File updated ~ 10 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.common.registry; + +import leaf.cosmere.api.text.IHasTranslationKey; +import leaf.cosmere.common.Cosmere; +import net.minecraft.core.RegistryAccess; +import net.minecraft.core.registries.Registries; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.damagesource.DamageType; +import net.minecraft.world.level.Level; +import org.jetbrains.annotations.NotNull; + +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + +public class CosmereDamageTypesRegistry +{ + private static final Map INTERNAL_DAMAGE_TYPES = new HashMap<>(); + public static final Map DAMAGE_TYPES = Collections.unmodifiableMap(INTERNAL_DAMAGE_TYPES); + + public static final CosmereDamageType EAT_METAL = new CosmereDamageType("eat_metal", 0.1f); + public static final CosmereDamageType SPIKED = new CosmereDamageType("spiked", 0.1f); + + public record CosmereDamageType(ResourceKey key, float exhaustion) implements IHasTranslationKey + { + public CosmereDamageType + { + INTERNAL_DAMAGE_TYPES.put(key.location().toString(), this); + } + + private CosmereDamageType(String name) + { + this(name, 0); + } + + private CosmereDamageType(String name, float exhaustion) + { + this(ResourceKey.create(Registries.DAMAGE_TYPE, Cosmere.rl(name)), exhaustion); + } + + public String getMsgId() + { + return registryName().getNamespace() + "." + registryName().getPath(); + } + + public ResourceLocation registryName() + { + return key.location(); + } + + @NotNull + @Override + public String getTranslationKey() + { + return "death.attack." + getMsgId(); + } + + public DamageSource source(Level level) + { + return source(level.registryAccess()); + } + + public DamageSource source(RegistryAccess registryAccess) + { + return new DamageSource(registryAccess.registryOrThrow(Registries.DAMAGE_TYPE).getHolderOrThrow(key())); + } + } +} diff --git a/src/main/java/leaf/cosmere/common/registry/CosmereEffectsRegistry.java b/src/main/java/leaf/cosmere/common/registry/CosmereEffectsRegistry.java new file mode 100644 index 000000000..17b6db3ad --- /dev/null +++ b/src/main/java/leaf/cosmere/common/registry/CosmereEffectsRegistry.java @@ -0,0 +1,21 @@ +/* + * File updated ~ 5 - 3 - 2025 ~ Leaf + */ + +package leaf.cosmere.common.registry; + +import leaf.cosmere.common.Cosmere; +import leaf.cosmere.common.effects.DrainInvestitureEffect; +import leaf.cosmere.common.registration.impl.CosmereEffectDeferredRegister; +import leaf.cosmere.common.registration.impl.CosmereEffectRegistryObject; + +public class CosmereEffectsRegistry +{ + public static final CosmereEffectDeferredRegister EFFECTS = new CosmereEffectDeferredRegister(Cosmere.MODID); + //Cosmere library mod registers the cosmere effect registry that all sub mods can then add their effects to + + + public static final CosmereEffectRegistryObject DRAIN_INVESTITURE = EFFECTS.register( + "drain_investiture", + DrainInvestitureEffect::new); +} diff --git a/src/main/java/leaf/cosmere/common/registry/CosmereRecipesRegistry.java b/src/main/java/leaf/cosmere/common/registry/CosmereRecipesRegistry.java new file mode 100644 index 000000000..5c6e48f5b --- /dev/null +++ b/src/main/java/leaf/cosmere/common/registry/CosmereRecipesRegistry.java @@ -0,0 +1,26 @@ +package leaf.cosmere.common.registry; + +import leaf.cosmere.common.Cosmere; +import leaf.cosmere.common.recipes.GodMetalNuggetsCompress; +import leaf.cosmere.common.recipes.GodMetalNuggetsDecompress; +import leaf.cosmere.common.recipes.GodMetalAlloyNuggetRecipe; +import leaf.cosmere.common.registration.impl.RecipeSerializerDeferredRegister; +import leaf.cosmere.common.registration.impl.RecipeSerializerRegistryObject; +import net.minecraft.world.item.crafting.SimpleCraftingRecipeSerializer; + +public class CosmereRecipesRegistry +{ + public static final RecipeSerializerDeferredRegister RECIPE_SERIALIZERS = new RecipeSerializerDeferredRegister(Cosmere.MODID); + + public static final RecipeSerializerRegistryObject GOD_METAL_ALLOY_NUGGET_RECIPE = + RECIPE_SERIALIZERS.register("crafting_god_metal_alloy_nugget_recipe", + () -> new SimpleCraftingRecipeSerializer<>(GodMetalAlloyNuggetRecipe::new)); + + public static final RecipeSerializerRegistryObject GOD_METAL_NUGGETS_COMPRESS = + RECIPE_SERIALIZERS.register("crafting_god_metal_nuggets_compress", + () -> new SimpleCraftingRecipeSerializer<>(GodMetalNuggetsCompress::new)); + + public static final RecipeSerializerRegistryObject GOD_METAL_NUGGETS_DECOMPRESS = + RECIPE_SERIALIZERS.register("crafting_god_metal_nuggets_decompress", + () -> new SimpleCraftingRecipeSerializer<>(GodMetalNuggetsDecompress::new)); +} diff --git a/src/main/java/leaf/cosmere/common/registry/CreativeTabsRegistry.java b/src/main/java/leaf/cosmere/common/registry/CreativeTabsRegistry.java new file mode 100644 index 000000000..7ad224eb6 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/registry/CreativeTabsRegistry.java @@ -0,0 +1,108 @@ +/* + * File updated ~ 10 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.common.registry; + +import leaf.cosmere.api.providers.IBlockProvider; +import leaf.cosmere.api.providers.IItemProvider; +import leaf.cosmere.common.Cosmere; +import leaf.cosmere.common.items.GodMetalAlloyNuggetItem; +import leaf.cosmere.common.items.GodMetalNuggetItem; +import leaf.cosmere.common.registration.impl.CreativeTabDeferredRegister; +import leaf.cosmere.common.registration.impl.CreativeTabRegistryObject; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceKey; +import net.minecraft.world.item.CreativeModeTab; +import net.minecraft.world.item.CreativeModeTabs; +import net.minecraft.world.level.block.Block; +import net.minecraftforge.event.BuildCreativeModeTabContentsEvent; + +import java.util.List; + +public class CreativeTabsRegistry +{ + public static final CreativeTabDeferredRegister CREATIVE_TABS = new CreativeTabDeferredRegister(Cosmere.MODID, CreativeTabsRegistry::addToExistingTabs); + + + public static final CreativeTabRegistryObject ITEMS = + CREATIVE_TABS.registerMain( + Component.translatable("tabs." + Cosmere.MODID + ".items"), + ItemsRegistry.GUIDE, + builder -> + builder.withSearchBar()//Allow our tabs to be searchable for convenience purposes + .displayItems((displayParameters, output) -> + { + List items = ItemsRegistry.ITEMS.getAllItems(); + for(IItemProvider item : items) + { + if(!(item.asItem() instanceof GodMetalAlloyNuggetItem)) + { + output.accept(item); + } + } + CreativeTabDeferredRegister.addToDisplay(BlocksRegistry.BLOCKS, output); + }) + ); + + private static void addToExistingTabs(BuildCreativeModeTabContentsEvent event) + { + ResourceKey tabKey = event.getTabKey(); + if (tabKey == CreativeModeTabs.BUILDING_BLOCKS) + { + CreativeTabDeferredRegister.addToDisplay(event, BlocksRegistry.METALWORKING_TABLE); + + for (var ore : BlocksRegistry.METAL_BLOCKS.values()) + { + CreativeTabDeferredRegister.addToDisplay(event, ore); + } + } + else if (tabKey == CreativeModeTabs.NATURAL_BLOCKS) + { + for (var ore : BlocksRegistry.METAL_ORE.values()) + { + CreativeTabDeferredRegister.addToDisplay(event, ore.stone()); + CreativeTabDeferredRegister.addToDisplay(event, ore.deepslate()); + } + } + else if (tabKey == CreativeModeTabs.FUNCTIONAL_BLOCKS) + { + for (IBlockProvider blockProvider : BlocksRegistry.BLOCKS.getAllBlocks()) + { + Block block = blockProvider.getBlock(); + //if (block == valid) + //{ + // CreativeTabDeferredRegister.addToDisplay(event, block); + //} + } + } + else if (tabKey == CreativeModeTabs.REDSTONE_BLOCKS) + { + + } + else if (tabKey == CreativeModeTabs.TOOLS_AND_UTILITIES) + { + + } + else if (tabKey == CreativeModeTabs.COMBAT) + { + + } + else if (tabKey == CreativeModeTabs.FOOD_AND_DRINKS) + { + //ItemsRegistry.SOME_FOOD.get().addItems(event); + } + else if (tabKey == CreativeModeTabs.SPAWN_EGGS) + { + + } + else if (tabKey == CreativeModeTabs.INGREDIENTS) + { + for (IItemProvider item : ItemsRegistry.METAL_INGOTS.values()) + { + CreativeTabDeferredRegister.addToDisplay(event, item); + } + } + } + +} diff --git a/src/main/java/leaf/cosmere/common/registry/DimensionRegistry.java b/src/main/java/leaf/cosmere/common/registry/DimensionRegistry.java new file mode 100644 index 000000000..66e3d070d --- /dev/null +++ b/src/main/java/leaf/cosmere/common/registry/DimensionRegistry.java @@ -0,0 +1,32 @@ +/* + * File updated ~ 6 - 9 - 2022 ~ Leaf + */ + +package leaf.cosmere.common.registry; + +import leaf.cosmere.api.CosmereAPI; +import leaf.cosmere.common.Cosmere; +import net.minecraft.core.registries.Registries; +import net.minecraft.resources.ResourceKey; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.dimension.DimensionType; + +public class DimensionRegistry +{ + public static final ResourceKey SHADESMAR_DIM_KEY = + ResourceKey.create( + Registries.DIMENSION, + Cosmere.rl("shadesmar") + ); + + public static final ResourceKey SHADESMAR_DIM_TYPE = + ResourceKey.create( + Registries.DIMENSION_TYPE, + SHADESMAR_DIM_KEY.registry() + ); + + public static void register() + { + CosmereAPI.logger.info("Registering cosmere dimensions"); + } +} diff --git a/src/main/java/leaf/cosmere/common/registry/EntityTypeRegistry.java b/src/main/java/leaf/cosmere/common/registry/EntityTypeRegistry.java new file mode 100644 index 000000000..fbc46dd19 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/registry/EntityTypeRegistry.java @@ -0,0 +1,10 @@ +package leaf.cosmere.common.registry; + +import leaf.cosmere.common.Cosmere; +import leaf.cosmere.common.registration.impl.EntityTypeDeferredRegister; + +public class EntityTypeRegistry +{ + + public static final EntityTypeDeferredRegister ENTITY_TYPES = new EntityTypeDeferredRegister(Cosmere.MODID); +} diff --git a/src/main/java/leaf/cosmere/common/registry/FeatureRegistry.java b/src/main/java/leaf/cosmere/common/registry/FeatureRegistry.java new file mode 100644 index 000000000..d70e8c751 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/registry/FeatureRegistry.java @@ -0,0 +1,20 @@ +/* + * File updated ~ 10 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.common.registry; + +import leaf.cosmere.common.Cosmere; +import leaf.cosmere.common.registration.impl.FeatureDeferredRegister; +import leaf.cosmere.common.registration.impl.FeatureRegistryObject; +import leaf.cosmere.common.world.ResizableOreFeature; +import leaf.cosmere.common.world.ResizableOreFeatureConfig; + +public class FeatureRegistry +{ + public static final FeatureDeferredRegister FEATURES = new FeatureDeferredRegister(Cosmere.MODID); + + public static final FeatureRegistryObject ORE = FEATURES.register("ore", ResizableOreFeature::new); + + +} diff --git a/src/main/java/leaf/cosmere/common/registry/GameEventRegistry.java b/src/main/java/leaf/cosmere/common/registry/GameEventRegistry.java new file mode 100644 index 000000000..f30d3881a --- /dev/null +++ b/src/main/java/leaf/cosmere/common/registry/GameEventRegistry.java @@ -0,0 +1,21 @@ +/* + * File updated ~ 26 - 5 - 2023 ~ Leaf + */ + +package leaf.cosmere.common.registry; + +import leaf.cosmere.common.Cosmere; +import leaf.cosmere.common.registration.impl.GameEventDeferredRegister; +import leaf.cosmere.common.registration.impl.GameEventRegistryObject; +import net.minecraft.world.level.gameevent.GameEvent; + +/** + * Describes an in game event or action that can be detected by listeners such as the Sculk Sensor block. + */ +public class GameEventRegistry +{ + public static final GameEventDeferredRegister GAME_EVENTS = new GameEventDeferredRegister(Cosmere.MODID); + + public static final GameEventRegistryObject KINETIC_INVESTITURE = GAME_EVENTS.register("kinetic_investiture", 64); + +} diff --git a/src/main/java/leaf/cosmere/common/registry/HeightProviderTypesRegistry.java b/src/main/java/leaf/cosmere/common/registry/HeightProviderTypesRegistry.java new file mode 100644 index 000000000..0e70d740b --- /dev/null +++ b/src/main/java/leaf/cosmere/common/registry/HeightProviderTypesRegistry.java @@ -0,0 +1,17 @@ +/* + * File updated ~ 20 - 11 - 2024 ~ Leaf + */ + +package leaf.cosmere.common.registry; + +import leaf.cosmere.common.Cosmere; +import leaf.cosmere.common.registration.impl.HeightProviderTypeDeferredRegister; +import leaf.cosmere.common.registration.impl.HeightProviderTypeRegistryObject; +import leaf.cosmere.common.world.height.ConfigurableHeightProvider; + +public class HeightProviderTypesRegistry +{ + public static final HeightProviderTypeDeferredRegister HEIGHT_PROVIDER_TYPES = new HeightProviderTypeDeferredRegister(Cosmere.MODID); + + public static final HeightProviderTypeRegistryObject CONFIGURABLE = HEIGHT_PROVIDER_TYPES.register("configurable", ConfigurableHeightProvider.CODEC); +} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/common/registry/IntProviderTypesRegistry.java b/src/main/java/leaf/cosmere/common/registry/IntProviderTypesRegistry.java new file mode 100644 index 000000000..53e456809 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/registry/IntProviderTypesRegistry.java @@ -0,0 +1,17 @@ +/* + * File updated ~ 20 - 11 - 2024 ~ Leaf + */ + +package leaf.cosmere.common.registry; + +import leaf.cosmere.common.Cosmere; +import leaf.cosmere.common.registration.impl.IntProviderTypeDeferredRegister; +import leaf.cosmere.common.registration.impl.IntProviderTypeRegistryObject; +import leaf.cosmere.common.world.ConfigurableConstantInt; + +public class IntProviderTypesRegistry +{ + public static final IntProviderTypeDeferredRegister INT_PROVIDER_TYPES = new IntProviderTypeDeferredRegister(Cosmere.MODID); + + public static final IntProviderTypeRegistryObject CONFIGURABLE_CONSTANT = INT_PROVIDER_TYPES.register("configurable_constant", ConfigurableConstantInt.CODEC); +} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/common/registry/ItemsRegistry.java b/src/main/java/leaf/cosmere/common/registry/ItemsRegistry.java new file mode 100644 index 000000000..61da18238 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/registry/ItemsRegistry.java @@ -0,0 +1,99 @@ +/* + * File updated ~ 20 - 11 - 2024 ~ Leaf + */ + +package leaf.cosmere.common.registry; + +import leaf.cosmere.api.Constants.RegNameStubs; +import leaf.cosmere.api.EnumUtils; +import leaf.cosmere.api.Metals; +import leaf.cosmere.common.Cosmere; +import leaf.cosmere.common.items.*; +import leaf.cosmere.common.registration.impl.ItemDeferredRegister; +import leaf.cosmere.common.registration.impl.ItemRegistryObject; +import net.minecraft.world.item.Item; + +import java.util.Arrays; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +public class ItemsRegistry +{ + public static final ItemDeferredRegister ITEMS = new ItemDeferredRegister(Cosmere.MODID); + + //other items + + public static final ItemRegistryObject GUIDE = ITEMS.register("guide", GuideItem::new); + + //Mass items gen + + public static final Map> METAL_RAW_ORE = + Arrays.stream(EnumUtils.METAL_TYPES) + .filter(Metals.MetalType::hasOre) + .collect(Collectors.toMap( + Function.identity(), + type -> ITEMS.register( + RegNameStubs.RAW + type.getName() + RegNameStubs.ORE, + () -> new MetalRawOreItem(type) + ))); + + public static final Map> METAL_RAW_BLEND = + Arrays.stream(EnumUtils.METAL_TYPES) + .filter(Metals.MetalType::isAlloy) + .collect(Collectors.toMap( + Function.identity(), + type -> ITEMS.register( + type.getName() + RegNameStubs.BLEND, + () -> new MetalRawOreItem(type) + ))); + + public static final Map> METAL_NUGGETS = + Arrays.stream(EnumUtils.METAL_TYPES) + .filter(type -> type.hasMaterialItem() || type == Metals.MetalType.COPPER) // I'm sorry for this Leaf :( >> Gerbagel + .filter(type -> !type.isGodMetal()) // God Metals are special ;) + .collect(Collectors.toMap( + Function.identity(), + type -> ITEMS.register( + type.getName() + RegNameStubs.NUGGET, + () -> new MetalNuggetItem(type) + ))); + + public static final Map>> GOD_METAL_ALLOY_NUGGETS = + Arrays.stream(new Metals.MetalType[] { Metals.MetalType.LERASIUM, Metals.MetalType.LERASATIUM }) + .collect(Collectors.toMap( + Function.identity(), // key: the god metal itself + godMetalType -> Arrays.stream(EnumUtils.METAL_TYPES) + .filter(Metals.MetalType::hasAssociatedManifestation) + .filter(metalType -> !metalType.isGodMetal()) + .collect(Collectors.toMap( + Function.identity(), // key: base metal + metalType -> ITEMS.register( + godMetalType.getName() + "_" + metalType.getName() + "_alloy" + RegNameStubs.NUGGET, + () -> new GodMetalAlloyNuggetItem(godMetalType, metalType) + ) + )) + )); + + public static final Map> GOD_METAL_NUGGETS = + Arrays.stream(EnumUtils.METAL_TYPES) + .filter(Metals.MetalType::isGodMetal) + .collect(Collectors.toMap( + Function.identity(), + type -> ITEMS.register( + type.getName() + RegNameStubs.NUGGET, + () -> new GodMetalNuggetItem(type) + ))); + + public static final Map> METAL_INGOTS = + Arrays.stream(EnumUtils.METAL_TYPES) + .filter(type -> type.hasMaterialItem() && type != Metals.MetalType.COPPER) + .collect(Collectors.toMap( + Function.identity(), + type -> ITEMS.register( + type.getName() + RegNameStubs.INGOT, + () -> new MetalIngotItem(type) + ))); + + +} diff --git a/src/main/java/leaf/cosmere/common/registry/LootFunctionRegistry.java b/src/main/java/leaf/cosmere/common/registry/LootFunctionRegistry.java new file mode 100644 index 000000000..50bc667cd --- /dev/null +++ b/src/main/java/leaf/cosmere/common/registry/LootFunctionRegistry.java @@ -0,0 +1,20 @@ +/* + * File updated ~ 24 - 4 - 2021 ~ Leaf + * Special thank you to the curio mod for providing the example of how to set up fortune bonus for non-tool related things. + */ + +package leaf.cosmere.common.registry; + +import leaf.cosmere.common.Cosmere; +import leaf.cosmere.common.loot.RandomiseMetalTypeLootFunction; +import leaf.cosmere.common.registration.impl.LootFunctionDeferredRegister; +import leaf.cosmere.common.registration.impl.LootItemFunctionTypeRegistryObject; +import net.minecraft.world.level.storage.loot.functions.LootItemFunctionType; + +public class LootFunctionRegistry +{ + public static final LootFunctionDeferredRegister LOOT_FUNCTIONS = new LootFunctionDeferredRegister(Cosmere.MODID); + + public static final LootItemFunctionTypeRegistryObject RANDOMISE_METALTYPE = LOOT_FUNCTIONS.registerType("randomise_metaltype", RandomiseMetalTypeLootFunction.Serializer::new); + +} diff --git a/src/main/java/leaf/cosmere/common/registry/LootModifiersRegistry.java b/src/main/java/leaf/cosmere/common/registry/LootModifiersRegistry.java new file mode 100644 index 000000000..410591cfd --- /dev/null +++ b/src/main/java/leaf/cosmere/common/registry/LootModifiersRegistry.java @@ -0,0 +1,18 @@ +/* + * File updated ~ 10 - 8 - 2024 ~ Leaf + */ + +package leaf.cosmere.common.registry; + +import com.mojang.serialization.Codec; +import leaf.cosmere.common.Cosmere; +import leaf.cosmere.common.loot.FortuneBonusModifier; +import leaf.cosmere.common.registration.impl.GlobalLootModifierDeferredRegister; +import leaf.cosmere.common.registration.impl.GlobalLootModifierRegistryObject; +import net.minecraftforge.common.loot.IGlobalLootModifier; + +public class LootModifiersRegistry +{ + public static final GlobalLootModifierDeferredRegister> LOOT_MODIFIERS = new GlobalLootModifierDeferredRegister<>(Cosmere.MODID); + public static final GlobalLootModifierRegistryObject> FORTUNE_BONUS = LOOT_MODIFIERS.register("fortune_bonus", FortuneBonusModifier.CODEC); +} diff --git a/src/main/java/leaf/cosmere/common/registry/ManifestationRegistry.java b/src/main/java/leaf/cosmere/common/registry/ManifestationRegistry.java new file mode 100644 index 000000000..b9f6127da --- /dev/null +++ b/src/main/java/leaf/cosmere/common/registry/ManifestationRegistry.java @@ -0,0 +1,36 @@ +/* + * File updated ~ 24 - 4 - 2021 ~ Leaf + */ + +package leaf.cosmere.common.registry; + +import leaf.cosmere.api.CosmereAPI; +import leaf.cosmere.api.manifestation.Manifestation; +import leaf.cosmere.common.Cosmere; +import leaf.cosmere.common.registration.impl.ManifestationDeferredRegister; +import leaf.cosmere.common.registration.impl.ManifestationRegistryObject; +import net.minecraft.resources.ResourceLocation; + +public class ManifestationRegistry +{ + public static final ManifestationDeferredRegister MANIFESTATIONS = new ManifestationDeferredRegister(Cosmere.MODID); + + public static final ManifestationRegistryObject NONE = MANIFESTATIONS.register("none", Manifestation::new); + + public static Manifestation fromID(String location) + { + ResourceLocation resourceLocation = new ResourceLocation(location); + return fromID(resourceLocation); + } + + public static Manifestation fromID(ResourceLocation location) + { + Manifestation value = CosmereAPI.manifestationRegistry().getValue(location); + if (value != null) + { + return value; + } + return ManifestationRegistry.NONE.get(); + } + +} diff --git a/src/main/java/leaf/cosmere/common/registry/PoiTypesRegistry.java b/src/main/java/leaf/cosmere/common/registry/PoiTypesRegistry.java new file mode 100644 index 000000000..79bd5cb64 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/registry/PoiTypesRegistry.java @@ -0,0 +1,18 @@ +/* + * File updated ~ 20 - 3 - 2022 ~ Leaf + */ + +package leaf.cosmere.common.registry; + +import leaf.cosmere.common.Cosmere; +import leaf.cosmere.common.registration.impl.POITypeDeferredRegister; +import leaf.cosmere.common.registration.impl.POITypeRegistryObject; +import net.minecraft.world.entity.ai.village.poi.PoiType; + +public class PoiTypesRegistry +{ + public static final POITypeDeferredRegister POINT_OF_INTERESTS = new POITypeDeferredRegister(Cosmere.MODID); + + public static POITypeRegistryObject METAL_TRADER_POI = POINT_OF_INTERESTS.registerPOI("metal_trader", () -> (BlocksRegistry.METALWORKING_TABLE)); + +} diff --git a/src/main/java/leaf/cosmere/common/registry/VillagerProfessionRegistry.java b/src/main/java/leaf/cosmere/common/registry/VillagerProfessionRegistry.java new file mode 100644 index 000000000..087ee06df --- /dev/null +++ b/src/main/java/leaf/cosmere/common/registry/VillagerProfessionRegistry.java @@ -0,0 +1,23 @@ +/* + * File updated ~ 20 - 3 - 2022 ~ Leaf + */ + +package leaf.cosmere.common.registry; + +import leaf.cosmere.common.Cosmere; +import leaf.cosmere.common.registration.impl.VillagerProfessionDeferredRegister; +import leaf.cosmere.common.registration.impl.VillagerProfessionRegistryObject; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.world.entity.npc.VillagerProfession; + +public class VillagerProfessionRegistry +{ + public static final VillagerProfessionDeferredRegister VILLAGE_PROFESSIONS = new VillagerProfessionDeferredRegister(Cosmere.MODID); + + public static final VillagerProfessionRegistryObject METAL_TRADER = + VILLAGE_PROFESSIONS.register( + "metal_trader", + PoiTypesRegistry.METAL_TRADER_POI, + SoundEvents.VILLAGER_WORK_TOOLSMITH); + +} diff --git a/src/main/java/leaf/cosmere/common/resource/ore/BaseOreConfig.java b/src/main/java/leaf/cosmere/common/resource/ore/BaseOreConfig.java new file mode 100644 index 000000000..5e04fcbbf --- /dev/null +++ b/src/main/java/leaf/cosmere/common/resource/ore/BaseOreConfig.java @@ -0,0 +1,33 @@ +/* + * File updated ~ 20 - 11 - 2024 ~ Leaf + */ + +package leaf.cosmere.common.resource.ore; + +import leaf.cosmere.common.world.height.HeightShape; + +//based on BaseOreConfig from Mekanism +// https://github.com/mekanism/Mekanism/blob/a11d886aafc01cc67dd23d24b5e9c87909e88c24/src/main/java/mekanism/common/resource/ore/BaseOreConfig.java#L5 +public record BaseOreConfig(String name, + int perChunk, + double discardChanceOnAirExposure, + int maxVeinSize, + HeightShape shape, + OreAnchor min, + OreAnchor max, + int plateau) +{ + + public BaseOreConfig + { + if (plateau > 0 && shape != HeightShape.TRAPEZOID) + { + throw new IllegalArgumentException("Plateau are only supported by trapezoid shape"); + } + } + + public BaseOreConfig(String name, int perChunk, float discardChanceOnAirExposure, int maxVeinSize, HeightShape shape, OreAnchor min, OreAnchor max) + { + this(name, perChunk, discardChanceOnAirExposure, maxVeinSize, shape, min, max, 0); + } +} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/common/resource/ore/OreAnchor.java b/src/main/java/leaf/cosmere/common/resource/ore/OreAnchor.java new file mode 100644 index 000000000..f7ecc754a --- /dev/null +++ b/src/main/java/leaf/cosmere/common/resource/ore/OreAnchor.java @@ -0,0 +1,29 @@ +/* + * File updated ~ 20 - 11 - 2024 ~ Leaf + */ + +package leaf.cosmere.common.resource.ore; + +import leaf.cosmere.common.world.height.AnchorType; + +//anchor types for ore generation +public record OreAnchor(AnchorType type, int value) +{ + //must by y = x + public static OreAnchor absolute(int value) + { + return new OreAnchor(AnchorType.ABSOLUTE, value); + } + + // x above or below the bottom of the generating world + public static OreAnchor aboveBottom(int value) + { + return new OreAnchor(AnchorType.ABOVE_BOTTOM, value); + } + + // x above or below the top of the generating world + public static OreAnchor belowTop(int value) + { + return new OreAnchor(AnchorType.BELOW_TOP, value); + } +} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/common/resource/ore/OreBlockType.java b/src/main/java/leaf/cosmere/common/resource/ore/OreBlockType.java new file mode 100644 index 000000000..f5cda56b9 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/resource/ore/OreBlockType.java @@ -0,0 +1,24 @@ +/* + * File updated ~ 9 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.common.resource.ore; + +import leaf.cosmere.common.blocks.MetalOreBlock; +import leaf.cosmere.common.registration.impl.BlockRegistryObject; +import net.minecraft.world.item.BlockItem; + +public record OreBlockType(BlockRegistryObject stone, + BlockRegistryObject deepslate) +{ + + public MetalOreBlock stoneBlock() + { + return stone.getBlock(); + } + + public MetalOreBlock deepslateBlock() + { + return deepslate.getBlock(); + } +} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/common/resource/ore/OreType.java b/src/main/java/leaf/cosmere/common/resource/ore/OreType.java new file mode 100644 index 000000000..08c980800 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/resource/ore/OreType.java @@ -0,0 +1,126 @@ +/* + * File updated ~ 20 - 11 - 2024 ~ Leaf + */ + +package leaf.cosmere.common.resource.ore; + +import com.mojang.serialization.Codec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import leaf.cosmere.api.Metals; +import leaf.cosmere.common.world.height.HeightShape; +import net.minecraft.util.StringRepresentable; +import org.jetbrains.annotations.NotNull; + +import java.util.List; + + +//based on OreType from Mekanism +// https://github.com/mekanism/Mekanism/blob/7de496745c721fb15d00d590ddcacf00570f3f1b/src/main/java/mekanism/common/resource/ore/OreType.java#L14 +public enum OreType implements StringRepresentable +{ + TIN(Metals.MetalType.TIN, + new BaseOreConfig("small", 14, 0, 4, HeightShape.TRAPEZOID, OreAnchor.absolute(-20), OreAnchor.absolute(94)), + new BaseOreConfig("medium", 12, 0, 7, HeightShape.TRAPEZOID, OreAnchor.absolute(-32), OreAnchor.absolute(72)), + new BaseOreConfig("abundant", 20, 0, 6, HeightShape.UNIFORM, OreAnchor.aboveBottom(-64), OreAnchor.aboveBottom(32)) + ), + ZINC(Metals.MetalType.ZINC, + new BaseOreConfig("upper", 65, 0, 7, HeightShape.TRAPEZOID, OreAnchor.absolute(72), OreAnchor.belowTop(-24), 8), + new BaseOreConfig("middle", 6, 0, 9, HeightShape.TRAPEZOID, OreAnchor.absolute(-32), OreAnchor.absolute(56)), + new BaseOreConfig("deep", 10, 0.2F, 10, HeightShape.TRAPEZOID, OreAnchor.aboveBottom(-80), OreAnchor.absolute(-32)) + ), + ALUMINUM(Metals.MetalType.ALUMINUM, + new BaseOreConfig("small", 4, 0, 4, HeightShape.TRAPEZOID, OreAnchor.aboveBottom(0), OreAnchor.absolute(8)), + new BaseOreConfig("medium", 8, 0, 4, HeightShape.UNIFORM, OreAnchor.aboveBottom(-60), OreAnchor.absolute(-50)), + new BaseOreConfig("buried", 13, 0.75F, 9, HeightShape.TRAPEZOID, OreAnchor.aboveBottom(-64), OreAnchor.aboveBottom(0), 16) + ), + CHROMIUM(Metals.MetalType.CHROMIUM, + new BaseOreConfig("rare", 4, 0.1F, 6, HeightShape.TRAPEZOID, OreAnchor.aboveBottom(-40), OreAnchor.absolute(16)), + new BaseOreConfig("normal", 8, 0.25F, 9, HeightShape.TRAPEZOID, OreAnchor.aboveBottom(-24), OreAnchor.absolute(64)), + new BaseOreConfig("deep", 5, 0.3F, 10, HeightShape.TRAPEZOID, OreAnchor.aboveBottom(-80), OreAnchor.absolute(-64)) + ), + + CADMIUM(Metals.MetalType.CADMIUM, + new BaseOreConfig("normal", 8, 0.25F, 9, HeightShape.TRAPEZOID, OreAnchor.aboveBottom(-24), OreAnchor.absolute(64)), + new BaseOreConfig("abundant", 15, 0, 7, HeightShape.UNIFORM, OreAnchor.aboveBottom(-64), OreAnchor.absolute(-32)), + new BaseOreConfig("deep", 6, 0.2F, 5, HeightShape.TRAPEZOID, OreAnchor.aboveBottom(-96), OreAnchor.absolute(-64)) + ), + NICKEL(Metals.MetalType.NICKEL, + new BaseOreConfig("upper", 65, 0, 7, HeightShape.TRAPEZOID, OreAnchor.absolute(80), OreAnchor.absolute(384), 8), + new BaseOreConfig("middle", 6, 0, 9, HeightShape.TRAPEZOID, OreAnchor.absolute(-32), OreAnchor.absolute(56)), + new BaseOreConfig("small", 8, 0, 4, HeightShape.UNIFORM, OreAnchor.absolute(0), OreAnchor.absolute(64)) + ), + + SILVER(Metals.MetalType.SILVER, + new BaseOreConfig("normal", 8, 0.25F, 9, HeightShape.TRAPEZOID, OreAnchor.aboveBottom(-24), OreAnchor.absolute(64)), + new BaseOreConfig("abundant", 16, 0, 7, HeightShape.UNIFORM, OreAnchor.aboveBottom(-64), OreAnchor.absolute(16)), + new BaseOreConfig("rich", 12, 0.1F, 10, HeightShape.TRAPEZOID, OreAnchor.absolute(-64), OreAnchor.absolute(-32)) + ), + LEAD(Metals.MetalType.LEAD, + new BaseOreConfig("normal", 8, 0.25F, 9, HeightShape.TRAPEZOID, OreAnchor.aboveBottom(-24), OreAnchor.absolute(64)), + new BaseOreConfig("abundant", 15, 0.1F, 7, HeightShape.UNIFORM, OreAnchor.aboveBottom(-64), OreAnchor.absolute(-32)), + new BaseOreConfig("deep", 10, 0.3F, 6, HeightShape.TRAPEZOID, OreAnchor.aboveBottom(-80), OreAnchor.absolute(-48)) + ); + + + public static Codec CODEC = StringRepresentable.fromEnum(OreType::values); + + private final List baseConfigs; + private final Metals.MetalType metalType; + + OreType(Metals.MetalType metalType, BaseOreConfig... configs) + { + this.metalType = metalType; + this.baseConfigs = List.of(configs); + } + + public Metals.MetalType getMetalType() + { + return metalType; + } + + public List getBaseConfigs() + { + return baseConfigs; + } + + public static OreType get(Metals.MetalType resource) + { + for (OreType ore : values()) + { + if (resource == ore.metalType) + { + return ore; + } + } + return null; + } + + @NotNull + @Override + public String getSerializedName() + { + return metalType.getName(); + } + + public record OreVeinType(OreType type, int index) + { + + public static final Codec CODEC = RecordCodecBuilder.create(builder -> builder.group( + OreType.CODEC.fieldOf("type").forGetter(config -> config.type), + Codec.INT.fieldOf("index").forGetter(config -> config.index) + ).apply(builder, OreVeinType::new)); + + public OreVeinType + { + if (index < 0 || index >= type.getBaseConfigs().size()) + { + throw new IndexOutOfBoundsException("Vein Type index out of range: " + index); + } + } + + public String name() + { + return "ore_" + type.getSerializedName() + "_" + type.getBaseConfigs().get(index).name(); + } + } +} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/common/util/CosmereAttributeUtils.java b/src/main/java/leaf/cosmere/common/util/CosmereAttributeUtils.java new file mode 100644 index 000000000..cfe5ef625 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/util/CosmereAttributeUtils.java @@ -0,0 +1,69 @@ +package leaf.cosmere.common.util; + +import leaf.cosmere.api.Manifestations.ManifestationTypes; +import leaf.cosmere.api.Metals; +import leaf.cosmere.api.Roshar; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.ai.attributes.Attribute; +import net.minecraft.world.entity.ai.attributes.AttributeInstance; +import net.minecraft.world.entity.ai.attributes.RangedAttribute; +import net.minecraftforge.registries.ForgeRegistries; + +public class CosmereAttributeUtils +{ + public static Attribute getAttribute(ManifestationTypes manifestationType, int powerId) + { + switch (manifestationType) + { + case ALLOMANCY: + case FERUCHEMY: + return ForgeRegistries.ATTRIBUTES.getValue(new ResourceLocation( + manifestationType.getName(), + Metals.MetalType.valueOf(powerId).get().getName())); + case SURGEBINDING: + return ForgeRegistries.ATTRIBUTES.getValue(new ResourceLocation( + manifestationType.getName(), + Roshar.Surges.valueOf(powerId).get().getName() + )); + case SANDMASTERY: + return ForgeRegistries.ATTRIBUTES.getValue(new ResourceLocation( + manifestationType.getName(), + "ribbons" + )); + case AVIAR: + return ForgeRegistries.ATTRIBUTES.getValue(new ResourceLocation( + manifestationType.getName(), + "hostile_life_sense" + )); + default: + return null; + } + } + + public static void grantBaseAttribute(LivingEntity livingEntity, RangedAttribute attribute, int strength) + { + int currentStrength = 0; + AttributeInstance entityAttributeInstance = livingEntity.getAttribute(attribute); + if (entityAttributeInstance == null) + { + return; + } + + currentStrength = (int) entityAttributeInstance.getValue(); + + // Let's ensure not to exceed the base value if it's out of range, + // even if it will get sanitized + int newStrength = strength + currentStrength; + if (newStrength < attribute.getMinValue()) + { + newStrength = (int) attribute.getMinValue(); + } + else if (newStrength > attribute.getMaxValue()) + { + newStrength = (int) attribute.getMaxValue(); + } + + entityAttributeInstance.setBaseValue(newStrength); + } +} diff --git a/src/main/java/leaf/cosmere/common/util/CosmereEnumUtils.java b/src/main/java/leaf/cosmere/common/util/CosmereEnumUtils.java new file mode 100644 index 000000000..e267229c0 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/util/CosmereEnumUtils.java @@ -0,0 +1,13 @@ +/* + * File updated ~ 20 - 11 - 2024 ~ Leaf + */ + +package leaf.cosmere.common.util; + +import leaf.cosmere.common.resource.ore.OreType; + +public class CosmereEnumUtils +{ + //cosmere + public static final OreType[] ORE_TYPES = OreType.values(); +} diff --git a/src/main/java/leaf/cosmere/common/util/TaskQueueManager.java b/src/main/java/leaf/cosmere/common/util/TaskQueueManager.java new file mode 100644 index 000000000..6d254c9b9 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/util/TaskQueueManager.java @@ -0,0 +1,158 @@ +/* + * File updated ~ 12 - 1 - 2025 ~ Leaf + */ + +package leaf.cosmere.common.util; + +import leaf.cosmere.api.CosmereAPI; +import leaf.cosmere.common.Cosmere; +import net.minecraft.resources.ResourceLocation; +import net.minecraftforge.event.TickEvent; +import net.minecraftforge.event.server.ServerStartedEvent; +import net.minecraftforge.event.server.ServerStoppedEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; +import org.apache.commons.lang3.tuple.Pair; + +import java.util.ArrayDeque; +import java.util.Iterator; +import java.util.Queue; + +/** + * Helper class for scheduling transient tick-based tasks on the server. + * Obtained 12th jan '25 and then modified by Leaf + * special thanks to shadows-of-fire for the original code + * ... + *

+ * Do not use for critical functionality, since the queue is abandoned entirely if the game closes or crashes. + */ +public class TaskQueueManager +{ + + /** + * Submits a new task for immediate execution. + */ + public static void submitTask(ResourceLocation id, Task task) + { + Impl.TASKS.add(Pair.of(id, task)); + } + + /** + * Submits a new task for delayed execution. + * + * @param delay The delay, in ticks, before the task begins executing. + */ + public static void submitDelayedTask(ResourceLocation id, int delay, Task task) + { + Impl.TASKS.add(Pair.of(id, new DelayedTask(delay, task))); + } + + @FunctionalInterface + public static interface Task + { + + /** + * Executes the task, returning a status specifying if the task finished or not. + * + * @return The completion status, either {@link Status#RUNNING} to continue executing or {@link Status#COMPLETED} to stop. + */ + Status execute(); + } + + public static enum Status + { + RUNNING, + COMPLETED; + + public boolean isCompleted() + { + return this == COMPLETED; + } + } + + private static class DelayedTask implements Task + { + + private int delay; + private Task task; + + private DelayedTask(int delay, Task task) + { + this.delay = delay; + this.task = task; + } + + @Override + public Status execute() + { + if (delay-- > 0) + { + return Status.RUNNING; + } + return this.task.execute(); + } + + } + + public static class OneOffTask implements Task + { + private final Runnable task; + + public OneOffTask(Runnable task) + { + this.task = task; + } + + @Override + public Status execute() + { + task.run(); + return Status.COMPLETED; + } + + } + + @Mod.EventBusSubscriber(modid = Cosmere.MODID, bus = Mod.EventBusSubscriber.Bus.FORGE) + public static class Impl + { + + private static final Queue> TASKS = new ArrayDeque<>(); + + @SubscribeEvent + public static void tick(TickEvent.ServerTickEvent e) + { + Iterator> it = TASKS.iterator(); + Pair current = null; + while (it.hasNext()) + { + current = it.next(); + try + { + if (current.getRight().execute().isCompleted()) + { + it.remove(); + } + } + catch (Exception ex) + { + CosmereAPI.logger.error("An exception occurred while running a ticking task with ID {}. It will be terminated.", current.getLeft()); + it.remove(); + ex.printStackTrace(); + } + } + } + + @SubscribeEvent + public static void stopped(ServerStoppedEvent e) + { + TASKS.clear(); + } + + @SubscribeEvent + public static void started(ServerStartedEvent e) + { + TASKS.clear(); + } + } + +} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/common/world/ConfigurableConstantInt.java b/src/main/java/leaf/cosmere/common/world/ConfigurableConstantInt.java new file mode 100644 index 000000000..24b3926c1 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/world/ConfigurableConstantInt.java @@ -0,0 +1,86 @@ +/* + * File updated ~ 20 - 11 - 2024 ~ Leaf + */ + +package leaf.cosmere.common.world; + +import com.mojang.serialization.Codec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import leaf.cosmere.common.config.CosmereConfigs; +import leaf.cosmere.common.registry.IntProviderTypesRegistry; +import leaf.cosmere.common.resource.ore.OreType.OreVeinType; +import net.minecraft.util.RandomSource; +import net.minecraft.util.valueproviders.IntProvider; +import net.minecraft.util.valueproviders.IntProviderType; +import net.minecraftforge.common.ForgeConfigSpec; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.Optional; + +//based on ConfigurableConstantInt from Mekanism +// https://github.com/mekanism/Mekanism/blob/7de496745c721fb15d00d590ddcacf00570f3f1b/src/main/java/mekanism/common/world/ConfigurableConstantInt.java#L17 +public class ConfigurableConstantInt extends IntProvider +{ + + public static final Codec CODEC = RecordCodecBuilder.create(builder -> builder.group( + OreVeinType.CODEC.optionalFieldOf("oreVeinType").forGetter(config -> Optional.ofNullable(config.oreVeinType)) + ).apply(builder, oreType -> + { + if (oreType.isPresent()) + { + OreVeinType type = oreType.get(); + return new ConfigurableConstantInt(type, CosmereConfigs.WORLD_CONFIG.getVeinConfig(type).perChunk()); + } + return null;//todo hope null works + })); + + @Nullable + private final OreVeinType oreVeinType; + private final ForgeConfigSpec.ConfigValue value; + + public ConfigurableConstantInt(@Nullable OreVeinType oreVeinType, ForgeConfigSpec.ConfigValue value) + { + this.oreVeinType = oreVeinType; + this.value = value; + } + + public int getValue() + { + //Needs to be getOrDefault so that when IntProvider's range codec validates things in CountPlacement, + // even though how it gets that value doesn't matter for syncing. Our actual value here doesn't really + // matter because we limit our config values at the ranges of CountPlacement + return this.value.getDefault(); + } + + @Override + public int sample(@NotNull RandomSource random) + { + return getValue(); + } + + @Override + public int getMinValue() + { + return getValue(); + } + + @Override + public int getMaxValue() + { + return getValue(); + } + + @NotNull + @Override + public IntProviderType getType() + { + return IntProviderTypesRegistry.CONFIGURABLE_CONSTANT.get(); + } + + @Override + public String toString() + { + return Integer.toString(getValue()); + } +} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/common/world/ResizableOreFeature.java b/src/main/java/leaf/cosmere/common/world/ResizableOreFeature.java new file mode 100644 index 000000000..f058c9fcc --- /dev/null +++ b/src/main/java/leaf/cosmere/common/world/ResizableOreFeature.java @@ -0,0 +1,225 @@ +/* + * File updated ~ 20 - 11 - 2024 ~ Leaf + */ + +package leaf.cosmere.common.world; + +import net.minecraft.core.BlockPos; +import net.minecraft.core.SectionPos; +import net.minecraft.util.Mth; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.WorldGenLevel; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.chunk.BulkSectionAccess; +import net.minecraft.world.level.chunk.LevelChunkSection; +import net.minecraft.world.level.levelgen.Heightmap; +import net.minecraft.world.level.levelgen.feature.Feature; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; +import net.minecraft.world.level.levelgen.feature.configurations.OreConfiguration.TargetBlockState; +import org.jetbrains.annotations.NotNull; + +import java.util.BitSet; +import java.util.function.Function; + +//modified copy of Mekanisms ResizableOreFeature +// https://github.com/mekanism/Mekanism/blob/7de496745c721fb15d00d590ddcacf00570f3f1b/src/main/java/mekanism/common/world/ResizableOreFeature.java#L20 +//which itself was a modified copy of vanilla's OreFeature but to support ResizableOreFeatureConfig +public class ResizableOreFeature extends Feature +{ + + public ResizableOreFeature() + { + super(ResizableOreFeatureConfig.CODEC); + } + + protected Heightmap.Types getHeightmapType() + { + return Heightmap.Types.OCEAN_FLOOR_WG; + } + + @Override + public boolean place(@NotNull FeaturePlaceContext context) + { + RandomSource random = context.random(); + BlockPos pos = context.origin(); + WorldGenLevel world = context.level(); + ResizableOreFeatureConfig config = context.config(); + float angle = random.nextFloat() * (float) Math.PI; + float adjustedSize = config.size().get() / 8.0F; + int i = Mth.ceil((adjustedSize + 1.0F) / 2.0F); + double sin = Math.sin(angle) * adjustedSize; + double cos = Math.cos(angle) * adjustedSize; + double xMin = pos.getX() + sin; + double xMax = pos.getX() - sin; + double zMin = pos.getZ() + cos; + double zMax = pos.getZ() - cos; + double yMin = pos.getY() + random.nextInt(3) - 2; + double yMax = pos.getY() + random.nextInt(3) - 2; + int minXStart = pos.getX() - Mth.ceil(adjustedSize) - i; + int minYStart = pos.getY() - 2 - i; + int minZStart = pos.getZ() - Mth.ceil(adjustedSize) - i; + int width = 2 * (Mth.ceil(adjustedSize) + i); + int height = 2 * (2 + i); + for (int x = minXStart; x <= minXStart + width; ++x) + { + for (int z = minZStart; z <= minZStart + width; ++z) + { + if (minYStart <= world.getHeight(getHeightmapType(), x, z)) + { + return doPlace(world, random, config, xMin, xMax, zMin, zMax, yMin, yMax, minXStart, minYStart, minZStart, width, height); + } + } + } + return false; + } + + protected boolean doPlace(WorldGenLevel world, RandomSource random, ResizableOreFeatureConfig config, double xMin, double xMax, double zMin, double zMax, double yMin, + double yMax, int minXStart, int minYStart, int minZStart, int width, int height) + { + BitSet bitset = new BitSet(width * height * width); + BlockPos.MutableBlockPos mutablePos = new BlockPos.MutableBlockPos(); + int size = config.size().get(); + double[] adouble = new double[size * 4]; + for (int k = 0; k < size; ++k) + { + float f = k / (float) size; + int k4 = k * 4; + adouble[k4] = Mth.lerp(f, xMin, xMax); + adouble[k4 + 1] = Mth.lerp(f, yMin, yMax); + adouble[k4 + 2] = Mth.lerp(f, zMin, zMax); + double d3 = random.nextDouble() * size / 16D; + adouble[k4 + 3] = ((double) (Mth.sin((float) Math.PI * f) + 1) * d3 + 1) / 2D; + } + for (int i = 0; i < size - 1; ++i) + { + int i4 = i * 4; + if (adouble[i4 + 3] > 0) + { + for (int j = i + 1; j < size; ++j) + { + int j4 = j * 4; + if (adouble[j4 + 3] > 0) + { + double d1 = adouble[i4] - adouble[j4]; + double d2 = adouble[i4 + 1] - adouble[j4 + 1]; + double d3 = adouble[i4 + 2] - adouble[j4 + 2]; + double d4 = adouble[i4 + 3] - adouble[j4 + 3]; + if (d4 * d4 > d1 * d1 + d2 * d2 + d3 * d3) + { + if (d4 > 0) + { + adouble[j4 + 3] = -1; + } + else + { + adouble[i4 + 3] = -1; + } + } + } + } + } + } + int i = 0; + try (BulkSectionAccess bulkSectionAccess = new BulkSectionAccess(world)) + { + double discardChanceOnAirExposure = config.discardChanceOnAirExposure().get(); + for (int j = 0; j < size; ++j) + { + int j4 = j * 4; + double d1 = adouble[j4 + 3]; + if (d1 >= 0) + { + double d2 = adouble[j4]; + double d3 = adouble[j4 + 1]; + double d4 = adouble[j4 + 2]; + int xStart = Math.max(Mth.floor(d2 - d1), minXStart); + int yStart = Math.max(Mth.floor(d3 - d1), minYStart); + int zStart = Math.max(Mth.floor(d4 - d1), minZStart); + int xEnd = Math.max(Mth.floor(d2 + d1), xStart); + int yEnd = Math.max(Mth.floor(d3 + d1), yStart); + int zEnd = Math.max(Mth.floor(d4 + d1), zStart); + for (int x = xStart; x <= xEnd; ++x) + { + double d5 = ((double) x + 0.5D - d2) / d1; + double d5_squared = d5 * d5; + if (d5_squared < 1) + { + for (int y = yStart; y <= yEnd; ++y) + { + double d6 = ((double) y + 0.5D - d3) / d1; + double d6_squared = d6 * d6; + if (d5_squared + d6_squared < 1) + { + for (int z = zStart; z <= zEnd; ++z) + { + double d7 = ((double) z + 0.5D - d4) / d1; + if (d5_squared + d6_squared + d7 * d7 < 1.0D && !world.isOutsideBuildHeight(y)) + { + int l2 = x - minXStart + (y - minYStart) * width + (z - minZStart) * width * height; + if (!bitset.get(l2)) + { + bitset.set(l2); + mutablePos.set(x, y, z); + if (world.ensureCanWrite(mutablePos)) + { + LevelChunkSection section = bulkSectionAccess.getSection(mutablePos); + if (section != null) + { + int sectionX = SectionPos.sectionRelative(x); + int sectionY = SectionPos.sectionRelative(y); + int sectionZ = SectionPos.sectionRelative(z); + BlockState state = section.getBlockState(sectionX, sectionY, sectionZ); + for (TargetBlockState targetState : config.targetStates()) + { + if (canPlaceOre(state, bulkSectionAccess::getBlockState, random, discardChanceOnAirExposure, targetState, mutablePos)) + { + section.setBlockState(sectionX, sectionY, sectionZ, targetState.state, false); + ++i; + break; + } + } + } + } + } + } + } + } + } + } + } + } + } + } + return i > 0; + } + + private static boolean canPlaceOre(BlockState state, Function adjacentStateAccessor, RandomSource random, double discardChanceOnAirExposure, + TargetBlockState targetState, BlockPos.MutableBlockPos mutablePos) + { + if (!targetState.target.test(state, random)) + { + return false; + } + else if (shouldSkipAirCheck(random, discardChanceOnAirExposure)) + { + return true; + } + else + { + return !isAdjacentToAir(adjacentStateAccessor, mutablePos); + } + } + + private static boolean shouldSkipAirCheck(RandomSource random, double discardChanceOnAirExposure) + { + if (discardChanceOnAirExposure <= 0.0F) + { + return true; + } + else if (discardChanceOnAirExposure >= 1.0F) + { + return false; + } + return random.nextFloat() >= discardChanceOnAirExposure; + } +} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/common/world/ResizableOreFeatureConfig.java b/src/main/java/leaf/cosmere/common/world/ResizableOreFeatureConfig.java new file mode 100644 index 000000000..6b67a9903 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/world/ResizableOreFeatureConfig.java @@ -0,0 +1,31 @@ +/* + * File updated ~ 20 - 11 - 2024 ~ Leaf + */ + +package leaf.cosmere.common.world; + +import com.mojang.serialization.Codec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import leaf.cosmere.common.config.CosmereConfigs; +import leaf.cosmere.common.config.CosmereWorldConfig; +import leaf.cosmere.common.resource.ore.OreType; +import net.minecraft.world.level.levelgen.feature.configurations.FeatureConfiguration; +import net.minecraft.world.level.levelgen.feature.configurations.OreConfiguration.TargetBlockState; +import net.minecraftforge.common.ForgeConfigSpec; + +import java.util.List; + +public record ResizableOreFeatureConfig(List targetStates, OreType.OreVeinType oreVeinType, + ForgeConfigSpec.ConfigValue size, + ForgeConfigSpec.ConfigValue discardChanceOnAirExposure) implements FeatureConfiguration +{ + + public static final Codec CODEC = RecordCodecBuilder.create(builder -> builder.group( + Codec.list(TargetBlockState.CODEC).fieldOf("targets").forGetter(config -> config.targetStates), + OreType.OreVeinType.CODEC.fieldOf("oreVeinType").forGetter(config -> config.oreVeinType) + ).apply(builder, (targetStates, oreVeinType) -> + { + CosmereWorldConfig.OreVeinConfig veinConfig = CosmereConfigs.WORLD_CONFIG.getVeinConfig(oreVeinType); + return new ResizableOreFeatureConfig(targetStates, oreVeinType, veinConfig.maxVeinSize(), veinConfig.discardChanceOnAirExposure()); + })); +} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/common/world/height/AnchorType.java b/src/main/java/leaf/cosmere/common/world/height/AnchorType.java new file mode 100644 index 000000000..ff11e43f9 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/world/height/AnchorType.java @@ -0,0 +1,34 @@ +/* + * File updated ~ 20 - 11 - 2024 ~ Leaf + */ + +package leaf.cosmere.common.world.height; + +import net.minecraft.world.level.levelgen.WorldGenerationContext; + +//based on AnchorType from Mekanism +// https://github.com/mekanism/Mekanism/blob/a11d886aafc01cc67dd23d24b5e9c87909e88c24/src/main/java/mekanism/common/world/height/AnchorType.java#L9 +public enum AnchorType +{ + ABSOLUTE((context, value) -> value), + ABOVE_BOTTOM((context, value) -> context.getMinGenY() + value), + BELOW_TOP((context, value) -> context.getGenDepth() - 1 + context.getMinGenY() - value); + + private final YResolver yResolver; + + AnchorType(YResolver yResolver) + { + this.yResolver = yResolver; + } + + public int resolveY(WorldGenerationContext context, int value) + { + return yResolver.resolve(context, value); + } + + @FunctionalInterface + private interface YResolver + { + int resolve(WorldGenerationContext context, int value); + } +} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/common/world/height/ConfigurableHeightProvider.java b/src/main/java/leaf/cosmere/common/world/height/ConfigurableHeightProvider.java new file mode 100644 index 000000000..bc3390f48 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/world/height/ConfigurableHeightProvider.java @@ -0,0 +1,111 @@ +/* + * File updated ~ 20 - 11 - 2024 ~ Leaf + */ + +package leaf.cosmere.common.world.height; + +import com.mojang.serialization.Codec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import it.unimi.dsi.fastutil.longs.LongOpenHashSet; +import it.unimi.dsi.fastutil.longs.LongSet; +import leaf.cosmere.api.CosmereAPI; +import leaf.cosmere.common.config.CosmereConfigs; +import leaf.cosmere.common.config.CosmereWorldConfig.OreVeinConfig; +import leaf.cosmere.common.registry.HeightProviderTypesRegistry; +import leaf.cosmere.common.resource.ore.OreType.OreVeinType; +import net.minecraft.util.Mth; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.levelgen.WorldGenerationContext; +import net.minecraft.world.level.levelgen.heightproviders.HeightProvider; +import net.minecraft.world.level.levelgen.heightproviders.HeightProviderType; +import org.jetbrains.annotations.NotNull; + +//based on ConfigurableHeightProvider from Mekanism +// https://github.com/mekanism/Mekanism/blob/7de496745c721fb15d00d590ddcacf00570f3f1b/src/main/java/mekanism/common/world/height/ConfigurableHeightProvider.java#L20 +public class ConfigurableHeightProvider extends HeightProvider +{ + + public static final Codec CODEC = RecordCodecBuilder.create(builder -> builder.group( + OreVeinType.CODEC.fieldOf("oreVeinType").forGetter(config -> config.oreVeinType) + ).apply(builder, type -> new ConfigurableHeightProvider(type, CosmereConfigs.WORLD_CONFIG.getVeinConfig(type)))); + + private final OreVeinType oreVeinType; + private final ConfigurableHeightRange range; + private LongSet warnedFor; + + private ConfigurableHeightProvider(OreVeinType oreVeinType, OreVeinConfig oreConfig) + { + this.oreVeinType = oreVeinType; + this.range = oreConfig.range(); + } + + public static ConfigurableHeightProvider of(OreVeinType type, OreVeinConfig oreConfig) + { + return new ConfigurableHeightProvider(type, oreConfig); + } + + @Override + public int sample(@NotNull RandomSource random, @NotNull WorldGenerationContext context) + { + int min = range.minInclusive().resolveY(context); + int max = range.maxInclusive().resolveY(context); + if (min > max) + { + if (warnedFor == null) + { + warnedFor = new LongOpenHashSet(); + } + if (warnedFor.add((long) min << 32 | (long) max)) + { + CosmereAPI.logger.warn("Empty height range: {}", this); + } + return min; + } + return switch (range.shape().get()) + { + case TRAPEZOID -> sampleTrapezoid(random, min, max); + case UNIFORM -> Mth.randomBetweenInclusive(random, min, max); + }; + } + + private int sampleTrapezoid(@NotNull RandomSource random, int min, int max) + { + int plateau = range.plateau().get(); + int range = max - min; + if (plateau >= range) + { + return Mth.randomBetweenInclusive(random, min, max); + } + int middle = (range - plateau) / 2; + return min + Mth.randomBetweenInclusive(random, 0, range - middle) + Mth.randomBetweenInclusive(random, 0, middle); + } + + @NotNull + @Override + public HeightProviderType getType() + { + return HeightProviderTypesRegistry.CONFIGURABLE.get(); + } + + @Override + public String toString() + { + switch (range.shape().get()) + { + case TRAPEZOID -> + { + int plateau = range.plateau().get(); + if (plateau == 0) + { + return oreVeinType.name() + " triangle [" + range.minInclusive() + "-" + range.maxInclusive() + "]"; + } + return oreVeinType.name() + " trapezoid(" + plateau + ") in [" + range.minInclusive() + "-" + range.maxInclusive() + "]"; + } + case UNIFORM -> + { + return oreVeinType.name() + " uniform [" + range.minInclusive() + "-" + range.maxInclusive() + "]"; + } + } + return oreVeinType.name(); + } +} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/common/world/height/ConfigurableHeightRange.java b/src/main/java/leaf/cosmere/common/world/height/ConfigurableHeightRange.java new file mode 100644 index 000000000..9cd8afd47 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/world/height/ConfigurableHeightRange.java @@ -0,0 +1,59 @@ +/* + * File updated ~ 20 - 11 - 2024 ~ Leaf + */ + +package leaf.cosmere.common.world.height; + +import leaf.cosmere.common.resource.ore.BaseOreConfig; +import net.minecraftforge.common.ForgeConfigSpec; + +import java.util.function.Supplier; + +//based on ConfigurableHeightRange from Mekanism +// https://github.com/mekanism/Mekanism/blob/7de496745c721fb15d00d590ddcacf00570f3f1b/src/main/java/mekanism/common/world/height/ConfigurableHeightRange.java#L13 +public record ConfigurableHeightRange(Supplier shape, + ConfigurableVerticalAnchor minInclusive, + ConfigurableVerticalAnchor maxInclusive, + ForgeConfigSpec.ConfigValue plateau) +{ + + public static ConfigurableHeightRange create(ForgeConfigSpec.Builder builder, String veinType, BaseOreConfig baseConfig) + { + ForgeConfigSpec.EnumValue shape = + builder.comment("Distribution shape for placing " + veinType + "s.") + .defineEnum("shape", baseConfig.shape()); + + ConfigurableVerticalAnchor minInclusive = + ConfigurableVerticalAnchor.create( + builder, + "minInclusive", + "Minimum (inclusive) height anchor for " + veinType + "s.", baseConfig.min(), + null); + + final ForgeConfigSpec.ConfigValue plat = builder.comment("Half length of short side of trapezoid, only used if shape is TRAPEZOID. A value of zero means the shape is a triangle.") + .define("plateau", baseConfig.plateau(), o -> + { + if (o instanceof Integer value) + { + if (value == 0) + { + return true; + } + return value > 0 && shape.get() == HeightShape.TRAPEZOID; + } + return false; + }); + + return new ConfigurableHeightRange( + shape, + minInclusive, + ConfigurableVerticalAnchor.create( + builder, + "maxInclusive", + "Maximum (inclusive) height anchor for " + veinType + "s.", + baseConfig.max(), + minInclusive), + plat + ); + } +} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/common/world/height/ConfigurableVerticalAnchor.java b/src/main/java/leaf/cosmere/common/world/height/ConfigurableVerticalAnchor.java new file mode 100644 index 000000000..193e83f96 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/world/height/ConfigurableVerticalAnchor.java @@ -0,0 +1,72 @@ +/* + * File updated ~ 20 - 11 - 2024 ~ Leaf + */ + +package leaf.cosmere.common.world.height; + +import leaf.cosmere.common.resource.ore.OreAnchor; +import net.minecraft.world.level.levelgen.WorldGenerationContext; +import net.minecraftforge.common.ForgeConfigSpec; +import net.minecraftforge.common.ForgeConfigSpec.ConfigValue; +import org.jetbrains.annotations.Nullable; + +import java.util.function.Supplier; + + +//based on ConfigurableVerticalAnchor from Mekanism +// https://github.com/mekanism/Mekanism/blob/7de496745c721fb15d00d590ddcacf00570f3f1b/src/main/java/mekanism/common/world/height/ConfigurableVerticalAnchor.java#L14 +public record ConfigurableVerticalAnchor(Supplier anchorType, Supplier value) +{ + + public static ConfigurableVerticalAnchor create(ForgeConfigSpec.Builder builder, + String path, + String comment, + OreAnchor defaultAnchor, + @Nullable ConfigurableVerticalAnchor minAnchor) + { + builder.comment(comment).push(path); + ForgeConfigSpec.EnumValue type = builder.comment( + "Type of anchor.", + "Absolute -> y = value", + "Above Bottom -> y = minY + value", + "Below Top -> y = depth - 1 + minY - value") + .defineEnum("type", defaultAnchor.type()); + + ForgeConfigSpec.Builder valueBuilder = builder.comment("Value used for calculating y for the anchor based on the type."); + ConfigValue value; + + if (minAnchor == null) + { + value = valueBuilder.define("value", defaultAnchor.value()); + } + else + { + value = valueBuilder.define("value", defaultAnchor.value(), o -> + { + if (o instanceof Integer v) + { + return minAnchor.anchorType.get() != type.get() || v >= minAnchor.value.get(); + } + return false; + }); + } + builder.pop(); + return new ConfigurableVerticalAnchor(type, value); + } + + public int resolveY(WorldGenerationContext context) + { + return anchorType.get().resolveY(context, value.get()); + } + + @Override + public String toString() + { + return switch (anchorType.get()) + { + case ABSOLUTE -> value.get() + " absolute"; + case ABOVE_BOTTOM -> value.get() + " above bottom"; + case BELOW_TOP -> value.get() + " below top"; + }; + } +} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/common/world/height/HeightShape.java b/src/main/java/leaf/cosmere/common/world/height/HeightShape.java new file mode 100644 index 000000000..1728cd4e8 --- /dev/null +++ b/src/main/java/leaf/cosmere/common/world/height/HeightShape.java @@ -0,0 +1,12 @@ +/* + * File updated ~ 20 - 11 - 2024 ~ Leaf + */ + +package leaf.cosmere.common.world.height; + +//minecraft ore generation shapes +public enum HeightShape +{ + TRAPEZOID, + UNIFORM +} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/compat/curios/CosmereCurios.java b/src/main/java/leaf/cosmere/compat/curios/CosmereCurios.java deleted file mode 100644 index 17ec152a6..000000000 --- a/src/main/java/leaf/cosmere/compat/curios/CosmereCurios.java +++ /dev/null @@ -1,16 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.compat.curios; - -import top.theillusivec4.curios.api.type.capability.ICurio; - -public class CosmereCurios -{ - - public static ICurio createTestCurioProvider() - { - return new TestCurio(); - } -} diff --git a/src/main/java/leaf/cosmere/compat/curios/CuriosCompat.java b/src/main/java/leaf/cosmere/compat/curios/CuriosCompat.java deleted file mode 100644 index dee52f5a9..000000000 --- a/src/main/java/leaf/cosmere/compat/curios/CuriosCompat.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.compat.curios; - -import net.minecraftforge.eventbus.api.IEventBus; -import net.minecraftforge.fml.InterModComms; -import net.minecraftforge.fml.ModList; -import net.minecraftforge.fml.event.lifecycle.InterModEnqueueEvent; -import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; -import top.theillusivec4.curios.api.CuriosApi; -import top.theillusivec4.curios.api.SlotTypeMessage; -import top.theillusivec4.curios.api.SlotTypePreset; - -public class CuriosCompat -{ - private static boolean curiosModDetected; - - - public static boolean CuriosIsPresent() - { - return curiosModDetected; - } - - public static void init() - { - curiosModDetected = ModList.get().isLoaded("curios"); - - if (!curiosModDetected) - { - return; - } - - IEventBus modBus = FMLJavaModLoadingContext.get().getModEventBus(); - modBus.addListener(CuriosCompat::onEnqueueIMC); - } - - - private static void onEnqueueIMC(InterModEnqueueEvent event) - { - if (!curiosModDetected) - { - return; - } - - SlotTypePreset[] oneSlot = { - SlotTypePreset.BACK, - SlotTypePreset.BELT, - SlotTypePreset.BODY, - SlotTypePreset.HEAD, - SlotTypePreset.NECKLACE, - }; - - for (SlotTypePreset type : oneSlot) - { - InterModComms.sendTo(CuriosApi.MODID, SlotTypeMessage.REGISTER_TYPE, () -> type.getMessageBuilder().build()); - } - - SlotTypePreset[] twoSlot = { - SlotTypePreset.HANDS, - SlotTypePreset.RING, - SlotTypePreset.CHARM, - SlotTypePreset.BRACELET, - SlotTypePreset.NECKLACE, - }; - - for (SlotTypePreset type : twoSlot) - { - InterModComms.sendTo(CuriosApi.MODID, SlotTypeMessage.REGISTER_TYPE, () -> type.getMessageBuilder().size(2).build()); - } - - } -} diff --git a/src/main/java/leaf/cosmere/compat/curios/TestCurio.java b/src/main/java/leaf/cosmere/compat/curios/TestCurio.java deleted file mode 100644 index ce1b2b620..000000000 --- a/src/main/java/leaf/cosmere/compat/curios/TestCurio.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.compat.curios; - -import net.minecraft.entity.LivingEntity; -import net.minecraft.item.ItemStack; -import top.theillusivec4.curios.api.SlotContext; -import top.theillusivec4.curios.api.type.capability.ICurio; - -//Adding extra curio functionality, BUT ONLY if curio mod is installed. -//'ideally' you would extend ICurioItem on the key item itself, but that makes the Curio mod required to be installed, which isn't guaranteed. -public class TestCurio implements ICurio -{ - - @Override - public void curioTick(String identifier, int index, LivingEntity livingEntity) - { - //don't check every tick. - if (livingEntity.ticksExisted % 20 == 0) - { - - } - } - - @Override - public void onUnequip(SlotContext slotContext, ItemStack newStack) - { - - } -} diff --git a/src/main/java/leaf/cosmere/compat/hwyla/HwylaCompat.java b/src/main/java/leaf/cosmere/compat/hwyla/HwylaCompat.java deleted file mode 100644 index d6ed35c9c..000000000 --- a/src/main/java/leaf/cosmere/compat/hwyla/HwylaCompat.java +++ /dev/null @@ -1,21 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.compat.hwyla; - -import mcp.mobius.waila.api.IRegistrar; -import mcp.mobius.waila.api.IWailaPlugin; -import mcp.mobius.waila.api.TooltipPosition; -import mcp.mobius.waila.api.WailaPlugin; -import net.minecraft.entity.LivingEntity; - -@WailaPlugin -public class HwylaCompat implements IWailaPlugin -{ - @Override - public void register(IRegistrar iRegistrar) - { - iRegistrar.registerComponentProvider(SpiritWebTooltip.INSTANCE, TooltipPosition.BODY, LivingEntity.class); - } -} diff --git a/src/main/java/leaf/cosmere/compat/hwyla/SpiritWebTooltip.java b/src/main/java/leaf/cosmere/compat/hwyla/SpiritWebTooltip.java deleted file mode 100644 index 1ad626970..000000000 --- a/src/main/java/leaf/cosmere/compat/hwyla/SpiritWebTooltip.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.compat.hwyla; - -import leaf.cosmere.cap.entity.SpiritwebCapability; -import leaf.cosmere.constants.Manifestations; -import leaf.cosmere.constants.Metals; -import leaf.cosmere.utils.helpers.TextHelper; -import leaf.cosmere.manifestation.AManifestation; -import mcp.mobius.waila.api.IEntityAccessor; -import mcp.mobius.waila.api.IEntityComponentProvider; -import mcp.mobius.waila.api.IPluginConfig; -import net.minecraft.entity.LivingEntity; -import net.minecraft.util.text.ITextComponent; - -import java.util.List; - -public class SpiritWebTooltip implements IEntityComponentProvider -{ - static final SpiritWebTooltip INSTANCE = new SpiritWebTooltip(); - - - @Override - public void appendBody(List tooltip, IEntityAccessor accessor, IPluginConfig config) - { -/* - //todo add other ways we would allow the user to see spiritweb info - if (!accessor.getPlayer().isCreative()) - { - return; - }*/ - - //check the entity we are trying to - SpiritwebCapability.get((LivingEntity) accessor.getEntity()).ifPresent(iSpiritweb -> - { - - //todo check mistborn/feruchemist status - boolean mistborn = false;//iSpiritweb.isMistborn(); - boolean fullFeruchemist = false;//iSpiritweb.isFullFeruchemist(); - if (mistborn) - { - tooltip.add(TextHelper.createTranslatedText(Metals.MetalType.LERASIUM.getMistingName())); - } - if (fullFeruchemist) - { - tooltip.add(TextHelper.createTranslatedText(Metals.MetalType.LERASATIUM.getFerringName())); - } - - - //show all manifestations, including hemalurgic based ones. - for (AManifestation manifestation : iSpiritweb.getAvailableManifestations()) - { - if ((mistborn && manifestation.getManifestationType() == Manifestations.ManifestationTypes.ALLOMANCY) - || (fullFeruchemist && manifestation.getManifestationType() == Manifestations.ManifestationTypes.FERUCHEMY)) - { - continue; - } - tooltip.add(manifestation.translation()); - } - }); - } -} diff --git a/src/main/java/leaf/cosmere/compat/jei/JEICompat.java b/src/main/java/leaf/cosmere/compat/jei/JEICompat.java deleted file mode 100644 index 63a76fb69..000000000 --- a/src/main/java/leaf/cosmere/compat/jei/JEICompat.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.compat.jei; - -import leaf.cosmere.constants.Constants; -import leaf.cosmere.constants.Metals; -import leaf.cosmere.registry.ItemsRegistry; -import mezz.jei.api.IModPlugin; -import mezz.jei.api.JeiPlugin; -import mezz.jei.api.constants.VanillaTypes; -import mezz.jei.api.registration.IGuiHandlerRegistration; -import mezz.jei.api.registration.IRecipeCategoryRegistration; -import mezz.jei.api.registration.IRecipeRegistration; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; - -@JeiPlugin -public class JEICompat implements IModPlugin -{ - @Override - public ResourceLocation getPluginUid() - { - return Constants.Resources.JEI; - } - - @Override - public void registerCategories(IRecipeCategoryRegistration reg) - { - } - - @Override - public void registerGuiHandlers(IGuiHandlerRegistration registry) - { - } - - @Override - public void registerRecipes(IRecipeRegistration reg) - { - //for (RegistryObject itemRO : ItemsRegistry.ITEMS.get()) - //reg.addRecipes(TestRecipe.getAllRecipes(world), TestRecipeCategory.NAME); - - addItemInfoPage(reg, ItemsRegistry.GUIDE.get()); - - for (Metals.MetalType metalType : Metals.MetalType.values()) - { - if (metalType.hasFeruchemicalEffect()) - { - addItemInfoPage(reg, metalType.getNecklaceItem()); - addItemInfoPage(reg, metalType.getRingItem()); - addItemInfoPage(reg, metalType.getBraceletItem()); - } - if (metalType.hasHemalurgicEffect()) - { - addItemInfoPage(reg, metalType.getSpikeItem()); - } - } - } - - private void addItemInfoPage(IRecipeRegistration reg, Item item) - { - reg.addIngredientInfo(new ItemStack(item), VanillaTypes.ITEM, String.format("item.cosmere.%s.tooltip", item.getRegistryName().getPath())); - } - -} diff --git a/src/main/java/leaf/cosmere/config/ClientConfig.java b/src/main/java/leaf/cosmere/config/ClientConfig.java deleted file mode 100644 index 465fa9c00..000000000 --- a/src/main/java/leaf/cosmere/config/ClientConfig.java +++ /dev/null @@ -1,24 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.config; - -import leaf.cosmere.Cosmere; -import net.minecraftforge.common.ForgeConfigSpec; - -public class ClientConfig -{ - - final ForgeConfigSpec.BooleanValue clientBool; - - ClientConfig(ForgeConfigSpec.Builder builder) - { - builder.push("clientSection1"); - clientBool = builder - .worldRestart() - .comment("comment for 2nd config value") - .translation(Cosmere.MODID + ".config.translation.key") - .define("config_name_1", true); - } -} diff --git a/src/main/java/leaf/cosmere/config/CommonConfig.java b/src/main/java/leaf/cosmere/config/CommonConfig.java deleted file mode 100644 index 7b8749dd6..000000000 --- a/src/main/java/leaf/cosmere/config/CommonConfig.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.config; - -import com.google.common.collect.Lists; -import leaf.cosmere.Cosmere; -import net.minecraftforge.common.ForgeConfigSpec; - -import java.util.List; - -public class CommonConfig -{ - - final ForgeConfigSpec.ConfigValue> stringConfigList; - final ForgeConfigSpec.IntValue intConfigValue; - final ForgeConfigSpec.IntValue intConfigValue2; - final ForgeConfigSpec.BooleanValue boolConfigValue; - - CommonConfig(ForgeConfigSpec.Builder builder) - { - builder.comment("Comment for the config"); - - builder.push("section one"); - - stringConfigList = builder - .worldRestart() - .comment("comment for first config value") - .translation(Cosmere.MODID + ".config.translation.key") - .define("config_name_1", Lists.newArrayList("string 1", "string 2", "string 3")); - intConfigValue = builder - .comment("comment for 2nd config value") - .translation(Cosmere.MODID + ".config.translation.key") - .defineInRange("config_name_2", 123, 0, 1234); - boolConfigValue = builder - .comment("comment for 3rd config value") - .translation(Cosmere.MODID + ".config.translation.key") - .define("config_name_3", true); - - - builder.pop(); - builder.push("section two"); - intConfigValue2 = builder - .comment("comment for 4th config value") - .translation(Cosmere.MODID + ".config.translation.key") - .defineInRange("config_name_4", 1234, 0, Integer.MAX_VALUE); - builder.pop(); - } -} diff --git a/src/main/java/leaf/cosmere/config/Config.java b/src/main/java/leaf/cosmere/config/Config.java deleted file mode 100644 index 471ec634d..000000000 --- a/src/main/java/leaf/cosmere/config/Config.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.config; - -import leaf.cosmere.Cosmere; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.common.ForgeConfigSpec; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.ModLoadingContext; -import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.fml.config.ModConfig; -import org.apache.commons.lang3.tuple.Pair; - -import javax.annotation.Nullable; -import java.util.Set; -import java.util.stream.Collectors; - -@Mod.EventBusSubscriber(modid = Cosmere.MODID, bus = Mod.EventBusSubscriber.Bus.MOD) -public class Config -{ - - public static final ForgeConfigSpec COMMON_SPEC; - private static final CommonConfig COMMON; - - public static final ForgeConfigSpec CLIENT_SPEC; - private static final ClientConfig CLIENT; - public static boolean clientConfigBool; - - static - { - final Pair specPair = new ForgeConfigSpec.Builder().configure(CommonConfig::new); - COMMON = specPair.getLeft(); - COMMON_SPEC = specPair.getRight(); - } - - private static Set stringConfigList; - public static int intConfigValue; - public static boolean boolConfigValue; - - public static int intConfigValue2; - - static - { - final Pair specPair = new ForgeConfigSpec.Builder().configure(ClientConfig::new); - CLIENT_SPEC = specPair.getRight(); - CLIENT = specPair.getLeft(); - } - - public static boolean isBlacklisted(@Nullable ResourceLocation biome) - { - return biome != null && (stringConfigList.contains(biome)); - } - - public static void bakeCommon() - { - Config.stringConfigList = COMMON.stringConfigList.get() - .stream() - .filter(string -> string.endsWith(":*")) - .map(string -> string.substring(0, string.length() - 2)) - .collect(Collectors.toSet()); - - Config.intConfigValue = COMMON.intConfigValue.get(); - Config.boolConfigValue = COMMON.boolConfigValue.get(); - - Config.intConfigValue2 = COMMON.intConfigValue2.get(); - } - - public static void bakeClient() - { - Config.clientConfigBool = CLIENT.clientBool.get(); - } - - public static void register() - { - ModLoadingContext.get().registerConfig(ModConfig.Type.COMMON, Config.COMMON_SPEC); - ModLoadingContext.get().registerConfig(ModConfig.Type.CLIENT, Config.CLIENT_SPEC); - } - - @SubscribeEvent - @SuppressWarnings("unused") - public static void onModConfigEvent(ModConfig.ModConfigEvent configEvent) - { - if (configEvent.getConfig().getSpec() == Config.COMMON_SPEC) - { - bakeCommon(); - } - else if (configEvent.getConfig().getSpec() == Config.CLIENT_SPEC) - { - bakeClient(); - } - } -} diff --git a/src/main/java/leaf/cosmere/constants/Constants.java b/src/main/java/leaf/cosmere/constants/Constants.java deleted file mode 100644 index 60bd6b7c0..000000000 --- a/src/main/java/leaf/cosmere/constants/Constants.java +++ /dev/null @@ -1,122 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.constants; - -import leaf.cosmere.Cosmere; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.text.IFormattableTextComponent; -import net.minecraft.util.text.StringTextComponent; -import net.minecraft.util.text.TextFormatting; -import net.minecraft.util.text.TranslationTextComponent; - -import java.util.UUID; - -public class Constants -{ - public static class Resources - { - /** - * Generic ResourceLocation to allow for all entries in a command suggestion to be used for the command - */ - public static final ResourceLocation ALL = new ResourceLocation(Cosmere.MODID, "all"); - - public static final ResourceLocation JEI = new ResourceLocation(Cosmere.MODID, "jei"); - public static final ResourceLocation SPIRITWEB_CAP = new ResourceLocation(Cosmere.MODID, "innate_investiture"); - } - - public static class Suffix - { - public static final IFormattableTextComponent INVESTITURE_UNITS = new StringTextComponent(" IU").mergeStyle(TextFormatting.RESET); - public static final IFormattableTextComponent STORMLIGHT_UNITS = new StringTextComponent(" SU").mergeStyle(TextFormatting.RESET); - } - - public static class NBT - { - - public static final String CHARGE_LEVEL = "charge_level"; - - public static final String ATTUNED_PLAYER = "attuned_player"; - public static final String ATTUNED_PLAYER_NAME = "attuned_player_name"; - - - public static final UUID UNSEALED_UUID = UUID.fromString("422fc419-1e39-4eac-ac01-6fc98512c122"); - } - - //todo rename this when I remember the word - public static class RegNameStubs - { - public static final String BLOCK = "_block"; - public static final String RAW = "raw_"; - public static final String ORE = "_ore"; - public static final String BLEND = "_blend"; - - public static final String METALMIND = "_metalmind"; - - public static final String BRACELET = "_bracelet"; - public static final String RING = "_ring"; - public static final String NECKLACE = "_necklace"; - public static final String INGOT = "_ingot"; - public static final String NUGGET = "_nugget"; - public static final String SHAVINGS = "_shavings"; - public static final String SPIKE = "_spike"; - } - - - public static class Gui - { - public static final int NONE = 0; - public static final int GUIDE = 1; - } - - public static class Strings - { - public static final String KEYS_CATEGORY = "keys.cosmere.main"; - - public static final String KEY_MANIFESTATION_MODE_NEXT = "key.cosmere.powers.next"; - public static final String KEY_MANIFESTATION_MODE_PREVIOUS = "key.cosmere.powers.previous"; - public static final String KEY_MANIFESTATION_TOGGLE = "key.cosmere.powers.toggle"; - public static final String KEY_MANIFESTATION_MENU = "key.cosmere.powers.menu"; - - public static final String KEY_ALLOMANCY_PUSH = "key.cosmere.allomancy.push"; - public static final String KEY_ALLOMANCY_PULL = "key.cosmere.allomancy.pull"; - - public static final String GUI = "gui.cosmere."; - public static final String TOOLTIP_ITEM_INFO = "tooltip.item.info."; - public static final String CONTAINED_POWERS_FOUND = "tooltip.cosmere.power.found"; - - public static final String POWER_INVALID = "argument.cosmere.power.invalid"; - public static final String POWER_SET_SUCCESS = "command.cosmere.power.set.success"; - public static final String POWER_SET_FAIL = "command.cosmere.power.set.fail"; - public static final String POWER_MODE_SET = "power.cosmere.mode.set"; - public static final String POWER_ACTIVE = "power.cosmere.toggle.active"; - public static final String POWER_INACTIVE = "power.cosmere.toggle.inactive"; - - - public static final String POWERS_FOUND = "command.cosmere.power.found"; - - - public static final String CONTAINED_METALS = "tooltip.cosmere.metals.contained"; - } - - public static class Translations - { - public static final TranslationTextComponent TOOLTIP_HOLD_SHIFT = new TranslationTextComponent(Strings.TOOLTIP_ITEM_INFO + "shift"); - public static final TranslationTextComponent TOOLTIP_CONTROL = new TranslationTextComponent(Strings.TOOLTIP_ITEM_INFO + "control"); - public static final TranslationTextComponent TOOLTIP_SHIFT_AND_CONTROL = new TranslationTextComponent(Strings.TOOLTIP_ITEM_INFO + "shift_control"); - - public static final TranslationTextComponent GUI_NEXT = new TranslationTextComponent(Strings.GUI + "next"); - public static final TranslationTextComponent GUI_PREV = new TranslationTextComponent(Strings.GUI + "previous"); - public static final TranslationTextComponent GUI_SELECT = new TranslationTextComponent(Strings.GUI + "select"); - public static final TranslationTextComponent GUI_CONFIRM = new TranslationTextComponent(Strings.GUI + "confirm"); - public static final TranslationTextComponent GUI_SAVE = new TranslationTextComponent(Strings.GUI + "save"); - public static final TranslationTextComponent GUI_CANCEL = new TranslationTextComponent(Strings.GUI + "cancel"); - - public static final TranslationTextComponent GUI_BACK = new TranslationTextComponent(Strings.GUI + "button.back"); - - - public static final TranslationTextComponent POWER_ACTIVE = new TranslationTextComponent(Strings.POWER_ACTIVE); - public static final TranslationTextComponent POWER_INACTIVE = new TranslationTextComponent(Strings.POWER_INACTIVE); - } -} diff --git a/src/main/java/leaf/cosmere/constants/Manifestations.java b/src/main/java/leaf/cosmere/constants/Manifestations.java deleted file mode 100644 index f37609ec5..000000000 --- a/src/main/java/leaf/cosmere/constants/Manifestations.java +++ /dev/null @@ -1,119 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.constants; - -import leaf.cosmere.manifestation.AManifestation; -import leaf.cosmere.registry.ManifestationRegistry; - -import java.util.Arrays; -import java.util.Optional; - -public class Manifestations -{ - public final static int ALLOMANCY_ID = 1; - public final static int FERUCHEMY_ID = 2; - public final static int RADIANT_ID = 3; - public final static int ELANTRIAN_ID = 4; - public final static int AWAKENER_ID = 5; - - public enum ManifestationTypes - { - NONE(0), - //Allomancy Section - ALLOMANCY(ALLOMANCY_ID), - - //Feruchemy Section - FERUCHEMY(FERUCHEMY_ID), - - //Knight Radiant Section - RADIANT(RADIANT_ID), - - // AonDor - ELANTRIAN(ELANTRIAN_ID), - - // AonDor - AWAKENER(AWAKENER_ID); - - - ManifestationTypes(int id) - { - this.id = id; - } - - final int id; - - public int getID() - { - return id; - } - - - public static Optional valueOf(int value) - { - return Arrays.stream(values()) - .filter(powerTypes -> powerTypes.id == value) - .findFirst(); - } - - public AManifestation getManifestation(int powerID) - { - Optional metalType = Metals.MetalType.valueOf(powerID); - switch (this) - { - case ALLOMANCY: - if (metalType.isPresent()) - { - return ManifestationRegistry.ALLOMANCY_POWERS.get(metalType.get()).get(); - } - break; - case FERUCHEMY: - if (metalType.isPresent()) - { - return ManifestationRegistry.FERUCHEMY_POWERS.get(metalType.get()).get(); - } - break; - case RADIANT: - break; - case ELANTRIAN: - break; - case AWAKENER: - break; - } - return ManifestationRegistry.NONE.get(); - } - } - - - public static final String NONE = "none"; - - public static class AonDor - { - public static final String ELANTRIAN = "elantrian"; - } - - public static class Biochroma - { - public static final String AWAKENING = "awakening"; - } - - public static class Hemalurgy - { - public static final String NONE = "none"; - } - - public static class Surgebinding - { - public static final String WINDRUNNER = "windrunner"; - public static final String SKYBREAKER = "skybreaker"; - public static final String DUSTBRINGER = "dustbringer"; - public static final String EDGEDANCER = "edgedancer"; - public static final String TRUTHWATCHER = "truthwatcher"; - public static final String LIGHTWEAVER = "lightweaver"; - public static final String ELSECALLER = "elsecaller"; - public static final String WILLSHAPER = "willshaper"; - public static final String STONEWARD = "stoneward"; - public static final String BONDSMITH = "bondsmith"; - } -} diff --git a/src/main/java/leaf/cosmere/constants/Metals.java b/src/main/java/leaf/cosmere/constants/Metals.java deleted file mode 100644 index d0037faf9..000000000 --- a/src/main/java/leaf/cosmere/constants/Metals.java +++ /dev/null @@ -1,758 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.constants; - -import leaf.cosmere.blocks.MetalBlock; -import leaf.cosmere.items.MetalIngotItem; -import leaf.cosmere.items.MetalNuggetItem; -import leaf.cosmere.items.MetalRawOreItem; -import leaf.cosmere.items.curio.BraceletMetalmind; -import leaf.cosmere.items.curio.HemalurgicSpikeItem; -import leaf.cosmere.items.curio.NecklaceMetalmind; -import leaf.cosmere.items.curio.RingMetalmind; -import leaf.cosmere.registry.BlocksRegistry; -import leaf.cosmere.registry.EffectsRegistry; -import leaf.cosmere.registry.ItemsRegistry; -import leaf.cosmere.registry.TagsRegistry; -import net.minecraft.block.OreBlock; -import net.minecraft.item.IItemTier; -import net.minecraft.item.Item; -import net.minecraft.item.Rarity; -import net.minecraft.item.crafting.Ingredient; -import net.minecraft.potion.Effect; -import net.minecraft.tags.ITag; - -import java.awt.*; -import java.util.Arrays; -import java.util.Collection; -import java.util.Optional; - -/* -* All hope abandon ye who enter here. -* ,, -* W () -* |->< v -* | )(\/ -* You've found the monolith metal script! -* It ain't pretty, but I also don't really care :D -*/ - -public class Metals -{ - - public enum MetalType implements IItemTier - { - //Physical/Physical - IRON(0), - STEEL(1),//alloy of iron and carbon (coal/charcoal) 1/4 ? - TIN(2), - PEWTER(3),//alloy of tin and lead 4/1 - - //Mental/Cognitive - ZINC(4), - BRASS(5),//allot of zinc and copper 50/50 ? - COPPER(6), - BRONZE(7),//alloy of copper and tin? 3/1 ? - - //Enhancement/spiritual - ALUMINUM(8), - DURALUMIN(9),//alloy of aluminum and copper 4/1 - CHROMIUM(10), - NICROSIL(11),//alloy of chromium and nickel 1/3 - - //temporal/hybrid - CADMIUM(12), - BENDALLOY(13),//alloy of 70% lead, 20% tin, and 10% cadmium by mass - GOLD(14), - ELECTRUM(15),//alloy of gold and silver 1/1 - - //god metals - ATIUM(16), - LERASIUM(17), - HARMONIUM(18), - - //god metal alloys - MALATIUM(19),//atium and gold? - LERASATIUM(20),// atium and lerasium - - - //non-allomantic metals - - NICKEL(21), - LEAD(22), - SILVER(23); - - private final int id; - - MetalType(int id) - { - this.id = id; - } - - public static Optional valueOf(int value) - { - return Arrays.stream(values()) - .filter(metalType -> metalType.id == value) - .findFirst(); - } - - public int getID() - { - return id; - } - - public Rarity getRarity() - { - switch (this) - { - case ATIUM: - case MALATIUM: - return Rarity.RARE; - case LERASIUM: - case LERASATIUM: - case HARMONIUM: - return Rarity.EPIC; - default: - return Rarity.COMMON; - } - } - - public boolean hasAssociatedManifestation() - { - switch (this) - { - case MALATIUM: - case LERASIUM: //these are mistborn, but its handled by giving access to all other metals - case LERASATIUM: //these are feruchemists, but its handled by giving access to all other metals - case HARMONIUM: //different way of melding preservation and ruin. No idea what it does - case NICKEL: - case SILVER: - case LEAD: - return false; - default: - return true; - } - } - - public boolean hasHemalurgicEffect() - { - switch (this) - { - case MALATIUM: - case LERASATIUM: - case HARMONIUM: - case NICKEL: - case SILVER: - case LEAD: - return false; - default: - return true; - } - } - - public boolean hasFeruchemicalEffect() - { - switch (this) - { - case LERASIUM://no idea what lerasium would do - case MALATIUM: - case LERASATIUM: - case HARMONIUM: - case NICKEL: - case SILVER: - case LEAD: - return false; - default: - return true; - } - } - - public boolean hasOre() - { - switch (this) - { - case ALUMINUM: - case CADMIUM: - case CHROMIUM: - //case IRON: - case NICKEL: - case COPPER: - case ZINC: - case SILVER: - case TIN: - //case GOLD: - case LEAD: - return true; - default: - return false; - } - } - - public boolean isAlloy() - { - switch (this) - { - case STEEL: - case PEWTER: - case BRASS: - case BRONZE: - case DURALUMIN: - case NICROSIL: - case BENDALLOY: - case ELECTRUM: - return true; - default: - return false; - } - } - - public boolean hasMaterialItem() - { - switch (this) - { - case IRON: - case GOLD: - return false; - default: - return true; - } - } - - //All the helper functions. - - public Effect getStoringEffect() - { - return EffectsRegistry.STORING_EFFECTS.get(this).get(); - } - - public Effect getTappingEffect() - { - return EffectsRegistry.TAPPING_EFFECTS.get(this).get(); - } - - public NecklaceMetalmind getNecklaceItem() - { - return (NecklaceMetalmind) ItemsRegistry.METAL_NECKLACES.get(this).get(); - } - - public RingMetalmind getRingItem() - { - return (RingMetalmind) ItemsRegistry.METAL_RINGS.get(this).get(); - } - - public BraceletMetalmind getBraceletItem() - { - return (BraceletMetalmind) ItemsRegistry.METAL_BRACELETS.get(this).get(); - } - - public MetalIngotItem getIngotItem() - { - return (MetalIngotItem) ItemsRegistry.METAL_INGOTS.get(this).get(); - } - - public MetalNuggetItem getNuggetItem() - { - return (MetalNuggetItem) ItemsRegistry.METAL_NUGGETS.get(this).get(); - } - - public HemalurgicSpikeItem getSpikeItem() - { - return (HemalurgicSpikeItem) ItemsRegistry.METAL_SPIKE.get(this).get(); - } - public MetalRawOreItem getRawMetalItem() - { - if (this.isAlloy()) - { - return (MetalRawOreItem) ItemsRegistry.METAL_RAW_BLEND.get(this).get(); - } - // if (this.hasOre()) - else - { - return (MetalRawOreItem) ItemsRegistry.METAL_RAW_ORE.get(this).get(); - } - - } - - public MetalBlock getBlock() - { - return (MetalBlock) BlocksRegistry.METAL_BLOCKS.get(this).get(); - } - - public OreBlock getOreBlock() - { - return BlocksRegistry.METAL_ORE.get(this).get(); - } - - public ITag.INamedTag getMetalRawTag() - { - return TagsRegistry.Items.METAL_RAW_TAGS.get(this); - } - - public ITag.INamedTag getMetalIngotTag() - { - return TagsRegistry.Items.METAL_INGOT_TAGS.get(this); - } - - public ITag.INamedTag getMetalNuggetTag() - { - return TagsRegistry.Items.METAL_NUGGET_TAGS.get(this); - } - - - public Color getColor() - { - Color color; - - switch (this) - { - default: - case IRON: - color = MetalColor.IRON; - break; - case STEEL: - color = MetalColor.STEEL; - break; - case TIN: - color = MetalColor.TIN; - break; - case PEWTER: - color = MetalColor.PEWTER; - break; - case ALUMINUM: - color = MetalColor.ALUMINUM; - break; - case DURALUMIN: - color = MetalColor.DURALUMIN; - break; - case CHROMIUM: - color = MetalColor.CHROMIUM; - break; - case NICROSIL: - color = MetalColor.NICROSIL; - break; - case ZINC: - color = MetalColor.ZINC; - break; - case BRASS: - color = MetalColor.BRASS; - break; - case COPPER: - color = MetalColor.COPPER; - break; - case BRONZE: - color = MetalColor.BRONZE; - break; - case GOLD: - color = MetalColor.GOLD; - break; - case ELECTRUM: - color = MetalColor.ELECTRUM; - break; - case CADMIUM: - color = MetalColor.CADMIUM; - break; - case BENDALLOY: - color = MetalColor.BENDALLOY; - break; - case LERASIUM: - color = MetalColor.LERASIUM; - break; - case ATIUM: - color = MetalColor.ATIUM; - break; - case MALATIUM: - color = MetalColor.MALATIUM; - break; - case LERASATIUM: - color = MetalColor.LERASATIUM; - break; - case HARMONIUM: - color = MetalColor.HARMONIUM; - break; - case NICKEL: - color = MetalColor.NICKEL; - break; - case LEAD: - color = MetalColor.LEAD; - break; - case SILVER: - color = MetalColor.SILVER; - break; - } - - return color; - } - - public int getColorValue() - { - return getColor().getRGB(); - } - - public String getFerringName() - { - String name; - - switch (this) - { - case IRON: - name = FerringNames.IRON; - break; - case STEEL: - name = FerringNames.STEEL; - break; - case TIN: - name = FerringNames.TIN; - break; - case PEWTER: - name = FerringNames.PEWTER; - break; - case ALUMINUM: - name = FerringNames.ALUMINUM; - break; - case DURALUMIN: - name = FerringNames.DURALUMIN; - break; - case CHROMIUM: - name = FerringNames.CHROMIUM; - break; - case NICROSIL: - name = FerringNames.NICROSIL; - break; - case ZINC: - name = FerringNames.ZINC; - break; - case BRASS: - name = FerringNames.BRASS; - break; - case COPPER: - name = FerringNames.COPPER; - break; - case BRONZE: - name = FerringNames.BRONZE; - break; - case GOLD: - name = FerringNames.GOLD; - break; - case ELECTRUM: - name = FerringNames.ELECTRUM; - break; - case CADMIUM: - name = FerringNames.CADMIUM; - break; - case BENDALLOY: - name = FerringNames.BENDALLOY; - break; - case ATIUM: - name = FerringNames.ATIUM; - break; - case LERASATIUM: - name = FerringNames.ALL; - break; - default: - case LERASIUM: - case MALATIUM: - name = "ferring_" + this.name().toLowerCase(); - break; - } - - - return name; - } - - public boolean isPushMetal() - { - switch (this) - { - case STEEL: - case PEWTER: - case BRASS: - case BRONZE: - case DURALUMIN: - case NICROSIL: - case BENDALLOY: - case ELECTRUM: - return true; - default: - return false; - } - } - - public boolean isPullMetal() - { - switch (this) - { - case IRON: - case TIN: - case ALUMINUM: - case CHROMIUM: - case ZINC: - case COPPER: - case GOLD: - case CADMIUM: - return true; - default: - return false; - } - } - - public String getMistingName() - { - String name; - - switch (this) - { - case IRON: - name = MistingNames.IRON; - break; - case STEEL: - name = MistingNames.STEEL; - break; - case TIN: - name = MistingNames.TIN; - break; - case PEWTER: - name = MistingNames.PEWTER; - break; - case ALUMINUM: - name = MistingNames.ALUMINUM; - break; - case DURALUMIN: - name = MistingNames.DURALUMIN; - break; - case CHROMIUM: - name = MistingNames.CHROMIUM; - break; - case NICROSIL: - name = MistingNames.NICROSIL; - break; - case ZINC: - name = MistingNames.ZINC; - break; - case BRASS: - name = MistingNames.BRASS; - break; - case COPPER: - name = MistingNames.COPPER; - break; - case BRONZE: - name = MistingNames.BRONZE; - break; - case GOLD: - name = MistingNames.GOLD; - break; - case ELECTRUM: - name = MistingNames.ELECTRUM; - break; - case CADMIUM: - name = MistingNames.CADMIUM; - break; - case BENDALLOY: - name = MistingNames.BENDALLOY; - break; - case ATIUM: - name = MistingNames.ATIUM; - break; - case LERASIUM: - name = MistingNames.ALL; - break; - default: - case MALATIUM: - case LERASATIUM: - name = "misting_" + this.name().toLowerCase(); - break; - } - - return name; - } - - public Collection getHemalurgyStealWhitelist() - { - switch (this) - { - case STEEL: - //Steals a physical allomantic power - //Iron//Steel//Tin//Pewter - case PEWTER: - //Steals a physical feruchemical power - //Iron//Steel//Tin//Pewter - return Arrays.asList( - Metals.MetalType.IRON, - Metals.MetalType.STEEL, - Metals.MetalType.TIN, - Metals.MetalType.PEWTER); - case BRASS: - //Steals a cognitive feruchemical power - //Zinc//Brass//Copper//Bronze - case BRONZE: - //Steals a Mental Allomantic power - //Zinc//Brass//Copper//Bronze - return Arrays.asList( - Metals.MetalType.ZINC, - Metals.MetalType.BRASS, - Metals.MetalType.COPPER, - Metals.MetalType.BRONZE); - case CADMIUM: - //Steals a Temporal Allomantic power - //Cadmium//Bendalloy//Gold//Electrum - case GOLD: - //Steals a Hybrid Feruchemical power - //Cadmium//Bendalloy//Gold//Electrum - return Arrays.asList( - Metals.MetalType.CADMIUM, - Metals.MetalType.BENDALLOY, - Metals.MetalType.GOLD, - Metals.MetalType.ELECTRUM); - case BENDALLOY: - //Steals a Spiritual Feruchemical power - //Chromium//Nicrosil//Aluminum//Duralumin - case ELECTRUM: - //Steals an Enhancement Allomantic power - //Chromium//Nicrosil//Aluminum//Duralumin - return Arrays.asList( - Metals.MetalType.CHROMIUM, - Metals.MetalType.NICROSIL, - Metals.MetalType.ALUMINUM, - Metals.MetalType.DURALUMIN); - case ATIUM: - return Arrays.asList(Metals.MetalType.values()); - case LERASIUM: - case MALATIUM: - case LERASATIUM: - break; - } - - return null; - } - - //todo implement item tiers - - @Override - public int getMaxUses() - { - return 0; - } - - @Override - public float getEfficiency() - { - return 0; - } - - @Override - public float getAttackDamage() - { - return 0; - } - - @Override - public int getHarvestLevel() - { - return 0; - } - - @Override - public int getEnchantability() - { - return 0; - } - - @Override - public Ingredient getRepairMaterial() - { - return null; - } - - } - - private static class MetalColor - { - - //Iron(0.560f,0.579f,0.580f) - public static final Color IRON = Color.decode("#f2f2f2"); - public static final Color STEEL = Color.decode("#727273"); - public static final Color TIN = Color.decode("#79b7bc"); - public static final Color PEWTER = Color.decode("#a39b90"); - //Aluminium(0.913f,0.921f,0.925f) - public static final Color ALUMINUM = Color.decode("#d9d9d9"); - public static final Color DURALUMIN = Color.decode("#a6a486"); - //Chromium(0.550f,0.556f,0.554f) - public static final Color CHROMIUM = Color.decode("#595959"); - public static final Color NICROSIL = Color.decode("#59503e"); - public static final Color ZINC = Color.decode("#d7d9c7"); - public static final Color BRASS = Color.decode("#bc6330"); - //Copper(0.955f,0.637f,0.538f) - public static final Color COPPER = Color.decode("#fba634"); - public static final Color BRONZE = Color.decode("#8c5b30"); - //Gold(1.000f,0.766f,0.336f) - public static final Color GOLD = Color.decode("#faf25e"); - public static final Color ELECTRUM = Color.decode("#d9b166"); - public static final Color CADMIUM = Color.decode("#F5926C"); - public static final Color BENDALLOY = Color.decode("#46473e"); - - //new Color(0.860f, 0.870f, 0.880f); - public static final Color LERASIUM = Color.decode("#f2dea0"); - public static final Color ATIUM = Color.decode("#262626"); - - //godmetal/metal alloys - public static final Color MALATIUM = Color.decode("#bfbfbf"); - - - //god metal only alloys - public static final Color HARMONIUM = Color.decode("#88b9d9"); - - // made up - public static final Color LERASATIUM = new Color(0.560f, 0.570f, 0.580f); - - //non-special - public static final Color NICKEL = Color.decode("#eeedcb"); - public static final Color LEAD = Color.decode("#8392c2"); - public static final Color SILVER = Color.decode("#d3e5eb"); - } - - private static class FerringNames - { - public static final String ALL = "feruchemist"; - public static final String IRON = "skimmer"; - public static final String STEEL = "steelrunner"; - public static final String TIN = "windwhisper"; - public static final String PEWTER = "brute"; - public static final String ALUMINUM = "trueself"; - public static final String DURALUMIN = "connector"; - public static final String CHROMIUM = "spinner"; - public static final String NICROSIL = "soulbearer"; - public static final String ZINC = "sparker"; - public static final String BRASS = "firesoul"; - public static final String COPPER = "archivist"; - public static final String BRONZE = "sentry"; - public static final String GOLD = "bloodmaker"; - public static final String ELECTRUM = "pinnacle"; - public static final String CADMIUM = "gasper"; - public static final String BENDALLOY = "subsumer"; - public static final String ATIUM = "elderling"; - } - - private static class MistingNames - { - public static final String ALL = "mistborn"; - public static final String IRON = "lurcher"; - public static final String STEEL = "coinshot"; - public static final String TIN = "tineye"; - public static final String PEWTER = "thug"; - public static final String ALUMINUM = "aluminum_gnat"; - public static final String DURALUMIN = "duralumin_gnat"; - public static final String CHROMIUM = "leecher"; - public static final String NICROSIL = "nicroburst"; - public static final String ZINC = "rioter"; - public static final String BRASS = "soother"; - public static final String COPPER = "smoker"; - public static final String BRONZE = "seeker"; - public static final String GOLD = "augur"; - public static final String ELECTRUM = "oracle"; - public static final String CADMIUM = "pulser"; - public static final String BENDALLOY = "slider"; - public static final String ATIUM = "seer"; - - } -} diff --git a/src/main/java/leaf/cosmere/datagen/BlockLootTableGen.java b/src/main/java/leaf/cosmere/datagen/BlockLootTableGen.java deleted file mode 100644 index cfdb95077..000000000 --- a/src/main/java/leaf/cosmere/datagen/BlockLootTableGen.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.datagen; - -import leaf.cosmere.blocks.MetalOreBlock; -import leaf.cosmere.registry.BlocksRegistry; -import net.minecraft.block.Block; -import net.minecraft.data.loot.BlockLootTables; -import net.minecraftforge.fml.RegistryObject; - -public class BlockLootTableGen extends BlockLootTables -{ - @Override - protected void addTables() - { - /*this.registerLootTable(BlocksRegistry.atium_geode.get(), (block) -> { - return droppingItemWithFortune(block, ItemsRegistry.ATIUM.get()); - });*/ - - for (RegistryObject itemRegistryObject : BlocksRegistry.BLOCKS.getEntries()) - { - if ((itemRegistryObject.get() instanceof MetalOreBlock)) - { - MetalOreBlock oreBlock = (MetalOreBlock) itemRegistryObject.get(); - - this.registerLootTable(oreBlock, (ore) -> { - return droppingItemWithFortune(ore, oreBlock.getMetalType().getRawMetalItem()); - }); - } - else - { - this.registerDropSelfLootTable(itemRegistryObject.get()); - } - } - } - - @Override - protected Iterable getKnownBlocks() - { - return BlocksRegistry.BLOCKS.getEntries().stream().map(RegistryObject::get)::iterator; - } -} diff --git a/src/main/java/leaf/cosmere/datagen/BlockModelsGen.java b/src/main/java/leaf/cosmere/datagen/BlockModelsGen.java deleted file mode 100644 index fb3b6c3e5..000000000 --- a/src/main/java/leaf/cosmere/datagen/BlockModelsGen.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.datagen; - -import leaf.cosmere.Cosmere; -import leaf.cosmere.blocks.MetalBlock; -import leaf.cosmere.utils.helpers.ResourceLocationHelper; -import leaf.cosmere.registry.BlocksRegistry; -import net.minecraft.block.Block; -import net.minecraft.block.OreBlock; -import net.minecraft.data.DataGenerator; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.client.model.generators.BlockStateProvider; -import net.minecraftforge.client.model.generators.ModelFile; -import net.minecraftforge.common.data.ExistingFileHelper; -import net.minecraftforge.fml.RegistryObject; - -import java.util.function.Supplier; - -public class BlockModelsGen extends BlockStateProvider -{ - public BlockModelsGen(DataGenerator generator, ExistingFileHelper existingFileHelper) - { - super(generator, Cosmere.MODID, existingFileHelper); - } - - @Override - protected void registerStatesAndModels() - { - for (RegistryObject itemRegistryObject : BlocksRegistry.BLOCKS.getEntries()) - { - if (itemRegistryObject.get() instanceof MetalBlock) - { - //ModelFile blockModel = models().cubeAll(getPath(itemRegistryObject), new ResourceLocation(Cosmere.MODID, "block/metal_block")); - - //thank you botania! <3 tinting is awesome - ModelFile blockModel = models().withExistingParent("metal_block", ResourceLocationHelper.prefix("block/shapes/cube_all_tinted")) - .texture("all", ResourceLocationHelper.prefix("block/metal_block")); - - simpleBlock(itemRegistryObject.get(), blockModel); - continue; - } - else if (itemRegistryObject.get() instanceof OreBlock) - { - //Special thanks to @Random & @sciwhiz12 on discord who helped me get these running - //To get the overlay working, you need to tell the blocks they have transparency, which I've donne in the ClientSetup script. - ModelFile blockModel = models().withExistingParent("ore_block", ResourceLocationHelper.prefix("block/shapes/cube_with_tint_overlay")) - .texture("all", ResourceLocationHelper.prefix("block/ore_block")) - .texture("overlay",ResourceLocationHelper.prefix("block/ore_block_tint_overlay")); - - simpleBlock(itemRegistryObject.get(), blockModel); - continue; - } - - simpleBlock(itemRegistryObject); - } - - } - - public void simpleBlock(Supplier blockSupplier) - { - simpleBlock(blockSupplier.get()); - } - - public String getPath(Supplier blockSupplier) - { - ResourceLocation location = blockSupplier.get().getRegistryName(); - return location.getPath(); - } - - @Override - public void simpleBlock(Block block, ModelFile model) - { - super.simpleBlock(block, model); - this.simpleBlockItem(block, model); - } -} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/datagen/BlockTagsGen.java b/src/main/java/leaf/cosmere/datagen/BlockTagsGen.java deleted file mode 100644 index cc3822bbe..000000000 --- a/src/main/java/leaf/cosmere/datagen/BlockTagsGen.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.datagen; - -import leaf.cosmere.Cosmere; -import leaf.cosmere.blocks.MetalBlock; -import leaf.cosmere.constants.Metals; -import leaf.cosmere.registry.BlocksRegistry; -import leaf.cosmere.registry.TagsRegistry; -import net.minecraft.block.Block; -import net.minecraft.data.BlockTagsProvider; -import net.minecraft.data.DataGenerator; -import net.minecraft.tags.BlockTags; -import net.minecraft.tags.ITag; -import net.minecraftforge.common.Tags; -import net.minecraftforge.common.data.ExistingFileHelper; - -public class BlockTagsGen extends BlockTagsProvider -{ - public BlockTagsGen(DataGenerator generatorIn, ExistingFileHelper existingFileHelper) - { - super(generatorIn, Cosmere.MODID, existingFileHelper); - } - - @Override - protected void registerTags() - { - add(TagsRegistry.Blocks.DRAGON_PROOF, BlocksRegistry.GEM_BLOCK.get()); - add(TagsRegistry.Blocks.WITHER_PROOF, BlocksRegistry.GEM_BLOCK.get()); - add(BlockTags.BEACON_BASE_BLOCKS, BlocksRegistry.GEM_BLOCK.get()); - - for (Metals.MetalType metalType : Metals.MetalType.values()) - { - if (!metalType.hasMaterialItem()) - continue; - - //put metal type tag on block - MetalBlock metalBlock = metalType.getBlock(); - - add(TagsRegistry.Blocks.METAL_BLOCK_TAGS.get(metalType), metalBlock); - //put storage block tag on block, though I don't know what it is for. - add(Tags.Blocks.STORAGE_BLOCKS, metalBlock); - //put beacon tag on block - add(BlockTags.BEACON_BASE_BLOCKS, metalBlock); - } - } - - public void add(ITag.INamedTag branch, Block block) - { - this.getOrCreateBuilder(branch).add(block); - } - - public void add(ITag.INamedTag branch, Block... block) - { - this.getOrCreateBuilder(branch).add(block); - } -} diff --git a/src/main/java/leaf/cosmere/datagen/DataGen.java b/src/main/java/leaf/cosmere/datagen/DataGen.java deleted file mode 100644 index b75202a32..000000000 --- a/src/main/java/leaf/cosmere/datagen/DataGen.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - * Special Thank you to ChampionAsh5357 from the forge project discord! - * They provided a series of tutorials with examples of how to add new sections of data generation - * Generating 20+ different metal related blocks, items, curios etc would have been a nightmare without it. - */ - -package leaf.cosmere.datagen; - -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import leaf.cosmere.Cosmere; -import net.minecraft.data.DataGenerator; -import net.minecraftforge.common.data.ExistingFileHelper; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.fml.common.Mod.EventBusSubscriber.Bus; -import net.minecraftforge.fml.event.lifecycle.GatherDataEvent; - -@Mod.EventBusSubscriber(modid = Cosmere.MODID, bus = Bus.MOD) -public class DataGen -{ - - public static final Gson GSON = new GsonBuilder().setPrettyPrinting().create(); - - @SubscribeEvent - public static void onDataGen(GatherDataEvent event) - { - DataGenerator generator = event.getGenerator(); - ExistingFileHelper existingFileHelper = event.getExistingFileHelper(); - - generator.addProvider(new EngLangGen(generator)); - - BlockTagsGen blockTags = new BlockTagsGen(generator, existingFileHelper); - generator.addProvider(blockTags); - generator.addProvider(new ItemTagsGen(generator, blockTags, existingFileHelper)); - - if (!event.includeClient()) - { - return; - } - - generator.addProvider(new ItemModelsGen(generator, existingFileHelper)); - generator.addProvider(new BlockModelsGen(generator, existingFileHelper)); - generator.addProvider(new LootTableGen(generator)); - generator.addProvider(new RecipeGen(generator)); - - /* todo: more automated json generation - generator.addProvider(new AdvancementGen(generator)); - */ - } - -} diff --git a/src/main/java/leaf/cosmere/datagen/EngLangGen.java b/src/main/java/leaf/cosmere/datagen/EngLangGen.java deleted file mode 100644 index c1767f73e..000000000 --- a/src/main/java/leaf/cosmere/datagen/EngLangGen.java +++ /dev/null @@ -1,200 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.datagen; - -import leaf.cosmere.Cosmere; -import leaf.cosmere.constants.Metals; -import leaf.cosmere.itemgroups.CosmereItemGroups; -import leaf.cosmere.manifestation.AManifestation; -import leaf.cosmere.registry.EffectsRegistry; -import leaf.cosmere.registry.ManifestationRegistry; -import net.minecraft.data.DataGenerator; -import net.minecraft.entity.EntityType; -import net.minecraft.item.Item; -import net.minecraft.potion.Effect; -import net.minecraft.util.SoundEvent; -import net.minecraft.util.Util; -import net.minecraftforge.common.data.LanguageProvider; -import net.minecraftforge.fml.RegistryObject; -import net.minecraftforge.registries.ForgeRegistries; - -import java.nio.file.Path; -import java.util.Arrays; -import java.util.stream.Collectors; - -import static leaf.cosmere.constants.Constants.Strings.*; - -public class EngLangGen extends LanguageProvider -{ - private final DataGenerator generator; - - public EngLangGen(DataGenerator gen) - { - super(gen, Cosmere.MODID, "en_us"); - this.generator = gen; - } - - @Override - protected void addTranslations() - { - - //Items and Blocks - for (Item item : ForgeRegistries.ITEMS.getValues()) - { - if (item.getRegistryName().getNamespace().contentEquals(Cosmere.MODID)) - { - String localisedString = fixCapitalisation(item.getRegistryName().getPath()); - - switch (localisedString) - { - case "Guide": - localisedString = "Ars Arcanum"; - break; - } - - add(item.getTranslationKey(), localisedString); - } - } - - //Entities - for (EntityType type : ForgeRegistries.ENTITIES) - { - if (type.getRegistryName().getNamespace().equals(Cosmere.MODID)) - { - add(type.getTranslationKey(), fixCapitalisation(type.getRegistryName().getPath())); - } - } - - //innate - - for (AManifestation manifestation : ManifestationRegistry.MANIFESTATION_REGISTRY.get()) - { - //power type - String key = manifestation.translation().getKey(); - String path = manifestation.getRegistryName().getPath(); - - //Name - add(key, fixCapitalisation(path)); - - //description - //can't auto generate the descriptions ya dingleberry - String description; - - switch (manifestation.getManifestationType()) - { - case ALLOMANCY: - description = "Users can burn " + Metals.MetalType.valueOf(manifestation.getPowerID()).get().toString(); - break; - case FERUCHEMY: - description = "Users can tap " + Metals.MetalType.valueOf(manifestation.getPowerID()).get().toString(); - break; - case RADIANT: - case ELANTRIAN: - case AWAKENER: - default: - case NONE: - description = "No Special Powers"; - break; - } - - - add(manifestation.description().getKey(), description); - } - - //ItemGroups/Tabs - add("itemGroup." + CosmereItemGroups.ITEMS.getPath(), "Cosmere Items"); - add("itemGroup." + CosmereItemGroups.METALMINDS.getPath(), "Cosmere Metalminds"); - add("itemGroup." + CosmereItemGroups.BLOCKS.getPath(), "Cosmere Blocks"); - - //Damage Sources - - //Containers - - //effects - for (RegistryObject effect : EffectsRegistry.EFFECTS.getEntries()) - { - add(effect.get().getName(), fixCapitalisation(effect.get().getRegistryName().getPath())); - - } - - //Sound Schemes - - //Configs - - //Commands - - - //Tooltips - add("tooltip.item.info.shift", "\u00A77Hold \u00A78[\u00A7eShift\u00A78]"); - add("tooltip.item.info.shift_control", "\u00A77Hold \u00A78[\u00A7eShift\u00A78] \u00A77and \u00A78[\u00A7eControl\u00A78]"); - add("tooltip.item.info.control", "\u00A77Hold \u00A78[\u00A7eControl\u00A78]"); - - //GUI elements - add("gui.cosmere.previous", "> Previous"); - add("gui.cosmere.next", "> Next"); - add("gui.cosmere.select", "> Select"); - add("gui.cosmere.confirm", "> Confirm"); - add("gui.cosmere.save", "> Save"); - add("gui.cosmere.cancel", "> Cancel"); - add("gui.cosmere.button.back", "Back"); - - - add("gui.cosmere.other.inactive", "Inactive"); - add("gui.cosmere.other.active", "Active"); - add("gui.cosmere.mode.increase", "Increase"); - add("gui.cosmere.mode.decrease", "Decrease"); - - - //ARS Arcanum - add("cosmere.landing", "The Cosmere is filled with many fantastical things. I have left my findings written within this book."); - - //KeyBindings - add(KEYS_CATEGORY, "Cosmere"); - add(KEY_MANIFESTATION_TOGGLE, "Toggle Current Powers"); - add(KEY_MANIFESTATION_MODE_NEXT, "Mode Next"); - add(KEY_MANIFESTATION_MODE_PREVIOUS, "Mode Previous"); - - add(KEY_ALLOMANCY_PUSH, "Push"); - add(KEY_ALLOMANCY_PULL, "Pull"); - - - //powers - add(POWER_INVALID, "Invalid power"); - add(POWER_SET_SUCCESS, "Successfully set power to: %s"); - add(POWER_SET_FAIL, "Failed to update power"); - add(POWER_MODE_SET, "Mode set to: %s"); - add(POWER_ACTIVE, "Power now active: %s"); - add(POWER_INACTIVE, "Power now inactive: %s"); - - add(POWERS_FOUND, "Powers found for: %s \n"); - add(CONTAINED_POWERS_FOUND, "Contained Powers:"); - - - } - - public Path getSoundPath(Path path, String modid) - { - return path.resolve("data/" + modid + "/sounds/" + "sounds.json"); - } - - public String fixCapitalisation(String text) - { - String original = text.trim().replace(" ", "").replace("_", " ").replace("/", "."); - String output = Arrays.stream(original.split("\\s+")).map(t -> t.substring(0, 1).toUpperCase() + t.substring(1)).collect(Collectors.joining(" ")); - return output; - } - - public String getTranslationKey(SoundEvent sound) - { - String subtitleTranslationKey = ""; - if (subtitleTranslationKey.isEmpty() || subtitleTranslationKey == null) - { - subtitleTranslationKey = Util.makeTranslationKey("subtitle", sound.getRegistryName()); - } - return subtitleTranslationKey; - } - - -} diff --git a/src/main/java/leaf/cosmere/datagen/ItemModelsGen.java b/src/main/java/leaf/cosmere/datagen/ItemModelsGen.java deleted file mode 100644 index 813c692e7..000000000 --- a/src/main/java/leaf/cosmere/datagen/ItemModelsGen.java +++ /dev/null @@ -1,115 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.datagen; - -import leaf.cosmere.Cosmere; -import leaf.cosmere.items.MetalIngotItem; -import leaf.cosmere.items.MetalNuggetItem; -import leaf.cosmere.items.MetalRawOreItem; -import leaf.cosmere.items.ShardbladeItem; -import leaf.cosmere.items.curio.BraceletMetalmind; -import leaf.cosmere.items.curio.HemalurgicSpikeItem; -import leaf.cosmere.items.curio.NecklaceMetalmind; -import leaf.cosmere.items.curio.RingMetalmind; -import leaf.cosmere.registry.ItemsRegistry; -import net.minecraft.data.DataGenerator; -import net.minecraft.item.BlockItem; -import net.minecraft.item.Item; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.client.model.generators.ItemModelBuilder; -import net.minecraftforge.client.model.generators.ItemModelProvider; -import net.minecraftforge.client.model.generators.ModelFile; -import net.minecraftforge.common.data.ExistingFileHelper; -import net.minecraftforge.fml.RegistryObject; - -import java.util.function.Supplier; - -public class ItemModelsGen extends ItemModelProvider -{ - - public ItemModelsGen(DataGenerator generator, ExistingFileHelper existingFileHelper) - { - super(generator, Cosmere.MODID, existingFileHelper); - } - - @Override - protected void registerModels() - { - for (RegistryObject itemRegistryObject : ItemsRegistry.ITEMS.getEntries()) - { - String path = getPath(itemRegistryObject); - Item item = itemRegistryObject.get(); - - //blocks have their own model rules - if (item instanceof BlockItem) - { - continue; - } - //otherwise set specific textures based on these item types - else if (item instanceof MetalIngotItem) - { - simpleItem(path, "metal_ingot"); - continue; - } - else if (item instanceof MetalNuggetItem) - { - simpleItem(path, "metal_nugget"); - continue; - } - else if (item instanceof BraceletMetalmind) - { - simpleItem(path, "metal_bracelet"); - continue; - } - else if (item instanceof RingMetalmind) - { - simpleItem(path, "metal_ring"); - continue; - } - else if (item instanceof NecklaceMetalmind) - { - simpleItem(path, "metal_necklace"); - continue; - } - else if (item instanceof HemalurgicSpikeItem) - { - simpleItem(path, "metal_spike"); - continue; - } - else if (item instanceof ShardbladeItem) - { - //simpleItem(path, "metal_spike"); - continue; - } - else if (item instanceof MetalRawOreItem) - { - //todo split between raw ore and alloy blend - //MetalRawOreItem rawItem = (MetalRawOreItem)item; - //if (rawItem.getMetalType().isAlloy()) - // simpleItem(path, "metal_blend"); - //else - simpleItem(path, "metal_raw"); - continue; - } - - //else normal item texture rules apply - simpleItem(path, path); - } - - } - - public String getPath(Supplier itemSupplier) - { - ResourceLocation location = itemSupplier.get().getRegistryName(); - return location.getPath(); - } - - public ItemModelBuilder simpleItem(String path, String texturePath) - { - return this.getBuilder(path) - .parent(new ModelFile.UncheckedModelFile("item/generated")) - .texture("layer0", modLoc("item/" + texturePath)); - } -} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/datagen/ItemTagsGen.java b/src/main/java/leaf/cosmere/datagen/ItemTagsGen.java deleted file mode 100644 index 98530c581..000000000 --- a/src/main/java/leaf/cosmere/datagen/ItemTagsGen.java +++ /dev/null @@ -1,96 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.datagen; - -import leaf.cosmere.Cosmere; -import leaf.cosmere.constants.Metals; -import leaf.cosmere.items.MetalIngotItem; -import leaf.cosmere.registry.TagsRegistry; -import net.minecraft.data.BlockTagsProvider; -import net.minecraft.data.DataGenerator; -import net.minecraft.data.ItemTagsProvider; -import net.minecraft.item.Item; -import net.minecraft.tags.ITag; -import net.minecraftforge.common.Tags; -import net.minecraftforge.common.data.ExistingFileHelper; - -import javax.annotation.Nullable; - -public class ItemTagsGen extends ItemTagsProvider -{ - - public ItemTagsGen(DataGenerator dataGenerator, BlockTagsProvider blockTagsProvider, @Nullable ExistingFileHelper existingFileHelper) - { - super(dataGenerator, blockTagsProvider, Cosmere.MODID, existingFileHelper); - } - - @Override - protected void registerTags() - { - - - for (Metals.MetalType metalType : Metals.MetalType.values()) - { - - if (metalType.hasFeruchemicalEffect()) - { - //curio stuff - add(TagsRegistry.Items.CURIO_NECKLACE, metalType.getNecklaceItem()); - add(TagsRegistry.Items.CURIO_RING, metalType.getRingItem()); - add(TagsRegistry.Items.CURIO_BRACELET, metalType.getBraceletItem()); - } - - if (metalType.hasHemalurgicEffect()) - { - add(TagsRegistry.Items.CURIO_ANY, metalType.getSpikeItem()); - } - // tell the ingots that our ingots are related - - if (metalType.hasMaterialItem()) - { - MetalIngotItem ingotItem = metalType.getIngotItem(); - add(Tags.Items.INGOTS, ingotItem); - // tell our ingots what their tags are. - add(metalType.getMetalIngotTag(), ingotItem); - - //tell the ingots that our ingot tags are part of them - this.getOrCreateBuilder(Tags.Items.INGOTS).addTag(metalType.getMetalIngotTag()); - - //tell the nuggets that our nugget tags are part of them - this.getOrCreateBuilder(Tags.Items.NUGGETS).addTag(metalType.getMetalNuggetTag()); - - // tell the Nugget that our Nuggets are related - Item item = metalType.getNuggetItem(); - add(Tags.Items.NUGGETS, item); - // tell our ingots what their tags are. - add(metalType.getMetalNuggetTag(), item); - - //associate block tags with their item counterparts - this.copy(TagsRegistry.Blocks.METAL_BLOCK_TAGS.get(metalType), TagsRegistry.Items.METAL_BLOCK_ITEM_TAGS.get(metalType)); - - - //not sure why this is needed, but botania had it ^_^;; - this.copy(Tags.Blocks.STORAGE_BLOCKS, Tags.Items.STORAGE_BLOCKS); - } - - if (metalType.isAlloy() || metalType.hasOre()) - { - add(metalType.getMetalRawTag(), metalType.getRawMetalItem()); - } - } - } - - public void add(ITag.INamedTag branch, Item item) - { - this.getOrCreateBuilder(branch).add(item); - } - - public void add(ITag.INamedTag branch, Item... item) - { - this.getOrCreateBuilder(branch).add(item); - } - - -} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/datagen/LootTableGen.java b/src/main/java/leaf/cosmere/datagen/LootTableGen.java deleted file mode 100644 index 59684ce4f..000000000 --- a/src/main/java/leaf/cosmere/datagen/LootTableGen.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.datagen; - -import com.google.common.collect.ImmutableList; -import com.mojang.datafixers.util.Pair; -import net.minecraft.data.DataGenerator; -import net.minecraft.data.LootTableProvider; -import net.minecraft.loot.LootParameterSet; -import net.minecraft.loot.LootParameterSets; -import net.minecraft.loot.LootTable; -import net.minecraft.loot.LootTable.Builder; -import net.minecraft.loot.ValidationTracker; -import net.minecraft.util.ResourceLocation; - -import java.util.List; -import java.util.Map; -import java.util.function.BiConsumer; -import java.util.function.Consumer; -import java.util.function.Supplier; - -public class LootTableGen extends LootTableProvider -{ - private final List>>, LootParameterSet>> loot_tables = ImmutableList.of(Pair.of(BlockLootTableGen::new, LootParameterSets.BLOCK)); - - public LootTableGen(DataGenerator dataGeneratorIn) - { - super(dataGeneratorIn); - } - - @Override - protected List>>, LootParameterSet>> getTables() - { - return this.loot_tables; - } - - @Override - protected void validate(Map map, ValidationTracker validationtracker) - { - } -} diff --git a/src/main/java/leaf/cosmere/datagen/RecipeGen.java b/src/main/java/leaf/cosmere/datagen/RecipeGen.java deleted file mode 100644 index 521e13fc7..000000000 --- a/src/main/java/leaf/cosmere/datagen/RecipeGen.java +++ /dev/null @@ -1,251 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.datagen; - -import leaf.cosmere.Cosmere; -import leaf.cosmere.constants.Metals; -import leaf.cosmere.utils.helpers.ResourceLocationHelper; -import leaf.cosmere.registry.BlocksRegistry; -import leaf.cosmere.registry.ItemsRegistry; -import leaf.cosmere.registry.RecipeRegistry; -import leaf.cosmere.registry.TagsRegistry; -import net.minecraft.data.*; -import net.minecraft.item.Item; -import net.minecraft.item.Items; -import net.minecraft.item.crafting.IRecipeSerializer; -import net.minecraft.item.crafting.Ingredient; -import net.minecraft.tags.ITag; -import net.minecraft.util.IItemProvider; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.common.Tags; -import net.minecraftforge.common.crafting.conditions.IConditionBuilder; - -import javax.annotation.Nullable; -import java.util.Arrays; -import java.util.Locale; -import java.util.Map; -import java.util.function.Consumer; - -public class RecipeGen extends RecipeProvider implements IConditionBuilder -{ - public RecipeGen(DataGenerator generatorIn) - { - super(generatorIn); - } - - @Override - protected void registerRecipes(Consumer consumer) - { - - //example recipes obtained from following website on 3rd April '21. Thank you ChampionAsh5357! - //https://github.com/ChampionAsh5357/1.16.x-Minecraft-Tutorial/blob/1.16.1-32.0.61-web/src/main/java/io/github/championash5357/tutorial/data/TutorialRecipeProvider.java - - //addBasicArmorRecipes(consumer, ItemsRegistry.RUBY.get(), ItemsRegistry.RUBY_HELMET.get(), ItemsRegistry.RUBY_CHESTPLATE.get(), ItemsRegistry.RUBY_LEGGINGS.get(), ItemsRegistry.RUBY_BOOTS.get()); - //ShapedRecipeBuilder.shapedRecipe(BlocksRegistry.WASHER.get()).key('I', Items.IRON_INGOT).key('W', Items.WATER_BUCKET).patternLine("III").patternLine("IWI").patternLine("III").addCriterion("in_water", enteredBlock(Blocks.WATER)).build(consumer); - - - //addOreSmeltingRecipes(consumer, BlocksRegistry.GEM_BLOCK.get(), ItemsRegistry.GUIDE.get(), 1.0f, 200); - addOreSmeltingRecipes(consumer, ItemsRegistry.METAL_SPIKE.get(Metals.MetalType.IRON).get(), ItemsRegistry.GUIDE.get(), 1.0f, 200); - - - CustomRecipeBuilder.customRecipe(RecipeRegistry.VIAL_RECIPE_SERIALIZER.get()).build(consumer, ResourceLocationHelper.prefix("vial_mixing").toString()); - - for (Metals.MetalType metalType : Metals.MetalType.values()) - { - addBasicMetalmindRecipes(consumer, metalType); - - //theres no reason for uss to add ways to recipe blocks/ingots that minecraft already has - final Metals.MetalType[] blacklistedTypes = {Metals.MetalType.IRON, Metals.MetalType.GOLD,}; - if (Arrays.stream(blacklistedTypes).anyMatch(metalType::equals)) - { - continue; - } - - compressRecipe(BlocksRegistry.METAL_BLOCKS.get(metalType).get(), TagsRegistry.Items.METAL_INGOT_TAGS.get(metalType)).build(consumer); - decompressRecipe(consumer, ItemsRegistry.METAL_INGOTS.get(metalType).get(), TagsRegistry.Items.METAL_BLOCK_ITEM_TAGS.get(metalType), metalType.name().toLowerCase() + "_block_deconstruct"); - - compressRecipe(ItemsRegistry.METAL_INGOTS.get(metalType).get(), TagsRegistry.Items.METAL_NUGGET_TAGS.get(metalType)).build(consumer); - decompressRecipe(consumer, ItemsRegistry.METAL_NUGGETS.get(metalType).get(), TagsRegistry.Items.METAL_INGOT_TAGS.get(metalType), metalType.name().toLowerCase() + "_item_deconstruct"); - - if (metalType.hasOre()) - { - addOreSmeltingRecipes(consumer, metalType.getOreBlock(), metalType.getIngotItem(), 1.0f, 200); - addOreSmeltingRecipes(consumer, metalType.getRawMetalItem(), metalType.getIngotItem(), 1.0f, 200); - } - - if (metalType.isAlloy()) - { -/* Item outputNugget = ItemsRegistry.METAL_NUGGETS.get(metalType).get(); - Item outputIngot = ItemsRegistry.METAL_INGOTS.get(metalType).get(); - Item outputBlock = BlocksRegistry.METAL_BLOCKS.get(metalType).get(); - addAlloyRecipes(consumer, metalType, outputNugget, TagsRegistry.Items.METAL_NUGGET_TAGS,"nugget"); - addAlloyRecipes(consumer, metalType, outputIngot, TagsRegistry.Items.METAL_INGOT_TAGS,"ingot"); - addAlloyRecipes(consumer, metalType, outputBlock, TagsRegistry.Items.METAL_BLOCK_ITEM_TAGS,"block");*/ - - Item outputBlend = metalType.getRawMetalItem(); - addAlloyRecipes(consumer, metalType, outputBlend, TagsRegistry.Items.METAL_RAW_TAGS, "blend"); - - addOreSmeltingRecipes(consumer, outputBlend, metalType.getIngotItem(), 1.0f, 200); - } - - } - } - - - //todo better alloying recipes than these debug shenanigans - private void addAlloyRecipes(Consumer consumer, Metals.MetalType metalType, Item output, Map> materialTag, String recipe) - { - String s = String.format("alloying/%s/", recipe); - switch (metalType) - { - case STEEL: - ShapelessRecipeBuilder.shapelessRecipe(output, 4) - .addCriterion("has_item", hasItem(output)) - .addIngredient(Ingredient.fromTag(Tags.Items.INGOTS_IRON)) - .addIngredient(Ingredient.fromTag(Tags.Items.INGOTS_IRON)) - .addIngredient(Ingredient.fromTag(Tags.Items.INGOTS_IRON)) - .addIngredient(Ingredient.fromItems(Items.COAL, Items.CHARCOAL)) - .build(consumer, ResourceLocationHelper.prefix(s + metalType.name().toLowerCase(Locale.ROOT))); - break; - case PEWTER: - ShapelessRecipeBuilder.shapelessRecipe(output, 5) - .addCriterion("has_item", hasItem(output)) - .addIngredient(materialTag.get(Metals.MetalType.TIN)) - .addIngredient(materialTag.get(Metals.MetalType.TIN)) - .addIngredient(materialTag.get(Metals.MetalType.TIN)) - .addIngredient(materialTag.get(Metals.MetalType.TIN)) - .addIngredient(materialTag.get(Metals.MetalType.LEAD)) - .build(consumer, ResourceLocationHelper.prefix(s + metalType.name().toLowerCase(Locale.ROOT))); - break; - case BRASS: - ShapelessRecipeBuilder.shapelessRecipe(output, 2) - .addCriterion("has_item", hasItem(output)) - .addIngredient(materialTag.get(Metals.MetalType.ZINC)) - .addIngredient(materialTag.get(Metals.MetalType.COPPER)) - .build(consumer, ResourceLocationHelper.prefix(s + metalType.name().toLowerCase(Locale.ROOT))); - break; - case BRONZE: - ShapelessRecipeBuilder.shapelessRecipe(output, 4) - .addCriterion("has_item", hasItem(output)) - .addIngredient(materialTag.get(Metals.MetalType.COPPER)) - .addIngredient(materialTag.get(Metals.MetalType.COPPER)) - .addIngredient(materialTag.get(Metals.MetalType.COPPER)) - .addIngredient(materialTag.get(Metals.MetalType.TIN)) - .build(consumer, ResourceLocationHelper.prefix(s + metalType.name().toLowerCase(Locale.ROOT))); - break; - case DURALUMIN: - ShapelessRecipeBuilder.shapelessRecipe(output, 5) - .addCriterion("has_item", hasItem(output)) - .addIngredient(materialTag.get(Metals.MetalType.ALUMINUM)) - .addIngredient(materialTag.get(Metals.MetalType.ALUMINUM)) - .addIngredient(materialTag.get(Metals.MetalType.ALUMINUM)) - .addIngredient(materialTag.get(Metals.MetalType.ALUMINUM)) - .addIngredient(materialTag.get(Metals.MetalType.COPPER)) - .build(consumer, ResourceLocationHelper.prefix(s + metalType.name().toLowerCase(Locale.ROOT))); - break; - case NICROSIL: - ShapelessRecipeBuilder.shapelessRecipe(output, 4) - .addCriterion("has_item", hasItem(output)) - .addIngredient(materialTag.get(Metals.MetalType.CHROMIUM)) - .addIngredient(materialTag.get(Metals.MetalType.NICKEL)) - .addIngredient(materialTag.get(Metals.MetalType.NICKEL)) - .addIngredient(materialTag.get(Metals.MetalType.NICKEL)) - .build(consumer, ResourceLocationHelper.prefix(s + metalType.name().toLowerCase(Locale.ROOT))); - break; - case BENDALLOY: - ShapelessRecipeBuilder.shapelessRecipe(output, 9) - .addCriterion("has_item", hasItem(output)) - .addIngredient(materialTag.get(Metals.MetalType.CADMIUM)) - .addIngredient(materialTag.get(Metals.MetalType.LEAD)) - .addIngredient(materialTag.get(Metals.MetalType.LEAD)) - .addIngredient(materialTag.get(Metals.MetalType.LEAD)) - .addIngredient(materialTag.get(Metals.MetalType.LEAD)) - .addIngredient(materialTag.get(Metals.MetalType.LEAD)) - .addIngredient(materialTag.get(Metals.MetalType.LEAD)) - .addIngredient(materialTag.get(Metals.MetalType.TIN)) - .addIngredient(materialTag.get(Metals.MetalType.TIN)) - .build(consumer, ResourceLocationHelper.prefix(s + metalType.name().toLowerCase(Locale.ROOT))); - break; - case ELECTRUM: - ShapelessRecipeBuilder.shapelessRecipe(output, 2) - .addCriterion("has_item", hasItem(output)) - .addIngredient(Ingredient.fromTag(Tags.Items.INGOTS_GOLD)) - .addIngredient(materialTag.get(Metals.MetalType.SILVER)) - .build(consumer, ResourceLocationHelper.prefix(s + metalType.name().toLowerCase(Locale.ROOT))); - break; - } - } - - - protected static void addBasicArmorRecipes(Consumer consumer, ITag inputMaterial, @Nullable Item head, @Nullable Item chest, @Nullable Item legs, @Nullable Item feet) - { - if (head != null) - { - ShapedRecipeBuilder.shapedRecipe(head).key('X', inputMaterial).patternLine("XXX").patternLine("X X").setGroup("helmets").addCriterion("has_material", hasItem(inputMaterial)).build(consumer); - } - if (chest != null) - { - ShapedRecipeBuilder.shapedRecipe(chest).key('X', inputMaterial).patternLine("X X").patternLine("XXX").patternLine("XXX").setGroup("chestplates").addCriterion("has_material", hasItem(inputMaterial)).build(consumer); - } - if (legs != null) - { - ShapedRecipeBuilder.shapedRecipe(legs).key('X', inputMaterial).patternLine("XXX").patternLine("X X").patternLine("X X").setGroup("leggings").addCriterion("has_material", hasItem(inputMaterial)).build(consumer); - } - if (feet != null) - { - ShapedRecipeBuilder.shapedRecipe(feet).key('X', inputMaterial).patternLine("X X").patternLine("X X").setGroup("boots").addCriterion("has_material", hasItem(inputMaterial)).build(consumer); - } - } - - protected static void addBasicMetalmindRecipes(Consumer consumer, Metals.MetalType metalType) - { - ITag.INamedTag inputMaterial = metalType.getMetalIngotTag(); - - if (metalType.hasFeruchemicalEffect()) - { - ShapedRecipeBuilder.shapedRecipe(metalType.getNecklaceItem()).key('X', inputMaterial).patternLine("XXX").patternLine("X X").patternLine(" X ").setGroup("necklace").addCriterion("has_material", hasItem(inputMaterial)).build(consumer); - ShapedRecipeBuilder.shapedRecipe(metalType.getRingItem()).key('X', inputMaterial).patternLine(" X ").patternLine("X X").patternLine(" X ").setGroup("ring").addCriterion("has_material", hasItem(inputMaterial)).build(consumer); - ShapedRecipeBuilder.shapedRecipe(metalType.getBraceletItem()).key('X', inputMaterial).patternLine(" X ").patternLine("X X").patternLine("X X").setGroup("bracelet").addCriterion("has_material", hasItem(inputMaterial)).build(consumer); - } - if (metalType.hasHemalurgicEffect()) - { - ShapedRecipeBuilder.shapedRecipe(metalType.getSpikeItem()).key('X', inputMaterial).patternLine(" X ").patternLine(" X ").setGroup("spike").addCriterion("has_material", hasItem(inputMaterial)).build(consumer); - } - } - - private void decompressRecipe(Consumer consumer, IItemProvider output, ITag input, String name) - { - ShapelessRecipeBuilder.shapelessRecipe(output, 9) - .addCriterion("has_item", hasItem(output)) - .addIngredient(input) - .build(consumer, ResourceLocationHelper.prefix("conversions/" + name)); - } - - private ShapedRecipeBuilder compressRecipe(IItemProvider output, ITag input) - { - return ShapedRecipeBuilder.shapedRecipe(output) - .key('I', input) - .patternLine("III") - .patternLine("III") - .patternLine("III") - .addCriterion("has_item", hasItem(input)); - } - - protected static void addOreSmeltingRecipes(Consumer consumer, IItemProvider ore, Item result, float experience, int time) - { - String name = result.getRegistryName().getPath(); - String path = ore.asItem().getRegistryName().getPath(); - CookingRecipeBuilder.smeltingRecipe(Ingredient.fromItems(ore), result, experience, time).addCriterion("has_ore", hasItem(ore)).build(consumer, new ResourceLocation(Cosmere.MODID, name + "_from_smelting_" + path)); - CookingRecipeBuilder.blastingRecipe(Ingredient.fromItems(ore), result, experience, time / 2).addCriterion("has_ore", hasItem(ore)).build(consumer, new ResourceLocation(Cosmere.MODID, name + "_from_blasting_" + path)); - } - - protected static void addCookingRecipes(Consumer consumer, IItemProvider inputItem, Item result, float experience, int time) - { - String name = result.getRegistryName().getPath(); - CookingRecipeBuilder.smeltingRecipe(Ingredient.fromItems(inputItem), result, experience, time).addCriterion("has_item", hasItem(inputItem)).build(consumer, new ResourceLocation(Cosmere.MODID, name + "_from_smelting")); - CookingRecipeBuilder.cookingRecipe(Ingredient.fromItems(inputItem), result, experience, time / 2, IRecipeSerializer.SMOKING).addCriterion("has_item", hasItem(inputItem)).build(consumer, new ResourceLocation(Cosmere.MODID, name + "_from_smoking")); - CookingRecipeBuilder.cookingRecipe(Ingredient.fromItems(inputItem), result, experience, time, IRecipeSerializer.CAMPFIRE_COOKING).addCriterion("has_item", hasItem(inputItem)).build(consumer, new ResourceLocation(Cosmere.MODID, name + "_from_campfire")); - } -} diff --git a/src/main/java/leaf/cosmere/effects/FortuneBonusModifier.java b/src/main/java/leaf/cosmere/effects/FortuneBonusModifier.java deleted file mode 100644 index 66c5306b9..000000000 --- a/src/main/java/leaf/cosmere/effects/FortuneBonusModifier.java +++ /dev/null @@ -1,120 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.effects; - -import com.google.gson.JsonObject; -import leaf.cosmere.constants.Metals; -import leaf.cosmere.utils.helpers.LogHelper; -import leaf.cosmere.registry.EffectsRegistry; -import net.minecraft.block.BlockState; -import net.minecraft.enchantment.Enchantment; -import net.minecraft.enchantment.EnchantmentHelper; -import net.minecraft.enchantment.Enchantments; -import net.minecraft.entity.Entity; -import net.minecraft.entity.LivingEntity; -import net.minecraft.item.ItemStack; -import net.minecraft.item.Items; -import net.minecraft.loot.LootContext; -import net.minecraft.loot.LootParameterSets; -import net.minecraft.loot.LootParameters; -import net.minecraft.loot.LootTable; -import net.minecraft.loot.conditions.ILootCondition; -import net.minecraft.potion.EffectInstance; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.common.loot.GlobalLootModifierSerializer; -import net.minecraftforge.common.loot.LootModifier; - -import javax.annotation.Nonnull; -import java.util.List; -import java.util.Map; - - -//Thank you Curios for the example ! -// modified to work with the chromium feruchemy effects. - -public class FortuneBonusModifier extends LootModifier -{ - protected FortuneBonusModifier(ILootCondition[] conditions) - { - super(conditions); - } - - @Nonnull - protected List doApply(List generatedLoot, LootContext context) - { - final String hasCosmereFortuneBonus = "HasCosmereFortuneBonus"; - - ItemStack tool = context.get(LootParameters.TOOL); - - if (tool != null && (!tool.hasTag() || tool.getTag() == null || !tool.getTag().getBoolean(hasCosmereFortuneBonus))) - { - Entity entity = context.get(LootParameters.THIS_ENTITY); - BlockState blockState = context.get(LootParameters.BLOCK_STATE); - - if (blockState != null && entity instanceof LivingEntity) - { - LivingEntity player = (LivingEntity) entity; - - EffectInstance storingLuckEffect = player.getActivePotionEffect(EffectsRegistry.STORING_EFFECTS.get(Metals.MetalType.CHROMIUM).get()); - EffectInstance tappingLuckEffect = player.getActivePotionEffect(EffectsRegistry.TAPPING_EFFECTS.get(Metals.MetalType.CHROMIUM).get()); - - //bonus for tapping amplifier. - int totalFortuneBonus = 0; - if (tappingLuckEffect != null) - { - totalFortuneBonus = tappingLuckEffect.getAmplifier() + 1; - } - - //minus off the unlucky effect amplifier - - if (storingLuckEffect != null) - { - totalFortuneBonus -= (storingLuckEffect.getAmplifier() + 1); - } - - if (totalFortuneBonus != 0) - { - ItemStack fakeTool = tool.isEmpty() ? new ItemStack(Items.BARRIER) : tool.copy(); - - fakeTool.getOrCreateTag().putBoolean(hasCosmereFortuneBonus, true); - - Map enchantments = EnchantmentHelper.getEnchantments(fakeTool); - enchantments.put(Enchantments.FORTUNE, EnchantmentHelper.getEnchantmentLevel(Enchantments.FORTUNE, fakeTool) + totalFortuneBonus); - - EnchantmentHelper.setEnchantments(enchantments, fakeTool); - - LootContext.Builder builder = new LootContext.Builder(context); - builder.withParameter(LootParameters.TOOL, fakeTool); - - LootContext newContext = builder.build(LootParameterSets.BLOCK); - LootTable lootTable = context.getWorld().getServer().getLootTableManager().getLootTableFromLocation(blockState.getBlock().getLootTable()); - - return lootTable.generate(newContext); - } - } - } - - //otherwise return the context that was passed in. no modification needed. - return generatedLoot; - } - - public static class Serializer extends GlobalLootModifierSerializer - { - public Serializer() - { - LogHelper.info("Fortune bonus modifier setting up"); - } - - public FortuneBonusModifier read(ResourceLocation location, JsonObject object, ILootCondition[] conditions) - { - return new FortuneBonusModifier(conditions); - } - - public JsonObject write(FortuneBonusModifier instance) - { - return this.makeConditions(instance.conditions); - } - } -} diff --git a/src/main/java/leaf/cosmere/effects/allomancy/AllomancyBoostEffect.java b/src/main/java/leaf/cosmere/effects/allomancy/AllomancyBoostEffect.java deleted file mode 100644 index dc9f202e2..000000000 --- a/src/main/java/leaf/cosmere/effects/allomancy/AllomancyBoostEffect.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.effects.allomancy; - -import leaf.cosmere.cap.entity.SpiritwebCapability; -import leaf.cosmere.constants.Manifestations; -import leaf.cosmere.constants.Metals; -import leaf.cosmere.registry.AttributesRegistry; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.ai.attributes.AttributeModifier; -import net.minecraft.potion.Effect; -import net.minecraft.potion.EffectType; - -public class AllomancyBoostEffect extends Effect -{ - public AllomancyBoostEffect(Metals.MetalType type, EffectType effectType) - { - super(effectType, type.getColorValue()); - - AttributesRegistry.MANIFESTATION_STRENGTH_ATTRIBUTES.entrySet() - .forEach(attributeRegistered -> - { - //todo powers to NOT increase? - //skip duralumin and nicrosil? - - addAttributesModifier( - attributeRegistered.getValue().get(), - "ad9ba05c-d9e5-4f74-8f25-fa65139d178c", - 0.334D, - AttributeModifier.Operation.MULTIPLY_TOTAL); - }); - } - - @Override - public void performEffect(LivingEntity livingEntity, int amplifier) - { - //todo boost metal drain balancing - //4 times a second? - boolean isActiveTick = livingEntity.ticksExisted % 5 == 0; - - if (isActiveTick) - { - //todo change the allomancy boost effect to be the one that drains the metals. - //just run the duralumin effect on the other entity - SpiritwebCapability.get(livingEntity).ifPresent(data -> - { - //drain metals that are actively being burned - for (Metals.MetalType metalType : Metals.MetalType.values()) - { - if (!metalType.hasAssociatedManifestation()) - { - continue; - } - - //if metal is active - if (data.manifestationActive(Manifestations.ManifestationTypes.ALLOMANCY, metalType.getID())) - { - int ingestedMetalAmount = data.getIngestedMetal(metalType); - - if (ingestedMetalAmount > 0) - { - if (ingestedMetalAmount >= 27) - { - data.adjustIngestedMetal(metalType, ingestedMetalAmount - 27, true); - } - else - { - data.adjustIngestedMetal(metalType, ingestedMetalAmount, true); - } - } - } - } - - } - ); - - - } - - } -} diff --git a/src/main/java/leaf/cosmere/effects/allomancy/AllomancyEffectBase.java b/src/main/java/leaf/cosmere/effects/allomancy/AllomancyEffectBase.java deleted file mode 100644 index 3c271e95f..000000000 --- a/src/main/java/leaf/cosmere/effects/allomancy/AllomancyEffectBase.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.effects.allomancy; - -import leaf.cosmere.constants.Metals; -import leaf.cosmere.items.IHasMetalType; -import net.minecraft.entity.LivingEntity; -import net.minecraft.potion.Effect; -import net.minecraft.potion.EffectType; - -public class AllomancyEffectBase extends Effect implements IHasMetalType -{ - protected final Metals.MetalType metalType; - - public AllomancyEffectBase(Metals.MetalType type, EffectType effectType) - { - super(effectType, type.getColorValue()); - metalType = type; - } - - @Override - public Metals.MetalType getMetalType() - { - return this.metalType; - } - - - @Override - public void performEffect(LivingEntity entityLivingBaseIn, int amplifier) - { - if (entityLivingBaseIn.world.isRemote) - { - //client side only? - } - } - - @Override - public boolean isReady(int duration, int amplifier) - { - //assume we can apply the effect regardless - boolean result = true; -/* - //but if we are a specific effect - if (metalType == Metals.MetalType.BENDALLOY) - { - int k = 50 >> amplifier; - if (k > 0) - { - result = duration % k == 0; - } - }*/ - return result; - } -} diff --git a/src/main/java/leaf/cosmere/effects/feruchemy/FeruchemyEffectBase.java b/src/main/java/leaf/cosmere/effects/feruchemy/FeruchemyEffectBase.java deleted file mode 100644 index 1545d2753..000000000 --- a/src/main/java/leaf/cosmere/effects/feruchemy/FeruchemyEffectBase.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.effects.feruchemy; - -import leaf.cosmere.constants.Metals; -import leaf.cosmere.items.IHasMetalType; -import net.minecraft.entity.LivingEntity; -import net.minecraft.potion.Effect; -import net.minecraft.potion.EffectType; - -public class FeruchemyEffectBase extends Effect implements IHasMetalType -{ - protected final Metals.MetalType metalType; - final double bonusPerLevel = 1; - - public FeruchemyEffectBase(Metals.MetalType type, EffectType effectType) - { - super(effectType, type.getColorValue()); - metalType = type; - } - - @Override - public Metals.MetalType getMetalType() - { - return this.metalType; - } - - - @Override - public void performEffect(LivingEntity entityLivingBaseIn, int amplifier) - { - if (entityLivingBaseIn.world.isRemote) - { - //client side only? - } - } - - @Override - public boolean isReady(int duration, int amplifier) - { - //assume we can apply the effect regardless - boolean result = true; -/* - //but if we are a specific effect - if (metalType == Metals.MetalType.BENDALLOY) - { - int k = 50 >> amplifier; - if (k > 0) - { - result = duration % k == 0; - } - }*/ - return result; - } -} diff --git a/src/main/java/leaf/cosmere/effects/feruchemy/store/BendalloyStoreEffect.java b/src/main/java/leaf/cosmere/effects/feruchemy/store/BendalloyStoreEffect.java deleted file mode 100644 index ae8a4d1fd..000000000 --- a/src/main/java/leaf/cosmere/effects/feruchemy/store/BendalloyStoreEffect.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.effects.feruchemy.store; - -import leaf.cosmere.constants.Metals; -import leaf.cosmere.effects.feruchemy.FeruchemyEffectBase; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.potion.EffectType; - -// food -public class BendalloyStoreEffect extends FeruchemyEffectBase -{ - public BendalloyStoreEffect(Metals.MetalType type, EffectType effectType) - { - super(type, effectType); - } - - @Override - public boolean isReady(int duration, int amplifier) - { - //assume we can apply the effect regardless - boolean result = true; - - int k = 50 >> amplifier; - if (k > 0) - { - result = duration % k == 0; - } - - return result; - } - - @Override - public void performEffect(LivingEntity entityLivingBaseIn, int amplifier) - { - if (!entityLivingBaseIn.world.isRemote) - { - ((PlayerEntity) entityLivingBaseIn).getFoodStats().addExhaustion(0.5F * (float) (amplifier + 1)); - - //todo add tough as nails mod compatibility? - } - } -} diff --git a/src/main/java/leaf/cosmere/effects/feruchemy/store/BrassStoreEffect.java b/src/main/java/leaf/cosmere/effects/feruchemy/store/BrassStoreEffect.java deleted file mode 100644 index 344546ab7..000000000 --- a/src/main/java/leaf/cosmere/effects/feruchemy/store/BrassStoreEffect.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.effects.feruchemy.store; - -import leaf.cosmere.constants.Metals; -import leaf.cosmere.effects.feruchemy.FeruchemyEffectBase; -import leaf.cosmere.utils.helpers.EffectsHelper; -import net.minecraft.entity.LivingEntity; -import net.minecraft.potion.EffectType; -import net.minecraft.potion.Effects; - -//warmth -public class BrassStoreEffect extends FeruchemyEffectBase -{ - public BrassStoreEffect(Metals.MetalType type, EffectType effectType) - { - super(type, effectType); - } - - @Override - public void performEffect(LivingEntity entityLivingBaseIn, int amplifier) - { - //ensure the user has fire resistence at least as strong as their store effect - - if (entityLivingBaseIn.world.isRemote || entityLivingBaseIn.ticksExisted % 20 != 0) - { - return; - } - entityLivingBaseIn.addPotionEffect(EffectsHelper.getNewEffect(Effects.FIRE_RESISTANCE, amplifier)); - } -} diff --git a/src/main/java/leaf/cosmere/effects/feruchemy/store/BronzeStoreEffect.java b/src/main/java/leaf/cosmere/effects/feruchemy/store/BronzeStoreEffect.java deleted file mode 100644 index ce3d34df0..000000000 --- a/src/main/java/leaf/cosmere/effects/feruchemy/store/BronzeStoreEffect.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.effects.feruchemy.store; - -import leaf.cosmere.constants.Metals; -import leaf.cosmere.effects.feruchemy.FeruchemyEffectBase; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.potion.EffectType; - -//wakefulness -public class BronzeStoreEffect extends FeruchemyEffectBase -{ - public BronzeStoreEffect(Metals.MetalType type, EffectType effectType) - { - super(type, effectType); - } - - @Override - public void performEffect(LivingEntity entityLivingBaseIn, int amplifier) - { - //sleep - if (!(entityLivingBaseIn instanceof PlayerEntity) || entityLivingBaseIn.ticksExisted % (200 / (amplifier + 1)) != 0) - { - return; - } - - PlayerEntity player = (PlayerEntity) entityLivingBaseIn; - - player.trySleep(player.getPosition()).ifLeft((result) -> - { - if (result != null && result.getMessage() != null) - { - player.sendStatusMessage(result.getMessage(), true); - } - - }); - } -} diff --git a/src/main/java/leaf/cosmere/effects/feruchemy/store/CadmiumStoreEffect.java b/src/main/java/leaf/cosmere/effects/feruchemy/store/CadmiumStoreEffect.java deleted file mode 100644 index 453382f8c..000000000 --- a/src/main/java/leaf/cosmere/effects/feruchemy/store/CadmiumStoreEffect.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.effects.feruchemy.store; - -import leaf.cosmere.constants.Metals; -import leaf.cosmere.effects.feruchemy.FeruchemyEffectBase; -import net.minecraft.entity.LivingEntity; -import net.minecraft.potion.EffectType; -import net.minecraft.util.DamageSource; -import net.minecraft.util.math.MathHelper; - -// air -public class CadmiumStoreEffect extends FeruchemyEffectBase -{ - public CadmiumStoreEffect(Metals.MetalType type, EffectType effectType) - { - super(type, effectType); - } - - @Override - public void performEffect(LivingEntity entityLivingBaseIn, int amplifier) - { - if (entityLivingBaseIn.world.isRemote) - { - return; - } - - entityLivingBaseIn.setAir(MathHelper.clamp(entityLivingBaseIn.getAir() - 4 - (amplifier), -20, entityLivingBaseIn.getMaxAir())); - - if (entityLivingBaseIn.getAir() < -10 && entityLivingBaseIn.ticksExisted % 50 == 0) - { - entityLivingBaseIn.attackEntityFrom(DamageSource.DROWN, 2.0F); - } - } -} diff --git a/src/main/java/leaf/cosmere/effects/feruchemy/store/ChromiumStoreEffect.java b/src/main/java/leaf/cosmere/effects/feruchemy/store/ChromiumStoreEffect.java deleted file mode 100644 index d3c7864fe..000000000 --- a/src/main/java/leaf/cosmere/effects/feruchemy/store/ChromiumStoreEffect.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.effects.feruchemy.store; - -import leaf.cosmere.constants.Metals; -import leaf.cosmere.effects.feruchemy.FeruchemyEffectBase; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.ai.attributes.AttributeModifier; -import net.minecraft.entity.ai.attributes.AttributeModifierManager; -import net.minecraft.entity.ai.attributes.Attributes; -import net.minecraft.potion.EffectInstance; -import net.minecraft.potion.EffectType; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.event.entity.living.LootingLevelEvent; - -//luck -public class ChromiumStoreEffect extends FeruchemyEffectBase -{ - public ChromiumStoreEffect(Metals.MetalType type, EffectType effectType) - { - super(type, effectType); - - addAttributesModifier( - Attributes.LUCK, - "97c8b98f-fb33-4218-bd32-1ace62d75019", - -1.0D, - AttributeModifier.Operation.ADDITION); - - MinecraftForge.EVENT_BUS.addListener(this::onLootingLevelEvent); - } - - public void onLootingLevelEvent(LootingLevelEvent event) - { - boolean isRemote = event.getEntityLiving().world.isRemote; - boolean entityNotLiving = !(event.getDamageSource().getTrueSource() instanceof LivingEntity); - - if (isRemote || entityNotLiving) - { - return; - } - - EffectInstance effectInstance = ((LivingEntity) event.getDamageSource().getTrueSource()).getActivePotionEffect(this); - if (effectInstance != null && effectInstance.getDuration() > 0) - { - event.setLootingLevel(event.getLootingLevel() - effectInstance.getAmplifier()); - } - } - - - @Override - public void applyAttributesModifiersToEntity(LivingEntity entityLivingBaseIn, AttributeModifierManager attributeMapIn, int amplifier) - { - super.applyAttributesModifiersToEntity(entityLivingBaseIn, attributeMapIn, amplifier); - } -} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/effects/feruchemy/store/CopperStoreEffect.java b/src/main/java/leaf/cosmere/effects/feruchemy/store/CopperStoreEffect.java deleted file mode 100644 index df0dc297b..000000000 --- a/src/main/java/leaf/cosmere/effects/feruchemy/store/CopperStoreEffect.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.effects.feruchemy.store; - -import leaf.cosmere.constants.Metals; -import leaf.cosmere.effects.feruchemy.FeruchemyEffectBase; -import net.minecraft.entity.LivingEntity; -import net.minecraft.potion.EffectType; - -//experience -public class CopperStoreEffect extends FeruchemyEffectBase -{ - public CopperStoreEffect(Metals.MetalType type, EffectType effectType) - { - super(type, effectType); - } - - @Override - public void performEffect(LivingEntity entityLivingBaseIn, int amplifier) - { - - } -} diff --git a/src/main/java/leaf/cosmere/effects/feruchemy/store/DuraluminStoreEffect.java b/src/main/java/leaf/cosmere/effects/feruchemy/store/DuraluminStoreEffect.java deleted file mode 100644 index 922ba3490..000000000 --- a/src/main/java/leaf/cosmere/effects/feruchemy/store/DuraluminStoreEffect.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.effects.feruchemy.store; - -import leaf.cosmere.constants.Metals; -import leaf.cosmere.effects.feruchemy.FeruchemyEffectBase; -import net.minecraft.entity.LivingEntity; -import net.minecraft.potion.EffectInstance; -import net.minecraft.potion.EffectType; -import net.minecraftforge.client.event.RenderNameplateEvent; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.event.entity.living.LivingEvent; -import net.minecraftforge.eventbus.api.Event; - -//connection aka ability for people to notice you -public class DuraluminStoreEffect extends FeruchemyEffectBase -{ - public DuraluminStoreEffect(Metals.MetalType type, EffectType effectType) - { - super(type, effectType); - MinecraftForge.EVENT_BUS.addListener(this::onLivingVisibilityEvent); - MinecraftForge.EVENT_BUS.addListener(this::onRenderNameplateEvent); - } - - @Override - public boolean isReady(int duration, int amplifier) - { - return true; - } - - public void onLivingVisibilityEvent(LivingEvent.LivingVisibilityEvent event) - { - EffectInstance effectInstance = event.getEntityLiving().getActivePotionEffect(this); - if (effectInstance != null && effectInstance.getDuration() > 0) - { - //at max strength and wearing no armor, you could stand a block or two away from a creeper and it wont see you. - //walk right into it though, and it will blow up. - event.modifyVisibility(1f / (effectInstance.getAmplifier() + 2)); - } - } - - public void onRenderNameplateEvent(RenderNameplateEvent event) - { - if (!(event.getEntity() instanceof LivingEntity)) - { - return; - } - - LivingEntity livingEntity = (LivingEntity) event.getEntity(); - - EffectInstance effectInstance = livingEntity.getActivePotionEffect(this); - if (effectInstance != null && effectInstance.getDuration() > 0) - { - if (effectInstance.getAmplifier() > 2) - { - event.setResult(Event.Result.DENY); - } - - } - } -} diff --git a/src/main/java/leaf/cosmere/effects/feruchemy/store/GoldStoreEffect.java b/src/main/java/leaf/cosmere/effects/feruchemy/store/GoldStoreEffect.java deleted file mode 100644 index 677c25729..000000000 --- a/src/main/java/leaf/cosmere/effects/feruchemy/store/GoldStoreEffect.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.effects.feruchemy.store; - -import leaf.cosmere.constants.Metals; -import leaf.cosmere.effects.feruchemy.FeruchemyEffectBase; -import net.minecraft.entity.LivingEntity; -import net.minecraft.potion.EffectType; - -//health -public class GoldStoreEffect extends FeruchemyEffectBase -{ - public GoldStoreEffect(Metals.MetalType type, EffectType effectType) - { - super(type, effectType); -/* addAttributesModifier( - Attributes.MAX_HEALTH, - "2ee9153f-372f-4bd2-b21a-ccf08fecb8fa", - -4.0D, - AttributeModifier.Operation.ADDITION);*/ - } - - @Override - public void performEffect(LivingEntity entityLivingBaseIn, int amplifier) - { - if (entityLivingBaseIn.getHealth() > (entityLivingBaseIn.getMaxHealth() / amplifier + 2)) - { - entityLivingBaseIn.setHealth(entityLivingBaseIn.getHealth() - 1); - } - } - - @Override - public boolean isReady(int duration, int amplifier) - { - int k = 40 >> amplifier; - if (k > 0) - { - return duration % k == 0; - } - else - { - return true; - } - } -} diff --git a/src/main/java/leaf/cosmere/effects/feruchemy/store/IronStoreEffect.java b/src/main/java/leaf/cosmere/effects/feruchemy/store/IronStoreEffect.java deleted file mode 100644 index 3853dcf06..000000000 --- a/src/main/java/leaf/cosmere/effects/feruchemy/store/IronStoreEffect.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.effects.feruchemy.store; - -import leaf.cosmere.constants.Metals; -import leaf.cosmere.effects.feruchemy.FeruchemyEffectBase; -import leaf.cosmere.utils.helpers.EffectsHelper; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.ai.attributes.AttributeModifier; -import net.minecraft.entity.ai.attributes.Attributes; -import net.minecraft.potion.EffectType; -import net.minecraft.potion.Effects; - - -public class IronStoreEffect extends FeruchemyEffectBase -{ - public IronStoreEffect(Metals.MetalType type, EffectType effectType) - { - super(type, effectType); - addAttributesModifier( - Attributes.KNOCKBACK_RESISTANCE, - "a8fade1f-573d-405d-9885-39da3906d5f6", - -0.1D, - AttributeModifier.Operation.MULTIPLY_TOTAL); - } - - @Override - public void performEffect(LivingEntity entityLivingBaseIn, int amplifier) - { - //ensure the user has correct buffs at least as strong as their store effect - - if (entityLivingBaseIn.world.isRemote || entityLivingBaseIn.ticksExisted % 20 != 0) - { - return; - } - entityLivingBaseIn.addPotionEffect(EffectsHelper.getNewEffect(Effects.SLOW_FALLING, amplifier)); - entityLivingBaseIn.addPotionEffect(EffectsHelper.getNewEffect(Effects.JUMP_BOOST, amplifier)); - } -} diff --git a/src/main/java/leaf/cosmere/effects/feruchemy/store/NicrosilStoreEffect.java b/src/main/java/leaf/cosmere/effects/feruchemy/store/NicrosilStoreEffect.java deleted file mode 100644 index 6889c91f0..000000000 --- a/src/main/java/leaf/cosmere/effects/feruchemy/store/NicrosilStoreEffect.java +++ /dev/null @@ -1,19 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.effects.feruchemy.store; - -import leaf.cosmere.constants.Metals; -import leaf.cosmere.effects.feruchemy.FeruchemyEffectBase; -import net.minecraft.potion.EffectType; - -//todo nicrosil effect -//store investiture -public class NicrosilStoreEffect extends FeruchemyEffectBase -{ - public NicrosilStoreEffect(Metals.MetalType type, EffectType effectType) - { - super(type, effectType); - } -} diff --git a/src/main/java/leaf/cosmere/effects/feruchemy/store/PewterStoreEffect.java b/src/main/java/leaf/cosmere/effects/feruchemy/store/PewterStoreEffect.java deleted file mode 100644 index f816ac8d1..000000000 --- a/src/main/java/leaf/cosmere/effects/feruchemy/store/PewterStoreEffect.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.effects.feruchemy.store; - -import leaf.cosmere.constants.Metals; -import leaf.cosmere.effects.feruchemy.FeruchemyEffectBase; -import net.minecraft.entity.ai.attributes.AttributeModifier; -import net.minecraft.entity.ai.attributes.Attributes; -import net.minecraft.potion.EffectType; - - -public class PewterStoreEffect extends FeruchemyEffectBase -{ - public PewterStoreEffect(Metals.MetalType type, EffectType effectType) - { - super(type, effectType); - addAttributesModifier( - Attributes.ATTACK_DAMAGE, - "e8f5c2b2-f724-4514-82b8-9d10be304c42", - -1.0D, - AttributeModifier.Operation.ADDITION); - addAttributesModifier( - Attributes.ATTACK_KNOCKBACK, - "cb83254e-f9c4-4d67-9976-f2fdf69061ce", - -1.0D, - AttributeModifier.Operation.ADDITION); - } -} diff --git a/src/main/java/leaf/cosmere/effects/feruchemy/store/SteelStoreEffect.java b/src/main/java/leaf/cosmere/effects/feruchemy/store/SteelStoreEffect.java deleted file mode 100644 index ef9bc2fda..000000000 --- a/src/main/java/leaf/cosmere/effects/feruchemy/store/SteelStoreEffect.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.effects.feruchemy.store; - -import leaf.cosmere.constants.Metals; -import leaf.cosmere.effects.feruchemy.FeruchemyEffectBase; -import net.minecraft.entity.ai.attributes.AttributeModifier; -import net.minecraft.entity.ai.attributes.Attributes; -import net.minecraft.potion.EffectType; - - -public class SteelStoreEffect extends FeruchemyEffectBase -{ - public SteelStoreEffect(Metals.MetalType type, EffectType effectType) - { - super(type, effectType); - - this.addAttributesModifier( - Attributes.ATTACK_SPEED, - "bc7ff64b-f90c-49c0-81e1-6a6df3a3e612", - (double)-0.1F, - AttributeModifier.Operation.MULTIPLY_TOTAL); - - this.addAttributesModifier( - Attributes.MOVEMENT_SPEED, - "52583b16-7124-4443-b4e8-1497d6c793f2", - (double)-0.15F, - AttributeModifier.Operation.MULTIPLY_TOTAL); - } -} diff --git a/src/main/java/leaf/cosmere/effects/feruchemy/tap/BendalloyTapEffect.java b/src/main/java/leaf/cosmere/effects/feruchemy/tap/BendalloyTapEffect.java deleted file mode 100644 index 9e5374cdc..000000000 --- a/src/main/java/leaf/cosmere/effects/feruchemy/tap/BendalloyTapEffect.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.effects.feruchemy.tap; - -import leaf.cosmere.constants.Metals; -import leaf.cosmere.effects.feruchemy.FeruchemyEffectBase; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.potion.EffectType; - - -public class BendalloyTapEffect extends FeruchemyEffectBase -{ - public BendalloyTapEffect(Metals.MetalType type, EffectType effectType) - { - super(type, effectType); - } - - - @Override - public boolean isReady(int duration, int amplifier) - { - //assume we can apply the effect regardless - boolean result = true; - - int k = 50 >> amplifier + 1; - if (k > 0) - { - result = duration % k == 0; - } - - return result; - } - - @Override - public void performEffect(LivingEntity entityLivingBaseIn, int amplifier) - { - if (!entityLivingBaseIn.world.isRemote) - { - ((PlayerEntity) entityLivingBaseIn).getFoodStats().addStats(amplifier + 1, 0.0F); - - //todo add tough as nails mod compatibility? - } - } -} diff --git a/src/main/java/leaf/cosmere/effects/feruchemy/tap/BrassTapEffect.java b/src/main/java/leaf/cosmere/effects/feruchemy/tap/BrassTapEffect.java deleted file mode 100644 index d6e7e129b..000000000 --- a/src/main/java/leaf/cosmere/effects/feruchemy/tap/BrassTapEffect.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.effects.feruchemy.tap; - -import leaf.cosmere.Cosmere; -import leaf.cosmere.constants.Metals; -import leaf.cosmere.effects.feruchemy.FeruchemyEffectBase; -import leaf.cosmere.registry.EffectsRegistry; -import net.minecraft.entity.LivingEntity; -import net.minecraft.potion.EffectInstance; -import net.minecraft.potion.EffectType; -import net.minecraftforge.event.entity.living.LivingDamageEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.common.Mod; - -//https://coppermind.net/wiki/Brass#Feruchemical_Use - -@Mod.EventBusSubscriber(modid = Cosmere.MODID, bus = Mod.EventBusSubscriber.Bus.FORGE) -public class BrassTapEffect extends FeruchemyEffectBase -{ - public BrassTapEffect(Metals.MetalType type, EffectType effectType) - { - super(type, effectType); - - //reduce frost damage? theres no cold damage in base minecraft is there? - - //add fire damage? - } - - @Override - public void performEffect(LivingEntity entityLivingBaseIn, int amplifier) - { - if (!entityLivingBaseIn.world.isRemote && amplifier > 10 && !entityLivingBaseIn.isInWater()) - { - //set user on fire - entityLivingBaseIn.setFire(3); - } - - } - - - @Override - public boolean isReady(int duration, int amplifier) - { - //assume we can apply the effect regardless - boolean result = true; - - //but if we are a specific effect - if (metalType == Metals.MetalType.BENDALLOY) - { - int k = 100 >> amplifier; - if (k > 0) - { - result = duration % k == 0; - } - } - return result; - } - - - @SubscribeEvent - public static void onLivingDamageEvent(LivingDamageEvent event) - { - if (event.getSource().getTrueSource() instanceof LivingEntity) - { - LivingEntity livingEntity = (LivingEntity) event.getSource().getTrueSource(); - EffectInstance effectInstance = livingEntity.getActivePotionEffect(EffectsRegistry.TAPPING_EFFECTS.get(Metals.MetalType.BRASS).get()); - - if (effectInstance != null && effectInstance.getDuration() > 0 && effectInstance.getAmplifier() > 3) - { - event.getEntityLiving().setFire(effectInstance.getAmplifier()); - } - } - } -} diff --git a/src/main/java/leaf/cosmere/effects/feruchemy/tap/BronzeTapEffect.java b/src/main/java/leaf/cosmere/effects/feruchemy/tap/BronzeTapEffect.java deleted file mode 100644 index 892edc0c7..000000000 --- a/src/main/java/leaf/cosmere/effects/feruchemy/tap/BronzeTapEffect.java +++ /dev/null @@ -1,23 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.effects.feruchemy.tap; - -import leaf.cosmere.constants.Metals; -import leaf.cosmere.effects.feruchemy.FeruchemyEffectBase; -import net.minecraft.potion.EffectType; - - -public class BronzeTapEffect extends FeruchemyEffectBase -{ - public BronzeTapEffect(Metals.MetalType type, EffectType effectType) - { - super(type, effectType); - } - - // So greedy! - // You can already stay awake forever in minecraft if you want to. - // What do you expect you can do with more? - -} diff --git a/src/main/java/leaf/cosmere/effects/feruchemy/tap/CadmiumTapEffect.java b/src/main/java/leaf/cosmere/effects/feruchemy/tap/CadmiumTapEffect.java deleted file mode 100644 index f8f1ea35e..000000000 --- a/src/main/java/leaf/cosmere/effects/feruchemy/tap/CadmiumTapEffect.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.effects.feruchemy.tap; - -import leaf.cosmere.constants.Metals; -import leaf.cosmere.effects.feruchemy.FeruchemyEffectBase; -import net.minecraft.entity.LivingEntity; -import net.minecraft.potion.EffectType; -import net.minecraft.util.math.MathHelper; - - -public class CadmiumTapEffect extends FeruchemyEffectBase -{ - public CadmiumTapEffect(Metals.MetalType type, EffectType effectType) - { - super(type, effectType); - } - - @Override - public void performEffect(LivingEntity entityLivingBaseIn, int amplifier) - { - if (entityLivingBaseIn.world.isRemote) - { - return; - } - - entityLivingBaseIn.setAir(MathHelper.clamp(entityLivingBaseIn.getAir() + 3 + (amplifier), entityLivingBaseIn.getAir(), entityLivingBaseIn.getMaxAir())); - - } -} diff --git a/src/main/java/leaf/cosmere/effects/feruchemy/tap/ChromiumTapEffect.java b/src/main/java/leaf/cosmere/effects/feruchemy/tap/ChromiumTapEffect.java deleted file mode 100644 index 2470fe4ed..000000000 --- a/src/main/java/leaf/cosmere/effects/feruchemy/tap/ChromiumTapEffect.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.effects.feruchemy.tap; - -import leaf.cosmere.constants.Metals; -import leaf.cosmere.effects.feruchemy.FeruchemyEffectBase; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.ai.attributes.AttributeModifier; -import net.minecraft.entity.ai.attributes.AttributeModifierManager; -import net.minecraft.entity.ai.attributes.Attributes; -import net.minecraft.potion.EffectInstance; -import net.minecraft.potion.EffectType; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.event.entity.living.LootingLevelEvent; - - -public class ChromiumTapEffect extends FeruchemyEffectBase -{ - public ChromiumTapEffect(Metals.MetalType type, EffectType effectType) - { - super(type, effectType); - - addAttributesModifier( - Attributes.LUCK, - "7faaa8a8-fee1-422c-8f85-6794042e8f09", - 1.0D, - AttributeModifier.Operation.ADDITION); - - MinecraftForge.EVENT_BUS.addListener(this::onLootingLevelEvent); - } - - public void onLootingLevelEvent(LootingLevelEvent event) - { - boolean isRemote = event.getEntityLiving().world.isRemote; - boolean entityNotLiving = !(event.getDamageSource().getTrueSource() instanceof LivingEntity); - - if (isRemote || entityNotLiving) - { - return; - } - - EffectInstance effectInstance = ((LivingEntity) event.getDamageSource().getTrueSource()).getActivePotionEffect(this); - if (effectInstance != null && effectInstance.getDuration() > 0) - { - event.setLootingLevel(event.getLootingLevel() + effectInstance.getAmplifier()); - } - } - - - - @Override - public void applyAttributesModifiersToEntity(LivingEntity entityLivingBaseIn, AttributeModifierManager attributeMapIn, int amplifier) - { - super.applyAttributesModifiersToEntity(entityLivingBaseIn, attributeMapIn, amplifier); - } -} diff --git a/src/main/java/leaf/cosmere/effects/feruchemy/tap/CopperTapEffect.java b/src/main/java/leaf/cosmere/effects/feruchemy/tap/CopperTapEffect.java deleted file mode 100644 index f7cf4aefa..000000000 --- a/src/main/java/leaf/cosmere/effects/feruchemy/tap/CopperTapEffect.java +++ /dev/null @@ -1,18 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.effects.feruchemy.tap; - -import leaf.cosmere.constants.Metals; -import leaf.cosmere.effects.feruchemy.FeruchemyEffectBase; -import net.minecraft.potion.EffectType; - - -public class CopperTapEffect extends FeruchemyEffectBase -{ - public CopperTapEffect(Metals.MetalType type, EffectType effectType) - { - super(type, effectType); - } -} diff --git a/src/main/java/leaf/cosmere/effects/feruchemy/tap/DuraluminTapEffect.java b/src/main/java/leaf/cosmere/effects/feruchemy/tap/DuraluminTapEffect.java deleted file mode 100644 index dbbe4f3ba..000000000 --- a/src/main/java/leaf/cosmere/effects/feruchemy/tap/DuraluminTapEffect.java +++ /dev/null @@ -1,18 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.effects.feruchemy.tap; - -import leaf.cosmere.constants.Metals; -import leaf.cosmere.effects.feruchemy.FeruchemyEffectBase; -import net.minecraft.potion.EffectType; - - -public class DuraluminTapEffect extends FeruchemyEffectBase -{ - public DuraluminTapEffect(Metals.MetalType type, EffectType effectType) - { - super(type, effectType); - } -} diff --git a/src/main/java/leaf/cosmere/effects/feruchemy/tap/GoldTapEffect.java b/src/main/java/leaf/cosmere/effects/feruchemy/tap/GoldTapEffect.java deleted file mode 100644 index b0458d24f..000000000 --- a/src/main/java/leaf/cosmere/effects/feruchemy/tap/GoldTapEffect.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.effects.feruchemy.tap; - -import leaf.cosmere.constants.Metals; -import leaf.cosmere.effects.feruchemy.FeruchemyEffectBase; -import net.minecraft.entity.LivingEntity; -import net.minecraft.potion.EffectType; - - -public class GoldTapEffect extends FeruchemyEffectBase -{ - public GoldTapEffect(Metals.MetalType type, EffectType effectType) - { - super(type, effectType); -/* addAttributesModifier( - Attributes.MAX_HEALTH, - "17a9094f-d300-46c4-8607-83f64a98bb42", - 4.0D, - AttributeModifier.Operation.ADDITION);*/ - } - - @Override - public void performEffect(LivingEntity entityLivingBaseIn, int amplifier) - { - if (entityLivingBaseIn.getHealth() < entityLivingBaseIn.getMaxHealth()) - { - entityLivingBaseIn.heal(amplifier + 1); - } - } - - @Override - public boolean isReady(int duration, int amplifier) - { - int k = 40 >> amplifier; - if (k > 0) - { - return duration % k == 0; - } - else - { - return true; - } - } -} diff --git a/src/main/java/leaf/cosmere/effects/feruchemy/tap/IronTapEffect.java b/src/main/java/leaf/cosmere/effects/feruchemy/tap/IronTapEffect.java deleted file mode 100644 index 982fecfbc..000000000 --- a/src/main/java/leaf/cosmere/effects/feruchemy/tap/IronTapEffect.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.effects.feruchemy.tap; - -import leaf.cosmere.constants.Metals; -import leaf.cosmere.effects.feruchemy.FeruchemyEffectBase; -import leaf.cosmere.utils.helpers.EffectsHelper; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.ai.attributes.AttributeModifier; -import net.minecraft.entity.ai.attributes.Attributes; -import net.minecraft.potion.EffectType; -import net.minecraft.potion.Effects; - - -public class IronTapEffect extends FeruchemyEffectBase -{ - public IronTapEffect(Metals.MetalType type, EffectType effectType) - { - super(type, effectType); - addAttributesModifier( - Attributes.KNOCKBACK_RESISTANCE, - "bb29d10a-c58f-4f7e-956b-133b2685831f", - 0.1D, - AttributeModifier.Operation.ADDITION); - } - - @Override - public void performEffect(LivingEntity entityLivingBaseIn, int amplifier) - { - //ensure the user has correct buffs at least as strong as their store effect - - if (entityLivingBaseIn.world.isRemote || entityLivingBaseIn.ticksExisted % 20 != 0) - { - return; - } - entityLivingBaseIn.addPotionEffect(EffectsHelper.getNewEffect(Effects.SLOW_FALLING, -amplifier)); - entityLivingBaseIn.addPotionEffect(EffectsHelper.getNewEffect(Effects.JUMP_BOOST, -amplifier)); - } -} diff --git a/src/main/java/leaf/cosmere/effects/feruchemy/tap/NicrosilTapEffect.java b/src/main/java/leaf/cosmere/effects/feruchemy/tap/NicrosilTapEffect.java deleted file mode 100644 index 2182d5e2c..000000000 --- a/src/main/java/leaf/cosmere/effects/feruchemy/tap/NicrosilTapEffect.java +++ /dev/null @@ -1,18 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.effects.feruchemy.tap; - -import leaf.cosmere.constants.Metals; -import leaf.cosmere.effects.feruchemy.FeruchemyEffectBase; -import net.minecraft.potion.EffectType; - - -public class NicrosilTapEffect extends FeruchemyEffectBase -{ - public NicrosilTapEffect(Metals.MetalType type, EffectType effectType) - { - super(type, effectType); - } -} diff --git a/src/main/java/leaf/cosmere/effects/feruchemy/tap/PewterTapEffect.java b/src/main/java/leaf/cosmere/effects/feruchemy/tap/PewterTapEffect.java deleted file mode 100644 index 8341fe1b1..000000000 --- a/src/main/java/leaf/cosmere/effects/feruchemy/tap/PewterTapEffect.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.effects.feruchemy.tap; - -import leaf.cosmere.constants.Metals; -import leaf.cosmere.effects.feruchemy.FeruchemyEffectBase; -import net.minecraft.entity.ai.attributes.AttributeModifier; -import net.minecraft.entity.ai.attributes.Attributes; -import net.minecraft.potion.EffectType; - - -public class PewterTapEffect extends FeruchemyEffectBase -{ - public PewterTapEffect(Metals.MetalType type, EffectType effectType) - { - super(type, effectType); - - addAttributesModifier( - Attributes.ATTACK_DAMAGE, - "00bebe52-fe9e-4966-989c-28de0cd2eb1f", - 1.0D, - AttributeModifier.Operation.ADDITION); - addAttributesModifier( - Attributes.ATTACK_KNOCKBACK, - "74b5b82b-58e0-4a34-9cc2-fd4b92f0b11b", - 1.0D, - AttributeModifier.Operation.ADDITION); - } -} diff --git a/src/main/java/leaf/cosmere/effects/feruchemy/tap/SteelTapEffect.java b/src/main/java/leaf/cosmere/effects/feruchemy/tap/SteelTapEffect.java deleted file mode 100644 index 95e8d653a..000000000 --- a/src/main/java/leaf/cosmere/effects/feruchemy/tap/SteelTapEffect.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.effects.feruchemy.tap; - -import leaf.cosmere.constants.Metals; -import leaf.cosmere.effects.feruchemy.FeruchemyEffectBase; -import net.minecraft.block.material.Material; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.ai.attributes.AttributeModifier; -import net.minecraft.entity.ai.attributes.Attributes; -import net.minecraft.potion.EffectType; -import net.minecraft.util.math.MathHelper; -import net.minecraft.util.math.vector.Vector3d; -import net.minecraftforge.client.event.FOVUpdateEvent; -import net.minecraftforge.common.MinecraftForge; - - -public class SteelTapEffect extends FeruchemyEffectBase -{ - public SteelTapEffect(Metals.MetalType type, EffectType effectType) - { - super(type, effectType); - - this.addAttributesModifier( - Attributes.ATTACK_SPEED, - "0191c754-d7a2-4c78-9e14-896ecc7ed0e2", - (double) 0.1F, - AttributeModifier.Operation.MULTIPLY_TOTAL); - - this.addAttributesModifier( - Attributes.MOVEMENT_SPEED, - "ede32ebb-1e66-4d26-b414-c14467885e7a", - (double) 0.2F, - AttributeModifier.Operation.MULTIPLY_TOTAL); - - MinecraftForge.EVENT_BUS.addListener(this::onFOVUpdate); - - } - - public void onFOVUpdate(FOVUpdateEvent event) - { - //todo remember to make this better? clamp isn't necessarily the best way to stop it going over the top - event.setNewfov(MathHelper.clamp(event.getNewfov(), 0.8f, 1.2f)); - } - - @Override - public boolean isReady(int duration, int amplifier) - { - return amplifier > 2; - } - - final Vector3d vec = new Vector3d(1.02d, 0d, 1.02d); - - @Override - public void performEffect(LivingEntity entityLivingBaseIn, int amplifier) - { - //code for checking block under player - //https://stackoverflow.com/a/62026168 - if (entityLivingBaseIn.world.getBlockState(entityLivingBaseIn.getPosition().down()).getMaterial() == Material.WATER) - { - - Vector3d motion = entityLivingBaseIn.getMotion().mul(vec); - entityLivingBaseIn.setMotion(motion); - } - } -} diff --git a/src/main/java/leaf/cosmere/entities/spren/ASprenEntity.java b/src/main/java/leaf/cosmere/entities/spren/ASprenEntity.java deleted file mode 100644 index f3d8a342c..000000000 --- a/src/main/java/leaf/cosmere/entities/spren/ASprenEntity.java +++ /dev/null @@ -1,103 +0,0 @@ -package leaf.cosmere.entities.spren; - -import leaf.cosmere.registry.*; -import net.minecraft.entity.*; -import net.minecraft.entity.ai.*; -import net.minecraft.entity.ai.goal.*; -import net.minecraft.entity.passive.*; -import net.minecraft.util.math.*; -import net.minecraft.util.math.vector.*; -import net.minecraft.world.*; - -import javax.annotation.*; -import java.util.*; - -public abstract class ASprenEntity extends AnimalEntity implements IFlyingAnimal -{ - protected ASprenEntity(EntityType type, World worldIn) - { - super(type, worldIn); - } - - public CreatureAttribute getCreatureAttribute() - { - return AttributesRegistry.SPREN; - } - - - public class WanderGoal extends Goal - { - WanderGoal() - { - this.setMutexFlags(EnumSet.of(Goal.Flag.MOVE)); - } - - /** - * Returns whether execution should begin. You can also read and cache any state necessary for execution in this - * method as well. - */ - public boolean shouldExecute() - { - return ASprenEntity.this.navigator.noPath() && ASprenEntity.this.rand.nextInt(10) == 0; - } - - /** - * Returns whether an in-progress EntityAIBase should continue executing - */ - public boolean shouldContinueExecuting() - { - return ASprenEntity.this.navigator.hasPath(); - } - - /** - * Execute a one shot task or start executing a continuous task - */ - public void startExecuting() - { - Vector3d vector3d = this.getRandomLocation(); - if (vector3d != null) - { - ASprenEntity.this.navigator.setPath(ASprenEntity.this.navigator.getPathToPos(new BlockPos(vector3d), 1), 1.0D); - } - - } - - @Nullable - private Vector3d getRandomLocation() - { - Vector3d vector3d = ASprenEntity.this.getLook(0.0F); - - Vector3d vector3d2 = RandomPositionGenerator.findAirTarget(ASprenEntity.this, 8, 7, vector3d, ((float) Math.PI / 2F), 2, 1); - return vector3d2 != null ? vector3d2 : RandomPositionGenerator.findGroundTarget(ASprenEntity.this, 8, 4, -2, vector3d, (double) ((float) Math.PI / 2F)); - } - } - - protected abstract class PassiveGoal extends Goal - { - public PassiveGoal() - { - - } - - public abstract boolean canSprenStart(); - - public abstract boolean canSprenContinue(); - - /** - * Returns whether execution should begin. You can also read and cache any state necessary for execution in this - * method as well. - */ - public boolean shouldExecute() - { - return this.canSprenStart(); - } - - /** - * Returns whether an in-progress EntityAIBase should continue executing - */ - public boolean shouldContinueExecuting() - { - return this.canSprenContinue(); - } - } -} diff --git a/src/main/java/leaf/cosmere/entities/spren/SprenFlameEntity.java b/src/main/java/leaf/cosmere/entities/spren/SprenFlameEntity.java deleted file mode 100644 index 172b484b1..000000000 --- a/src/main/java/leaf/cosmere/entities/spren/SprenFlameEntity.java +++ /dev/null @@ -1,660 +0,0 @@ -package leaf.cosmere.entities.spren; - -import com.google.common.collect.*; -import leaf.cosmere.registry.*; -import net.minecraft.block.*; -import net.minecraft.entity.*; -import net.minecraft.entity.ai.*; -import net.minecraft.entity.ai.attributes.*; -import net.minecraft.entity.ai.controller.*; -import net.minecraft.entity.ai.goal.*; -import net.minecraft.fluid.*; -import net.minecraft.item.*; -import net.minecraft.item.crafting.*; -import net.minecraft.nbt.*; -import net.minecraft.network.datasync.*; -import net.minecraft.particles.*; -import net.minecraft.pathfinding.*; -import net.minecraft.tags.*; -import net.minecraft.util.*; -import net.minecraft.util.math.*; -import net.minecraft.util.math.vector.*; -import net.minecraft.world.*; -import net.minecraft.world.server.*; -import net.minecraftforge.api.distmarker.*; - -import javax.annotation.*; -import java.util.*; - -public class SprenFlameEntity extends ASprenEntity -{ - private static final DataParameter DATA_FLAGS_ID = EntityDataManager.createKey(SprenFlameEntity.class, DataSerializers.BYTE); - - private float rollAmount; - private float rollAmountO; - - private int stayOutOfFireCountdown; - - private int remainingCooldownBeforeLocatingNewFire = 0; - private int remainingCooldownBeforeLocatingNewFlower = 0; - - @Nullable - private BlockPos firePos = null; - - private MoveToFireGoal moveToFireGoal; - - private int underWaterTicks; - - public SprenFlameEntity(EntityType type, World worldIn) - { - super(type, worldIn); - this.moveController = new FlyingMovementController(this, 20, true); - this.lookController = new LookController(this); - this.setPathPriority(PathNodeType.WATER, -1.0F); - this.setPathPriority(PathNodeType.WATER_BORDER, 16.0F); - this.setPathPriority(PathNodeType.COCOA, -1.0F); - this.setPathPriority(PathNodeType.FENCE, -1.0F); - } - - @Override - public boolean isImmuneToFire() - { - return true; - } - - protected void registerData() - { - super.registerData(); - this.dataManager.register(DATA_FLAGS_ID, (byte) 0); - } - - public static AttributeModifierMap.MutableAttribute prepareAttributes() - { - return MobEntity.func_233666_p_() - .createMutableAttribute(Attributes.MAX_HEALTH, 10.0D) - .createMutableAttribute(Attributes.FLYING_SPEED, 0.6F) - .createMutableAttribute(Attributes.MOVEMENT_SPEED, 0.3F) - .createMutableAttribute(Attributes.ATTACK_DAMAGE, 2.0D) - .createMutableAttribute(Attributes.FOLLOW_RANGE, 48.0D); - } - - public float getBlockPathWeight(BlockPos pos, IWorldReader worldIn) - { - return worldIn.getBlockState(pos).isAir() ? 10.0F : 0.0F; - } - - protected void registerGoals() - { - this.goalSelector.addGoal(1, new SprenFlameEntity.EnterFireGoal()); - this.goalSelector.addGoal(2, new BreedGoal(this, 1.0D)); - this.goalSelector.addGoal(3, new TemptGoal(this, 1.25D, Ingredient.fromItems(Items.TORCH, Items.SOUL_TORCH), false)); - this.goalSelector.addGoal(5, new FollowParentGoal(this, 1.25D)); - - this.goalSelector.addGoal(5, new SprenFlameEntity.UpdateFireGoal()); - - this.moveToFireGoal = new MoveToFireGoal(); - this.goalSelector.addGoal(5, this.moveToFireGoal); - - this.goalSelector.addGoal(8, new SprenFlameEntity.WanderGoal()); - - this.goalSelector.addGoal(9, new SwimGoal(this)); - } - - public void writeAdditional(CompoundNBT compound) - { - super.writeAdditional(compound); - - if (this.hasFire()) - { - compound.put("FirePos", NBTUtil.writeBlockPos(this.getFirePos())); - } - - compound.putInt("CannotEnterFireTicks", this.stayOutOfFireCountdown); - } - - /** - * (abstract) Protected helper method to read subclass entity data from NBT. - */ - public void readAdditional(CompoundNBT compound) - { - this.firePos = null; - if (compound.contains("FirePos")) - { - this.firePos = NBTUtil.readBlockPos(compound.getCompound("FirePos")); - } - - this.stayOutOfFireCountdown = compound.getInt("CannotEnterFireTicks"); - } - - - /** - * Called to update the entity's position/logic. - */ - public void tick() - { - super.tick(); - if (this.rand.nextFloat() < 0.05F) - { - for (int i = 0; i < this.rand.nextInt(2) + 1; ++i) - { - this.addParticle(this.world, - this.getPosX() - (double) 0.3F, - this.getPosX() + (double) 0.3F, - this.getPosZ() - (double) 0.3F, - this.getPosZ() + (double) 0.3F, - this.getPosYHeight(0.5D)); - } - } - - this.updateBodyPitch(); - } - - private void addParticle(World worldIn, double p_226397_2_, double p_226397_4_, double p_226397_6_, double p_226397_8_, double posY) - { - worldIn.addParticle(ParticleTypes.CAMPFIRE_COSY_SMOKE, MathHelper.lerp(worldIn.rand.nextDouble(), p_226397_2_, p_226397_4_), posY, MathHelper.lerp(worldIn.rand.nextDouble(), p_226397_6_, p_226397_8_), 0.0D, 0.0D, 0.0D); - } - - private void startMovingTo(BlockPos pos) - { - Vector3d vector3d = Vector3d.copyCenteredHorizontally(pos); - int i = 0; - BlockPos blockpos = this.getPosition(); - int j = (int) vector3d.y - blockpos.getY(); - if (j > 2) - { - i = 4; - } - else if (j < -2) - { - i = -4; - } - - int k = 6; - int l = 8; - int i1 = blockpos.manhattanDistance(pos); - if (i1 < 15) - { - k = i1 / 2; - l = i1 / 2; - } - - Vector3d vector3d1 = RandomPositionGenerator.func_226344_b_(this, k, l, i, vector3d, (float) Math.PI / 10F); - if (vector3d1 != null) - { - this.navigator.setSearchDepthMultiplier(0.5F); - this.navigator.tryMoveToXYZ(vector3d1.x, vector3d1.y, vector3d1.z, 1.0D); - } - } - - - private boolean canEnterFire() - { - return (this.stayOutOfFireCountdown <= 0) || (this.world.isRaining() || this.world.isNightTime()); - } - - @OnlyIn(Dist.CLIENT) - public float getBodyPitch(float p_226455_1_) - { - return MathHelper.lerp(p_226455_1_, this.rollAmountO, this.rollAmount); - } - - private void updateBodyPitch() - { - this.rollAmountO = this.rollAmount; - this.rollAmount = Math.max(0.0F, this.rollAmount - 0.24F); - } - - protected void updateAITasks() - { - if (this.isInWaterOrBubbleColumn()) - { - ++this.underWaterTicks; - } - else - { - this.underWaterTicks = 0; - } - - if (this.underWaterTicks > 20) - { - this.attackEntityFrom(DamageSource.DROWN, 10.0F); - } - - } - - public boolean hasFire() - { - return this.firePos != null; - } - - @Nullable - public BlockPos getFirePos() - { - return this.firePos; - } - - /** - * Called frequently so the entity can update its state every tick as required. For example, zombies and skeletons - * use this to react to sunlight and start to burn. - */ - public void livingTick() - { - super.livingTick(); - if (!this.world.isRemote) - { - if (this.stayOutOfFireCountdown > 0) - { - --this.stayOutOfFireCountdown; - } - - if (this.remainingCooldownBeforeLocatingNewFire > 0) - { - --this.remainingCooldownBeforeLocatingNewFire; - } - - if (this.remainingCooldownBeforeLocatingNewFlower > 0) - { - --this.remainingCooldownBeforeLocatingNewFlower; - } - - if (this.ticksExisted % 20 == 0 && !this.isFireValid()) - { - this.firePos = null; - } - } - - } - - private boolean isFireValid() - { - if (!this.hasFire()) - { - return false; - } - else - { - return this.world.getBlockState(this.firePos).getBlock() == Blocks.FIRE; - } - } - - private boolean isTooFar(BlockPos pos) - { - return !this.isWithinDistance(pos, 32); - } - - /** - * Returns new PathNavigateGround instance - */ - protected PathNavigator createNavigator(World worldIn) - { - FlyingPathNavigator flyingpathnavigator = new FlyingPathNavigator(this, worldIn) - { - public boolean canEntityStandOnPos(BlockPos pos) - { - return !this.world.getBlockState(pos.down()).isAir(); - } - - public void tick() - { - super.tick(); - } - }; - flyingpathnavigator.setCanOpenDoors(false); - flyingpathnavigator.setCanSwim(false); - flyingpathnavigator.setCanEnterDoors(true); - return flyingpathnavigator; - } - - /** - * Checks if the parameter is an item which this animal can be fed to breed it (wheat, carrots or seeds depending on - * the animal type) - */ - public boolean isBreedingItem(ItemStack stack) - { - return stack.getItem().isIn(ItemTags.FLOWERS); - } - - protected void playStepSound(BlockPos pos, BlockState blockIn) - { - } - - protected SoundEvent getAmbientSound() - { - return null; - } - - protected SoundEvent getHurtSound(DamageSource damageSourceIn) - { - return SoundEvents.ENTITY_BEE_HURT; - } - - protected SoundEvent getDeathSound() - { - return SoundEvents.ENTITY_BEE_DEATH; - } - - /** - * Returns the volume for the sounds this mob makes. - */ - protected float getSoundVolume() - { - return 0.4F; - } - - public SprenFlameEntity createChild(ServerWorld world, AgeableEntity mate) - { - return EntityRegistry.SPREN_FIRE.get().create(world); - } - - protected float getStandingEyeHeight(Pose poseIn, EntitySize sizeIn) - { - return this.isChild() ? sizeIn.height * 0.5F : sizeIn.height * 0.5F; - } - - public boolean onLivingFall(float distance, float damageMultiplier) - { - return false; - } - - protected void updateFallState(double y, boolean onGroundIn, BlockState state, BlockPos pos) - { - } - - protected boolean makeFlySound() - { - return true; - } - - /** - * Called when the entity is attacked. - */ - public boolean attackEntityFrom(DamageSource source, float amount) - { - if (this.isInvulnerableTo(source)) - { - return false; - } - else - { - return super.attackEntityFrom(source, amount); - } - } - - public CreatureAttribute getCreatureAttribute() - { - return AttributesRegistry.SPREN; - } - - protected void handleFluidJump(ITag fluidTag) - { - this.setMotion(this.getMotion().add(0.0D, 0.01D, 0.0D)); - } - - @OnlyIn(Dist.CLIENT) - public Vector3d getLeashStartPosition() - { - return new Vector3d(0.0D, 0.5F * this.getEyeHeight(), this.getWidth() * 0.2F); - } - - private boolean isWithinDistance(BlockPos pos, int distance) - { - try - { - SprenFlameEntity sprenFlameEntity = this; - BlockPos position = sprenFlameEntity.getPosition(); - return pos != null && pos.withinDistance(position, distance); - - } - catch (Exception e) - { - return false; - } - } - - class EnterFireGoal extends SprenFlameEntity.PassiveGoal - { - protected EnterFireGoal() - { - } - - public boolean canSprenStart() - { - if (SprenFlameEntity.this.hasFire() && SprenFlameEntity.this.canEnterFire() && SprenFlameEntity.this.firePos.withinDistance(SprenFlameEntity.this.getPositionVec(), 2.0D)) - { - return true; - } - - return false; - } - - public boolean canSprenContinue() - { - return false; - } - - /** - * Execute a one shot task or start executing a continuous task - */ - public void startExecuting() - { - if (isFireValid()) - { - SprenFlameEntity.this.remove(); - } - } - } - - public class MoveToFireGoal extends SprenFlameEntity.PassiveGoal - { - private int ticks = SprenFlameEntity.this.world.rand.nextInt(10); - private List possibleFires = Lists.newArrayList(); - @Nullable - private Path path = null; - private int field_234183_f_; - - MoveToFireGoal() - { - this.setMutexFlags(EnumSet.of(Goal.Flag.MOVE)); - } - - public boolean canSprenStart() - { - return SprenFlameEntity.this.firePos != null && !SprenFlameEntity.this.detachHome() && SprenFlameEntity.this.canEnterFire() && !this.isCloseEnough(SprenFlameEntity.this.firePos); - } - - public boolean canSprenContinue() - { - return this.canSprenStart(); - } - - /** - * Execute a one shot task or start executing a continuous task - */ - public void startExecuting() - { - this.ticks = 0; - this.field_234183_f_ = 0; - super.startExecuting(); - } - - /** - * Reset the task's internal state. Called when this task is interrupted by another one - */ - public void resetTask() - { - this.ticks = 0; - this.field_234183_f_ = 0; - SprenFlameEntity.this.navigator.clearPath(); - SprenFlameEntity.this.navigator.resetSearchDepthMultiplier(); - } - - /** - * Keep ticking a continuous task that has already been started - */ - public void tick() - { - if (SprenFlameEntity.this.firePos != null) - { - ++this.ticks; - if (this.ticks > 600) - { - this.makeChosenFirePossibleFire(); - } - else if (!SprenFlameEntity.this.navigator.hasPath()) - { - if (!SprenFlameEntity.this.isWithinDistance(SprenFlameEntity.this.firePos, 16)) - { - if (SprenFlameEntity.this.isTooFar(SprenFlameEntity.this.firePos)) - { - this.reset(); - } - else - { - SprenFlameEntity.this.startMovingTo(SprenFlameEntity.this.firePos); - } - } - else - { - boolean flag = this.startMovingToFar(SprenFlameEntity.this.firePos); - if (!flag) - { - this.makeChosenFirePossibleFire(); - } - else if (this.path != null && SprenFlameEntity.this.navigator.getPath().isSamePath(this.path)) - { - ++this.field_234183_f_; - if (this.field_234183_f_ > 60) - { - this.reset(); - this.field_234183_f_ = 0; - } - } - else - { - this.path = SprenFlameEntity.this.navigator.getPath(); - } - - } - } - } - } - - private boolean startMovingToFar(BlockPos pos) - { - SprenFlameEntity.this.navigator.setSearchDepthMultiplier(10.0F); - SprenFlameEntity.this.navigator.tryMoveToXYZ(pos.getX(), pos.getY(), pos.getZ(), 1.0D); - return SprenFlameEntity.this.navigator.getPath() != null && SprenFlameEntity.this.navigator.getPath().reachesTarget(); - } - - private boolean isPossibleFire(BlockPos pos) - { - return this.possibleFires.contains(pos); - } - - private void addPossibleFires(BlockPos pos) - { - this.possibleFires.add(pos); - - while (this.possibleFires.size() > 3) - { - this.possibleFires.remove(0); - } - - } - - private void clearPossibleFires() - { - this.possibleFires.clear(); - } - - private void makeChosenFirePossibleFire() - { - if (SprenFlameEntity.this.firePos != null) - { - this.addPossibleFires(SprenFlameEntity.this.firePos); - } - - this.reset(); - } - - private void reset() - { - SprenFlameEntity.this.firePos = null; - SprenFlameEntity.this.remainingCooldownBeforeLocatingNewFire = 200; - } - - private boolean isCloseEnough(BlockPos pos) - { - if (SprenFlameEntity.this.isWithinDistance(pos, 2)) - { - return true; - } - else - { - Path path = SprenFlameEntity.this.navigator.getPath(); - return path != null && path.getTarget().equals(pos) && path.reachesTarget() && path.isFinished(); - } - } - } - - class UpdateFireGoal extends SprenFlameEntity.PassiveGoal - { - private UpdateFireGoal() - { - } - - public boolean canSprenStart() - { - return SprenFlameEntity.this.remainingCooldownBeforeLocatingNewFire == 0 && !SprenFlameEntity.this.hasFire() && SprenFlameEntity.this.canEnterFire(); - } - - public boolean canSprenContinue() - { - return false; - } - - /** - * Execute a one shot task or start executing a continuous task - */ - public void startExecuting() - { - SprenFlameEntity.this.remainingCooldownBeforeLocatingNewFire = 200; - List list = this.getNearbyFreeFires(); - if (!list.isEmpty()) - { - for (BlockPos blockpos : list) - { - if (!SprenFlameEntity.this.moveToFireGoal.isPossibleFire(blockpos)) - { - SprenFlameEntity.this.firePos = blockpos; - return; - } - } - - SprenFlameEntity.this.moveToFireGoal.clearPossibleFires(); - SprenFlameEntity.this.firePos = list.get(0); - } - } - - private List getNearbyFreeFires() - { - List found = new ArrayList<>(); - BlockPos.getProximitySortedBoxPositions(SprenFlameEntity.this.getPosition(), 15, 15, 15) - .filter(blockPos -> - { - Block block = SprenFlameEntity.this.world.getBlockState(blockPos).getBlock(); - - if (block instanceof FireBlock) - { - return true; - } - - return false; - }) - .forEach(found::add); - return found; - } - } - -} - diff --git a/src/main/java/leaf/cosmere/handlers/ColorHandler.java b/src/main/java/leaf/cosmere/handlers/ColorHandler.java deleted file mode 100644 index 4e98b1c66..000000000 --- a/src/main/java/leaf/cosmere/handlers/ColorHandler.java +++ /dev/null @@ -1,81 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - * Special thank you to Vazkii and Botania! - * for the easier to understand example of hooking into color tints - */ - -package leaf.cosmere.handlers; - -import leaf.cosmere.constants.Metals; -import leaf.cosmere.items.IHasMetalType; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.color.BlockColors; -import net.minecraft.client.renderer.color.IBlockColor; -import net.minecraft.client.renderer.color.IItemColor; -import net.minecraft.client.renderer.color.ItemColors; -import net.minecraft.item.BlockItem; - -public final class ColorHandler -{ - - public static void init() - { - BlockColors blockColors = Minecraft.getInstance().getBlockColors(); - ItemColors itemColors = Minecraft.getInstance().getItemColors(); - - IItemColor metalColorHandler = - (itemStack, tintIndex) -> tintIndex == 0 - ? ((IHasMetalType) itemStack.getItem()).getMetalType().getColorValue() - : -1; - - IItemColor blockItemColorHandler = - (itemStack, tintIndex) -> tintIndex == 0 - ? Minecraft.getInstance().getBlockColors().getColor(((BlockItem) itemStack.getItem()).getBlock().getDefaultState(), null, null, tintIndex) - : -1; - - IBlockColor metalBlockColorHandler = - (blockState, world, pos, tintIndex) -> tintIndex == 0 - ? ((IHasMetalType) blockState.getBlock()).getMetalType().getColorValue() - : -1; - - for (Metals.MetalType metalType : Metals.MetalType.values()) - { - - if (metalType.hasOre()) - { - //blocks in world - blockColors.register(metalBlockColorHandler, metalType.getOreBlock()); - itemColors.register(blockItemColorHandler, metalType.getOreBlock()); - itemColors.register(metalColorHandler, metalType.getRawMetalItem()); - } - - if (metalType.isAlloy()) - { - itemColors.register(metalColorHandler, metalType.getRawMetalItem()); - } - - if (metalType.hasMaterialItem()) - { - //ingots - itemColors.register(metalColorHandler, metalType.getNuggetItem()); - itemColors.register(metalColorHandler, metalType.getIngotItem()); - //blocks in inventory - itemColors.register(blockItemColorHandler, metalType.getBlock()); - //blocks in world - blockColors.register(metalBlockColorHandler, metalType.getBlock()); - } - - if (metalType.hasFeruchemicalEffect()) - { - itemColors.register(metalColorHandler, metalType.getRingItem()); - itemColors.register(metalColorHandler, metalType.getBraceletItem()); - itemColors.register(metalColorHandler, metalType.getNecklaceItem()); - } - - if (metalType.hasHemalurgicEffect()) - { - itemColors.register(metalColorHandler, metalType.getSpikeItem()); - } - } - } -} diff --git a/src/main/java/leaf/cosmere/handlers/CommonEvents.java b/src/main/java/leaf/cosmere/handlers/CommonEvents.java deleted file mode 100644 index 2e04a98cc..000000000 --- a/src/main/java/leaf/cosmere/handlers/CommonEvents.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.handlers; - - -import leaf.cosmere.Cosmere; -import leaf.cosmere.commands.CosmereCommand; -import leaf.cosmere.constants.Metals; -import leaf.cosmere.utils.helpers.LogHelper; -import leaf.cosmere.registry.FeatureRegistry; -import net.minecraft.world.biome.Biome; -import net.minecraft.world.gen.GenerationStage; -import net.minecraftforge.event.RegisterCommandsEvent; -import net.minecraftforge.event.world.BiomeLoadingEvent; -import net.minecraftforge.eventbus.api.EventPriority; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.common.Mod; - -import java.util.Arrays; -import java.util.List; -import java.util.Locale; -import java.util.stream.Collectors; - -@Mod.EventBusSubscriber(modid = Cosmere.MODID, bus = Mod.EventBusSubscriber.Bus.FORGE) -public class CommonEvents -{ - @SubscribeEvent - public static void registerCommands(RegisterCommandsEvent event) - { - CosmereCommand.register(event.getDispatcher()); - } - - @SubscribeEvent(priority = EventPriority.HIGH) - public static void onBiomeLoad(BiomeLoadingEvent event) - { - Biome.Category biomeCategory = event.getCategory(); - - //whitelist only vanilla biomes. - //todo may have compatibility issues with mining dimension type mods - //don't really want to deprive people of easier access to ores if they want to play that way. something to look into. - List whitelist = - Arrays.stream(Biome.Category.values()) - .filter(biomeType -> biomeType != Biome.Category.NONE && biomeType != Biome.Category.NETHER && biomeType != Biome.Category.THEEND) - .collect(Collectors.toList()); - - - if (whitelist.contains(biomeCategory)) - { - for (Metals.MetalType metalType : Metals.MetalType.values()) - { - if (metalType.hasOre()) - { - event.getGeneration().withFeature(GenerationStage.Decoration.UNDERGROUND_ORES, FeatureRegistry.ConfiguredFeatures.ORE_FEATURES.get(metalType)); - LogHelper.debug(String.format("Added %s to: %s", metalType.name().toLowerCase(Locale.ROOT), event.getName())); - } - } - - } - } -} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/handlers/EntityEventHandler.java b/src/main/java/leaf/cosmere/handlers/EntityEventHandler.java deleted file mode 100644 index 0c630063c..000000000 --- a/src/main/java/leaf/cosmere/handlers/EntityEventHandler.java +++ /dev/null @@ -1,245 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.handlers; - -import leaf.cosmere.Cosmere; -import leaf.cosmere.cap.entity.ISpiritweb; -import leaf.cosmere.cap.entity.SpiritwebCapability; -import leaf.cosmere.charge.ItemChargeHelper; -import leaf.cosmere.constants.Constants; -import leaf.cosmere.constants.Manifestations; -import leaf.cosmere.constants.Metals; -import leaf.cosmere.utils.helpers.MathHelper; -import leaf.cosmere.utils.helpers.TextHelper; -import leaf.cosmere.items.MetalNuggetItem; -import leaf.cosmere.items.curio.HemalurgicSpikeItem; -import leaf.cosmere.registry.ItemsRegistry; -import net.minecraft.entity.Entity; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.merchant.villager.VillagerEntity; -import net.minecraft.entity.monster.AbstractIllagerEntity; -import net.minecraft.entity.monster.MonsterEntity; -import net.minecraft.entity.monster.WitchEntity; -import net.minecraft.entity.monster.ZombieVillagerEntity; -import net.minecraft.entity.monster.piglin.PiglinEntity; -import net.minecraft.entity.passive.AnimalEntity; -import net.minecraft.entity.passive.CatEntity; -import net.minecraft.entity.passive.horse.LlamaEntity; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.ItemStack; -import net.minecraft.util.Hand; -import net.minecraftforge.event.AttachCapabilitiesEvent; -import net.minecraftforge.event.entity.EntityJoinWorldEvent; -import net.minecraftforge.event.entity.living.LivingEvent; -import net.minecraftforge.event.entity.player.EntityItemPickupEvent; -import net.minecraftforge.event.entity.player.PlayerInteractEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.common.Mod; - -import static leaf.cosmere.utils.helpers.EntityHelper.giveEntityStartingManifestation; - -@Mod.EventBusSubscriber(modid = Cosmere.MODID, bus = Mod.EventBusSubscriber.Bus.FORGE) -public class EntityEventHandler -{ - - @SubscribeEvent - public static void onEntityJoinWorldEvent(EntityJoinWorldEvent event) - { - Entity eventEntity = event.getEntity(); - - if (eventEntity.world.isRemote || !(eventEntity instanceof LivingEntity)) - { - return; - } - - LivingEntity livingEntity = (LivingEntity) eventEntity; - SpiritwebCapability.get(livingEntity).ifPresent(iSpiritweb -> - { - SpiritwebCapability spiritweb = (SpiritwebCapability) iSpiritweb; - - //find out if any innate powers exist on the entity first - //if they do - if (spiritweb.hasAnyPowers()) - { - //then skip - //no need to give them extras just for rejoining the world. - return; - } - - //if player or villager - if (eventEntity instanceof PlayerEntity) - { - //from random powertype - { - //give random power - giveEntityStartingManifestation(livingEntity, spiritweb); - } - } - else if (eventEntity instanceof VillagerEntity - || eventEntity instanceof ZombieVillagerEntity - || eventEntity instanceof AbstractIllagerEntity - || eventEntity instanceof WitchEntity - || eventEntity instanceof PiglinEntity) - { - //random 1/16 - // only 1 in 16 will have the gene - if (MathHelper.randomInt(1, 16) % 16 == 0) - { - giveEntityStartingManifestation(livingEntity, spiritweb); - } - - } - }); - - } - - @SubscribeEvent - public static void attachEntityCapabilities(AttachCapabilitiesEvent event) - { - Entity eventEntity = event.getObject(); - - if (eventEntity instanceof PlayerEntity - || eventEntity instanceof AnimalEntity - || eventEntity instanceof VillagerEntity - || eventEntity instanceof MonsterEntity) - { - LivingEntity livingEntity = (LivingEntity) eventEntity; - SpiritwebCapability spiritwebCapability = new SpiritwebCapability(livingEntity); - - event.addCapability(Constants.Resources.SPIRITWEB_CAP, new ISpiritweb.Provider(spiritwebCapability)); - } - } - - @SubscribeEvent - public static void onLivingTick(LivingEvent.LivingUpdateEvent event) - { - SpiritwebCapability.get(event.getEntityLiving()).ifPresent(ISpiritweb::tick); - } - - @SubscribeEvent - public static void onEntityItemPickUp(EntityItemPickupEvent event) - { - //seriously, get item three times is stupid, I know it. - //but entity item, itemstack and then the actual item is needed. - if (event.getItem().getItem().getItem() == ItemsRegistry.INVESTITURE.get()) - { - event.getItem().getItem().shrink(1); - - ItemChargeHelper.dispatchCharge(event.getPlayer(), 1000, true); - } - } - - @SubscribeEvent - public static void onEntityInteract(PlayerInteractEvent.EntityInteract event) - { - if (!(event.getTarget() instanceof LivingEntity)) - { - return; - } - - ItemStack stack = event.getPlayer().getHeldItem(Hand.MAIN_HAND); - LivingEntity target = (LivingEntity) event.getTarget(); - - SpiritwebCapability.get(target).ifPresent(cap -> - { - if (stack.getItem() instanceof MetalNuggetItem) - { - MetalNuggetItem beadItem = (MetalNuggetItem) stack.getItem(); - Metals.MetalType metalType = beadItem.getMetalType(); - - if (metalType != Metals.MetalType.LERASATIUM && metalType != Metals.MetalType.LERASIUM) - { - return; - } - - if (!event.getPlayer().isCreative()) - { - stack.shrink(1); - } - - for (int i = 0; i < 16; i++) - { - switch (metalType) - { - case LERASIUM: - //give allomancy - cap.giveManifestation(Manifestations.ManifestationTypes.ALLOMANCY, i); - - //https://www.theoryland.com/intvmain.php?i=977#43 - if (target instanceof LlamaEntity && !target.hasCustomName()) - { - //todo translations - target.setCustomName(TextHelper.createTranslatedText("Mistborn Llama")); - } - - break; - case LERASATIUM: - //give feruchemy - cap.giveManifestation(Manifestations.ManifestationTypes.FERUCHEMY, i); - break; - } - } - - - } - else if (stack.getItem() instanceof HemalurgicSpikeItem) - { - //https://www.theoryland.com/intvmain.php?i=977#43 - if (!(event.getTarget() instanceof CatEntity)) - { - return; - } - - HemalurgicSpikeItem spike = (HemalurgicSpikeItem) stack.getItem(); - - //only apply spike if it has a power - //no accidentally losing spikes - if (!spike.hemalurgicIdentityExists(stack)) - { - return; - } - - - //todo random list of catquisitor names - target.setCustomName(TextHelper.createTranslatedText("Catquisitor ")); - - boolean spikeApplied = false; - - //todo catquisitor - /* - switch (spike.getMetalType()) - { - case STEEL: - case BRONZE: - case CADMIUM: - case ELECTRUM: - cap.giveManifestation(Manifestations.ManifestationTypes.ALLOMANCY, spike.getMetalType().getID()); - spikeApplied = true; - break; - case PEWTER: - case BRASS: - case BENDALLOY: - case GOLD: - cap.giveManifestation(Manifestations.ManifestationTypes.FERUCHEMY, spike.getMetalType().getID()); - spikeApplied = true; - break; - case ATIUM: - //Steals any power - //todo decide if we just pick a random power - break; - case LERASIUM: - //Steals all powers - break; - }*/ - - if (spikeApplied && !event.getPlayer().isCreative()) - { - stack.shrink(1); - } - } - - }); - } -} diff --git a/src/main/java/leaf/cosmere/handlers/ModBusEvents.java b/src/main/java/leaf/cosmere/handlers/ModBusEvents.java deleted file mode 100644 index f0ba331f2..000000000 --- a/src/main/java/leaf/cosmere/handlers/ModBusEvents.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * File created ~ 5 - 5 - 2021 ~ Leaf - */ - -package leaf.cosmere.handlers; - -import leaf.cosmere.Cosmere; -import leaf.cosmere.constants.Metals; -import leaf.cosmere.registry.AttributesRegistry; -import net.minecraft.entity.EntityType; -import net.minecraft.entity.ai.attributes.Attribute; -import net.minecraftforge.event.entity.EntityAttributeModificationEvent; -import net.minecraftforge.eventbus.api.EventPriority; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.RegistryObject; -import net.minecraftforge.fml.common.Mod; - - -@Mod.EventBusSubscriber(modid = Cosmere.MODID, bus = Mod.EventBusSubscriber.Bus.MOD) -public class ModBusEvents -{ - private final static EntityType[] entityTypes = { - EntityType.PLAYER, - - EntityType.VILLAGER, - EntityType.WANDERING_TRADER, - - EntityType.ZOMBIE_VILLAGER, - EntityType.WITCH, - - EntityType.PILLAGER, - EntityType.EVOKER, - EntityType.ILLUSIONER, - EntityType.VINDICATOR, - - EntityType.PIGLIN, - - EntityType.CAT, - EntityType.LLAMA, - EntityType.TRADER_LLAMA, - }; - - - @SubscribeEvent(priority = EventPriority.HIGH) - public static void onEntityAttributeModificationEvent(EntityAttributeModificationEvent event) - { - for (Metals.MetalType metalType : Metals.MetalType.values()) - { - if (!metalType.hasAssociatedManifestation()) - { - continue; - } - - RegistryObject mistingAttribute = AttributesRegistry.MANIFESTATION_STRENGTH_ATTRIBUTES.get(metalType.getMistingName()); - RegistryObject ferringAttribute = AttributesRegistry.MANIFESTATION_STRENGTH_ATTRIBUTES.get(metalType.getFerringName()); - - for (EntityType entityType : entityTypes) - { - event.add(entityType, mistingAttribute.get()); - event.add(entityType, ferringAttribute.get()); - } - } - } -} diff --git a/src/main/java/leaf/cosmere/handlers/PlayerEventHandler.java b/src/main/java/leaf/cosmere/handlers/PlayerEventHandler.java deleted file mode 100644 index d9bf3fd75..000000000 --- a/src/main/java/leaf/cosmere/handlers/PlayerEventHandler.java +++ /dev/null @@ -1,105 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.handlers; - -import leaf.cosmere.Cosmere; -import leaf.cosmere.cap.entity.ISpiritweb; -import leaf.cosmere.cap.entity.SpiritwebCapability; -import leaf.cosmere.manifestation.AManifestation; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.inventory.IInventory; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.CompoundNBT; -import net.minecraftforge.common.capabilities.Capability; -import net.minecraftforge.event.TickEvent; -import net.minecraftforge.event.entity.item.ItemTossEvent; -import net.minecraftforge.event.entity.player.PlayerEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.common.Mod; - -@Mod.EventBusSubscriber(modid = Cosmere.MODID, bus = Mod.EventBusSubscriber.Bus.FORGE) -public class PlayerEventHandler -{ - @SubscribeEvent - public static void onPlayerClone(PlayerEvent.Clone event) - { - Capability.IStorage storage = SpiritwebCapability.CAPABILITY.getStorage(); - event.getOriginal().revive(); - SpiritwebCapability.get(event.getOriginal()).ifPresent((oldSpiritWeb) -> SpiritwebCapability.get(event.getPlayer()).ifPresent((newSpiritWeb) -> - { - //clear out the attributes that were placed on the newly cloned player at creation - // and make sure that they then match what the old player entity had. - newSpiritWeb.clearManifestations(); - for (AManifestation manifestation : oldSpiritWeb.getAvailableManifestations(true)) - { - newSpiritWeb.giveManifestation(manifestation.getManifestationType(), manifestation.getPowerID()); - } - - CompoundNBT nbt = (CompoundNBT) storage.writeNBT(SpiritwebCapability.CAPABILITY, oldSpiritWeb, null); - storage.readNBT(SpiritwebCapability.CAPABILITY, newSpiritWeb, null, nbt); - })); - } - - @SubscribeEvent - public static void onTrackPlayer(PlayerEvent.StartTracking startTracking) - { - SpiritwebCapability.get(startTracking.getPlayer()).ifPresent(cap -> - { - cap.syncToClients(null); - }); - } - - @SubscribeEvent - public void onPlayerTick(TickEvent.PlayerTickEvent event) - { - PlayerEntity player = event.player; - - //charge gemstones in inventory if the player is outside during a thunderstorm - if (player.world.isRainingAt(player.getPosition()) && player.world.isThundering()) - { - IInventory mainInv = player.inventory; - int size = mainInv.getSizeInventory(); - - for (int i = 0; i < size; i++) - { - IInventory inv = mainInv; - int slot = i; - - ItemStack stackInSlot = inv.getStackInSlot(slot); - //todo finish :D - //if (stackInSlot != null && stackInSlot.getItem() instanceof ItemGemstone) - { - } - } - } - } - - @SubscribeEvent - public void onItemTossEvent(ItemTossEvent event) - { - if (!event.getPlayer().world.isRemote) - { - //if (event.getEntityItem().getItem().getItem() instanceof ItemShardBlade) - { - /* - //if we haven't got a shard blade in inv, put it in the inventory - if (event.getPlayer().getCapability(CosmereCapabilities.SUMMON_SHARDBLADE, null).getInventoryShardblade().getStackInSlot(0) == null) - { - event.getPlayer().getCapability(CosmereCapabilities.SUMMON_SHARDBLADE, null).setIsShardbladeInInventory(true); - - ItemStack itemStack = event.getEntityItem().getEntityItem(); - ItemStack test = itemStack.copy(); - - event.getPlayer().getCapability(CosmereCapabilities.SUMMON_SHARDBLADE, null).getInventoryShardblade().setInventorySlotContents(0, test); - - - event.getEntityItem().isDead = true; - } - PacketDispatcher.sendTo(new SyncShardbladeData(event.getPlayer().getCapability(CosmereCapabilities.SUMMON_SHARDBLADE, null)), (EntityPlayerMP) event.getPlayer()); - */ - } - } - } -} diff --git a/src/main/java/leaf/cosmere/itemgroups/CosmereItemGroups.java b/src/main/java/leaf/cosmere/itemgroups/CosmereItemGroups.java deleted file mode 100644 index 4b500c865..000000000 --- a/src/main/java/leaf/cosmere/itemgroups/CosmereItemGroups.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.itemgroups; - -import leaf.cosmere.Cosmere; -import leaf.cosmere.registry.BlocksRegistry; -import leaf.cosmere.registry.ItemsRegistry; -import net.minecraft.item.ItemGroup; -import net.minecraft.item.ItemStack; - -public class CosmereItemGroups -{ - - public static ItemGroup ITEMS = new ItemGroup(Cosmere.MODID + ".items") - { - @Override - public ItemStack createIcon() - { - return new ItemStack(ItemsRegistry.GUIDE.get()); - } - }; - - public static ItemGroup METALMINDS = new ItemGroup(Cosmere.MODID + ".metalminds") - { - @Override - public ItemStack createIcon() - { - return new ItemStack(ItemsRegistry.METAL_BRACELETS.entrySet().stream().findAny().get().getValue().get()); - } - }; - - public static ItemGroup BLOCKS = new ItemGroup(Cosmere.MODID + ".blocks") - { - @Override - public ItemStack createIcon() - { - return new ItemStack(BlocksRegistry.GEM_BLOCK.get()); - } - }; - -} diff --git a/src/main/java/leaf/cosmere/items/BaseItem.java b/src/main/java/leaf/cosmere/items/BaseItem.java deleted file mode 100644 index fe7b1f8b2..000000000 --- a/src/main/java/leaf/cosmere/items/BaseItem.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.items; - -import leaf.cosmere.itemgroups.CosmereItemGroups; -import leaf.cosmere.properties.PropTypes; -import net.minecraft.item.Item; - -public class BaseItem extends Item -{ - - public BaseItem() - { - super(PropTypes.Items.SIXTY_FOUR.get().group(CosmereItemGroups.ITEMS)); - } - - public BaseItem(Item.Properties prop) - { - super(prop); - } - - -} diff --git a/src/main/java/leaf/cosmere/items/CapWrapper.java b/src/main/java/leaf/cosmere/items/CapWrapper.java deleted file mode 100644 index 2c02c5b88..000000000 --- a/src/main/java/leaf/cosmere/items/CapWrapper.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - * Largely copied from the Botania Mod! - * this is used for detecting items and curios that have charge interface attached - */ - -package leaf.cosmere.items; - -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.inventory.IInventory; -import net.minecraft.item.ItemStack; -import net.minecraftforge.items.IItemHandler; -import net.minecraftforge.items.IItemHandlerModifiable; - -public class CapWrapper implements IInventory -{ - private final IItemHandler handler; - - public CapWrapper(IItemHandler handler) - { - this.handler = handler; - } - - @Override - public int getSizeInventory() - { - return handler.getSlots(); - } - - @Override - public boolean isEmpty() - { - for (int i = 0; i < getSizeInventory(); i++) - { - if (!getStackInSlot(i).isEmpty()) - { - return false; - } - } - return true; - } - - @Override - public ItemStack getStackInSlot(int index) - { - return handler.getStackInSlot(index); - } - - @Override - public ItemStack decrStackSize(int index, int count) - { - return handler.extractItem(index, count, false); - } - - @Override - public ItemStack removeStackFromSlot(int index) - { - return handler.extractItem(index, Integer.MAX_VALUE, false); - } - - @Override - public void setInventorySlotContents(int index, ItemStack stack) - { - if (handler instanceof IItemHandlerModifiable) - { - ((IItemHandlerModifiable) handler).setStackInSlot(index, stack); - } - } - - @Override - public void markDirty() - { - - } - - @Override - public boolean isUsableByPlayer(PlayerEntity player) - { - return false; - } - - @Override - public void clear() - { - for (int i = 0; i < getSizeInventory(); i++) - { - removeStackFromSlot(i); - } - } -} diff --git a/src/main/java/leaf/cosmere/items/ChargeableItemBase.java b/src/main/java/leaf/cosmere/items/ChargeableItemBase.java deleted file mode 100644 index f9f833667..000000000 --- a/src/main/java/leaf/cosmere/items/ChargeableItemBase.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.items; - -import leaf.cosmere.charge.IChargeable; -import leaf.cosmere.utils.helpers.TextHelper; -import net.minecraft.client.util.ITooltipFlag; -import net.minecraft.item.Item; -import net.minecraft.item.ItemGroup; -import net.minecraft.item.ItemStack; -import net.minecraft.util.NonNullList; -import net.minecraft.util.text.ITextComponent; -import net.minecraft.util.text.TextFormatting; -import net.minecraft.world.World; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; - -import javax.annotation.Nonnull; -import java.util.List; -import java.util.UUID; - -public abstract class ChargeableItemBase extends BaseItem implements IChargeable -{ - public ChargeableItemBase(Item.Properties prop) - { - super(prop); - } - - @Override - public void fillItemGroup(@Nonnull ItemGroup tab, @Nonnull NonNullList stacks) - { - if (isInGroup(tab)) - { - stacks.add(new ItemStack(this)); - - ItemStack fullPower = new ItemStack(this); - setCharge(fullPower, getMaxCharge(fullPower)); - stacks.add(fullPower); - } - } - - @Override - public int getEntityLifespan(ItemStack itemStack, World world) - { - return Integer.MAX_VALUE; - } - - @Override - public boolean showDurabilityBar(ItemStack stack) - { - if (stack.getItem() instanceof IChargeable) - { - IChargeable item = (IChargeable) stack.getItem(); - return item.getCharge(stack) > 1; - } - return false; - } - - @Override - @OnlyIn(Dist.CLIENT) - public void addInformation(ItemStack stack, World worldIn, List tooltip, ITooltipFlag flagIn) - { - String attunedPlayerName = getAttunedPlayerName(stack); - UUID attunedPlayer = getAttunedPlayer(stack); - if (attunedPlayer != null) - { - tooltip.add(TextHelper.createText(attunedPlayerName)); - } - tooltip.add(TextHelper.createText(String.format("%s/%s", getCharge(stack), getMaxCharge(stack))).mergeStyle(TextFormatting.GRAY)); - } - - @Override - public double getDurabilityForDisplay(ItemStack stack) - { - if (stack.getItem() instanceof IChargeable) - { - IChargeable item = (IChargeable) stack.getItem(); - - int maxCharge = item.getMaxCharge(stack); - int charge = item.getCharge(stack); - - return (double) (maxCharge - charge) / (double) maxCharge; - } - - return 1d; - } - - @Override - public boolean hasEffect(ItemStack stack) - { - if (stack.getItem() instanceof IChargeable) - { - IChargeable item = (IChargeable) stack.getItem(); - return item.getCharge(stack) > 0; - } - return false; - } -} diff --git a/src/main/java/leaf/cosmere/items/ChargeableMetalItem.java b/src/main/java/leaf/cosmere/items/ChargeableMetalItem.java deleted file mode 100644 index 8a3e4dbe2..000000000 --- a/src/main/java/leaf/cosmere/items/ChargeableMetalItem.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.items; - -import leaf.cosmere.constants.Metals; -import leaf.cosmere.itemgroups.CosmereItemGroups; -import leaf.cosmere.properties.PropTypes; - -public class ChargeableMetalItem extends ChargeableItemBase implements IHasMetalType -{ - private final Metals.MetalType metalType; - - public ChargeableMetalItem(Metals.MetalType metalType) - { - super(PropTypes.Items.ONE.get().rarity(metalType.getRarity()).group(CosmereItemGroups.METALMINDS)); - - this.metalType = metalType; - } - - @Override - public Metals.MetalType getMetalType() - { - return this.metalType; - } -} diff --git a/src/main/java/leaf/cosmere/items/GemItem.java b/src/main/java/leaf/cosmere/items/GemItem.java deleted file mode 100644 index cfb07f881..000000000 --- a/src/main/java/leaf/cosmere/items/GemItem.java +++ /dev/null @@ -1,18 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.items; - -import leaf.cosmere.itemgroups.CosmereItemGroups; -import leaf.cosmere.properties.PropTypes; -import net.minecraft.item.Rarity; - -public class GemItem extends ChargeableItemBase -{ - public GemItem() - { - super(PropTypes.Items.SIXTY_FOUR.get().group(CosmereItemGroups.ITEMS).rarity(Rarity.UNCOMMON)); - } - -} diff --git a/src/main/java/leaf/cosmere/items/GuideItem.java b/src/main/java/leaf/cosmere/items/GuideItem.java deleted file mode 100644 index 464ecc525..000000000 --- a/src/main/java/leaf/cosmere/items/GuideItem.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.items; - -import leaf.cosmere.properties.PropTypes; -import leaf.cosmere.registry.ItemsRegistry; -import net.minecraft.client.util.ITooltipFlag; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.entity.player.ServerPlayerEntity; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.item.Rarity; -import net.minecraft.util.ActionResult; -import net.minecraft.util.ActionResultType; -import net.minecraft.util.Hand; -import net.minecraft.util.math.BlockRayTraceResult; -import net.minecraft.util.math.RayTraceContext; -import net.minecraft.util.text.ITextComponent; -import net.minecraft.util.text.TextFormatting; -import net.minecraft.world.World; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; -import vazkii.patchouli.api.PatchouliAPI; - -import javax.annotation.Nonnull; -import java.util.List; - -public class GuideItem extends Item -{ - - public GuideItem() - { - super(PropTypes.Items.ONE.get().rarity(Rarity.RARE)); - } - - public static boolean isOpen() - { - return ItemsRegistry.GUIDE.getId().equals(PatchouliAPI.get().getOpenBookGui()); - } - - public static ITextComponent getEdition() - { - return PatchouliAPI.get().getSubtitle(ItemsRegistry.GUIDE.getId()); - } - - public static ITextComponent getTitle(ItemStack stack) - { - ITextComponent title = stack.getDisplayName(); - - String akashicTomeNBT = "akashictome:displayName"; - if (stack.hasTag() && stack.getTag().contains(akashicTomeNBT)) - { - title = ITextComponent.Serializer.getComponentFromJson(stack.getTag().getString(akashicTomeNBT)); - } - - return title; - } - - // Random item to expose this as public - public static BlockRayTraceResult doRayTrace(World world, PlayerEntity player, RayTraceContext.FluidMode fluidMode) - { - return Item.rayTrace(world, player, fluidMode); - } - - /* - @Override - public void fillItemGroup(@Nonnull ItemGroup tab, @Nonnull NonNullList list) { - if (isInGroup(tab)) { - list.add(new ItemStack(this)); - - } - } - */ - @Override - @OnlyIn(Dist.CLIENT) - public void addInformation(ItemStack stack, World worldIn, List tooltip, ITooltipFlag flagIn) - { - tooltip.add(getEdition().deepCopy().mergeStyle(TextFormatting.GRAY)); - } - - @Nonnull - @Override - public ActionResult onItemRightClick(World worldIn, PlayerEntity playerIn, Hand handIn) - { - ItemStack stack = playerIn.getHeldItem(handIn); - - if (playerIn instanceof ServerPlayerEntity) - { - ServerPlayerEntity player = (ServerPlayerEntity) playerIn; - - //UseItemSuccessTrigger.INSTANCE.trigger(player, stack, player.getServerWorld(), player.getPosX(), player.getPosY(), player.getPosZ()); - - PatchouliAPI.get().openBookGUI((ServerPlayerEntity) playerIn, ItemsRegistry.GUIDE.getId()); - } - - return new ActionResult<>(ActionResultType.SUCCESS, stack); - } -} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/items/IContainsMetal.java b/src/main/java/leaf/cosmere/items/IContainsMetal.java deleted file mode 100644 index e7efe956e..000000000 --- a/src/main/java/leaf/cosmere/items/IContainsMetal.java +++ /dev/null @@ -1,15 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.items; - -import net.minecraft.item.ItemStack; - -public interface IContainsMetal -{ - default boolean containsMetal(ItemStack stack) - { - return true; - } -} diff --git a/src/main/java/leaf/cosmere/items/IHasMetalType.java b/src/main/java/leaf/cosmere/items/IHasMetalType.java deleted file mode 100644 index 837d0ea99..000000000 --- a/src/main/java/leaf/cosmere/items/IHasMetalType.java +++ /dev/null @@ -1,12 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.items; - -import leaf.cosmere.constants.Metals; - -public interface IHasMetalType -{ - Metals.MetalType getMetalType(); -} diff --git a/src/main/java/leaf/cosmere/items/MetalFileItem.java b/src/main/java/leaf/cosmere/items/MetalFileItem.java deleted file mode 100644 index 3ec0eb639..000000000 --- a/src/main/java/leaf/cosmere/items/MetalFileItem.java +++ /dev/null @@ -1,16 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.items; - -import leaf.cosmere.properties.PropTypes; - -public class MetalFileItem extends BaseItem -{ - public MetalFileItem() - { - super(PropTypes.Items.ONE.get()); - } - -} diff --git a/src/main/java/leaf/cosmere/items/MetalIngotItem.java b/src/main/java/leaf/cosmere/items/MetalIngotItem.java deleted file mode 100644 index 30e268b95..000000000 --- a/src/main/java/leaf/cosmere/items/MetalIngotItem.java +++ /dev/null @@ -1,18 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.items; - -import leaf.cosmere.constants.Metals; - -public class MetalIngotItem extends MetalItem -{ - - public MetalIngotItem(Metals.MetalType metalType) - { - super(metalType); - } - - -} diff --git a/src/main/java/leaf/cosmere/items/MetalItem.java b/src/main/java/leaf/cosmere/items/MetalItem.java deleted file mode 100644 index a93a36a38..000000000 --- a/src/main/java/leaf/cosmere/items/MetalItem.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.items; - -import leaf.cosmere.constants.Metals; -import leaf.cosmere.itemgroups.CosmereItemGroups; -import leaf.cosmere.properties.PropTypes; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ActionResultType; -import net.minecraft.util.Hand; - -public class MetalItem extends BaseItem implements IHasMetalType -{ - private final Metals.MetalType metalType; - - public MetalItem(Metals.MetalType metalType) - { - super(PropTypes.Items.SIXTY_FOUR.get().group(CosmereItemGroups.ITEMS).rarity(metalType.getRarity())); - - this.metalType = metalType; - } - - - /** - * Returns true if the item can be used on the given entity, e.g. shears on sheep. - */ - public ActionResultType itemInteractionForEntity(ItemStack stack, PlayerEntity playerIn, LivingEntity target, Hand hand) - { - return ActionResultType.PASS; - } - - @Override - public Metals.MetalType getMetalType() - { - return this.metalType; - } -} diff --git a/src/main/java/leaf/cosmere/items/MetalNuggetItem.java b/src/main/java/leaf/cosmere/items/MetalNuggetItem.java deleted file mode 100644 index 9b8d15fbe..000000000 --- a/src/main/java/leaf/cosmere/items/MetalNuggetItem.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.items; - -import leaf.cosmere.cap.entity.SpiritwebCapability; -import leaf.cosmere.constants.Metals; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ActionResult; -import net.minecraft.util.Hand; -import net.minecraft.world.World; - -public class MetalNuggetItem extends MetalItem -{ - public MetalNuggetItem(Metals.MetalType metalType) - { - super(metalType); - } - - - public ActionResult onItemRightClick(World worldIn, PlayerEntity playerIn, Hand handIn) - { - ItemStack itemstack = playerIn.getHeldItem(handIn); - playerIn.setActiveHand(handIn); - - //todo convert to shavings - - SpiritwebCapability.get(playerIn).ifPresent(iSpiritweb -> - { - SpiritwebCapability spiritweb = (SpiritwebCapability) iSpiritweb; - - //add to metal stored - Integer metalIngested = spiritweb.METALS_INGESTED.get(getMetalType()); - spiritweb.METALS_INGESTED.put(getMetalType(),metalIngested + 9); // todo decide what value should be used for ingestion - - itemstack.shrink(1); - - }); - - - - return ActionResult.resultConsume(itemstack); - } -} diff --git a/src/main/java/leaf/cosmere/items/MetalRawOreItem.java b/src/main/java/leaf/cosmere/items/MetalRawOreItem.java deleted file mode 100644 index 35c98648d..000000000 --- a/src/main/java/leaf/cosmere/items/MetalRawOreItem.java +++ /dev/null @@ -1,16 +0,0 @@ -/* - * File created ~ 29 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.items; - -import leaf.cosmere.constants.Metals; - -public class MetalRawOreItem extends MetalItem -{ - public MetalRawOreItem(Metals.MetalType metalType) - { - super(metalType); - } - -} diff --git a/src/main/java/leaf/cosmere/items/MetalShavingsItem.java b/src/main/java/leaf/cosmere/items/MetalShavingsItem.java deleted file mode 100644 index 514cc3c5b..000000000 --- a/src/main/java/leaf/cosmere/items/MetalShavingsItem.java +++ /dev/null @@ -1,15 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.items; - -import leaf.cosmere.constants.Metals; - -public class MetalShavingsItem extends MetalItem -{ - public MetalShavingsItem(Metals.MetalType metalType) - { - super(metalType); - } -} diff --git a/src/main/java/leaf/cosmere/items/MetalVialItem.java b/src/main/java/leaf/cosmere/items/MetalVialItem.java deleted file mode 100644 index 8d47c7651..000000000 --- a/src/main/java/leaf/cosmere/items/MetalVialItem.java +++ /dev/null @@ -1,229 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.items; - -import leaf.cosmere.cap.entity.SpiritwebCapability; -import leaf.cosmere.constants.Metals; -import leaf.cosmere.utils.helpers.CompoundNBTHelper; -import leaf.cosmere.utils.helpers.TextHelper; -import leaf.cosmere.registry.ItemsRegistry; -import net.minecraft.client.util.ITooltipFlag; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.ItemStack; -import net.minecraft.item.UseAction; -import net.minecraft.nbt.CompoundNBT; -import net.minecraft.util.ActionResult; -import net.minecraft.util.Hand; -import net.minecraft.util.text.ITextComponent; -import net.minecraft.world.World; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; - -import javax.annotation.Nonnull; -import java.util.ArrayList; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; -import java.util.stream.IntStream; - -import static leaf.cosmere.constants.Constants.Strings.CONTAINED_METALS; - -public class MetalVialItem extends BaseItem implements IContainsMetal -{ - final String metals_contained = "metals_contained"; - final String metal_ids = "metalIDs"; - final String metal_amounts = "metalAmounts"; - private final double MAX_METALS_COUNT = 8; - - private CompoundNBT getContainedMetalsTag(ItemStack stack) - { - return stack.getOrCreateChildTag(metals_contained); - } - - @Override - public boolean containsMetal(ItemStack stack) - { - return getContainedMetalsTag(stack).contains(metal_ids); - } - - public boolean isFull(ItemStack stack) - { - return containedMetalCount(stack) >= MAX_METALS_COUNT; - } - - @Nonnull - @Override - public UseAction getUseAction(ItemStack stack) - { - return UseAction.DRINK; - } - - @Override - public int getUseDuration(ItemStack stack) - { - //same drink time as normal potions - return 32; - } - - - @Nonnull - @Override - public ActionResult onItemRightClick(World world, PlayerEntity player, @Nonnull Hand hand) - { - ItemStack stack = player.getHeldItem(hand); - if (player.canEat(true) && containedMetalCount(player.getHeldItem(hand)) > 0) - { - player.setActiveHand(hand); - return ActionResult.resultConsume(stack); - } - return ActionResult.resultPass(stack); - } - - - @Override - public ItemStack onItemUseFinish(ItemStack stack, World worldIn, LivingEntity entityLiving) - { - - PlayerEntity playerentity = entityLiving instanceof PlayerEntity ? (PlayerEntity) entityLiving : null; - - if (!worldIn.isRemote) - { - SpiritwebCapability.get(entityLiving).ifPresent(iSpiritweb -> - { - SpiritwebCapability spiritweb = (SpiritwebCapability) iSpiritweb; - - //for each metal in the vial - - Map metalsInVial = getStoredMetalsMap(getContainedMetalsTag(stack)); - - metalsInVial.entrySet().stream().forEach(metalInfo -> - { - // MetalName x Value - Metals.MetalType metalType = Metals.MetalType.valueOf(metalInfo.getKey()).get(); - - //add to metal stored - spiritweb.METALS_INGESTED.put(metalType, spiritweb.METALS_INGESTED.get(metalType) + 9); // todo decide what value should be used for ingestion - }); - - iSpiritweb.syncToClients(null); - }); - } - - - if (playerentity == null || !playerentity.abilities.isCreativeMode) - { - if (stack.isEmpty()) - { - return new ItemStack(ItemsRegistry.METAL_VIAL.get()); - } - - if (playerentity != null) - { - if (stack.getCount() > 1) - { - //split 1 off the stack, if more than one - //drain that new stack - ItemStack splitStack = stack.split(1); - emptyMetals(splitStack); - - playerentity.addItemStackToInventory(splitStack); - } - else - { - emptyMetals(stack); - } - } - } - - return stack; - } - - public int containedMetalCount(ItemStack stack) - { - int count = 0; - int[] metalAmounts = CompoundNBTHelper.getIntArray(getContainedMetalsTag(stack), metal_amounts); - - for (int metalCount : metalAmounts) - count += metalCount; - - return count; - } - - public void addMetals(ItemStack stack, int metalID, int count) - { - //todo refactor this? seems so convoluted compared to what I'm used to - - //get and add - CompoundNBT nbt = getContainedMetalsTag(stack); - - Map sorted = getStoredMetalsMap(nbt); - - if (sorted.containsKey(metalID)) - { - count += sorted.get(metalID); - } - - sorted.put(metalID, count); - List keys = new ArrayList<>(sorted.keySet()); - List values = new ArrayList<>(sorted.values()); - - CompoundNBTHelper.setIntArray(nbt, metal_ids, keys); - CompoundNBTHelper.setIntArray(nbt, metal_amounts, values); - } - - private Map getStoredMetalsMap(CompoundNBT nbt) - { - int[] metalIDs = CompoundNBTHelper.getIntArray(nbt, metal_ids); - int[] metalAmounts = CompoundNBTHelper.getIntArray(nbt, metal_amounts); - - Map sorted = IntStream.range(0, metalIDs.length).boxed() - .collect(Collectors.toMap( - i -> metalIDs[i], i -> metalAmounts[i], - (i, j) -> i, LinkedHashMap::new)); - return sorted; - } - - public void emptyMetals(ItemStack stack) - { - CompoundNBT nbt = getContainedMetalsTag(stack); - nbt.remove(metal_ids); - nbt.remove(metal_amounts); - } - - @Override - public boolean showDurabilityBar(ItemStack stack) - { - return true; - } - - @Override - public double getDurabilityForDisplay(ItemStack stack) - { - return 1 - (containedMetalCount(stack) / MAX_METALS_COUNT); - } - - - @Override - @OnlyIn(Dist.CLIENT) - public void addInformation(ItemStack stack, World worldIn, List tooltip, ITooltipFlag flagIn) - { - Map sorted = getStoredMetalsMap(getContainedMetalsTag(stack)); - tooltip.add(TextHelper.createTranslatedText(CONTAINED_METALS)); - sorted.entrySet().stream().forEach(metalInfo -> - { - // MetalName x Value - String metalName = Metals.MetalType.valueOf(metalInfo.getKey()).get().name(); - - String metalTranslation = String.format("item.cosmere.%s_nugget", metalName.toLowerCase()); - tooltip.add(TextHelper.createTranslatedText(metalTranslation).appendSibling(TextHelper.createText(String.format(": x%s", metalInfo.getValue())))); - - }); - - tooltip.add(TextHelper.createText(String.format("%s / %s", containedMetalCount(stack), MAX_METALS_COUNT))); - - } -} diff --git a/src/main/java/leaf/cosmere/items/Metalmind.java b/src/main/java/leaf/cosmere/items/Metalmind.java deleted file mode 100644 index 1af5f9e1e..000000000 --- a/src/main/java/leaf/cosmere/items/Metalmind.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.items; - -import com.google.common.collect.LinkedHashMultimap; -import com.google.common.collect.Multimap; -import leaf.cosmere.constants.Metals; -import leaf.cosmere.utils.helpers.CompoundNBTHelper; -import leaf.cosmere.items.curio.IHemalurgicInfo; -import leaf.cosmere.manifestation.AManifestation; -import leaf.cosmere.registry.AttributesRegistry; -import leaf.cosmere.registry.ManifestationRegistry; -import net.minecraft.entity.ai.attributes.Attribute; -import net.minecraft.entity.ai.attributes.AttributeModifier; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.CompoundNBT; -import top.theillusivec4.curios.api.SlotContext; -import top.theillusivec4.curios.api.type.capability.ICurioItem; - -import java.util.UUID; - -public class Metalmind extends ChargeableMetalItem implements ICurioItem -{ - public Metalmind(Metals.MetalType metalType) - { - super(metalType); - } - - - /** - * generate new map of attributes for when used as a curio item. - */ - @Override - public Multimap getAttributeModifiers(SlotContext slotContext, UUID uuid, ItemStack stack) - { - Multimap attributeModifiers = LinkedHashMultimap.create(); - - Metals.MetalType metalType = getMetalType(); - if (stack.getItem() instanceof IHemalurgicInfo) - { - //add hemalurgic attributes, if any. - ((IHemalurgicInfo) (stack.getItem())).getHemalurgicAttributes(attributeModifiers, stack, metalType); - } - - //todo better nicrosil tracking. - if (metalType == Metals.MetalType.NICROSIL) - { - CompoundNBT nbt = stack.getOrCreateChildTag("StoredInvestiture"); - //for each power the user has access to - - for (AManifestation manifestation : ManifestationRegistry.MANIFESTATION_REGISTRY.get()) - { - String manifestationName = manifestation.getRegistryName().getPath(); - if (!AttributesRegistry.MANIFESTATION_STRENGTH_ATTRIBUTES.containsKey(manifestationName)) - { - continue; - } - - if (nbt.getBoolean(manifestationName)) - { - UUID someUUID = UUID.nameUUIDFromBytes((manifestationName + uuid.toString()).getBytes()); - attributeModifiers.put( - AttributesRegistry.MANIFESTATION_STRENGTH_ATTRIBUTES.get(manifestationName).get(), - new AttributeModifier( - someUUID, - manifestationName, - CompoundNBTHelper.getDouble( - nbt, - manifestationName, - 0), - AttributeModifier.Operation.ADDITION)); - - } - } - } - - return attributeModifiers; - } - - @Override - public void onEquip(SlotContext slotContext, ItemStack prevStack, ItemStack stack) - { - onEquipStatusChanged(slotContext, stack, true); - } - - @Override - public void onUnequip(SlotContext slotContext, ItemStack prevStack, ItemStack stack) - { - onEquipStatusChanged(slotContext, stack, false); - } - - protected void onEquipStatusChanged(SlotContext slotContext, ItemStack stack, boolean isEquipping) - { - } -} diff --git a/src/main/java/leaf/cosmere/items/ShardbladeItem.java b/src/main/java/leaf/cosmere/items/ShardbladeItem.java deleted file mode 100644 index 1db11c3c1..000000000 --- a/src/main/java/leaf/cosmere/items/ShardbladeItem.java +++ /dev/null @@ -1,22 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.items; - -import net.minecraft.item.IItemTier; -import net.minecraft.item.SwordItem; - -public class ShardbladeItem extends SwordItem -{ - public ShardbladeItem(IItemTier tier, int attackDamageIn, float attackSpeedIn, Properties builderIn) - { - super(tier, attackDamageIn, attackSpeedIn, builderIn); - } - - @Override - public boolean isImmuneToFire() - { - return true; - } -} diff --git a/src/main/java/leaf/cosmere/items/curio/BraceletMetalmind.java b/src/main/java/leaf/cosmere/items/curio/BraceletMetalmind.java deleted file mode 100644 index 6c3f1f06b..000000000 --- a/src/main/java/leaf/cosmere/items/curio/BraceletMetalmind.java +++ /dev/null @@ -1,116 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.items.curio; - -import com.mojang.blaze3d.matrix.*; -import com.mojang.blaze3d.vertex.*; -import leaf.cosmere.client.renderer.wearables.*; -import leaf.cosmere.constants.Metals; -import leaf.cosmere.items.Metalmind; -import net.minecraft.client.renderer.*; -import net.minecraft.client.renderer.entity.model.*; -import net.minecraft.client.renderer.texture.*; -import net.minecraft.entity.*; -import net.minecraft.item.*; -import net.minecraft.util.*; -import top.theillusivec4.curios.api.*; -import top.theillusivec4.curios.api.type.capability.*; - -import java.awt.*; -import java.util.*; - -public class BraceletMetalmind extends Metalmind -{ - public BraceletMetalmind(Metals.MetalType metalType) - { - super(metalType); - } - private static final ResourceLocation METAL_TEXTURE = new ResourceLocation("cosmere", "textures/block/metal_block.png"); - private Object model; - - @Override - public float getMaxChargeModifier() - { - return (6f / 9f); - } - - @Override - public boolean canEquip(String identifier, LivingEntity livingEntity, ItemStack stack) - { - //has to be a conscious decision to stab yourself - return true; - } - - @Override - public boolean canEquipFromUse(SlotContext slotContext, ItemStack stack) - { - //has to be a conscious decision to stab yourself - return true; - } - - @Override - public boolean canRender(String identifier, int index, LivingEntity livingEntity, ItemStack stack) - { - return true; - } - - @Override - public void render(String identifier, int index, MatrixStack matrixStack, - IRenderTypeBuffer renderTypeBuffer, int light, LivingEntity livingEntity, - float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, - float netHeadYaw, float headPitch, ItemStack stack) - { - //todo check if needed - // ICurio.RenderHelper.translateIfSneaking(matrixStack, livingEntity); - // ICurio.RenderHelper.rotateIfSneaking(matrixStack, livingEntity); - - if (!(this.model instanceof BraceletModel)) - { - //todo set bracelet position? - this.model = new BraceletModel<>(); - } - - BraceletModel bracelet = (BraceletModel) this.model; - - Optional slotTypePreset = SlotTypePreset.findPreset(identifier); - if (!slotTypePreset.isPresent()) - { - return; - } - - bracelet.renderMode = identifier; - bracelet.renderIndex = index; - - switch (slotTypePreset.get()) - { - case BODY: - case BACK: - case BRACELET: - case HANDS: - case RING: - case BELT: - case CHARM: - case CURIO: - //setup biped model stuff - bracelet.setLivingAnimations(livingEntity, limbSwing, limbSwingAmount, partialTicks); - bracelet.setRotationAngles(livingEntity, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch); - //and have it follow body rotations - ICurio.RenderHelper.followBodyRotations(livingEntity, (BipedModel) bracelet); - break; - } - - IVertexBuilder vertexBuilder = ItemRenderer.getBuffer(renderTypeBuffer, bracelet.getRenderType(METAL_TEXTURE), false, false); - - Color col = getMetalType().getColor(); - bracelet.render(matrixStack, - vertexBuilder, - light, - OverlayTexture.NO_OVERLAY, - col.getRed() / 255f, - col.getGreen() / 255f, - col.getBlue() / 255f, - 1.0F); - } -} diff --git a/src/main/java/leaf/cosmere/items/curio/HemalurgicSpikeItem.java b/src/main/java/leaf/cosmere/items/curio/HemalurgicSpikeItem.java deleted file mode 100644 index 0d8d35a73..000000000 --- a/src/main/java/leaf/cosmere/items/curio/HemalurgicSpikeItem.java +++ /dev/null @@ -1,344 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.items.curio; - -import com.google.common.collect.ImmutableMultimap; -import com.google.common.collect.Multimap; -import com.mojang.blaze3d.matrix.MatrixStack; -import com.mojang.blaze3d.vertex.IVertexBuilder; -import leaf.cosmere.Cosmere; -import leaf.cosmere.cap.entity.SpiritwebCapability; -import leaf.cosmere.client.renderer.wearables.SpikeModel; -import leaf.cosmere.constants.Metals; -import leaf.cosmere.items.Metalmind; -import leaf.cosmere.manifestation.AManifestation; -import leaf.cosmere.registry.ManifestationRegistry; -import leaf.cosmere.utils.helpers.CompoundNBTHelper; -import net.minecraft.client.renderer.IRenderTypeBuffer; -import net.minecraft.client.renderer.ItemRenderer; -import net.minecraft.client.renderer.entity.model.BipedModel; -import net.minecraft.client.renderer.texture.OverlayTexture; -import net.minecraft.client.util.ITooltipFlag; -import net.minecraft.enchantment.EnchantmentHelper; -import net.minecraft.enchantment.Enchantments; -import net.minecraft.entity.Entity; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.ai.attributes.Attribute; -import net.minecraft.entity.ai.attributes.AttributeModifier; -import net.minecraft.entity.ai.attributes.Attributes; -import net.minecraft.entity.item.ItemEntity; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.inventory.EquipmentSlotType; -import net.minecraft.item.ItemGroup; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.CompoundNBT; -import net.minecraft.util.DamageSource; -import net.minecraft.util.NonNullList; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.text.ITextComponent; -import net.minecraft.world.World; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; -import net.minecraftforge.event.entity.living.LivingDeathEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.common.Mod; -import top.theillusivec4.curios.api.SlotContext; -import top.theillusivec4.curios.api.SlotTypePreset; -import top.theillusivec4.curios.api.type.capability.ICurio; - -import javax.annotation.Nonnull; -import java.awt.*; -import java.util.List; -import java.util.Optional; -import java.util.UUID; - -@Mod.EventBusSubscriber(modid = Cosmere.MODID, bus = Mod.EventBusSubscriber.Bus.FORGE) -public class HemalurgicSpikeItem extends Metalmind implements IHemalurgicInfo -{ - private final float attackDamage; - /** - * Modifiers applied when the item is in the mainhand of a user. copied from sword item - */ - private final Multimap attributeModifiers; - - - public static final DamageSource SPIKED = (new DamageSource("spiked")).setDamageBypassesArmor().setDamageIsAbsolute(); - - //todo move - private static final ResourceLocation SPIKE_TEXTURE = new ResourceLocation("cosmere", "textures/block/metal_block.png"); - private Object model; - - public HemalurgicSpikeItem(Metals.MetalType metalType) - { - super(metalType); - - this.attackDamage = 2f + 1f;//tier.getAttackDamage(); - ImmutableMultimap.Builder builder = ImmutableMultimap.builder(); - builder.put(Attributes.ATTACK_DAMAGE, new AttributeModifier(ATTACK_DAMAGE_MODIFIER, "Weapon modifier", (double) this.attackDamage, AttributeModifier.Operation.ADDITION)); - builder.put(Attributes.ATTACK_SPEED, new AttributeModifier(ATTACK_SPEED_MODIFIER, "Weapon modifier", (double) -2.4f, AttributeModifier.Operation.ADDITION)); - this.attributeModifiers = builder.build(); - } - - @Override - public boolean canUnequip(String identifier, LivingEntity livingEntity, ItemStack stack) - { - boolean hasBindingCurse = EnchantmentHelper.hasBindingCurse(stack); - boolean isPlayer = livingEntity instanceof PlayerEntity; - - return (!hasBindingCurse || (isPlayer && ((PlayerEntity) livingEntity).isCreative())); - } - - @Override - public float getMaxChargeModifier() - { - return (2f / 9f); - } - - @Override - public void fillItemGroup(@Nonnull ItemGroup tab, @Nonnull NonNullList stacks) - { - if (isInGroup(tab)) - { - ItemStack stack = new ItemStack(this); - stack.addEnchantment(Enchantments.BINDING_CURSE, 1); - stacks.add(stack); - - if (getMetalType().hasFeruchemicalEffect()) - { - ItemStack fullPower = new ItemStack(this); - fullPower.addEnchantment(Enchantments.BINDING_CURSE, 1); - setCharge(fullPower, getMaxCharge(fullPower)); - stacks.add(fullPower); - } - - if (this.getMetalType() == Metals.MetalType.LERASIUM) - { - ItemStack bound = new ItemStack(this); - bound.addEnchantment(Enchantments.BINDING_CURSE, 1); - setHemalurgicIdentity(bound, UUID.randomUUID()); - CompoundNBT hemalurgicInfo = getHemalurgicInfo(bound); - for (AManifestation manifestation : ManifestationRegistry.MANIFESTATION_REGISTRY.get()) - { - CompoundNBTHelper.setBoolean(hemalurgicInfo, manifestation.getRegistryName().getPath(), true); - } - CompoundNBTHelper.setBoolean(hemalurgicInfo, "hasHemalurgicPower", true); - - stacks.add(bound); - } - } - } - - @Override - public void onCreated(ItemStack stack, World worldIn, PlayerEntity playerIn) - { - stack.addEnchantment(Enchantments.BINDING_CURSE, 1); - } - - //todo hemalurgic decay - //https://wob.coppermind.net/events/332/#e9534 - private void addDecay(ItemStack stack) - { - - } - - @Override - public void inventoryTick(ItemStack stack, World worldIn, Entity entityIn, int itemSlot, boolean isSelected) - { - super.inventoryTick(stack, worldIn, entityIn, itemSlot, isSelected); - - //todo //add decay - - //add decay if not equipped - { - // unless its in a jar? - } - } - - @Override - public boolean onEntityItemUpdate(ItemStack stack, ItemEntity entity) - { - //todo //add decay - - - return false; - } - - - @Override - @OnlyIn(Dist.CLIENT) - public void addInformation(ItemStack stack, World worldIn, List tooltip, ITooltipFlag flagIn) - { - super.addInformation(stack, worldIn, tooltip, flagIn); - - - // no extra info if there isn't any - if (getHemalurgicIdentity(stack) == null) - { - return; - } - - - //stolen identities listed? - - //extra investiture powers added - addInvestitureInformation(stack, tooltip); - - //etc? - - //don't need to do the attributes, since thats covered by curio - } - - @SubscribeEvent - public static void onEntityDeath(LivingDeathEvent event) - { - if (event.getSource().getTrueSource() instanceof PlayerEntity) - { - PlayerEntity playerEntity = (PlayerEntity) event.getSource().getTrueSource(); - SpiritwebCapability.get(playerEntity).ifPresent(iSpiritweb -> - { - ItemStack itemstack = playerEntity.getHeldItemMainhand(); - if (itemstack.getItem() instanceof HemalurgicSpikeItem) - { - //entity was killed by a spike - HemalurgicSpikeItem spikeItem = (HemalurgicSpikeItem) itemstack.getItem(); - //pass in killed entity for the item to figure out what to do - spikeItem.killedEntity(itemstack, event.getEntityLiving()); - } - - }); - } - } - - public void killedEntity(ItemStack stack, LivingEntity entityKilled) - { - //https://wob.coppermind.net/events/332/#e9569 - - // do nothing if an identity exists and doesn't match - if (!matchHemalurgicIdentity(stack, entityKilled.getUniqueID())) - { - return; - } - - // ensure we set the stolen identity - stealFromSpiritweb(stack, getMetalType(), entityKilled); - } - - @Override - public boolean hasEffect(@Nonnull ItemStack stack) - { - return super.hasEffect(stack) || hemalurgicIdentityExists(stack); - } - - /** - * Gets a map of item attribute modifiers, used by damage when used as melee weapon. - */ - @Override - public Multimap getAttributeModifiers(EquipmentSlotType equipmentSlot) - { - return equipmentSlot == EquipmentSlotType.MAINHAND ? this.attributeModifiers - : super.getAttributeModifiers(equipmentSlot); - } - - @Override - public boolean canEquip(String identifier, LivingEntity livingEntity, ItemStack stack) - { - //has to be a conscious decision to stab yourself - return true; - } - - @Override - public boolean canEquipFromUse(SlotContext slotContext, ItemStack stack) - { - //has to be a conscious decision to stab yourself - return true; - } - - @Override - protected void onEquipStatusChanged(SlotContext slotContext, ItemStack stack, boolean isEquipping) - { - //first do normal equip status changed, in case this spike metalmind has nicrosil powers stored - super.onEquipStatusChanged(slotContext, stack, isEquipping); - - //then do hemalurgy spike logic - //hurt the user - //spiritweb attributes are handled in metalmind - slotContext.getWearer().attackEntityFrom(SPIKED, 4); - } - - @Override - public boolean canRender(String identifier, int index, LivingEntity livingEntity, ItemStack stack) - { - return true; - } - - @Override - public void render(String identifier, int index, MatrixStack matrixStack, - IRenderTypeBuffer renderTypeBuffer, int light, LivingEntity livingEntity, - float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, - float netHeadYaw, float headPitch, ItemStack stack) - { - //todo check if needed - // ICurio.RenderHelper.translateIfSneaking(matrixStack, livingEntity); - // ICurio.RenderHelper.rotateIfSneaking(matrixStack, livingEntity); - - if (!(this.model instanceof SpikeModel)) - { - //todo set spike position? - this.model = new SpikeModel<>(); - } - - SpikeModel spike = (SpikeModel) this.model; - - Optional slotTypePreset = SlotTypePreset.findPreset(identifier); - if (!slotTypePreset.isPresent()) - { - return; - } - - spike.renderMode = identifier; - spike.renderIndex = index; - - switch (slotTypePreset.get()) - { - - case HEAD: - //then set up the custom/non biped model stuff - //this could have been biped I guess, but was a good reference - ICurio.RenderHelper.followHeadRotations(livingEntity, spike.leftEyeSpike); - ICurio.RenderHelper.followHeadRotations(livingEntity, spike.rightEyeSpike); - break; - case NECKLACE: - ICurio.RenderHelper.followHeadRotations(livingEntity, spike.neckSpike); - break; - case BODY: - case BACK: - case BRACELET: - case HANDS: - case RING: - case BELT: - case CHARM: - case CURIO: - //setup biped model stuff - spike.setLivingAnimations(livingEntity, limbSwing, limbSwingAmount, partialTicks); - spike.setRotationAngles(livingEntity, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch); - //and have it follow body rotations - ICurio.RenderHelper.followBodyRotations(livingEntity, (BipedModel) spike); - break; - } - - - IVertexBuilder vertexBuilder = ItemRenderer.getBuffer(renderTypeBuffer, spike.getRenderType(SPIKE_TEXTURE), false, false); - - Color col = getMetalType().getColor(); - spike.render(matrixStack, - vertexBuilder, - light, - OverlayTexture.NO_OVERLAY, - col.getRed() / 255f, - col.getGreen() / 255f, - col.getBlue() / 255f, - 1.0F); - } -} diff --git a/src/main/java/leaf/cosmere/items/curio/IHemalurgicInfo.java b/src/main/java/leaf/cosmere/items/curio/IHemalurgicInfo.java deleted file mode 100644 index 7d2c6a393..000000000 --- a/src/main/java/leaf/cosmere/items/curio/IHemalurgicInfo.java +++ /dev/null @@ -1,313 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.items.curio; - -import com.google.common.collect.Multimap; -import leaf.cosmere.cap.entity.SpiritwebCapability; -import leaf.cosmere.constants.Manifestations; -import leaf.cosmere.constants.Metals; -import leaf.cosmere.manifestation.AManifestation; -import leaf.cosmere.registry.AttributesRegistry; -import leaf.cosmere.registry.ManifestationRegistry; -import leaf.cosmere.utils.helpers.CompoundNBTHelper; -import leaf.cosmere.utils.helpers.StackNBTHelper; -import leaf.cosmere.utils.helpers.TextHelper; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.ai.attributes.Attribute; -import net.minecraft.entity.ai.attributes.AttributeModifier; -import net.minecraft.entity.ai.attributes.Attributes; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.CompoundNBT; -import net.minecraft.util.text.ITextComponent; -import net.minecraftforge.registries.IForgeRegistry; - -import java.util.*; - -import static leaf.cosmere.constants.Constants.Strings.CONTAINED_POWERS_FOUND; - -public interface IHemalurgicInfo -{ - String stolen_identity_tag = "stolen_identity_tag"; - List whiteList = new ArrayList(4); - - default boolean matchHemalurgicIdentity(ItemStack stack, UUID uniqueID) - { - if (!hemalurgicIdentityExists(stack)) - { - return true; - } - - return StackNBTHelper.getUuid(stack, stolen_identity_tag).compareTo(uniqueID) == 0; - } - - default boolean hemalurgicIdentityExists(ItemStack stack) - { - return StackNBTHelper.verifyExistance(stack, stolen_identity_tag); - } - - default void setHemalurgicIdentity(ItemStack stack, UUID uniqueID) - { - StackNBTHelper.setUuid(stack, stolen_identity_tag, uniqueID); - - } - - default UUID getHemalurgicIdentity(ItemStack stack) - { - return StackNBTHelper.getUuid(stack, stolen_identity_tag); - } - - default CompoundNBT getHemalurgicInfo(ItemStack stack) - { - return stack.getOrCreateChildTag("hemalurgy"); - } - - default void stealFromSpiritweb(ItemStack stack, Metals.MetalType spikeMetalType, LivingEntity entityKilled) - { - //todo - boolean isPlayerEntity = (entityKilled instanceof PlayerEntity); - boolean saveIdentity = false; - //we should probably check a config to see if pvp real stealing of attributes is wanted. - - CompoundNBT hemalurgyInfo = getHemalurgicInfo(stack); - - - switch (spikeMetalType) - { - case IRON: - //steals physical strength - double strengthCurrent = CompoundNBTHelper.getDouble(hemalurgyInfo, spikeMetalType.name(), 0); - //don't steal modified values, only base value - //todo decide how much strength is reasonable to steal and how much goes to waste - //currently will try 70% - double strengthToAdd = entityKilled.getAttributeManager().getAttributeBaseValue(Attributes.ATTACK_DAMAGE) * 0.7D; - CompoundNBTHelper.setDouble(hemalurgyInfo, spikeMetalType.name(), strengthCurrent + strengthToAdd); - saveIdentity = true; - break; - case TIN: - //Steals senses - //todo figure out what that means in minecraft - break; - case COPPER: - //Steals mental fortitude, memory, and intelligence - //todo increase base xp gain? - break; - case ZINC: - //Steals emotional fortitude - //todo figure out what that means - break; - case ALUMINUM: - //Removes all powers - //... ooops? - //maybe its an item you can equip on others that they then have to remove? - break; - case DURALUMIN: - //Steals Connection/Identity - break; - case CHROMIUM: - //Might steal destiny - //so we could add some permanent luck? - break; - case NICROSIL: - //Steals Investiture - //todo figure out what that means - //probably in the breaths/stormlight - break; - } - - List manifestationsFound = new ArrayList<>(); - SpiritwebCapability.get(entityKilled).ifPresent(cap -> - { - //only grab innate manifestations, not ones added by hemalurgy - manifestationsFound.addAll(cap.getAvailableManifestations(true)); - - }); - - if (manifestationsFound.size() > 0) - { - whiteList.clear(); - - //The type of thing you can steal is dependant on the type of metal. - Collection hemalurgyStealWhitelist = spikeMetalType.getHemalurgyStealWhitelist(); - if (hemalurgyStealWhitelist != null) - { - whiteList.addAll(hemalurgyStealWhitelist); - } - - switch (spikeMetalType) - { - case STEEL: - case BRONZE: - case CADMIUM: - case ELECTRUM: - saveIdentity = tryStealScadrialManifestation(hemalurgyInfo, manifestationsFound, whiteList, Manifestations.ManifestationTypes.ALLOMANCY); - break; - case PEWTER: - case BRASS: - case BENDALLOY: - case GOLD: - saveIdentity = tryStealScadrialManifestation(hemalurgyInfo, manifestationsFound, whiteList, Manifestations.ManifestationTypes.FERUCHEMY); - break; - //The god metals don't follow the 'normal' rules. - //Todo decide if they can steal powers from other investiture types or just scadrial related - case ATIUM: - //Steals any one power - //todo decide if we just pick a random power - whiteList.addAll(Arrays.asList(Metals.MetalType.values())); - //then try steal it - //todo decide if prefer allomancy over feruchemy? - if (!tryStealScadrialManifestation(hemalurgyInfo, manifestationsFound, whiteList, Manifestations.ManifestationTypes.ALLOMANCY)) - { - saveIdentity = tryStealScadrialManifestation(hemalurgyInfo, manifestationsFound, whiteList, Manifestations.ManifestationTypes.FERUCHEMY); - } - else - { - saveIdentity = true; - } - break; - case LERASIUM: - for (AManifestation manifestation : manifestationsFound) - { - CompoundNBTHelper.setBoolean(hemalurgyInfo, manifestation.getRegistryName().getPath(), true); - } - saveIdentity = true; - break; - } - } - - if (saveIdentity) - { - setHemalurgicIdentity(stack, entityKilled.getUniqueID()); - CompoundNBTHelper.setBoolean(hemalurgyInfo, "hasHemalurgicPower", true); - } - } - - default boolean tryStealScadrialManifestation( - CompoundNBT hemalurgyInfo, - List manifestationsFound, - List whiteList, - Manifestations.ManifestationTypes powerType) - { - Collections.shuffle(whiteList); - - //then check the entity has those types to steal - for (Metals.MetalType typeToTrySteal : whiteList) - { - int i = manifestationsFound.indexOf(powerType.getManifestation(typeToTrySteal.getID())); - //if it exists in the list - if (i >= 0) - { - //then we've found something to steal! - CompoundNBTHelper.setBoolean(hemalurgyInfo, manifestationsFound.get(i).getRegistryName().getPath(), true); - CompoundNBTHelper.setBoolean(hemalurgyInfo, "hasHemalurgicPower", true); - return true; - } - } - - return false; - } - - default Multimap getHemalurgicAttributes(Multimap attributeModifiers, ItemStack stack, Metals.MetalType metalType) - { - CompoundNBT hemalurgyInfo = getHemalurgicInfo(stack); - UUID hemalurgicIdentity = getHemalurgicIdentity(stack); - - if (hemalurgicIdentity == null) - { - return attributeModifiers; - } - - switch (metalType) - { - case IRON: - - attributeModifiers.put( - Attributes.ATTACK_DAMAGE, - new AttributeModifier( - hemalurgicIdentity, - "Hemalurgic " + metalType.name(), - (double) CompoundNBTHelper.getDouble( - hemalurgyInfo, - metalType.name(), - 0), - AttributeModifier.Operation.ADDITION)); - - break; - case TIN: - //Steals senses - //todo figure out what that means in minecraft - break; - case ZINC: - //Steals emotional fortitude - //todo figure out what that means - break; - case COPPER: - //Steals mental fortitude, memory, and intelligence - //todo increase base xp gain? - break; - case CHROMIUM: - //Might steal destiny - //so we could add some permanent luck? - break; - case NICROSIL: - //Steals Investiture - //todo figure out what that means - break; - } - - - for (AManifestation manifestation : ManifestationRegistry.MANIFESTATION_REGISTRY.get()) - { - String path = manifestation.getRegistryName().getPath(); - - if (CompoundNBTHelper.getBoolean(hemalurgyInfo, path, false)) - { - if (!AttributesRegistry.MANIFESTATION_STRENGTH_ATTRIBUTES.containsKey(path)) - { - continue; - } - - attributeModifiers.put( - AttributesRegistry.MANIFESTATION_STRENGTH_ATTRIBUTES.get(path).get(), - new AttributeModifier( - hemalurgicIdentity, - String.format("Hemalurgic-%s: %s", path, hemalurgicIdentity.toString()), - 6, - AttributeModifier.Operation.ADDITION)); - } - } - - - return attributeModifiers; - } - - - default void addInvestitureInformation(ItemStack stack, List tooltip) - { - if (!hemalurgicIdentityExists(stack)) - { - return; - } - - tooltip.add(TextHelper.createTranslatedText(CONTAINED_POWERS_FOUND)); - IForgeRegistry manifestations = ManifestationRegistry.MANIFESTATION_REGISTRY.get(); - for (AManifestation manifestation : manifestations) - { - // if this spike has that power - if (hasHemalurgicPower(stack, manifestation)) - { - //then grant it - tooltip.add(manifestation.translation()); - } - } - } - - default boolean hasHemalurgicPower(ItemStack stack, AManifestation manifestation) - { - return CompoundNBTHelper.getBoolean(getHemalurgicInfo(stack), manifestation.getRegistryName().getPath(), false); - } - -} - diff --git a/src/main/java/leaf/cosmere/items/curio/NecklaceMetalmind.java b/src/main/java/leaf/cosmere/items/curio/NecklaceMetalmind.java deleted file mode 100644 index 2a6f4b925..000000000 --- a/src/main/java/leaf/cosmere/items/curio/NecklaceMetalmind.java +++ /dev/null @@ -1,22 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.items.curio; - -import leaf.cosmere.constants.Metals; -import leaf.cosmere.items.Metalmind; - -public class NecklaceMetalmind extends Metalmind -{ - public NecklaceMetalmind(Metals.MetalType metalType) - { - super(metalType); - } - - @Override - public float getMaxChargeModifier() - { - return (4f / 9f); - } -} diff --git a/src/main/java/leaf/cosmere/items/curio/RingMetalmind.java b/src/main/java/leaf/cosmere/items/curio/RingMetalmind.java deleted file mode 100644 index 11a161bf7..000000000 --- a/src/main/java/leaf/cosmere/items/curio/RingMetalmind.java +++ /dev/null @@ -1,24 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.items.curio; - -import leaf.cosmere.constants.Metals; -import leaf.cosmere.items.Metalmind; - -public class RingMetalmind extends Metalmind -{ - public RingMetalmind(Metals.MetalType metalType) - { - super(metalType); - } - - - @Override - public float getMaxChargeModifier() - { - return (3f / 9f); - } - -} diff --git a/src/main/java/leaf/cosmere/manifestation/AManifestation.java b/src/main/java/leaf/cosmere/manifestation/AManifestation.java deleted file mode 100644 index d07485a43..000000000 --- a/src/main/java/leaf/cosmere/manifestation/AManifestation.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.manifestation; - -import leaf.cosmere.cap.entity.ISpiritweb; -import leaf.cosmere.constants.Manifestations; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.text.TranslationTextComponent; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; -import net.minecraftforge.client.event.RenderWorldLastEvent; -import net.minecraftforge.registries.ForgeRegistryEntry; - -public abstract class AManifestation extends ForgeRegistryEntry -{ - - public abstract Manifestations.ManifestationTypes getManifestationType(); - - public abstract int getPowerID(); - - public abstract void onModeChange(ISpiritweb data); - - public abstract int modeMax(ISpiritweb data); - - public abstract int modeMin(ISpiritweb data); - - public abstract boolean modeWraps(ISpiritweb data); - - public abstract void tick(ISpiritweb data); - - public TranslationTextComponent translation() - { - ResourceLocation regName = getRegistryName(); - return new TranslationTextComponent("manifestation." + regName.getNamespace() + "." + regName.getPath()); - } - - public TranslationTextComponent description() - { - ResourceLocation regName = getRegistryName(); - return new TranslationTextComponent("manifestation." + regName.getNamespace() + "." + regName.getPath() + ".description"); - } - - @OnlyIn(Dist.CLIENT) - public void renderWorldEffects(RenderWorldLastEvent event, ISpiritweb cap){} - -} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/manifestation/ManifestationBase.java b/src/main/java/leaf/cosmere/manifestation/ManifestationBase.java deleted file mode 100644 index fb76054b8..000000000 --- a/src/main/java/leaf/cosmere/manifestation/ManifestationBase.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - * - * Special thank you to the Suff and their mod Regeneration. - * That mod taught me how to add ticking capabilities to entities and have them sync - * https://github.com/WhoCraft/Regeneration - * - */ - -package leaf.cosmere.manifestation; - -import leaf.cosmere.cap.entity.ISpiritweb; -import leaf.cosmere.constants.Manifestations; - -//Manifestation of investiture -public class ManifestationBase extends AManifestation -{ - final protected Manifestations.ManifestationTypes manifestationType; - final protected int color; - - public ManifestationBase(Manifestations.ManifestationTypes manifestationType, int color) - { - this.manifestationType = manifestationType; - this.color = color; - } - - @Override - public Manifestations.ManifestationTypes getManifestationType() - { - return manifestationType; - } - - @Override - public int getPowerID() - { - return 0; - } - - @Override - public void onModeChange(ISpiritweb data) - { - - } - - @Override - public int modeMax(ISpiritweb data) - { - return 0; - } - - @Override - public int modeMin(ISpiritweb data) - { - return 0; - } - - @Override - public boolean modeWraps(ISpiritweb data) - { - return false; - } - - @Override - public void tick(ISpiritweb data) - { - - } -} diff --git a/src/main/java/leaf/cosmere/manifestation/allomancy/AllomancyAluminum.java b/src/main/java/leaf/cosmere/manifestation/allomancy/AllomancyAluminum.java deleted file mode 100644 index 47d550c56..000000000 --- a/src/main/java/leaf/cosmere/manifestation/allomancy/AllomancyAluminum.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.manifestation.allomancy; - -import leaf.cosmere.cap.entity.ISpiritweb; -import leaf.cosmere.constants.Metals; - -public class AllomancyAluminum extends AllomancyBase -{ - public AllomancyAluminum(Metals.MetalType metalType) - { - super(metalType); - } - - @Override - protected void performEffect(ISpiritweb data) - { - //passive active ability, if any - { - //drain all metals - for (Metals.MetalType metalType : Metals.MetalType.values()) - { - int ingestedMetalAmount = data.getIngestedMetal(metalType); - if (ingestedMetalAmount > 5) - { - data.adjustIngestedMetal(metalType, ingestedMetalAmount / 2, true); - } - else - { - data.adjustIngestedMetal(metalType, ingestedMetalAmount, true); - } - } - - } - } - - -} diff --git a/src/main/java/leaf/cosmere/manifestation/allomancy/AllomancyBase.java b/src/main/java/leaf/cosmere/manifestation/allomancy/AllomancyBase.java deleted file mode 100644 index cb9891609..000000000 --- a/src/main/java/leaf/cosmere/manifestation/allomancy/AllomancyBase.java +++ /dev/null @@ -1,155 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.manifestation.allomancy; - -import leaf.cosmere.cap.entity.ISpiritweb; -import leaf.cosmere.charge.MetalmindChargeHelper; -import leaf.cosmere.constants.Manifestations; -import leaf.cosmere.constants.Metals; -import leaf.cosmere.items.IHasMetalType; -import leaf.cosmere.manifestation.ManifestationBase; -import leaf.cosmere.registry.AttributesRegistry; -import leaf.cosmere.registry.KeybindingRegistry; -import net.minecraft.client.settings.KeyBinding; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.ai.attributes.Attribute; -import net.minecraft.entity.ai.attributes.ModifiableAttributeInstance; -import net.minecraft.util.math.*; -import net.minecraftforge.fml.RegistryObject; - -public class AllomancyBase extends ManifestationBase implements IHasMetalType -{ - private final Metals.MetalType metalType; - - public AllomancyBase(Metals.MetalType metalType) - { - super(Manifestations.ManifestationTypes.ALLOMANCY, metalType.getColorValue()); - this.metalType = metalType; - } - - - @Override - public int getPowerID() - { - return metalType.getID(); - } - - @Override - public boolean modeWraps(ISpiritweb data) - { - return true; - } - - @Override - public Metals.MetalType getMetalType() - { - return this.metalType; - } - - //active or not active - @Override - public int modeMax(ISpiritweb data) - { - return 3; - } - - @Override - public int modeMin(ISpiritweb data) - { - return 0; - } - - - @Override - public void tick(ISpiritweb data) - { - int mode = data.getMode(manifestationType, metalType.getID()); - - //don't check every tick. - LivingEntity livingEntity = data.getLiving(); - - boolean isActiveTick = livingEntity.ticksExisted % 20 == 0; - - - if (mode <= 0) - { - return; - } - - //make sure the user can afford the cost of burning this metal - while (mode > 0) - { - //if not then try reduce the amount that they are burning - - if (!data.adjustIngestedMetal(metalType, -mode, isActiveTick)) - { - mode--; - //set that mode back to the capability. - data.setMode(manifestationType, metalType.getID(), mode); - //if it hits zero then return out - if (mode == 0) - { - return; - } - - //try again at a lower burn rate. - continue; - } - break; - } - - //if we get to this point, we are in an active burn state. - //check for compound. - int feruchemyMode = data.hasManifestation(Manifestations.ManifestationTypes.FERUCHEMY, getPowerID()) - ? data.getMode(Manifestations.ManifestationTypes.FERUCHEMY, metalType.getID()) - : 0; - - //feruchemy power exists and is active - if (feruchemyMode != 0 && isActiveTick) - { - if (MetalmindChargeHelper.adjustMetalmindChargeExact(data, metalType, (-5) * (mode), true, true)) - { - //compound successful - } - } - - performEffect(data); - } - - protected void performEffect(ISpiritweb data) { } - - protected KeyBinding getKeyBinding() - { - if (getMetalType().isPullMetal()) - { - return KeybindingRegistry.ALLOMANCY_PULL; - } - else if (getMetalType().isPushMetal()) - { - return KeybindingRegistry.ALLOMANCY_PUSH; - } - - return null; - } - - protected double getAllomanticStrength(ISpiritweb cap) - { - RegistryObject mistingAttribute = AttributesRegistry.MANIFESTATION_STRENGTH_ATTRIBUTES.get(metalType.getMistingName()); - ModifiableAttributeInstance attribute = cap.getLiving().getAttribute(mistingAttribute.get()); - return attribute != null ? attribute.getValue() : 0; - } - - - public int getRange(ISpiritweb cap) - { - if (!cap.manifestationActive(Manifestations.ManifestationTypes.ALLOMANCY, getPowerID())) - return 0; - - //get allomantic strength - double allomanticStrength = getAllomanticStrength(cap); - return MathHelper.floor(allomanticStrength * cap.getMode(Manifestations.ManifestationTypes.ALLOMANCY, getPowerID())); - - } -} diff --git a/src/main/java/leaf/cosmere/manifestation/allomancy/AllomancyBendalloy.java b/src/main/java/leaf/cosmere/manifestation/allomancy/AllomancyBendalloy.java deleted file mode 100644 index 4cc214eda..000000000 --- a/src/main/java/leaf/cosmere/manifestation/allomancy/AllomancyBendalloy.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.manifestation.allomancy; - -import leaf.cosmere.cap.entity.ISpiritweb; -import leaf.cosmere.constants.Manifestations; -import leaf.cosmere.constants.Metals; -import net.minecraft.block.BlockState; -import net.minecraft.entity.LivingEntity; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -import net.minecraft.world.server.ServerWorld; - -import java.util.List; - -import static leaf.cosmere.utils.helpers.EntityHelper.getLivingEntitiesInRange; - -public class AllomancyBendalloy extends AllomancyBase -{ - public AllomancyBendalloy(Metals.MetalType metalType) - { - super(metalType); - } - - @Override - protected void performEffect(ISpiritweb data) - { - //Speeds Up Time - { - //tick entities around user - if (data.getLiving().ticksExisted % 6 == 0) - { - int range = 3 * data.getMode(Manifestations.ManifestationTypes.ALLOMANCY, getPowerID()); - int x = (int) (data.getLiving().getPosX() + (data.getLiving().getPosXRandom(range * 2 + 1) - range)); - int z = (int) (data.getLiving().getPosZ() + (data.getLiving().getPosZRandom(range * 2 + 1) - range)); - - for (int i = 4; i > -2; i--) - { - int y = data.getLiving().getPosition().getY() + i; - BlockPos pos = new BlockPos(x, y, z); - World world = data.getLiving().world; - - if (world.isAirBlock(pos)) - { - continue; - } - - BlockState state = world.getBlockState(pos); - state.randomTick((ServerWorld) world, pos, world.rand); - - break; - } - - //todo tick living entities? - - List entitiesToCheck = getLivingEntitiesInRange(data.getLiving(), range, true); - - for (LivingEntity e : entitiesToCheck) - { - e.livingTick(); - } - } - } - - - } - - -} diff --git a/src/main/java/leaf/cosmere/manifestation/allomancy/AllomancyBrass.java b/src/main/java/leaf/cosmere/manifestation/allomancy/AllomancyBrass.java deleted file mode 100644 index fbbf28dcf..000000000 --- a/src/main/java/leaf/cosmere/manifestation/allomancy/AllomancyBrass.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.manifestation.allomancy; - -import leaf.cosmere.cap.entity.ISpiritweb; -import leaf.cosmere.constants.Metals; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.MobEntity; - -import java.util.List; - -import static leaf.cosmere.utils.helpers.EntityHelper.getLivingEntitiesInRange; - -public class AllomancyBrass extends AllomancyBase -{ - public AllomancyBrass(Metals.MetalType metalType) - { - super(metalType); - } - - //Dampens Emotions - @Override - protected void performEffect(ISpiritweb data) - { - int mode = data.getMode(manifestationType, getMetalType().getID()); - - //todo, replace x * mode with config based value - double allomanticStrength = getAllomanticStrength(data); - - int range = (int) (allomanticStrength * mode); - - List entitiesToAffect = getLivingEntitiesInRange(data.getLiving(), range, true); - - for (LivingEntity e : entitiesToAffect) - { - if (e instanceof MobEntity) - { - MobEntity mob = (MobEntity) e; - mob.setNoAI(mode == 3 && allomanticStrength > 15); - - switch (mode) - { - case 3: - mob.setAttackTarget(null); - case 2: - mob.setAggroed(false); - case 1: - default: - //stop angry targets from attacking things - e.setRevengeTarget(null); - - } - } - } - } -} diff --git a/src/main/java/leaf/cosmere/manifestation/allomancy/AllomancyBronze.java b/src/main/java/leaf/cosmere/manifestation/allomancy/AllomancyBronze.java deleted file mode 100644 index 1ccff073e..000000000 --- a/src/main/java/leaf/cosmere/manifestation/allomancy/AllomancyBronze.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.manifestation.allomancy; - -import leaf.cosmere.cap.entity.ISpiritweb; -import leaf.cosmere.cap.entity.SpiritwebCapability; -import leaf.cosmere.constants.Manifestations; -import leaf.cosmere.constants.Metals; -import leaf.cosmere.registry.*; -import leaf.cosmere.utils.helpers.VectorHelper; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.particles.ParticleTypes; -import net.minecraft.potion.*; -import net.minecraft.state.properties.NoteBlockInstrument; -import net.minecraft.util.SoundCategory; -import net.minecraft.util.math.BlockPos; - -import java.util.List; - -import static leaf.cosmere.utils.helpers.EntityHelper.getLivingEntitiesInRange; - -public class AllomancyBronze extends AllomancyBase -{ - public AllomancyBronze(Metals.MetalType metalType) - { - super(metalType); - } - - @Override - protected void performEffect(ISpiritweb data) - { - LivingEntity livingEntity = data.getLiving(); - boolean isActiveTick = livingEntity.ticksExisted % 20 == 0; - //Detects Allomantic Pulses - - //passive active ability, if any - if (isActiveTick) - { - int distance = getRange(data); - List entitiesToCheckForAllomancy = getLivingEntitiesInRange(livingEntity, distance, false); - - for (LivingEntity e : entitiesToCheckForAllomancy) - { - EffectInstance copperEffect = e.getActivePotionEffect(EffectsRegistry.ALLOMANTIC_COPPER.get()); - if (copperEffect != null && copperEffect.getDuration() > 0) - { - //skip clouded entities. - continue; - } - - SpiritwebCapability.get(e).ifPresent(iSpiritweb -> - { - //check if any allomantic powers are active - for (int i = 0; i < 16; i++) - { - if (iSpiritweb.manifestationActive(Manifestations.ManifestationTypes.ALLOMANCY, i)) - { - //found one - - //todo play thump sound - //get the position between the user and the entity we found - - //end point minus start point, then normalize - BlockPos destinationPosition = e.getPosition(); - BlockPos startingPosition = livingEntity.getPosition(); - - BlockPos direction = new BlockPos(VectorHelper.Normalize(destinationPosition.subtract(startingPosition))); - - - //todo make this stuff only play for the user - e.world.playSound( - (PlayerEntity) null, - direction, - NoteBlockInstrument.BASEDRUM.getSound(), - SoundCategory.MASTER, - 3.0F, - 1); - - //todo visual cue? - //todo make this stuff only happen for the user - e.world.addParticle( - ParticleTypes.NOTE, - (double) direction.getX() + 0.5D, - (double) direction.getY() + 1.2D, - (double) direction.getZ() + 0.5D, - (double) i / 24.0D, - 0.0D, - 0.0D); - - break; - } - } - }); - } - } - } -} diff --git a/src/main/java/leaf/cosmere/manifestation/allomancy/AllomancyCadmium.java b/src/main/java/leaf/cosmere/manifestation/allomancy/AllomancyCadmium.java deleted file mode 100644 index 2d755b162..000000000 --- a/src/main/java/leaf/cosmere/manifestation/allomancy/AllomancyCadmium.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.manifestation.allomancy; - -import leaf.cosmere.cap.entity.ISpiritweb; -import leaf.cosmere.constants.Metals; -import leaf.cosmere.utils.helpers.EffectsHelper; -import net.minecraft.entity.LivingEntity; -import net.minecraft.potion.Effects; - -import java.util.List; - -import static leaf.cosmere.utils.helpers.EntityHelper.getLivingEntitiesInRange; - -public class AllomancyCadmium extends AllomancyBase -{ - public AllomancyCadmium(Metals.MetalType metalType) - { - super(metalType); - } - - @Override - protected void performEffect(ISpiritweb data) - { - LivingEntity livingEntity = data.getLiving(); - boolean isActiveTick = livingEntity.ticksExisted % 20 == 0; - - //Slows Down Time - if (isActiveTick) - { - int mode = data.getMode(manifestationType, getMetalType().getID()); - - int range = 5 * mode; - - List entitiesToAffect = getLivingEntitiesInRange(data.getLiving(), range, true); - - for (LivingEntity e : entitiesToAffect) - { - e.addPotionEffect(EffectsHelper.getNewEffect(Effects.SLOWNESS,mode)); - } - - //todo slow tile entities? not sure how to do that. bendalloy just calls tick more often. - } - } -} diff --git a/src/main/java/leaf/cosmere/manifestation/allomancy/AllomancyChromium.java b/src/main/java/leaf/cosmere/manifestation/allomancy/AllomancyChromium.java deleted file mode 100644 index c5b24efee..000000000 --- a/src/main/java/leaf/cosmere/manifestation/allomancy/AllomancyChromium.java +++ /dev/null @@ -1,103 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.manifestation.allomancy; - -import leaf.cosmere.cap.entity.ISpiritweb; -import leaf.cosmere.cap.entity.SpiritwebCapability; -import leaf.cosmere.constants.Metals; -import net.minecraft.entity.Entity; -import net.minecraft.entity.LivingEntity; -import net.minecraft.util.math.AxisAlignedBB; -import net.minecraft.util.math.vector.Vector3d; -import net.minecraft.world.World; - -import java.util.List; - -public class AllomancyChromium extends AllomancyBase -{ - public AllomancyChromium(Metals.MetalType metalType) - { - super(metalType); - } - - @Override - protected void performEffect(ISpiritweb data) - { - //Wipes Allomantic Reserves of Target - { - int range = data.getMode(manifestationType, getMetalType().getID()); - - LivingEntity living = data.getLiving(); - World world = living.world; - boolean isActiveTick = living.world.getGameTime() % 20 == 0; - if (!world.isRemote && isActiveTick) - { - //thank you to CyclopsMC and their repo EverlastingAbilities for their section on detecting enemies you are looking at - //https://github.com/CyclopsMC/EverlastingAbilities/blob/master-1.16/src/main/java/org/cyclops/everlastingabilities/ability/AbilityTypePowerStare.java - - double eyeHeight = living.getEyeHeight(); - Vector3d lookVec = living.getLookVec(); - Vector3d origin = new Vector3d(living.getPosX(), living.getPosY() + eyeHeight, living.getPosZ()); - Vector3d direction = origin.add(lookVec.x * range, lookVec.y * range, lookVec.z * range); - - List entitiesInRange = world.getEntitiesWithinAABBExcludingEntity(living, - living.getBoundingBox() - .grow( - lookVec.x * range, - lookVec.y * range, - lookVec.z * range) - .grow(range)); - - for (Entity e : entitiesInRange) - { - SpiritwebCapability.get((LivingEntity) e).ifPresent(iSpiritweb -> - { - Entity entity = null; - - float f10 = e.getCollisionBorderSize(); - AxisAlignedBB axisalignedbb = e.getBoundingBox().expand((double) f10, (double) f10, (double) f10); - Vector3d hitVec = axisalignedbb.rayTrace(origin, direction).orElse(null); - - if (axisalignedbb.contains(origin)) - { - entity = e; - } - else if (hitVec != null) - { - double distance = origin.distanceTo(hitVec); - if (distance < range || range == 0.0D) - { - if (e == living.getRidingEntity() && !living.canRiderInteract()) - { - if (range == 0.0D) - { - entity = e; - } - } - else - { - entity = e; - } - } - } - - if (entity != null) - { - for(Metals.MetalType metalType : Metals.MetalType.values()) - { - iSpiritweb.adjustIngestedMetal(metalType, 9, true); - } - } - }); - - } - } - } - - - } - - -} diff --git a/src/main/java/leaf/cosmere/manifestation/allomancy/AllomancyCopper.java b/src/main/java/leaf/cosmere/manifestation/allomancy/AllomancyCopper.java deleted file mode 100644 index dbd3f12ae..000000000 --- a/src/main/java/leaf/cosmere/manifestation/allomancy/AllomancyCopper.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.manifestation.allomancy; - -import leaf.cosmere.cap.entity.ISpiritweb; -import leaf.cosmere.constants.Metals; -import leaf.cosmere.utils.helpers.EffectsHelper; -import leaf.cosmere.registry.EffectsRegistry; -import net.minecraft.entity.LivingEntity; -import net.minecraft.potion.EffectInstance; - -import java.util.List; - -import static leaf.cosmere.utils.helpers.EntityHelper.getLivingEntitiesInRange; - -public class AllomancyCopper extends AllomancyBase -{ - public AllomancyCopper(Metals.MetalType metalType) - { - super(metalType); - } - - @Override - protected void performEffect(ISpiritweb data) - { - LivingEntity livingEntity = data.getLiving(); - boolean isActiveTick = livingEntity.ticksExisted % 20 == 0; - - //Hides Allomantic Pulses - if (isActiveTick) - { - int mode = data.getMode(manifestationType, getMetalType().getID()); - EffectInstance newEffect = EffectsHelper.getNewEffect(EffectsRegistry.ALLOMANTIC_COPPER.get(), mode - 1); - - List entitiesToApplyEffect = getLivingEntitiesInRange(livingEntity, 5, true); - - for (LivingEntity e : entitiesToApplyEffect) - { - e.addPotionEffect(newEffect); - } - } - } -} diff --git a/src/main/java/leaf/cosmere/manifestation/allomancy/AllomancyDuralumin.java b/src/main/java/leaf/cosmere/manifestation/allomancy/AllomancyDuralumin.java deleted file mode 100644 index 0f227d9d3..000000000 --- a/src/main/java/leaf/cosmere/manifestation/allomancy/AllomancyDuralumin.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.manifestation.allomancy; - -import leaf.cosmere.cap.entity.ISpiritweb; -import leaf.cosmere.constants.Metals; -import leaf.cosmere.utils.helpers.EffectsHelper; -import leaf.cosmere.registry.EffectsRegistry; -import net.minecraft.entity.LivingEntity; -import net.minecraft.potion.EffectInstance; -import net.minecraft.util.math.MathHelper; - -public class AllomancyDuralumin extends AllomancyBase -{ - public AllomancyDuralumin(Metals.MetalType metalType) - { - super(metalType); - } - - //Enhances Current Metals Burned - @Override - public void performEffect(ISpiritweb data) - { - LivingEntity livingEntity = data.getLiving(); - boolean isActiveTick = livingEntity.ticksExisted % 20 == 0; - - if (isActiveTick) - { - //apply the effect regardless, because duralumin is currently active. - EffectInstance newEffect = EffectsHelper.getNewEffect( - EffectsRegistry.ALLOMANCY_BOOST.get(), - MathHelper.floor(getAllomanticStrength(data)) - ); - data.getLiving().addPotionEffect(newEffect); - } - } -} diff --git a/src/main/java/leaf/cosmere/manifestation/allomancy/AllomancyElectrum.java b/src/main/java/leaf/cosmere/manifestation/allomancy/AllomancyElectrum.java deleted file mode 100644 index 63ea512d7..000000000 --- a/src/main/java/leaf/cosmere/manifestation/allomancy/AllomancyElectrum.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.manifestation.allomancy; - -import leaf.cosmere.cap.entity.ISpiritweb; -import leaf.cosmere.constants.Metals; - -public class AllomancyElectrum extends AllomancyBase -{ - public AllomancyElectrum(Metals.MetalType metalType) - { - super(metalType); - } - - @Override - protected void performEffect(ISpiritweb data) - { - //Reveals Your Future - { - //todo - } - } - //add client side stuff - -} diff --git a/src/main/java/leaf/cosmere/manifestation/allomancy/AllomancyGold.java b/src/main/java/leaf/cosmere/manifestation/allomancy/AllomancyGold.java deleted file mode 100644 index b5aa1c3f6..000000000 --- a/src/main/java/leaf/cosmere/manifestation/allomancy/AllomancyGold.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.manifestation.allomancy; - -import leaf.cosmere.cap.entity.ISpiritweb; -import leaf.cosmere.constants.Metals; - -public class AllomancyGold extends AllomancyBase -{ - public AllomancyGold(Metals.MetalType metalType) - { - super(metalType); - } - - @Override - protected void performEffect(ISpiritweb data) - { - //Reveals Your Past Self - { - //todo - } - } - //add client side stuff - -} diff --git a/src/main/java/leaf/cosmere/manifestation/allomancy/AllomancyIronSteel.java b/src/main/java/leaf/cosmere/manifestation/allomancy/AllomancyIronSteel.java deleted file mode 100644 index a9aa33955..000000000 --- a/src/main/java/leaf/cosmere/manifestation/allomancy/AllomancyIronSteel.java +++ /dev/null @@ -1,241 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.manifestation.allomancy; - -import leaf.cosmere.cap.entity.ISpiritweb; -import leaf.cosmere.cap.entity.SpiritwebCapability; -import leaf.cosmere.constants.Manifestations; -import leaf.cosmere.constants.Metals; -import leaf.cosmere.utils.helpers.CodecHelper; -import leaf.cosmere.utils.helpers.LogHelper; -import leaf.cosmere.utils.helpers.VectorHelper; -import leaf.cosmere.items.IHasMetalType; -import leaf.cosmere.network.Network; -import leaf.cosmere.network.packets.SyncPushPullMessage; -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.client.Minecraft; -import net.minecraft.client.entity.player.ClientPlayerEntity; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.item.ItemEntity; -import net.minecraft.item.BlockItem; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.CompoundNBT; -import net.minecraft.nbt.NBTDynamicOps; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.BlockRayTraceResult; -import net.minecraft.util.math.EntityRayTraceResult; -import net.minecraft.util.math.RayTraceResult; -import net.minecraft.util.math.vector.Vector3d; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; - -import java.util.ArrayList; -import java.util.List; - -import static leaf.cosmere.utils.helpers.EntityHelper.getEntitiesInRange; - -public class AllomancyIronSteel extends AllomancyBase -{ - private final boolean isPush; - - public AllomancyIronSteel(Metals.MetalType metalType) - { - super(metalType); - this.isPush = metalType == Metals.MetalType.STEEL; - } - - @Override - public void performEffect(ISpiritweb data) - { - if (data.getLiving().world.isRemote) - { - performEffectClient(data); - } - else - { - performEffectServer(data); - } - } - - private List blocks; - private List entities; - - @OnlyIn(Dist.CLIENT) - private void performEffectClient(ISpiritweb cap) - { - boolean hasChanged = false; - SpiritwebCapability data = (SpiritwebCapability) cap; - blocks = isPush ? data.pushBlocks : data.pullBlocks; - entities = isPush ? data.pushEntities : data.pullEntities; - - //Pushes on Nearby Metals - if (getKeyBinding().isKeyDown()) - { - Minecraft mc = Minecraft.getInstance(); - RayTraceResult ray = cap.getLiving().pick(getRange(cap),0, false); - - if (ray.getType() == RayTraceResult.Type.BLOCK && !blocks.contains(((BlockRayTraceResult) ray).getPos())) - { - BlockPos pos = ((BlockRayTraceResult) ray).getPos(); - //todo check block is of ihasmetal type - BlockState state = mc.world.getBlockState(pos); - if (state.getBlock() instanceof IHasMetalType) - { - blocks.add(pos.toImmutable()); - - if (blocks.size() > 5) - { - blocks.remove(0); - } - hasChanged = true; - } - } - else if (ray.getType() == RayTraceResult.Type.ENTITY && !entities.contains(((EntityRayTraceResult) ray).getEntity().getEntityId())) - { - //todo check for metal - entities.add(((EntityRayTraceResult) ray).getEntity().getEntityId()); - - if (entities.size() > 5) - { - entities.remove(0); - } - hasChanged = true; - } - } - else - { - //clear list - if (blocks.size() > 0) - { - blocks.clear(); - hasChanged = true; - } - if (entities.size() > 0) - { - entities.clear(); - hasChanged = true; - } - - } - - //sync the move things. - //we don't let the spirit web sync from client back to server, so this is needed. - if (hasChanged) - { - CompoundNBT nbt = new CompoundNBT(); - - final String pushBlocks = "pushBlocks"; - final String pullBlocks = "pullBlocks"; - String target = isPush ? pushBlocks : pullBlocks; - - CodecHelper.BlockPosListCodec.encodeStart(NBTDynamicOps.INSTANCE, blocks) - .resultOrPartial(LogHelper.LOGGER::error) - .ifPresent(inbt1 -> nbt.put(target, inbt1)); - - Network.sendToServer(new SyncPushPullMessage(nbt)); - } - } - - private void performEffectServer(ISpiritweb cap) - { - //perform the entity move thing. - SpiritwebCapability data = (SpiritwebCapability) cap; - blocks = isPush ? data.pushBlocks : data.pullBlocks; - entities = isPush ? data.pushEntities : data.pullEntities; - - if (blocks.size() == 0) - { - return; - } - - LivingEntity living = data.getLiving(); - Vector3d direction; - float renderPartialTicks = Minecraft.getInstance().getRenderPartialTicks(); - - double strength = getAllomanticStrength(cap); - - for (BlockPos blockPos : blocks) - { - //if the entity is in range of being able to push - double distance = (strength * data.getMode(Manifestations.ManifestationTypes.ALLOMANCY, getMetalType().getID()));// * 0.1f; - if (blockPos.withinDistance(living.getPositionVec(), distance)) - { - direction = VectorHelper.getDirection( - new Vector3d(blockPos.getX(), blockPos.getY(), blockPos.getZ()), - living.getPositionVec(), - (isPush ? -1f : 1f) * renderPartialTicks); - living.setMotion(living.getMotion().add(direction.normalize())); - } - } - living.velocityChanged = true; - } - - private static List found = new ArrayList<>(); - - @OnlyIn(Dist.CLIENT) - public static List getDrawLines(int range) - { - Minecraft mc = Minecraft.getInstance(); - ClientPlayerEntity playerEntity = mc.player; - //only update box list every so often - if (playerEntity.ticksExisted % 5 != 0 && found.size() > 0) - { - return found; - } - - found.clear(); - - //find all the things that we want to draw a line to from the player - - //todo stop aluminum showing up, check IHasMetalType.getMetalType != aluminum - - //metal blocks - BlockPos.getProximitySortedBoxPositions(playerEntity.getPosition(), range, range, range) - .filter(blockPos -> - { - Block block = playerEntity.world.getBlockState(blockPos).getBlock(); - - if (block instanceof IHasMetalType) - { - return true; - } - - return false; - }) - .forEach(blockPos -> found.add(new Vector3d(blockPos.getX() + 0.5, blockPos.getY() + 0.5, blockPos.getZ() + 0.5))); - - - //entities with metal armor/tools - - getEntitiesInRange(playerEntity, range, false).forEach(entity -> - { - if (entity instanceof LivingEntity) - { - //check for metal items on the entity - - } - else if (entity instanceof ItemEntity) - { - ItemStack stack = ((ItemEntity) entity).getItem(); - Item item = stack.getItem(); - - if (item instanceof BlockItem && ((BlockItem) item).getBlock() instanceof IHasMetalType) - { - found.add(entity.getPositionVec()); - } - else if (item instanceof IHasMetalType) - { - found.add(entity.getPositionVec()); - } - } - }); - - return found; - } - - -} diff --git a/src/main/java/leaf/cosmere/manifestation/allomancy/AllomancyNicrosil.java b/src/main/java/leaf/cosmere/manifestation/allomancy/AllomancyNicrosil.java deleted file mode 100644 index 1dcd0ccfa..000000000 --- a/src/main/java/leaf/cosmere/manifestation/allomancy/AllomancyNicrosil.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.manifestation.allomancy; - -import leaf.cosmere.cap.entity.ISpiritweb; -import leaf.cosmere.cap.entity.SpiritwebCapability; -import leaf.cosmere.constants.Manifestations; -import leaf.cosmere.constants.Metals; -import leaf.cosmere.utils.helpers.EffectsHelper; -import leaf.cosmere.registry.EffectsRegistry; -import net.minecraft.entity.Entity; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.ItemStack; -import net.minecraft.potion.EffectInstance; -import net.minecraft.util.math.MathHelper; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.event.entity.living.LivingHurtEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; - -public class AllomancyNicrosil extends AllomancyBase -{ - public AllomancyNicrosil(Metals.MetalType metalType) - { - super(metalType); - MinecraftForge.EVENT_BUS.addListener(this::onLivingHurtEvent); - } - - //active or not active - @Override - public int modeMax(ISpiritweb data) - { - return 1; - } - - @Override - public int modeMin(ISpiritweb data) - { - return 0; - } - - @Override - public boolean modeWraps(ISpiritweb data) - { - return false; - } - - //Enhances Allomantic Burn of Target - @SubscribeEvent - public void onLivingHurtEvent(LivingHurtEvent event) - { - Entity trueSource = event.getSource().getTrueSource(); - if (trueSource instanceof PlayerEntity) - { - SpiritwebCapability.get((LivingEntity) trueSource).ifPresent(iSpiritweb -> - { - ItemStack itemInHand = iSpiritweb.getLiving().getHeldItemMainhand(); - - if (itemInHand.isEmpty()) - { - //if manifestation is active and has nicrosil metal to burn - if (iSpiritweb.manifestationActive(Manifestations.ManifestationTypes.ALLOMANCY, Metals.MetalType.NICROSIL.getID())) - { - //valid set up found. - EffectInstance newEffect = EffectsHelper.getNewEffect( - EffectsRegistry.ALLOMANCY_BOOST.get(), - MathHelper.floor(getAllomanticStrength(iSpiritweb)) - ); - - //apply to the hit entity - event.getEntityLiving().addPotionEffect(newEffect); - } - } - }); - } - } -} diff --git a/src/main/java/leaf/cosmere/manifestation/allomancy/AllomancyPewter.java b/src/main/java/leaf/cosmere/manifestation/allomancy/AllomancyPewter.java deleted file mode 100644 index f681f734d..000000000 --- a/src/main/java/leaf/cosmere/manifestation/allomancy/AllomancyPewter.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.manifestation.allomancy; - -import leaf.cosmere.cap.entity.ISpiritweb; -import leaf.cosmere.constants.Metals; -import leaf.cosmere.utils.helpers.EffectsHelper; -import net.minecraft.entity.LivingEntity; -import net.minecraft.potion.Effects; - -public class AllomancyPewter extends AllomancyBase -{ - public AllomancyPewter(Metals.MetalType metalType) - { - super(metalType); - } - - @Override - protected void performEffect(ISpiritweb data) - { - LivingEntity livingEntity = data.getLiving(); - boolean isActiveTick = livingEntity.ticksExisted % 20 == 0; - - //Increases Physical Abilities - if (isActiveTick) - { - int mode = data.getMode(manifestationType, getMetalType().getID()); - livingEntity.addPotionEffect(EffectsHelper.getNewEffect(Effects.SPEED, 0)); - switch (mode) - { - case 3: - case 2: - livingEntity.addPotionEffect(EffectsHelper.getNewEffect(Effects.HASTE, 0)); - livingEntity.addPotionEffect(EffectsHelper.getNewEffect(Effects.RESISTANCE, mode - 2)); - case 1: - livingEntity.addPotionEffect(EffectsHelper.getNewEffect(Effects.STRENGTH, mode - 1)); - break; - } - } - } -} diff --git a/src/main/java/leaf/cosmere/manifestation/allomancy/AllomancyTin.java b/src/main/java/leaf/cosmere/manifestation/allomancy/AllomancyTin.java deleted file mode 100644 index ad8127181..000000000 --- a/src/main/java/leaf/cosmere/manifestation/allomancy/AllomancyTin.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.manifestation.allomancy; - -import leaf.cosmere.cap.entity.ISpiritweb; -import leaf.cosmere.constants.Metals; -import leaf.cosmere.utils.helpers.EffectsHelper; -import net.minecraft.entity.LivingEntity; -import net.minecraft.potion.Effects; - -public class AllomancyTin extends AllomancyBase -{ - public AllomancyTin(Metals.MetalType metalType) - { - super(metalType); - } - - @Override - protected void performEffect(ISpiritweb data) - { - //Increases Physical Senses - LivingEntity livingEntity = data.getLiving(); - boolean isActiveTick = livingEntity.ticksExisted % 20 == 0; - - //give night vision - if (isActiveTick) - { - livingEntity.addPotionEffect(EffectsHelper.getNewEffect(Effects.NIGHT_VISION, 0)); - } - } -} diff --git a/src/main/java/leaf/cosmere/manifestation/allomancy/AllomancyZinc.java b/src/main/java/leaf/cosmere/manifestation/allomancy/AllomancyZinc.java deleted file mode 100644 index e1aa1c554..000000000 --- a/src/main/java/leaf/cosmere/manifestation/allomancy/AllomancyZinc.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.manifestation.allomancy; - -import leaf.cosmere.cap.entity.ISpiritweb; -import leaf.cosmere.constants.Metals; -import leaf.cosmere.utils.helpers.MathHelper; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.MobEntity; - -import java.util.List; - -import static leaf.cosmere.utils.helpers.EntityHelper.getLivingEntitiesInRange; - -public class AllomancyZinc extends AllomancyBase -{ - public AllomancyZinc(Metals.MetalType metalType) - { - super(metalType); - } - - //Inflames Emotions - //make hostiles target you but also make non-hostiles target hostiles? - @Override - protected void performEffect(ISpiritweb data) - { - int mode = data.getMode(manifestationType, getMetalType().getID()); - - //todo, replace x * mode with config based value - double allomanticStrength = getAllomanticStrength(data); - - int range = (int) (allomanticStrength * mode); - - List entitiesToAffect = getLivingEntitiesInRange(data.getLiving(), range, true); - - for (LivingEntity e : entitiesToAffect) - { - if (e instanceof MobEntity) - { - MobEntity mob = (MobEntity) e; - - //mob.targetSelector.enableFlag(Goal.Flag.TARGET); - mob.setNoAI(false); - - switch (mode) - { - case 3: - if (mob.getAttackTarget() == null) - { - LivingEntity attackTarget = entitiesToAffect.get(MathHelper.randomInt(0, entitiesToAffect.size() - 1)); - mob.setAttackTarget(attackTarget); - } - case 2: - if (mob.getRevengeTarget() == null) - { - mob.setRevengeTarget(mob.getAttackTarget() != null ? mob.getAttackTarget() - : entitiesToAffect.get(MathHelper.randomInt(0, entitiesToAffect.size() - 1))); - } - - case 1: - default: - mob.setAggroed(true); - } - } - } - - } -} diff --git a/src/main/java/leaf/cosmere/manifestation/feruchemy/FeruchemyAluminum.java b/src/main/java/leaf/cosmere/manifestation/feruchemy/FeruchemyAluminum.java deleted file mode 100644 index 954b0fa2f..000000000 --- a/src/main/java/leaf/cosmere/manifestation/feruchemy/FeruchemyAluminum.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * File created ~ 27 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.manifestation.feruchemy; - -import leaf.cosmere.cap.entity.ISpiritweb; -import leaf.cosmere.constants.Metals; - -public class FeruchemyAluminum extends FeruchemyBase -{ - public FeruchemyAluminum(Metals.MetalType metalType) - { - super(metalType); - } - - @Override - public int modeMin(ISpiritweb data) - { - return -1; - } - - @Override - public int modeMax(ISpiritweb data) - { - return 1; - } - -} diff --git a/src/main/java/leaf/cosmere/manifestation/feruchemy/FeruchemyBase.java b/src/main/java/leaf/cosmere/manifestation/feruchemy/FeruchemyBase.java deleted file mode 100644 index caf151a78..000000000 --- a/src/main/java/leaf/cosmere/manifestation/feruchemy/FeruchemyBase.java +++ /dev/null @@ -1,129 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.manifestation.feruchemy; - -import leaf.cosmere.cap.entity.ISpiritweb; -import leaf.cosmere.charge.MetalmindChargeHelper; -import leaf.cosmere.constants.Manifestations; -import leaf.cosmere.constants.Metals; -import leaf.cosmere.utils.helpers.EffectsHelper; -import leaf.cosmere.items.IHasMetalType; -import leaf.cosmere.manifestation.ManifestationBase; -import net.minecraft.entity.LivingEntity; -import net.minecraft.potion.Effect; -import net.minecraft.potion.EffectInstance; - -public class FeruchemyBase extends ManifestationBase implements IHasMetalType -{ - protected final Metals.MetalType metalType; - - public FeruchemyBase(Metals.MetalType metalType) - { - super(Manifestations.ManifestationTypes.FERUCHEMY, metalType.getColorValue()); - this.metalType = metalType; - } - - - @Override - public int getPowerID() - { - return metalType.getID(); - } - - @Override - public Metals.MetalType getMetalType() - { - return this.metalType; - } - - @Override - public boolean modeWraps(ISpiritweb data) - { - return false; - } - - @Override - public int modeMax(ISpiritweb data) - { - return 3; - } - - @Override - public int modeMin(ISpiritweb data) - { - return -10; - } - - @Override - public void tick(ISpiritweb data) - { - //don't check every tick. - LivingEntity livingEntity = data.getLiving(); - - if (livingEntity.ticksExisted % 20 != 0) - { - return; - } - - int mode = data.getMode(manifestationType, metalType.getID()); - - int cost; - - Effect effect = getEffect(mode); - - // if we are tapping - //check if there is charges to tap - if (mode < 0) - { - //wanting to tap - //get cost - cost = mode <= -3 ? -(mode * mode) : mode; - - } - //if we are storing - //check if there is space to store - else if (mode > 0) - { - cost = mode; - } - //can't store or tap any more - else - { - //remove active effects. - //let the current effect run out. - return; - } - - if (MetalmindChargeHelper.adjustMetalmindChargeExact(data, metalType, -cost, true, true)) - { - EffectInstance currentEffect = EffectsHelper.getNewEffect(effect, Math.abs(mode) - 1); - - if (effect == null) - { - return; - } - - livingEntity.addPotionEffect(currentEffect); - } - - } - - protected Effect getEffect(int mode) - { - if (mode == 0) - { - return null; - } - else if (mode < 0) - { - return metalType.getTappingEffect(); - } - else - { - return metalType.getStoringEffect(); - } - - } -} diff --git a/src/main/java/leaf/cosmere/manifestation/feruchemy/FeruchemyCopper.java b/src/main/java/leaf/cosmere/manifestation/feruchemy/FeruchemyCopper.java deleted file mode 100644 index 471bf0ce9..000000000 --- a/src/main/java/leaf/cosmere/manifestation/feruchemy/FeruchemyCopper.java +++ /dev/null @@ -1,130 +0,0 @@ -/* - * File created ~ 27 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.manifestation.feruchemy; - -import leaf.cosmere.cap.entity.ISpiritweb; -import leaf.cosmere.charge.MetalmindChargeHelper; -import leaf.cosmere.constants.Metals; -import leaf.cosmere.utils.helpers.EffectsHelper; -import leaf.cosmere.utils.helpers.XPHelper; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.potion.Effect; -import net.minecraft.potion.EffectInstance; - -public class FeruchemyCopper extends FeruchemyBase -{ - public FeruchemyCopper(Metals.MetalType metalType) - { - super(metalType); - } - - @Override - public int modeMin(ISpiritweb data) - { - return -20; - } - - @Override - public int modeMax(ISpiritweb data) - { - return 20; - } - - @Override - public void tick(ISpiritweb data) - { - //don't check every tick. - LivingEntity livingEntity = data.getLiving(); - - if (!(livingEntity instanceof PlayerEntity) || livingEntity.ticksExisted % 20 != 0) - { - return; - } - PlayerEntity playerEntity = (PlayerEntity) livingEntity; - - int mode = data.getMode(manifestationType, metalType.getID()); - - //can't store or tap any more - if (mode == 0) - { - //remove active effects. - //let the current effect run out. - return; - } - - performXPAdjustment(playerEntity, mode); - - } - - private int getCost(int mode) - { - // if we are tapping - //check if there is charges to tap - if (mode < 0) - { - //wanting to tap - //get cost - return mode <= -3 ? -(mode * mode) : mode; - - } - //if we are storing - //check if there is space to store - else if (mode > 0) - { - return mode; - } - return 0; - } - - - private void performXPAdjustment(PlayerEntity playerEntity, int mode) - { - int cost = getCost(mode); - int experiencePoints = playerEntity.isCreative() ? 10 : cost; - - if (playerEntity.experienceTotal > cost && MetalmindChargeHelper.adjustMetalmindChargeExact(playerEntity, metalType, -experiencePoints, true, true) != null) - { - //successfully added xp to metalmind - - if (!playerEntity.isCreative()) - { - //adjust player xp - - if (cost > 0) // active storage - { - decreasePlayerExperience(playerEntity, cost); - } - else // tapping storage - { - playerEntity.giveExperiencePoints(-cost); - } - - } - - - Effect effect = getEffect(mode); - - EffectInstance currentEffect = EffectsHelper.getNewEffect(effect, Math.abs(mode) - 1); - - //potion effect doesn't do anything other than tell the player they are storing. - playerEntity.addPotionEffect(currentEffect); - } - } - - - //why does minecraft not have functions that handle this better - //unless it does, in which case I'm a goober who can't read. - //either way, thank you xreliquary and P3pp3rF1y showing their example of decreasing player xp nicely. - //https://github.com/P3pp3rF1y/Reliquary/blob/1.16.x/src/main/java/xreliquary/items/HeroMedallionItem.java - private void decreasePlayerExperience(PlayerEntity player, int pointsToRemove) - { - player.experienceTotal -= pointsToRemove; - int newLevel = XPHelper.getLevelForExperience(player.experienceTotal); - player.experienceLevel = newLevel; - player.experience = (float) (player.experienceTotal - XPHelper.getExperienceForLevel(newLevel)) / player.xpBarCap(); - } - -} diff --git a/src/main/java/leaf/cosmere/manifestation/feruchemy/FeruchemyElectrum.java b/src/main/java/leaf/cosmere/manifestation/feruchemy/FeruchemyElectrum.java deleted file mode 100644 index ecd1b3b22..000000000 --- a/src/main/java/leaf/cosmere/manifestation/feruchemy/FeruchemyElectrum.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * File created ~ 27 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.manifestation.feruchemy; - -import leaf.cosmere.constants.Metals; -import leaf.cosmere.registry.EffectsRegistry; -import net.minecraft.potion.EffectInstance; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.event.entity.living.LivingHurtEvent; - -public class FeruchemyElectrum extends FeruchemyBase -{ - public FeruchemyElectrum(Metals.MetalType metalType) - { - super(metalType); - MinecraftForge.EVENT_BUS.addListener(this::onLivingHurtEvent); - } - - public void onLivingHurtEvent(LivingHurtEvent event) - { - EffectInstance tapEffect = event.getEntityLiving().getActivePotionEffect(EffectsRegistry.TAPPING_EFFECTS.get(getMetalType()).get()); - EffectInstance storeEffect = event.getEntityLiving().getActivePotionEffect(EffectsRegistry.STORING_EFFECTS.get(getMetalType()).get()); - - if (tapEffect != null && tapEffect.getDuration() > 0) - { - event.setAmount(event.getAmount() - ((tapEffect.getAmplifier() + 1) * 0.25f)); - } - - if (storeEffect != null && storeEffect.getDuration() > 0) - { - event.setAmount(event.getAmount() + ((storeEffect.getAmplifier() + 1) * 0.25f)); - } - - } - -} diff --git a/src/main/java/leaf/cosmere/manifestation/feruchemy/FeruchemyNicrosil.java b/src/main/java/leaf/cosmere/manifestation/feruchemy/FeruchemyNicrosil.java deleted file mode 100644 index 159d37ec8..000000000 --- a/src/main/java/leaf/cosmere/manifestation/feruchemy/FeruchemyNicrosil.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * File created ~ 27 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.manifestation.feruchemy; - -import leaf.cosmere.cap.entity.ISpiritweb; -import leaf.cosmere.charge.MetalmindChargeHelper; -import leaf.cosmere.constants.Metals; -import leaf.cosmere.utils.helpers.EffectsHelper; -import net.minecraft.entity.LivingEntity; -import net.minecraft.potion.Effect; -import net.minecraft.potion.EffectInstance; - - -//storing all the available powers on the user individually -public class FeruchemyNicrosil extends FeruchemyBase -{ - public FeruchemyNicrosil(Metals.MetalType metalType) - { - super(metalType); - } - - @Override - public int modeMin(ISpiritweb data) - { - return -1; - } - - @Override - public int modeMax(ISpiritweb data) - { - return 1; - } - - @Override - public void tick(ISpiritweb data) - { - - //don't check every tick. - LivingEntity livingEntity = data.getLiving(); - - if (livingEntity.ticksExisted % 20 != 0) - { - return; - } - - int mode = data.getMode(manifestationType, metalType.getID()); - - int cost; - - Effect effect = getEffect(mode); - - // if we are tapping - //check if there is charges to tap - if (mode < 0) - { - //wanting to tap - //get cost - cost = mode <= -3 ? -(mode * mode) : mode; - - } - //if we are storing - //check if there is space to store - else if (mode > 0) - { - cost = mode; - } - //can't store or tap any more - else - { - //remove active effects. - //let the current effect run out. - return; - } - - if (MetalmindChargeHelper.adjustMetalmindChargeExact(data, metalType, -cost, true, true)) - { - EffectInstance currentEffect = EffectsHelper.getNewEffect(effect, Math.abs(mode) - 1); - livingEntity.addPotionEffect(currentEffect); - } - - } - -} diff --git a/src/main/java/leaf/cosmere/manifestation/feruchemy/FeruchemyZinc.java b/src/main/java/leaf/cosmere/manifestation/feruchemy/FeruchemyZinc.java deleted file mode 100644 index d66a1c192..000000000 --- a/src/main/java/leaf/cosmere/manifestation/feruchemy/FeruchemyZinc.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * File created ~ 27 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.manifestation.feruchemy; - -import leaf.cosmere.constants.Metals; -import leaf.cosmere.registry.EffectsRegistry; -import net.minecraft.potion.EffectInstance; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.event.entity.player.PlayerXpEvent; - -public class FeruchemyZinc extends FeruchemyBase -{ - public FeruchemyZinc(Metals.MetalType metalType) - { - super(metalType); - MinecraftForge.EVENT_BUS.addListener(this::onXPChange); - } - - public void onXPChange(PlayerXpEvent.XpChange event) - { - boolean isRemote = event.getEntityLiving().world.isRemote; - if (isRemote) - { - return; - } - EffectInstance tappingZincEffect = event.getPlayer().getActivePotionEffect(EffectsRegistry.TAPPING_EFFECTS.get(Metals.MetalType.ZINC).get()); - EffectInstance storingZincEffect = event.getPlayer().getActivePotionEffect(EffectsRegistry.STORING_EFFECTS.get(Metals.MetalType.ZINC).get()); - - if (tappingZincEffect != null) - { - event.setAmount(event.getAmount() * (tappingZincEffect.getAmplifier() + 2)); - - } - else if (storingZincEffect != null) - { - event.setAmount(event.getAmount() / (storingZincEffect.getAmplifier() + 2)); - } - - } - -} diff --git a/src/main/java/leaf/cosmere/manifestation/surgebinding/SurgeAbrasion.java b/src/main/java/leaf/cosmere/manifestation/surgebinding/SurgeAbrasion.java deleted file mode 100644 index f132d3757..000000000 --- a/src/main/java/leaf/cosmere/manifestation/surgebinding/SurgeAbrasion.java +++ /dev/null @@ -1,21 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.manifestation.surgebinding; - -import leaf.cosmere.Cosmere; -import net.minecraftforge.fml.common.Mod; - -@Mod.EventBusSubscriber(modid = Cosmere.MODID, bus = Mod.EventBusSubscriber.Bus.FORGE) -public class SurgeAbrasion extends SurgebindingBase -{ - public SurgeAbrasion(int color) - { - super(color); - } - - - //change frictional force - -} diff --git a/src/main/java/leaf/cosmere/manifestation/surgebinding/SurgeAdhesion.java b/src/main/java/leaf/cosmere/manifestation/surgebinding/SurgeAdhesion.java deleted file mode 100644 index da2bdc2f5..000000000 --- a/src/main/java/leaf/cosmere/manifestation/surgebinding/SurgeAdhesion.java +++ /dev/null @@ -1,24 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.manifestation.surgebinding; - -import leaf.cosmere.Cosmere; -import leaf.cosmere.utils.helpers.LogHelper; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.ItemStack; -import net.minecraftforge.event.entity.living.LivingHurtEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.common.Mod; - -@Mod.EventBusSubscriber(modid = Cosmere.MODID, bus = Mod.EventBusSubscriber.Bus.FORGE) -public class SurgeAdhesion extends SurgebindingBase -{ - public SurgeAdhesion(int color) - { - super(color); - } - - //bind things together -} diff --git a/src/main/java/leaf/cosmere/manifestation/surgebinding/SurgeCohesion.java b/src/main/java/leaf/cosmere/manifestation/surgebinding/SurgeCohesion.java deleted file mode 100644 index 5c525cf31..000000000 --- a/src/main/java/leaf/cosmere/manifestation/surgebinding/SurgeCohesion.java +++ /dev/null @@ -1,22 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.manifestation.surgebinding; - -import leaf.cosmere.Cosmere; -import net.minecraftforge.fml.common.Mod; - -@Mod.EventBusSubscriber(modid = Cosmere.MODID, bus = Mod.EventBusSubscriber.Bus.FORGE) -public class SurgeCohesion extends SurgebindingBase -{ - public SurgeCohesion(int color) - { - super(color); - } - - - // alter objects at a molecular level? - // moving through stone? - -} diff --git a/src/main/java/leaf/cosmere/manifestation/surgebinding/SurgeDivision.java b/src/main/java/leaf/cosmere/manifestation/surgebinding/SurgeDivision.java deleted file mode 100644 index b8e31dcc2..000000000 --- a/src/main/java/leaf/cosmere/manifestation/surgebinding/SurgeDivision.java +++ /dev/null @@ -1,20 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.manifestation.surgebinding; - -import leaf.cosmere.Cosmere; -import net.minecraftforge.fml.common.Mod; - -@Mod.EventBusSubscriber(modid = Cosmere.MODID, bus = Mod.EventBusSubscriber.Bus.FORGE) -public class SurgeDivision extends SurgebindingBase -{ - public SurgeDivision(int color) - { - super(color); - } - - //power over destruction and decay - -} diff --git a/src/main/java/leaf/cosmere/manifestation/surgebinding/SurgeGravitation.java b/src/main/java/leaf/cosmere/manifestation/surgebinding/SurgeGravitation.java deleted file mode 100644 index fb01326da..000000000 --- a/src/main/java/leaf/cosmere/manifestation/surgebinding/SurgeGravitation.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.manifestation.surgebinding; - -import leaf.cosmere.Cosmere; -import leaf.cosmere.utils.helpers.LogHelper; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.ItemStack; -import net.minecraftforge.event.entity.living.LivingHurtEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.common.Mod; - -@Mod.EventBusSubscriber(modid = Cosmere.MODID, bus = Mod.EventBusSubscriber.Bus.FORGE) -public class SurgeGravitation extends SurgebindingBase -{ - public SurgeGravitation(int color) - { - super(color); - } - - //gravitational attraction - - - @SubscribeEvent - public void onLivingHurtEvent(LivingHurtEvent event) - { - if (event.getSource().getTrueSource() instanceof PlayerEntity) - { - PlayerEntity player = (PlayerEntity) event.getSource().getTrueSource(); - LogHelper.info(player.getName() + " has attacked a " + event.getEntityLiving().getName()); - //ISurgeState SState = player.getCapability(CosmereCapabilities.SURGE_STATE, null); - - //String activeSurges = SState.getActiveSurgeName(); - ItemStack itemInHand = player.getHeldItemMainhand(); - - //windrunners like Szeth could launch enemies into the air to die cruelly by fall damage - if (false)//activeSurges.equals(Names.KnightOrders.WINDRUNNER) && itemInHand == null) - { - event.getEntityLiving().setPosition(event.getEntityLiving().getPosX(), event.getEntityLiving().getPosY() + 0.1d, event.getEntityLiving().getPosZ()); - event.getEntityLiving().setOnGround(false); - event.getEntityLiving().setJumping(true); - - event.getEntityLiving().setMotion(0, 5, 0); - - //IPlayerStats PS = player.getCapability(CosmereCapabilities.PLAYER_STATS, null); - //PS.remSL(100);//remove some stormlight as if it costs to hit - //PacketDispatcher.sendTo(new SyncSurgeData(player.getCapability(CosmereCapabilities.SURGE_STATE, null), player.getCapability(CosmereCapabilities.PLAYER_STATS, null)), (PlayerEntityMP) player); - } - } - - - } -} diff --git a/src/main/java/leaf/cosmere/manifestation/surgebinding/SurgeIllumination.java b/src/main/java/leaf/cosmere/manifestation/surgebinding/SurgeIllumination.java deleted file mode 100644 index db875ac4f..000000000 --- a/src/main/java/leaf/cosmere/manifestation/surgebinding/SurgeIllumination.java +++ /dev/null @@ -1,21 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.manifestation.surgebinding; - -import leaf.cosmere.Cosmere; -import net.minecraftforge.fml.common.Mod; - -@Mod.EventBusSubscriber(modid = Cosmere.MODID, bus = Mod.EventBusSubscriber.Bus.FORGE) -public class SurgeIllumination extends SurgebindingBase -{ - public SurgeIllumination(int color) - { - super(color); - } - - - //illusions - -} diff --git a/src/main/java/leaf/cosmere/manifestation/surgebinding/SurgeProgression.java b/src/main/java/leaf/cosmere/manifestation/surgebinding/SurgeProgression.java deleted file mode 100644 index 2d1f68910..000000000 --- a/src/main/java/leaf/cosmere/manifestation/surgebinding/SurgeProgression.java +++ /dev/null @@ -1,21 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.manifestation.surgebinding; - -import leaf.cosmere.Cosmere; -import net.minecraftforge.fml.common.Mod; - -@Mod.EventBusSubscriber(modid = Cosmere.MODID, bus = Mod.EventBusSubscriber.Bus.FORGE) -public class SurgeProgression extends SurgebindingBase -{ - public SurgeProgression(int color) - { - super(color); - } - - - //alter growth and healing - -} diff --git a/src/main/java/leaf/cosmere/manifestation/surgebinding/SurgeTension.java b/src/main/java/leaf/cosmere/manifestation/surgebinding/SurgeTension.java deleted file mode 100644 index bcc4375fb..000000000 --- a/src/main/java/leaf/cosmere/manifestation/surgebinding/SurgeTension.java +++ /dev/null @@ -1,23 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.manifestation.surgebinding; - -import leaf.cosmere.Cosmere; -import net.minecraftforge.fml.common.Mod; - -@Mod.EventBusSubscriber(modid = Cosmere.MODID, bus = Mod.EventBusSubscriber.Bus.FORGE) -public class SurgeTension extends SurgebindingBase -{ - public SurgeTension(int color) - { - super(color); - } - - - //repair inanimate objects for bondsmiths? - - //making things rigid. - -} diff --git a/src/main/java/leaf/cosmere/manifestation/surgebinding/SurgeTransformation.java b/src/main/java/leaf/cosmere/manifestation/surgebinding/SurgeTransformation.java deleted file mode 100644 index 4f258887d..000000000 --- a/src/main/java/leaf/cosmere/manifestation/surgebinding/SurgeTransformation.java +++ /dev/null @@ -1,21 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.manifestation.surgebinding; - -import leaf.cosmere.Cosmere; -import net.minecraftforge.fml.common.Mod; - -@Mod.EventBusSubscriber(modid = Cosmere.MODID, bus = Mod.EventBusSubscriber.Bus.FORGE) -public class SurgeTransformation extends SurgebindingBase -{ - public SurgeTransformation(int color) - { - super(color); - } - - - //soulcasting, changing one thing into another - -} diff --git a/src/main/java/leaf/cosmere/manifestation/surgebinding/SurgeTransportation.java b/src/main/java/leaf/cosmere/manifestation/surgebinding/SurgeTransportation.java deleted file mode 100644 index 1e2b59a71..000000000 --- a/src/main/java/leaf/cosmere/manifestation/surgebinding/SurgeTransportation.java +++ /dev/null @@ -1,21 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.manifestation.surgebinding; - -import leaf.cosmere.Cosmere; -import net.minecraftforge.fml.common.Mod; - -@Mod.EventBusSubscriber(modid = Cosmere.MODID, bus = Mod.EventBusSubscriber.Bus.FORGE) -public class SurgeTransportation extends SurgebindingBase -{ - public SurgeTransportation(int color) - { - super(color); - } - - - //travel between realms or locations - -} diff --git a/src/main/java/leaf/cosmere/manifestation/surgebinding/SurgebindingBase.java b/src/main/java/leaf/cosmere/manifestation/surgebinding/SurgebindingBase.java deleted file mode 100644 index 0855fde5a..000000000 --- a/src/main/java/leaf/cosmere/manifestation/surgebinding/SurgebindingBase.java +++ /dev/null @@ -1,16 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.manifestation.surgebinding; - -import leaf.cosmere.constants.Manifestations; -import leaf.cosmere.manifestation.ManifestationBase; - -public class SurgebindingBase extends ManifestationBase -{ - public SurgebindingBase(int color) - { - super(Manifestations.ManifestationTypes.RADIANT, color); - } -} diff --git a/src/main/java/leaf/cosmere/mixin/EffectInstanceMixin.java b/src/main/java/leaf/cosmere/mixin/EffectInstanceMixin.java deleted file mode 100644 index 86b4aa735..000000000 --- a/src/main/java/leaf/cosmere/mixin/EffectInstanceMixin.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * File created ~ 29 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.mixin; - -import leaf.cosmere.effects.feruchemy.FeruchemyEffectBase; -import net.minecraft.potion.Effect; -import net.minecraft.potion.EffectInstance; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -@Mixin(EffectInstance.class) -public class EffectInstanceMixin -{ - @Inject( - at = @At("RETURN"), - method = "getIsPotionDurationMax", - cancellable = true - ) - private void getIsFeruchemyEffect(CallbackInfoReturnable cir) - { - if (getPotion() instanceof FeruchemyEffectBase) - { - cir.setReturnValue(true); - } - } - - @Shadow - public Effect getPotion() { - throw new IllegalStateException("Mixin failed to shadow getPotion()"); - } -} diff --git a/src/main/java/leaf/cosmere/mixin/GameRendererMixin.java b/src/main/java/leaf/cosmere/mixin/GameRendererMixin.java index a6ef806aa..97a2c48ff 100644 --- a/src/main/java/leaf/cosmere/mixin/GameRendererMixin.java +++ b/src/main/java/leaf/cosmere/mixin/GameRendererMixin.java @@ -1,58 +1,34 @@ +/* + * File updated ~ 8 - 11 - 2023 ~ Leaf + */ + package leaf.cosmere.mixin; -import leaf.cosmere.constants.Metals; -import leaf.cosmere.registry.EffectsRegistry; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.ActiveRenderInfo; +import leaf.cosmere.common.fog.FogManager; import net.minecraft.client.renderer.GameRenderer; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.potion.EffectInstance; -import net.minecraft.potion.Effects; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.world.entity.LivingEntity; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @Mixin(GameRenderer.class) public class GameRendererMixin { - @Inject(at = @At("RETURN"), method = "getNightVisionBrightness(Lnet/minecraft/entity/LivingEntity;F)F", cancellable = true) - private static void removeNightVisionFlash(LivingEntity livingEntity, float f, CallbackInfoReturnable info) - { - float i = livingEntity.getActivePotionEffect(Effects.NIGHT_VISION).getDuration(); - info.setReturnValue(i > 0 ? 1 : i); - } - - - @Inject( - at = @At("RETURN"), - method = "getFOVModifier", - cancellable = true - ) - private void getZoomedFov(ActiveRenderInfo activeRenderInfoIn, float partialTicks, boolean useFOVSetting, CallbackInfoReturnable info) - { - double fov = info.getReturnValue(); - PlayerEntity player = (PlayerEntity)Minecraft.getInstance().getRenderViewEntity(); - EffectInstance tinTapEffect = player.getActivePotionEffect(EffectsRegistry.TAPPING_EFFECTS.get(Metals.MetalType.TIN).get()); - EffectInstance tinStoreEffect = player.getActivePotionEffect(EffectsRegistry.STORING_EFFECTS.get(Metals.MetalType.TIN).get()); - if (tinTapEffect != null && tinTapEffect.getDuration() > 0) - { - int amplifier = tinTapEffect.getAmplifier(); - double zoomedFov = fov / (amplifier + 2); - info.setReturnValue(zoomedFov); - return; - } - if (tinStoreEffect != null && tinStoreEffect.getDuration() > 0) - { - int amplifier = tinStoreEffect.getAmplifier(); - double zoomedFov = fov * (amplifier + 2); - info.setReturnValue(zoomedFov); - return; - } - - info.setReturnValue(fov); - } - + @Inject(at = @At("RETURN"), method = "getNightVisionScale", cancellable = true) + private static void removeNightVisionFlash(LivingEntity livingEntity, float f, CallbackInfoReturnable info) + { + MobEffectInstance effect = livingEntity.getEffect(MobEffects.NIGHT_VISION); + float i = effect != null ? effect.getDuration() : f; + info.setReturnValue(i > 0 ? 1 : i); + } + @Inject(method = "tick()V", at = @At("TAIL")) + private void tick(CallbackInfo info) + { + FogManager.getDensityManagerOptional().ifPresent((FogManager::tick)); + } } diff --git a/src/main/java/leaf/cosmere/mixin/LevelRendererMixin.java b/src/main/java/leaf/cosmere/mixin/LevelRendererMixin.java new file mode 100644 index 000000000..73dd3909c --- /dev/null +++ b/src/main/java/leaf/cosmere/mixin/LevelRendererMixin.java @@ -0,0 +1,33 @@ +/* + * File updated ~ 8 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.mixin; + +import leaf.cosmere.api.CosmereAPI; +import leaf.cosmere.common.fog.FogManager; +import net.minecraft.client.renderer.LevelRenderer; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(LevelRenderer.class) +public class LevelRendererMixin +{ + @Inject(method = "(Lnet/minecraft/client/Minecraft;Lnet/minecraft/client/renderer/entity/EntityRenderDispatcher;Lnet/minecraft/client/renderer/blockentity/BlockEntityRenderDispatcher;Lnet/minecraft/client/renderer/RenderBuffers;)V", at = @At("TAIL")) + private void init(CallbackInfo info) + { + FogManager.densityManager = new FogManager(); + + CosmereAPI.logger.info("Allomancy Initialized Fog Density Manager"); + } + + @Inject(method = "close()V", at = @At("TAIL")) + private void close(CallbackInfo info) + { + FogManager.getDensityManager().close(); + FogManager.densityManager = null; + CosmereAPI.logger.info("Allomancy closed Fog Density Manager"); + } +} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/mixin/LightTextureMixin.java b/src/main/java/leaf/cosmere/mixin/LightTextureMixin.java new file mode 100644 index 000000000..5074cf357 --- /dev/null +++ b/src/main/java/leaf/cosmere/mixin/LightTextureMixin.java @@ -0,0 +1,82 @@ +/* + * File updated ~ 20 - 12 - 2024 ~ Leaf + */ + +package leaf.cosmere.mixin; + +import leaf.cosmere.api.CosmereAPI; +import leaf.cosmere.api.InterpolatedValue; +import leaf.cosmere.api.Metals; +import leaf.cosmere.api.manifestation.Manifestation; +import leaf.cosmere.api.math.MathHelper; +import leaf.cosmere.api.spiritweb.ISpiritweb; +import leaf.cosmere.common.cap.entity.SpiritwebCapability; +import leaf.cosmere.common.registration.impl.AttributeRegistryObject; +import leaf.cosmere.common.registry.AttributesRegistry; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.LightTexture; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.Mth; +import net.minecraft.world.entity.ai.attributes.Attribute; +import net.minecraft.world.entity.ai.attributes.AttributeInstance; +import net.minecraft.world.entity.ai.attributes.RangedAttribute; +import net.minecraft.world.entity.player.Player; +import net.minecraftforge.common.util.LazyOptional; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.injection.Constant; +import org.spongepowered.asm.mixin.injection.ModifyConstant; + +@Mixin(LightTexture.class) +public class LightTextureMixin +{ + @Unique + private static final ResourceLocation TIN_RL = new ResourceLocation("allomancy", Metals.MetalType.TIN.getName()); + + @Unique + private final InterpolatedValue _cosmere$nightVision = new InterpolatedValue(0); + + @ModifyConstant(method = "updateLightTexture", constant = @Constant(floatValue = 0f, ordinal = 1)) + private float updateLightTextureConstant(float prev) + { + //do stuff + final Minecraft mc = Minecraft.getInstance(); + + if (!(Minecraft.getInstance().getCameraEntity() instanceof Player clientPlayer)) + { + return prev; + } + + final LazyOptional iSpiritwebLazyOptional = SpiritwebCapability.get(clientPlayer); + float tinAlloVal = 0; + + if (iSpiritwebLazyOptional.isPresent()) + { + var spiritweb = iSpiritwebLazyOptional.resolve(); + final Manifestation tinAllomancy = CosmereAPI.manifestationRegistry().getValue(TIN_RL); + if (spiritweb.isPresent() && spiritweb.get() instanceof SpiritwebCapability data && tinAllomancy != null && tinAllomancy.isActive(spiritweb.get())) + { + //burning or flaring strength + float currentBurnStrength = (float) (tinAllomancy.getStrength(data, false) * data.getMode(tinAllomancy)); + final RangedAttribute attribute = (RangedAttribute) tinAllomancy.getAttribute(); + float maxTinFlareStrengthPossible = (float) (attribute.getMaxValue() * 2); + + //tin takes actual strength into account, as compared to total possible strength including flaring. + //todo - move the min/max night vision to config, ideally server side that gets synced to client + tinAlloVal = Mth.lerp(MathHelper.clamp01(currentBurnStrength / maxTinFlareStrengthPossible), 0.0f, 0.95f); + } + } + + final AttributeRegistryObject attributeRegistryObject = AttributesRegistry.NIGHT_VISION_ATTRIBUTE; + AttributeInstance attribute = clientPlayer.getAttribute(attributeRegistryObject.get()); + //return modded val + final float v = attribute != null ? (float) attribute.getValue() : prev; + final float total = v + tinAlloVal; + + //I know I shouldn't be changing the default value, but it's just so gosh darned convenient + _cosmere$nightVision.setDefaultValue(MathHelper.clamp01(total)); + _cosmere$nightVision.interpolate(); + + return _cosmere$nightVision.get(mc.getPartialTick()); + } +} diff --git a/src/main/java/leaf/cosmere/mixin/VillagerMixin.java b/src/main/java/leaf/cosmere/mixin/VillagerMixin.java new file mode 100644 index 000000000..6689a2dc9 --- /dev/null +++ b/src/main/java/leaf/cosmere/mixin/VillagerMixin.java @@ -0,0 +1,53 @@ +/* + * File updated ~ 8 - 1 - 2025 ~ Leaf + */ + +package leaf.cosmere.mixin; + +import leaf.cosmere.api.math.MathHelper; +import leaf.cosmere.common.cap.entity.SpiritwebCapability; +import leaf.cosmere.common.eventHandlers.EntityEventHandler; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.entity.AgeableMob; +import net.minecraft.world.entity.npc.Villager; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(Villager.class) +public class VillagerMixin +{ + @Inject(method = "getBreedOffspring(Lnet/minecraft/server/level/ServerLevel;Lnet/minecraft/world/entity/AgeableMob;)Lnet/minecraft/world/entity/npc/Villager;", at = @At("RETURN")) + private void getBreedOffspring(ServerLevel pLevel, AgeableMob pOtherParent, CallbackInfoReturnable cir) + { + Villager offspring = cir.getReturnValue(); + Villager thisParent = (Villager) (Object) this; + + SpiritwebCapability.get(thisParent).ifPresent(thisParentSW -> + { + final SpiritwebCapability cap = (SpiritwebCapability) thisParentSW; + if (cap.hasAnyPowers()) + { + SpiritwebCapability.get(pOtherParent).ifPresent(pOtherParentSW -> + { + final SpiritwebCapability otherCap = (SpiritwebCapability) pOtherParentSW; + if (otherCap.hasAnyPowers()) + { + SpiritwebCapability.get(offspring).ifPresent(offspringSW -> + { + final SpiritwebCapability offspringCap = (SpiritwebCapability) offspringSW; + offspringCap.clearManifestations(); + offspringCap.setHasBeenInitialized(); + + if (MathHelper.randomBool())//todo config for chance for offspring to also have powers + { + EntityEventHandler.giveEntityStartingManifestation(offspring, offspringCap); + } + }); + } + }); + } + }); + } +} diff --git a/src/main/java/leaf/cosmere/network/Network.java b/src/main/java/leaf/cosmere/network/Network.java deleted file mode 100644 index 9fa687ef1..000000000 --- a/src/main/java/leaf/cosmere/network/Network.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - * - * Special thank you to the New Tardis Mod team. - * That mod taught me how to do proper syncing between server and client. - * https://tardis-mod.com/books/home/page/links#bkmrk-source - */ - -package leaf.cosmere.network; - -import leaf.cosmere.Cosmere; -import leaf.cosmere.network.packets.*; -import net.minecraft.entity.player.ServerPlayerEntity; -import net.minecraft.network.play.server.SUpdateTileEntityPacket; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.RegistryKey; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -import net.minecraft.world.server.ServerWorld; -import net.minecraftforge.common.util.FakePlayer; -import net.minecraftforge.fml.network.NetworkRegistry; -import net.minecraftforge.fml.network.PacketDistributor; -import net.minecraftforge.fml.network.simple.SimpleChannel; - -public class Network -{ - private static final String PROTOCOL_VERSION = Integer.toString(1); - private static final SimpleChannel NETWORK_CHANNEL = NetworkRegistry.newSimpleChannel(new ResourceLocation(Cosmere.MODID, Cosmere.MODID), () -> PROTOCOL_VERSION, PROTOCOL_VERSION::equals, PROTOCOL_VERSION::equals); - - - public static void init() - { - int id = 0; - NETWORK_CHANNEL.registerMessage(id++, SyncPlayerSpiritwebMessage.class, SyncPlayerSpiritwebMessage::encode, SyncPlayerSpiritwebMessage::decode, SyncPlayerSpiritwebMessage::handle); - NETWORK_CHANNEL.registerMessage(id++, DeactivateCurrentManifestationsMessage.class, DeactivateCurrentManifestationsMessage::encode, DeactivateCurrentManifestationsMessage::new, DeactivateCurrentManifestationsMessage::handle); - NETWORK_CHANNEL.registerMessage(id++, ChangeManifestationModeMessage.class, ChangeManifestationModeMessage::encode, ChangeManifestationModeMessage::decode, ChangeManifestationModeMessage::handle); - NETWORK_CHANNEL.registerMessage(id++, DeactivateAllManifestationsMessage.class, DeactivateAllManifestationsMessage::encode, DeactivateAllManifestationsMessage::new, DeactivateAllManifestationsMessage::handle); - NETWORK_CHANNEL.registerMessage(id++, ChangeSelectedManifestationMessage.class, ChangeSelectedManifestationMessage::encode, ChangeSelectedManifestationMessage::decode, ChangeSelectedManifestationMessage::handle); - NETWORK_CHANNEL.registerMessage(id++, SetSelectedManifestationMessage.class, SetSelectedManifestationMessage::encode, SetSelectedManifestationMessage::decode, SetSelectedManifestationMessage::handle); - NETWORK_CHANNEL.registerMessage(id++, SyncPushPullMessage.class, SyncPushPullMessage::encode, SyncPushPullMessage::decode, SyncPushPullMessage::handle); - - } - - - /** - * Sends a packet to the server.
- * Must be called Client side. - */ - public static void sendToServer(Object msg) - { - NETWORK_CHANNEL.sendToServer(msg); - } - - /** - * Send a packet to a specific player.
- * Must be called Server side. - */ - public static void sendTo(Object msg, ServerPlayerEntity player) - { - if (!(player instanceof FakePlayer)) - { - NETWORK_CHANNEL.send(PacketDistributor.PLAYER.with(() -> player), msg); - } - } - - public static void sendPacketToAll(Object packet) - { - NETWORK_CHANNEL.send(PacketDistributor.ALL.noArg(), packet); - } - - public static SUpdateTileEntityPacket createTEUpdatePacket(TileEntity tile) - { - return new SUpdateTileEntityPacket(tile.getPos(), -1, tile.getUpdateTag()); - } - - public static void sendToAllAround(Object mes, RegistryKey dim, BlockPos pos, int radius) - { - NETWORK_CHANNEL.send(PacketDistributor.NEAR.with(() -> new PacketDistributor.TargetPoint(pos.getX(), pos.getY(), pos.getZ(), radius, dim)), mes); - } - - public static void sendToAllInWorld(Object mes, ServerWorld world) - { - NETWORK_CHANNEL.send(PacketDistributor.DIMENSION.with(world::getDimensionKey), mes); - } - - public static void sendToTrackingTE(Object mes, TileEntity te) - { - if (te != null && !te.getWorld().isRemote) - { - NETWORK_CHANNEL.send(PacketDistributor.TRACKING_CHUNK.with(() -> te.getWorld().getChunkAt(te.getPos())), mes); - } - } -} diff --git a/src/main/java/leaf/cosmere/network/packets/ChangeManifestationModeMessage.java b/src/main/java/leaf/cosmere/network/packets/ChangeManifestationModeMessage.java deleted file mode 100644 index 639b50628..000000000 --- a/src/main/java/leaf/cosmere/network/packets/ChangeManifestationModeMessage.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.network.packets; - -import leaf.cosmere.cap.entity.SpiritwebCapability; -import leaf.cosmere.constants.Manifestations; -import net.minecraft.entity.player.ServerPlayerEntity; -import net.minecraft.network.PacketBuffer; -import net.minecraft.server.MinecraftServer; -import net.minecraft.util.text.TextComponent; -import net.minecraftforge.fml.network.NetworkEvent; - -import java.util.function.Supplier; - -public class ChangeManifestationModeMessage -{ - Manifestations.ManifestationTypes powerType; - int powerID; - int dir; - - public ChangeManifestationModeMessage(Manifestations.ManifestationTypes powerType, int powerID, int dir) - { - this.powerType = powerType; - this.powerID = powerID; - this.dir = dir; - } - - public static void handle(ChangeManifestationModeMessage message, Supplier ctx) - { - NetworkEvent.Context context = ctx.get(); - ServerPlayerEntity sender = context.getSender(); - MinecraftServer server = sender.getServer(); - server.deferTask(() -> SpiritwebCapability.get(sender).ifPresent((cap) -> - { - TextComponent manifestationText; - int newMode; - - if (message.dir >= 0) - { - newMode = cap.nextMode(message.powerType, message.powerID); - } - else - { - newMode = cap.previousMode(message.powerType, message.powerID); - } - - cap.manifestation(message.powerType, message.powerID).onModeChange(cap); - - //manifestationText = TextHelper.createTranslatedText(Constants.Strings.POWER_MODE_SET, TextHelper.createText(newMode)); - //sender.sendMessage(manifestationText, Util.DUMMY_UUID); - - cap.syncToClients(null); - })); - context.setPacketHandled(true); - } - - public static void encode(ChangeManifestationModeMessage mes, PacketBuffer buf) - { - buf.writeInt(mes.powerType.getID()); - buf.writeInt(mes.powerID); - buf.writeInt(mes.dir); - } - - public static ChangeManifestationModeMessage decode(PacketBuffer buf) - { - return new ChangeManifestationModeMessage(Manifestations.ManifestationTypes.valueOf(buf.readInt()).get(), buf.readInt(), buf.readInt()); - } - -} diff --git a/src/main/java/leaf/cosmere/network/packets/ChangeSelectedManifestationMessage.java b/src/main/java/leaf/cosmere/network/packets/ChangeSelectedManifestationMessage.java deleted file mode 100644 index c5d2d6436..000000000 --- a/src/main/java/leaf/cosmere/network/packets/ChangeSelectedManifestationMessage.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.network.packets; - -import leaf.cosmere.cap.entity.SpiritwebCapability; -import leaf.cosmere.constants.Constants; -import leaf.cosmere.utils.helpers.TextHelper; -import net.minecraft.entity.player.ServerPlayerEntity; -import net.minecraft.network.PacketBuffer; -import net.minecraft.server.MinecraftServer; -import net.minecraft.util.Util; -import net.minecraft.util.text.TextComponent; -import net.minecraftforge.fml.network.NetworkEvent; - -import java.util.function.Supplier; - -public class ChangeSelectedManifestationMessage -{ - int dir; - - public ChangeSelectedManifestationMessage(int dir) - { - this.dir = dir; - } - - public static void handle(ChangeSelectedManifestationMessage message, Supplier ctx) - { - NetworkEvent.Context context = ctx.get(); - ServerPlayerEntity sender = context.getSender(); - MinecraftServer server = sender.getServer(); - server.deferTask(() -> SpiritwebCapability.get(sender).ifPresent((cap) -> - { - TextComponent manifestationText; - String manifestation; - - manifestation = cap.changeManifestation(message.dir); - - manifestationText = TextHelper.createTranslatedText(Constants.Strings.POWER_SET_SUCCESS, TextHelper.createTranslatedText(manifestation)); - - sender.sendMessage(manifestationText, Util.DUMMY_UUID); - cap.syncToClients(null); - })); - context.setPacketHandled(true); - } - - - public static void encode(ChangeSelectedManifestationMessage mes, PacketBuffer buf) - { - buf.writeInt(mes.dir); - } - - public static ChangeSelectedManifestationMessage decode(PacketBuffer buf) - { - return new ChangeSelectedManifestationMessage(buf.readInt()); - } - -} diff --git a/src/main/java/leaf/cosmere/network/packets/DeactivateAllManifestationsMessage.java b/src/main/java/leaf/cosmere/network/packets/DeactivateAllManifestationsMessage.java deleted file mode 100644 index 4c3052d06..000000000 --- a/src/main/java/leaf/cosmere/network/packets/DeactivateAllManifestationsMessage.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.network.packets; - -import leaf.cosmere.cap.entity.SpiritwebCapability; -import net.minecraft.entity.player.ServerPlayerEntity; -import net.minecraft.network.PacketBuffer; -import net.minecraft.server.MinecraftServer; -import net.minecraft.util.Util; -import net.minecraft.util.text.TextComponent; -import net.minecraftforge.fml.network.NetworkEvent; - -import java.util.function.Supplier; - -import static leaf.cosmere.constants.Constants.Translations.POWER_INACTIVE; - -public class DeactivateAllManifestationsMessage -{ - - public DeactivateAllManifestationsMessage() - { - } - - public DeactivateAllManifestationsMessage(PacketBuffer buffer) - { - } - - public static void handle(DeactivateAllManifestationsMessage message, Supplier ctx) - { - NetworkEvent.Context context = ctx.get(); - ServerPlayerEntity sender = context.getSender(); - MinecraftServer server = sender.getServer(); - server.deferTask(() -> SpiritwebCapability.get(sender).ifPresent((cap) -> - { - TextComponent manifestationText= POWER_INACTIVE; - - cap.deactivateManifestations(); - - sender.sendMessage(manifestationText, Util.DUMMY_UUID); - cap.syncToClients(null); - })); - context.setPacketHandled(true); - } - - public void encode(PacketBuffer buf) - { - - } - -} diff --git a/src/main/java/leaf/cosmere/network/packets/DeactivateCurrentManifestationsMessage.java b/src/main/java/leaf/cosmere/network/packets/DeactivateCurrentManifestationsMessage.java deleted file mode 100644 index 44c6b0bbf..000000000 --- a/src/main/java/leaf/cosmere/network/packets/DeactivateCurrentManifestationsMessage.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.network.packets; - -import leaf.cosmere.cap.entity.SpiritwebCapability; -import net.minecraft.entity.player.ServerPlayerEntity; -import net.minecraft.network.PacketBuffer; -import net.minecraft.server.MinecraftServer; -import net.minecraft.util.Util; -import net.minecraft.util.text.TextComponent; -import net.minecraftforge.fml.network.NetworkEvent; - -import java.util.function.Supplier; - -import static leaf.cosmere.constants.Constants.Translations.POWER_INACTIVE; - -public class DeactivateCurrentManifestationsMessage -{ - - public DeactivateCurrentManifestationsMessage() - { - } - - public DeactivateCurrentManifestationsMessage(PacketBuffer buffer) - { - } - - public static void handle(DeactivateCurrentManifestationsMessage message, Supplier ctx) - { - NetworkEvent.Context context = ctx.get(); - ServerPlayerEntity sender = context.getSender(); - MinecraftServer server = sender.getServer(); - server.deferTask(() -> SpiritwebCapability.get(sender).ifPresent((cap) -> - { - TextComponent manifestationText= POWER_INACTIVE; - - cap.deactivateManifestations(); - - sender.sendMessage(manifestationText, Util.DUMMY_UUID); - cap.syncToClients(null); - })); - context.setPacketHandled(true); - } - - public void encode(PacketBuffer buf) - { - - } - -} diff --git a/src/main/java/leaf/cosmere/network/packets/SetSelectedManifestationMessage.java b/src/main/java/leaf/cosmere/network/packets/SetSelectedManifestationMessage.java deleted file mode 100644 index d75d79ebc..000000000 --- a/src/main/java/leaf/cosmere/network/packets/SetSelectedManifestationMessage.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.network.packets; - -import leaf.cosmere.cap.entity.SpiritwebCapability; -import leaf.cosmere.manifestation.AManifestation; -import leaf.cosmere.registry.ManifestationRegistry; -import net.minecraft.entity.player.ServerPlayerEntity; -import net.minecraft.network.PacketBuffer; -import net.minecraft.server.MinecraftServer; -import net.minecraftforge.fml.network.NetworkEvent; - -import java.util.function.Supplier; - -public class SetSelectedManifestationMessage -{ - AManifestation manifestation; - - public SetSelectedManifestationMessage(AManifestation manifestation) - { - this.manifestation = manifestation; - } - - public static void handle(SetSelectedManifestationMessage message, Supplier ctx) - { - NetworkEvent.Context context = ctx.get(); - ServerPlayerEntity sender = context.getSender(); - MinecraftServer server = sender.getServer(); - server.deferTask(() -> SpiritwebCapability.get(sender).ifPresent((cap) -> - { - cap.setSelectedManifestation(message.manifestation); - cap.syncToClients(null); - })); - context.setPacketHandled(true); - } - - - public static void encode(SetSelectedManifestationMessage mes, PacketBuffer buf) - { - String namespace = mes.manifestation.getRegistryName().toString(); - buf.writeString(namespace); - } - - public static SetSelectedManifestationMessage decode(PacketBuffer buf) - { - String location = buf.readString(); - return new SetSelectedManifestationMessage(ManifestationRegistry.fromID(location)); - } - -} diff --git a/src/main/java/leaf/cosmere/network/packets/SyncPlayerSpiritwebMessage.java b/src/main/java/leaf/cosmere/network/packets/SyncPlayerSpiritwebMessage.java deleted file mode 100644 index eaa52812d..000000000 --- a/src/main/java/leaf/cosmere/network/packets/SyncPlayerSpiritwebMessage.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.network.packets; - -import leaf.cosmere.cap.Capabilities; -import net.minecraft.client.Minecraft; -import net.minecraft.entity.Entity; -import net.minecraft.nbt.CompoundNBT; -import net.minecraft.network.PacketBuffer; -import net.minecraftforge.fml.network.NetworkEvent; - -import java.util.function.Supplier; - -public class SyncPlayerSpiritwebMessage -{ - - public int id; - public CompoundNBT data; - - public SyncPlayerSpiritwebMessage(int id, CompoundNBT data) - { - this.id = id; - this.data = data; - } - - public static void encode(SyncPlayerSpiritwebMessage mes, PacketBuffer buf) - { - buf.writeInt(mes.id); - buf.writeCompoundTag(mes.data); - } - - public static SyncPlayerSpiritwebMessage decode(PacketBuffer buf) - { - return new SyncPlayerSpiritwebMessage(buf.readInt(), buf.readCompoundTag()); - } - - public static void handle(SyncPlayerSpiritwebMessage mes, Supplier cont) - { - cont.get().enqueueWork(() -> - { - Entity result = Minecraft.getInstance().world.getEntityByID(mes.id); - if (result != null) - { - result.getCapability(Capabilities.SPIRITWEB_CAPABILITY).ifPresent(cap -> cap.deserializeNBT(mes.data)); - } - }); - cont.get().setPacketHandled(true); - } - -} diff --git a/src/main/java/leaf/cosmere/network/packets/SyncPushPullMessage.java b/src/main/java/leaf/cosmere/network/packets/SyncPushPullMessage.java deleted file mode 100644 index 1ad8650aa..000000000 --- a/src/main/java/leaf/cosmere/network/packets/SyncPushPullMessage.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.network.packets; - -import leaf.cosmere.cap.entity.SpiritwebCapability; -import leaf.cosmere.utils.helpers.CodecHelper; -import leaf.cosmere.utils.helpers.LogHelper; -import net.minecraft.entity.player.ServerPlayerEntity; -import net.minecraft.nbt.CompoundNBT; -import net.minecraft.nbt.NBTDynamicOps; -import net.minecraft.network.PacketBuffer; -import net.minecraft.server.MinecraftServer; -import net.minecraft.util.math.BlockPos; -import net.minecraftforge.common.util.Constants; -import net.minecraftforge.fml.network.NetworkEvent; - -import java.util.List; -import java.util.function.Supplier; - -public class SyncPushPullMessage -{ - public CompoundNBT data; - - public SyncPushPullMessage(CompoundNBT data) - { - this.data = data; - } - - public static void encode(SyncPushPullMessage mes, PacketBuffer buf) - { - buf.writeCompoundTag(mes.data); - } - - public static SyncPushPullMessage decode(PacketBuffer buf) - { - return new SyncPushPullMessage(buf.readCompoundTag()); - } - - public static void handle(SyncPushPullMessage mes, Supplier cont) - { - - NetworkEvent.Context context = cont.get(); - ServerPlayerEntity sender = context.getSender(); - MinecraftServer server = sender.getServer(); - server.deferTask(() -> SpiritwebCapability.get(sender).ifPresent((cap) -> - { - SpiritwebCapability spiritweb = (SpiritwebCapability) cap; - - final String pushBlocks = "pushBlocks"; - final String pullBlocks = "pullBlocks"; - - boolean isPushMessage = mes.data.contains(pushBlocks); - String target = isPushMessage ? pushBlocks : pullBlocks; - - CodecHelper.BlockPosListCodec.decode(NBTDynamicOps.INSTANCE, - mes.data.getList(target, Constants.NBT.TAG_INT_ARRAY)) - .resultOrPartial(LogHelper.LOGGER::error) - .ifPresent(listINBTPair -> - { - List messageBlocks = listINBTPair.getFirst(); - - if (isPushMessage) - { - spiritweb.pushBlocks.clear(); - spiritweb.pushBlocks.addAll(messageBlocks); - } - else - { - spiritweb.pullBlocks.clear(); - spiritweb.pullBlocks.addAll(messageBlocks); - } - }); - - - LogHelper.info("pullBlocks updated"); - - })); - cont.get().setPacketHandled(true); - } - -} diff --git a/src/main/java/leaf/cosmere/properties/PropTypes.java b/src/main/java/leaf/cosmere/properties/PropTypes.java deleted file mode 100644 index 6655336af..000000000 --- a/src/main/java/leaf/cosmere/properties/PropTypes.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.properties; - -import leaf.cosmere.itemgroups.CosmereItemGroups; -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.item.*; -import net.minecraftforge.common.ToolType; - -import java.util.function.Supplier; - -public class PropTypes -{ - public static class Blocks - { - public static final Supplier EXAMPLE = () -> Block.Properties.create(Material.GLASS).hardnessAndResistance(2.0F, 6.0F).harvestLevel(0).harvestTool(ToolType.PICKAXE); - - public static final Supplier METAL = () -> Block.Properties.create(Material.IRON).hardnessAndResistance(2.0F, 6.0F).harvestLevel(1).harvestTool(ToolType.PICKAXE); - } - - public static class Items - { - - public static final Supplier SHARDBLADE = () -> new Item.Properties() - .group(CosmereItemGroups.ITEMS) - .maxStackSize(1) - .defaultMaxDamage(0) - .maxDamage(0) - .setNoRepair() - .rarity(Rarity.EPIC); - - - public static final Supplier ONE = () -> new Item.Properties().group(CosmereItemGroups.ITEMS).maxStackSize(1); - - public static final Supplier SIXTEEN = () -> new Item.Properties().group(CosmereItemGroups.ITEMS).maxStackSize(16); - - public static final Supplier SIXTY_FOUR = () -> new Item.Properties().group(CosmereItemGroups.ITEMS).maxStackSize(64); - } -} diff --git a/src/main/java/leaf/cosmere/recipes/VialMixingRecipe.java b/src/main/java/leaf/cosmere/recipes/VialMixingRecipe.java deleted file mode 100644 index ec2e07866..000000000 --- a/src/main/java/leaf/cosmere/recipes/VialMixingRecipe.java +++ /dev/null @@ -1,150 +0,0 @@ -/* - * File created ~ 10 - 5 - 2021 ~ Leaf - */ - -package leaf.cosmere.recipes; - -import leaf.cosmere.constants.Metals; -import leaf.cosmere.utils.helpers.ResourceLocationHelper; -import leaf.cosmere.items.MetalNuggetItem; -import leaf.cosmere.items.MetalVialItem; -import leaf.cosmere.registry.ItemsRegistry; -import leaf.cosmere.registry.RecipeRegistry; -import net.minecraft.inventory.CraftingInventory; -import net.minecraft.item.ItemStack; -import net.minecraft.item.Items; -import net.minecraft.item.crafting.IRecipeSerializer; -import net.minecraft.item.crafting.Ingredient; -import net.minecraft.item.crafting.SpecialRecipe; -import net.minecraft.util.ResourceLocation; -import net.minecraft.world.World; -import net.minecraftforge.common.Tags; - -import javax.annotation.Nonnull; - -//not to be confused with the vile mixing recipe, -// where you just make gross things -public class VialMixingRecipe extends SpecialRecipe -{ - private static final Ingredient INGREDIENT_BOTTLE = Ingredient.fromItems(Items.GLASS_BOTTLE, ItemsRegistry.METAL_VIAL.get()); -/* private static final Ingredient INGREDIENT_NUGGET = Ingredient.fromItems( - ItemsRegistry.METAL_NUGGETS - .values() - .stream() - .map(RegistryObject::get) - .toArray(Item[]::new) - );*/ - - - public VialMixingRecipe(ResourceLocation loc) - { - super(loc); - } - - @Override - public boolean matches(CraftingInventory inv, World world) - { - boolean hasNugget = false; - ItemStack bottle = null; - final Ingredient INGREDIENT_NUGGETS = Ingredient.fromTag(Tags.Items.NUGGETS); - - for (int i = 0; i < inv.getSizeInventory(); i++) - { - ItemStack stack = inv.getStackInSlot(i); - if (stack.isEmpty()) - { - continue; - } - - if (INGREDIENT_BOTTLE.test(stack)) - { - //only one allowed - if (bottle != null) - { - return false; - } - - bottle = stack; - } - else if (INGREDIENT_NUGGETS.test(stack)) - { - //but multiple nuggets allowed - hasNugget = true; - } - } - - if (bottle == null) - { - //no bottle, no service - return false; - } - - //check how full the bottle is, but only if its the vial - //minecraft bottles can be inherently empty - if (bottle.getItem() == ItemsRegistry.METAL_VIAL.get()) - { - MetalVialItem item = (MetalVialItem) bottle.getItem(); - return hasNugget && !item.isFull(bottle); - } - - - return hasNugget; - } - - @Override - @Nonnull - public ItemStack getCraftingResult(CraftingInventory inv) - { - MetalVialItem metalVial = (MetalVialItem) ItemsRegistry.METAL_VIAL.get(); - final Ingredient INGREDIENT_NUGGETS = Ingredient.fromTag(Tags.Items.NUGGETS); - ItemStack itemstack = new ItemStack(metalVial); - - for (int i = 0; i < inv.getSizeInventory(); ++i) - { - ItemStack stackInSlot = inv.getStackInSlot(i); - if (stackInSlot.isEmpty()) - { - continue; - } - - if (INGREDIENT_NUGGETS.test(stackInSlot)) - { - if (stackInSlot.getItem() instanceof MetalNuggetItem) - { - metalVial.addMetals(itemstack, ((MetalNuggetItem) stackInSlot.getItem()).getMetalType().getID(), 1); - } - //special vanilla logic since we don't create our own copies of iron/gold - else if (stackInSlot.getItem() == Items.IRON_NUGGET) - { - metalVial.addMetals(itemstack, Metals.MetalType.IRON.getID(), 1); - } - else if (stackInSlot.getItem() == Items.GOLD_NUGGET) - { - metalVial.addMetals(itemstack, Metals.MetalType.GOLD.getID(), 1); - } - - } - } - return itemstack; - } - - @Override - public boolean canFit(int width, int height) - { - //if you can fit 2 items, the bottle and a metal, you can combine - return width * height > 1; - } - - @Override - public ResourceLocation getId() - { - return ResourceLocationHelper.prefix("vial_mix"); - } - - @Override - public IRecipeSerializer getSerializer() - { - return RecipeRegistry.VIAL_RECIPE_SERIALIZER.get(); - } - -} diff --git a/src/main/java/leaf/cosmere/registry/AdvancementTriggerRegistry.java b/src/main/java/leaf/cosmere/registry/AdvancementTriggerRegistry.java deleted file mode 100644 index d74112840..000000000 --- a/src/main/java/leaf/cosmere/registry/AdvancementTriggerRegistry.java +++ /dev/null @@ -1,15 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.registry; - -public class AdvancementTriggerRegistry -{ - //public static final TriggerBase COSMERE = new TriggerBase("cosmere"); - - public static void init() - { - //CriteriaTriggers.register(COSMERE); - } -} diff --git a/src/main/java/leaf/cosmere/registry/AttributesRegistry.java b/src/main/java/leaf/cosmere/registry/AttributesRegistry.java deleted file mode 100644 index 8f2b270a9..000000000 --- a/src/main/java/leaf/cosmere/registry/AttributesRegistry.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.registry; - -import leaf.cosmere.Cosmere; -import leaf.cosmere.constants.Metals; -import net.minecraft.entity.*; -import net.minecraft.entity.ai.attributes.Attribute; -import net.minecraft.entity.ai.attributes.RangedAttribute; -import net.minecraftforge.fml.RegistryObject; -import net.minecraftforge.registries.DeferredRegister; -import net.minecraftforge.registries.ForgeRegistries; - -import java.util.HashMap; -import java.util.Map; - -public class AttributesRegistry -{ - public static final DeferredRegister ATTRIBUTES = DeferredRegister.create(ForgeRegistries.ATTRIBUTES, Cosmere.MODID); - - public static final Map> MANIFESTATION_STRENGTH_ATTRIBUTES = makeAttributeMap(); - - - public static final CreatureAttribute SPREN = new CreatureAttribute(); - - public static Map> makeAttributeMap() - { - Map> attributeModifiers = new HashMap<>(); - - for (Metals.MetalType metalType : Metals.MetalType.values()) - { - if (!metalType.hasAssociatedManifestation()) - continue; - - String mistingNamePath = metalType.getMistingName(); - String ferringNamePath = metalType.getFerringName(); - - - RegistryObject mistingAttribute = ATTRIBUTES.register( - mistingNamePath.toLowerCase(), - () -> (new RangedAttribute( - Cosmere.MODID + "." + mistingNamePath.toLowerCase(), - 0, - 0, - 1000)).setShouldWatch(true) - ); - - RegistryObject ferringAttribute = ATTRIBUTES.register( - ferringNamePath.toLowerCase(), - () -> (new RangedAttribute( - Cosmere.MODID + "." + ferringNamePath.toLowerCase(), - 0, - 0, - 1000)).setShouldWatch(true) - ); - - attributeModifiers.put(mistingNamePath, mistingAttribute); - attributeModifiers.put(ferringNamePath, ferringAttribute); - } - - return attributeModifiers; - } - - - -} diff --git a/src/main/java/leaf/cosmere/registry/BlocksRegistry.java b/src/main/java/leaf/cosmere/registry/BlocksRegistry.java deleted file mode 100644 index cdc5f9891..000000000 --- a/src/main/java/leaf/cosmere/registry/BlocksRegistry.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - * Special thank you to SizableShrimp from the Forge Project discord! - * Java isn't my first programming language, so I didn't know you could collect and set up items like this! - * Makes setting up items for metals a breeze~ - */ - -package leaf.cosmere.registry; - -import leaf.cosmere.Cosmere; -import leaf.cosmere.blocks.BaseBlock; -import leaf.cosmere.blocks.MetalBlock; -import leaf.cosmere.blocks.MetalOreBlock; -import leaf.cosmere.constants.Constants; -import leaf.cosmere.constants.Metals; -import leaf.cosmere.itemgroups.CosmereItemGroups; -import leaf.cosmere.properties.PropTypes; -import net.minecraft.block.Block; -import net.minecraft.block.SoundType; -import net.minecraft.item.BlockItem; -import net.minecraft.item.Item; -import net.minecraft.item.Rarity; -import net.minecraftforge.fml.RegistryObject; -import net.minecraftforge.registries.DeferredRegister; -import net.minecraftforge.registries.ForgeRegistries; - -import java.util.Arrays; -import java.util.Map; -import java.util.function.Function; -import java.util.function.Supplier; -import java.util.stream.Collectors; - -public class BlocksRegistry -{ - public static final DeferredRegister BLOCKS = DeferredRegister.create(ForgeRegistries.BLOCKS, Cosmere.MODID); - public static final RegistryObject GEM_BLOCK = register("gem_block", () -> (new BaseBlock(PropTypes.Blocks.EXAMPLE.get(), SoundType.STONE, 1F, 2F)), Rarity.COMMON); - - public static final Map> METAL_BLOCKS = - Arrays.stream(Metals.MetalType.values()) - .filter(Metals.MetalType::hasMaterialItem) - .collect(Collectors.toMap( - Function.identity(), - metalType -> register( - metalType.name().toLowerCase() + Constants.RegNameStubs.BLOCK, - () -> new MetalBlock(metalType), metalType.getRarity()))); - - public static final Map> METAL_ORE = - Arrays.stream(Metals.MetalType.values()) - .filter(Metals.MetalType::hasOre) - .collect(Collectors.toMap( - Function.identity(), - metalType -> register( - metalType.name().toLowerCase() + Constants.RegNameStubs.ORE, - () -> new MetalOreBlock(metalType), - Rarity.COMMON))); - - - - private static RegistryObject register(String id, Supplier blockSupplier, Rarity itemRarity) - { - RegistryObject registryObject = BLOCKS.register(id, blockSupplier); - ItemsRegistry.ITEMS.register(id, () -> new BlockItem(registryObject.get(), new Item.Properties().group(CosmereItemGroups.BLOCKS).rarity(itemRarity))); - - - return registryObject; - } - -} diff --git a/src/main/java/leaf/cosmere/registry/DataSerializersRegistry.java b/src/main/java/leaf/cosmere/registry/DataSerializersRegistry.java deleted file mode 100644 index f295b0e21..000000000 --- a/src/main/java/leaf/cosmere/registry/DataSerializersRegistry.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.registry; - -import net.minecraft.network.PacketBuffer; -import net.minecraft.network.datasync.DataSerializers; -import net.minecraft.network.datasync.IDataSerializer; -import net.minecraft.util.ResourceLocation; - -public class DataSerializersRegistry -{ - public static final IDataSerializer RESOURCE_LOCATION = new IDataSerializer() - { - - @Override - public void write(PacketBuffer buf, ResourceLocation value) - { - buf.writeResourceLocation(value); - } - - public ResourceLocation read(PacketBuffer buf) - { - return buf.readResourceLocation(); - } - - @Override - public ResourceLocation copyValue(ResourceLocation value) - { - return value; - } - }; - - public static void register() - { - DataSerializers.registerSerializer(RESOURCE_LOCATION); - } - -} diff --git a/src/main/java/leaf/cosmere/registry/EffectsRegistry.java b/src/main/java/leaf/cosmere/registry/EffectsRegistry.java deleted file mode 100644 index eed2f221e..000000000 --- a/src/main/java/leaf/cosmere/registry/EffectsRegistry.java +++ /dev/null @@ -1,137 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.registry; - -import leaf.cosmere.Cosmere; -import leaf.cosmere.constants.Metals; -import leaf.cosmere.effects.allomancy.*; -import leaf.cosmere.effects.feruchemy.FeruchemyEffectBase; -import leaf.cosmere.effects.feruchemy.store.*; -import leaf.cosmere.effects.feruchemy.tap.*; -import net.minecraft.potion.Effect; -import net.minecraft.potion.EffectType; -import net.minecraftforge.fml.RegistryObject; -import net.minecraftforge.registries.DeferredRegister; -import net.minecraftforge.registries.ForgeRegistries; - -import java.util.Arrays; -import java.util.Map; -import java.util.function.Function; -import java.util.stream.Collectors; - -public class EffectsRegistry -{ - - public static final DeferredRegister EFFECTS = DeferredRegister.create(ForgeRegistries.POTIONS, Cosmere.MODID); - - public static final RegistryObject ALLOMANTIC_COPPER = EFFECTS.register( - "burning_" + Metals.MetalType.COPPER.name().toLowerCase(), - () -> new AllomancyEffectBase(Metals.MetalType.COPPER, EffectType.BENEFICIAL)); - - public static final RegistryObject ALLOMANCY_BOOST = EFFECTS.register( - "allomancy_boost" , - () -> new AllomancyBoostEffect(Metals.MetalType.DURALUMIN, EffectType.BENEFICIAL)); - - public static final Map> TAPPING_EFFECTS = - Arrays.stream(Metals.MetalType.values()) - .filter(Metals.MetalType::hasFeruchemicalEffect) - .collect(Collectors.toMap( - Function.identity(), - type -> EFFECTS.register( - "tapping_" + type.name().toLowerCase(), - () -> makeTappingEffect(type)) - ) - ); - - public static final Map> STORING_EFFECTS = - Arrays.stream(Metals.MetalType.values()) - .filter(Metals.MetalType::hasFeruchemicalEffect) - .collect(Collectors.toMap( - Function.identity(), - type -> EFFECTS.register( - "storing_" + type.name().toLowerCase(), - () -> makeStoringEffect(type)) - ) - ); - - - private static Effect makeStoringEffect(Metals.MetalType metalType) - { - switch (metalType) - { - case IRON: - return new IronStoreEffect(metalType, EffectType.BENEFICIAL); - case STEEL: - return (new SteelStoreEffect(metalType, EffectType.BENEFICIAL)); - case PEWTER: - return new PewterStoreEffect(metalType, EffectType.BENEFICIAL); - case BRASS: - return new BrassStoreEffect(metalType, EffectType.BENEFICIAL); - case COPPER: - return new CopperStoreEffect(metalType, EffectType.BENEFICIAL); - case BRONZE: - return new BronzeStoreEffect(metalType, EffectType.BENEFICIAL); - case DURALUMIN: - return new DuraluminStoreEffect(metalType, EffectType.BENEFICIAL); - case CHROMIUM: - return new ChromiumStoreEffect(metalType, EffectType.BENEFICIAL); - case NICROSIL: - return new NicrosilStoreEffect(metalType, EffectType.BENEFICIAL); - case GOLD: - return new GoldStoreEffect(metalType, EffectType.BENEFICIAL); - case CADMIUM: - return new CadmiumStoreEffect(metalType, EffectType.BENEFICIAL); - case BENDALLOY: - return new BendalloyStoreEffect(metalType, EffectType.BENEFICIAL); - //todo atium - // handled as part of the manifestation - case ELECTRUM: - case TIN: - case ALUMINUM: - case ZINC: - default: - return new FeruchemyEffectBase(metalType, EffectType.BENEFICIAL); - } - } - - private static Effect makeTappingEffect(Metals.MetalType metalType) - { - switch (metalType) - { - case IRON: - return new IronTapEffect(metalType, EffectType.BENEFICIAL); - case STEEL: - return new SteelTapEffect(metalType, EffectType.BENEFICIAL); - case PEWTER: - return new PewterTapEffect(metalType, EffectType.BENEFICIAL); - case BRASS: - return new BrassTapEffect(metalType, EffectType.BENEFICIAL); - case COPPER: - return new CopperTapEffect(metalType, EffectType.BENEFICIAL); - case BRONZE: - return new BronzeTapEffect(metalType, EffectType.BENEFICIAL); - case DURALUMIN: - return new DuraluminTapEffect(metalType, EffectType.BENEFICIAL); - case CHROMIUM: - return new ChromiumTapEffect(metalType, EffectType.BENEFICIAL); - case NICROSIL: - return new NicrosilTapEffect(metalType, EffectType.BENEFICIAL); - case GOLD: - return new GoldTapEffect(metalType, EffectType.BENEFICIAL); - case CADMIUM: - return new CadmiumTapEffect(metalType, EffectType.BENEFICIAL); - case BENDALLOY: - return new BendalloyTapEffect(metalType, EffectType.BENEFICIAL); - //todo atium - // handled as part of the manifestation - case ELECTRUM: - case TIN: - case ALUMINUM: - case ZINC: - default: - return new FeruchemyEffectBase(metalType, EffectType.BENEFICIAL); - } - } -} diff --git a/src/main/java/leaf/cosmere/registry/EntityRegistry.java b/src/main/java/leaf/cosmere/registry/EntityRegistry.java deleted file mode 100644 index 3952e39e2..000000000 --- a/src/main/java/leaf/cosmere/registry/EntityRegistry.java +++ /dev/null @@ -1,29 +0,0 @@ -package leaf.cosmere.registry; - -import leaf.cosmere.entities.spren.*; -import net.minecraft.entity.*; -import net.minecraft.entity.ai.attributes.*; -import net.minecraftforge.fml.*; -import net.minecraftforge.registries.*; - -import static leaf.cosmere.Cosmere.MODID; - -public class EntityRegistry -{ - public static final DeferredRegister> ENTITIES = DeferredRegister.create(ForgeRegistries.ENTITIES, MODID); - - public static final RegistryObject> SPREN_FIRE = - ENTITIES.register( - "spren_flame", - () -> EntityType.Builder - .create(SprenFlameEntity::new, EntityClassification.CREATURE) - .size(.5f, .5f) - .setShouldReceiveVelocityUpdates(false) - .build("spren_flame")); - - - public static void PrepareEntityAttributes() - { - GlobalEntityTypeAttributes.put(SPREN_FIRE.get(), SprenFlameEntity.prepareAttributes().create()); - } -} diff --git a/src/main/java/leaf/cosmere/registry/FeatureRegistry.java b/src/main/java/leaf/cosmere/registry/FeatureRegistry.java deleted file mode 100644 index b16ca8a28..000000000 --- a/src/main/java/leaf/cosmere/registry/FeatureRegistry.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.registry; - -import leaf.cosmere.Cosmere; -import leaf.cosmere.constants.Constants; -import leaf.cosmere.constants.Metals; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.registry.Registry; -import net.minecraft.util.registry.WorldGenRegistries; -import net.minecraft.world.gen.feature.ConfiguredFeature; -import net.minecraft.world.gen.feature.Feature; -import net.minecraft.world.gen.feature.OreFeature; -import net.minecraft.world.gen.feature.OreFeatureConfig; -import net.minecraft.world.gen.placement.Placement; -import net.minecraft.world.gen.placement.TopSolidRangeConfig; -import net.minecraftforge.fml.RegistryObject; -import net.minecraftforge.registries.DeferredRegister; -import net.minecraftforge.registries.ForgeRegistries; - -import java.util.Arrays; -import java.util.Map; -import java.util.function.Function; -import java.util.stream.Collectors; - -public class FeatureRegistry -{ - public static final DeferredRegister> FEATURES = DeferredRegister.create(ForgeRegistries.FEATURES, Cosmere.MODID); - - public static final Map>> ORE_FEATURES = - Arrays.stream(Metals.MetalType.values()) - .filter(Metals.MetalType::hasOre) - .collect(Collectors.toMap( - Function.identity(), - type -> FEATURES.register( - type.name().toLowerCase() + Constants.RegNameStubs.ORE, - () -> new OreFeature(OreFeatureConfig.CODEC)))); - - - // The "New Tardis Mod" code says we should register configured versions of the features in FMLCommonSetup - // since it helps prevent mod incompatibility issues. No need to delete other mod's world gen. Thank you 50! - - public static class ConfiguredFeatures - { - public static final Map> ORE_FEATURES = - Arrays.stream(Metals.MetalType.values()) - .filter(Metals.MetalType::hasOre) - .collect(Collectors.toMap( - Function.identity(), - metalType -> - FeatureRegistry.ORE_FEATURES.get(metalType).get().withConfiguration(new OreFeatureConfig(OreFeatureConfig.FillerBlockType.BASE_STONE_OVERWORLD, - BlocksRegistry.METAL_ORE.get(metalType).get().getDefaultState(), 5)) //vein size of 5 - .withPlacement( - Placement.RANGE.configure(new TopSolidRangeConfig(6, 0, 64)) - .chance(5))//Config.COMMON_SPEC.oreSpawnChance.get(metalType).get()))//todo config vein size based on ore type - .square() - .count(5) - )); - } - - public static void registerConfiguredFeatures() - { - for (Metals.MetalType metalType : Metals.MetalType.values()) - { - if (metalType.hasOre()) - { - registerConfiguredFeature(metalType.name().toLowerCase() + Constants.RegNameStubs.ORE, ConfiguredFeatures.ORE_FEATURES.get(metalType)); - } - } - } - - private static > void registerConfiguredFeature(String registryName, ConfiguredFeature configuredFeature) - { - Registry> registry = WorldGenRegistries.CONFIGURED_FEATURE; - Registry.register(registry, new ResourceLocation(Cosmere.MODID, registryName), configuredFeature); - } -} diff --git a/src/main/java/leaf/cosmere/registry/ItemsRegistry.java b/src/main/java/leaf/cosmere/registry/ItemsRegistry.java deleted file mode 100644 index 1b9da1e3c..000000000 --- a/src/main/java/leaf/cosmere/registry/ItemsRegistry.java +++ /dev/null @@ -1,157 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - * Special thank you to SizableShrimp from the Forge Project discord! - * Java isn't my first programming language, so I didn't know you could collect and set up items like this! - * Makes setting up items for metals a breeze~ - */ - -package leaf.cosmere.registry; - -import leaf.cosmere.Cosmere; -import leaf.cosmere.constants.Constants.RegNameStubs; -import leaf.cosmere.constants.Metals; -import leaf.cosmere.itemgroups.CosmereItemGroups; -import leaf.cosmere.items.*; -import leaf.cosmere.items.curio.BraceletMetalmind; -import leaf.cosmere.items.curio.HemalurgicSpikeItem; -import leaf.cosmere.items.curio.NecklaceMetalmind; -import leaf.cosmere.items.curio.RingMetalmind; -import leaf.cosmere.properties.PropTypes; -import net.minecraft.item.ElytraItem; -import net.minecraft.item.ItemTier; -import net.minecraft.item.Rarity; -import net.minecraft.item.SwordItem; -import net.minecraftforge.fml.RegistryObject; -import net.minecraftforge.registries.DeferredRegister; -import net.minecraftforge.registries.ForgeRegistries; - -import java.util.Arrays; -import java.util.Map; -import java.util.function.Function; -import java.util.stream.Collectors; - -public class ItemsRegistry -{ - public static final DeferredRegister ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, Cosmere.MODID); - - //other items - - public static final RegistryObject GUIDE = ITEMS.register("guide", () -> createItem(new GuideItem())); - public static final RegistryObject INVESTITURE = ITEMS.register("investiture", () -> createItem(new BaseItem())); - - public static final RegistryObject MIST_CLOAK = ITEMS.register("mist_cloak", () -> createItem(new ElytraItem(PropTypes.Items.ONE.get()))); - public static final RegistryObject OBSIDIAN_DAGGER = ITEMS.register("obsidian_dagger", () -> createItem(new SwordItem(ItemTier.DIAMOND, 2, -1.4F, PropTypes.Items.ONE.get().rarity(Rarity.UNCOMMON)))); - public static final RegistryObject NIGHT_BLOOD = ITEMS.register("night_blood", () -> createItem(new ShardbladeItem(ItemTier.NETHERITE, 10, -1.4F, PropTypes.Items.SHARDBLADE.get()))); - public static final RegistryObject TEST_BLADE = ITEMS.register("test_blade", () -> createItem(new ShardbladeItem(ItemTier.NETHERITE, 10, -1.4F, PropTypes.Items.SHARDBLADE.get()))); - public static final RegistryObject MASTER_SWORD = ITEMS.register("master_sword", () -> createItem(new ShardbladeItem(ItemTier.NETHERITE, 10, -1.4F, PropTypes.Items.SHARDBLADE.get()))); - - public static final RegistryObject COPPER_CLIP = ITEMS.register("copper_clip", () -> createItem(new MetalNuggetItem(Metals.MetalType.COPPER))); - public static final RegistryObject GOLD_BOXING = ITEMS.register("gold_boxing", () -> createItem(new MetalNuggetItem(Metals.MetalType.GOLD))); - - public static final RegistryObject METAL_FILE = ITEMS.register("metal_file", () -> createItem(new MetalFileItem())); - public static final RegistryObject METAL_VIAL = ITEMS.register("metal_vial", () -> createItem(new MetalVialItem())); - - public static final RegistryObject JAR_EMPTY = ITEMS.register("jar_empty", () -> createItem(new BaseItem(PropTypes.Items.SIXTEEN.get().group(CosmereItemGroups.ITEMS)))); - public static final RegistryObject JAR_OF_BLOOD = ITEMS.register("jar_of_blood", () -> createItem(new BaseItem(PropTypes.Items.ONE.get().group(CosmereItemGroups.ITEMS)))); - - - //Mass items gen - - - public static final Map> METAL_RAW_ORE = - Arrays.stream(Metals.MetalType.values()) - .filter(Metals.MetalType::hasOre) - .collect(Collectors.toMap( - Function.identity(), - type -> ITEMS.register( - RegNameStubs.RAW + type.name().toLowerCase() + RegNameStubs.ORE, - () -> createItem(new MetalRawOreItem(type)) - ))); - - public static final Map> METAL_RAW_BLEND = - Arrays.stream(Metals.MetalType.values()) - .filter(Metals.MetalType::isAlloy) - .collect(Collectors.toMap( - Function.identity(), - type -> ITEMS.register( - type.name().toLowerCase() + RegNameStubs.BLEND, - () -> createItem(new MetalRawOreItem(type)) - ))); - - public static final Map> METAL_NUGGETS = - Arrays.stream(Metals.MetalType.values()) - //.filter(Metals.MetalType::hasMaterialItem) - .collect(Collectors.toMap( - Function.identity(), - type -> ITEMS.register( - type.name().toLowerCase() + RegNameStubs.NUGGET, - () -> createItem(new MetalNuggetItem(type)) - ))); - - /*public static final Map> METAL_SHAVINGS = - Arrays.stream(Metals.MetalType.values()) - .filter(Metals.MetalType::hasMaterialItem) - .collect(Collectors.toMap( - Function.identity(), - type -> ITEMS.register( - type.name().toLowerCase() + Item.SHAVINGS, - () -> createItem(new MetalShavingsItem(type)) - )));*/ - - public static final Map> METAL_INGOTS = - Arrays.stream(Metals.MetalType.values()) - .filter(Metals.MetalType::hasMaterialItem) - .collect(Collectors.toMap( - Function.identity(), - type -> ITEMS.register( - type.name().toLowerCase() + RegNameStubs.INGOT, - () -> createItem(new MetalIngotItem(type)) - ))); - - public static final Map> METAL_RINGS = - Arrays.stream(Metals.MetalType.values()) - .filter(Metals.MetalType::hasFeruchemicalEffect) - .collect(Collectors.toMap( - Function.identity(), - type -> ITEMS.register( - type.name().toLowerCase() + RegNameStubs.RING + RegNameStubs.METALMIND, - () -> createItem(new RingMetalmind(type)) - ))); - - public static final Map> METAL_BRACELETS = - Arrays.stream(Metals.MetalType.values()) - .filter(Metals.MetalType::hasFeruchemicalEffect) - .collect(Collectors.toMap( - Function.identity(), - type -> ITEMS.register( - type.name().toLowerCase() + RegNameStubs.BRACELET + RegNameStubs.METALMIND, - () -> createItem(new BraceletMetalmind(type)) - ))); - - public static final Map> METAL_NECKLACES = - Arrays.stream(Metals.MetalType.values()) - .filter(Metals.MetalType::hasFeruchemicalEffect) - .collect(Collectors.toMap( - Function.identity(), - type -> ITEMS.register( - type.name().toLowerCase() + RegNameStubs.NECKLACE + RegNameStubs.METALMIND, - () -> createItem(new NecklaceMetalmind(type)) - ))); - - public static final Map> METAL_SPIKE = - Arrays.stream(Metals.MetalType.values()) - .filter(Metals.MetalType::hasHemalurgicEffect) - .collect(Collectors.toMap( - Function.identity(), - type -> ITEMS.register( - type.name().toLowerCase() + RegNameStubs.SPIKE, - () -> createItem(new HemalurgicSpikeItem(type)) - ))); - - - private static T createItem(T item) - { - return item; - } - -} diff --git a/src/main/java/leaf/cosmere/registry/KeybindingRegistry.java b/src/main/java/leaf/cosmere/registry/KeybindingRegistry.java deleted file mode 100644 index f99258ce7..000000000 --- a/src/main/java/leaf/cosmere/registry/KeybindingRegistry.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.registry; - -import leaf.cosmere.Cosmere; -import leaf.cosmere.client.settings.KeyConflictContext; -import net.minecraft.client.settings.KeyBinding; -import net.minecraft.client.util.InputMappings; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.client.settings.KeyModifier; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.client.registry.ClientRegistry; -import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.fml.common.Mod.EventBusSubscriber.Bus; -import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; -import org.lwjgl.glfw.GLFW; - -import static leaf.cosmere.constants.Constants.Strings.*; - -@SuppressWarnings("deprecation") -@Mod.EventBusSubscriber(value = Dist.CLIENT, modid = Cosmere.MODID, bus = Bus.MOD) -public class KeybindingRegistry -{ - - public static KeyBinding MANIFESTATION_MENU; - public static KeyBinding MANIFESTATION_TOGGLE; - public static KeyBinding MANIFESTATION_MODE_NEXT; - public static KeyBinding MANIFESTATION_MODE_PREVIOUS; - - public static KeyBinding ALLOMANCY_PUSH; - public static KeyBinding ALLOMANCY_PULL; - - @SubscribeEvent - public static void register(FMLClientSetupEvent event) - { - ClientRegistry.registerKeyBinding(MANIFESTATION_MENU = new KeyBinding(KEY_MANIFESTATION_MENU, GLFW.GLFW_KEY_G, KEYS_CATEGORY)); - ClientRegistry.registerKeyBinding(MANIFESTATION_TOGGLE = new KeyBinding(KEY_MANIFESTATION_TOGGLE, GLFW.GLFW_KEY_C, KEYS_CATEGORY)); - ClientRegistry.registerKeyBinding(MANIFESTATION_MODE_NEXT = new KeyBinding(KEY_MANIFESTATION_MODE_NEXT, GLFW.GLFW_KEY_V, KEYS_CATEGORY)); - ClientRegistry.registerKeyBinding(MANIFESTATION_MODE_PREVIOUS = createKeybinding(KEY_MANIFESTATION_MODE_PREVIOUS, KeyModifier.SHIFT, GLFW.GLFW_KEY_V, KEYS_CATEGORY)); - - ClientRegistry.registerKeyBinding(ALLOMANCY_PUSH = new KeyBinding(KEY_ALLOMANCY_PUSH, GLFW.GLFW_KEY_TAB, KEYS_CATEGORY)); - ClientRegistry.registerKeyBinding(ALLOMANCY_PULL = new KeyBinding(KEY_ALLOMANCY_PULL, GLFW.GLFW_KEY_R, KEYS_CATEGORY)); - } - - public static KeyBinding createKeybinding(String description, KeyModifier keyModifier, int keyCode, String category) - { - return new KeyBinding(description, KeyConflictContext.DEFAULT, keyModifier, InputMappings.Type.KEYSYM.getOrMakeInput(keyCode), category); - } -} diff --git a/src/main/java/leaf/cosmere/registry/LootModifierRegistry.java b/src/main/java/leaf/cosmere/registry/LootModifierRegistry.java deleted file mode 100644 index bdc1b12ec..000000000 --- a/src/main/java/leaf/cosmere/registry/LootModifierRegistry.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - * Special thank you to the curio mod for providing the example of how to set up fortune bonus for non-tool related things. - */ - -package leaf.cosmere.registry; - -import leaf.cosmere.Cosmere; -import leaf.cosmere.effects.FortuneBonusModifier; -import net.minecraftforge.common.loot.GlobalLootModifierSerializer; -import net.minecraftforge.fml.RegistryObject; -import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.registries.DeferredRegister; -import net.minecraftforge.registries.ForgeRegistries; - -@Mod.EventBusSubscriber( - modid = Cosmere.MODID, - bus = Mod.EventBusSubscriber.Bus.MOD -) -public class LootModifierRegistry -{ - public static final DeferredRegister> LOOT_MODIFIERS = DeferredRegister.create(ForgeRegistries.LOOT_MODIFIER_SERIALIZERS, Cosmere.MODID); - public static final RegistryObject> FORTUNE_BONUS = LOOT_MODIFIERS.register("fortune_bonus", FortuneBonusModifier.Serializer::new); - - //@SubscribeEvent - //public static void registerLootModifiers(RegistryEvent.Register> event) - //{ - // IForgeRegistry> registry = event.getRegistry(); - // registry.register((new FortuneBonusModifier.Serializer()).setRegistryName(ResourceLocationHelper.prefix("fortune_bonus"))); - //} -} diff --git a/src/main/java/leaf/cosmere/registry/ManifestationRegistry.java b/src/main/java/leaf/cosmere/registry/ManifestationRegistry.java deleted file mode 100644 index 495f5ab9c..000000000 --- a/src/main/java/leaf/cosmere/registry/ManifestationRegistry.java +++ /dev/null @@ -1,167 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.registry; - -import leaf.cosmere.Cosmere; -import leaf.cosmere.constants.Manifestations; -import leaf.cosmere.constants.Metals; -import leaf.cosmere.manifestation.AManifestation; -import leaf.cosmere.manifestation.ManifestationBase; -import leaf.cosmere.manifestation.allomancy.*; -import leaf.cosmere.manifestation.feruchemy.*; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fml.RegistryObject; -import net.minecraftforge.registries.DeferredRegister; -import net.minecraftforge.registries.IForgeRegistry; -import net.minecraftforge.registries.RegistryBuilder; - -import java.awt.*; -import java.util.Arrays; -import java.util.HashMap; -import java.util.Map; -import java.util.function.Function; -import java.util.function.Supplier; -import java.util.stream.Collectors; - -public class ManifestationRegistry -{ - public static final DeferredRegister MANIFESTATIONS = DeferredRegister.create(AManifestation.class, Cosmere.MODID); - public static Supplier> MANIFESTATION_REGISTRY = MANIFESTATIONS.makeRegistry("investiture_manifestations", () -> new RegistryBuilder().setMaxID(Integer.MAX_VALUE - 1)); - - public static final RegistryObject NONE = MANIFESTATIONS.register(Manifestations.NONE, () -> new ManifestationBase(Manifestations.ManifestationTypes.NONE, Color.WHITE.getRGB())); - - // Allomancy - public static final Map> ALLOMANCY_POWERS = - Arrays.stream(Metals.MetalType.values()) - .filter(Metals.MetalType::hasAssociatedManifestation) - .collect(Collectors.toMap( - Function.identity(), - metalType -> - MANIFESTATIONS.register( - metalType.getMistingName(), - () -> makeAllomancyManifestation(metalType))//get the specific instance of the manifestation for allomancy - )); - - // Feruchemy powers - public static final Map> FERUCHEMY_POWERS = - Arrays.stream(Metals.MetalType.values()) - .filter(Metals.MetalType::hasAssociatedManifestation) - .collect(Collectors.toMap( - Function.identity(), - metalType -> - MANIFESTATIONS.register( - metalType.getFerringName(), - () -> makeFeruchemyManifestation(metalType))//feruchemy can be base manifestation type because it mostly functions through effects - )); - - // AonDor - //todo AonDor - //public static final RegistryObject ELANTRIAN = MANIFESTATIONS.register(Constants.Manifestations.AonDor.ELANTRIAN, () -> new InvestitureManifestationBase(Color.WHITE.getRGB())); - - // Biochroma - //todo biochroma - //public static final RegistryObject BIOCHROMA = MANIFESTATIONS.register(Constants.Manifestations.Biochroma.AWAKENING, () -> new InvestitureManifestationBase(Color.WHITE.getRGB())); - - // Surgebinder - //todo knights radiant - //public static final RegistryObject WINDRUNNER = MANIFESTATIONS.register(Constants.Manifestations.Surgebinding.WINDRUNNER, () -> new InvestitureManifestationBase(Color.WHITE.getRGB())); - //public static final RegistryObject SKYBREAKER = MANIFESTATIONS.register(Constants.Manifestations.Surgebinding.SKYBREAKER, () -> new InvestitureManifestationBase(Color.WHITE.getRGB())); - //public static final RegistryObject DUSTBRINGER = MANIFESTATIONS.register(Constants.Manifestations.Surgebinding.DUSTBRINGER, () -> new InvestitureManifestationBase(Color.WHITE.getRGB())); - //public static final RegistryObject EDGEDANCER = MANIFESTATIONS.register(Constants.Manifestations.Surgebinding.EDGEDANCER, () -> new InvestitureManifestationBase(Color.WHITE.getRGB())); - //public static final RegistryObject TRUTHWATCHER = MANIFESTATIONS.register(Constants.Manifestations.Surgebinding.TRUTHWATCHER, () -> new InvestitureManifestationBase(Color.WHITE.getRGB())); - //public static final RegistryObject LIGHTWEAVER = MANIFESTATIONS.register(Constants.Manifestations.Surgebinding.LIGHTWEAVER, () -> new InvestitureManifestationBase(Color.WHITE.getRGB())); - //public static final RegistryObject ELSECALLER = MANIFESTATIONS.register(Constants.Manifestations.Surgebinding.ELSECALLER, () -> new InvestitureManifestationBase(Color.WHITE.getRGB())); - //public static final RegistryObject WILLSHAPER = MANIFESTATIONS.register(Constants.Manifestations.Surgebinding.WILLSHAPER, () -> new InvestitureManifestationBase(Color.WHITE.getRGB())); - //public static final RegistryObject STONEWARD = MANIFESTATIONS.register(Constants.Manifestations.Surgebinding.STONEWARD, () -> new InvestitureManifestationBase(Color.WHITE.getRGB())); - //public static final RegistryObject BONDSMITH = MANIFESTATIONS.register(Constants.Manifestations.Surgebinding.BONDSMITH, () -> new InvestitureManifestationBase(Color.WHITE.getRGB())); - - //Create Registry - public static AManifestation fromID(String location) - { - ResourceLocation resourceLocation = new ResourceLocation(location); - return fromID(resourceLocation); - } - - public static AManifestation fromID(ResourceLocation location) - { - AManifestation value = MANIFESTATION_REGISTRY.get().getValue(location); - if (value != null) - { - return value; - } - return ManifestationRegistry.NONE.get(); - } - - - private static AllomancyBase makeAllomancyManifestation(Metals.MetalType metalType) - { - switch (metalType) - { - case IRON://todo pull and iron sight - case STEEL://todo push and steel sight - return new AllomancyIronSteel(metalType); - case TIN://todo more than just night vision? - return new AllomancyTin(metalType); - case PEWTER://done? - return new AllomancyPewter(metalType); - case ZINC://done? - return new AllomancyZinc(metalType); - case BRASS://done? - return new AllomancyBrass(metalType); - case COPPER://done? - return new AllomancyCopper(metalType); - case BRONZE://done? - return new AllomancyBronze(metalType); - case ALUMINUM:// done? - return new AllomancyAluminum(metalType); - case DURALUMIN://todo decide how to enhance other metals - return new AllomancyDuralumin(metalType); - case CHROMIUM://done? - return new AllomancyChromium(metalType); - case NICROSIL://todo decide how to enhance other metals - return new AllomancyNicrosil(metalType); - case CADMIUM://todo decide how to slow down time - return new AllomancyCadmium(metalType); - case BENDALLOY://done? - return new AllomancyBendalloy(metalType); - case GOLD://shows your past //todo - return new AllomancyGold(metalType); - case ELECTRUM://shows your future // todo - return new AllomancyElectrum(metalType); - } - - //others aren't valid allomancy manifestations... for now. - return new AllomancyBase(metalType); - } - - - private static FeruchemyBase makeFeruchemyManifestation(Metals.MetalType metalType) - { - if (metalType == Metals.MetalType.COPPER) - return new FeruchemyCopper(metalType); - else if (metalType == Metals.MetalType.ZINC) - return new FeruchemyZinc(metalType); - else if (metalType == Metals.MetalType.ALUMINUM) - return new FeruchemyAluminum(metalType); - else if (metalType == Metals.MetalType.NICROSIL) - return new FeruchemyNicrosil(metalType); - else if (metalType == Metals.MetalType.ELECTRUM) - return new FeruchemyElectrum(metalType); - else - return new FeruchemyBase(metalType); - } - - public static Map getManifestations() - { - Map map = new HashMap<>(); - - IForgeRegistry abstractInvestitureManifestations = ManifestationRegistry.MANIFESTATION_REGISTRY.get(); - for (AManifestation data : abstractInvestitureManifestations) - { - map.put(data.getRegistryName(), data.description().getKey()); - } - return map; - } -} diff --git a/src/main/java/leaf/cosmere/registry/RecipeRegistry.java b/src/main/java/leaf/cosmere/registry/RecipeRegistry.java deleted file mode 100644 index a049de921..000000000 --- a/src/main/java/leaf/cosmere/registry/RecipeRegistry.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * File created ~ 10 - 5 - 2021 ~ Leaf - */ - -package leaf.cosmere.registry; - -import leaf.cosmere.Cosmere; -import leaf.cosmere.recipes.VialMixingRecipe; -import net.minecraft.item.crafting.FireworkStarRecipe; -import net.minecraft.item.crafting.IRecipeSerializer; -import net.minecraft.item.crafting.SpecialRecipeSerializer; -import net.minecraftforge.fml.RegistryObject; -import net.minecraftforge.registries.DeferredRegister; -import net.minecraftforge.registries.ForgeRegistries; - -// for the non-json based recipes -public class RecipeRegistry -{ - public static final DeferredRegister> SPECIAL_RECIPES = DeferredRegister.create(ForgeRegistries.RECIPE_SERIALIZERS, Cosmere.MODID); - - - //not sure why I can't copy how minecraft fireworks do their serializer, but this works. - public static class VialMixingRecipeSerializer extends SpecialRecipeSerializer - { - public VialMixingRecipeSerializer() { - super(VialMixingRecipe::new); - } - } - public static final RegistryObject> VIAL_RECIPE_SERIALIZER = SPECIAL_RECIPES.register("vial_mix", VialMixingRecipeSerializer::new); - -} diff --git a/src/main/java/leaf/cosmere/registry/TagsRegistry.java b/src/main/java/leaf/cosmere/registry/TagsRegistry.java deleted file mode 100644 index 48e4558b2..000000000 --- a/src/main/java/leaf/cosmere/registry/TagsRegistry.java +++ /dev/null @@ -1,132 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.registry; - -import leaf.cosmere.constants.Metals; -import net.minecraft.block.Block; -import net.minecraft.item.Item; -import net.minecraft.tags.BlockTags; -import net.minecraft.tags.ITag; -import net.minecraft.tags.ItemTags; -import net.minecraft.util.ResourceLocation; - -import java.util.Arrays; -import java.util.List; -import java.util.Map; -import java.util.function.Function; -import java.util.stream.Collectors; - -import static leaf.cosmere.utils.helpers.ResourceLocationHelper.prefix; - -public class TagsRegistry -{ - private static ITag.INamedTag getOrRegister(List> list, - Function> register, - ResourceLocation loc) - { - for (ITag.INamedTag existing : list) - { - if (existing.getName().equals(loc)) - { - return existing; - } - } - - return register.apply(loc); - } - - public static class Items - { - - - public static ITag.INamedTag CURIO_ANY = makeItem("curios", "curio"); - public static ITag.INamedTag CURIO_BACK = makeItem("curios", "back"); - public static ITag.INamedTag CURIO_BELT = makeItem("curios", "belt"); - public static ITag.INamedTag CURIO_BODY = makeItem("curios", "body"); - public static ITag.INamedTag CURIO_BRACELET = makeItem("curios", "bracelet"); - public static ITag.INamedTag CURIO_CHARM = makeItem("curios", "charm"); - public static ITag.INamedTag CURIO_HEAD = makeItem("curios", "head"); - public static ITag.INamedTag CURIO_HANDS = makeItem("curios", "hands"); - public static ITag.INamedTag CURIO_NECKLACE = makeItem("curios", "necklace"); - public static ITag.INamedTag CURIO_RING = makeItem("curios", "ring"); - - - public static ITag.INamedTag NUGGET = forgeItemTag("nugget"); - - - public static final Map> METAL_RAW_TAGS = - Arrays.stream(Metals.MetalType.values()) - .collect(Collectors.toMap( - Function.identity(), - type -> forgeItemTag("raw/" + type.name().toLowerCase()))); - - public static final Map> METAL_DUST_TAGS = - Arrays.stream(Metals.MetalType.values()) - .collect(Collectors.toMap( - Function.identity(), - type -> forgeItemTag("dust/" + type.name().toLowerCase()))); - - public static final Map> METAL_NUGGET_TAGS = - Arrays.stream(Metals.MetalType.values()) - .collect(Collectors.toMap( - Function.identity(), - type -> forgeItemTag("nuggets/" + type.name().toLowerCase()))); - - public static final Map> METAL_INGOT_TAGS = - Arrays.stream(Metals.MetalType.values()) - .collect(Collectors.toMap( - Function.identity(), - type -> forgeItemTag("ingots/" + type.name().toLowerCase()))); - - public static final Map> METAL_BLOCK_ITEM_TAGS = - Arrays.stream(Metals.MetalType.values()) - .collect(Collectors.toMap( - Function.identity(), - type -> forgeItemTag("storage_blocks/" + type.name().toLowerCase()))); - - - private static ITag.INamedTag itemTag(String name) - { - return ItemTags.makeWrapperTag(prefix(name).toString()); - } - - private static ITag.INamedTag forgeItemTag(String name) - { - return getOrRegister(ItemTags.getAllTags(), loc -> ItemTags.makeWrapperTag(loc.toString()), new ResourceLocation("forge", name)); - } - - - public static ITag.INamedTag makeItem(String domain, String path) - { - return ItemTags.makeWrapperTag(new ResourceLocation(domain, path).toString()); - } - } - - public static class Blocks - { - - - public static ITag.INamedTag makeBlock(String domain, String path) - { - return BlockTags.makeWrapperTag(new ResourceLocation(domain, path).toString()); - } - - public static ITag.INamedTag DRAGON_PROOF = makeBlock("minecraft", "dragon_immune"); - public static ITag.INamedTag WITHER_PROOF = makeBlock("minecraft", "wither_immune"); - - public static final Map> METAL_BLOCK_TAGS = - Arrays.stream(Metals.MetalType.values()) - .collect(Collectors.toMap( - Function.identity(), - type -> forgeTag("storage_blocks/" + type.name().toLowerCase()))); - - private static ITag.INamedTag forgeTag(String name) - { - return getOrRegister(BlockTags.getAllTags(), loc -> BlockTags.makeWrapperTag(loc.toString()), new ResourceLocation("forge", name)); - } - - } - -} diff --git a/src/main/java/leaf/cosmere/utils/helpers/CodecHelper.java b/src/main/java/leaf/cosmere/utils/helpers/CodecHelper.java deleted file mode 100644 index 48e37c7d2..000000000 --- a/src/main/java/leaf/cosmere/utils/helpers/CodecHelper.java +++ /dev/null @@ -1,16 +0,0 @@ -/* - * File created ~ 8 - 5 - 2021 ~ Leaf - */ - -package leaf.cosmere.utils.helpers; - -import com.mojang.serialization.Codec; -import net.minecraft.util.math.BlockPos; - -import java.util.List; - -public class CodecHelper -{ - public static Codec> BlockPosListCodec = Codec.list(BlockPos.CODEC); - -} diff --git a/src/main/java/leaf/cosmere/utils/helpers/CommandHelper.java b/src/main/java/leaf/cosmere/utils/helpers/CommandHelper.java deleted file mode 100644 index b98a7570c..000000000 --- a/src/main/java/leaf/cosmere/utils/helpers/CommandHelper.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.utils.helpers; - -import com.mojang.brigadier.suggestion.SuggestionsBuilder; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.text.TextFormatting; -import net.minecraft.util.text.TranslationTextComponent; - -import java.util.Map; - -import static leaf.cosmere.registry.ManifestationRegistry.getManifestations; - -public class CommandHelper -{ - public static SuggestionsBuilder addManifestationNamesWithTooltip(SuggestionsBuilder builder) - { - Map map = getManifestations(); - if (!map.isEmpty()) - { - map.entrySet().forEach(entry -> - { - builder.suggest(entry.getKey().toString(), new TranslationTextComponent(entry.getValue()).modifyStyle((style) -> style.setFormatting(TextFormatting.GREEN))); - }); - } - builder.buildFuture(); - return builder; - } -} diff --git a/src/main/java/leaf/cosmere/utils/helpers/CompoundNBTHelper.java b/src/main/java/leaf/cosmere/utils/helpers/CompoundNBTHelper.java deleted file mode 100644 index dc2efe70b..000000000 --- a/src/main/java/leaf/cosmere/utils/helpers/CompoundNBTHelper.java +++ /dev/null @@ -1,246 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - * Thank you botania! Pretty much directly copied from botania as this is so much easier to work with! - */ - -package leaf.cosmere.utils.helpers; - -import net.minecraft.nbt.CompoundNBT; -import net.minecraft.nbt.INBT; -import net.minecraft.nbt.ListNBT; - -import javax.annotation.Nullable; -import java.util.List; -import java.util.UUID; - -public final class CompoundNBTHelper -{ - - private static final int[] EMPTY_INT_ARRAY = new int[0]; - - - public static void set(CompoundNBT compoundTag, String tag, INBT nbt) - { - compoundTag.put(tag, nbt); - } - - public static void setBoolean(CompoundNBT compoundTag, String tag, boolean b) - { - compoundTag.putBoolean(tag, b); - } - - public static void setByte(CompoundNBT compoundTag, String tag, byte b) - { - compoundTag.putByte(tag, b); - } - - public static void setShort(CompoundNBT compoundTag, String tag, short s) - { - compoundTag.putShort(tag, s); - } - - public static void setInt(CompoundNBT compoundTag, String tag, int i) - { - compoundTag.putInt(tag, i); - } - - public static void setIntArray(CompoundNBT compoundTag, String tag, int[] val) - { - compoundTag.putIntArray(tag, val); - } - public static void setIntArray(CompoundNBT compoundTag, String tag, List val) - { - compoundTag.putIntArray(tag, val); - } - - public static void setLong(CompoundNBT compoundTag, String tag, long l) - { - compoundTag.putLong(tag, l); - } - - public static void setFloat(CompoundNBT compoundTag, String tag, float f) - { - compoundTag.putFloat(tag, f); - } - - public static void setDouble(CompoundNBT compoundTag, String tag, double d) - { - compoundTag.putDouble(tag, d); - } - - public static void setCompound(CompoundNBT compoundTag, String tag, CompoundNBT cmp) - { - if (!tag.equalsIgnoreCase("ench")) // not override the enchantments - { - compoundTag.put(tag, cmp); - } - } - - public static void setString(CompoundNBT compoundTag, String tag, String s) - { - compoundTag.putString(tag, s); - } - - public static void setUuid(CompoundNBT compoundTag, String tag, UUID value) - { - compoundTag.putUniqueId(tag, value); - } - - public static void setList(CompoundNBT compoundTag, String tag, ListNBT list) - { - compoundTag.put(tag, list); - } - - public static void removeEntry(CompoundNBT compoundTag, String tag) - { - compoundTag.remove(tag); - } - - // GETTERS - - public static boolean verifyExistance(CompoundNBT compoundTag, String tag) - { - return compoundTag.contains(tag); - } - - @Nullable - public static INBT get(CompoundNBT compoundTag, String tag) - { - return verifyExistance(compoundTag, tag) ? compoundTag.get(tag) : null; - } - - public static boolean getBoolean(CompoundNBT compoundTag, String tag, boolean defaultExpected) - { - return verifyExistance(compoundTag, tag) ? compoundTag.getBoolean(tag) : defaultExpected; - } - - public static byte getByte(CompoundNBT compoundTag, String tag, byte defaultExpected) - { - return verifyExistance(compoundTag, tag) ? compoundTag.getByte(tag) : defaultExpected; - } - - public static short getShort(CompoundNBT compoundTag, String tag, short defaultExpected) - { - return verifyExistance(compoundTag, tag) ? compoundTag.getShort(tag) : defaultExpected; - } - - public static int getInt(CompoundNBT compoundTag, String tag, int defaultExpected) - { - return verifyExistance(compoundTag, tag) ? compoundTag.getInt(tag) : defaultExpected; - } - - public static int[] getIntArray(CompoundNBT compoundTag, String tag) - { - return verifyExistance(compoundTag, tag) ? compoundTag.getIntArray(tag) : EMPTY_INT_ARRAY; - } - - public static long getLong(CompoundNBT compoundTag, String tag, long defaultExpected) - { - return verifyExistance(compoundTag, tag) ? compoundTag.getLong(tag) : defaultExpected; - } - - public static float getFloat(CompoundNBT compoundTag, String tag, float defaultExpected) - { - return verifyExistance(compoundTag, tag) ? compoundTag.getFloat(tag) : defaultExpected; - } - - public static double getDouble(CompoundNBT compoundTag, String tag, double defaultExpected) - { - return verifyExistance(compoundTag, tag) ? compoundTag.getDouble(tag) : defaultExpected; - } - - /** - * If nullifyOnFail is true it'll return null if it doesn't find any - * compounds, otherwise it'll return a new one. - **/ - public static CompoundNBT getCompound(CompoundNBT compoundTag, String tag, boolean nullifyOnFail) - { - return verifyExistance(compoundTag, tag) ? compoundTag.getCompound(tag) - : nullifyOnFail ? null : new CompoundNBT(); - } - - public static String getString(CompoundNBT compoundTag, String tag, String defaultExpected) - { - return verifyExistance(compoundTag, tag) ? compoundTag.getString(tag) : defaultExpected; - } - - @Nullable - public static UUID getUuid(CompoundNBT compoundTag, String tag) - { - return verifyExistance(compoundTag, tag + "Most") && verifyExistance(compoundTag, tag + "Least") - ? compoundTag.getUniqueId(tag) : null; - } - - public static ListNBT getList(CompoundNBT compoundTag, String tag, int objtype, boolean nullifyOnFail) - { - return verifyExistance(compoundTag, tag) ? compoundTag.getList(tag, objtype) - : nullifyOnFail ? null : new ListNBT(); - } - /** - * Returns true if the `target` tag contains all of the tags and values present in the `template` tag. Recurses into - * compound tags and matches all template keys and values; recurses into list tags and matches the template against - * the first elements of target. Empty lists and compounds in the template will match target lists and compounds of - * any size. - */ - public static boolean matchTag(@Nullable INBT template, @Nullable INBT target) - { - if (template instanceof CompoundNBT && target instanceof CompoundNBT) - { - return matchTagCompound((CompoundNBT) template, (CompoundNBT) target); - } - else if (template instanceof ListNBT && target instanceof ListNBT) - { - return matchTagList((ListNBT) template, (ListNBT) target); - } - else - { - return template == null || (target != null && target.equals(template)); - } - } - - private static boolean matchTagCompound(CompoundNBT template, CompoundNBT target) - { - if (template.size() > target.size()) - { - return false; - } - - for (String key : template.keySet()) - { - if (!matchTag(template.get(key), target.get(key))) - { - return false; - } - } - - return true; - } - - private static boolean matchTagList(ListNBT template, ListNBT target) - { - if (template.size() > target.size()) - { - return false; - } - - for (int i = 0; i < template.size(); i++) - { - if (!matchTag(template.get(i), target.get(i))) - { - return false; - } - } - - return true; - } - - public static void renameTag(CompoundNBT nbt, String oldName, String newName) - { - INBT tag = nbt.get(oldName); - if (tag != null) - { - nbt.remove(oldName); - nbt.put(newName, tag); - } - } -} diff --git a/src/main/java/leaf/cosmere/utils/helpers/EffectsHelper.java b/src/main/java/leaf/cosmere/utils/helpers/EffectsHelper.java deleted file mode 100644 index ee0fc55ac..000000000 --- a/src/main/java/leaf/cosmere/utils/helpers/EffectsHelper.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.utils.helpers; - -import net.minecraft.potion.Effect; -import net.minecraft.potion.EffectInstance; - -public class EffectsHelper -{ - - - public static EffectInstance getNewEffect(Effect effect, int amplifier) - { - EffectInstance effectInstance = new EffectInstance( - effect, - 21, - Math.max(0, amplifier), - false, //usually means came from outside player means, eg beacon? if true, hides icon in non-inv gui - false, // definitely don't want particles. - true); // show icon though - - return effectInstance; - } -} diff --git a/src/main/java/leaf/cosmere/utils/helpers/EntityHelper.java b/src/main/java/leaf/cosmere/utils/helpers/EntityHelper.java deleted file mode 100644 index 4ab3354fe..000000000 --- a/src/main/java/leaf/cosmere/utils/helpers/EntityHelper.java +++ /dev/null @@ -1,109 +0,0 @@ -/* - * File created ~ 25 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.utils.helpers; - -import leaf.cosmere.cap.entity.SpiritwebCapability; -import leaf.cosmere.constants.Manifestations; -import net.minecraft.entity.Entity; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.util.math.AxisAlignedBB; - -import java.util.List; - -public class EntityHelper -{ - public static List getLivingEntitiesInRange(LivingEntity selfEntity, int range, boolean includeSelf) - { - AxisAlignedBB areaOfEffect = new AxisAlignedBB(selfEntity.getPosition()); - areaOfEffect = areaOfEffect.grow(range, range, range); - - List entitiesFound = selfEntity.world.getEntitiesWithinAABB(LivingEntity.class, areaOfEffect); - - if (!includeSelf) - { - //removes self entity if it exists in the list - //otherwise list unchanged - entitiesFound.remove(selfEntity); - } - - return entitiesFound; - } - - public static List getEntitiesInRange(Entity entity, int range, boolean includeSelf) - { - AxisAlignedBB areaOfEffect = new AxisAlignedBB(entity.getPosition()); - areaOfEffect = areaOfEffect.expand(range, range, range); - - List entitiesFound = entity.world.getEntitiesWithinAABB(Entity.class, areaOfEffect); - - if (!includeSelf && entitiesFound.contains(entity)) - { - entitiesFound.remove(entity); - } - - return entitiesFound; - } - - - public static void giveEntityStartingManifestation(LivingEntity entity, SpiritwebCapability spiritwebCapability) - { - boolean isPlayerEntity = entity instanceof PlayerEntity; - //low chance of having full powers of one type - boolean isFullPowersFromOneType = MathHelper.randomInt(0, 16) % 16 == 0; - - //small chance of being twin born, but only if not having full powers above - //except for players who are guaranteed having at least two powers. - boolean isTwinborn = isPlayerEntity || MathHelper.randomInt(0, 16) < 3; - - //randomise the given powers from allomancy and feruchemy - int allomancyPower = MathHelper.randomInt(0, 15); - int feruchemyPower = MathHelper.randomInt(0, 15); - - //if not twinborn, pick one power - boolean isAllomancy = MathHelper.randomBool(); - Manifestations.ManifestationTypes powerType = isAllomancy - ? Manifestations.ManifestationTypes.ALLOMANCY - : Manifestations.ManifestationTypes.FERUCHEMY; - - if (isFullPowersFromOneType) - { - //ooh full powers - for (int i = 0; i < 16; i++) - { - spiritwebCapability.giveManifestation(powerType, i); - } - - if (!isPlayerEntity) - { - //todo translations - //todo grant random name - entity.setCustomName(TextHelper.createTranslatedText(isAllomancy - ? "Mistborn" - : "Feruchemist")); - } - } - else if (isTwinborn) - { - spiritwebCapability.giveManifestation(Manifestations.ManifestationTypes.ALLOMANCY, allomancyPower); - spiritwebCapability.giveManifestation(Manifestations.ManifestationTypes.FERUCHEMY, feruchemyPower); - - if (!isPlayerEntity) - { - //todo translations - //todo grant random name - entity.setCustomName(TextHelper.createTranslatedText("Twinborn")); - } - } - else - { - int powerID = isAllomancy ? allomancyPower : feruchemyPower; - spiritwebCapability.giveManifestation(powerType, powerID); - //todo translations - //todo grant random name - entity.setCustomName(powerType.getManifestation(powerID).translation()); - } - } -} diff --git a/src/main/java/leaf/cosmere/utils/helpers/LogHelper.java b/src/main/java/leaf/cosmere/utils/helpers/LogHelper.java deleted file mode 100644 index d80a2b209..000000000 --- a/src/main/java/leaf/cosmere/utils/helpers/LogHelper.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.utils.helpers; - -import leaf.cosmere.Cosmere; -import org.apache.logging.log4j.Level; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; - -public class LogHelper -{ - public static Logger LOGGER = LogManager.getLogger(Cosmere.MODID); - - public static void log(Level logLevel, Object object) - { - LOGGER.log(logLevel, String.valueOf(object)); - } - - public static void all(Object object) - { - log(Level.ALL, object); - } - - public static void debug(Object object) - { - log(Level.DEBUG, object); - } - - public static void error(Object object) - { - log(Level.ERROR, object); - } - - public static void fatal(Object object) - { - log(Level.FATAL, object); - } - - public static void info(Object object) - { - log(Level.INFO, object); - } - - public static void off(Object object) - { - log(Level.OFF, object); - } - - public static void trace(Object object) - { - log(Level.TRACE, object); - } - - public static void warn(Object object) - { - log(Level.WARN, object); - } -} \ No newline at end of file diff --git a/src/main/java/leaf/cosmere/utils/helpers/MathHelper.java b/src/main/java/leaf/cosmere/utils/helpers/MathHelper.java deleted file mode 100644 index f64e1835a..000000000 --- a/src/main/java/leaf/cosmere/utils/helpers/MathHelper.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.utils.helpers; - -import java.util.Random; - -public class MathHelper -{ - final static Random rand = new Random(); - public static int randomInt(int min, int max) - { - return rand.nextInt((max - min) + 1) + min; - } - public static boolean randomBool() - { - return rand.nextBoolean(); - } - - - - public static float clamp01(final float f) - { - return Math.max(0.0f, Math.min(1.0f, f)); - } - - - - public static boolean inTriangle( - final double x1, - final double y1, - final double x2, - final double y2, - final double x3, - final double y3, - final double x, - final double y) - { - final double ab = (x1 - x) * (y2 - y) - (x2 - x) * (y1 - y); - final double bc = (x2 - x) * (y3 - y) - (x3 - x) * (y2 - y); - final double ca = (x3 - x) * (y1 - y) - (x1 - x) * (y3 - y); - return sign(ab) == sign(bc) && sign(bc) == sign(ca); - } - - public static int sign(final double n) - { - return n > 0 ? 1 : -1; - } -} diff --git a/src/main/java/leaf/cosmere/utils/helpers/PlayerHelper.java b/src/main/java/leaf/cosmere/utils/helpers/PlayerHelper.java deleted file mode 100644 index 5a38ead38..000000000 --- a/src/main/java/leaf/cosmere/utils/helpers/PlayerHelper.java +++ /dev/null @@ -1,19 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.utils.helpers; - -import com.mojang.authlib.GameProfile; -import net.minecraft.server.MinecraftServer; - -import java.util.UUID; - -public class PlayerHelper -{ - public static String getPlayerName(UUID id, MinecraftServer server) - { - GameProfile profileByUUID = server.getPlayerProfileCache().getProfileByUUID(id); - return profileByUUID != null ? profileByUUID.getName() : "OFFLINE Player"; - } -} diff --git a/src/main/java/leaf/cosmere/utils/helpers/ResourceLocationHelper.java b/src/main/java/leaf/cosmere/utils/helpers/ResourceLocationHelper.java deleted file mode 100644 index 28a316042..000000000 --- a/src/main/java/leaf/cosmere/utils/helpers/ResourceLocationHelper.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -/* - * This class is distributed as part of the Cosmere Mod. - * Get the Source Code in github: - * https://github.com/Vazkii/Cosmere - * - * Cosmere is Open Source and distributed under the - * Cosmere License: http://Cosmeremod.net/license.php - */ -package leaf.cosmere.utils.helpers; - -import leaf.cosmere.Cosmere; -import net.minecraft.util.ResourceLocation; - -import java.util.Locale; - -public class ResourceLocationHelper -{ - public static ResourceLocation prefix(String path) - { - return new ResourceLocation(Cosmere.MODID, path.toLowerCase(Locale.ROOT)); - } -} diff --git a/src/main/java/leaf/cosmere/utils/helpers/StackNBTHelper.java b/src/main/java/leaf/cosmere/utils/helpers/StackNBTHelper.java deleted file mode 100644 index 5c90934a7..000000000 --- a/src/main/java/leaf/cosmere/utils/helpers/StackNBTHelper.java +++ /dev/null @@ -1,269 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - * Thank you botania! Pretty much directly copied from botania as this is so much easier to work with! - */ - -package leaf.cosmere.utils.helpers; - - -import com.google.gson.JsonObject; -import com.mojang.serialization.Dynamic; -import com.mojang.serialization.JsonOps; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.CompoundNBT; -import net.minecraft.nbt.INBT; -import net.minecraft.nbt.ListNBT; -import net.minecraft.nbt.NBTDynamicOps; - -import javax.annotation.Nullable; -import java.util.UUID; - -public final class StackNBTHelper -{ - - private static final int[] EMPTY_INT_ARRAY = new int[0]; - - // SETTERS /////////////////////////////////////////////////////////////////// - - public static void set(ItemStack stack, String tag, INBT nbt) - { - stack.getOrCreateTag().put(tag, nbt); - } - - public static void setBoolean(ItemStack stack, String tag, boolean b) - { - stack.getOrCreateTag().putBoolean(tag, b); - } - - public static void setByte(ItemStack stack, String tag, byte b) - { - stack.getOrCreateTag().putByte(tag, b); - } - - public static void setShort(ItemStack stack, String tag, short s) - { - stack.getOrCreateTag().putShort(tag, s); - } - - public static void setInt(ItemStack stack, String tag, int i) - { - stack.getOrCreateTag().putInt(tag, i); - } - - public static void setIntArray(ItemStack stack, String tag, int[] val) - { - stack.getOrCreateTag().putIntArray(tag, val); - } - - public static void setLong(ItemStack stack, String tag, long l) - { - stack.getOrCreateTag().putLong(tag, l); - } - - public static void setFloat(ItemStack stack, String tag, float f) - { - stack.getOrCreateTag().putFloat(tag, f); - } - - public static void setDouble(ItemStack stack, String tag, double d) - { - stack.getOrCreateTag().putDouble(tag, d); - } - - public static void setCompound(ItemStack stack, String tag, CompoundNBT cmp) - { - if (!tag.equalsIgnoreCase("ench")) // not override the enchantments - { - stack.getOrCreateTag().put(tag, cmp); - } - } - - public static void setString(ItemStack stack, String tag, String s) - { - stack.getOrCreateTag().putString(tag, s); - } - - public static void setUuid(ItemStack stack, String tag, UUID value) - { - stack.getOrCreateTag().putUniqueId(tag, value); - } - - public static void setList(ItemStack stack, String tag, ListNBT list) - { - stack.getOrCreateTag().put(tag, list); - } - - public static void removeEntry(ItemStack stack, String tag) - { - stack.getOrCreateTag().remove(tag); - } - - // GETTERS /////////////////////////////////////////////////////////////////// - - public static boolean verifyExistance(ItemStack stack, String tag) - { - return !stack.isEmpty() && stack.getOrCreateTag().contains(tag); - } - - @Nullable - public static INBT get(ItemStack stack, String tag) - { - return verifyExistance(stack, tag) ? stack.getOrCreateTag().get(tag) : null; - } - - public static boolean getBoolean(ItemStack stack, String tag, boolean defaultExpected) - { - return verifyExistance(stack, tag) ? stack.getOrCreateTag().getBoolean(tag) : defaultExpected; - } - - public static byte getByte(ItemStack stack, String tag, byte defaultExpected) - { - return verifyExistance(stack, tag) ? stack.getOrCreateTag().getByte(tag) : defaultExpected; - } - - public static short getShort(ItemStack stack, String tag, short defaultExpected) - { - return verifyExistance(stack, tag) ? stack.getOrCreateTag().getShort(tag) : defaultExpected; - } - - public static int getInt(ItemStack stack, String tag, int defaultExpected) - { - return verifyExistance(stack, tag) ? stack.getOrCreateTag().getInt(tag) : defaultExpected; - } - - public static int[] getIntArray(ItemStack stack, String tag) - { - return verifyExistance(stack, tag) ? stack.getOrCreateTag().getIntArray(tag) : EMPTY_INT_ARRAY; - } - - public static long getLong(ItemStack stack, String tag, long defaultExpected) - { - return verifyExistance(stack, tag) ? stack.getOrCreateTag().getLong(tag) : defaultExpected; - } - - public static float getFloat(ItemStack stack, String tag, float defaultExpected) - { - return verifyExistance(stack, tag) ? stack.getOrCreateTag().getFloat(tag) : defaultExpected; - } - - public static double getDouble(ItemStack stack, String tag, double defaultExpected) - { - return verifyExistance(stack, tag) ? stack.getOrCreateTag().getDouble(tag) : defaultExpected; - } - - /** - * If nullifyOnFail is true it'll return null if it doesn't find any - * compounds, otherwise it'll return a new one. - **/ - public static CompoundNBT getCompound(ItemStack stack, String tag, boolean nullifyOnFail) - { - return verifyExistance(stack, tag) ? stack.getOrCreateTag().getCompound(tag) - : nullifyOnFail ? null : new CompoundNBT(); - } - - public static String getString(ItemStack stack, String tag, String defaultExpected) - { - return verifyExistance(stack, tag) ? stack.getOrCreateTag().getString(tag) : defaultExpected; - } - - @Nullable - public static UUID getUuid(ItemStack stack, String tag) - { - return verifyExistance(stack, tag) - ? stack.getOrCreateTag().getUniqueId(tag) - : null; - } - - public static ListNBT getList(ItemStack stack, String tag, int objtype, boolean nullifyOnFail) - { - return verifyExistance(stack, tag) ? stack.getOrCreateTag().getList(tag, objtype) - : nullifyOnFail ? null : new ListNBT(); - } - - /** - * Serializes the given stack such that {@link net.minecraft.item.crafting.ShapedRecipe#deserializeItem} - * would be able to read the result back - */ - public static JsonObject serializeStack(ItemStack stack) - { - CompoundNBT nbt = stack.write(new CompoundNBT()); - byte c = nbt.getByte("Count"); - if (c != 1) - { - nbt.putByte("count", c); - } - nbt.remove("Count"); - renameTag(nbt, "id", "item"); - renameTag(nbt, "tag", "nbt"); - Dynamic dyn = new Dynamic<>(NBTDynamicOps.INSTANCE, nbt); - return dyn.convert(JsonOps.INSTANCE).getValue().getAsJsonObject(); - } - - /** - * Returns true if the `target` tag contains all of the tags and values present in the `template` tag. Recurses into - * compound tags and matches all template keys and values; recurses into list tags and matches the template against - * the first elements of target. Empty lists and compounds in the template will match target lists and compounds of - * any size. - */ - public static boolean matchTag(@Nullable INBT template, @Nullable INBT target) - { - if (template instanceof CompoundNBT && target instanceof CompoundNBT) - { - return matchTagCompound((CompoundNBT) template, (CompoundNBT) target); - } - else if (template instanceof ListNBT && target instanceof ListNBT) - { - return matchTagList((ListNBT) template, (ListNBT) target); - } - else - { - return template == null || (target != null && target.equals(template)); - } - } - - private static boolean matchTagCompound(CompoundNBT template, CompoundNBT target) - { - if (template.size() > target.size()) - { - return false; - } - - for (String key : template.keySet()) - { - if (!matchTag(template.get(key), target.get(key))) - { - return false; - } - } - - return true; - } - - private static boolean matchTagList(ListNBT template, ListNBT target) - { - if (template.size() > target.size()) - { - return false; - } - - for (int i = 0; i < template.size(); i++) - { - if (!matchTag(template.get(i), target.get(i))) - { - return false; - } - } - - return true; - } - - public static void renameTag(CompoundNBT nbt, String oldName, String newName) - { - INBT tag = nbt.get(oldName); - if (tag != null) - { - nbt.remove(oldName); - nbt.put(newName, tag); - } - } -} diff --git a/src/main/java/leaf/cosmere/utils/helpers/TextHelper.java b/src/main/java/leaf/cosmere/utils/helpers/TextHelper.java deleted file mode 100644 index 6a97b072a..000000000 --- a/src/main/java/leaf/cosmere/utils/helpers/TextHelper.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * File created ~ 24 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.utils.helpers; - -import net.minecraft.server.MinecraftServer; -import net.minecraft.util.text.StringTextComponent; -import net.minecraft.util.text.TextComponent; -import net.minecraft.util.text.TextFormatting; -import net.minecraft.util.text.TranslationTextComponent; -import net.minecraft.util.text.event.ClickEvent; -import net.minecraft.util.text.event.HoverEvent; -import net.minecraft.world.server.ServerWorld; - -import java.util.UUID; - -public class TextHelper -{ - public static TextComponent getPlayerTextObject(ServerWorld world, UUID id) - { - return getPlayerTextObject(world.getServer(), id); - } - - public static TextComponent getPlayerTextObject(MinecraftServer server, UUID id) - { - String playerName = PlayerHelper.getPlayerName(id, server); - return createTextComponentWithTip(playerName, id.toString()); - } - - public static TextComponent createTextComponentWithTip(String text, String tooltipText) - { - //Always surround tool tip items with brackets - TextComponent textComponent = new StringTextComponent("[" + text + "]"); - textComponent.modifyStyle(style -> - { - return style.setFormatting(TextFormatting.GREEN)//color tool tip items green - .setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new StringTextComponent(tooltipText))).setClickEvent(new ClickEvent(ClickEvent.Action.COPY_TO_CLIPBOARD, tooltipText)); - }); - return textComponent; - } - - public static TextComponent createTextWithTooltip(TranslationTextComponent translation, TranslationTextComponent description) - { - //Always surround tool tip items with brackets - translation.modifyStyle(style -> - { - return style.setFormatting(TextFormatting.GREEN)//color tool tip items green - .setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, description)).setClickEvent(new ClickEvent(ClickEvent.Action.COPY_TO_CLIPBOARD, translation.getKey())); - }); - return translation; - } - - public static TextComponent createTranslatedText(String s, Object... a) - { - return new TranslationTextComponent(s, a); - } - - public static TextComponent createText(Object s) - { - return new StringTextComponent(s.toString()); - } -} diff --git a/src/main/java/leaf/cosmere/utils/helpers/VectorHelper.java b/src/main/java/leaf/cosmere/utils/helpers/VectorHelper.java deleted file mode 100644 index 0d9b14f30..000000000 --- a/src/main/java/leaf/cosmere/utils/helpers/VectorHelper.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * File created ~ 25 - 4 - 2021 ~ Leaf - */ - -package leaf.cosmere.utils.helpers; - -import net.minecraft.util.math.MathHelper; -import net.minecraft.util.math.vector.Vector2f; -import net.minecraft.util.math.vector.Vector3d; -import net.minecraft.util.math.vector.Vector3i; - -//Unity's vector3 code is a great resource for vector math -//https://github.com/Unity-Technologies/UnityCsReference/blob/master/Runtime/Export/Math/Vector3.cs -public class VectorHelper -{ - public static final float kEpsilon = 0.00001F; - - // Makes this vector have a magnitude of 1. - public static Vector3i Normalize(Vector3i vec) - { - float mag = Magnitude(vec); - if (mag > kEpsilon) - { - vec = divide(vec, mag); - } - else - { - vec = Vector3i.NULL_VECTOR; - } - - return vec; - } - - // - public static float Magnitude(Vector3i vector) - { - return MathHelper.sqrt(vector.getX() * vector.getX() + vector.getY() * vector.getY() + vector.getZ() * vector.getZ()); - } - - - public static Vector3i divide(Vector3i a, float d) - { - return new Vector3i(a.getX() / d, a.getY() / d, a.getZ() / d); - } - - - // Moves a point /current/ in a straight line towards a /target/ point. - public static Vector3d moveTowards(Vector3d current, Vector3i target, float maxDistanceDelta) - { - // avoid vector ops because current scripting backends are terrible at inlining - double toVector_x = target.getX() - current.x; - double toVector_y = target.getY() - current.y; - double toVector_z = target.getZ() - current.z; - - double sqdist = toVector_x * toVector_x + toVector_y * toVector_y + toVector_z * toVector_z; - - if (sqdist == 0 || (maxDistanceDelta >= 0 && sqdist <= maxDistanceDelta * maxDistanceDelta)) - { - return new Vector3d(target.getX(), target.getY(), target.getZ()); - } - float dist = (float) Math.sqrt(sqdist); - - return new Vector3d(current.x + toVector_x / dist * maxDistanceDelta, - current.y + toVector_y / dist * maxDistanceDelta, - current.z + toVector_z / dist * maxDistanceDelta); - } - - - // Moves a point /current/ in a straight line towards a /target/ point. - public static Vector3d getDirection(Vector3d target, Vector3d current, float multiplicationFactor) - { - double toVector_x = target.getX() - current.x; - double toVector_y = target.getY() - current.y; - double toVector_z = target.getZ() - current.z; - - return new Vector3d( - toVector_x * multiplicationFactor, - toVector_y * multiplicationFactor, - toVector_z * multiplicationFactor); - } - - -} diff --git a/src/main/java/leaf/cosmere/utils/helpers/XPHelper.java b/src/main/java/leaf/cosmere/utils/helpers/XPHelper.java deleted file mode 100644 index a1cd1a9af..000000000 --- a/src/main/java/leaf/cosmere/utils/helpers/XPHelper.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * File created ~ 27 - 4 - 2021 ~ Leaf - */ - -/* - * File created ~ 27 - 4 - 2021 ~ Leaf - * - * - * Code obtained from xReliquary @see {https://raw.githubusercontent.com/P3pp3rF1y/Reliquary/c18065d5874c106ef1c1befe9cbde4a4b754a05b/src/main/java/xreliquary/util/XpHelper.java} - * - * who in turn got it from: - * - * Code originally from EnderIO @see {https://github.com/SleepyTrousers/EnderIO/blob/master/src/main/java/crazypants/enderio/xp/XpUtil.java} - * - */ - -package leaf.cosmere.utils.helpers; - -/** - * - */ -public class XPHelper -{ - private static final int RATIO = 20; - - public static int liquidToExperience(int liquid) { - return liquid / RATIO; - } - - public static int experienceToLiquid(int xp) { - return xp * RATIO; - } - - public static int getExperienceForLevel(int level) { - if(level == 0) { - return 0; - } - if(level > 0 && level < 16) { - return level * (12 + level * 2) / 2; - } else if(level > 15 && level < 31) { - return (level - 15) * (69 + (level - 15) * 5) / 2 + 315; - } else { - return (level - 30) * (215 + (level - 30) * 9) / 2 + 1395; - } - } - - public static int getExperienceLimitOnLevel(int level) { - return level >= 30 ? 112 + (level - 30) * 9 : (level >= 15 ? 37 + (level - 15) * 5 : 7 + level * 2); - } - - public static int getLevelForExperience(int experience) { - int i = 0; - while(getExperienceForLevel(i) <= experience) { - i++; - } - return i - 1; - } - - public static int durabilityToXp(int durability) { - return durability / 2; - } - - public static int xpToDurability(int xp) { - return xp * 2; - } -} diff --git a/src/main/java/leaf/cosmere/utils/math/Vector2.java b/src/main/java/leaf/cosmere/utils/math/Vector2.java deleted file mode 100644 index b62c4406f..000000000 --- a/src/main/java/leaf/cosmere/utils/math/Vector2.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * File created ~ 12 - 5 - 2021 ~ Leaf - */ - -package leaf.cosmere.utils.math; - -import net.minecraft.util.math.MathHelper; -import net.minecraft.util.math.vector.Vector2f; - -public class Vector2 -{ - public static final Vector2 ZERO = new Vector2(0.0F, 0.0F); - public static final Vector2 ONE = new Vector2(1.0F, 1.0F); - - public float x = 0; - public float y = 0; - - public Vector2(float xIn, float yIn) - { - this.x = xIn; - this.y = yIn; - } - - public boolean equals(Vector2f other) - { - return this.x == other.x && this.y == other.y; - } - - public static final float Deg2Rad = 0.01745329f; - public Vector2 Rotate(float degrees) - { - float sin = MathHelper.sin(degrees * Deg2Rad); - float cos = MathHelper.cos(degrees * Deg2Rad); - - float tx = this.x; - float ty = this.y; - this.x = (cos * tx) - (sin * ty); - this.y = (sin * tx) + (cos * ty); - - return this; - } - public Vector2 oldRotate(float delta) - { - x = this.x * MathHelper.cos(delta) - this.y * MathHelper.sin(delta); - y = this.x * MathHelper.sin(delta) + this.y * MathHelper.cos(delta); - return this; - } - - public static Vector2 Rotate(Vector2 v, float delta) - { - return new Vector2( - v.x * MathHelper.cos(delta) - v.y * MathHelper.sin(delta), - v.x * MathHelper.sin(delta) + v.y * MathHelper.cos(delta) - ); - } -} diff --git a/src/main/resources/META-INF/accesstransformer.cfg b/src/main/resources/META-INF/accesstransformer.cfg index 03efbff93..e69de29bb 100644 --- a/src/main/resources/META-INF/accesstransformer.cfg +++ b/src/main/resources/META-INF/accesstransformer.cfg @@ -1,14 +0,0 @@ -public net.minecraft.entity.player.ServerPlayerEntity func_213846_b(Lnet/minecraft/world/server/ServerWorld;)V # func_213846_b -public net.minecraft.entity.player.ServerPlayerEntity field_193110_cw # enteredNetherPosition -public net.minecraft.entity.passive.SquidEntity func_203039_dq()V # squirtInk -public net.minecraft.entity.item.ArmorStandEntity func_175413_k(Z)V # setShowArms -public net.minecraft.entity.ai.goal.GoalSelector field_220892_d # goals in GoalSelector -public net.minecraft.network.play.ServerPlayNetHandler field_147365_f # floatingTickCount, so you don't get kicked for flying in space -public net.minecraft.server.MinecraftServer field_213220_d # chunkStatusListenerFactory -public net.minecraft.server.MinecraftServer field_213217_au # backgroundExecutor -public net.minecraft.server.MinecraftServer field_71310_m # anvilConverterForAnvilFile -public-f net.minecraft.world.gen.feature.structure.Structure field_236384_t_ #LAND_TRANSFORMING_STRUCTURES -public-f net.minecraft.world.gen.settings.DimensionStructuresSettings field_236191_b_ #DEFAULT_STRUCTURE_CONFIGS -public-f net.minecraft.world.gen.FlatGenerationSettings field_202247_j #STRUCTURES -public-f net.minecraft.world.gen.settings.DimensionStructuresSettings field_236193_d_ #structures -public-f net.minecraft.client.world.DimensionRenderInfo field_239208_a_ #SKY_PROPERTIES \ No newline at end of file diff --git a/src/main/resources/META-INF/mods.toml b/src/main/resources/META-INF/mods.toml index 6fa057afc..4fc0411ce 100644 --- a/src/main/resources/META-INF/mods.toml +++ b/src/main/resources/META-INF/mods.toml @@ -1,34 +1,52 @@ -modLoader="javafml" #mandatory -loaderVersion="[34,)" #mandatory -license="https://en.wikipedia.org/wiki/MIT_License" -[[mods]] #mandatory -modId="cosmere" #mandatory -version="${version}" #mandatory -displayName="The Cosmere" #mandatory -logoFile="cosmere_icon.png" -credits="Special thanks to 50ap5ud5, Suff, Spectre0987, Vazkii, the Chisels and Bits team and so many more. \nThey all either helped me (directly or indirectly via their open source repos) understand working with the minecraft and the forge API better <3\nSeriously. Thank you!" #optional -authors="Leafworthy" #optional -description=''' -Bringing The Cosmere to Minecraft! +modLoader = "javafml" +loaderVersion = "${loader_version}" +issueTrackerURL = "https://github.com/cosmere/Cosmere/issues" +license = "MIT" + +[[mods]] +modId = "cosmere" +version = "${version}" +displayName = "Cosmere" +displayURL = "https://www.curseforge.com/minecraft/mc-mods/cosmere/" +authors = "Leafy" +credits = ''' + +Ridanisaurus - For many item and block textures. ''' +logoFile = "logo.png" +description = '''Cosmere is a library mod, meant to be used with it's modules that add features from Brandon Sanderson's Cosmere universe.''' [[dependencies.cosmere]] - modId="forge" - mandatory=true - versionRange="[36.0.42,)" - ordering="NONE" - side="BOTH" - +modId = "minecraft" +mandatory = true +versionRange = "${mc_version}" +side = "BOTH" [[dependencies.cosmere]] - modId="minecraft" - mandatory=true - versionRange="[1.16.4, 1.16.5]" - ordering="NONE" - side="BOTH" - +modId = "forge" +mandatory = true +versionRange = "${forge_version}" +side = "BOTH" +[[dependencies.cosmere]] +modId = "curios" +mandatory = true +versionRange = "${curios_version}" +ordering = "AFTER" +side = "BOTH" +[[dependencies.cosmere]] +modId = "patchouli" +mandatory = false +versionRange = "${patchouli_version}" +ordering = "AFTER" +side = "BOTH" +[[dependencies.cosmere]] +modId = "jei" +mandatory = false +versionRange = "${jei_version}" +ordering = "AFTER" +side = "BOTH" [[dependencies.cosmere]] - modId="curios" - mandatory=true - versionRange="[1.16.5-4.0.5.1,)" - ordering="NONE" - side="BOTH" +modId = "jade" +mandatory = false +versionRange = "${jade_version}" +ordering = "AFTER" +side = "BOTH" \ No newline at end of file diff --git a/src/main/resources/assets/cosmere/lang/es_es.json b/src/main/resources/assets/cosmere/lang/es_es.json new file mode 100644 index 000000000..b9c2ef6ca --- /dev/null +++ b/src/main/resources/assets/cosmere/lang/es_es.json @@ -0,0 +1,138 @@ +{ + "argument.cosmere.power.invalid": "Poder Inválido", + "block.cosmere.aluminum_block": "Bloque de Aluminio", + "block.cosmere.aluminum_ore": "Mena de Aluminio", + "block.cosmere.atium_block": "Bloque de Atium", + "block.cosmere.bendalloy_block": "Bloque de Bendaleo", + "block.cosmere.brass_block": "Bloque de Latón", + "block.cosmere.bronze_block": "Bloque de Bronce", + "block.cosmere.cadmium_block": "Bloque de Cadmio", + "block.cosmere.cadmium_ore": "Mena de Cadmio", + "block.cosmere.chromium_block": "Bloque de Cromo", + "block.cosmere.chromium_ore": "Mena de Cromo", + "block.cosmere.copper_block": "Bloques de Cobre", + "block.cosmere.deepslate_aluminum_ore": "Mena de Aluminio (Pizarra profunda)", + "block.cosmere.deepslate_cadmium_ore": "Mena de Cadmio (Pizarra profunda)", + "block.cosmere.deepslate_chromium_ore": "Mena de Cromo (Pizarra profunda)", + "block.cosmere.deepslate_lead_ore": "Mena de Plomo (Pizarra profunda)", + "block.cosmere.deepslate_nickel_ore": "Mena de Niquel (Pizarra profunda)", + "block.cosmere.deepslate_silver_ore": "Mena de Plata (Pizarra profunda)", + "block.cosmere.deepslate_tin_ore": "Mena de Estaño (Pizarra profunda)", + "block.cosmere.deepslate_zinc_ore": "Mena de Zinc (Pizarra profunda)", + "block.cosmere.duralumin_block": "Bloque de Duraluminio", + "block.cosmere.electrum_block": "Bloque de Electrum", + "block.cosmere.harmonium_block": "Bloque de Ettmetal", + "block.cosmere.lead_block": "Bloque de Plomo", + "block.cosmere.lead_ore": "Mena de Plomo", + "block.cosmere.lerasatium_block": "Bloque de Lerasatium", + "block.cosmere.lerasium_block": "Bloque de Lerasium", + "block.cosmere.malatium_block": "Bloque de Malatium", + "block.cosmere.metalworking_table": "Mesa de Metalurgia", + "block.cosmere.nickel_block": "Bloque de Niquel", + "block.cosmere.nickel_ore": "Mena de Niquel", + "block.cosmere.nicrosil_block": "Bloque de Nicrosil", + "block.cosmere.pewter_block": "Bloque de Peltre", + "block.cosmere.silver_block": "Bloque de Plata", + "block.cosmere.silver_ore": "Mena de Plata", + "block.cosmere.steel_block": "Bloque de Acero", + "block.cosmere.tin_block": "Bloque de Estaño", + "block.cosmere.tin_ore": "Mena de Estaño", + "block.cosmere.zinc_block": "Bloque de Zinc", + "block.cosmere.zinc_ore": "Mena de Zinc", + "command.cosmere.effects.clear": "Effects cleared for: %s \n", + "command.cosmere.effects.found": "Effects found for: %s \n", + "command.cosmere.power.clear.success": "Poderes eliminados en el jugador: %s", + "command.cosmere.power.found": "Poderes encontrados para: %s \n", + "command.cosmere.power.set.fail": "Fallo al actualizar el poder.", + "command.cosmere.power.set.success": "Poder transferido con éxito a: %s", + "command.cosmere.power.strength": "Fuerza base: %s \nFuerza total: %s", + "cosmere.landing": "El Cosmere está lleno de magia y sucesos extraordinarios. He escrito todas mis investigaciones en este libro.", + "death.attack.eat_metal": "%1$s shredded their throat while eating metal", + "death.attack.eat_metal.player": "%1$s tried to eat metal directly while fighting %2$s", + "entity.minecraft.villager.cosmere.metal_trader": "Comerciante de metales", + "item.cosmere.aluminum_ingot": "Lingote de Aluminio", + "item.cosmere.aluminum_nugget": "Pepita de Aluminio", + "item.cosmere.atium_ingot": "Lingote de Atium", + "item.cosmere.atium_nugget": "Pepita de Atium", + "item.cosmere.bendalloy_blend": "Bendaleo fundido", + "item.cosmere.bendalloy_ingot": "Lingote de Bendaleo", + "item.cosmere.bendalloy_nugget": "Pepita de Bendaleo", + "item.cosmere.brass_blend": "Latón fundido", + "item.cosmere.brass_ingot": "Lingote de Latón", + "item.cosmere.brass_nugget": "Pepita de Latón", + "item.cosmere.bronze_blend": "Bronce fundido", + "item.cosmere.bronze_ingot": "Lingote de Bronce", + "item.cosmere.bronze_nugget": "Pepita de Bronce", + "item.cosmere.cadmium_ingot": "Lingote de Cadmio", + "item.cosmere.cadmium_nugget": "Pepita de Cadmio", + "item.cosmere.chromium_ingot": "Lingote de Cromo", + "item.cosmere.chromium_nugget": "Pepita de Cromo", + "item.cosmere.copper_ingot": "Lingote de Cobre", + "item.cosmere.copper_nugget": "Pepita de Cobre", + "item.cosmere.duralumin_blend": "Duraluminio fundido", + "item.cosmere.duralumin_ingot": "Lingote de Duraluminio", + "item.cosmere.duralumin_nugget": "Pepita de Duraluminio", + "item.cosmere.electrum_blend": "Electrum fundido", + "item.cosmere.electrum_ingot": "Lingore de Electrum", + "item.cosmere.electrum_nugget": "Pepita de Electrum", + "item.cosmere.gold_block": "Bloque de Oro", + "item.cosmere.gold_ingot": "Lingote de Oro", + "item.cosmere.gold_nugget": "Pepita de Oro", + "item.cosmere.guide": "Arcanum Ilimitado", + "item.cosmere.harmonium_ingot": "Lingote de Ettmetal", + "item.cosmere.harmonium_nugget": "Pepita de Ettmetal", + "item.cosmere.iron_block": "Bloque de Hierro", + "item.cosmere.iron_ingot": "Lingote de Hierro", + "item.cosmere.iron_nugget": "Pepita de Hierro", + "item.cosmere.lead_ingot": "Lingote de Plomo", + "item.cosmere.lead_nugget": "Pepita de Plomo", + "item.cosmere.lerasatium_ingot": "Lingote de Lerasatium", + "item.cosmere.lerasatium_nugget": "Pepita de Lerasatium", + "item.cosmere.lerasium_ingot": "Lingote de Lerasium", + "item.cosmere.lerasium_nugget": "Pepita de Lerasium", + "item.cosmere.malatium_ingot": "Lingote de Malatium", + "item.cosmere.malatium_nugget": "Pepita de Malatium", + "item.cosmere.nickel_ingot": "Lingote de Níquel", + "item.cosmere.nickel_nugget": "Pepita de Níquel", + "item.cosmere.nicrosil_blend": "Nicrosil fundido", + "item.cosmere.nicrosil_ingot": "Lingote de Nicrosil", + "item.cosmere.nicrosil_nugget": "Pepita de Nicrosil", + "item.cosmere.pewter_blend": "Peltre fundido", + "item.cosmere.pewter_ingot": "Lingote de Peltre", + "item.cosmere.pewter_nugget": "Pepita de Peltre", + "item.cosmere.raw_aluminum_ore": "Mena de Aluminio cruda", + "item.cosmere.raw_cadmium_ore": "Mena de Cadmio cruda", + "item.cosmere.raw_chromium_ore": "Mena de Cromo cruda", + "item.cosmere.raw_lead_ore": "Mena de plomo cruda", + "item.cosmere.raw_nickel_ore": "Mena de Níquel cruda", + "item.cosmere.raw_silver_ore": "Mena de Plata cruda", + "item.cosmere.raw_tin_ore": "Mena de Estaño cruda", + "item.cosmere.raw_zinc_ore": "Mena de Zinc cruda", + "item.cosmere.silver_ingot": "Lingote de Plata", + "item.cosmere.silver_nugget": "Pepita de Plata", + "item.cosmere.steel_blend": "Acero fundido", + "item.cosmere.steel_ingot": "Lingote de Acero", + "item.cosmere.steel_nugget": "Pepita de Acero", + "item.cosmere.tin_ingot": "Lingote de Estaño", + "item.cosmere.tin_nugget": "Pepita de Estaño", + "item.cosmere.zinc_ingot": "Lingote de Zinc", + "item.cosmere.zinc_nugget": "Pepita de Zinc", + "itemGroup.cosmere.blocks": "Bloques de Cosmere", + "itemGroup.cosmere.items": "Objetos de Cosmere", + "key.cosmere.powers.menu": "Menú de Poderes", + "key.cosmere.powers.mode.decrease": "Mode Decrease", + "key.cosmere.powers.mode.increase": "Mode Increase", + "key.cosmere.powers.next": "Siguiente poder", + "key.cosmere.powers.previous": "Poder anterior", + "key.cosmere.powers.toggle": "Desactivar todos los poderes", + "key.cosmere.powers.use": "Usar habilidad activa", + "keys.cosmere.main": "Cosmere", + "manifestation.cosmere.none": "Ninguno", + "power.cosmere.mode.set": "Modo: %s", + "power.cosmere.toggle.active": "Poder activado: %s", + "power.cosmere.toggle.inactive": "Poder no activado: %s", + "tooltip.cosmere.patchouli.not_installed": "Patchouli no está instalado. Documentación no disponible.", + "tooltip.item.info.control": "§7Mantener §8[§eControl§8]", + "tooltip.item.info.shift": "§7Mantener §8[§eShift§8]", + "tooltip.item.info.shift_control": "§7Mantener §8[§eShift§8] §7y §8[§eControl§8]" +} \ No newline at end of file diff --git a/src/main/resources/assets/cosmere/lang/sv_se.json b/src/main/resources/assets/cosmere/lang/sv_se.json new file mode 100644 index 000000000..d1e1a63d0 --- /dev/null +++ b/src/main/resources/assets/cosmere/lang/sv_se.json @@ -0,0 +1,138 @@ +{ + "argument.cosmere.power.invalid": "Ogiltig kraft", + "block.cosmere.aluminum_block": "Aluminiumblock", + "block.cosmere.aluminum_ore": "Aluminiummalm", + "block.cosmere.atium_block": "Atiumblock", + "block.cosmere.bendalloy_block": "Bendalloyblock", + "block.cosmere.brass_block": "Mässingsblock", + "block.cosmere.bronze_block": "Bronsblock", + "block.cosmere.cadmium_block": "Kadmiumblock", + "block.cosmere.cadmium_ore": "Kadmiummalm", + "block.cosmere.chromium_block": "Kromblock", + "block.cosmere.chromium_ore": "Krommalm", + "block.cosmere.copper_block": "Kopparblock", + "block.cosmere.deepslate_aluminum_ore": "Djupskifferinbäddad aluminiummalm", + "block.cosmere.deepslate_cadmium_ore": "Djupskifferinbäddad kadmiummalm", + "block.cosmere.deepslate_chromium_ore": "Djupskifferinbäddad krommalm", + "block.cosmere.deepslate_lead_ore": "Djupskifferinbäddad blymalm", + "block.cosmere.deepslate_nickel_ore": "Djupskifferinbäddad nickelmalm", + "block.cosmere.deepslate_silver_ore": "Djupskifferinbäddad silvermalm", + "block.cosmere.deepslate_tin_ore": "Djupskifferinbäddad tennmalm", + "block.cosmere.deepslate_zinc_ore": "Djupskifferinbäddad zinkmalm", + "block.cosmere.duralumin_block": "Duraluminiumblock", + "block.cosmere.electrum_block": "Elektrumblock", + "block.cosmere.harmonium_block": "Harmoniumblock", + "block.cosmere.lead_block": "Blyblock", + "block.cosmere.lead_ore": "Blymalm", + "block.cosmere.lerasatium_block": "Lerasatiumblock", + "block.cosmere.lerasium_block": "Lerasiumblock", + "block.cosmere.malatium_block": "Malatiumblock", + "block.cosmere.metalworking_table": "Metalslöjdsbord", + "block.cosmere.nickel_block": "Nickelblock", + "block.cosmere.nickel_ore": "Nickelmalm", + "block.cosmere.nicrosil_block": "Nicrosilblock", + "block.cosmere.pewter_block": "Hårdtennsblock", + "block.cosmere.silver_block": "Silverblock", + "block.cosmere.silver_ore": "Silvermalm", + "block.cosmere.steel_block": "Stålblock", + "block.cosmere.tin_block": "Tennblock", + "block.cosmere.tin_ore": "Tennmalm", + "block.cosmere.zinc_block": "Zinkblock", + "block.cosmere.zinc_ore": "Zinkmalm", + "command.cosmere.effects.clear": "Effekter rensade för: %s\n", + "command.cosmere.effects.found": "Effekter hittade för: %s\n", + "command.cosmere.power.clear.success": "Rensade krafter på spelare: %s", + "command.cosmere.power.found": "Krafter hittade för: %s\n", + "command.cosmere.power.set.fail": "Misslyckades med att uppdatera kraft", + "command.cosmere.power.set.success": "Satte kraft till: %s", + "command.cosmere.power.strength": "Basstyrka: %s \nTotal styrka: %s", + "cosmere.landing": "Cosmerum är fylld med många fantastiska saker. Jag har skrivit ner mina fynd i denna bok.", + "death.attack.eat_metal": "%1$s strimlade sin strupe medan de åt metall", + "death.attack.eat_metal.player": "%1$s försökte äta metall medan de slogs mot %2$s", + "entity.minecraft.villager.cosmere.metal_trader": "Metal Trader", + "item.cosmere.aluminum_ingot": "Aluminum Ingot", + "item.cosmere.aluminum_nugget": "Aluminum Nugget", + "item.cosmere.atium_ingot": "Atium Ingot", + "item.cosmere.atium_nugget": "Atium Nugget", + "item.cosmere.bendalloy_blend": "Bendalloy Blend", + "item.cosmere.bendalloy_ingot": "Bendalloy Ingot", + "item.cosmere.bendalloy_nugget": "Bendalloy Nugget", + "item.cosmere.brass_blend": "Brass Blend", + "item.cosmere.brass_ingot": "Brass Ingot", + "item.cosmere.brass_nugget": "Brass Nugget", + "item.cosmere.bronze_blend": "Bronze Blend", + "item.cosmere.bronze_ingot": "Bronze Ingot", + "item.cosmere.bronze_nugget": "Bronze Nugget", + "item.cosmere.cadmium_ingot": "Cadmium Ingot", + "item.cosmere.cadmium_nugget": "Cadmium Nugget", + "item.cosmere.chromium_ingot": "Chromium Ingot", + "item.cosmere.chromium_nugget": "Chromium Nugget", + "item.cosmere.copper_ingot": "Copper Ingot", + "item.cosmere.copper_nugget": "Copper Nugget", + "item.cosmere.duralumin_blend": "Duralumin Blend", + "item.cosmere.duralumin_ingot": "Duralumin Ingot", + "item.cosmere.duralumin_nugget": "Duralumin Nugget", + "item.cosmere.electrum_blend": "Electrum Blend", + "item.cosmere.electrum_ingot": "Electrum Ingot", + "item.cosmere.electrum_nugget": "Electrum Nugget", + "item.cosmere.gold_block": "Gold Block", + "item.cosmere.gold_ingot": "Gold Ingot", + "item.cosmere.gold_nugget": "Gold Nugget", + "item.cosmere.guide": "Ars Arcanum", + "item.cosmere.harmonium_ingot": "Harmonium Ingot", + "item.cosmere.harmonium_nugget": "Harmonium Nugget", + "item.cosmere.iron_block": "Iron Block", + "item.cosmere.iron_ingot": "Iron Ingot", + "item.cosmere.iron_nugget": "Iron Nugget", + "item.cosmere.lead_ingot": "Lead Ingot", + "item.cosmere.lead_nugget": "Lead Nugget", + "item.cosmere.lerasatium_ingot": "Lerasatium Ingot", + "item.cosmere.lerasatium_nugget": "Lerasatium Nugget", + "item.cosmere.lerasium_ingot": "Lerasium Ingot", + "item.cosmere.lerasium_nugget": "Lerasium Nugget", + "item.cosmere.malatium_ingot": "Malatium Ingot", + "item.cosmere.malatium_nugget": "Malatium Nugget", + "item.cosmere.nickel_ingot": "Nickel Ingot", + "item.cosmere.nickel_nugget": "Nickel Nugget", + "item.cosmere.nicrosil_blend": "Nicrosil Blend", + "item.cosmere.nicrosil_ingot": "Nicrosil Ingot", + "item.cosmere.nicrosil_nugget": "Nicrosil Nugget", + "item.cosmere.pewter_blend": "Pewter Blend", + "item.cosmere.pewter_ingot": "Pewter Ingot", + "item.cosmere.pewter_nugget": "Hårdtennsklimp", + "item.cosmere.raw_aluminum_ore": "Råaluminium", + "item.cosmere.raw_cadmium_ore": "Råkadmium", + "item.cosmere.raw_chromium_ore": "Råkrom", + "item.cosmere.raw_lead_ore": "Råbly", + "item.cosmere.raw_nickel_ore": "Rånickel", + "item.cosmere.raw_silver_ore": "Råsilver", + "item.cosmere.raw_tin_ore": "Råtenn", + "item.cosmere.raw_zinc_ore": "Råzink", + "item.cosmere.silver_ingot": "Silvertacka", + "item.cosmere.silver_nugget": "Silverklimp", + "item.cosmere.steel_blend": "Stålblandning", + "item.cosmere.steel_ingot": "Ståltacka", + "item.cosmere.steel_nugget": "Stålklimp", + "item.cosmere.tin_ingot": "Tenntacka", + "item.cosmere.tin_nugget": "Tennklimp", + "item.cosmere.zinc_ingot": "Zinktacka", + "item.cosmere.zinc_nugget": "Zinc Nugget", + "itemGroup.cosmere.blocks": "Cosmere Blocks", + "itemGroup.cosmere.items": "Cosmere Items", + "key.cosmere.powers.menu": "Powers Menu", + "key.cosmere.powers.mode.decrease": "Mode Decrease", + "key.cosmere.powers.mode.increase": "Mode Increase", + "key.cosmere.powers.next": "Next Power", + "key.cosmere.powers.previous": "Previous Power", + "key.cosmere.powers.toggle": "Deactivate All Powers", + "key.cosmere.powers.use": "Use Active Ability", + "keys.cosmere.main": "Cosmere", + "manifestation.cosmere.none": "None", + "power.cosmere.mode.set": "Mode set to: %s", + "power.cosmere.toggle.active": "Power now active: %s", + "power.cosmere.toggle.inactive": "Power now inactive: %s", + "tooltip.cosmere.patchouli.not_installed": "Patchouli is not installed. Documentation is not available.", + "tooltip.item.info.control": "§7Hold §8[§eControl§8]", + "tooltip.item.info.shift": "§7Hold §8[§eShift§8]", + "tooltip.item.info.shift_control": "§7Hold §8[§eShift§8] §7and §8[§eControl§8]" +} \ No newline at end of file diff --git a/src/main/resources/assets/cosmere/models/block/shapes/cube_all_tinted.json b/src/main/resources/assets/cosmere/models/block/shapes/cube_all_tinted.json index 2f3cc5a33..1e3fa2369 100644 --- a/src/main/resources/assets/cosmere/models/block/shapes/cube_all_tinted.json +++ b/src/main/resources/assets/cosmere/models/block/shapes/cube_all_tinted.json @@ -4,15 +4,48 @@ "particle": "#all" }, "elements": [ - { "from": [ 0, 0, 0 ], - "to": [ 16, 16, 16 ], + { + "from": [ + 0, + 0, + 0 + ], + "to": [ + 16, + 16, + 16 + ], "faces": { - "down": { "texture": "#all", "cullface": "down", "tintindex": 0 }, - "up": { "texture": "#all", "cullface": "up", "tintindex": 0 }, - "north": { "texture": "#all", "cullface": "north", "tintindex": 0 }, - "south": { "texture": "#all", "cullface": "south", "tintindex": 0 }, - "west": { "texture": "#all", "cullface": "west", "tintindex": 0 }, - "east": { "texture": "#all", "cullface": "east", "tintindex": 0 } + "down": { + "texture": "#all", + "cullface": "down", + "tintindex": 0 + }, + "up": { + "texture": "#all", + "cullface": "up", + "tintindex": 0 + }, + "north": { + "texture": "#all", + "cullface": "north", + "tintindex": 0 + }, + "south": { + "texture": "#all", + "cullface": "south", + "tintindex": 0 + }, + "west": { + "texture": "#all", + "cullface": "west", + "tintindex": 0 + }, + "east": { + "texture": "#all", + "cullface": "east", + "tintindex": 0 + } } } ] diff --git a/src/main/resources/assets/cosmere/models/block/shapes/cube_with_tint_overlay.json b/src/main/resources/assets/cosmere/models/block/shapes/cube_with_tint_overlay.json index 105ecd33b..cdf5662b5 100644 --- a/src/main/resources/assets/cosmere/models/block/shapes/cube_with_tint_overlay.json +++ b/src/main/resources/assets/cosmere/models/block/shapes/cube_with_tint_overlay.json @@ -1,29 +1,90 @@ { "parent": "minecraft:block/block", + "render_type": "cutout_mipped", "textures": { "particle": "#all" }, "elements": [ - { "from": [ 0, 0, 0 ], - "to": [ 16, 16, 16 ], + { + "from": [ + 0, + 0, + 0 + ], + "to": [ + 16, + 16, + 16 + ], "faces": { - "down": { "texture": "#all", "cullface": "down" }, - "up": { "texture": "#all", "cullface": "up" }, - "north": { "texture": "#all", "cullface": "north" }, - "south": { "texture": "#all", "cullface": "south" }, - "west": { "texture": "#all", "cullface": "west" }, - "east": { "texture": "#all", "cullface": "east" } + "down": { + "texture": "#all", + "cullface": "down" + }, + "up": { + "texture": "#all", + "cullface": "up" + }, + "north": { + "texture": "#all", + "cullface": "north" + }, + "south": { + "texture": "#all", + "cullface": "south" + }, + "west": { + "texture": "#all", + "cullface": "west" + }, + "east": { + "texture": "#all", + "cullface": "east" + } } }, - { "from": [ 0, 0, 0 ], - "to": [ 16, 16, 16 ], + { + "from": [ + 0, + 0, + 0 + ], + "to": [ + 16, + 16, + 16 + ], "faces": { - "down": { "texture": "#overlay", "cullface": "down", "tintindex": 0 }, - "up": { "texture": "#overlay", "cullface": "up", "tintindex": 0 }, - "north": { "texture": "#overlay", "cullface": "north", "tintindex": 0 }, - "south": { "texture": "#overlay", "cullface": "south", "tintindex": 0 }, - "west": { "texture": "#overlay", "cullface": "west", "tintindex": 0 }, - "east": { "texture": "#overlay", "cullface": "east", "tintindex": 0 } + "down": { + "texture": "#overlay", + "cullface": "down", + "tintindex": 0 + }, + "up": { + "texture": "#overlay", + "cullface": "up", + "tintindex": 0 + }, + "north": { + "texture": "#overlay", + "cullface": "north", + "tintindex": 0 + }, + "south": { + "texture": "#overlay", + "cullface": "south", + "tintindex": 0 + }, + "west": { + "texture": "#overlay", + "cullface": "west", + "tintindex": 0 + }, + "east": { + "texture": "#overlay", + "cullface": "east", + "tintindex": 0 + } } } ] diff --git a/src/main/resources/assets/cosmere/models/item/master_sword.json b/src/main/resources/assets/cosmere/models/item/master_sword.json deleted file mode 100644 index 1f345a79d..000000000 --- a/src/main/resources/assets/cosmere/models/item/master_sword.json +++ /dev/null @@ -1,186 +0,0 @@ -{ - "credit": "Made with Blockbench", - "parent": "forge:item/default", - "textures": { - "1": "cosmere:item/models/shardblade_model/master_sword", - "particle": "cosmere:item/models/shardblade_model/master_sword" - }, - "elements": [ - { - "name": "blade_sides", - "from": [6, 11.5, 8], - "to": [10, 28.5, 8], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 21.5, 8]}, - "faces": { - "north": {"uv": [0, 0, 3, 16], "texture": "#1"}, - "east": {"uv": [0, 0, 1, 16], "texture": "#1"}, - "south": {"uv": [0, 0, 3, 16], "texture": "#1"}, - "west": {"uv": [0, 0, 1, 16], "texture": "#1"}, - "up": {"uv": [0, 0, 1, 3], "rotation": 90, "texture": "#1"}, - "down": {"uv": [0, 0, 1, 3], "rotation": 270, "texture": "#1"} - } - }, - { - "name": "blade_tall", - "from": [7, 10.5, 7.5], - "to": [9, 32, 8.5], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 21.5, 8]}, - "faces": { - "north": {"uv": [0, 0, 2, 16], "texture": "#1"}, - "east": {"uv": [0, 0, 1, 16], "texture": "#1"}, - "south": {"uv": [0, 0, 2, 16], "texture": "#1"}, - "west": {"uv": [0, 0, 1, 16], "texture": "#1"}, - "up": {"uv": [0, 0, 1, 2], "rotation": 90, "texture": "#1"}, - "down": {"uv": [0, 0, 1, 2], "rotation": 270, "texture": "#1"} - } - }, - { - "name": "handguard_inner", - "from": [5.5, 7.5, 7], - "to": [10.5, 9.5, 9], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 10, 8]}, - "faces": { - "north": {"uv": [13, 0, 16, 3], "texture": "#1"}, - "east": {"uv": [13, 0, 16, 1], "texture": "#1"}, - "south": {"uv": [13, 0, 16, 3], "texture": "#1"}, - "west": {"uv": [13, 0, 16, 1], "texture": "#1"}, - "up": {"uv": [13, 0, 16, 3], "rotation": 270, "texture": "#1"}, - "down": {"uv": [13, 0, 16, 3], "rotation": 90, "texture": "#1"} - } - }, - { - "name": "handguard_upper", - "from": [6, 9.5, 7.5], - "to": [10, 10.5, 8.5], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, - "faces": { - "north": {"uv": [13, 0, 16, 1], "texture": "#1"}, - "east": {"uv": [13, 0, 16, 1], "texture": "#1"}, - "south": {"uv": [13, 0, 16, 1], "texture": "#1"}, - "west": {"uv": [13, 0, 16, 1], "texture": "#1"}, - "up": {"uv": [13, 0, 16, 3], "rotation": 270, "texture": "#1"}, - "down": {"uv": [13, 0, 16, 3], "rotation": 90, "texture": "#1"} - } - }, - { - "name": "handguard_outer", - "from": [4, 7.75, 7.5], - "to": [12, 8.75, 8.5], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 9.75, 8]}, - "faces": { - "north": {"uv": [13, 0, 16, 1], "texture": "#1"}, - "east": {"uv": [13, 0, 16, 1], "texture": "#1"}, - "south": {"uv": [13, 0, 16, 1], "texture": "#1"}, - "west": {"uv": [13, 0, 16, 1], "texture": "#1"}, - "up": {"uv": [13, 0, 16, 3], "rotation": 270, "texture": "#1"}, - "down": {"uv": [13, 0, 16, 3], "rotation": 90, "texture": "#1"} - } - }, - { - "name": "handguard_side", - "from": [11, 8, 8], - "to": [13, 10, 8], - "rotation": {"angle": 0, "axis": "y", "origin": [12, 10.5, 8]}, - "faces": { - "north": {"uv": [14, 13, 16, 15], "texture": "#1"}, - "east": {"uv": [13, 14, 16, 16], "texture": "#1"}, - "south": {"uv": [13, 13, 15, 15], "texture": "#1"}, - "west": {"uv": [13, 14, 16, 16], "texture": "#1"}, - "up": {"uv": [13, 11, 16, 14], "rotation": 180, "texture": "#1"}, - "down": {"uv": [13, 11, 16, 14], "rotation": 180, "texture": "#1"} - } - }, - { - "name": "handguard_side", - "from": [3, 8, 8], - "to": [5, 10, 8], - "rotation": {"angle": 0, "axis": "y", "origin": [4, 10.5, 8]}, - "faces": { - "north": {"uv": [13, 13, 15, 15], "texture": "#1"}, - "east": {"uv": [13, 14, 16, 16], "texture": "#1"}, - "south": {"uv": [14, 13, 16, 15], "texture": "#1"}, - "west": {"uv": [13, 14, 16, 16], "texture": "#1"}, - "up": {"uv": [13, 11, 16, 14], "texture": "#1"}, - "down": {"uv": [13, 11, 16, 14], "texture": "#1"} - } - }, - { - "name": "handle", - "from": [7.51237, 2, 7.47014], - "to": [8.51237, 7.5, 8.47014], - "rotation": {"angle": 45, "axis": "y", "origin": [8.01237, 5.5, 7.97014]}, - "faces": { - "north": {"uv": [5, 8, 6, 15], "texture": "#1"}, - "east": {"uv": [5, 8, 6, 15], "texture": "#1"}, - "south": {"uv": [5, 8, 6, 15], "texture": "#1"}, - "west": {"uv": [5, 8, 6, 15], "texture": "#1"}, - "up": {"uv": [5, 8, 6, 9], "rotation": 90, "texture": "#1"}, - "down": {"uv": [5, 9, 6, 10], "rotation": 270, "texture": "#1"} - } - }, - { - "name": "handle", - "from": [7.5, 2, 7.5], - "to": [8.5, 7.5, 8.5], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 5.5, 8]}, - "faces": { - "north": {"uv": [5, 8, 6, 15], "texture": "#1"}, - "east": {"uv": [5, 8, 6, 15], "texture": "#1"}, - "south": {"uv": [5, 8, 6, 15], "texture": "#1"}, - "west": {"uv": [5, 8, 6, 15], "texture": "#1"}, - "up": {"uv": [5, 8, 6, 9], "texture": "#1"}, - "down": {"uv": [5, 9, 6, 10], "texture": "#1"} - } - }, - { - "name": "pommel", - "from": [6, 0, 8], - "to": [10, 3, 8], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 1.5, 8]}, - "faces": { - "north": {"uv": [13, 12, 16, 16], "texture": "#1"}, - "east": {"uv": [13, 14, 16, 16], "texture": "#1"}, - "south": {"uv": [13, 12, 16, 16], "texture": "#1"}, - "west": {"uv": [13, 14, 16, 16], "texture": "#1"}, - "up": {"uv": [13, 11, 16, 14], "texture": "#1"}, - "down": {"uv": [13, 11, 16, 14], "texture": "#1"} - } - } - ], - "display": { - "thirdperson_righthand": { - "rotation": [0, 90, 0], - "translation": [-0.5, 0.75, 0] - }, - "thirdperson_lefthand": { - "rotation": [0, 90, 0], - "translation": [-0.5, 0.75, 0] - }, - "firstperson_righthand": { - "rotation": [0, 90, 0] - }, - "firstperson_lefthand": { - "rotation": [0, 90, 0] - }, - "ground": { - "translation": [0, 4, 0] - }, - "gui": { - "rotation": [0, 0, -45], - "translation": [-3.5, -3.5, -2], - "scale": [0.67, 0.67, 0.67] - }, - "fixed": { - "rotation": [0, 0, 46], - "translation": [4.5, -3.75, -1.25], - "scale": [0.78, 0.78, 0.78] - } - }, - "groups": [ - { - "name": "blade", - "origin": [8, 8, 8], - "children": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] - } - ] -} \ No newline at end of file diff --git a/src/main/resources/assets/cosmere/models/item/night_blood.json b/src/main/resources/assets/cosmere/models/item/night_blood.json deleted file mode 100644 index 13912ecdf..000000000 --- a/src/main/resources/assets/cosmere/models/item/night_blood.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "parent": "forge:item/default", - "loader": "forge:obj", - "model": "cosmere:models/item/shardblade_model/shard_blade.obj", - "flip-v" : true, - "textures": { - - }, - "display": { - "firstperson_righthand": { - "rotation": [180.0, 0.0, 190.0 ], - "translation": [0.0, -0.1, 0.0 ], - "scale": [0.013, 0.013, 0.013 ] - }, - "thirdperson_lefthand": { - "rotation": [0.0, 180.0, 0.0 ], - "translation": [0.0, -0.1, 0.1 ], - "scale": [0.02, 0.02, 0.02 ] - }, - "firstperson_lefthand": { - "rotation": [180.0, 0.0, 190.0 ], - "translation": [0.0, -0.1, 0.0 ], - "scale": [0.013, 0.013, 0.013 ] - }, - "thirdperson_righthand": { - "rotation": [0.0, 180.0, 0.0 ], - "translation": [0.0, -0.1, 0.1 ], - "scale": [0.02, 0.02, 0.02 ] - }, - "gui": { - "rotation": [45.0, 10.0, -45.0 ], - "translation": [-2.9, -2.9, 0.0 ], - "scale": [0.008, 0.008, 0.008 ] - }, - "ground": { - "rotation": [0.0, 0.0, 0.0 ], - "translation": [0.0, 0.0, 0.0 ], - "scale": [0.01, 0.01, 0.01 ] - }, - "fixed": { - "rotation": [0.0, 90.0, 0.0 ], - "translation": [0.0, -0.25, 0.0 ], - "scale": [0.01, 0.01, 0.01 ] - } - }, - "visibility": { - "object_1": "hide", - "object_2": "default", - "object_3": "show" - } -} \ No newline at end of file diff --git a/src/main/resources/assets/cosmere/models/item/shardblade_model/shard_blade.mtl b/src/main/resources/assets/cosmere/models/item/shardblade_model/shard_blade.mtl deleted file mode 100644 index 6000fe3fc..000000000 --- a/src/main/resources/assets/cosmere/models/item/shardblade_model/shard_blade.mtl +++ /dev/null @@ -1,6 +0,0 @@ -newmtl lambert2SG - -Ka 0.000000 0.000000 0.000000 -Kd 0.588000 0.588000 0.588000 -d 1.000000 -map_Kd cosmere:item/models/shardblade_model/shard_blade diff --git a/src/main/resources/assets/cosmere/models/item/test_blade.json b/src/main/resources/assets/cosmere/models/item/test_blade.json deleted file mode 100644 index 2fc6b8fa4..000000000 --- a/src/main/resources/assets/cosmere/models/item/test_blade.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "credit": "Made with Blockbench", - "parent": "forge:item/default", - "textures": { - "0": "cosmere:item/models/shardblade_model/shard_test", - "particle": "cosmere:item/models/shardblade_model/shard_test" - }, - "elements": [ - { - "name": "blade", - "from": [6.5, 11, 7.5], - "to": [9.5, 31, 8.5], - "rotation": {"angle": 0, "axis": "y", "origin": [8.04223, 9.53957, 8]}, - "faces": { - "north": {"uv": [0, 0, 3, 16], "texture": "#0"}, - "east": {"uv": [0, 0, 1, 16], "texture": "#0"}, - "south": {"uv": [0, 0, 3, 16], "texture": "#0"}, - "west": {"uv": [0, 0, 1, 16], "texture": "#0"}, - "up": {"uv": [0, 0, 1, 3], "rotation": 90, "texture": "#0"}, - "down": {"uv": [0, 0, 1, 3], "rotation": 270, "texture": "#0"} - } - }, - { - "name": "handguard_inner", - "from": [6, 9, 7], - "to": [11, 11, 9], - "rotation": {"angle": 0, "axis": "y", "origin": [8.34223, 9.53957, 8]}, - "faces": { - "north": {"uv": [13, 0, 16, 1], "texture": "#0"}, - "east": {"uv": [13, 0, 16, 1], "texture": "#0"}, - "south": {"uv": [13, 0, 16, 1], "texture": "#0"}, - "west": {"uv": [13, 0, 16, 1], "texture": "#0"}, - "up": {"uv": [13, 0, 16, 3], "rotation": 270, "texture": "#0"}, - "down": {"uv": [13, 0, 16, 3], "rotation": 90, "texture": "#0"} - } - }, - { - "name": "handguard_outer", - "from": [5.76543, 9.15965, 6.5], - "to": [10.76543, 11.15965, 9.5], - "rotation": {"angle": 22.5, "axis": "z", "origin": [8.04223, 9.53957, 8]}, - "faces": { - "north": {"uv": [13, 0, 16, 1], "texture": "#0"}, - "east": {"uv": [13, 0, 16, 1], "texture": "#0"}, - "south": {"uv": [13, 0, 16, 1], "texture": "#0"}, - "west": {"uv": [13, 0, 16, 1], "texture": "#0"}, - "up": {"uv": [13, 0, 16, 3], "rotation": 270, "texture": "#0"}, - "down": {"uv": [13, 0, 16, 3], "rotation": 90, "texture": "#0"} - } - }, - { - "name": "handle", - "from": [7.5, 2, 7.5], - "to": [8.5, 9, 8.5], - "rotation": {"angle": 0, "axis": "y", "origin": [8.04223, 9.53957, 8]}, - "faces": { - "north": {"uv": [5, 8, 6, 15], "texture": "#0"}, - "east": {"uv": [5, 8, 6, 15], "texture": "#0"}, - "south": {"uv": [5, 8, 6, 15], "texture": "#0"}, - "west": {"uv": [5, 8, 6, 15], "texture": "#0"}, - "up": {"uv": [5, 8, 6, 9], "texture": "#0"}, - "down": {"uv": [5, 9, 6, 10], "texture": "#0"} - } - }, - { - "name": "pommel", - "from": [6.5, 0, 6.5], - "to": [9.5, 2, 9.5], - "rotation": {"angle": 0, "axis": "y", "origin": [8.04223, 9.53957, 8]}, - "faces": { - "north": {"uv": [13, 14, 16, 16], "texture": "#0"}, - "east": {"uv": [13, 14, 16, 16], "texture": "#0"}, - "south": {"uv": [13, 14, 16, 16], "texture": "#0"}, - "west": {"uv": [13, 14, 16, 16], "texture": "#0"}, - "up": {"uv": [13, 11, 16, 14], "texture": "#0"}, - "down": {"uv": [13, 11, 16, 14], "texture": "#0"} - } - } - ], - "display": { - "thirdperson_righthand": { - "rotation": [0, 90, 0], - "translation": [-0.5, 0.75, 0] - }, - "thirdperson_lefthand": { - "rotation": [0, 90, 0], - "translation": [-0.5, 0.75, 0] - }, - "firstperson_righthand": { - "rotation": [0, 90, 0] - }, - "firstperson_lefthand": { - "rotation": [0, 90, 0] - }, - "ground": { - "translation": [0, 4, 0] - }, - "gui": { - "rotation": [0, 0, -45], - "translation": [-3.5, -3.5, -2], - "scale": [0.67, 0.67, 0.67] - }, - "fixed": { - "rotation": [0, 0, 46], - "translation": [4.5, -3.75, -1.25], - "scale": [0.78, 0.78, 0.78] - } - }, - "groups": [ - { - "name": "blade", - "origin": [8, 8, 8], - "children": [0, 1, 2, 3, 4] - } - ] -} \ No newline at end of file diff --git a/src/main/resources/assets/cosmere/textures/block/aluminum_block.png b/src/main/resources/assets/cosmere/textures/block/aluminum_block.png new file mode 100644 index 000000000..3fa3abbbb Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/block/aluminum_block.png differ diff --git a/src/main/resources/assets/cosmere/textures/block/aluminum_ore.png b/src/main/resources/assets/cosmere/textures/block/aluminum_ore.png new file mode 100644 index 000000000..84ca5b970 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/block/aluminum_ore.png differ diff --git a/src/main/resources/assets/cosmere/textures/block/atium_block.png b/src/main/resources/assets/cosmere/textures/block/atium_block.png new file mode 100644 index 000000000..21bbbbceb Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/block/atium_block.png differ diff --git a/src/main/resources/assets/cosmere/textures/block/bendalloy_block.png b/src/main/resources/assets/cosmere/textures/block/bendalloy_block.png new file mode 100644 index 000000000..32af42cfd Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/block/bendalloy_block.png differ diff --git a/src/main/resources/assets/cosmere/textures/block/brass_block.png b/src/main/resources/assets/cosmere/textures/block/brass_block.png new file mode 100644 index 000000000..bebddef68 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/block/brass_block.png differ diff --git a/src/main/resources/assets/cosmere/textures/block/bronze_block.png b/src/main/resources/assets/cosmere/textures/block/bronze_block.png new file mode 100644 index 000000000..e8e944908 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/block/bronze_block.png differ diff --git a/src/main/resources/assets/cosmere/textures/block/cadmium_block.png b/src/main/resources/assets/cosmere/textures/block/cadmium_block.png new file mode 100644 index 000000000..f4f84967d Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/block/cadmium_block.png differ diff --git a/src/main/resources/assets/cosmere/textures/block/cadmium_ore.png b/src/main/resources/assets/cosmere/textures/block/cadmium_ore.png new file mode 100644 index 000000000..6d926f045 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/block/cadmium_ore.png differ diff --git a/src/main/resources/assets/cosmere/textures/block/chromium_block.png b/src/main/resources/assets/cosmere/textures/block/chromium_block.png new file mode 100644 index 000000000..0aeb21cb1 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/block/chromium_block.png differ diff --git a/src/main/resources/assets/cosmere/textures/block/chromium_ore.png b/src/main/resources/assets/cosmere/textures/block/chromium_ore.png new file mode 100644 index 000000000..21fe783bc Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/block/chromium_ore.png differ diff --git a/src/main/resources/assets/cosmere/textures/block/copper_block.png b/src/main/resources/assets/cosmere/textures/block/copper_block.png new file mode 100644 index 000000000..7d0453be0 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/block/copper_block.png differ diff --git a/src/main/resources/assets/cosmere/textures/block/copper_ore.png b/src/main/resources/assets/cosmere/textures/block/copper_ore.png new file mode 100644 index 000000000..6104db1e5 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/block/copper_ore.png differ diff --git a/src/main/resources/assets/cosmere/textures/block/deepslate_aluminum_ore.png b/src/main/resources/assets/cosmere/textures/block/deepslate_aluminum_ore.png new file mode 100644 index 000000000..2d4d8f72e Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/block/deepslate_aluminum_ore.png differ diff --git a/src/main/resources/assets/cosmere/textures/block/deepslate_cadmium_ore.png b/src/main/resources/assets/cosmere/textures/block/deepslate_cadmium_ore.png new file mode 100644 index 000000000..b9752da93 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/block/deepslate_cadmium_ore.png differ diff --git a/src/main/resources/assets/cosmere/textures/block/deepslate_chromium_ore.png b/src/main/resources/assets/cosmere/textures/block/deepslate_chromium_ore.png new file mode 100644 index 000000000..44e905861 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/block/deepslate_chromium_ore.png differ diff --git a/src/main/resources/assets/cosmere/textures/block/deepslate_lead_ore.png b/src/main/resources/assets/cosmere/textures/block/deepslate_lead_ore.png new file mode 100644 index 000000000..c271aad91 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/block/deepslate_lead_ore.png differ diff --git a/src/main/resources/assets/cosmere/textures/block/deepslate_nickel_ore.png b/src/main/resources/assets/cosmere/textures/block/deepslate_nickel_ore.png new file mode 100644 index 000000000..a14096160 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/block/deepslate_nickel_ore.png differ diff --git a/src/main/resources/assets/cosmere/textures/block/deepslate_silver_ore.png b/src/main/resources/assets/cosmere/textures/block/deepslate_silver_ore.png new file mode 100644 index 000000000..fa3f36d00 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/block/deepslate_silver_ore.png differ diff --git a/src/main/resources/assets/cosmere/textures/block/deepslate_tin_ore.png b/src/main/resources/assets/cosmere/textures/block/deepslate_tin_ore.png new file mode 100644 index 000000000..895ff35a8 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/block/deepslate_tin_ore.png differ diff --git a/src/main/resources/assets/cosmere/textures/block/deepslate_zinc_ore.png b/src/main/resources/assets/cosmere/textures/block/deepslate_zinc_ore.png new file mode 100644 index 000000000..9c7acbef9 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/block/deepslate_zinc_ore.png differ diff --git a/src/main/resources/assets/cosmere/textures/block/duralumin_block.png b/src/main/resources/assets/cosmere/textures/block/duralumin_block.png new file mode 100644 index 000000000..aef2650a3 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/block/duralumin_block.png differ diff --git a/src/main/resources/assets/cosmere/textures/block/electrum_block.png b/src/main/resources/assets/cosmere/textures/block/electrum_block.png new file mode 100644 index 000000000..c985ae2b3 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/block/electrum_block.png differ diff --git a/src/main/resources/assets/cosmere/textures/block/gem_block.png b/src/main/resources/assets/cosmere/textures/block/gem_block.png deleted file mode 100644 index 57870e4e8..000000000 Binary files a/src/main/resources/assets/cosmere/textures/block/gem_block.png and /dev/null differ diff --git a/src/main/resources/assets/cosmere/textures/block/harmonium_block.png b/src/main/resources/assets/cosmere/textures/block/harmonium_block.png new file mode 100644 index 000000000..52ad9ba22 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/block/harmonium_block.png differ diff --git a/src/main/resources/assets/cosmere/textures/block/lea_block.png b/src/main/resources/assets/cosmere/textures/block/lea_block.png new file mode 100644 index 000000000..1817e0395 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/block/lea_block.png differ diff --git a/src/main/resources/assets/cosmere/textures/block/lead_block.png b/src/main/resources/assets/cosmere/textures/block/lead_block.png new file mode 100644 index 000000000..1817e0395 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/block/lead_block.png differ diff --git a/src/main/resources/assets/cosmere/textures/block/lead_ore.png b/src/main/resources/assets/cosmere/textures/block/lead_ore.png new file mode 100644 index 000000000..2ee42f535 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/block/lead_ore.png differ diff --git a/src/main/resources/assets/cosmere/textures/block/lerasatium_block.png b/src/main/resources/assets/cosmere/textures/block/lerasatium_block.png new file mode 100644 index 000000000..7f4107c83 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/block/lerasatium_block.png differ diff --git a/src/main/resources/assets/cosmere/textures/block/lerasium_block.png b/src/main/resources/assets/cosmere/textures/block/lerasium_block.png new file mode 100644 index 000000000..a61d313f4 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/block/lerasium_block.png differ diff --git a/src/main/resources/assets/cosmere/textures/block/malatium_block.png b/src/main/resources/assets/cosmere/textures/block/malatium_block.png new file mode 100644 index 000000000..9b832ff5d Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/block/malatium_block.png differ diff --git a/src/main/resources/assets/cosmere/textures/block/metal_block.png b/src/main/resources/assets/cosmere/textures/block/metal_block.png index 71e689bc9..d1bf11196 100644 Binary files a/src/main/resources/assets/cosmere/textures/block/metal_block.png and b/src/main/resources/assets/cosmere/textures/block/metal_block.png differ diff --git a/src/main/resources/assets/cosmere/textures/block/metalworking_table_bottom.png b/src/main/resources/assets/cosmere/textures/block/metalworking_table_bottom.png new file mode 100644 index 000000000..09b27182f Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/block/metalworking_table_bottom.png differ diff --git a/src/main/resources/assets/cosmere/textures/block/metalworking_table_front.png b/src/main/resources/assets/cosmere/textures/block/metalworking_table_front.png new file mode 100644 index 000000000..ea10270ca Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/block/metalworking_table_front.png differ diff --git a/src/main/resources/assets/cosmere/textures/block/metalworking_table_side.png b/src/main/resources/assets/cosmere/textures/block/metalworking_table_side.png new file mode 100644 index 000000000..18cd5ec85 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/block/metalworking_table_side.png differ diff --git a/src/main/resources/assets/cosmere/textures/block/metalworking_table_top.png b/src/main/resources/assets/cosmere/textures/block/metalworking_table_top.png new file mode 100644 index 000000000..7099674fa Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/block/metalworking_table_top.png differ diff --git a/src/main/resources/assets/cosmere/textures/block/nickel_block.png b/src/main/resources/assets/cosmere/textures/block/nickel_block.png new file mode 100644 index 000000000..228fc300e Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/block/nickel_block.png differ diff --git a/src/main/resources/assets/cosmere/textures/block/nickel_ore.png b/src/main/resources/assets/cosmere/textures/block/nickel_ore.png new file mode 100644 index 000000000..520668a55 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/block/nickel_ore.png differ diff --git a/src/main/resources/assets/cosmere/textures/block/nicrosil_block.png b/src/main/resources/assets/cosmere/textures/block/nicrosil_block.png new file mode 100644 index 000000000..190292295 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/block/nicrosil_block.png differ diff --git a/src/main/resources/assets/cosmere/textures/block/ore_block.png b/src/main/resources/assets/cosmere/textures/block/ore_block.png index b6e697f09..0fdb7a1a1 100644 Binary files a/src/main/resources/assets/cosmere/textures/block/ore_block.png and b/src/main/resources/assets/cosmere/textures/block/ore_block.png differ diff --git a/src/main/resources/assets/cosmere/textures/block/ore_block_deepslate.png b/src/main/resources/assets/cosmere/textures/block/ore_block_deepslate.png new file mode 100644 index 000000000..54f05097e Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/block/ore_block_deepslate.png differ diff --git a/src/main/resources/assets/cosmere/textures/block/ore_block_tint_overlay.png b/src/main/resources/assets/cosmere/textures/block/ore_block_tint_overlay.png index f5aea36ec..138993b07 100644 Binary files a/src/main/resources/assets/cosmere/textures/block/ore_block_tint_overlay.png and b/src/main/resources/assets/cosmere/textures/block/ore_block_tint_overlay.png differ diff --git a/src/main/resources/assets/cosmere/textures/block/pewter_block.png b/src/main/resources/assets/cosmere/textures/block/pewter_block.png new file mode 100644 index 000000000..897470b3a Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/block/pewter_block.png differ diff --git a/src/main/resources/assets/cosmere/textures/block/silver_block.png b/src/main/resources/assets/cosmere/textures/block/silver_block.png new file mode 100644 index 000000000..ec65a6fe1 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/block/silver_block.png differ diff --git a/src/main/resources/assets/cosmere/textures/block/silver_ore.png b/src/main/resources/assets/cosmere/textures/block/silver_ore.png new file mode 100644 index 000000000..9213d4ccb Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/block/silver_ore.png differ diff --git a/src/main/resources/assets/cosmere/textures/block/steel_block.png b/src/main/resources/assets/cosmere/textures/block/steel_block.png new file mode 100644 index 000000000..89d6c7bbb Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/block/steel_block.png differ diff --git a/src/main/resources/assets/cosmere/textures/block/tin_block.png b/src/main/resources/assets/cosmere/textures/block/tin_block.png new file mode 100644 index 000000000..141287413 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/block/tin_block.png differ diff --git a/src/main/resources/assets/cosmere/textures/block/tin_ire.png b/src/main/resources/assets/cosmere/textures/block/tin_ire.png new file mode 100644 index 000000000..4e0b81d8f Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/block/tin_ire.png differ diff --git a/src/main/resources/assets/cosmere/textures/block/tin_ore.png b/src/main/resources/assets/cosmere/textures/block/tin_ore.png new file mode 100644 index 000000000..4e0b81d8f Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/block/tin_ore.png differ diff --git a/src/main/resources/assets/cosmere/textures/block/zinc_block.png b/src/main/resources/assets/cosmere/textures/block/zinc_block.png new file mode 100644 index 000000000..26c6c66f3 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/block/zinc_block.png differ diff --git a/src/main/resources/assets/cosmere/textures/block/zinc_ore.png b/src/main/resources/assets/cosmere/textures/block/zinc_ore.png new file mode 100644 index 000000000..2017c8ad9 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/block/zinc_ore.png differ diff --git a/src/main/resources/assets/cosmere/textures/entity/villager/profession/metal_trader.png b/src/main/resources/assets/cosmere/textures/entity/villager/profession/metal_trader.png new file mode 100644 index 000000000..e99c42225 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/entity/villager/profession/metal_trader.png differ diff --git a/src/main/resources/assets/cosmere/textures/entity/zombie_villager/profession/metal_trader.png b/src/main/resources/assets/cosmere/textures/entity/zombie_villager/profession/metal_trader.png new file mode 100644 index 000000000..e99c42225 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/entity/zombie_villager/profession/metal_trader.png differ diff --git a/src/main/resources/assets/cosmere/textures/icon/allomancy/Allomancy_19_(Final_Empire).png b/src/main/resources/assets/cosmere/textures/icon/allomancy/Allomancy_19_(Final_Empire).png deleted file mode 100644 index 0044089b0..000000000 Binary files a/src/main/resources/assets/cosmere/textures/icon/allomancy/Allomancy_19_(Final_Empire).png and /dev/null differ diff --git a/src/main/resources/assets/cosmere/textures/icon/allomancy/Allomancy_20_(Final_Empire).png b/src/main/resources/assets/cosmere/textures/icon/allomancy/Allomancy_20_(Final_Empire).png deleted file mode 100644 index 956714cb3..000000000 Binary files a/src/main/resources/assets/cosmere/textures/icon/allomancy/Allomancy_20_(Final_Empire).png and /dev/null differ diff --git a/src/main/resources/assets/cosmere/textures/icon/allomancy/Allomancy_21_(Final_Empire).png b/src/main/resources/assets/cosmere/textures/icon/allomancy/Allomancy_21_(Final_Empire).png deleted file mode 100644 index fd99cd9ff..000000000 Binary files a/src/main/resources/assets/cosmere/textures/icon/allomancy/Allomancy_21_(Final_Empire).png and /dev/null differ diff --git a/src/main/resources/assets/cosmere/textures/icon/allomancy/Allomancy_22_(Final_Empire).png b/src/main/resources/assets/cosmere/textures/icon/allomancy/Allomancy_22_(Final_Empire).png deleted file mode 100644 index fb496595e..000000000 Binary files a/src/main/resources/assets/cosmere/textures/icon/allomancy/Allomancy_22_(Final_Empire).png and /dev/null differ diff --git a/src/main/resources/assets/cosmere/textures/icon/allomancy/Steel.png b/src/main/resources/assets/cosmere/textures/icon/allomancy/Steel.png deleted file mode 100644 index fe38189c2..000000000 Binary files a/src/main/resources/assets/cosmere/textures/icon/allomancy/Steel.png and /dev/null differ diff --git a/src/main/resources/assets/cosmere/textures/icon/allomancy/Tin.png b/src/main/resources/assets/cosmere/textures/icon/allomancy/Tin.png deleted file mode 100644 index 088e7e9b3..000000000 Binary files a/src/main/resources/assets/cosmere/textures/icon/allomancy/Tin.png and /dev/null differ diff --git a/src/main/resources/assets/cosmere/textures/icon/allomancy/Zinc.png b/src/main/resources/assets/cosmere/textures/icon/allomancy/Zinc.png deleted file mode 100644 index a27607c52..000000000 Binary files a/src/main/resources/assets/cosmere/textures/icon/allomancy/Zinc.png and /dev/null differ diff --git a/src/main/resources/assets/cosmere/textures/icon/allomancy/aluminum.png b/src/main/resources/assets/cosmere/textures/icon/allomancy/aluminum.png deleted file mode 100644 index fdbe4986e..000000000 Binary files a/src/main/resources/assets/cosmere/textures/icon/allomancy/aluminum.png and /dev/null differ diff --git a/src/main/resources/assets/cosmere/textures/icon/allomancy/atium.png b/src/main/resources/assets/cosmere/textures/icon/allomancy/atium.png deleted file mode 100644 index e5fab5a92..000000000 Binary files a/src/main/resources/assets/cosmere/textures/icon/allomancy/atium.png and /dev/null differ diff --git a/src/main/resources/assets/cosmere/textures/icon/allomancy/bendalloy.png b/src/main/resources/assets/cosmere/textures/icon/allomancy/bendalloy.png deleted file mode 100644 index 9ba1dff6a..000000000 Binary files a/src/main/resources/assets/cosmere/textures/icon/allomancy/bendalloy.png and /dev/null differ diff --git a/src/main/resources/assets/cosmere/textures/icon/allomancy/brass.png b/src/main/resources/assets/cosmere/textures/icon/allomancy/brass.png deleted file mode 100644 index ec0c1cad8..000000000 Binary files a/src/main/resources/assets/cosmere/textures/icon/allomancy/brass.png and /dev/null differ diff --git a/src/main/resources/assets/cosmere/textures/icon/allomancy/bronze.png b/src/main/resources/assets/cosmere/textures/icon/allomancy/bronze.png deleted file mode 100644 index 4558c2064..000000000 Binary files a/src/main/resources/assets/cosmere/textures/icon/allomancy/bronze.png and /dev/null differ diff --git a/src/main/resources/assets/cosmere/textures/icon/allomancy/cadmium.png b/src/main/resources/assets/cosmere/textures/icon/allomancy/cadmium.png deleted file mode 100644 index 9ef0a553b..000000000 Binary files a/src/main/resources/assets/cosmere/textures/icon/allomancy/cadmium.png and /dev/null differ diff --git a/src/main/resources/assets/cosmere/textures/icon/allomancy/chromium.png b/src/main/resources/assets/cosmere/textures/icon/allomancy/chromium.png deleted file mode 100644 index efd734948..000000000 Binary files a/src/main/resources/assets/cosmere/textures/icon/allomancy/chromium.png and /dev/null differ diff --git a/src/main/resources/assets/cosmere/textures/icon/allomancy/copper.png b/src/main/resources/assets/cosmere/textures/icon/allomancy/copper.png deleted file mode 100644 index 6d93adc65..000000000 Binary files a/src/main/resources/assets/cosmere/textures/icon/allomancy/copper.png and /dev/null differ diff --git a/src/main/resources/assets/cosmere/textures/icon/allomancy/duralumin.png b/src/main/resources/assets/cosmere/textures/icon/allomancy/duralumin.png deleted file mode 100644 index 387fe4d84..000000000 Binary files a/src/main/resources/assets/cosmere/textures/icon/allomancy/duralumin.png and /dev/null differ diff --git a/src/main/resources/assets/cosmere/textures/icon/allomancy/electrum.png b/src/main/resources/assets/cosmere/textures/icon/allomancy/electrum.png deleted file mode 100644 index 15049a7a0..000000000 Binary files a/src/main/resources/assets/cosmere/textures/icon/allomancy/electrum.png and /dev/null differ diff --git a/src/main/resources/assets/cosmere/textures/icon/allomancy/gold.png b/src/main/resources/assets/cosmere/textures/icon/allomancy/gold.png deleted file mode 100644 index 2ffa9161c..000000000 Binary files a/src/main/resources/assets/cosmere/textures/icon/allomancy/gold.png and /dev/null differ diff --git a/src/main/resources/assets/cosmere/textures/icon/allomancy/iron.png b/src/main/resources/assets/cosmere/textures/icon/allomancy/iron.png deleted file mode 100644 index d174f2294..000000000 Binary files a/src/main/resources/assets/cosmere/textures/icon/allomancy/iron.png and /dev/null differ diff --git a/src/main/resources/assets/cosmere/textures/icon/allomancy/lerasium.png b/src/main/resources/assets/cosmere/textures/icon/allomancy/lerasium.png deleted file mode 100644 index 52fe383be..000000000 Binary files a/src/main/resources/assets/cosmere/textures/icon/allomancy/lerasium.png and /dev/null differ diff --git a/src/main/resources/assets/cosmere/textures/icon/allomancy/nicrosil.png b/src/main/resources/assets/cosmere/textures/icon/allomancy/nicrosil.png deleted file mode 100644 index 1f0e681bf..000000000 Binary files a/src/main/resources/assets/cosmere/textures/icon/allomancy/nicrosil.png and /dev/null differ diff --git a/src/main/resources/assets/cosmere/textures/icon/allomancy/pewter.png b/src/main/resources/assets/cosmere/textures/icon/allomancy/pewter.png deleted file mode 100644 index 4c1885528..000000000 Binary files a/src/main/resources/assets/cosmere/textures/icon/allomancy/pewter.png and /dev/null differ diff --git a/src/main/resources/assets/cosmere/textures/icon/allomancy/zero.png b/src/main/resources/assets/cosmere/textures/icon/allomancy/zero.png deleted file mode 100644 index 4792953dd..000000000 Binary files a/src/main/resources/assets/cosmere/textures/icon/allomancy/zero.png and /dev/null differ diff --git a/src/main/resources/assets/cosmere/textures/icon/feruchemy/aluminum.png b/src/main/resources/assets/cosmere/textures/icon/feruchemy/aluminum.png deleted file mode 100644 index a0ffbbae4..000000000 Binary files a/src/main/resources/assets/cosmere/textures/icon/feruchemy/aluminum.png and /dev/null differ diff --git a/src/main/resources/assets/cosmere/textures/icon/feruchemy/atium.png b/src/main/resources/assets/cosmere/textures/icon/feruchemy/atium.png deleted file mode 100644 index 6bb43da8e..000000000 Binary files a/src/main/resources/assets/cosmere/textures/icon/feruchemy/atium.png and /dev/null differ diff --git a/src/main/resources/assets/cosmere/textures/icon/feruchemy/bendalloy.png b/src/main/resources/assets/cosmere/textures/icon/feruchemy/bendalloy.png deleted file mode 100644 index 078962bfd..000000000 Binary files a/src/main/resources/assets/cosmere/textures/icon/feruchemy/bendalloy.png and /dev/null differ diff --git a/src/main/resources/assets/cosmere/textures/icon/feruchemy/brass.png b/src/main/resources/assets/cosmere/textures/icon/feruchemy/brass.png deleted file mode 100644 index 39cd8eed0..000000000 Binary files a/src/main/resources/assets/cosmere/textures/icon/feruchemy/brass.png and /dev/null differ diff --git a/src/main/resources/assets/cosmere/textures/icon/feruchemy/bronze.png b/src/main/resources/assets/cosmere/textures/icon/feruchemy/bronze.png deleted file mode 100644 index b12df95a1..000000000 Binary files a/src/main/resources/assets/cosmere/textures/icon/feruchemy/bronze.png and /dev/null differ diff --git a/src/main/resources/assets/cosmere/textures/icon/feruchemy/cadmium.png b/src/main/resources/assets/cosmere/textures/icon/feruchemy/cadmium.png deleted file mode 100644 index fb9d574c2..000000000 Binary files a/src/main/resources/assets/cosmere/textures/icon/feruchemy/cadmium.png and /dev/null differ diff --git a/src/main/resources/assets/cosmere/textures/icon/feruchemy/chromium.png b/src/main/resources/assets/cosmere/textures/icon/feruchemy/chromium.png deleted file mode 100644 index c3291ae71..000000000 Binary files a/src/main/resources/assets/cosmere/textures/icon/feruchemy/chromium.png and /dev/null differ diff --git a/src/main/resources/assets/cosmere/textures/icon/feruchemy/copper.png b/src/main/resources/assets/cosmere/textures/icon/feruchemy/copper.png deleted file mode 100644 index 44545f1b8..000000000 Binary files a/src/main/resources/assets/cosmere/textures/icon/feruchemy/copper.png and /dev/null differ diff --git a/src/main/resources/assets/cosmere/textures/icon/feruchemy/duralumin.png b/src/main/resources/assets/cosmere/textures/icon/feruchemy/duralumin.png deleted file mode 100644 index b89e423c0..000000000 Binary files a/src/main/resources/assets/cosmere/textures/icon/feruchemy/duralumin.png and /dev/null differ diff --git a/src/main/resources/assets/cosmere/textures/icon/feruchemy/electrum.png b/src/main/resources/assets/cosmere/textures/icon/feruchemy/electrum.png deleted file mode 100644 index 8d90c87eb..000000000 Binary files a/src/main/resources/assets/cosmere/textures/icon/feruchemy/electrum.png and /dev/null differ diff --git a/src/main/resources/assets/cosmere/textures/icon/feruchemy/gold.png b/src/main/resources/assets/cosmere/textures/icon/feruchemy/gold.png deleted file mode 100644 index bdf7183c2..000000000 Binary files a/src/main/resources/assets/cosmere/textures/icon/feruchemy/gold.png and /dev/null differ diff --git a/src/main/resources/assets/cosmere/textures/icon/feruchemy/iron.png b/src/main/resources/assets/cosmere/textures/icon/feruchemy/iron.png deleted file mode 100644 index bceaa53a3..000000000 Binary files a/src/main/resources/assets/cosmere/textures/icon/feruchemy/iron.png and /dev/null differ diff --git a/src/main/resources/assets/cosmere/textures/icon/feruchemy/lerasium.png b/src/main/resources/assets/cosmere/textures/icon/feruchemy/lerasium.png deleted file mode 100644 index 9b0256dc4..000000000 Binary files a/src/main/resources/assets/cosmere/textures/icon/feruchemy/lerasium.png and /dev/null differ diff --git a/src/main/resources/assets/cosmere/textures/icon/feruchemy/nicrosil.png b/src/main/resources/assets/cosmere/textures/icon/feruchemy/nicrosil.png deleted file mode 100644 index 70d78f106..000000000 Binary files a/src/main/resources/assets/cosmere/textures/icon/feruchemy/nicrosil.png and /dev/null differ diff --git a/src/main/resources/assets/cosmere/textures/icon/feruchemy/pewter.png b/src/main/resources/assets/cosmere/textures/icon/feruchemy/pewter.png deleted file mode 100644 index d975f91f8..000000000 Binary files a/src/main/resources/assets/cosmere/textures/icon/feruchemy/pewter.png and /dev/null differ diff --git a/src/main/resources/assets/cosmere/textures/icon/feruchemy/steel.png b/src/main/resources/assets/cosmere/textures/icon/feruchemy/steel.png deleted file mode 100644 index 13d41ac8e..000000000 Binary files a/src/main/resources/assets/cosmere/textures/icon/feruchemy/steel.png and /dev/null differ diff --git a/src/main/resources/assets/cosmere/textures/icon/feruchemy/tin.png b/src/main/resources/assets/cosmere/textures/icon/feruchemy/tin.png deleted file mode 100644 index 4d3c3a7a6..000000000 Binary files a/src/main/resources/assets/cosmere/textures/icon/feruchemy/tin.png and /dev/null differ diff --git a/src/main/resources/assets/cosmere/textures/icon/feruchemy/zinc.png b/src/main/resources/assets/cosmere/textures/icon/feruchemy/zinc.png deleted file mode 100644 index b0c3c070c..000000000 Binary files a/src/main/resources/assets/cosmere/textures/icon/feruchemy/zinc.png and /dev/null differ diff --git a/src/main/resources/assets/cosmere/textures/item/aluminum_ingot.png b/src/main/resources/assets/cosmere/textures/item/aluminum_ingot.png new file mode 100644 index 000000000..00f74d481 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/aluminum_ingot.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/aluminum_nugget.png b/src/main/resources/assets/cosmere/textures/item/aluminum_nugget.png new file mode 100644 index 000000000..67091be94 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/aluminum_nugget.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/atium_ingot.png b/src/main/resources/assets/cosmere/textures/item/atium_ingot.png new file mode 100644 index 000000000..8cfb22d50 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/atium_ingot.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/atium_nugget.png b/src/main/resources/assets/cosmere/textures/item/atium_nugget.png new file mode 100644 index 000000000..53ed4c5d6 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/atium_nugget.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/bendalloy_blend.png b/src/main/resources/assets/cosmere/textures/item/bendalloy_blend.png new file mode 100644 index 000000000..28a6fcfa4 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/bendalloy_blend.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/bendalloy_ingot.png b/src/main/resources/assets/cosmere/textures/item/bendalloy_ingot.png new file mode 100644 index 000000000..2656f351c Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/bendalloy_ingot.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/bendalloy_nugget.png b/src/main/resources/assets/cosmere/textures/item/bendalloy_nugget.png new file mode 100644 index 000000000..6724818a6 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/bendalloy_nugget.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/brass_blend.png b/src/main/resources/assets/cosmere/textures/item/brass_blend.png new file mode 100644 index 000000000..51d30e41d Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/brass_blend.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/brass_ingot.png b/src/main/resources/assets/cosmere/textures/item/brass_ingot.png new file mode 100644 index 000000000..92ece1aba Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/brass_ingot.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/brass_nugget.png b/src/main/resources/assets/cosmere/textures/item/brass_nugget.png new file mode 100644 index 000000000..5a052f042 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/brass_nugget.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/bronze_blend.png b/src/main/resources/assets/cosmere/textures/item/bronze_blend.png new file mode 100644 index 000000000..206f4ed41 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/bronze_blend.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/bronze_ingot.png b/src/main/resources/assets/cosmere/textures/item/bronze_ingot.png new file mode 100644 index 000000000..f37adae67 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/bronze_ingot.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/bronze_nugget.png b/src/main/resources/assets/cosmere/textures/item/bronze_nugget.png new file mode 100644 index 000000000..2f6e0e070 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/bronze_nugget.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/cadmium_ingot.png b/src/main/resources/assets/cosmere/textures/item/cadmium_ingot.png new file mode 100644 index 000000000..70d79465b Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/cadmium_ingot.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/cadmium_nugget.png b/src/main/resources/assets/cosmere/textures/item/cadmium_nugget.png new file mode 100644 index 000000000..5f04f6189 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/cadmium_nugget.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/chromium_ingot.png b/src/main/resources/assets/cosmere/textures/item/chromium_ingot.png new file mode 100644 index 000000000..156c4687d Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/chromium_ingot.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/chromium_nugget.png b/src/main/resources/assets/cosmere/textures/item/chromium_nugget.png new file mode 100644 index 000000000..609cc3c2b Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/chromium_nugget.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/copper_clip.png b/src/main/resources/assets/cosmere/textures/item/copper_clip.png deleted file mode 100644 index 7b61d5193..000000000 Binary files a/src/main/resources/assets/cosmere/textures/item/copper_clip.png and /dev/null differ diff --git a/src/main/resources/assets/cosmere/textures/item/copper_ingot.png b/src/main/resources/assets/cosmere/textures/item/copper_ingot.png new file mode 100644 index 000000000..197a3ca11 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/copper_ingot.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/copper_nugget.png b/src/main/resources/assets/cosmere/textures/item/copper_nugget.png new file mode 100644 index 000000000..9073dd827 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/copper_nugget.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/duralumin_blend.png b/src/main/resources/assets/cosmere/textures/item/duralumin_blend.png new file mode 100644 index 000000000..ff9e07896 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/duralumin_blend.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/duralumin_ingot.png b/src/main/resources/assets/cosmere/textures/item/duralumin_ingot.png new file mode 100644 index 000000000..7596ac6da Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/duralumin_ingot.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/duralumin_nugget.png b/src/main/resources/assets/cosmere/textures/item/duralumin_nugget.png new file mode 100644 index 000000000..01b3134b8 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/duralumin_nugget.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/electrum_blend.png b/src/main/resources/assets/cosmere/textures/item/electrum_blend.png new file mode 100644 index 000000000..ce99db19c Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/electrum_blend.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/electrum_ingot.png b/src/main/resources/assets/cosmere/textures/item/electrum_ingot.png new file mode 100644 index 000000000..4f0bf8a1c Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/electrum_ingot.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/electrum_nugget.png b/src/main/resources/assets/cosmere/textures/item/electrum_nugget.png new file mode 100644 index 000000000..69414959c Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/electrum_nugget.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/gold_boxing.png b/src/main/resources/assets/cosmere/textures/item/gold_boxing.png deleted file mode 100644 index 7b61d5193..000000000 Binary files a/src/main/resources/assets/cosmere/textures/item/gold_boxing.png and /dev/null differ diff --git a/src/main/resources/assets/cosmere/textures/item/guide.png b/src/main/resources/assets/cosmere/textures/item/guide.png index 3dc3983ae..cdd165fba 100644 Binary files a/src/main/resources/assets/cosmere/textures/item/guide.png and b/src/main/resources/assets/cosmere/textures/item/guide.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/harmonium_ingot.png b/src/main/resources/assets/cosmere/textures/item/harmonium_ingot.png new file mode 100644 index 000000000..f4d8409a6 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/harmonium_ingot.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/harmonium_nugget.png b/src/main/resources/assets/cosmere/textures/item/harmonium_nugget.png new file mode 100644 index 000000000..1854bdf28 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/harmonium_nugget.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/lead_ingot.png b/src/main/resources/assets/cosmere/textures/item/lead_ingot.png new file mode 100644 index 000000000..551236330 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/lead_ingot.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/lead_nugget.png b/src/main/resources/assets/cosmere/textures/item/lead_nugget.png new file mode 100644 index 000000000..b983eb037 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/lead_nugget.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/lerasatium_aluminum_nugget.png b/src/main/resources/assets/cosmere/textures/item/lerasatium_aluminum_nugget.png new file mode 100644 index 000000000..e7ede2cde Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/lerasatium_aluminum_nugget.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/lerasatium_bendalloy_nugget.png b/src/main/resources/assets/cosmere/textures/item/lerasatium_bendalloy_nugget.png new file mode 100644 index 000000000..2229a5c0f Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/lerasatium_bendalloy_nugget.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/lerasatium_brass_nugget.png b/src/main/resources/assets/cosmere/textures/item/lerasatium_brass_nugget.png new file mode 100644 index 000000000..91d9db17f Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/lerasatium_brass_nugget.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/lerasatium_bronze_nugget.png b/src/main/resources/assets/cosmere/textures/item/lerasatium_bronze_nugget.png new file mode 100644 index 000000000..74d5703b4 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/lerasatium_bronze_nugget.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/lerasatium_cadmium_nugget.png b/src/main/resources/assets/cosmere/textures/item/lerasatium_cadmium_nugget.png new file mode 100644 index 000000000..cfab5245d Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/lerasatium_cadmium_nugget.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/lerasatium_chromium_nugget.png b/src/main/resources/assets/cosmere/textures/item/lerasatium_chromium_nugget.png new file mode 100644 index 000000000..0294037d8 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/lerasatium_chromium_nugget.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/lerasatium_copper_nugget.png b/src/main/resources/assets/cosmere/textures/item/lerasatium_copper_nugget.png new file mode 100644 index 000000000..966623ff9 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/lerasatium_copper_nugget.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/lerasatium_duralumin_nugget.png b/src/main/resources/assets/cosmere/textures/item/lerasatium_duralumin_nugget.png new file mode 100644 index 000000000..7d9236b79 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/lerasatium_duralumin_nugget.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/lerasatium_electrum_nugget.png b/src/main/resources/assets/cosmere/textures/item/lerasatium_electrum_nugget.png new file mode 100644 index 000000000..fdbbd23d2 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/lerasatium_electrum_nugget.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/lerasatium_gold_nugget.png b/src/main/resources/assets/cosmere/textures/item/lerasatium_gold_nugget.png new file mode 100644 index 000000000..abff30aed Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/lerasatium_gold_nugget.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/lerasatium_ingot.png b/src/main/resources/assets/cosmere/textures/item/lerasatium_ingot.png new file mode 100644 index 000000000..40694c292 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/lerasatium_ingot.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/lerasatium_iron_nugget.png b/src/main/resources/assets/cosmere/textures/item/lerasatium_iron_nugget.png new file mode 100644 index 000000000..fe1afbe84 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/lerasatium_iron_nugget.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/lerasatium_nicrosil_nugget.png b/src/main/resources/assets/cosmere/textures/item/lerasatium_nicrosil_nugget.png new file mode 100644 index 000000000..1d2b38397 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/lerasatium_nicrosil_nugget.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/lerasatium_nugget.png b/src/main/resources/assets/cosmere/textures/item/lerasatium_nugget.png new file mode 100644 index 000000000..0d0ae88f6 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/lerasatium_nugget.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/lerasatium_pewter_nugget.png b/src/main/resources/assets/cosmere/textures/item/lerasatium_pewter_nugget.png new file mode 100644 index 000000000..f1896f809 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/lerasatium_pewter_nugget.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/lerasatium_steel_nugget.png b/src/main/resources/assets/cosmere/textures/item/lerasatium_steel_nugget.png new file mode 100644 index 000000000..272d3a642 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/lerasatium_steel_nugget.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/lerasatium_tin_nugget.png b/src/main/resources/assets/cosmere/textures/item/lerasatium_tin_nugget.png new file mode 100644 index 000000000..68599bcb1 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/lerasatium_tin_nugget.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/lerasatium_zinc_nugget.png b/src/main/resources/assets/cosmere/textures/item/lerasatium_zinc_nugget.png new file mode 100644 index 000000000..6cd3311ca Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/lerasatium_zinc_nugget.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/lerasium_aluminum_nugget.png b/src/main/resources/assets/cosmere/textures/item/lerasium_aluminum_nugget.png new file mode 100644 index 000000000..7ce3709cf Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/lerasium_aluminum_nugget.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/lerasium_bendalloy_nugget.png b/src/main/resources/assets/cosmere/textures/item/lerasium_bendalloy_nugget.png new file mode 100644 index 000000000..fd8e3c475 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/lerasium_bendalloy_nugget.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/lerasium_brass_nugget.png b/src/main/resources/assets/cosmere/textures/item/lerasium_brass_nugget.png new file mode 100644 index 000000000..043afdcb4 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/lerasium_brass_nugget.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/lerasium_bronze_nugget.png b/src/main/resources/assets/cosmere/textures/item/lerasium_bronze_nugget.png new file mode 100644 index 000000000..7aacaa337 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/lerasium_bronze_nugget.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/lerasium_cadmium_nugget.png b/src/main/resources/assets/cosmere/textures/item/lerasium_cadmium_nugget.png new file mode 100644 index 000000000..86992127d Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/lerasium_cadmium_nugget.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/lerasium_chromium_nugget.png b/src/main/resources/assets/cosmere/textures/item/lerasium_chromium_nugget.png new file mode 100644 index 000000000..82cc79753 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/lerasium_chromium_nugget.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/lerasium_copper_nugget.png b/src/main/resources/assets/cosmere/textures/item/lerasium_copper_nugget.png new file mode 100644 index 000000000..1f2ed802b Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/lerasium_copper_nugget.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/lerasium_duralumin_nugget.png b/src/main/resources/assets/cosmere/textures/item/lerasium_duralumin_nugget.png new file mode 100644 index 000000000..245d53921 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/lerasium_duralumin_nugget.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/lerasium_electrum_nugget.png b/src/main/resources/assets/cosmere/textures/item/lerasium_electrum_nugget.png new file mode 100644 index 000000000..345da72ab Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/lerasium_electrum_nugget.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/lerasium_gold_nugget.png b/src/main/resources/assets/cosmere/textures/item/lerasium_gold_nugget.png new file mode 100644 index 000000000..2fb484790 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/lerasium_gold_nugget.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/lerasium_ingot.png b/src/main/resources/assets/cosmere/textures/item/lerasium_ingot.png new file mode 100644 index 000000000..aadc0cd11 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/lerasium_ingot.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/lerasium_iron_nugget.png b/src/main/resources/assets/cosmere/textures/item/lerasium_iron_nugget.png new file mode 100644 index 000000000..7a224aeb6 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/lerasium_iron_nugget.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/lerasium_nicrosil_nugget.png b/src/main/resources/assets/cosmere/textures/item/lerasium_nicrosil_nugget.png new file mode 100644 index 000000000..a47128b9c Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/lerasium_nicrosil_nugget.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/lerasium_nugget.png b/src/main/resources/assets/cosmere/textures/item/lerasium_nugget.png new file mode 100644 index 000000000..9a60b4ace Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/lerasium_nugget.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/lerasium_pewter_nugget.png b/src/main/resources/assets/cosmere/textures/item/lerasium_pewter_nugget.png new file mode 100644 index 000000000..e8249014a Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/lerasium_pewter_nugget.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/lerasium_steel_nugget.png b/src/main/resources/assets/cosmere/textures/item/lerasium_steel_nugget.png new file mode 100644 index 000000000..cb398219d Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/lerasium_steel_nugget.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/lerasium_tin_nugget.png b/src/main/resources/assets/cosmere/textures/item/lerasium_tin_nugget.png new file mode 100644 index 000000000..34d61d3a7 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/lerasium_tin_nugget.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/lerasium_zinc_nugget.png b/src/main/resources/assets/cosmere/textures/item/lerasium_zinc_nugget.png new file mode 100644 index 000000000..f8507b138 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/lerasium_zinc_nugget.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/malatium_ingot.png b/src/main/resources/assets/cosmere/textures/item/malatium_ingot.png new file mode 100644 index 000000000..fabd3f78d Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/malatium_ingot.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/malatium_nugget.png b/src/main/resources/assets/cosmere/textures/item/malatium_nugget.png new file mode 100644 index 000000000..121c03485 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/malatium_nugget.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/metal_bead.png b/src/main/resources/assets/cosmere/textures/item/metal_bead.png deleted file mode 100644 index 23548bb5a..000000000 Binary files a/src/main/resources/assets/cosmere/textures/item/metal_bead.png and /dev/null differ diff --git a/src/main/resources/assets/cosmere/textures/item/metal_bracelet.png b/src/main/resources/assets/cosmere/textures/item/metal_bracelet.png deleted file mode 100644 index 868b12ff4..000000000 Binary files a/src/main/resources/assets/cosmere/textures/item/metal_bracelet.png and /dev/null differ diff --git a/src/main/resources/assets/cosmere/textures/item/metal_ingot.png b/src/main/resources/assets/cosmere/textures/item/metal_ingot.png deleted file mode 100644 index e302bdef0..000000000 Binary files a/src/main/resources/assets/cosmere/textures/item/metal_ingot.png and /dev/null differ diff --git a/src/main/resources/assets/cosmere/textures/item/metal_necklace.png b/src/main/resources/assets/cosmere/textures/item/metal_necklace.png deleted file mode 100644 index 77cb8c443..000000000 Binary files a/src/main/resources/assets/cosmere/textures/item/metal_necklace.png and /dev/null differ diff --git a/src/main/resources/assets/cosmere/textures/item/metal_nugget.png b/src/main/resources/assets/cosmere/textures/item/metal_nugget.png deleted file mode 100644 index 2a9d06d0d..000000000 Binary files a/src/main/resources/assets/cosmere/textures/item/metal_nugget.png and /dev/null differ diff --git a/src/main/resources/assets/cosmere/textures/item/metal_raw.png b/src/main/resources/assets/cosmere/textures/item/metal_raw.png deleted file mode 100644 index 4b8286fe1..000000000 Binary files a/src/main/resources/assets/cosmere/textures/item/metal_raw.png and /dev/null differ diff --git a/src/main/resources/assets/cosmere/textures/item/metal_ring.png b/src/main/resources/assets/cosmere/textures/item/metal_ring.png deleted file mode 100644 index 7b61d5193..000000000 Binary files a/src/main/resources/assets/cosmere/textures/item/metal_ring.png and /dev/null differ diff --git a/src/main/resources/assets/cosmere/textures/item/metal_vial.png b/src/main/resources/assets/cosmere/textures/item/metal_vial.png deleted file mode 100644 index 2d890a402..000000000 Binary files a/src/main/resources/assets/cosmere/textures/item/metal_vial.png and /dev/null differ diff --git a/src/main/resources/assets/cosmere/textures/item/mist_cloak.png b/src/main/resources/assets/cosmere/textures/item/mist_cloak.png deleted file mode 100644 index 2d890a402..000000000 Binary files a/src/main/resources/assets/cosmere/textures/item/mist_cloak.png and /dev/null differ diff --git a/src/main/resources/assets/cosmere/textures/item/nickel_ingot.png b/src/main/resources/assets/cosmere/textures/item/nickel_ingot.png new file mode 100644 index 000000000..4e0eb9e95 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/nickel_ingot.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/nickel_nugget.png b/src/main/resources/assets/cosmere/textures/item/nickel_nugget.png new file mode 100644 index 000000000..3dfee8170 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/nickel_nugget.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/nicrosil_blend.png b/src/main/resources/assets/cosmere/textures/item/nicrosil_blend.png new file mode 100644 index 000000000..2334170d0 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/nicrosil_blend.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/nicrosil_ingot.png b/src/main/resources/assets/cosmere/textures/item/nicrosil_ingot.png new file mode 100644 index 000000000..2f599c62e Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/nicrosil_ingot.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/nicrosil_nugget.png b/src/main/resources/assets/cosmere/textures/item/nicrosil_nugget.png new file mode 100644 index 000000000..a112c80c4 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/nicrosil_nugget.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/night_blood.png b/src/main/resources/assets/cosmere/textures/item/night_blood.png deleted file mode 100644 index 2d890a402..000000000 Binary files a/src/main/resources/assets/cosmere/textures/item/night_blood.png and /dev/null differ diff --git a/src/main/resources/assets/cosmere/textures/item/obsidian_dagger.png b/src/main/resources/assets/cosmere/textures/item/obsidian_dagger.png deleted file mode 100644 index 2d890a402..000000000 Binary files a/src/main/resources/assets/cosmere/textures/item/obsidian_dagger.png and /dev/null differ diff --git a/src/main/resources/assets/cosmere/textures/item/pewter_blend.png b/src/main/resources/assets/cosmere/textures/item/pewter_blend.png new file mode 100644 index 000000000..2f7a7a4b1 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/pewter_blend.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/pewter_ingot.png b/src/main/resources/assets/cosmere/textures/item/pewter_ingot.png new file mode 100644 index 000000000..a142c540d Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/pewter_ingot.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/pewter_nugget.png b/src/main/resources/assets/cosmere/textures/item/pewter_nugget.png new file mode 100644 index 000000000..1bd2f273d Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/pewter_nugget.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/raw_aluminum_ore.png b/src/main/resources/assets/cosmere/textures/item/raw_aluminum_ore.png new file mode 100644 index 000000000..1a89c32d3 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/raw_aluminum_ore.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/raw_cadmium_ore.png b/src/main/resources/assets/cosmere/textures/item/raw_cadmium_ore.png new file mode 100644 index 000000000..1dd2e56c4 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/raw_cadmium_ore.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/raw_chromium_ore.png b/src/main/resources/assets/cosmere/textures/item/raw_chromium_ore.png new file mode 100644 index 000000000..270e03afb Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/raw_chromium_ore.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/raw_copper_ore.png b/src/main/resources/assets/cosmere/textures/item/raw_copper_ore.png new file mode 100644 index 000000000..70bc208eb Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/raw_copper_ore.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/raw_lead_ore.png b/src/main/resources/assets/cosmere/textures/item/raw_lead_ore.png new file mode 100644 index 000000000..cbb6e0ff4 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/raw_lead_ore.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/raw_nickel_ore.png b/src/main/resources/assets/cosmere/textures/item/raw_nickel_ore.png new file mode 100644 index 000000000..902ecf948 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/raw_nickel_ore.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/raw_silver_ore.png b/src/main/resources/assets/cosmere/textures/item/raw_silver_ore.png new file mode 100644 index 000000000..0ff57d2dd Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/raw_silver_ore.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/raw_tin_ore.png b/src/main/resources/assets/cosmere/textures/item/raw_tin_ore.png new file mode 100644 index 000000000..12316e3da Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/raw_tin_ore.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/raw_zinc_ore.png b/src/main/resources/assets/cosmere/textures/item/raw_zinc_ore.png new file mode 100644 index 000000000..8849c8ed7 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/raw_zinc_ore.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/silver_ingot.png b/src/main/resources/assets/cosmere/textures/item/silver_ingot.png new file mode 100644 index 000000000..137a4f10b Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/silver_ingot.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/silver_nugget.png b/src/main/resources/assets/cosmere/textures/item/silver_nugget.png new file mode 100644 index 000000000..7af5ea266 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/silver_nugget.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/steel_blend.png b/src/main/resources/assets/cosmere/textures/item/steel_blend.png new file mode 100644 index 000000000..56254c227 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/steel_blend.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/steel_ingot.png b/src/main/resources/assets/cosmere/textures/item/steel_ingot.png new file mode 100644 index 000000000..9403b5769 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/steel_ingot.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/steel_nugget.png b/src/main/resources/assets/cosmere/textures/item/steel_nugget.png new file mode 100644 index 000000000..cec8ff70c Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/steel_nugget.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/tin_ingot.png b/src/main/resources/assets/cosmere/textures/item/tin_ingot.png new file mode 100644 index 000000000..50fd9f66f Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/tin_ingot.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/tin_nugget.png b/src/main/resources/assets/cosmere/textures/item/tin_nugget.png new file mode 100644 index 000000000..91c7f2ea6 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/tin_nugget.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/zinc_ingot.png b/src/main/resources/assets/cosmere/textures/item/zinc_ingot.png new file mode 100644 index 000000000..2324dbf10 Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/zinc_ingot.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/zinc_nugget.png b/src/main/resources/assets/cosmere/textures/item/zinc_nugget.png new file mode 100644 index 000000000..cff77076c Binary files /dev/null and b/src/main/resources/assets/cosmere/textures/item/zinc_nugget.png differ diff --git a/src/main/resources/assets/curios/textures/slot/spike_icon.png b/src/main/resources/assets/curios/textures/slot/spike_icon.png new file mode 100644 index 000000000..442e707bf Binary files /dev/null and b/src/main/resources/assets/curios/textures/slot/spike_icon.png differ diff --git a/src/main/resources/cosmere.mixins.json b/src/main/resources/cosmere.mixins.json index 60eede605..7627d0256 100644 --- a/src/main/resources/cosmere.mixins.json +++ b/src/main/resources/cosmere.mixins.json @@ -2,13 +2,15 @@ "required": true, "minVersion": "0.8", "package": "leaf.cosmere.mixin", - "compatibilityLevel": "JAVA_8", - "refmap": "cosmere.refmap.json", + "compatibilityLevel": "JAVA_17", + "refmap": "mixins.cosmere.refmap.json", "mixins": [ + "VillagerMixin" ], "client": [ "GameRendererMixin", - "EffectInstanceMixin" + "LevelRendererMixin", + "LightTextureMixin" ], "injectors": { "defaultRequire": 1 diff --git a/src/main/resources/data/cosmere/advancements/grant_book_on_first_join.json b/src/main/resources/data/cosmere/advancements/grant_book_on_first_join.json new file mode 100644 index 000000000..105db3ec2 --- /dev/null +++ b/src/main/resources/data/cosmere/advancements/grant_book_on_first_join.json @@ -0,0 +1,12 @@ +{ + "criteria": { + "tick": { + "trigger": "minecraft:tick" + } + }, + "rewards": { + "loot": [ + "cosmere:grant_book_on_first_join" + ] + } +} \ No newline at end of file diff --git a/src/main/resources/data/cosmere/curios/slots/bracelet.json b/src/main/resources/data/cosmere/curios/slots/bracelet.json new file mode 100644 index 000000000..d4ffe38f0 --- /dev/null +++ b/src/main/resources/data/cosmere/curios/slots/bracelet.json @@ -0,0 +1,6 @@ +{ + "order": 120, + "size": 6, + "icon": "curios:slot/empty_bracelet_slot", + "add_cosmetic": true +} \ No newline at end of file diff --git a/src/main/resources/data/cosmere/curios/slots/eyes.json b/src/main/resources/data/cosmere/curios/slots/eyes.json new file mode 100644 index 000000000..629a1be99 --- /dev/null +++ b/src/main/resources/data/cosmere/curios/slots/eyes.json @@ -0,0 +1,6 @@ +{ + "order": 0, + "size": 2, + "icon": "curios:slot/empty_head_slot", + "add_cosmetic": true +} \ No newline at end of file diff --git a/src/main/resources/data/cosmere/curios/slots/linchpin.json b/src/main/resources/data/cosmere/curios/slots/linchpin.json new file mode 100644 index 000000000..97de62399 --- /dev/null +++ b/src/main/resources/data/cosmere/curios/slots/linchpin.json @@ -0,0 +1,6 @@ +{ + "order": 1, + "size": 1, + "icon": "curios:slot/spike_icon", + "add_cosmetic": true +} \ No newline at end of file diff --git a/src/main/resources/data/cosmere/curios/slots/mental.json b/src/main/resources/data/cosmere/curios/slots/mental.json new file mode 100644 index 000000000..e4d845421 --- /dev/null +++ b/src/main/resources/data/cosmere/curios/slots/mental.json @@ -0,0 +1,6 @@ +{ + "order": 502, + "size": 10, + "icon": "curios:slot/spike_icon", + "add_cosmetic": true +} \ No newline at end of file diff --git a/src/main/resources/data/cosmere/curios/slots/necklace.json b/src/main/resources/data/cosmere/curios/slots/necklace.json new file mode 100644 index 000000000..6bfd6ea42 --- /dev/null +++ b/src/main/resources/data/cosmere/curios/slots/necklace.json @@ -0,0 +1,6 @@ +{ + "order": 60, + "size": 2, + "icon": "curios:slot/empty_necklace_slot", + "add_cosmetic": false +} \ No newline at end of file diff --git a/src/main/resources/data/cosmere/curios/slots/physical.json b/src/main/resources/data/cosmere/curios/slots/physical.json new file mode 100644 index 000000000..ee2312e5b --- /dev/null +++ b/src/main/resources/data/cosmere/curios/slots/physical.json @@ -0,0 +1,6 @@ +{ + "order": 501, + "size": 8, + "icon": "curios:slot/spike_icon", + "add_cosmetic": true +} \ No newline at end of file diff --git a/src/main/resources/data/cosmere/curios/slots/ring.json b/src/main/resources/data/cosmere/curios/slots/ring.json new file mode 100644 index 000000000..08eaf25c8 --- /dev/null +++ b/src/main/resources/data/cosmere/curios/slots/ring.json @@ -0,0 +1,6 @@ +{ + "order": 160, + "size": 8, + "icon": "curios:slot/empty_ring_slot", + "add_cosmetic": false +} \ No newline at end of file diff --git a/src/main/resources/data/cosmere/curios/slots/spiritual.json b/src/main/resources/data/cosmere/curios/slots/spiritual.json new file mode 100644 index 000000000..c6136995a --- /dev/null +++ b/src/main/resources/data/cosmere/curios/slots/spiritual.json @@ -0,0 +1,6 @@ +{ + "order": 503, + "size": 4, + "icon": "curios:slot/spike_icon", + "add_cosmetic": true +} \ No newline at end of file diff --git a/src/main/resources/data/cosmere/curios/slots/temporal.json b/src/main/resources/data/cosmere/curios/slots/temporal.json new file mode 100644 index 000000000..78b67647c --- /dev/null +++ b/src/main/resources/data/cosmere/curios/slots/temporal.json @@ -0,0 +1,6 @@ +{ + "order": 504, + "size": 16, + "icon": "curios:slot/spike_icon", + "add_cosmetic": true +} \ No newline at end of file diff --git a/src/main/resources/data/cosmere/dimension/shadesmar.json b/src/main/resources/data/cosmere/dimension/shadesmar.json new file mode 100644 index 000000000..0472d3c89 --- /dev/null +++ b/src/main/resources/data/cosmere/dimension/shadesmar.json @@ -0,0 +1,11 @@ +{ + "type": "minecraft:overworld", + "generator": { + "type": "minecraft:noise", + "settings": "cosmere:shadesmar_biome", + "biome_source": { + "type": "minecraft:fixed", + "biome": "cosmere:shadesmar_biome" + } + } +} diff --git a/src/main/resources/data/cosmere/dimension_type/shadesmar_type.json b/src/main/resources/data/cosmere/dimension_type/shadesmar_type.json new file mode 100644 index 000000000..1f35ac497 --- /dev/null +++ b/src/main/resources/data/cosmere/dimension_type/shadesmar_type.json @@ -0,0 +1,26 @@ +{ + "ultrawarm": false, + "natural": false, + "piglin_safe": false, + "respawn_anchor_works": false, + "bed_works": false, + "has_raids": true, + "has_skylight": false, + "has_ceiling": false, + "coordinate_scale": 1, + "ambient_light": 0, + "fixed_time": 6000, + "logical_height": 256, + "effects": "minecraft:the_end", + "infiniburn": "#minecraft:infiniburn_end", + "min_y": 0, + "height": 256, + "monster_spawn_light_level": { + "type": "minecraft:uniform", + "value": { + "min_inclusive": 0, + "max_inclusive": 7 + } + }, + "monster_spawn_block_light_limit": 0 +} diff --git a/src/main/resources/data/cosmere/loot_modifiers/fortune_bonus.json b/src/main/resources/data/cosmere/loot_modifiers/fortune_bonus.json index 0017f3d74..c2052f742 100644 --- a/src/main/resources/data/cosmere/loot_modifiers/fortune_bonus.json +++ b/src/main/resources/data/cosmere/loot_modifiers/fortune_bonus.json @@ -1,4 +1,5 @@ { + "type": "cosmere:fortune_bonus", "conditions": [], "function": "cosmere:fortune_bonus" } \ No newline at end of file diff --git a/src/main/resources/data/cosmere/loot_tables/grant_book_on_first_join.json b/src/main/resources/data/cosmere/loot_tables/grant_book_on_first_join.json new file mode 100644 index 000000000..d995c1fc0 --- /dev/null +++ b/src/main/resources/data/cosmere/loot_tables/grant_book_on_first_join.json @@ -0,0 +1,14 @@ +{ + "type": "advancement_reward", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "cosmere:guide" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/cosmere/loot_tables/inject/abandoned_mineshaft.json b/src/main/resources/data/cosmere/loot_tables/inject/abandoned_mineshaft.json new file mode 100644 index 000000000..a0363e41a --- /dev/null +++ b/src/main/resources/data/cosmere/loot_tables/inject/abandoned_mineshaft.json @@ -0,0 +1,34 @@ +{ + "__comment": "This table is injected as its own pool into minecraft:chests/abandoned_mineshaft", + "pools": [ + { + "name": "main", + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "cosmere:atium_nugget", + "weight": 5 + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "cosmere:randomise_metaltype" + }, + { + "function": "minecraft:set_count", + "count": { + "min": 3.0, + "max": 7.0, + "type": "minecraft:uniform" + } + } + ], + "name": "cosmere:raw_tin_ore", + "__comment": "with randomise metal type function, only tin doesn't matter here." + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/cosmere/loot_tables/inject/bastion_bridge.json b/src/main/resources/data/cosmere/loot_tables/inject/bastion_bridge.json new file mode 100644 index 000000000..32cde47a1 --- /dev/null +++ b/src/main/resources/data/cosmere/loot_tables/inject/bastion_bridge.json @@ -0,0 +1,44 @@ +{ + "__comment": "This table is injected as its own pool into minecraft:chests/woodland_mansion", + "pools": [ + { + "name": "main", + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "hemalurgy:atium_spike", + "functions": [ + { + "function": "cosmere:randomise_metaltype" + }, + { + "function": "hemalurgy:invest_spike" + }, + { + "function": "feruchemy:invest_metalmind" + } + ] + }, + { + "type": "minecraft:item", + "name": "cosmere:atium_nugget", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 3.0, + "max": 7.0, + "type": "minecraft:uniform" + } + } + ] + }, + { + "type": "minecraft:empty", + "weight": 25 + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/cosmere/loot_tables/inject/bastion_other.json b/src/main/resources/data/cosmere/loot_tables/inject/bastion_other.json new file mode 100644 index 000000000..ff5bdb3e6 --- /dev/null +++ b/src/main/resources/data/cosmere/loot_tables/inject/bastion_other.json @@ -0,0 +1,44 @@ +{ + "__comment": "This table is injected as its own pool into minecraft:chests/woodland_mansion", + "pools": [ + { + "name": "main", + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "hemalurgy:atium_spike", + "functions": [ + { + "function": "cosmere:randomise_metaltype" + }, + { + "function": "hemalurgy:invest_spike" + }, + { + "function": "feruchemy:invest_metalmind" + } + ] + }, + { + "type": "minecraft:item", + "name": "cosmere:atium_nugget", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 3.0, + "max": 7.0, + "type": "minecraft:uniform" + } + } + ] + }, + { + "type": "minecraft:empty", + "weight": 33 + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/cosmere/loot_tables/inject/bastion_treasure.json b/src/main/resources/data/cosmere/loot_tables/inject/bastion_treasure.json new file mode 100644 index 000000000..31a620358 --- /dev/null +++ b/src/main/resources/data/cosmere/loot_tables/inject/bastion_treasure.json @@ -0,0 +1,44 @@ +{ + "__comment": "This table is injected as its own pool into minecraft:chests/woodland_mansion", + "pools": [ + { + "name": "main", + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "hemalurgy:atium_spike", + "functions": [ + { + "function": "cosmere:randomise_metaltype" + }, + { + "function": "hemalurgy:invest_spike" + }, + { + "function": "feruchemy:invest_metalmind" + } + ] + }, + { + "type": "minecraft:item", + "name": "cosmere:atium_nugget", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 3.0, + "max": 7.0, + "type": "minecraft:uniform" + } + } + ] + }, + { + "type": "minecraft:empty", + "weight": 5 + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/cosmere/loot_tables/inject/desert_pyramid.json b/src/main/resources/data/cosmere/loot_tables/inject/desert_pyramid.json new file mode 100644 index 000000000..148f5afdd --- /dev/null +++ b/src/main/resources/data/cosmere/loot_tables/inject/desert_pyramid.json @@ -0,0 +1,58 @@ +{ + "__comment": "This table is injected as its own pool into minecraft:chests/desert_pyramid", + "pools": [ + { + "name": "main", + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "__comment": "with randomise metal type function, only tin doesn't matter here.", + "name": "hemalurgy:tin_spike", + "functions": [ + { + "function": "cosmere:randomise_metaltype" + }, + { + "function": "hemalurgy:invest_spike" + }, + { + "function": "feruchemy:invest_metalmind" + } + ] + }, + { + "type": "minecraft:item", + "__comment": "with randomise metal type function, only tin doesn't matter here.", + "name": "feruchemy:tin_ring_metalmind", + "functions": [ + { + "function": "cosmere:randomise_metaltype" + }, + { + "function": "feruchemy:invest_metalmind" + } + ] + }, + { + "type": "minecraft:item", + "name": "cosmere:atium_nugget", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 3.0, + "max": 7.0, + "type": "minecraft:uniform" + } + } + ] + }, + { + "type": "minecraft:empty", + "weight": 33 + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/cosmere/loot_tables/inject/end_city_treasure.json b/src/main/resources/data/cosmere/loot_tables/inject/end_city_treasure.json new file mode 100644 index 000000000..f7d4f5b74 --- /dev/null +++ b/src/main/resources/data/cosmere/loot_tables/inject/end_city_treasure.json @@ -0,0 +1,44 @@ +{ + "__comment": "This table is injected as its own pool into minecraft:chests/end_city_treasure", + "pools": [ + { + "name": "main", + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "hemalurgy:atium_spike", + "functions": [ + { + "function": "cosmere:randomise_metaltype" + }, + { + "function": "hemalurgy:invest_spike" + }, + { + "function": "feruchemy:invest_metalmind" + } + ] + }, + { + "type": "minecraft:item", + "name": "cosmere:atium_nugget", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 3.0, + "max": 7.0, + "type": "minecraft:uniform" + } + } + ] + }, + { + "type": "minecraft:empty", + "weight": 16 + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/cosmere/loot_tables/inject/jungle_temple.json b/src/main/resources/data/cosmere/loot_tables/inject/jungle_temple.json new file mode 100644 index 000000000..15f8cc8c0 --- /dev/null +++ b/src/main/resources/data/cosmere/loot_tables/inject/jungle_temple.json @@ -0,0 +1,58 @@ +{ + "__comment": "This table is injected as its own pool into minecraft:chests/jungle_temple", + "pools": [ + { + "name": "main", + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "__comment": "with randomise metal type function, only tin doesn't matter here.", + "name": "hemalurgy:tin_spike", + "functions": [ + { + "function": "cosmere:randomise_metaltype" + }, + { + "function": "hemalurgy:invest_spike" + }, + { + "function": "feruchemy:invest_metalmind" + } + ] + }, + { + "type": "minecraft:item", + "__comment": "with randomise metal type function, only tin doesn't matter here.", + "name": "feruchemy:tin_ring_metalmind", + "functions": [ + { + "function": "cosmere:randomise_metaltype" + }, + { + "function": "feruchemy:invest_metalmind" + } + ] + }, + { + "type": "minecraft:item", + "name": "cosmere:atium_nugget", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 3.0, + "max": 7.0, + "type": "minecraft:uniform" + } + } + ] + }, + { + "type": "minecraft:empty", + "weight": 33 + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/cosmere/loot_tables/inject/simple_dungeon.json b/src/main/resources/data/cosmere/loot_tables/inject/simple_dungeon.json new file mode 100644 index 000000000..bcdb8271f --- /dev/null +++ b/src/main/resources/data/cosmere/loot_tables/inject/simple_dungeon.json @@ -0,0 +1,57 @@ +{ + "__comment": "This table is injected as its own pool into minecraft:chests/simple_dungeon", + "pools": [ + { + "name": "main", + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "__comment": "with randomise metal type function, only tin doesn't matter here.", + "name": "feruchemy:tin_ring_metalmind", + "functions": [ + { + "function": "cosmere:randomise_metaltype" + }, + { + "function": "feruchemy:invest_metalmind" + } + ] + }, + { + "type": "minecraft:item", + "name": "hemalurgy:steel_spike", + "functions": [ + { + "function": "cosmere:randomise_metaltype" + }, + { + "function": "hemalurgy:invest_spike" + }, + { + "function": "feruchemy:invest_metalmind" + } + ] + }, + { + "type": "minecraft:item", + "name": "cosmere:atium_nugget", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 3.0, + "max": 7.0, + "type": "minecraft:uniform" + } + } + ] + }, + { + "type": "minecraft:empty", + "weight": 33 + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/cosmere/loot_tables/inject/spawn_bonus_chest.json b/src/main/resources/data/cosmere/loot_tables/inject/spawn_bonus_chest.json new file mode 100644 index 000000000..bf369e585 --- /dev/null +++ b/src/main/resources/data/cosmere/loot_tables/inject/spawn_bonus_chest.json @@ -0,0 +1,31 @@ +{ + "__comment": "This table is injected as its own pool into minecraft:chests/spawn_bonus_chest", + "pools": [ + { + "name": "main", + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "hemalurgy:steel_spike", + "weight": 50, + "functions": [ + { + "function": "cosmere:randomise_metaltype" + }, + { + "function": "hemalurgy:invest_spike" + }, + { + "function": "feruchemy:invest_metalmind" + } + ] + }, + { + "type": "minecraft:empty", + "weight": 50 + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/cosmere/loot_tables/inject/stronghold_corridor.json b/src/main/resources/data/cosmere/loot_tables/inject/stronghold_corridor.json new file mode 100644 index 000000000..eb82840c9 --- /dev/null +++ b/src/main/resources/data/cosmere/loot_tables/inject/stronghold_corridor.json @@ -0,0 +1,29 @@ +{ + "__comment": "This table is injected as its own pool into minecraft:chests/stronghold_corridor", + "pools": [ + { + "name": "main", + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "__comment": "with randomise metal type function, only tin doesn't matter here.", + "name": "feruchemy:tin_ring_metalmind", + "weight": 50, + "functions": [ + { + "function": "cosmere:randomise_metaltype" + }, + { + "function": "feruchemy:invest_metalmind" + } + ] + }, + { + "type": "minecraft:empty", + "weight": 50 + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/cosmere/loot_tables/inject/stronghold_crossing.json b/src/main/resources/data/cosmere/loot_tables/inject/stronghold_crossing.json new file mode 100644 index 000000000..cd1960d52 --- /dev/null +++ b/src/main/resources/data/cosmere/loot_tables/inject/stronghold_crossing.json @@ -0,0 +1,29 @@ +{ + "__comment": "This table is injected as its own pool into minecraft:chests/stronghold_crossing", + "pools": [ + { + "name": "main", + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "__comment": "with randomise metal type function, only tin doesn't matter here.", + "name": "feruchemy:tin_ring_metalmind", + "weight": 50, + "functions": [ + { + "function": "cosmere:randomise_metaltype" + }, + { + "function": "feruchemy:invest_metalmind" + } + ] + }, + { + "type": "minecraft:empty", + "weight": 50 + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/cosmere/loot_tables/inject/stronghold_library.json b/src/main/resources/data/cosmere/loot_tables/inject/stronghold_library.json new file mode 100644 index 000000000..c4a2975e5 --- /dev/null +++ b/src/main/resources/data/cosmere/loot_tables/inject/stronghold_library.json @@ -0,0 +1,29 @@ +{ + "__comment": "This table is injected as its own pool into minecraft:chests/stronghold_library", + "pools": [ + { + "name": "main", + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "__comment": "with randomise metal type function, only tin doesn't matter here.", + "name": "feruchemy:tin_ring_metalmind", + "weight": 50, + "functions": [ + { + "function": "cosmere:randomise_metaltype" + }, + { + "function": "feruchemy:invest_metalmind" + } + ] + }, + { + "type": "minecraft:empty", + "weight": 50 + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/cosmere/loot_tables/inject/village_blacksmith.json b/src/main/resources/data/cosmere/loot_tables/inject/village_blacksmith.json new file mode 100644 index 000000000..b4aeed9fe --- /dev/null +++ b/src/main/resources/data/cosmere/loot_tables/inject/village_blacksmith.json @@ -0,0 +1,45 @@ +{ + "__comment": "This table is injected as its own pool into minecraft:chests/village_blacksmith", + "pools": [ + { + "name": "main", + "rolls": 1, + "entries": [ + { + "type": "minecraft:empty" + }, + { + "type": "minecraft:item", + "__comment": "with randomise metal type function, only tin doesn't matter here.", + "name": "feruchemy:tin_ring_metalmind", + "functions": [ + { + "function": "cosmere:randomise_metaltype" + }, + { + "function": "feruchemy:invest_metalmind" + } + ] + }, + { + "type": "minecraft:item", + "functions": [ + { + "function": "cosmere:randomise_metaltype" + }, + { + "function": "minecraft:set_count", + "count": { + "min": 3.0, + "max": 7.0, + "type": "minecraft:uniform" + } + } + ], + "name": "cosmere:raw_tin_ore", + "__comment": "with randomise metal type function, only tin doesn't matter here." + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/cosmere/loot_tables/inject/woodland_mansion.json b/src/main/resources/data/cosmere/loot_tables/inject/woodland_mansion.json new file mode 100644 index 000000000..85b5322b5 --- /dev/null +++ b/src/main/resources/data/cosmere/loot_tables/inject/woodland_mansion.json @@ -0,0 +1,45 @@ +{ + "__comment": "This table is injected as its own pool into minecraft:chests/woodland_mansion", + "pools": [ + { + "name": "main", + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "__comment": "with randomise metal type function, only tin doesn't matter here.", + "name": "hemalurgy:tin_spike", + "functions": [ + { + "function": "cosmere:randomise_metaltype" + }, + { + "function": "hemalurgy:invest_spike" + }, + { + "function": "feruchemy:invest_metalmind" + } + ] + }, + { + "type": "minecraft:item", + "name": "cosmere:atium_nugget", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 3.0, + "max": 7.0, + "type": "minecraft:uniform" + } + } + ] + }, + { + "type": "minecraft:empty", + "weight": 33 + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/cosmere/patchouli_books/guide/book.json b/src/main/resources/data/cosmere/patchouli_books/guide/book.json index 756ceb463..ab3933414 100644 --- a/src/main/resources/data/cosmere/patchouli_books/guide/book.json +++ b/src/main/resources/data/cosmere/patchouli_books/guide/book.json @@ -1,21 +1,19 @@ { "name": "item.cosmere.guide", - "landing_text": "cosmere.landing", "version": "buildNumber", - "book_texture": "patchouli:textures/gui/book_gray.png", "model": "cosmere:guide", - "creative_tab": "cosmere.items", "pause_game": false, - "dont_generate_book": true, "custom_book_item": "cosmere:guide", - "advancements_tab": "cosmere:main/root", - "advancement_namespaces": ["cosmere"], - + "use_resource_pack": true, + "advancement_namespaces": [ + "cosmere" + ], + "i18n": true, "macros": { "$(item)": "$(1)", "$(thing)": "$(4)" diff --git a/src/main/resources/data/cosmere/patchouli_books/guide/en_us/categories/tutorial.json b/src/main/resources/data/cosmere/patchouli_books/guide/en_us/categories/tutorial.json deleted file mode 100644 index 1bb0641da..000000000 --- a/src/main/resources/data/cosmere/patchouli_books/guide/en_us/categories/tutorial.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "name": "Diary Entries", - "description": "", - "icon": "minecraft:paper" -} \ No newline at end of file diff --git a/src/main/resources/data/cosmere/patchouli_books/guide/en_us/entries/tutorial/entry_1_day_1.json b/src/main/resources/data/cosmere/patchouli_books/guide/en_us/entries/tutorial/entry_1_day_1.json deleted file mode 100644 index 83ec04235..000000000 --- a/src/main/resources/data/cosmere/patchouli_books/guide/en_us/entries/tutorial/entry_1_day_1.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "Day One - Strange things", - "category": "tutorial", - "icon": "cosmere:iron_spike", - "pages": [ - { - "type": "text", - "text": "in an ideal world, this text will show." - }, - { - "type": "text", - "text": "Xion crystals." - }, - { - "type": "text", - "text": "Cinnabar" - } - ] -} \ No newline at end of file diff --git a/src/main/resources/data/cosmere/patchouli_books/guide/en_us/entries/tutorial/entry_1_getting_started.json b/src/main/resources/data/cosmere/patchouli_books/guide/en_us/entries/tutorial/entry_1_getting_started.json deleted file mode 100644 index 83ec04235..000000000 --- a/src/main/resources/data/cosmere/patchouli_books/guide/en_us/entries/tutorial/entry_1_getting_started.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "Day One - Strange things", - "category": "tutorial", - "icon": "cosmere:iron_spike", - "pages": [ - { - "type": "text", - "text": "in an ideal world, this text will show." - }, - { - "type": "text", - "text": "Xion crystals." - }, - { - "type": "text", - "text": "Cinnabar" - } - ] -} \ No newline at end of file diff --git a/src/main/resources/data/cosmere/patchouli_books/guide/en_us/entries/tutorial/entry_6_storyteller.json b/src/main/resources/data/cosmere/patchouli_books/guide/en_us/entries/tutorial/entry_6_storyteller.json deleted file mode 100644 index 885fc61ed..000000000 --- a/src/main/resources/data/cosmere/patchouli_books/guide/en_us/entries/tutorial/entry_6_storyteller.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name": "Day 20 - The Storyteller", - "category": "tutorial", - "icon": "minecraft:paper", - "sortnum": 6, - "pages": [ - { - "type": "text", - "text": "I heard tales of a story teller who may know more." - }, - { - "type": "entity", - "entity": "minecraft:villager{VillagerData:{profession:\"minecraft:blacksmith\",level:5,type:desert}}", - "name": "The Storyteller", - "text": "They are rather quirky fellows, but otherwise seem like stable individuals." - }, - { - "type": "spotlight", - "item": "minecraft:paper", - "text": "display model of paper" - } - ] -} \ No newline at end of file diff --git a/src/main/resources/data/cosmere/patchouli_books/guide/en_us/entries/tutorial/entry_7_ancient_artifacts.json b/src/main/resources/data/cosmere/patchouli_books/guide/en_us/entries/tutorial/entry_7_ancient_artifacts.json deleted file mode 100644 index 08b6a807e..000000000 --- a/src/main/resources/data/cosmere/patchouli_books/guide/en_us/entries/tutorial/entry_7_ancient_artifacts.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "name": "Day Thirty - Artifacts", - "category": "tutorial", - "icon": "cosmere:guide", - "sortnum": 7, - "pages": [ - { - "type": "text", - "text": "in an ideal world, this text will show." - }, - { - "type": "text", - "text": "Xion crystals." - }, - { - "type": "text", - "text": "Cinnabar" - } - ] -} \ No newline at end of file diff --git a/src/main/resources/data/cosmere/worldgen/biome/shadesmar_biome.json b/src/main/resources/data/cosmere/worldgen/biome/shadesmar_biome.json new file mode 100644 index 000000000..4fec2bc86 --- /dev/null +++ b/src/main/resources/data/cosmere/worldgen/biome/shadesmar_biome.json @@ -0,0 +1,36 @@ +{ + "temperature": 0.5, + "downfall": 0.5, + "has_precipitation": false, + "effects": { + "sky_color": 0, + "fog_color": 3089199, + "water_color": 4159204, + "water_fog_color": 329011, + "mood_sound": { + "sound": "minecraft:ambient.cave", + "tick_delay": 6000, + "block_search_extent": 8, + "offset": 2 + } + }, + "spawners": { + "ambient": [], + "axolotls": [], + "creature": [], + "misc": [], + "monster": [], + "underground_water_creature": [], + "water_ambient": [], + "water_creature": [] + }, + "spawn_costs": {}, + "carvers": {}, + "features": [ + [], + [], + [], + [], + [] + ] +} diff --git a/src/main/resources/data/cosmere/worldgen/noise_settings/shadesmar_biome.json b/src/main/resources/data/cosmere/worldgen/noise_settings/shadesmar_biome.json new file mode 100644 index 000000000..e15d135ad --- /dev/null +++ b/src/main/resources/data/cosmere/worldgen/noise_settings/shadesmar_biome.json @@ -0,0 +1,2539 @@ +{ + "sea_level": 63, + "disable_mob_generation": true, + "aquifers_enabled": true, + "ore_veins_enabled": true, + "legacy_random_source": false, + "default_block": { + "Name": "minecraft:water" + }, + "default_fluid": { + "Name": "minecraft:obsidian" + }, + "noise": { + "min_y": -64, + "height": 384, + "size_horizontal": 1, + "size_vertical": 2 + }, + "noise_router": { + "barrier": { + "type": "minecraft:noise", + "noise": "minecraft:aquifer_barrier", + "xz_scale": 1, + "y_scale": 0.5 + }, + "fluid_level_floodedness": { + "type": "minecraft:noise", + "noise": "minecraft:aquifer_fluid_level_floodedness", + "xz_scale": 1, + "y_scale": 0.67 + }, + "fluid_level_spread": { + "type": "minecraft:noise", + "noise": "minecraft:aquifer_fluid_level_spread", + "xz_scale": 1, + "y_scale": 0.7142857142857143 + }, + "lava": { + "type": "minecraft:noise", + "noise": "minecraft:aquifer_lava", + "xz_scale": 1, + "y_scale": 1 + }, + "temperature": { + "type": "minecraft:shifted_noise", + "noise": "minecraft:temperature", + "xz_scale": 0.25, + "y_scale": 0, + "shift_x": "minecraft:shift_x", + "shift_y": 0, + "shift_z": "minecraft:shift_z" + }, + "vegetation": { + "type": "minecraft:shifted_noise", + "noise": "minecraft:vegetation", + "xz_scale": 0.25, + "y_scale": 0, + "shift_x": "minecraft:shift_x", + "shift_y": 0, + "shift_z": "minecraft:shift_z" + }, + "continents": "minecraft:overworld/continents", + "erosion": "minecraft:overworld/erosion", + "depth": "minecraft:overworld/depth", + "ridges": "minecraft:overworld/ridges", + "initial_density_without_jaggedness": { + "type": "minecraft:add", + "argument1": 0.1171875, + "argument2": { + "type": "minecraft:mul", + "argument1": { + "type": "minecraft:y_clamped_gradient", + "from_y": -64, + "to_y": -40, + "from_value": 0, + "to_value": 1 + }, + "argument2": { + "type": "minecraft:add", + "argument1": -0.1171875, + "argument2": { + "type": "minecraft:add", + "argument1": -0.078125, + "argument2": { + "type": "minecraft:mul", + "argument1": { + "type": "minecraft:y_clamped_gradient", + "from_y": 240, + "to_y": 256, + "from_value": 1, + "to_value": 0 + }, + "argument2": { + "type": "minecraft:add", + "argument1": 0.078125, + "argument2": { + "type": "minecraft:clamp", + "input": { + "type": "minecraft:add", + "argument1": -0.703125, + "argument2": { + "type": "minecraft:mul", + "argument1": 4, + "argument2": { + "type": "minecraft:quarter_negative", + "argument": { + "type": "minecraft:mul", + "argument1": "minecraft:overworld/depth", + "argument2": { + "type": "minecraft:cache_2d", + "argument": "minecraft:overworld/factor" + } + } + } + } + }, + "min": -64, + "max": 64 + } + } + } + } + } + } + }, + "final_density": { + "type": "minecraft:min", + "argument1": { + "type": "minecraft:squeeze", + "argument": { + "type": "minecraft:mul", + "argument1": 0.64, + "argument2": { + "type": "minecraft:interpolated", + "argument": { + "type": "minecraft:blend_density", + "argument": { + "type": "minecraft:add", + "argument1": 0.1171875, + "argument2": { + "type": "minecraft:mul", + "argument1": { + "type": "minecraft:y_clamped_gradient", + "from_y": -64, + "to_y": -40, + "from_value": 0, + "to_value": 1 + }, + "argument2": { + "type": "minecraft:add", + "argument1": -0.1171875, + "argument2": { + "type": "minecraft:add", + "argument1": -0.078125, + "argument2": { + "type": "minecraft:mul", + "argument1": { + "type": "minecraft:y_clamped_gradient", + "from_y": 240, + "to_y": 256, + "from_value": 1, + "to_value": 0 + }, + "argument2": { + "type": "minecraft:add", + "argument1": 0.078125, + "argument2": { + "type": "minecraft:range_choice", + "input": "minecraft:overworld/sloped_cheese", + "min_inclusive": -1000000, + "max_exclusive": 1.5625, + "when_in_range": { + "type": "minecraft:min", + "argument1": "minecraft:overworld/sloped_cheese", + "argument2": { + "type": "minecraft:mul", + "argument1": 5, + "argument2": "minecraft:overworld/caves/entrances" + } + }, + "when_out_of_range": { + "type": "minecraft:max", + "argument1": { + "type": "minecraft:min", + "argument1": { + "type": "minecraft:min", + "argument1": { + "type": "minecraft:add", + "argument1": { + "type": "minecraft:mul", + "argument1": 4, + "argument2": { + "type": "minecraft:square", + "argument": { + "type": "minecraft:noise", + "noise": "minecraft:cave_layer", + "xz_scale": 1, + "y_scale": 8 + } + } + }, + "argument2": { + "type": "minecraft:add", + "argument1": { + "type": "minecraft:clamp", + "input": { + "type": "minecraft:add", + "argument1": 0.27, + "argument2": { + "type": "minecraft:noise", + "noise": "minecraft:cave_cheese", + "xz_scale": 1, + "y_scale": 0.6666666666666666 + } + }, + "min": -1, + "max": 1 + }, + "argument2": { + "type": "minecraft:clamp", + "input": { + "type": "minecraft:add", + "argument1": 1.5, + "argument2": { + "type": "minecraft:mul", + "argument1": -0.64, + "argument2": "minecraft:overworld/sloped_cheese" + } + }, + "min": 0, + "max": 0.5 + } + } + }, + "argument2": "minecraft:overworld/caves/entrances" + }, + "argument2": { + "type": "minecraft:add", + "argument1": "minecraft:overworld/caves/spaghetti_2d", + "argument2": "minecraft:overworld/caves/spaghetti_roughness_function" + } + }, + "argument2": { + "type": "minecraft:range_choice", + "input": "minecraft:overworld/caves/pillars", + "min_inclusive": -1000000, + "max_exclusive": 0.03, + "when_in_range": -1000000, + "when_out_of_range": "minecraft:overworld/caves/pillars" + } + } + } + } + } + } + } + } + } + } + } + } + }, + "argument2": "minecraft:overworld/caves/noodle" + }, + "vein_toggle": { + "type": "minecraft:interpolated", + "argument": { + "type": "minecraft:range_choice", + "input": "minecraft:y", + "min_inclusive": -60, + "max_exclusive": 51, + "when_in_range": { + "type": "minecraft:noise", + "noise": "minecraft:ore_veininess", + "xz_scale": 1.5, + "y_scale": 1.5 + }, + "when_out_of_range": 0 + } + }, + "vein_ridged": { + "type": "minecraft:add", + "argument1": -0.07999999821186066, + "argument2": { + "type": "minecraft:max", + "argument1": { + "type": "minecraft:abs", + "argument": { + "type": "minecraft:interpolated", + "argument": { + "type": "minecraft:range_choice", + "input": "minecraft:y", + "min_inclusive": -60, + "max_exclusive": 51, + "when_in_range": { + "type": "minecraft:noise", + "noise": "minecraft:ore_vein_a", + "xz_scale": 4, + "y_scale": 4 + }, + "when_out_of_range": 0 + } + } + }, + "argument2": { + "type": "minecraft:abs", + "argument": { + "type": "minecraft:interpolated", + "argument": { + "type": "minecraft:range_choice", + "input": "minecraft:y", + "min_inclusive": -60, + "max_exclusive": 51, + "when_in_range": { + "type": "minecraft:noise", + "noise": "minecraft:ore_vein_b", + "xz_scale": 4, + "y_scale": 4 + }, + "when_out_of_range": 0 + } + } + } + } + }, + "vein_gap": { + "type": "minecraft:noise", + "noise": "minecraft:ore_gap", + "xz_scale": 1, + "y_scale": 1 + } + }, + "spawn_target": [ + { + "temperature": [ + -1, + 1 + ], + "humidity": [ + -1, + 1 + ], + "continentalness": [ + -0.11, + 1 + ], + "erosion": [ + -1, + 1 + ], + "weirdness": [ + -1, + -0.16 + ], + "depth": 0, + "offset": 0 + }, + { + "temperature": [ + -1, + 1 + ], + "humidity": [ + -1, + 1 + ], + "continentalness": [ + -0.11, + 1 + ], + "erosion": [ + -1, + 1 + ], + "weirdness": [ + 0.16, + 1 + ], + "depth": 0, + "offset": 0 + } + ], + "surface_rule": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:vertical_gradient", + "random_name": "minecraft:bedrock_floor", + "true_at_and_below": { + "above_bottom": 0 + }, + "false_at_and_above": { + "above_bottom": 5 + } + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:bedrock" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:above_preliminary_surface" + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "offset": 0, + "surface_type": "floor", + "add_surface_depth": false, + "secondary_depth_range": 0 + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:wooded_badlands" + ] + }, + "then_run": { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:y_above", + "anchor": { + "absolute": 97 + }, + "surface_depth_multiplier": 2, + "add_stone_depth": false + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "noise": "minecraft:surface", + "min_threshold": -0.909, + "max_threshold": -0.5454 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:coarse_dirt" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "noise": "minecraft:surface", + "min_threshold": -0.1818, + "max_threshold": 0.1818 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:coarse_dirt" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "noise": "minecraft:surface", + "min_threshold": 0.5454, + "max_threshold": 0.909 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:coarse_dirt" + } + } + }, + { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:water", + "offset": 0, + "surface_depth_multiplier": 0, + "add_stone_depth": false + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:grass_block", + "Properties": { + "snowy": "false" + } + } + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:dirt" + } + } + ] + } + ] + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:swamp" + ] + }, + "then_run": { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:y_above", + "anchor": { + "absolute": 62 + }, + "surface_depth_multiplier": 0, + "add_stone_depth": false + }, + "then_run": { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:not", + "invert": { + "type": "minecraft:y_above", + "anchor": { + "absolute": 63 + }, + "surface_depth_multiplier": 0, + "add_stone_depth": false + } + }, + "then_run": { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "noise": "minecraft:surface_swamp", + "min_threshold": 0, + "max_threshold": 1.7976931348623157e+308 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:water", + "Properties": { + "level": "0" + } + } + } + } + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:mangrove_swamp" + ] + }, + "then_run": { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:y_above", + "anchor": { + "absolute": 60 + }, + "surface_depth_multiplier": 0, + "add_stone_depth": false + }, + "then_run": { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:not", + "invert": { + "type": "minecraft:y_above", + "anchor": { + "absolute": 63 + }, + "surface_depth_multiplier": 0, + "add_stone_depth": false + } + }, + "then_run": { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "noise": "minecraft:surface_swamp", + "min_threshold": 0, + "max_threshold": 1.7976931348623157e+308 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:water", + "Properties": { + "level": "0" + } + } + } + } + } + } + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:badlands", + "minecraft:eroded_badlands", + "minecraft:wooded_badlands" + ] + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "offset": 0, + "surface_type": "floor", + "add_surface_depth": false, + "secondary_depth_range": 0 + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:y_above", + "anchor": { + "absolute": 256 + }, + "surface_depth_multiplier": 0, + "add_stone_depth": false + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:orange_terracotta" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:y_above", + "anchor": { + "absolute": 74 + }, + "surface_depth_multiplier": 1, + "add_stone_depth": true + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "noise": "minecraft:surface", + "min_threshold": -0.909, + "max_threshold": -0.5454 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:terracotta" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "noise": "minecraft:surface", + "min_threshold": -0.1818, + "max_threshold": 0.1818 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:terracotta" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "noise": "minecraft:surface", + "min_threshold": 0.5454, + "max_threshold": 0.909 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:terracotta" + } + } + }, + { + "type": "minecraft:bandlands" + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:water", + "offset": -1, + "surface_depth_multiplier": 0, + "add_stone_depth": false + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "offset": 0, + "surface_type": "ceiling", + "add_surface_depth": false, + "secondary_depth_range": 0 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:red_sandstone" + } + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:red_sand" + } + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:not", + "invert": { + "type": "minecraft:hole" + } + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:orange_terracotta" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:water", + "offset": -6, + "surface_depth_multiplier": -1, + "add_stone_depth": true + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:white_terracotta" + } + } + }, + { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "offset": 0, + "surface_type": "ceiling", + "add_surface_depth": false, + "secondary_depth_range": 0 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:stone" + } + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:gravel" + } + } + ] + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:y_above", + "anchor": { + "absolute": 63 + }, + "surface_depth_multiplier": -1, + "add_stone_depth": true + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:y_above", + "anchor": { + "absolute": 63 + }, + "surface_depth_multiplier": 0, + "add_stone_depth": false + }, + "then_run": { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:not", + "invert": { + "type": "minecraft:y_above", + "anchor": { + "absolute": 74 + }, + "surface_depth_multiplier": 1, + "add_stone_depth": true + } + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:orange_terracotta" + } + } + } + }, + { + "type": "minecraft:bandlands" + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "offset": 0, + "surface_type": "floor", + "add_surface_depth": true, + "secondary_depth_range": 0 + }, + "then_run": { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:water", + "offset": -6, + "surface_depth_multiplier": -1, + "add_stone_depth": true + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:white_terracotta" + } + } + } + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "offset": 0, + "surface_type": "floor", + "add_surface_depth": false, + "secondary_depth_range": 0 + }, + "then_run": { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:water", + "offset": -1, + "surface_depth_multiplier": 0, + "add_stone_depth": false + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:frozen_ocean", + "minecraft:deep_frozen_ocean" + ] + }, + "then_run": { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:hole" + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:water", + "offset": 0, + "surface_depth_multiplier": 0, + "add_stone_depth": false + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:air" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:temperature" + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:ice" + } + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:water", + "Properties": { + "level": "0" + } + } + } + ] + } + } + }, + { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:frozen_peaks" + ] + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:steep" + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:packed_ice" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "noise": "minecraft:packed_ice", + "min_threshold": 0, + "max_threshold": 0.2 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:packed_ice" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "noise": "minecraft:ice", + "min_threshold": 0, + "max_threshold": 0.025 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:ice" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:water", + "offset": 0, + "surface_depth_multiplier": 0, + "add_stone_depth": false + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:snow_block" + } + } + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:snowy_slopes" + ] + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:steep" + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:stone" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "noise": "minecraft:powder_snow", + "min_threshold": 0.35, + "max_threshold": 0.6 + }, + "then_run": { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:water", + "offset": 0, + "surface_depth_multiplier": 0, + "add_stone_depth": false + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:powder_snow" + } + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:water", + "offset": 0, + "surface_depth_multiplier": 0, + "add_stone_depth": false + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:snow_block" + } + } + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:jagged_peaks" + ] + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:steep" + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:stone" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:water", + "offset": 0, + "surface_depth_multiplier": 0, + "add_stone_depth": false + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:snow_block" + } + } + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:grove" + ] + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "noise": "minecraft:powder_snow", + "min_threshold": 0.35, + "max_threshold": 0.6 + }, + "then_run": { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:water", + "offset": 0, + "surface_depth_multiplier": 0, + "add_stone_depth": false + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:powder_snow" + } + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:water", + "offset": 0, + "surface_depth_multiplier": 0, + "add_stone_depth": false + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:snow_block" + } + } + } + ] + } + }, + { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:stony_peaks" + ] + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "noise": "minecraft:calcite", + "min_threshold": -0.0125, + "max_threshold": 0.0125 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:calcite" + } + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:stone" + } + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:stony_shore" + ] + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "noise": "minecraft:gravel", + "min_threshold": -0.05, + "max_threshold": 0.05 + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "offset": 0, + "surface_type": "ceiling", + "add_surface_depth": false, + "secondary_depth_range": 0 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:stone" + } + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:gravel" + } + } + ] + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:stone" + } + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:windswept_hills" + ] + }, + "then_run": { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "noise": "minecraft:surface", + "min_threshold": 0.12121212121212122, + "max_threshold": 1.7976931348623157e+308 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:stone" + } + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:warm_ocean", + "minecraft:beach", + "minecraft:snowy_beach" + ] + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "offset": 0, + "surface_type": "ceiling", + "add_surface_depth": false, + "secondary_depth_range": 0 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:sandstone" + } + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:sand" + } + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:desert" + ] + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "offset": 0, + "surface_type": "ceiling", + "add_surface_depth": false, + "secondary_depth_range": 0 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:sandstone" + } + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:sand" + } + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:dripstone_caves" + ] + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:stone" + } + } + } + ] + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:windswept_savanna" + ] + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "noise": "minecraft:surface", + "min_threshold": 0.21212121212121213, + "max_threshold": 1.7976931348623157e+308 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:stone" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "noise": "minecraft:surface", + "min_threshold": -0.06060606060606061, + "max_threshold": 1.7976931348623157e+308 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:coarse_dirt" + } + } + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:windswept_gravelly_hills" + ] + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "noise": "minecraft:surface", + "min_threshold": 0.24242424242424243, + "max_threshold": 1.7976931348623157e+308 + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "offset": 0, + "surface_type": "ceiling", + "add_surface_depth": false, + "secondary_depth_range": 0 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:stone" + } + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:gravel" + } + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "noise": "minecraft:surface", + "min_threshold": 0.12121212121212122, + "max_threshold": 1.7976931348623157e+308 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:stone" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "noise": "minecraft:surface", + "min_threshold": -0.12121212121212122, + "max_threshold": 1.7976931348623157e+308 + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:water", + "offset": 0, + "surface_depth_multiplier": 0, + "add_stone_depth": false + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:grass_block", + "Properties": { + "snowy": "false" + } + } + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:dirt" + } + } + ] + } + }, + { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "offset": 0, + "surface_type": "ceiling", + "add_surface_depth": false, + "secondary_depth_range": 0 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:stone" + } + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:gravel" + } + } + ] + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:old_growth_pine_taiga", + "minecraft:old_growth_spruce_taiga" + ] + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "noise": "minecraft:surface", + "min_threshold": 0.21212121212121213, + "max_threshold": 1.7976931348623157e+308 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:coarse_dirt" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "noise": "minecraft:surface", + "min_threshold": -0.11515151515151514, + "max_threshold": 1.7976931348623157e+308 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:podzol", + "Properties": { + "snowy": "false" + } + } + } + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:ice_spikes" + ] + }, + "then_run": { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:water", + "offset": 0, + "surface_depth_multiplier": 0, + "add_stone_depth": false + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:snow_block" + } + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:mangrove_swamp" + ] + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:mud" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:mushroom_fields" + ] + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:mycelium", + "Properties": { + "snowy": "false" + } + } + } + }, + { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:water", + "offset": 0, + "surface_depth_multiplier": 0, + "add_stone_depth": false + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:grass_block", + "Properties": { + "snowy": "false" + } + } + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:dirt" + } + } + ] + } + ] + } + ] + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:water", + "offset": -6, + "surface_depth_multiplier": -1, + "add_stone_depth": true + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "offset": 0, + "surface_type": "floor", + "add_surface_depth": false, + "secondary_depth_range": 0 + }, + "then_run": { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:frozen_ocean", + "minecraft:deep_frozen_ocean" + ] + }, + "then_run": { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:hole" + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:water", + "Properties": { + "level": "0" + } + } + } + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "offset": 0, + "surface_type": "floor", + "add_surface_depth": true, + "secondary_depth_range": 0 + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:frozen_peaks" + ] + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:steep" + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:packed_ice" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "noise": "minecraft:packed_ice", + "min_threshold": -0.5, + "max_threshold": 0.2 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:packed_ice" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "noise": "minecraft:ice", + "min_threshold": -0.0625, + "max_threshold": 0.025 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:ice" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:water", + "offset": 0, + "surface_depth_multiplier": 0, + "add_stone_depth": false + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:snow_block" + } + } + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:snowy_slopes" + ] + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:steep" + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:stone" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "noise": "minecraft:powder_snow", + "min_threshold": 0.45, + "max_threshold": 0.58 + }, + "then_run": { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:water", + "offset": 0, + "surface_depth_multiplier": 0, + "add_stone_depth": false + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:powder_snow" + } + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:water", + "offset": 0, + "surface_depth_multiplier": 0, + "add_stone_depth": false + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:snow_block" + } + } + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:jagged_peaks" + ] + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:stone" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:grove" + ] + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "noise": "minecraft:powder_snow", + "min_threshold": 0.45, + "max_threshold": 0.58 + }, + "then_run": { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:water", + "offset": 0, + "surface_depth_multiplier": 0, + "add_stone_depth": false + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:powder_snow" + } + } + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:dirt" + } + } + ] + } + }, + { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:stony_peaks" + ] + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "noise": "minecraft:calcite", + "min_threshold": -0.0125, + "max_threshold": 0.0125 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:calcite" + } + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:stone" + } + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:stony_shore" + ] + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "noise": "minecraft:gravel", + "min_threshold": -0.05, + "max_threshold": 0.05 + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "offset": 0, + "surface_type": "ceiling", + "add_surface_depth": false, + "secondary_depth_range": 0 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:stone" + } + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:gravel" + } + } + ] + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:stone" + } + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:windswept_hills" + ] + }, + "then_run": { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "noise": "minecraft:surface", + "min_threshold": 0.12121212121212122, + "max_threshold": 1.7976931348623157e+308 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:stone" + } + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:warm_ocean", + "minecraft:beach", + "minecraft:snowy_beach" + ] + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "offset": 0, + "surface_type": "ceiling", + "add_surface_depth": false, + "secondary_depth_range": 0 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:sandstone" + } + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:sand" + } + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:desert" + ] + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "offset": 0, + "surface_type": "ceiling", + "add_surface_depth": false, + "secondary_depth_range": 0 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:sandstone" + } + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:sand" + } + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:dripstone_caves" + ] + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:stone" + } + } + } + ] + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:windswept_savanna" + ] + }, + "then_run": { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "noise": "minecraft:surface", + "min_threshold": 0.21212121212121213, + "max_threshold": 1.7976931348623157e+308 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:stone" + } + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:windswept_gravelly_hills" + ] + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "noise": "minecraft:surface", + "min_threshold": 0.24242424242424243, + "max_threshold": 1.7976931348623157e+308 + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "offset": 0, + "surface_type": "ceiling", + "add_surface_depth": false, + "secondary_depth_range": 0 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:stone" + } + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:gravel" + } + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "noise": "minecraft:surface", + "min_threshold": 0.12121212121212122, + "max_threshold": 1.7976931348623157e+308 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:stone" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "noise": "minecraft:surface", + "min_threshold": -0.12121212121212122, + "max_threshold": 1.7976931348623157e+308 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:dirt" + } + } + }, + { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "offset": 0, + "surface_type": "ceiling", + "add_surface_depth": false, + "secondary_depth_range": 0 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:stone" + } + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:gravel" + } + } + ] + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:mangrove_swamp" + ] + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:mud" + } + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:dirt" + } + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:warm_ocean", + "minecraft:beach", + "minecraft:snowy_beach" + ] + }, + "then_run": { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "offset": 0, + "surface_type": "floor", + "add_surface_depth": true, + "secondary_depth_range": 6 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:sandstone" + } + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:desert" + ] + }, + "then_run": { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "offset": 0, + "surface_type": "floor", + "add_surface_depth": true, + "secondary_depth_range": 30 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:sandstone" + } + } + } + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "offset": 0, + "surface_type": "floor", + "add_surface_depth": false, + "secondary_depth_range": 0 + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:frozen_peaks", + "minecraft:jagged_peaks" + ] + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:stone" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:warm_ocean", + "minecraft:lukewarm_ocean", + "minecraft:deep_lukewarm_ocean" + ] + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "offset": 0, + "surface_type": "ceiling", + "add_surface_depth": false, + "secondary_depth_range": 0 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:sandstone" + } + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:sand" + } + } + ] + } + }, + { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "offset": 0, + "surface_type": "ceiling", + "add_surface_depth": false, + "secondary_depth_range": 0 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:stone" + } + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:gravel" + } + } + ] + } + ] + } + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:vertical_gradient", + "random_name": "minecraft:deepslate", + "true_at_and_below": { + "absolute": 0 + }, + "false_at_and_above": { + "absolute": 8 + } + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:deepslate", + "Properties": { + "axis": "y" + } + } + } + } + ] + } +} diff --git a/src/main/resources/data/minecraft/tags/point_of_interest_type/acquirable_job_site.json b/src/main/resources/data/minecraft/tags/point_of_interest_type/acquirable_job_site.json new file mode 100644 index 000000000..c95bd81a1 --- /dev/null +++ b/src/main/resources/data/minecraft/tags/point_of_interest_type/acquirable_job_site.json @@ -0,0 +1,5 @@ +{ + "values": [ + "cosmere:metal_trader" + ] +} \ No newline at end of file diff --git a/src/main/resources/pack.mcmeta b/src/main/resources/pack.mcmeta index 77966984f..dd7c3f12f 100644 --- a/src/main/resources/pack.mcmeta +++ b/src/main/resources/pack.mcmeta @@ -1,7 +1,6 @@ { - "pack": { - "description": "Cosmere Mod Resources", - "pack_format": 6, - "_comment": "A pack_format of 6 requires json lang files and some texture changes from 1.16.2. Note: we require v6 pack meta for all mods." - } -} + "pack": { + "description": "Resources used for Cosmere", + "pack_format": 15 + } +} \ No newline at end of file diff --git a/src/sandmastery/java/leaf/cosmere/sandmastery/client/SandmasteryKeybindings.java b/src/sandmastery/java/leaf/cosmere/sandmastery/client/SandmasteryKeybindings.java new file mode 100644 index 000000000..df6a9f76f --- /dev/null +++ b/src/sandmastery/java/leaf/cosmere/sandmastery/client/SandmasteryKeybindings.java @@ -0,0 +1,31 @@ +package leaf.cosmere.sandmastery.client; + +import leaf.cosmere.sandmastery.common.Sandmastery; +import net.minecraft.client.KeyMapping; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.client.event.RegisterKeyMappingsEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; +import org.lwjgl.glfw.GLFW; + +import static leaf.cosmere.api.Constants.Strings.KEYS_CATEGORY; +import static leaf.cosmere.sandmastery.common.utils.SandmasteryConstants.*; + +@Mod.EventBusSubscriber(value = Dist.CLIENT, modid = Sandmastery.MODID, bus = Mod.EventBusSubscriber.Bus.MOD) +public class SandmasteryKeybindings +{ + + public static KeyMapping SANDMASTERY_LAUNCH; + public static KeyMapping SANDMASTERY_ELEVATE; + public static KeyMapping SANDMASTERY_PROJECTILE; + public static KeyMapping SANDMASTERY_PLATFORM; + + @SubscribeEvent + public static void register(RegisterKeyMappingsEvent event) + { + event.register(SANDMASTERY_LAUNCH = new KeyMapping(KEY_SANDMASTERY_LAUNCH, GLFW.GLFW_KEY_UNKNOWN, KEYS_CATEGORY)); + event.register(SANDMASTERY_ELEVATE = new KeyMapping(KEY_SANDMASTERY_ELEVATE, GLFW.GLFW_KEY_UNKNOWN, KEYS_CATEGORY)); + event.register(SANDMASTERY_PROJECTILE = new KeyMapping(KEY_SANDMASTERY_PROJECTILE, GLFW.GLFW_KEY_UNKNOWN, KEYS_CATEGORY)); + event.register(SANDMASTERY_PLATFORM = new KeyMapping(KEY_SANDMASTERY_PLATFORM, GLFW.GLFW_KEY_UNKNOWN, KEYS_CATEGORY)); + } +} diff --git a/src/sandmastery/java/leaf/cosmere/sandmastery/client/eventHandlers/SandmasteryClientEvents.java b/src/sandmastery/java/leaf/cosmere/sandmastery/client/eventHandlers/SandmasteryClientEvents.java new file mode 100644 index 000000000..08607675c --- /dev/null +++ b/src/sandmastery/java/leaf/cosmere/sandmastery/client/eventHandlers/SandmasteryClientEvents.java @@ -0,0 +1,36 @@ +/* + * File updated ~ 10 - 8 - 2024 ~ Leaf + */ + +package leaf.cosmere.sandmastery.client.eventHandlers; + +import leaf.cosmere.api.CosmereAPI; +import leaf.cosmere.sandmastery.client.gui.HUDHandler; +import leaf.cosmere.sandmastery.common.Sandmastery; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.client.event.RegisterGuiOverlaysEvent; +import net.minecraftforge.client.gui.overlay.VanillaGuiOverlay; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; + +@Mod.EventBusSubscriber(modid = Sandmastery.MODID, value = Dist.CLIENT, bus = Mod.EventBusSubscriber.Bus.MOD) +public class SandmasteryClientEvents +{ + + @SubscribeEvent + public static void registerGuiOverlays(RegisterGuiOverlaysEvent guiOverlaysEvent) + { + guiOverlaysEvent.registerBelow( + VanillaGuiOverlay.FOOD_LEVEL.id(), + "hud", + (forgeGui, guiGraphics, partialTick, width, height) -> HUDHandler.onDrawScreenPost(guiGraphics) + ); + } + + @SubscribeEvent + public static void init(final FMLClientSetupEvent event) + { + CosmereAPI.logger.info("Sandmastery client setup complete!"); + } +} diff --git a/src/sandmastery/java/leaf/cosmere/sandmastery/client/eventHandlers/SandmasteryModClientEvents.java b/src/sandmastery/java/leaf/cosmere/sandmastery/client/eventHandlers/SandmasteryModClientEvents.java new file mode 100644 index 000000000..273604ff2 --- /dev/null +++ b/src/sandmastery/java/leaf/cosmere/sandmastery/client/eventHandlers/SandmasteryModClientEvents.java @@ -0,0 +1,80 @@ +/* + * File updated ~ 7 - 8 - 2024 ~ Leaf + */ + +package leaf.cosmere.sandmastery.client.eventHandlers; + +import leaf.cosmere.api.CosmereAPI; +import leaf.cosmere.sandmastery.client.gui.SandPouchContainerScreen; +import leaf.cosmere.sandmastery.client.gui.SandSpreaderScreen; +import leaf.cosmere.sandmastery.common.Sandmastery; +import leaf.cosmere.sandmastery.common.blocks.entities.SandSpreader.SandSpreaderMenu; +import leaf.cosmere.sandmastery.common.items.sandpouch.SandPouchContainerMenu; +import leaf.cosmere.sandmastery.common.registries.SandmasteryEntityTypes; +import leaf.cosmere.sandmastery.common.registries.SandmasteryMenuTypes; +import net.minecraft.client.gui.screens.MenuScreens; +import net.minecraft.client.renderer.entity.ThrownItemRenderer; +import net.minecraft.core.registries.Registries; +import net.minecraft.world.inventory.MenuType; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.client.event.EntityRenderersEvent; +import net.minecraftforge.eventbus.api.EventPriority; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; +import net.minecraftforge.registries.RegisterEvent; + +@Mod.EventBusSubscriber(modid = Sandmastery.MODID, value = Dist.CLIENT, bus = Mod.EventBusSubscriber.Bus.MOD) +public class SandmasteryModClientEvents +{ + + + @SubscribeEvent + public static void init(final FMLClientSetupEvent event) + { + event.enqueueWork(() -> + { + + }); + + + CosmereAPI.logger.info("Sandmastery client setup complete!"); + } + + @SubscribeEvent(priority = EventPriority.LOW) + public static void registerContainers(RegisterEvent event) + { + event.register(Registries.MENU, helper -> + { + MenuScreens.register((MenuType) SandmasteryMenuTypes.SAND_POUCH.get(), SandPouchContainerScreen::new); + MenuScreens.register((MenuType) SandmasteryMenuTypes.SAND_SPREADER.get(), SandSpreaderScreen::new); + CosmereAPI.logger.info("Sandmastery registered menutypes!"); + }); + } + + @SubscribeEvent + public static void RegisterRenderers(EntityRenderersEvent.RegisterRenderers event) + { + event.registerEntityRenderer(SandmasteryEntityTypes.SAND_PROJECTILE.get(), ThrownItemRenderer::new); + } + +/* //special thank you to the chisels and bits team who have an example of how to register other sprites + @SubscribeEvent + public static void registerIconTextures(TextureStitchEvent.Pre event) + { + final TextureAtlas map = event.getAtlas(); + if (!map.location().equals(InventoryMenu.BLOCK_ATLAS)) + { + return; + } + + event.addSprite(Sandmastery.rl("icon/sandmastery")); + + for (final Taldain.Mastery manifestation : Taldain.Mastery.values()) + { + String abilityToLower = manifestation.toString().toLowerCase(Locale.ROOT); + event.addSprite(Sandmastery.rl("icon/sandmastery/" + abilityToLower)); + } + }*/ + +} diff --git a/src/sandmastery/java/leaf/cosmere/sandmastery/client/gui/HUDHandler.java b/src/sandmastery/java/leaf/cosmere/sandmastery/client/gui/HUDHandler.java new file mode 100644 index 000000000..95ed4f0e0 --- /dev/null +++ b/src/sandmastery/java/leaf/cosmere/sandmastery/client/gui/HUDHandler.java @@ -0,0 +1,155 @@ +/* + * File updated ~ 10 - 8 - 2024 ~ Leaf + */ + +package leaf.cosmere.sandmastery.client.gui; + +import com.mojang.blaze3d.systems.RenderSystem; +import leaf.cosmere.api.Manifestations; +import leaf.cosmere.common.cap.entity.SpiritwebCapability; +import leaf.cosmere.sandmastery.common.Sandmastery; +import leaf.cosmere.sandmastery.common.capabilities.SandmasterySpiritwebSubmodule; +import leaf.cosmere.sandmastery.common.config.SandmasteryConfigs; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.profiling.ProfilerFiller; +import net.minecraft.world.entity.player.Player; +import org.lwjgl.opengl.GL11; + +import java.awt.*; + +public class HUDHandler +{ + private static final ResourceLocation hydrationBar = new ResourceLocation(Sandmastery.MODID, "textures/gui/hydration_hud.png"); + + public static void onDrawScreenPost(GuiGraphics guiGraphics) + { + Minecraft mc = Minecraft.getInstance(); + if (mc.options.hideGui) + { + return; + } + ProfilerFiller profiler = mc.getProfiler(); + Player player = mc.player; + if (player == null) + { + return; + } + + profiler.push("sandmastery-hud"); + { + SpiritwebCapability.get(mc.player).ifPresent(spiritweb -> + { + SpiritwebCapability data = (SpiritwebCapability) spiritweb; + + profiler.push("hydration-bar"); + { + if (!player.isSpectator() && !player.isCreative()) + { + var sbModule = (SandmasterySpiritwebSubmodule) data.getSubmodule(Manifestations.ManifestationTypes.SANDMASTERY); + + final int hydrationLevel = sbModule.getHydrationLevel(); + if (hydrationLevel > 0) + { + renderHydrationBar(guiGraphics, hydrationLevel, SandmasteryConfigs.SERVER.MAX_HYDRATION.get()); + } + } + + } + profiler.pop(); + }); + } + profiler.pop(); + + RenderSystem.setShaderColor(1F, 1F, 1F, 1F); + } + + private static void renderHydrationBar(GuiGraphics gui, int hydration, int maxHydration) + { + Minecraft mc = Minecraft.getInstance(); + int fullBarWidth = 83; + int barWidth; + int barStartingX = (mc.getWindow().getGuiScaledWidth() / 2 - fullBarWidth / 2) + 50; + + //todo hydration bar height config + final int offsetFromBottom = 28; + final int hydrationBarHeight = 11; + + int barStartingY = mc.getWindow().getGuiScaledHeight() - (hydrationBarHeight + offsetFromBottom); + + if (maxHydration == 0) + { + barWidth = 0; + } + else + { + double multiplier = (double) hydration / (double) maxHydration; + barWidth = (int) ((double) fullBarWidth * multiplier); + } + + if (barWidth == 0) + { + if (hydration > 0) + { + barWidth = 1; + } + else + { + return; + } + } + + final float hue = 0.55F; + final float saturation = 1F; + final float brightness = 1F; + + final int rgb = Color.HSBtoRGB(hue, saturation, brightness); + Color color = new Color(rgb); + + final int red = color.getRed(); + final int green = color.getGreen(); + final int blue = color.getBlue(); + + RenderSystem.enableBlend(); + RenderSystem.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + RenderSystem.setShaderColor( + red / 255F, + green / 255F, + blue / 255F, + 0.25F + ); + //draw textured rect + gui.blit( + hydrationBar, + barStartingX, + barStartingY, + 0, + 0, + fullBarWidth, + hydrationBarHeight, + fullBarWidth, + hydrationBarHeight); + + RenderSystem.setShaderColor( + red / 255F, + green / 255F, + blue / 255F, + 1 + ); + + gui.blit( + hydrationBar, + barStartingX, + barStartingY, + 0, + 0, + barWidth, + hydrationBarHeight, + fullBarWidth, + hydrationBarHeight); + + RenderSystem.disableBlend(); + RenderSystem.setShaderColor(1, 1, 1, 1); + } +} diff --git a/src/sandmastery/java/leaf/cosmere/sandmastery/client/gui/SandPouchContainerScreen.java b/src/sandmastery/java/leaf/cosmere/sandmastery/client/gui/SandPouchContainerScreen.java new file mode 100644 index 000000000..848fedfed --- /dev/null +++ b/src/sandmastery/java/leaf/cosmere/sandmastery/client/gui/SandPouchContainerScreen.java @@ -0,0 +1,64 @@ +/* + * File updated ~ 10 - 8 - 2024 ~ Leaf + */ + +package leaf.cosmere.sandmastery.client.gui; + +import com.mojang.blaze3d.systems.RenderSystem; +import leaf.cosmere.sandmastery.common.Sandmastery; +import leaf.cosmere.sandmastery.common.items.sandpouch.SandPouchContainerMenu; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; +import net.minecraft.client.renderer.GameRenderer; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.player.Inventory; + +public class SandPouchContainerScreen extends AbstractContainerScreen +{ + final ResourceLocation resourceLocation = new ResourceLocation(Sandmastery.MODID, "textures/gui/sand_pouch.png"); + + public SandPouchContainerScreen(SandPouchContainerMenu container, Inventory playerInv, Component title) + { + super(container, playerInv, title); + minecraft = Minecraft.getInstance(); + } + + @Override + protected void init() + { + this.imageHeight = 140; + this.imageWidth = 193; + + super.init(); + } + + @Override + public void render(GuiGraphics guiGraphics, int x, int y, float partialTicks) + { + this.renderBackground(guiGraphics); + super.render(guiGraphics, x, y, partialTicks); + this.renderTooltip(guiGraphics, x, y); + } + + @Override + protected void renderBg(GuiGraphics guiGraphics, float partialTicks, int mouseX, int mouseY) + { + RenderSystem.setShader(GameRenderer::getPositionTexShader); + RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); + RenderSystem.setShaderTexture(0, new ResourceLocation(Sandmastery.MODID, "textures/gui/sand_pouch.png")); + + int xPos = (width - imageWidth) / 2; + int yPos = (height / 2) - (imageHeight / 2); + guiGraphics.blit(resourceLocation, xPos, yPos, 0, 0, imageWidth, imageHeight); + } + + @Override + protected void renderLabels(GuiGraphics guiGraphics, int mouseX, int mouseY) + { + //write the name of the itemstack + guiGraphics.drawString(this.font, this.title.toString(), this.titleLabelX, this.titleLabelY, 4210752); +// this.font.draw(guiGraphics, "Number of layers available: " + MiscHelper.intToAbbreviatedStr(this.menu.slots.get(2).getItem().getCount()), this.titleLabelX, this.titleLabelY + 32, 4210752); + } +} diff --git a/src/sandmastery/java/leaf/cosmere/sandmastery/client/gui/SandSpreaderScreen.java b/src/sandmastery/java/leaf/cosmere/sandmastery/client/gui/SandSpreaderScreen.java new file mode 100644 index 000000000..03dd845e9 --- /dev/null +++ b/src/sandmastery/java/leaf/cosmere/sandmastery/client/gui/SandSpreaderScreen.java @@ -0,0 +1,45 @@ +/* + * File updated ~ 10 - 8 - 2024 ~ Leaf + */ + +package leaf.cosmere.sandmastery.client.gui; + +import com.mojang.blaze3d.systems.RenderSystem; +import leaf.cosmere.sandmastery.common.Sandmastery; +import leaf.cosmere.sandmastery.common.blocks.entities.SandSpreader.SandSpreaderMenu; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; +import net.minecraft.client.renderer.GameRenderer; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.player.Inventory; + + +public class SandSpreaderScreen extends AbstractContainerScreen +{ + final ResourceLocation resourceLocation = new ResourceLocation(Sandmastery.MODID, "textures/gui/sand_spreader.png"); + + public SandSpreaderScreen(SandSpreaderMenu pMenu, Inventory pPlayerInventory, Component pTitle) + { + super(pMenu, pPlayerInventory, pTitle); + } + + @Override + protected void renderBg(GuiGraphics guiGraphics, float pPartialTick, int pMouseX, int pMouseY) + { + RenderSystem.setShader(GameRenderer::getPositionTexShader); + RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); + RenderSystem.setShaderTexture(0, resourceLocation); + int x = (width - imageWidth) / 2; + int y = (height - imageHeight) / 2; + guiGraphics.blit(resourceLocation, x, y, 0, 0, imageWidth, imageHeight); + } + + @Override + public void render(GuiGraphics pPoseStack, int mouseX, int mouseY, float delta) + { + renderBackground(pPoseStack); + super.render(pPoseStack, mouseX, mouseY, delta); + renderTooltip(pPoseStack, mouseX, mouseY); + } +} diff --git a/src/sandmastery/java/leaf/cosmere/sandmastery/common/Sandmastery.java b/src/sandmastery/java/leaf/cosmere/sandmastery/common/Sandmastery.java new file mode 100644 index 000000000..76691af6c --- /dev/null +++ b/src/sandmastery/java/leaf/cosmere/sandmastery/common/Sandmastery.java @@ -0,0 +1,122 @@ +/* + * File updated ~ 10 - 8 - 2024 ~ Leaf + */ + +package leaf.cosmere.sandmastery.common; + +import leaf.cosmere.api.CosmereAPI; +import leaf.cosmere.api.IModModule; +import leaf.cosmere.api.ISpiritwebSubmodule; +import leaf.cosmere.api.Version; +import leaf.cosmere.common.Cosmere; +import leaf.cosmere.common.config.CosmereModConfig; +import leaf.cosmere.sandmastery.common.capabilities.SandmasterySpiritwebSubmodule; +import leaf.cosmere.sandmastery.common.config.SandmasteryConfigs; +import leaf.cosmere.sandmastery.common.network.SandmasteryPacketHandler; +import leaf.cosmere.sandmastery.common.registries.*; +import net.minecraft.resources.ResourceLocation; +import net.minecraftforge.eventbus.api.IEventBus; +import net.minecraftforge.fml.ModLoadingContext; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.config.ModConfig; +import net.minecraftforge.fml.event.config.ModConfigEvent; +import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; +import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; +import org.jetbrains.annotations.Nullable; + +@Mod(Sandmastery.MODID) +public class Sandmastery implements IModModule +{ + public static final String MODID = "sandmastery"; + public static Sandmastery instance; + public final Version versionNumber; + + private final SandmasteryPacketHandler packetHandler; + + public Sandmastery() + { + Cosmere.addModule(instance = this); + + IEventBus modBus = FMLJavaModLoadingContext.get().getModEventBus(); + + SandmasteryConfigs.registerConfigs(ModLoadingContext.get()); + + modBus.addListener(this::onConfigLoad); + modBus.addListener(this::onConfigReload); + modBus.addListener(this::commonSetup); + + SandmasteryItems.ITEMS.register(modBus); + SandmasteryBlocks.BLOCKS.register(modBus); + SandmasteryBlockEntitiesRegistry.BLOCK_ENTITIES.register(modBus); + SandmasteryAttributes.ATTRIBUTES.register(modBus); + SandmasteryEffects.EFFECTS.register(modBus); + SandmasteryEntityTypes.ENTITY_TYPES.register(modBus); + SandmasteryManifestations.MANIFESTATIONS.register(modBus); + SandmasteryMenuTypes.MENU_TYPES.register(modBus); + SandmasteryCreativeTabs.CREATIVE_TABS.register(modBus); + + SandmasteryDimensions.register(); + + //Set our version number to match the mods.toml file, which matches the one in our build.gradle + this.versionNumber = new Version(ModLoadingContext.get().getActiveContainer()); + this.packetHandler = new SandmasteryPacketHandler(); + } + + public static ResourceLocation rl(String path) + { + return new ResourceLocation(Sandmastery.MODID, path); + } + + @Override + public Version getVersion() + { + return versionNumber; + } + + public static SandmasteryPacketHandler packetHandler() + { + return instance.packetHandler; + } + + @Override + public String getName() + { + return "Sandmastery"; + } + + @Nullable + @Override + public ISpiritwebSubmodule makeSubmodule() + { + return new SandmasterySpiritwebSubmodule(); + } + + private void onConfigLoad(ModConfigEvent configEvent) + { + ModConfig config = configEvent.getConfig(); + if (config.getModId().equals(MODID) && config instanceof CosmereModConfig cosmereModConfig) + { + cosmereModConfig.clearCache(); + } + } + + private void onConfigReload(ModConfigEvent.Reloading configEvent) + { + ModConfig config = configEvent.getConfig(); + if (config.getModId().equals(MODID) && config instanceof CosmereModConfig cosmereModConfig) + { + cosmereModConfig.clearCache(); + } + } + + private void commonSetup(FMLCommonSetupEvent event) + { + CosmereAPI.logger.info("Cosmere: Sand Mastery module Version {} initializing...", versionNumber); + + event.enqueueWork(() -> + { + }); + + this.packetHandler.initialize(); + } +} \ No newline at end of file diff --git a/src/sandmastery/java/leaf/cosmere/sandmastery/common/blocks/SandJarBlock.java b/src/sandmastery/java/leaf/cosmere/sandmastery/common/blocks/SandJarBlock.java new file mode 100644 index 000000000..6b2663037 --- /dev/null +++ b/src/sandmastery/java/leaf/cosmere/sandmastery/common/blocks/SandJarBlock.java @@ -0,0 +1,74 @@ +package leaf.cosmere.sandmastery.common.blocks; + +import leaf.cosmere.common.properties.PropTypes; +import leaf.cosmere.sandmastery.common.blocks.entities.SandJarBE; +import leaf.cosmere.sandmastery.common.registries.SandmasteryBlockEntitiesRegistry; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.BaseEntityBlock; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.RenderShape; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityTicker; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.block.state.properties.IntegerProperty; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +public class SandJarBlock extends BaseEntityBlock +{ + public SandJarBlock() + { + super(PropTypes.Blocks.SAND.get().noOcclusion()); + this.registerDefaultState( + this.stateDefinition.any() + .setValue(INVESTITURE, 0) + ); + } + + public static final IntegerProperty INVESTITURE = IntegerProperty.create("investiture", 0, 100); + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder pBuilder) + { + pBuilder.add(INVESTITURE); + } + + @Override + public boolean hasAnalogOutputSignal(BlockState pState) + { + return true; + } + + @Override + public int getAnalogOutputSignal(BlockState pState, @NotNull Level pLevel, @NotNull BlockPos pPos) + { + int investiture = pState.getValue(INVESTITURE); + int res = Math.round((investiture / 100F) * 15); + return res; + } + + @Override + public RenderShape getRenderShape(BlockState state) + { + return RenderShape.MODEL; + } + + + @Nullable + @Override + public BlockEntity newBlockEntity(BlockPos pos, BlockState state) + { + return new SandJarBE(pos, state); + } + + @Nullable + @Override + public BlockEntityTicker getTicker(Level level, BlockState state, BlockEntityType type) + { + return createTickerHelper(type, SandmasteryBlockEntitiesRegistry.SAND_JAR_BE.get(), SandJarBE::tick); + } + +} diff --git a/src/sandmastery/java/leaf/cosmere/sandmastery/common/blocks/SandSpreadingTubBlock.java b/src/sandmastery/java/leaf/cosmere/sandmastery/common/blocks/SandSpreadingTubBlock.java new file mode 100644 index 000000000..8dfb71ea5 --- /dev/null +++ b/src/sandmastery/java/leaf/cosmere/sandmastery/common/blocks/SandSpreadingTubBlock.java @@ -0,0 +1,84 @@ +package leaf.cosmere.sandmastery.common.blocks; + +import leaf.cosmere.common.properties.PropTypes; +import leaf.cosmere.sandmastery.common.blocks.entities.SandJarBE; +import leaf.cosmere.sandmastery.common.blocks.entities.SandSpreaderBE; +import leaf.cosmere.sandmastery.common.registries.SandmasteryBlockEntitiesRegistry; +import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.BaseEntityBlock; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.RenderShape; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityTicker; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraftforge.network.NetworkHooks; +import org.jetbrains.annotations.Nullable; + +public class SandSpreadingTubBlock extends BaseEntityBlock +{ + public SandSpreadingTubBlock() + { + super(PropTypes.Blocks.METAL.get().noOcclusion()); + } + + @Override + public RenderShape getRenderShape(BlockState state) + { + return RenderShape.MODEL; + } + + @Override + public void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean isMoving) + { + if (state.getBlock() != newState.getBlock()) + { + BlockEntity blockEntity = level.getBlockEntity(pos); + if (blockEntity instanceof SandSpreaderBE) + { + ((SandSpreaderBE) blockEntity).drops(); + } + } + super.onRemove(state, level, pos, state, isMoving); + } + + @Override + public InteractionResult use(BlockState state, Level level, BlockPos pos, + Player player, InteractionHand hand, BlockHitResult hit) + { + if (!level.isClientSide()) + { + BlockEntity entity = level.getBlockEntity(pos); + if (entity instanceof SandSpreaderBE) + { + NetworkHooks.openScreen(((ServerPlayer) player), (SandSpreaderBE) entity, pos); + } + else + { + throw new IllegalStateException("Our Container provider is missing!"); + } + } + + return InteractionResult.sidedSuccess(level.isClientSide()); + } + + @Nullable + @Override + public BlockEntity newBlockEntity(BlockPos pos, BlockState state) + { + return new SandSpreaderBE(pos, state); + } + + @Nullable + @Override + public BlockEntityTicker getTicker(Level level, BlockState state, BlockEntityType type) + { + return createTickerHelper(type, SandmasteryBlockEntitiesRegistry.SAND_SPREADER_BE.get(), SandSpreaderBE::tick); + } +} diff --git a/src/sandmastery/java/leaf/cosmere/sandmastery/common/blocks/TaldainBlackSandBlock.java b/src/sandmastery/java/leaf/cosmere/sandmastery/common/blocks/TaldainBlackSandBlock.java new file mode 100644 index 000000000..5f0a541db --- /dev/null +++ b/src/sandmastery/java/leaf/cosmere/sandmastery/common/blocks/TaldainBlackSandBlock.java @@ -0,0 +1,98 @@ +/* + * File updated ~ 20 - 11 - 2024 ~ Leaf + */ + +package leaf.cosmere.sandmastery.common.blocks; + +//import leaf.cosmere.allomancy.common.registries.AllomancyEffects; + +import leaf.cosmere.api.EnumUtils; +import leaf.cosmere.common.blocks.BaseFallingBlock; +import leaf.cosmere.common.properties.PropTypes; +import leaf.cosmere.sandmastery.common.registries.SandmasteryBlocks; +import leaf.cosmere.sandmastery.common.utils.MiscHelper; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.state.BlockState; + +public class TaldainBlackSandBlock extends BaseFallingBlock +{ + + public TaldainBlackSandBlock() + { + super(PropTypes.Blocks.SAND.get(), SoundType.SAND, 1F, 2F); + } + + @Override + public boolean isRandomlyTicking(BlockState pState) + { + return true; + } + + @Override + public void randomTick(BlockState pState, ServerLevel pLevel, BlockPos pPos, RandomSource pRandom) + { + if (!pLevel.isAreaLoaded(pPos, 3)) + { + return; // Forge: prevent loading unloaded chunks when checking neighbor's light and spreading + } + + boolean nearbyInvestiture = MiscHelper.checkIfNearbyInvestiture(pLevel, pPos, false); + boolean offTaldain = !MiscHelper.onTaldain(pLevel); + boolean canSeeSky = pLevel.canSeeSky(pPos.above()); + if (offTaldain && !nearbyInvestiture) + { + return; + } + if (!canSeeSky && !nearbyInvestiture) + { + return; // Can't see the taldanian sky nor can I find any investiture, can't charge from it + } + + pLevel.setBlockAndUpdate(pPos, SandmasteryBlocks.TALDAIN_WHITE_SAND.getBlock().defaultBlockState()); + + for (int i = 0; i < 4; ++i) + { + BlockPos blockpos = pPos.offset(pRandom.nextInt(3) - 1, pRandom.nextInt(3) - 1, pRandom.nextInt(3) - 1); + if (pLevel.getBlockState(blockpos).is(Blocks.SAND)) + { + pLevel.setBlockAndUpdate(blockpos, SandmasteryBlocks.TALDAIN_WHITE_SAND.getBlock().defaultBlockState()); + } + } + } + + private static boolean touchesLiquid(BlockGetter pLevel, BlockPos pPos, BlockState state) + { + boolean touching = false; + BlockPos.MutableBlockPos blockpos$mutableblockpos = pPos.mutable(); + for (Direction direction : EnumUtils.DIRECTIONS) + { + BlockState blockstate = pLevel.getBlockState(blockpos$mutableblockpos); + if (direction != Direction.DOWN || state.canBeHydrated(pLevel, pPos, blockstate.getFluidState(), blockpos$mutableblockpos)) + { + blockpos$mutableblockpos.setWithOffset(pPos, direction); + blockstate = pLevel.getBlockState(blockpos$mutableblockpos); + if (state.canBeHydrated(pLevel, pPos, blockstate.getFluidState(), blockpos$mutableblockpos) && !blockstate.isFaceSturdy(pLevel, pPos, direction.getOpposite())) + { + touching = true; + break; + } + } + } + return touching; + } + + @Override + public BlockState updateShape(BlockState pState, Direction pFacing, BlockState pFacingState, LevelAccessor pLevel, BlockPos pCurrentPos, BlockPos pFacingPos) + { + return touchesLiquid(pLevel, pCurrentPos, pState) ? + this.defaultBlockState() : + super.updateShape(pState, pFacing, pFacingState, pLevel, pCurrentPos, pFacingPos); + } +} diff --git a/src/sandmastery/java/leaf/cosmere/sandmastery/common/blocks/TaldainBlackSandLayerBlock.java b/src/sandmastery/java/leaf/cosmere/sandmastery/common/blocks/TaldainBlackSandLayerBlock.java new file mode 100644 index 000000000..0e028eb3b --- /dev/null +++ b/src/sandmastery/java/leaf/cosmere/sandmastery/common/blocks/TaldainBlackSandLayerBlock.java @@ -0,0 +1,217 @@ +/* + * File updated ~ 20 - 11 - 2024 ~ Leaf + */ + +package leaf.cosmere.sandmastery.common.blocks; + +import leaf.cosmere.api.EnumUtils; +import leaf.cosmere.common.blocks.BaseFallingBlock; +import leaf.cosmere.common.properties.PropTypes; +import leaf.cosmere.sandmastery.common.registries.SandmasteryBlocks; +import leaf.cosmere.sandmastery.common.utils.MiscHelper; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.util.RandomSource; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import net.minecraft.world.level.block.state.properties.IntegerProperty; +import net.minecraft.world.level.pathfinder.PathComputationType; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.phys.shapes.VoxelShape; + +import javax.annotation.Nullable; + +public class TaldainBlackSandLayerBlock extends BaseFallingBlock +{ + public TaldainBlackSandLayerBlock() + { + super(PropTypes.Blocks.SAND.get(), SoundType.SAND, 1F, 2F); + this.registerDefaultState( + this.stateDefinition.any() + .setValue(LAYERS, 1) + ); + } + + public static final IntegerProperty LAYERS = BlockStateProperties.LAYERS; + protected static final VoxelShape[] SHAPE_BY_LAYER = new VoxelShape[]{Shapes.empty(), Block.box(0.0D, 0.0D, 0.0D, 16.0D, 2.0D, 16.0D), Block.box(0.0D, 0.0D, 0.0D, 16.0D, 4.0D, 16.0D), Block.box(0.0D, 0.0D, 0.0D, 16.0D, 6.0D, 16.0D), Block.box(0.0D, 0.0D, 0.0D, 16.0D, 8.0D, 16.0D), Block.box(0.0D, 0.0D, 0.0D, 16.0D, 10.0D, 16.0D), Block.box(0.0D, 0.0D, 0.0D, 16.0D, 12.0D, 16.0D), Block.box(0.0D, 0.0D, 0.0D, 16.0D, 14.0D, 16.0D), Block.box(0.0D, 0.0D, 0.0D, 16.0D, 16.0D, 16.0D)}; + + @Override + public boolean isPathfindable(BlockState pState, BlockGetter pLevel, BlockPos pPos, PathComputationType pType) + { + switch (pType) + { + case LAND: + return pState.getValue(LAYERS) < 5; + case WATER: + return false; + case AIR: + return false; + default: + return false; + } + } + + @Override + public VoxelShape getShape(BlockState pState, BlockGetter pLevel, BlockPos pPos, CollisionContext pContext) + { + return SHAPE_BY_LAYER[pState.getValue(LAYERS)]; + } + + @Override + public VoxelShape getCollisionShape(BlockState pState, BlockGetter pLevel, BlockPos pPos, CollisionContext pContext) + { + return SHAPE_BY_LAYER[pState.getValue(LAYERS) - 1]; + } + + @Override + public VoxelShape getBlockSupportShape(BlockState pState, BlockGetter pReader, BlockPos pPos) + { + return SHAPE_BY_LAYER[pState.getValue(LAYERS)]; + } + + @Override + public VoxelShape getVisualShape(BlockState pState, BlockGetter pReader, BlockPos pPos, CollisionContext pContext) + { + return SHAPE_BY_LAYER[pState.getValue(LAYERS)]; + } + + @Override + public boolean useShapeForLightOcclusion(BlockState pState) + { + return true; + } + + @Override + public float getShadeBrightness(BlockState pState, BlockGetter pLevel, BlockPos pPos) + { + return pState.getValue(LAYERS) == 8 ? 0.2F : 1.0F; + } + + /** + * Update the provided state given the provided neighbor direction and neighbor state, returning a new state. + * For example, fences make their connections to the passed in state if possible, and wet concrete powder immediately + * returns its solidified counterpart. + * Note that this method should ideally consider only the specific direction passed in. + */ + @Override + public BlockState updateShape(BlockState pState, Direction pFacing, BlockState pFacingState, LevelAccessor pLevel, BlockPos pCurrentPos, BlockPos pFacingPos) + { + if (touchesLiquid(pLevel, pCurrentPos, pState)) + { + return this.defaultBlockState().setValue(LAYERS, pState.getValue(LAYERS)); + } + return super.updateShape(pState, pFacing, pFacingState, pLevel, pCurrentPos, pFacingPos); + } + + @Override + public boolean canBeReplaced(BlockState pState, BlockPlaceContext pUseContext) + { + int i = pState.getValue(LAYERS); + if (pUseContext.getItemInHand().is(this.asItem()) && i < 8) + { + if (pUseContext.replacingClickedOnBlock()) + { + return pUseContext.getClickedFace() == Direction.UP; + } + else + { + return true; + } + } + return false; + } + + @Nullable + public BlockState getStateForPlacement(BlockPlaceContext pContext) + { + BlockState blockstate = pContext.getLevel().getBlockState(pContext.getClickedPos()); + if (blockstate.is(this)) + { + int i = blockstate.getValue(LAYERS); + return blockstate.setValue(LAYERS, Integer.valueOf(Math.min(8, i + 1))); + } + else + { + return super.getStateForPlacement(pContext); + } + } + + protected void createBlockStateDefinition(StateDefinition.Builder pBuilder) + { + pBuilder + .add(LAYERS); + } + + @Override + public boolean isRandomlyTicking(BlockState pState) + { + return true; + } + + @Override + public void randomTick(BlockState pState, ServerLevel pLevel, BlockPos pPos, RandomSource pRandom) + { + if (!pLevel.isAreaLoaded(pPos, 3)) + { + return; // Forge: prevent loading unloaded chunks when checking neighbor's light and spreading + } + BlockState defaultWhiteSandLayers = SandmasteryBlocks.TALDAIN_WHITE_SAND_LAYER.getBlock().defaultBlockState(); + + boolean nearbyInvestiture = MiscHelper.checkIfNearbyInvestiture(pLevel, pPos, false); + boolean offTaldain = !MiscHelper.onTaldain(pLevel); + boolean canSeeSky = pLevel.canSeeSky(pPos.above()); + if (offTaldain && !nearbyInvestiture) + { + return; + } + if (!canSeeSky && !nearbyInvestiture) + { + return; // Can't see the taldanian sky nor can I find any investiture, can't charge from it + } + + if ((!MiscHelper.onTaldain(pLevel) && !pLevel.canSeeSky(pPos.above())) && !MiscHelper.checkIfNearbyInvestiture(pLevel, pPos, false)) + { + return; // Can't see the taldanian sky nor can I find any investiture, can't charge from it + } + pLevel.setBlockAndUpdate(pPos, defaultWhiteSandLayers.setValue(LAYERS, pState.getValue(LAYERS))); + + for (int i = 0; i < 4; ++i) + { + BlockPos blockpos = pPos.offset(pRandom.nextInt(3) - 1, pRandom.nextInt(3) - 1, pRandom.nextInt(3) - 1); + if (pLevel.getBlockState(blockpos).is(Blocks.SAND)) + { + pLevel.setBlockAndUpdate(blockpos, SandmasteryBlocks.TALDAIN_WHITE_SAND.getBlock().defaultBlockState()); + } + } + } + + private static boolean touchesLiquid(BlockGetter pLevel, BlockPos pPos, BlockState state) + { + boolean touching = false; + BlockPos.MutableBlockPos blockpos$mutableblockpos = pPos.mutable(); + for (Direction direction : EnumUtils.DIRECTIONS) + { + BlockState blockstate = pLevel.getBlockState(blockpos$mutableblockpos); + if (direction != Direction.DOWN || state.canBeHydrated(pLevel, pPos, blockstate.getFluidState(), blockpos$mutableblockpos)) + { + blockpos$mutableblockpos.setWithOffset(pPos, direction); + blockstate = pLevel.getBlockState(blockpos$mutableblockpos); + if (state.canBeHydrated(pLevel, pPos, blockstate.getFluidState(), blockpos$mutableblockpos) && !blockstate.isFaceSturdy(pLevel, pPos, direction.getOpposite())) + { + touching = true; + break; + } + } + } + return touching; + } +} \ No newline at end of file diff --git a/src/sandmastery/java/leaf/cosmere/sandmastery/common/blocks/TaldainWhiteSandBlock.java b/src/sandmastery/java/leaf/cosmere/sandmastery/common/blocks/TaldainWhiteSandBlock.java new file mode 100644 index 000000000..24af828ca --- /dev/null +++ b/src/sandmastery/java/leaf/cosmere/sandmastery/common/blocks/TaldainWhiteSandBlock.java @@ -0,0 +1,96 @@ +/* + * File updated ~ 20 - 11 - 2024 ~ Leaf + */ + +package leaf.cosmere.sandmastery.common.blocks; + +//import leaf.cosmere.allomancy.common.registries.AllomancyEffects; + +import leaf.cosmere.api.EnumUtils; +import leaf.cosmere.common.blocks.BaseFallingBlock; +import leaf.cosmere.common.properties.PropTypes; +import leaf.cosmere.sandmastery.common.registries.SandmasteryBlocks; +import leaf.cosmere.sandmastery.common.utils.MiscHelper; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.state.BlockState; + +public class TaldainWhiteSandBlock extends BaseFallingBlock +{ + + public TaldainWhiteSandBlock() + { + super(PropTypes.Blocks.SAND.get(), SoundType.SAND, 1F, 2F); + } + + @Override + public boolean isRandomlyTicking(BlockState pState) + { + return true; + } + + @Override + public void randomTick(BlockState pState, ServerLevel pLevel, BlockPos pPos, RandomSource pRandom) + { + if (!pLevel.isAreaLoaded(pPos, 3)) + { + return; // Forge: prevent loading unloaded chunks when checking neighbor's light and spreading + } + + boolean nearbyInvestiture = MiscHelper.checkIfNearbyInvestiture(pLevel, pPos, false); + boolean offTaldain = !MiscHelper.onTaldain(pLevel); + boolean canSeeSky = pLevel.canSeeSky(pPos.above()); + if (offTaldain && !nearbyInvestiture) + { + return; + } + if (!canSeeSky && !nearbyInvestiture) + { + return; // Can't see the taldanian sky nor can I find any investiture, can't charge from it + } + + for (int i = 0; i < 4; ++i) + { + BlockPos blockpos = pPos.offset(pRandom.nextInt(3) - 1, pRandom.nextInt(3) - 1, pRandom.nextInt(3) - 1); + if (pLevel.getBlockState(blockpos).is(Blocks.SAND)) + { + pLevel.setBlockAndUpdate(blockpos, SandmasteryBlocks.TALDAIN_WHITE_SAND.getBlock().defaultBlockState()); + } + } + } + + private static boolean touchesLiquid(BlockGetter pLevel, BlockPos pPos, BlockState state) + { + boolean touching = false; + BlockPos.MutableBlockPos blockpos$mutableblockpos = pPos.mutable(); + for (Direction direction : EnumUtils.DIRECTIONS) + { + BlockState blockstate = pLevel.getBlockState(blockpos$mutableblockpos); + if (direction != Direction.DOWN || state.canBeHydrated(pLevel, pPos, blockstate.getFluidState(), blockpos$mutableblockpos)) + { + blockpos$mutableblockpos.setWithOffset(pPos, direction); + blockstate = pLevel.getBlockState(blockpos$mutableblockpos); + if (state.canBeHydrated(pLevel, pPos, blockstate.getFluidState(), blockpos$mutableblockpos) && !blockstate.isFaceSturdy(pLevel, pPos, direction.getOpposite())) + { + touching = true; + break; + } + } + } + return touching; + } + + @Override + public BlockState updateShape(BlockState pState, Direction pFacing, BlockState pFacingState, LevelAccessor pLevel, BlockPos pCurrentPos, BlockPos pFacingPos) + { + return touchesLiquid(pLevel, pCurrentPos, pState) ? + SandmasteryBlocks.TALDAIN_BLACK_SAND.getBlock().defaultBlockState() : + super.updateShape(pState, pFacing, pFacingState, pLevel, pCurrentPos, pFacingPos); + } +} diff --git a/src/sandmastery/java/leaf/cosmere/sandmastery/common/blocks/TaldainWhiteSandLayerBlock.java b/src/sandmastery/java/leaf/cosmere/sandmastery/common/blocks/TaldainWhiteSandLayerBlock.java new file mode 100644 index 000000000..10d0fdc3a --- /dev/null +++ b/src/sandmastery/java/leaf/cosmere/sandmastery/common/blocks/TaldainWhiteSandLayerBlock.java @@ -0,0 +1,216 @@ +/* + * File updated ~ 20 - 11 - 2024 ~ Leaf + */ + +package leaf.cosmere.sandmastery.common.blocks; + +import leaf.cosmere.api.EnumUtils; +import leaf.cosmere.common.blocks.BaseFallingBlock; +import leaf.cosmere.common.properties.PropTypes; +import leaf.cosmere.sandmastery.common.registries.SandmasteryBlocks; +import leaf.cosmere.sandmastery.common.utils.MiscHelper; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.util.RandomSource; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import net.minecraft.world.level.block.state.properties.IntegerProperty; +import net.minecraft.world.level.pathfinder.PathComputationType; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.phys.shapes.VoxelShape; + +import javax.annotation.Nullable; + +public class TaldainWhiteSandLayerBlock extends BaseFallingBlock +{ + public TaldainWhiteSandLayerBlock() + { + super(PropTypes.Blocks.SAND.get(), SoundType.SAND, 1F, 2F); + this.registerDefaultState( + this.stateDefinition.any() + .setValue(LAYERS, 1) + ); + } + + public static final IntegerProperty LAYERS = BlockStateProperties.LAYERS; + protected static final VoxelShape[] SHAPE_BY_LAYER = new VoxelShape[]{Shapes.empty(), Block.box(0.0D, 0.0D, 0.0D, 16.0D, 2.0D, 16.0D), Block.box(0.0D, 0.0D, 0.0D, 16.0D, 4.0D, 16.0D), Block.box(0.0D, 0.0D, 0.0D, 16.0D, 6.0D, 16.0D), Block.box(0.0D, 0.0D, 0.0D, 16.0D, 8.0D, 16.0D), Block.box(0.0D, 0.0D, 0.0D, 16.0D, 10.0D, 16.0D), Block.box(0.0D, 0.0D, 0.0D, 16.0D, 12.0D, 16.0D), Block.box(0.0D, 0.0D, 0.0D, 16.0D, 14.0D, 16.0D), Block.box(0.0D, 0.0D, 0.0D, 16.0D, 16.0D, 16.0D)}; + + @Override + public boolean isPathfindable(BlockState pState, BlockGetter pLevel, BlockPos pPos, PathComputationType pType) + { + switch (pType) + { + case LAND: + return pState.getValue(LAYERS) < 5; + case WATER: + return false; + case AIR: + return false; + default: + return false; + } + } + + @Override + public VoxelShape getShape(BlockState pState, BlockGetter pLevel, BlockPos pPos, CollisionContext pContext) + { + return SHAPE_BY_LAYER[pState.getValue(LAYERS)]; + } + + @Override + public VoxelShape getCollisionShape(BlockState pState, BlockGetter pLevel, BlockPos pPos, CollisionContext pContext) + { + return SHAPE_BY_LAYER[pState.getValue(LAYERS) - 1]; + } + + @Override + public VoxelShape getBlockSupportShape(BlockState pState, BlockGetter pReader, BlockPos pPos) + { + return SHAPE_BY_LAYER[pState.getValue(LAYERS)]; + } + + @Override + public VoxelShape getVisualShape(BlockState pState, BlockGetter pReader, BlockPos pPos, CollisionContext pContext) + { + return SHAPE_BY_LAYER[pState.getValue(LAYERS)]; + } + + @Override + public boolean useShapeForLightOcclusion(BlockState pState) + { + return true; + } + + @Override + public float getShadeBrightness(BlockState pState, BlockGetter pLevel, BlockPos pPos) + { + return pState.getValue(LAYERS) == 8 ? 0.2F : 1.0F; + } + + /** + * Update the provided state given the provided neighbor direction and neighbor state, returning a new state. + * For example, fences make their connections to the passed in state if possible, and wet concrete powder immediately + * returns its solidified counterpart. + * Note that this method should ideally consider only the specific direction passed in. + */ + @Override + public BlockState updateShape(BlockState pState, Direction pFacing, BlockState pFacingState, LevelAccessor pLevel, BlockPos pCurrentPos, BlockPos pFacingPos) + { + if (touchesLiquid(pLevel, pCurrentPos, pState)) + { + return SandmasteryBlocks.TALDAIN_BLACK_SAND_LAYER.getBlock().defaultBlockState().setValue(LAYERS, pState.getValue(LAYERS)); + } + return super.updateShape(pState, pFacing, pFacingState, pLevel, pCurrentPos, pFacingPos); + } + + @Override + public boolean canBeReplaced(BlockState pState, BlockPlaceContext pUseContext) + { + int i = pState.getValue(LAYERS); + if (pUseContext.getItemInHand().is(this.asItem()) && i < 8) + { + if (pUseContext.replacingClickedOnBlock()) + { + return pUseContext.getClickedFace() == Direction.UP; + } + else + { + return true; + } + } + return false; + } + + @Nullable + public BlockState getStateForPlacement(BlockPlaceContext pContext) + { + BlockState blockstate = pContext.getLevel().getBlockState(pContext.getClickedPos()); + if (blockstate.is(this)) + { + int i = blockstate.getValue(LAYERS); + return blockstate.setValue(LAYERS, Integer.valueOf(Math.min(8, i + 1))); + } + else + { + return super.getStateForPlacement(pContext); + } + } + + protected void createBlockStateDefinition(StateDefinition.Builder pBuilder) + { + pBuilder + .add(LAYERS); + } + + @Override + public boolean isRandomlyTicking(BlockState pState) + { + return true; + } + + @Override + public void randomTick(BlockState pState, ServerLevel pLevel, BlockPos pPos, RandomSource pRandom) + { + if (!pLevel.isAreaLoaded(pPos, 3)) + { + return; // Forge: prevent loading unloaded chunks when checking neighbor's light and spreading + } + BlockState state = this.defaultBlockState(); + + boolean nearbyInvestiture = MiscHelper.checkIfNearbyInvestiture(pLevel, pPos, false); + boolean offTaldain = !MiscHelper.onTaldain(pLevel); + boolean canSeeSky = pLevel.canSeeSky(pPos.above()); + if (offTaldain && !nearbyInvestiture) + { + return; + } + if (!canSeeSky && !nearbyInvestiture) + { + return; // Can't see the taldanian sky nor can I find any investiture, can't charge from it + } + + if ((!MiscHelper.onTaldain(pLevel) && !pLevel.canSeeSky(pPos.above())) && !MiscHelper.checkIfNearbyInvestiture(pLevel, pPos, false)) + { + return; // Can't see the taldanian sky nor can I find any investiture, can't charge from it + } + + for (int i = 0; i < 4; ++i) + { + BlockPos blockpos = pPos.offset(pRandom.nextInt(3) - 1, pRandom.nextInt(3) - 1, pRandom.nextInt(3) - 1); + if (pLevel.getBlockState(blockpos).is(Blocks.SAND)) + { + pLevel.setBlockAndUpdate(blockpos, SandmasteryBlocks.TALDAIN_WHITE_SAND.getBlock().defaultBlockState()); + } + } + } + + private static boolean touchesLiquid(BlockGetter pLevel, BlockPos pPos, BlockState state) + { + boolean touching = false; + BlockPos.MutableBlockPos blockpos$mutableblockpos = pPos.mutable(); + for (Direction direction : EnumUtils.DIRECTIONS) + { + BlockState blockstate = pLevel.getBlockState(blockpos$mutableblockpos); + if (direction != Direction.DOWN || state.canBeHydrated(pLevel, pPos, blockstate.getFluidState(), blockpos$mutableblockpos)) + { + blockpos$mutableblockpos.setWithOffset(pPos, direction); + blockstate = pLevel.getBlockState(blockpos$mutableblockpos); + if (state.canBeHydrated(pLevel, pPos, blockstate.getFluidState(), blockpos$mutableblockpos) && !blockstate.isFaceSturdy(pLevel, pPos, direction.getOpposite())) + { + touching = true; + break; + } + } + } + return touching; + } +} \ No newline at end of file diff --git a/src/sandmastery/java/leaf/cosmere/sandmastery/common/blocks/TemporarySandBlock.java b/src/sandmastery/java/leaf/cosmere/sandmastery/common/blocks/TemporarySandBlock.java new file mode 100644 index 000000000..6fbf7161c --- /dev/null +++ b/src/sandmastery/java/leaf/cosmere/sandmastery/common/blocks/TemporarySandBlock.java @@ -0,0 +1,58 @@ +package leaf.cosmere.sandmastery.common.blocks; + +import leaf.cosmere.common.properties.PropTypes; +import leaf.cosmere.sandmastery.common.blocks.entities.TemporarySandBE; +import leaf.cosmere.sandmastery.common.registries.SandmasteryBlockEntitiesRegistry; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.BaseEntityBlock; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.RenderShape; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityTicker; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.block.state.properties.IntegerProperty; + +import org.jetbrains.annotations.Nullable; + +public class TemporarySandBlock extends BaseEntityBlock +{ + public TemporarySandBlock() + { + super(PropTypes.Blocks.SAND.get().noOcclusion()); + this.registerDefaultState( + this.stateDefinition.any() + .setValue(AGE, 20) + ); + } + + public static final IntegerProperty AGE = IntegerProperty.create("age", 0, 20); + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder pBuilder) + { + pBuilder.add(AGE); + } + + @Override + public RenderShape getRenderShape(BlockState state) + { + return RenderShape.MODEL; + } + + @Nullable + @Override + public BlockEntity newBlockEntity(BlockPos pos, BlockState state) + { + return new TemporarySandBE(pos, state); + } + + @Nullable + @Override + public BlockEntityTicker getTicker(Level level, BlockState state, BlockEntityType type) + { + return createTickerHelper(type, SandmasteryBlockEntitiesRegistry.TEMPORARY_SAND_BE.get(), TemporarySandBE::tick); + } +} diff --git a/src/sandmastery/java/leaf/cosmere/sandmastery/common/blocks/entities/SandJarBE.java b/src/sandmastery/java/leaf/cosmere/sandmastery/common/blocks/entities/SandJarBE.java new file mode 100644 index 000000000..b37015762 --- /dev/null +++ b/src/sandmastery/java/leaf/cosmere/sandmastery/common/blocks/entities/SandJarBE.java @@ -0,0 +1,47 @@ +package leaf.cosmere.sandmastery.common.blocks.entities; + +import leaf.cosmere.sandmastery.common.registries.SandmasteryBlockEntitiesRegistry; +import leaf.cosmere.sandmastery.common.utils.MiscHelper; +import net.minecraft.core.BlockPos; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockState; + +import static leaf.cosmere.sandmastery.common.blocks.SandJarBlock.INVESTITURE; + +public class SandJarBE extends BlockEntity +{ + public SandJarBE(BlockPos pPos, BlockState pBlockState) + { + super(SandmasteryBlockEntitiesRegistry.SAND_JAR_BE.get(), pPos, pBlockState); + } + + private int ticksSinceUpdate = 0; + + @Override + protected void saveAdditional(CompoundTag nbt) + { + super.saveAdditional(nbt); + } + + @Override + public void load(CompoundTag nbt) + { + super.load(nbt); + } + + public static void tick(Level level, BlockPos pos, BlockState state, SandJarBE entity) + { + if (level.isClientSide()) return; + entity.ticksSinceUpdate++; + if (entity.ticksSinceUpdate < 4) return; + int investiture = state.getValue(INVESTITURE); + if (MiscHelper.checkIfNearbyInvestiture((ServerLevel) level, pos, true)) + level.setBlockAndUpdate(pos, state.setValue(INVESTITURE, Math.min(investiture + 1, 100))); + else + level.setBlockAndUpdate(pos, state.setValue(INVESTITURE, Math.max(investiture - 4, 0))); + entity.ticksSinceUpdate = 0; + } +} diff --git a/src/sandmastery/java/leaf/cosmere/sandmastery/common/blocks/entities/SandSpreader/SandSpreaderMenu.java b/src/sandmastery/java/leaf/cosmere/sandmastery/common/blocks/entities/SandSpreader/SandSpreaderMenu.java new file mode 100644 index 000000000..24cccec15 --- /dev/null +++ b/src/sandmastery/java/leaf/cosmere/sandmastery/common/blocks/entities/SandSpreader/SandSpreaderMenu.java @@ -0,0 +1,130 @@ +/* + * File updated ~ 10 - 8 - 2024 ~ Leaf + */ + +package leaf.cosmere.sandmastery.common.blocks.entities.SandSpreader; + +import leaf.cosmere.api.CosmereAPI; +import leaf.cosmere.sandmastery.common.blocks.entities.SandSpreaderBE; +import leaf.cosmere.sandmastery.common.registries.SandmasteryBlocks; +import leaf.cosmere.sandmastery.common.registries.SandmasteryMenuTypes; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.inventory.*; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraftforge.common.capabilities.ForgeCapabilities; +import net.minecraftforge.items.IItemHandlerModifiable; +import net.minecraftforge.items.SlotItemHandler; + +public class SandSpreaderMenu extends AbstractContainerMenu +{ + public final SandSpreaderBE blockEntity; + private final Level level; + private final ContainerData data; + + public SandSpreaderMenu(int id, Inventory inv, FriendlyByteBuf extraData) + { + this(id, inv, inv.player.level().getBlockEntity(extraData.readBlockPos()), new SimpleContainerData(2)); + } + + public SandSpreaderMenu(int id, Inventory inv, BlockEntity entity, ContainerData data) + { + super(SandmasteryMenuTypes.SAND_SPREADER.get(), id); + checkContainerSize(inv, 3); + this.blockEntity = (SandSpreaderBE) entity; + this.level = inv.player.level(); + this.data = data; + IItemHandlerModifiable blockInv = (IItemHandlerModifiable) this.blockEntity.getCapability(ForgeCapabilities.ITEM_HANDLER).orElse(null); + int invStart = 0; + int i; + int j; + CosmereAPI.logger.debug(String.valueOf(blockInv.getSlots())); + + // Block Slots + for (i = 0; i < 2; ++i) + { + for (j = 0; j < 9; ++j) + { + int k = j + i * 9; + addSlot(new SlotItemHandler(blockInv, k, 8 + j * 18, 18 + i * 18)); + } + } + + // Player Inventory + for (i = 0; i < 3; ++i) + { + for (j = 0; j < 9; ++j) + { + addSlot(new Slot(inv, j + i * 9 + 9, 8 + j * 18, 41 + 17 + (i + invStart) * 18)); + } + } + + // Player Hotbar + for (i = 0; i < 9; ++i) + { + addSlot(new Slot(inv, i, 8 + i * 18, 45 + 17 + (3 + invStart) * 18)); + } + + addDataSlots(data); + } + + public boolean isCrafting() + { + return data.get(0) > 0; + } + + public int getScaledProgress() + { + int progress = this.data.get(0); + int maxProgress = this.data.get(1); // Max Progress + int progressArrowSize = 26; // This is the height in pixels of your arrow + + return maxProgress != 0 && progress != 0 ? progress * progressArrowSize / maxProgress : 0; + } + + @Override + public ItemStack quickMoveStack(Player player, int index) + { + + ItemStack itemstack = ItemStack.EMPTY; + int maxSlots = 18; + + Slot slot = this.slots.get(index); + if (slot.hasItem()) + { + ItemStack itemstack1 = slot.getItem(); + itemstack = itemstack1.copy(); + + if (index < maxSlots) + { + if (!this.moveItemStackTo(itemstack1, maxSlots, this.slots.size(), true)) + { + return ItemStack.EMPTY; + } + } + else if (!this.moveItemStackTo(itemstack1, 0, maxSlots, false)) + { + return ItemStack.EMPTY; + } + + if (itemstack1.isEmpty()) + { + slot.set(ItemStack.EMPTY); + } + else + { + slot.setChanged(); + } + } + return itemstack; + } + + @Override + public boolean stillValid(Player pPlayer) + { + return stillValid(ContainerLevelAccess.create(this.level, this.blockEntity.getBlockPos()), pPlayer, SandmasteryBlocks.SAND_SPREADING_TUB_BLOCK.getBlock()); + } +} diff --git a/src/sandmastery/java/leaf/cosmere/sandmastery/common/blocks/entities/SandSpreaderBE.java b/src/sandmastery/java/leaf/cosmere/sandmastery/common/blocks/entities/SandSpreaderBE.java new file mode 100644 index 000000000..09cd5daf4 --- /dev/null +++ b/src/sandmastery/java/leaf/cosmere/sandmastery/common/blocks/entities/SandSpreaderBE.java @@ -0,0 +1,220 @@ +/* + * File updated ~ 10 - 8 - 2024 ~ Leaf + */ + +package leaf.cosmere.sandmastery.common.blocks.entities; + +import leaf.cosmere.sandmastery.common.blocks.entities.SandSpreader.SandSpreaderMenu; +import leaf.cosmere.sandmastery.common.registries.SandmasteryBlockEntitiesRegistry; +import leaf.cosmere.sandmastery.common.registries.SandmasteryBlocks; +import leaf.cosmere.sandmastery.common.utils.MiscHelper; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.chat.Component; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.Containers; +import net.minecraft.world.MenuProvider; +import net.minecraft.world.SimpleContainer; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.inventory.AbstractContainerMenu; +import net.minecraft.world.inventory.ContainerData; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.capabilities.ForgeCapabilities; +import net.minecraftforge.common.util.LazyOptional; +import net.minecraftforge.items.IItemHandler; +import net.minecraftforge.items.ItemStackHandler; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +public class SandSpreaderBE extends BlockEntity implements MenuProvider +{ + private final ItemStackHandler itemHandler = new ItemStackHandler(18) + { + @Override + protected void onContentsChanged(int slot) + { + setChanged(); + } + + @Override + public int getSlotLimit(int slot) + { + return 8; + } + }; + + private LazyOptional lazyItemHandler = LazyOptional.empty(); + + protected final ContainerData data; + private int progress = 0; + private int maxProgress = 78; + private int ticksSinceUpdate = 0; + + public SandSpreaderBE(BlockPos pPos, BlockState pBlockState) + { + super(SandmasteryBlockEntitiesRegistry.SAND_SPREADER_BE.get(), pPos, pBlockState); + this.data = new ContainerData() + { + @Override + public int get(int index) + { + return switch (index) + { + case 0 -> SandSpreaderBE.this.progress; + case 1 -> SandSpreaderBE.this.maxProgress; + default -> 0; + }; + } + + @Override + public void set(int index, int value) + { + switch (index) + { + case 0 -> SandSpreaderBE.this.progress = value; + case 1 -> SandSpreaderBE.this.maxProgress = value; + } + } + + @Override + public int getCount() + { + return 2; + } + }; + } + + @Override + public Component getDisplayName() + { + return Component.literal("Sand Spreading Tub"); // TODO Translations + } + + @Nullable + @Override + public AbstractContainerMenu createMenu(int pContainerId, Inventory pPlayerInventory, Player pPlayer) + { + return new SandSpreaderMenu(pContainerId, pPlayerInventory, this, this.data); + } + + @Override + public @NotNull LazyOptional getCapability(@NotNull Capability cap, @Nullable Direction side) + { + if (cap == ForgeCapabilities.ITEM_HANDLER) + { + return lazyItemHandler.cast(); + } + return super.getCapability(cap, side); + } + + @Override + public void onLoad() + { + super.onLoad(); + lazyItemHandler = LazyOptional.of(() -> itemHandler); + } + + @Override + public void invalidateCaps() + { + super.invalidateCaps(); + lazyItemHandler.invalidate(); + } + + @Override + protected void saveAdditional(CompoundTag nbt) + { + nbt.put("inventory", itemHandler.serializeNBT()); + super.saveAdditional(nbt); + } + + @Override + public void load(CompoundTag nbt) + { + super.saveAdditional(nbt); + itemHandler.deserializeNBT(nbt.getCompound("inventory")); + } + + public void drops() + { + SimpleContainer inventory = new SimpleContainer(itemHandler.getSlots()); + for (int i = 0; i < itemHandler.getSlots(); i++) + { + inventory.setItem(i, itemHandler.getStackInSlot(i)); + } + Containers.dropContents(this.level, this.worldPosition, inventory); + } + + public boolean readyToUpdate() + { + this.ticksSinceUpdate++; + if (this.ticksSinceUpdate >= 20) + { + this.ticksSinceUpdate = 0; + return true; + } + return false; + } + + public boolean hasCatalyst() + { + for (int i = 0; i < this.itemHandler.getSlots(); i++) + { + ItemStack item = this.itemHandler.getStackInSlot(i); + if (item.getItem() == SandmasteryBlocks.TALDAIN_BLACK_SAND.asItem()) + { + return true; + } + if (item.getItem() == SandmasteryBlocks.TALDAIN_WHITE_SAND.asItem()) + { + return true; + } + if (item.getItem() == SandmasteryBlocks.TALDAIN_BLACK_SAND_LAYER.asItem()) + { + return true; + } + if (item.getItem() == SandmasteryBlocks.TALDAIN_WHITE_SAND_LAYER.asItem()) + { + return true; + } + } + return false; + } + + public static void tick(Level level, BlockPos pos, BlockState state, SandSpreaderBE entity) + { + if (level.isClientSide()) + { + return; + } + if (!entity.readyToUpdate()) + { + return; + } + if (!entity.hasCatalyst()) + { + return; + } + if (!MiscHelper.checkIfNearbyInvestiture((ServerLevel) level, pos, false)) + { + return; + } + ItemStackHandler inv = entity.itemHandler; + int slot = MiscHelper.randomSlot(inv); + ItemStack item = inv.getStackInSlot(slot); + if (item.getItem() == Blocks.SAND.asItem()) + { + ItemStack newItem = new ItemStack(SandmasteryBlocks.TALDAIN_BLACK_SAND); + newItem.setCount(item.getCount()); + inv.setStackInSlot(slot, newItem); + } + setChanged(level, pos, state); + } +} diff --git a/src/sandmastery/java/leaf/cosmere/sandmastery/common/blocks/entities/TemporarySandBE.java b/src/sandmastery/java/leaf/cosmere/sandmastery/common/blocks/entities/TemporarySandBE.java new file mode 100644 index 000000000..114342f17 --- /dev/null +++ b/src/sandmastery/java/leaf/cosmere/sandmastery/common/blocks/entities/TemporarySandBE.java @@ -0,0 +1,53 @@ +package leaf.cosmere.sandmastery.common.blocks.entities; + +import leaf.cosmere.sandmastery.common.registries.SandmasteryBlockEntitiesRegistry; +import net.minecraft.core.BlockPos; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockState; + +import java.util.concurrent.ThreadLocalRandom; + +import static leaf.cosmere.sandmastery.common.blocks.TemporarySandBlock.AGE; + +public class TemporarySandBE extends BlockEntity +{ + public TemporarySandBE(BlockPos pPos, BlockState pBlockState) + { + super(SandmasteryBlockEntitiesRegistry.TEMPORARY_SAND_BE.get(), pPos, pBlockState); + } + + private int ticksSinceUpdate = 0; + + @Override + protected void saveAdditional(CompoundTag nbt) + { + super.saveAdditional(nbt); + } + + @Override + public void load(CompoundTag nbt) + { + super.load(nbt); + } + + public static void tick(Level level, BlockPos pos, BlockState state, TemporarySandBE entity) + { + if (level.isClientSide()) return; + entity.ticksSinceUpdate++; + if (entity.ticksSinceUpdate < 5) return; + if (ThreadLocalRandom.current().nextBoolean()) return; + int age = state.getValue(AGE); + if (age <= 0) + { + level.setBlockAndUpdate(pos, Blocks.AIR.defaultBlockState()); + } + else + { + level.setBlockAndUpdate(pos, state.setValue(AGE, age - 1)); + } + entity.ticksSinceUpdate = 0; + } +} diff --git a/src/sandmastery/java/leaf/cosmere/sandmastery/common/capabilities/SandmasterySpiritwebSubmodule.java b/src/sandmastery/java/leaf/cosmere/sandmastery/common/capabilities/SandmasterySpiritwebSubmodule.java new file mode 100644 index 000000000..8f73c0c6f --- /dev/null +++ b/src/sandmastery/java/leaf/cosmere/sandmastery/common/capabilities/SandmasterySpiritwebSubmodule.java @@ -0,0 +1,404 @@ +/* + * File updated ~ 26 - 7 - 2025 ~ Leaf + */ + +package leaf.cosmere.sandmastery.common.capabilities; + +import leaf.cosmere.api.CosmereAPI; +import leaf.cosmere.api.ISpiritwebSubmodule; +import leaf.cosmere.api.Manifestations; +import leaf.cosmere.api.helpers.CompoundNBTHelper; +import leaf.cosmere.api.helpers.EffectsHelper; +import leaf.cosmere.api.helpers.PlayerHelper; +import leaf.cosmere.api.manifestation.Manifestation; +import leaf.cosmere.api.spiritweb.ISpiritweb; +import leaf.cosmere.client.Keybindings; +import leaf.cosmere.sandmastery.client.SandmasteryKeybindings; +import leaf.cosmere.sandmastery.common.Sandmastery; +import leaf.cosmere.sandmastery.common.config.SandmasteryConfigs; +import leaf.cosmere.sandmastery.common.manifestation.SandmasteryManifestation; +import leaf.cosmere.sandmastery.common.network.packets.SyncMasteryBindsMessage; +import leaf.cosmere.sandmastery.common.registries.SandmasteryAttributes; +import leaf.cosmere.sandmastery.common.registries.SandmasteryEffects; +import leaf.cosmere.sandmastery.common.registries.SandmasteryItems; +import leaf.cosmere.sandmastery.common.utils.SandmasteryConstants; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.util.Mth; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.ai.attributes.AttributeInstance; +import net.minecraft.world.entity.ai.attributes.AttributeModifier; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import org.jetbrains.annotations.NotNull; + +import java.util.List; +import java.util.Random; +import java.util.UUID; + +public class SandmasterySpiritwebSubmodule implements ISpiritwebSubmodule +{ + private CompoundTag sandmasteryTag = null; + private int hydrationLevel = SandmasteryConfigs.SERVER.STARTING_HYDRATION.get(); + private int projectileCooldown = 0; + private int launchCooldown = 0; + private int launchesSinceLeftGround = 0; + private int numRibbonsInUse = 0; + + private int hotkeyFlags = 0; + + public static SandmasterySpiritwebSubmodule get(ISpiritweb data) + { + return (SandmasterySpiritwebSubmodule) data.getSubmodule(Manifestations.ManifestationTypes.SANDMASTERY); + } + + @Override + public void tickClient(ISpiritweb spiritweb) + { + if (spiritweb.getSelectedManifestation() instanceof SandmasteryManifestation sandmasteryManifestation) + { + final int isActivatedAndActive = + Keybindings.MANIFESTATION_USE_ACTIVE.isDown() + ? 1 + : 0; + + final int elevateFlag = + SandmasteryKeybindings.SANDMASTERY_ELEVATE.isDown() + ? SandmasteryConstants.ELEVATE_HOTKEY_FLAG + : 0; + + final int launchFlag = + SandmasteryKeybindings.SANDMASTERY_LAUNCH.isDown() + ? SandmasteryConstants.LAUNCH_HOTKEY_FLAG + : 0; + + final int projectileFlag = + SandmasteryKeybindings.SANDMASTERY_PROJECTILE.isDown() + ? SandmasteryConstants.PROJECTILE_HOTKEY_FLAG + : 0; + + final int platformFlag = + SandmasteryKeybindings.SANDMASTERY_PLATFORM.isDown() + ? SandmasteryConstants.PLATFORM_HOTKEY_FLAG + : 0; + + int currentFlags = 0; + currentFlags = currentFlags + isActivatedAndActive; + currentFlags = currentFlags + elevateFlag; + currentFlags = currentFlags + launchFlag; + currentFlags = currentFlags + projectileFlag; + currentFlags = currentFlags + platformFlag; + + if (hotkeyFlags != currentFlags) + { + sandmasteryTag.putInt(SandmasteryConstants.HOTKEY_TAG, currentFlags); + hotkeyFlags = currentFlags; + Sandmastery.packetHandler().sendToServer(new SyncMasteryBindsMessage(currentFlags)); + } + } + //if we are only tracking hotkeys when a sandmastery manifestation is selected + //then things turn off when not selecting one. Would that be correct behaviour? + //Todo more elegant way of checking if the user is wanting to use sandmastery? + else if (hotkeyFlags != 0) + { + //don't create references unless needed + //final CompoundTag dataTag = spiritweb.getCompoundTag(); + //reset flag + hotkeyFlags = 0; + //save + sandmasteryTag.putInt(SandmasteryConstants.HOTKEY_TAG, hotkeyFlags); + //update server + Sandmastery.packetHandler().sendToServer(new SyncMasteryBindsMessage(hotkeyFlags)); + } + } + + @Override + public void tickServer(ISpiritweb spiritweb) + { + //offload to tick 19 out of 20 + if ((spiritweb.getLiving().tickCount - 1) % 20 != 0) + { + return; + } + + //let the spiritweb submodule check for dehydration and handle the effect + double percentage = (((double) this.getHydrationLevel()) / ((double) SandmasteryConfigs.SERVER.MAX_HYDRATION.get())) * 100; + if (percentage <= SandmasteryConfigs.SERVER.DEHYDRATION_THRESHOLD.get()) + { + spiritweb.addEffect(EffectsHelper.getNewEffect(SandmasteryEffects.DEHYDRATED_EFFECT.get(), spiritweb.getLiving(), 1, 33)); + } + } + + @Override + public void deserialize(ISpiritweb spiritweb) + { + final CompoundTag compoundTag = spiritweb.getCompoundTag(); + //save a reference to the tag + sandmasteryTag = CompoundNBTHelper.getOrCreate(compoundTag, Sandmastery.MODID); + //unload the player specific fields + hydrationLevel = sandmasteryTag.getInt(SandmasteryConstants.HYDRATION_TAG); + projectileCooldown = sandmasteryTag.getInt(SandmasteryConstants.PROJECTILE_COOLDOWN_TAG); + launchCooldown = sandmasteryTag.getInt(SandmasteryConstants.LAUNCH_COOLDOWN_TAG); + launchesSinceLeftGround = sandmasteryTag.getInt(SandmasteryConstants.LAUNCHES_SINCE_FLOOR_TAG); + hotkeyFlags = sandmasteryTag.getInt(SandmasteryConstants.HOTKEY_TAG); + numRibbonsInUse = sandmasteryTag.getInt(SandmasteryConstants.RIBBONS_IN_USE_TAG); + } + + @Override + public void serialize(ISpiritweb spiritweb) + { + final CompoundTag compoundTag = spiritweb.getCompoundTag(); + + if (sandmasteryTag == null) + { + sandmasteryTag = CompoundNBTHelper.getOrCreate(compoundTag, Sandmastery.MODID); + } + + sandmasteryTag.putInt(SandmasteryConstants.HYDRATION_TAG, hydrationLevel); + sandmasteryTag.putInt(SandmasteryConstants.PROJECTILE_COOLDOWN_TAG, projectileCooldown); + sandmasteryTag.putInt(SandmasteryConstants.LAUNCH_COOLDOWN_TAG, launchCooldown); + sandmasteryTag.putInt(SandmasteryConstants.LAUNCHES_SINCE_FLOOR_TAG, launchesSinceLeftGround); + sandmasteryTag.putInt(SandmasteryConstants.HOTKEY_TAG, hotkeyFlags); + sandmasteryTag.putInt(SandmasteryConstants.RIBBONS_IN_USE_TAG, numRibbonsInUse); + + //this shouldn't be necessary, as the spiritweb tag should already have the reference + //but we are hunting a null ref, so maybe something gets unassigned somewhere + compoundTag.put(Sandmastery.MODID, sandmasteryTag); + } + + @Override + public void resetOnDeath(ISpiritweb spiritweb) + { + hydrationLevel = SandmasteryConfigs.SERVER.STARTING_HYDRATION.get(); + } + + @Override + public void drainInvestiture(ISpiritweb data, double strength) + { + //todo - how should we handle draining sandmastery? + // we could force it to turn off ribbons? + } + + @Override + @OnlyIn(Dist.CLIENT) + public void collectMenuInfo(List m_infoText) + { + //todo Localization + final String text = "Hydration: " + getHydrationLevel(); + m_infoText.add(text); + } + + @Override + public void GiveStartingItem(Player player) + { + if (SandmasteryConfigs.SERVER.GIVE_QIDO_ON_FIRST_LOGIN.get()) + { + Random r = new Random(); + ItemStack qido = SandmasteryItems.QIDO_ITEM.asItem().getChargedQido(r.nextFloat()); + PlayerHelper.addItem(player, qido); + } + } + + @Override + public void GiveStartingItem(Player player, Manifestation manifestation) + { + } + + public int getHydrationLevel() + { + return hydrationLevel; + } + + public void adjustHydration(int amountToAdjust, boolean allowOvermastery, ISpiritweb data) + { + int hydration = getHydrationLevel(); + final int newHydrationValue = hydration + amountToAdjust; + hydrationLevel = Mth.clamp(newHydrationValue, 0, SandmasteryConfigs.SERVER.MAX_HYDRATION.get()); + + if (allowOvermastery && newHydrationValue < 0) + { + overmaster(data); + } + } + + public void adjustHydration(int amountToAdjust) + { + int hydration = hydrationLevel; + hydrationLevel = Mth.clamp(hydration + amountToAdjust, 0, SandmasteryConfigs.SERVER.MAX_HYDRATION.get()); + } + + private static void overmaster(ISpiritweb data) + { + final LivingEntity living = data.getLiving(); + AttributeInstance availableRibbons = living.getAttribute(SandmasteryAttributes.RIBBONS.getAttribute()); + + if (availableRibbons == null) + { + return; + } + + int ribbons = (int) availableRibbons.getBaseValue(); + int gainedRibbons; + + if (availableRibbons.getModifier(SandmasteryAttributes.OVERMASTERY_UUID) == null) + { + if (ribbons < 5) + { + gainedRibbons = 3; + } + else if (ribbons < 10) + { + gainedRibbons = 4; + } + else if (ribbons < 15) + { + gainedRibbons = 5; + } + else + { + gainedRibbons = 6; + } + + final AttributeModifier overmasteryAttributeModifier = getOvermasteryAttributeModifier(gainedRibbons, SandmasteryAttributes.OVERMASTERY_UUID); + + availableRibbons.addPermanentModifier(overmasteryAttributeModifier); + } + else if (availableRibbons.getModifier(SandmasteryAttributes.OVERMASTERY_SECONDARY_UUID) == null) + { + if (ribbons < 5) + { + gainedRibbons = 1; + } + else if (ribbons < 10) + { + gainedRibbons = 2; + } + else if (ribbons < 15) + { + gainedRibbons = 3; + } + else + { + gainedRibbons = 4; + } + + final AttributeModifier overmasteryAttributeModifier = getOvermasteryAttributeModifier(gainedRibbons, SandmasteryAttributes.OVERMASTERY_SECONDARY_UUID); + availableRibbons.addPermanentModifier(overmasteryAttributeModifier); + } + + //damage and disable powers regardless + //todo replace dryout + living.hurt(living.damageSources().dryOut(), 10F); + data.addEffect(EffectsHelper.getNewEffect(SandmasteryEffects.OVERMASTERED_EFFECT.get(), living, 1, SandmasteryConfigs.SERVER.OVERMASTERY_DURATION.get() * 20 * 60)); // * 20 * 60 to convert minutes to ticks + } + + @NotNull + private static AttributeModifier getOvermasteryAttributeModifier(int gainedRibbons, UUID uuid) + { + final AttributeModifier overmasteryAttributeModifier = new AttributeModifier( + uuid, + String.format("%s - gained %s ribbons: %s", "Overmastery", gainedRibbons, uuid), + gainedRibbons, + AttributeModifier.Operation.ADDITION + ); + return overmasteryAttributeModifier; + } + + public void tickProjectileCooldown() + { + this.projectileCooldown -= this.projectileCooldown < 1 ? 0 : 1; + } + + public void tickLaunchCooldown() + { + this.launchCooldown -= this.launchCooldown < 1 ? 0 : 1; + } + + public void setProjectileCooldown(int cooldown) + { + this.projectileCooldown = cooldown; + } + + public void setLaunchCooldown(int cooldown) + { + this.launchCooldown = cooldown; + } + + public boolean projectileReady() + { + return this.projectileCooldown <= 0; + } + + public boolean launchReady() + { + return this.launchCooldown <= 0; + } + + public void addLaunch() + { + this.launchesSinceLeftGround += 1; + } + + public int getLaunches() + { + return this.launchesSinceLeftGround; + } + + public void resetLaunches() + { + this.launchesSinceLeftGround = 0; + } + + public int requstRibbons(ISpiritweb data, SandmasteryManifestation manifestation, int requestedRibbons) + { + int change = 0; + int maxRibbons = (int) manifestation.getStrength(data, false); + + if (numRibbonsInUse >= maxRibbons) + { + change = 0; + this.numRibbonsInUse = maxRibbons; + } + else + { + int changeAttempt = requestedRibbons; + if ((this.numRibbonsInUse + changeAttempt) <= maxRibbons) + { + change = changeAttempt; + } + } + this.numRibbonsInUse += change; + return change; + } + + public int returnRibbons(ISpiritweb data, SandmasteryManifestation manifestation, int returnedRibbons) + { + int oldRibbons = this.numRibbonsInUse; + int newRibbons = Math.max(0, this.numRibbonsInUse - returnedRibbons); + this.numRibbonsInUse = newRibbons; + return oldRibbons - newRibbons; + } + + public int getUsedRibbons() + { + return this.numRibbonsInUse; + } + + public void setUsedRibbons(int ribbons) + { + this.numRibbonsInUse = ribbons; + } + + public void debugRibbonUsage() + { + CosmereAPI.logger.info("Ribbons in use: " + numRibbonsInUse); + } + + public void updateFlags(int flags) + { + this.hotkeyFlags = flags; + //update the tag value for later serialization. + this.sandmasteryTag.putInt("hotkeys", hotkeyFlags); + } +} diff --git a/src/sandmastery/java/leaf/cosmere/sandmastery/common/config/SandmasteryConfigs.java b/src/sandmastery/java/leaf/cosmere/sandmastery/common/config/SandmasteryConfigs.java new file mode 100644 index 000000000..b39f8ed3f --- /dev/null +++ b/src/sandmastery/java/leaf/cosmere/sandmastery/common/config/SandmasteryConfigs.java @@ -0,0 +1,21 @@ +/* + * File updated ~ 28 - 2 - 2023 ~ Leaf + */ + +package leaf.cosmere.sandmastery.common.config; + +import leaf.cosmere.common.config.CosmereConfigHelper; +import net.minecraftforge.fml.ModContainer; +import net.minecraftforge.fml.ModLoadingContext; + +public class SandmasteryConfigs +{ + public static final SandmasteryServerConfig SERVER = new SandmasteryServerConfig(); + + public static void registerConfigs(ModLoadingContext modLoadingContext) + { + ModContainer modContainer = modLoadingContext.getActiveContainer(); + CosmereConfigHelper.registerConfig(modContainer, SERVER); + } + +} diff --git a/src/sandmastery/java/leaf/cosmere/sandmastery/common/config/SandmasteryServerConfig.java b/src/sandmastery/java/leaf/cosmere/sandmastery/common/config/SandmasteryServerConfig.java new file mode 100644 index 000000000..0b8165260 --- /dev/null +++ b/src/sandmastery/java/leaf/cosmere/sandmastery/common/config/SandmasteryServerConfig.java @@ -0,0 +1,81 @@ +/* + * File updated ~ 18 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.sandmastery.common.config; + +import leaf.cosmere.common.config.ICosmereConfig; +import net.minecraftforge.common.ForgeConfigSpec; +import net.minecraftforge.fml.config.ModConfig.Type; + +public class SandmasteryServerConfig implements ICosmereConfig +{ + + private final ForgeConfigSpec configSpec; + + public final ForgeConfigSpec.IntValue PROJECTILE_COOLDOWN; + public final ForgeConfigSpec.DoubleValue HYDRATION_COST_MULTIPLIER; + public final ForgeConfigSpec.IntValue CHARGE_COST_MULTIPLIER; + public final ForgeConfigSpec.IntValue STARTING_HYDRATION; + public final ForgeConfigSpec.IntValue MAX_HYDRATION; + public final ForgeConfigSpec.IntValue OVERMASTERY_DURATION; + public final ForgeConfigSpec.DoubleValue DEHYDRATION_THRESHOLD; + public final ForgeConfigSpec.BooleanValue GIVE_QIDO_ON_FIRST_LOGIN; + public final ForgeConfigSpec.IntValue QIDO_MAX_FILL; + + SandmasteryServerConfig() + { + ForgeConfigSpec.Builder builder = new ForgeConfigSpec.Builder(); + builder.comment("Sandmastery Config. This config is synced between server and client.").push("sandmastery"); + + PROJECTILE_COOLDOWN = builder.comment("How many ticks between projectiles at 1 ribbon allocated in ticks. (1 second = 20 ticks)").defineInRange("projectileCooldown", 100, 24, 1000); + + HYDRATION_COST_MULTIPLIER = builder.comment("Hydration cost is tied to sand cost, how many units of hydration are used per unit of sand charge").defineInRange("hydrationCostMultiploer", 1.5, 0.5, 100); + + CHARGE_COST_MULTIPLIER = builder.comment("Charge cost multiplier is multiplied by the base cost to determine charge cost per tick").defineInRange("chargeCostMultiplier", 2, 1, 1000); + + STARTING_HYDRATION = builder.comment("Starting hydration a player has when they spawn into the world for the first time").defineInRange("startingHydration", 10000, 1, 100000); + MAX_HYDRATION = builder.comment("Max hydration a player can have").defineInRange("maxHydration", 10000, 1, 100000); + + OVERMASTERY_DURATION = builder.comment("How long overmastery lasts in minutes").defineInRange("overmasteryDuration", 120, 1, 720); + + DEHYDRATION_THRESHOLD = builder.comment("The threshold at which a player will start to become dehydrated (percentage of max)").defineInRange("dehydrationThreshold", 0.01, 0.1, 100.0); + + GIVE_QIDO_ON_FIRST_LOGIN = builder.comment("Should the player be given a qido on first login?").define("qidoOnFirstLogin", false); + + QIDO_MAX_FILL = builder.comment("How much hydration should a qido restore in a single fill?").defineInRange("qidoMaxFill", 10000, 1, 1000000); + + builder.pop(); + configSpec = builder.build(); + } + + @Override + public String getFileName() + { + return "SandmasteryServer"; + } + + @Override + public ForgeConfigSpec getConfigSpec() + { + return configSpec; + } + + @Override + public Type getConfigType() + { + return Type.SERVER; + } + + @Override + public void clearCache() + { + PROJECTILE_COOLDOWN.clearCache(); + HYDRATION_COST_MULTIPLIER.clearCache(); + CHARGE_COST_MULTIPLIER.clearCache(); + STARTING_HYDRATION.clearCache(); + MAX_HYDRATION.clearCache(); + OVERMASTERY_DURATION.clearCache(); + DEHYDRATION_THRESHOLD.clearCache(); + } +} \ No newline at end of file diff --git a/src/sandmastery/java/leaf/cosmere/sandmastery/common/effects/DehydratedEffect.java b/src/sandmastery/java/leaf/cosmere/sandmastery/common/effects/DehydratedEffect.java new file mode 100644 index 000000000..e08d56c9b --- /dev/null +++ b/src/sandmastery/java/leaf/cosmere/sandmastery/common/effects/DehydratedEffect.java @@ -0,0 +1,39 @@ +/* + * File updated ~ 10 - 8 - 2024 ~ Leaf + */ + +package leaf.cosmere.sandmastery.common.effects; + +import leaf.cosmere.api.cosmereEffect.CosmereEffect; +import leaf.cosmere.api.spiritweb.ISpiritweb; +import net.minecraft.world.entity.LivingEntity; + +public class DehydratedEffect extends CosmereEffect +{ + public DehydratedEffect() + { + super(); + } + + @Override + protected int getActiveTick() + { + //every 4 seconds + return 80; + } + + @Override + protected int getTickOffset() + { + //offset tick to living tick count + 19 + return -1; + } + + @Override + public void applyEffectTick(ISpiritweb data, double strength) + { + final LivingEntity living = data.getLiving(); + //todo swap out dryout damage source + living.hurt(living.damageSources().dryOut(), 4.0F); + } +} diff --git a/src/sandmastery/java/leaf/cosmere/sandmastery/common/effects/OvermasteredEffect.java b/src/sandmastery/java/leaf/cosmere/sandmastery/common/effects/OvermasteredEffect.java new file mode 100644 index 000000000..cdcfd5284 --- /dev/null +++ b/src/sandmastery/java/leaf/cosmere/sandmastery/common/effects/OvermasteredEffect.java @@ -0,0 +1,19 @@ +/* + * File updated ~ 18 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.sandmastery.common.effects; + +import leaf.cosmere.api.cosmereEffect.CosmereEffect; +import leaf.cosmere.sandmastery.common.registries.SandmasteryAttributes; +import net.minecraft.world.entity.ai.attributes.AttributeModifier; + +public class OvermasteredEffect extends CosmereEffect +{ + public OvermasteredEffect() + { + super(); + + addAttributeModifier(SandmasteryAttributes.RIBBONS.get(), -1000d, AttributeModifier.Operation.ADDITION); + } +} diff --git a/src/sandmastery/java/leaf/cosmere/sandmastery/common/entities/SandProjectile.java b/src/sandmastery/java/leaf/cosmere/sandmastery/common/entities/SandProjectile.java new file mode 100644 index 000000000..d8391fc73 --- /dev/null +++ b/src/sandmastery/java/leaf/cosmere/sandmastery/common/entities/SandProjectile.java @@ -0,0 +1,42 @@ +/* + * File updated ~ 10 - 8 - 2024 ~ Leaf + */ + +package leaf.cosmere.sandmastery.common.entities; + +import leaf.cosmere.sandmastery.common.registries.SandmasteryBlocks; +import leaf.cosmere.sandmastery.common.registries.SandmasteryEntityTypes; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.projectile.AbstractArrow; +import net.minecraft.world.entity.projectile.ItemSupplier; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; + +public class SandProjectile extends AbstractArrow implements ItemSupplier +{ + private ItemStack projectileStack = SandmasteryBlocks.TALDAIN_BLACK_SAND_LAYER.getItemStack(); + + public SandProjectile(Level level, LivingEntity livingEntity, ItemStack itemStack) + { + super(SandmasteryEntityTypes.SAND_PROJECTILE.get(), livingEntity, level); + this.projectileStack = itemStack.copy(); + } + + public SandProjectile(EntityType sandProjectileEntityType, Level level) + { + super(sandProjectileEntityType, level); + } + + @Override + protected ItemStack getPickupItem() + { + return ItemStack.EMPTY; + } + + @Override + public ItemStack getItem() + { + return projectileStack; + } +} diff --git a/src/sandmastery/java/leaf/cosmere/sandmastery/common/eventHandlers/SandmasteryEntityEventHandler.java b/src/sandmastery/java/leaf/cosmere/sandmastery/common/eventHandlers/SandmasteryEntityEventHandler.java new file mode 100644 index 000000000..fe587ee4d --- /dev/null +++ b/src/sandmastery/java/leaf/cosmere/sandmastery/common/eventHandlers/SandmasteryEntityEventHandler.java @@ -0,0 +1,52 @@ +/* + * File updated ~ 18 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.sandmastery.common.eventHandlers; + +import leaf.cosmere.api.Manifestations; +import leaf.cosmere.common.cap.entity.SpiritwebCapability; +import leaf.cosmere.sandmastery.common.Sandmastery; +import leaf.cosmere.sandmastery.common.capabilities.SandmasterySpiritwebSubmodule; +import leaf.cosmere.sandmastery.common.config.SandmasteryConfigs; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.PotionItem; +import net.minecraftforge.event.entity.living.LivingEntityUseItemEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; + +@Mod.EventBusSubscriber(modid = Sandmastery.MODID, bus = Mod.EventBusSubscriber.Bus.FORGE) +public class SandmasteryEntityEventHandler +{ + @SubscribeEvent + public static void onFinishUsingItem(LivingEntityUseItemEvent.Finish event) + { + if (event.isCanceled()) + { + return; + } + Item item = event.getItem().getItem(); + boolean potion = item instanceof PotionItem; + boolean metalVial = item.getDescriptionId().equals("item.allomancy.metal_vial"); // TODO: Replace the magic string with code + final LivingEntity livingEntity = event.getEntity(); + if (potion || metalVial) + { + SpiritwebCapability.get(livingEntity).ifPresent(spiritweb -> + { + SpiritwebCapability data = (SpiritwebCapability) spiritweb; + SandmasterySpiritwebSubmodule sb = (SandmasterySpiritwebSubmodule) data.getSubmodule(Manifestations.ManifestationTypes.SANDMASTERY); + int playerHydration = sb.getHydrationLevel(); + int maxPlayerHydration = SandmasteryConfigs.SERVER.MAX_HYDRATION.get(); + if (playerHydration < maxPlayerHydration) + { + if (potion) + { + sb.adjustHydration(maxPlayerHydration / 8); + } + // if(metalVial) sb.adjustHydration(Math.min(1000, maxPlayerHydration - playerHydration), true); // TODO: bottling machine should determine liquit used, and as such hydration value + } + }); + } + } +} diff --git a/src/sandmastery/java/leaf/cosmere/sandmastery/common/eventHandlers/SandmasteryModBusEventHandler.java b/src/sandmastery/java/leaf/cosmere/sandmastery/common/eventHandlers/SandmasteryModBusEventHandler.java new file mode 100644 index 000000000..b7e2e1d98 --- /dev/null +++ b/src/sandmastery/java/leaf/cosmere/sandmastery/common/eventHandlers/SandmasteryModBusEventHandler.java @@ -0,0 +1,21 @@ +package leaf.cosmere.sandmastery.common.eventHandlers; + +import leaf.cosmere.api.Taldain; +import leaf.cosmere.sandmastery.common.Sandmastery; +import leaf.cosmere.sandmastery.common.registries.SandmasteryAttributes; +import net.minecraft.world.entity.EntityType; +import net.minecraftforge.event.entity.EntityAttributeModificationEvent; +import net.minecraftforge.eventbus.api.EventPriority; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; + +@Mod.EventBusSubscriber(modid = Sandmastery.MODID, bus = Mod.EventBusSubscriber.Bus.MOD) +public class SandmasteryModBusEventHandler +{ + @SubscribeEvent(priority = EventPriority.HIGH) + public static void onEntityAttributeModificationEvent(EntityAttributeModificationEvent event) + { + event.add(EntityType.PLAYER, SandmasteryAttributes.RIBBONS.getAttribute()); + } +} + diff --git a/src/sandmastery/java/leaf/cosmere/sandmastery/common/investiture/SandmasteryInvestiture.java b/src/sandmastery/java/leaf/cosmere/sandmastery/common/investiture/SandmasteryInvestiture.java new file mode 100644 index 000000000..ceac31c3a --- /dev/null +++ b/src/sandmastery/java/leaf/cosmere/sandmastery/common/investiture/SandmasteryInvestiture.java @@ -0,0 +1,18 @@ +package leaf.cosmere.sandmastery.common.investiture; + +import leaf.cosmere.api.Manifestations; +import leaf.cosmere.api.investiture.KineticInvestiture; +import leaf.cosmere.api.investiture.InvHelpers; + +public class SandmasteryInvestiture extends KineticInvestiture +{ + public SandmasteryInvestiture(IInvContainer container, int BEU) + { + super(container, + InvHelpers.Shard.AUTONOMY, + InvHelpers.InvestitureSource.LUHEL_BOND, + BEU, + Manifestations.ManifestArrayBuilder.getAllType(Manifestations.ManifestationTypes.SANDMASTERY)); + } + +} diff --git a/src/sandmastery/java/leaf/cosmere/sandmastery/common/items/JarItem.java b/src/sandmastery/java/leaf/cosmere/sandmastery/common/items/JarItem.java new file mode 100644 index 000000000..91e3087d0 --- /dev/null +++ b/src/sandmastery/java/leaf/cosmere/sandmastery/common/items/JarItem.java @@ -0,0 +1,113 @@ +/* + * File updated ~ 10 - 8 - 2024 ~ Leaf + */ + +package leaf.cosmere.sandmastery.common.items; + +import leaf.cosmere.api.Constants; +import leaf.cosmere.api.helpers.StackNBTHelper; +import leaf.cosmere.common.items.BaseItem; +import leaf.cosmere.common.properties.PropTypes; +import leaf.cosmere.sandmastery.common.blocks.TaldainBlackSandLayerBlock; +import leaf.cosmere.sandmastery.common.registries.SandmasteryBlocks; +import leaf.cosmere.sandmastery.common.registries.SandmasteryItems; +import net.minecraft.core.BlockPos; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.ClipContext; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; + +public class JarItem extends BaseItem +{ + public JarItem() + { + super(PropTypes.Items.ONE.get()); + } + + @Override + public InteractionResultHolder use(Level pLevel, Player pPlayer, InteractionHand pUsedHand) + { + ItemStack usedItem = pPlayer.getItemInHand(pUsedHand); + if (pLevel.isClientSide()) + { + return InteractionResultHolder.pass(usedItem); + } + BlockPos pos = getPlayerPOVHitResult(pLevel, pPlayer, ClipContext.Fluid.NONE).getBlockPos(); + BlockState state = pLevel.getBlockState(pos); + Inventory inv = pPlayer.getInventory(); + boolean fill = false; + boolean charged = false; + if (state.is(SandmasteryBlocks.TALDAIN_BLACK_SAND_LAYER.getBlock())) + { + int layers = state.getValue(TaldainBlackSandLayerBlock.LAYERS); + if (layers > 1) + { + pLevel.setBlockAndUpdate(pos, state.setValue(TaldainBlackSandLayerBlock.LAYERS, layers - 1)); + } + else + { + pLevel.setBlockAndUpdate(pos, Blocks.AIR.defaultBlockState()); + } + + charged = false; + fill = true; + } + else if (state.is(SandmasteryBlocks.TALDAIN_BLACK_SAND.getBlock())) + { + pLevel.setBlockAndUpdate(pos, + SandmasteryBlocks.TALDAIN_BLACK_SAND_LAYER.getBlock() + .defaultBlockState() + .setValue(TaldainBlackSandLayerBlock.LAYERS, 7) + ); + charged = false; + fill = true; + } + if (state.is(SandmasteryBlocks.TALDAIN_WHITE_SAND_LAYER.getBlock())) + { + int layers = state.getValue(TaldainBlackSandLayerBlock.LAYERS); + if (layers > 1) + { + pLevel.setBlockAndUpdate(pos, state.setValue(TaldainBlackSandLayerBlock.LAYERS, layers - 1)); + } + else + { + pLevel.setBlockAndUpdate(pos, Blocks.AIR.defaultBlockState()); + } + + charged = true; + fill = true; + } + else if (state.is(SandmasteryBlocks.TALDAIN_WHITE_SAND_LAYER.getBlock())) + { + pLevel.setBlockAndUpdate(pos, + SandmasteryBlocks.TALDAIN_BLACK_SAND_LAYER.getBlock() + .defaultBlockState() + .setValue(TaldainBlackSandLayerBlock.LAYERS, 7) + ); + charged = true; + fill = true; + } + + ItemStack item = new ItemStack(SandmasteryItems.SAND_JAR_ITEM); + if (charged) + { + StackNBTHelper.setInt(item, Constants.NBT.CHARGE_LEVEL, 100); + } + else + { + StackNBTHelper.setInt(item, Constants.NBT.CHARGE_LEVEL, 0); + } + + if (fill) + { + inv.setItem(pUsedHand == InteractionHand.MAIN_HAND ? inv.selected : -106, item); + } + + return InteractionResultHolder.consume(usedItem); + } +} diff --git a/src/sandmastery/java/leaf/cosmere/sandmastery/common/items/QidoItem.java b/src/sandmastery/java/leaf/cosmere/sandmastery/common/items/QidoItem.java new file mode 100644 index 000000000..fbc1aeae6 --- /dev/null +++ b/src/sandmastery/java/leaf/cosmere/sandmastery/common/items/QidoItem.java @@ -0,0 +1,153 @@ +/* + * File updated ~ 10 - 8 - 2024 ~ Leaf + */ + +package leaf.cosmere.sandmastery.common.items; + +import leaf.cosmere.api.Manifestations; +import leaf.cosmere.common.cap.entity.SpiritwebCapability; +import leaf.cosmere.common.items.ChargeableItemBase; +import leaf.cosmere.common.properties.PropTypes; +import leaf.cosmere.sandmastery.common.capabilities.SandmasterySpiritwebSubmodule; +import leaf.cosmere.sandmastery.common.config.SandmasteryConfigs; +import leaf.cosmere.sandmastery.common.registries.SandmasteryAttributes; +import net.minecraft.core.BlockPos; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.UseAnim; +import net.minecraft.world.level.ClipContext; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; +import org.jetbrains.annotations.NotNull; + +import javax.annotation.Nonnull; + +public class QidoItem extends ChargeableItemBase +{ + public QidoItem() + { + super(PropTypes.Items.ONE.get()); + } + + /** + * @param fillPercent ranges from 0 to 1 + * @return ItemStack of a qido with specified fill percentage + */ + public ItemStack getChargedQido(float fillPercent) + { + ItemStack qido = new ItemStack(this); + setCharge(qido, Math.round(fillPercent * SandmasteryConfigs.SERVER.QIDO_MAX_FILL.get())); + return qido; + } + + @Override + public int getMaxCharge(ItemStack itemStack) + { + return SandmasteryConfigs.SERVER.QIDO_MAX_FILL.get(); + } + + @Override + public InteractionResultHolder use(Level pLevel, Player pPlayer, InteractionHand pUsedHand) + { + ItemStack itemStack = pPlayer.getItemInHand(pUsedHand); + + if (pPlayer.isCrouching()) + { + BlockPos pos = getPlayerPOVHitResult(pLevel, pPlayer, ClipContext.Fluid.WATER).getBlockPos(); + BlockState state = pLevel.getBlockState(pos); + if (state.is(Blocks.WATER)) + { + pLevel.playSound(pPlayer, pPlayer.getX(), pPlayer.getY(), pPlayer.getZ(), SoundEvents.BOTTLE_FILL, SoundSource.NEUTRAL, 1.0F, 1.0F); + setCharge(itemStack, getMaxCharge(itemStack)); + } + } + else + { + final int liquid = getCharge(itemStack); + if (liquid <= 0) + { + InteractionResultHolder.pass(itemStack); + } + SpiritwebCapability.get(pPlayer).ifPresent(spiritweb -> + { + SpiritwebCapability data = (SpiritwebCapability) spiritweb; + + if (data.getLiving().getAttribute(SandmasteryAttributes.RIBBONS.get()).getBaseValue() < 1) + { + return; + } + + SandmasterySpiritwebSubmodule sb = SandmasterySpiritwebSubmodule.get(data); + + int playerHydration = sb.getHydrationLevel(); + final int maxPlayerHydration = SandmasteryConfigs.SERVER.MAX_HYDRATION.get(); + + pPlayer.startUsingItem(pUsedHand); + }); + } + + return InteractionResultHolder.consume(itemStack); + } + + @Override + public void onUseTick(Level pLevel, LivingEntity pLivingEntity, ItemStack pStack, int pRemainingUseDuration) + { + if (!pLivingEntity.isCrouching()) + { + int availableWater = getCharge(pStack); + if (availableWater == 0) + { + pLivingEntity.stopUsingItem(); + return; + } + SpiritwebCapability.get(pLivingEntity).ifPresent(spiritweb -> + { + SpiritwebCapability data = (SpiritwebCapability) spiritweb; + SandmasterySpiritwebSubmodule sb = (SandmasterySpiritwebSubmodule) data.getSubmodule(Manifestations.ManifestationTypes.SANDMASTERY); + + int increasePerTick = Math.min(50, availableWater); + int playerHydration = sb.getHydrationLevel(); + final int maxPlayerHydration = SandmasteryConfigs.SERVER.MAX_HYDRATION.get(); + + if (playerHydration == maxPlayerHydration) + { + return; + } + if ((increasePerTick + playerHydration) > maxPlayerHydration) + { + increasePerTick = maxPlayerHydration - playerHydration; + } + + sb.adjustHydration(increasePerTick); + setCharge(pStack, availableWater - increasePerTick); + }); + } + super.onUseTick(pLevel, pLivingEntity, pStack, pRemainingUseDuration); + } + + @Nonnull + @Override + public UseAnim getUseAnimation(ItemStack pStack) + { + return UseAnim.DRINK; + } + + @Override + public boolean isFoil(@NotNull ItemStack stack) + { + return stack.isEnchanted(); + } + + @Override + public int getUseDuration(ItemStack pStack) + { + return 16000; + } + +} diff --git a/src/sandmastery/java/leaf/cosmere/sandmastery/common/items/SandJarItem.java b/src/sandmastery/java/leaf/cosmere/sandmastery/common/items/SandJarItem.java new file mode 100644 index 000000000..a8ec350da --- /dev/null +++ b/src/sandmastery/java/leaf/cosmere/sandmastery/common/items/SandJarItem.java @@ -0,0 +1,159 @@ +/* + * File updated ~ 10 - 8 - 2024 ~ Leaf + */ + +package leaf.cosmere.sandmastery.common.items; + +import leaf.cosmere.api.Constants; +import leaf.cosmere.api.helpers.StackNBTHelper; +import leaf.cosmere.common.items.ChargeableItemBase; +import leaf.cosmere.common.properties.PropTypes; +import leaf.cosmere.sandmastery.common.blocks.SandJarBlock; +import leaf.cosmere.sandmastery.common.blocks.TaldainBlackSandLayerBlock; +import leaf.cosmere.sandmastery.common.registries.SandmasteryBlocks; +import leaf.cosmere.sandmastery.common.registries.SandmasteryItems; +import leaf.cosmere.sandmastery.common.utils.MiscHelper; +import leaf.cosmere.sandmastery.common.utils.SandmasteryConstants; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.util.Mth; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.ClipContext; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.BlockHitResult; +import org.jetbrains.annotations.NotNull; + +public class SandJarItem extends ChargeableItemBase +{ + public SandJarItem() + { + super(PropTypes.Items.ONE.get()); + } + + @Override + public int getMaxCharge(ItemStack itemStack) + { + return Mth.floor(SandmasteryConstants.CHARGE_PER_SAND_LAYER); + } + + @Override + public boolean isBarVisible(@NotNull ItemStack stack) + { + return true; + } + + @Override + public void inventoryTick(ItemStack pStack, Level pLevel, Entity pEntity, int pSlotId, boolean pIsSelected) + { + MiscHelper.chargeItemFromInvestiture(pStack, pLevel, pEntity, getMaxCharge(pStack)); + } + + /*@Override + public void fillItemCategory(@Nonnull CreativeModeTab tab, @Nonnull NonNullList stacks) + { + if (allowedIn(tab)) + { + stacks.add(new ItemStack(this)); + + ItemStack halfPower = new ItemStack(this); + setCharge(halfPower, getMaxCharge(halfPower) / 2); + stacks.add(halfPower); + + ItemStack fullPower = new ItemStack(this); + setCharge(fullPower, getMaxCharge(fullPower)); + stacks.add(fullPower); + } + }*/ + + @Override + public boolean isFoil(@NotNull ItemStack stack) + { + return false; + } + + @Override + public ItemStack getCraftingRemainingItem(ItemStack itemStack) + { + ItemStack stack = new ItemStack(SandmasteryItems.JAR_ITEM); + stack.setCount(1); + return stack; + } + + @Override + public InteractionResultHolder use(Level pLevel, Player pPlayer, InteractionHand pUsedHand) + { + ItemStack usedItem = pPlayer.getItemInHand(pUsedHand); + if (pLevel.isClientSide()) + { + return InteractionResultHolder.pass(usedItem); + } + BlockHitResult res = getPlayerPOVHitResult(pLevel, pPlayer, ClipContext.Fluid.NONE); + BlockPos pos = res.getBlockPos(); + Direction dir = res.getDirection(); + BlockState state = pLevel.getBlockState(pos); + Inventory inv = pPlayer.getInventory(); + + boolean wasCharged = StackNBTHelper.getInt(usedItem, Constants.NBT.CHARGE_LEVEL, 0) > 0; + if (pPlayer.isCrouching()) + { + inv.setItem(pUsedHand == InteractionHand.MAIN_HAND ? inv.selected : -106, ItemStack.EMPTY); + BlockPos pos2 = pos.offset(dir.getNormal()); + pLevel.setBlockAndUpdate(pos2, + SandmasteryBlocks.SAND_JAR_BLOCK.getBlock() + .defaultBlockState() + .setValue(SandJarBlock.INVESTITURE, StackNBTHelper.getInt(usedItem, Constants.NBT.CHARGE_LEVEL, 0)) + ); + } + else + { + inv.setItem(pUsedHand == InteractionHand.MAIN_HAND ? inv.selected + : -106, new ItemStack(SandmasteryItems.JAR_ITEM)); + if (state.is(SandmasteryBlocks.TALDAIN_BLACK_SAND_LAYER.getBlock()) && state.getValue(TaldainBlackSandLayerBlock.LAYERS) < 8) + { + int layers = state.getValue(TaldainBlackSandLayerBlock.LAYERS); + pLevel.setBlockAndUpdate(pos, + state + .setValue(TaldainBlackSandLayerBlock.LAYERS, layers + 1) + ); + } + else if (state.is(SandmasteryBlocks.TALDAIN_WHITE_SAND_LAYER.getBlock()) && state.getValue(TaldainBlackSandLayerBlock.LAYERS) < 8) + { + int layers = state.getValue(TaldainBlackSandLayerBlock.LAYERS); + pLevel.setBlockAndUpdate(pos, + state + .setValue(TaldainBlackSandLayerBlock.LAYERS, layers + 1) + ); + } + else + { + if (wasCharged) + { + BlockPos pos2 = pos.offset(dir.getNormal()); + pLevel.setBlockAndUpdate(pos2, + SandmasteryBlocks.TALDAIN_WHITE_SAND_LAYER.getBlock() + .defaultBlockState() + .setValue(TaldainBlackSandLayerBlock.LAYERS, 1) + ); + } + else + { + + BlockPos pos2 = pos.offset(dir.getNormal()); + pLevel.setBlockAndUpdate(pos2, + SandmasteryBlocks.TALDAIN_BLACK_SAND_LAYER.getBlock() + .defaultBlockState() + .setValue(TaldainBlackSandLayerBlock.LAYERS, 1) + ); + } + } + } + return InteractionResultHolder.consume(usedItem); + } + +} diff --git a/src/sandmastery/java/leaf/cosmere/sandmastery/common/items/SandPouchItem.java b/src/sandmastery/java/leaf/cosmere/sandmastery/common/items/SandPouchItem.java new file mode 100644 index 000000000..1d3eb4def --- /dev/null +++ b/src/sandmastery/java/leaf/cosmere/sandmastery/common/items/SandPouchItem.java @@ -0,0 +1,178 @@ +/* + * File updated ~ 10 - 8 - 2024 ~ Leaf + */ + +package leaf.cosmere.sandmastery.common.items; + +import leaf.cosmere.api.Constants; +import leaf.cosmere.api.Taldain; +import leaf.cosmere.api.helpers.StackNBTHelper; +import leaf.cosmere.common.cap.entity.SpiritwebCapability; +import leaf.cosmere.common.items.ChargeableItemBase; +import leaf.cosmere.common.properties.PropTypes; +import leaf.cosmere.sandmastery.common.entities.SandProjectile; +import leaf.cosmere.sandmastery.common.items.sandpouch.SandPouchContainerMenu; +import leaf.cosmere.sandmastery.common.items.sandpouch.SandPouchInventory; +import leaf.cosmere.sandmastery.common.registries.SandmasteryBlocks; +import leaf.cosmere.sandmastery.common.registries.SandmasteryManifestations; +import leaf.cosmere.sandmastery.common.utils.MiscHelper; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.MenuProvider; +import net.minecraft.world.SimpleMenuProvider; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.entity.projectile.AbstractArrow; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraftforge.common.capabilities.ForgeCapabilities; +import net.minecraftforge.common.capabilities.ICapabilityProvider; +import net.minecraftforge.items.IItemHandler; +import net.minecraftforge.items.IItemHandlerModifiable; +import net.minecraftforge.network.NetworkHooks; +import org.jetbrains.annotations.NotNull; + +import java.util.function.Predicate; + +public class SandPouchItem extends ChargeableItemBase +{ + public SandPouchItem() + { + super(PropTypes.Items.ONE.get()); + } + + private SandPouchInventory sandPouchInventory; + + public static final Predicate SUPPORTED_ITEMS = (itemStack) -> + { + return itemStack.getItem() == SandmasteryBlocks.TALDAIN_BLACK_SAND_LAYER.asItem() || + itemStack.getItem() == SandmasteryBlocks.TALDAIN_WHITE_SAND_LAYER.asItem() || + itemStack.getItem() == SandmasteryBlocks.TALDAIN_BLACK_SAND.asItem() || + itemStack.getItem() == SandmasteryBlocks.TALDAIN_WHITE_SAND.asItem(); + }; + + @Override + public void inventoryTick(ItemStack pStack, Level pLevel, Entity pEntity, int pSlotId, boolean pIsSelected) + { + MiscHelper.chargeItemFromInvestiture(pStack, pLevel, pEntity, getMaxCharge(pStack)); + } + + @Override + public int getCharge(ItemStack itemStack) + { + int itemCharge = StackNBTHelper.getInt(itemStack, Constants.NBT.CHARGE_LEVEL, 0); + return itemCharge * itemStack.getCount(); + } + + @Override + public int getMaxCharge(ItemStack itemStack) + { + int res = 0; + IItemHandler inv = getPouchInv(itemStack); + if (inv == null) + { + return res; + } + for (int i = 0; i < SandPouchInventory.size; i++) + { + ItemStack stack = inv.getStackInSlot(i); + res += MiscHelper.getChargeFromItemStack(stack); + } + return res; + } + + /*@Override + public void fillItemCategory(@Nonnull CreativeModeTab tab, @Nonnull NonNullList stacks) + { + if (allowedIn(tab)) + { + stacks.add(new ItemStack(this)); + } + }*/ + + @Override + public boolean isFoil(@NotNull ItemStack stack) + { + return false; + } + + @Override + public InteractionResultHolder use(Level level, Player player, InteractionHand interactionHand) + { + ItemStack pouchStack = player.getItemInHand(interactionHand); + if (interactionHand == InteractionHand.MAIN_HAND) + { + if (!player.level().isClientSide() && player instanceof ServerPlayer) + { + MenuProvider container = new SimpleMenuProvider((windowID, playerInv, plyer) -> + new SandPouchContainerMenu(windowID, playerInv, pouchStack), pouchStack.getHoverName()); + NetworkHooks.openScreen((ServerPlayer) player, container, buf -> buf.writeBoolean(true)); + } + } + return InteractionResultHolder.consume(pouchStack); + } + + @Override + public ICapabilityProvider initCapabilities(ItemStack stack, CompoundTag oldCapNbt) + { + this.sandPouchInventory = new SandPouchInventory(); + if (oldCapNbt != null) + { + sandPouchInventory.deserializeNBT(oldCapNbt); // todo check if this breaks things? + } + return this.sandPouchInventory; + } + + public static IItemHandlerModifiable getPouchInv(ItemStack pouchStack) + { + return (IItemHandlerModifiable) pouchStack.getCapability(ForgeCapabilities.ITEM_HANDLER).orElse(null); + } + + public void shoot(ItemStack pouch, Player player) + { + SpiritwebCapability.get(player).ifPresent((data) -> + { + int mode = data.getMode(SandmasteryManifestations.SANDMASTERY_POWERS.get(Taldain.Mastery.PROJECTILE).get()); + IItemHandlerModifiable inv = getPouchInv(pouch); + ItemStack ammo = inv.getStackInSlot(2); + if (ammo.getCount() > 0) + { + final ItemStack stackToShoot = ammo.copy().split(1); + ammo.shrink(1); + //shoot? + + if (!player.level().isClientSide) + { + AbstractArrow sandProjectile = new SandProjectile(player.level(), player, stackToShoot); + sandProjectile.setCritArrow(true); + sandProjectile.shootFromRotation( + player, + player.getXRot(), + player.getYRot(), + 0.0F, + 3F, + 1.0F); + + sandProjectile.pickup = AbstractArrow.Pickup.CREATIVE_ONLY; + + player.level().addFreshEntity(sandProjectile); + } + + player.level().playSound( + null, + player.getX(), + player.getY(), + player.getZ(), + SoundEvents.ARROW_SHOOT, + SoundSource.PLAYERS, + 1.0F, + 1.0F / (player.level().getRandom().nextFloat() * 0.4F + 1.2F) + 1 * 0.5F); + + } + }); + } +} diff --git a/src/sandmastery/java/leaf/cosmere/sandmastery/common/items/sandpouch/SandPouchContainerMenu.java b/src/sandmastery/java/leaf/cosmere/sandmastery/common/items/sandpouch/SandPouchContainerMenu.java new file mode 100644 index 000000000..e42f81ac4 --- /dev/null +++ b/src/sandmastery/java/leaf/cosmere/sandmastery/common/items/sandpouch/SandPouchContainerMenu.java @@ -0,0 +1,113 @@ +package leaf.cosmere.sandmastery.common.items.sandpouch; + +import leaf.cosmere.sandmastery.common.items.SandPouchItem; +import leaf.cosmere.sandmastery.common.registries.SandmasteryMenuTypes; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.inventory.AbstractContainerMenu; +import net.minecraft.world.inventory.ClickType; +import net.minecraft.world.inventory.Slot; +import net.minecraft.world.item.ItemStack; +import net.minecraftforge.items.IItemHandlerModifiable; +import org.jetbrains.annotations.NotNull; + +public class SandPouchContainerMenu extends AbstractContainerMenu +{ + public static SandPouchContainerMenu fromNetwork(int windowId, Inventory inv, FriendlyByteBuf buf) + { + InteractionHand hand = buf.readBoolean() ? InteractionHand.MAIN_HAND : InteractionHand.OFF_HAND; + return new SandPouchContainerMenu(windowId, inv, inv.player.getItemInHand(hand)); + } + + private final ItemStack pouch; + + public SandPouchContainerMenu(int windowId, Inventory playerInv, ItemStack pouch) + { + super(SandmasteryMenuTypes.SAND_POUCH.get(), windowId); + this.pouch = pouch; + + IItemHandlerModifiable pouchInv = SandPouchItem.getPouchInv(pouch); + + int invStart = 0; + + // Pouch Slots + for (int i = 0; i < 1; ++i) + { + for (int j = 0; j < 3; ++j) + { + boolean input = i == 0 && j == 0; + + int k = j + i * 9; + addSlot(new SandPouchSlot(pouchInv, k, 8 + j * 18, 18 + i * 18, input)); + } + } + + // Player Inventory + for (int i = 0; i < 3; ++i) + { + for (int j = 0; j < 9; ++j) + { + addSlot(new Slot(playerInv, j + i * 9 + 9, 8 + j * 18, 41 + 17 + (i + invStart) * 18)); + } + } + + // Player Hotbar + for (int i = 0; i < 9; ++i) + { + addSlot(new Slot(playerInv, i, 8 + i * 18, 45 + 17 + (3 + invStart) * 18)); + } + } + + @Override + public ItemStack quickMoveStack(@NotNull Player pPlayer, int pIndex) + { + ItemStack itemStack = ItemStack.EMPTY; + + // TODO: make shift clicking actually work.. right now it duplicates the crap out of the sand. Commented out in repo until fixed +// int maxSlots = SandPouchInventory.size; +// +// Slot slot = this.slots.get(pIndex); +// if(slot.hasItem()) { +// ItemStack itemStack1 = slot.getItem(); +// itemStack = itemStack1.copy(); +// +// if(pIndex < maxSlots) { +// if(!this.moveItemStackTo(itemStack1, maxSlots, this.slots.size(), true)) { +// return ItemStack.EMPTY; +// }; +// } else if(!this.moveItemStackTo(itemStack1, 0, maxSlots, false)) { +// return ItemStack.EMPTY; +// } +// +// if (itemStack1.isEmpty()) +// { +// slot.set(ItemStack.EMPTY); +// } +// else +// { +// slot.setChanged(); +// } +// } + + return itemStack; + } + + @Override + public boolean stillValid(@NotNull Player pPlayer) + { + ItemStack main = pPlayer.getMainHandItem(); + ItemStack off = pPlayer.getOffhandItem(); + return !main.isEmpty() && main == pouch || !off.isEmpty() && off == pouch; + } + + @Override + public void clicked(int slot, int dragType, @NotNull ClickType clickTypeIn, @NotNull Player player) + { + if (!(slot >= 0 && getSlot(slot).getItem() == player.getItemInHand(InteractionHand.MAIN_HAND))) + { + super.clicked(slot, dragType, clickTypeIn, player); + } + } +} diff --git a/src/sandmastery/java/leaf/cosmere/sandmastery/common/items/sandpouch/SandPouchInventory.java b/src/sandmastery/java/leaf/cosmere/sandmastery/common/items/sandpouch/SandPouchInventory.java new file mode 100644 index 000000000..05c4da6c4 --- /dev/null +++ b/src/sandmastery/java/leaf/cosmere/sandmastery/common/items/sandpouch/SandPouchInventory.java @@ -0,0 +1,44 @@ +package leaf.cosmere.sandmastery.common.items.sandpouch; + +import net.minecraft.core.Direction; +import net.minecraft.nbt.CompoundTag; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.capabilities.ForgeCapabilities; +import net.minecraftforge.common.capabilities.ICapabilityProvider; +import net.minecraftforge.common.util.INBTSerializable; +import net.minecraftforge.common.util.LazyOptional; +import net.minecraftforge.items.IItemHandler; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +public class SandPouchInventory implements ICapabilityProvider, INBTSerializable +{ + public static final int size = 3; + private final IItemHandler inv = new SandpouchItemHandler(size) + { + }; + + private final LazyOptional opt = LazyOptional.of(() -> inv); + + @Nonnull + @Override + public LazyOptional getCapability(@Nonnull Capability capability, @Nullable Direction facing) + { + return ForgeCapabilities.ITEM_HANDLER.orEmpty(capability, opt); + } + + @Override + public CompoundTag serializeNBT() + { + CompoundTag tag = ((SandpouchItemHandler) inv).serializeNBT(); + return tag; + } + + @Override + public void deserializeNBT(CompoundTag nbt) + { + ((SandpouchItemHandler) inv).deserializeNBT(nbt); + } + +} diff --git a/src/sandmastery/java/leaf/cosmere/sandmastery/common/items/sandpouch/SandPouchSlot.java b/src/sandmastery/java/leaf/cosmere/sandmastery/common/items/sandpouch/SandPouchSlot.java new file mode 100644 index 000000000..4434de77c --- /dev/null +++ b/src/sandmastery/java/leaf/cosmere/sandmastery/common/items/sandpouch/SandPouchSlot.java @@ -0,0 +1,38 @@ +/* + * File updated ~ 10 - 8 - 2024 ~ Leaf + */ + +package leaf.cosmere.sandmastery.common.items.sandpouch; + +import leaf.cosmere.sandmastery.common.items.SandPouchItem; +import net.minecraft.world.item.ItemStack; +import net.minecraftforge.items.IItemHandlerModifiable; +import net.minecraftforge.items.SlotItemHandler; +import org.jetbrains.annotations.NotNull; + +public class SandPouchSlot extends SlotItemHandler +{ + + private final int index; + private final boolean input; + + public SandPouchSlot(IItemHandlerModifiable inv, int index, int x, int y, boolean input) + { + super(inv, index, x, y); + this.index = index; + this.input = input; + } + + @Override + public boolean mayPlace(@NotNull ItemStack stack) + { + return input ? SandPouchItem.SUPPORTED_ITEMS.test(stack) : false; + } + + @Override + public void setChanged() + { + container.setChanged(); + } + +} diff --git a/src/sandmastery/java/leaf/cosmere/sandmastery/common/items/sandpouch/SandpouchItemHandler.java b/src/sandmastery/java/leaf/cosmere/sandmastery/common/items/sandpouch/SandpouchItemHandler.java new file mode 100644 index 000000000..c743ce8ad --- /dev/null +++ b/src/sandmastery/java/leaf/cosmere/sandmastery/common/items/sandpouch/SandpouchItemHandler.java @@ -0,0 +1,331 @@ +/* + * File updated ~ 10 - 8 - 2024 ~ Leaf + */ + +package leaf.cosmere.sandmastery.common.items.sandpouch; + +import leaf.cosmere.sandmastery.common.items.SandPouchItem; +import leaf.cosmere.sandmastery.common.registries.SandmasteryBlocks; +import net.minecraft.core.NonNullList; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.ListTag; +import net.minecraft.nbt.Tag; +import net.minecraft.world.item.ItemStack; +import net.minecraftforge.common.util.INBTSerializable; +import net.minecraftforge.items.IItemHandler; +import net.minecraftforge.items.IItemHandlerModifiable; +import net.minecraftforge.items.ItemHandlerHelper; +import org.jetbrains.annotations.NotNull; + +import javax.annotation.Nonnull; + +public class SandpouchItemHandler implements IItemHandler, IItemHandlerModifiable, INBTSerializable +{ + + private enum MODES + { + ADD, + REMOVE, + NO_CHANGE + } + + protected NonNullList stacks; + protected int layers; + + public SandpouchItemHandler() + { + this(1); + } + + public SandpouchItemHandler(int size) + { + stacks = NonNullList.withSize(size, ItemStack.EMPTY); + } + + @Override + public boolean isItemValid(int slot, @Nonnull ItemStack stack) + { + return slot == 0 ? !stack.isEmpty() && SandPouchItem.SUPPORTED_ITEMS.test(stack) : false; + } + + @Override + public void setStackInSlot(int slot, @NotNull ItemStack stack) + { + validateSlotIndex(slot); + ItemStack prev = this.stacks.get(slot); + int prevCount = prev.isEmpty() ? 0 : prev.getCount(); + int newCount = stack.isEmpty() ? 0 : stack.getCount(); + MODES mode = null; + + if (prevCount < newCount) + { + mode = MODES.ADD; + } + else if (newCount < prevCount) + { + mode = MODES.REMOVE; + } + else + { + mode = MODES.NO_CHANGE; + } + + this.stacks.set(slot, stack); + onContentsChanged(slot, Math.abs(prevCount - newCount), mode); + } + + protected void onContentsChanged(int slot) + { + updateSlots(); + } + + protected void onContentsChanged(int slot, int count, MODES mode) + { + ItemStack changedStack = getStackInSlot(slot); + boolean sandBlock = changedStack.getItem() == SandmasteryBlocks.TALDAIN_BLACK_SAND.asItem() || changedStack.getItem() == SandmasteryBlocks.TALDAIN_WHITE_SAND.asItem(); + boolean sandLayer = changedStack.getItem() == SandmasteryBlocks.TALDAIN_BLACK_SAND_LAYER.asItem() || changedStack.getItem() == SandmasteryBlocks.TALDAIN_WHITE_SAND_LAYER.asItem(); + + switch (slot) + { + case 0: + if (mode != MODES.ADD) + { + break; // This slot is input, and can accept both, don't update if it's removed + } + if (sandBlock) + { + layers += 8 * count; // Blocks are worth 8 layers + } + else if (sandLayer) + { + layers += count; + } + break; + case 1: + if (mode != MODES.REMOVE) + { + break; // this slot is output only, no item filter as only one item can ever be here + } + layers -= 8 * count; // Blocks are worth 8 layers + break; + case 2: + if (mode != MODES.REMOVE) + { + break; // this slot is output only, no item filter as only one item can ever be here + } + layers -= count; + break; + } + + updateSlots(); + + } + + private void updateSlots() + { + int numBlocks = (int) Math.floor(this.layers / 8); + + ItemStack blocksInSlot = new ItemStack(SandmasteryBlocks.TALDAIN_BLACK_SAND); + blocksInSlot.setCount(Math.min(numBlocks, 64)); + + ItemStack layersInSlot = new ItemStack(SandmasteryBlocks.TALDAIN_BLACK_SAND_LAYER); + layersInSlot.setCount(Math.min(this.layers, 64)); + + this.stacks.set(0, ItemStack.EMPTY); + this.stacks.set(1, blocksInSlot); + this.stacks.set(2, layersInSlot); + } + + @Override + public int getSlots() + { + return this.stacks.size(); + } + + @Override + @NotNull + public ItemStack getStackInSlot(int slot) + { + validateSlotIndex(slot); + return this.stacks.get(slot); + } + + @Override + @NotNull + public ItemStack insertItem(int slot, @NotNull ItemStack stack, boolean simulate) + { + if (stack.isEmpty()) + { + return ItemStack.EMPTY; + } + + if (!isItemValid(slot, stack)) + { + return stack; + } + + validateSlotIndex(slot); + + ItemStack existing = this.stacks.get(slot); + + int limit = getStackLimit(slot, stack); + + if (!existing.isEmpty()) + { + if (!ItemHandlerHelper.canItemStacksStack(stack, existing)) + { + return stack; + } + + limit -= existing.getCount(); + } + + if (limit <= 0) + { + return stack; + } + + boolean reachedLimit = stack.getCount() > limit; + + if (!simulate) + { + if (existing.isEmpty()) + { + this.stacks.set(slot, reachedLimit ? ItemHandlerHelper.copyStackWithSize(stack, limit) : stack); + } + else + { + existing.grow(reachedLimit ? limit : stack.getCount()); + } + onContentsChanged(slot); + } + + return reachedLimit ? ItemHandlerHelper.copyStackWithSize(stack, stack.getCount() - limit) : ItemStack.EMPTY; + } + + protected int getStackLimit(int slot, @NotNull ItemStack stack) + { + return Math.min(getSlotLimit(slot), stack.getMaxStackSize()); + } + + @Override + @NotNull + public ItemStack extractItem(int slot, int amount, boolean simulate) + { + if (amount == 0) + { + return ItemStack.EMPTY; + } + + validateSlotIndex(slot); + + ItemStack existing = this.stacks.get(slot); + + if (existing.isEmpty()) + { + return ItemStack.EMPTY; + } + + int toExtract = Math.min(amount, existing.getMaxStackSize()); + + if (existing.getCount() <= toExtract) + { + if (!simulate) + { + this.stacks.set(slot, ItemStack.EMPTY); + onContentsChanged(slot, existing.getCount(), MODES.REMOVE); + return existing; + } + else + { + return existing.copy(); + } + } + else + { + if (!simulate) + { + this.stacks.set(slot, ItemHandlerHelper.copyStackWithSize(existing, existing.getCount() - toExtract)); + onContentsChanged(slot, toExtract, MODES.REMOVE); + } + + return ItemHandlerHelper.copyStackWithSize(existing, toExtract); + } + } + + @Override + public int getSlotLimit(int slot) + { + return 64; + } + + @Override + public CompoundTag serializeNBT() + { + updateSlots(); + ListTag nbtTagList = new ListTag(); + for (int i = 0; i < stacks.size(); i++) + { + if (!stacks.get(i).isEmpty()) + { + CompoundTag itemTag = new CompoundTag(); + itemTag.putInt("Slot", i); + stacks.get(i).save(itemTag); + nbtTagList.add(itemTag); + } + } + CompoundTag nbt = new CompoundTag(); + nbt.put("Items", nbtTagList); + nbt.putInt("Size", stacks.size()); + nbt.putInt("Layers", layers); + return nbt; + } + + @Override + public void deserializeNBT(CompoundTag nbt) + { + setSize(nbt.contains("Size", Tag.TAG_INT) ? nbt.getInt("Size") : stacks.size()); + ListTag tagList = nbt.getList("Items", Tag.TAG_COMPOUND); + for (int i = 0; i < tagList.size(); i++) + { + CompoundTag itemTags = tagList.getCompound(i); + int slot = itemTags.getInt("Slot"); + + if (slot >= 0 && slot < stacks.size()) + { + stacks.set(slot, ItemStack.of(itemTags)); + } + } + setLayers(nbt.contains("Layers") ? nbt.getInt("Layers") : 0); + onLoad(); + } + + public void setSize(int size) + { + stacks = NonNullList.withSize(size, ItemStack.EMPTY); + } + + protected void onLoad() + { + updateSlots(); + } + + protected void validateSlotIndex(int slot) + { + if (slot < 0 || slot >= stacks.size()) + { + throw new RuntimeException("Slot " + slot + " not in valid range - [0," + stacks.size() + ")"); + } + } + + protected void setLayers(int layers) + { + this.layers = layers; + updateSlots(); + } + + public int getLayers() + { + return this.layers; + } +} diff --git a/src/sandmastery/java/leaf/cosmere/sandmastery/common/loot/SandmasteryLootHandler.java b/src/sandmastery/java/leaf/cosmere/sandmastery/common/loot/SandmasteryLootHandler.java new file mode 100644 index 000000000..83edbbdff --- /dev/null +++ b/src/sandmastery/java/leaf/cosmere/sandmastery/common/loot/SandmasteryLootHandler.java @@ -0,0 +1,68 @@ +package leaf.cosmere.sandmastery.common.loot; + +import leaf.cosmere.common.Cosmere; +import leaf.cosmere.sandmastery.common.Sandmastery; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.storage.loot.LootPool; +import net.minecraft.world.level.storage.loot.entries.LootPoolEntryContainer; +import net.minecraft.world.level.storage.loot.entries.LootTableReference; +import net.minecraft.world.level.storage.loot.providers.number.UniformGenerator; +import net.minecraftforge.event.LootTableLoadEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; + +@Mod.EventBusSubscriber(modid = Sandmastery.MODID, bus = Mod.EventBusSubscriber.Bus.FORGE) +public final class SandmasteryLootHandler +{ + + @SubscribeEvent + public static void lootLoad(LootTableLoadEvent evt) + { + String prefix = "minecraft:chests/"; + String name = evt.getName().toString(); + + if (name.startsWith(prefix)) + { + String file = name.substring(name.indexOf(prefix) + prefix.length()); + switch (file) + { + case "abandoned_mineshaft": + case "bastion_treasure": + case "bastion_other": + case "bastion_bridge": + case "desert_pyramid": + case "end_city_treasure": + case "jungle_temple": + case "simple_dungeon": + case "spawn_bonus_chest": + case "stronghold_corridor": + case "stronghold_crossing": + case "stronghold_library": + case "village_blacksmith": + case "woodland_mansion": + evt.getTable().addPool(getInjectPool(file)); + break; + default: + break; + } + } + } + + public static LootPool getInjectPool(String entryName) + { + return LootPool.lootPool() + .add(getInjectEntry(entryName, 1)) + .setBonusRolls(UniformGenerator.between(0, 1)) + .name("sandmastery_inject") + .build(); + } + + private static LootPoolEntryContainer.Builder getInjectEntry(String name, int weight) + { + ResourceLocation table = Sandmastery.rl("inject/" + name); + return LootTableReference.lootTableReference(table) + .setWeight(weight); + + } + +} diff --git a/src/sandmastery/java/leaf/cosmere/sandmastery/common/manifestation/MasteryCushion.java b/src/sandmastery/java/leaf/cosmere/sandmastery/common/manifestation/MasteryCushion.java new file mode 100644 index 000000000..e632fd0cc --- /dev/null +++ b/src/sandmastery/java/leaf/cosmere/sandmastery/common/manifestation/MasteryCushion.java @@ -0,0 +1,70 @@ +/* + * File updated ~ 10 - 8 - 2024 ~ Leaf + */ + +package leaf.cosmere.sandmastery.common.manifestation; + +import leaf.cosmere.api.Taldain; +import leaf.cosmere.api.spiritweb.ISpiritweb; +import leaf.cosmere.sandmastery.common.capabilities.SandmasterySpiritwebSubmodule; +import leaf.cosmere.sandmastery.common.utils.MiscHelper; +import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.phys.Vec3; + +public class MasteryCushion extends SandmasteryManifestation +{ + public MasteryCushion(Taldain.Mastery mastery) + { + super(mastery); + } + + @Override + public boolean tick(ISpiritweb data) + { + if (getMode(data) > 0) + { + return performEffectServer(data); + } + return false; + } + + @Override + protected int getBaseCost() + { + return 1; + } + + protected boolean performEffectServer(ISpiritweb data) + { + SandmasterySpiritwebSubmodule submodule = SandmasterySpiritwebSubmodule.get(data); + + LivingEntity living = data.getLiving(); + Vec3 movement = living.getDeltaMovement(); + if (movement.y > 0) + { + return false; + } + double distFromGround = MiscHelper.distanceFromGround(living); + if (!(distFromGround > 1 && distFromGround < 10)) + { + return false; + } + + if (notEnoughChargedSand(data)) + { + return false; + } + + BlockPos groundPos = MiscHelper.blockPosAtGround(data.getLiving()); + MiscHelper.spawnMasteredSandLine((ServerLevel) data.getLiving().level(), data.getLiving().getEyePosition(), new Vec3(groundPos.getX(), groundPos.getY(), groundPos.getZ())); + + living.setDeltaMovement(movement.multiply(1, 0.05, 1)); + living.hurtMarked = true; + living.resetFallDistance(); + submodule.adjustHydration(-getHydrationCost(data), true, data); + useChargedSand(data); + return true; + } +} diff --git a/src/sandmastery/java/leaf/cosmere/sandmastery/common/manifestation/MasteryElevate.java b/src/sandmastery/java/leaf/cosmere/sandmastery/common/manifestation/MasteryElevate.java new file mode 100644 index 000000000..6f3127b10 --- /dev/null +++ b/src/sandmastery/java/leaf/cosmere/sandmastery/common/manifestation/MasteryElevate.java @@ -0,0 +1,89 @@ +/* + * File updated ~ 10 - 8 - 2024 ~ Leaf + */ + +package leaf.cosmere.sandmastery.common.manifestation; + +import leaf.cosmere.api.Taldain; +import leaf.cosmere.api.spiritweb.ISpiritweb; +import leaf.cosmere.sandmastery.common.capabilities.SandmasterySpiritwebSubmodule; +import leaf.cosmere.sandmastery.common.utils.MiscHelper; +import leaf.cosmere.sandmastery.common.utils.SandmasteryConstants; +import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.phys.Vec3; + +public class MasteryElevate extends SandmasteryManifestation +{ + public MasteryElevate(Taldain.Mastery mastery) + { + super(mastery); + } + + @Override + public boolean tick(ISpiritweb data) + { + boolean enabledViaHotkey = MiscHelper.enabledViaHotkey(data, SandmasteryConstants.ELEVATE_HOTKEY_FLAG); + super.tick(data); + if (getMode(data) > 0 && enabledViaHotkey) + { + return performEffectServer(data); + } + return false; + } + + @Override + public int getBaseCost() + { + return 1; + } + + @Override + public int getRibbonsPerLevel(ISpiritweb data) + { + return getMode(data) < 3 ? 3 : 1; + } + + protected boolean performEffectServer(ISpiritweb data) + { + SandmasterySpiritwebSubmodule submodule = SandmasterySpiritwebSubmodule.get(data); + if (getMode(data) < 3) + { + return false; + } + if (notEnoughChargedSand(data)) + { + return false; + } + + LivingEntity living = data.getLiving(); + int distFromGround = MiscHelper.distanceFromGround(living); + int maxLift = getMode(data) * 4; + if (distFromGround > maxLift) + { + return false; + } + + double speed = (maxLift - distFromGround) > 3 ? scaleSpeedToMode(getMode(data)) : 0.15; + + Vec3 direction = new Vec3(0, speed, 0); + + living.setDeltaMovement(direction); + living.hurtMarked = true; // Allow the game to move the player + living.resetFallDistance(); + + BlockPos groundPos = MiscHelper.blockPosAtGround(data.getLiving()); + MiscHelper.spawnMasteredSandLine((ServerLevel) data.getLiving().level(), data.getLiving().getEyePosition(), new Vec3(groundPos.getX(), groundPos.getY(), groundPos.getZ())); + + submodule.adjustHydration(-getHydrationCost(data), true, data); + useChargedSand(data); + + return true; + } + + double scaleSpeedToMode(double mode) + { + return (mode * 0.025) + 0.15; + } +} diff --git a/src/sandmastery/java/leaf/cosmere/sandmastery/common/manifestation/MasteryLaunch.java b/src/sandmastery/java/leaf/cosmere/sandmastery/common/manifestation/MasteryLaunch.java new file mode 100644 index 000000000..9c70f4f4e --- /dev/null +++ b/src/sandmastery/java/leaf/cosmere/sandmastery/common/manifestation/MasteryLaunch.java @@ -0,0 +1,119 @@ +/* + * File updated ~ 10 - 8 - 2024 ~ Leaf + */ + +package leaf.cosmere.sandmastery.common.manifestation; + +import leaf.cosmere.api.Manifestations; +import leaf.cosmere.api.Taldain; +import leaf.cosmere.api.math.VectorHelper; +import leaf.cosmere.api.spiritweb.ISpiritweb; +import leaf.cosmere.common.cap.entity.SpiritwebCapability; +import leaf.cosmere.sandmastery.common.capabilities.SandmasterySpiritwebSubmodule; +import leaf.cosmere.sandmastery.common.utils.MiscHelper; +import leaf.cosmere.sandmastery.common.utils.SandmasteryConstants; +import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.phys.Vec3; + +public class MasteryLaunch extends SandmasteryManifestation +{ + public MasteryLaunch(Taldain.Mastery mastery) + { + super(mastery); + } + + @Override + public int getRibbonsPerLevel(ISpiritweb data) + { + return 3; + } + + @Override + public boolean tick(ISpiritweb data) + { + SandmasterySpiritwebSubmodule submodule = SandmasterySpiritwebSubmodule.get(data); + submodule.tickLaunchCooldown(); + if (!submodule.launchReady()) + { + return false; + } + + boolean enabledViaHotkey = MiscHelper.enabledViaHotkey(data, SandmasteryConstants.LAUNCH_HOTKEY_FLAG); + if (getMode(data) > 0 && enabledViaHotkey) + { + submodule.setLaunchCooldown(10); + return performEffectServer(data); + } + return false; + } + + protected boolean performEffectServer(ISpiritweb data) + { + SpiritwebCapability playerSpiritweb = (SpiritwebCapability) data; + ServerPlayer player = (ServerPlayer) data.getLiving(); + SandmasterySpiritwebSubmodule submodule = (SandmasterySpiritwebSubmodule) playerSpiritweb.getSubmodule(Manifestations.ManifestationTypes.SANDMASTERY); + if (notEnoughChargedSand(data)) + { + return false; + } + + int launchesAllowed = (this.getMode(data) / 3); + if (MiscHelper.distanceFromGround(player) > 2) + { + if (submodule.getLaunches() >= launchesAllowed) + { + return false; + } + submodule.addLaunch(); + launch(player); + } + else + { + submodule.resetLaunches(); + launch(player); + } + + BlockPos groundPos = MiscHelper.blockPosAtGround(data.getLiving()); + MiscHelper.spawnMasteredSandLine((ServerLevel) data.getLiving().level(), data.getLiving().getEyePosition(), new Vec3(groundPos.getX(), groundPos.getY(), groundPos.getZ())); + + submodule.adjustHydration(-getHydrationCost(data), true, data); + useChargedSand(data); + return true; + } + + protected void launch(ServerPlayer player) + { + float scaleFactor = 2f; // todo: find a good value + Vec3 direction = player.getForward(); + Vec3 add = player.getDeltaMovement().add(direction.multiply(scaleFactor, scaleFactor, scaleFactor)); + player.setDeltaMovement(VectorHelper.ClampMagnitude(add, 10)); + player.hurtMarked = true; // Allow the game to move the player + } + +// protected boolean performEffectServer(ISpiritweb data) +// { +// SandmasterySpiritwebSubmodule submodule = SandmasterySpiritwebSubmodule.get(data); +// +// int scaleFactor = getMode(data); +// if (notEnoughChargedSand(data)) +// { +// return false; +// } +// +// LivingEntity living = data.getLiving(); +// Vec3 direction = living.getForward(); +// Vec3 add = living.getDeltaMovement().add(direction.multiply(scaleFactor, scaleFactor, scaleFactor)); +// living.setDeltaMovement(VectorHelper.ClampMagnitude(add, 10)); +// living.hurtMarked = true; // Allow the game to move the player +// living.resetFallDistance(); +// +// data.setMode(this, getMode(data) - 1); +// data.syncToClients(null); +// +// submodule.adjustHydration(-getHydrationCost(data), true, data); +// useChargedSand(data); +// return true; +// } +} diff --git a/src/sandmastery/java/leaf/cosmere/sandmastery/common/manifestation/MasteryPlatform.java b/src/sandmastery/java/leaf/cosmere/sandmastery/common/manifestation/MasteryPlatform.java new file mode 100644 index 000000000..e921fc363 --- /dev/null +++ b/src/sandmastery/java/leaf/cosmere/sandmastery/common/manifestation/MasteryPlatform.java @@ -0,0 +1,84 @@ +/* + * File updated ~ 10 - 8 - 2024 ~ Leaf + */ + +package leaf.cosmere.sandmastery.common.manifestation; + +import leaf.cosmere.api.Manifestations; +import leaf.cosmere.api.Taldain; +import leaf.cosmere.api.spiritweb.ISpiritweb; +import leaf.cosmere.common.cap.entity.SpiritwebCapability; +import leaf.cosmere.sandmastery.common.capabilities.SandmasterySpiritwebSubmodule; +import leaf.cosmere.sandmastery.common.registries.SandmasteryBlocks; +import leaf.cosmere.sandmastery.common.utils.MiscHelper; +import leaf.cosmere.sandmastery.common.utils.SandmasteryConstants; +import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.Vec3; + +public class MasteryPlatform extends SandmasteryManifestation +{ + public MasteryPlatform(Taldain.Mastery mastery) + { + super(mastery); + } + + @Override + public boolean tick(ISpiritweb data) + { + boolean enabledViaHotkey = MiscHelper.enabledViaHotkey(data, SandmasteryConstants.PLATFORM_HOTKEY_FLAG); + + if (notEnoughChargedSand(data)) + { + return false; + } + if (getMode(data) > 0 && enabledViaHotkey) + { + return performEffectServer(data); + } + return false; + } + + private void setBlockIfAir(Level level, BlockPos pos, BlockState state) + { + Block block = level.getBlockState(pos).getBlock(); + if (block != Blocks.AIR && block != SandmasteryBlocks.TEMPORARY_SAND_BLOCK.getBlock()) + { + return; + } + level.setBlockAndUpdate(pos, state); + } + + protected boolean performEffectServer(ISpiritweb data) + { + SpiritwebCapability playerSpiritweb = (SpiritwebCapability) data; + SandmasterySpiritwebSubmodule submodule = (SandmasterySpiritwebSubmodule) playerSpiritweb.getSubmodule(Manifestations.ManifestationTypes.SANDMASTERY); + LivingEntity living = data.getLiving(); + Level level = living.level(); + BlockPos pos = living.blockPosition().below(); + BlockState state = SandmasteryBlocks.TEMPORARY_SAND_BLOCK.getBlock().defaultBlockState(); + int size = getMode(data) / 2; + pos = pos.offset(-(size + 1), living.isCrouching() ? -1 : 0, -(size + 1)); + for (int x = -size; x <= size; x++) + { + pos = pos.offset(1, 0, 0); + for (int z = -size; z <= size; z++) + { + pos = pos.offset(0, 0, 1); + setBlockIfAir(level, pos, state); + } + pos = pos.offset(0, 0, -(size * 2) - 1); + } + + BlockPos groundPos = MiscHelper.blockPosAtGround(data.getLiving()); + MiscHelper.spawnMasteredSandLine((ServerLevel) data.getLiving().level(), data.getLiving().getEyePosition(), new Vec3(groundPos.getX(), groundPos.getY(), groundPos.getZ())); + + submodule.adjustHydration(-getHydrationCost(data), true, data); + return true; + } +} diff --git a/src/sandmastery/java/leaf/cosmere/sandmastery/common/manifestation/MasteryProjectile.java b/src/sandmastery/java/leaf/cosmere/sandmastery/common/manifestation/MasteryProjectile.java new file mode 100644 index 000000000..37e1e5232 --- /dev/null +++ b/src/sandmastery/java/leaf/cosmere/sandmastery/common/manifestation/MasteryProjectile.java @@ -0,0 +1,98 @@ +/* + * File updated ~ 10 - 8 - 2024 ~ Leaf + */ + +package leaf.cosmere.sandmastery.common.manifestation; + +import leaf.cosmere.api.Manifestations; +import leaf.cosmere.api.Taldain; +import leaf.cosmere.api.spiritweb.ISpiritweb; +import leaf.cosmere.common.cap.entity.SpiritwebCapability; +import leaf.cosmere.sandmastery.common.capabilities.SandmasterySpiritwebSubmodule; +import leaf.cosmere.sandmastery.common.config.SandmasteryConfigs; +import leaf.cosmere.sandmastery.common.registries.SandmasteryItems; +import leaf.cosmere.sandmastery.common.utils.MiscHelper; +import leaf.cosmere.sandmastery.common.utils.SandmasteryConstants; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.item.ItemStack; +import top.theillusivec4.curios.api.CuriosApi; +import top.theillusivec4.curios.api.SlotResult; + +import java.util.List; + +public class MasteryProjectile extends SandmasteryManifestation +{ + public MasteryProjectile(Taldain.Mastery mastery) + { + super(mastery); + } + + @Override + protected int getBaseCost() + { + return 100; + } + + @Override + public boolean tick(ISpiritweb data) + { + SandmasterySpiritwebSubmodule submodule = SandmasterySpiritwebSubmodule.get(data); + submodule.tickProjectileCooldown(); + + if (!submodule.projectileReady()) + { + return false; + } + + boolean enabledViaHotkey = MiscHelper.enabledViaHotkey(data, SandmasteryConstants.PROJECTILE_HOTKEY_FLAG); + if (getMode(data) > 0 && enabledViaHotkey) + { + submodule.setProjectileCooldown(SandmasteryConfigs.SERVER.PROJECTILE_COOLDOWN.get() / getMode(data)); + return performEffectServer(data); + } + return false; + } + + protected boolean performEffectServer(ISpiritweb data) + { + SpiritwebCapability playerSpiritweb = (SpiritwebCapability) data; + ServerPlayer player = (ServerPlayer) data.getLiving(); + SandmasterySpiritwebSubmodule submodule = (SandmasterySpiritwebSubmodule) playerSpiritweb.getSubmodule(Manifestations.ManifestationTypes.SANDMASTERY); + + if (notEnoughChargedSand(data)) + { + return false; + } + for (int i = 0; i < player.getInventory().getContainerSize(); i++) + { + ItemStack pouch = player.getInventory().getItem(i); + if (!pouch.isEmpty() && pouch.is(SandmasteryItems.SAND_POUCH_ITEM.get())) + { + SandmasteryItems.SAND_POUCH_ITEM.get().shoot(pouch, player); + break; + } + } + + CuriosApi.getCuriosInventory(player).ifPresent(handler -> + { + List pouchesFound = handler.findCurios(SandmasteryItems.SAND_POUCH_ITEM.get()); + if (pouchesFound != null) + { + for (SlotResult pouchResult : pouchesFound) + { + ItemStack pouch = pouchResult.stack(); + if (!pouch.isEmpty() && pouch.is(SandmasteryItems.SAND_POUCH_ITEM.get())) + { + SandmasteryItems.SAND_POUCH_ITEM.get().shoot(pouch, player); + break; + } + } + } + }); + + submodule.adjustHydration(-getHydrationCost(data), true, data); + useChargedSand(data); + return true; + } + +} diff --git a/src/sandmastery/java/leaf/cosmere/sandmastery/common/manifestation/SandmasteryManifestation.java b/src/sandmastery/java/leaf/cosmere/sandmastery/common/manifestation/SandmasteryManifestation.java new file mode 100644 index 000000000..79eee94d6 --- /dev/null +++ b/src/sandmastery/java/leaf/cosmere/sandmastery/common/manifestation/SandmasteryManifestation.java @@ -0,0 +1,202 @@ +/* + * File updated ~ 18 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.sandmastery.common.manifestation; + +import leaf.cosmere.api.Constants; +import leaf.cosmere.api.CosmereAPI; +import leaf.cosmere.api.Manifestations; +import leaf.cosmere.api.Taldain; +import leaf.cosmere.api.helpers.StackNBTHelper; +import leaf.cosmere.api.manifestation.Manifestation; +import leaf.cosmere.api.spiritweb.ISpiritweb; +import leaf.cosmere.common.cap.entity.SpiritwebCapability; +import leaf.cosmere.common.charge.ItemChargeHelper; +import leaf.cosmere.sandmastery.common.capabilities.SandmasterySpiritwebSubmodule; +import leaf.cosmere.sandmastery.common.config.SandmasteryConfigs; +import leaf.cosmere.sandmastery.common.items.SandPouchItem; +import leaf.cosmere.sandmastery.common.registries.SandmasteryAttributes; +import leaf.cosmere.sandmastery.common.registries.SandmasteryManifestations; +import leaf.cosmere.sandmastery.common.utils.MiscHelper; +import net.minecraft.world.entity.ai.attributes.Attribute; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; + +import java.util.List; +import java.util.function.Predicate; + +public class SandmasteryManifestation extends Manifestation +{ + protected final Taldain.Mastery mastery; + + public SandmasteryManifestation(Taldain.Mastery mastery) + { + super(Manifestations.ManifestationTypes.SANDMASTERY); + this.mastery = mastery; + } + + @Override + public int getPowerID() + { + return mastery.getID(); + } + + @Override + public int modeMin(ISpiritweb data) + { + return 0; + } + + @Override + public int modeMax(ISpiritweb data) + { + return (int) data.getSelectedManifestation().getStrength(data, false); + } + + @Override + public int getModeModifier(ISpiritweb data, Manifestation manifestation, int requestedModifier) + { + SpiritwebCapability playerSpiritweb = (SpiritwebCapability) data; + SandmasterySpiritwebSubmodule submodule = (SandmasterySpiritwebSubmodule) playerSpiritweb.getSubmodule(Manifestations.ManifestationTypes.SANDMASTERY); + sanityCheckRibbons(data); //todo: find a better way of doing this, I don't want to loop over the manifestations every time + requestedModifier *= ((SandmasteryManifestation) manifestation).getRibbonsPerLevel(data); + if (requestedModifier > 0) + { + if (manifestation.getMode(data) >= modeMax(data)) return 0; + return submodule.requstRibbons(data, this, requestedModifier); + } + else if (requestedModifier < 0) + { + if (manifestation.getMode(data) <= modeMin(data)) return 0; + return -submodule.returnRibbons(data, this, -requestedModifier); // function expects the number of returned ribbons to be positive, and returns the number of ribbons returned as a positive integer. + } + return requestedModifier; + } + + public void sanityCheckRibbons(ISpiritweb data) + { + int ribbons = 0; + for (Manifestation manifestation : CosmereAPI.manifestationRegistry()) + { + if (manifestation.getManifestationType() == Manifestations.ManifestationTypes.SANDMASTERY) + { + ribbons += data.getMode(manifestation); + } + } + SpiritwebCapability playerSpiritweb = (SpiritwebCapability) data; + SandmasterySpiritwebSubmodule submodule = (SandmasterySpiritwebSubmodule) playerSpiritweb.getSubmodule(Manifestations.ManifestationTypes.SANDMASTERY); + if (ribbons != submodule.getUsedRibbons()) + { + submodule.setUsedRibbons(ribbons); + } + } + + public int getRibbonsPerLevel(ISpiritweb data) + { + return 1; + } + + protected boolean notEnoughChargedSand(ISpiritweb data) + { + if (data.getLiving() instanceof Player player) + { + List allPouches = getSandPouches(player); + int required = getSandCost(data); + + if (allPouches.isEmpty()) + { + return true; + } + + int count = 0; + for (ItemStack stack : allPouches) + { + count += StackNBTHelper.getInt(stack, Constants.NBT.CHARGE_LEVEL, 0); + if (count > required) + { + return false; + } + } + } + return true; + } + + public void useChargedSand(ISpiritweb data) + { + if (data.getLiving() instanceof Player player) + { + List allPouches = getSandPouches(player); + + int changeLeft = getSandCost(data); + for (ItemStack stack : allPouches) + { + int startingCharge = StackNBTHelper.getInt(stack, Constants.NBT.CHARGE_LEVEL, 0); + int amountLeft = (startingCharge - changeLeft); + if (amountLeft >= 0) + { + StackNBTHelper.setInt(stack, Constants.NBT.CHARGE_LEVEL, amountLeft); + } + else + { + StackNBTHelper.setInt(stack, Constants.NBT.CHARGE_LEVEL, 0); + changeLeft += amountLeft; + } + if (changeLeft <= 0) + { + break; + } + } + } + } + + protected List getSandPouches(Player player) + { + List curios = ItemChargeHelper.getChargeCurios(player); + List items = ItemChargeHelper.getChargeItems(player); + + curios.removeIf(getIsItemInvalid()); + items.removeIf(getIsItemInvalid()); + + curios.addAll(items); + + return curios; + } + + protected int getBaseCost() + { + return 10; + } + + public int getSandCost(ISpiritweb data) + { + int preModifiedCost = MiscHelper.distanceFromGround(data.getLiving()) * getBaseCost(); + if (preModifiedCost < 0) + preModifiedCost = 1000000000; // If the cost is less than 0, I am over the void. Cost should be high enough cost that you can't reasonably use the power + return preModifiedCost * SandmasteryConfigs.SERVER.CHARGE_COST_MULTIPLIER.get(); + } + + public int getHydrationCost(ISpiritweb data) + { + return (int) Math.round(getSandCost(data) * SandmasteryConfigs.SERVER.HYDRATION_COST_MULTIPLIER.get()); + } + + private static Predicate getIsItemInvalid() + { + return obj -> + { + if (obj.getItem() instanceof SandPouchItem) + { + return false; + } + return true; + }; + } + + @Override + public Attribute getAttribute() + { + return SandmasteryAttributes.RIBBONS.getAttribute(); + } + +} diff --git a/src/sandmastery/java/leaf/cosmere/sandmastery/common/network/SandmasteryPacketHandler.java b/src/sandmastery/java/leaf/cosmere/sandmastery/common/network/SandmasteryPacketHandler.java new file mode 100644 index 000000000..06086f210 --- /dev/null +++ b/src/sandmastery/java/leaf/cosmere/sandmastery/common/network/SandmasteryPacketHandler.java @@ -0,0 +1,33 @@ +/* + * File updated ~ 8 - 10 - 2022 ~ Leaf + */ + +package leaf.cosmere.sandmastery.common.network; + +import leaf.cosmere.sandmastery.common.network.packets.PlayerShootSandProjectileMessage; +import leaf.cosmere.common.Cosmere; +import leaf.cosmere.common.network.BasePacketHandler; +import leaf.cosmere.sandmastery.common.Sandmastery; +import leaf.cosmere.sandmastery.common.network.packets.SyncMasteryBindsMessage; +import net.minecraftforge.network.simple.SimpleChannel; + +public class SandmasteryPacketHandler extends BasePacketHandler +{ + private final SimpleChannel NETWORK_CHANNEL = createChannel(Cosmere.rl(Sandmastery.MODID), Sandmastery.instance.versionNumber); + + @Override + protected SimpleChannel getChannel() + { + return NETWORK_CHANNEL; + } + + @Override + public void initialize() + { + registerClientToServer(PlayerShootSandProjectileMessage.class, PlayerShootSandProjectileMessage::decode); + registerClientToServer(SyncMasteryBindsMessage.class, SyncMasteryBindsMessage::decode); + + } + + +} diff --git a/src/sandmastery/java/leaf/cosmere/sandmastery/common/network/packets/PlayerShootSandProjectileMessage.java b/src/sandmastery/java/leaf/cosmere/sandmastery/common/network/packets/PlayerShootSandProjectileMessage.java new file mode 100644 index 000000000..b3c40b35c --- /dev/null +++ b/src/sandmastery/java/leaf/cosmere/sandmastery/common/network/packets/PlayerShootSandProjectileMessage.java @@ -0,0 +1,42 @@ +/* + * File updated ~ 8 - 10 - 2022 ~ Leaf + */ + +package leaf.cosmere.sandmastery.common.network.packets; + +import leaf.cosmere.common.cap.entity.SpiritwebCapability; +import leaf.cosmere.common.network.ICosmerePacket; +import leaf.cosmere.sandmastery.common.registries.SandmasteryItems; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.server.MinecraftServer; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.item.ItemStack; +import net.minecraftforge.network.NetworkEvent; + +public class PlayerShootSandProjectileMessage implements ICosmerePacket +{ + public PlayerShootSandProjectileMessage() + { + //empty + } + + @Override + public void encode(FriendlyByteBuf buf) + { + //empty + } + + public static PlayerShootSandProjectileMessage decode(FriendlyByteBuf buf) + { + return new PlayerShootSandProjectileMessage(); + } + + @Override + public void handle(NetworkEvent.Context context) + { + ServerPlayer player = context.getSender(); + MinecraftServer server = player.getServer(); + + } + +} diff --git a/src/sandmastery/java/leaf/cosmere/sandmastery/common/network/packets/SyncMasteryBindsMessage.java b/src/sandmastery/java/leaf/cosmere/sandmastery/common/network/packets/SyncMasteryBindsMessage.java new file mode 100644 index 000000000..c09739593 --- /dev/null +++ b/src/sandmastery/java/leaf/cosmere/sandmastery/common/network/packets/SyncMasteryBindsMessage.java @@ -0,0 +1,49 @@ +/* + * File updated ~ 10 - 2 - 2023 ~ Leaf + */ + +package leaf.cosmere.sandmastery.common.network.packets; + +import leaf.cosmere.api.Manifestations; +import leaf.cosmere.common.cap.entity.SpiritwebCapability; +import leaf.cosmere.common.network.ICosmerePacket; +import leaf.cosmere.sandmastery.common.capabilities.SandmasterySpiritwebSubmodule; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.server.MinecraftServer; +import net.minecraft.server.level.ServerPlayer; +import net.minecraftforge.network.NetworkEvent; + +public class SyncMasteryBindsMessage implements ICosmerePacket +{ + public int flags; + + public SyncMasteryBindsMessage(int flags) + { + this.flags = flags; + } + + @Override + public void encode(FriendlyByteBuf buf) + { + buf.writeInt(flags); + } + + public static SyncMasteryBindsMessage decode(FriendlyByteBuf buf) + { + return new SyncMasteryBindsMessage(buf.readInt()); + } + + @Override + public void handle(NetworkEvent.Context context) + { + ServerPlayer sender = context.getSender(); + MinecraftServer server = sender.getServer(); + server.submitAsync(() -> SpiritwebCapability.get(sender).ifPresent((cap) -> + { + SpiritwebCapability spiritweb = (SpiritwebCapability) cap; + SandmasterySpiritwebSubmodule sb = (SandmasterySpiritwebSubmodule) spiritweb.getSubmodule(Manifestations.ManifestationTypes.SANDMASTERY); + sb.updateFlags(this.flags); + })); + } + +} diff --git a/src/sandmastery/java/leaf/cosmere/sandmastery/common/registries/SandmasteryAttributes.java b/src/sandmastery/java/leaf/cosmere/sandmastery/common/registries/SandmasteryAttributes.java new file mode 100644 index 000000000..825664b7f --- /dev/null +++ b/src/sandmastery/java/leaf/cosmere/sandmastery/common/registries/SandmasteryAttributes.java @@ -0,0 +1,29 @@ +/* + * File updated ~ 19 - 3 - 2024 ~ Leaf + */ + +package leaf.cosmere.sandmastery.common.registries; + +import leaf.cosmere.common.registration.impl.AttributeDeferredRegister; +import leaf.cosmere.common.registration.impl.AttributeRegistryObject; +import leaf.cosmere.sandmastery.common.Sandmastery; +import net.minecraft.world.entity.ai.attributes.Attribute; + +import java.util.UUID; + +public class SandmasteryAttributes +{ + public static final AttributeDeferredRegister ATTRIBUTES = new AttributeDeferredRegister(Sandmastery.MODID); + + public static final AttributeRegistryObject RIBBONS = + ATTRIBUTES.register( + "ribbons", + Sandmastery.MODID, + 0, + 0, + 24 + ); + //UUIDs for permanent modifier to player's ribbon attribute + public static final UUID OVERMASTERY_UUID = UUID.nameUUIDFromBytes("Overmastery".getBytes()); + public static final UUID OVERMASTERY_SECONDARY_UUID = UUID.nameUUIDFromBytes("Overmastery2".getBytes()); +} diff --git a/src/sandmastery/java/leaf/cosmere/sandmastery/common/registries/SandmasteryBlockEntitiesRegistry.java b/src/sandmastery/java/leaf/cosmere/sandmastery/common/registries/SandmasteryBlockEntitiesRegistry.java new file mode 100644 index 000000000..49d90a0c0 --- /dev/null +++ b/src/sandmastery/java/leaf/cosmere/sandmastery/common/registries/SandmasteryBlockEntitiesRegistry.java @@ -0,0 +1,23 @@ +/* + * File updated ~ 10 - 8 - 2024 ~ Leaf + */ + +package leaf.cosmere.sandmastery.common.registries; + +import leaf.cosmere.sandmastery.common.Sandmastery; +import leaf.cosmere.sandmastery.common.blocks.entities.SandJarBE; +import leaf.cosmere.sandmastery.common.blocks.entities.SandSpreaderBE; +import leaf.cosmere.sandmastery.common.blocks.entities.TemporarySandBE; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.RegistryObject; + +public class SandmasteryBlockEntitiesRegistry +{ + public static final DeferredRegister> BLOCK_ENTITIES = DeferredRegister.create(ForgeRegistries.BLOCK_ENTITY_TYPES, Sandmastery.MODID); + + public static final RegistryObject> SAND_JAR_BE = BLOCK_ENTITIES.register("sand_jar_be", () -> BlockEntityType.Builder.of(SandJarBE::new, SandmasteryBlocks.SAND_JAR_BLOCK.getBlock()).build(null)); + public static final RegistryObject> SAND_SPREADER_BE = BLOCK_ENTITIES.register("sand_spreader_be", () -> BlockEntityType.Builder.of(SandSpreaderBE::new, SandmasteryBlocks.SAND_SPREADING_TUB_BLOCK.getBlock()).build(null)); + public static final RegistryObject> TEMPORARY_SAND_BE = BLOCK_ENTITIES.register("temporary_sand_be", () -> BlockEntityType.Builder.of(TemporarySandBE::new, SandmasteryBlocks.TEMPORARY_SAND_BLOCK.getBlock()).build(null)); +} diff --git a/src/sandmastery/java/leaf/cosmere/sandmastery/common/registries/SandmasteryBlocks.java b/src/sandmastery/java/leaf/cosmere/sandmastery/common/registries/SandmasteryBlocks.java new file mode 100644 index 000000000..9d1bcaefa --- /dev/null +++ b/src/sandmastery/java/leaf/cosmere/sandmastery/common/registries/SandmasteryBlocks.java @@ -0,0 +1,27 @@ +/* + * File updated ~ 24 - 4 - 2021 ~ Leaf + * Special thank you to SizableShrimp from the Forge Project discord! + * Java isn't my first programming language, so I didn't know you could collect and set up items like this! + * Makes setting up items for metals a breeze~ + */ + +package leaf.cosmere.sandmastery.common.registries; + +import leaf.cosmere.common.registration.impl.BlockDeferredRegister; +import leaf.cosmere.common.registration.impl.BlockRegistryObject; +import leaf.cosmere.sandmastery.common.Sandmastery; +import leaf.cosmere.sandmastery.common.blocks.*; +import net.minecraft.world.item.BlockItem; + +public class SandmasteryBlocks +{ + public static final BlockDeferredRegister BLOCKS = new BlockDeferredRegister(Sandmastery.MODID); + public static final BlockRegistryObject TALDAIN_BLACK_SAND_LAYER = BLOCKS.register("taldain_sand_layer", TaldainBlackSandLayerBlock::new); + public static final BlockRegistryObject TALDAIN_WHITE_SAND_LAYER = BLOCKS.register("charged_taldain_sand_layer", TaldainWhiteSandLayerBlock::new); + public static final BlockRegistryObject TALDAIN_BLACK_SAND = BLOCKS.register("taldain_sand", TaldainBlackSandBlock::new); + public static final BlockRegistryObject TALDAIN_WHITE_SAND = BLOCKS.register("charged_taldain_sand", TaldainWhiteSandBlock::new); + public static final BlockRegistryObject SAND_JAR_BLOCK = BLOCKS.register("sand_jar_block", SandJarBlock::new); + public static final BlockRegistryObject TEMPORARY_SAND_BLOCK = BLOCKS.register("temporary_sand_block", TemporarySandBlock::new); + public static final BlockRegistryObject SAND_SPREADING_TUB_BLOCK = BLOCKS.register("sand_spreading_tub", SandSpreadingTubBlock::new); + +} diff --git a/src/sandmastery/java/leaf/cosmere/sandmastery/common/registries/SandmasteryCreativeTabs.java b/src/sandmastery/java/leaf/cosmere/sandmastery/common/registries/SandmasteryCreativeTabs.java new file mode 100644 index 000000000..cc637d4ce --- /dev/null +++ b/src/sandmastery/java/leaf/cosmere/sandmastery/common/registries/SandmasteryCreativeTabs.java @@ -0,0 +1,84 @@ +/* + * File updated ~ 10 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.sandmastery.common.registries; + +import leaf.cosmere.common.registration.impl.CreativeTabDeferredRegister; +import leaf.cosmere.common.registration.impl.CreativeTabRegistryObject; +import leaf.cosmere.sandmastery.common.Sandmastery; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceKey; +import net.minecraft.world.item.CreativeModeTab; +import net.minecraft.world.item.CreativeModeTabs; +import net.minecraftforge.event.BuildCreativeModeTabContentsEvent; + +public class SandmasteryCreativeTabs +{ + public static final CreativeTabDeferredRegister CREATIVE_TABS = new CreativeTabDeferredRegister(Sandmastery.MODID, SandmasteryCreativeTabs::addToExistingTabs); + + + public static final CreativeTabRegistryObject ITEMS = + CREATIVE_TABS.registerMain( + Component.translatable("tabs." + Sandmastery.MODID + ".items"), + SandmasteryItems.QIDO_ITEM, + builder -> + builder.withSearchBar()//Allow our tabs to be searchable for convenience purposes + .displayItems((displayParameters, output) -> + { + CreativeTabDeferredRegister.addToDisplay(SandmasteryItems.ITEMS, output); + SandmasteryItems.QIDO_ITEM.get().addFilled(output); + CreativeTabDeferredRegister.addToDisplay(SandmasteryBlocks.BLOCKS, output); + }) + ); + + + private static void addToExistingTabs(BuildCreativeModeTabContentsEvent event) + { + ResourceKey tabKey = event.getTabKey(); + if (tabKey == CreativeModeTabs.BUILDING_BLOCKS) + { + //CreativeTabDeferredRegister.addToDisplay(event, BlocksRegistry.METALWORKING_TABLE); + } + else if (tabKey == CreativeModeTabs.NATURAL_BLOCKS) + { + /*for (var ore : BlocksRegistry.METAL_ORE.values()) + { + CreativeTabDeferredRegister.addToDisplay(event, ore); + } + for (var ore : BlocksRegistry.METAL_ORE_DEEPSLATE.values()) + { + CreativeTabDeferredRegister.addToDisplay(event, ore); + }*/ + } + else if (tabKey == CreativeModeTabs.FUNCTIONAL_BLOCKS) + { + CreativeTabDeferredRegister.addToDisplay(event, SandmasteryBlocks.SAND_JAR_BLOCK); + } + else if (tabKey == CreativeModeTabs.REDSTONE_BLOCKS) + { + CreativeTabDeferredRegister.addToDisplay(event, SandmasteryBlocks.SAND_JAR_BLOCK); + } + else if (tabKey == CreativeModeTabs.TOOLS_AND_UTILITIES) + { + + } + else if (tabKey == CreativeModeTabs.COMBAT) + { + + } + else if (tabKey == CreativeModeTabs.FOOD_AND_DRINKS) + { + //ItemsRegistry.SOME_FOOD.get().addItems(event); + } + else if (tabKey == CreativeModeTabs.SPAWN_EGGS) + { + + } + else if (tabKey == CreativeModeTabs.INGREDIENTS) + { + + } + } + +} diff --git a/src/sandmastery/java/leaf/cosmere/sandmastery/common/registries/SandmasteryDimensions.java b/src/sandmastery/java/leaf/cosmere/sandmastery/common/registries/SandmasteryDimensions.java new file mode 100644 index 000000000..708adeef0 --- /dev/null +++ b/src/sandmastery/java/leaf/cosmere/sandmastery/common/registries/SandmasteryDimensions.java @@ -0,0 +1,25 @@ +/* + * File updated ~ 10 - 8 - 2024 ~ Leaf + */ + +package leaf.cosmere.sandmastery.common.registries; + +import leaf.cosmere.api.CosmereAPI; +import leaf.cosmere.sandmastery.common.Sandmastery; +import net.minecraft.core.registries.Registries; +import net.minecraft.resources.ResourceKey; +import net.minecraft.world.level.Level; + +public class SandmasteryDimensions +{ + public static final ResourceKey DAYSIDE_TALDAIN_DIM_KEY = + ResourceKey.create( + Registries.DIMENSION, + Sandmastery.rl("dayside") + ); + + public static void register() + { + CosmereAPI.logger.info("Registering sandmastery dimensions"); + } +} diff --git a/src/sandmastery/java/leaf/cosmere/sandmastery/common/registries/SandmasteryEffects.java b/src/sandmastery/java/leaf/cosmere/sandmastery/common/registries/SandmasteryEffects.java new file mode 100644 index 000000000..3ac94e1ac --- /dev/null +++ b/src/sandmastery/java/leaf/cosmere/sandmastery/common/registries/SandmasteryEffects.java @@ -0,0 +1,20 @@ +/* + * File updated ~ 18 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.sandmastery.common.registries; + +import leaf.cosmere.api.cosmereEffect.CosmereEffect; +import leaf.cosmere.common.registration.impl.CosmereEffectDeferredRegister; +import leaf.cosmere.common.registration.impl.CosmereEffectRegistryObject; +import leaf.cosmere.sandmastery.common.Sandmastery; +import leaf.cosmere.sandmastery.common.effects.DehydratedEffect; +import leaf.cosmere.sandmastery.common.effects.OvermasteredEffect; + +public class SandmasteryEffects +{ + public static final CosmereEffectDeferredRegister EFFECTS = new CosmereEffectDeferredRegister(Sandmastery.MODID); + + public static final CosmereEffectRegistryObject DEHYDRATED_EFFECT = EFFECTS.register("dehydrated", DehydratedEffect::new); + public static final CosmereEffectRegistryObject OVERMASTERED_EFFECT = EFFECTS.register("overmastered", OvermasteredEffect::new); +} diff --git a/src/sandmastery/java/leaf/cosmere/sandmastery/common/registries/SandmasteryEntityTypes.java b/src/sandmastery/java/leaf/cosmere/sandmastery/common/registries/SandmasteryEntityTypes.java new file mode 100644 index 000000000..6b8f762d8 --- /dev/null +++ b/src/sandmastery/java/leaf/cosmere/sandmastery/common/registries/SandmasteryEntityTypes.java @@ -0,0 +1,26 @@ +/* + * File updated ~ 8 - 10 - 2022 ~ Leaf + */ + +package leaf.cosmere.sandmastery.common.registries; + +import leaf.cosmere.common.registration.impl.EntityTypeDeferredRegister; +import leaf.cosmere.common.registration.impl.EntityTypeRegistryObject; +import leaf.cosmere.sandmastery.common.Sandmastery; +import leaf.cosmere.sandmastery.common.entities.SandProjectile; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.MobCategory; + +public class SandmasteryEntityTypes +{ + public static final EntityTypeDeferredRegister ENTITY_TYPES = new EntityTypeDeferredRegister(Sandmastery.MODID); + + public static final EntityTypeRegistryObject SAND_PROJECTILE = + ENTITY_TYPES.register( + "coin_projectile", + EntityType.Builder.of(SandProjectile::new, MobCategory.MISC) + .sized(0.5F, 0.5F) + .clientTrackingRange(4) + .updateInterval(20)); + +} diff --git a/src/sandmastery/java/leaf/cosmere/sandmastery/common/registries/SandmasteryItems.java b/src/sandmastery/java/leaf/cosmere/sandmastery/common/registries/SandmasteryItems.java new file mode 100644 index 000000000..3376b8142 --- /dev/null +++ b/src/sandmastery/java/leaf/cosmere/sandmastery/common/registries/SandmasteryItems.java @@ -0,0 +1,19 @@ +package leaf.cosmere.sandmastery.common.registries; + + +import leaf.cosmere.common.registration.impl.ItemDeferredRegister; +import leaf.cosmere.common.registration.impl.ItemRegistryObject; +import leaf.cosmere.sandmastery.common.Sandmastery; +import leaf.cosmere.sandmastery.common.items.JarItem; +import leaf.cosmere.sandmastery.common.items.QidoItem; +import leaf.cosmere.sandmastery.common.items.SandJarItem; +import leaf.cosmere.sandmastery.common.items.SandPouchItem; + +public class SandmasteryItems +{ + public static final ItemDeferredRegister ITEMS = new ItemDeferredRegister(Sandmastery.MODID); + public static final ItemRegistryObject QIDO_ITEM = ITEMS.register("qido", QidoItem::new); + public static final ItemRegistryObject SAND_JAR_ITEM = ITEMS.register("sand_jar", SandJarItem::new); + public static final ItemRegistryObject JAR_ITEM = ITEMS.register("jar", JarItem::new); + public static final ItemRegistryObject SAND_POUCH_ITEM = ITEMS.register("sand_pouch", SandPouchItem::new); +} diff --git a/src/sandmastery/java/leaf/cosmere/sandmastery/common/registries/SandmasteryManifestations.java b/src/sandmastery/java/leaf/cosmere/sandmastery/common/registries/SandmasteryManifestations.java new file mode 100644 index 000000000..e30bd2990 --- /dev/null +++ b/src/sandmastery/java/leaf/cosmere/sandmastery/common/registries/SandmasteryManifestations.java @@ -0,0 +1,51 @@ +/* + * File updated ~ 8 - 10 - 2022 ~ Leaf + */ + +package leaf.cosmere.sandmastery.common.registries; + +import leaf.cosmere.api.Taldain; +import leaf.cosmere.common.registration.impl.ManifestationDeferredRegister; +import leaf.cosmere.common.registration.impl.ManifestationRegistryObject; +import leaf.cosmere.sandmastery.common.Sandmastery; +import leaf.cosmere.sandmastery.common.manifestation.*; + +import java.util.Arrays; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +public class SandmasteryManifestations +{ + public static final ManifestationDeferredRegister MANIFESTATIONS = new ManifestationDeferredRegister(Sandmastery.MODID); + + public static final Map> SANDMASTERY_POWERS = + Arrays.stream(Taldain.Mastery.values()) + .collect(Collectors.toMap( + Function.identity(), + investiture -> + MANIFESTATIONS.register( + investiture.getName(), + () -> makeSandmasteryManifestation(investiture)) + )); + + + private static SandmasteryManifestation makeSandmasteryManifestation(Taldain.Mastery mastery) + { + switch (mastery) + { + case LAUNCH: + return new MasteryLaunch(mastery); + case ELEVATE: + return new MasteryElevate(mastery); + case CUSHION: + return new MasteryCushion(mastery); + case PROJECTILE: + return new MasteryProjectile(mastery); + case PLATFORM: + return new MasteryPlatform(mastery); + default: + return new SandmasteryManifestation(mastery); + } + } +} diff --git a/src/sandmastery/java/leaf/cosmere/sandmastery/common/registries/SandmasteryMenuTypes.java b/src/sandmastery/java/leaf/cosmere/sandmastery/common/registries/SandmasteryMenuTypes.java new file mode 100644 index 000000000..b0c6dec82 --- /dev/null +++ b/src/sandmastery/java/leaf/cosmere/sandmastery/common/registries/SandmasteryMenuTypes.java @@ -0,0 +1,25 @@ +/* + * File updated ~ 8 - 10 - 2022 ~ Leaf + */ + +package leaf.cosmere.sandmastery.common.registries; + +import leaf.cosmere.common.registration.impl.MenuTypeDeferredRegister; +import leaf.cosmere.common.registration.impl.MenuTypeRegistryObject; +import leaf.cosmere.sandmastery.common.Sandmastery; +import leaf.cosmere.sandmastery.common.blocks.entities.SandSpreader.SandSpreaderMenu; +import leaf.cosmere.sandmastery.common.items.sandpouch.SandPouchContainerMenu; +import net.minecraft.world.inventory.MenuType; +import net.minecraftforge.common.extensions.IForgeMenuType; + +public class SandmasteryMenuTypes +{ + public static final MenuTypeDeferredRegister MENU_TYPES = new MenuTypeDeferredRegister(Sandmastery.MODID); + public static final MenuTypeRegistryObject> SAND_POUCH = MENU_TYPES.register( + "sand_pouch", + () -> IForgeMenuType.create(SandPouchContainerMenu::fromNetwork)); + public static final MenuTypeRegistryObject> SAND_SPREADER = MENU_TYPES.register( + "sand_spreader", + () -> IForgeMenuType.create(SandSpreaderMenu::new)); + +} diff --git a/src/sandmastery/java/leaf/cosmere/sandmastery/common/utils/MiscHelper.java b/src/sandmastery/java/leaf/cosmere/sandmastery/common/utils/MiscHelper.java new file mode 100644 index 000000000..f2a0a67d5 --- /dev/null +++ b/src/sandmastery/java/leaf/cosmere/sandmastery/common/utils/MiscHelper.java @@ -0,0 +1,288 @@ +/* + * File updated ~ 10 - 8 - 2024 ~ Leaf + */ + +package leaf.cosmere.sandmastery.common.utils; + +import leaf.cosmere.api.Constants; +import leaf.cosmere.api.CosmereAPI; +import leaf.cosmere.api.Manifestations; +import leaf.cosmere.api.helpers.CompoundNBTHelper; +import leaf.cosmere.api.helpers.StackNBTHelper; +import leaf.cosmere.api.manifestation.Manifestation; +import leaf.cosmere.api.spiritweb.ISpiritweb; +import leaf.cosmere.client.Keybindings; +import leaf.cosmere.common.cap.entity.SpiritwebCapability; +import leaf.cosmere.common.registry.AttributesRegistry; +import leaf.cosmere.sandmastery.common.Sandmastery; +import leaf.cosmere.sandmastery.common.registries.SandmasteryBlocks; +import leaf.cosmere.sandmastery.common.registries.SandmasteryDimensions; +import leaf.cosmere.sandmastery.common.registries.SandmasteryItems; +import net.minecraft.core.BlockPos; +import net.minecraft.core.particles.BlockParticleOption; +import net.minecraft.core.particles.ParticleOptions; +import net.minecraft.core.particles.ParticleTypes; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.chat.Component; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.util.Mth; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.ai.attributes.Attribute; +import net.minecraft.world.entity.ai.attributes.AttributeMap; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.Vec3; +import net.minecraftforge.items.ItemStackHandler; + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.ThreadLocalRandom; +import java.util.concurrent.atomic.AtomicBoolean; + +public class MiscHelper +{ + public static boolean checkIfNearbyInvestiture(ServerLevel pLevel, BlockPos pPos, boolean includeMobs) + { + int range = 6; + AABB areaOfEffect = new AABB(pPos).inflate(range, range, range); + List entitiesToCheckForInvesiture = pLevel.getEntitiesOfClass(LivingEntity.class, areaOfEffect, e -> true); + + AtomicBoolean foundSomething = new AtomicBoolean(false); + + for (LivingEntity target : entitiesToCheckForInvesiture) + { + SpiritwebCapability.get(target).ifPresent(targetSpiritweb -> + { + boolean concealed = false; + final AttributeMap targetAttributes = target.getAttributes(); + final Attribute cognitiveConcealmentAttr = AttributesRegistry.COGNITIVE_CONCEALMENT.get(); + if (targetAttributes.hasAttribute(cognitiveConcealmentAttr)) + { + concealed = targetAttributes.getValue(cognitiveConcealmentAttr) > 0; + } + for (Manifestation manifestation : CosmereAPI.manifestationRegistry()) + { + if (concealed) + { + foundSomething.set(false); + break; + } + + final boolean targetIsPlayer = target instanceof Player; + + if (manifestation.getManifestationType() == Manifestations.ManifestationTypes.SANDMASTERY) + { + continue; //sandmastery uses charged sand, and as such won't charge it either + } + + boolean test = targetSpiritweb.hasManifestation(manifestation); + boolean test2 = manifestation.isActive(targetSpiritweb); + Manifestation test3 = manifestation; + + //if target is not a player and has any manifestations at all + if (!targetIsPlayer && targetSpiritweb.hasManifestation(manifestation) && includeMobs) + { + foundSomething.set(true); + break; + } + //if target is player and has any active manifestations, + else if (targetIsPlayer && manifestation.isActive(targetSpiritweb)) + { + foundSomething.set(true); + break; + } + } + }); + } + return foundSomething.get(); + } + + public static void chargeItemFromInvestiture(ItemStack stack, Level level, Entity pEntity, int maxCharge) + { + if (level.isClientSide()) + { + return; + } + int currCharge = StackNBTHelper.getInt(stack, Constants.NBT.CHARGE_LEVEL, 0); + if (checkIfNearbyInvestiture((ServerLevel) level, pEntity.blockPosition(), false)) + { + StackNBTHelper.setInt(stack, Constants.NBT.CHARGE_LEVEL, Mth.clamp(currCharge + 10, 0, maxCharge)); + } + } + + public static boolean onTaldain(Level pLevel) + { + return pLevel.dimension().equals(SandmasteryDimensions.DAYSIDE_TALDAIN_DIM_KEY); + } + + /** + * @param e Living Entity + * @return the distance between the entity and the first block below it. Returns -1 if above void + */ + public static int distanceFromGround(LivingEntity e) + { + BlockPos pos = e.blockPosition(); + double y = pos.getY(); + int dist = 0; + for (double i = y; i >= e.level().getMinBuildHeight(); i--) + { + BlockState block = e.level().getBlockState(pos.offset(0, -dist, 0)); + if (!block.isAir() && !block.is(SandmasteryBlocks.TEMPORARY_SAND_BLOCK.getBlock())) + { + return dist; + } + dist++; + } + + return -1; + } + + /** + * @param e Living Entity + * @return If above ground, returns the block position of the first block directly below entity, otherwise returns eye position + */ + public static BlockPos blockPosAtGround(LivingEntity e) + { + BlockPos pos = e.blockPosition(); + double y = pos.getY(); + int dist = 0; + for (double i = y; i >= e.level().getMinBuildHeight(); i--) + { + BlockState block = e.level().getBlockState(pos.offset(0, -dist, 0)); + if (!block.isAir() && !block.is(SandmasteryBlocks.TEMPORARY_SAND_BLOCK.getBlock())) + { + return pos.offset(0, -dist, 0); + } + dist++; + } + + Vec3 eyePos = e.getEyePosition(); + return BlockPos.containing(eyePos); + } + + public static boolean isActivatedAndActive(ISpiritweb data, Manifestation manifestation) + { + return (Keybindings.MANIFESTATION_USE_ACTIVE.isDown() && data.getSelectedManifestation() == manifestation.getManifestation()); + } + + public static int getChargeFromItemStack(ItemStack stack) + { + if (stack.isEmpty()) + { + return 0; + } + + if (stack.getItem() == SandmasteryBlocks.TALDAIN_BLACK_SAND_LAYER.asItem()) + { + return stack.getCount() * 10; + } + if (stack.getItem() == SandmasteryBlocks.TALDAIN_BLACK_SAND.asItem()) + { + return stack.getCount() * 80; + } + if (stack.getItem() == SandmasteryItems.SAND_JAR_ITEM.asItem()) + { + return StackNBTHelper.getInt(stack, Constants.NBT.CHARGE_LEVEL, 0); + } + else + { + return 0; + } + } + + public static String intToAbbreviatedStr(int num) + { + if (num < 1e3) + { + return String.valueOf(num); + } + if (num < 1e6) + { + return String.valueOf(num / 1000) + "k"; + } + if (num < 1e9) + { + return String.valueOf(num / 1000000) + "m"; + } + if (num < 1e12) + { + return String.valueOf(num / 1000000000) + "b"; + } + return ""; + } + + public static void logToChat(ISpiritweb data, String msg) + { + if (data.getLiving() instanceof Player player) + { + player.sendSystemMessage(Component.literal(msg)); + } + } + + public static boolean isClient(ISpiritweb data) + { + return data.getLiving().level().isClientSide; + } + + public static int getHotkeyFlags(ISpiritweb data) + { + final CompoundTag dataTag = data.getCompoundTag(); + final CompoundTag sandmasteryTag = CompoundNBTHelper.getOrCreate(dataTag, Sandmastery.MODID); + return sandmasteryTag.getInt(SandmasteryConstants.HOTKEY_TAG); + } + + public static boolean enabledViaHotkey(ISpiritweb data, int requiredFlag) + { + int hotkeyFlags = getHotkeyFlags(data); + boolean enabledViaHotkey = false; + if ((hotkeyFlags & requiredFlag) != 0) + { + enabledViaHotkey = true; + } + if ((hotkeyFlags & 1) != 0) + { + enabledViaHotkey = true; + } + return enabledViaHotkey; + } + + public static int randomSlot(ItemStackHandler itemStackHandler) + { + return ThreadLocalRandom.current().nextInt(0, itemStackHandler.getSlots()); + } + + public static void spawnMasteredSandLine(ServerLevel level, Vec3 pos1, Vec3 pos2) + { + ParticleOptions particleOptions = new BlockParticleOption(ParticleTypes.FALLING_DUST, SandmasteryBlocks.TEMPORARY_SAND_BLOCK.getBlock().defaultBlockState()); + int dist = Mth.floor(pos1.distanceTo(pos2)); + for (Vec3 vector : vectorsBetweenPositions(pos1, pos2, dist)) + { + level.sendParticles(particleOptions, vector.x, vector.y, vector.z, 2, 0, 0, 0, 1); + } + } + + public static ArrayList vectorsBetweenPositions(Vec3 pos1, Vec3 pos2, int steps) + { + ArrayList array = new ArrayList(); + double xDist = pos1.x - pos2.x; + double yDist = pos1.y - pos2.y; + double zDist = pos1.z - pos2.z; + double xStepSize = xDist / steps; + double yStepSize = yDist / steps; + double zStepSize = zDist / steps; + + for (int i = 0; i < steps; i++) + { + double x = pos1.x - (xStepSize * i); + double y = pos1.y - (yStepSize * i); + double z = pos1.z - (zStepSize * i); + array.add(new Vec3(x, y, z)); + } + + return array; + } +} diff --git a/src/sandmastery/java/leaf/cosmere/sandmastery/common/utils/SandmasteryConstants.java b/src/sandmastery/java/leaf/cosmere/sandmastery/common/utils/SandmasteryConstants.java new file mode 100644 index 000000000..187ad2442 --- /dev/null +++ b/src/sandmastery/java/leaf/cosmere/sandmastery/common/utils/SandmasteryConstants.java @@ -0,0 +1,24 @@ +/* + * File updated ~ 10 - 2 - 2023 ~ Leaf + */ + +package leaf.cosmere.sandmastery.common.utils; + +public class SandmasteryConstants +{ + public static final String KEY_SANDMASTERY_LAUNCH = "key.cosmere.sandmastery.launch"; + public static final String KEY_SANDMASTERY_ELEVATE = "key.cosmere.sandmastery.elevate"; + public static final String KEY_SANDMASTERY_PROJECTILE = "key.cosmere.sandmastery.projectile"; + public static final String KEY_SANDMASTERY_PLATFORM = "key.cosmere.sandmastery.platform"; + public static final String HYDRATION_TAG = "hydration_level"; + public static final String PROJECTILE_COOLDOWN_TAG = "projectile_cooldown"; + public static final String LAUNCH_COOLDOWN_TAG = "launch_cooldown"; + public static final String LAUNCHES_SINCE_FLOOR_TAG = "launches_since_floor"; + public static final String HOTKEY_TAG = "hotkeys"; + public static final String RIBBONS_IN_USE_TAG = "ribbons_in_use"; + public static final int CHARGE_PER_SAND_LAYER = 100; + public static final int ELEVATE_HOTKEY_FLAG = 2; + public static final int LAUNCH_HOTKEY_FLAG = 4; + public static final int PROJECTILE_HOTKEY_FLAG = 8; + public static final int PLATFORM_HOTKEY_FLAG = 16; +} diff --git a/src/sandmastery/java/leaf/cosmere/sandmastery/mixin/EffectInstanceMixin.java b/src/sandmastery/java/leaf/cosmere/sandmastery/mixin/EffectInstanceMixin.java new file mode 100644 index 000000000..c7b0e5398 --- /dev/null +++ b/src/sandmastery/java/leaf/cosmere/sandmastery/mixin/EffectInstanceMixin.java @@ -0,0 +1,14 @@ +/* + * File updated ~ 18 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.sandmastery.mixin; + +import net.minecraft.world.effect.MobEffectInstance; +import org.spongepowered.asm.mixin.Mixin; + +@Mixin(MobEffectInstance.class) +public class EffectInstanceMixin +{ + +} \ No newline at end of file diff --git a/src/sandmastery/resources/META-INF/mods.toml b/src/sandmastery/resources/META-INF/mods.toml new file mode 100644 index 000000000..f6d984882 --- /dev/null +++ b/src/sandmastery/resources/META-INF/mods.toml @@ -0,0 +1,26 @@ +modLoader = "javafml" +loaderVersion = "${loader_version}" +issueTrackerURL = "https://github.com/leafreynolds/Cosmere/issues" +license = "MIT" + +[[mods]] +modId = "sandmastery" +version = "${version}" +displayName = "Cosmere: Sand Mastery" +displayURL = "https://www.curseforge.com/minecraft/mc-mods/cosmere" +authors = "MoonlitJolty" +credits = ''' + +Leaf - A small amount of code and the initial cosmere framework that Sandmastery hooks into +Hawktrav - Various models and textures +Luke13234 - Who wrote much of the Ars Arcanum guide book entries. +''' +logoFile = "logo.png" +description = '''Sand Mastery module for Cosmere.''' + +[[dependencies.sandmastery]] +modId = "cosmere" +mandatory = true +versionRange = "[${version}]" +ordering = "AFTER" +side = "BOTH" \ No newline at end of file diff --git a/src/sandmastery/resources/assets/sandmastery/blockstates/charged_taldain_sand.json b/src/sandmastery/resources/assets/sandmastery/blockstates/charged_taldain_sand.json new file mode 100644 index 000000000..b6a1b6b78 --- /dev/null +++ b/src/sandmastery/resources/assets/sandmastery/blockstates/charged_taldain_sand.json @@ -0,0 +1,5 @@ +{ + "variants": { + "": { "model": "sandmastery:block/white_sand_block" } + } +} \ No newline at end of file diff --git a/src/sandmastery/resources/assets/sandmastery/blockstates/charged_taldain_sand_layer.json b/src/sandmastery/resources/assets/sandmastery/blockstates/charged_taldain_sand_layer.json new file mode 100644 index 000000000..7f36336a6 --- /dev/null +++ b/src/sandmastery/resources/assets/sandmastery/blockstates/charged_taldain_sand_layer.json @@ -0,0 +1,28 @@ +{ + "variants": { + "layers=1": { + "model": "sandmastery:block/white_sand_height2" + }, + "layers=2": { + "model": "sandmastery:block/white_sand_height4" + }, + "layers=3": { + "model": "sandmastery:block/white_sand_height6" + }, + "layers=4": { + "model": "sandmastery:block/white_sand_height8" + }, + "layers=5": { + "model": "sandmastery:block/white_sand_height10" + }, + "layers=6": { + "model": "sandmastery:block/white_sand_height12" + }, + "layers=7": { + "model": "sandmastery:block/white_sand_height14" + }, + "layers=8": { + "model": "sandmastery:block/white_sand_block" + } + } +} \ No newline at end of file diff --git a/src/sandmastery/resources/assets/sandmastery/blockstates/sand_jar_block.json b/src/sandmastery/resources/assets/sandmastery/blockstates/sand_jar_block.json new file mode 100644 index 000000000..6d102ec49 --- /dev/null +++ b/src/sandmastery/resources/assets/sandmastery/blockstates/sand_jar_block.json @@ -0,0 +1,307 @@ +{ + "variants": { + "investiture=0": { + "model": "sandmastery:block/black_sand_jar" + }, + "investiture=1": { + "model": "sandmastery:block/black_sand_jar" + }, + "investiture=2": { + "model": "sandmastery:block/black_sand_jar" + }, + "investiture=3": { + "model": "sandmastery:block/black_sand_jar" + }, + "investiture=4": { + "model": "sandmastery:block/black_sand_jar" + }, + "investiture=5": { + "model": "sandmastery:block/black_sand_jar" + }, + "investiture=6": { + "model": "sandmastery:block/black_sand_jar" + }, + "investiture=7": { + "model": "sandmastery:block/black_sand_jar" + }, + "investiture=8": { + "model": "sandmastery:block/black_sand_jar" + }, + "investiture=9": { + "model": "sandmastery:block/black_sand_jar" + }, + "investiture=10": { + "model": "sandmastery:block/black_sand_jar" + }, + "investiture=11": { + "model": "sandmastery:block/black_sand_jar" + }, + "investiture=12": { + "model": "sandmastery:block/black_sand_jar" + }, + "investiture=13": { + "model": "sandmastery:block/black_sand_jar" + }, + "investiture=14": { + "model": "sandmastery:block/black_sand_jar" + }, + "investiture=15": { + "model": "sandmastery:block/black_sand_jar" + }, + "investiture=16": { + "model": "sandmastery:block/black_sand_jar" + }, + "investiture=17": { + "model": "sandmastery:block/black_sand_jar" + }, + "investiture=18": { + "model": "sandmastery:block/black_sand_jar" + }, + "investiture=19": { + "model": "sandmastery:block/black_sand_jar" + }, + "investiture=20": { + "model": "sandmastery:block/black_sand_jar" + }, + "investiture=21": { + "model": "sandmastery:block/black_sand_jar" + }, + "investiture=22": { + "model": "sandmastery:block/black_sand_jar" + }, + "investiture=23": { + "model": "sandmastery:block/black_sand_jar" + }, + "investiture=24": { + "model": "sandmastery:block/black_sand_jar" + }, + "investiture=25": { + "model": "sandmastery:block/black_sand_jar" + }, + "investiture=26": { + "model": "sandmastery:block/black_sand_jar" + }, + "investiture=27": { + "model": "sandmastery:block/black_sand_jar" + }, + "investiture=28": { + "model": "sandmastery:block/black_sand_jar" + }, + "investiture=29": { + "model": "sandmastery:block/black_sand_jar" + }, + "investiture=30": { + "model": "sandmastery:block/black_sand_jar" + }, + "investiture=31": { + "model": "sandmastery:block/black_sand_jar" + }, + "investiture=32": { + "model": "sandmastery:block/black_sand_jar" + }, + "investiture=33": { + "model": "sandmastery:block/black_sand_jar" + }, + "investiture=34": { + "model": "sandmastery:block/black_sand_jar" + }, + "investiture=35": { + "model": "sandmastery:block/grey_sand_jar" + }, + "investiture=36": { + "model": "sandmastery:block/grey_sand_jar" + }, + "investiture=37": { + "model": "sandmastery:block/grey_sand_jar" + }, + "investiture=38": { + "model": "sandmastery:block/grey_sand_jar" + }, + "investiture=39": { + "model": "sandmastery:block/grey_sand_jar" + }, + "investiture=40": { + "model": "sandmastery:block/grey_sand_jar" + }, + "investiture=41": { + "model": "sandmastery:block/grey_sand_jar" + }, + "investiture=42": { + "model": "sandmastery:block/grey_sand_jar" + }, + "investiture=43": { + "model": "sandmastery:block/grey_sand_jar" + }, + "investiture=44": { + "model": "sandmastery:block/grey_sand_jar" + }, + "investiture=45": { + "model": "sandmastery:block/grey_sand_jar" + }, + "investiture=46": { + "model": "sandmastery:block/grey_sand_jar" + }, + "investiture=47": { + "model": "sandmastery:block/grey_sand_jar" + }, + "investiture=48": { + "model": "sandmastery:block/grey_sand_jar" + }, + "investiture=49": { + "model": "sandmastery:block/grey_sand_jar" + }, + "investiture=50": { + "model": "sandmastery:block/grey_sand_jar" + }, + "investiture=51": { + "model": "sandmastery:block/grey_sand_jar" + }, + "investiture=52": { + "model": "sandmastery:block/grey_sand_jar" + }, + "investiture=53": { + "model": "sandmastery:block/grey_sand_jar" + }, + "investiture=54": { + "model": "sandmastery:block/grey_sand_jar" + }, + "investiture=55": { + "model": "sandmastery:block/grey_sand_jar" + }, + "investiture=56": { + "model": "sandmastery:block/grey_sand_jar" + }, + "investiture=57": { + "model": "sandmastery:block/grey_sand_jar" + }, + "investiture=58": { + "model": "sandmastery:block/grey_sand_jar" + }, + "investiture=59": { + "model": "sandmastery:block/grey_sand_jar" + }, + "investiture=60": { + "model": "sandmastery:block/grey_sand_jar" + }, + "investiture=61": { + "model": "sandmastery:block/grey_sand_jar" + }, + "investiture=62": { + "model": "sandmastery:block/grey_sand_jar" + }, + "investiture=63": { + "model": "sandmastery:block/grey_sand_jar" + }, + "investiture=64": { + "model": "sandmastery:block/grey_sand_jar" + }, + "investiture=65": { + "model": "sandmastery:block/grey_sand_jar" + }, + "investiture=66": { + "model": "sandmastery:block/grey_sand_jar" + }, + "investiture=67": { + "model": "sandmastery:block/white_sand_jar" + }, + "investiture=68": { + "model": "sandmastery:block/white_sand_jar" + }, + "investiture=69": { + "model": "sandmastery:block/white_sand_jar" + }, + "investiture=70": { + "model": "sandmastery:block/white_sand_jar" + }, + "investiture=71": { + "model": "sandmastery:block/white_sand_jar" + }, + "investiture=72": { + "model": "sandmastery:block/white_sand_jar" + }, + "investiture=73": { + "model": "sandmastery:block/white_sand_jar" + }, + "investiture=74": { + "model": "sandmastery:block/white_sand_jar" + }, + "investiture=75": { + "model": "sandmastery:block/white_sand_jar" + }, + "investiture=76": { + "model": "sandmastery:block/white_sand_jar" + }, + "investiture=77": { + "model": "sandmastery:block/white_sand_jar" + }, + "investiture=78": { + "model": "sandmastery:block/white_sand_jar" + }, + "investiture=79": { + "model": "sandmastery:block/white_sand_jar" + }, + "investiture=80": { + "model": "sandmastery:block/white_sand_jar" + }, + "investiture=81": { + "model": "sandmastery:block/white_sand_jar" + }, + "investiture=82": { + "model": "sandmastery:block/white_sand_jar" + }, + "investiture=83": { + "model": "sandmastery:block/white_sand_jar" + }, + "investiture=84": { + "model": "sandmastery:block/white_sand_jar" + }, + "investiture=85": { + "model": "sandmastery:block/white_sand_jar" + }, + "investiture=86": { + "model": "sandmastery:block/white_sand_jar" + }, + "investiture=87": { + "model": "sandmastery:block/white_sand_jar" + }, + "investiture=88": { + "model": "sandmastery:block/white_sand_jar" + }, + "investiture=89": { + "model": "sandmastery:block/white_sand_jar" + }, + "investiture=90": { + "model": "sandmastery:block/white_sand_jar" + }, + "investiture=91": { + "model": "sandmastery:block/white_sand_jar" + }, + "investiture=92": { + "model": "sandmastery:block/white_sand_jar" + }, + "investiture=93": { + "model": "sandmastery:block/white_sand_jar" + }, + "investiture=94": { + "model": "sandmastery:block/white_sand_jar" + }, + "investiture=95": { + "model": "sandmastery:block/white_sand_jar" + }, + "investiture=96": { + "model": "sandmastery:block/white_sand_jar" + }, + "investiture=97": { + "model": "sandmastery:block/white_sand_jar" + }, + "investiture=98": { + "model": "sandmastery:block/white_sand_jar" + }, + "investiture=99": { + "model": "sandmastery:block/white_sand_jar" + }, + "investiture=100": { + "model": "sandmastery:block/white_sand_jar" + } + } +} \ No newline at end of file diff --git a/src/sandmastery/resources/assets/sandmastery/blockstates/sand_spreading_tub.json b/src/sandmastery/resources/assets/sandmastery/blockstates/sand_spreading_tub.json new file mode 100644 index 000000000..b6e562ff5 --- /dev/null +++ b/src/sandmastery/resources/assets/sandmastery/blockstates/sand_spreading_tub.json @@ -0,0 +1,5 @@ +{ + "variants": { + "": { "model": "sandmastery:block/sand_spreading_tub" } + } +} \ No newline at end of file diff --git a/src/sandmastery/resources/assets/sandmastery/blockstates/taldain_sand.json b/src/sandmastery/resources/assets/sandmastery/blockstates/taldain_sand.json new file mode 100644 index 000000000..b7c59481f --- /dev/null +++ b/src/sandmastery/resources/assets/sandmastery/blockstates/taldain_sand.json @@ -0,0 +1,5 @@ +{ + "variants": { + "": { "model": "sandmastery:block/black_sand_block" } + } +} \ No newline at end of file diff --git a/src/sandmastery/resources/assets/sandmastery/blockstates/taldain_sand_layer.json b/src/sandmastery/resources/assets/sandmastery/blockstates/taldain_sand_layer.json new file mode 100644 index 000000000..3524788bf --- /dev/null +++ b/src/sandmastery/resources/assets/sandmastery/blockstates/taldain_sand_layer.json @@ -0,0 +1,28 @@ +{ + "variants": { + "layers=1": { + "model": "sandmastery:block/black_sand_height2" + }, + "layers=2": { + "model": "sandmastery:block/black_sand_height4" + }, + "layers=3": { + "model": "sandmastery:block/black_sand_height6" + }, + "layers=4": { + "model": "sandmastery:block/black_sand_height8" + }, + "layers=5": { + "model": "sandmastery:block/black_sand_height10" + }, + "layers=6": { + "model": "sandmastery:block/black_sand_height12" + }, + "layers=7": { + "model": "sandmastery:block/black_sand_height14" + }, + "layers=8": { + "model": "sandmastery:block/black_sand_block" + } + } +} \ No newline at end of file diff --git a/src/sandmastery/resources/assets/sandmastery/blockstates/temporary_sand_block.json b/src/sandmastery/resources/assets/sandmastery/blockstates/temporary_sand_block.json new file mode 100644 index 000000000..c5b49df14 --- /dev/null +++ b/src/sandmastery/resources/assets/sandmastery/blockstates/temporary_sand_block.json @@ -0,0 +1,361 @@ +{ + "variants": { + "age=0": [ + { + "model": "sandmastery:block/sand_platform_stage5" + }, + { + "model": "sandmastery:block/sand_platform_stage5", + "y": 90 + }, + { + "model": "sandmastery:block/sand_platform_stage5", + "y": 180 + }, + { + "model": "sandmastery:block/sand_platform_stage5", + "y": 270 + } + ], + "age=1": [ + { + "model": "sandmastery:block/sand_platform_stage5" + }, + { + "model": "sandmastery:block/sand_platform_stage5", + "y": 90 + }, + { + "model": "sandmastery:block/sand_platform_stage5", + "y": 180 + }, + { + "model": "sandmastery:block/sand_platform_stage5", + "y": 270 + } + ], + "age=2": [ + { + "model": "sandmastery:block/sand_platform_stage5" + }, + { + "model": "sandmastery:block/sand_platform_stage5", + "y": 90 + }, + { + "model": "sandmastery:block/sand_platform_stage5", + "y": 180 + }, + { + "model": "sandmastery:block/sand_platform_stage5", + "y": 270 + } + ], + "age=3": [ + { + "model": "sandmastery:block/sand_platform_stage5" + }, + { + "model": "sandmastery:block/sand_platform_stage5", + "y": 90 + }, + { + "model": "sandmastery:block/sand_platform_stage5", + "y": 180 + }, + { + "model": "sandmastery:block/sand_platform_stage5", + "y": 270 + } + ], + "age=4": [ + { + "model": "sandmastery:block/sand_platform_stage4" + }, + { + "model": "sandmastery:block/sand_platform_stage4", + "y": 90 + }, + { + "model": "sandmastery:block/sand_platform_stage4", + "y": 180 + }, + { + "model": "sandmastery:block/sand_platform_stage4", + "y": 270 + } + ], + "age=5": [ + { + "model": "sandmastery:block/sand_platform_stage4" + }, + { + "model": "sandmastery:block/sand_platform_stage4", + "y": 90 + }, + { + "model": "sandmastery:block/sand_platform_stage4", + "y": 180 + }, + { + "model": "sandmastery:block/sand_platform_stage4", + "y": 270 + } + ], + "age=6": [ + { + "model": "sandmastery:block/sand_platform_stage4" + }, + { + "model": "sandmastery:block/sand_platform_stage4", + "y": 90 + }, + { + "model": "sandmastery:block/sand_platform_stage4", + "y": 180 + }, + { + "model": "sandmastery:block/sand_platform_stage4", + "y": 270 + } + ], + "age=7": [ + { + "model": "sandmastery:block/sand_platform_stage4" + }, + { + "model": "sandmastery:block/sand_platform_stage4", + "y": 90 + }, + { + "model": "sandmastery:block/sand_platform_stage4", + "y": 180 + }, + { + "model": "sandmastery:block/sand_platform_stage4", + "y": 270 + } + ], + "age=8": [ + { + "model": "sandmastery:block/sand_platform_stage3" + }, + { + "model": "sandmastery:block/sand_platform_stage3", + "y": 90 + }, + { + "model": "sandmastery:block/sand_platform_stage3", + "y": 180 + }, + { + "model": "sandmastery:block/sand_platform_stage3", + "y": 270 + } + ], + "age=9": [ + { + "model": "sandmastery:block/sand_platform_stage3" + }, + { + "model": "sandmastery:block/sand_platform_stage3", + "y": 90 + }, + { + "model": "sandmastery:block/sand_platform_stage3", + "y": 180 + }, + { + "model": "sandmastery:block/sand_platform_stage3", + "y": 270 + } + ], + "age=10": [ + { + "model": "sandmastery:block/sand_platform_stage3" + }, + { + "model": "sandmastery:block/sand_platform_stage3", + "y": 90 + }, + { + "model": "sandmastery:block/sand_platform_stage3", + "y": 180 + }, + { + "model": "sandmastery:block/sand_platform_stage3", + "y": 270 + } + ], + "age=11": [ + { + "model": "sandmastery:block/sand_platform_stage3" + }, + { + "model": "sandmastery:block/sand_platform_stage3", + "y": 90 + }, + { + "model": "sandmastery:block/sand_platform_stage3", + "y": 180 + }, + { + "model": "sandmastery:block/sand_platform_stage3", + "y": 270 + } + ], + "age=12": [ + { + "model": "sandmastery:block/sand_platform_stage2" + }, + { + "model": "sandmastery:block/sand_platform_stage2", + "y": 90 + }, + { + "model": "sandmastery:block/sand_platform_stage2", + "y": 180 + }, + { + "model": "sandmastery:block/sand_platform_stage2", + "y": 270 + } + ], + "age=13": [ + { + "model": "sandmastery:block/sand_platform_stage2" + }, + { + "model": "sandmastery:block/sand_platform_stage2", + "y": 90 + }, + { + "model": "sandmastery:block/sand_platform_stage2", + "y": 180 + }, + { + "model": "sandmastery:block/sand_platform_stage2", + "y": 270 + } + ], + "age=14": [ + { + "model": "sandmastery:block/sand_platform_stage2" + }, + { + "model": "sandmastery:block/sand_platform_stage2", + "y": 90 + }, + { + "model": "sandmastery:block/sand_platform_stage2", + "y": 180 + }, + { + "model": "sandmastery:block/sand_platform_stage2", + "y": 270 + } + ], + "age=15": [ + { + "model": "sandmastery:block/sand_platform_stage2" + }, + { + "model": "sandmastery:block/sand_platform_stage2", + "y": 90 + }, + { + "model": "sandmastery:block/sand_platform_stage2", + "y": 180 + }, + { + "model": "sandmastery:block/sand_platform_stage2", + "y": 270 + } + ], + "age=16": [ + { + "model": "sandmastery:block/sand_platform_stage1" + }, + { + "model": "sandmastery:block/sand_platform_stage1", + "y": 90 + }, + { + "model": "sandmastery:block/sand_platform_stage1", + "y": 180 + }, + { + "model": "sandmastery:block/sand_platform_stage1", + "y": 270 + } + ], + "age=17": [ + { + "model": "sandmastery:block/sand_platform_stage1" + }, + { + "model": "sandmastery:block/sand_platform_stage1", + "y": 90 + }, + { + "model": "sandmastery:block/sand_platform_stage1", + "y": 180 + }, + { + "model": "sandmastery:block/sand_platform_stage1", + "y": 270 + } + ], + "age=18": [ + { + "model": "sandmastery:block/sand_platform_stage1" + }, + { + "model": "sandmastery:block/sand_platform_stage1", + "y": 90 + }, + { + "model": "sandmastery:block/sand_platform_stage1", + "y": 180 + }, + { + "model": "sandmastery:block/sand_platform_stage1", + "y": 270 + } + ], + "age=19": [ + { + "model": "sandmastery:block/sand_platform_stage1" + }, + { + "model": "sandmastery:block/sand_platform_stage1", + "y": 90 + }, + { + "model": "sandmastery:block/sand_platform_stage1", + "y": 180 + }, + { + "model": "sandmastery:block/sand_platform_stage1", + "y": 270 + } + ], + "age=20": [ + { + "model": "sandmastery:block/sand_platform_stage1" + }, + { + "model": "sandmastery:block/sand_platform_stage1", + "y": 90 + }, + { + "model": "sandmastery:block/sand_platform_stage1", + "y": 180 + }, + { + "model": "sandmastery:block/sand_platform_stage1", + "y": 270 + } + ] + } +} \ No newline at end of file diff --git a/src/sandmastery/resources/assets/sandmastery/lang/es_es.json b/src/sandmastery/resources/assets/sandmastery/lang/es_es.json new file mode 100644 index 000000000..fc4aee9b2 --- /dev/null +++ b/src/sandmastery/resources/assets/sandmastery/lang/es_es.json @@ -0,0 +1,31 @@ +{ + "advancements.sandmastery.sandmastery.description": "Test description: Sandmastery", + "advancements.sandmastery.sandmastery.title": "Sandmastery", + "block.sandmastery.charged_taldain_sand": "Charged Taldain Sand", + "block.sandmastery.charged_taldain_sand_layer": "Charged Taldain Sand Layer", + "block.sandmastery.sand_jar_block": "Sand Jar Block", + "block.sandmastery.sand_spreading_tub": "Sand Spreading Tub", + "block.sandmastery.taldain_sand": "Taldain Sand", + "block.sandmastery.taldain_sand_layer": "Taldain Sand Layer", + "block.sandmastery.temporary_sand_block": "Temporary Sand Block", + "death.attack.dehydrated": "%1$s died of dehydration", + "item.sandmastery.jar": "Jar", + "item.sandmastery.qido": "Qido", + "item.sandmastery.sand_jar": "Sand Jar", + "item.sandmastery.sand_pouch": "Sand Pouch", + "itemGroup.sandmastery": "Sandmastery Items", + "key.cosmere.sandmastery.elevate": "Use Elevate Mastery", + "key.cosmere.sandmastery.launch": "Use Launch Mastery", + "key.cosmere.sandmastery.platform": "Use Platform Mastery", + "key.cosmere.sandmastery.projectile": "Use Projectile Mastery", + "manifestation.sandmastery.cushion": "Sand Mastery Cushion", + "manifestation.sandmastery.cushion.description": "Masters can use cushion", + "manifestation.sandmastery.elevate": "Sand Mastery Elevate", + "manifestation.sandmastery.elevate.description": "Masters can use elevate", + "manifestation.sandmastery.launch": "Sand Mastery Launch", + "manifestation.sandmastery.launch.description": "Masters can use launch", + "manifestation.sandmastery.platform": "Sand Mastery Platform", + "manifestation.sandmastery.platform.description": "Masters can use platform", + "manifestation.sandmastery.projectile": "Sand Mastery Projectile", + "manifestation.sandmastery.projectile.description": "Masters can use projectile" +} \ No newline at end of file diff --git a/src/sandmastery/resources/assets/sandmastery/lang/sv_se.json b/src/sandmastery/resources/assets/sandmastery/lang/sv_se.json new file mode 100644 index 000000000..fc4aee9b2 --- /dev/null +++ b/src/sandmastery/resources/assets/sandmastery/lang/sv_se.json @@ -0,0 +1,31 @@ +{ + "advancements.sandmastery.sandmastery.description": "Test description: Sandmastery", + "advancements.sandmastery.sandmastery.title": "Sandmastery", + "block.sandmastery.charged_taldain_sand": "Charged Taldain Sand", + "block.sandmastery.charged_taldain_sand_layer": "Charged Taldain Sand Layer", + "block.sandmastery.sand_jar_block": "Sand Jar Block", + "block.sandmastery.sand_spreading_tub": "Sand Spreading Tub", + "block.sandmastery.taldain_sand": "Taldain Sand", + "block.sandmastery.taldain_sand_layer": "Taldain Sand Layer", + "block.sandmastery.temporary_sand_block": "Temporary Sand Block", + "death.attack.dehydrated": "%1$s died of dehydration", + "item.sandmastery.jar": "Jar", + "item.sandmastery.qido": "Qido", + "item.sandmastery.sand_jar": "Sand Jar", + "item.sandmastery.sand_pouch": "Sand Pouch", + "itemGroup.sandmastery": "Sandmastery Items", + "key.cosmere.sandmastery.elevate": "Use Elevate Mastery", + "key.cosmere.sandmastery.launch": "Use Launch Mastery", + "key.cosmere.sandmastery.platform": "Use Platform Mastery", + "key.cosmere.sandmastery.projectile": "Use Projectile Mastery", + "manifestation.sandmastery.cushion": "Sand Mastery Cushion", + "manifestation.sandmastery.cushion.description": "Masters can use cushion", + "manifestation.sandmastery.elevate": "Sand Mastery Elevate", + "manifestation.sandmastery.elevate.description": "Masters can use elevate", + "manifestation.sandmastery.launch": "Sand Mastery Launch", + "manifestation.sandmastery.launch.description": "Masters can use launch", + "manifestation.sandmastery.platform": "Sand Mastery Platform", + "manifestation.sandmastery.platform.description": "Masters can use platform", + "manifestation.sandmastery.projectile": "Sand Mastery Projectile", + "manifestation.sandmastery.projectile.description": "Masters can use projectile" +} \ No newline at end of file diff --git a/src/sandmastery/resources/assets/sandmastery/models/block/black_sand_block.json b/src/sandmastery/resources/assets/sandmastery/models/block/black_sand_block.json new file mode 100644 index 000000000..132f5957b --- /dev/null +++ b/src/sandmastery/resources/assets/sandmastery/models/block/black_sand_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "sandmastery:block/black_sand" + } +} \ No newline at end of file diff --git a/src/sandmastery/resources/assets/sandmastery/models/block/black_sand_height10.json b/src/sandmastery/resources/assets/sandmastery/models/block/black_sand_height10.json new file mode 100644 index 000000000..b585f73f5 --- /dev/null +++ b/src/sandmastery/resources/assets/sandmastery/models/block/black_sand_height10.json @@ -0,0 +1,19 @@ +{ + "textures": { + "particle": "sandmastery:block/black_sand", + "texture": "sandmastery:block/black_sand" + }, + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 10, 16 ], + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "cullface": "down" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 6, 16, 16 ], "texture": "#texture", "cullface": "north" }, + "south": { "uv": [ 0, 6, 16, 16 ], "texture": "#texture", "cullface": "south" }, + "west": { "uv": [ 0, 6, 16, 16 ], "texture": "#texture", "cullface": "west" }, + "east": { "uv": [ 0, 6, 16, 16 ], "texture": "#texture", "cullface": "east" } + } + } + ] +} diff --git a/src/sandmastery/resources/assets/sandmastery/models/block/black_sand_height12.json b/src/sandmastery/resources/assets/sandmastery/models/block/black_sand_height12.json new file mode 100644 index 000000000..50b274e23 --- /dev/null +++ b/src/sandmastery/resources/assets/sandmastery/models/block/black_sand_height12.json @@ -0,0 +1,19 @@ +{ + "textures": { + "particle": "sandmastery:block/black_sand", + "texture": "sandmastery:block/black_sand" + }, + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 12, 16 ], + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "cullface": "down" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 4, 16, 16 ], "texture": "#texture", "cullface": "north" }, + "south": { "uv": [ 0, 4, 16, 16 ], "texture": "#texture", "cullface": "south" }, + "west": { "uv": [ 0, 4, 16, 16 ], "texture": "#texture", "cullface": "west" }, + "east": { "uv": [ 0, 4, 16, 16 ], "texture": "#texture", "cullface": "east" } + } + } + ] +} diff --git a/src/sandmastery/resources/assets/sandmastery/models/block/black_sand_height14.json b/src/sandmastery/resources/assets/sandmastery/models/block/black_sand_height14.json new file mode 100644 index 000000000..2dc13ad40 --- /dev/null +++ b/src/sandmastery/resources/assets/sandmastery/models/block/black_sand_height14.json @@ -0,0 +1,19 @@ +{ + "textures": { + "particle": "sandmastery:block/black_sand", + "texture": "sandmastery:block/black_sand" + }, + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 14, 16 ], + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "cullface": "down" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 2, 16, 16 ], "texture": "#texture", "cullface": "north" }, + "south": { "uv": [ 0, 2, 16, 16 ], "texture": "#texture", "cullface": "south" }, + "west": { "uv": [ 0, 2, 16, 16 ], "texture": "#texture", "cullface": "west" }, + "east": { "uv": [ 0, 2, 16, 16 ], "texture": "#texture", "cullface": "east" } + } + } + ] +} diff --git a/src/sandmastery/resources/assets/sandmastery/models/block/black_sand_height2.json b/src/sandmastery/resources/assets/sandmastery/models/block/black_sand_height2.json new file mode 100644 index 000000000..55445c658 --- /dev/null +++ b/src/sandmastery/resources/assets/sandmastery/models/block/black_sand_height2.json @@ -0,0 +1,20 @@ +{ + "parent": "block/thin_block", + "textures": { + "particle": "sandmastery:block/black_sand", + "texture": "sandmastery:block/black_sand" + }, + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 2, 16 ], + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "cullface": "down" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 14, 16, 16 ], "texture": "#texture", "cullface": "north" }, + "south": { "uv": [ 0, 14, 16, 16 ], "texture": "#texture", "cullface": "south" }, + "west": { "uv": [ 0, 14, 16, 16 ], "texture": "#texture", "cullface": "west" }, + "east": { "uv": [ 0, 14, 16, 16 ], "texture": "#texture", "cullface": "east" } + } + } + ] +} diff --git a/src/sandmastery/resources/assets/sandmastery/models/block/black_sand_height4.json b/src/sandmastery/resources/assets/sandmastery/models/block/black_sand_height4.json new file mode 100644 index 000000000..8df15a193 --- /dev/null +++ b/src/sandmastery/resources/assets/sandmastery/models/block/black_sand_height4.json @@ -0,0 +1,19 @@ +{ + "textures": { + "particle": "sandmastery:block/black_sand", + "texture": "sandmastery:block/black_sand" + }, + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 4, 16 ], + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "cullface": "down" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 12, 16, 16 ], "texture": "#texture", "cullface": "north" }, + "south": { "uv": [ 0, 12, 16, 16 ], "texture": "#texture", "cullface": "south" }, + "west": { "uv": [ 0, 12, 16, 16 ], "texture": "#texture", "cullface": "west" }, + "east": { "uv": [ 0, 12, 16, 16 ], "texture": "#texture", "cullface": "east" } + } + } + ] +} diff --git a/src/sandmastery/resources/assets/sandmastery/models/block/black_sand_height6.json b/src/sandmastery/resources/assets/sandmastery/models/block/black_sand_height6.json new file mode 100644 index 000000000..7699da20f --- /dev/null +++ b/src/sandmastery/resources/assets/sandmastery/models/block/black_sand_height6.json @@ -0,0 +1,19 @@ +{ + "textures": { + "particle": "sandmastery:block/black_sand", + "texture": "sandmastery:block/black_sand" + }, + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 6, 16 ], + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "cullface": "down" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 10, 16, 16 ], "texture": "#texture", "cullface": "north" }, + "south": { "uv": [ 0, 10, 16, 16 ], "texture": "#texture", "cullface": "south" }, + "west": { "uv": [ 0, 10, 16, 16 ], "texture": "#texture", "cullface": "west" }, + "east": { "uv": [ 0, 10, 16, 16 ], "texture": "#texture", "cullface": "east" } + } + } + ] +} diff --git a/src/sandmastery/resources/assets/sandmastery/models/block/black_sand_height8.json b/src/sandmastery/resources/assets/sandmastery/models/block/black_sand_height8.json new file mode 100644 index 000000000..81877fff1 --- /dev/null +++ b/src/sandmastery/resources/assets/sandmastery/models/block/black_sand_height8.json @@ -0,0 +1,19 @@ +{ + "textures": { + "particle": "sandmastery:block/black_sand", + "texture": "sandmastery:block/black_sand" + }, + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 8, 16 ], + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "cullface": "down" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 8, 16, 16 ], "texture": "#texture", "cullface": "north" }, + "south": { "uv": [ 0, 8, 16, 16 ], "texture": "#texture", "cullface": "south" }, + "west": { "uv": [ 0, 8, 16, 16 ], "texture": "#texture", "cullface": "west" }, + "east": { "uv": [ 0, 8, 16, 16 ], "texture": "#texture", "cullface": "east" } + } + } + ] +} diff --git a/src/sandmastery/resources/assets/sandmastery/models/block/black_sand_jar.json b/src/sandmastery/resources/assets/sandmastery/models/block/black_sand_jar.json new file mode 100644 index 000000000..d5ed6b6cc --- /dev/null +++ b/src/sandmastery/resources/assets/sandmastery/models/block/black_sand_jar.json @@ -0,0 +1,517 @@ +{ + "credit": "Made with Blockbench", + "texture_size": [64, 64], + "textures": { + "2": "sandmastery:block/black_sand_jar", + "particle": "sandmastery:block/black_sand_jar" + }, + "elements": [ + { + "from": [4, 0, 4], + "to": [12, 1, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.0625, 8.25, 0]}, + "faces": { + "north": {"uv": [9.5, 1.5, 11.5, 1.75], "texture": "#2"}, + "east": {"uv": [10, 8.25, 12, 8.5], "texture": "#2"}, + "south": {"uv": [10, 8.5, 12, 8.75], "texture": "#2"}, + "west": {"uv": [10, 8.75, 12, 9], "texture": "#2"}, + "up": {"uv": [2, 2, 0, 0], "texture": "#2"}, + "down": {"uv": [2, 2, 0, 4], "texture": "#2"} + } + }, + { + "from": [5, 0, 3], + "to": [11, 1, 4], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.0625, 8.25, 0]}, + "faces": { + "north": {"uv": [10.75, 6.25, 12.25, 6.5], "texture": "#2"}, + "east": {"uv": [9.5, 6.25, 9.75, 6.5], "texture": "#2"}, + "south": {"uv": [10.75, 6.5, 12.25, 6.75], "texture": "#2"}, + "west": {"uv": [9.5, 6.5, 9.75, 6.75], "texture": "#2"}, + "up": {"uv": [12.25, 7, 10.75, 6.75], "texture": "#2"}, + "down": {"uv": [12.5, 0, 11, 0.25], "texture": "#2"} + } + }, + { + "from": [5, 0, 12], + "to": [11, 1, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.0625, 8.25, 0]}, + "faces": { + "north": {"uv": [11, 0.25, 12.5, 0.5], "texture": "#2"}, + "east": {"uv": [9.5, 6.75, 9.75, 7], "texture": "#2"}, + "south": {"uv": [11, 0.5, 12.5, 0.75], "texture": "#2"}, + "west": {"uv": [9.75, 5.75, 10, 6], "texture": "#2"}, + "up": {"uv": [12.5, 1, 11, 0.75], "texture": "#2"}, + "down": {"uv": [12.5, 1, 11, 1.25], "texture": "#2"} + } + }, + { + "from": [3, 0, 5], + "to": [4, 1, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.0625, 8.25, 0]}, + "faces": { + "north": {"uv": [9, 3.25, 9.25, 3.5], "texture": "#2"}, + "east": {"uv": [10.5, 7.75, 12, 8], "texture": "#2"}, + "south": {"uv": [9.25, 3.25, 9.5, 3.5], "texture": "#2"}, + "west": {"uv": [10.5, 8, 12, 8.25], "texture": "#2"}, + "up": {"uv": [11, 5.75, 10.75, 4.25], "texture": "#2"}, + "down": {"uv": [11, 9.25, 10.75, 10.75], "texture": "#2"} + } + }, + { + "from": [12, 0, 5], + "to": [13, 1, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.0625, 8.25, 0]}, + "faces": { + "north": {"uv": [9.5, 5.75, 9.75, 6], "texture": "#2"}, + "east": {"uv": [10.75, 5.75, 12.25, 6], "texture": "#2"}, + "south": {"uv": [9.5, 6, 9.75, 6.25], "texture": "#2"}, + "west": {"uv": [10.75, 6, 12.25, 6.25], "texture": "#2"}, + "up": {"uv": [10.75, 12.25, 10.5, 10.75], "texture": "#2"}, + "down": {"uv": [11, 10.75, 10.75, 12.25], "texture": "#2"} + } + }, + { + "from": [12, 1, 5], + "to": [13, 8, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.0625, 8.25, 0]}, + "faces": { + "north": {"uv": [5.25, 10.5, 5.5, 12.25], "texture": "#2"}, + "east": {"uv": [3, 8.75, 4.5, 10.5], "texture": "#2"}, + "south": {"uv": [10.5, 5.25, 10.75, 7], "texture": "#2"}, + "west": {"uv": [4.5, 8.75, 6, 10.5], "texture": "#2"}, + "up": {"uv": [12, 12.5, 11.75, 11], "texture": "#2"}, + "down": {"uv": [1.75, 12, 1.5, 13.5], "texture": "#2"} + } + }, + { + "from": [5, 1, 3], + "to": [11, 8, 4], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.0625, 8.25, 0]}, + "faces": { + "north": {"uv": [0, 8.5, 1.5, 10.25], "texture": "#2"}, + "east": {"uv": [4.75, 10.5, 5, 12.25], "texture": "#2"}, + "south": {"uv": [8.5, 7, 10, 8.75], "texture": "#2"}, + "west": {"uv": [5, 10.5, 5.25, 12.25], "texture": "#2"}, + "up": {"uv": [13, 10.5, 11.5, 10.25], "texture": "#2"}, + "down": {"uv": [13, 10.5, 11.5, 10.75], "texture": "#2"} + } + }, + { + "from": [4, 1, 4], + "to": [12, 8, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.0625, 8.25, 0]}, + "faces": { + "north": {"uv": [6, 0, 8, 1.75], "texture": "#2"}, + "east": {"uv": [7, 1.75, 9, 3.5], "texture": "#2"}, + "south": {"uv": [3, 7, 5, 8.75], "texture": "#2"}, + "west": {"uv": [5, 7, 7, 8.75], "texture": "#2"}, + "up": {"uv": [2, 6, 0, 4], "texture": "#2"}, + "down": {"uv": [6, 0, 4, 2], "texture": "#2"} + } + }, + { + "from": [5, 1, 12], + "to": [11, 8, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.0625, 8.25, 0]}, + "faces": { + "north": {"uv": [8, 3.5, 9.5, 5.25], "texture": "#2"}, + "east": {"uv": [4.25, 10.5, 4.5, 12.25], "texture": "#2"}, + "south": {"uv": [8, 5.25, 9.5, 7], "texture": "#2"}, + "west": {"uv": [4.5, 10.5, 4.75, 12.25], "texture": "#2"}, + "up": {"uv": [13, 10, 11.5, 9.75], "texture": "#2"}, + "down": {"uv": [13, 10, 11.5, 10.25], "texture": "#2"} + } + }, + { + "from": [3, 1, 5], + "to": [4, 8, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.0625, 8.25, 0]}, + "faces": { + "north": {"uv": [3.75, 10.5, 4, 12.25], "texture": "#2"}, + "east": {"uv": [7, 7, 8.5, 8.75], "texture": "#2"}, + "south": {"uv": [4, 10.5, 4.25, 12.25], "texture": "#2"}, + "west": {"uv": [8, 0, 9.5, 1.75], "texture": "#2"}, + "up": {"uv": [11.75, 12.5, 11.5, 11], "texture": "#2"}, + "down": {"uv": [12, 3, 11.75, 4.5], "texture": "#2"} + } + }, + { + "from": [12, 9, 5], + "to": [13, 14, 11], + "rotation": {"angle": 0, "axis": "x", "origin": [8, 21, 8]}, + "faces": { + "north": {"uv": [7, 4, 7.25, 4.5], "rotation": 180, "texture": "#2"}, + "east": {"uv": [9.5, 0.5, 11, 1], "rotation": 180, "texture": "#2"}, + "south": {"uv": [7, 3.5, 7.25, 4], "rotation": 180, "texture": "#2"}, + "west": {"uv": [9.5, 1, 11, 1.5], "rotation": 180, "texture": "#2"}, + "up": {"uv": [11.25, 10.75, 11, 12.25], "texture": "#2"}, + "down": {"uv": [11.25, 10.75, 11, 9.25], "texture": "#2"} + } + }, + { + "from": [4, 9, 4], + "to": [12, 14, 12], + "rotation": {"angle": 0, "axis": "x", "origin": [8, 21, 8]}, + "faces": { + "north": {"uv": [9, 1.75, 11, 2.25], "rotation": 180, "texture": "#2"}, + "east": {"uv": [8, 8.75, 10, 9.25], "rotation": 180, "texture": "#2"}, + "south": {"uv": [6, 8.75, 8, 9.25], "rotation": 180, "texture": "#2"}, + "west": {"uv": [9, 2.25, 11, 2.75], "rotation": 180, "texture": "#2"}, + "up": {"uv": [4, 2, 2, 4], "texture": "#2"}, + "down": {"uv": [4, 2, 2, 0], "texture": "#2"} + } + }, + { + "from": [5, 9, 3], + "to": [11, 14, 4], + "rotation": {"angle": 0, "axis": "x", "origin": [8, 21, 8]}, + "faces": { + "north": {"uv": [9.5, 0, 11, 0.5], "rotation": 180, "texture": "#2"}, + "east": {"uv": [3, 6.5, 3.25, 7], "rotation": 180, "texture": "#2"}, + "south": {"uv": [9, 9.25, 10.5, 9.75], "rotation": 180, "texture": "#2"}, + "west": {"uv": [3.25, 6.5, 3.5, 7], "rotation": 180, "texture": "#2"}, + "up": {"uv": [12.5, 5.25, 11, 5.5], "texture": "#2"}, + "down": {"uv": [12.5, 5.25, 11, 5], "texture": "#2"} + } + }, + { + "from": [5, 9, 12], + "to": [11, 14, 13], + "rotation": {"angle": 0, "axis": "x", "origin": [8, 21, 8]}, + "faces": { + "north": {"uv": [7.5, 9.25, 9, 9.75], "rotation": 180, "texture": "#2"}, + "east": {"uv": [1.5, 6, 1.75, 6.5], "rotation": 180, "texture": "#2"}, + "south": {"uv": [6, 9.25, 7.5, 9.75], "rotation": 180, "texture": "#2"}, + "west": {"uv": [1.75, 6, 2, 6.5], "rotation": 180, "texture": "#2"}, + "up": {"uv": [12.5, 4.75, 11, 5], "texture": "#2"}, + "down": {"uv": [12.5, 1.5, 11, 1.25], "texture": "#2"} + } + }, + { + "from": [3, 9, 5], + "to": [4, 14, 11], + "rotation": {"angle": 0, "axis": "x", "origin": [8, 21, 8]}, + "faces": { + "north": {"uv": [3.75, 4, 4, 4.5], "rotation": 180, "texture": "#2"}, + "east": {"uv": [1.5, 9, 3, 9.5], "rotation": 180, "texture": "#2"}, + "south": {"uv": [3.5, 4, 3.75, 4.5], "rotation": 180, "texture": "#2"}, + "west": {"uv": [9, 2.75, 10.5, 3.25], "rotation": 180, "texture": "#2"}, + "up": {"uv": [11.25, 3.25, 11, 4.75], "texture": "#2"}, + "down": {"uv": [11.25, 3.25, 11, 1.75], "texture": "#2"} + } + }, + { + "from": [5, 1, 13], + "to": [11, 11, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.0625, 8.25, 0]}, + "faces": { + "north": {"uv": [2, 4, 3.5, 6.5], "texture": "#2"}, + "east": {"uv": [1.5, 9.5, 1.75, 12], "texture": "#2"}, + "south": {"uv": [4, 2, 5.5, 4.5], "texture": "#2"}, + "west": {"uv": [1.75, 9.5, 2, 12], "texture": "#2"}, + "up": {"uv": [11.5, 9.25, 10, 9], "texture": "#2"}, + "down": {"uv": [12, 7, 10.5, 7.25], "texture": "#2"} + } + }, + { + "from": [5, 1, 2], + "to": [11, 11, 3], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.0625, 8.25, 0]}, + "faces": { + "north": {"uv": [1.5, 6.5, 3, 9], "texture": "#2"}, + "east": {"uv": [9.5, 3.25, 9.75, 5.75], "texture": "#2"}, + "south": {"uv": [6.5, 4.5, 8, 7], "texture": "#2"}, + "west": {"uv": [9.75, 3.25, 10, 5.75], "texture": "#2"}, + "up": {"uv": [12, 7.5, 10.5, 7.25], "texture": "#2"}, + "down": {"uv": [12, 7.5, 10.5, 7.75], "texture": "#2"} + } + }, + { + "from": [2, 1, 5], + "to": [3, 11, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.0625, 8.25, 0]}, + "faces": { + "north": {"uv": [2, 9.5, 2.25, 12], "texture": "#2"}, + "east": {"uv": [3.5, 4.5, 5, 7], "texture": "#2"}, + "south": {"uv": [2.25, 9.5, 2.5, 12], "texture": "#2"}, + "west": {"uv": [5, 4.5, 6.5, 7], "texture": "#2"}, + "up": {"uv": [5.75, 12, 5.5, 10.5], "texture": "#2"}, + "down": {"uv": [6, 10.5, 5.75, 12], "texture": "#2"} + } + }, + { + "from": [13, 1, 5], + "to": [14, 11, 11], + "rotation": {"angle": 0, "axis": "z", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [2.5, 9.5, 2.75, 12], "texture": "#2"}, + "east": {"uv": [5.5, 2, 7, 4.5], "texture": "#2"}, + "south": {"uv": [2.75, 9.5, 3, 12], "texture": "#2"}, + "west": {"uv": [0, 6, 1.5, 8.5], "texture": "#2"}, + "up": {"uv": [10.75, 10.75, 10.5, 9.25], "texture": "#2"}, + "down": {"uv": [11, 2.75, 10.75, 4.25], "texture": "#2"} + } + }, + { + "from": [12, 1, 11], + "to": [13, 11, 12], + "rotation": {"angle": 0, "axis": "z", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [6, 9.75, 6.25, 12.25], "texture": "#2"}, + "east": {"uv": [6.25, 9.75, 6.5, 12.25], "texture": "#2"}, + "south": {"uv": [6.5, 9.75, 6.75, 12.25], "texture": "#2"}, + "west": {"uv": [6.75, 9.75, 7, 12.25], "texture": "#2"}, + "up": {"uv": [6.25, 2, 6, 1.75], "texture": "#2"}, + "down": {"uv": [6.5, 1.75, 6.25, 2], "texture": "#2"} + } + }, + { + "from": [11, 1, 12], + "to": [12, 11, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.0625, 8.25, 0]}, + "faces": { + "north": {"uv": [7, 9.75, 7.25, 12.25], "texture": "#2"}, + "east": {"uv": [7.25, 9.75, 7.5, 12.25], "texture": "#2"}, + "south": {"uv": [7.5, 9.75, 7.75, 12.25], "texture": "#2"}, + "west": {"uv": [7.75, 9.75, 8, 12.25], "texture": "#2"}, + "up": {"uv": [6.75, 2, 6.5, 1.75], "texture": "#2"}, + "down": {"uv": [7, 1.75, 6.75, 2], "texture": "#2"} + } + }, + { + "from": [12, 1, 4], + "to": [13, 11, 5], + "rotation": {"angle": 0, "axis": "z", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [9, 9.75, 9.25, 12.25], "texture": "#2"}, + "east": {"uv": [9.25, 9.75, 9.5, 12.25], "texture": "#2"}, + "south": {"uv": [9.5, 9.75, 9.75, 12.25], "texture": "#2"}, + "west": {"uv": [9.75, 9.75, 10, 12.25], "texture": "#2"}, + "up": {"uv": [7.5, 4.25, 7.25, 4], "texture": "#2"}, + "down": {"uv": [7.5, 4.25, 7.25, 4.5], "texture": "#2"} + } + }, + { + "from": [11, 1, 3], + "to": [12, 11, 4], + "rotation": {"angle": 0, "axis": "y", "origin": [12, 7.25, 12]}, + "faces": { + "north": {"uv": [8, 9.75, 8.25, 12.25], "texture": "#2"}, + "east": {"uv": [8.25, 9.75, 8.5, 12.25], "texture": "#2"}, + "south": {"uv": [8.5, 9.75, 8.75, 12.25], "texture": "#2"}, + "west": {"uv": [8.75, 9.75, 9, 12.25], "texture": "#2"}, + "up": {"uv": [7.5, 3.75, 7.25, 3.5], "texture": "#2"}, + "down": {"uv": [7.5, 3.75, 7.25, 4], "texture": "#2"} + } + }, + { + "from": [3, 1, 4], + "to": [4, 11, 5], + "rotation": {"angle": 0, "axis": "y", "origin": [4, 7.25, 12]}, + "faces": { + "north": {"uv": [10.5, 2.75, 10.75, 5.25], "texture": "#2"}, + "east": {"uv": [3, 10.5, 3.25, 13], "texture": "#2"}, + "south": {"uv": [3.25, 10.5, 3.5, 13], "texture": "#2"}, + "west": {"uv": [3.5, 10.5, 3.75, 13], "texture": "#2"}, + "up": {"uv": [8, 4.25, 7.75, 4], "texture": "#2"}, + "down": {"uv": [8, 4.25, 7.75, 4.5], "texture": "#2"} + } + }, + { + "from": [4, 1, 3], + "to": [5, 11, 4], + "rotation": {"angle": 0, "axis": "y", "origin": [4, 7.25, 12]}, + "faces": { + "north": {"uv": [1.25, 10.25, 1.5, 12.75], "texture": "#2"}, + "east": {"uv": [10.25, 3.25, 10.5, 5.75], "texture": "#2"}, + "south": {"uv": [10.25, 5.75, 10.5, 8.25], "texture": "#2"}, + "west": {"uv": [10.25, 9.75, 10.5, 12.25], "texture": "#2"}, + "up": {"uv": [8, 3.75, 7.75, 3.5], "texture": "#2"}, + "down": {"uv": [8, 3.75, 7.75, 4], "texture": "#2"} + } + }, + { + "from": [4, 1, 12], + "to": [5, 11, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [16.0625, 8.25, 0]}, + "faces": { + "north": {"uv": [0.25, 10.25, 0.5, 12.75], "texture": "#2"}, + "east": {"uv": [0.5, 10.25, 0.75, 12.75], "texture": "#2"}, + "south": {"uv": [0.75, 10.25, 1, 12.75], "texture": "#2"}, + "west": {"uv": [1, 10.25, 1.25, 12.75], "texture": "#2"}, + "up": {"uv": [7.75, 4.25, 7.5, 4], "texture": "#2"}, + "down": {"uv": [7.75, 4.25, 7.5, 4.5], "texture": "#2"} + } + }, + { + "from": [3, 1, 11], + "to": [4, 11, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [16.0625, 8.25, 0]}, + "faces": { + "north": {"uv": [10, 3.25, 10.25, 5.75], "texture": "#2"}, + "east": {"uv": [10, 5.75, 10.25, 8.25], "texture": "#2"}, + "south": {"uv": [10, 9.75, 10.25, 12.25], "texture": "#2"}, + "west": {"uv": [0, 10.25, 0.25, 12.75], "texture": "#2"}, + "up": {"uv": [7.75, 3.75, 7.5, 3.5], "texture": "#2"}, + "down": {"uv": [7.75, 3.75, 7.5, 4], "texture": "#2"} + } + }, + { + "from": [5, 12, 2], + "to": [11, 13, 3], + "rotation": {"angle": 0, "axis": "x", "origin": [8, 21, 8]}, + "faces": { + "north": {"uv": [11.5, 9, 13, 9.25], "rotation": 180, "texture": "#2"}, + "east": {"uv": [12.25, 6.25, 12.5, 6.5], "rotation": 180, "texture": "#2"}, + "south": {"uv": [11.5, 1.5, 13, 1.75], "rotation": 180, "texture": "#2"}, + "west": {"uv": [6.5, 12.25, 6.75, 12.5], "rotation": 180, "texture": "#2"}, + "up": {"uv": [13, 9.5, 11.5, 9.75], "texture": "#2"}, + "down": {"uv": [13, 9.5, 11.5, 9.25], "texture": "#2"} + } + }, + { + "from": [2, 12, 5], + "to": [3, 13, 11], + "rotation": {"angle": 0, "axis": "x", "origin": [8, 21, 8]}, + "faces": { + "north": {"uv": [6.25, 12.25, 6.5, 12.5], "rotation": 180, "texture": "#2"}, + "east": {"uv": [11.25, 4.5, 12.75, 4.75], "rotation": 180, "texture": "#2"}, + "south": {"uv": [12.25, 6, 12.5, 6.25], "rotation": 180, "texture": "#2"}, + "west": {"uv": [11.25, 10.75, 12.75, 11], "rotation": 180, "texture": "#2"}, + "up": {"uv": [11.75, 3, 11.5, 4.5], "texture": "#2"}, + "down": {"uv": [11.5, 12.5, 11.25, 11], "texture": "#2"} + } + }, + { + "from": [13, 12, 5], + "to": [14, 13, 11], + "rotation": {"angle": 0, "axis": "x", "origin": [8, 21, 8]}, + "faces": { + "north": {"uv": [6, 12.25, 6.25, 12.5], "rotation": 180, "texture": "#2"}, + "east": {"uv": [11.25, 2.5, 12.75, 2.75], "rotation": 180, "texture": "#2"}, + "south": {"uv": [12.25, 5.75, 12.5, 6], "rotation": 180, "texture": "#2"}, + "west": {"uv": [11.25, 2.75, 12.75, 3], "rotation": 180, "texture": "#2"}, + "up": {"uv": [11.5, 9.25, 11.25, 10.75], "texture": "#2"}, + "down": {"uv": [11.5, 4.5, 11.25, 3], "texture": "#2"} + } + }, + { + "from": [5, 12, 13], + "to": [11, 13, 14], + "rotation": {"angle": 0, "axis": "x", "origin": [8, 21, 8]}, + "faces": { + "north": {"uv": [11.25, 1.75, 12.75, 2], "rotation": 180, "texture": "#2"}, + "east": {"uv": [5.5, 12.25, 5.75, 12.5], "rotation": 180, "texture": "#2"}, + "south": {"uv": [11, 5.5, 12.5, 5.75], "rotation": 180, "texture": "#2"}, + "west": {"uv": [5.75, 12.25, 6, 12.5], "rotation": 180, "texture": "#2"}, + "up": {"uv": [12.75, 2.25, 11.25, 2.5], "texture": "#2"}, + "down": {"uv": [12.75, 2.25, 11.25, 2], "texture": "#2"} + } + }, + { + "from": [12, 12, 4], + "to": [13, 13, 5], + "rotation": {"angle": 0, "axis": "x", "origin": [8, 21, 8]}, + "faces": { + "north": {"uv": [4.5, 12.25, 4.75, 12.5], "rotation": 180, "texture": "#2"}, + "east": {"uv": [12.25, 4.25, 12.5, 4.5], "rotation": 180, "texture": "#2"}, + "south": {"uv": [4.25, 12.25, 4.5, 12.5], "rotation": 180, "texture": "#2"}, + "west": {"uv": [4.75, 12.25, 5, 12.5], "rotation": 180, "texture": "#2"}, + "up": {"uv": [5.5, 12.25, 5.25, 12.5], "texture": "#2"}, + "down": {"uv": [5.25, 12.5, 5, 12.25], "texture": "#2"} + } + }, + { + "from": [11, 12, 3], + "to": [12, 13, 4], + "rotation": {"angle": 0, "axis": "x", "origin": [8, 21, 8]}, + "faces": { + "north": {"uv": [3.75, 12.25, 4, 12.5], "rotation": 180, "texture": "#2"}, + "east": {"uv": [12.25, 3.5, 12.5, 3.75], "rotation": 180, "texture": "#2"}, + "south": {"uv": [12.25, 3.25, 12.5, 3.5], "rotation": 180, "texture": "#2"}, + "west": {"uv": [12.25, 3.75, 12.5, 4], "rotation": 180, "texture": "#2"}, + "up": {"uv": [12.5, 4, 12.25, 4.25], "texture": "#2"}, + "down": {"uv": [4.25, 12.5, 4, 12.25], "texture": "#2"} + } + }, + { + "from": [11, 12, 12], + "to": [12, 13, 13], + "rotation": {"angle": 0, "axis": "x", "origin": [8, 21, 8]}, + "faces": { + "north": {"uv": [2.25, 12.25, 2.5, 12.5], "rotation": 180, "texture": "#2"}, + "east": {"uv": [2, 12.25, 2.25, 12.5], "rotation": 180, "texture": "#2"}, + "south": {"uv": [1.75, 12.25, 2, 12.5], "rotation": 180, "texture": "#2"}, + "west": {"uv": [2.5, 12.25, 2.75, 12.5], "rotation": 180, "texture": "#2"}, + "up": {"uv": [12.5, 3, 12.25, 3.25], "texture": "#2"}, + "down": {"uv": [3, 12.5, 2.75, 12.25], "texture": "#2"} + } + }, + { + "from": [12, 12, 11], + "to": [13, 13, 12], + "rotation": {"angle": 0, "axis": "x", "origin": [8, 21, 8]}, + "faces": { + "north": {"uv": [12, 11.25, 12.25, 11.5], "rotation": 180, "texture": "#2"}, + "east": {"uv": [12, 11, 12.25, 11.25], "rotation": 180, "texture": "#2"}, + "south": {"uv": [12, 8.75, 12.25, 9], "rotation": 180, "texture": "#2"}, + "west": {"uv": [12, 11.5, 12.25, 11.75], "rotation": 180, "texture": "#2"}, + "up": {"uv": [12.25, 12, 12, 12.25], "texture": "#2"}, + "down": {"uv": [12.25, 12, 12, 11.75], "texture": "#2"} + } + }, + { + "from": [3, 12, 4], + "to": [4, 13, 5], + "rotation": {"angle": 0, "axis": "x", "origin": [8, 21, 8]}, + "faces": { + "north": {"uv": [12, 7.75, 12.25, 8], "rotation": 180, "texture": "#2"}, + "east": {"uv": [12, 7.5, 12.25, 7.75], "rotation": 180, "texture": "#2"}, + "south": {"uv": [12, 7.25, 12.25, 7.5], "rotation": 180, "texture": "#2"}, + "west": {"uv": [12, 8, 12.25, 8.25], "rotation": 180, "texture": "#2"}, + "up": {"uv": [12.25, 8.5, 12, 8.75], "texture": "#2"}, + "down": {"uv": [12.25, 8.5, 12, 8.25], "texture": "#2"} + } + }, + { + "from": [4, 12, 3], + "to": [5, 13, 4], + "rotation": {"angle": 0, "axis": "x", "origin": [8, 21, 8]}, + "faces": { + "north": {"uv": [12, 4.25, 12.25, 4.5], "rotation": 180, "texture": "#2"}, + "east": {"uv": [12, 4, 12.25, 4.25], "rotation": 180, "texture": "#2"}, + "south": {"uv": [12, 3.75, 12.25, 4], "rotation": 180, "texture": "#2"}, + "west": {"uv": [5.5, 12, 5.75, 12.25], "rotation": 180, "texture": "#2"}, + "up": {"uv": [12.25, 7, 12, 7.25], "texture": "#2"}, + "down": {"uv": [6, 12.25, 5.75, 12], "texture": "#2"} + } + }, + { + "from": [4, 12, 12], + "to": [5, 13, 13], + "rotation": {"angle": 0, "axis": "x", "origin": [8, 21, 8]}, + "faces": { + "north": {"uv": [2.75, 12, 3, 12.25], "rotation": 180, "texture": "#2"}, + "east": {"uv": [2.5, 12, 2.75, 12.25], "rotation": 180, "texture": "#2"}, + "south": {"uv": [2.25, 12, 2.5, 12.25], "rotation": 180, "texture": "#2"}, + "west": {"uv": [12, 3, 12.25, 3.25], "rotation": 180, "texture": "#2"}, + "up": {"uv": [12.25, 3.5, 12, 3.75], "texture": "#2"}, + "down": {"uv": [12.25, 3.5, 12, 3.25], "texture": "#2"} + } + }, + { + "from": [3, 12, 11], + "to": [4, 13, 12], + "rotation": {"angle": 0, "axis": "x", "origin": [8, 21, 8]}, + "faces": { + "north": {"uv": [9.75, 6.5, 10, 6.75], "rotation": 180, "texture": "#2"}, + "east": {"uv": [9.75, 6.25, 10, 6.5], "rotation": 180, "texture": "#2"}, + "south": {"uv": [9.75, 6, 10, 6.25], "rotation": 180, "texture": "#2"}, + "west": {"uv": [9.75, 6.75, 10, 7], "rotation": 180, "texture": "#2"}, + "up": {"uv": [2.25, 12, 2, 12.25], "texture": "#2"}, + "down": {"uv": [2, 12.25, 1.75, 12], "texture": "#2"} + } + } + ] +} \ No newline at end of file diff --git a/src/sandmastery/resources/assets/sandmastery/models/block/grey_sand_jar.json b/src/sandmastery/resources/assets/sandmastery/models/block/grey_sand_jar.json new file mode 100644 index 000000000..9bf2bcf7a --- /dev/null +++ b/src/sandmastery/resources/assets/sandmastery/models/block/grey_sand_jar.json @@ -0,0 +1,517 @@ +{ + "credit": "Made with Blockbench", + "texture_size": [64, 64], + "textures": { + "2": "sandmastery:block/grey_sand_jar", + "particle": "sandmastery:block/grey_sand_jar" + }, + "elements": [ + { + "from": [4, 0, 4], + "to": [12, 1, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.0625, 8.25, 0]}, + "faces": { + "north": {"uv": [9.5, 1.5, 11.5, 1.75], "texture": "#2"}, + "east": {"uv": [10, 8.25, 12, 8.5], "texture": "#2"}, + "south": {"uv": [10, 8.5, 12, 8.75], "texture": "#2"}, + "west": {"uv": [10, 8.75, 12, 9], "texture": "#2"}, + "up": {"uv": [2, 2, 0, 0], "texture": "#2"}, + "down": {"uv": [2, 2, 0, 4], "texture": "#2"} + } + }, + { + "from": [5, 0, 3], + "to": [11, 1, 4], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.0625, 8.25, 0]}, + "faces": { + "north": {"uv": [10.75, 6.25, 12.25, 6.5], "texture": "#2"}, + "east": {"uv": [9.5, 6.25, 9.75, 6.5], "texture": "#2"}, + "south": {"uv": [10.75, 6.5, 12.25, 6.75], "texture": "#2"}, + "west": {"uv": [9.5, 6.5, 9.75, 6.75], "texture": "#2"}, + "up": {"uv": [12.25, 7, 10.75, 6.75], "texture": "#2"}, + "down": {"uv": [12.5, 0, 11, 0.25], "texture": "#2"} + } + }, + { + "from": [5, 0, 12], + "to": [11, 1, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.0625, 8.25, 0]}, + "faces": { + "north": {"uv": [11, 0.25, 12.5, 0.5], "texture": "#2"}, + "east": {"uv": [9.5, 6.75, 9.75, 7], "texture": "#2"}, + "south": {"uv": [11, 0.5, 12.5, 0.75], "texture": "#2"}, + "west": {"uv": [9.75, 5.75, 10, 6], "texture": "#2"}, + "up": {"uv": [12.5, 1, 11, 0.75], "texture": "#2"}, + "down": {"uv": [12.5, 1, 11, 1.25], "texture": "#2"} + } + }, + { + "from": [3, 0, 5], + "to": [4, 1, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.0625, 8.25, 0]}, + "faces": { + "north": {"uv": [9, 3.25, 9.25, 3.5], "texture": "#2"}, + "east": {"uv": [10.5, 7.75, 12, 8], "texture": "#2"}, + "south": {"uv": [9.25, 3.25, 9.5, 3.5], "texture": "#2"}, + "west": {"uv": [10.5, 8, 12, 8.25], "texture": "#2"}, + "up": {"uv": [11, 5.75, 10.75, 4.25], "texture": "#2"}, + "down": {"uv": [11, 9.25, 10.75, 10.75], "texture": "#2"} + } + }, + { + "from": [12, 0, 5], + "to": [13, 1, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.0625, 8.25, 0]}, + "faces": { + "north": {"uv": [9.5, 5.75, 9.75, 6], "texture": "#2"}, + "east": {"uv": [10.75, 5.75, 12.25, 6], "texture": "#2"}, + "south": {"uv": [9.5, 6, 9.75, 6.25], "texture": "#2"}, + "west": {"uv": [10.75, 6, 12.25, 6.25], "texture": "#2"}, + "up": {"uv": [10.75, 12.25, 10.5, 10.75], "texture": "#2"}, + "down": {"uv": [11, 10.75, 10.75, 12.25], "texture": "#2"} + } + }, + { + "from": [12, 1, 5], + "to": [13, 8, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.0625, 8.25, 0]}, + "faces": { + "north": {"uv": [5.25, 10.5, 5.5, 12.25], "texture": "#2"}, + "east": {"uv": [3, 8.75, 4.5, 10.5], "texture": "#2"}, + "south": {"uv": [10.5, 5.25, 10.75, 7], "texture": "#2"}, + "west": {"uv": [4.5, 8.75, 6, 10.5], "texture": "#2"}, + "up": {"uv": [12, 12.5, 11.75, 11], "texture": "#2"}, + "down": {"uv": [1.75, 12, 1.5, 13.5], "texture": "#2"} + } + }, + { + "from": [5, 1, 3], + "to": [11, 8, 4], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.0625, 8.25, 0]}, + "faces": { + "north": {"uv": [0, 8.5, 1.5, 10.25], "texture": "#2"}, + "east": {"uv": [4.75, 10.5, 5, 12.25], "texture": "#2"}, + "south": {"uv": [8.5, 7, 10, 8.75], "texture": "#2"}, + "west": {"uv": [5, 10.5, 5.25, 12.25], "texture": "#2"}, + "up": {"uv": [13, 10.5, 11.5, 10.25], "texture": "#2"}, + "down": {"uv": [13, 10.5, 11.5, 10.75], "texture": "#2"} + } + }, + { + "from": [4, 1, 4], + "to": [12, 8, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.0625, 8.25, 0]}, + "faces": { + "north": {"uv": [6, 0, 8, 1.75], "texture": "#2"}, + "east": {"uv": [7, 1.75, 9, 3.5], "texture": "#2"}, + "south": {"uv": [3, 7, 5, 8.75], "texture": "#2"}, + "west": {"uv": [5, 7, 7, 8.75], "texture": "#2"}, + "up": {"uv": [2, 6, 0, 4], "texture": "#2"}, + "down": {"uv": [6, 0, 4, 2], "texture": "#2"} + } + }, + { + "from": [5, 1, 12], + "to": [11, 8, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.0625, 8.25, 0]}, + "faces": { + "north": {"uv": [8, 3.5, 9.5, 5.25], "texture": "#2"}, + "east": {"uv": [4.25, 10.5, 4.5, 12.25], "texture": "#2"}, + "south": {"uv": [8, 5.25, 9.5, 7], "texture": "#2"}, + "west": {"uv": [4.5, 10.5, 4.75, 12.25], "texture": "#2"}, + "up": {"uv": [13, 10, 11.5, 9.75], "texture": "#2"}, + "down": {"uv": [13, 10, 11.5, 10.25], "texture": "#2"} + } + }, + { + "from": [3, 1, 5], + "to": [4, 8, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.0625, 8.25, 0]}, + "faces": { + "north": {"uv": [3.75, 10.5, 4, 12.25], "texture": "#2"}, + "east": {"uv": [7, 7, 8.5, 8.75], "texture": "#2"}, + "south": {"uv": [4, 10.5, 4.25, 12.25], "texture": "#2"}, + "west": {"uv": [8, 0, 9.5, 1.75], "texture": "#2"}, + "up": {"uv": [11.75, 12.5, 11.5, 11], "texture": "#2"}, + "down": {"uv": [12, 3, 11.75, 4.5], "texture": "#2"} + } + }, + { + "from": [12, 9, 5], + "to": [13, 14, 11], + "rotation": {"angle": 0, "axis": "x", "origin": [8, 21, 8]}, + "faces": { + "north": {"uv": [7, 4, 7.25, 4.5], "rotation": 180, "texture": "#2"}, + "east": {"uv": [9.5, 0.5, 11, 1], "rotation": 180, "texture": "#2"}, + "south": {"uv": [7, 3.5, 7.25, 4], "rotation": 180, "texture": "#2"}, + "west": {"uv": [9.5, 1, 11, 1.5], "rotation": 180, "texture": "#2"}, + "up": {"uv": [11.25, 10.75, 11, 12.25], "texture": "#2"}, + "down": {"uv": [11.25, 10.75, 11, 9.25], "texture": "#2"} + } + }, + { + "from": [4, 9, 4], + "to": [12, 14, 12], + "rotation": {"angle": 0, "axis": "x", "origin": [8, 21, 8]}, + "faces": { + "north": {"uv": [9, 1.75, 11, 2.25], "rotation": 180, "texture": "#2"}, + "east": {"uv": [8, 8.75, 10, 9.25], "rotation": 180, "texture": "#2"}, + "south": {"uv": [6, 8.75, 8, 9.25], "rotation": 180, "texture": "#2"}, + "west": {"uv": [9, 2.25, 11, 2.75], "rotation": 180, "texture": "#2"}, + "up": {"uv": [4, 2, 2, 4], "texture": "#2"}, + "down": {"uv": [4, 2, 2, 0], "texture": "#2"} + } + }, + { + "from": [5, 9, 3], + "to": [11, 14, 4], + "rotation": {"angle": 0, "axis": "x", "origin": [8, 21, 8]}, + "faces": { + "north": {"uv": [9.5, 0, 11, 0.5], "rotation": 180, "texture": "#2"}, + "east": {"uv": [3, 6.5, 3.25, 7], "rotation": 180, "texture": "#2"}, + "south": {"uv": [9, 9.25, 10.5, 9.75], "rotation": 180, "texture": "#2"}, + "west": {"uv": [3.25, 6.5, 3.5, 7], "rotation": 180, "texture": "#2"}, + "up": {"uv": [12.5, 5.25, 11, 5.5], "texture": "#2"}, + "down": {"uv": [12.5, 5.25, 11, 5], "texture": "#2"} + } + }, + { + "from": [5, 9, 12], + "to": [11, 14, 13], + "rotation": {"angle": 0, "axis": "x", "origin": [8, 21, 8]}, + "faces": { + "north": {"uv": [7.5, 9.25, 9, 9.75], "rotation": 180, "texture": "#2"}, + "east": {"uv": [1.5, 6, 1.75, 6.5], "rotation": 180, "texture": "#2"}, + "south": {"uv": [6, 9.25, 7.5, 9.75], "rotation": 180, "texture": "#2"}, + "west": {"uv": [1.75, 6, 2, 6.5], "rotation": 180, "texture": "#2"}, + "up": {"uv": [12.5, 4.75, 11, 5], "texture": "#2"}, + "down": {"uv": [12.5, 1.5, 11, 1.25], "texture": "#2"} + } + }, + { + "from": [3, 9, 5], + "to": [4, 14, 11], + "rotation": {"angle": 0, "axis": "x", "origin": [8, 21, 8]}, + "faces": { + "north": {"uv": [3.75, 4, 4, 4.5], "rotation": 180, "texture": "#2"}, + "east": {"uv": [1.5, 9, 3, 9.5], "rotation": 180, "texture": "#2"}, + "south": {"uv": [3.5, 4, 3.75, 4.5], "rotation": 180, "texture": "#2"}, + "west": {"uv": [9, 2.75, 10.5, 3.25], "rotation": 180, "texture": "#2"}, + "up": {"uv": [11.25, 3.25, 11, 4.75], "texture": "#2"}, + "down": {"uv": [11.25, 3.25, 11, 1.75], "texture": "#2"} + } + }, + { + "from": [5, 1, 13], + "to": [11, 11, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.0625, 8.25, 0]}, + "faces": { + "north": {"uv": [2, 4, 3.5, 6.5], "texture": "#2"}, + "east": {"uv": [1.5, 9.5, 1.75, 12], "texture": "#2"}, + "south": {"uv": [4, 2, 5.5, 4.5], "texture": "#2"}, + "west": {"uv": [1.75, 9.5, 2, 12], "texture": "#2"}, + "up": {"uv": [11.5, 9.25, 10, 9], "texture": "#2"}, + "down": {"uv": [12, 7, 10.5, 7.25], "texture": "#2"} + } + }, + { + "from": [5, 1, 2], + "to": [11, 11, 3], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.0625, 8.25, 0]}, + "faces": { + "north": {"uv": [1.5, 6.5, 3, 9], "texture": "#2"}, + "east": {"uv": [9.5, 3.25, 9.75, 5.75], "texture": "#2"}, + "south": {"uv": [6.5, 4.5, 8, 7], "texture": "#2"}, + "west": {"uv": [9.75, 3.25, 10, 5.75], "texture": "#2"}, + "up": {"uv": [12, 7.5, 10.5, 7.25], "texture": "#2"}, + "down": {"uv": [12, 7.5, 10.5, 7.75], "texture": "#2"} + } + }, + { + "from": [2, 1, 5], + "to": [3, 11, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.0625, 8.25, 0]}, + "faces": { + "north": {"uv": [2, 9.5, 2.25, 12], "texture": "#2"}, + "east": {"uv": [3.5, 4.5, 5, 7], "texture": "#2"}, + "south": {"uv": [2.25, 9.5, 2.5, 12], "texture": "#2"}, + "west": {"uv": [5, 4.5, 6.5, 7], "texture": "#2"}, + "up": {"uv": [5.75, 12, 5.5, 10.5], "texture": "#2"}, + "down": {"uv": [6, 10.5, 5.75, 12], "texture": "#2"} + } + }, + { + "from": [13, 1, 5], + "to": [14, 11, 11], + "rotation": {"angle": 0, "axis": "z", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [2.5, 9.5, 2.75, 12], "texture": "#2"}, + "east": {"uv": [5.5, 2, 7, 4.5], "texture": "#2"}, + "south": {"uv": [2.75, 9.5, 3, 12], "texture": "#2"}, + "west": {"uv": [0, 6, 1.5, 8.5], "texture": "#2"}, + "up": {"uv": [10.75, 10.75, 10.5, 9.25], "texture": "#2"}, + "down": {"uv": [11, 2.75, 10.75, 4.25], "texture": "#2"} + } + }, + { + "from": [12, 1, 11], + "to": [13, 11, 12], + "rotation": {"angle": 0, "axis": "z", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [6, 9.75, 6.25, 12.25], "texture": "#2"}, + "east": {"uv": [6.25, 9.75, 6.5, 12.25], "texture": "#2"}, + "south": {"uv": [6.5, 9.75, 6.75, 12.25], "texture": "#2"}, + "west": {"uv": [6.75, 9.75, 7, 12.25], "texture": "#2"}, + "up": {"uv": [6.25, 2, 6, 1.75], "texture": "#2"}, + "down": {"uv": [6.5, 1.75, 6.25, 2], "texture": "#2"} + } + }, + { + "from": [11, 1, 12], + "to": [12, 11, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.0625, 8.25, 0]}, + "faces": { + "north": {"uv": [7, 9.75, 7.25, 12.25], "texture": "#2"}, + "east": {"uv": [7.25, 9.75, 7.5, 12.25], "texture": "#2"}, + "south": {"uv": [7.5, 9.75, 7.75, 12.25], "texture": "#2"}, + "west": {"uv": [7.75, 9.75, 8, 12.25], "texture": "#2"}, + "up": {"uv": [6.75, 2, 6.5, 1.75], "texture": "#2"}, + "down": {"uv": [7, 1.75, 6.75, 2], "texture": "#2"} + } + }, + { + "from": [12, 1, 4], + "to": [13, 11, 5], + "rotation": {"angle": 0, "axis": "z", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [9, 9.75, 9.25, 12.25], "texture": "#2"}, + "east": {"uv": [9.25, 9.75, 9.5, 12.25], "texture": "#2"}, + "south": {"uv": [9.5, 9.75, 9.75, 12.25], "texture": "#2"}, + "west": {"uv": [9.75, 9.75, 10, 12.25], "texture": "#2"}, + "up": {"uv": [7.5, 4.25, 7.25, 4], "texture": "#2"}, + "down": {"uv": [7.5, 4.25, 7.25, 4.5], "texture": "#2"} + } + }, + { + "from": [11, 1, 3], + "to": [12, 11, 4], + "rotation": {"angle": 0, "axis": "y", "origin": [12, 7.25, 12]}, + "faces": { + "north": {"uv": [8, 9.75, 8.25, 12.25], "texture": "#2"}, + "east": {"uv": [8.25, 9.75, 8.5, 12.25], "texture": "#2"}, + "south": {"uv": [8.5, 9.75, 8.75, 12.25], "texture": "#2"}, + "west": {"uv": [8.75, 9.75, 9, 12.25], "texture": "#2"}, + "up": {"uv": [7.5, 3.75, 7.25, 3.5], "texture": "#2"}, + "down": {"uv": [7.5, 3.75, 7.25, 4], "texture": "#2"} + } + }, + { + "from": [3, 1, 4], + "to": [4, 11, 5], + "rotation": {"angle": 0, "axis": "y", "origin": [4, 7.25, 12]}, + "faces": { + "north": {"uv": [10.5, 2.75, 10.75, 5.25], "texture": "#2"}, + "east": {"uv": [3, 10.5, 3.25, 13], "texture": "#2"}, + "south": {"uv": [3.25, 10.5, 3.5, 13], "texture": "#2"}, + "west": {"uv": [3.5, 10.5, 3.75, 13], "texture": "#2"}, + "up": {"uv": [8, 4.25, 7.75, 4], "texture": "#2"}, + "down": {"uv": [8, 4.25, 7.75, 4.5], "texture": "#2"} + } + }, + { + "from": [4, 1, 3], + "to": [5, 11, 4], + "rotation": {"angle": 0, "axis": "y", "origin": [4, 7.25, 12]}, + "faces": { + "north": {"uv": [1.25, 10.25, 1.5, 12.75], "texture": "#2"}, + "east": {"uv": [10.25, 3.25, 10.5, 5.75], "texture": "#2"}, + "south": {"uv": [10.25, 5.75, 10.5, 8.25], "texture": "#2"}, + "west": {"uv": [10.25, 9.75, 10.5, 12.25], "texture": "#2"}, + "up": {"uv": [8, 3.75, 7.75, 3.5], "texture": "#2"}, + "down": {"uv": [8, 3.75, 7.75, 4], "texture": "#2"} + } + }, + { + "from": [4, 1, 12], + "to": [5, 11, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [16.0625, 8.25, 0]}, + "faces": { + "north": {"uv": [0.25, 10.25, 0.5, 12.75], "texture": "#2"}, + "east": {"uv": [0.5, 10.25, 0.75, 12.75], "texture": "#2"}, + "south": {"uv": [0.75, 10.25, 1, 12.75], "texture": "#2"}, + "west": {"uv": [1, 10.25, 1.25, 12.75], "texture": "#2"}, + "up": {"uv": [7.75, 4.25, 7.5, 4], "texture": "#2"}, + "down": {"uv": [7.75, 4.25, 7.5, 4.5], "texture": "#2"} + } + }, + { + "from": [3, 1, 11], + "to": [4, 11, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [16.0625, 8.25, 0]}, + "faces": { + "north": {"uv": [10, 3.25, 10.25, 5.75], "texture": "#2"}, + "east": {"uv": [10, 5.75, 10.25, 8.25], "texture": "#2"}, + "south": {"uv": [10, 9.75, 10.25, 12.25], "texture": "#2"}, + "west": {"uv": [0, 10.25, 0.25, 12.75], "texture": "#2"}, + "up": {"uv": [7.75, 3.75, 7.5, 3.5], "texture": "#2"}, + "down": {"uv": [7.75, 3.75, 7.5, 4], "texture": "#2"} + } + }, + { + "from": [5, 12, 2], + "to": [11, 13, 3], + "rotation": {"angle": 0, "axis": "x", "origin": [8, 21, 8]}, + "faces": { + "north": {"uv": [11.5, 9, 13, 9.25], "rotation": 180, "texture": "#2"}, + "east": {"uv": [12.25, 6.25, 12.5, 6.5], "rotation": 180, "texture": "#2"}, + "south": {"uv": [11.5, 1.5, 13, 1.75], "rotation": 180, "texture": "#2"}, + "west": {"uv": [6.5, 12.25, 6.75, 12.5], "rotation": 180, "texture": "#2"}, + "up": {"uv": [13, 9.5, 11.5, 9.75], "texture": "#2"}, + "down": {"uv": [13, 9.5, 11.5, 9.25], "texture": "#2"} + } + }, + { + "from": [2, 12, 5], + "to": [3, 13, 11], + "rotation": {"angle": 0, "axis": "x", "origin": [8, 21, 8]}, + "faces": { + "north": {"uv": [6.25, 12.25, 6.5, 12.5], "rotation": 180, "texture": "#2"}, + "east": {"uv": [11.25, 4.5, 12.75, 4.75], "rotation": 180, "texture": "#2"}, + "south": {"uv": [12.25, 6, 12.5, 6.25], "rotation": 180, "texture": "#2"}, + "west": {"uv": [11.25, 10.75, 12.75, 11], "rotation": 180, "texture": "#2"}, + "up": {"uv": [11.75, 3, 11.5, 4.5], "texture": "#2"}, + "down": {"uv": [11.5, 12.5, 11.25, 11], "texture": "#2"} + } + }, + { + "from": [13, 12, 5], + "to": [14, 13, 11], + "rotation": {"angle": 0, "axis": "x", "origin": [8, 21, 8]}, + "faces": { + "north": {"uv": [6, 12.25, 6.25, 12.5], "rotation": 180, "texture": "#2"}, + "east": {"uv": [11.25, 2.5, 12.75, 2.75], "rotation": 180, "texture": "#2"}, + "south": {"uv": [12.25, 5.75, 12.5, 6], "rotation": 180, "texture": "#2"}, + "west": {"uv": [11.25, 2.75, 12.75, 3], "rotation": 180, "texture": "#2"}, + "up": {"uv": [11.5, 9.25, 11.25, 10.75], "texture": "#2"}, + "down": {"uv": [11.5, 4.5, 11.25, 3], "texture": "#2"} + } + }, + { + "from": [5, 12, 13], + "to": [11, 13, 14], + "rotation": {"angle": 0, "axis": "x", "origin": [8, 21, 8]}, + "faces": { + "north": {"uv": [11.25, 1.75, 12.75, 2], "rotation": 180, "texture": "#2"}, + "east": {"uv": [5.5, 12.25, 5.75, 12.5], "rotation": 180, "texture": "#2"}, + "south": {"uv": [11, 5.5, 12.5, 5.75], "rotation": 180, "texture": "#2"}, + "west": {"uv": [5.75, 12.25, 6, 12.5], "rotation": 180, "texture": "#2"}, + "up": {"uv": [12.75, 2.25, 11.25, 2.5], "texture": "#2"}, + "down": {"uv": [12.75, 2.25, 11.25, 2], "texture": "#2"} + } + }, + { + "from": [12, 12, 4], + "to": [13, 13, 5], + "rotation": {"angle": 0, "axis": "x", "origin": [8, 21, 8]}, + "faces": { + "north": {"uv": [4.5, 12.25, 4.75, 12.5], "rotation": 180, "texture": "#2"}, + "east": {"uv": [12.25, 4.25, 12.5, 4.5], "rotation": 180, "texture": "#2"}, + "south": {"uv": [4.25, 12.25, 4.5, 12.5], "rotation": 180, "texture": "#2"}, + "west": {"uv": [4.75, 12.25, 5, 12.5], "rotation": 180, "texture": "#2"}, + "up": {"uv": [5.5, 12.25, 5.25, 12.5], "texture": "#2"}, + "down": {"uv": [5.25, 12.5, 5, 12.25], "texture": "#2"} + } + }, + { + "from": [11, 12, 3], + "to": [12, 13, 4], + "rotation": {"angle": 0, "axis": "x", "origin": [8, 21, 8]}, + "faces": { + "north": {"uv": [3.75, 12.25, 4, 12.5], "rotation": 180, "texture": "#2"}, + "east": {"uv": [12.25, 3.5, 12.5, 3.75], "rotation": 180, "texture": "#2"}, + "south": {"uv": [12.25, 3.25, 12.5, 3.5], "rotation": 180, "texture": "#2"}, + "west": {"uv": [12.25, 3.75, 12.5, 4], "rotation": 180, "texture": "#2"}, + "up": {"uv": [12.5, 4, 12.25, 4.25], "texture": "#2"}, + "down": {"uv": [4.25, 12.5, 4, 12.25], "texture": "#2"} + } + }, + { + "from": [11, 12, 12], + "to": [12, 13, 13], + "rotation": {"angle": 0, "axis": "x", "origin": [8, 21, 8]}, + "faces": { + "north": {"uv": [2.25, 12.25, 2.5, 12.5], "rotation": 180, "texture": "#2"}, + "east": {"uv": [2, 12.25, 2.25, 12.5], "rotation": 180, "texture": "#2"}, + "south": {"uv": [1.75, 12.25, 2, 12.5], "rotation": 180, "texture": "#2"}, + "west": {"uv": [2.5, 12.25, 2.75, 12.5], "rotation": 180, "texture": "#2"}, + "up": {"uv": [12.5, 3, 12.25, 3.25], "texture": "#2"}, + "down": {"uv": [3, 12.5, 2.75, 12.25], "texture": "#2"} + } + }, + { + "from": [12, 12, 11], + "to": [13, 13, 12], + "rotation": {"angle": 0, "axis": "x", "origin": [8, 21, 8]}, + "faces": { + "north": {"uv": [12, 11.25, 12.25, 11.5], "rotation": 180, "texture": "#2"}, + "east": {"uv": [12, 11, 12.25, 11.25], "rotation": 180, "texture": "#2"}, + "south": {"uv": [12, 8.75, 12.25, 9], "rotation": 180, "texture": "#2"}, + "west": {"uv": [12, 11.5, 12.25, 11.75], "rotation": 180, "texture": "#2"}, + "up": {"uv": [12.25, 12, 12, 12.25], "texture": "#2"}, + "down": {"uv": [12.25, 12, 12, 11.75], "texture": "#2"} + } + }, + { + "from": [3, 12, 4], + "to": [4, 13, 5], + "rotation": {"angle": 0, "axis": "x", "origin": [8, 21, 8]}, + "faces": { + "north": {"uv": [12, 7.75, 12.25, 8], "rotation": 180, "texture": "#2"}, + "east": {"uv": [12, 7.5, 12.25, 7.75], "rotation": 180, "texture": "#2"}, + "south": {"uv": [12, 7.25, 12.25, 7.5], "rotation": 180, "texture": "#2"}, + "west": {"uv": [12, 8, 12.25, 8.25], "rotation": 180, "texture": "#2"}, + "up": {"uv": [12.25, 8.5, 12, 8.75], "texture": "#2"}, + "down": {"uv": [12.25, 8.5, 12, 8.25], "texture": "#2"} + } + }, + { + "from": [4, 12, 3], + "to": [5, 13, 4], + "rotation": {"angle": 0, "axis": "x", "origin": [8, 21, 8]}, + "faces": { + "north": {"uv": [12, 4.25, 12.25, 4.5], "rotation": 180, "texture": "#2"}, + "east": {"uv": [12, 4, 12.25, 4.25], "rotation": 180, "texture": "#2"}, + "south": {"uv": [12, 3.75, 12.25, 4], "rotation": 180, "texture": "#2"}, + "west": {"uv": [5.5, 12, 5.75, 12.25], "rotation": 180, "texture": "#2"}, + "up": {"uv": [12.25, 7, 12, 7.25], "texture": "#2"}, + "down": {"uv": [6, 12.25, 5.75, 12], "texture": "#2"} + } + }, + { + "from": [4, 12, 12], + "to": [5, 13, 13], + "rotation": {"angle": 0, "axis": "x", "origin": [8, 21, 8]}, + "faces": { + "north": {"uv": [2.75, 12, 3, 12.25], "rotation": 180, "texture": "#2"}, + "east": {"uv": [2.5, 12, 2.75, 12.25], "rotation": 180, "texture": "#2"}, + "south": {"uv": [2.25, 12, 2.5, 12.25], "rotation": 180, "texture": "#2"}, + "west": {"uv": [12, 3, 12.25, 3.25], "rotation": 180, "texture": "#2"}, + "up": {"uv": [12.25, 3.5, 12, 3.75], "texture": "#2"}, + "down": {"uv": [12.25, 3.5, 12, 3.25], "texture": "#2"} + } + }, + { + "from": [3, 12, 11], + "to": [4, 13, 12], + "rotation": {"angle": 0, "axis": "x", "origin": [8, 21, 8]}, + "faces": { + "north": {"uv": [9.75, 6.5, 10, 6.75], "rotation": 180, "texture": "#2"}, + "east": {"uv": [9.75, 6.25, 10, 6.5], "rotation": 180, "texture": "#2"}, + "south": {"uv": [9.75, 6, 10, 6.25], "rotation": 180, "texture": "#2"}, + "west": {"uv": [9.75, 6.75, 10, 7], "rotation": 180, "texture": "#2"}, + "up": {"uv": [2.25, 12, 2, 12.25], "texture": "#2"}, + "down": {"uv": [2, 12.25, 1.75, 12], "texture": "#2"} + } + } + ] +} \ No newline at end of file diff --git a/src/sandmastery/resources/assets/sandmastery/models/block/sand_platform_stage1.json b/src/sandmastery/resources/assets/sandmastery/models/block/sand_platform_stage1.json new file mode 100644 index 000000000..6867a091a --- /dev/null +++ b/src/sandmastery/resources/assets/sandmastery/models/block/sand_platform_stage1.json @@ -0,0 +1,2047 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "3": "sandmastery:block/golden_sand", + "particle": "sandmastery:block/white_sand" + }, + "elements": [ + { + "from": [1, 14, 5], + "to": [6, 16, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 5, 2], "texture": "#3"}, + "east": {"uv": [0, 0, 7, 2], "texture": "#3"}, + "south": {"uv": [0, 0, 5, 2], "texture": "#3"}, + "west": {"uv": [0, 0, 7, 2], "texture": "#3"}, + "up": {"uv": [0, 0, 5, 7], "texture": "#3"}, + "down": {"uv": [0, 0, 5, 7], "texture": "#3"} + } + }, + { + "from": [0, 15, 4], + "to": [1, 16, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 8, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 8, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 8], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 8], "texture": "#3"} + } + }, + { + "from": [2, 14, 12], + "to": [6, 16, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 4, 2], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "south": {"uv": [0, 0, 4, 2], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "up": {"uv": [0, 0, 4, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 4, 1], "texture": "#3"} + } + }, + { + "from": [2, 14, 3], + "to": [6, 16, 5], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 4, 2], "texture": "#3"}, + "east": {"uv": [0, 0, 2, 2], "texture": "#3"}, + "south": {"uv": [0, 0, 4, 2], "texture": "#3"}, + "west": {"uv": [0, 0, 2, 2], "texture": "#3"}, + "up": {"uv": [0, 0, 4, 2], "texture": "#3"}, + "down": {"uv": [0, 0, 4, 2], "texture": "#3"} + } + }, + { + "from": [3, 14, 2], + "to": [5, 16, 3], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 2], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "south": {"uv": [0, 0, 2, 2], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "up": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 2, 1], "texture": "#3"} + } + }, + { + "from": [6, 14, 4], + "to": [7, 16, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "east": {"uv": [0, 0, 7, 2], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "west": {"uv": [0, 0, 7, 2], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 7], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 7], "texture": "#3"} + } + }, + { + "from": [10, 14, 6], + "to": [13, 16, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 3, 2], "texture": "#3"}, + "east": {"uv": [0, 0, 3, 2], "texture": "#3"}, + "south": {"uv": [0, 0, 3, 2], "texture": "#3"}, + "west": {"uv": [0, 0, 3, 2], "texture": "#3"}, + "up": {"uv": [0, 0, 3, 3], "texture": "#3"}, + "down": {"uv": [0, 0, 3, 3], "texture": "#3"} + } + }, + { + "from": [9, 14, 3], + "to": [13, 16, 6], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 4, 2], "texture": "#3"}, + "east": {"uv": [0, 0, 3, 2], "texture": "#3"}, + "south": {"uv": [0, 0, 4, 2], "texture": "#3"}, + "west": {"uv": [0, 0, 3, 2], "texture": "#3"}, + "up": {"uv": [0, 0, 4, 3], "texture": "#3"}, + "down": {"uv": [0, 0, 4, 3], "texture": "#3"} + } + }, + { + "from": [5, 14, 13], + "to": [8, 16, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 3, 2], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "south": {"uv": [0, 0, 3, 2], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "up": {"uv": [0, 0, 3, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 3, 1], "texture": "#3"} + } + }, + { + "from": [6, 14, 11], + "to": [12, 16, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 6, 2], "texture": "#3"}, + "east": {"uv": [0, 0, 2, 2], "texture": "#3"}, + "south": {"uv": [0, 0, 6, 2], "texture": "#3"}, + "west": {"uv": [0, 0, 2, 2], "texture": "#3"}, + "up": {"uv": [0, 0, 6, 2], "texture": "#3"}, + "down": {"uv": [0, 0, 6, 2], "texture": "#3"} + } + }, + { + "from": [7, 14, 10], + "to": [12, 16, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 5, 2], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "south": {"uv": [0, 0, 5, 2], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "up": {"uv": [0, 0, 5, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 5, 1], "texture": "#3"} + } + }, + { + "from": [13, 14, 2], + "to": [15, 16, 7], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 2], "texture": "#3"}, + "east": {"uv": [0, 0, 5, 2], "texture": "#3"}, + "south": {"uv": [0, 0, 2, 2], "texture": "#3"}, + "west": {"uv": [0, 0, 5, 2], "texture": "#3"}, + "up": {"uv": [0, 0, 2, 5], "texture": "#3"}, + "down": {"uv": [0, 0, 2, 5], "texture": "#3"} + } + }, + { + "from": [10, 14, 1], + "to": [13, 16, 3], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 3, 2], "texture": "#3"}, + "east": {"uv": [0, 0, 2, 2], "texture": "#3"}, + "south": {"uv": [0, 0, 3, 2], "texture": "#3"}, + "west": {"uv": [0, 0, 2, 2], "texture": "#3"}, + "up": {"uv": [0, 0, 3, 2], "texture": "#3"}, + "down": {"uv": [0, 0, 3, 2], "texture": "#3"} + } + }, + { + "from": [8, 14, 1], + "to": [10, 16, 3], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 2], "texture": "#3"}, + "east": {"uv": [0, 0, 2, 2], "texture": "#3"}, + "south": {"uv": [0, 0, 2, 2], "texture": "#3"}, + "west": {"uv": [0, 0, 2, 2], "texture": "#3"}, + "up": {"uv": [0, 0, 2, 2], "texture": "#3"}, + "down": {"uv": [0, 0, 2, 2], "texture": "#3"} + } + }, + { + "from": [6, 14, 2], + "to": [7, 16, 4], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "east": {"uv": [0, 0, 2, 2], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "west": {"uv": [0, 0, 2, 2], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 2], "texture": "#3"} + } + }, + { + "from": [8, 12, 4], + "to": [9, 14, 6], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "east": {"uv": [0, 0, 2, 2], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "west": {"uv": [0, 0, 2, 2], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 2], "texture": "#3"} + } + }, + { + "from": [9, 14, 6], + "to": [10, 16, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "east": {"uv": [0, 0, 3, 2], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "west": {"uv": [0, 0, 3, 2], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 3], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 3], "texture": "#3"} + } + }, + { + "from": [15, 14, 3], + "to": [16, 16, 6], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "east": {"uv": [0, 0, 3, 2], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "west": {"uv": [0, 0, 3, 2], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 3], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 3], "texture": "#3"} + } + }, + { + "from": [8, 14, 13], + "to": [14, 16, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 6, 2], "texture": "#3"}, + "east": {"uv": [0, 0, 2, 2], "texture": "#3"}, + "south": {"uv": [0, 0, 6, 2], "texture": "#3"}, + "west": {"uv": [0, 0, 2, 2], "texture": "#3"}, + "up": {"uv": [0, 0, 6, 2], "texture": "#3"}, + "down": {"uv": [0, 0, 6, 2], "texture": "#3"} + } + }, + { + "from": [14, 14, 13], + "to": [15, 16, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#3"} + } + }, + { + "from": [12, 14, 12], + "to": [14, 16, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 2], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "south": {"uv": [0, 0, 2, 2], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "up": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 2, 1], "texture": "#3"} + } + }, + { + "from": [8, 13, 14], + "to": [13, 14, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 5, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 5, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 5, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 5, 1], "texture": "#3"} + } + }, + { + "from": [9, 12, 3], + "to": [13, 14, 6], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 4, 2], "texture": "#3"}, + "east": {"uv": [0, 0, 3, 2], "texture": "#3"}, + "south": {"uv": [0, 0, 4, 2], "texture": "#3"}, + "west": {"uv": [0, 0, 3, 2], "texture": "#3"}, + "up": {"uv": [0, 0, 4, 3], "texture": "#3"}, + "down": {"uv": [0, 0, 4, 3], "texture": "#3"} + } + }, + { + "from": [7, 14, 3], + "to": [9, 16, 6], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 2], "texture": "#3"}, + "east": {"uv": [0, 0, 3, 2], "texture": "#3"}, + "south": {"uv": [0, 0, 2, 2], "texture": "#3"}, + "west": {"uv": [0, 0, 3, 2], "texture": "#3"}, + "up": {"uv": [0, 0, 2, 3], "texture": "#3"}, + "down": {"uv": [0, 0, 2, 3], "texture": "#3"} + } + }, + { + "from": [10, 13, 2], + "to": [13, 14, 3], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 3, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 3, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 3, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 3, 1], "texture": "#3"} + } + }, + { + "from": [13, 13, 2], + "to": [14, 14, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 6, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 6, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 6], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 6], "texture": "#3"} + } + }, + { + "from": [13, 12, 4], + "to": [14, 13, 6], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 2], "texture": "#3"} + } + }, + { + "from": [14, 13, 3], + "to": [15, 14, 6], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 3, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 3, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 3], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 3], "texture": "#3"} + } + }, + { + "from": [10, 11, 6], + "to": [12, 14, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 3], "texture": "#3"}, + "east": {"uv": [0, 0, 2, 3], "texture": "#3"}, + "south": {"uv": [0, 0, 2, 3], "texture": "#3"}, + "west": {"uv": [0, 0, 2, 3], "texture": "#3"}, + "up": {"uv": [0, 0, 2, 2], "texture": "#3"}, + "down": {"uv": [0, 0, 2, 2], "texture": "#3"} + } + }, + { + "from": [10, 12, 8], + "to": [12, 14, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 2], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "south": {"uv": [0, 0, 2, 2], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "up": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 2, 1], "texture": "#3"} + } + }, + { + "from": [9, 12, 6], + "to": [10, 14, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "east": {"uv": [0, 0, 2, 2], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "west": {"uv": [0, 0, 2, 2], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 2], "texture": "#3"} + } + }, + { + "from": [11, 9, 4], + "to": [12, 11, 7], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "east": {"uv": [0, 0, 3, 2], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "west": {"uv": [0, 0, 3, 2], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 3], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 3], "texture": "#3"} + } + }, + { + "from": [10, 9, 4], + "to": [11, 11, 6], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "east": {"uv": [0, 0, 2, 2], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "west": {"uv": [0, 0, 2, 2], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 2], "texture": "#3"} + } + }, + { + "from": [12, 10, 5], + "to": [13, 11, 6], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#3"} + } + }, + { + "from": [11, 7, 5], + "to": [12, 9, 6], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#3"} + } + }, + { + "from": [8, 13, 11], + "to": [11, 14, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 3, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 3, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 3, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 3, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 3, 3], "texture": "#3"}, + "down": {"uv": [0, 0, 3, 3], "texture": "#3"} + } + }, + { + "from": [8, 15, 15], + "to": [13, 16, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 5, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 5, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 5, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 5, 1], "texture": "#3"} + } + }, + { + "from": [11, 13, 13], + "to": [14, 14, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 3, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 3, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 3, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 3, 1], "texture": "#3"} + } + }, + { + "from": [11, 11, 12], + "to": [12, 13, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#3"} + } + }, + { + "from": [10, 13, 15], + "to": [12, 14, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 2, 1], "texture": "#3"} + } + }, + { + "from": [6, 13, 8], + "to": [11, 14, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 5, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 5, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 5, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 5, 1], "texture": "#3"} + } + }, + { + "from": [7, 13, 9], + "to": [13, 14, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 6, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 6, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 6, 2], "texture": "#3"}, + "down": {"uv": [0, 0, 6, 2], "texture": "#3"} + } + }, + { + "from": [9, 10, 12], + "to": [11, 12, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 2], "texture": "#3"}, + "east": {"uv": [0, 0, 2, 2], "texture": "#3"}, + "south": {"uv": [0, 0, 2, 2], "texture": "#3"}, + "west": {"uv": [0, 0, 2, 2], "texture": "#3"}, + "up": {"uv": [0, 0, 2, 2], "texture": "#3"}, + "down": {"uv": [0, 0, 2, 2], "texture": "#3"} + } + }, + { + "from": [10, 8, 12], + "to": [11, 10, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#3"} + } + }, + { + "from": [9, 11, 11], + "to": [11, 12, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 2, 1], "texture": "#3"} + } + }, + { + "from": [2, 12, 4], + "to": [6, 14, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 4, 2], "texture": "#3"}, + "east": {"uv": [0, 0, 7, 2], "texture": "#3"}, + "south": {"uv": [0, 0, 4, 2], "texture": "#3"}, + "west": {"uv": [0, 0, 7, 2], "texture": "#3"}, + "up": {"uv": [0, 0, 4, 7], "texture": "#3"}, + "down": {"uv": [0, 0, 4, 7], "texture": "#3"} + } + }, + { + "from": [6, 12, 6], + "to": [7, 13, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 4, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 4, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 4], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 4], "texture": "#3"} + } + }, + { + "from": [1, 12, 6], + "to": [2, 14, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "east": {"uv": [0, 0, 4, 2], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "west": {"uv": [0, 0, 4, 2], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 4], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 4], "texture": "#3"} + } + }, + { + "from": [2, 13, 11], + "to": [6, 14, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 4, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 4, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 4, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 4, 1], "texture": "#3"} + } + }, + { + "from": [3, 12, 3], + "to": [5, 14, 4], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 2], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "south": {"uv": [0, 0, 2, 2], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "up": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 2, 1], "texture": "#3"} + } + }, + { + "from": [2, 11, 6], + "to": [5, 12, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 3, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 4, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 3, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 4, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 3, 4], "texture": "#3"}, + "down": {"uv": [0, 0, 3, 4], "texture": "#3"} + } + }, + { + "from": [6, 13, 5], + "to": [7, 14, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 6, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 6, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 6], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 6], "texture": "#3"} + } + }, + { + "from": [5, 11, 5], + "to": [6, 12, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 4, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 4, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 4], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 4], "texture": "#3"} + } + }, + { + "from": [3, 10, 5], + "to": [5, 11, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 4, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 4, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 2, 4], "texture": "#3"}, + "down": {"uv": [0, 0, 2, 4], "texture": "#3"} + } + }, + { + "from": [0, 13, 7], + "to": [1, 14, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 2], "texture": "#3"} + } + }, + { + "from": [3, 7, 6], + "to": [5, 9, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 2], "texture": "#3"}, + "east": {"uv": [0, 0, 2, 2], "texture": "#3"}, + "south": {"uv": [0, 0, 2, 2], "texture": "#3"}, + "west": {"uv": [0, 0, 2, 2], "texture": "#3"}, + "up": {"uv": [0, 0, 2, 2], "texture": "#3"}, + "down": {"uv": [0, 0, 2, 2], "texture": "#3"} + } + }, + { + "from": [3, 11, 4], + "to": [5, 12, 6], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 2, 2], "texture": "#3"}, + "down": {"uv": [0, 0, 2, 2], "texture": "#3"} + } + }, + { + "from": [3, 5, 7], + "to": [4, 7, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#3"} + } + }, + { + "from": [2, 10, 6], + "to": [3, 11, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 2], "texture": "#3"} + } + }, + { + "from": [9, 11, 4], + "to": [13, 12, 6], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 4, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 4, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 4, 2], "texture": "#3"}, + "down": {"uv": [0, 0, 4, 2], "texture": "#3"} + } + }, + { + "from": [10, 11, 3], + "to": [12, 12, 4], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 2, 1], "texture": "#3"} + } + }, + { + "from": [11, 12, 2], + "to": [12, 13, 3], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#3"} + } + }, + { + "from": [13, 14, 1], + "to": [14, 16, 2], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#3"} + } + }, + { + "from": [11, 14, 0], + "to": [13, 16, 1], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 2], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "south": {"uv": [0, 0, 2, 2], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "up": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 2, 1], "texture": "#3"} + } + }, + { + "from": [8, 14, 6], + "to": [9, 16, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "east": {"uv": [0, 0, 3, 2], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "west": {"uv": [0, 0, 3, 2], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 3], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 3], "texture": "#3"} + } + }, + { + "from": [11, 14, 9], + "to": [12, 16, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#3"} + } + }, + { + "from": [13, 14, 7], + "to": [14, 16, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#3"} + } + }, + { + "from": [12, 11, 6], + "to": [13, 14, 7], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 3], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 3], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 3], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 3], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#3"} + } + }, + { + "from": [12, 12, 7], + "to": [13, 14, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#3"} + } + }, + { + "from": [7, 13, 4], + "to": [8, 14, 6], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 2], "texture": "#3"} + } + }, + { + "from": [11, 13, 1], + "to": [12, 14, 2], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#3"} + } + }, + { + "from": [8, 12, 10], + "to": [11, 13, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 3, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 4, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 3, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 4, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 3, 4], "texture": "#3"}, + "down": {"uv": [0, 0, 3, 4], "texture": "#3"} + } + }, + { + "from": [8, 14, 9], + "to": [10, 16, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 2], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "south": {"uv": [0, 0, 2, 2], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "up": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 2, 1], "texture": "#3"} + } + }, + { + "from": [12, 14, 11], + "to": [13, 16, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#3"} + } + }, + { + "from": [11, 13, 12], + "to": [13, 14, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 2, 1], "texture": "#3"} + } + }, + { + "from": [11, 13, 11], + "to": [12, 14, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#3"} + } + }, + { + "from": [11, 12, 13], + "to": [13, 13, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 2, 1], "texture": "#3"} + } + }, + { + "from": [10, 12, 14], + "to": [12, 13, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 2, 1], "texture": "#3"} + } + }, + { + "from": [7, 14, 6], + "to": [8, 16, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "east": {"uv": [0, 0, 4, 2], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "west": {"uv": [0, 0, 4, 2], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 4], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 4], "texture": "#3"} + } + }, + { + "from": [3, 14, 1], + "to": [5, 16, 2], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 2], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "south": {"uv": [0, 0, 2, 2], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "up": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 2, 1], "texture": "#3"} + } + }, + { + "from": [1, 14, 4], + "to": [2, 16, 5], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#3"} + } + }, + { + "from": [3, 13, 2], + "to": [4, 14, 3], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#3"} + } + }, + { + "from": [5, 14, 2], + "to": [6, 15, 3], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#3"} + } + }, + { + "from": [7, 14, 2], + "to": [8, 15, 3], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#3"} + } + }, + { + "from": [3, 13, 12], + "to": [6, 14, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 3, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 3, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 3, 2], "texture": "#3"}, + "down": {"uv": [0, 0, 3, 2], "texture": "#3"} + } + }, + { + "from": [2, 15, 13], + "to": [5, 16, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 3, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 3, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 3, 2], "texture": "#3"}, + "down": {"uv": [0, 0, 3, 2], "texture": "#3"} + } + }, + { + "from": [1, 11, 7], + "to": [2, 12, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#3"} + } + }, + { + "from": [1, 13, 5], + "to": [2, 14, 6], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#3"} + } + }, + { + "from": [3, 9, 5], + "to": [5, 10, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 4, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 4, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 2, 4], "texture": "#3"}, + "down": {"uv": [0, 0, 2, 4], "texture": "#3"} + } + }, + { + "from": [5, 10, 6], + "to": [6, 11, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 2], "texture": "#3"} + } + }, + { + "from": [3, 10, 9], + "to": [4, 11, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#3"} + } + }, + { + "from": [1, 13, 10], + "to": [2, 14, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#3"} + } + }, + { + "from": [10, 14, 9], + "to": [11, 16, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#3"} + } + }, + { + "from": [5, 15, 14], + "to": [8, 16, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 3, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 3, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 3, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 3, 1], "texture": "#3"} + } + }, + { + "from": [12, 14, 9], + "to": [13, 16, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "east": {"uv": [0, 0, 2, 2], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "west": {"uv": [0, 0, 2, 2], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 2], "texture": "#3"} + } + }, + { + "from": [13, 15, 8], + "to": [14, 16, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 4, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 4, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 4], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 4], "texture": "#3"} + } + }, + { + "from": [14, 15, 12], + "to": [15, 16, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#3"} + } + }, + { + "from": [13, 15, 15], + "to": [14, 16, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#3"} + } + }, + { + "from": [14, 15, 7], + "to": [16, 16, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 2, 2], "texture": "#3"}, + "down": {"uv": [0, 0, 2, 2], "texture": "#3"} + } + }, + { + "from": [15, 15, 9], + "to": [16, 16, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 5, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 5, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 5], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 5], "texture": "#3"} + } + }, + { + "from": [15, 15, 6], + "to": [16, 16, 7], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#3"} + } + }, + { + "from": [14, 15, 1], + "to": [15, 16, 2], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#3"} + } + }, + { + "from": [15, 15, 2], + "to": [16, 16, 3], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#3"} + } + }, + { + "from": [13, 15, 0], + "to": [14, 16, 1], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#3"} + } + }, + { + "from": [6, 15, 0], + "to": [11, 16, 1], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 5, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 5, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 5, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 5, 1], "texture": "#3"} + } + }, + { + "from": [6, 15, 1], + "to": [10, 16, 2], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 4, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 4, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 4, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 4, 1], "texture": "#3"} + } + }, + { + "from": [6, 15, 3], + "to": [7, 16, 4], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#3"} + } + }, + { + "from": [7, 15, 2], + "to": [8, 16, 3], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#3"} + } + }, + { + "from": [5, 15, 2], + "to": [7, 16, 3], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 2, 1], "texture": "#3"} + } + }, + { + "from": [4, 15, 1], + "to": [6, 16, 2], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 2, 1], "texture": "#3"} + } + }, + { + "from": [2, 15, 1], + "to": [3, 16, 3], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 2], "texture": "#3"} + } + }, + { + "from": [1, 15, 2], + "to": [2, 16, 4], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 2], "texture": "#3"} + } + }, + { + "from": [1, 15, 12], + "to": [2, 16, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 2], "texture": "#3"} + } + }, + { + "from": [6, 13, 11], + "to": [8, 14, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 3, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 3, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 2, 3], "texture": "#3"}, + "down": {"uv": [0, 0, 2, 3], "texture": "#3"} + } + }, + { + "from": [9, 13, 7], + "to": [10, 14, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#3"} + } + }, + { + "from": [8, 13, 6], + "to": [9, 14, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 2], "texture": "#3"} + } + }, + { + "from": [6, 11, 6], + "to": [7, 12, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 2], "texture": "#3"} + } + }, + { + "from": [7, 13, 6], + "to": [8, 14, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 2], "texture": "#3"} + } + }, + { + "from": [8, 11, 12], + "to": [9, 12, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#3"} + } + }, + { + "from": [5, 9, 7], + "to": [6, 10, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#3"} + } + }, + { + "from": [3, 8, 8], + "to": [4, 9, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#3"} + } + }, + { + "from": [2, 8, 7], + "to": [3, 10, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#3"} + } + }, + { + "from": [3, 15, 0], + "to": [6, 16, 1], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 3, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 3, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 3, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 3, 1], "texture": "#3"} + } + }, + { + "from": [3, 15, 15], + "to": [8, 16, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 5, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 5, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 5, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 5, 1], "texture": "#3"} + } + }, + { + "from": [13, 14, 11], + "to": [15, 15, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 2, 1], "texture": "#3"} + } + }, + { + "from": [14, 14, 7], + "to": [15, 15, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 4, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 4, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 4], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 4], "texture": "#3"} + } + }, + { + "from": [13, 14, 8], + "to": [14, 15, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 3, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 3, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 3], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 3], "texture": "#3"} + } + }, + { + "from": [12, 13, 11], + "to": [13, 14, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#3"} + } + }, + { + "from": [11, 12, 11], + "to": [12, 13, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#3"} + } + }, + { + "from": [12, 13, 8], + "to": [13, 14, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#3"} + } + }, + { + "from": [12, 12, 12], + "to": [13, 13, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#3"} + } + }, + { + "from": [7, 12, 6], + "to": [8, 13, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 2], "texture": "#3"} + } + }, + { + "from": [3, 12, 11], + "to": [4, 13, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#3"} + } + }, + { + "from": [3, 11, 10], + "to": [4, 12, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#3"} + } + }, + { + "from": [7, 12, 11], + "to": [8, 13, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 2], "texture": "#3"} + } + }, + { + "from": [9, 12, 9], + "to": [10, 14, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#3"} + } + }, + { + "from": [5, 14, 14], + "to": [8, 15, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 3, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 3, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 3, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 3, 1], "texture": "#3"} + } + }, + { + "from": [3, 14, 13], + "to": [5, 15, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 2, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 2, 2], "texture": "#3"}, + "down": {"uv": [0, 0, 2, 2], "texture": "#3"} + } + }, + { + "from": [9, 9, 12], + "to": [10, 10, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#3"} + } + }, + { + "from": [3, 6, 6], + "to": [4, 7, 7], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#3"} + } + }, + { + "from": [3, 8, 5], + "to": [4, 9, 6], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#3"} + } + }, + { + "from": [14, 15, 9], + "to": [15, 16, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 3, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 3, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 3], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 3], "texture": "#3"} + } + }, + { + "from": [14, 15, 14], + "to": [15, 16, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#3"} + } + }, + { + "from": [9, 14, 15], + "to": [13, 15, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 4, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 4, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 4, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 4, 1], "texture": "#3"} + } + }, + { + "from": [0, 14, 6], + "to": [1, 15, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 4, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 4, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 4], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 4], "texture": "#3"} + } + } + ], + "groups": [ + { + "name": "Everything", + "origin": [8, 8, 8], + "color": 0, + "children": [] + }, + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139, + 140, + 141, + 142, + 143, + 144 + ] +} \ No newline at end of file diff --git a/src/sandmastery/resources/assets/sandmastery/models/block/sand_platform_stage2.json b/src/sandmastery/resources/assets/sandmastery/models/block/sand_platform_stage2.json new file mode 100644 index 000000000..0763e26e5 --- /dev/null +++ b/src/sandmastery/resources/assets/sandmastery/models/block/sand_platform_stage2.json @@ -0,0 +1,1816 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "sandmastery:block/golden_sand", + "particle": "sandmastery:block/golden_sand" + }, + "elements": [ + { + "from": [1, 14, 5], + "to": [6, 16, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 5, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 7, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 5, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 7, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 5, 7], "texture": "#0"}, + "down": {"uv": [0, 0, 5, 7], "texture": "#0"} + } + }, + { + "from": [0, 15, 5], + "to": [1, 16, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 6, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 6, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 6], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 6], "texture": "#0"} + } + }, + { + "from": [2, 14, 12], + "to": [6, 16, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 4, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 4, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 4, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 4, 1], "texture": "#0"} + } + }, + { + "from": [2, 14, 3], + "to": [6, 16, 5], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 4, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 4, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 4, 2], "texture": "#0"}, + "down": {"uv": [0, 0, 4, 2], "texture": "#0"} + } + }, + { + "from": [3, 14, 2], + "to": [5, 16, 3], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 2, 1], "texture": "#0"} + } + }, + { + "from": [6, 14, 4], + "to": [7, 16, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 7, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 7, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 7], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 7], "texture": "#0"} + } + }, + { + "from": [10, 14, 6], + "to": [13, 16, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 3, 3], "texture": "#0"}, + "down": {"uv": [0, 0, 3, 3], "texture": "#0"} + } + }, + { + "from": [9, 14, 3], + "to": [13, 16, 6], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 4, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 4, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 4, 3], "texture": "#0"}, + "down": {"uv": [0, 0, 4, 3], "texture": "#0"} + } + }, + { + "from": [5, 14, 13], + "to": [8, 16, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 3, 1], "texture": "#0"} + } + }, + { + "from": [3, 14, 13], + "to": [5, 15, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "down": {"uv": [0, 0, 2, 2], "texture": "#0"} + } + }, + { + "from": [5, 14, 14], + "to": [8, 15, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 3, 1], "texture": "#0"} + } + }, + { + "from": [6, 14, 11], + "to": [12, 16, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 6, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 6, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 6, 2], "texture": "#0"}, + "down": {"uv": [0, 0, 6, 2], "texture": "#0"} + } + }, + { + "from": [7, 14, 10], + "to": [12, 16, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 5, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 5, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 5, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 5, 1], "texture": "#0"} + } + }, + { + "from": [13, 14, 2], + "to": [15, 16, 7], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 5, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 5, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 5], "texture": "#0"}, + "down": {"uv": [0, 0, 2, 5], "texture": "#0"} + } + }, + { + "from": [10, 14, 1], + "to": [13, 16, 3], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "down": {"uv": [0, 0, 3, 2], "texture": "#0"} + } + }, + { + "from": [8, 14, 2], + "to": [10, 16, 3], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 2, 1], "texture": "#0"} + } + }, + { + "from": [8, 12, 4], + "to": [9, 14, 6], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 2], "texture": "#0"} + } + }, + { + "from": [9, 14, 6], + "to": [10, 16, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 3], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 3], "texture": "#0"} + } + }, + { + "from": [15, 14, 3], + "to": [16, 16, 6], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 3], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 3], "texture": "#0"} + } + }, + { + "from": [8, 14, 13], + "to": [14, 16, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 6, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 6, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 6, 2], "texture": "#0"}, + "down": {"uv": [0, 0, 6, 2], "texture": "#0"} + } + }, + { + "from": [14, 14, 13], + "to": [15, 16, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [14, 15, 14], + "to": [15, 16, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [12, 14, 12], + "to": [14, 16, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 2, 1], "texture": "#0"} + } + }, + { + "from": [13, 14, 11], + "to": [14, 15, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [13, 14, 8], + "to": [14, 15, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [9, 13, 14], + "to": [13, 14, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 4, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 4, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 4, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 4, 1], "texture": "#0"} + } + }, + { + "from": [9, 12, 3], + "to": [13, 14, 6], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 4, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 4, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 4, 3], "texture": "#0"}, + "down": {"uv": [0, 0, 4, 3], "texture": "#0"} + } + }, + { + "from": [7, 14, 3], + "to": [9, 16, 6], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 3], "texture": "#0"}, + "down": {"uv": [0, 0, 2, 3], "texture": "#0"} + } + }, + { + "from": [10, 13, 2], + "to": [13, 14, 3], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 3, 1], "texture": "#0"} + } + }, + { + "from": [13, 13, 2], + "to": [14, 14, 7], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 5, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 5, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 5], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 5], "texture": "#0"} + } + }, + { + "from": [13, 12, 4], + "to": [14, 13, 6], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 2], "texture": "#0"} + } + }, + { + "from": [14, 13, 3], + "to": [15, 14, 6], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 3], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 3], "texture": "#0"} + } + }, + { + "from": [10, 11, 6], + "to": [12, 14, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 3], "texture": "#0"}, + "east": {"uv": [0, 0, 2, 3], "texture": "#0"}, + "south": {"uv": [0, 0, 2, 3], "texture": "#0"}, + "west": {"uv": [0, 0, 2, 3], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "down": {"uv": [0, 0, 2, 2], "texture": "#0"} + } + }, + { + "from": [10, 12, 8], + "to": [12, 14, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 2, 1], "texture": "#0"} + } + }, + { + "from": [9, 12, 9], + "to": [10, 14, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [9, 12, 6], + "to": [10, 14, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 2], "texture": "#0"} + } + }, + { + "from": [11, 9, 4], + "to": [12, 11, 7], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 3], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 3], "texture": "#0"} + } + }, + { + "from": [10, 9, 4], + "to": [11, 11, 6], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 2], "texture": "#0"} + } + }, + { + "from": [12, 10, 5], + "to": [13, 11, 6], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [11, 7, 5], + "to": [12, 9, 6], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [8, 13, 11], + "to": [11, 14, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 3, 3], "texture": "#0"}, + "down": {"uv": [0, 0, 3, 3], "texture": "#0"} + } + }, + { + "from": [8, 15, 15], + "to": [13, 16, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 5, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 5, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 5, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 5, 1], "texture": "#0"} + } + }, + { + "from": [11, 13, 13], + "to": [14, 14, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 3, 1], "texture": "#0"} + } + }, + { + "from": [11, 11, 12], + "to": [12, 13, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [10, 13, 15], + "to": [12, 14, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 2, 1], "texture": "#0"} + } + }, + { + "from": [9, 14, 15], + "to": [13, 15, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 4, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 4, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 4, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 4, 1], "texture": "#0"} + } + }, + { + "from": [6, 13, 8], + "to": [11, 14, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 5, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 5, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 5, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 5, 1], "texture": "#0"} + } + }, + { + "from": [7, 13, 9], + "to": [12, 14, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 5, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 5, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 5, 2], "texture": "#0"}, + "down": {"uv": [0, 0, 5, 2], "texture": "#0"} + } + }, + { + "from": [9, 10, 12], + "to": [11, 12, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "down": {"uv": [0, 0, 2, 2], "texture": "#0"} + } + }, + { + "from": [10, 8, 12], + "to": [11, 10, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [11, 12, 11], + "to": [12, 13, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [12, 12, 12], + "to": [13, 13, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [9, 11, 11], + "to": [11, 12, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 2, 1], "texture": "#0"} + } + }, + { + "from": [2, 12, 4], + "to": [6, 14, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 4, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 7, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 4, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 7, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 4, 7], "texture": "#0"}, + "down": {"uv": [0, 0, 4, 7], "texture": "#0"} + } + }, + { + "from": [6, 12, 6], + "to": [7, 13, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 4, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 4, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 4], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 4], "texture": "#0"} + } + }, + { + "from": [1, 12, 6], + "to": [2, 14, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 4, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 4, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 4], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 4], "texture": "#0"} + } + }, + { + "from": [2, 13, 11], + "to": [6, 14, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 4, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 4, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 4, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 4, 1], "texture": "#0"} + } + }, + { + "from": [3, 12, 3], + "to": [5, 14, 4], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 2, 1], "texture": "#0"} + } + }, + { + "from": [2, 11, 6], + "to": [5, 12, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 4, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 4, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 3, 4], "texture": "#0"}, + "down": {"uv": [0, 0, 3, 4], "texture": "#0"} + } + }, + { + "from": [6, 13, 5], + "to": [7, 14, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 6, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 6, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 6], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 6], "texture": "#0"} + } + }, + { + "from": [5, 11, 5], + "to": [6, 12, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 4, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 4, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 4], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 4], "texture": "#0"} + } + }, + { + "from": [3, 10, 5], + "to": [5, 11, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 4, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 4, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 4], "texture": "#0"}, + "down": {"uv": [0, 0, 2, 4], "texture": "#0"} + } + }, + { + "from": [0, 13, 7], + "to": [1, 14, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 2], "texture": "#0"} + } + }, + { + "from": [0, 14, 6], + "to": [1, 15, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 4, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 4, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 4], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 4], "texture": "#0"} + } + }, + { + "from": [3, 7, 6], + "to": [5, 9, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "down": {"uv": [0, 0, 2, 2], "texture": "#0"} + } + }, + { + "from": [3, 11, 4], + "to": [5, 12, 6], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "down": {"uv": [0, 0, 2, 2], "texture": "#0"} + } + }, + { + "from": [3, 5, 7], + "to": [4, 7, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [3, 6, 6], + "to": [4, 7, 7], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [3, 8, 5], + "to": [4, 9, 6], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [2, 10, 6], + "to": [3, 11, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 2], "texture": "#0"} + } + }, + { + "from": [9, 11, 4], + "to": [13, 12, 6], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 4, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 4, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 4, 2], "texture": "#0"}, + "down": {"uv": [0, 0, 4, 2], "texture": "#0"} + } + }, + { + "from": [10, 11, 3], + "to": [12, 12, 4], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 2, 1], "texture": "#0"} + } + }, + { + "from": [11, 12, 2], + "to": [12, 13, 3], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [13, 14, 1], + "to": [14, 16, 2], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [11, 14, 0], + "to": [13, 16, 1], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 2, 1], "texture": "#0"} + } + }, + { + "from": [8, 14, 6], + "to": [9, 16, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 3], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 3], "texture": "#0"} + } + }, + { + "from": [11, 14, 9], + "to": [12, 16, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [13, 14, 7], + "to": [14, 16, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [12, 11, 6], + "to": [13, 14, 7], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 3], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 3], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 3], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 3], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [12, 12, 7], + "to": [13, 14, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [7, 13, 4], + "to": [8, 14, 6], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 2], "texture": "#0"} + } + }, + { + "from": [11, 13, 1], + "to": [12, 14, 2], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [8, 12, 10], + "to": [11, 13, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 4, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 4, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 3, 4], "texture": "#0"}, + "down": {"uv": [0, 0, 3, 4], "texture": "#0"} + } + }, + { + "from": [8, 14, 9], + "to": [10, 16, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 2, 1], "texture": "#0"} + } + }, + { + "from": [12, 14, 11], + "to": [13, 16, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [11, 13, 12], + "to": [13, 14, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 2, 1], "texture": "#0"} + } + }, + { + "from": [12, 13, 11], + "to": [13, 14, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [11, 13, 11], + "to": [12, 14, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [11, 12, 13], + "to": [13, 13, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 2, 1], "texture": "#0"} + } + }, + { + "from": [10, 12, 14], + "to": [12, 13, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 2, 1], "texture": "#0"} + } + }, + { + "from": [7, 14, 6], + "to": [8, 16, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 4, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 4, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 4], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 4], "texture": "#0"} + } + }, + { + "from": [3, 14, 1], + "to": [4, 16, 2], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [1, 14, 4], + "to": [2, 16, 5], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [3, 13, 2], + "to": [4, 14, 3], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [3, 13, 12], + "to": [5, 14, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 2, 1], "texture": "#0"} + } + }, + { + "from": [3, 12, 11], + "to": [4, 13, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [3, 11, 10], + "to": [4, 12, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [2, 15, 13], + "to": [5, 16, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "down": {"uv": [0, 0, 3, 2], "texture": "#0"} + } + }, + { + "from": [1, 11, 7], + "to": [2, 12, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [1, 13, 5], + "to": [2, 14, 6], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [3, 9, 5], + "to": [5, 10, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 4, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 4, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 4], "texture": "#0"}, + "down": {"uv": [0, 0, 2, 4], "texture": "#0"} + } + }, + { + "from": [5, 10, 6], + "to": [6, 11, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 2], "texture": "#0"} + } + }, + { + "from": [3, 10, 9], + "to": [4, 11, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [1, 13, 10], + "to": [2, 14, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [10, 14, 9], + "to": [11, 16, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [5, 15, 14], + "to": [8, 16, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 3, 1], "texture": "#0"} + } + }, + { + "from": [3, 15, 15], + "to": [5, 16, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 2, 1], "texture": "#0"} + } + }, + { + "from": [12, 14, 9], + "to": [13, 16, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 2], "texture": "#0"} + } + }, + { + "from": [13, 15, 8], + "to": [14, 16, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 4, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 4, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 4], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 4], "texture": "#0"} + } + }, + { + "from": [14, 15, 9], + "to": [15, 16, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 3], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 3], "texture": "#0"} + } + }, + { + "from": [14, 15, 12], + "to": [15, 16, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [13, 15, 15], + "to": [14, 16, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [14, 15, 7], + "to": [16, 16, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "down": {"uv": [0, 0, 2, 2], "texture": "#0"} + } + }, + { + "from": [15, 15, 6], + "to": [16, 16, 7], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [14, 15, 1], + "to": [15, 16, 2], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [15, 15, 2], + "to": [16, 16, 3], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [13, 15, 0], + "to": [14, 16, 1], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [10, 15, 0], + "to": [11, 16, 1], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [8, 15, 1], + "to": [10, 16, 2], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 2, 1], "texture": "#0"} + } + }, + { + "from": [6, 15, 3], + "to": [7, 16, 4], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [7, 15, 2], + "to": [8, 16, 3], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [5, 15, 2], + "to": [7, 16, 3], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 2, 1], "texture": "#0"} + } + }, + { + "from": [4, 15, 1], + "to": [6, 16, 2], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 2, 1], "texture": "#0"} + } + }, + { + "from": [3, 15, 0], + "to": [5, 16, 1], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 2, 1], "texture": "#0"} + } + }, + { + "from": [2, 15, 1], + "to": [3, 16, 3], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 2], "texture": "#0"} + } + }, + { + "from": [1, 15, 3], + "to": [2, 16, 4], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [1, 15, 12], + "to": [2, 16, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 2], "texture": "#0"} + } + }, + { + "from": [6, 13, 11], + "to": [8, 14, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "down": {"uv": [0, 0, 2, 2], "texture": "#0"} + } + }, + { + "from": [9, 13, 7], + "to": [10, 14, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [8, 13, 6], + "to": [9, 14, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 2], "texture": "#0"} + } + }, + { + "from": [6, 11, 6], + "to": [7, 12, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 2], "texture": "#0"} + } + }, + { + "from": [7, 12, 6], + "to": [8, 13, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 2], "texture": "#0"} + } + }, + { + "from": [7, 13, 6], + "to": [8, 14, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 2], "texture": "#0"} + } + }, + { + "from": [8, 11, 12], + "to": [9, 12, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [9, 9, 12], + "to": [10, 10, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [7, 12, 11], + "to": [8, 13, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 2], "texture": "#0"} + } + }, + { + "from": [5, 9, 7], + "to": [6, 10, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [3, 8, 8], + "to": [4, 9, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [2, 8, 7], + "to": [3, 10, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + } + ] +} \ No newline at end of file diff --git a/src/sandmastery/resources/assets/sandmastery/models/block/sand_platform_stage3.json b/src/sandmastery/resources/assets/sandmastery/models/block/sand_platform_stage3.json new file mode 100644 index 000000000..0c58299cf --- /dev/null +++ b/src/sandmastery/resources/assets/sandmastery/models/block/sand_platform_stage3.json @@ -0,0 +1,1595 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "sandmastery:block/golden_sand", + "particle": "sandmastery:block/golden_sand" + }, + "elements": [ + { + "from": [1, 14, 5], + "to": [6, 16, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 5, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 7, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 5, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 7, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 5, 7], "texture": "#0"}, + "down": {"uv": [0, 0, 5, 7], "texture": "#0"} + } + }, + { + "from": [0, 14, 6], + "to": [1, 16, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 5, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 5, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 5], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 5], "texture": "#0"} + } + }, + { + "from": [2, 14, 12], + "to": [6, 16, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 4, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 4, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 4, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 4, 1], "texture": "#0"} + } + }, + { + "from": [2, 14, 3], + "to": [6, 16, 5], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 4, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 4, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 4, 2], "texture": "#0"}, + "down": {"uv": [0, 0, 4, 2], "texture": "#0"} + } + }, + { + "from": [3, 14, 2], + "to": [5, 16, 3], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 2, 1], "texture": "#0"} + } + }, + { + "from": [6, 14, 4], + "to": [7, 16, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 7, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 7, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 7], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 7], "texture": "#0"} + } + }, + { + "from": [10, 14, 6], + "to": [13, 16, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 3, 3], "texture": "#0"}, + "down": {"uv": [0, 0, 3, 3], "texture": "#0"} + } + }, + { + "from": [9, 14, 3], + "to": [13, 16, 6], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 4, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 4, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 4, 3], "texture": "#0"}, + "down": {"uv": [0, 0, 4, 3], "texture": "#0"} + } + }, + { + "from": [5, 14, 13], + "to": [8, 16, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 3, 1], "texture": "#0"} + } + }, + { + "from": [5, 15, 14], + "to": [8, 16, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 3, 1], "texture": "#0"} + } + }, + { + "from": [6, 14, 11], + "to": [12, 16, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 6, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 6, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 6, 2], "texture": "#0"}, + "down": {"uv": [0, 0, 6, 2], "texture": "#0"} + } + }, + { + "from": [7, 14, 10], + "to": [12, 16, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 5, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 5, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 5, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 5, 1], "texture": "#0"} + } + }, + { + "from": [13, 14, 2], + "to": [15, 16, 7], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 5, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 5, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 5], "texture": "#0"}, + "down": {"uv": [0, 0, 2, 5], "texture": "#0"} + } + }, + { + "from": [10, 14, 1], + "to": [13, 16, 3], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "down": {"uv": [0, 0, 3, 2], "texture": "#0"} + } + }, + { + "from": [8, 14, 2], + "to": [10, 16, 3], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 2, 1], "texture": "#0"} + } + }, + { + "from": [8, 12, 4], + "to": [9, 14, 6], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 2], "texture": "#0"} + } + }, + { + "from": [9, 14, 6], + "to": [10, 16, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 3], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 3], "texture": "#0"} + } + }, + { + "from": [15, 14, 3], + "to": [16, 16, 6], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 3], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 3], "texture": "#0"} + } + }, + { + "from": [8, 14, 13], + "to": [14, 16, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 6, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 6, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 6, 2], "texture": "#0"}, + "down": {"uv": [0, 0, 6, 2], "texture": "#0"} + } + }, + { + "from": [14, 14, 13], + "to": [15, 16, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [12, 14, 12], + "to": [14, 16, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 2, 1], "texture": "#0"} + } + }, + { + "from": [9, 13, 14], + "to": [13, 14, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 4, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 4, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 4, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 4, 1], "texture": "#0"} + } + }, + { + "from": [9, 12, 3], + "to": [13, 14, 6], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 4, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 4, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 4, 3], "texture": "#0"}, + "down": {"uv": [0, 0, 4, 3], "texture": "#0"} + } + }, + { + "from": [7, 14, 3], + "to": [9, 16, 6], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 3], "texture": "#0"}, + "down": {"uv": [0, 0, 2, 3], "texture": "#0"} + } + }, + { + "from": [10, 13, 2], + "to": [13, 14, 3], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 3, 1], "texture": "#0"} + } + }, + { + "from": [13, 13, 2], + "to": [14, 14, 7], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 5, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 5, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 5], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 5], "texture": "#0"} + } + }, + { + "from": [13, 12, 4], + "to": [14, 13, 6], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 2], "texture": "#0"} + } + }, + { + "from": [14, 13, 3], + "to": [15, 14, 6], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 3], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 3], "texture": "#0"} + } + }, + { + "from": [10, 11, 6], + "to": [12, 14, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 3], "texture": "#0"}, + "east": {"uv": [0, 0, 2, 3], "texture": "#0"}, + "south": {"uv": [0, 0, 2, 3], "texture": "#0"}, + "west": {"uv": [0, 0, 2, 3], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "down": {"uv": [0, 0, 2, 2], "texture": "#0"} + } + }, + { + "from": [11, 12, 8], + "to": [12, 14, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [9, 12, 6], + "to": [10, 14, 7], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [11, 9, 4], + "to": [12, 11, 7], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 3], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 3], "texture": "#0"} + } + }, + { + "from": [10, 9, 4], + "to": [11, 11, 6], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 2], "texture": "#0"} + } + }, + { + "from": [12, 10, 5], + "to": [13, 11, 6], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [11, 8, 5], + "to": [12, 9, 6], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [8, 13, 11], + "to": [11, 14, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 3, 3], "texture": "#0"}, + "down": {"uv": [0, 0, 3, 3], "texture": "#0"} + } + }, + { + "from": [9, 14, 15], + "to": [13, 16, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 4, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 4, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 4, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 4, 1], "texture": "#0"} + } + }, + { + "from": [11, 13, 13], + "to": [14, 14, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 3, 1], "texture": "#0"} + } + }, + { + "from": [11, 11, 12], + "to": [12, 13, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [10, 13, 15], + "to": [12, 14, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 2, 1], "texture": "#0"} + } + }, + { + "from": [10, 13, 8], + "to": [11, 14, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [9, 13, 7], + "to": [10, 14, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [8, 13, 6], + "to": [9, 14, 7], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [7, 13, 12], + "to": [8, 14, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [8, 11, 12], + "to": [9, 12, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [8, 13, 10], + "to": [11, 14, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 3, 1], "texture": "#0"} + } + }, + { + "from": [9, 10, 12], + "to": [11, 12, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "down": {"uv": [0, 0, 2, 2], "texture": "#0"} + } + }, + { + "from": [10, 9, 12], + "to": [11, 10, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [9, 11, 11], + "to": [11, 12, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 2, 1], "texture": "#0"} + } + }, + { + "from": [2, 12, 4], + "to": [6, 14, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 4, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 7, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 4, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 7, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 4, 7], "texture": "#0"}, + "down": {"uv": [0, 0, 4, 7], "texture": "#0"} + } + }, + { + "from": [6, 12, 6], + "to": [7, 13, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 4, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 4, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 4], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 4], "texture": "#0"} + } + }, + { + "from": [1, 12, 6], + "to": [2, 14, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 4, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 4, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 4], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 4], "texture": "#0"} + } + }, + { + "from": [2, 13, 11], + "to": [6, 14, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 4, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 4, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 4, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 4, 1], "texture": "#0"} + } + }, + { + "from": [3, 12, 3], + "to": [5, 14, 4], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 2, 1], "texture": "#0"} + } + }, + { + "from": [2, 11, 6], + "to": [5, 12, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 4, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 4, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 3, 4], "texture": "#0"}, + "down": {"uv": [0, 0, 3, 4], "texture": "#0"} + } + }, + { + "from": [6, 13, 5], + "to": [7, 14, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 6, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 6, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 6], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 6], "texture": "#0"} + } + }, + { + "from": [5, 11, 5], + "to": [6, 12, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 4, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 4, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 4], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 4], "texture": "#0"} + } + }, + { + "from": [3, 10, 5], + "to": [5, 11, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 4, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 4, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 4], "texture": "#0"}, + "down": {"uv": [0, 0, 2, 4], "texture": "#0"} + } + }, + { + "from": [0, 13, 7], + "to": [1, 14, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 2], "texture": "#0"} + } + }, + { + "from": [3, 7, 6], + "to": [5, 9, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "down": {"uv": [0, 0, 2, 2], "texture": "#0"} + } + }, + { + "from": [3, 11, 4], + "to": [5, 12, 6], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "down": {"uv": [0, 0, 2, 2], "texture": "#0"} + } + }, + { + "from": [3, 6, 7], + "to": [4, 7, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [3, 8, 8], + "to": [4, 9, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [2, 10, 6], + "to": [3, 11, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 2], "texture": "#0"} + } + }, + { + "from": [2, 8, 7], + "to": [3, 10, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [9, 11, 4], + "to": [13, 12, 6], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 4, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 4, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 4, 2], "texture": "#0"}, + "down": {"uv": [0, 0, 4, 2], "texture": "#0"} + } + }, + { + "from": [10, 11, 3], + "to": [12, 12, 4], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 2, 1], "texture": "#0"} + } + }, + { + "from": [11, 12, 2], + "to": [12, 13, 3], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [13, 14, 1], + "to": [14, 16, 2], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [11, 14, 0], + "to": [13, 16, 1], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 2, 1], "texture": "#0"} + } + }, + { + "from": [8, 14, 6], + "to": [9, 16, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 3], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 3], "texture": "#0"} + } + }, + { + "from": [10, 14, 9], + "to": [11, 16, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [11, 14, 9], + "to": [12, 16, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [12, 14, 9], + "to": [13, 16, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 2], "texture": "#0"} + } + }, + { + "from": [13, 15, 8], + "to": [14, 16, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 4, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 4, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 4], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 4], "texture": "#0"} + } + }, + { + "from": [14, 15, 12], + "to": [15, 16, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [14, 15, 1], + "to": [15, 16, 2], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [13, 15, 0], + "to": [14, 16, 1], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [10, 15, 0], + "to": [11, 16, 1], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [9, 15, 1], + "to": [10, 16, 2], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [6, 15, 3], + "to": [7, 16, 4], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [7, 15, 2], + "to": [8, 16, 3], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [5, 15, 2], + "to": [6, 16, 3], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [4, 15, 1], + "to": [5, 16, 2], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [1, 15, 3], + "to": [2, 16, 4], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [0, 15, 4], + "to": [1, 16, 5], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [2, 15, 1], + "to": [3, 16, 3], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 2], "texture": "#0"} + } + }, + { + "from": [15, 15, 2], + "to": [16, 16, 3], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [15, 15, 6], + "to": [16, 16, 7], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [14, 15, 7], + "to": [15, 16, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 2], "texture": "#0"} + } + }, + { + "from": [14, 15, 14], + "to": [15, 16, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [13, 15, 15], + "to": [14, 16, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [13, 14, 7], + "to": [14, 16, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [12, 11, 6], + "to": [13, 14, 7], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 3], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 3], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 3], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 3], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [12, 12, 7], + "to": [13, 14, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [7, 13, 4], + "to": [8, 14, 5], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [11, 13, 1], + "to": [12, 14, 2], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [8, 12, 11], + "to": [11, 13, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 3, 3], "texture": "#0"}, + "down": {"uv": [0, 0, 3, 3], "texture": "#0"} + } + }, + { + "from": [8, 14, 9], + "to": [10, 16, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 2, 1], "texture": "#0"} + } + }, + { + "from": [12, 14, 11], + "to": [13, 16, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [11, 13, 12], + "to": [13, 14, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 2, 1], "texture": "#0"} + } + }, + { + "from": [11, 13, 11], + "to": [12, 14, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [11, 12, 13], + "to": [13, 13, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 2, 1], "texture": "#0"} + } + }, + { + "from": [10, 12, 14], + "to": [12, 13, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 2, 1], "texture": "#0"} + } + }, + { + "from": [7, 14, 6], + "to": [8, 16, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 4, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 4, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 4], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 4], "texture": "#0"} + } + }, + { + "from": [3, 14, 1], + "to": [4, 16, 2], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [1, 14, 4], + "to": [2, 16, 5], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [3, 13, 2], + "to": [4, 14, 3], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [3, 13, 12], + "to": [4, 14, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [3, 15, 13], + "to": [5, 16, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 2, 1], "texture": "#0"} + } + }, + { + "from": [1, 15, 12], + "to": [2, 16, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [0, 15, 11], + "to": [1, 16, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [1, 11, 7], + "to": [2, 12, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [0, 15, 5], + "to": [1, 16, 6], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [1, 13, 5], + "to": [2, 14, 6], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [3, 9, 5], + "to": [5, 10, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 4, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 4, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 4], "texture": "#0"}, + "down": {"uv": [0, 0, 2, 4], "texture": "#0"} + } + }, + { + "from": [5, 10, 6], + "to": [6, 11, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 2], "texture": "#0"} + } + }, + { + "from": [5, 9, 7], + "to": [6, 10, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [6, 11, 6], + "to": [7, 12, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 2], "texture": "#0"} + } + }, + { + "from": [7, 13, 6], + "to": [8, 14, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 2], "texture": "#0"} + } + }, + { + "from": [3, 10, 9], + "to": [4, 11, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [1, 13, 10], + "to": [2, 14, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + } + ] +} \ No newline at end of file diff --git a/src/sandmastery/resources/assets/sandmastery/models/block/sand_platform_stage4.json b/src/sandmastery/resources/assets/sandmastery/models/block/sand_platform_stage4.json new file mode 100644 index 000000000..d29fb21e1 --- /dev/null +++ b/src/sandmastery/resources/assets/sandmastery/models/block/sand_platform_stage4.json @@ -0,0 +1,1179 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "sandmastery:block/golden_sand", + "particle": "sandmastery:block/golden_sand" + }, + "elements": [ + { + "from": [1, 14, 5], + "to": [6, 16, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 5, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 7, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 5, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 7, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 5, 7], "texture": "#0"}, + "down": {"uv": [0, 0, 5, 7], "texture": "#0"} + } + }, + { + "from": [0, 14, 6], + "to": [1, 16, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 5, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 5, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 5], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 5], "texture": "#0"} + } + }, + { + "from": [2, 14, 12], + "to": [5, 16, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 3, 1], "texture": "#0"} + } + }, + { + "from": [2, 14, 3], + "to": [6, 16, 5], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 4, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 4, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 4, 2], "texture": "#0"}, + "down": {"uv": [0, 0, 4, 2], "texture": "#0"} + } + }, + { + "from": [3, 14, 2], + "to": [5, 16, 3], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 2, 1], "texture": "#0"} + } + }, + { + "from": [3, 14, 1], + "to": [4, 16, 2], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [1, 14, 4], + "to": [2, 16, 5], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [6, 14, 4], + "to": [7, 16, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 6, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 6, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 6], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 6], "texture": "#0"} + } + }, + { + "from": [7, 14, 7], + "to": [8, 16, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 2], "texture": "#0"} + } + }, + { + "from": [10, 14, 6], + "to": [13, 16, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 3, 3], "texture": "#0"}, + "down": {"uv": [0, 0, 3, 3], "texture": "#0"} + } + }, + { + "from": [9, 14, 3], + "to": [13, 16, 6], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 4, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 4, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 4, 3], "texture": "#0"}, + "down": {"uv": [0, 0, 4, 3], "texture": "#0"} + } + }, + { + "from": [7, 14, 13], + "to": [8, 16, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [6, 14, 11], + "to": [12, 16, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 6, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 6, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 6, 2], "texture": "#0"}, + "down": {"uv": [0, 0, 6, 2], "texture": "#0"} + } + }, + { + "from": [7, 14, 10], + "to": [12, 16, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 5, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 5, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 5, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 5, 1], "texture": "#0"} + } + }, + { + "from": [8, 14, 9], + "to": [10, 16, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 2, 1], "texture": "#0"} + } + }, + { + "from": [13, 14, 2], + "to": [15, 16, 7], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 5, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 5, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 5], "texture": "#0"}, + "down": {"uv": [0, 0, 2, 5], "texture": "#0"} + } + }, + { + "from": [10, 14, 1], + "to": [13, 16, 3], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "down": {"uv": [0, 0, 3, 2], "texture": "#0"} + } + }, + { + "from": [11, 14, 0], + "to": [13, 16, 1], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 2, 1], "texture": "#0"} + } + }, + { + "from": [13, 14, 1], + "to": [14, 16, 2], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [8, 14, 2], + "to": [10, 16, 3], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 2, 1], "texture": "#0"} + } + }, + { + "from": [8, 12, 4], + "to": [9, 14, 6], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 2], "texture": "#0"} + } + }, + { + "from": [7, 13, 4], + "to": [8, 14, 5], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [9, 14, 6], + "to": [10, 16, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 2], "texture": "#0"} + } + }, + { + "from": [8, 14, 6], + "to": [9, 16, 7], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [15, 14, 3], + "to": [16, 16, 6], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 3], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 3], "texture": "#0"} + } + }, + { + "from": [8, 14, 13], + "to": [14, 16, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 6, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 6, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 6, 2], "texture": "#0"}, + "down": {"uv": [0, 0, 6, 2], "texture": "#0"} + } + }, + { + "from": [14, 14, 13], + "to": [15, 16, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [12, 14, 12], + "to": [14, 16, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 2, 1], "texture": "#0"} + } + }, + { + "from": [12, 14, 11], + "to": [13, 16, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [9, 13, 14], + "to": [13, 14, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 4, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 4, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 4, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 4, 1], "texture": "#0"} + } + }, + { + "from": [9, 12, 3], + "to": [13, 14, 6], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 4, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 4, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 4, 3], "texture": "#0"}, + "down": {"uv": [0, 0, 4, 3], "texture": "#0"} + } + }, + { + "from": [9, 11, 4], + "to": [13, 12, 6], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 4, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 4, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 4, 2], "texture": "#0"}, + "down": {"uv": [0, 0, 4, 2], "texture": "#0"} + } + }, + { + "from": [10, 11, 3], + "to": [12, 12, 4], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 2, 1], "texture": "#0"} + } + }, + { + "from": [7, 14, 3], + "to": [9, 16, 6], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 3], "texture": "#0"}, + "down": {"uv": [0, 0, 2, 3], "texture": "#0"} + } + }, + { + "from": [10, 13, 2], + "to": [13, 14, 3], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 3, 1], "texture": "#0"} + } + }, + { + "from": [11, 12, 2], + "to": [12, 13, 3], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [11, 13, 1], + "to": [12, 14, 2], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [13, 13, 2], + "to": [14, 14, 7], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 5, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 5, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 5], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 5], "texture": "#0"} + } + }, + { + "from": [12, 12, 7], + "to": [13, 14, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [13, 12, 4], + "to": [14, 13, 6], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 2], "texture": "#0"} + } + }, + { + "from": [14, 13, 3], + "to": [15, 14, 6], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 3], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 3], "texture": "#0"} + } + }, + { + "from": [10, 11, 6], + "to": [12, 14, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 3], "texture": "#0"}, + "east": {"uv": [0, 0, 2, 3], "texture": "#0"}, + "south": {"uv": [0, 0, 2, 3], "texture": "#0"}, + "west": {"uv": [0, 0, 2, 3], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "down": {"uv": [0, 0, 2, 2], "texture": "#0"} + } + }, + { + "from": [12, 11, 6], + "to": [13, 14, 7], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 3], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 3], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 3], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 3], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [11, 12, 8], + "to": [12, 14, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [11, 14, 9], + "to": [12, 16, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [13, 14, 7], + "to": [14, 16, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [9, 12, 6], + "to": [10, 14, 7], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [11, 10, 4], + "to": [12, 11, 7], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 3], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 3], "texture": "#0"} + } + }, + { + "from": [10, 10, 4], + "to": [11, 11, 6], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 2], "texture": "#0"} + } + }, + { + "from": [12, 10, 5], + "to": [13, 11, 6], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [11, 9, 5], + "to": [12, 10, 6], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [8, 13, 11], + "to": [11, 14, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 3, 3], "texture": "#0"}, + "down": {"uv": [0, 0, 3, 3], "texture": "#0"} + } + }, + { + "from": [8, 12, 11], + "to": [11, 13, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 3, 3], "texture": "#0"}, + "down": {"uv": [0, 0, 3, 3], "texture": "#0"} + } + }, + { + "from": [9, 14, 15], + "to": [13, 16, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 4, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 4, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 4, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 4, 1], "texture": "#0"} + } + }, + { + "from": [11, 13, 13], + "to": [14, 14, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 3, 1], "texture": "#0"} + } + }, + { + "from": [11, 12, 13], + "to": [13, 13, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 2, 1], "texture": "#0"} + } + }, + { + "from": [10, 12, 14], + "to": [12, 13, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 2, 1], "texture": "#0"} + } + }, + { + "from": [11, 11, 12], + "to": [12, 13, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [10, 13, 15], + "to": [12, 14, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 2, 1], "texture": "#0"} + } + }, + { + "from": [7, 13, 12], + "to": [8, 14, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [8, 13, 10], + "to": [10, 14, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 2, 1], "texture": "#0"} + } + }, + { + "from": [11, 13, 12], + "to": [13, 14, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 2, 1], "texture": "#0"} + } + }, + { + "from": [11, 13, 11], + "to": [12, 14, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [9, 11, 12], + "to": [11, 12, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "down": {"uv": [0, 0, 2, 2], "texture": "#0"} + } + }, + { + "from": [10, 10, 12], + "to": [11, 11, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [10, 11, 11], + "to": [11, 12, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [2, 12, 4], + "to": [6, 14, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 4, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 7, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 4, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 7, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 4, 7], "texture": "#0"}, + "down": {"uv": [0, 0, 4, 7], "texture": "#0"} + } + }, + { + "from": [6, 12, 6], + "to": [7, 13, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 2], "texture": "#0"} + } + }, + { + "from": [1, 12, 6], + "to": [2, 14, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 4, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 4, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 4], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 4], "texture": "#0"} + } + }, + { + "from": [2, 13, 11], + "to": [5, 14, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 3, 1], "texture": "#0"} + } + }, + { + "from": [3, 13, 12], + "to": [4, 14, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [3, 15, 13], + "to": [4, 16, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [3, 12, 3], + "to": [5, 14, 4], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 2, 1], "texture": "#0"} + } + }, + { + "from": [3, 13, 2], + "to": [4, 14, 3], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [2, 11, 6], + "to": [5, 12, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 4, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 4, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 3, 4], "texture": "#0"}, + "down": {"uv": [0, 0, 3, 4], "texture": "#0"} + } + }, + { + "from": [6, 13, 5], + "to": [7, 14, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 4, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 4, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 4], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 4], "texture": "#0"} + } + }, + { + "from": [5, 11, 5], + "to": [6, 12, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 4, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 4, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 4], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 4], "texture": "#0"} + } + }, + { + "from": [3, 10, 5], + "to": [5, 11, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 4, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 4, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 4], "texture": "#0"}, + "down": {"uv": [0, 0, 2, 4], "texture": "#0"} + } + }, + { + "from": [3, 9, 5], + "to": [5, 10, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 4, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 4, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 4], "texture": "#0"}, + "down": {"uv": [0, 0, 2, 4], "texture": "#0"} + } + }, + { + "from": [0, 13, 7], + "to": [1, 14, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 2], "texture": "#0"} + } + }, + { + "from": [0, 15, 5], + "to": [1, 16, 6], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [1, 13, 5], + "to": [2, 14, 6], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [3, 8, 6], + "to": [4, 9, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 2], "texture": "#0"} + } + }, + { + "from": [5, 10, 6], + "to": [6, 11, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 2], "texture": "#0"} + } + }, + { + "from": [3, 11, 4], + "to": [5, 12, 6], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "down": {"uv": [0, 0, 2, 2], "texture": "#0"} + } + }, + { + "from": [3, 7, 7], + "to": [4, 8, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [3, 10, 9], + "to": [4, 11, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [1, 13, 10], + "to": [2, 14, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [2, 10, 7], + "to": [3, 11, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [1, 11, 7], + "to": [2, 12, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + } + ] +} \ No newline at end of file diff --git a/src/sandmastery/resources/assets/sandmastery/models/block/sand_platform_stage5.json b/src/sandmastery/resources/assets/sandmastery/models/block/sand_platform_stage5.json new file mode 100644 index 000000000..387143035 --- /dev/null +++ b/src/sandmastery/resources/assets/sandmastery/models/block/sand_platform_stage5.json @@ -0,0 +1,763 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "sandmastery:block/golden_sand", + "particle": "sandmastery:block/golden_sand" + }, + "elements": [ + { + "from": [1.5, 14, 4.25], + "to": [6.5, 16, 10.25], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.5, -2, -0.75]}, + "faces": { + "north": {"uv": [0, 0, 5, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 6, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 5, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 6, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 5, 6], "texture": "#0"}, + "down": {"uv": [0, 0, 5, 6], "texture": "#0"} + } + }, + { + "from": [2.5, 14, 10.25], + "to": [5.5, 16, 11.25], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.5, -2, -0.75]}, + "faces": { + "north": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 3, 1], "texture": "#0"} + } + }, + { + "from": [3.5, 13, 10.25], + "to": [4.5, 14, 11.25], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.5, -2, -0.75]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [2.5, 14, 2.25], + "to": [6.5, 16, 4.25], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.5, -2, -0.75]}, + "faces": { + "north": {"uv": [0, 0, 4, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 4, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 4, 2], "texture": "#0"}, + "down": {"uv": [0, 0, 4, 2], "texture": "#0"} + } + }, + { + "from": [2.5, 12, 3.25], + "to": [6.5, 14, 10.25], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.5, -2, -0.75]}, + "faces": { + "north": {"uv": [0, 0, 4, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 7, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 4, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 7, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 4, 7], "texture": "#0"}, + "down": {"uv": [0, 0, 4, 7], "texture": "#0"} + } + }, + { + "from": [6.5, 12, 5.25], + "to": [7.5, 13, 6.25], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.5, -2, -0.75]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [5.5, 11, 4.25], + "to": [6.5, 12, 8.25], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.5, -2, -0.75]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 4, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 4, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 4], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 4], "texture": "#0"} + } + }, + { + "from": [3.5, 10, 4.25], + "to": [5.5, 11, 8.25], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.5, -2, -0.75]}, + "faces": { + "north": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 4, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 4, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 4], "texture": "#0"}, + "down": {"uv": [0, 0, 2, 4], "texture": "#0"} + } + }, + { + "from": [2.5, 10, 6.25], + "to": [3.5, 11, 7.25], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.5, -2, -0.75]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [3.5, 9, 5.25], + "to": [4.5, 10, 7.25], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.5, -2, -0.75]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 2], "texture": "#0"} + } + }, + { + "from": [3.5, 8, 6.25], + "to": [4.5, 9, 7.25], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.5, -2, -0.75]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [6.5, 13, 4.25], + "to": [7.5, 14, 7.25], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.5, -2, -0.75]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 3], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 3], "texture": "#0"} + } + }, + { + "from": [10.5, 14, 5.25], + "to": [13.5, 16, 8.25], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.5, -2, -0.75]}, + "faces": { + "north": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 3, 3], "texture": "#0"}, + "down": {"uv": [0, 0, 3, 3], "texture": "#0"} + } + }, + { + "from": [10.5, 12, 5.25], + "to": [13.5, 14, 7.25], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.5, -2, -0.75]}, + "faces": { + "north": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "down": {"uv": [0, 0, 3, 2], "texture": "#0"} + } + }, + { + "from": [11.5, 13, 7.25], + "to": [12.5, 14, 8.25], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.5, -2, -0.75]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [10.5, 14, 0.25], + "to": [13.5, 16, 2.25], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.5, -2, -0.75]}, + "faces": { + "north": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "down": {"uv": [0, 0, 3, 2], "texture": "#0"} + } + }, + { + "from": [9.5, 14, 1.25], + "to": [10.5, 16, 2.25], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.5, -2, -0.75]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [9.5, 14, 5.25], + "to": [10.5, 16, 7.25], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.5, -2, -0.75]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 2], "texture": "#0"} + } + }, + { + "from": [9.5, 14, 2.25], + "to": [13.5, 16, 5.25], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.5, -2, -0.75]}, + "faces": { + "north": {"uv": [0, 0, 4, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 4, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 4, 3], "texture": "#0"}, + "down": {"uv": [0, 0, 4, 3], "texture": "#0"} + } + }, + { + "from": [9.5, 12, 2.25], + "to": [13.5, 14, 5.25], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.5, -2, -0.75]}, + "faces": { + "north": {"uv": [0, 0, 4, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 4, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 4, 3], "texture": "#0"}, + "down": {"uv": [0, 0, 4, 3], "texture": "#0"} + } + }, + { + "from": [11.5, 11, 3.25], + "to": [12.5, 12, 6.25], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.5, -2, -0.75]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 3], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 3], "texture": "#0"} + } + }, + { + "from": [8.5, 13, 3.25], + "to": [9.5, 14, 4.25], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.5, -2, -0.75]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [10.5, 11, 3.25], + "to": [11.5, 12, 5.25], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.5, -2, -0.75]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 2], "texture": "#0"} + } + }, + { + "from": [12.5, 11, 4.25], + "to": [13.5, 12, 5.25], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.5, -2, -0.75]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [11.5, 10, 4.25], + "to": [12.5, 11, 5.25], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.5, -2, -0.75]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [9.5, 13, 5.25], + "to": [10.5, 14, 6.25], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.5, -2, -0.75]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [13.5, 12, 3.25], + "to": [14.5, 13, 4.25], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.5, -2, -0.75]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [14.5, 13, 3.25], + "to": [15.5, 14, 4.25], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.5, -2, -0.75]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [10.5, 13, 1.25], + "to": [13.5, 14, 2.25], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.5, -2, -0.75]}, + "faces": { + "north": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 3, 1], "texture": "#0"} + } + }, + { + "from": [13.5, 13, 2.25], + "to": [14.5, 14, 5.25], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.5, -2, -0.75]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 3], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 3], "texture": "#0"} + } + }, + { + "from": [8.5, 14, 2.25], + "to": [9.5, 16, 5.25], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.5, -2, -0.75]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 3], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 3], "texture": "#0"} + } + }, + { + "from": [14.5, 14, 2.25], + "to": [15.5, 16, 5.25], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.5, -2, -0.75]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 3], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 3], "texture": "#0"} + } + }, + { + "from": [13.5, 14, 1.25], + "to": [14.5, 16, 6.25], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.5, -2, -0.75]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 5, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 5, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 5], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 5], "texture": "#0"} + } + }, + { + "from": [7.5, 14, 10.25], + "to": [12.5, 16, 12.25], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.5, -2, -0.75]}, + "faces": { + "north": {"uv": [0, 0, 5, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 5, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 5, 2], "texture": "#0"}, + "down": {"uv": [0, 0, 5, 2], "texture": "#0"} + } + }, + { + "from": [8.5, 13, 10.25], + "to": [11.5, 14, 13.25], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.5, -2, -0.75]}, + "faces": { + "north": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 3, 3], "texture": "#0"}, + "down": {"uv": [0, 0, 3, 3], "texture": "#0"} + } + }, + { + "from": [11.5, 13, 12.25], + "to": [13.5, 14, 13.25], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.5, -2, -0.75]}, + "faces": { + "north": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 2, 1], "texture": "#0"} + } + }, + { + "from": [7.5, 14, 12.25], + "to": [8.5, 16, 13.25], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.5, -2, -0.75]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [7.5, 13, 11.25], + "to": [8.5, 14, 12.25], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.5, -2, -0.75]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [9.5, 13, 9.25], + "to": [10.5, 14, 10.25], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.5, -2, -0.75]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [13.5, 14, 12.25], + "to": [14.5, 16, 13.25], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.5, -2, -0.75]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [12.5, 14, 11.25], + "to": [13.5, 16, 12.25], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.5, -2, -0.75]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [11.5, 12, 11.25], + "to": [12.5, 14, 12.25], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.5, -2, -0.75]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [9.5, 12, 11.25], + "to": [11.5, 13, 13.25], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.5, -2, -0.75]}, + "faces": { + "north": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "down": {"uv": [0, 0, 2, 2], "texture": "#0"} + } + }, + { + "from": [10.5, 11, 11.25], + "to": [11.5, 12, 12.25], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.5, -2, -0.75]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [10.5, 12, 10.25], + "to": [11.5, 13, 11.25], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.5, -2, -0.75]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [8.5, 14, 12.25], + "to": [13.5, 16, 14.25], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.5, -2, -0.75]}, + "faces": { + "north": {"uv": [0, 0, 5, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 5, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 5, 2], "texture": "#0"}, + "down": {"uv": [0, 0, 5, 2], "texture": "#0"} + } + }, + { + "from": [8.5, 14, 9.25], + "to": [11.5, 16, 10.25], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.5, -2, -0.75]}, + "faces": { + "north": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 3, 1], "texture": "#0"} + } + }, + { + "from": [9.5, 13, 13.25], + "to": [12.5, 14, 14.25], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.5, -2, -0.75]}, + "faces": { + "north": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 3, 1], "texture": "#0"} + } + }, + { + "from": [9.5, 14, 14.25], + "to": [12.5, 16, 15.25], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.5, -2, -0.75]}, + "faces": { + "north": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 3, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 3, 1], "texture": "#0"} + } + }, + { + "from": [10.5, 13, 14.25], + "to": [11.5, 14, 15.25], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.5, -2, -0.75]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + } + }, + { + "from": [3.5, 14, 1.25], + "to": [5.5, 16, 2.25], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.5, -2, -0.75]}, + "faces": { + "north": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 2, 1], "texture": "#0"} + } + }, + { + "from": [3.5, 12, 2.25], + "to": [5.5, 14, 3.25], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.5, -2, -0.75]}, + "faces": { + "north": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 2, 1], "texture": "#0"} + } + }, + { + "from": [0.5, 14, 5.25], + "to": [1.5, 16, 9.25], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.5, -2, -0.75]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 4, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 4, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 4], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 4], "texture": "#0"} + } + }, + { + "from": [0.5, 13, 6.25], + "to": [1.5, 14, 8.25], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.5, -2, -0.75]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 2], "texture": "#0"} + } + }, + { + "from": [1.5, 12, 5.25], + "to": [2.5, 14, 9.25], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.5, -2, -0.75]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 4, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 4, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 4], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 4], "texture": "#0"} + } + }, + { + "from": [2.5, 11, 5.25], + "to": [5.5, 12, 9.25], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.5, -2, -0.75]}, + "faces": { + "north": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 4, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 3, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 4, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 3, 4], "texture": "#0"}, + "down": {"uv": [0, 0, 3, 4], "texture": "#0"} + } + }, + { + "from": [3.5, 11, 3.25], + "to": [5.5, 12, 5.25], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.5, -2, -0.75]}, + "faces": { + "north": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 2], "texture": "#0"}, + "down": {"uv": [0, 0, 2, 2], "texture": "#0"} + } + }, + { + "from": [6.5, 14, 3.25], + "to": [7.5, 16, 8.25], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.5, -2, -0.75]}, + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 5, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 5, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 5], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 5], "texture": "#0"} + } + } + ] +} \ No newline at end of file diff --git a/src/sandmastery/resources/assets/sandmastery/models/block/sand_spreading_tub.json b/src/sandmastery/resources/assets/sandmastery/models/block/sand_spreading_tub.json new file mode 100644 index 000000000..ad7a87415 --- /dev/null +++ b/src/sandmastery/resources/assets/sandmastery/models/block/sand_spreading_tub.json @@ -0,0 +1,70 @@ +{ + "credit": "Made with Blockbench", + "texture_size": [64, 64], + "textures": { + "0": "sandmastery:block/sand_spreading_tub", + "particle": "sandmastery:block/sand_spreading_tub" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 10, 16], + "faces": { + "north": {"uv": [4, 0, 8, 2.5], "texture": "#0"}, + "east": {"uv": [4, 2.5, 8, 5], "texture": "#0"}, + "south": {"uv": [4, 5, 8, 7.5], "texture": "#0"}, + "west": {"uv": [4, 7.5, 8, 10], "texture": "#0"}, + "up": {"uv": [4, 4, 0, 0], "texture": "#0"}, + "down": {"uv": [4, 4, 0, 8], "texture": "#0"} + } + }, + { + "from": [0, 10, 0], + "to": [2, 12, 16], + "faces": { + "north": {"uv": [8, 8.5, 8.5, 9], "texture": "#0"}, + "east": {"uv": [0, 8, 4, 8.5], "texture": "#0"}, + "south": {"uv": [3, 9, 3.5, 9.5], "texture": "#0"}, + "west": {"uv": [8, 0, 12, 0.5], "texture": "#0"}, + "up": {"uv": [8.5, 4.5, 8, 0.5], "texture": "#0"}, + "down": {"uv": [8.5, 4.5, 8, 8.5], "texture": "#0"} + } + }, + { + "from": [14, 10, 0], + "to": [16, 12, 16], + "faces": { + "north": {"uv": [3.5, 9, 4, 9.5], "texture": "#0"}, + "east": {"uv": [0, 8.5, 4, 9], "texture": "#0"}, + "south": {"uv": [9, 4.5, 9.5, 5], "texture": "#0"}, + "west": {"uv": [8.5, 0.5, 12.5, 1], "texture": "#0"}, + "up": {"uv": [9, 5, 8.5, 1], "texture": "#0"}, + "down": {"uv": [9, 5, 8.5, 9], "texture": "#0"} + } + }, + { + "from": [2, 10, 14], + "to": [14, 12, 16], + "faces": { + "north": {"uv": [0, 9, 3, 9.5], "texture": "#0"}, + "east": {"uv": [9, 5, 9.5, 5.5], "texture": "#0"}, + "south": {"uv": [9, 1, 12, 1.5], "texture": "#0"}, + "west": {"uv": [9, 5.5, 9.5, 6], "texture": "#0"}, + "up": {"uv": [12, 2, 9, 1.5], "texture": "#0"}, + "down": {"uv": [12, 2, 9, 2.5], "texture": "#0"} + } + }, + { + "from": [2, 10, 0], + "to": [14, 12, 2], + "faces": { + "north": {"uv": [9, 2.5, 12, 3], "texture": "#0"}, + "east": {"uv": [9, 6, 9.5, 6.5], "texture": "#0"}, + "south": {"uv": [9, 3, 12, 3.5], "texture": "#0"}, + "west": {"uv": [9, 6.5, 9.5, 7], "texture": "#0"}, + "up": {"uv": [12, 4, 9, 3.5], "texture": "#0"}, + "down": {"uv": [12, 4, 9, 4.5], "texture": "#0"} + } + } + ] +} \ No newline at end of file diff --git a/src/sandmastery/resources/assets/sandmastery/models/block/white_sand_block.json b/src/sandmastery/resources/assets/sandmastery/models/block/white_sand_block.json new file mode 100644 index 000000000..0b7880a00 --- /dev/null +++ b/src/sandmastery/resources/assets/sandmastery/models/block/white_sand_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "sandmastery:block/white_sand" + } +} \ No newline at end of file diff --git a/src/sandmastery/resources/assets/sandmastery/models/block/white_sand_height10.json b/src/sandmastery/resources/assets/sandmastery/models/block/white_sand_height10.json new file mode 100644 index 000000000..ddcc5698d --- /dev/null +++ b/src/sandmastery/resources/assets/sandmastery/models/block/white_sand_height10.json @@ -0,0 +1,19 @@ +{ + "textures": { + "particle": "sandmastery:block/white_sand", + "texture": "sandmastery:block/white_sand" + }, + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 10, 16 ], + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "cullface": "down" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 6, 16, 16 ], "texture": "#texture", "cullface": "north" }, + "south": { "uv": [ 0, 6, 16, 16 ], "texture": "#texture", "cullface": "south" }, + "west": { "uv": [ 0, 6, 16, 16 ], "texture": "#texture", "cullface": "west" }, + "east": { "uv": [ 0, 6, 16, 16 ], "texture": "#texture", "cullface": "east" } + } + } + ] +} diff --git a/src/sandmastery/resources/assets/sandmastery/models/block/white_sand_height12.json b/src/sandmastery/resources/assets/sandmastery/models/block/white_sand_height12.json new file mode 100644 index 000000000..49187caa6 --- /dev/null +++ b/src/sandmastery/resources/assets/sandmastery/models/block/white_sand_height12.json @@ -0,0 +1,19 @@ +{ + "textures": { + "particle": "sandmastery:block/white_sand", + "texture": "sandmastery:block/white_sand" + }, + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 12, 16 ], + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "cullface": "down" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 4, 16, 16 ], "texture": "#texture", "cullface": "north" }, + "south": { "uv": [ 0, 4, 16, 16 ], "texture": "#texture", "cullface": "south" }, + "west": { "uv": [ 0, 4, 16, 16 ], "texture": "#texture", "cullface": "west" }, + "east": { "uv": [ 0, 4, 16, 16 ], "texture": "#texture", "cullface": "east" } + } + } + ] +} diff --git a/src/sandmastery/resources/assets/sandmastery/models/block/white_sand_height14.json b/src/sandmastery/resources/assets/sandmastery/models/block/white_sand_height14.json new file mode 100644 index 000000000..0d1d51b0c --- /dev/null +++ b/src/sandmastery/resources/assets/sandmastery/models/block/white_sand_height14.json @@ -0,0 +1,19 @@ +{ + "textures": { + "particle": "sandmastery:block/white_sand", + "texture": "sandmastery:block/white_sand" + }, + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 14, 16 ], + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "cullface": "down" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 2, 16, 16 ], "texture": "#texture", "cullface": "north" }, + "south": { "uv": [ 0, 2, 16, 16 ], "texture": "#texture", "cullface": "south" }, + "west": { "uv": [ 0, 2, 16, 16 ], "texture": "#texture", "cullface": "west" }, + "east": { "uv": [ 0, 2, 16, 16 ], "texture": "#texture", "cullface": "east" } + } + } + ] +} diff --git a/src/sandmastery/resources/assets/sandmastery/models/block/white_sand_height2.json b/src/sandmastery/resources/assets/sandmastery/models/block/white_sand_height2.json new file mode 100644 index 000000000..99983fa49 --- /dev/null +++ b/src/sandmastery/resources/assets/sandmastery/models/block/white_sand_height2.json @@ -0,0 +1,20 @@ +{ + "parent": "block/thin_block", + "textures": { + "particle": "sandmastery:block/white_sand", + "texture": "sandmastery:block/white_sand" + }, + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 2, 16 ], + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "cullface": "down" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 14, 16, 16 ], "texture": "#texture", "cullface": "north" }, + "south": { "uv": [ 0, 14, 16, 16 ], "texture": "#texture", "cullface": "south" }, + "west": { "uv": [ 0, 14, 16, 16 ], "texture": "#texture", "cullface": "west" }, + "east": { "uv": [ 0, 14, 16, 16 ], "texture": "#texture", "cullface": "east" } + } + } + ] +} diff --git a/src/sandmastery/resources/assets/sandmastery/models/block/white_sand_height4.json b/src/sandmastery/resources/assets/sandmastery/models/block/white_sand_height4.json new file mode 100644 index 000000000..85b8574f8 --- /dev/null +++ b/src/sandmastery/resources/assets/sandmastery/models/block/white_sand_height4.json @@ -0,0 +1,19 @@ +{ + "textures": { + "particle": "sandmastery:block/white_sand", + "texture": "sandmastery:block/white_sand" + }, + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 4, 16 ], + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "cullface": "down" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 12, 16, 16 ], "texture": "#texture", "cullface": "north" }, + "south": { "uv": [ 0, 12, 16, 16 ], "texture": "#texture", "cullface": "south" }, + "west": { "uv": [ 0, 12, 16, 16 ], "texture": "#texture", "cullface": "west" }, + "east": { "uv": [ 0, 12, 16, 16 ], "texture": "#texture", "cullface": "east" } + } + } + ] +} diff --git a/src/sandmastery/resources/assets/sandmastery/models/block/white_sand_height6.json b/src/sandmastery/resources/assets/sandmastery/models/block/white_sand_height6.json new file mode 100644 index 000000000..13d177458 --- /dev/null +++ b/src/sandmastery/resources/assets/sandmastery/models/block/white_sand_height6.json @@ -0,0 +1,19 @@ +{ + "textures": { + "particle": "sandmastery:block/white_sand", + "texture": "sandmastery:block/white_sand" + }, + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 6, 16 ], + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "cullface": "down" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 10, 16, 16 ], "texture": "#texture", "cullface": "north" }, + "south": { "uv": [ 0, 10, 16, 16 ], "texture": "#texture", "cullface": "south" }, + "west": { "uv": [ 0, 10, 16, 16 ], "texture": "#texture", "cullface": "west" }, + "east": { "uv": [ 0, 10, 16, 16 ], "texture": "#texture", "cullface": "east" } + } + } + ] +} diff --git a/src/sandmastery/resources/assets/sandmastery/models/block/white_sand_height8.json b/src/sandmastery/resources/assets/sandmastery/models/block/white_sand_height8.json new file mode 100644 index 000000000..cec5bf305 --- /dev/null +++ b/src/sandmastery/resources/assets/sandmastery/models/block/white_sand_height8.json @@ -0,0 +1,19 @@ +{ + "textures": { + "particle": "sandmastery:block/white_sand", + "texture": "sandmastery:block/white_sand" + }, + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 8, 16 ], + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "cullface": "down" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 8, 16, 16 ], "texture": "#texture", "cullface": "north" }, + "south": { "uv": [ 0, 8, 16, 16 ], "texture": "#texture", "cullface": "south" }, + "west": { "uv": [ 0, 8, 16, 16 ], "texture": "#texture", "cullface": "west" }, + "east": { "uv": [ 0, 8, 16, 16 ], "texture": "#texture", "cullface": "east" } + } + } + ] +} diff --git a/src/sandmastery/resources/assets/sandmastery/models/block/white_sand_jar.json b/src/sandmastery/resources/assets/sandmastery/models/block/white_sand_jar.json new file mode 100644 index 000000000..64d819411 --- /dev/null +++ b/src/sandmastery/resources/assets/sandmastery/models/block/white_sand_jar.json @@ -0,0 +1,517 @@ +{ + "credit": "Made with Blockbench", + "texture_size": [64, 64], + "textures": { + "2": "sandmastery:block/white_sand_jar", + "particle": "sandmastery:block/white_sand_jar" + }, + "elements": [ + { + "from": [4, 0, 4], + "to": [12, 1, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.0625, 8.25, 0]}, + "faces": { + "north": {"uv": [9.5, 1.5, 11.5, 1.75], "texture": "#2"}, + "east": {"uv": [10, 8.25, 12, 8.5], "texture": "#2"}, + "south": {"uv": [10, 8.5, 12, 8.75], "texture": "#2"}, + "west": {"uv": [10, 8.75, 12, 9], "texture": "#2"}, + "up": {"uv": [2, 2, 0, 0], "texture": "#2"}, + "down": {"uv": [2, 2, 0, 4], "texture": "#2"} + } + }, + { + "from": [5, 0, 3], + "to": [11, 1, 4], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.0625, 8.25, 0]}, + "faces": { + "north": {"uv": [10.75, 6.25, 12.25, 6.5], "texture": "#2"}, + "east": {"uv": [9.5, 6.25, 9.75, 6.5], "texture": "#2"}, + "south": {"uv": [10.75, 6.5, 12.25, 6.75], "texture": "#2"}, + "west": {"uv": [9.5, 6.5, 9.75, 6.75], "texture": "#2"}, + "up": {"uv": [12.25, 7, 10.75, 6.75], "texture": "#2"}, + "down": {"uv": [12.5, 0, 11, 0.25], "texture": "#2"} + } + }, + { + "from": [5, 0, 12], + "to": [11, 1, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.0625, 8.25, 0]}, + "faces": { + "north": {"uv": [11, 0.25, 12.5, 0.5], "texture": "#2"}, + "east": {"uv": [9.5, 6.75, 9.75, 7], "texture": "#2"}, + "south": {"uv": [11, 0.5, 12.5, 0.75], "texture": "#2"}, + "west": {"uv": [9.75, 5.75, 10, 6], "texture": "#2"}, + "up": {"uv": [12.5, 1, 11, 0.75], "texture": "#2"}, + "down": {"uv": [12.5, 1, 11, 1.25], "texture": "#2"} + } + }, + { + "from": [3, 0, 5], + "to": [4, 1, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.0625, 8.25, 0]}, + "faces": { + "north": {"uv": [9, 3.25, 9.25, 3.5], "texture": "#2"}, + "east": {"uv": [10.5, 7.75, 12, 8], "texture": "#2"}, + "south": {"uv": [9.25, 3.25, 9.5, 3.5], "texture": "#2"}, + "west": {"uv": [10.5, 8, 12, 8.25], "texture": "#2"}, + "up": {"uv": [11, 5.75, 10.75, 4.25], "texture": "#2"}, + "down": {"uv": [11, 9.25, 10.75, 10.75], "texture": "#2"} + } + }, + { + "from": [12, 0, 5], + "to": [13, 1, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.0625, 8.25, 0]}, + "faces": { + "north": {"uv": [9.5, 5.75, 9.75, 6], "texture": "#2"}, + "east": {"uv": [10.75, 5.75, 12.25, 6], "texture": "#2"}, + "south": {"uv": [9.5, 6, 9.75, 6.25], "texture": "#2"}, + "west": {"uv": [10.75, 6, 12.25, 6.25], "texture": "#2"}, + "up": {"uv": [10.75, 12.25, 10.5, 10.75], "texture": "#2"}, + "down": {"uv": [11, 10.75, 10.75, 12.25], "texture": "#2"} + } + }, + { + "from": [12, 1, 5], + "to": [13, 8, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.0625, 8.25, 0]}, + "faces": { + "north": {"uv": [5.25, 10.5, 5.5, 12.25], "texture": "#2"}, + "east": {"uv": [3, 8.75, 4.5, 10.5], "texture": "#2"}, + "south": {"uv": [10.5, 5.25, 10.75, 7], "texture": "#2"}, + "west": {"uv": [4.5, 8.75, 6, 10.5], "texture": "#2"}, + "up": {"uv": [12, 12.5, 11.75, 11], "texture": "#2"}, + "down": {"uv": [1.75, 12, 1.5, 13.5], "texture": "#2"} + } + }, + { + "from": [5, 1, 3], + "to": [11, 8, 4], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.0625, 8.25, 0]}, + "faces": { + "north": {"uv": [0, 8.5, 1.5, 10.25], "texture": "#2"}, + "east": {"uv": [4.75, 10.5, 5, 12.25], "texture": "#2"}, + "south": {"uv": [8.5, 7, 10, 8.75], "texture": "#2"}, + "west": {"uv": [5, 10.5, 5.25, 12.25], "texture": "#2"}, + "up": {"uv": [13, 10.5, 11.5, 10.25], "texture": "#2"}, + "down": {"uv": [13, 10.5, 11.5, 10.75], "texture": "#2"} + } + }, + { + "from": [4, 1, 4], + "to": [12, 8, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.0625, 8.25, 0]}, + "faces": { + "north": {"uv": [6, 0, 8, 1.75], "texture": "#2"}, + "east": {"uv": [7, 1.75, 9, 3.5], "texture": "#2"}, + "south": {"uv": [3, 7, 5, 8.75], "texture": "#2"}, + "west": {"uv": [5, 7, 7, 8.75], "texture": "#2"}, + "up": {"uv": [2, 6, 0, 4], "texture": "#2"}, + "down": {"uv": [6, 0, 4, 2], "texture": "#2"} + } + }, + { + "from": [5, 1, 12], + "to": [11, 8, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.0625, 8.25, 0]}, + "faces": { + "north": {"uv": [8, 3.5, 9.5, 5.25], "texture": "#2"}, + "east": {"uv": [4.25, 10.5, 4.5, 12.25], "texture": "#2"}, + "south": {"uv": [8, 5.25, 9.5, 7], "texture": "#2"}, + "west": {"uv": [4.5, 10.5, 4.75, 12.25], "texture": "#2"}, + "up": {"uv": [13, 10, 11.5, 9.75], "texture": "#2"}, + "down": {"uv": [13, 10, 11.5, 10.25], "texture": "#2"} + } + }, + { + "from": [3, 1, 5], + "to": [4, 8, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.0625, 8.25, 0]}, + "faces": { + "north": {"uv": [3.75, 10.5, 4, 12.25], "texture": "#2"}, + "east": {"uv": [7, 7, 8.5, 8.75], "texture": "#2"}, + "south": {"uv": [4, 10.5, 4.25, 12.25], "texture": "#2"}, + "west": {"uv": [8, 0, 9.5, 1.75], "texture": "#2"}, + "up": {"uv": [11.75, 12.5, 11.5, 11], "texture": "#2"}, + "down": {"uv": [12, 3, 11.75, 4.5], "texture": "#2"} + } + }, + { + "from": [12, 9, 5], + "to": [13, 14, 11], + "rotation": {"angle": 0, "axis": "x", "origin": [8, 21, 8]}, + "faces": { + "north": {"uv": [7, 4, 7.25, 4.5], "rotation": 180, "texture": "#2"}, + "east": {"uv": [9.5, 0.5, 11, 1], "rotation": 180, "texture": "#2"}, + "south": {"uv": [7, 3.5, 7.25, 4], "rotation": 180, "texture": "#2"}, + "west": {"uv": [9.5, 1, 11, 1.5], "rotation": 180, "texture": "#2"}, + "up": {"uv": [11.25, 10.75, 11, 12.25], "texture": "#2"}, + "down": {"uv": [11.25, 10.75, 11, 9.25], "texture": "#2"} + } + }, + { + "from": [4, 9, 4], + "to": [12, 14, 12], + "rotation": {"angle": 0, "axis": "x", "origin": [8, 21, 8]}, + "faces": { + "north": {"uv": [9, 1.75, 11, 2.25], "rotation": 180, "texture": "#2"}, + "east": {"uv": [8, 8.75, 10, 9.25], "rotation": 180, "texture": "#2"}, + "south": {"uv": [6, 8.75, 8, 9.25], "rotation": 180, "texture": "#2"}, + "west": {"uv": [9, 2.25, 11, 2.75], "rotation": 180, "texture": "#2"}, + "up": {"uv": [4, 2, 2, 4], "texture": "#2"}, + "down": {"uv": [4, 2, 2, 0], "texture": "#2"} + } + }, + { + "from": [5, 9, 3], + "to": [11, 14, 4], + "rotation": {"angle": 0, "axis": "x", "origin": [8, 21, 8]}, + "faces": { + "north": {"uv": [9.5, 0, 11, 0.5], "rotation": 180, "texture": "#2"}, + "east": {"uv": [3, 6.5, 3.25, 7], "rotation": 180, "texture": "#2"}, + "south": {"uv": [9, 9.25, 10.5, 9.75], "rotation": 180, "texture": "#2"}, + "west": {"uv": [3.25, 6.5, 3.5, 7], "rotation": 180, "texture": "#2"}, + "up": {"uv": [12.5, 5.25, 11, 5.5], "texture": "#2"}, + "down": {"uv": [12.5, 5.25, 11, 5], "texture": "#2"} + } + }, + { + "from": [5, 9, 12], + "to": [11, 14, 13], + "rotation": {"angle": 0, "axis": "x", "origin": [8, 21, 8]}, + "faces": { + "north": {"uv": [7.5, 9.25, 9, 9.75], "rotation": 180, "texture": "#2"}, + "east": {"uv": [1.5, 6, 1.75, 6.5], "rotation": 180, "texture": "#2"}, + "south": {"uv": [6, 9.25, 7.5, 9.75], "rotation": 180, "texture": "#2"}, + "west": {"uv": [1.75, 6, 2, 6.5], "rotation": 180, "texture": "#2"}, + "up": {"uv": [12.5, 4.75, 11, 5], "texture": "#2"}, + "down": {"uv": [12.5, 1.5, 11, 1.25], "texture": "#2"} + } + }, + { + "from": [3, 9, 5], + "to": [4, 14, 11], + "rotation": {"angle": 0, "axis": "x", "origin": [8, 21, 8]}, + "faces": { + "north": {"uv": [3.75, 4, 4, 4.5], "rotation": 180, "texture": "#2"}, + "east": {"uv": [1.5, 9, 3, 9.5], "rotation": 180, "texture": "#2"}, + "south": {"uv": [3.5, 4, 3.75, 4.5], "rotation": 180, "texture": "#2"}, + "west": {"uv": [9, 2.75, 10.5, 3.25], "rotation": 180, "texture": "#2"}, + "up": {"uv": [11.25, 3.25, 11, 4.75], "texture": "#2"}, + "down": {"uv": [11.25, 3.25, 11, 1.75], "texture": "#2"} + } + }, + { + "from": [5, 1, 13], + "to": [11, 11, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.0625, 8.25, 0]}, + "faces": { + "north": {"uv": [2, 4, 3.5, 6.5], "texture": "#2"}, + "east": {"uv": [1.5, 9.5, 1.75, 12], "texture": "#2"}, + "south": {"uv": [4, 2, 5.5, 4.5], "texture": "#2"}, + "west": {"uv": [1.75, 9.5, 2, 12], "texture": "#2"}, + "up": {"uv": [11.5, 9.25, 10, 9], "texture": "#2"}, + "down": {"uv": [12, 7, 10.5, 7.25], "texture": "#2"} + } + }, + { + "from": [5, 1, 2], + "to": [11, 11, 3], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.0625, 8.25, 0]}, + "faces": { + "north": {"uv": [1.5, 6.5, 3, 9], "texture": "#2"}, + "east": {"uv": [9.5, 3.25, 9.75, 5.75], "texture": "#2"}, + "south": {"uv": [6.5, 4.5, 8, 7], "texture": "#2"}, + "west": {"uv": [9.75, 3.25, 10, 5.75], "texture": "#2"}, + "up": {"uv": [12, 7.5, 10.5, 7.25], "texture": "#2"}, + "down": {"uv": [12, 7.5, 10.5, 7.75], "texture": "#2"} + } + }, + { + "from": [2, 1, 5], + "to": [3, 11, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.0625, 8.25, 0]}, + "faces": { + "north": {"uv": [2, 9.5, 2.25, 12], "texture": "#2"}, + "east": {"uv": [3.5, 4.5, 5, 7], "texture": "#2"}, + "south": {"uv": [2.25, 9.5, 2.5, 12], "texture": "#2"}, + "west": {"uv": [5, 4.5, 6.5, 7], "texture": "#2"}, + "up": {"uv": [5.75, 12, 5.5, 10.5], "texture": "#2"}, + "down": {"uv": [6, 10.5, 5.75, 12], "texture": "#2"} + } + }, + { + "from": [13, 1, 5], + "to": [14, 11, 11], + "rotation": {"angle": 0, "axis": "z", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [2.5, 9.5, 2.75, 12], "texture": "#2"}, + "east": {"uv": [5.5, 2, 7, 4.5], "texture": "#2"}, + "south": {"uv": [2.75, 9.5, 3, 12], "texture": "#2"}, + "west": {"uv": [0, 6, 1.5, 8.5], "texture": "#2"}, + "up": {"uv": [10.75, 10.75, 10.5, 9.25], "texture": "#2"}, + "down": {"uv": [11, 2.75, 10.75, 4.25], "texture": "#2"} + } + }, + { + "from": [12, 1, 11], + "to": [13, 11, 12], + "rotation": {"angle": 0, "axis": "z", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [6, 9.75, 6.25, 12.25], "texture": "#2"}, + "east": {"uv": [6.25, 9.75, 6.5, 12.25], "texture": "#2"}, + "south": {"uv": [6.5, 9.75, 6.75, 12.25], "texture": "#2"}, + "west": {"uv": [6.75, 9.75, 7, 12.25], "texture": "#2"}, + "up": {"uv": [6.25, 2, 6, 1.75], "texture": "#2"}, + "down": {"uv": [6.5, 1.75, 6.25, 2], "texture": "#2"} + } + }, + { + "from": [11, 1, 12], + "to": [12, 11, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.0625, 8.25, 0]}, + "faces": { + "north": {"uv": [7, 9.75, 7.25, 12.25], "texture": "#2"}, + "east": {"uv": [7.25, 9.75, 7.5, 12.25], "texture": "#2"}, + "south": {"uv": [7.5, 9.75, 7.75, 12.25], "texture": "#2"}, + "west": {"uv": [7.75, 9.75, 8, 12.25], "texture": "#2"}, + "up": {"uv": [6.75, 2, 6.5, 1.75], "texture": "#2"}, + "down": {"uv": [7, 1.75, 6.75, 2], "texture": "#2"} + } + }, + { + "from": [12, 1, 4], + "to": [13, 11, 5], + "rotation": {"angle": 0, "axis": "z", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [9, 9.75, 9.25, 12.25], "texture": "#2"}, + "east": {"uv": [9.25, 9.75, 9.5, 12.25], "texture": "#2"}, + "south": {"uv": [9.5, 9.75, 9.75, 12.25], "texture": "#2"}, + "west": {"uv": [9.75, 9.75, 10, 12.25], "texture": "#2"}, + "up": {"uv": [7.5, 4.25, 7.25, 4], "texture": "#2"}, + "down": {"uv": [7.5, 4.25, 7.25, 4.5], "texture": "#2"} + } + }, + { + "from": [11, 1, 3], + "to": [12, 11, 4], + "rotation": {"angle": 0, "axis": "y", "origin": [12, 7.25, 12]}, + "faces": { + "north": {"uv": [8, 9.75, 8.25, 12.25], "texture": "#2"}, + "east": {"uv": [8.25, 9.75, 8.5, 12.25], "texture": "#2"}, + "south": {"uv": [8.5, 9.75, 8.75, 12.25], "texture": "#2"}, + "west": {"uv": [8.75, 9.75, 9, 12.25], "texture": "#2"}, + "up": {"uv": [7.5, 3.75, 7.25, 3.5], "texture": "#2"}, + "down": {"uv": [7.5, 3.75, 7.25, 4], "texture": "#2"} + } + }, + { + "from": [3, 1, 4], + "to": [4, 11, 5], + "rotation": {"angle": 0, "axis": "y", "origin": [4, 7.25, 12]}, + "faces": { + "north": {"uv": [10.5, 2.75, 10.75, 5.25], "texture": "#2"}, + "east": {"uv": [3, 10.5, 3.25, 13], "texture": "#2"}, + "south": {"uv": [3.25, 10.5, 3.5, 13], "texture": "#2"}, + "west": {"uv": [3.5, 10.5, 3.75, 13], "texture": "#2"}, + "up": {"uv": [8, 4.25, 7.75, 4], "texture": "#2"}, + "down": {"uv": [8, 4.25, 7.75, 4.5], "texture": "#2"} + } + }, + { + "from": [4, 1, 3], + "to": [5, 11, 4], + "rotation": {"angle": 0, "axis": "y", "origin": [4, 7.25, 12]}, + "faces": { + "north": {"uv": [1.25, 10.25, 1.5, 12.75], "texture": "#2"}, + "east": {"uv": [10.25, 3.25, 10.5, 5.75], "texture": "#2"}, + "south": {"uv": [10.25, 5.75, 10.5, 8.25], "texture": "#2"}, + "west": {"uv": [10.25, 9.75, 10.5, 12.25], "texture": "#2"}, + "up": {"uv": [8, 3.75, 7.75, 3.5], "texture": "#2"}, + "down": {"uv": [8, 3.75, 7.75, 4], "texture": "#2"} + } + }, + { + "from": [4, 1, 12], + "to": [5, 11, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [16.0625, 8.25, 0]}, + "faces": { + "north": {"uv": [0.25, 10.25, 0.5, 12.75], "texture": "#2"}, + "east": {"uv": [0.5, 10.25, 0.75, 12.75], "texture": "#2"}, + "south": {"uv": [0.75, 10.25, 1, 12.75], "texture": "#2"}, + "west": {"uv": [1, 10.25, 1.25, 12.75], "texture": "#2"}, + "up": {"uv": [7.75, 4.25, 7.5, 4], "texture": "#2"}, + "down": {"uv": [7.75, 4.25, 7.5, 4.5], "texture": "#2"} + } + }, + { + "from": [3, 1, 11], + "to": [4, 11, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [16.0625, 8.25, 0]}, + "faces": { + "north": {"uv": [10, 3.25, 10.25, 5.75], "texture": "#2"}, + "east": {"uv": [10, 5.75, 10.25, 8.25], "texture": "#2"}, + "south": {"uv": [10, 9.75, 10.25, 12.25], "texture": "#2"}, + "west": {"uv": [0, 10.25, 0.25, 12.75], "texture": "#2"}, + "up": {"uv": [7.75, 3.75, 7.5, 3.5], "texture": "#2"}, + "down": {"uv": [7.75, 3.75, 7.5, 4], "texture": "#2"} + } + }, + { + "from": [5, 12, 2], + "to": [11, 13, 3], + "rotation": {"angle": 0, "axis": "x", "origin": [8, 21, 8]}, + "faces": { + "north": {"uv": [11.5, 9, 13, 9.25], "rotation": 180, "texture": "#2"}, + "east": {"uv": [12.25, 6.25, 12.5, 6.5], "rotation": 180, "texture": "#2"}, + "south": {"uv": [11.5, 1.5, 13, 1.75], "rotation": 180, "texture": "#2"}, + "west": {"uv": [6.5, 12.25, 6.75, 12.5], "rotation": 180, "texture": "#2"}, + "up": {"uv": [13, 9.5, 11.5, 9.75], "texture": "#2"}, + "down": {"uv": [13, 9.5, 11.5, 9.25], "texture": "#2"} + } + }, + { + "from": [2, 12, 5], + "to": [3, 13, 11], + "rotation": {"angle": 0, "axis": "x", "origin": [8, 21, 8]}, + "faces": { + "north": {"uv": [6.25, 12.25, 6.5, 12.5], "rotation": 180, "texture": "#2"}, + "east": {"uv": [11.25, 4.5, 12.75, 4.75], "rotation": 180, "texture": "#2"}, + "south": {"uv": [12.25, 6, 12.5, 6.25], "rotation": 180, "texture": "#2"}, + "west": {"uv": [11.25, 10.75, 12.75, 11], "rotation": 180, "texture": "#2"}, + "up": {"uv": [11.75, 3, 11.5, 4.5], "texture": "#2"}, + "down": {"uv": [11.5, 12.5, 11.25, 11], "texture": "#2"} + } + }, + { + "from": [13, 12, 5], + "to": [14, 13, 11], + "rotation": {"angle": 0, "axis": "x", "origin": [8, 21, 8]}, + "faces": { + "north": {"uv": [6, 12.25, 6.25, 12.5], "rotation": 180, "texture": "#2"}, + "east": {"uv": [11.25, 2.5, 12.75, 2.75], "rotation": 180, "texture": "#2"}, + "south": {"uv": [12.25, 5.75, 12.5, 6], "rotation": 180, "texture": "#2"}, + "west": {"uv": [11.25, 2.75, 12.75, 3], "rotation": 180, "texture": "#2"}, + "up": {"uv": [11.5, 9.25, 11.25, 10.75], "texture": "#2"}, + "down": {"uv": [11.5, 4.5, 11.25, 3], "texture": "#2"} + } + }, + { + "from": [5, 12, 13], + "to": [11, 13, 14], + "rotation": {"angle": 0, "axis": "x", "origin": [8, 21, 8]}, + "faces": { + "north": {"uv": [11.25, 1.75, 12.75, 2], "rotation": 180, "texture": "#2"}, + "east": {"uv": [5.5, 12.25, 5.75, 12.5], "rotation": 180, "texture": "#2"}, + "south": {"uv": [11, 5.5, 12.5, 5.75], "rotation": 180, "texture": "#2"}, + "west": {"uv": [5.75, 12.25, 6, 12.5], "rotation": 180, "texture": "#2"}, + "up": {"uv": [12.75, 2.25, 11.25, 2.5], "texture": "#2"}, + "down": {"uv": [12.75, 2.25, 11.25, 2], "texture": "#2"} + } + }, + { + "from": [12, 12, 4], + "to": [13, 13, 5], + "rotation": {"angle": 0, "axis": "x", "origin": [8, 21, 8]}, + "faces": { + "north": {"uv": [4.5, 12.25, 4.75, 12.5], "rotation": 180, "texture": "#2"}, + "east": {"uv": [12.25, 4.25, 12.5, 4.5], "rotation": 180, "texture": "#2"}, + "south": {"uv": [4.25, 12.25, 4.5, 12.5], "rotation": 180, "texture": "#2"}, + "west": {"uv": [4.75, 12.25, 5, 12.5], "rotation": 180, "texture": "#2"}, + "up": {"uv": [5.5, 12.25, 5.25, 12.5], "texture": "#2"}, + "down": {"uv": [5.25, 12.5, 5, 12.25], "texture": "#2"} + } + }, + { + "from": [11, 12, 3], + "to": [12, 13, 4], + "rotation": {"angle": 0, "axis": "x", "origin": [8, 21, 8]}, + "faces": { + "north": {"uv": [3.75, 12.25, 4, 12.5], "rotation": 180, "texture": "#2"}, + "east": {"uv": [12.25, 3.5, 12.5, 3.75], "rotation": 180, "texture": "#2"}, + "south": {"uv": [12.25, 3.25, 12.5, 3.5], "rotation": 180, "texture": "#2"}, + "west": {"uv": [12.25, 3.75, 12.5, 4], "rotation": 180, "texture": "#2"}, + "up": {"uv": [12.5, 4, 12.25, 4.25], "texture": "#2"}, + "down": {"uv": [4.25, 12.5, 4, 12.25], "texture": "#2"} + } + }, + { + "from": [11, 12, 12], + "to": [12, 13, 13], + "rotation": {"angle": 0, "axis": "x", "origin": [8, 21, 8]}, + "faces": { + "north": {"uv": [2.25, 12.25, 2.5, 12.5], "rotation": 180, "texture": "#2"}, + "east": {"uv": [2, 12.25, 2.25, 12.5], "rotation": 180, "texture": "#2"}, + "south": {"uv": [1.75, 12.25, 2, 12.5], "rotation": 180, "texture": "#2"}, + "west": {"uv": [2.5, 12.25, 2.75, 12.5], "rotation": 180, "texture": "#2"}, + "up": {"uv": [12.5, 3, 12.25, 3.25], "texture": "#2"}, + "down": {"uv": [3, 12.5, 2.75, 12.25], "texture": "#2"} + } + }, + { + "from": [12, 12, 11], + "to": [13, 13, 12], + "rotation": {"angle": 0, "axis": "x", "origin": [8, 21, 8]}, + "faces": { + "north": {"uv": [12, 11.25, 12.25, 11.5], "rotation": 180, "texture": "#2"}, + "east": {"uv": [12, 11, 12.25, 11.25], "rotation": 180, "texture": "#2"}, + "south": {"uv": [12, 8.75, 12.25, 9], "rotation": 180, "texture": "#2"}, + "west": {"uv": [12, 11.5, 12.25, 11.75], "rotation": 180, "texture": "#2"}, + "up": {"uv": [12.25, 12, 12, 12.25], "texture": "#2"}, + "down": {"uv": [12.25, 12, 12, 11.75], "texture": "#2"} + } + }, + { + "from": [3, 12, 4], + "to": [4, 13, 5], + "rotation": {"angle": 0, "axis": "x", "origin": [8, 21, 8]}, + "faces": { + "north": {"uv": [12, 7.75, 12.25, 8], "rotation": 180, "texture": "#2"}, + "east": {"uv": [12, 7.5, 12.25, 7.75], "rotation": 180, "texture": "#2"}, + "south": {"uv": [12, 7.25, 12.25, 7.5], "rotation": 180, "texture": "#2"}, + "west": {"uv": [12, 8, 12.25, 8.25], "rotation": 180, "texture": "#2"}, + "up": {"uv": [12.25, 8.5, 12, 8.75], "texture": "#2"}, + "down": {"uv": [12.25, 8.5, 12, 8.25], "texture": "#2"} + } + }, + { + "from": [4, 12, 3], + "to": [5, 13, 4], + "rotation": {"angle": 0, "axis": "x", "origin": [8, 21, 8]}, + "faces": { + "north": {"uv": [12, 4.25, 12.25, 4.5], "rotation": 180, "texture": "#2"}, + "east": {"uv": [12, 4, 12.25, 4.25], "rotation": 180, "texture": "#2"}, + "south": {"uv": [12, 3.75, 12.25, 4], "rotation": 180, "texture": "#2"}, + "west": {"uv": [5.5, 12, 5.75, 12.25], "rotation": 180, "texture": "#2"}, + "up": {"uv": [12.25, 7, 12, 7.25], "texture": "#2"}, + "down": {"uv": [6, 12.25, 5.75, 12], "texture": "#2"} + } + }, + { + "from": [4, 12, 12], + "to": [5, 13, 13], + "rotation": {"angle": 0, "axis": "x", "origin": [8, 21, 8]}, + "faces": { + "north": {"uv": [2.75, 12, 3, 12.25], "rotation": 180, "texture": "#2"}, + "east": {"uv": [2.5, 12, 2.75, 12.25], "rotation": 180, "texture": "#2"}, + "south": {"uv": [2.25, 12, 2.5, 12.25], "rotation": 180, "texture": "#2"}, + "west": {"uv": [12, 3, 12.25, 3.25], "rotation": 180, "texture": "#2"}, + "up": {"uv": [12.25, 3.5, 12, 3.75], "texture": "#2"}, + "down": {"uv": [12.25, 3.5, 12, 3.25], "texture": "#2"} + } + }, + { + "from": [3, 12, 11], + "to": [4, 13, 12], + "rotation": {"angle": 0, "axis": "x", "origin": [8, 21, 8]}, + "faces": { + "north": {"uv": [9.75, 6.5, 10, 6.75], "rotation": 180, "texture": "#2"}, + "east": {"uv": [9.75, 6.25, 10, 6.5], "rotation": 180, "texture": "#2"}, + "south": {"uv": [9.75, 6, 10, 6.25], "rotation": 180, "texture": "#2"}, + "west": {"uv": [9.75, 6.75, 10, 7], "rotation": 180, "texture": "#2"}, + "up": {"uv": [2.25, 12, 2, 12.25], "texture": "#2"}, + "down": {"uv": [2, 12.25, 1.75, 12], "texture": "#2"} + } + } + ] +} \ No newline at end of file diff --git a/src/sandmastery/resources/assets/sandmastery/models/item/charged_taldain_sand.json b/src/sandmastery/resources/assets/sandmastery/models/item/charged_taldain_sand.json new file mode 100644 index 000000000..d09d5eedf --- /dev/null +++ b/src/sandmastery/resources/assets/sandmastery/models/item/charged_taldain_sand.json @@ -0,0 +1,3 @@ +{ + "parent": "sandmastery:block/white_sand_block" +} \ No newline at end of file diff --git a/src/sandmastery/resources/assets/sandmastery/models/item/charged_taldain_sand_layer.json b/src/sandmastery/resources/assets/sandmastery/models/item/charged_taldain_sand_layer.json new file mode 100644 index 000000000..c05a36df3 --- /dev/null +++ b/src/sandmastery/resources/assets/sandmastery/models/item/charged_taldain_sand_layer.json @@ -0,0 +1,3 @@ +{ + "parent": "sandmastery:block/white_sand_height2" +} \ No newline at end of file diff --git a/src/sandmastery/resources/assets/sandmastery/models/item/sand_jar.json b/src/sandmastery/resources/assets/sandmastery/models/item/sand_jar.json new file mode 100644 index 000000000..2c04c3a76 --- /dev/null +++ b/src/sandmastery/resources/assets/sandmastery/models/item/sand_jar.json @@ -0,0 +1,22 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "sandmastery:item/black_sand_jar" + }, + "overrides": [ + { + "__comment": "built up investiture >= 50", + "predicate": { + "cosmere:charge_level": 50 + }, + "model": "sandmastery:item/grey_sand_jar" + }, + { + "__comment": "built up investiture >= 100", + "predicate": { + "cosmere:charge_level": 100 + }, + "model": "sandmastery:item/white_sand_jar" + } + ] +} \ No newline at end of file diff --git a/src/sandmastery/resources/assets/sandmastery/models/item/sand_jar_block.json b/src/sandmastery/resources/assets/sandmastery/models/item/sand_jar_block.json new file mode 100644 index 000000000..2ab2e2bb3 --- /dev/null +++ b/src/sandmastery/resources/assets/sandmastery/models/item/sand_jar_block.json @@ -0,0 +1,3 @@ +{ + "parent": "sandmastery:block/black_sand_jar" +} \ No newline at end of file diff --git a/src/sandmastery/resources/assets/sandmastery/models/item/sand_spreading_tub.json b/src/sandmastery/resources/assets/sandmastery/models/item/sand_spreading_tub.json new file mode 100644 index 000000000..5b0961c93 --- /dev/null +++ b/src/sandmastery/resources/assets/sandmastery/models/item/sand_spreading_tub.json @@ -0,0 +1,3 @@ +{ + "parent": "sandmastery:block/sand_spreading_tub" +} \ No newline at end of file diff --git a/src/sandmastery/resources/assets/sandmastery/models/item/taldain_sand.json b/src/sandmastery/resources/assets/sandmastery/models/item/taldain_sand.json new file mode 100644 index 000000000..42537a6ff --- /dev/null +++ b/src/sandmastery/resources/assets/sandmastery/models/item/taldain_sand.json @@ -0,0 +1,3 @@ +{ + "parent": "sandmastery:block/black_sand_block" +} \ No newline at end of file diff --git a/src/sandmastery/resources/assets/sandmastery/models/item/taldain_sand_layer.json b/src/sandmastery/resources/assets/sandmastery/models/item/taldain_sand_layer.json new file mode 100644 index 000000000..bcfc857c1 --- /dev/null +++ b/src/sandmastery/resources/assets/sandmastery/models/item/taldain_sand_layer.json @@ -0,0 +1,3 @@ +{ + "parent": "sandmastery:block/black_sand_height2" +} \ No newline at end of file diff --git a/src/sandmastery/resources/assets/sandmastery/models/item/temporary_sand_block.json b/src/sandmastery/resources/assets/sandmastery/models/item/temporary_sand_block.json new file mode 100644 index 000000000..7d2949ee9 --- /dev/null +++ b/src/sandmastery/resources/assets/sandmastery/models/item/temporary_sand_block.json @@ -0,0 +1,3 @@ +{ + "parent": "sandmastery:block/sand_platform_stage1" +} \ No newline at end of file diff --git a/src/sandmastery/resources/assets/sandmastery/textures/block/black_sand.png b/src/sandmastery/resources/assets/sandmastery/textures/block/black_sand.png new file mode 100644 index 000000000..d02d416eb Binary files /dev/null and b/src/sandmastery/resources/assets/sandmastery/textures/block/black_sand.png differ diff --git a/src/sandmastery/resources/assets/sandmastery/textures/block/black_sand_jar.png b/src/sandmastery/resources/assets/sandmastery/textures/block/black_sand_jar.png new file mode 100644 index 000000000..f9eddf25f Binary files /dev/null and b/src/sandmastery/resources/assets/sandmastery/textures/block/black_sand_jar.png differ diff --git a/src/sandmastery/resources/assets/sandmastery/textures/block/golden_sand.png b/src/sandmastery/resources/assets/sandmastery/textures/block/golden_sand.png new file mode 100644 index 000000000..ab5d5478b Binary files /dev/null and b/src/sandmastery/resources/assets/sandmastery/textures/block/golden_sand.png differ diff --git a/src/sandmastery/resources/assets/sandmastery/textures/block/grey_sand_jar.png b/src/sandmastery/resources/assets/sandmastery/textures/block/grey_sand_jar.png new file mode 100644 index 000000000..98611b109 Binary files /dev/null and b/src/sandmastery/resources/assets/sandmastery/textures/block/grey_sand_jar.png differ diff --git a/src/sandmastery/resources/assets/sandmastery/textures/block/sand_spreading_tub.png b/src/sandmastery/resources/assets/sandmastery/textures/block/sand_spreading_tub.png new file mode 100644 index 000000000..aa00582be Binary files /dev/null and b/src/sandmastery/resources/assets/sandmastery/textures/block/sand_spreading_tub.png differ diff --git a/src/sandmastery/resources/assets/sandmastery/textures/block/white_sand.png b/src/sandmastery/resources/assets/sandmastery/textures/block/white_sand.png new file mode 100644 index 000000000..88ca851ae Binary files /dev/null and b/src/sandmastery/resources/assets/sandmastery/textures/block/white_sand.png differ diff --git a/src/sandmastery/resources/assets/sandmastery/textures/block/white_sand_jar.png b/src/sandmastery/resources/assets/sandmastery/textures/block/white_sand_jar.png new file mode 100644 index 000000000..c11c7216a Binary files /dev/null and b/src/sandmastery/resources/assets/sandmastery/textures/block/white_sand_jar.png differ diff --git a/src/sandmastery/resources/assets/sandmastery/textures/gui/hydration_hud.png b/src/sandmastery/resources/assets/sandmastery/textures/gui/hydration_hud.png new file mode 100644 index 000000000..b37193721 Binary files /dev/null and b/src/sandmastery/resources/assets/sandmastery/textures/gui/hydration_hud.png differ diff --git a/src/sandmastery/resources/assets/sandmastery/textures/gui/sand_pouch.png b/src/sandmastery/resources/assets/sandmastery/textures/gui/sand_pouch.png new file mode 100644 index 000000000..55243b443 Binary files /dev/null and b/src/sandmastery/resources/assets/sandmastery/textures/gui/sand_pouch.png differ diff --git a/src/sandmastery/resources/assets/sandmastery/textures/gui/sand_spreader.png b/src/sandmastery/resources/assets/sandmastery/textures/gui/sand_spreader.png new file mode 100644 index 000000000..8c22ca4d8 Binary files /dev/null and b/src/sandmastery/resources/assets/sandmastery/textures/gui/sand_spreader.png differ diff --git a/src/sandmastery/resources/assets/sandmastery/textures/icon/sandmastery.png b/src/sandmastery/resources/assets/sandmastery/textures/icon/sandmastery.png new file mode 100644 index 000000000..203447dc5 Binary files /dev/null and b/src/sandmastery/resources/assets/sandmastery/textures/icon/sandmastery.png differ diff --git a/src/sandmastery/resources/assets/sandmastery/textures/icon/sandmastery/.png b/src/sandmastery/resources/assets/sandmastery/textures/icon/sandmastery/.png new file mode 100644 index 000000000..203447dc5 Binary files /dev/null and b/src/sandmastery/resources/assets/sandmastery/textures/icon/sandmastery/.png differ diff --git a/src/sandmastery/resources/assets/sandmastery/textures/item/black_sand_jar.png b/src/sandmastery/resources/assets/sandmastery/textures/item/black_sand_jar.png new file mode 100644 index 000000000..5c6d3ae2a Binary files /dev/null and b/src/sandmastery/resources/assets/sandmastery/textures/item/black_sand_jar.png differ diff --git a/src/sandmastery/resources/assets/sandmastery/textures/item/grey_sand_jar.png b/src/sandmastery/resources/assets/sandmastery/textures/item/grey_sand_jar.png new file mode 100644 index 000000000..78668d7a4 Binary files /dev/null and b/src/sandmastery/resources/assets/sandmastery/textures/item/grey_sand_jar.png differ diff --git a/src/sandmastery/resources/assets/sandmastery/textures/item/jar.png b/src/sandmastery/resources/assets/sandmastery/textures/item/jar.png new file mode 100644 index 000000000..c4ee7f1af Binary files /dev/null and b/src/sandmastery/resources/assets/sandmastery/textures/item/jar.png differ diff --git a/src/sandmastery/resources/assets/sandmastery/textures/item/qido.png b/src/sandmastery/resources/assets/sandmastery/textures/item/qido.png new file mode 100644 index 000000000..978e25bde Binary files /dev/null and b/src/sandmastery/resources/assets/sandmastery/textures/item/qido.png differ diff --git a/src/sandmastery/resources/assets/sandmastery/textures/item/sand_jar.png b/src/sandmastery/resources/assets/sandmastery/textures/item/sand_jar.png new file mode 100644 index 000000000..5c6d3ae2a Binary files /dev/null and b/src/sandmastery/resources/assets/sandmastery/textures/item/sand_jar.png differ diff --git a/src/sandmastery/resources/assets/sandmastery/textures/item/sand_pouch.png b/src/sandmastery/resources/assets/sandmastery/textures/item/sand_pouch.png new file mode 100644 index 000000000..7d9252f31 Binary files /dev/null and b/src/sandmastery/resources/assets/sandmastery/textures/item/sand_pouch.png differ diff --git a/src/sandmastery/resources/assets/sandmastery/textures/item/white_sand_jar.png b/src/sandmastery/resources/assets/sandmastery/textures/item/white_sand_jar.png new file mode 100644 index 000000000..6aa89f956 Binary files /dev/null and b/src/sandmastery/resources/assets/sandmastery/textures/item/white_sand_jar.png differ diff --git a/src/sandmastery/resources/assets/sandmastery/textures/item/wip.png b/src/sandmastery/resources/assets/sandmastery/textures/item/wip.png new file mode 100644 index 000000000..5fcc69fbc Binary files /dev/null and b/src/sandmastery/resources/assets/sandmastery/textures/item/wip.png differ diff --git a/src/sandmastery/resources/data/sandmastery/dimension/dayside.json b/src/sandmastery/resources/data/sandmastery/dimension/dayside.json new file mode 100644 index 000000000..3fd48097e --- /dev/null +++ b/src/sandmastery/resources/data/sandmastery/dimension/dayside.json @@ -0,0 +1,11 @@ +{ + "type": "minecraft:overworld", + "generator": { + "type": "minecraft:noise", + "settings": "sandmastery:dayside_biome", + "biome_source": { + "type": "minecraft:fixed", + "biome": "sandmastery:dayside_biome" + } + } +} diff --git a/src/sandmastery/resources/data/sandmastery/dimension_type/dayside_type.json b/src/sandmastery/resources/data/sandmastery/dimension_type/dayside_type.json new file mode 100644 index 000000000..e9f5fa02c --- /dev/null +++ b/src/sandmastery/resources/data/sandmastery/dimension_type/dayside_type.json @@ -0,0 +1,26 @@ +{ + "ultrawarm": false, + "natural": true, + "piglin_safe": true, + "respawn_anchor_works": true, + "bed_works": true, + "has_raids": true, + "has_skylight": true, + "has_ceiling": false, + "fixed_time": 6000, + "coordinate_scale": 0.5, + "ambient_light": 4, + "logical_height": 384, + "effects": "minecraft:overworld", + "infiniburn": "#minecraft:infiniburn_overworld", + "min_y": -64, + "height": 384, + "monster_spawn_light_level": { + "type": "minecraft:uniform", + "value": { + "min_inclusive": 0, + "max_inclusive": 7 + } + }, + "monster_spawn_block_light_limit": 0 +} diff --git a/src/sandmastery/resources/data/sandmastery/loot_tables/inject/abandoned_mineshaft.json b/src/sandmastery/resources/data/sandmastery/loot_tables/inject/abandoned_mineshaft.json new file mode 100644 index 000000000..da611c77a --- /dev/null +++ b/src/sandmastery/resources/data/sandmastery/loot_tables/inject/abandoned_mineshaft.json @@ -0,0 +1,18 @@ +{ + "pools": [ + { + "name": "main", + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "sandmastery:sand_jar" + }, + { + "type": "minecraft:empty", + "weight": 70 + } + ] + } + ] +} \ No newline at end of file diff --git a/src/sandmastery/resources/data/sandmastery/loot_tables/inject/bastion_bridge.json b/src/sandmastery/resources/data/sandmastery/loot_tables/inject/bastion_bridge.json new file mode 100644 index 000000000..da611c77a --- /dev/null +++ b/src/sandmastery/resources/data/sandmastery/loot_tables/inject/bastion_bridge.json @@ -0,0 +1,18 @@ +{ + "pools": [ + { + "name": "main", + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "sandmastery:sand_jar" + }, + { + "type": "minecraft:empty", + "weight": 70 + } + ] + } + ] +} \ No newline at end of file diff --git a/src/sandmastery/resources/data/sandmastery/loot_tables/inject/bastion_other.json b/src/sandmastery/resources/data/sandmastery/loot_tables/inject/bastion_other.json new file mode 100644 index 000000000..da611c77a --- /dev/null +++ b/src/sandmastery/resources/data/sandmastery/loot_tables/inject/bastion_other.json @@ -0,0 +1,18 @@ +{ + "pools": [ + { + "name": "main", + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "sandmastery:sand_jar" + }, + { + "type": "minecraft:empty", + "weight": 70 + } + ] + } + ] +} \ No newline at end of file diff --git a/src/sandmastery/resources/data/sandmastery/loot_tables/inject/bastion_treasure.json b/src/sandmastery/resources/data/sandmastery/loot_tables/inject/bastion_treasure.json new file mode 100644 index 000000000..da611c77a --- /dev/null +++ b/src/sandmastery/resources/data/sandmastery/loot_tables/inject/bastion_treasure.json @@ -0,0 +1,18 @@ +{ + "pools": [ + { + "name": "main", + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "sandmastery:sand_jar" + }, + { + "type": "minecraft:empty", + "weight": 70 + } + ] + } + ] +} \ No newline at end of file diff --git a/src/sandmastery/resources/data/sandmastery/loot_tables/inject/desert_pyramid.json b/src/sandmastery/resources/data/sandmastery/loot_tables/inject/desert_pyramid.json new file mode 100644 index 000000000..864427694 --- /dev/null +++ b/src/sandmastery/resources/data/sandmastery/loot_tables/inject/desert_pyramid.json @@ -0,0 +1,18 @@ +{ + "pools": [ + { + "name": "main", + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "sandmastery:sand_jar" + }, + { + "type": "minecraft:empty", + "weight": 20 + } + ] + } + ] +} \ No newline at end of file diff --git a/src/sandmastery/resources/data/sandmastery/loot_tables/inject/end_city_treasure.json b/src/sandmastery/resources/data/sandmastery/loot_tables/inject/end_city_treasure.json new file mode 100644 index 000000000..da611c77a --- /dev/null +++ b/src/sandmastery/resources/data/sandmastery/loot_tables/inject/end_city_treasure.json @@ -0,0 +1,18 @@ +{ + "pools": [ + { + "name": "main", + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "sandmastery:sand_jar" + }, + { + "type": "minecraft:empty", + "weight": 70 + } + ] + } + ] +} \ No newline at end of file diff --git a/src/sandmastery/resources/data/sandmastery/loot_tables/inject/jungle_temple.json b/src/sandmastery/resources/data/sandmastery/loot_tables/inject/jungle_temple.json new file mode 100644 index 000000000..da611c77a --- /dev/null +++ b/src/sandmastery/resources/data/sandmastery/loot_tables/inject/jungle_temple.json @@ -0,0 +1,18 @@ +{ + "pools": [ + { + "name": "main", + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "sandmastery:sand_jar" + }, + { + "type": "minecraft:empty", + "weight": 70 + } + ] + } + ] +} \ No newline at end of file diff --git a/src/sandmastery/resources/data/sandmastery/loot_tables/inject/simple_dungeon.json b/src/sandmastery/resources/data/sandmastery/loot_tables/inject/simple_dungeon.json new file mode 100644 index 000000000..da611c77a --- /dev/null +++ b/src/sandmastery/resources/data/sandmastery/loot_tables/inject/simple_dungeon.json @@ -0,0 +1,18 @@ +{ + "pools": [ + { + "name": "main", + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "sandmastery:sand_jar" + }, + { + "type": "minecraft:empty", + "weight": 70 + } + ] + } + ] +} \ No newline at end of file diff --git a/src/sandmastery/resources/data/sandmastery/loot_tables/inject/spawn_bonus_chest.json b/src/sandmastery/resources/data/sandmastery/loot_tables/inject/spawn_bonus_chest.json new file mode 100644 index 000000000..da611c77a --- /dev/null +++ b/src/sandmastery/resources/data/sandmastery/loot_tables/inject/spawn_bonus_chest.json @@ -0,0 +1,18 @@ +{ + "pools": [ + { + "name": "main", + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "sandmastery:sand_jar" + }, + { + "type": "minecraft:empty", + "weight": 70 + } + ] + } + ] +} \ No newline at end of file diff --git a/src/sandmastery/resources/data/sandmastery/loot_tables/inject/stronghold_corridor.json b/src/sandmastery/resources/data/sandmastery/loot_tables/inject/stronghold_corridor.json new file mode 100644 index 000000000..da611c77a --- /dev/null +++ b/src/sandmastery/resources/data/sandmastery/loot_tables/inject/stronghold_corridor.json @@ -0,0 +1,18 @@ +{ + "pools": [ + { + "name": "main", + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "sandmastery:sand_jar" + }, + { + "type": "minecraft:empty", + "weight": 70 + } + ] + } + ] +} \ No newline at end of file diff --git a/src/sandmastery/resources/data/sandmastery/loot_tables/inject/stronghold_crossing.json b/src/sandmastery/resources/data/sandmastery/loot_tables/inject/stronghold_crossing.json new file mode 100644 index 000000000..da611c77a --- /dev/null +++ b/src/sandmastery/resources/data/sandmastery/loot_tables/inject/stronghold_crossing.json @@ -0,0 +1,18 @@ +{ + "pools": [ + { + "name": "main", + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "sandmastery:sand_jar" + }, + { + "type": "minecraft:empty", + "weight": 70 + } + ] + } + ] +} \ No newline at end of file diff --git a/src/sandmastery/resources/data/sandmastery/loot_tables/inject/stronghold_library.json b/src/sandmastery/resources/data/sandmastery/loot_tables/inject/stronghold_library.json new file mode 100644 index 000000000..da611c77a --- /dev/null +++ b/src/sandmastery/resources/data/sandmastery/loot_tables/inject/stronghold_library.json @@ -0,0 +1,18 @@ +{ + "pools": [ + { + "name": "main", + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "sandmastery:sand_jar" + }, + { + "type": "minecraft:empty", + "weight": 70 + } + ] + } + ] +} \ No newline at end of file diff --git a/src/sandmastery/resources/data/sandmastery/loot_tables/inject/woodland_mansion.json b/src/sandmastery/resources/data/sandmastery/loot_tables/inject/woodland_mansion.json new file mode 100644 index 000000000..da611c77a --- /dev/null +++ b/src/sandmastery/resources/data/sandmastery/loot_tables/inject/woodland_mansion.json @@ -0,0 +1,18 @@ +{ + "pools": [ + { + "name": "main", + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "sandmastery:sand_jar" + }, + { + "type": "minecraft:empty", + "weight": 70 + } + ] + } + ] +} \ No newline at end of file diff --git a/src/sandmastery/resources/data/sandmastery/worldgen/biome/dayside_biome.json b/src/sandmastery/resources/data/sandmastery/worldgen/biome/dayside_biome.json new file mode 100644 index 000000000..177564e95 --- /dev/null +++ b/src/sandmastery/resources/data/sandmastery/worldgen/biome/dayside_biome.json @@ -0,0 +1,39 @@ +{ + "temperature": 2, + "downfall": 0, + "has_precipitation": false, + "effects": { + "sky_color": 7254527, + "fog_color": 16773304, + "water_color": 4159204, + "water_fog_color": 329011, + "ambient_sound": "minecraft:ambient.basalt_deltas.loop" + }, + "spawners": { + "monster": [ + { + "type": "minecraft:husk", + "weight": 100, + "minCount": 1, + "maxCount": 4 + } + ], + "ambient": [ + { + "type": "minecraft:bat", + "weight": 10, + "minCount": 8, + "maxCount": 8 + } + ] + }, + "spawn_costs": {}, + "carvers": { + "air": [ + "minecraft:cave", + "minecraft:cave_extra_underground", + "minecraft:canyon" + ] + }, + "features": [] +} diff --git a/src/sandmastery/resources/data/sandmastery/worldgen/noise_settings/dayside_biome.json b/src/sandmastery/resources/data/sandmastery/worldgen/noise_settings/dayside_biome.json new file mode 100644 index 000000000..ed7f06b72 --- /dev/null +++ b/src/sandmastery/resources/data/sandmastery/worldgen/noise_settings/dayside_biome.json @@ -0,0 +1,415 @@ +{ + "sea_level": 0, + "disable_mob_generation": false, + "aquifers_enabled": false, + "ore_veins_enabled": true, + "legacy_random_source": false, + "default_block": { + "Name": "minecraft:stone" + }, + "default_fluid": { + "Name": "minecraft:water", + "Properties": { + "level": "0" + } + }, + "noise": { + "min_y": -64, + "height": 384, + "size_horizontal": 1, + "size_vertical": 2 + }, + "noise_router": { + "barrier": { + "type": "minecraft:noise", + "noise": "minecraft:aquifer_barrier", + "xz_scale": 1, + "y_scale": 0.5 + }, + "fluid_level_floodedness": { + "type": "minecraft:noise", + "noise": "minecraft:aquifer_fluid_level_floodedness", + "xz_scale": 1, + "y_scale": 0.67 + }, + "fluid_level_spread": { + "type": "minecraft:noise", + "noise": "minecraft:aquifer_fluid_level_spread", + "xz_scale": 1, + "y_scale": 0.7142857142857143 + }, + "lava": { + "type": "minecraft:noise", + "noise": "minecraft:aquifer_lava", + "xz_scale": 0, + "y_scale": 0 + }, + "temperature": { + "type": "minecraft:shifted_noise", + "noise": "minecraft:temperature", + "xz_scale": 0.25, + "y_scale": 0, + "shift_x": "minecraft:shift_x", + "shift_y": 0, + "shift_z": "minecraft:shift_z" + }, + "vegetation": { + "type": "minecraft:shifted_noise", + "noise": "minecraft:vegetation", + "xz_scale": 0.25, + "y_scale": 0, + "shift_x": "minecraft:shift_x", + "shift_y": 0, + "shift_z": "minecraft:shift_z" + }, + "continents": "minecraft:overworld/continents", + "erosion": "minecraft:overworld/erosion", + "depth": "minecraft:overworld_amplified/depth", + "ridges": "minecraft:overworld/ridges", + "initial_density_without_jaggedness": { + "type": "minecraft:add", + "argument1": 0.4, + "argument2": { + "type": "minecraft:mul", + "argument1": { + "type": "minecraft:y_clamped_gradient", + "from_y": -64, + "to_y": -40, + "from_value": 0, + "to_value": 1 + }, + "argument2": { + "type": "minecraft:add", + "argument1": -0.4, + "argument2": { + "type": "minecraft:add", + "argument1": -0.078125, + "argument2": { + "type": "minecraft:mul", + "argument1": { + "type": "minecraft:y_clamped_gradient", + "from_y": 304, + "to_y": 320, + "from_value": 1, + "to_value": 0 + }, + "argument2": { + "type": "minecraft:add", + "argument1": 0.078125, + "argument2": { + "type": "minecraft:clamp", + "input": { + "type": "minecraft:add", + "argument1": -0.703125, + "argument2": { + "type": "minecraft:mul", + "argument1": 4, + "argument2": { + "type": "minecraft:quarter_negative", + "argument": { + "type": "minecraft:mul", + "argument1": "minecraft:overworld/depth", + "argument2": { + "type": "minecraft:cache_2d", + "argument": "minecraft:overworld/factor" + } + } + } + } + }, + "min": -64, + "max": 64 + } + } + } + } + } + } + }, + "final_density": { + "type": "minecraft:min", + "argument1": { + "type": "minecraft:squeeze", + "argument": { + "type": "minecraft:mul", + "argument1": 0.64, + "argument2": { + "type": "minecraft:interpolated", + "argument": { + "type": "minecraft:blend_density", + "argument": { + "type": "minecraft:add", + "argument1": 0.4, + "argument2": { + "type": "minecraft:mul", + "argument1": { + "type": "minecraft:y_clamped_gradient", + "from_y": -64, + "to_y": -40, + "from_value": 0, + "to_value": 1 + }, + "argument2": { + "type": "minecraft:add", + "argument1": -0.4, + "argument2": { + "type": "minecraft:add", + "argument1": -0.078125, + "argument2": { + "type": "minecraft:mul", + "argument1": { + "type": "minecraft:y_clamped_gradient", + "from_y": 304, + "to_y": 320, + "from_value": 1, + "to_value": 0 + }, + "argument2": { + "type": "minecraft:add", + "argument1": 0.078125, + "argument2": { + "type": "minecraft:range_choice", + "input": "minecraft:overworld/ridges_folded", + "min_inclusive": -1000000, + "max_exclusive": 1.5625, + "when_in_range": { + "type": "minecraft:min", + "argument1": "minecraft:overworld/sloped_cheese", + "argument2": { + "type": "minecraft:mul", + "argument1": 5, + "argument2": "minecraft:overworld/caves/entrances" + } + }, + "when_out_of_range": { + "type": "minecraft:max", + "argument1": { + "type": "minecraft:min", + "argument1": { + "type": "minecraft:min", + "argument1": { + "type": "minecraft:add", + "argument1": { + "type": "minecraft:mul", + "argument1": 4, + "argument2": { + "type": "minecraft:square", + "argument": { + "type": "minecraft:noise", + "noise": "minecraft:cave_layer", + "xz_scale": 1, + "y_scale": 4 + } + } + }, + "argument2": { + "type": "minecraft:add", + "argument1": { + "type": "minecraft:clamp", + "input": { + "type": "minecraft:add", + "argument1": 0.27, + "argument2": { + "type": "minecraft:noise", + "noise": "minecraft:cave_cheese", + "xz_scale": 1, + "y_scale": 0.6666666666666666 + } + }, + "min": -1, + "max": 1 + }, + "argument2": { + "type": "minecraft:clamp", + "input": { + "type": "minecraft:add", + "argument1": 1.5, + "argument2": { + "type": "minecraft:mul", + "argument1": -0.64, + "argument2": "minecraft:overworld/sloped_cheese" + } + }, + "min": 0, + "max": 0.5 + } + } + }, + "argument2": "minecraft:overworld/caves/entrances" + }, + "argument2": { + "type": "minecraft:add", + "argument1": "minecraft:overworld/caves/spaghetti_2d", + "argument2": "minecraft:overworld/caves/spaghetti_roughness_function" + } + }, + "argument2": { + "type": "minecraft:range_choice", + "input": "minecraft:overworld/caves/pillars", + "min_inclusive": -1000000, + "max_exclusive": 0.03, + "when_in_range": -1000000, + "when_out_of_range": "minecraft:overworld/caves/pillars" + } + } + } + } + } + } + } + } + } + } + } + } + }, + "argument2": "minecraft:overworld/caves/noodle" + }, + "vein_toggle": { + "type": "minecraft:interpolated", + "argument": { + "type": "minecraft:range_choice", + "input": "minecraft:y", + "min_inclusive": -60, + "max_exclusive": 51, + "when_in_range": { + "type": "minecraft:noise", + "noise": "minecraft:ore_veininess", + "xz_scale": 1.5, + "y_scale": 1.5 + }, + "when_out_of_range": 0 + } + }, + "vein_ridged": { + "type": "minecraft:add", + "argument1": -0.07999999821186066, + "argument2": { + "type": "minecraft:max", + "argument1": { + "type": "minecraft:abs", + "argument": { + "type": "minecraft:interpolated", + "argument": { + "type": "minecraft:range_choice", + "input": "minecraft:y", + "min_inclusive": -60, + "max_exclusive": 51, + "when_in_range": { + "type": "minecraft:noise", + "noise": "minecraft:ore_vein_a", + "xz_scale": 4, + "y_scale": 4 + }, + "when_out_of_range": 0 + } + } + }, + "argument2": { + "type": "minecraft:abs", + "argument": { + "type": "minecraft:interpolated", + "argument": { + "type": "minecraft:range_choice", + "input": "minecraft:y", + "min_inclusive": -60, + "max_exclusive": 51, + "when_in_range": { + "type": "minecraft:noise", + "noise": "minecraft:ore_vein_b", + "xz_scale": 4, + "y_scale": 4 + }, + "when_out_of_range": 0 + } + } + } + } + }, + "vein_gap": { + "type": "minecraft:noise", + "noise": "minecraft:ore_gap", + "xz_scale": 1, + "y_scale": 1 + } + }, + "spawn_target": [], + "surface_rule": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "offset": 5, + "surface_type": "floor", + "add_surface_depth": true, + "secondary_depth_range": 5 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "sandmastery:taldain_sand" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:vertical_gradient", + "random_name": "minecraft:bedrock_floor", + "true_at_and_below": { + "above_bottom": 0 + }, + "false_at_and_above": { + "above_bottom": 5 + } + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:bedrock" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:vertical_gradient", + "random_name": "minecraft:deepslate", + "true_at_and_below": { + "absolute": -10 + }, + "false_at_and_above": { + "absolute": 10 + } + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:deepslate", + "Properties": { + "axis": "y" + } + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "offset": 20, + "surface_type": "floor", + "add_surface_depth": true, + "secondary_depth_range": 20 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:sandstone" + } + } + } + ] + } +} diff --git a/src/sandmastery/resources/pack.mcmeta b/src/sandmastery/resources/pack.mcmeta new file mode 100644 index 000000000..70f2868f8 --- /dev/null +++ b/src/sandmastery/resources/pack.mcmeta @@ -0,0 +1,6 @@ +{ + "pack": { + "description": "Resources used for Cosmere Sand Mastery", + "pack_format": 15 + } +} \ No newline at end of file diff --git a/src/sandmastery/resources/sandmastery.mixins.json b/src/sandmastery/resources/sandmastery.mixins.json new file mode 100644 index 000000000..fe9f2e3f3 --- /dev/null +++ b/src/sandmastery/resources/sandmastery.mixins.json @@ -0,0 +1,15 @@ +{ + "required": true, + "minVersion": "0.8", + "package": "leaf.cosmere.sandmastery.mixin", + "compatibilityLevel": "JAVA_17", + "refmap": "mixins.cosmere.sandmastery.refmap.json", + "mixins": [ + "EffectInstanceMixin" + ], + "client": [ + ], + "injectors": { + "defaultRequire": 1 + } +} \ No newline at end of file diff --git a/src/soulforgery/java/leaf/cosmere/soulforgery/client/SoulforgeryForgeClientEvents.java b/src/soulforgery/java/leaf/cosmere/soulforgery/client/SoulforgeryForgeClientEvents.java new file mode 100644 index 000000000..3d8cb8261 --- /dev/null +++ b/src/soulforgery/java/leaf/cosmere/soulforgery/client/SoulforgeryForgeClientEvents.java @@ -0,0 +1,15 @@ +/* + * File updated ~ 30 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.soulforgery.client; + +import leaf.cosmere.common.Cosmere; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.fml.common.Mod; + +@Mod.EventBusSubscriber(modid = Cosmere.MODID, value = Dist.CLIENT) +public class SoulforgeryForgeClientEvents +{ + +} diff --git a/src/soulforgery/java/leaf/cosmere/soulforgery/client/SoulforgeryKeybindings.java b/src/soulforgery/java/leaf/cosmere/soulforgery/client/SoulforgeryKeybindings.java new file mode 100644 index 000000000..48ff55480 --- /dev/null +++ b/src/soulforgery/java/leaf/cosmere/soulforgery/client/SoulforgeryKeybindings.java @@ -0,0 +1,35 @@ +/* + * File updated ~ 30 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.soulforgery.client; + +import com.mojang.blaze3d.platform.InputConstants; +import leaf.cosmere.client.settings.KeyConflictContext; +import leaf.cosmere.soulforgery.common.Soulforgery; +import net.minecraft.client.KeyMapping; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.client.event.RegisterKeyMappingsEvent; +import net.minecraftforge.client.settings.KeyModifier; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.common.Mod.EventBusSubscriber.Bus; + +@Mod.EventBusSubscriber(value = Dist.CLIENT, modid = Soulforgery.MODID, bus = Bus.MOD) +public class SoulforgeryKeybindings +{ + + //public static KeyMapping SOULFORGERY_KEYBINDING; + + @SubscribeEvent + public static void register(RegisterKeyMappingsEvent event) + { + //event.register((SOULFORGERY_KEYBINDING = new KeyMapping("name", GLFW.GLFW_KEY_G, KEYS_CATEGORY))); + + } + + public static KeyMapping createKeybinding(String description, KeyModifier keyModifier, int keyCode, String category) + { + return new KeyMapping(description, KeyConflictContext.DEFAULT, keyModifier, InputConstants.Type.KEYSYM.getOrCreate(keyCode), category); + } +} diff --git a/src/soulforgery/java/leaf/cosmere/soulforgery/client/SoulforgeryModClientEvents.java b/src/soulforgery/java/leaf/cosmere/soulforgery/client/SoulforgeryModClientEvents.java new file mode 100644 index 000000000..04d9f331c --- /dev/null +++ b/src/soulforgery/java/leaf/cosmere/soulforgery/client/SoulforgeryModClientEvents.java @@ -0,0 +1,31 @@ +/* + * File updated ~ 7 - 8 - 2024 ~ Leaf + */ + +package leaf.cosmere.soulforgery.client; + +import leaf.cosmere.api.CosmereAPI; +import leaf.cosmere.soulforgery.client.render.SoulforgeryRenderers; +import leaf.cosmere.soulforgery.common.Soulforgery; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.client.event.EntityRenderersEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; + +@Mod.EventBusSubscriber(modid = Soulforgery.MODID, value = Dist.CLIENT, bus = Mod.EventBusSubscriber.Bus.MOD) +public class SoulforgeryModClientEvents +{ + @SubscribeEvent + public static void init(final FMLClientSetupEvent event) + { + SoulforgeryRenderers.register(); + CosmereAPI.logger.info("Cosmere Soulforgery mod client setup complete!"); + } + + @SubscribeEvent + public static void registerLayers(final EntityRenderersEvent.RegisterLayerDefinitions evt) + { + } + +} diff --git a/src/soulforgery/java/leaf/cosmere/soulforgery/client/render/SoulforgeryLayerDefinitions.java b/src/soulforgery/java/leaf/cosmere/soulforgery/client/render/SoulforgeryLayerDefinitions.java new file mode 100644 index 000000000..c98d03bc7 --- /dev/null +++ b/src/soulforgery/java/leaf/cosmere/soulforgery/client/render/SoulforgeryLayerDefinitions.java @@ -0,0 +1,13 @@ +/* + * File updated ~ 30 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.soulforgery.client.render; + +import leaf.cosmere.soulforgery.common.Soulforgery; +import net.minecraft.client.model.geom.ModelLayerLocation; + +public class SoulforgeryLayerDefinitions +{ + public static final ModelLayerLocation SOULFORGERY = new ModelLayerLocation(Soulforgery.rl("soulforgery_mob_model"), "soulforgery_mob_model"); +} diff --git a/src/soulforgery/java/leaf/cosmere/soulforgery/client/render/SoulforgeryRenderers.java b/src/soulforgery/java/leaf/cosmere/soulforgery/client/render/SoulforgeryRenderers.java new file mode 100644 index 000000000..7ea1839fd --- /dev/null +++ b/src/soulforgery/java/leaf/cosmere/soulforgery/client/render/SoulforgeryRenderers.java @@ -0,0 +1,16 @@ +/* + * File updated ~ 30 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.soulforgery.client.render; + +public class SoulforgeryRenderers +{ + + public static void register() + { + //EntityRenderers.register(SoulforgeryEntityTypes.SOULFORGERY_ENTITY.get(), SoulforgeryEntityRenderer::new); + } + + +} diff --git a/src/soulforgery/java/leaf/cosmere/soulforgery/common/Soulforgery.java b/src/soulforgery/java/leaf/cosmere/soulforgery/common/Soulforgery.java new file mode 100644 index 000000000..a75ebd767 --- /dev/null +++ b/src/soulforgery/java/leaf/cosmere/soulforgery/common/Soulforgery.java @@ -0,0 +1,122 @@ +/* + * File updated ~ 30 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.soulforgery.common; + +import leaf.cosmere.api.CosmereAPI; +import leaf.cosmere.api.IModModule; +import leaf.cosmere.api.ISpiritwebSubmodule; +import leaf.cosmere.api.Version; +import leaf.cosmere.common.Cosmere; +import leaf.cosmere.common.config.CosmereModConfig; +import leaf.cosmere.soulforgery.common.capabilities.SoulforgerySpiritwebSubmodule; +import leaf.cosmere.soulforgery.common.config.SoulforgeryConfigs; +import leaf.cosmere.soulforgery.common.registries.*; +import net.minecraft.resources.ResourceLocation; +import net.minecraftforge.eventbus.api.IEventBus; +import net.minecraftforge.fml.ModLoadingContext; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.config.ModConfig; +import net.minecraftforge.fml.event.config.ModConfigEvent; +import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; +import net.minecraftforge.fml.event.lifecycle.InterModEnqueueEvent; +import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; + +@Mod(Soulforgery.MODID) +public class Soulforgery implements IModModule +{ + public static final String MODID = "soulforgery"; + + public static Soulforgery instance; + + public final Version versionNumber; + + public Soulforgery() + { + Cosmere.addModule(instance = this); + IEventBus modBus = FMLJavaModLoadingContext.get().getModEventBus(); + + SoulforgeryConfigs.registerConfigs(ModLoadingContext.get()); + + modBus.addListener(this::commonSetup); + modBus.addListener(this::onConfigLoad); + modBus.addListener(this::onConfigReload); + modBus.addListener(this::imcQueue); + + SoulforgeryAttributes.ATTRIBUTES.register(modBus); + SoulforgeryBiomes.BIOMES.register(modBus); + SoulforgeryBiomeModifiers.BIOME_MODIFIER_SERIALIZERS.register(modBus); + SoulforgeryBlocks.BLOCKS.register(modBus); + SoulforgeryEffects.EFFECTS.register(modBus); + SoulforgeryFeatures.CONFIGURED_FEATURES.register(modBus); + SoulforgeryFeatures.PLACED_FEATURES.register(modBus); + SoulforgeryEntityTypes.ENTITY_TYPES.register(modBus); + SoulforgeryItems.ITEMS.register(modBus); + SoulforgeryManifestations.MANIFESTATIONS.register(modBus); + SoulforgeryMenuTypes.MENU_TYPES.register(modBus); + SoulforgeryRecipes.SPECIAL_RECIPES.register(modBus); + SoulforgeryStats.STATS.register(modBus); + + versionNumber = new Version(ModLoadingContext.get().getActiveContainer()); + } + + public static ResourceLocation rl(String path) + { + return new ResourceLocation(Soulforgery.MODID, path); + } + + private void commonSetup(FMLCommonSetupEvent event) + { + CosmereAPI.logger.info("Cosmere: Soulforgery module Version {} initializing...", versionNumber); + + event.enqueueWork(() -> + { + //AllomancyEntityTypes.PrepareEntityAttributes(); + SoulforgeryStats.initStatEntries(); + }); + + + //packetHandler.initialize(); + } + + private void imcQueue(InterModEnqueueEvent event) + { + } + + @Override + public Version getVersion() + { + return versionNumber; + } + + @Override + public String getName() + { + return "Soulforgery"; + } + + @Override + public ISpiritwebSubmodule makeSubmodule() + { + return new SoulforgerySpiritwebSubmodule(); + } + + private void onConfigLoad(ModConfigEvent configEvent) + { + ModConfig config = configEvent.getConfig(); + if (config.getModId().equals(MODID) && config instanceof CosmereModConfig cosmereModConfig) + { + cosmereModConfig.clearCache(); + } + } + + private void onConfigReload(ModConfigEvent.Reloading configEvent) + { + ModConfig config = configEvent.getConfig(); + if (config.getModId().equals(MODID) && config instanceof CosmereModConfig cosmereModConfig) + { + cosmereModConfig.clearCache(); + } + } +} \ No newline at end of file diff --git a/src/soulforgery/java/leaf/cosmere/soulforgery/common/capabilities/SoulforgerySpiritwebSubmodule.java b/src/soulforgery/java/leaf/cosmere/soulforgery/common/capabilities/SoulforgerySpiritwebSubmodule.java new file mode 100644 index 000000000..e0ac9895f --- /dev/null +++ b/src/soulforgery/java/leaf/cosmere/soulforgery/common/capabilities/SoulforgerySpiritwebSubmodule.java @@ -0,0 +1,70 @@ +/* + * File updated ~ 5 - 3 - 2025 ~ Leaf + */ + +package leaf.cosmere.soulforgery.common.capabilities; + +import leaf.cosmere.api.ISpiritwebSubmodule; +import leaf.cosmere.api.manifestation.Manifestation; +import leaf.cosmere.api.spiritweb.ISpiritweb; +import net.minecraft.world.entity.player.Player; +import net.minecraftforge.client.event.RenderLevelStageEvent; + +import java.util.List; + +public class SoulforgerySpiritwebSubmodule implements ISpiritwebSubmodule +{ + @Override + public void serialize(ISpiritweb spiritweb) + { + + } + + @Override + public void deserialize(ISpiritweb spiritweb) + { + + } + + @Override + public void tickClient(ISpiritweb spiritweb) + { + + } + + @Override + public void tickServer(ISpiritweb spiritweb) + { + + } + + @Override + public void collectMenuInfo(List m_infoText) + { + + } + + @Override + public void renderWorldEffects(ISpiritweb spiritweb, RenderLevelStageEvent event) + { + + } + + @Override + public void GiveStartingItem(Player player) + { + + } + + @Override + public void GiveStartingItem(Player player, Manifestation manifestation) + { + + } + + @Override + public void drainInvestiture(ISpiritweb data, double strength) + { + //TODO: implement + } +} diff --git a/src/soulforgery/java/leaf/cosmere/soulforgery/common/commands/SoulforgeryCommands.java b/src/soulforgery/java/leaf/cosmere/soulforgery/common/commands/SoulforgeryCommands.java new file mode 100644 index 000000000..7e1918696 --- /dev/null +++ b/src/soulforgery/java/leaf/cosmere/soulforgery/common/commands/SoulforgeryCommands.java @@ -0,0 +1,23 @@ +/* + * File updated ~ 30 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.soulforgery.common.commands; + +import com.mojang.brigadier.CommandDispatcher; +import leaf.cosmere.common.Cosmere; +import leaf.cosmere.soulforgery.common.commands.subcommands.SoulforgeryCommand; +import net.minecraft.commands.CommandSourceStack; +import net.minecraft.commands.Commands; + + +public class SoulforgeryCommands +{ + + public static void register(CommandDispatcher dispatcher) + { + dispatcher.register(Commands.literal(Cosmere.MODID) + .then(SoulforgeryCommand.register(dispatcher)) + ); + } +} diff --git a/src/soulforgery/java/leaf/cosmere/soulforgery/common/commands/subcommands/SoulforgeryCommand.java b/src/soulforgery/java/leaf/cosmere/soulforgery/common/commands/subcommands/SoulforgeryCommand.java new file mode 100644 index 000000000..5b43e5755 --- /dev/null +++ b/src/soulforgery/java/leaf/cosmere/soulforgery/common/commands/subcommands/SoulforgeryCommand.java @@ -0,0 +1,50 @@ +/* + * File updated ~ 30 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.soulforgery.common.commands.subcommands; + +import com.mojang.brigadier.CommandDispatcher; +import com.mojang.brigadier.builder.ArgumentBuilder; +import com.mojang.brigadier.context.CommandContext; +import com.mojang.brigadier.exceptions.CommandSyntaxException; +import leaf.cosmere.api.text.TextHelper; +import leaf.cosmere.common.commands.subcommands.ModCommand; +import net.minecraft.commands.CommandSourceStack; +import net.minecraft.commands.Commands; +import net.minecraft.commands.arguments.EntityArgument; +import net.minecraft.server.level.ServerPlayer; + +import java.util.Collection; + +public class SoulforgeryCommand extends ModCommand +{ + public static ArgumentBuilder register(CommandDispatcher dispatcher) + { + return Commands.literal("soulforgeryTest") + .requires(context -> context.hasPermission(2)) + .executes(SoulforgeryCommand::soulforgeryTest) + .then(Commands.argument("target", EntityArgument.players()) + .requires(context -> context.hasPermission(2)) + .executes(SoulforgeryCommand::soulforgeryTest)); + } + + private static int soulforgeryTest(CommandContext context) throws CommandSyntaxException + { + Collection players = getPlayers(context, 3); + + for (ServerPlayer player : players) + { + player.displayClientMessage(TextHelper.createText("Test Received"), false); + } + + return SINGLE_SUCCESS; + } + + @Override + public int run(CommandContext context) throws CommandSyntaxException + { + return SINGLE_SUCCESS; + } + +} \ No newline at end of file diff --git a/src/soulforgery/java/leaf/cosmere/soulforgery/common/config/SoulforgeryConfigs.java b/src/soulforgery/java/leaf/cosmere/soulforgery/common/config/SoulforgeryConfigs.java new file mode 100644 index 000000000..63d7ad61e --- /dev/null +++ b/src/soulforgery/java/leaf/cosmere/soulforgery/common/config/SoulforgeryConfigs.java @@ -0,0 +1,20 @@ +/* + * File updated ~ 30 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.soulforgery.common.config; + +import leaf.cosmere.common.config.CosmereConfigHelper; +import net.minecraftforge.fml.ModContainer; +import net.minecraftforge.fml.ModLoadingContext; + +public class SoulforgeryConfigs +{ + public static final SoulforgeryServerConfig SERVER = new SoulforgeryServerConfig(); + + public static void registerConfigs(ModLoadingContext modLoadingContext) + { + ModContainer modContainer = modLoadingContext.getActiveContainer(); + CosmereConfigHelper.registerConfig(modContainer, SERVER); + } +} diff --git a/src/soulforgery/java/leaf/cosmere/soulforgery/common/config/SoulforgeryServerConfig.java b/src/soulforgery/java/leaf/cosmere/soulforgery/common/config/SoulforgeryServerConfig.java new file mode 100644 index 000000000..538d9525b --- /dev/null +++ b/src/soulforgery/java/leaf/cosmere/soulforgery/common/config/SoulforgeryServerConfig.java @@ -0,0 +1,54 @@ +/* + * File updated ~ 30 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.soulforgery.common.config; + +import leaf.cosmere.common.config.ICosmereConfig; +import net.minecraftforge.common.ForgeConfigSpec; +import net.minecraftforge.fml.config.ModConfig.Type; + +public class SoulforgeryServerConfig implements ICosmereConfig +{ + + private final ForgeConfigSpec configSpec; + + public final ForgeConfigSpec.IntValue SOULFORGERY; + + + SoulforgeryServerConfig() + { + ForgeConfigSpec.Builder builder = new ForgeConfigSpec.Builder(); + builder.comment("Soulforgery Config. This config is synced between server and client.").push("Soulforgery"); + + SOULFORGERY = builder.comment("Soulforgery.").defineInRange("soulforgery", 0, 0, 100); + + + builder.pop(); + configSpec = builder.build(); + } + + @Override + public String getFileName() + { + return "SoulforgeryServer"; + } + + @Override + public ForgeConfigSpec getConfigSpec() + { + return configSpec; + } + + @Override + public Type getConfigType() + { + return Type.SERVER; + } + + @Override + public void clearCache() + { + SOULFORGERY.clearCache(); + } +} \ No newline at end of file diff --git a/src/soulforgery/java/leaf/cosmere/soulforgery/common/eventHandlers/SoulforgeryCommonForgeEvents.java b/src/soulforgery/java/leaf/cosmere/soulforgery/common/eventHandlers/SoulforgeryCommonForgeEvents.java new file mode 100644 index 000000000..179864143 --- /dev/null +++ b/src/soulforgery/java/leaf/cosmere/soulforgery/common/eventHandlers/SoulforgeryCommonForgeEvents.java @@ -0,0 +1,61 @@ +/* + * File updated ~ 30 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.soulforgery.common.eventHandlers; + +import leaf.cosmere.soulforgery.common.Soulforgery; +import leaf.cosmere.soulforgery.common.commands.SoulforgeryCommands; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.item.ItemStack; +import net.minecraftforge.event.RegisterCommandsEvent; +import net.minecraftforge.event.entity.player.PlayerInteractEvent; +import net.minecraftforge.event.server.ServerStartedEvent; +import net.minecraftforge.event.server.ServerStoppingEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; + +@Mod.EventBusSubscriber(modid = Soulforgery.MODID, bus = Mod.EventBusSubscriber.Bus.FORGE) +public class SoulforgeryCommonForgeEvents +{ + + + @SubscribeEvent + public static void onEntityInteract(PlayerInteractEvent.EntityInteract event) + { + if (!(event.getTarget() instanceof LivingEntity target)) + { + return; + } + + ItemStack stack = event.getEntity().getMainHandItem(); + if (!stack.isEmpty()) + { + //if (stack.getItem() instanceof SoulforgeryItem soulforgeryItem) + //{ + // + //} + } + } + + + @SubscribeEvent + public static void registerCommands(RegisterCommandsEvent event) + { + SoulforgeryCommands.register(event.getDispatcher()); + } + + + @SubscribeEvent + public static void onServerStartingEvent(ServerStartedEvent event) + { + + } + + @SubscribeEvent + public static void onServerStoppingEvent(ServerStoppingEvent event) + { + + } + +} diff --git a/src/soulforgery/java/leaf/cosmere/soulforgery/common/eventHandlers/SoulforgeryCommonModEvents.java b/src/soulforgery/java/leaf/cosmere/soulforgery/common/eventHandlers/SoulforgeryCommonModEvents.java new file mode 100644 index 000000000..b6030b34f --- /dev/null +++ b/src/soulforgery/java/leaf/cosmere/soulforgery/common/eventHandlers/SoulforgeryCommonModEvents.java @@ -0,0 +1,15 @@ +/* + * File updated ~ 30 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.soulforgery.common.eventHandlers; + +import leaf.cosmere.soulforgery.common.Soulforgery; +import net.minecraftforge.fml.common.Mod; + + +@Mod.EventBusSubscriber(modid = Soulforgery.MODID, bus = Mod.EventBusSubscriber.Bus.MOD) +public class SoulforgeryCommonModEvents +{ + +} diff --git a/src/soulforgery/java/leaf/cosmere/soulforgery/common/registries/SoulforgeryAttributes.java b/src/soulforgery/java/leaf/cosmere/soulforgery/common/registries/SoulforgeryAttributes.java new file mode 100644 index 000000000..f9eb454f3 --- /dev/null +++ b/src/soulforgery/java/leaf/cosmere/soulforgery/common/registries/SoulforgeryAttributes.java @@ -0,0 +1,15 @@ +/* + * File updated ~ 30 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.soulforgery.common.registries; + +import leaf.cosmere.common.registration.impl.AttributeDeferredRegister; +import leaf.cosmere.soulforgery.common.Soulforgery; + +public class SoulforgeryAttributes +{ + + public static final AttributeDeferredRegister ATTRIBUTES = new AttributeDeferredRegister(Soulforgery.MODID); + +} diff --git a/src/soulforgery/java/leaf/cosmere/soulforgery/common/registries/SoulforgeryBiomeModifiers.java b/src/soulforgery/java/leaf/cosmere/soulforgery/common/registries/SoulforgeryBiomeModifiers.java new file mode 100644 index 000000000..aec707b87 --- /dev/null +++ b/src/soulforgery/java/leaf/cosmere/soulforgery/common/registries/SoulforgeryBiomeModifiers.java @@ -0,0 +1,15 @@ +/* + * File updated ~ 30 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.soulforgery.common.registries; + +import leaf.cosmere.common.registration.impl.BiomeModifierSerializerDeferredRegister; +import leaf.cosmere.soulforgery.common.Soulforgery; + +public class SoulforgeryBiomeModifiers +{ + public static final BiomeModifierSerializerDeferredRegister BIOME_MODIFIER_SERIALIZERS = new BiomeModifierSerializerDeferredRegister(Soulforgery.MODID); + + +} diff --git a/src/soulforgery/java/leaf/cosmere/soulforgery/common/registries/SoulforgeryBiomes.java b/src/soulforgery/java/leaf/cosmere/soulforgery/common/registries/SoulforgeryBiomes.java new file mode 100644 index 000000000..2cdc0161b --- /dev/null +++ b/src/soulforgery/java/leaf/cosmere/soulforgery/common/registries/SoulforgeryBiomes.java @@ -0,0 +1,15 @@ +/* + * File updated ~ 30 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.soulforgery.common.registries; + +import leaf.cosmere.common.registration.impl.BiomeDeferredRegister; +import leaf.cosmere.soulforgery.common.Soulforgery; + +public class SoulforgeryBiomes +{ + public static final BiomeDeferredRegister BIOMES = new BiomeDeferredRegister(Soulforgery.MODID); + + //public static final BiomeRegistryObject SOULFORGERY_BIOME = BIOMES.register("soulforgery_biome", OverworldBiomes::stonyPeaks); +} diff --git a/src/soulforgery/java/leaf/cosmere/soulforgery/common/registries/SoulforgeryBlocks.java b/src/soulforgery/java/leaf/cosmere/soulforgery/common/registries/SoulforgeryBlocks.java new file mode 100644 index 000000000..df2e1b1be --- /dev/null +++ b/src/soulforgery/java/leaf/cosmere/soulforgery/common/registries/SoulforgeryBlocks.java @@ -0,0 +1,17 @@ +/* + * File updated ~ 30 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.soulforgery.common.registries; + +import leaf.cosmere.common.registration.impl.BlockDeferredRegister; +import leaf.cosmere.soulforgery.common.Soulforgery; + +public class SoulforgeryBlocks +{ + public static final BlockDeferredRegister BLOCKS = new BlockDeferredRegister(Soulforgery.MODID); + + //public static final BlockRegistryObject SOULFORGERY_BLOCK = BLOCKS.register("soulforgery", BaseBlock::new); + + +} diff --git a/src/soulforgery/java/leaf/cosmere/soulforgery/common/registries/SoulforgeryEffects.java b/src/soulforgery/java/leaf/cosmere/soulforgery/common/registries/SoulforgeryEffects.java new file mode 100644 index 000000000..6eb2f5af3 --- /dev/null +++ b/src/soulforgery/java/leaf/cosmere/soulforgery/common/registries/SoulforgeryEffects.java @@ -0,0 +1,16 @@ +/* + * File updated ~ 30 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.soulforgery.common.registries; + +import leaf.cosmere.common.registration.impl.CosmereEffectDeferredRegister; +import leaf.cosmere.soulforgery.common.Soulforgery; + +public class SoulforgeryEffects +{ + + public static final CosmereEffectDeferredRegister EFFECTS = new CosmereEffectDeferredRegister(Soulforgery.MODID); + + +} diff --git a/src/soulforgery/java/leaf/cosmere/soulforgery/common/registries/SoulforgeryEntityTypes.java b/src/soulforgery/java/leaf/cosmere/soulforgery/common/registries/SoulforgeryEntityTypes.java new file mode 100644 index 000000000..d9f623795 --- /dev/null +++ b/src/soulforgery/java/leaf/cosmere/soulforgery/common/registries/SoulforgeryEntityTypes.java @@ -0,0 +1,13 @@ +/* + * File updated ~ 30 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.soulforgery.common.registries; + +import leaf.cosmere.common.registration.impl.EntityTypeDeferredRegister; +import leaf.cosmere.soulforgery.common.Soulforgery; + +public class SoulforgeryEntityTypes +{ + public static final EntityTypeDeferredRegister ENTITY_TYPES = new EntityTypeDeferredRegister(Soulforgery.MODID); +} diff --git a/src/soulforgery/java/leaf/cosmere/soulforgery/common/registries/SoulforgeryFeatures.java b/src/soulforgery/java/leaf/cosmere/soulforgery/common/registries/SoulforgeryFeatures.java new file mode 100644 index 000000000..3c99ec3d6 --- /dev/null +++ b/src/soulforgery/java/leaf/cosmere/soulforgery/common/registries/SoulforgeryFeatures.java @@ -0,0 +1,16 @@ +/* + * File updated ~ 4 - 9 - 2024 ~ Leaf + */ + +package leaf.cosmere.soulforgery.common.registries; + +import leaf.cosmere.common.registration.impl.ConfiguredFeatureDeferredRegister; +import leaf.cosmere.common.registration.impl.PlacedFeatureDeferredRegister; +import leaf.cosmere.soulforgery.common.Soulforgery; + +public class SoulforgeryFeatures +{ + public static final ConfiguredFeatureDeferredRegister CONFIGURED_FEATURES = new ConfiguredFeatureDeferredRegister(Soulforgery.MODID); + public static final PlacedFeatureDeferredRegister PLACED_FEATURES = new PlacedFeatureDeferredRegister(Soulforgery.MODID); + +} diff --git a/src/soulforgery/java/leaf/cosmere/soulforgery/common/registries/SoulforgeryItems.java b/src/soulforgery/java/leaf/cosmere/soulforgery/common/registries/SoulforgeryItems.java new file mode 100644 index 000000000..5fb48e875 --- /dev/null +++ b/src/soulforgery/java/leaf/cosmere/soulforgery/common/registries/SoulforgeryItems.java @@ -0,0 +1,14 @@ +/* + * File updated ~ 30 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.soulforgery.common.registries; + +import leaf.cosmere.common.registration.impl.ItemDeferredRegister; +import leaf.cosmere.soulforgery.common.Soulforgery; + +public class SoulforgeryItems +{ + public static final ItemDeferredRegister ITEMS = new ItemDeferredRegister(Soulforgery.MODID); + +} diff --git a/src/soulforgery/java/leaf/cosmere/soulforgery/common/registries/SoulforgeryManifestations.java b/src/soulforgery/java/leaf/cosmere/soulforgery/common/registries/SoulforgeryManifestations.java new file mode 100644 index 000000000..01a6c37b1 --- /dev/null +++ b/src/soulforgery/java/leaf/cosmere/soulforgery/common/registries/SoulforgeryManifestations.java @@ -0,0 +1,18 @@ +/* + * File updated ~ 30 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.soulforgery.common.registries; + +import leaf.cosmere.api.manifestation.Manifestation; +import leaf.cosmere.common.registration.impl.ManifestationDeferredRegister; +import leaf.cosmere.common.registration.impl.ManifestationRegistryObject; +import leaf.cosmere.soulforgery.common.Soulforgery; + +public class SoulforgeryManifestations +{ + public static final ManifestationDeferredRegister MANIFESTATIONS = new ManifestationDeferredRegister(Soulforgery.MODID); + + public static final ManifestationRegistryObject SOULFORGERY_MANIFESTATION = MANIFESTATIONS.register("soulforgery", Manifestation::new); + +} diff --git a/src/soulforgery/java/leaf/cosmere/soulforgery/common/registries/SoulforgeryMenuTypes.java b/src/soulforgery/java/leaf/cosmere/soulforgery/common/registries/SoulforgeryMenuTypes.java new file mode 100644 index 000000000..825fc7b46 --- /dev/null +++ b/src/soulforgery/java/leaf/cosmere/soulforgery/common/registries/SoulforgeryMenuTypes.java @@ -0,0 +1,14 @@ +/* + * File updated ~ 30 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.soulforgery.common.registries; + +import leaf.cosmere.common.registration.impl.MenuTypeDeferredRegister; +import leaf.cosmere.soulforgery.common.Soulforgery; + +public class SoulforgeryMenuTypes +{ + public static final MenuTypeDeferredRegister MENU_TYPES = new MenuTypeDeferredRegister(Soulforgery.MODID); + +} diff --git a/src/soulforgery/java/leaf/cosmere/soulforgery/common/registries/SoulforgeryRecipes.java b/src/soulforgery/java/leaf/cosmere/soulforgery/common/registries/SoulforgeryRecipes.java new file mode 100644 index 000000000..f987138a2 --- /dev/null +++ b/src/soulforgery/java/leaf/cosmere/soulforgery/common/registries/SoulforgeryRecipes.java @@ -0,0 +1,15 @@ +/* + * File updated ~ 30 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.soulforgery.common.registries; + +import leaf.cosmere.common.registration.impl.RecipeSerializerDeferredRegister; +import leaf.cosmere.soulforgery.common.Soulforgery; + +// for the non-json based recipes +public class SoulforgeryRecipes +{ + public static final RecipeSerializerDeferredRegister SPECIAL_RECIPES = new RecipeSerializerDeferredRegister(Soulforgery.MODID); + +} diff --git a/src/soulforgery/java/leaf/cosmere/soulforgery/common/registries/SoulforgeryStats.java b/src/soulforgery/java/leaf/cosmere/soulforgery/common/registries/SoulforgeryStats.java new file mode 100644 index 000000000..953e0f9cb --- /dev/null +++ b/src/soulforgery/java/leaf/cosmere/soulforgery/common/registries/SoulforgeryStats.java @@ -0,0 +1,25 @@ +/* + * File updated ~ 30 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.soulforgery.common.registries; + +import leaf.cosmere.common.registration.impl.StatDeferredRegister; +import leaf.cosmere.common.registration.impl.StatRegistryObject; +import leaf.cosmere.soulforgery.common.Soulforgery; +import net.minecraft.stats.StatFormatter; +import net.minecraft.stats.Stats; + +public class SoulforgeryStats +{ + public static final StatDeferredRegister STATS = new StatDeferredRegister(Soulforgery.MODID); + + + public static void initStatEntries() + { + for (StatRegistryObject value : STATS.getAllItems()) + { + Stats.CUSTOM.get(value.get(), StatFormatter.TIME); + } + } +} diff --git a/src/soulforgery/java/leaf/cosmere/soulforgery/mixin/EntityMixin.java b/src/soulforgery/java/leaf/cosmere/soulforgery/mixin/EntityMixin.java new file mode 100644 index 000000000..a731441d6 --- /dev/null +++ b/src/soulforgery/java/leaf/cosmere/soulforgery/mixin/EntityMixin.java @@ -0,0 +1,15 @@ +/* + * File updated ~ 30 - 11 - 2023 ~ Leaf + */ + +package leaf.cosmere.soulforgery.mixin; + +import net.minecraft.world.entity.Entity; +import org.spongepowered.asm.mixin.Mixin; + +@Mixin(Entity.class) +public class EntityMixin +{ + +} + diff --git a/src/soulforgery/resources/META-INF/mods.toml b/src/soulforgery/resources/META-INF/mods.toml new file mode 100644 index 000000000..e48fa9345 --- /dev/null +++ b/src/soulforgery/resources/META-INF/mods.toml @@ -0,0 +1,25 @@ +modLoader = "javafml" +loaderVersion = "${loader_version}" +issueTrackerURL = "https://github.com/leafreynolds/Cosmere/issues" +license = "MIT" + +[[mods]] +modId = "soulforgery" +version = "${version}" +displayName = "Cosmere: Soulforgery" +displayURL = "https://www.curseforge.com/minecraft/mc-mods/cosmere" +authors = "Leaf" +credits = ''' + +Special thanks go to: +Ridanisaurus - For many item and block textures. +''' +logoFile = "logo.png" +description = '''Soulforgery module for Cosmere.''' + +[[dependencies.soulforgery]] +modId = "cosmere" +mandatory = true +versionRange = "[${version}]" +ordering = "AFTER" +side = "BOTH" diff --git a/src/soulforgery/resources/pack.mcmeta b/src/soulforgery/resources/pack.mcmeta new file mode 100644 index 000000000..e7bef8487 --- /dev/null +++ b/src/soulforgery/resources/pack.mcmeta @@ -0,0 +1,6 @@ +{ + "pack": { + "description": "Resources used for Cosmere Soulforgery", + "pack_format": 15 + } +} \ No newline at end of file diff --git a/src/soulforgery/resources/soulforgery.mixins.json b/src/soulforgery/resources/soulforgery.mixins.json new file mode 100644 index 000000000..82f10c047 --- /dev/null +++ b/src/soulforgery/resources/soulforgery.mixins.json @@ -0,0 +1,15 @@ +{ + "required": true, + "minVersion": "0.8", + "package": "leaf.cosmere.soulforgery.mixin", + "compatibilityLevel": "JAVA_17", + "refmap": "mixins.cosmere.soulforgery.refmap.json", + "mixins": [ + "EntityMixin" + ], + "client": [ + ], + "injectors": { + "defaultRequire": 1 + } +} \ No newline at end of file diff --git a/src/surgebinding/java/leaf/cosmere/surgebinding/client/HUDHandler.java b/src/surgebinding/java/leaf/cosmere/surgebinding/client/HUDHandler.java new file mode 100644 index 000000000..581fc9d4f --- /dev/null +++ b/src/surgebinding/java/leaf/cosmere/surgebinding/client/HUDHandler.java @@ -0,0 +1,131 @@ +/* + * File updated ~ 7 - 8 - 2024 ~ Leaf + */ + +package leaf.cosmere.surgebinding.client; + +import com.mojang.blaze3d.systems.RenderSystem; +import leaf.cosmere.api.Manifestations; +import leaf.cosmere.common.cap.entity.SpiritwebCapability; +import leaf.cosmere.surgebinding.common.Surgebinding; +import leaf.cosmere.surgebinding.common.capabilities.SurgebindingSpiritwebSubmodule; +import leaf.cosmere.surgebinding.common.config.SurgebindingConfigs; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.profiling.ProfilerFiller; +import net.minecraft.world.entity.player.Player; +import org.lwjgl.opengl.GL11; + +import java.awt.*; + +public class HUDHandler +{ + private static final ResourceLocation stormlightBar = new ResourceLocation(Surgebinding.MODID, "textures/gui/stormlight_hud.png"); + + + public static void onDrawScreenPost(GuiGraphics guiGraphics) + { + Minecraft mc = Minecraft.getInstance(); + if (mc.options.hideGui) + { + return; + } + ProfilerFiller profiler = mc.getProfiler(); + Player player = mc.player; + if (player == null) + { + return; + } + + profiler.push("stormlight-hud"); + { + SpiritwebCapability.get(mc.player).ifPresent(spiritweb -> + { + SpiritwebCapability data = (SpiritwebCapability) spiritweb; + + profiler.push("stormlight-bar"); + { + if (!player.isSpectator()) + { + var sbModule = (SurgebindingSpiritwebSubmodule) data.getSubmodule(Manifestations.ManifestationTypes.SURGEBINDING); + + final int heldStormlight = sbModule.getStormlight(); + if (heldStormlight > 0) + { + final int maxPlayerStormlight = SurgebindingConfigs.SERVER.PLAYER_MAX_STORMLIGHT.get(); + renderStormlightBar(guiGraphics, heldStormlight, maxPlayerStormlight); + } + } + + } + profiler.pop(); + }); + } + profiler.pop(); + + RenderSystem.setShaderColor(1F, 1F, 1F, 1F); + } + + private static void renderStormlightBar(GuiGraphics gui, int heldStormlight, int maxPlayerStormlight) + { + Minecraft mc = Minecraft.getInstance(); + int barWidth = 182; + int barStartingX = mc.getWindow().getGuiScaledWidth() / 2 - barWidth / 2; + + //todo stormlight bar height config + final int stormlightBarHeight = 32; + + int barStartingY = mc.getWindow().getGuiScaledHeight() - stormlightBarHeight; + + if (maxPlayerStormlight == 0) + { + barWidth = 0; + } + else + { + barWidth *= (double) heldStormlight / (double) maxPlayerStormlight; + } + + if (barWidth == 0) + { + if (heldStormlight > 0) + { + barWidth = 1; + } + else + { + return; + } + } + + final float hue = 0.55F; + //add/remove saturation? Currently, it oscillates between blue and white + final float saturation = (float) Math.min(1F, Math.sin(System.currentTimeMillis() / 200D) * 0.5 + 1F); + final float brightness = 1F; + + final int rgb = Color.HSBtoRGB(hue, saturation, brightness); + Color color = new Color(rgb); + + //todo get color of order by gem + final int red = color.getRed(); + final int green = color.getGreen(); + final int blue = color.getBlue(); + + RenderSystem.setShaderColor( + red / 255F, + green / 255F, + blue / 255F, + 1// - (red / 255F)//fading in and out? + ); + + RenderSystem.enableBlend(); + RenderSystem.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + + //draw textured rect + gui.blit(stormlightBar, barStartingX, barStartingY, 0, 251, barWidth, 5, 256, 256); + + RenderSystem.disableBlend(); + RenderSystem.setShaderColor(1, 1, 1, 1); + } +} diff --git a/src/surgebinding/java/leaf/cosmere/surgebinding/client/SurgebindingForgeClientEvents.java b/src/surgebinding/java/leaf/cosmere/surgebinding/client/SurgebindingForgeClientEvents.java new file mode 100644 index 000000000..74f0b5055 --- /dev/null +++ b/src/surgebinding/java/leaf/cosmere/surgebinding/client/SurgebindingForgeClientEvents.java @@ -0,0 +1,57 @@ +/* + * File updated ~ 4 - 2 - 2025 ~ Leaf + */ + +package leaf.cosmere.surgebinding.client; + +import leaf.cosmere.common.cap.entity.SpiritwebCapability; +import leaf.cosmere.surgebinding.common.Surgebinding; +import leaf.cosmere.surgebinding.common.network.packets.DispatchStormlight; +import leaf.cosmere.surgebinding.common.network.packets.RequestStormlight; +import leaf.cosmere.surgebinding.common.network.packets.SummonShardblade; +import net.minecraft.client.KeyMapping; +import net.minecraft.client.Minecraft; +import net.minecraft.client.player.LocalPlayer; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.client.event.InputEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; + +@Mod.EventBusSubscriber(modid = Surgebinding.MODID, value = Dist.CLIENT, bus = Mod.EventBusSubscriber.Bus.FORGE) +public class SurgebindingForgeClientEvents +{ + @SubscribeEvent + public static void onKey(InputEvent.Key event) + { + final LocalPlayer player = Minecraft.getInstance().player; + + if (player == null) + { + return; + } + + SpiritwebCapability.get(player).ifPresent(spiritweb -> + { + + if (isKeyPressed(event, SurgebindingKeybindings.SHARDBLADE)) + { + Surgebinding.packetHandler().sendToServer(new SummonShardblade()); + } + + if (isKeyPressed(event, SurgebindingKeybindings.DISPATCH_STORMLIGHT)) + { + Surgebinding.packetHandler().sendToServer(new DispatchStormlight()); + } + if (isKeyPressed(event, SurgebindingKeybindings.REQUEST_STORMLIGHT)) + { + Surgebinding.packetHandler().sendToServer(new RequestStormlight()); + } + }); + } + + private static boolean isKeyPressed(InputEvent.Key event, KeyMapping keyBinding) + { + return event.getKey() == keyBinding.getKey().getValue() && keyBinding.consumeClick(); + } + +} diff --git a/src/surgebinding/java/leaf/cosmere/surgebinding/client/SurgebindingKeybindings.java b/src/surgebinding/java/leaf/cosmere/surgebinding/client/SurgebindingKeybindings.java new file mode 100644 index 000000000..2f547b13b --- /dev/null +++ b/src/surgebinding/java/leaf/cosmere/surgebinding/client/SurgebindingKeybindings.java @@ -0,0 +1,68 @@ +/* + * File updated ~ 4 - 2 - 2025 ~ Leaf + */ + +package leaf.cosmere.surgebinding.client; + +import leaf.cosmere.api.Activator; +import leaf.cosmere.api.EnumUtils; +import leaf.cosmere.api.Roshar; +import leaf.cosmere.client.Keybindings; +import leaf.cosmere.surgebinding.common.Surgebinding; +import leaf.cosmere.surgebinding.common.manifestation.SurgebindingManifestation; +import net.minecraft.client.KeyMapping; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.client.event.RegisterKeyMappingsEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.common.Mod.EventBusSubscriber.Bus; +import org.lwjgl.glfw.GLFW; + +import java.util.Arrays; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +import static leaf.cosmere.api.Constants.Strings.*; +import static leaf.cosmere.surgebinding.common.registries.SurgebindingManifestations.SURGEBINDING_POWERS; + +// Really only has its own file to more nicely reference keybindings. +// Otherwise, could have lived in mod client events +@Mod.EventBusSubscriber(value = Dist.CLIENT, modid = Surgebinding.MODID, bus = Bus.MOD) +public class SurgebindingKeybindings +{ + public static KeyMapping SHARDBLADE; + public static KeyMapping REQUEST_STORMLIGHT; + public static KeyMapping DISPATCH_STORMLIGHT; + + public static final Map SURGEBINDING_POWER = + Arrays.stream(EnumUtils.SURGES) + .collect(Collectors.toMap( + Function.identity(), + surge -> + new KeyMapping(KEY_STORMLIGHT + surge.getName(), GLFW.GLFW_KEY_UNKNOWN, KEYS_ACTIVATE_CATEGORY) + )); + + @SubscribeEvent + public static void register(RegisterKeyMappingsEvent event) + { + + event.register(SHARDBLADE = new KeyMapping(KEY_SHARDBLADE, GLFW.GLFW_KEY_X, KEYS_CATEGORY)); + + for (Roshar.Surges surge : SURGEBINDING_POWER.keySet()) + { + KeyMapping key = SURGEBINDING_POWER.get(surge); + SurgebindingManifestation manifest = (SurgebindingManifestation) SURGEBINDING_POWERS.get(surge).getManifestation(); + event.register(key); + Activator entry = new Activator(key, manifest); + entry.setCategory("stormlight"); + Keybindings.activators.add(entry); + } + + event.register(SHARDBLADE = new KeyMapping(KEY_SHARDBLADE, GLFW.GLFW_KEY_X, "keys.surgebinding.main")); + event.register(REQUEST_STORMLIGHT = new KeyMapping(KEY_REQUEST_STORMLIGHT, GLFW.GLFW_KEY_Z, "keys.surgebinding.main")); + event.register(DISPATCH_STORMLIGHT = new KeyMapping(KEY_DISPATCH_STORMLIGHT, GLFW.GLFW_KEY_Y, "keys.surgebinding.main")); + + } + +} diff --git a/src/surgebinding/java/leaf/cosmere/surgebinding/client/SurgebindingModClientEvents.java b/src/surgebinding/java/leaf/cosmere/surgebinding/client/SurgebindingModClientEvents.java new file mode 100644 index 000000000..479e9079f --- /dev/null +++ b/src/surgebinding/java/leaf/cosmere/surgebinding/client/SurgebindingModClientEvents.java @@ -0,0 +1,48 @@ +/* + * File updated ~ 14 - 1 - 2025 ~ Leaf + */ + +package leaf.cosmere.surgebinding.client; + +import leaf.cosmere.api.CosmereAPI; +import leaf.cosmere.surgebinding.client.render.SurgebindingLayerDefinitions; +import leaf.cosmere.surgebinding.client.render.SurgebindingRenderers; +import leaf.cosmere.surgebinding.common.Surgebinding; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.client.event.EntityRenderersEvent; +import net.minecraftforge.client.event.RegisterGuiOverlaysEvent; +import net.minecraftforge.client.gui.overlay.VanillaGuiOverlay; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; + +@Mod.EventBusSubscriber(modid = Surgebinding.MODID, value = Dist.CLIENT, bus = Mod.EventBusSubscriber.Bus.MOD) +public class SurgebindingModClientEvents +{ + + @SubscribeEvent + public static void registerGuiOverlays(RegisterGuiOverlaysEvent guiOverlaysEvent) + { + guiOverlaysEvent.registerAbove( + VanillaGuiOverlay.EXPERIENCE_BAR.id(), + "hud", + (forgeGui, gui, partialTick, width, height) -> HUDHandler.onDrawScreenPost(gui) + ); + } + + @SubscribeEvent + public static void registerLayers(final EntityRenderersEvent.RegisterLayerDefinitions evt) + { + SurgebindingLayerDefinitions.register(evt); + } + + + @SubscribeEvent + public static void init(final FMLClientSetupEvent event) + { + SurgebindingRenderers.register(); + + CosmereAPI.logger.info("Surgebinding client setup complete!"); + } + +} diff --git a/src/surgebinding/java/leaf/cosmere/surgebinding/client/render/SurgebindingLayerDefinitions.java b/src/surgebinding/java/leaf/cosmere/surgebinding/client/render/SurgebindingLayerDefinitions.java new file mode 100644 index 000000000..958236f3a --- /dev/null +++ b/src/surgebinding/java/leaf/cosmere/surgebinding/client/render/SurgebindingLayerDefinitions.java @@ -0,0 +1,32 @@ +/* + * File updated ~ 6 - 2 - 2025 ~ Leaf + */ + +package leaf.cosmere.surgebinding.client.render; + +import leaf.cosmere.surgebinding.client.render.model.*; +import leaf.cosmere.surgebinding.common.Surgebinding; +import net.minecraft.client.model.geom.ModelLayerLocation; +import net.minecraftforge.client.event.EntityRenderersEvent; + +public class SurgebindingLayerDefinitions +{ + public static final ModelLayerLocation SHARDPLATE = new ModelLayerLocation(Surgebinding.rl("shardplate"), "shardplate"); + public static final ModelLayerLocation CHULL = new ModelLayerLocation(Surgebinding.rl("chull"), "chull"); + + // TODO This layer location should be baked with EntityRendererProvider.Context in the entity renderer and passed into this model's constructor + public static final ModelLayerLocation CRYPTIC = new ModelLayerLocation(Surgebinding.rl("cryptic"), "cryptic"); + public static final ModelLayerLocation HONORSPREN = new ModelLayerLocation(Surgebinding.rl("honorspren"), "honorspren"); + public static final ModelLayerLocation SHARDBLADE = new ModelLayerLocation(Surgebinding.rl("shardblade"), "shardblade"); + + public static void register(EntityRenderersEvent.RegisterLayerDefinitions evt) + { + //shardplate + evt.registerLayerDefinition(SurgebindingLayerDefinitions.SHARDPLATE, ShardplateModel::createBodyLayer); + evt.registerLayerDefinition(SurgebindingLayerDefinitions.CHULL, ChullModel::createBodyLayer); + evt.registerLayerDefinition(SurgebindingLayerDefinitions.CRYPTIC, CrypticModel::createBodyLayer); + evt.registerLayerDefinition(SurgebindingLayerDefinitions.HONORSPREN, HonorsprenModel::createBodyLayer); + + evt.registerLayerDefinition(SurgebindingLayerDefinitions.SHARDBLADE, ShardbladeModel::createLayerDefinition); + } +} diff --git a/src/surgebinding/java/leaf/cosmere/surgebinding/client/render/SurgebindingRenderers.java b/src/surgebinding/java/leaf/cosmere/surgebinding/client/render/SurgebindingRenderers.java new file mode 100644 index 000000000..3281f3521 --- /dev/null +++ b/src/surgebinding/java/leaf/cosmere/surgebinding/client/render/SurgebindingRenderers.java @@ -0,0 +1,36 @@ +/* + * File updated ~ 14 - 1 - 2025 ~ Leaf + */ + +package leaf.cosmere.surgebinding.client.render; + +import leaf.cosmere.client.render.CosmereRenderers; +import leaf.cosmere.surgebinding.client.render.renderer.ArmorRenderer; +import leaf.cosmere.surgebinding.client.render.renderer.ChullRenderer; +import leaf.cosmere.surgebinding.client.render.renderer.CrypticRenderer; +import leaf.cosmere.surgebinding.client.render.renderer.HonorsprenRenderer; +import leaf.cosmere.surgebinding.common.registries.SurgebindingEntityTypes; +import leaf.cosmere.surgebinding.common.registries.SurgebindingItems; +import net.minecraft.client.renderer.entity.EntityRenderers; +import top.theillusivec4.curios.api.client.ICurioRenderer; + +import java.util.function.Supplier; + +public class SurgebindingRenderers +{ + + public static void register() + { + final Supplier shardplate = ArmorRenderer::new; + CosmereRenderers.register(SurgebindingItems.SHARDPLATE_HELMET.get(), shardplate); + CosmereRenderers.register(SurgebindingItems.SHARDPLATE_CHEST.get(), shardplate); + CosmereRenderers.register(SurgebindingItems.SHARDPLATE_LEGGINGS.get(), shardplate); + CosmereRenderers.register(SurgebindingItems.SHARDPLATE_BOOTS.get(), shardplate); + + EntityRenderers.register(SurgebindingEntityTypes.CHULL.get(), ChullRenderer::new); + EntityRenderers.register(SurgebindingEntityTypes.CRYPTIC.get(), CrypticRenderer::new); + EntityRenderers.register(SurgebindingEntityTypes.HONORSPREN.get(), HonorsprenRenderer::new); + } + + +} diff --git a/src/surgebinding/java/leaf/cosmere/surgebinding/client/render/model/ChullModel.java b/src/surgebinding/java/leaf/cosmere/surgebinding/client/render/model/ChullModel.java new file mode 100644 index 000000000..eb2c8501a --- /dev/null +++ b/src/surgebinding/java/leaf/cosmere/surgebinding/client/render/model/ChullModel.java @@ -0,0 +1,351 @@ +/* + * File updated ~ 9 - 3 - 2025 ~ Leaf + */ + +package leaf.cosmere.surgebinding.client.render.model; + +import com.google.common.collect.ImmutableList; +import net.minecraft.client.model.AgeableListModel; +import net.minecraft.client.model.geom.ModelPart; +import net.minecraft.client.model.geom.PartPose; +import net.minecraft.client.model.geom.builders.*; +import net.minecraft.util.Mth; +import net.minecraft.world.entity.Entity; + +public class ChullModel extends AgeableListModel +{ + private final ModelPart root; + private final ModelPart head; + private final ModelPart body; + private final ModelPart backRightLeg; + private final ModelPart backLeftLeg; + private final ModelPart middleRightLeg; + private final ModelPart middleLeftLeg; + private final ModelPart frontRightLeg; + private final ModelPart frontLeftLeg; + private final ModelPart rightForeleg; + private final ModelPart leftForeleg; + + public ChullModel(ModelPart pRoot) + { + this.root = pRoot.getChild("Everything"); + this.head = root.getChild("head"); + this.body = root.getChild("body"); + + this.backRightLeg = root.getChild("back_right_leg"); + this.backLeftLeg = root.getChild("back_left_leg"); + + this.middleRightLeg = root.getChild("middle_right_leg"); + this.middleLeftLeg = root.getChild("middle_left_leg"); + + this.frontRightLeg = root.getChild("front_right_leg"); + this.frontLeftLeg = root.getChild("front_left_leg"); + + this.rightForeleg = root.getChild("right_foreleg"); + this.leftForeleg = root.getChild("left_foreleg"); + } + + @Override + protected Iterable headParts() + { + return ImmutableList.of(); + } + + @Override + protected Iterable bodyParts() + { + return ImmutableList.of(this.root); + } + + + public static LayerDefinition createBodyLayer() + { + MeshDefinition meshdefinition = new MeshDefinition(); + PartDefinition partdefinition = meshdefinition.getRoot(); + + PartDefinition Everything = partdefinition.addOrReplaceChild("Everything", CubeListBuilder.create(), PartPose.offsetAndRotation(0.0F, 24.0F, 0.0F, 0.0F, 3.1416F, 0.0F)); + + PartDefinition body = Everything.addOrReplaceChild("body", CubeListBuilder.create().texOffs(0, 0).addBox(-28.0F, -12.25F, -29.0F, 32.0F, 16.0F, 32.0F, new CubeDeformation(0.0F)) + .texOffs(0, 48).addBox(-27.0F, -28.0F, -28.0F, 30.0F, 16.0F, 30.0F, new CubeDeformation(0.0F)), PartPose.offset(12.0F, -5.75F, 13.0F)); + + PartDefinition head = Everything.addOrReplaceChild("head", CubeListBuilder.create().texOffs(44, 112).addBox(-2.0F, -2.5F, 0.0F, 4.0F, 5.0F, 5.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, -5.5F, 16.0F)); + + PartDefinition cube_r1 = head.addOrReplaceChild("cube_r1", CubeListBuilder.create().texOffs(114, 7).mirror().addBox(-0.5F, -3.1262F, 1.2302F, 1.0F, 0.0F, 4.0F, new CubeDeformation(0.0F)).mirror(false), PartPose.offsetAndRotation(-1.5F, -0.0723F, 3.0096F, -0.5236F, -0.1309F, 0.0F)); + + PartDefinition cube_r2 = head.addOrReplaceChild("cube_r2", CubeListBuilder.create().texOffs(114, 7).mirror().addBox(-0.5F, -4.7265F, 3.8452F, 1.0F, 0.0F, 4.0F, new CubeDeformation(0.0F)).mirror(false), PartPose.offsetAndRotation(-1.5F, -0.0723F, 3.0096F, -0.8727F, -0.1309F, 0.0F)); + + PartDefinition cube_r3 = head.addOrReplaceChild("cube_r3", CubeListBuilder.create().texOffs(114, 7).addBox(-0.5F, -4.7265F, 3.8452F, 1.0F, 0.0F, 4.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(1.5F, -0.0723F, 3.0096F, -0.8727F, 0.1309F, 0.0F)); + + PartDefinition cube_r4 = head.addOrReplaceChild("cube_r4", CubeListBuilder.create().texOffs(114, 7).addBox(-0.5F, -3.1262F, 1.2302F, 1.0F, 0.0F, 4.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(1.5F, -0.0723F, 3.0096F, -0.5236F, 0.1309F, 0.0F)); + + PartDefinition cube_r5 = head.addOrReplaceChild("cube_r5", CubeListBuilder.create().texOffs(86, 109).addBox(2.0F, 2.5F, -3.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(86, 109).addBox(5.0F, 2.5F, -3.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-4.0F, -8.7754F, 8.6396F, -0.1745F, 0.0F, 0.0F)); + + PartDefinition stem1_r1 = head.addOrReplaceChild("stem1_r1", CubeListBuilder.create().texOffs(0, 0).addBox(2.5F, 0.5F, -2.5F, 0.5F, 3.0F, 0.5F, new CubeDeformation(0.0F)) + .texOffs(0, 0).addBox(5.5F, 0.5F, -2.5F, 0.5F, 3.0F, 0.5F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-4.25F, -6.0254F, 7.8896F, -0.1745F, 0.0F, 0.0F)); + + PartDefinition cube_r6 = head.addOrReplaceChild("cube_r6", CubeListBuilder.create().texOffs(62, 109).addBox(-3.0F, -2.5F, -3.0F, 6.0F, 6.0F, 6.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(0.0F, -1.0F, 3.0F, -0.1745F, 0.0F, 0.0F)); + + PartDefinition right_foreleg = Everything.addOrReplaceChild("right_foreleg", CubeListBuilder.create(), PartPose.offset(10.0F, -7.0F, 15.0F)); + + PartDefinition pincer2_r1 = right_foreleg.addOrReplaceChild("pincer2_r1", CubeListBuilder.create().texOffs(109, 95).addBox(7.2475F, -19.0731F, 5.3153F, 4.0F, 3.0F, 5.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(1.5574F, 0.5545F, 0.5268F, -1.0313F, -0.5364F, 0.2852F)); + + PartDefinition pincer1_r1 = right_foreleg.addOrReplaceChild("pincer1_r1", CubeListBuilder.create().texOffs(83, 95).mirror().addBox(7.2475F, -20.0853F, 10.5819F, 4.0F, 3.0F, 5.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(0, 94).addBox(6.7475F, -20.5853F, -0.4181F, 5.0F, 7.0F, 11.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(1.5574F, 0.5545F, 0.5268F, -0.7695F, -0.5364F, 0.2852F)); + + PartDefinition arm2_r1 = right_foreleg.addOrReplaceChild("arm2_r1", CubeListBuilder.create().texOffs(62, 94).addBox(-1.0574F, 3.3415F, 4.4809F, 3.0F, 3.0F, 12.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(0.5574F, 1.0545F, 1.5268F, 0.6981F, 0.2618F, 0.0F)); + + PartDefinition arm1_r1 = right_foreleg.addOrReplaceChild("arm1_r1", CubeListBuilder.create().texOffs(92, 94).addBox(-1.5574F, -1.5545F, -1.5268F, 4.0F, 4.0F, 9.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(0.5574F, 0.5545F, 1.5268F, 0.0F, 0.2618F, 0.0F)); + + PartDefinition front_right_leg = Everything.addOrReplaceChild("front_right_leg", CubeListBuilder.create(), PartPose.offset(15.0F, -10.0F, 11.0F)); + + PartDefinition leg1_r1 = front_right_leg.addOrReplaceChild("leg1_r1", CubeListBuilder.create().texOffs(0, 112).addBox(-2.2566F, -2.8606F, -2.8637F, 8.0F, 4.0F, 4.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(0.4437F, 1.1094F, 0.4247F, 0.0F, -0.7854F, 0.0F)); + + PartDefinition leg2_r1 = front_right_leg.addOrReplaceChild("leg2_r1", CubeListBuilder.create().texOffs(105, 60).addBox(-2.4703F, -7.2836F, -1.6566F, 7.0F, 3.0F, 3.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(8.4437F, 3.1094F, 7.4247F, 0.6537F, -0.4718F, -1.0353F)); + + PartDefinition cube_r7 = front_right_leg.addOrReplaceChild("cube_r7", CubeListBuilder.create().texOffs(92, 107).addBox(-2.628F, -9.1719F, -4.4066F, 4.0F, 6.0625F, 8.0F, new CubeDeformation(0.0F)) + .texOffs(90, 48).addBox(-1.628F, 2.8906F, -7.4066F, 5.0F, 4.0F, 3.0F, new CubeDeformation(0.0F)) + .texOffs(114, 11).addBox(-1.628F, 5.3906F, -8.8441F, 5.0F, 1.5F, 1.4375F, new CubeDeformation(0.0F)) + .texOffs(114, 5).addBox(-2.128F, 5.3906F, 6.5934F, 6.0F, 1.5F, 1.4375F, new CubeDeformation(0.0F)) + .texOffs(96, 0).addBox(-2.128F, 2.8906F, 3.5934F, 6.0F, 4.0F, 3.0F, new CubeDeformation(0.0F)) + .texOffs(32, 94).addBox(-2.628F, -3.1094F, -4.4066F, 7.0F, 10.0F, 8.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(8.4437F, 3.1094F, 7.4247F, 0.0F, -0.7854F, 0.0F)); + + PartDefinition cube_r8 = front_right_leg.addOrReplaceChild("cube_r8", CubeListBuilder.create().texOffs(24, 112).addBox(-3.9F, -3.5F, -1.5F, 7.0F, 7.0F, 3.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(9.9319F, -2.2811F, 7.8075F, 0.5236F, 0.7854F, 0.0F)); + + PartDefinition cube_r9 = front_right_leg.addOrReplaceChild("cube_r9", CubeListBuilder.create().texOffs(90, 55).addBox(-1.053F, 3.8596F, -1.2F, 4.0F, 4.0F, 3.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(8.4437F, 3.1094F, 7.4247F, -1.0472F, -0.7854F, 0.0F)); + + PartDefinition cube_r10 = front_right_leg.addOrReplaceChild("cube_r10", CubeListBuilder.create().texOffs(114, 0).addBox(-1.053F, 6.2067F, -4.969F, 4.0F, 2.875F, 3.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(8.4437F, 3.1094F, 7.4247F, -0.5236F, -0.7854F, 0.0F)); + + PartDefinition cube_r11 = front_right_leg.addOrReplaceChild("cube_r11", CubeListBuilder.create().texOffs(96, 0).addBox(-2.5867F, 2.8906F, 4.3787F, 6.0F, 4.0F, 3.0F, new CubeDeformation(0.0F)) + .texOffs(114, 5).addBox(-2.5867F, 5.3906F, 7.3787F, 6.0F, 1.5F, 1.4375F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(8.4437F, 3.1094F, 7.4247F, 0.0F, 0.7854F, 0.0F)); + + PartDefinition cube_r12 = front_right_leg.addOrReplaceChild("cube_r12", CubeListBuilder.create().texOffs(0, 120).addBox(-2.1117F, 3.8354F, -1.814F, 5.0F, 4.0F, 3.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(8.4437F, 3.1094F, 7.4247F, 1.0472F, 0.7854F, 0.0F)); + + PartDefinition cube_r13 = front_right_leg.addOrReplaceChild("cube_r13", CubeListBuilder.create().texOffs(96, 7).addBox(-2.1117F, 6.1927F, 1.9448F, 5.0F, 2.875F, 3.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(8.4437F, 3.1094F, 7.4247F, 0.5236F, 0.7854F, 0.0F)); + + PartDefinition cube_r14 = front_right_leg.addOrReplaceChild("cube_r14", CubeListBuilder.create().texOffs(96, 7).addBox(-1.653F, 5.8F, 1.2647F, 5.0F, 2.875F, 3.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(8.4437F, 3.1094F, 7.4247F, 0.5236F, -0.7854F, 0.0F)); + + PartDefinition cube_r15 = front_right_leg.addOrReplaceChild("cube_r15", CubeListBuilder.create().texOffs(0, 120).addBox(-1.653F, 3.1553F, -2.2067F, 5.0F, 4.0F, 3.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(8.4437F, 3.1094F, 7.4247F, 1.0472F, -0.7854F, 0.0F)); + + PartDefinition middle_right_leg = Everything.addOrReplaceChild("middle_right_leg", CubeListBuilder.create().texOffs(105, 52).addBox(-0.2352F, -1.7512F, -1.75F, 7.0F, 4.0F, 4.0F, new CubeDeformation(0.0F)) + .texOffs(92, 107).addBox(9.0F, -6.0625F, -4.0F, 4.0F, 6.0625F, 8.0F, new CubeDeformation(0.0F)) + .texOffs(90, 48).addBox(10.0F, 6.0F, -7.0F, 5.0F, 4.0F, 3.0F, new CubeDeformation(0.0F)) + .texOffs(114, 5).addBox(9.5F, 8.5F, 7.0F, 6.0F, 1.5F, 1.4375F, new CubeDeformation(0.0F)) + .texOffs(96, 0).addBox(9.5F, 6.0F, 4.0F, 6.0F, 4.0F, 3.0F, new CubeDeformation(0.0F)) + .texOffs(32, 94).addBox(9.0F, 0.0F, -4.0F, 7.0F, 10.0F, 8.0F, new CubeDeformation(0.0F)) + .texOffs(114, 11).addBox(10.0F, 8.5F, -8.4375F, 5.0F, 1.5F, 1.4375F, new CubeDeformation(0.0F)), PartPose.offset(16.0F, -10.0F, 0.0F)); + + PartDefinition cube_r16 = middle_right_leg.addOrReplaceChild("cube_r16", CubeListBuilder.create().texOffs(0, 120).addBox(-1.4951F, 3.5075F, -2.0034F, 5.0F, 4.0F, 3.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(11.4951F, 3.1094F, 0.0F, 1.0472F, 0.0F, 0.0F)); + + PartDefinition cube_r17 = middle_right_leg.addOrReplaceChild("cube_r17", CubeListBuilder.create().texOffs(96, 7).addBox(-1.4951F, 6.0034F, 1.6169F, 5.0F, 2.875F, 3.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(11.4951F, 3.1094F, 0.0F, 0.5236F, 0.0F, 0.0F)); + + PartDefinition cube_r18 = middle_right_leg.addOrReplaceChild("cube_r18", CubeListBuilder.create().texOffs(114, 5).addBox(-2.9933F, 5.3906F, 7.5116F, 6.0F, 1.5F, 1.4375F, new CubeDeformation(0.0F)) + .texOffs(96, 0).addBox(-2.9933F, 2.8906F, 4.5116F, 6.0F, 4.0F, 3.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(11.4951F, 3.1094F, 0.0F, 0.0F, 1.5708F, 0.0F)); + + PartDefinition cube_r19 = middle_right_leg.addOrReplaceChild("cube_r19", CubeListBuilder.create().texOffs(0, 120).addBox(-2.5184F, 3.9505F, -1.7476F, 5.0F, 4.0F, 3.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(11.4951F, 3.1094F, 0.0F, 0.0F, 1.5708F, -1.0472F)); + + PartDefinition cube_r20 = middle_right_leg.addOrReplaceChild("cube_r20", CubeListBuilder.create().texOffs(90, 55).addBox(-0.9701F, 3.5075F, -0.9967F, 4.0F, 4.0F, 3.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(11.4451F, 3.1094F, 0.0F, -1.0472F, 0.0F, 0.0F)); + + PartDefinition cube_r21 = middle_right_leg.addOrReplaceChild("cube_r21", CubeListBuilder.create().texOffs(24, 112).addBox(-3.4951F, -7.4404F, 2.456F, 7.0F, 7.0F, 3.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(11.4951F, 3.1094F, 0.0F, 0.0F, 1.5708F, -0.5236F)); + + PartDefinition leg2_r2 = middle_right_leg.addOrReplaceChild("leg2_r2", CubeListBuilder.create().texOffs(105, 60).addBox(-2.3849F, -7.1818F, -1.25F, 7.0F, 3.0F, 3.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(11.4951F, 3.1094F, 0.0F, 0.0F, 0.0F, -0.8727F)); + + PartDefinition back_right_leg = Everything.addOrReplaceChild("back_right_leg", CubeListBuilder.create(), PartPose.offset(15.0F, -10.0F, -11.0F)); + + PartDefinition cube_r22 = back_right_leg.addOrReplaceChild("cube_r22", CubeListBuilder.create().texOffs(32, 94).addBox(-2.628F, -3.1094F, -3.5934F, 7.0F, 10.0F, 8.0F, new CubeDeformation(0.0F)) + .texOffs(114, 5).addBox(-2.128F, 5.3906F, -8.0309F, 6.0F, 1.5F, 1.4375F, new CubeDeformation(0.0F)) + .texOffs(114, 11).addBox(-1.628F, 5.3906F, 7.4066F, 5.0F, 1.5F, 1.4375F, new CubeDeformation(0.0F)) + .texOffs(90, 63).addBox(-1.628F, 2.8906F, 4.4066F, 5.0F, 4.0F, 3.0F, new CubeDeformation(0.0F)) + .texOffs(92, 107).addBox(-2.628F, -9.1719F, -3.5934F, 4.0F, 6.0625F, 8.0F, new CubeDeformation(0.0F)) + .texOffs(0, 112).addBox(-12.8632F, -4.8606F, -1.8434F, 8.0F, 4.0F, 4.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(8.4437F, 3.1094F, -7.4247F, 0.0F, 0.7854F, 0.0F)); + + PartDefinition cube_r23 = back_right_leg.addOrReplaceChild("cube_r23", CubeListBuilder.create().texOffs(90, 71).addBox(-3.0F, -2.0F, -1.5F, 6.0F, 4.0F, 3.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(5.4587F, 8.0F, -11.6429F, 0.0F, 0.7854F, 0.0F)); + + PartDefinition cube_r24 = back_right_leg.addOrReplaceChild("cube_r24", CubeListBuilder.create().texOffs(0, 120).addBox(-1.603F, 3.1553F, -0.7933F, 5.0F, 4.0F, 3.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(8.4437F, 3.1094F, -7.4247F, -1.0472F, 0.7854F, 0.0F)); + + PartDefinition cube_r25 = back_right_leg.addOrReplaceChild("cube_r25", CubeListBuilder.create().texOffs(96, 7).addBox(-1.603F, 5.8F, -4.2647F, 5.0F, 2.875F, 3.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(8.4437F, 3.1094F, -7.4247F, -0.5236F, 0.7854F, 0.0F)); + + PartDefinition cube_r26 = back_right_leg.addOrReplaceChild("cube_r26", CubeListBuilder.create().texOffs(114, 5).addBox(-2.5867F, 5.3906F, -8.8162F, 6.0F, 1.5F, 1.4375F, new CubeDeformation(0.0F)) + .texOffs(90, 71).addBox(-2.5867F, 2.8906F, -7.3787F, 6.0F, 4.0F, 3.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(8.4437F, 3.1094F, -7.4247F, 0.0F, -0.7854F, 0.0F)); + + PartDefinition cube_r27 = back_right_leg.addOrReplaceChild("cube_r27", CubeListBuilder.create().texOffs(96, 7).addBox(-16.4617F, 10.1927F, 0.0552F, 5.0F, 2.875F, 3.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(12.2644F, -1.2995F, -2.9434F, 0.0F, 1.5708F, -0.5236F)); + + PartDefinition cube_r28 = back_right_leg.addOrReplaceChild("cube_r28", CubeListBuilder.create().texOffs(96, 7).addBox(-2.0617F, 6.1927F, -4.9448F, 5.0F, 2.875F, 3.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(8.4437F, 3.1094F, -7.4247F, -0.5236F, -0.7854F, 0.0F)); + + PartDefinition cube_r29 = back_right_leg.addOrReplaceChild("cube_r29", CubeListBuilder.create().texOffs(0, 120).addBox(-2.0617F, 3.8354F, -1.186F, 5.0F, 4.0F, 3.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(8.4437F, 3.1094F, -7.4247F, -1.0472F, -0.7854F, 0.0F)); + + PartDefinition cube_r30 = back_right_leg.addOrReplaceChild("cube_r30", CubeListBuilder.create().texOffs(114, 0).addBox(-1.153F, 6.2067F, 1.969F, 4.0F, 2.875F, 3.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(8.4437F, 3.1094F, -7.4247F, 0.5236F, 0.7854F, 0.0F)); + + PartDefinition cube_r31 = back_right_leg.addOrReplaceChild("cube_r31", CubeListBuilder.create().texOffs(90, 55).addBox(-1.153F, 3.8596F, -1.8F, 4.0F, 4.0F, 3.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(8.4437F, 3.1094F, -7.4247F, 1.0472F, 0.7854F, 0.0F)); + + PartDefinition cube_r32 = back_right_leg.addOrReplaceChild("cube_r32", CubeListBuilder.create().texOffs(24, 112).addBox(-3.525F, -3.5F, -1.5F, 7.0F, 7.0F, 3.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(9.6667F, -2.2811F, -8.0726F, -2.618F, 0.7854F, 3.1416F)); + + PartDefinition leg2_r3 = back_right_leg.addOrReplaceChild("leg2_r3", CubeListBuilder.create().texOffs(105, 60).addBox(-2.4703F, -7.2836F, -1.3434F, 7.0F, 3.0F, 3.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(8.4437F, 3.1094F, -7.4247F, -0.6537F, 0.4718F, -1.0353F)); + + PartDefinition left_foreleg = Everything.addOrReplaceChild("left_foreleg", CubeListBuilder.create(), PartPose.offset(-10.0F, -7.0F, 15.0F)); + + PartDefinition hand_r1 = left_foreleg.addOrReplaceChild("hand_r1", CubeListBuilder.create().texOffs(0, 94).mirror().addBox(-11.7475F, -20.5853F, -0.4181F, 5.0F, 7.0F, 11.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(83, 95).addBox(-11.2475F, -20.0853F, 10.5819F, 4.0F, 3.0F, 5.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-1.5574F, 0.5545F, 0.5268F, -0.7695F, 0.5364F, -0.2852F)); + + PartDefinition pincer2_r2 = left_foreleg.addOrReplaceChild("pincer2_r2", CubeListBuilder.create().texOffs(109, 95).addBox(-11.2475F, -19.0731F, 5.3153F, 4.0F, 3.0F, 5.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-1.5574F, 0.5545F, 0.5268F, -1.0313F, 0.5364F, -0.2852F)); + + PartDefinition arm1_r2 = left_foreleg.addOrReplaceChild("arm1_r2", CubeListBuilder.create().texOffs(62, 94).mirror().addBox(-1.9426F, 3.3415F, 4.4809F, 3.0F, 3.0F, 12.0F, new CubeDeformation(0.0F)).mirror(false), PartPose.offsetAndRotation(-0.5574F, 1.0545F, 1.5268F, 0.6981F, -0.2618F, 0.0F)); + + PartDefinition arm2_r2 = left_foreleg.addOrReplaceChild("arm2_r2", CubeListBuilder.create().texOffs(92, 94).mirror().addBox(-2.4426F, -1.5545F, -1.5268F, 4.0F, 4.0F, 9.0F, new CubeDeformation(0.0F)).mirror(false), PartPose.offsetAndRotation(-0.5574F, 0.5545F, 1.5268F, 0.0F, -0.2618F, 0.0F)); + + PartDefinition front_left_leg = Everything.addOrReplaceChild("front_left_leg", CubeListBuilder.create(), PartPose.offset(-15.0F, -10.0F, 11.0F)); + + PartDefinition cube_r33 = front_left_leg.addOrReplaceChild("cube_r33", CubeListBuilder.create().texOffs(32, 94).mirror().addBox(-4.372F, -3.1094F, -4.4066F, 7.0F, 10.0F, 8.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(96, 0).mirror().addBox(-3.872F, 2.8906F, 3.5934F, 6.0F, 4.0F, 3.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(114, 5).mirror().addBox(-3.872F, 5.3906F, 6.5934F, 6.0F, 1.5F, 1.4375F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(113, 13).mirror().addBox(-3.372F, 5.3906F, -8.8441F, 5.0F, 1.5F, 1.4375F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(90, 48).mirror().addBox(-3.372F, 2.8906F, -7.4066F, 5.0F, 4.0F, 3.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(92, 107).mirror().addBox(-1.372F, -9.1719F, -4.4066F, 4.0F, 6.0625F, 8.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(0, 112).mirror().addBox(4.8632F, -4.8606F, -2.1566F, 8.0F, 4.0F, 4.0F, new CubeDeformation(0.0F)).mirror(false), PartPose.offsetAndRotation(-8.4437F, 3.1094F, 7.4247F, 0.0F, 0.7854F, 0.0F)); + + PartDefinition cube_r34 = front_left_leg.addOrReplaceChild("cube_r34", CubeListBuilder.create().texOffs(0, 120).mirror().addBox(-3.397F, 3.1553F, -2.2067F, 5.0F, 4.0F, 3.0F, new CubeDeformation(0.0F)).mirror(false), PartPose.offsetAndRotation(-8.4437F, 3.1094F, 7.4247F, 1.0472F, 0.7854F, 0.0F)); + + PartDefinition cube_r35 = front_left_leg.addOrReplaceChild("cube_r35", CubeListBuilder.create().texOffs(96, 7).mirror().addBox(-3.397F, 5.8F, 1.2647F, 5.0F, 2.875F, 3.0F, new CubeDeformation(0.0F)).mirror(false), PartPose.offsetAndRotation(-8.4437F, 3.1094F, 7.4247F, 0.5236F, 0.7854F, 0.0F)); + + PartDefinition cube_r36 = front_left_leg.addOrReplaceChild("cube_r36", CubeListBuilder.create().texOffs(114, 5).mirror().addBox(-3.4133F, 5.3906F, 7.3787F, 6.0F, 1.5F, 1.4375F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(96, 0).mirror().addBox(-3.4133F, 2.8906F, 4.3787F, 6.0F, 4.0F, 3.0F, new CubeDeformation(0.0F)).mirror(false), PartPose.offsetAndRotation(-8.4437F, 3.1094F, 7.4247F, 0.0F, -0.7854F, 0.0F)); + + PartDefinition cube_r37 = front_left_leg.addOrReplaceChild("cube_r37", CubeListBuilder.create().texOffs(96, 7).mirror().addBox(-2.8383F, 6.1927F, 1.9448F, 5.0F, 2.875F, 3.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(24, 112).mirror().addBox(-3.8816F, -7.5068F, 2.341F, 7.0F, 7.0F, 3.0F, new CubeDeformation(0.0F)).mirror(false), PartPose.offsetAndRotation(-8.4437F, 3.1094F, 7.4247F, 0.5236F, -0.7854F, 0.0F)); + + PartDefinition cube_r38 = front_left_leg.addOrReplaceChild("cube_r38", CubeListBuilder.create().texOffs(0, 120).mirror().addBox(-2.8383F, 3.8354F, -1.814F, 5.0F, 4.0F, 3.0F, new CubeDeformation(0.0F)).mirror(false), PartPose.offsetAndRotation(-8.4437F, 3.1094F, 7.4247F, 1.0472F, -0.7854F, 0.0F)); + + PartDefinition cube_r39 = front_left_leg.addOrReplaceChild("cube_r39", CubeListBuilder.create().texOffs(114, 0).mirror().addBox(-2.847F, 6.2067F, -4.969F, 4.0F, 2.875F, 3.0F, new CubeDeformation(0.0F)).mirror(false), PartPose.offsetAndRotation(-8.4437F, 3.1094F, 7.4247F, -0.5236F, 0.7854F, 0.0F)); + + PartDefinition cube_r40 = front_left_leg.addOrReplaceChild("cube_r40", CubeListBuilder.create().texOffs(90, 55).mirror().addBox(-2.847F, 3.8596F, -1.2F, 4.0F, 4.0F, 3.0F, new CubeDeformation(0.0F)).mirror(false), PartPose.offsetAndRotation(-8.4437F, 3.1094F, 7.4247F, -1.0472F, 0.7854F, 0.0F)); + + PartDefinition leg2_r4 = front_left_leg.addOrReplaceChild("leg2_r4", CubeListBuilder.create().texOffs(105, 60).mirror().addBox(-4.5297F, -7.2836F, -1.6566F, 7.0F, 3.0F, 3.0F, new CubeDeformation(0.0F)).mirror(false), PartPose.offsetAndRotation(-8.4437F, 3.1094F, 7.4247F, 0.6537F, 0.4718F, 1.0353F)); + + PartDefinition middle_left_leg = Everything.addOrReplaceChild("middle_left_leg", CubeListBuilder.create().texOffs(32, 94).mirror().addBox(-16.0F, 0.0F, -4.0F, 7.0F, 10.0F, 8.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(96, 0).mirror().addBox(-15.5F, 6.0F, 4.0F, 6.0F, 4.0F, 3.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(114, 5).mirror().addBox(-15.5F, 8.5F, 7.0F, 6.0F, 1.5F, 1.4375F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(114, 11).mirror().addBox(-15.0F, 8.5F, -8.4375F, 5.0F, 1.5F, 1.4375F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(90, 48).mirror().addBox(-15.0F, 6.0F, -7.0F, 5.0F, 4.0F, 3.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(92, 107).mirror().addBox(-13.0F, -6.0625F, -4.0F, 4.0F, 6.0625F, 8.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(105, 52).mirror().addBox(-6.7648F, -1.7512F, -1.75F, 7.0F, 4.0F, 4.0F, new CubeDeformation(0.0F)).mirror(false), PartPose.offset(-16.0F, -10.0F, 0.0F)); + + PartDefinition leg2_r5 = middle_left_leg.addOrReplaceChild("leg2_r5", CubeListBuilder.create().texOffs(105, 60).mirror().addBox(-4.6151F, -7.1818F, -1.25F, 7.0F, 3.0F, 3.0F, new CubeDeformation(0.0F)).mirror(false), PartPose.offsetAndRotation(-11.4951F, 3.1094F, 0.0F, 0.0F, 0.0F, 0.8727F)); + + PartDefinition cube_r41 = middle_left_leg.addOrReplaceChild("cube_r41", CubeListBuilder.create().texOffs(24, 112).mirror().addBox(-3.5049F, -7.4404F, 2.456F, 7.0F, 7.0F, 3.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(96, 7).mirror().addBox(-2.5316F, 6.2591F, 2.0599F, 5.0F, 2.875F, 3.0F, new CubeDeformation(0.0F)).mirror(false), PartPose.offsetAndRotation(-11.4951F, 3.1094F, 0.0F, 0.0F, -1.5708F, 0.5236F)); + + PartDefinition cube_r42 = middle_left_leg.addOrReplaceChild("cube_r42", CubeListBuilder.create().texOffs(90, 55).mirror().addBox(-3.0299F, 3.5075F, -0.9967F, 4.0F, 4.0F, 3.0F, new CubeDeformation(0.0F)).mirror(false), PartPose.offsetAndRotation(-11.4951F, 3.1094F, 0.0F, -1.0472F, 0.0F, 0.0F)); + + PartDefinition cube_r43 = middle_left_leg.addOrReplaceChild("cube_r43", CubeListBuilder.create().texOffs(114, 0).mirror().addBox(6.5701F, 6.0034F, -4.6169F, 4.0F, 2.875F, 3.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(114, 0).mirror().addBox(-50.4299F, 6.0034F, -4.6169F, 4.0F, 2.875F, 3.0F, new CubeDeformation(0.0F)).mirror(false), PartPose.offsetAndRotation(35.9049F, 3.1094F, 0.0F, -0.5236F, 0.0F, 0.0F)); + + PartDefinition cube_r44 = middle_left_leg.addOrReplaceChild("cube_r44", CubeListBuilder.create().texOffs(96, 0).mirror().addBox(-3.0067F, 2.8906F, 4.5116F, 6.0F, 4.0F, 3.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(114, 5).mirror().addBox(-3.0067F, 5.3906F, 7.5116F, 6.0F, 1.5F, 1.4375F, new CubeDeformation(0.0F)).mirror(false), PartPose.offsetAndRotation(-11.4951F, 3.1094F, 0.0F, 0.0F, -1.5708F, 0.0F)); + + PartDefinition cube_r45 = middle_left_leg.addOrReplaceChild("cube_r45", CubeListBuilder.create().texOffs(0, 120).mirror().addBox(-2.5316F, 3.9505F, -1.7476F, 5.0F, 4.0F, 3.0F, new CubeDeformation(0.0F)).mirror(false), PartPose.offsetAndRotation(-11.4951F, 3.1094F, 0.0F, 0.0F, -1.5708F, 1.0472F)); + + PartDefinition cube_r46 = middle_left_leg.addOrReplaceChild("cube_r46", CubeListBuilder.create().texOffs(96, 7).mirror().addBox(-3.5299F, 6.0034F, 1.6169F, 5.0F, 2.875F, 3.0F, new CubeDeformation(0.0F)).mirror(false), PartPose.offsetAndRotation(-11.4951F, 3.1094F, 0.0F, 0.5236F, 0.0F, 0.0F)); + + PartDefinition cube_r47 = middle_left_leg.addOrReplaceChild("cube_r47", CubeListBuilder.create().texOffs(0, 120).mirror().addBox(-3.4299F, 3.5075F, -2.0034F, 5.0F, 4.0F, 3.0F, new CubeDeformation(0.0F)).mirror(false), PartPose.offsetAndRotation(-11.4951F, 3.1094F, 0.0F, 1.0472F, 0.0F, 0.0F)); + + PartDefinition back_left_leg = Everything.addOrReplaceChild("back_left_leg", CubeListBuilder.create(), PartPose.offset(-15.0F, -10.0F, -11.0F)); + + PartDefinition leg1_r2 = back_left_leg.addOrReplaceChild("leg1_r2", CubeListBuilder.create().texOffs(0, 112).mirror().addBox(4.8632F, -4.8606F, -1.8434F, 8.0F, 4.0F, 4.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(92, 107).mirror().addBox(-1.372F, -9.1719F, -3.5934F, 4.0F, 6.0625F, 8.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(90, 63).mirror().addBox(-3.372F, 2.8906F, 4.4066F, 5.0F, 4.0F, 3.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(114, 11).mirror().addBox(-3.372F, 5.3906F, 7.4066F, 5.0F, 1.5F, 1.4375F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(114, 5).mirror().addBox(-3.872F, 5.3906F, -8.0309F, 6.0F, 1.5F, 1.4375F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(90, 71).mirror().addBox(-3.872F, 2.8906F, -6.5934F, 6.0F, 4.0F, 3.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(32, 94).mirror().addBox(-4.372F, -3.1094F, -3.5934F, 7.0F, 10.0F, 8.0F, new CubeDeformation(0.0F)).mirror(false), PartPose.offsetAndRotation(-8.4437F, 3.1094F, -7.4247F, 0.0F, -0.7854F, 0.0F)); + + PartDefinition leg2_r6 = back_left_leg.addOrReplaceChild("leg2_r6", CubeListBuilder.create().texOffs(105, 60).mirror().addBox(-4.5297F, -7.2836F, -1.3434F, 7.0F, 3.0F, 3.0F, new CubeDeformation(0.0F)).mirror(false), PartPose.offsetAndRotation(-8.4437F, 3.1094F, -7.4247F, -0.6537F, -0.4718F, 1.0353F)); + + PartDefinition cube_r48 = back_left_leg.addOrReplaceChild("cube_r48", CubeListBuilder.create().texOffs(24, 112).mirror().addBox(-3.525F, -3.5F, -1.5F, 7.0F, 7.0F, 3.0F, new CubeDeformation(0.0F)).mirror(false), PartPose.offsetAndRotation(-9.6667F, -2.2811F, -8.0726F, -2.618F, -0.7854F, -3.1416F)); + + PartDefinition cube_r49 = back_left_leg.addOrReplaceChild("cube_r49", CubeListBuilder.create().texOffs(90, 55).mirror().addBox(-2.897F, 3.8596F, -1.8F, 4.0F, 4.0F, 3.0F, new CubeDeformation(0.0F)).mirror(false), PartPose.offsetAndRotation(-8.4437F, 3.1094F, -7.4247F, 1.0472F, -0.7854F, 0.0F)); + + PartDefinition cube_r50 = back_left_leg.addOrReplaceChild("cube_r50", CubeListBuilder.create().texOffs(114, 0).mirror().addBox(-2.897F, 6.2067F, 1.969F, 4.0F, 2.875F, 3.0F, new CubeDeformation(0.0F)).mirror(false), PartPose.offsetAndRotation(-8.4437F, 3.1094F, -7.4247F, 0.5236F, -0.7854F, 0.0F)); + + PartDefinition cube_r51 = back_left_leg.addOrReplaceChild("cube_r51", CubeListBuilder.create().texOffs(90, 71).mirror().addBox(-3.4133F, 2.8906F, -7.3787F, 6.0F, 4.0F, 3.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(114, 5).mirror().addBox(-3.4133F, 5.3906F, -8.8162F, 6.0F, 1.5F, 1.4375F, new CubeDeformation(0.0F)).mirror(false), PartPose.offsetAndRotation(-8.4437F, 3.1094F, -7.4247F, 0.0F, 0.7854F, 0.0F)); + + PartDefinition cube_r52 = back_left_leg.addOrReplaceChild("cube_r52", CubeListBuilder.create().texOffs(0, 120).mirror().addBox(-2.9383F, 3.8354F, -1.186F, 5.0F, 4.0F, 3.0F, new CubeDeformation(0.0F)).mirror(false), PartPose.offsetAndRotation(-8.4437F, 3.1094F, -7.4247F, -1.0472F, 0.7854F, 0.0F)); + + PartDefinition cube_r53 = back_left_leg.addOrReplaceChild("cube_r53", CubeListBuilder.create().texOffs(96, 7).mirror().addBox(-2.9383F, 6.1927F, -4.9448F, 5.0F, 2.875F, 3.0F, new CubeDeformation(0.0F)).mirror(false), PartPose.offsetAndRotation(-8.4437F, 3.1094F, -7.4247F, -0.5236F, 0.7854F, 0.0F)); + + PartDefinition cube_r54 = back_left_leg.addOrReplaceChild("cube_r54", CubeListBuilder.create().texOffs(96, 7).mirror().addBox(-3.297F, 5.8F, -4.2647F, 5.0F, 2.875F, 3.0F, new CubeDeformation(0.0F)).mirror(false), PartPose.offsetAndRotation(-8.4437F, 3.1094F, -7.4247F, -0.5236F, -0.7854F, 0.0F)); + + PartDefinition cube_r55 = back_left_leg.addOrReplaceChild("cube_r55", CubeListBuilder.create().texOffs(0, 120).mirror().addBox(-3.297F, 3.1553F, -0.7933F, 5.0F, 4.0F, 3.0F, new CubeDeformation(0.0F)).mirror(false), PartPose.offsetAndRotation(-8.4437F, 3.1094F, -7.4247F, -1.0472F, -0.7854F, 0.0F)); + + return LayerDefinition.create(meshdefinition, 128, 128); + } + + + @Override + public void setupAnim(T pEntity, float pLimbSwing, float pLimbSwingAmount, float pAgeInTicks, float pNetHeadYaw, float pHeadPitch) + { + this.head.yRot = pNetHeadYaw * ((float) Math.PI / 180F); + this.head.xRot = pHeadPitch * ((float) Math.PI / 180F); + + //reset to zero, the models have default position baked in + this.backRightLeg.zRot = 0; + this.backLeftLeg.zRot = 0; + this.middleRightLeg.zRot = 0; + this.middleLeftLeg.zRot = 0; + this.frontRightLeg.zRot = 0; + this.frontLeftLeg.zRot = 0; + this.rightForeleg.zRot = 0; + this.leftForeleg.zRot = 0; + + //reset to zero, the models have default position baked in + this.backRightLeg.yRot = 0; + this.backLeftLeg.yRot = 0; + this.middleRightLeg.yRot = 0; + this.middleLeftLeg.yRot = 0; + this.frontRightLeg.yRot = 0; + this.frontLeftLeg.yRot = 0; + this.rightForeleg.yRot = 0; + this.leftForeleg.yRot = 0; + + float backLegRotationY = (-(Mth.cos(pLimbSwing * 0.6662F) * 0.4F) * pLimbSwingAmount); + float middleLegRotationY = (-(Mth.cos(pLimbSwing * 0.6662F + (float) Math.PI) * 0.4F) * pLimbSwingAmount); + float frontLegRotationY = (-(Mth.cos(pLimbSwing * 0.6662F + ((float) Math.PI / 2F)) * 0.4F) * pLimbSwingAmount); + float forelegRotationY = (-(Mth.cos(pLimbSwing * 0.6662F + ((float) Math.PI * 1.5F)) * 0.4F) * pLimbSwingAmount); + + float backLegRotationZ = (Mth.sin(pLimbSwing * 0.6662F + 0.0F) * 0.4F) * pLimbSwingAmount; + float middleLegRotationZ = (Mth.sin(pLimbSwing * 0.6662F + (float) Math.PI) * 0.4F) * pLimbSwingAmount; + float frontLegRotationZ = (Mth.sin(pLimbSwing * 0.6662F + ((float) Math.PI / 2F)) * 0.4F) * pLimbSwingAmount; + float forelegRotationZ = (Mth.sin(pLimbSwing * 0.6662F + ((float) Math.PI * 1.5F)) * 0.4F) * pLimbSwingAmount; + + // the right side needs to have a negative value to go forwards + this.frontRightLeg.yRot = -frontLegRotationY; + this.middleRightLeg.yRot = -middleLegRotationY; + this.backRightLeg.yRot = -backLegRotationY; + + // the left side needs to have a positive value to go forwards + this.frontLeftLeg.yRot = frontLegRotationY; + this.middleLeftLeg.yRot = middleLegRotationY; + this.backLeftLeg.yRot = backLegRotationY; + + //We clamp these values so that it looks like the foot is planted on the ground as it moves forward + { + //the left side needs to be positive to have the leg go up + this.frontLeftLeg.zRot = Mth.clamp(frontLegRotationZ, 0, 25); + this.middleLeftLeg.zRot = Mth.clamp(middleLegRotationZ, 0, 25); + this.backLeftLeg.zRot = Mth.clamp(backLegRotationZ, 0, 25); + + //the right side needs to be negative to have the leg go up. + this.frontRightLeg.zRot = Mth.clamp(-frontLegRotationZ, -25, 0); + this.middleRightLeg.zRot = Mth.clamp(-middleLegRotationZ, -25, 0); + this.backRightLeg.zRot = Mth.clamp(-backLegRotationZ, -25, 0); + } + + + //todo decide what to do about the forelegs + this.rightForeleg.zRot += -forelegRotationZ; + this.leftForeleg.zRot += forelegRotationZ; + + this.rightForeleg.yRot += forelegRotationY; + this.leftForeleg.yRot += -forelegRotationY; + } +} \ No newline at end of file diff --git a/src/surgebinding/java/leaf/cosmere/surgebinding/client/render/model/CrypticModel.java b/src/surgebinding/java/leaf/cosmere/surgebinding/client/render/model/CrypticModel.java new file mode 100644 index 000000000..b61219977 --- /dev/null +++ b/src/surgebinding/java/leaf/cosmere/surgebinding/client/render/model/CrypticModel.java @@ -0,0 +1,235 @@ +// Made with Blockbench 4.8.1 +// Exported for Minecraft version 1.17 or later with Mojang mappings +// Paste this class into your mod and generate all required imports +package leaf.cosmere.surgebinding.client.render.model; + + +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import net.minecraft.client.model.EntityModel; +import net.minecraft.client.model.geom.ModelPart; +import net.minecraft.client.model.geom.PartPose; +import net.minecraft.client.model.geom.builders.*; +import net.minecraft.world.entity.Entity; + +public class CrypticModel extends EntityModel { + private final ModelPart root; + private final ModelPart limbSet1; + private final ModelPart limbSet2; + private final ModelPart limbSet3; + private final ModelPart limbSet4; + + public CrypticModel(ModelPart root) { + this.root = root.getChild("root"); + this.limbSet1 = this.root.getChild("limbSet1"); + this.limbSet2 = this.root.getChild("limbSet2"); + this.limbSet3 = this.root.getChild("limbSet3"); + this.limbSet4 = this.root.getChild("limbSet4"); + } + + public static LayerDefinition createBodyLayer() { + MeshDefinition meshdefinition = new MeshDefinition(); + PartDefinition partdefinition = meshdefinition.getRoot(); + + PartDefinition root = partdefinition.addOrReplaceChild("root", CubeListBuilder.create(), PartPose.offsetAndRotation(0.0F, 19.0F, -8.0F, -1.5708F, 0.0F, 0.0F)); + + PartDefinition limbSet1 = root.addOrReplaceChild("limbSet1", CubeListBuilder.create(), PartPose.offset(0.0F, -8.0F, 0.0F)); + + PartDefinition fgLimb1 = limbSet1.addOrReplaceChild("fgLimb1", CubeListBuilder.create().texOffs(0, 0).addBox(-1.0F, -9.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 0).addBox(-1.0F, -10.0F, 4.0F, 1.0F, 2.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 0).addBox(-2.0F, -12.0F, 4.0F, 1.0F, 2.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 0).addBox(-3.0F, -13.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 0).addBox(-4.0F, -14.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 0).addBox(-6.0F, -15.0F, 4.0F, 2.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 0).addBox(-8.0F, -16.0F, 4.0F, 2.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, 8.0F, 0.0F)); + + PartDefinition fgLimb2 = limbSet1.addOrReplaceChild("fgLimb2", CubeListBuilder.create().texOffs(0, 0).mirror().addBox(0.0F, 8.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(0, 0).mirror().addBox(0.0F, 8.0F, 4.0F, 1.0F, 2.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(0, 0).mirror().addBox(1.0F, 10.0F, 4.0F, 1.0F, 2.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(0, 0).mirror().addBox(2.0F, 12.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(0, 0).mirror().addBox(3.0F, 13.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(0, 0).mirror().addBox(4.0F, 14.0F, 4.0F, 2.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(0, 0).mirror().addBox(6.0F, 15.0F, 4.0F, 2.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false), PartPose.offset(0.0F, -8.0F, 0.0F)); + + PartDefinition fgLimb3 = limbSet1.addOrReplaceChild("fgLimb3", CubeListBuilder.create().texOffs(0, 0).mirror().addBox(0.0F, 8.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(0, 0).mirror().addBox(0.0F, 8.0F, 4.0F, 1.0F, 2.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(0, 0).mirror().addBox(1.0F, 10.0F, 4.0F, 1.0F, 2.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(0, 0).mirror().addBox(2.0F, 12.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(0, 0).mirror().addBox(3.0F, 13.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(0, 0).mirror().addBox(4.0F, 14.0F, 4.0F, 2.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(0, 0).mirror().addBox(6.0F, 15.0F, 4.0F, 2.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false), PartPose.offsetAndRotation(-8.0F, 0.0F, 0.0F, 0.0F, 0.0F, -1.5708F)); + + PartDefinition fgLimb4 = limbSet1.addOrReplaceChild("fgLimb4", CubeListBuilder.create().texOffs(0, 0).addBox(-1.0F, -9.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 0).addBox(-1.0F, -10.0F, 4.0F, 1.0F, 2.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 0).addBox(-2.0F, -12.0F, 4.0F, 1.0F, 2.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 0).addBox(-3.0F, -13.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 0).addBox(-4.0F, -14.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 0).addBox(-6.0F, -15.0F, 4.0F, 2.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 0).addBox(-8.0F, -16.0F, 4.0F, 2.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(8.0F, 0.0F, 0.0F, 0.0F, 0.0F, -1.5708F)); + + PartDefinition limbSet2 = root.addOrReplaceChild("limbSet2", CubeListBuilder.create(), PartPose.offset(0.0F, -8.0F, 0.0F)); + + PartDefinition fgLimb5 = limbSet2.addOrReplaceChild("fgLimb5", CubeListBuilder.create().texOffs(0, 0).mirror().addBox(0.0F, -9.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(0, 0).mirror().addBox(0.0F, -10.0F, 4.0F, 1.0F, 2.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(0, 0).mirror().addBox(1.0F, -12.0F, 4.0F, 1.0F, 2.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(0, 0).mirror().addBox(2.0F, -13.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(0, 0).mirror().addBox(3.0F, -14.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(0, 0).mirror().addBox(4.0F, -15.0F, 4.0F, 2.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(0, 0).mirror().addBox(6.0F, -16.0F, 4.0F, 2.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false), PartPose.offset(0.0F, 8.0F, 0.0F)); + + PartDefinition fgLimb6 = limbSet2.addOrReplaceChild("fgLimb6", CubeListBuilder.create().texOffs(0, 0).addBox(-1.0F, 8.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 0).addBox(-1.0F, 8.0F, 4.0F, 1.0F, 2.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 0).addBox(-2.0F, 10.0F, 4.0F, 1.0F, 2.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 0).addBox(-3.0F, 12.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 0).addBox(-4.0F, 13.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 0).addBox(-6.0F, 14.0F, 4.0F, 2.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 0).addBox(-8.0F, 15.0F, 4.0F, 2.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, -8.0F, 0.0F)); + + PartDefinition fgLimb7 = limbSet2.addOrReplaceChild("fgLimb7", CubeListBuilder.create().texOffs(0, 0).addBox(-1.0F, 8.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 0).addBox(-1.0F, 8.0F, 4.0F, 1.0F, 2.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 0).addBox(-2.0F, 10.0F, 4.0F, 1.0F, 2.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 0).addBox(-3.0F, 12.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 0).addBox(-4.0F, 13.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 0).addBox(-6.0F, 14.0F, 4.0F, 2.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 0).addBox(-8.0F, 15.0F, 4.0F, 2.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(8.0F, 0.0F, 0.0F, 0.0F, 0.0F, 1.5708F)); + + PartDefinition fgLimb8 = limbSet2.addOrReplaceChild("fgLimb8", CubeListBuilder.create().texOffs(0, 0).mirror().addBox(0.0F, -9.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(0, 0).mirror().addBox(0.0F, -10.0F, 4.0F, 1.0F, 2.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(0, 0).mirror().addBox(1.0F, -12.0F, 4.0F, 1.0F, 2.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(0, 0).mirror().addBox(2.0F, -13.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(0, 0).mirror().addBox(3.0F, -14.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(0, 0).mirror().addBox(4.0F, -15.0F, 4.0F, 2.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(0, 0).mirror().addBox(6.0F, -16.0F, 4.0F, 2.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false), PartPose.offsetAndRotation(-8.0F, 0.0F, 0.0F, 0.0F, 0.0F, 1.5708F)); + + PartDefinition limbSet3 = root.addOrReplaceChild("limbSet3", CubeListBuilder.create(), PartPose.offset(0.0F, -8.0F, 0.0F)); + + PartDefinition bgLimb1 = limbSet3.addOrReplaceChild("bgLimb1", CubeListBuilder.create().texOffs(0, 0).addBox(-1.0F, -1.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 0).addBox(-2.0F, -2.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 0).addBox(-3.0F, -3.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 0).addBox(-3.0F, -4.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 0).mirror().addBox(-4.0F, -3.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(0, 0).addBox(-2.0F, -6.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 0).mirror().addBox(-6.0F, -2.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(0, 0).addBox(-1.0F, -7.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 0).mirror().addBox(-7.0F, -1.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(0, 0).addBox(-5.0F, -8.0F, 4.0F, 4.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 0).mirror().addBox(-8.0F, -5.0F, 4.0F, 1.0F, 4.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(0, 0).addBox(-3.0F, -5.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 0).mirror().addBox(-5.0F, -3.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false), PartPose.offset(0.0F, 0.0F, 0.0F)); + + PartDefinition bgLimb2 = limbSet3.addOrReplaceChild("bgLimb2", CubeListBuilder.create().texOffs(0, 0).mirror().addBox(0.0F, -1.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(0, 0).mirror().addBox(1.0F, -2.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(0, 0).mirror().addBox(2.0F, -3.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(0, 0).mirror().addBox(2.0F, -4.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(0, 0).addBox(3.0F, -3.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 0).mirror().addBox(1.0F, -6.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(0, 0).addBox(5.0F, -2.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 0).mirror().addBox(0.0F, -7.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(0, 0).addBox(6.0F, -1.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 0).mirror().addBox(1.0F, -8.0F, 4.0F, 4.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(0, 0).addBox(7.0F, -5.0F, 4.0F, 1.0F, 4.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 0).mirror().addBox(2.0F, -5.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(0, 0).addBox(4.0F, -3.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, 0.0F, 0.0F)); + + PartDefinition bgLimb3 = limbSet3.addOrReplaceChild("bgLimb3", CubeListBuilder.create().texOffs(0, 0).mirror().addBox(0.0F, 0.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(0, 0).mirror().addBox(1.0F, 1.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(0, 0).mirror().addBox(2.0F, 2.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(0, 0).mirror().addBox(2.0F, 3.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(0, 0).addBox(3.0F, 2.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 0).mirror().addBox(1.0F, 5.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(0, 0).addBox(5.0F, 1.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 0).mirror().addBox(0.0F, 6.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(0, 0).addBox(6.0F, 0.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 0).mirror().addBox(1.0F, 7.0F, 4.0F, 4.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(0, 0).addBox(7.0F, 1.0F, 4.0F, 1.0F, 4.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 0).mirror().addBox(2.0F, 4.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(0, 0).addBox(4.0F, 2.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, 0.0F, 0.0F)); + + PartDefinition bgLimb4 = limbSet3.addOrReplaceChild("bgLimb4", CubeListBuilder.create().texOffs(0, 0).addBox(-1.0F, 0.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 0).addBox(-2.0F, 1.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 0).addBox(-3.0F, 2.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 0).addBox(-3.0F, 3.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 0).mirror().addBox(-4.0F, 2.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(0, 0).addBox(-2.0F, 5.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 0).mirror().addBox(-6.0F, 1.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(0, 0).addBox(-1.0F, 6.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 0).mirror().addBox(-7.0F, 0.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(0, 0).addBox(-5.0F, 7.0F, 4.0F, 4.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 0).mirror().addBox(-8.0F, 1.0F, 4.0F, 1.0F, 4.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(0, 0).addBox(-3.0F, 4.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 0).mirror().addBox(-5.0F, 2.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false), PartPose.offset(0.0F, 0.0F, 0.0F)); + + PartDefinition limbSet4 = root.addOrReplaceChild("limbSet4", CubeListBuilder.create(), PartPose.offset(0.0F, -8.0F, 0.0F)); + + PartDefinition bgLimb5 = limbSet4.addOrReplaceChild("bgLimb5", CubeListBuilder.create().texOffs(0, 0).addBox(-1.0F, -1.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 0).addBox(-2.0F, -2.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 0).addBox(-3.0F, -3.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 0).addBox(-3.0F, -4.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 0).mirror().addBox(-4.0F, -3.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(0, 0).addBox(-2.0F, -6.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 0).mirror().addBox(-6.0F, -2.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(0, 0).addBox(-1.0F, -7.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 0).mirror().addBox(-7.0F, -1.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(0, 0).addBox(-5.0F, -8.0F, 4.0F, 4.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 0).mirror().addBox(-8.0F, -5.0F, 4.0F, 1.0F, 4.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(0, 0).addBox(-3.0F, -5.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 0).mirror().addBox(-5.0F, -3.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false), PartPose.offset(0.0F, 0.0F, 0.0F)); + + PartDefinition bgLimb6 = limbSet4.addOrReplaceChild("bgLimb6", CubeListBuilder.create().texOffs(0, 0).mirror().addBox(0.0F, -1.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(0, 0).mirror().addBox(1.0F, -2.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(0, 0).mirror().addBox(2.0F, -3.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(0, 0).mirror().addBox(2.0F, -4.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(0, 0).addBox(3.0F, -3.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 0).mirror().addBox(1.0F, -6.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(0, 0).addBox(5.0F, -2.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 0).mirror().addBox(0.0F, -7.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(0, 0).addBox(6.0F, -1.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 0).mirror().addBox(1.0F, -8.0F, 4.0F, 4.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(0, 0).addBox(7.0F, -5.0F, 4.0F, 1.0F, 4.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 0).mirror().addBox(2.0F, -5.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(0, 0).addBox(4.0F, -3.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, 0.0F, 0.0F)); + + PartDefinition bgLimb7 = limbSet4.addOrReplaceChild("bgLimb7", CubeListBuilder.create().texOffs(0, 0).mirror().addBox(0.0F, 0.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(0, 0).mirror().addBox(1.0F, 1.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(0, 0).mirror().addBox(2.0F, 2.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(0, 0).mirror().addBox(2.0F, 3.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(0, 0).addBox(3.0F, 2.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 0).mirror().addBox(1.0F, 5.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(0, 0).addBox(5.0F, 1.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 0).mirror().addBox(0.0F, 6.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(0, 0).addBox(6.0F, 0.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 0).mirror().addBox(1.0F, 7.0F, 4.0F, 4.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(0, 0).addBox(7.0F, 1.0F, 4.0F, 1.0F, 4.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 0).mirror().addBox(2.0F, 4.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(0, 0).addBox(4.0F, 2.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, 0.0F, 0.0F)); + + PartDefinition bgLimb8 = limbSet4.addOrReplaceChild("bgLimb8", CubeListBuilder.create().texOffs(0, 0).addBox(-1.0F, 0.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 0).addBox(-2.0F, 1.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 0).addBox(-3.0F, 2.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 0).addBox(-3.0F, 3.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 0).mirror().addBox(-4.0F, 2.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(0, 0).addBox(-2.0F, 5.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 0).mirror().addBox(-6.0F, 1.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(0, 0).addBox(-1.0F, 6.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 0).mirror().addBox(-7.0F, 0.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(0, 0).addBox(-5.0F, 7.0F, 4.0F, 4.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 0).mirror().addBox(-8.0F, 1.0F, 4.0F, 1.0F, 4.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(0, 0).addBox(-3.0F, 4.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 0).mirror().addBox(-5.0F, 2.0F, 4.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false), PartPose.offset(0.0F, 0.0F, 0.0F)); + + return LayerDefinition.create(meshdefinition, 16, 16); + } + + @Override + public void setupAnim(T entity, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch) { + limbSet1.zRot = ageInTicks / 20; + limbSet2.zRot = -(ageInTicks / 16); + limbSet3.zRot = ageInTicks / 40; + limbSet4.zRot = -(ageInTicks / 35); + } + + @Override + public void renderToBuffer(PoseStack poseStack, VertexConsumer vertexConsumer, int packedLight, int packedOverlay, float red, float green, float blue, float alpha) { + root.render(poseStack, vertexConsumer, packedLight, packedOverlay, red, green, blue, alpha); + } +} \ No newline at end of file diff --git a/src/surgebinding/java/leaf/cosmere/surgebinding/client/render/model/HonorsprenModel.java b/src/surgebinding/java/leaf/cosmere/surgebinding/client/render/model/HonorsprenModel.java new file mode 100644 index 000000000..a778b38aa --- /dev/null +++ b/src/surgebinding/java/leaf/cosmere/surgebinding/client/render/model/HonorsprenModel.java @@ -0,0 +1,123 @@ +/* + * File updated ~ 14 - 1 - 2025 ~ Leaf + */ + +package leaf.cosmere.surgebinding.client.render.model; + +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.math.Axis; +import leaf.cosmere.surgebinding.common.entity.spren.Honorspren; +import net.minecraft.client.model.ArmedModel; +import net.minecraft.client.model.HierarchicalModel; +import net.minecraft.client.model.geom.ModelPart; +import net.minecraft.client.model.geom.PartPose; +import net.minecraft.client.model.geom.builders.*; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.util.Mth; +import net.minecraft.world.entity.HumanoidArm; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; + +@OnlyIn(Dist.CLIENT) +public class HonorsprenModel extends HierarchicalModel implements ArmedModel +{ + private final ModelPart root; + private final ModelPart head; + private final ModelPart body; + private final ModelPart right_arm; + private final ModelPart left_arm; + //private final ModelPart right_wing; + //private final ModelPart left_wing; + private static final float FLYING_ANIMATION_X_ROT = ((float) Math.PI / 4F); + private static final float MAX_HAND_HOLDING_ITEM_X_ROT_RAD = -1.134464F; + private static final float MIN_HAND_HOLDING_ITEM_X_ROT_RAD = (-(float) Math.PI / 3F); + + public HonorsprenModel(ModelPart pRoot) + { + super(RenderType::entityTranslucent); + this.root = pRoot.getChild("root"); + this.head = this.root.getChild("head"); + this.body = this.root.getChild("body"); + this.right_arm = this.body.getChild("right_arm"); + this.left_arm = this.body.getChild("left_arm"); + //this.right_wing = this.body.getChild("right_wing"); + //this.left_wing = this.body.getChild("left_wing"); + } + + public ModelPart root() + { + return this.root; + } + + public static LayerDefinition createBodyLayer() + { + MeshDefinition meshdefinition = new MeshDefinition(); + PartDefinition partdefinition = meshdefinition.getRoot(); + PartDefinition partdefinition1 = partdefinition.addOrReplaceChild("root", CubeListBuilder.create(), PartPose.offset(0.0F, 23.5F, 0.0F)); + partdefinition1.addOrReplaceChild("head", CubeListBuilder.create().texOffs(0, 0).addBox(-2.5F, -5.0F, -2.5F, 5.0F, 5.0F, 5.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, -3.99F, 0.0F)); + PartDefinition partdefinition2 = partdefinition1.addOrReplaceChild("body", CubeListBuilder.create().texOffs(0, 10).addBox(-1.5F, 0.0F, -1.0F, 3.0F, 4.0F, 2.0F, new CubeDeformation(0.0F)).texOffs(0, 16).addBox(-1.5F, 0.0F, -1.0F, 3.0F, 5.0F, 2.0F, new CubeDeformation(-0.2F)), PartPose.offset(0.0F, -4.0F, 0.0F)); + partdefinition2.addOrReplaceChild("right_arm", CubeListBuilder.create().texOffs(23, 0).addBox(-0.75F, -0.5F, -1.0F, 1.0F, 4.0F, 2.0F, new CubeDeformation(-0.01F)), PartPose.offset(-1.75F, 0.5F, 0.0F)); + partdefinition2.addOrReplaceChild("left_arm", CubeListBuilder.create().texOffs(23, 6).addBox(-0.25F, -0.5F, -1.0F, 1.0F, 4.0F, 2.0F, new CubeDeformation(-0.01F)), PartPose.offset(1.75F, 0.5F, 0.0F)); + //partdefinition2.addOrReplaceChild("right_wing", CubeListBuilder.create().texOffs(16, 14).addBox(0.0F, 1.0F, 0.0F, 0.0F, 5.0F, 8.0F, new CubeDeformation(0.0F)), PartPose.offset(-0.5F, 0.0F, 0.6F)); + //partdefinition2.addOrReplaceChild("left_wing", CubeListBuilder.create().texOffs(16, 14).addBox(0.0F, 1.0F, 0.0F, 0.0F, 5.0F, 8.0F, new CubeDeformation(0.0F)), PartPose.offset(0.5F, 0.0F, 0.6F)); + return LayerDefinition.create(meshdefinition, 32, 32); + } + + /** + * Sets this entity's model rotation angles + */ + public void setupAnim(Honorspren pEntity, float pLimbSwing, float pLimbSwingAmount, float pAgeInTicks, float pNetHeadYaw, float pHeadPitch) + { + this.root().getAllParts().forEach(ModelPart::resetPose); + float f = pAgeInTicks * 20.0F * ((float) Math.PI / 180F) + pLimbSwing; + float f1 = Mth.cos(f) * (float) Math.PI * 0.15F + pLimbSwingAmount; + float f2 = pAgeInTicks - (float) pEntity.tickCount; + float f3 = pAgeInTicks * 9.0F * ((float) Math.PI / 180F); + float f4 = Math.min(pLimbSwingAmount / 0.3F, 1.0F); + float f5 = 1.0F - f4; + float f6 = pEntity.getHoldingItemAnimationProgress(f2); + if (pEntity.isDancing()) + { + float f7 = pAgeInTicks * 8.0F * ((float) Math.PI / 180F) + pLimbSwingAmount; + float f8 = Mth.cos(f7) * 16.0F * ((float) Math.PI / 180F); + float f9 = pEntity.getSpinningProgress(f2); + float f10 = Mth.cos(f7) * 14.0F * ((float) Math.PI / 180F); + float f11 = Mth.cos(f7) * 30.0F * ((float) Math.PI / 180F); + this.root.yRot = pEntity.isSpinning() ? 12.566371F * f9 : this.root.yRot; + this.root.zRot = f8 * (1.0F - f9); + this.head.yRot = f11 * (1.0F - f9); + this.head.zRot = f10 * (1.0F - f9); + } + else + { + this.head.xRot = pHeadPitch * ((float) Math.PI / 180F); + this.head.yRot = pNetHeadYaw * ((float) Math.PI / 180F); + } + + //this.right_wing.xRot = 0.43633232F * (1.0F - f4); + //this.right_wing.yRot = (-(float) Math.PI / 4F) + f1; + //this.left_wing.xRot = 0.43633232F * (1.0F - f4); + //this.left_wing.yRot = FLYING_ANIMATION_X_ROT - f1; + this.body.xRot = f4 * FLYING_ANIMATION_X_ROT; + float f12 = f6 * Mth.lerp(f4, MIN_HAND_HOLDING_ITEM_X_ROT_RAD, MAX_HAND_HOLDING_ITEM_X_ROT_RAD); + this.root.y += (float) Math.cos((double) f3) * 0.25F * f5; + this.right_arm.xRot = f12; + this.left_arm.xRot = f12; + float f13 = f5 * (1.0F - f6); + float f14 = 0.43633232F - Mth.cos(f3 + ((float) Math.PI * 1.5F)) * (float) Math.PI * 0.075F * f13; + this.left_arm.zRot = -f14; + this.right_arm.zRot = f14; + this.right_arm.yRot = 0.27925268F * f6; + this.left_arm.yRot = -0.27925268F * f6; + } + + public void translateToHand(HumanoidArm pSide, PoseStack pPoseStack) + { + this.root.translateAndRotate(pPoseStack); + this.body.translateAndRotate(pPoseStack); + pPoseStack.translate(0.0F, 0.0625F, 0.1875F); + pPoseStack.mulPose(Axis.XP.rotation(this.right_arm.xRot)); + pPoseStack.scale(0.7F, 0.7F, 0.7F); + pPoseStack.translate(0.0625F, 0.0F, 0.0F); + } +} \ No newline at end of file diff --git a/src/surgebinding/java/leaf/cosmere/surgebinding/client/render/model/ShardbladeModel.java b/src/surgebinding/java/leaf/cosmere/surgebinding/client/render/model/ShardbladeModel.java new file mode 100644 index 000000000..25c451758 --- /dev/null +++ b/src/surgebinding/java/leaf/cosmere/surgebinding/client/render/model/ShardbladeModel.java @@ -0,0 +1,127 @@ +/* + * File updated ~ 6 - 2 - 2025 ~ Leaf + */ + +package leaf.cosmere.surgebinding.client.render.model; + +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import leaf.cosmere.surgebinding.common.Surgebinding; +import leaf.cosmere.surgebinding.common.capabilities.IShardbladeDynamicData; +import leaf.cosmere.surgebinding.common.items.ShardbladeDynamicItem; +import net.minecraft.client.model.Model; +import net.minecraft.client.model.geom.ModelPart; +import net.minecraft.client.model.geom.PartPose; +import net.minecraft.client.model.geom.builders.*; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.ItemStack; + +public class ShardbladeModel extends Model +{ + // This layer location should be baked with EntityRendererProvider.Context in the entity renderer and passed into this model's constructor + public static final ResourceLocation TEXTURE = Surgebinding.rl("textures/item/models/shardblade/dynamic.png"); + public static final int TOTAL_BLADE_IDS = 2; + public static final int TOTAL_HANDLE_IDS = 1; + public static final int TOTAL_POMMEL_IDS = 1; + public static final int TOTAL_CROSS_GUARD_IDS = 1; + + private final ModelPart root; + private final ModelPart blade; + private final ModelPart handle; + private final ModelPart pommel; + private final ModelPart cross_guard; + + public ShardbladeModel(ModelPart root) + { + super(RenderType::entitySolid); + this.root = root.getChild("root"); + this.blade = this.root.getChild("blade"); + this.handle = this.root.getChild("handle"); + this.pommel = this.root.getChild("pommel"); + this.cross_guard = this.root.getChild("cross_guard"); + } + + + public static LayerDefinition createLayerDefinition() + { + MeshDefinition meshdefinition = new MeshDefinition(); + PartDefinition partdefinition = meshdefinition.getRoot(); + + PartDefinition root = partdefinition.addOrReplaceChild("root", CubeListBuilder.create(), PartPose.offset(0.0F, 24.0F, 0.0F)); + + PartDefinition blade = root.addOrReplaceChild("blade", CubeListBuilder.create(), PartPose.offset(0.0F, 0.0F, 0.0F)); + + PartDefinition blade_guide = blade.addOrReplaceChild("blade_guide", CubeListBuilder.create().texOffs(19, 3).addBox(-2.5F, -45.0F, -0.5F, 5.0F, 28.0F, 1.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, 0.0F, 0.0F)); + + PartDefinition blade_1 = blade.addOrReplaceChild("blade_1", CubeListBuilder.create().texOffs(0, 3).addBox(-0.5F, -45.0F, -0.5F, 1.0F, 28.0F, 1.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, 0.0F, 0.0F)); + + PartDefinition blade_2 = blade.addOrReplaceChild("blade_2", CubeListBuilder.create().texOffs(19, 3).addBox(-2.5F, -45.0F, -0.5F, 5.0F, 28.0F, 1.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, 0.0F, 0.0F)); + + PartDefinition handle = root.addOrReplaceChild("handle", CubeListBuilder.create(), PartPose.offset(0.0F, 0.0F, 0.0F)); + + PartDefinition handle_guide = handle.addOrReplaceChild("handle_guide", CubeListBuilder.create().texOffs(4, 8).addBox(-0.5F, -16.0F, -0.5F, 1.0F, 7.0F, 1.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, 0.0F, 0.0F)); + + PartDefinition handle_1 = handle.addOrReplaceChild("handle_1", CubeListBuilder.create().texOffs(4, 8).addBox(-0.5F, -16.0F, -0.5F, 1.0F, 7.0F, 1.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, 0.0F, 0.0F)); + + PartDefinition pommel = root.addOrReplaceChild("pommel", CubeListBuilder.create(), PartPose.offset(0.0F, 0.0F, 0.0F)); + + PartDefinition pommel_guide = pommel.addOrReplaceChild("pommel_guide", CubeListBuilder.create().texOffs(4, 3).addBox(-1.5F, -9.0F, -1.5F, 3.0F, 2.0F, 3.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, 0.0F, 0.0F)); + + PartDefinition pommel_1 = pommel.addOrReplaceChild("pommel_1", CubeListBuilder.create().texOffs(4, 3).addBox(-1.5F, -9.0F, -1.5F, 3.0F, 2.0F, 3.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, 0.0F, 0.0F)); + + PartDefinition cross_guard = root.addOrReplaceChild("cross_guard", CubeListBuilder.create(), PartPose.offset(0.0F, 0.0F, 0.0F)); + + PartDefinition crossguard_guide = cross_guard.addOrReplaceChild("crossguard_guide", CubeListBuilder.create().texOffs(0, 0).addBox(-4.5F, -17.0F, -1.0F, 9.0F, 1.0F, 2.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, 0.0F, 0.0F)); + + PartDefinition crossguard_1 = cross_guard.addOrReplaceChild("crossguard_1", CubeListBuilder.create().texOffs(0, 0).addBox(-4.5F, -17.0F, -1.0F, 9.0F, 1.0F, 2.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, 0.0F, 0.0F)); + + return LayerDefinition.create(meshdefinition, 32, 32); + } + + + public void renderToBuffer(PoseStack poseStack, VertexConsumer vertexConsumer, int packedLight, int packedOverlay, float red, float green, float blue, float alpha) + { + root.render(poseStack, vertexConsumer, packedLight, packedOverlay, red, green, blue, alpha); + } + + public void setup(ItemStack pStack) + { + this.root.visible = true; + + //kinda yuck that we can't just have block bench not include these folders in the first place + final String bladeGuide = "blade_guide"; + final String handleGuide = "handle_guide"; + final String pommelGuide = "pommel_guide"; + final String crossGuardGuide = "crossguard_guide"; + this.blade.getChild(bladeGuide).visible = false; + this.handle.getChild(handleGuide).visible = false; + this.pommel.getChild(pommelGuide).visible = false; + this.cross_guard.getChild(crossGuardGuide).visible = false; + + this.blade.getAllParts().forEach(part -> part.visible = false); + this.handle.getAllParts().forEach(part -> part.visible = false); + this.pommel.getAllParts().forEach(part -> part.visible = false); + this.cross_guard.getAllParts().forEach(part -> part.visible = false); + + this.blade.visible = true; + this.handle.visible = true; + this.pommel.visible = true; + this.cross_guard.visible = true; + + //now we need to get the actual data from the itemstack + //and set the correct pieces to be visible + + if (!pStack.getCapability(ShardbladeDynamicItem.CAPABILITY).isPresent()) + { + return; + } + + final IShardbladeDynamicData data = pStack.getCapability(ShardbladeDynamicItem.CAPABILITY).resolve().get(); + + this.blade.getChild(data.getBladeID()).visible = true; + this.handle.getChild(data.getHandleID()).visible = true; + this.pommel.getChild(data.getPommelID()).visible = true; + this.cross_guard.getChild(data.getCrossGuardID()).visible = true; + } +} \ No newline at end of file diff --git a/src/surgebinding/java/leaf/cosmere/surgebinding/client/render/model/ShardplateModel.java b/src/surgebinding/java/leaf/cosmere/surgebinding/client/render/model/ShardplateModel.java new file mode 100644 index 000000000..05c24a0e3 --- /dev/null +++ b/src/surgebinding/java/leaf/cosmere/surgebinding/client/render/model/ShardplateModel.java @@ -0,0 +1,128 @@ +/* + * File updated ~ 5 - 8 - 2023 ~ Leaf + */ + +package leaf.cosmere.surgebinding.client.render.model; + +// Made with Blockbench 4.3.1 +// Exported for Minecraft version 1.17 - 1.18 with Mojang mappings +// Paste this class into your mod and generate all required imports + + +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import net.minecraft.client.model.HumanoidModel; +import net.minecraft.client.model.geom.ModelPart; +import net.minecraft.client.model.geom.PartPose; +import net.minecraft.client.model.geom.builders.*; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.decoration.ArmorStand; + +public class ShardplateModel extends HumanoidModel +{ + private final ModelPart root; + public final ModelPart Chestplate; + public final ModelPart LeftLeg; + public final ModelPart RightLeg; + public final ModelPart LeftBoot; + public final ModelPart RightBoot; + + public ShardplateModel(ModelPart root) + { + super(root, RenderType::entityCutoutNoCull); + + this.root = root; + + this.Chestplate = this.root.getChild("body").getChild("chestplate"); + + ModelPart left_leg = this.root.getChild("left_leg"); + ModelPart right_leg = this.root.getChild("right_leg"); + + this.LeftLeg = left_leg.getChild("leftleg"); + this.RightLeg = right_leg.getChild("rightleg"); + + this.LeftBoot = left_leg.getChild("left_boot"); + this.RightBoot = right_leg.getChild("right_boot"); + } + + + public static LayerDefinition createBodyLayer() + { + MeshDefinition meshdefinition = new MeshDefinition(); + PartDefinition partdefinition = meshdefinition.getRoot(); + + PartDefinition head = partdefinition.addOrReplaceChild("head", CubeListBuilder.create().texOffs(0, 0).addBox(-4.0F, -8.75F, -4.0F, 8.0F, 8.0F, 8.0F, new CubeDeformation(0.6F)).texOffs(0, 52).addBox(-5.0F, -15.5F, 1.0F, 2.0F, 9.0F, 2.0F, new CubeDeformation(0.0F)).texOffs(50, 33).addBox(3.0F, -15.5F, 1.0F, 2.0F, 9.0F, 2.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, 0.5F, 0.0F)); + + PartDefinition body = partdefinition.addOrReplaceChild("body", CubeListBuilder.create(), PartPose.offset(0.0F, 0.0F, 0.0F)); + + PartDefinition chestplate = body.addOrReplaceChild("chestplate", CubeListBuilder.create().texOffs(19, 23).addBox(-4.0F, 0.75F, -2.5F, 8.0F, 3.0F, 5.0F, new CubeDeformation(0.75F)).texOffs(0, 16).addBox(-4.0F, 3.5F, -2.0F, 8.0F, 8.0F, 4.0F, new CubeDeformation(0.75F)), PartPose.offset(0.0F, 0.0F, 0.0F)); + + PartDefinition right_arm = partdefinition.addOrReplaceChild("right_arm", CubeListBuilder.create(), PartPose.offset(-5.0F, 2.0F, 0.0F)); + + PartDefinition right_arm_r1 = right_arm.addOrReplaceChild("right_arm_r1", CubeListBuilder.create().texOffs(48, 0).addBox(1.1217F, 2.2811F, -2.0F, 3.0F, 1.0F, 4.0F, new CubeDeformation(0.7F)), PartPose.offsetAndRotation(-2.5625F, 0.5446F, 0.0F, 0.0F, 0.0F, -2.138F)); + + PartDefinition right_arm_r2 = right_arm.addOrReplaceChild("right_arm_r2", CubeListBuilder.create().texOffs(44, 47).addBox(-2.5765F, -1.5268F, -2.0F, 3.0F, 2.0F, 4.0F, new CubeDeformation(0.7F)), PartPose.offsetAndRotation(-2.5625F, 0.5446F, 0.0F, 0.0F, 0.0F, 0.2182F)); + + PartDefinition right_arm_r3 = right_arm.addOrReplaceChild("right_arm_r3", CubeListBuilder.create().texOffs(24, 16).addBox(-1.4913F, -2.4945F, -3.0F, 1.0F, 1.0F, 6.0F, new CubeDeformation(0.7F)).texOffs(44, 27).addBox(-3.1984F, -2.9749F, -2.0F, 3.0F, 2.0F, 4.0F, new CubeDeformation(0.7F)), PartPose.offsetAndRotation(-2.5625F, 0.5446F, 0.0F, 0.0F, 0.0F, 0.6109F)); + + PartDefinition right_arm_r4 = right_arm.addOrReplaceChild("right_arm_r4", CubeListBuilder.create().texOffs(32, 0).addBox(-1.069F, -1.7946F, -2.0F, 4.0F, 11.0F, 4.0F, new CubeDeformation(0.7F)), PartPose.offsetAndRotation(-2.5625F, 0.5446F, 0.0F, 0.0F, 0.0F, 0.0F)); + + PartDefinition left_arm = partdefinition.addOrReplaceChild("left_arm", CubeListBuilder.create().texOffs(32, 31).addBox(-0.3685F, -1.25F, -2.0F, 4.0F, 11.0F, 4.0F, new CubeDeformation(0.7F)), PartPose.offset(5.0F, 2.0F, 0.0F)); + + PartDefinition left_arm_r1 = left_arm.addOrReplaceChild("left_arm_r1", CubeListBuilder.create().texOffs(48, 5).addBox(-4.3325F, 2.4154F, -2.0F, 3.0F, 1.0F, 4.0F, new CubeDeformation(0.7F)), PartPose.offsetAndRotation(2.5625F, 0.7946F, 0.0F, 0.0F, 0.0F, 2.138F)); + + PartDefinition left_arm_r2 = left_arm.addOrReplaceChild("left_arm_r2", CubeListBuilder.create().texOffs(16, 46).addBox(-0.3694F, -1.7709F, -2.0F, 3.0F, 2.0F, 4.0F, new CubeDeformation(0.7F)), PartPose.offsetAndRotation(2.5625F, 0.7946F, 0.0F, 0.0F, 0.0F, -0.2182F)); + + PartDefinition left_arm_r3 = left_arm.addOrReplaceChild("left_arm_r3", CubeListBuilder.create().texOffs(30, 46).addBox(0.3418F, -3.1797F, -2.0F, 3.0F, 2.0F, 4.0F, new CubeDeformation(0.7F)).texOffs(42, 40).addBox(0.6347F, -2.6993F, -3.0F, 1.0F, 1.0F, 6.0F, new CubeDeformation(0.7F)), PartPose.offsetAndRotation(2.5625F, 0.7946F, 0.0F, 0.0F, 0.0F, -0.6109F)); + + PartDefinition right_leg = partdefinition.addOrReplaceChild("right_leg", CubeListBuilder.create(), PartPose.offset(-1.9F, 12.0F, 0.0F)); + + PartDefinition rightleg = right_leg.addOrReplaceChild("rightleg", CubeListBuilder.create().texOffs(16, 31).addBox(-4.35F, -11.6F, -2.1F, 4.0F, 9.25F, 4.0F, new CubeDeformation(0.4F)), PartPose.offset(1.9F, 12.0F, 0.0F)); + + PartDefinition right_boot = right_leg.addOrReplaceChild("right_boot", CubeListBuilder.create(), PartPose.offset(1.9F, 12.0F, 0.0F)); + + PartDefinition leftboot_outside = right_boot.addOrReplaceChild("leftboot_outside", CubeListBuilder.create().texOffs(40, 15).addBox(-4.5F, -5.5F, -2.25F, 4.0F, 5.0F, 4.25F, new CubeDeformation(0.5F)), PartPose.offset(0.0F, 0.0F, 0.0F)); + + PartDefinition rightboot_tip = right_boot.addOrReplaceChild("rightboot_tip", CubeListBuilder.create().texOffs(24, 0).addBox(-4.05F, -2.5F, -4.75F, 3.0F, 2.0F, 2.0F, new CubeDeformation(0.5F)), PartPose.offset(0.0F, 0.0F, 0.0F)); + + PartDefinition left_leg = partdefinition.addOrReplaceChild("left_leg", CubeListBuilder.create(), PartPose.offset(1.9F, 12.0F, 0.0F)); + + PartDefinition leftleg = left_leg.addOrReplaceChild("leftleg", CubeListBuilder.create().texOffs(0, 28).addBox(0.35F, -11.6F, -2.1F, 4.0F, 9.25F, 4.0F, new CubeDeformation(0.4F)), PartPose.offset(-1.9F, 12.0F, 0.0F)); + + PartDefinition left_boot = left_leg.addOrReplaceChild("left_boot", CubeListBuilder.create(), PartPose.offset(-1.9F, 12.0F, 0.0F)); + + PartDefinition rightboot_outside = left_boot.addOrReplaceChild("rightboot_outside", CubeListBuilder.create().texOffs(0, 43).addBox(0.5F, -5.5F, -2.25F, 4.0F, 5.0F, 4.25F, new CubeDeformation(0.5F)), PartPose.offset(0.0F, 0.0F, 0.0F)); + + PartDefinition leftboot_tip = left_boot.addOrReplaceChild("leftboot_tip", CubeListBuilder.create().texOffs(20, 16).addBox(0.75F, -2.5F, -4.75F, 3.0F, 2.0F, 2.0F, new CubeDeformation(0.5F)), PartPose.offset(0.0F, 0.0F, 0.0F)); + + PartDefinition hat = partdefinition.addOrReplaceChild("hat", CubeListBuilder.create(), PartPose.offset(0.0F, 24.0F, 0.0F)); + + return LayerDefinition.create(meshdefinition, 64, 64); + } + + + @Override + public void renderToBuffer(PoseStack poseStack, VertexConsumer vertexConsumer, int packedLight, int packedOverlay, float red, float green, float blue, float alpha) + { + head.render(poseStack, vertexConsumer, packedLight, packedOverlay, red, green, blue, alpha); + body.render(poseStack, vertexConsumer, packedLight, packedOverlay, red, green, blue, alpha); + rightArm.render(poseStack, vertexConsumer, packedLight, packedOverlay, red, green, blue, alpha); + leftArm.render(poseStack, vertexConsumer, packedLight, packedOverlay, red, green, blue, alpha); + rightLeg.render(poseStack, vertexConsumer, packedLight, packedOverlay, red, green, blue, alpha); + leftLeg.render(poseStack, vertexConsumer, packedLight, packedOverlay, red, green, blue, alpha); + } + + @Override + public void setupAnim(LivingEntity entity, float pLimbSwing, float pLimbSwingAmount, float pAgeInTicks, float pNetHeadYaw, float pHeadPitch) + { + if (entity instanceof ArmorStand) + { + super.setupAnim(entity, 0, 0, 0, 0, 0); + } + else + { + super.setupAnim(entity, pLimbSwing, pLimbSwingAmount, pAgeInTicks, pNetHeadYaw, pHeadPitch); + } + } +} \ No newline at end of file diff --git a/src/surgebinding/java/leaf/cosmere/surgebinding/client/render/renderer/ArmorRenderer.java b/src/surgebinding/java/leaf/cosmere/surgebinding/client/render/renderer/ArmorRenderer.java new file mode 100644 index 000000000..5d4c6a028 --- /dev/null +++ b/src/surgebinding/java/leaf/cosmere/surgebinding/client/render/renderer/ArmorRenderer.java @@ -0,0 +1,63 @@ +/* + * File updated ~ 26 - 2 - 2023 ~ Leaf + */ + +package leaf.cosmere.surgebinding.client.render.renderer; + +import com.mojang.blaze3d.vertex.PoseStack; +import leaf.cosmere.surgebinding.client.render.SurgebindingLayerDefinitions; +import leaf.cosmere.surgebinding.client.render.model.ShardplateModel; +import net.minecraft.client.Minecraft; +import net.minecraft.client.model.EntityModel; +import net.minecraft.client.model.geom.ModelPart; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.entity.RenderLayerParent; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.item.ItemStack; +import top.theillusivec4.curios.api.SlotContext; +import top.theillusivec4.curios.api.client.ICurioRenderer; + +public class ArmorRenderer implements ICurioRenderer +{ + public ShardplateModel model; + + public ArmorRenderer() + { + final ModelPart modelPart = Minecraft.getInstance().getEntityModels().bakeLayer(SurgebindingLayerDefinitions.SHARDPLATE); + model = new ShardplateModel(modelPart); + } + + @Override + public > void render( + ItemStack stack, + SlotContext slotContext, + PoseStack matrixStack, + RenderLayerParent renderLayerParent, + MultiBufferSource renderTypeBuffer, + int light, float limbSwing, + float limbSwingAmount, + float partialTicks, + float ageInTicks, + float netHeadYaw, + float headPitch) + { + + LivingEntity entity = slotContext.entity(); + + MobEffectInstance effectInstance = entity.getEffect(MobEffects.INVISIBILITY); + if (effectInstance != null && effectInstance.getDuration() > 0) + { + return; + } + + this.model.prepareMobModel(entity, limbSwing, limbSwingAmount, partialTicks); + this.model.setupAnim(entity, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch); + + ICurioRenderer.followBodyRotations(entity, this.model); + + //this.model.render(stack, slotContext, matrixStack, renderTypeBuffer, light); + + } +} diff --git a/src/surgebinding/java/leaf/cosmere/surgebinding/client/render/renderer/ChullRenderer.java b/src/surgebinding/java/leaf/cosmere/surgebinding/client/render/renderer/ChullRenderer.java new file mode 100644 index 000000000..28349cac8 --- /dev/null +++ b/src/surgebinding/java/leaf/cosmere/surgebinding/client/render/renderer/ChullRenderer.java @@ -0,0 +1,29 @@ +/* + * File updated ~ 26 - 2 - 2023 ~ Leaf + */ + +package leaf.cosmere.surgebinding.client.render.renderer; + +import leaf.cosmere.surgebinding.client.render.SurgebindingLayerDefinitions; +import leaf.cosmere.surgebinding.client.render.model.ChullModel; +import leaf.cosmere.surgebinding.common.Surgebinding; +import leaf.cosmere.surgebinding.common.entity.Chull; +import net.minecraft.client.renderer.entity.EntityRendererProvider; +import net.minecraft.client.renderer.entity.MobRenderer; +import net.minecraft.resources.ResourceLocation; + +public class ChullRenderer extends MobRenderer> +{ + private static final ResourceLocation TEXTURE = Surgebinding.rl("textures/entity/chull/chull.png"); + + public ChullRenderer(EntityRendererProvider.Context context) + { + super(context, new ChullModel<>(context.bakeLayer(SurgebindingLayerDefinitions.CHULL)), 1.0F); + } + + @Override + public ResourceLocation getTextureLocation(Chull pEntity) + { + return TEXTURE; + } +} diff --git a/src/surgebinding/java/leaf/cosmere/surgebinding/client/render/renderer/CrypticRenderer.java b/src/surgebinding/java/leaf/cosmere/surgebinding/client/render/renderer/CrypticRenderer.java new file mode 100644 index 000000000..fc9de2038 --- /dev/null +++ b/src/surgebinding/java/leaf/cosmere/surgebinding/client/render/renderer/CrypticRenderer.java @@ -0,0 +1,37 @@ +/* + * File updated ~ 14 - 1 - 2025 ~ Leaf + */ + +package leaf.cosmere.surgebinding.client.render.renderer; + +import com.mojang.blaze3d.vertex.PoseStack; +import leaf.cosmere.surgebinding.client.render.SurgebindingLayerDefinitions; +import leaf.cosmere.surgebinding.client.render.model.CrypticModel; +import leaf.cosmere.surgebinding.common.Surgebinding; +import leaf.cosmere.surgebinding.common.entity.spren.Cryptic; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.entity.EntityRendererProvider; +import net.minecraft.client.renderer.entity.MobRenderer; +import net.minecraft.resources.ResourceLocation; + +public class CrypticRenderer extends MobRenderer> +{ + private static final ResourceLocation TEXTURE = Surgebinding.rl("textures/entity/cryptic/cryptic.png"); + + public CrypticRenderer(EntityRendererProvider.Context context) + { + super(context, new CrypticModel<>(context.bakeLayer(SurgebindingLayerDefinitions.CRYPTIC)), 0.5F); + } + + @Override + public ResourceLocation getTextureLocation(Cryptic pEntity) + { + return TEXTURE; + } + + @Override + public void render(Cryptic pEntity, float pEntityYaw, float pPartialTicks, PoseStack pMatrixStack, MultiBufferSource pBuffer, int pPackedLight) + { + super.render(pEntity, pEntityYaw, pPartialTicks, pMatrixStack, pBuffer, pPackedLight); + } +} diff --git a/src/surgebinding/java/leaf/cosmere/surgebinding/client/render/renderer/HonorsprenRenderer.java b/src/surgebinding/java/leaf/cosmere/surgebinding/client/render/renderer/HonorsprenRenderer.java new file mode 100644 index 000000000..255055a4a --- /dev/null +++ b/src/surgebinding/java/leaf/cosmere/surgebinding/client/render/renderer/HonorsprenRenderer.java @@ -0,0 +1,39 @@ +/* + * File updated ~ 14 - 1 - 2025 ~ Leaf + */ + +package leaf.cosmere.surgebinding.client.render.renderer; + +import leaf.cosmere.surgebinding.client.render.model.HonorsprenModel; +import leaf.cosmere.surgebinding.common.entity.spren.Honorspren; +import net.minecraft.client.model.geom.ModelLayers; +import net.minecraft.client.renderer.entity.EntityRendererProvider; +import net.minecraft.client.renderer.entity.MobRenderer; +import net.minecraft.client.renderer.entity.layers.ItemInHandLayer; +import net.minecraft.core.BlockPos; +import net.minecraft.resources.ResourceLocation; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; + +@OnlyIn(Dist.CLIENT) +public class HonorsprenRenderer extends MobRenderer +{ + private static final ResourceLocation ALLAY_TEXTURE = new ResourceLocation("textures/entity/allay/allay.png"); + + public HonorsprenRenderer(EntityRendererProvider.Context p_234551_) + { + super(p_234551_, new HonorsprenModel(p_234551_.bakeLayer(ModelLayers.ALLAY)), 0.4F); + this.addLayer(new ItemInHandLayer<>(this, p_234551_.getItemInHandRenderer())); + } + + @Override + public ResourceLocation getTextureLocation(Honorspren pEntity) + { + return ALLAY_TEXTURE; + } + + protected int getBlockLightLevel(Honorspren pEntity, BlockPos blockPos) + { + return 15; + } +} \ No newline at end of file diff --git a/src/surgebinding/java/leaf/cosmere/surgebinding/client/render/renderer/ShardbladeItemRenderer.java b/src/surgebinding/java/leaf/cosmere/surgebinding/client/render/renderer/ShardbladeItemRenderer.java new file mode 100644 index 000000000..07aeae0e8 --- /dev/null +++ b/src/surgebinding/java/leaf/cosmere/surgebinding/client/render/renderer/ShardbladeItemRenderer.java @@ -0,0 +1,54 @@ +/* + * File updated ~ 6 - 2 - 2025 ~ Leaf + */ + +package leaf.cosmere.surgebinding.client.render.renderer; + +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import leaf.cosmere.surgebinding.client.render.SurgebindingLayerDefinitions; +import leaf.cosmere.surgebinding.client.render.model.ShardbladeModel; +import net.minecraft.client.model.geom.EntityModelSet; +import net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.blockentity.BlockEntityRenderDispatcher; +import net.minecraft.client.renderer.entity.ItemRenderer; +import net.minecraft.server.packs.resources.ResourceManager; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemDisplayContext; +import net.minecraft.world.item.ItemStack; + + +public class ShardbladeItemRenderer extends BlockEntityWithoutLevelRenderer +{ + private ShardbladeModel shardbladeModel; + + + public ShardbladeItemRenderer(BlockEntityRenderDispatcher pBlockEntityRenderDispatcher, EntityModelSet pEntityModelSet) + { + super(pBlockEntityRenderDispatcher, pEntityModelSet); + shardbladeModel = new ShardbladeModel(this.entityModelSet.bakeLayer(SurgebindingLayerDefinitions.SHARDBLADE)); + } + + @Override + public void onResourceManagerReload(ResourceManager pResourceManager) + { + super.onResourceManagerReload(pResourceManager); + shardbladeModel = new ShardbladeModel(this.entityModelSet.bakeLayer(SurgebindingLayerDefinitions.SHARDBLADE)); + } + + public void renderByItem(ItemStack itemStack, ItemDisplayContext displayContext, PoseStack poseStack, MultiBufferSource bufferSource, int pPackedLight, int pPackedOverlay) + { + Item item = itemStack.getItem(); + // todo get which pieces should be active and which should be turned off. + + this.shardbladeModel.setup(itemStack); + + poseStack.pushPose(); + poseStack.scale(1.0F, -1.0F, -1.0F); + VertexConsumer vertexconsumer1 = ItemRenderer.getFoilBufferDirect(bufferSource, this.shardbladeModel.renderType(ShardbladeModel.TEXTURE), false, itemStack.hasFoil()); + this.shardbladeModel.renderToBuffer(poseStack, vertexconsumer1, pPackedLight, pPackedOverlay, 1.0F, 1.0F, 1.0F, 1.0F); + poseStack.popPose(); + + } +} diff --git a/src/surgebinding/java/leaf/cosmere/surgebinding/common/Surgebinding.java b/src/surgebinding/java/leaf/cosmere/surgebinding/common/Surgebinding.java new file mode 100644 index 000000000..ac8f72055 --- /dev/null +++ b/src/surgebinding/java/leaf/cosmere/surgebinding/common/Surgebinding.java @@ -0,0 +1,135 @@ +/* + * File updated ~ 4 - 2 - 2025 ~ Leaf + */ + +package leaf.cosmere.surgebinding.common; + +import leaf.cosmere.api.CosmereAPI; +import leaf.cosmere.api.IModModule; +import leaf.cosmere.api.ISpiritwebSubmodule; +import leaf.cosmere.api.Version; +import leaf.cosmere.common.Cosmere; +import leaf.cosmere.common.config.CosmereModConfig; +import leaf.cosmere.surgebinding.common.capabilities.SurgebindingSpiritwebSubmodule; +import leaf.cosmere.surgebinding.common.capabilities.world.IRoshar; +import leaf.cosmere.surgebinding.common.config.SurgebindingConfigs; +import leaf.cosmere.surgebinding.common.network.SurgebindingPacketHandler; +import leaf.cosmere.surgebinding.common.registries.*; +import net.minecraft.resources.ResourceLocation; +import net.minecraftforge.common.capabilities.RegisterCapabilitiesEvent; +import net.minecraftforge.eventbus.api.IEventBus; +import net.minecraftforge.fml.ModLoadingContext; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.config.ModConfig; +import net.minecraftforge.fml.event.config.ModConfigEvent; +import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; +import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; + +@Mod(Surgebinding.MODID) +public class Surgebinding implements IModModule +{ + public static final String MODID = "surgebinding"; + + public static Surgebinding instance; + + public final Version versionNumber; + private final SurgebindingPacketHandler packetHandler; + + public Surgebinding() + { + Cosmere.addModule(instance = this); + + SurgebindingConfigs.registerConfigs(ModLoadingContext.get()); + + IEventBus modBus = FMLJavaModLoadingContext.get().getModEventBus(); + modBus.addListener(this::commonSetup); + modBus.addListener(this::onConfigReload); + modBus.addListener(this::onConfigLoad); + modBus.addListener(this::onAddCaps); + + //Registries + SurgebindingBlocks.BLOCKS.register(modBus); + SurgebindingItems.ITEMS.register(modBus); + SurgebindingEntityTypes.ENTITY_TYPES.register(modBus); + SurgebindingAttributes.ATTRIBUTES.register(modBus); + SurgebindingManifestations.MANIFESTATIONS.register(modBus); + + SurgebindingBiomes.BIOMES.register(modBus); + SurgebindingBiomeModifiers.BIOME_MODIFIER_SERIALIZERS.register(modBus); + + SurgebindingFeatures.CONFIGURED_FEATURES.register(modBus); + SurgebindingFeatures.PLACED_FEATURES.register(modBus); + SurgebindingCreativeTabs.CREATIVE_TABS.register(modBus); + + SurgebindingArgumentTypes.ARGUMENT_TYPE_INFOS.register(modBus); + + SurgebindingDimensions.register(); + + versionNumber = new Version(ModLoadingContext.get().getActiveContainer()); + packetHandler = new SurgebindingPacketHandler(); + } + + public static ResourceLocation rl(String path) + { + return new ResourceLocation(Surgebinding.MODID, path); + } + + @Override + public String getName() + { + return "Surgebinding"; + } + + @Override + public ISpiritwebSubmodule makeSubmodule() + { + return new SurgebindingSpiritwebSubmodule(); + } + + @Override + public Version getVersion() + { + return versionNumber; + } + + public static SurgebindingPacketHandler packetHandler() + { + return instance.packetHandler; + } + + private void commonSetup(FMLCommonSetupEvent event) + { + CosmereAPI.logger.info("Cosmere: Surgebinding module Version {} initializing...", versionNumber); + + event.enqueueWork(() -> + { + + }); + + packetHandler.initialize(); + } + + private void onConfigLoad(ModConfigEvent configEvent) + { + ModConfig config = configEvent.getConfig(); + if (config.getModId().equals(MODID) && config instanceof CosmereModConfig cosmereModConfig) + { + cosmereModConfig.clearCache(); + } + } + + private void onConfigReload(ModConfigEvent.Reloading configEvent) + { + ModConfig config = configEvent.getConfig(); + if (config.getModId().equals(MODID) && config instanceof CosmereModConfig cosmereModConfig) + { + cosmereModConfig.clearCache(); + } + } + + + private void onAddCaps(RegisterCapabilitiesEvent capabilitiesEvent) + { + capabilitiesEvent.register(IRoshar.class); + } +} \ No newline at end of file diff --git a/src/surgebinding/java/leaf/cosmere/surgebinding/common/blocks/GemBlock.java b/src/surgebinding/java/leaf/cosmere/surgebinding/common/blocks/GemBlock.java new file mode 100644 index 000000000..3f286f57e --- /dev/null +++ b/src/surgebinding/java/leaf/cosmere/surgebinding/common/blocks/GemBlock.java @@ -0,0 +1,28 @@ +/* + * File updated ~ 8 - 10 - 2022 ~ Leaf + */ + +package leaf.cosmere.surgebinding.common.blocks; + +import leaf.cosmere.api.IHasGemType; +import leaf.cosmere.api.Roshar; +import leaf.cosmere.common.blocks.BaseBlock; +import leaf.cosmere.common.properties.PropTypes; +import net.minecraft.world.level.block.SoundType; + +public class GemBlock extends BaseBlock implements IHasGemType +{ + private final Roshar.Gemstone gemType; + + public GemBlock(Roshar.Gemstone gemType) + { + super(PropTypes.Blocks.METAL.get(), SoundType.METAL, 3F, 3F); + this.gemType = gemType; + } + + @Override + public Roshar.Gemstone getGemType() + { + return gemType; + } +} diff --git a/src/surgebinding/java/leaf/cosmere/surgebinding/common/blocks/GemOreBlock.java b/src/surgebinding/java/leaf/cosmere/surgebinding/common/blocks/GemOreBlock.java new file mode 100644 index 000000000..812e0fc2f --- /dev/null +++ b/src/surgebinding/java/leaf/cosmere/surgebinding/common/blocks/GemOreBlock.java @@ -0,0 +1,28 @@ +/* + * File updated ~ 8 - 10 - 2022 ~ Leaf + */ + +package leaf.cosmere.surgebinding.common.blocks; + +import leaf.cosmere.api.IHasGemType; +import leaf.cosmere.api.Roshar; +import leaf.cosmere.common.properties.PropTypes; +import net.minecraft.util.valueproviders.UniformInt; +import net.minecraft.world.level.block.DropExperienceBlock; + +public class GemOreBlock extends DropExperienceBlock implements IHasGemType +{ + private final Roshar.Gemstone gemType; + + public GemOreBlock(Roshar.Gemstone gemType) + { + super(PropTypes.Blocks.ORE.get().strength(3f, 3f).requiresCorrectToolForDrops(), UniformInt.of(0, 2)); + this.gemType = gemType; + } + + @Override + public Roshar.Gemstone getGemType() + { + return gemType; + } +} diff --git a/src/surgebinding/java/leaf/cosmere/surgebinding/common/blocks/LavisPolypBlock.java b/src/surgebinding/java/leaf/cosmere/surgebinding/common/blocks/LavisPolypBlock.java new file mode 100644 index 000000000..646415d97 --- /dev/null +++ b/src/surgebinding/java/leaf/cosmere/surgebinding/common/blocks/LavisPolypBlock.java @@ -0,0 +1,52 @@ +/* + * File updated ~ 10 - 8 - 2024 ~ Leaf + */ + +package leaf.cosmere.surgebinding.common.blocks; + +import net.minecraft.core.BlockPos; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.HorizontalDirectionalBlock; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.block.state.properties.DirectionProperty; +import net.minecraft.world.level.material.MapColor; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.phys.shapes.VoxelShape; +import org.jetbrains.annotations.NotNull; + +public class LavisPolypBlock extends HorizontalDirectionalBlock +{ + public static final DirectionProperty FACING = HorizontalDirectionalBlock.FACING; + public static final VoxelShape SHAPE; + + public LavisPolypBlock() + { + super(BlockBehaviour.Properties.of().mapColor(MapColor.GRASS).noCollission()); + } + + @Override + public @NotNull VoxelShape getShape(@NotNull BlockState pState, @NotNull BlockGetter pLevel, @NotNull BlockPos pPos, @NotNull CollisionContext pContext) + { + return SHAPE; + } + + public BlockState getStateForPlacement(BlockPlaceContext pContext) + { + return this.defaultBlockState().setValue(FACING, pContext.getHorizontalDirection().getOpposite()); + } + + protected void createBlockStateDefinition(StateDefinition.Builder pBuilder) + { + pBuilder.add(FACING); + } + + static + { + SHAPE = Shapes.box(0.25, 0, 0.25, 0.75, 0.375, 0.75); + } +} diff --git a/src/surgebinding/java/leaf/cosmere/surgebinding/common/blocks/PrickletacBlock.java b/src/surgebinding/java/leaf/cosmere/surgebinding/common/blocks/PrickletacBlock.java new file mode 100644 index 000000000..06a93d759 --- /dev/null +++ b/src/surgebinding/java/leaf/cosmere/surgebinding/common/blocks/PrickletacBlock.java @@ -0,0 +1,66 @@ +/* + * File updated ~ 10 - 8 - 2024 ~ Leaf + */ + +package leaf.cosmere.surgebinding.common.blocks; + +import leaf.cosmere.common.blocks.BaseBlock; +import net.minecraft.core.BlockPos; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.block.state.properties.IntegerProperty; +import net.minecraft.world.level.material.MapColor; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.phys.shapes.VoxelShape; +import org.jetbrains.annotations.NotNull; + +public class PrickletacBlock extends BaseBlock +{ + public static final IntegerProperty STATE; + public static final VoxelShape SHAPE; + + public PrickletacBlock() + { + super(Properties.of().mapColor(MapColor.GRASS).noCollission()); + this.registerDefaultState(this.defaultBlockState().setValue(STATE, 1)); + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder pBuilder) + { + pBuilder.add(STATE); + } + + @Override + public @NotNull VoxelShape getShape(@NotNull BlockState pState, @NotNull BlockGetter pLevel, @NotNull BlockPos pPos, @NotNull CollisionContext pContext) + { + return SHAPE; + } + + @Override + public InteractionResult use(@NotNull BlockState pState, Level pLevel, @NotNull BlockPos pPos, @NotNull Player pPlayer, @NotNull InteractionHand pHand, @NotNull BlockHitResult pHit) + { + if (pLevel.isClientSide) + { + return InteractionResult.SUCCESS; + } + + pLevel.setBlockAndUpdate(pPos, pState.cycle(STATE)); + + return InteractionResult.SUCCESS; + } + + static + { + STATE = IntegerProperty.create("state", 1, 3); + SHAPE = Shapes.box(0.25, 0, 0.375, 0.5625, 0.6875, 0.6875); + } +} diff --git a/src/surgebinding/java/leaf/cosmere/surgebinding/common/blocks/RockbudVariantBlock.java b/src/surgebinding/java/leaf/cosmere/surgebinding/common/blocks/RockbudVariantBlock.java new file mode 100644 index 000000000..bca28c232 --- /dev/null +++ b/src/surgebinding/java/leaf/cosmere/surgebinding/common/blocks/RockbudVariantBlock.java @@ -0,0 +1,54 @@ +/* + * File updated ~ 10 - 8 - 2024 ~ Leaf + */ + +package leaf.cosmere.surgebinding.common.blocks; + +import leaf.cosmere.common.blocks.BaseBlock; +import net.minecraft.core.BlockPos; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.block.state.properties.IntegerProperty; +import net.minecraft.world.level.material.MapColor; +import net.minecraft.world.phys.BlockHitResult; +import org.jetbrains.annotations.NotNull; + +public class RockbudVariantBlock extends BaseBlock +{ + public static final IntegerProperty STATE; + + public RockbudVariantBlock() + { + super(Properties.of().mapColor(MapColor.GRASS).noCollission()); + this.registerDefaultState(this.defaultBlockState().setValue(STATE, 1)); + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder pBuilder) + { + pBuilder.add(STATE); + } + + @Override + public InteractionResult use(@NotNull BlockState pState, Level pLevel, @NotNull BlockPos pPos, @NotNull Player pPlayer, @NotNull InteractionHand pHand, @NotNull BlockHitResult pHit) + { + if (pLevel.isClientSide) + { + return InteractionResult.SUCCESS; + } + + pLevel.setBlockAndUpdate(pPos, pState.cycle(STATE)); + + return InteractionResult.SUCCESS; + } + + static + { + STATE = IntegerProperty.create("state", 1, 6); + } +} diff --git a/src/surgebinding/java/leaf/cosmere/surgebinding/common/blocks/VinebudBlock.java b/src/surgebinding/java/leaf/cosmere/surgebinding/common/blocks/VinebudBlock.java new file mode 100644 index 000000000..e03c2f9a3 --- /dev/null +++ b/src/surgebinding/java/leaf/cosmere/surgebinding/common/blocks/VinebudBlock.java @@ -0,0 +1,67 @@ +/* + * File updated ~ 10 - 8 - 2024 ~ Leaf + */ + +package leaf.cosmere.surgebinding.common.blocks; + +import leaf.cosmere.common.blocks.BaseBlock; +import net.minecraft.core.BlockPos; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.block.state.properties.IntegerProperty; +import net.minecraft.world.level.material.MapColor; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.phys.shapes.VoxelShape; +import org.jetbrains.annotations.NotNull; + +public class VinebudBlock extends BaseBlock +{ + public static final IntegerProperty STATE; + public static final VoxelShape SHAPE; + + public VinebudBlock() + { + super(BlockBehaviour.Properties.of().mapColor(MapColor.GRASS).noCollission()); + this.registerDefaultState(this.defaultBlockState().setValue(STATE, 1)); + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder pBuilder) + { + pBuilder.add(STATE); + } + + @Override + public @NotNull VoxelShape getShape(@NotNull BlockState pState, @NotNull BlockGetter pLevel, @NotNull BlockPos pPos, @NotNull CollisionContext pContext) + { + return SHAPE; + } + + @Override + public InteractionResult use(@NotNull BlockState pState, Level pLevel, @NotNull BlockPos pPos, @NotNull Player pPlayer, @NotNull InteractionHand pHand, @NotNull BlockHitResult pHit) + { + if (pLevel.isClientSide) + { + return InteractionResult.SUCCESS; + } + + pLevel.setBlockAndUpdate(pPos, pState.cycle(STATE)); + + return InteractionResult.SUCCESS; + } + + static + { + STATE = IntegerProperty.create("state", 1, 4); + SHAPE = Shapes.box(0.1875, 0, 0.1875, 0.8125, 0.625, 0.8125); + } +} diff --git a/src/surgebinding/java/leaf/cosmere/surgebinding/common/capabilities/DynamicShardbladeData.java b/src/surgebinding/java/leaf/cosmere/surgebinding/common/capabilities/DynamicShardbladeData.java new file mode 100644 index 000000000..dec17417a --- /dev/null +++ b/src/surgebinding/java/leaf/cosmere/surgebinding/common/capabilities/DynamicShardbladeData.java @@ -0,0 +1,99 @@ +/* + * File updated ~ 6 - 2 - 2025 ~ Leaf + */ + +package leaf.cosmere.surgebinding.common.capabilities; + +import leaf.cosmere.api.math.MathHelper; +import leaf.cosmere.surgebinding.client.render.model.ShardbladeModel; +import leaf.cosmere.surgebinding.common.items.ShardbladeDynamicItem; +import net.minecraft.core.Direction; +import net.minecraft.nbt.CompoundTag; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.capabilities.ICapabilityProvider; +import net.minecraftforge.common.util.INBTSerializable; +import net.minecraftforge.common.util.LazyOptional; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +public class DynamicShardbladeData implements ICapabilityProvider, INBTSerializable, IShardbladeDynamicData +{ + private final LazyOptional opt = LazyOptional.of(() -> this); + + private CompoundTag nbt; + + private String bladeID; + private String handleID; + private String pommelID; + private String crossGuardID; + + public DynamicShardbladeData() + { + this.nbt = new CompoundTag(); + + this.bladeID = "blade_" + MathHelper.randomInt(1, ShardbladeModel.TOTAL_BLADE_IDS); + this.handleID = "handle_" + MathHelper.randomInt(1, ShardbladeModel.TOTAL_HANDLE_IDS); + this.pommelID = "pommel_" + MathHelper.randomInt(1, ShardbladeModel.TOTAL_POMMEL_IDS); + this.crossGuardID = "crossguard_" + MathHelper.randomInt(1, ShardbladeModel.TOTAL_CROSS_GUARD_IDS); + } + + + @Nonnull + @Override + public LazyOptional getCapability(@Nonnull Capability capability, @Nullable Direction facing) + { + return ShardbladeDynamicItem.CAPABILITY.orEmpty(capability, opt); + } + + @Override + public CompoundTag serializeNBT() + { + if (this.nbt == null) + { + this.nbt = new CompoundTag(); + } + + this.nbt.putString("bladeID", this.bladeID); + this.nbt.putString("handleID", this.handleID); + this.nbt.putString("pommelID", this.pommelID); + this.nbt.putString("crossguardID", this.crossGuardID); + + return this.nbt; + } + + @Override + public void deserializeNBT(CompoundTag nbt) + { + this.nbt = nbt; + + this.bladeID = nbt.getString("bladeID"); + this.handleID = nbt.getString("handleID"); + this.pommelID = nbt.getString("pommelID"); + this.crossGuardID = nbt.getString("crossguardID"); + } + + @Override + public String getBladeID() + { + return bladeID; + } + + @Override + public String getHandleID() + { + return handleID; + } + + @Override + public String getPommelID() + { + return pommelID; + } + + @Override + public String getCrossGuardID() + { + return crossGuardID; + } +} \ No newline at end of file diff --git a/src/surgebinding/java/leaf/cosmere/surgebinding/common/capabilities/IShardbladeDynamicData.java b/src/surgebinding/java/leaf/cosmere/surgebinding/common/capabilities/IShardbladeDynamicData.java new file mode 100644 index 000000000..14d08b81e --- /dev/null +++ b/src/surgebinding/java/leaf/cosmere/surgebinding/common/capabilities/IShardbladeDynamicData.java @@ -0,0 +1,19 @@ +/* + * File updated ~ 6 - 2 - 2025 ~ Leaf + */ + +package leaf.cosmere.surgebinding.common.capabilities; + +import net.minecraft.nbt.CompoundTag; +import net.minecraftforge.common.util.INBTSerializable; + +public interface IShardbladeDynamicData extends INBTSerializable +{ + String getBladeID(); + + String getHandleID(); + + String getPommelID(); + + String getCrossGuardID(); +} diff --git a/src/surgebinding/java/leaf/cosmere/surgebinding/common/capabilities/SurgebindingSpiritwebSubmodule.java b/src/surgebinding/java/leaf/cosmere/surgebinding/common/capabilities/SurgebindingSpiritwebSubmodule.java new file mode 100644 index 000000000..492c63bae --- /dev/null +++ b/src/surgebinding/java/leaf/cosmere/surgebinding/common/capabilities/SurgebindingSpiritwebSubmodule.java @@ -0,0 +1,438 @@ +/* + * File updated ~ 5 - 3 - 2025 ~ Leaf + */ + +package leaf.cosmere.surgebinding.common.capabilities; + +import leaf.cosmere.api.ISpiritwebSubmodule; +import leaf.cosmere.api.Manifestations; +import leaf.cosmere.api.helpers.EffectsHelper; +import leaf.cosmere.api.spiritweb.ISpiritweb; +import leaf.cosmere.common.items.CapWrapper; +import leaf.cosmere.surgebinding.common.capabilities.ideals.RadiantStateManager; +import leaf.cosmere.surgebinding.common.config.SurgebindingConfigs; +import leaf.cosmere.surgebinding.common.items.GemstoneItem; +import leaf.cosmere.surgebinding.common.items.tiers.ShardplateArmorMaterial; +import leaf.cosmere.surgebinding.common.manifestation.SurgeProgression; +import leaf.cosmere.surgebinding.common.registries.SurgebindingDimensions; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.util.Mth; +import net.minecraft.world.Container; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ArmorItem; +import net.minecraft.world.item.ItemStack; +import net.minecraftforge.event.ServerChatEvent; +import net.minecraftforge.items.wrapper.PlayerInvWrapper; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.stream.Stream; + +public class SurgebindingSpiritwebSubmodule implements ISpiritwebSubmodule +{ + + //stormlight stored + private int stormlightStored = 0; + + private boolean herald = false; + + //Since I'm referencing it so often. For readability if nothing else + int maxPlayerStormlight = SurgebindingConfigs.SERVER.PLAYER_MAX_STORMLIGHT.get(); + + //Somewhat temporary value. How fast stormlight is drawn in/breathed out. Maybe make this a config value? + int drawSpeed = SurgebindingConfigs.SERVER.PLAYER_DRAW_SPEED.get(); + + //a little ew, I'd rather this in an enum utils, but it's the only place that needs it + public static final ShardplateArmorMaterial[] ARMOR_MATERIALS = ShardplateArmorMaterial.values(); + RadiantStateManager idealsManager = new RadiantStateManager(); + private ISpiritweb spiritweb; + + public static SurgebindingSpiritwebSubmodule getSubmodule(ISpiritweb data) + { + return (SurgebindingSpiritwebSubmodule) data.getSubmodule(Manifestations.ManifestationTypes.SURGEBINDING); + } + + public boolean isHerald() + { + return herald; + } + + public boolean isOathed() + { + //boolean anySurges = SurgebindingManifestations.SURGEBINDING_POWERS.values().stream().anyMatch((manifestation -> spiritweb.hasManifestation(manifestation.getManifestation()))); + return idealsManager.getOrder() != null; + } + public int getIdeal() + { + return idealsManager.getIdeal(); + } + + @Override + public void deserialize(ISpiritweb spiritweb) + { + this.spiritweb = spiritweb; + final CompoundTag compoundTag = spiritweb.getCompoundTag(); + stormlightStored = compoundTag.getInt("stored_stormlight"); + idealsManager.deserialize(spiritweb); + + this.herald = compoundTag.contains("herald") && compoundTag.getBoolean("herald"); + } + + @Override + public void serialize(ISpiritweb spiritweb) + { + final CompoundTag compoundTag = spiritweb.getCompoundTag(); + + compoundTag.putInt("stored_stormlight", stormlightStored); + idealsManager.serialize(spiritweb); + + //don't store extra data if we don't need to + if (herald) + { + compoundTag.putBoolean("herald", true); + } + else if (compoundTag.contains("herald")) + { + compoundTag.remove("herald"); + } + } + + + @Override + public void tickServer(ISpiritweb spiritweb) + { + final LivingEntity livingEntity = spiritweb.getLiving(); + final boolean surgebindingActiveTick = (livingEntity.tickCount + Manifestations.ManifestationTypes.SURGEBINDING.getID()) % 20 == 0; + + //tick stormlight + if (isOathed()) + { + + //Moved the highstorm check into it's own method that's called by draw stormlight, so the player can choose to draw in stormlight from a highstorm. + + if (stormlightStored > 0 && surgebindingActiveTick) + { + //being hurt takes priority + if (livingEntity.getHealth() < livingEntity.getMaxHealth()) + { + //todo healing stormlight config + final int stormlightHealingCostMultiplier = 20; + + if (adjustStormlight(-stormlightHealingCostMultiplier, true)) + { + //todo stormlight healing better + SurgeProgression.heal(livingEntity, livingEntity.getHealth() + 1); + } + } + //otherwise conditional effects + else + { + if (livingEntity.getCombatTracker().inCombat) + { + //todo combat effect cost + //todo replace with non-vanilla effects + livingEntity.addEffect(EffectsHelper.getNewEffect(MobEffects.DAMAGE_BOOST, 0)); + livingEntity.addEffect(EffectsHelper.getNewEffect(MobEffects.MOVEMENT_SPEED, 0)); + livingEntity.addEffect(EffectsHelper.getNewEffect(MobEffects.JUMP, 0)); + adjustStormlight(-30, true); + } + else if (livingEntity.isUnderWater()) + { + //todo replace with non-vanilla effects + livingEntity.addEffect(EffectsHelper.getNewEffect(MobEffects.WATER_BREATHING, 0)); + //todo waterbreathing stormlight cost + adjustStormlight(-10, true); + } + else + { + //todo detect better based on what the player is doing? mining means haste, + //travelling means movement etc. Not sure if that's really feasible though + //todo replace with non-vanilla effects + livingEntity.addEffect(EffectsHelper.getNewEffect(MobEffects.DIG_SPEED, 0)); + livingEntity.addEffect(EffectsHelper.getNewEffect(MobEffects.MOVEMENT_SPEED, 0)); + livingEntity.addEffect(EffectsHelper.getNewEffect(MobEffects.JUMP, 0)); + adjustStormlight(-30, true); + } + } + + int drainRate = SurgebindingConfigs.SERVER.STORMLIGHT_DRAIN_RATE.get(); + //todo maybe reducing cost based on how many ideals they have sworn? + //int idealsSworn = idealsManager.getIdeal(); + + adjustStormlight(-(drainRate), true); + } + } + + //special effects for wearing shardplate. + + if (surgebindingActiveTick) + { + ItemStack helmet = livingEntity.getItemBySlot(EquipmentSlot.HEAD); + ItemStack breastplate = livingEntity.getItemBySlot(EquipmentSlot.CHEST); + ItemStack leggings = livingEntity.getItemBySlot(EquipmentSlot.LEGS); + ItemStack boots = livingEntity.getItemBySlot(EquipmentSlot.FEET); + + //check wearing full suit of armor + if (Stream.of(helmet, breastplate, leggings, boots).allMatch(armorStack -> !armorStack.isEmpty() && armorStack.getItem() instanceof ArmorItem)) + { + //check armor matches same material + for (ShardplateArmorMaterial material : ARMOR_MATERIALS) + { + if (Stream.of(helmet, breastplate, leggings, boots).allMatch((armorStack -> ((ArmorItem) armorStack.getItem()).getMaterial() == material))) + { + int amplifier = material == ShardplateArmorMaterial.DEADPLATE ? 0 : 1; + + //todo make our own effect for wearing shardplate + //todo replace with non-vanilla effects + livingEntity.addEffect(EffectsHelper.getNewEffect(MobEffects.MOVEMENT_SPEED, amplifier)); + livingEntity.addEffect(EffectsHelper.getNewEffect(MobEffects.DIG_SPEED, amplifier)); + livingEntity.addEffect(EffectsHelper.getNewEffect(MobEffects.DAMAGE_BOOST, amplifier)); + livingEntity.addEffect(EffectsHelper.getNewEffect(MobEffects.JUMP, amplifier)); + + //todo oathed radiant shardplate stormlight cost + //todo deadplate stormlight cost + //Didn't deadplate draw reallyy quickly from Kaladin when he was using the 'gauntlet' in the duel? + stormlightStored--; + break; + } + } + } + } + } + + @Override + public void drainInvestiture(ISpiritweb data, double strength) + { + //todo drain based on strength + stormlightStored = (int) (stormlightStored * 0.1f); + } + + + private void requestGemStormlight(ItemStack item, int amountDrawn) + { + GemstoneItem gemstoneItem = (GemstoneItem) item.getItem(); + + int availableSpace = maxPlayerStormlight - stormlightStored; + + if (availableSpace < amountDrawn) + { + amountDrawn = availableSpace; + } + + if (gemstoneItem.getCharge(item) >= amountDrawn) + { + gemstoneItem.adjustCharge(item, -amountDrawn); + stormlightStored += amountDrawn; + } + else + { + stormlightStored += gemstoneItem.getCharge(item); + gemstoneItem.setCharge(item, 0); + } + } + + //Called by RequestStormlight packet. + public void requestStormlight() + { + + final LivingEntity entity = spiritweb.getLiving(); + + + if (isInHighstorm(entity)) + { + if (maxPlayerStormlight - stormlightStored >= drawSpeed) + { + stormlightStored += drawSpeed; + } + else + { + stormlightStored += maxPlayerStormlight - stormlightStored; + } + } + else if (entity instanceof Player player) + { + + ItemStack item = entity.getItemInHand(InteractionHand.MAIN_HAND); + + if (item.getItem() instanceof GemstoneItem gemstoneItem && gemstoneItem.getCharge(item) != 0) + { + requestGemStormlight(item, drawSpeed); + } + else + { + List invItems = getGemItems(player); + + List chargedGems = invItems.stream() + .filter(gem -> ((GemstoneItem) gem.getItem()).getCharge(gem) > 0) + .toList(); + + int gemAmount = chargedGems.size(); + + if (!chargedGems.isEmpty()) + { + + int requestAmount = drawSpeed / gemAmount; + + for (ItemStack gem : chargedGems) + { + + requestGemStormlight(gem, requestAmount); + + } + } + + } + + } + + } + + + private void dispatchGemStormlight(ItemStack item, int amountDrawn) + { + GemstoneItem gemstoneItem = (GemstoneItem) item.getItem(); + + int availableSpace = gemstoneItem.getMaxCharge(item) - gemstoneItem.getCharge(item); + + if (availableSpace < amountDrawn) + { + amountDrawn = availableSpace; + } + + if (stormlightStored >= amountDrawn) + { + gemstoneItem.adjustCharge(item, amountDrawn); + adjustStormlight(-amountDrawn, true); + } + else + { + gemstoneItem.adjustCharge(item, stormlightStored); + stormlightStored = 0; + } + } + + //Called by DispatchStormlight packet. + public void dispatchStormlight() + { + + final LivingEntity entity = spiritweb.getLiving(); + + if (entity instanceof Player player) + { + + ItemStack handItem = player.getItemInHand(InteractionHand.MAIN_HAND); + + //If the hand item is a gemstone focus on that one. + if (handItem.getItem() instanceof GemstoneItem) + { + dispatchGemStormlight(handItem, drawSpeed); + } + //Otherwise affect all gemstoneItems in inventory. + else + { + List invItems = getGemItems(player); + + //Get gems that are not fully charged. + List unchargedGems = invItems.stream() + .filter(gem -> + { + GemstoneItem gemstoneItem = (GemstoneItem) gem.getItem(); + return (gemstoneItem.getMaxCharge(gem) - gemstoneItem.getCharge(gem)) > 0; + }).toList(); + + //If there are none, just breathe out into air. + if (unchargedGems.isEmpty()) + { + adjustStormlight(-drawSpeed, true); + } + else + { + int dispatchAmount = drawSpeed / unchargedGems.size(); + + //For every gem that is not fully charged. + for (ItemStack gem : unchargedGems) + { + dispatchGemStormlight(gem, dispatchAmount); + } + } + + } + + } + } + + //TODO Replace with proper method once highstorms have been added. + public static boolean isInHighstorm(LivingEntity entity) + { + return entity.level().isThundering() + && entity.level().dimension().equals(SurgebindingDimensions.ROSHAR_DIM_KEY) + && entity.level().isRainingAt(entity.blockPosition()); + } + + public static List getGemItems(Player player) + { + if (player == null) + { + return Collections.emptyList(); + } + + Container acc = new CapWrapper(new PlayerInvWrapper(player.getInventory())); + + List toReturn = new ArrayList<>(acc.getContainerSize()); + + for (int slot = 0; slot < acc.getContainerSize(); slot++) + { + ItemStack stackInSlot = acc.getItem(slot); + + if (!stackInSlot.isEmpty() && stackInSlot.getItem() instanceof GemstoneItem) + { + toReturn.add(stackInSlot); + } + } + return toReturn; + } + + + public int getStormlight() + { + return stormlightStored; + } + + public boolean adjustStormlight(int amountToAdjust, boolean doAdjust) + { + int stormlight = getStormlight(); + + final int newSLValue = stormlight + amountToAdjust; + if (newSLValue >= 0) + { + if (doAdjust) + { + stormlightStored = Mth.clamp(newSLValue, 0, maxPlayerStormlight); + } + + return true; + } + + return false; + } + + public void setStormlight(int amount) + { + stormlightStored = Mth.clamp(amount, 0, maxPlayerStormlight); + } + + public void onChatMessageReceived(ServerChatEvent event) + { + idealsManager.onChatMessageReceived(event); + } + + public void setHerald(boolean isHerald) + { + herald = isHerald; + } +} \ No newline at end of file diff --git a/src/surgebinding/java/leaf/cosmere/surgebinding/common/capabilities/ideals/RadiantStateManager.java b/src/surgebinding/java/leaf/cosmere/surgebinding/common/capabilities/ideals/RadiantStateManager.java new file mode 100644 index 000000000..7e134b433 --- /dev/null +++ b/src/surgebinding/java/leaf/cosmere/surgebinding/common/capabilities/ideals/RadiantStateManager.java @@ -0,0 +1,317 @@ +/* + * File updated ~ 4 - 2 - 2025 ~ Leaf + */ + +package leaf.cosmere.surgebinding.common.capabilities.ideals; + +import leaf.cosmere.api.CosmereAPI; +import leaf.cosmere.api.EnumUtils; +import leaf.cosmere.api.Roshar; +import leaf.cosmere.api.manifestation.Manifestation; +import leaf.cosmere.api.spiritweb.ISpiritweb; +import leaf.cosmere.common.cap.entity.SpiritwebCapability; +import leaf.cosmere.common.util.TaskQueueManager; +import leaf.cosmere.surgebinding.common.Surgebinding; +import leaf.cosmere.surgebinding.common.capabilities.ideals.order.WindrunnerIdealStateManager; +import leaf.cosmere.surgebinding.common.config.SurgebindingConfigs; +import leaf.cosmere.surgebinding.common.config.SurgebindingServerConfig; +import leaf.cosmere.surgebinding.common.registries.SurgebindingManifestations; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraftforge.event.ServerChatEvent; +import org.jetbrains.annotations.NotNull; + +public class RadiantStateManager +{ + private static ResourceLocation SWEAR_IDEAL = new ResourceLocation(Surgebinding.MODID, "swear_ideal"); + + private SpiritwebCapability spiritweb; + private Roshar.RadiantOrder order = null; + private int ideal = 0; + + public Roshar.RadiantOrder getOrder() + { + return order; + } + + public int getIdeal() + { + return ideal; + } + + public void serialize(ISpiritweb spiritweb) + { + final CompoundTag compoundTag = spiritweb.getCompoundTag(); + + if (order != null) + { + compoundTag.putInt("order", order.getID()); + } + else if (compoundTag.contains("order")) //remove tracking of order if it's null + { + compoundTag.remove("order"); + } + + compoundTag.putInt("ideal", ideal); + } + + public void deserialize(ISpiritweb spiritweb) + { + this.spiritweb = (SpiritwebCapability) spiritweb; + final CompoundTag spiritwebCompoundTag = spiritweb.getCompoundTag(); + this.order = spiritwebCompoundTag.contains("order") + ? Roshar.RadiantOrder.valueOf(spiritwebCompoundTag.getInt("order")).orElse(null) + : null; + this.ideal = spiritwebCompoundTag.getInt("ideal"); + } + + + public void onChatMessageReceived(ServerChatEvent event) + { + //players can swear an ideal by typing a specific message in chat + //it's more efficient to check if a chat message is relevant before checking + // if the player meets any requirements needed to do something with those messages + + //todo maybe we should check if the player is in the right dimension first? + + //todo + { + //a player can potentially bond _two_ spren, not just a single one + //this means they can have two sets of surges, and two sets of ideals + //so maybe it's fine to hard code to only two sets of radiant orders? + //todo config for allowing a second order + //tbd on the conditions required before a player can bond a second spren + } + + String playerMessage = SurgebindingServerConfig.cleanIdeal(event.getRawText()); + int idealToSwear = 0; + Roshar.RadiantOrder idealOrder = null; + + //every order's first ideal is the same + + boolean foundAssociatedIdeal = false; + + if (idealToSwear <= this.ideal) + { + return; + } + + //for each order + for (Roshar.RadiantOrder radiantOrder : EnumUtils.RADIANT_ORDERS) + { + if (foundAssociatedIdeal) + { + break; + } + + //for each ideal + for (int ideal = 1; ideal <= 5; ideal++) + { + String thisIdeal = SurgebindingConfigs.SERVER.getIdeal(ideal, radiantOrder.getID()); + if (thisIdeal.equals(SurgebindingServerConfig.IDEAL_NOT_IMPLEMENTED)) + { + //skip ideals that are not yet implemented + continue; + } + + if (playerMessage.contains(thisIdeal)) + { + //check if the message matches the ideal + //if it does, set idealToSwear to the ideal's index + //also set which order the ideal belongs to + //break out of the loop + idealToSwear = ideal; + + //if it's not the first ideal + if (idealToSwear != 1) + { + //only the first ideal is universal, + idealOrder = radiantOrder; + } + + foundAssociatedIdeal = true; + break; + } + } + } + + if (idealToSwear == 0) + { + //not relevant, exit + return; + } + + if (this.ideal > 2 && this.order == null) + { + CosmereAPI.logger.error("Player has sworn a higher ideal but has no order set?? How does this happen. Resetting to zero."); + this.ideal = 0; + } + + if (this.ideal == 0 && this.order != null) + { + CosmereAPI.logger.error("Player has an order despite swearing no oaths?. Resetting."); + this.order = null; + } + + //assuming we have found a message that matches trying to qualify for an ideal + boolean successfulSwear = false; + //check the current state of the player's spiritweb + //swearing the first or second ideal + if (this.order == null) + { + + //we want to know whether they are unoathed, or have sworn an ideal + //if they have sworn an ideal, we want to know which one + //ideal has to be zero, check if swearing the first ideal. + if (idealToSwear == 1 && this.ideal == 0) + { + successfulSwear = onTrySuccessfulSwear(idealToSwear, null); + } + else if (idealToSwear == 2 && this.ideal == 1) + { + successfulSwear = onTrySuccessfulSwear(idealToSwear, idealOrder); + } + // else we + + if (successfulSwear) + { + this.ideal++; + this.order = idealOrder; + onSuccessfulIdealSworn(spiritweb); + } + + //no need to continue + return; + } + + //else they must be trying to swear a higher ideal + if (this.order.equals(idealOrder)) + { + boolean swearingHigherIdeal = idealToSwear > 2; + //swearing a higher ideal + if (idealToSwear == this.ideal + 1) + { + successfulSwear = onTrySuccessfulSwear(idealToSwear, idealOrder); + } + + if (successfulSwear) + { + this.ideal++; + onSuccessfulIdealSworn(spiritweb); + } + else + { + //only the higher ideas tell you if words are accepted? + //todo translatable + event.setCanceled(true); + event.getPlayer().sendSystemMessage(Component.literal("THESE WORDS ARE NOT ACCEPTED.")); + } + } + } + + private boolean onTrySuccessfulSwear(int idealToSwear, Roshar.RadiantOrder idealOrder) + { + if (idealToSwear == 1 && idealOrder == null) + { + //swearing the first ideal + return true; + } + + switch (idealOrder) + { + case WINDRUNNER -> + { + return WindrunnerIdealStateManager.validateIdeal(spiritweb, idealToSwear); + } + case SKYBREAKER -> + { + } + case DUSTBRINGER -> + { + } + case EDGEDANCER -> + { + } + case TRUTHWATCHER -> + { + } + case LIGHTWEAVER -> + { + } + case ELSECALLER -> + { + } + case WILLSHAPER -> + { + } + case STONEWARD -> + { + } + case BONDSMITH -> + { + } + } + + + return false; + } + + + private void onSuccessfulIdealSworn(@NotNull SpiritwebCapability spiritweb) + { + //rumble if ideal 2 + if (spiritweb.getLiving() instanceof ServerPlayer player) + { + //todo we should check the configs for whether this should be broadcasted to all players, or just the player themselves + + final Runnable work = () -> + { + //todo translatable + if (this.ideal != 1) + { + player.sendSystemMessage(Component.literal("THESE WORDS ARE ACCEPTED.")); + updatePowerState(); + } + //player.playSound(SoundEvents.LIGHTNING_BOLT_THUNDER, 1000, 0.8F + player.getRandom().nextFloat() * 0.2F); + player.level().playSound( + null,//null so it also sends to triggering player + player.getX(), + player.getY(), + player.getZ(), + SoundEvents.LIGHTNING_BOLT_THUNDER, + SoundSource.WEATHER, + 10000.0F, + 0.8F + player.getRandom().nextFloat() * 0.2F + ); + + + //todo - if the player is trying to swear an ideal, check if they have stormlight nearby to facilitate the process + { + //if they do, we should consume the stormlight and give them the appropriate buffs + } + { + //if they don't, we should inform them that they need more stormlight to swear an ideal? + //or maybe just allow the words to be accepted but don't heal them or give them the buffs + } + + //todo spawn particle order glyph at player if higher ideal + + }; + + TaskQueueManager.submitDelayedTask(SWEAR_IDEAL, 60, new TaskQueueManager.OneOffTask(work)); + } + } + + private void updatePowerState() + { + Manifestation firstSurge = SurgebindingManifestations.SURGEBINDING_POWERS.get(this.order.getFirstSurge()).get(); + Manifestation secondSurge = SurgebindingManifestations.SURGEBINDING_POWERS.get(this.order.getSecondSurge()).get(); + + spiritweb.giveManifestation(firstSurge, getIdeal()); + spiritweb.giveManifestation(secondSurge, getIdeal()); + } +} diff --git a/src/surgebinding/java/leaf/cosmere/surgebinding/common/capabilities/ideals/order/WindrunnerIdealStateManager.java b/src/surgebinding/java/leaf/cosmere/surgebinding/common/capabilities/ideals/order/WindrunnerIdealStateManager.java new file mode 100644 index 000000000..5e83ed475 --- /dev/null +++ b/src/surgebinding/java/leaf/cosmere/surgebinding/common/capabilities/ideals/order/WindrunnerIdealStateManager.java @@ -0,0 +1,47 @@ +/* + * File updated ~ 4 - 2 - 2025 ~ Leaf + */ + +package leaf.cosmere.surgebinding.common.capabilities.ideals.order; + +import leaf.cosmere.common.cap.entity.SpiritwebCapability; +import leaf.cosmere.surgebinding.common.mixinAccess.RaidMixinAccess; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; + +public class WindrunnerIdealStateManager +{ + public static boolean validateIdeal(SpiritwebCapability spiritweb, int ideal) + { + switch (ideal) + { + default: + case 1: + return true; + case 2: + return ProtectThoseWhoCannotProtectThemselves(spiritweb); + case 3: + case 4: + case 5: + return false; + } + } + + private static boolean ProtectThoseWhoCannotProtectThemselves(SpiritwebCapability spiritweb) + { + final LivingEntity living = spiritweb.getLiving(); + + RaidMixinAccess raid = (RaidMixinAccess) ((ServerLevel) living.level()).getRaidAt(living.blockPosition()); + + if (raid != null && raid._cosmere$isHero((Player) living)) + { + return true; + } + + MobEffectInstance isHero = living.getEffect(MobEffects.HERO_OF_THE_VILLAGE); + return isHero != null; + } +} diff --git a/src/surgebinding/java/leaf/cosmere/surgebinding/common/capabilities/world/IRoshar.java b/src/surgebinding/java/leaf/cosmere/surgebinding/common/capabilities/world/IRoshar.java new file mode 100644 index 000000000..f97193308 --- /dev/null +++ b/src/surgebinding/java/leaf/cosmere/surgebinding/common/capabilities/world/IRoshar.java @@ -0,0 +1,13 @@ +/* + * File updated ~ 30 - 7 - 2023 ~ Leaf + */ + +package leaf.cosmere.surgebinding.common.capabilities.world; + +import net.minecraft.nbt.CompoundTag; +import net.minecraftforge.common.util.INBTSerializable; + +public interface IRoshar extends INBTSerializable +{ + +} diff --git a/src/surgebinding/java/leaf/cosmere/surgebinding/common/capabilities/world/RosharCapability.java b/src/surgebinding/java/leaf/cosmere/surgebinding/common/capabilities/world/RosharCapability.java new file mode 100644 index 000000000..cb014b935 --- /dev/null +++ b/src/surgebinding/java/leaf/cosmere/surgebinding/common/capabilities/world/RosharCapability.java @@ -0,0 +1,56 @@ +/* + * File updated ~ 30 - 7 - 2023 ~ Leaf + */ + +package leaf.cosmere.surgebinding.common.capabilities.world; + +import net.minecraft.nbt.CompoundTag; +import net.minecraft.world.level.Level; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.capabilities.CapabilityManager; +import net.minecraftforge.common.capabilities.CapabilityToken; +import net.minecraftforge.common.util.LazyOptional; + +import javax.annotation.Nonnull; + +public class RosharCapability implements IRoshar +{ + //Injection + public static final Capability CAPABILITY = CapabilityManager.get(new CapabilityToken<>() + { + }); + + Level m_level; + + CompoundTag m_nbt = null; + + public RosharCapability(Level level) + { + m_level = level; + } + + @Nonnull + public static LazyOptional get(Level level) + { + return level != null ? level.getCapability(RosharCapability.CAPABILITY, null) + : LazyOptional.empty(); + } + + + @Override + public CompoundTag serializeNBT() + { + if (m_nbt == null) + { + m_nbt = new CompoundTag(); + } + + return m_nbt; + } + + @Override + public void deserializeNBT(CompoundTag nbt) + { + m_nbt = nbt; + } +} diff --git a/src/surgebinding/java/leaf/cosmere/surgebinding/common/commands/SurgebindingCommands.java b/src/surgebinding/java/leaf/cosmere/surgebinding/common/commands/SurgebindingCommands.java new file mode 100644 index 000000000..b1e9fb543 --- /dev/null +++ b/src/surgebinding/java/leaf/cosmere/surgebinding/common/commands/SurgebindingCommands.java @@ -0,0 +1,23 @@ +/* + * File updated ~ 4 - 2 - 2025 ~ Leaf + */ + +package leaf.cosmere.surgebinding.common.commands; + +import com.mojang.brigadier.CommandDispatcher; +import leaf.cosmere.common.Cosmere; +import leaf.cosmere.surgebinding.common.commands.subcommands.HeraldCommand; +import net.minecraft.commands.CommandSourceStack; +import net.minecraft.commands.Commands; + + +public class SurgebindingCommands +{ + + public static void register(CommandDispatcher dispatcher) + { + dispatcher.register(Commands.literal(Cosmere.MODID) + .then(HeraldCommand.register(dispatcher)) + ); + } +} diff --git a/src/surgebinding/java/leaf/cosmere/surgebinding/common/commands/arguments/RadiantOrderArgumentType.java b/src/surgebinding/java/leaf/cosmere/surgebinding/common/commands/arguments/RadiantOrderArgumentType.java new file mode 100644 index 000000000..a70d94ddb --- /dev/null +++ b/src/surgebinding/java/leaf/cosmere/surgebinding/common/commands/arguments/RadiantOrderArgumentType.java @@ -0,0 +1,77 @@ +/* + * File updated ~ 4 - 2 - 2025 ~ Leaf + */ + +package leaf.cosmere.surgebinding.common.commands.arguments; + +import com.mojang.brigadier.StringReader; +import com.mojang.brigadier.arguments.ArgumentType; +import com.mojang.brigadier.context.CommandContext; +import com.mojang.brigadier.exceptions.CommandSyntaxException; +import com.mojang.brigadier.exceptions.DynamicCommandExceptionType; +import com.mojang.brigadier.suggestion.Suggestions; +import com.mojang.brigadier.suggestion.SuggestionsBuilder; +import leaf.cosmere.api.EnumUtils; +import leaf.cosmere.api.Roshar; +import net.minecraft.commands.SharedSuggestionProvider; +import net.minecraft.network.chat.Component; + +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.Locale; +import java.util.concurrent.CompletableFuture; + +public class RadiantOrderArgumentType implements ArgumentType +{ + private static final Collection EXAMPLES = Arrays.stream(Roshar.RadiantOrder.values()).map(Roshar.RadiantOrder::getName).toList(); + + @Override + public Collection getExamples() + { + return EXAMPLES; + } + + public static final DynamicCommandExceptionType INVALID_ORDER_EXCEPTION = + new DynamicCommandExceptionType((order) -> + Component.translatable("argument.surgebinding.order.invalid", order)); + + public static RadiantOrderArgumentType createArgument() + { + return new RadiantOrderArgumentType(); + } + + @Override + public Roshar.RadiantOrder parse(StringReader reader) throws CommandSyntaxException + { + final String readerRead = reader.readUnquotedString().toUpperCase(Locale.ROOT); + + try + { + return Roshar.RadiantOrder.valueOf(readerRead); + } + catch (IllegalArgumentException e) + { + throw INVALID_ORDER_EXCEPTION.create(readerRead); + } + } + + @Override + public CompletableFuture listSuggestions(CommandContext context, SuggestionsBuilder builder) + { + return context.getSource() instanceof SharedSuggestionProvider + ? SharedSuggestionProvider.suggest(Collections.emptyList(), addSuggestions(builder)) + : Suggestions.empty(); + } + + public static SuggestionsBuilder addSuggestions(SuggestionsBuilder builder) + { + for (Roshar.RadiantOrder order : EnumUtils.RADIANT_ORDERS) + { + builder.suggest(order.getName()); + } + + builder.buildFuture(); + return builder; + } +} \ No newline at end of file diff --git a/src/surgebinding/java/leaf/cosmere/surgebinding/common/commands/subcommands/HeraldCommand.java b/src/surgebinding/java/leaf/cosmere/surgebinding/common/commands/subcommands/HeraldCommand.java new file mode 100644 index 000000000..c40896fb5 --- /dev/null +++ b/src/surgebinding/java/leaf/cosmere/surgebinding/common/commands/subcommands/HeraldCommand.java @@ -0,0 +1,84 @@ +/* + * File updated ~ 4 - 2 - 2025 ~ Leaf + */ + +package leaf.cosmere.surgebinding.common.commands.subcommands; + +import com.mojang.brigadier.CommandDispatcher; +import com.mojang.brigadier.builder.ArgumentBuilder; +import com.mojang.brigadier.context.CommandContext; +import com.mojang.brigadier.exceptions.CommandSyntaxException; +import leaf.cosmere.api.Roshar; +import leaf.cosmere.common.cap.entity.SpiritwebCapability; +import leaf.cosmere.common.commands.subcommands.ModCommand; +import leaf.cosmere.surgebinding.common.capabilities.SurgebindingSpiritwebSubmodule; +import leaf.cosmere.surgebinding.common.commands.arguments.RadiantOrderArgumentType; +import net.minecraft.commands.CommandSourceStack; +import net.minecraft.commands.Commands; +import net.minecraft.commands.arguments.EntityArgument; +import net.minecraft.server.level.ServerPlayer; + +import java.util.Collection; + +public class HeraldCommand extends ModCommand +{ + public static ArgumentBuilder register(CommandDispatcher dispatcher) + { + return Commands.literal("herald") + .requires(context -> context.hasPermission(2)) + .then(Commands.literal("make") + .then(Commands.argument("order", RadiantOrderArgumentType.createArgument()) + .executes(HeraldCommand::makeHerald) + .then(Commands.argument("target", EntityArgument.players()) + .executes(HeraldCommand::makeHerald)))) + .then(Commands.literal("remove") + .executes(HeraldCommand::removeHerald) + .then(Commands.argument("target", EntityArgument.players()) + .executes(HeraldCommand::removeHerald))); + } + + private static int makeHerald(CommandContext context) throws CommandSyntaxException + { + Collection players = getPlayers(context, 4); + + Roshar.RadiantOrder order = context.getArgument("order", Roshar.RadiantOrder.class); + + for (ServerPlayer player : players) + { + SpiritwebCapability.get(player).ifPresent((spiritweb) -> + { + SurgebindingSpiritwebSubmodule ssm = SurgebindingSpiritwebSubmodule.getSubmodule(spiritweb); + ssm.setHerald(true); + + spiritweb.syncToClients(player); + }); + } + + return SINGLE_SUCCESS; + } + + private static int removeHerald(CommandContext context) throws CommandSyntaxException + { + Collection players = getPlayers(context, 4); + + for (ServerPlayer player : players) + { + SpiritwebCapability.get(player).ifPresent((spiritweb) -> + { + SurgebindingSpiritwebSubmodule ssm = SurgebindingSpiritwebSubmodule.getSubmodule(spiritweb); + ssm.setHerald(false); + + spiritweb.syncToClients(player); + }); + } + + return SINGLE_SUCCESS; + } + + @Override + public int run(CommandContext context) throws CommandSyntaxException + { + return SINGLE_SUCCESS; + } + +} \ No newline at end of file diff --git a/src/surgebinding/java/leaf/cosmere/surgebinding/common/config/SurgebindingConfigs.java b/src/surgebinding/java/leaf/cosmere/surgebinding/common/config/SurgebindingConfigs.java new file mode 100644 index 000000000..749a87395 --- /dev/null +++ b/src/surgebinding/java/leaf/cosmere/surgebinding/common/config/SurgebindingConfigs.java @@ -0,0 +1,21 @@ +/* + * File updated ~ 27 - 2 - 2023 ~ Leaf + */ + +package leaf.cosmere.surgebinding.common.config; + +import leaf.cosmere.common.config.CosmereConfigHelper; +import net.minecraftforge.fml.ModContainer; +import net.minecraftforge.fml.ModLoadingContext; + +public class SurgebindingConfigs +{ + public static final SurgebindingServerConfig SERVER = new SurgebindingServerConfig(); + + public static void registerConfigs(ModLoadingContext modLoadingContext) + { + ModContainer modContainer = modLoadingContext.getActiveContainer(); + CosmereConfigHelper.registerConfig(modContainer, SERVER); + } + +} diff --git a/src/surgebinding/java/leaf/cosmere/surgebinding/common/config/SurgebindingServerConfig.java b/src/surgebinding/java/leaf/cosmere/surgebinding/common/config/SurgebindingServerConfig.java new file mode 100644 index 000000000..fcfa16e2b --- /dev/null +++ b/src/surgebinding/java/leaf/cosmere/surgebinding/common/config/SurgebindingServerConfig.java @@ -0,0 +1,191 @@ +/* + * File updated ~ 4 - 2 - 2025 ~ Leaf + */ + +package leaf.cosmere.surgebinding.common.config; + +import leaf.cosmere.common.config.ICosmereConfig; +import net.minecraftforge.common.ForgeConfigSpec; +import net.minecraftforge.fml.config.ModConfig.Type; + +import java.util.List; +import java.util.Locale; +import java.util.function.Predicate; + +public class SurgebindingServerConfig implements ICosmereConfig +{ + private final ForgeConfigSpec configSpec; + + public final ForgeConfigSpec.IntValue MAX_SHARDBLADES; + public final ForgeConfigSpec.IntValue PLAYER_MAX_STORMLIGHT; + public final ForgeConfigSpec.IntValue PLAYER_DRAW_SPEED; + public final ForgeConfigSpec.IntValue STORMLIGHT_DRAIN_RATE; + public final ForgeConfigSpec.IntValue PROGRESSION_BONEMEAL_COST; + public final ForgeConfigSpec.IntValue PROGRESSION_HEAL_COST; + public final ForgeConfigSpec.IntValue PROGRESSION_AGE_UP_COST; + public final ForgeConfigSpec.BooleanValue NIGHTBLOOD_SPOILERS; + + + //public final ForgeConfigSpec.ConfigValue> FIRST_IDEALS; + public final ForgeConfigSpec.ConfigValue> SECOND_IDEALS; + public final ForgeConfigSpec.ConfigValue> THIRD_IDEALS; + public final ForgeConfigSpec.ConfigValue> FOURTH_IDEALS; + public final ForgeConfigSpec.ConfigValue> FIFTH_IDEALS; + + public static final String IDEAL_NOT_IMPLEMENTED = "notyetimplemented"; + + SurgebindingServerConfig() + { + ForgeConfigSpec.Builder builder = new ForgeConfigSpec.Builder(); + builder.comment("Surgebinding Config. This config is synced between server and client.").push("surgebinding"); + + MAX_SHARDBLADES = builder.comment("How many shardblades total that the user can bond").defineInRange("shardbladeBondAmount", 10, 0, 20); + PLAYER_MAX_STORMLIGHT = builder.comment("How much stormlight can a player hold at once").defineInRange("playerMaxStormlight", 5000, 100, 20000); + PLAYER_DRAW_SPEED = builder.comment("How fast a player draws in or breathes out stormlight using keybinds.").defineInRange("playerDrawSpeed", 150, 5, 20000); + STORMLIGHT_DRAIN_RATE = builder.comment("How many points of stormlight drain per second").defineInRange("stormlightDrainRate", 5, 1, 100); + PROGRESSION_BONEMEAL_COST = builder.comment("How many points of stormlight to trigger the bonemeal effect").defineInRange("progressionBonemealStormlightCost", 20, 1, 1000); + PROGRESSION_HEAL_COST = builder.comment("How many points of stormlight per half a heart healed").defineInRange("progressionHealStormlightCost", 20, 1, 1000); + PROGRESSION_AGE_UP_COST = builder.comment("How many points of stormlight per age up on a baby mob").defineInRange("progressionAgeUpCost", 50, 1, 1000); + + NIGHTBLOOD_SPOILERS = builder.comment("Enable this to allow Nightblood to have certain feature, which is spoilers for WindAndTruth").define("nightbloodSpoilers", true); + + final Predicate elementValidator = o -> o instanceof String; + + SECOND_IDEALS = builder.defineList( + "second_ideals", + List.of( + "I will protect those who cannot protect themselves.", //windrunner + "I will put the law before all else.", //skybreaker + "I will seek self-mastery", //dustbringer + "I will remember those who have been forgotten", //edgedancer + "I will seek the truth", //truthwatcher //todo better? + IDEAL_NOT_IMPLEMENTED, //lightweaver + "I will reach my potential", //elsecaller + "I will seek freedom for those in bondage.", //willshaper + "I will stand when others fall.", //stoneward + "I will unite instead of divide." //bondsmith + ), + elementValidator); + + THIRD_IDEALS = builder.defineList( + "third_ideals", + List.of( + "I will protect even those I hate, so long as it is right.", //windrunner + IDEAL_NOT_IMPLEMENTED, //skybreaker + "I will strive to create rather than destroy", //dustbringer + "I will listen to those who have been ignored.", //edgedancer + IDEAL_NOT_IMPLEMENTED, //truthwatcher + IDEAL_NOT_IMPLEMENTED, //lightweaver + "I will achieve my goals, no matter the cost", //elsecaller + IDEAL_NOT_IMPLEMENTED, //willshaper + "I will be the foundation on which others can build.", //stoneward + "I will take responsibility for what I have done. If I must fall, I will rise each time a better" //bondsmith + ), + elementValidator); + + FOURTH_IDEALS = builder.defineList( + "fourth_ideals", + List.of( + "I accept that there will be those I cannot protect.", //windrunner + IDEAL_NOT_IMPLEMENTED, //skybreaker + "I will accept that destruction is sometimes necessary", //dustbringer + IDEAL_NOT_IMPLEMENTED, //edgedancer + IDEAL_NOT_IMPLEMENTED, //truthwatcher + IDEAL_NOT_IMPLEMENTED, //lightweaver + "I will accept that some goals are unobtainable", //elsecaller + IDEAL_NOT_IMPLEMENTED, //willshaper + IDEAL_NOT_IMPLEMENTED, //stoneward + IDEAL_NOT_IMPLEMENTED //bondsmith + ), + elementValidator); + + FIFTH_IDEALS = builder.defineList( + "fifth_ideals", + List.of( + "I will protect myself, so that I may continue to protect others. ", //windrunner + "I am the law", //skybreaker + IDEAL_NOT_IMPLEMENTED, //dustbringer + IDEAL_NOT_IMPLEMENTED, //edgedancer + IDEAL_NOT_IMPLEMENTED, //truthwatcher + IDEAL_NOT_IMPLEMENTED, //lightweaver + IDEAL_NOT_IMPLEMENTED, //elsecaller + IDEAL_NOT_IMPLEMENTED, //willshaper + IDEAL_NOT_IMPLEMENTED, //stoneward + IDEAL_NOT_IMPLEMENTED //bondsmith + ), + elementValidator); + + + builder.pop(); + configSpec = builder.build(); + } + + @Override + public String getFileName() + { + return "SurgebindingServer"; + } + + @Override + public ForgeConfigSpec getConfigSpec() + { + return configSpec; + } + + @Override + public Type getConfigType() + { + return Type.SERVER; + } + + @Override + public void clearCache() + { + MAX_SHARDBLADES.clearCache(); + PLAYER_MAX_STORMLIGHT.clearCache(); + STORMLIGHT_DRAIN_RATE.clearCache(); + PROGRESSION_BONEMEAL_COST.clearCache(); + PROGRESSION_HEAL_COST.clearCache(); + PROGRESSION_AGE_UP_COST.clearCache(); + } + + public String getIdeal(int ideal, int order) + { + String idealString = null; + + switch (ideal) + { + default: + case 1: + idealString = "life before death, strength before weakness, journey before destination"; + break; + case 2: + idealString = SECOND_IDEALS.get().get(order); + break; + case 3: + idealString = THIRD_IDEALS.get().get(order); + break; + case 4: + idealString = FOURTH_IDEALS.get().get(order); + break; + case 5: + idealString = FIFTH_IDEALS.get().get(order); + break; + } + + return cleanIdeal(idealString); + } + + //todo move this to a utility class + public static String cleanIdeal(String idealString) + { + String cleanedString = idealString + .replace(" ", "") + .replace(",", "") + .replace(".", "") + .replace(";", "") + .toLowerCase(Locale.ROOT); + + return cleanedString; + } +} \ No newline at end of file diff --git a/src/surgebinding/java/leaf/cosmere/surgebinding/common/entity/Chull.java b/src/surgebinding/java/leaf/cosmere/surgebinding/common/entity/Chull.java new file mode 100644 index 000000000..783f214cf --- /dev/null +++ b/src/surgebinding/java/leaf/cosmere/surgebinding/common/entity/Chull.java @@ -0,0 +1,100 @@ +/* + * File updated ~ 8 - 11 - 2025 ~ Leaf + */ + +package leaf.cosmere.surgebinding.common.entity; + +import leaf.cosmere.surgebinding.common.registries.SurgebindingEntityTypes; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.entity.AgeableMob; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.Pose; +import net.minecraft.world.entity.ai.attributes.AttributeSupplier; +import net.minecraft.world.entity.ai.attributes.Attributes; +import net.minecraft.world.entity.animal.Animal; +import net.minecraft.world.entity.animal.horse.AbstractChestedHorse; +import net.minecraft.world.entity.animal.horse.AbstractHorse; +import net.minecraft.world.entity.monster.Monster; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.Vec3; +import org.jetbrains.annotations.Nullable; + +public class Chull extends AbstractChestedHorse +{ + public Chull(EntityType pEntityType, Level pLevel) + { + super(pEntityType, pLevel); + } + + public static AttributeSupplier.Builder createAttributes() + { + return Monster.createMonsterAttributes() + .add(Attributes.MOVEMENT_SPEED, (double) 0.35F) + .add(Attributes.FOLLOW_RANGE, 12.0D) + .add(Attributes.MAX_HEALTH, 24.0D) + .add(Attributes.JUMP_STRENGTH, 0.1D) + .add(Attributes.ATTACK_DAMAGE, 5.0D); + } + + public boolean canMate(Animal pOtherAnimal) + { + if (pOtherAnimal != this && pOtherAnimal instanceof Chull otherChull) + { + return this.canParent() && otherChull.canParent(); + } + + return false; + } + + @Override + public int getMaxSpawnClusterSize() + { + return 4; + } + + @Nullable + @Override + public AgeableMob getBreedOffspring(ServerLevel pLevel, AgeableMob pOtherParent) + { + EntityType entitytype = SurgebindingEntityTypes.CHULL.getEntityType(); + AbstractHorse abstracthorse = entitytype.create(pLevel); + this.setOffspringAttributes(pOtherParent, abstracthorse); + + //todo texture variants? + + return abstracthorse; + } + + @Override + protected void dropCustomDeathLoot(DamageSource pSource, int pLooting, boolean pRecentlyHit) + { + super.dropCustomDeathLoot(pSource, pLooting, pRecentlyHit); + + //chull chests?? + + //gems? + + //this.getAge() + + //todo baby chulls drop chips, adults drop marks + } + + @Override + protected Vec3 getLeashOffset() + { + return new Vec3(0.0D, (double) this.getEyeHeight(Pose.STANDING), (double) (this.getBbWidth() * 0.25F)); + } + + @Override + public float getEyeHeight(Pose pPose) + { + return getEyeHeight() * 0.1f; + } + + @Override + public double getPassengersRidingOffset() + { + return ((this.getBbHeight() / 2f) - 0.75d); + } +} diff --git a/src/surgebinding/java/leaf/cosmere/surgebinding/common/entity/spren/Cryptic.java b/src/surgebinding/java/leaf/cosmere/surgebinding/common/entity/spren/Cryptic.java new file mode 100644 index 000000000..6a7698fc9 --- /dev/null +++ b/src/surgebinding/java/leaf/cosmere/surgebinding/common/entity/spren/Cryptic.java @@ -0,0 +1,159 @@ +/* + * File updated ~ 14 - 1 - 2025 ~ Leaf + */ + +package leaf.cosmere.surgebinding.common.entity.spren; + +import leaf.cosmere.surgebinding.common.registries.SurgebindingItems; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.world.DifficultyInstance; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.*; +import net.minecraft.world.entity.ai.attributes.AttributeSupplier; +import net.minecraft.world.entity.ai.attributes.Attributes; +import net.minecraft.world.entity.ai.goal.*; +import net.minecraft.world.entity.ai.navigation.PathNavigation; +import net.minecraft.world.entity.ai.navigation.WallClimberNavigation; +import net.minecraft.world.entity.animal.Animal; +import net.minecraft.world.entity.monster.Monster; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.pathfinder.BlockPathTypes; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.Set; +import java.util.stream.Collectors; + +public class Cryptic extends TamableAnimal +{ + private static final Set TAMING_INGREDIENTS; + private SitWhenOrderedToGoal sitGoal; + + public Cryptic(EntityType pEntityType, Level pLevel) + { + super(pEntityType, pLevel); + this.setPathfindingMalus(BlockPathTypes.DANGER_FIRE, -1.0F); + this.setPathfindingMalus(BlockPathTypes.DAMAGE_FIRE, -1.0F); + } + + public static AttributeSupplier.Builder createAttributes() + { + return Monster.createMonsterAttributes() + .add(Attributes.MOVEMENT_SPEED, (double) 0.20000000298023224D) + .add(Attributes.FOLLOW_RANGE, 12.0D) + .add(Attributes.MAX_HEALTH, 24.0D) + .add(Attributes.JUMP_STRENGTH, 0.1D) + .add(Attributes.ATTACK_DAMAGE, 5.0D); + } + + @Override + public SpawnGroupData finalizeSpawn(ServerLevelAccessor pLevel, DifficultyInstance pDifficulty, MobSpawnType pReason, @Nullable SpawnGroupData pSpawnData, @Nullable CompoundTag pDataTag) + { + if (pSpawnData == null) + { + pSpawnData = new AgeableMob.AgeableMobGroupData(false); + } + return super.finalizeSpawn(pLevel, pDifficulty, pReason, pSpawnData, pDataTag); + } + + @Override + protected void registerGoals() + { + this.sitGoal = new SitWhenOrderedToGoal(this); + this.goalSelector.addGoal(0, new PanicGoal(this, 1.25D)); + this.goalSelector.addGoal(0, new FloatGoal(this)); + this.goalSelector.addGoal(1, new LookAtPlayerGoal(this, Player.class, 8.0F)); + this.goalSelector.addGoal(2, this.sitGoal); + this.goalSelector.addGoal(2, new FollowOwnerGoal(this, 1.0D, 5.0F, 1.0F, true)); +// this.goalSelector.addGoal(2, new FlyOntoTreeGoal(this, 1.0D)); // This goal seems to be missing from 1.19 +// this.goalSelector.addGoal(3, new LandOnOwnersShoulderGoal(this)); + this.goalSelector.addGoal(3, new FollowMobGoal(this, 1.0D, 3.0F, 7.0F)); + } + + @Override + protected PathNavigation createNavigation(Level pLevel) + { + return new WallClimberNavigation(this, pLevel); + } + + public InteractionResult mobInteract(Player pPlayer, InteractionHand pHand) + { + ItemStack itemstack = pPlayer.getItemInHand(pHand); +// System.out.println("Cryptic#mobInteract start itemStack:" + itemstack + " isTamed:" + this.isTame()); + if (!this.isTame() && TAMING_INGREDIENTS.contains(itemstack.getItem())) + { + if (!pPlayer.getAbilities().instabuild) + { + itemstack.shrink(1); + } + + if (!this.isSilent()) + { + this.level().playSound((Player) null, this.getX(), this.getY(), this.getZ(), SoundEvents.PARROT_EAT, this.getSoundSource(), 1.0F, 1.0F + (this.random.nextFloat() - this.random.nextFloat()) * 0.2F); + } + + if (!this.level().isClientSide) + { + if (this.random.nextInt(10) == 0 && !net.minecraftforge.event.ForgeEventFactory.onAnimalTame(this, pPlayer)) + { +// System.out.println("Cryptic#mobInteract isClient, setOwner:" + pPlayer); + this.tame(pPlayer); + this.level().broadcastEntityEvent(this, (byte) 7); + } + else + { +// System.out.println("Cryptic#mobInteract isClient, tame FAIL"); + this.level().broadcastEntityEvent(this, (byte) 6); + } + } + + return InteractionResult.sidedSuccess(this.level().isClientSide); + } + else if (this.isTame() && this.isOwnedBy(pPlayer)) + { + if (!this.level().isClientSide) + { +// System.out.println("Cryptic#mobInteract setOrderedToSit"); + this.setOrderedToSit(!this.isOrderedToSit()); + } + + return InteractionResult.sidedSuccess(this.level().isClientSide); + } + else + { + return super.mobInteract(pPlayer, pHand); + } + } + + @Override + public boolean isFood(ItemStack pStack) + { + return false; + } + + @Nullable + @Override + public AgeableMob getBreedOffspring(@NotNull ServerLevel pLevel, @NotNull AgeableMob pOtherParent) + { + return null; + } + + @Override + public boolean canMate(@NotNull Animal pOtherAnimal) + { + return false; + } + + static + { + TAMING_INGREDIENTS = SurgebindingItems.GEMSTONE_BROAMS.values().stream() + .map(registryItem -> registryItem.asItem()).collect(Collectors.toSet()); + } +} diff --git a/src/surgebinding/java/leaf/cosmere/surgebinding/common/entity/spren/Honorspren.java b/src/surgebinding/java/leaf/cosmere/surgebinding/common/entity/spren/Honorspren.java new file mode 100644 index 000000000..66d39ced9 --- /dev/null +++ b/src/surgebinding/java/leaf/cosmere/surgebinding/common/entity/spren/Honorspren.java @@ -0,0 +1,82 @@ +/* + * File updated ~ 14 - 1 - 2025 ~ Leaf + */ + +package leaf.cosmere.surgebinding.common.entity.spren; + +import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.animal.allay.Allay; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; + +public class Honorspren extends Allay +{ + public Honorspren(EntityType pEntityType, Level pLevel) + { + super(pEntityType, pLevel); + } + + @Override + public boolean canBeAffected(MobEffectInstance pEffectInstance) + { + return false; + } + + @Override + public boolean canBeHitByProjectile() + { + return false; + } + + @Override + public boolean canBeSeenByAnyone() + { + //TODO: make this only visible to the player it is bonded to? + return super.canBeSeenByAnyone(); + } + + @Override + public boolean canCollideWith(Entity pEntity) + { + return false; + } + + @Override + public boolean canBeSeenAsEnemy() + { + return false; + } + + @Override + public boolean canBeLeashed(Player pPlayer) + { + return false; + } + + @Override + public boolean canBeCollidedWith() + { + //todo: make this only collide with the player it is bonded to? + return false; + } + + @Override + public boolean canTakeItem(ItemStack pItemstack) + { + //return super.canTakeItem(pItemstack); + //TODO: make this only take items from the player it is bonded to? + //todo make it only able to take things once bond has progressed? + return false; + } + + @Override + public boolean hurt(DamageSource pSource, float pAmount) + { + //todo make this only damage from a very specific type of damage type, you know the one. + return false; + } +} diff --git a/src/surgebinding/java/leaf/cosmere/surgebinding/common/eventHandlers/SurgebindingCapabilitiesHandler.java b/src/surgebinding/java/leaf/cosmere/surgebinding/common/eventHandlers/SurgebindingCapabilitiesHandler.java new file mode 100644 index 000000000..142e7b63a --- /dev/null +++ b/src/surgebinding/java/leaf/cosmere/surgebinding/common/eventHandlers/SurgebindingCapabilitiesHandler.java @@ -0,0 +1,64 @@ +/* + * File updated ~ 30 - 7 - 2023 ~ Leaf + */ + +package leaf.cosmere.surgebinding.common.eventHandlers; + +import leaf.cosmere.api.Constants; +import leaf.cosmere.surgebinding.common.Surgebinding; +import leaf.cosmere.surgebinding.common.capabilities.world.IRoshar; +import leaf.cosmere.surgebinding.common.capabilities.world.RosharCapability; +import net.minecraft.core.Direction; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.world.level.Level; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.capabilities.ICapabilitySerializable; +import net.minecraftforge.common.util.LazyOptional; +import net.minecraftforge.event.AttachCapabilitiesEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; + +import javax.annotation.Nonnull; + +@Mod.EventBusSubscriber(modid = Surgebinding.MODID, bus = Mod.EventBusSubscriber.Bus.FORGE) +public class SurgebindingCapabilitiesHandler +{ + + + @SubscribeEvent + public static void attachWorldCapabilities(AttachCapabilitiesEvent event) + { + Level level = event.getObject(); + + if (event.getObject().dimension().location().toString().contains("roshar")) + { + event.addCapability(Constants.Resources.ROSHAR_CAP, new ICapabilitySerializable() + { + final RosharCapability roshar = new RosharCapability(level); + final LazyOptional rosharInstance = LazyOptional.of(() -> roshar); + + @Nonnull + @Override + public LazyOptional getCapability(@Nonnull Capability cap, @javax.annotation.Nullable Direction side) + { + return cap == RosharCapability.CAPABILITY ? (LazyOptional) rosharInstance + : LazyOptional.empty(); + } + + @Override + public CompoundTag serializeNBT() + { + return roshar.serializeNBT(); + } + + @Override + public void deserializeNBT(CompoundTag nbt) + { + roshar.deserializeNBT(nbt); + } + }); + } + + } + +} diff --git a/src/surgebinding/java/leaf/cosmere/surgebinding/common/eventHandlers/SurgebindingForgeEventsHandler.java b/src/surgebinding/java/leaf/cosmere/surgebinding/common/eventHandlers/SurgebindingForgeEventsHandler.java new file mode 100644 index 000000000..47c3c9703 --- /dev/null +++ b/src/surgebinding/java/leaf/cosmere/surgebinding/common/eventHandlers/SurgebindingForgeEventsHandler.java @@ -0,0 +1,99 @@ +/* + * File updated ~ 4 - 2 - 2025 ~ Leaf + */ + +package leaf.cosmere.surgebinding.common.eventHandlers; + +import leaf.cosmere.api.ISpiritwebSubmodule; +import leaf.cosmere.api.Manifestations; +import leaf.cosmere.common.cap.entity.SpiritwebCapability; +import leaf.cosmere.surgebinding.common.Surgebinding; +import leaf.cosmere.surgebinding.common.capabilities.SurgebindingSpiritwebSubmodule; +import leaf.cosmere.surgebinding.common.commands.SurgebindingCommands; +import leaf.cosmere.surgebinding.common.manifestation.SurgeGravitation; +import leaf.cosmere.surgebinding.common.manifestation.SurgeProgression; +import net.minecraft.world.entity.LivingEntity; +import net.minecraftforge.event.RegisterCommandsEvent; +import net.minecraftforge.event.ServerChatEvent; +import net.minecraftforge.event.entity.living.LivingAttackEvent; +import net.minecraftforge.event.entity.player.PlayerInteractEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; + +@Mod.EventBusSubscriber(modid = Surgebinding.MODID, bus = Mod.EventBusSubscriber.Bus.FORGE) +public class SurgebindingForgeEventsHandler +{ +/* + //todo fix roshar not respecting sleep ?? + @SubscribeEvent + public static void onSleepFinished(final SleepFinishedTimeEvent evt) + { + LevelAccessor levelAccessor = evt.getLevel(); + + if (levelAccessor instanceof ServerLevel serverLevel) + { + long newTime = evt.getNewTime(); + + ServerLevel level = serverLevel.getServer().getLevel(SurgebindingDimensions.ROSHAR_DIM_KEY); + if (level != null) + { + evt.setTimeAddition(600); + } + } + }*/ + + @SubscribeEvent + public static void onBlockInteract(PlayerInteractEvent.RightClickBlock event) + { + if (event.isCanceled()) + { + return; + } + + SurgeProgression.onBlockInteract(event); + } + + @SubscribeEvent + public static void registerCommands(RegisterCommandsEvent event) + { + SurgebindingCommands.register(event.getDispatcher()); + } + + @SubscribeEvent + public static void onEntityInteract(PlayerInteractEvent.EntityInteract event) + { + if (!(event.getTarget() instanceof LivingEntity target) || event.isCanceled()) + { + return; + } + + SurgeProgression.onEntityInteract(event); + } + + + //Attack event happens first + @SubscribeEvent + public static void onLivingAttackEvent(LivingAttackEvent event) + { + if (event.isCanceled()) + { + return; + } + + SurgeGravitation.onLivingAttackEvent(event); + } + + + @SubscribeEvent + public static void onServerChatEvent(ServerChatEvent event) + { + SpiritwebCapability.get(event.getPlayer()).ifPresent(spiritweb -> + { + final ISpiritwebSubmodule submodule = spiritweb.getSubmodule(Manifestations.ManifestationTypes.SURGEBINDING); + if (submodule instanceof SurgebindingSpiritwebSubmodule surgebinding) + { + surgebinding.onChatMessageReceived(event); + } + }); + } +} diff --git a/src/surgebinding/java/leaf/cosmere/surgebinding/common/eventHandlers/SurgebindingModEventHandler.java b/src/surgebinding/java/leaf/cosmere/surgebinding/common/eventHandlers/SurgebindingModEventHandler.java new file mode 100644 index 000000000..016dd721a --- /dev/null +++ b/src/surgebinding/java/leaf/cosmere/surgebinding/common/eventHandlers/SurgebindingModEventHandler.java @@ -0,0 +1,43 @@ +/* + * File updated ~ 14 - 1 - 2025 ~ Leaf + */ + +package leaf.cosmere.surgebinding.common.eventHandlers; + +import leaf.cosmere.api.EnumUtils; +import leaf.cosmere.api.Roshar; +import leaf.cosmere.surgebinding.common.Surgebinding; +import leaf.cosmere.surgebinding.common.entity.Chull; +import leaf.cosmere.surgebinding.common.entity.spren.Cryptic; +import leaf.cosmere.surgebinding.common.entity.spren.Honorspren; +import leaf.cosmere.surgebinding.common.registries.SurgebindingAttributes; +import leaf.cosmere.surgebinding.common.registries.SurgebindingEntityTypes; +import net.minecraft.world.entity.EntityType; +import net.minecraftforge.event.entity.EntityAttributeCreationEvent; +import net.minecraftforge.event.entity.EntityAttributeModificationEvent; +import net.minecraftforge.eventbus.api.EventPriority; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; + +@Mod.EventBusSubscriber(modid = Surgebinding.MODID, bus = Mod.EventBusSubscriber.Bus.MOD) +public class SurgebindingModEventHandler +{ + + @SubscribeEvent(priority = EventPriority.HIGH) + public static void onEntityAttributeModificationEvent(EntityAttributeModificationEvent event) + { + for (Roshar.Surges surge : EnumUtils.SURGES) + { + event.add(EntityType.PLAYER, SurgebindingAttributes.SURGEBINDING_ATTRIBUTES.get(surge).getAttribute()); + } + + } + + @SubscribeEvent + public static void entityAttributeEvent(EntityAttributeCreationEvent event) + { + event.put(SurgebindingEntityTypes.CHULL.get(), Chull.createAttributes().build()); + event.put(SurgebindingEntityTypes.CRYPTIC.get(), Cryptic.createAttributes().build()); + event.put(SurgebindingEntityTypes.HONORSPREN.get(), Honorspren.createAttributes().build()); + } +} diff --git a/src/surgebinding/java/leaf/cosmere/surgebinding/common/investiture/Highstorm.java b/src/surgebinding/java/leaf/cosmere/surgebinding/common/investiture/Highstorm.java new file mode 100644 index 000000000..5da6f3f33 --- /dev/null +++ b/src/surgebinding/java/leaf/cosmere/surgebinding/common/investiture/Highstorm.java @@ -0,0 +1,136 @@ +package leaf.cosmere.surgebinding.common.investiture; + +import leaf.cosmere.api.helpers.TimeHelper; +import leaf.cosmere.api.investiture.KineticInvestiture; +import leaf.cosmere.surgebinding.common.registries.SurgebindingDimensions; +import net.minecraft.core.Position; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.phys.Vec3; +import net.minecraftforge.eventbus.api.SubscribeEvent; + +public class Highstorm implements IInvCreator +{ + + public static Highstorm highstorm = new Highstorm(); + private double highstormX; + private final double HOME = 0; + + public Highstorm() + { + highstormX = 17750D; + } + + @SubscribeEvent + public void tick() + { + if(TimeHelper.isNthTick(SurgebindingDimensions.ROSHAR_DIM_KEY, 1,5D)) + { + if(highstormX + 3 > HOME + 35500D) + { + highstormX = HOME; + } + else + { + highstormX += 15; + } + } + + } + + public HighstormLocation getNearestHighstorm(Entity entity) + { + Vec3 lastChecked = new Vec3(highstormX, entity.position().y(), entity.position().z()); + double home = 0; + int num = 0; + while(!entity.position().closerThan(lastChecked,17750D)) + { + if((entity.position().x() - lastChecked.x()) > 0) + { + lastChecked = new Vec3( + highstormX + 35500, + entity.position().y(), + entity.position().z()); + num++; + home += 35500; + } + else + { + lastChecked = new Vec3( + highstormX - 35500, + entity.position().y(), + entity.position().z()); + num--; + home -= 35500; + } + } + return new HighstormLocation(lastChecked, home, num); + + } + + public static boolean isHighstorm(Entity entity) + { + if(entity.level().dimension().equals(SurgebindingDimensions.ROSHAR_DIM_KEY)) + { + if(Math.abs(entity.position().x - highstorm.highstormX) < 50.0) + { + return true; + } + } + return false; + } + + @Override + public KineticInvestiture newInvest(IInvContainer data) + { + KineticInvestiture investiture = new Stormlight(data, 500); + return investiture; + } + + @Override + public KineticInvestiture newInvest(IInfuseContainer data, double beu, double decay) + { + KineticInvestiture out = new Stormlight(data, beu); + out.setDecayRate(decay); + return out; + } + + @Override + public KineticInvestiture newInvest(IInfuseContainer data, double beu) + { + return new Stormlight(data, beu); + } + + public class HighstormLocation + { + public double home; + public int number; + public Vec3 pos; + + public HighstormLocation(double x, double home, int number) + { + pos = new Vec3(x, 0, 0); + this.home = home; + this.number = number; + } + + public HighstormLocation(Vec3 pos, double home, int number) + { + + } + + public Position getPosition() + { + return pos; + } + + public void setPos(Vec3 pos) + { + this.pos = pos; + } + + public void setYZ(Entity entity) + { + pos = new Vec3(pos.x(), entity.position().z(), entity.position().z()); + } + } +} diff --git a/src/surgebinding/java/leaf/cosmere/surgebinding/common/investiture/LightTransferer.java b/src/surgebinding/java/leaf/cosmere/surgebinding/common/investiture/LightTransferer.java new file mode 100644 index 000000000..78478b74c --- /dev/null +++ b/src/surgebinding/java/leaf/cosmere/surgebinding/common/investiture/LightTransferer.java @@ -0,0 +1,37 @@ +package leaf.cosmere.surgebinding.common.investiture; + +import leaf.cosmere.api.investiture.KineticInvestiture; +import leaf.cosmere.api.investiture.Transferer; + +public class LightTransferer extends Transferer +{ + public LightTransferer(KineticInvestiture investIn, IInvContainer containerOut, int transferRate, double decayRate, int cycles) + { + super(investIn, getInvestiture(investIn, containerOut, transferRate, decayRate), transferRate, cycles, containerOut.getMaxBEU()); + } + + private static KineticInvestiture getInvestiture(KineticInvestiture investIn, IInvContainer containerOut, int transferRate, double decayRate) + { + if(investIn instanceof Stormlight light) + { + return new Stormlight(containerOut, transferRate); + } + else if(investIn instanceof Towerlight light) + { + return new Towerlight(containerOut, transferRate); + } + else if(investIn instanceof Voidlight light) + { + return new Voidlight(containerOut, transferRate); + } + else + { + return new KineticInvestiture(containerOut, + investIn.getShard(), + investIn.getContainer().containerSource(), + transferRate, + investIn.getApplicableManifestations(), + decayRate); + } + } +} diff --git a/src/surgebinding/java/leaf/cosmere/surgebinding/common/investiture/Stormlight.java b/src/surgebinding/java/leaf/cosmere/surgebinding/common/investiture/Stormlight.java new file mode 100644 index 000000000..1bb3d721b --- /dev/null +++ b/src/surgebinding/java/leaf/cosmere/surgebinding/common/investiture/Stormlight.java @@ -0,0 +1,26 @@ +package leaf.cosmere.surgebinding.common.investiture; + +import leaf.cosmere.api.Manifestations; +import leaf.cosmere.api.investiture.KineticInvestiture; +import leaf.cosmere.api.investiture.InvHelpers; +import leaf.cosmere.api.spiritweb.ISpiritweb; +import leaf.cosmere.surgebinding.common.capabilities.SurgebindingSpiritwebSubmodule; +import leaf.cosmere.surgebinding.common.config.SurgebindingConfigs; +import net.minecraft.world.entity.LivingEntity; + +public class Stormlight extends KineticInvestiture +{ + public Stormlight(ISpiritweb container, + double beu) + { + super(container, + InvHelpers.Shard.HONOR, + beu, + Manifestations.ManifestArrayBuilder.getAllType(Manifestations.ManifestationTypes.SURGEBINDING)); + int decayRate; + + SurgebindingSpiritwebSubmodule ssm = (SurgebindingSpiritwebSubmodule) container.getSubmodule(Manifestations.ManifestationTypes.SURGEBINDING); + decayRate = (6 - ssm.getIdeal()) * SurgebindingConfigs.SERVER.STORMLIGHT_DRAIN_RATE.get() / 2; + super.setDecayRate(decayRate); + } +} diff --git a/src/surgebinding/java/leaf/cosmere/surgebinding/common/investiture/Towerlight.java b/src/surgebinding/java/leaf/cosmere/surgebinding/common/investiture/Towerlight.java new file mode 100644 index 000000000..8cfa82337 --- /dev/null +++ b/src/surgebinding/java/leaf/cosmere/surgebinding/common/investiture/Towerlight.java @@ -0,0 +1,23 @@ +package leaf.cosmere.surgebinding.common.investiture; + +import leaf.cosmere.api.Manifestations; +import leaf.cosmere.api.investiture.KineticInvestiture; +import leaf.cosmere.api.investiture.InvHelpers; +import leaf.cosmere.api.spiritweb.ISpiritweb; + +public class Towerlight extends KineticInvestiture +{ + public Towerlight(ISpiritweb container, + double beu) + { + super(container, + InvHelpers.Shard.HONOR, + beu, + Manifestations.ManifestArrayBuilder.getAllType(Manifestations.ManifestationTypes.SURGEBINDING)); + + //Decay rate is high, but towerlight constantly renews while in Urithiru. + //Meaning infinite light in the tower, but none once you leave. + super.setDecayRate(100000); + + } +} diff --git a/src/surgebinding/java/leaf/cosmere/surgebinding/common/investiture/Voidlight.java b/src/surgebinding/java/leaf/cosmere/surgebinding/common/investiture/Voidlight.java new file mode 100644 index 000000000..77d7ac894 --- /dev/null +++ b/src/surgebinding/java/leaf/cosmere/surgebinding/common/investiture/Voidlight.java @@ -0,0 +1,20 @@ +package leaf.cosmere.surgebinding.common.investiture; + +import leaf.cosmere.api.Manifestations; +import leaf.cosmere.api.investiture.KineticInvestiture; +import leaf.cosmere.api.investiture.InvHelpers; +import leaf.cosmere.api.spiritweb.ISpiritweb; + +public class Voidlight extends KineticInvestiture +{ + public Voidlight(ISpiritweb container, + int beu) + { + //As we start implementing voidbinding, add that to the list of manifestations. + //Not much is known about voidlight, but it's here for the future. + super(container, + InvHelpers.Shard.ODIUM, + beu, + Manifestations.ManifestArrayBuilder.getAllType(Manifestations.ManifestationTypes.SURGEBINDING)); + } +} diff --git a/src/surgebinding/java/leaf/cosmere/surgebinding/common/items/GemstoneItem.java b/src/surgebinding/java/leaf/cosmere/surgebinding/common/items/GemstoneItem.java new file mode 100644 index 000000000..7ca26e61e --- /dev/null +++ b/src/surgebinding/java/leaf/cosmere/surgebinding/common/items/GemstoneItem.java @@ -0,0 +1,191 @@ +/* + * File updated ~ 20 - 12 - 2024 ~ Leaf + */ + +package leaf.cosmere.surgebinding.common.items; + +import leaf.cosmere.api.IHasGemType; +import leaf.cosmere.api.Manifestations; +import leaf.cosmere.api.Roshar; +import leaf.cosmere.api.investiture.IInvCreator; +import leaf.cosmere.api.investiture.KineticInvestiture; +import leaf.cosmere.api.spiritweb.ISpiritweb; +import leaf.cosmere.common.cap.entity.SpiritwebCapability; +import leaf.cosmere.common.items.ChargeableItemBase; +import leaf.cosmere.common.items.InvestableItemBase; +import leaf.cosmere.common.properties.PropTypes; +import leaf.cosmere.surgebinding.common.config.SurgebindingConfigs; +import leaf.cosmere.surgebinding.common.investiture.Highstorm; +import leaf.cosmere.surgebinding.common.investiture.LightTransferer; +import leaf.cosmere.surgebinding.common.investiture.Stormlight; +import leaf.cosmere.surgebinding.common.registries.SurgebindingManifestations; +import net.minecraft.util.Mth; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.item.ItemEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Rarity; +import net.minecraft.world.level.Level; + +public class GemstoneItem extends ChargeableItemBase implements IHasGemType, IInvCreator +{ + private final Roshar.Gemstone gemstone; + private final Roshar.GemSize gemSize; + + public GemstoneItem(Roshar.Gemstone gemstone, Roshar.GemSize gemSize) + { + super(PropTypes.Items.SIXTY_FOUR.get().rarity(Rarity.UNCOMMON)); + this.gemstone = gemstone; + this.gemSize = gemSize; + } + + @Override + public int getMaxCharge(ItemStack itemStack) + { + return Mth.floor(10000 * getMaxChargeModifier()) * itemStack.getCount(); + } + + @Override + public float getMaxChargeModifier() + { + return gemSize.getChargeModifier(); + } + + + @Override + public Roshar.Gemstone getGemType() + { + return gemstone; + } + + public Roshar.GemSize getSize() + { + return this.gemSize; + } + + @Override + public boolean onEntityItemUpdate(ItemStack stack, ItemEntity entityItem) + { + if(Highstorm.isHighstorm(entityItem)) + { + if (getCharge(stack) < getMaxCharge(stack)) + { + //gemstones charge faster in the world + Highstorm.highstorm.newInvest(getAsContainer(stack), 100); + } + } + + return super.onEntityItemUpdate(stack, entityItem); + } + + @Override + public void inventoryTick(ItemStack pStack, Level pLevel, Entity pEntity, int pItemSlot, boolean pIsSelected) + { + + if (Highstorm.isHighstorm(pEntity)) + { + if (pStack.getItem() instanceof GemstoneItem gemstoneItem) + { + Highstorm.highstorm.newInvest(getAsContainer(pStack), 50); + } + } + + super.inventoryTick(pStack, pLevel, pEntity, pItemSlot, pIsSelected); + } + + @Override + public InteractionResultHolder use(Level pLevel, Player pPlayer, InteractionHand pUsedHand) + { + ItemStack itemStack = pPlayer.getItemInHand(pUsedHand); + + if (pLevel.isClientSide) + { + return InteractionResultHolder.pass(itemStack); + } + + SpiritwebCapability.get(pPlayer).ifPresent(spiritweb -> + { + SpiritwebCapability data = (SpiritwebCapability) spiritweb; + + boolean hasAnySurgebinding = SurgebindingManifestations.SURGEBINDING_POWERS.values().stream().anyMatch((manifestation -> spiritweb.hasManifestation(manifestation.getManifestation()))); + + if (!hasAnySurgebinding) + { + return; + } + + final int charge = getCharge(itemStack); + + /* Old code + SurgebindingSpiritwebSubmodule sb = (SurgebindingSpiritwebSubmodule) data.getSubmodule(Manifestations.ManifestationTypes.SURGEBINDING); + + int playerStormlight = sb.getStormlight(); + + */ + + final int maxPlayerStormlight = SurgebindingConfigs.SERVER.PLAYER_MAX_STORMLIGHT.get(); + + Stormlight invest = (Stormlight) (data.findInvestiture(Manifestations.ManifestArrayBuilder.getAllType(Manifestations.ManifestationTypes.SURGEBINDING))); + + //Get stormlight from gems + if (!pPlayer.isCrouching()) + { + //if charge is less than max stormlight, put all charge into player. + + + + final int attemptedTotal = (int) (charge + invest.getBEU()); + if (attemptedTotal <= maxPlayerStormlight) + { + newInvest(data, attemptedTotal); + adjustCharge(itemStack, -attemptedTotal); + } + else + { + newInvest(data, maxPlayerStormlight); + adjustCharge(itemStack, -maxPlayerStormlight); + } + } + //put remaining stormlight into gem. + else + { + if (invest.getBEU() > 0) + { + if ((charge + invest.getBEU()) > getMaxCharge(itemStack)) + { + adjustCharge(itemStack, getMaxCharge(itemStack)); + invest.removeBEU(getMaxCharge(itemStack)); + } + else + { + adjustCharge(itemStack, (int) invest.getBEU()); + invest.drain(); + } + }t + } + }); + + + return InteractionResultHolder.consume(itemStack); + } + + @Override + public KineticInvestiture newInvest(ISpiritweb data) + { + return new Stormlight(data, 0); + } + + @Override + public KineticInvestiture newInvest(ISpiritweb data, double beu, double decay) + { + return new Stormlight(data, beu); + } + + @Override + public KineticInvestiture newInvest(ISpiritweb data, double beu) + { + return new Stormlight(data, beu); + } +} diff --git a/src/surgebinding/java/leaf/cosmere/surgebinding/common/items/HonorbladeItem.java b/src/surgebinding/java/leaf/cosmere/surgebinding/common/items/HonorbladeItem.java new file mode 100644 index 000000000..fdfd54354 --- /dev/null +++ b/src/surgebinding/java/leaf/cosmere/surgebinding/common/items/HonorbladeItem.java @@ -0,0 +1,72 @@ +/* + * File updated ~ 4 - 2 - 2025 ~ Leaf + */ + +package leaf.cosmere.surgebinding.common.items; + +import com.google.common.collect.ImmutableMultimap; +import com.google.common.collect.Multimap; +import leaf.cosmere.api.Roshar; +import leaf.cosmere.surgebinding.common.registries.SurgebindingAttributes; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.ai.attributes.Attribute; +import net.minecraft.world.entity.ai.attributes.AttributeModifier; +import net.minecraft.world.entity.ai.attributes.Attributes; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Tier; + +import java.util.UUID; + +public class HonorbladeItem extends ShardbladeItem +{ + public final Roshar.RadiantOrder radiantOrder; + + /** + * Modifiers applied when the item is in the mainhand of a user. copied from sword item + */ + private Multimap attributeModifiers = null; + + // having primary and secondary means that theoretically a player could + // hold two shards that share a surge and be twice as strong in that surge // todo more strength shouldn't really matter much in surgebinding + protected static final UUID PRIMARY_HONORBLADE_SURGE_UUID = UUID.fromString("CB3F55D3-4865-4180-A497-9C13A33DB5CF"); + protected static final UUID SECONDARY_HONORBLADE_SURGE_UUID = UUID.fromString("FA233E1C-4180-4865-A497-BCCE9785ACA3"); + + public HonorbladeItem(Roshar.RadiantOrder gemstone, Tier tier, int attackDamageIn, float attackSpeedIn, Properties builderIn) + { + super(tier, attackDamageIn, attackSpeedIn, builderIn); + this.radiantOrder = gemstone; + } + + + /** + * Gets a map of item attribute modifiers, used by damage when used as melee weapon. + */ + @Override + public Multimap getAttributeModifiers(EquipmentSlot equipmentSlot, ItemStack stack) + { + if (attributeModifiers == null) + { + ImmutableMultimap.Builder builder = ImmutableMultimap.builder(); + builder.put(Attributes.ATTACK_DAMAGE, new AttributeModifier(BASE_ATTACK_DAMAGE_UUID, "Weapon modifier", attackDamage, AttributeModifier.Operation.ADDITION)); + builder.put(Attributes.ATTACK_SPEED, new AttributeModifier(BASE_ATTACK_SPEED_UUID, "Weapon modifier", attackSpeedIn, AttributeModifier.Operation.ADDITION)); + builder.put(SurgebindingAttributes.SURGEBINDING_ATTRIBUTES.get(radiantOrder.getFirstSurge()).getAttribute(), new AttributeModifier(PRIMARY_HONORBLADE_SURGE_UUID, "SurgeAttribute", 5, AttributeModifier.Operation.ADDITION)); + builder.put(SurgebindingAttributes.SURGEBINDING_ATTRIBUTES.get(radiantOrder.getSecondSurge()).getAttribute(), new AttributeModifier(SECONDARY_HONORBLADE_SURGE_UUID, "SurgeAttribute", 5, AttributeModifier.Operation.ADDITION)); + this.attributeModifiers = builder.build(); + } + + return switch (equipmentSlot) + { + case MAINHAND, OFFHAND -> this.attributeModifiers; + default -> super.getAttributeModifiers(equipmentSlot, stack); + }; + + } + + + public boolean canSummonDismiss(Player player) + { + //honorblades can always be dismissed + return true; + } +} diff --git a/src/surgebinding/java/leaf/cosmere/surgebinding/common/items/NightbloodItem.java b/src/surgebinding/java/leaf/cosmere/surgebinding/common/items/NightbloodItem.java new file mode 100644 index 000000000..8a21976d7 --- /dev/null +++ b/src/surgebinding/java/leaf/cosmere/surgebinding/common/items/NightbloodItem.java @@ -0,0 +1,68 @@ +/* + * File updated ~ 4 - 2 - 2025 ~ Leaf + */ + +package leaf.cosmere.surgebinding.common.items; + +import com.google.common.collect.ImmutableMultimap; +import com.google.common.collect.Multimap; +import leaf.cosmere.api.EnumUtils; +import leaf.cosmere.api.Roshar; +import leaf.cosmere.surgebinding.common.config.SurgebindingConfigs; +import leaf.cosmere.surgebinding.common.registries.SurgebindingAttributes; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.ai.attributes.Attribute; +import net.minecraft.world.entity.ai.attributes.AttributeModifier; +import net.minecraft.world.entity.ai.attributes.Attributes; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Tier; + +import java.util.UUID; + +public class NightbloodItem extends ShardbladeItem +{ + private Multimap attributeModifiers = null; + protected static final UUID NIGHTBLOOD_SURGE_UUID = UUID.fromString("CB3F55D3-4865-4180-A497-9C13A33DB5CC"); + + public NightbloodItem(Tier tier, int attackDamageIn, float attackSpeedIn, Properties builderIn) + { + super(tier, attackDamageIn, attackSpeedIn, builderIn); + } + + + public boolean canSummonDismiss(Player player) + { + return false; + } + + /** + * Gets a map of item attribute modifiers, used by damage when used as melee weapon. + */ + @Override + public Multimap getAttributeModifiers(EquipmentSlot equipmentSlot, ItemStack stack) + { + if (attributeModifiers == null) + { + ImmutableMultimap.Builder builder = ImmutableMultimap.builder(); + builder.put(Attributes.ATTACK_DAMAGE, new AttributeModifier(BASE_ATTACK_DAMAGE_UUID, "Weapon modifier", attackDamage, AttributeModifier.Operation.ADDITION)); + builder.put(Attributes.ATTACK_SPEED, new AttributeModifier(BASE_ATTACK_SPEED_UUID, "Weapon modifier", attackSpeedIn, AttributeModifier.Operation.ADDITION)); + + if (SurgebindingConfigs.SERVER.NIGHTBLOOD_SPOILERS.get()) + { + for (Roshar.Surges surge : EnumUtils.SURGES) + { + builder.put(SurgebindingAttributes.SURGEBINDING_ATTRIBUTES.get(surge).getAttribute(), new AttributeModifier(NIGHTBLOOD_SURGE_UUID, "Nightblood", 5, AttributeModifier.Operation.ADDITION)); + } + } + + this.attributeModifiers = builder.build(); + } + + return switch (equipmentSlot) + { + case MAINHAND, OFFHAND -> this.attributeModifiers; + default -> super.getAttributeModifiers(equipmentSlot, stack); + }; + } +} diff --git a/src/surgebinding/java/leaf/cosmere/surgebinding/common/items/ShardbladeDynamicItem.java b/src/surgebinding/java/leaf/cosmere/surgebinding/common/items/ShardbladeDynamicItem.java new file mode 100644 index 000000000..b449f56cb --- /dev/null +++ b/src/surgebinding/java/leaf/cosmere/surgebinding/common/items/ShardbladeDynamicItem.java @@ -0,0 +1,73 @@ +/* + * File updated ~ 6 - 2 - 2025 ~ Leaf + */ + +package leaf.cosmere.surgebinding.common.items; + +import leaf.cosmere.surgebinding.client.render.renderer.ShardbladeItemRenderer; +import leaf.cosmere.surgebinding.common.capabilities.DynamicShardbladeData; +import leaf.cosmere.surgebinding.common.capabilities.IShardbladeDynamicData; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Tier; +import net.minecraftforge.client.extensions.common.IClientItemExtensions; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.capabilities.CapabilityManager; +import net.minecraftforge.common.capabilities.CapabilityToken; +import net.minecraftforge.common.capabilities.ICapabilityProvider; +import org.jetbrains.annotations.Nullable; + +import java.util.function.Consumer; + +public class ShardbladeDynamicItem extends ShardbladeItem +{ + public static final Capability CAPABILITY = CapabilityManager.get(new CapabilityToken<>() + { + }); + + + public ShardbladeDynamicItem(Tier tier, int attackDamageIn, float attackSpeedIn, Properties builderIn) + { + super(tier, attackDamageIn, attackSpeedIn, builderIn); + } + + @Override + public @Nullable ICapabilityProvider initCapabilities(ItemStack stack, @Nullable CompoundTag nbt) + { + final DynamicShardbladeData dynamicShardbladeData = new DynamicShardbladeData(); + + if (nbt != null) + { + dynamicShardbladeData.deserializeNBT(nbt); // todo check if this breaks things? + } + + return dynamicShardbladeData; + } + + @Override + public void initializeClient(Consumer consumer) + { + //the class instance hasn't been resolved yet at this point, so we can't check for field values + + consumer.accept(new IClientItemExtensions() + { + ShardbladeItemRenderer renderer = null; + + @Override + public BlockEntityWithoutLevelRenderer getCustomRenderer() + { + Minecraft minecraft = Minecraft.getInstance(); + + if (renderer == null) + { + renderer = new ShardbladeItemRenderer(minecraft.getBlockEntityRenderDispatcher(), minecraft.getEntityModels()); + } + + return renderer; + } + }); + } + +} diff --git a/src/surgebinding/java/leaf/cosmere/surgebinding/common/items/ShardbladeItem.java b/src/surgebinding/java/leaf/cosmere/surgebinding/common/items/ShardbladeItem.java new file mode 100644 index 000000000..be84fcecb --- /dev/null +++ b/src/surgebinding/java/leaf/cosmere/surgebinding/common/items/ShardbladeItem.java @@ -0,0 +1,62 @@ +/* + * File updated ~ 6 - 2 - 2025 ~ Leaf + */ + +package leaf.cosmere.surgebinding.common.items; + +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.SwordItem; +import net.minecraft.world.item.Tier; +import net.minecraft.world.item.enchantment.Enchantment; +import net.minecraft.world.item.enchantment.EnchantmentCategory; + +public class ShardbladeItem extends SwordItem +{ + protected final float attackDamage; + protected final float attackSpeedIn; + + public ShardbladeItem(Tier tier, int attackDamageIn, float attackSpeedIn, Properties builderIn) + { + super(tier, attackDamageIn, attackSpeedIn, builderIn); + this.attackDamage = attackDamageIn + tier.getAttackDamageBonus(); + this.attackSpeedIn = attackSpeedIn; + } + + @Override + public boolean isFireResistant() + { + return true; + } + + @Override + public boolean canApplyAtEnchantingTable(ItemStack stack, Enchantment enchantment) + { + return enchantment.category == EnchantmentCategory.WEAPON; + } + + @Override + public int getEnchantmentValue(ItemStack itemStack) + { + return 20; + } + + @Override + public boolean isEnchantable(ItemStack itemStack) + { + return true; + } + + @Override + public boolean isFoil(ItemStack itemStack) + { + //no shiny. + return false; + } + + public boolean canSummonDismiss(Player player) + { + //todo check a value on sword for whether player has held the shardblade for long enough + return true; + } +} diff --git a/src/surgebinding/java/leaf/cosmere/surgebinding/common/items/ShardplateItem.java b/src/surgebinding/java/leaf/cosmere/surgebinding/common/items/ShardplateItem.java new file mode 100644 index 000000000..59261cb86 --- /dev/null +++ b/src/surgebinding/java/leaf/cosmere/surgebinding/common/items/ShardplateItem.java @@ -0,0 +1,87 @@ +/* + * File updated ~ 10 - 8 - 2024 ~ Leaf + */ + +package leaf.cosmere.surgebinding.common.items; + +import leaf.cosmere.client.render.CosmereRenderers; +import leaf.cosmere.surgebinding.client.render.renderer.ArmorRenderer; +import leaf.cosmere.surgebinding.common.Surgebinding; +import leaf.cosmere.surgebinding.common.items.tiers.ShardplateArmorMaterial; +import net.minecraft.client.model.HumanoidModel; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.item.ArmorItem; +import net.minecraft.world.item.ItemStack; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.client.extensions.common.IClientItemExtensions; +import top.theillusivec4.curios.api.client.ICurioRenderer; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import java.util.Optional; +import java.util.function.Consumer; + +public class ShardplateItem extends ArmorItem +{ + public ShardplateItem(ShardplateArmorMaterial material, ArmorItem.Type pType, Properties properties) + { + super(material, pType, properties); + } + + @Nonnull + @Override + public final String getArmorTexture(ItemStack stack, Entity entity, EquipmentSlot slot, String type) + { + return Surgebinding.MODID + ":" + "textures/models/armor/shardplate.png"; + } + + @OnlyIn(Dist.CLIENT) + @Override + public void initializeClient(Consumer consumer) + { + consumer.accept(new IClientItemExtensions() + { + @Nullable + @Override + public HumanoidModel getHumanoidArmorModel(LivingEntity livingEntity, ItemStack itemStack, EquipmentSlot equipmentSlot, HumanoidModel original) + { + Optional armorModel = CosmereRenderers.getRenderer(itemStack.getItem()); + + if (armorModel.isPresent() && armorModel.get() instanceof ArmorRenderer armorRenderer) + { + final boolean isHead = equipmentSlot == EquipmentSlot.HEAD; + final boolean isChest = equipmentSlot == EquipmentSlot.CHEST; + final boolean isLegs = equipmentSlot == EquipmentSlot.LEGS; + final boolean isFeet = equipmentSlot == EquipmentSlot.FEET; + + var model = armorRenderer.model; + model.hat.visible = false; + model.head.visible = isHead; + + model.body.visible = isChest; + //chestplate is done separately because pants have to set body visible for some reason + model.Chestplate.visible = isChest; + model.rightArm.visible = isChest; + model.leftArm.visible = isChest; + + //set the parts on the base model visible + model.rightLeg.visible = true; + model.leftLeg.visible = true; + + //then set the actual child legs/boots visibility. + //kinda janky but it works + model.LeftLeg.visible = isLegs; + model.RightLeg.visible = isLegs; + model.LeftBoot.visible = isFeet; + model.RightBoot.visible = isFeet; + + return model; + } + return null; + } + }); + } +} diff --git a/src/surgebinding/java/leaf/cosmere/surgebinding/common/items/tiers/ShardbladeItemTier.java b/src/surgebinding/java/leaf/cosmere/surgebinding/common/items/tiers/ShardbladeItemTier.java new file mode 100644 index 000000000..4eb5317d3 --- /dev/null +++ b/src/surgebinding/java/leaf/cosmere/surgebinding/common/items/tiers/ShardbladeItemTier.java @@ -0,0 +1,54 @@ +/* + * File updated ~ 8 - 10 - 2022 ~ Leaf + */ + +package leaf.cosmere.surgebinding.common.items.tiers; + +import net.minecraft.world.item.Tier; +import net.minecraft.world.item.crafting.Ingredient; + +public class ShardbladeItemTier implements Tier +{ + float attackDamage; + + public ShardbladeItemTier(float attackDamage) + { + this.attackDamage = attackDamage; + } + + @Override + public int getUses() + { + return -1; + } + + @Override + public float getSpeed() + { + return 8.0F; + } + + @Override + public float getAttackDamageBonus() + { + return attackDamage; + } + + @Override + public int getLevel() + { + return 3; + } + + @Override + public int getEnchantmentValue() + { + return 30; + } + + @Override + public Ingredient getRepairIngredient() + { + return Ingredient.EMPTY; + } +} diff --git a/src/surgebinding/java/leaf/cosmere/surgebinding/common/items/tiers/ShardplateArmorMaterial.java b/src/surgebinding/java/leaf/cosmere/surgebinding/common/items/tiers/ShardplateArmorMaterial.java new file mode 100644 index 000000000..ba086cd92 --- /dev/null +++ b/src/surgebinding/java/leaf/cosmere/surgebinding/common/items/tiers/ShardplateArmorMaterial.java @@ -0,0 +1,94 @@ +/* + * File updated ~ 10 - 8 - 2024 ~ Leaf + */ + +package leaf.cosmere.surgebinding.common.items.tiers; + +import leaf.cosmere.surgebinding.common.Surgebinding; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.util.LazyLoadedValue; +import net.minecraft.world.item.ArmorItem; +import net.minecraft.world.item.ArmorMaterial; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.crafting.Ingredient; + +import java.util.function.Supplier; + +public enum ShardplateArmorMaterial implements ArmorMaterial +{ + DEADPLATE("deadplate", 33, new int[]{3, 6, 8, 3}, 10, SoundEvents.ARMOR_EQUIP_DIAMOND, 2.0F, 0.0F, () -> + { + return Ingredient.of(Items.DIAMOND); + }), + LIVINGPLATE("livingplate", 35, new int[]{3, 6, 8, 3}, 15, SoundEvents.ARMOR_EQUIP_NETHERITE, 3.0F, 0.1F, () -> + { + return Ingredient.of(Items.NETHERITE_INGOT); + }); + + private static final int[] HEALTH_PER_SLOT = new int[]{13, 15, 16, 11}; + private final String name; + private final int durabilityMultiplier; + private final int[] slotProtections; + private final int enchantmentValue; + private final SoundEvent sound; + private final float toughness; + private final float knockbackResistance; + private final LazyLoadedValue repairIngredient; + + ShardplateArmorMaterial(String pName, int pDurabilityMultiplier, int[] pSlotProtections, int pEnchantmentValue, SoundEvent pSound, float pToughness, float pKnockbackResistance, Supplier pRepairIngredient) + { + this.name = pName; + this.durabilityMultiplier = pDurabilityMultiplier; + this.slotProtections = pSlotProtections; + this.enchantmentValue = pEnchantmentValue; + this.sound = pSound; + this.toughness = pToughness; + this.knockbackResistance = pKnockbackResistance; + this.repairIngredient = new LazyLoadedValue<>(pRepairIngredient); + } + + public int getDurabilityForType(ArmorItem.Type pType) + { + return HEALTH_PER_SLOT[pType.getSlot().getIndex()] * this.durabilityMultiplier; + } + + public int getDefenseForType(ArmorItem.Type pType) + { + return this.slotProtections[pType.getSlot().getIndex()]; + } + + public int getEnchantmentValue() + { + return this.enchantmentValue; + } + + public SoundEvent getEquipSound() + { + return this.sound; + } + + public Ingredient getRepairIngredient() + { + return this.repairIngredient.get(); + } + + public String getName() + { + return Surgebinding.MODID + ":" + this.name; + } + + public float getToughness() + { + return this.toughness; + } + + /** + * Gets the percentage of knockback resistance provided by armor of the material. + */ + public float getKnockbackResistance() + { + return this.knockbackResistance; + } + +} diff --git a/src/surgebinding/java/leaf/cosmere/surgebinding/common/manifestation/SurgeAbrasion.java b/src/surgebinding/java/leaf/cosmere/surgebinding/common/manifestation/SurgeAbrasion.java new file mode 100644 index 000000000..3902f493b --- /dev/null +++ b/src/surgebinding/java/leaf/cosmere/surgebinding/common/manifestation/SurgeAbrasion.java @@ -0,0 +1,19 @@ +/* + * File updated ~ 8 - 10 - 2022 ~ Leaf + */ + +package leaf.cosmere.surgebinding.common.manifestation; + +import leaf.cosmere.api.Roshar; + +public class SurgeAbrasion extends SurgebindingManifestation +{ + public SurgeAbrasion(Roshar.Surges surge) + { + super(surge); + } + + + //change frictional force + +} diff --git a/src/surgebinding/java/leaf/cosmere/surgebinding/common/manifestation/SurgeAdhesion.java b/src/surgebinding/java/leaf/cosmere/surgebinding/common/manifestation/SurgeAdhesion.java new file mode 100644 index 000000000..62a7e7bd2 --- /dev/null +++ b/src/surgebinding/java/leaf/cosmere/surgebinding/common/manifestation/SurgeAdhesion.java @@ -0,0 +1,18 @@ +/* + * File updated ~ 7 - 10 - 2023 ~ Leaf + */ + +package leaf.cosmere.surgebinding.common.manifestation; + +import leaf.cosmere.api.Roshar; + +// Honors truest surge +public class SurgeAdhesion extends SurgebindingManifestation +{ + public SurgeAdhesion(Roshar.Surges surge) + { + super(surge); + } + + //bind things together +} diff --git a/src/surgebinding/java/leaf/cosmere/surgebinding/common/manifestation/SurgeCohesion.java b/src/surgebinding/java/leaf/cosmere/surgebinding/common/manifestation/SurgeCohesion.java new file mode 100644 index 000000000..76bcb78f9 --- /dev/null +++ b/src/surgebinding/java/leaf/cosmere/surgebinding/common/manifestation/SurgeCohesion.java @@ -0,0 +1,20 @@ +/* + * File updated ~ 8 - 10 - 2022 ~ Leaf + */ + +package leaf.cosmere.surgebinding.common.manifestation; + +import leaf.cosmere.api.Roshar; + +public class SurgeCohesion extends SurgebindingManifestation +{ + public SurgeCohesion(Roshar.Surges surge) + { + super(surge); + } + + + // alter objects at a molecular level? + // moving through stone? + +} diff --git a/src/surgebinding/java/leaf/cosmere/surgebinding/common/manifestation/SurgeDivision.java b/src/surgebinding/java/leaf/cosmere/surgebinding/common/manifestation/SurgeDivision.java new file mode 100644 index 000000000..bd9127b1a --- /dev/null +++ b/src/surgebinding/java/leaf/cosmere/surgebinding/common/manifestation/SurgeDivision.java @@ -0,0 +1,18 @@ +/* + * File updated ~ 8 - 10 - 2022 ~ Leaf + */ + +package leaf.cosmere.surgebinding.common.manifestation; + +import leaf.cosmere.api.Roshar; + +public class SurgeDivision extends SurgebindingManifestation +{ + public SurgeDivision(Roshar.Surges surge) + { + super(surge); + } + + //power over destruction and decay + +} diff --git a/src/surgebinding/java/leaf/cosmere/surgebinding/common/manifestation/SurgeGravitation.java b/src/surgebinding/java/leaf/cosmere/surgebinding/common/manifestation/SurgeGravitation.java new file mode 100644 index 000000000..8b641f3cf --- /dev/null +++ b/src/surgebinding/java/leaf/cosmere/surgebinding/common/manifestation/SurgeGravitation.java @@ -0,0 +1,107 @@ +/* + * File updated ~ 10 - 8 - 2024 ~ Leaf + */ + +package leaf.cosmere.surgebinding.common.manifestation; + +import leaf.cosmere.api.CosmereAPI; +import leaf.cosmere.api.Manifestations; +import leaf.cosmere.api.Roshar; +import leaf.cosmere.common.cap.entity.SpiritwebCapability; +import leaf.cosmere.surgebinding.common.capabilities.SurgebindingSpiritwebSubmodule; +import leaf.cosmere.surgebinding.common.registries.SurgebindingManifestations; +import net.minecraft.tags.DamageTypeTags; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.entity.projectile.FireworkRocketEntity; +import net.minecraft.world.phys.Vec3; +import net.minecraftforge.event.entity.living.LivingAttackEvent; + +public class SurgeGravitation extends SurgebindingManifestation +{ + public SurgeGravitation(Roshar.Surges surge) + { + super(surge); + } + + //gravitational attraction + + + public static void onLivingAttackEvent(LivingAttackEvent event) + { + if (event.getSource().getEntity() instanceof Player player && !event.getSource().is(DamageTypeTags.IS_PROJECTILE) && player.getMainHandItem().isEmpty()) + { + SpiritwebCapability.get(player).ifPresent(iSpiritweb -> + { + //windrunners like Szeth could launch enemies into the air to die cruelly by fall damage + if (iSpiritweb.hasManifestation(SurgebindingManifestations.SURGEBINDING_POWERS.get(Roshar.Surges.GRAVITATION).get())) + { + + SurgebindingSpiritwebSubmodule submodule = (SurgebindingSpiritwebSubmodule) iSpiritweb.getSubmodule(Manifestations.ManifestationTypes.SURGEBINDING); + + if (submodule.adjustStormlight(-20, true)) + { + final LivingEntity entity = event.getEntity(); + CosmereAPI.logger.info("%s has launched %s into the sky".formatted(player.getName().getString(), entity.getName().getString())); + + entity.stopRiding(); + entity.setPos(event.getEntity().getX(), event.getEntity().getY() + 0.1d, event.getEntity().getZ()); + entity.setOnGround(false); + entity.setJumping(true); + + entity.setDeltaMovement(0, 50, 0); + + + entity.hurtMarked = true; + } + } + }); + } + + + } + + public static boolean canFly(LivingEntity entity) + { + boolean canFly = false; + var spiritwebCapability = SpiritwebCapability.get(entity); + if (spiritwebCapability.isPresent() && spiritwebCapability.resolve().get() instanceof SpiritwebCapability data) + { + + canFly = SurgebindingManifestations.SURGEBINDING_POWERS.get(Roshar.Surges.GRAVITATION).get().isActive(data); + } + + if (entity instanceof Player player) + { + player.getAbilities().mayfly = player.isCreative() || canFly; + } + + return canFly; + } + + + /** + * gravitation version of {@link FireworkRocketEntity#tick()}. + */ + public static boolean flyTick(LivingEntity entity) + { + if (!entity.isFallFlying() || !canFly(entity)) + { + //if we aren't flying, everything else is irrelevant + return false; + } + else + { + var spiritwebCapability = SpiritwebCapability.get(entity); + if (spiritwebCapability.isPresent() && spiritwebCapability.resolve().get() instanceof SpiritwebCapability data) + { + Vec3 lookAngle = entity.getLookAngle(); + Vec3 deltaMovement = entity.getDeltaMovement(); + entity.setDeltaMovement(deltaMovement.add(lookAngle.x * 0.1D + (lookAngle.x * 1.5D - deltaMovement.x) * 0.5D, lookAngle.y * 0.1D + (lookAngle.y * 1.5D - deltaMovement.y) * 0.5D, lookAngle.z * 0.1D + (lookAngle.z * 1.5D - deltaMovement.z) * 0.5D)); + return true; + } + } + + return true; + } +} diff --git a/src/surgebinding/java/leaf/cosmere/surgebinding/common/manifestation/SurgeIllumination.java b/src/surgebinding/java/leaf/cosmere/surgebinding/common/manifestation/SurgeIllumination.java new file mode 100644 index 000000000..81c8dc44c --- /dev/null +++ b/src/surgebinding/java/leaf/cosmere/surgebinding/common/manifestation/SurgeIllumination.java @@ -0,0 +1,19 @@ +/* + * File updated ~ 8 - 10 - 2022 ~ Leaf + */ + +package leaf.cosmere.surgebinding.common.manifestation; + +import leaf.cosmere.api.Roshar; + +public class SurgeIllumination extends SurgebindingManifestation +{ + public SurgeIllumination(Roshar.Surges surge) + { + super(surge); + } + + + //illusions + +} diff --git a/src/surgebinding/java/leaf/cosmere/surgebinding/common/manifestation/SurgeProgression.java b/src/surgebinding/java/leaf/cosmere/surgebinding/common/manifestation/SurgeProgression.java new file mode 100644 index 000000000..25b43c3bc --- /dev/null +++ b/src/surgebinding/java/leaf/cosmere/surgebinding/common/manifestation/SurgeProgression.java @@ -0,0 +1,247 @@ +/* + * File updated ~ 20 - 12 - 2024 ~ Leaf + */ + +package leaf.cosmere.surgebinding.common.manifestation; + +import leaf.cosmere.api.Manifestations; +import leaf.cosmere.api.Roshar; +import leaf.cosmere.common.cap.entity.SpiritwebCapability; +import leaf.cosmere.surgebinding.common.capabilities.SurgebindingSpiritwebSubmodule; +import leaf.cosmere.surgebinding.common.config.SurgebindingConfigs; +import leaf.cosmere.surgebinding.common.registries.SurgebindingManifestations; +import net.minecraft.core.BlockPos; +import net.minecraft.core.particles.ParticleTypes; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.util.Mth; +import net.minecraft.world.entity.AgeableMob; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.item.BoneMealItem; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.BonemealableBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.properties.Property; +import net.minecraftforge.event.entity.player.PlayerInteractEvent; + +import java.util.HashMap; + +public class SurgeProgression extends SurgebindingManifestation +{ + public SurgeProgression(Roshar.Surges surge) + { + super(surge); + } + + private static final HashMap progressionBlockMap = new HashMap<>(); + + + //alter growth and healing + public static void onEntityInteract(PlayerInteractEvent.EntityInteract event) + { + if (event.getTarget() instanceof LivingEntity eventTarget) + { + final float eventTargetHealth = eventTarget.getHealth(); + final float eventTargetMaxHealth = eventTarget.getMaxHealth(); + int healthMissing = Mth.floor(eventTargetMaxHealth - eventTargetHealth); + + if (healthMissing > 0) + { + SpiritwebCapability.get(event.getEntity()).ifPresent(iSpiritweb -> + { + if (iSpiritweb.hasManifestation(SurgebindingManifestations.SURGEBINDING_POWERS.get(Roshar.Surges.PROGRESSION).get())) + { + SpiritwebCapability playerSpiritweb = (SpiritwebCapability) iSpiritweb; + SurgebindingSpiritwebSubmodule submodule = (SurgebindingSpiritwebSubmodule) playerSpiritweb.getSubmodule(Manifestations.ManifestationTypes.SURGEBINDING); + + final int stormlightHealingCostMultiplier = SurgebindingConfigs.SERVER.PROGRESSION_HEAL_COST.get(); + if (submodule.adjustStormlight(-(healthMissing * stormlightHealingCostMultiplier), true)) + { + heal(eventTarget, eventTargetMaxHealth); + } + else + { + final int affordableHealth = submodule.getStormlight() / stormlightHealingCostMultiplier; + if (affordableHealth > 0 && submodule.adjustStormlight(-submodule.getStormlight(), true)) + { + heal(eventTarget, eventTargetHealth + affordableHealth); + } + } + } + }); + } + } + + if (event.getTarget() instanceof AgeableMob ageableMob && ageableMob.level() instanceof ServerLevel) + { + if (ageableMob.isBaby()) + { + SpiritwebCapability.get(event.getEntity()).ifPresent(iSpiritweb -> + { + if (iSpiritweb.hasManifestation(SurgebindingManifestations.SURGEBINDING_POWERS.get(Roshar.Surges.PROGRESSION).get())) + { + int ageUpAmount = (int) Math.floor(-(ageableMob.getAge() / 20D) * 0.1); // get age in seconds, then 10% of that + SpiritwebCapability playerSpiritweb = (SpiritwebCapability) iSpiritweb; + SurgebindingSpiritwebSubmodule submodule = (SurgebindingSpiritwebSubmodule) playerSpiritweb.getSubmodule(Manifestations.ManifestationTypes.SURGEBINDING); + + final int stormlightAgeUpCostMultiplier = SurgebindingConfigs.SERVER.PROGRESSION_AGE_UP_COST.get(); + if (submodule.adjustStormlight(-(stormlightAgeUpCostMultiplier), true)) + { + ageUp(ageableMob, ageUpAmount); + } + else + { + final int affordableAge = (int) ((float) submodule.getStormlight() / (float) (stormlightAgeUpCostMultiplier)) * ageUpAmount; + if (affordableAge > 0 && submodule.adjustStormlight(-submodule.getStormlight(), true)) + { + ageUp(ageableMob, affordableAge); + } + } + } + }); + } + } + } + + public static void heal(LivingEntity livingEntity, float setHealthTo) + { + livingEntity.setHealth(setHealthTo); + + for (int i = 0; i < 20; ++i) + { + double xSpeed = livingEntity.getRandom().nextGaussian() * 0.02D; + double ySpeed = livingEntity.getRandom().nextGaussian() * 0.02D; + double zSpeed = livingEntity.getRandom().nextGaussian() * 0.02D; + + livingEntity.level().addParticle(ParticleTypes.HAPPY_VILLAGER, + livingEntity.getX(1.0D) - xSpeed * 10.0D, + livingEntity.getRandomY() - ySpeed * 10.0D, + livingEntity.getRandomZ(1.0D) - zSpeed * 10.0D, + xSpeed, + ySpeed, + zSpeed); + } + + //this gets very annoying quick + /*livingEntity.level.playSound( + (Player) null, + livingEntity.getX(), + livingEntity.getY(), + livingEntity.getZ(), + SoundEvents.PLAYER_LEVELUP, + livingEntity.getSoundSource(), + 0.25F, + 1.0F);*/ + } + + public static void ageUp(AgeableMob ageableMob, int ageUpAmount) + { + ageableMob.ageUp(ageUpAmount); + + for (int i = 0; i < 20; ++i) + { + double xSpeed = ageableMob.getRandom().nextGaussian() * 0.02D; + double ySpeed = ageableMob.getRandom().nextGaussian() * 0.02D; + double zSpeed = ageableMob.getRandom().nextGaussian() * 0.02D; + + ageableMob.level().addParticle(ParticleTypes.HAPPY_VILLAGER, + ageableMob.getX(1.0D) - xSpeed * 10.0D, + ageableMob.getRandomY() - ySpeed * 10.0D, + ageableMob.getRandomZ(1.0D) - zSpeed * 10.0D, + xSpeed, + ySpeed, + zSpeed); + } + } + + //bonemeal crops + public static void onBlockInteract(PlayerInteractEvent.RightClickBlock event) + { + if (!event.getEntity().getMainHandItem().isEmpty()) + { + return; + } + + final BlockPos blockPos = event.getHitVec().getBlockPos(); + final BlockState blockState = event.getLevel().getBlockState(blockPos); + if (blockState.getBlock() instanceof BonemealableBlock bonemealableBlock) + { + SpiritwebCapability.get(event.getEntity()).ifPresent(iSpiritweb -> + { + if (iSpiritweb.hasManifestation(SurgebindingManifestations.SURGEBINDING_POWERS.get(Roshar.Surges.PROGRESSION).get())) + { + SpiritwebCapability playerSpiritweb = (SpiritwebCapability) iSpiritweb; + SurgebindingSpiritwebSubmodule submodule = (SurgebindingSpiritwebSubmodule) playerSpiritweb.getSubmodule(Manifestations.ManifestationTypes.SURGEBINDING); + + final int stormlightHealingCostMultiplier = SurgebindingConfigs.SERVER.PROGRESSION_BONEMEAL_COST.get(); + if (submodule.adjustStormlight(-stormlightHealingCostMultiplier, true)) + { + if (event.getLevel() instanceof ServerLevel serverLevel) + { + bonemealableBlock.performBonemeal(serverLevel, serverLevel.random, blockPos, blockState); + } + else + { + BoneMealItem.addGrowthParticles(event.getLevel(), blockPos, 0); + } + } + } + }); + } + else + { + if (progressionBlockMap.isEmpty()) + { + progressionBlockMap.put(Blocks.DIRT, Blocks.GRASS_BLOCK); + progressionBlockMap.put(Blocks.COARSE_DIRT, Blocks.DIRT); + progressionBlockMap.put(Blocks.COBBLESTONE, Blocks.MOSSY_COBBLESTONE); + progressionBlockMap.put(Blocks.COBBLESTONE_SLAB, Blocks.MOSSY_COBBLESTONE_SLAB); + progressionBlockMap.put(Blocks.COBBLESTONE_STAIRS, Blocks.MOSSY_COBBLESTONE_STAIRS); + progressionBlockMap.put(Blocks.COBBLESTONE_WALL, Blocks.MOSSY_COBBLESTONE_WALL); + } + + final Block targetBlockType = progressionBlockMap.getOrDefault(blockState.getBlock(), null); + + if (targetBlockType != null) + { + SpiritwebCapability.get(event.getEntity()).ifPresent(iSpiritweb -> + { + SpiritwebCapability playerSpiritweb = (SpiritwebCapability) iSpiritweb; + SurgebindingSpiritwebSubmodule submodule = (SurgebindingSpiritwebSubmodule) playerSpiritweb.getSubmodule(Manifestations.ManifestationTypes.SURGEBINDING); + + final int stormlightBonemealCostMultiplier = SurgebindingConfigs.SERVER.PROGRESSION_BONEMEAL_COST.get(); + if (submodule.adjustStormlight(-stormlightBonemealCostMultiplier, true)) + { + if (event.getLevel() instanceof ServerLevel) + { + BlockState newState = targetBlockType.defaultBlockState(); + + // copy over all block properties + for (Property prop : blockState.getProperties()) + { + if (newState.hasProperty(prop)) + { + newState = copyProperty(blockState, newState, prop); + } + } + + event.getLevel().setBlock(blockPos, newState, 0); + } + else + { + BoneMealItem.addGrowthParticles(event.getLevel(), blockPos, 0); + } + } + }); + } + } + } + + // forge forums were useful for once + // borrowed from https://forums.minecraftforge.net/topic/117047-copy-all-property-values-from-one-blockstate-to-another/ + // required because the compiler can't otherwise be sure ? and ? are the same type + private static > BlockState copyProperty(BlockState from, BlockState to, Property property) + { + return to.setValue(property, from.getValue(property)); + } +} diff --git a/src/surgebinding/java/leaf/cosmere/surgebinding/common/manifestation/SurgeTension.java b/src/surgebinding/java/leaf/cosmere/surgebinding/common/manifestation/SurgeTension.java new file mode 100644 index 000000000..540857bfa --- /dev/null +++ b/src/surgebinding/java/leaf/cosmere/surgebinding/common/manifestation/SurgeTension.java @@ -0,0 +1,21 @@ +/* + * File updated ~ 8 - 10 - 2022 ~ Leaf + */ + +package leaf.cosmere.surgebinding.common.manifestation; + +import leaf.cosmere.api.Roshar; + +public class SurgeTension extends SurgebindingManifestation +{ + public SurgeTension(Roshar.Surges surge) + { + super(surge); + } + + + //repair inanimate objects for bondsmiths? + + //making things rigid. + +} diff --git a/src/surgebinding/java/leaf/cosmere/surgebinding/common/manifestation/SurgeTransformation.java b/src/surgebinding/java/leaf/cosmere/surgebinding/common/manifestation/SurgeTransformation.java new file mode 100644 index 000000000..e734bd76b --- /dev/null +++ b/src/surgebinding/java/leaf/cosmere/surgebinding/common/manifestation/SurgeTransformation.java @@ -0,0 +1,19 @@ +/* + * File updated ~ 8 - 10 - 2022 ~ Leaf + */ + +package leaf.cosmere.surgebinding.common.manifestation; + +import leaf.cosmere.api.Roshar; + +public class SurgeTransformation extends SurgebindingManifestation +{ + public SurgeTransformation(Roshar.Surges surge) + { + super(surge); + } + + + //soulcasting, changing one thing into another + +} diff --git a/src/surgebinding/java/leaf/cosmere/surgebinding/common/manifestation/SurgeTransportation.java b/src/surgebinding/java/leaf/cosmere/surgebinding/common/manifestation/SurgeTransportation.java new file mode 100644 index 000000000..3a1f54f70 --- /dev/null +++ b/src/surgebinding/java/leaf/cosmere/surgebinding/common/manifestation/SurgeTransportation.java @@ -0,0 +1,19 @@ +/* + * File updated ~ 8 - 10 - 2022 ~ Leaf + */ + +package leaf.cosmere.surgebinding.common.manifestation; + +import leaf.cosmere.api.Roshar; + +public class SurgeTransportation extends SurgebindingManifestation +{ + public SurgeTransportation(Roshar.Surges surge) + { + super(surge); + } + + + //travel between realms or locations + +} diff --git a/src/surgebinding/java/leaf/cosmere/surgebinding/common/manifestation/SurgebindingManifestation.java b/src/surgebinding/java/leaf/cosmere/surgebinding/common/manifestation/SurgebindingManifestation.java new file mode 100644 index 000000000..6bfc9d70c --- /dev/null +++ b/src/surgebinding/java/leaf/cosmere/surgebinding/common/manifestation/SurgebindingManifestation.java @@ -0,0 +1,41 @@ +/* + * File updated ~ 10 - 2 - 2023 ~ Leaf + */ + +package leaf.cosmere.surgebinding.common.manifestation; + +import leaf.cosmere.api.Manifestations; +import leaf.cosmere.api.Roshar; +import leaf.cosmere.api.manifestation.Manifestation; +import leaf.cosmere.api.spiritweb.ISpiritweb; +import leaf.cosmere.common.cap.entity.SpiritwebCapability; +import leaf.cosmere.surgebinding.common.capabilities.SurgebindingSpiritwebSubmodule; + +public class SurgebindingManifestation extends Manifestation +{ + protected final Roshar.Surges surge; + + public SurgebindingManifestation(Roshar.Surges surge) + { + super(Manifestations.ManifestationTypes.SURGEBINDING); + this.surge = surge; + } + + @Override + public int getPowerID() + { + return surge.getID(); + } + + @Override + public boolean isActive(ISpiritweb data) + { + //surgebinding is different to most powers. + + final SpiritwebCapability spiritwebCapability = (SpiritwebCapability) data; + SurgebindingSpiritwebSubmodule sb = (SurgebindingSpiritwebSubmodule) spiritwebCapability.getSubmodule(Manifestations.ManifestationTypes.SURGEBINDING); + return data.hasManifestation(this) && sb.getStormlight() > 0; + } + + public void infusionTick() +} diff --git a/src/surgebinding/java/leaf/cosmere/surgebinding/common/mixinAccess/RaidMixinAccess.java b/src/surgebinding/java/leaf/cosmere/surgebinding/common/mixinAccess/RaidMixinAccess.java new file mode 100644 index 000000000..22a18754e --- /dev/null +++ b/src/surgebinding/java/leaf/cosmere/surgebinding/common/mixinAccess/RaidMixinAccess.java @@ -0,0 +1,12 @@ +/* + * File updated ~ 14 - 1 - 2025 ~ Leaf + */ + +package leaf.cosmere.surgebinding.common.mixinAccess; + +import net.minecraft.world.entity.player.Player; + +public interface RaidMixinAccess +{ + boolean _cosmere$isHero(Player player); +} diff --git a/src/surgebinding/java/leaf/cosmere/surgebinding/common/network/SurgebindingPacketHandler.java b/src/surgebinding/java/leaf/cosmere/surgebinding/common/network/SurgebindingPacketHandler.java new file mode 100644 index 000000000..d1782ef6b --- /dev/null +++ b/src/surgebinding/java/leaf/cosmere/surgebinding/common/network/SurgebindingPacketHandler.java @@ -0,0 +1,33 @@ +/* + * File updated ~ 4 - 2 - 2025 ~ Leaf + */ + +package leaf.cosmere.surgebinding.common.network; + +import leaf.cosmere.common.network.BasePacketHandler; +import leaf.cosmere.surgebinding.common.Surgebinding; +import leaf.cosmere.surgebinding.common.network.packets.DispatchStormlight; +import leaf.cosmere.surgebinding.common.network.packets.RequestStormlight; +import leaf.cosmere.surgebinding.common.network.packets.SummonShardblade; +import net.minecraftforge.network.simple.SimpleChannel; + +public class SurgebindingPacketHandler extends BasePacketHandler +{ + private final SimpleChannel NETWORK_CHANNEL = createChannel(Surgebinding.rl(Surgebinding.MODID), Surgebinding.instance.versionNumber); + + @Override + protected SimpleChannel getChannel() + { + return NETWORK_CHANNEL; + } + + @Override + public void initialize() + { + registerClientToServer(SummonShardblade.class, SummonShardblade::new); + registerClientToServer(DispatchStormlight.class, DispatchStormlight::new); + registerClientToServer(RequestStormlight.class, RequestStormlight::new); + } + + +} diff --git a/src/surgebinding/java/leaf/cosmere/surgebinding/common/network/packets/DispatchStormlight.java b/src/surgebinding/java/leaf/cosmere/surgebinding/common/network/packets/DispatchStormlight.java new file mode 100644 index 000000000..60c0f18a2 --- /dev/null +++ b/src/surgebinding/java/leaf/cosmere/surgebinding/common/network/packets/DispatchStormlight.java @@ -0,0 +1,57 @@ +/* + * File updated ~ 4 - 2 - 2025 ~ Leaf + */ + +package leaf.cosmere.surgebinding.common.network.packets; + +import leaf.cosmere.common.cap.entity.SpiritwebCapability; +import leaf.cosmere.common.network.ICosmerePacket; +import leaf.cosmere.surgebinding.common.capabilities.SurgebindingSpiritwebSubmodule; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.server.MinecraftServer; +import net.minecraft.server.level.ServerPlayer; +import net.minecraftforge.network.NetworkEvent; + +public class DispatchStormlight implements ICosmerePacket +{ + + public DispatchStormlight() + { + } + + public DispatchStormlight(FriendlyByteBuf buffer) + { + } + + @Override + public void handle(NetworkEvent.Context context) + { + ServerPlayer sender = context.getSender(); + MinecraftServer server = sender.getServer(); + server.submitAsync(() -> SpiritwebCapability.get(sender).ifPresent((cap) -> + { + SurgebindingSpiritwebSubmodule ssm = SurgebindingSpiritwebSubmodule.getSubmodule(cap); + + if (ssm != null) + { + if (ssm.getStormlight() != 0) + { + if (ssm.isOathed() || ssm.isHerald()) + { + ssm.dispatchStormlight(); + } + } + } + + })); + context.setPacketHandled(true); + } + + + @Override + public void encode(FriendlyByteBuf buf) + { + + } + +} diff --git a/src/surgebinding/java/leaf/cosmere/surgebinding/common/network/packets/RequestStormlight.java b/src/surgebinding/java/leaf/cosmere/surgebinding/common/network/packets/RequestStormlight.java new file mode 100644 index 000000000..d16fbfe4a --- /dev/null +++ b/src/surgebinding/java/leaf/cosmere/surgebinding/common/network/packets/RequestStormlight.java @@ -0,0 +1,61 @@ +/* + * File updated ~ 4 - 2 - 2025 ~ Leaf + */ + +package leaf.cosmere.surgebinding.common.network.packets; + +import leaf.cosmere.common.cap.entity.SpiritwebCapability; +import leaf.cosmere.common.network.ICosmerePacket; +import leaf.cosmere.surgebinding.common.capabilities.SurgebindingSpiritwebSubmodule; +import leaf.cosmere.surgebinding.common.config.SurgebindingConfigs; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.server.MinecraftServer; +import net.minecraft.server.level.ServerPlayer; +import net.minecraftforge.network.NetworkEvent; + +public class RequestStormlight implements ICosmerePacket +{ + + + public RequestStormlight() + { + } + + public RequestStormlight(FriendlyByteBuf buffer) + { + } + + @Override + public void handle(NetworkEvent.Context context) + { + ServerPlayer sender = context.getSender(); + MinecraftServer server = sender.getServer(); + server.submitAsync(() -> SpiritwebCapability.get(sender).ifPresent((cap) -> + { + SurgebindingSpiritwebSubmodule ssm = SurgebindingSpiritwebSubmodule.getSubmodule(cap); + + if (ssm != null) + { + if (ssm.isHerald()) + { + //heralds had a direct line to honor's investiture + ssm.setStormlight(SurgebindingConfigs.SERVER.PLAYER_MAX_STORMLIGHT.get()); + } + else if (ssm.isOathed()) + { + ssm.requestStormlight(); + } + } + + })); + context.setPacketHandled(true); + } + + + @Override + public void encode(FriendlyByteBuf buf) + { + + } + +} diff --git a/src/surgebinding/java/leaf/cosmere/surgebinding/common/network/packets/SummonShardblade.java b/src/surgebinding/java/leaf/cosmere/surgebinding/common/network/packets/SummonShardblade.java new file mode 100644 index 000000000..adb31faaa --- /dev/null +++ b/src/surgebinding/java/leaf/cosmere/surgebinding/common/network/packets/SummonShardblade.java @@ -0,0 +1,133 @@ +/* + * File updated ~ 14 - 1 - 2025 ~ Leaf + */ + +package leaf.cosmere.surgebinding.common.network.packets; + +import leaf.cosmere.api.Roshar; +import leaf.cosmere.api.helpers.CompoundNBTHelper; +import leaf.cosmere.common.cap.entity.SpiritwebCapability; +import leaf.cosmere.common.network.ICosmerePacket; +import leaf.cosmere.surgebinding.common.config.SurgebindingConfigs; +import leaf.cosmere.surgebinding.common.items.HonorbladeItem; +import leaf.cosmere.surgebinding.common.items.ShardbladeItem; +import leaf.cosmere.surgebinding.common.registries.SurgebindingAttributes; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.server.MinecraftServer; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.ai.attributes.Attribute; +import net.minecraft.world.entity.ai.attributes.AttributeModifier; +import net.minecraft.world.item.ItemStack; +import net.minecraftforge.network.NetworkEvent; + +import java.util.UUID; + +public class SummonShardblade implements ICosmerePacket +{ + public SummonShardblade() + { + } + + public SummonShardblade(FriendlyByteBuf buffer) + { + } + + @Override + public void handle(NetworkEvent.Context context) + { + ServerPlayer sender = context.getSender(); + MinecraftServer server = sender.getServer(); + server.submitAsync(() -> SpiritwebCapability.get(sender).ifPresent((cap) -> + { + var spiritwebTags = cap.getCompoundTag(); + var shardblades = CompoundNBTHelper.getOrCreate(spiritwebTags, "shardblades"); + + final LivingEntity livingEntity = cap.getLiving(); + final ItemStack itemInHand = livingEntity.getItemInHand(InteractionHand.MAIN_HAND); + + final int maxShardblades = SurgebindingConfigs.SERVER.MAX_SHARDBLADES.get(); + + if (itemInHand.isEmpty()) + { + for (int i = 0; i < maxShardblades; i++) + { + final String pKey = String.valueOf(i); + if (shardblades.contains(pKey)) + { + final CompoundTag test = shardblades.getCompound(pKey); + ItemStack stack = ItemStack.of(test); + livingEntity.setItemInHand(InteractionHand.MAIN_HAND, stack); + shardblades.remove(pKey); + + if (stack.getItem() instanceof HonorbladeItem honorbladeItem) + { + UpdateIntrinsicPowers(honorbladeItem, livingEntity, false); + } + + //todo do we actually need to tell the player about changes to their spiritweb here? + //cap.syncToClients(sender); + break; + } + } + } + else if (itemInHand.getItem() instanceof ShardbladeItem shardbladeItem) + { + if (shardbladeItem.canSummonDismiss(sender)) + { + + for (int i = 0; i < maxShardblades; i++) + { + final String pKey = String.valueOf(i); + if (!shardblades.contains(pKey)) + { + shardblades.put(pKey, itemInHand.serializeNBT()); + livingEntity.setItemInHand(InteractionHand.MAIN_HAND, ItemStack.EMPTY); + + if (shardbladeItem instanceof HonorbladeItem honorbladeItem) + { + UpdateIntrinsicPowers(honorbladeItem, livingEntity, true); + } + + //todo do we actually need to tell the player about changes to their spiritweb here? + //cap.syncToClients(sender); + break; + } + } + } + } + + })); + context.setPacketHandled(true); + } + + private static void UpdateIntrinsicPowers(HonorbladeItem honorbladeItem, LivingEntity livingEntity, boolean isStoringHonorblade) + { + final Roshar.RadiantOrder radiantOrder = honorbladeItem.radiantOrder; + UUID uuid = UUID.fromString(radiantOrder.getName()); + Attribute firstSurge = SurgebindingAttributes.SURGEBINDING_ATTRIBUTES.get(radiantOrder.getFirstSurge()).getAttribute(); + Attribute secondSurge = SurgebindingAttributes.SURGEBINDING_ATTRIBUTES.get(radiantOrder.getSecondSurge()).getAttribute(); + + if (isStoringHonorblade) + { + //then add the power to the spiritweb + livingEntity.getAttribute(firstSurge).addPermanentModifier(new AttributeModifier(uuid, radiantOrder.getName() + "PrimaryHonorbladeSurge", 5, AttributeModifier.Operation.ADDITION)); + livingEntity.getAttribute(secondSurge).addPermanentModifier(new AttributeModifier(uuid, radiantOrder.getName() + "SecondaryHonorbladeSurge", 5, AttributeModifier.Operation.ADDITION)); + } + else + { + //otherwise remove, the power will be granted by having the item in hand + livingEntity.getAttribute(firstSurge).removePermanentModifier(uuid); + livingEntity.getAttribute(secondSurge).removePermanentModifier(uuid); + } + } + + @Override + public void encode(FriendlyByteBuf buf) + { + + } + +} diff --git a/src/surgebinding/java/leaf/cosmere/surgebinding/common/registries/SurgebindingArgumentTypes.java b/src/surgebinding/java/leaf/cosmere/surgebinding/common/registries/SurgebindingArgumentTypes.java new file mode 100644 index 000000000..b045cd6e3 --- /dev/null +++ b/src/surgebinding/java/leaf/cosmere/surgebinding/common/registries/SurgebindingArgumentTypes.java @@ -0,0 +1,24 @@ +/* + * File updated ~ 4 - 2 - 2025 ~ Leaf + */ + +package leaf.cosmere.surgebinding.common.registries; + +import leaf.cosmere.surgebinding.common.Surgebinding; +import leaf.cosmere.surgebinding.common.commands.arguments.RadiantOrderArgumentType; +import net.minecraft.commands.synchronization.ArgumentTypeInfo; +import net.minecraft.commands.synchronization.ArgumentTypeInfos; +import net.minecraft.commands.synchronization.SingletonArgumentInfo; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.RegistryObject; + +public class SurgebindingArgumentTypes +{ + public static final DeferredRegister> ARGUMENT_TYPE_INFOS = DeferredRegister.create(ForgeRegistries.COMMAND_ARGUMENT_TYPES, Surgebinding.MODID); + + public static final RegistryObject> RADIANT_ORDER_ARGUMENT_TYPE = ARGUMENT_TYPE_INFOS.register("radiant_order_argument_type", + () -> ArgumentTypeInfos.registerByClass( + RadiantOrderArgumentType.class, + SingletonArgumentInfo.contextFree(RadiantOrderArgumentType::createArgument))); +} diff --git a/src/surgebinding/java/leaf/cosmere/surgebinding/common/registries/SurgebindingAttributes.java b/src/surgebinding/java/leaf/cosmere/surgebinding/common/registries/SurgebindingAttributes.java new file mode 100644 index 000000000..c36479426 --- /dev/null +++ b/src/surgebinding/java/leaf/cosmere/surgebinding/common/registries/SurgebindingAttributes.java @@ -0,0 +1,37 @@ +/* + * File updated ~ 8 - 10 - 2022 ~ Leaf + */ + +package leaf.cosmere.surgebinding.common.registries; + +import leaf.cosmere.api.EnumUtils; +import leaf.cosmere.api.Roshar; +import leaf.cosmere.common.registration.impl.AttributeDeferredRegister; +import leaf.cosmere.common.registration.impl.AttributeRegistryObject; +import leaf.cosmere.surgebinding.common.Surgebinding; +import net.minecraft.world.entity.ai.attributes.Attribute; + +import java.util.Arrays; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +public class SurgebindingAttributes +{ + public static final AttributeDeferredRegister ATTRIBUTES = new AttributeDeferredRegister(Surgebinding.MODID); + + public static final Map> SURGEBINDING_ATTRIBUTES = + Arrays.stream(EnumUtils.SURGES) + .collect(Collectors.toMap( + Function.identity(), + surge -> + ATTRIBUTES.register( + surge.getName(), + Surgebinding.MODID, + 0, + 0, + 10 + ))); + + +} diff --git a/src/surgebinding/java/leaf/cosmere/surgebinding/common/registries/SurgebindingBiomeModifiers.java b/src/surgebinding/java/leaf/cosmere/surgebinding/common/registries/SurgebindingBiomeModifiers.java new file mode 100644 index 000000000..b2fce58e1 --- /dev/null +++ b/src/surgebinding/java/leaf/cosmere/surgebinding/common/registries/SurgebindingBiomeModifiers.java @@ -0,0 +1,17 @@ +/* + * File updated ~ 9 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.surgebinding.common.registries; + +import leaf.cosmere.common.registration.impl.BiomeModifierSerializerDeferredRegister; +import leaf.cosmere.surgebinding.common.Surgebinding; + +public class SurgebindingBiomeModifiers +{ + public static final BiomeModifierSerializerDeferredRegister BIOME_MODIFIER_SERIALIZERS = new BiomeModifierSerializerDeferredRegister(Surgebinding.MODID); + + //public static final BiomeModifierSerializerRegistryObject GEM_ORE_MODIFIER = BIOME_MODIFIER_SERIALIZERS.register("ores", GemOreBiomeFeatureModifier::makeCodec); + + +} diff --git a/src/surgebinding/java/leaf/cosmere/surgebinding/common/registries/SurgebindingBiomes.java b/src/surgebinding/java/leaf/cosmere/surgebinding/common/registries/SurgebindingBiomes.java new file mode 100644 index 000000000..179fe5fda --- /dev/null +++ b/src/surgebinding/java/leaf/cosmere/surgebinding/common/registries/SurgebindingBiomes.java @@ -0,0 +1,42 @@ +/* + * File updated ~ 10 - 8 - 2024 ~ Leaf + */ + +package leaf.cosmere.surgebinding.common.registries; + +import leaf.cosmere.common.registration.impl.BiomeDeferredRegister; +import leaf.cosmere.surgebinding.common.Surgebinding; +import net.minecraft.core.HolderGetter; +import net.minecraft.core.registries.Registries; +import net.minecraft.data.worldgen.BootstapContext; +import net.minecraft.data.worldgen.biome.OverworldBiomes; +import net.minecraft.resources.ResourceKey; +import net.minecraft.world.level.biome.Biome; +import net.minecraft.world.level.levelgen.NoiseGeneratorSettings; +import net.minecraft.world.level.levelgen.carver.ConfiguredWorldCarver; +import net.minecraft.world.level.levelgen.placement.PlacedFeature; + +public class SurgebindingBiomes +{ + public static final BiomeDeferredRegister BIOMES = new BiomeDeferredRegister(Surgebinding.MODID); + + //public static final BiomeRegistryObject ROSHAR_BIOME = BIOMES.register("roshar_biome", OverworldBiomes::stonyPeaks); + + + public static final ResourceKey ROSHAR_BIOME_KEY = ResourceKey.create(Registries.BIOME, Surgebinding.rl("roshar_biome")); + public static final ResourceKey ROSHAR_NOISE_SETTINGS = ResourceKey.create(Registries.NOISE_SETTINGS, Surgebinding.rl("roshar_biome")); + + + public static void bootstrapBiomes(BootstapContext context) + { + HolderGetter> carverGetter = context.lookup(Registries.CONFIGURED_CARVER); + HolderGetter placedFeatureGetter = context.lookup(Registries.PLACED_FEATURE); + + register(context, ROSHAR_BIOME_KEY, OverworldBiomes.stonyPeaks(placedFeatureGetter, carverGetter)); + } + + private static void register(BootstapContext context, ResourceKey key, Biome biome) + { + context.register(key, biome); + } +} diff --git a/src/surgebinding/java/leaf/cosmere/surgebinding/common/registries/SurgebindingBlocks.java b/src/surgebinding/java/leaf/cosmere/surgebinding/common/registries/SurgebindingBlocks.java new file mode 100644 index 000000000..3dcfde4fe --- /dev/null +++ b/src/surgebinding/java/leaf/cosmere/surgebinding/common/registries/SurgebindingBlocks.java @@ -0,0 +1,62 @@ +/* + * File updated ~ 9 - 10 - 2024 ~ Leaf + */ + +package leaf.cosmere.surgebinding.common.registries; + +import com.google.common.collect.ImmutableList; +import leaf.cosmere.api.Constants; +import leaf.cosmere.api.EnumUtils; +import leaf.cosmere.api.Roshar; +import leaf.cosmere.common.registration.impl.BlockDeferredRegister; +import leaf.cosmere.common.registration.impl.BlockRegistryObject; +import leaf.cosmere.surgebinding.common.Surgebinding; +import leaf.cosmere.surgebinding.common.blocks.*; +import net.minecraft.world.item.BlockItem; +import net.minecraft.world.item.Rarity; + +import java.util.Arrays; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +public class SurgebindingBlocks +{ + public static final BlockDeferredRegister BLOCKS = new BlockDeferredRegister(Surgebinding.MODID); + + public static final Map> GEM_BLOCKS = + Arrays.stream(EnumUtils.GEMSTONE_TYPES) + .collect(Collectors.toMap( + Function.identity(), + gemstone -> BLOCKS.registerWithRarity( + gemstone.getName() + Constants.RegNameStubs.BLOCK, + () -> new GemBlock(gemstone), + Rarity.UNCOMMON))); + +/* public static final Map> GEM_ORE = + Arrays.stream(EnumUtils.GEMSTONE_TYPES) + .collect(Collectors.toMap( + Function.identity(), + gemstone -> BLOCKS.registerWithRarity( + gemstone.getName() + Constants.RegNameStubs.ORE, + () -> new GemOreBlock(gemstone), + Rarity.UNCOMMON))); + + public static final Map> GEM_ORE_DEEPSLATE = + Arrays.stream(EnumUtils.GEMSTONE_TYPES) + .collect(Collectors.toMap( + Function.identity(), + gemstone -> BLOCKS.registerWithRarity( + Constants.RegNameStubs.DEEPSLATE + gemstone.getName() + Constants.RegNameStubs.ORE, + () -> new GemOreBlock(gemstone), + Rarity.UNCOMMON)));*/ + + public static final BlockRegistryObject LAVIS_POLYP_BLOCK = BLOCKS.register("lavis_polyp", LavisPolypBlock::new); + public static final BlockRegistryObject PRICKLETAC_BLOCK = BLOCKS.register("prickletac", PrickletacBlock::new); + public static final BlockRegistryObject ROCKBUD_VARIANT_BLOCK = BLOCKS.register("rockbud_variant", RockbudVariantBlock::new); + public static final BlockRegistryObject VINEBUD_BLOCK = BLOCKS.register("vinebud", VinebudBlock::new); + + // Add plant blocks to this list so they can get tags auto-generated by SurgebindingBlockTagsGen + public static final ImmutableList> PLANT_BLOCKS = ImmutableList.of(LAVIS_POLYP_BLOCK, PRICKLETAC_BLOCK, ROCKBUD_VARIANT_BLOCK, VINEBUD_BLOCK); + +} diff --git a/src/surgebinding/java/leaf/cosmere/surgebinding/common/registries/SurgebindingCreativeTabs.java b/src/surgebinding/java/leaf/cosmere/surgebinding/common/registries/SurgebindingCreativeTabs.java new file mode 100644 index 000000000..48ae5c9aa --- /dev/null +++ b/src/surgebinding/java/leaf/cosmere/surgebinding/common/registries/SurgebindingCreativeTabs.java @@ -0,0 +1,114 @@ +/* + * File updated ~ 8 - 11 - 2025 ~ Leaf + */ + +package leaf.cosmere.surgebinding.common.registries; + +import leaf.cosmere.api.EnumUtils; +import leaf.cosmere.api.Roshar; +import leaf.cosmere.common.registration.impl.BlockRegistryObject; +import leaf.cosmere.common.registration.impl.CreativeTabDeferredRegister; +import leaf.cosmere.common.registration.impl.CreativeTabRegistryObject; +import leaf.cosmere.surgebinding.common.Surgebinding; +import leaf.cosmere.surgebinding.common.blocks.GemBlock; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceKey; +import net.minecraft.world.item.BlockItem; +import net.minecraft.world.item.CreativeModeTab; +import net.minecraft.world.item.CreativeModeTabs; +import net.minecraftforge.event.BuildCreativeModeTabContentsEvent; + +public class SurgebindingCreativeTabs +{ + public static final CreativeTabDeferredRegister CREATIVE_TABS = new CreativeTabDeferredRegister(Surgebinding.MODID, SurgebindingCreativeTabs::addToExistingTabs); + + + public static final CreativeTabRegistryObject ITEMS = + CREATIVE_TABS.registerMain( + Component.translatable("tabs." + Surgebinding.MODID + ".items"), + SurgebindingItems.HONORBLADES.get(Roshar.RadiantOrder.SKYBREAKER), + builder -> + builder.withSearchBar()//Allow our tabs to be searchable for convenience purposes + .displayItems((displayParameters, output) -> + { + CreativeTabDeferredRegister.addToDisplay(SurgebindingItems.ITEMS, output); + CreativeTabDeferredRegister.addToDisplay(SurgebindingBlocks.BLOCKS, output); + addFilled(output); + }) + ); + + private static void addFilled(CreativeModeTab.Output output) + { + for (var gemstone : EnumUtils.GEMSTONE_TYPES) + { + SurgebindingItems.GEMSTONE_CHIPS.get(gemstone).get().addFilled(output); + SurgebindingItems.GEMSTONE_MARKS.get(gemstone).get().addFilled(output); + SurgebindingItems.GEMSTONE_BROAMS.get(gemstone).get().addFilled(output); + } + } + + private static void addToExistingTabs(BuildCreativeModeTabContentsEvent event) + { + ResourceKey tabKey = event.getTabKey(); + if (tabKey == CreativeModeTabs.BUILDING_BLOCKS) + { + //CreativeTabDeferredRegister.addToDisplay(event, BlocksRegistry.METALWORKING_TABLE); + } + else if (tabKey == CreativeModeTabs.NATURAL_BLOCKS) + { + /*for (var ore : BlocksRegistry.METAL_ORE.values()) + { + CreativeTabDeferredRegister.addToDisplay(event, ore); + } + for (var ore : BlocksRegistry.METAL_ORE_DEEPSLATE.values()) + { + CreativeTabDeferredRegister.addToDisplay(event, ore); + }*/ + } + else if (tabKey == CreativeModeTabs.COLORED_BLOCKS) + { + for (var gemstone : EnumUtils.GEMSTONE_TYPES) + { + BlockRegistryObject item = SurgebindingBlocks.GEM_BLOCKS.get(gemstone); + CreativeTabDeferredRegister.addToDisplay(event, item); + } + } + else if (tabKey == CreativeModeTabs.FUNCTIONAL_BLOCKS) + { + + } + else if (tabKey == CreativeModeTabs.REDSTONE_BLOCKS) + { + + } + else if (tabKey == CreativeModeTabs.TOOLS_AND_UTILITIES) + { + + } + else if (tabKey == CreativeModeTabs.COMBAT) + { + for (var gemstone : EnumUtils.RADIANT_ORDERS) + { + CreativeTabDeferredRegister.addToDisplay(event, SurgebindingItems.HONORBLADES.get(gemstone)); + } + } + else if (tabKey == CreativeModeTabs.FOOD_AND_DRINKS) + { + //ItemsRegistry.SOME_FOOD.get().addItems(event); + } + else if (tabKey == CreativeModeTabs.SPAWN_EGGS) + { + CreativeTabDeferredRegister.addToDisplay(event, SurgebindingItems.CHULL_EGG, SurgebindingItems.CRYPTIC_EGG); + } + else if (tabKey == CreativeModeTabs.INGREDIENTS) + { + for (var gemstone : EnumUtils.GEMSTONE_TYPES) + { + CreativeTabDeferredRegister.addToDisplay(event, SurgebindingItems.GEMSTONE_CHIPS.get(gemstone)); + CreativeTabDeferredRegister.addToDisplay(event, SurgebindingItems.GEMSTONE_MARKS.get(gemstone)); + CreativeTabDeferredRegister.addToDisplay(event, SurgebindingItems.GEMSTONE_BROAMS.get(gemstone)); + } + } + } + +} diff --git a/src/surgebinding/java/leaf/cosmere/surgebinding/common/registries/SurgebindingDimensions.java b/src/surgebinding/java/leaf/cosmere/surgebinding/common/registries/SurgebindingDimensions.java new file mode 100644 index 000000000..0a60cc422 --- /dev/null +++ b/src/surgebinding/java/leaf/cosmere/surgebinding/common/registries/SurgebindingDimensions.java @@ -0,0 +1,32 @@ +/* + * File updated ~ 10 - 8 - 2024 ~ Leaf + */ + +package leaf.cosmere.surgebinding.common.registries; + +import leaf.cosmere.api.CosmereAPI; +import leaf.cosmere.surgebinding.common.Surgebinding; +import net.minecraft.core.registries.Registries; +import net.minecraft.resources.ResourceKey; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.dimension.DimensionType; + +public class SurgebindingDimensions +{ + public static final ResourceKey ROSHAR_DIM_KEY = + ResourceKey.create( + Registries.DIMENSION, + Surgebinding.rl("roshar") + ); + + public static final ResourceKey ROSHAR_DIM_TYPE = + ResourceKey.create( + Registries.DIMENSION_TYPE, + ROSHAR_DIM_KEY.registry() + ); + + public static void register() + { + CosmereAPI.logger.info("Registering surgebinding dimensions"); + } +} diff --git a/src/surgebinding/java/leaf/cosmere/surgebinding/common/registries/SurgebindingEntityTypes.java b/src/surgebinding/java/leaf/cosmere/surgebinding/common/registries/SurgebindingEntityTypes.java new file mode 100644 index 000000000..20df1ca36 --- /dev/null +++ b/src/surgebinding/java/leaf/cosmere/surgebinding/common/registries/SurgebindingEntityTypes.java @@ -0,0 +1,52 @@ +/* + * File updated ~ 14 - 1 - 2025 ~ Leaf + */ + +package leaf.cosmere.surgebinding.common.registries; + +import leaf.cosmere.common.registration.impl.EntityTypeDeferredRegister; +import leaf.cosmere.common.registration.impl.EntityTypeRegistryObject; +import leaf.cosmere.surgebinding.common.Surgebinding; +import leaf.cosmere.surgebinding.common.entity.Chull; +import leaf.cosmere.surgebinding.common.entity.spren.Cryptic; +import leaf.cosmere.surgebinding.common.entity.spren.Honorspren; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.MobCategory; + +public class SurgebindingEntityTypes +{ + public static final EntityTypeDeferredRegister ENTITY_TYPES = new EntityTypeDeferredRegister(Surgebinding.MODID); + + public static final EntityTypeRegistryObject CHULL = + ENTITY_TYPES.register( + "chull", + EntityType.Builder.of(Chull::new, MobCategory.CREATURE) + .setShouldReceiveVelocityUpdates(false) + .setUpdateInterval(1) + .setTrackingRange(8) + .clientTrackingRange(10) + .sized(4.5f, 5.2f) + ); + + public static final EntityTypeRegistryObject CRYPTIC = + ENTITY_TYPES.register( + "cryptic", + EntityType.Builder.of(Cryptic::new, MobCategory.CREATURE) + .setShouldReceiveVelocityUpdates(false) + .setUpdateInterval(1) + .setTrackingRange(8) + .clientTrackingRange(10) + .sized(0.75f, 0.75f) + ); + + public static final EntityTypeRegistryObject HONORSPREN = + ENTITY_TYPES.register( + "honorspren", + EntityType.Builder.of(Honorspren::new, MobCategory.CREATURE) + .updateInterval(2) + .clientTrackingRange(8) + .sized(0.35F, 0.6F) + ); + + +} diff --git a/src/surgebinding/java/leaf/cosmere/surgebinding/common/registries/SurgebindingFeatures.java b/src/surgebinding/java/leaf/cosmere/surgebinding/common/registries/SurgebindingFeatures.java new file mode 100644 index 000000000..6c5a53af2 --- /dev/null +++ b/src/surgebinding/java/leaf/cosmere/surgebinding/common/registries/SurgebindingFeatures.java @@ -0,0 +1,16 @@ +/* + * File updated ~ 20 - 11 - 2024 ~ Leaf + */ + +package leaf.cosmere.surgebinding.common.registries; + +import leaf.cosmere.common.registration.impl.ConfiguredFeatureDeferredRegister; +import leaf.cosmere.common.registration.impl.PlacedFeatureDeferredRegister; +import leaf.cosmere.surgebinding.common.Surgebinding; + +public class SurgebindingFeatures +{ + public static final ConfiguredFeatureDeferredRegister CONFIGURED_FEATURES = new ConfiguredFeatureDeferredRegister(Surgebinding.MODID); + public static final PlacedFeatureDeferredRegister PLACED_FEATURES = new PlacedFeatureDeferredRegister(Surgebinding.MODID); + +} diff --git a/src/surgebinding/java/leaf/cosmere/surgebinding/common/registries/SurgebindingItems.java b/src/surgebinding/java/leaf/cosmere/surgebinding/common/registries/SurgebindingItems.java new file mode 100644 index 000000000..91a4c05e5 --- /dev/null +++ b/src/surgebinding/java/leaf/cosmere/surgebinding/common/registries/SurgebindingItems.java @@ -0,0 +1,88 @@ +/* + * File updated ~ 6 - 2 - 2025 ~ Leaf + */ + +package leaf.cosmere.surgebinding.common.registries; + +import leaf.cosmere.api.Constants; +import leaf.cosmere.api.EnumUtils; +import leaf.cosmere.api.Roshar; +import leaf.cosmere.common.properties.PropTypes; +import leaf.cosmere.common.registration.impl.ItemDeferredRegister; +import leaf.cosmere.common.registration.impl.ItemRegistryObject; +import leaf.cosmere.surgebinding.common.Surgebinding; +import leaf.cosmere.surgebinding.common.items.*; +import leaf.cosmere.surgebinding.common.items.tiers.ShardbladeItemTier; +import leaf.cosmere.surgebinding.common.items.tiers.ShardplateArmorMaterial; +import net.minecraft.world.item.ArmorItem; +import net.minecraftforge.common.ForgeSpawnEggItem; + +import java.util.Arrays; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +public class SurgebindingItems +{ + private SurgebindingItems() + { + } + + public static final ItemDeferredRegister ITEMS = new ItemDeferredRegister(Surgebinding.MODID); + + + public static final ShardbladeItemTier SHARDBLADE_ITEM_TIER = new ShardbladeItemTier(10); + + public static final ItemRegistryObject NIGHTBLOOD = ITEMS.register("nightblood", () -> new NightbloodItem(SHARDBLADE_ITEM_TIER, 24, -2.4F, PropTypes.Items.SHARDBLADE.get())); + public static final ItemRegistryObject TEST_BLADE = ITEMS.register("test_blade", () -> new ShardbladeItem(SHARDBLADE_ITEM_TIER, 10, -2.4F, PropTypes.Items.SHARDBLADE.get())); + public static final ItemRegistryObject SHARDBLADE = ITEMS.register("shardblade", () -> new ShardbladeDynamicItem(SHARDBLADE_ITEM_TIER, 24, -2.4F, PropTypes.Items.SHARDBLADE.get())); + public static final ItemRegistryObject MASTER_SWORD = ITEMS.register("master_sword", () -> new ShardbladeItem(SHARDBLADE_ITEM_TIER, 10, -2.4F, PropTypes.Items.SHARDBLADE.get())); + + public static final ItemRegistryObject SHARDPLATE_HELMET = ITEMS.register("shardplate_helmet", () -> new ShardplateItem(ShardplateArmorMaterial.DEADPLATE, ArmorItem.Type.HELMET, PropTypes.Items.SHARDBLADE.get())); + public static final ItemRegistryObject SHARDPLATE_CHEST = ITEMS.register("shardplate_chest", () -> new ShardplateItem(ShardplateArmorMaterial.DEADPLATE, ArmorItem.Type.CHESTPLATE, PropTypes.Items.SHARDBLADE.get())); + public static final ItemRegistryObject SHARDPLATE_LEGGINGS = ITEMS.register("shardplate_leggings", () -> new ShardplateItem(ShardplateArmorMaterial.DEADPLATE, ArmorItem.Type.LEGGINGS, PropTypes.Items.SHARDBLADE.get())); + public static final ItemRegistryObject SHARDPLATE_BOOTS = ITEMS.register("shardplate_boots", () -> new ShardplateItem(ShardplateArmorMaterial.DEADPLATE, ArmorItem.Type.BOOTS, PropTypes.Items.SHARDBLADE.get())); + + + public static final Map> HONORBLADES = + Arrays.stream(EnumUtils.RADIANT_ORDERS) + .collect(Collectors.toMap( + Function.identity(), + type -> ITEMS.register( + type.getName() + "_honorblade", + () -> new HonorbladeItem(type, SHARDBLADE_ITEM_TIER, 24, -2.4F, PropTypes.Items.SHARDBLADE.get()) + ))); + + + public static final Map> GEMSTONE_CHIPS = + Arrays.stream(EnumUtils.GEMSTONE_TYPES) + .collect(Collectors.toMap( + Function.identity(), + type -> ITEMS.register( + type.getName() + Constants.RegNameStubs.CHIP, + () -> new GemstoneItem(type, Roshar.GemSize.CHIP) + ))); + + + public static final Map> GEMSTONE_MARKS = + Arrays.stream(EnumUtils.GEMSTONE_TYPES) + .collect(Collectors.toMap( + Function.identity(), + type -> ITEMS.register( + type.getName() + Constants.RegNameStubs.MARK, + () -> new GemstoneItem(type, Roshar.GemSize.MARK) + ))); + + + public static final Map> GEMSTONE_BROAMS = + Arrays.stream(EnumUtils.GEMSTONE_TYPES) + .collect(Collectors.toMap( + Function.identity(), + type -> ITEMS.register( + type.getName() + Constants.RegNameStubs.BROAM, + () -> new GemstoneItem(type, Roshar.GemSize.BROAM) + ))); + + public static final ItemRegistryObject CHULL_EGG = ITEMS.registerSpawnEgg(SurgebindingEntityTypes.CHULL, 0x6c482f, 0x8a1a08); + public static final ItemRegistryObject CRYPTIC_EGG = ITEMS.registerSpawnEgg(SurgebindingEntityTypes.CRYPTIC, 0x272727, 0x4d4d4d); +} diff --git a/src/surgebinding/java/leaf/cosmere/surgebinding/common/registries/SurgebindingManifestations.java b/src/surgebinding/java/leaf/cosmere/surgebinding/common/registries/SurgebindingManifestations.java new file mode 100644 index 000000000..ad9eea742 --- /dev/null +++ b/src/surgebinding/java/leaf/cosmere/surgebinding/common/registries/SurgebindingManifestations.java @@ -0,0 +1,52 @@ +/* + * File updated ~ 20 - 11 - 2024 ~ Leaf + */ + +package leaf.cosmere.surgebinding.common.registries; + +import leaf.cosmere.api.EnumUtils; +import leaf.cosmere.api.Roshar; +import leaf.cosmere.api.manifestation.Manifestation; +import leaf.cosmere.common.registration.impl.ManifestationDeferredRegister; +import leaf.cosmere.common.registration.impl.ManifestationRegistryObject; +import leaf.cosmere.surgebinding.common.Surgebinding; +import leaf.cosmere.surgebinding.common.manifestation.*; + +import java.util.Arrays; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +public class SurgebindingManifestations +{ + public static final ManifestationDeferredRegister MANIFESTATIONS = new ManifestationDeferredRegister(Surgebinding.MODID); + + + public static final Map> SURGEBINDING_POWERS = + Arrays.stream(EnumUtils.SURGES) + .collect(Collectors.toMap( + Function.identity(), + surge -> + MANIFESTATIONS.register( + surge.getName(), + () -> makeSurgebindingManifestation(surge)) + )); + + + private static SurgebindingManifestation makeSurgebindingManifestation(Roshar.Surges surge) + { + return switch (surge) + { + case ADHESION -> new SurgeAdhesion(surge); + case GRAVITATION -> new SurgeGravitation(surge); + case DIVISION -> new SurgeDivision(surge); + case ABRASION -> new SurgeAbrasion(surge); + case PROGRESSION -> new SurgeProgression(surge); + case ILLUMINATION -> new SurgeIllumination(surge); + case TRANSFORMATION -> new SurgeTransformation(surge); + case TRANSPORTATION -> new SurgeTransportation(surge); + case COHESION -> new SurgeCohesion(surge); + case TENSION -> new SurgeTension(surge); + }; + } +} diff --git a/src/surgebinding/java/leaf/cosmere/surgebinding/mixin/LivingEntityMixin.java b/src/surgebinding/java/leaf/cosmere/surgebinding/mixin/LivingEntityMixin.java new file mode 100644 index 000000000..cebc80395 --- /dev/null +++ b/src/surgebinding/java/leaf/cosmere/surgebinding/mixin/LivingEntityMixin.java @@ -0,0 +1,42 @@ +/* + * File updated ~ 23 - 10 - 2022 ~ Leaf + */ + +package leaf.cosmere.surgebinding.mixin; + +import leaf.cosmere.surgebinding.common.manifestation.SurgeGravitation; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.item.ItemStack; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +@Mixin(LivingEntity.class) +public class LivingEntityMixin +{ + @Redirect( + method = "updateFallFlying", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/world/item/ItemStack;canElytraFly(Lnet/minecraft/world/entity/LivingEntity;)Z", + remap = false + ) + ) + public boolean canElytraFly(ItemStack stack, LivingEntity entity) + { + return stack.canElytraFly(entity) || SurgeGravitation.canFly(entity); + } + + @Redirect( + method = "updateFallFlying", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/world/item/ItemStack;elytraFlightTick(Lnet/minecraft/world/entity/LivingEntity;I)Z", + remap = false + ) + ) + public boolean elytraFlightTick(ItemStack stack, LivingEntity entity, int flightTicks) + { + return SurgeGravitation.flyTick(entity) || stack.elytraFlightTick(entity, flightTicks); + } +} diff --git a/src/surgebinding/java/leaf/cosmere/surgebinding/mixin/LocalPlayerMixin.java b/src/surgebinding/java/leaf/cosmere/surgebinding/mixin/LocalPlayerMixin.java new file mode 100644 index 000000000..93f42653c --- /dev/null +++ b/src/surgebinding/java/leaf/cosmere/surgebinding/mixin/LocalPlayerMixin.java @@ -0,0 +1,31 @@ +/* + * File updated ~ 23 - 10 - 2022 ~ Leaf + */ + +package leaf.cosmere.surgebinding.mixin; + +import leaf.cosmere.surgebinding.common.manifestation.SurgeGravitation; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.item.ItemStack; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + + +@Mixin(LocalPlayer.class) +public class LocalPlayerMixin +{ + @Redirect( + method = "aiStep", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/world/item/ItemStack;canElytraFly(Lnet/minecraft/world/entity/LivingEntity;)Z", + remap = false + ) + ) + public boolean canElytraFly(ItemStack stack, LivingEntity entity) + { + return stack.canElytraFly(entity) || SurgeGravitation.canFly(entity); + } +} diff --git a/src/surgebinding/java/leaf/cosmere/surgebinding/mixin/PlayerMixin.java b/src/surgebinding/java/leaf/cosmere/surgebinding/mixin/PlayerMixin.java new file mode 100644 index 000000000..f158918f1 --- /dev/null +++ b/src/surgebinding/java/leaf/cosmere/surgebinding/mixin/PlayerMixin.java @@ -0,0 +1,30 @@ +/* + * File updated ~ 23 - 10 - 2022 ~ Leaf + */ + +package leaf.cosmere.surgebinding.mixin; + +import leaf.cosmere.surgebinding.common.manifestation.SurgeGravitation; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +@Mixin(Player.class) +public class PlayerMixin +{ + @Redirect( + method = "tryToStartFallFlying", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/world/item/ItemStack;canElytraFly(Lnet/minecraft/world/entity/LivingEntity;)Z", + remap = false + ) + ) + public boolean tryToStartFallFlying(ItemStack stack, LivingEntity entity) + { + return stack.canElytraFly(entity) || SurgeGravitation.canFly(entity); + } +} diff --git a/src/surgebinding/java/leaf/cosmere/surgebinding/mixin/RaidMixin.java b/src/surgebinding/java/leaf/cosmere/surgebinding/mixin/RaidMixin.java new file mode 100644 index 000000000..8ce7590c5 --- /dev/null +++ b/src/surgebinding/java/leaf/cosmere/surgebinding/mixin/RaidMixin.java @@ -0,0 +1,29 @@ +/* + * File updated ~ 15 - 1 - 2025 ~ Leaf + */ + +package leaf.cosmere.surgebinding.mixin; + +import leaf.cosmere.surgebinding.common.mixinAccess.RaidMixinAccess; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.entity.raid.Raid; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; + +import java.util.Set; +import java.util.UUID; + +@Mixin(Raid.class) +public abstract class RaidMixin implements RaidMixinAccess +{ + @Shadow + @Final + private Set heroesOfTheVillage; + + @Override + public boolean _cosmere$isHero(Player player) + { + return heroesOfTheVillage.contains(player.getUUID()); + } +} diff --git a/src/surgebinding/resources/META-INF/accesstransformer.cfg b/src/surgebinding/resources/META-INF/accesstransformer.cfg new file mode 100644 index 000000000..7d0daf006 --- /dev/null +++ b/src/surgebinding/resources/META-INF/accesstransformer.cfg @@ -0,0 +1,2 @@ +public net.minecraft.world.damagesource.CombatTracker f_19281_ #inCombat +protected net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer f_172548_ \ No newline at end of file diff --git a/src/surgebinding/resources/META-INF/mods.toml b/src/surgebinding/resources/META-INF/mods.toml new file mode 100644 index 000000000..fd036d213 --- /dev/null +++ b/src/surgebinding/resources/META-INF/mods.toml @@ -0,0 +1,37 @@ +modLoader = "javafml" +loaderVersion = "${loader_version}" +issueTrackerURL = "https://github.com/leafreynolds/Cosmere/issues" +license = "MIT" + +[[mods]] +modId = "surgebinding" +version = "${version}" +displayName = "Cosmere: Surgebinding" +displayURL = "https://www.curseforge.com/minecraft/mc-mods/cosmere" +authors = "Leafy" +credits = ''' + +Hawktrav - Various models and textures. +Luke13234 - Who wrote much of the Ars Arcanum guide book entries. +Eliot Lash - Implementation of Rosharan plant blocks and Cryptic model/animation. + +Special thanks go to: +Ridanisaurus - For many item and block textures. +AlaharranHonor - For Rosharan plant blocks and textures. +''' +logoFile = "logo.png" +description = '''Surgebinding module for Cosmere.''' + +[[dependencies.surgebinding]] +modId = "cosmere" +mandatory = true +versionRange = "[${version}]" +ordering = "AFTER" +side = "BOTH" + +[[dependencies.surgebinding]] +modId = "hemalurgy" +mandatory = false +versionRange = "[${version}]" +ordering = "BEFORE" +side = "BOTH" \ No newline at end of file diff --git a/src/surgebinding/resources/assets/surgebinding/blockstates/lavis_polyp.json b/src/surgebinding/resources/assets/surgebinding/blockstates/lavis_polyp.json new file mode 100644 index 000000000..84cbfb0fc --- /dev/null +++ b/src/surgebinding/resources/assets/surgebinding/blockstates/lavis_polyp.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=north": { + "model": "surgebinding:block/lavis_polyp", + "y": 180 + }, + "facing=east": { + "model": "surgebinding:block/lavis_polyp", + "y": 270 + }, + "facing=south": { + "model": "surgebinding:block/lavis_polyp" + }, + "facing=west": { + "model": "surgebinding:block/lavis_polyp", + "y": 90 + } + } +} diff --git a/src/surgebinding/resources/assets/surgebinding/blockstates/prickletac.json b/src/surgebinding/resources/assets/surgebinding/blockstates/prickletac.json new file mode 100644 index 000000000..1bb1c4e1f --- /dev/null +++ b/src/surgebinding/resources/assets/surgebinding/blockstates/prickletac.json @@ -0,0 +1,13 @@ +{ + "variants": { + "state=1": { + "model": "surgebinding:block/prickletac1" + }, + "state=2": { + "model": "surgebinding:block/prickletac2" + }, + "state=3": { + "model": "surgebinding:block/prickletac3" + } + } +} diff --git a/src/surgebinding/resources/assets/surgebinding/blockstates/rockbud_variant.json b/src/surgebinding/resources/assets/surgebinding/blockstates/rockbud_variant.json new file mode 100644 index 000000000..54b379e13 --- /dev/null +++ b/src/surgebinding/resources/assets/surgebinding/blockstates/rockbud_variant.json @@ -0,0 +1,22 @@ +{ + "variants": { + "state=1": { + "model": "surgebinding:block/rockbud_variant1" + }, + "state=2": { + "model": "surgebinding:block/rockbud_variant2" + }, + "state=3": { + "model": "surgebinding:block/rockbud_variant3" + }, + "state=4": { + "model": "surgebinding:block/rockbud_variant4" + }, + "state=5": { + "model": "surgebinding:block/rockbud_variant5" + }, + "state=6": { + "model": "surgebinding:block/rockbud_variant6" + } + } +} diff --git a/src/surgebinding/resources/assets/surgebinding/blockstates/vinebud.json b/src/surgebinding/resources/assets/surgebinding/blockstates/vinebud.json new file mode 100644 index 000000000..954232299 --- /dev/null +++ b/src/surgebinding/resources/assets/surgebinding/blockstates/vinebud.json @@ -0,0 +1,16 @@ +{ + "variants": { + "state=1": { + "model": "surgebinding:block/vinebud1" + }, + "state=2": { + "model": "surgebinding:block/vinebud2" + }, + "state=3": { + "model": "surgebinding:block/vinebud3" + }, + "state=4": { + "model": "surgebinding:block/vinebud4" + } + } +} diff --git a/src/surgebinding/resources/assets/surgebinding/lang/es_es.json b/src/surgebinding/resources/assets/surgebinding/lang/es_es.json new file mode 100644 index 000000000..5ea991e07 --- /dev/null +++ b/src/surgebinding/resources/assets/surgebinding/lang/es_es.json @@ -0,0 +1,130 @@ +{ + "advancements.surgebinding.surgebinding.abrasion.description": "Test description: Abrasion", + "advancements.surgebinding.surgebinding.abrasion.title": "Abrasion", + "advancements.surgebinding.surgebinding.adhesion.description": "Test description: Adhesion", + "advancements.surgebinding.surgebinding.adhesion.title": "Adhesion", + "advancements.surgebinding.surgebinding.cohesion.description": "Test description: Cohesion", + "advancements.surgebinding.surgebinding.cohesion.title": "Cohesion", + "advancements.surgebinding.surgebinding.description": "Test description: Surgebinding", + "advancements.surgebinding.surgebinding.division.description": "Test description: Division", + "advancements.surgebinding.surgebinding.division.title": "Division", + "advancements.surgebinding.surgebinding.gravitation.description": "Test description: Gravitation", + "advancements.surgebinding.surgebinding.gravitation.title": "Gravitation", + "advancements.surgebinding.surgebinding.illumination.description": "Test description: Illumination", + "advancements.surgebinding.surgebinding.illumination.title": "Illumination", + "advancements.surgebinding.surgebinding.progression.description": "Test description: Progression", + "advancements.surgebinding.surgebinding.progression.title": "Progression", + "advancements.surgebinding.surgebinding.tension.description": "Test description: Tension", + "advancements.surgebinding.surgebinding.tension.title": "Tension", + "advancements.surgebinding.surgebinding.title": "Surgebinding", + "advancements.surgebinding.surgebinding.transformation.description": "Test description: Transformation", + "advancements.surgebinding.surgebinding.transformation.title": "Transformation", + "advancements.surgebinding.surgebinding.transportation.description": "Test description: Transportation", + "advancements.surgebinding.surgebinding.transportation.title": "Transportation", + "block.surgebinding.amethyst_block": "Amethyst Block", + "block.surgebinding.amethyst_ore": "Amethyst Ore", + "block.surgebinding.deepslate_amethyst_ore": "Deepslate Amethyst Ore", + "block.surgebinding.deepslate_diamond_ore": "Deepslate Diamond Ore", + "block.surgebinding.deepslate_emerald_ore": "Deepslate Emerald Ore", + "block.surgebinding.deepslate_garnet_ore": "Deepslate Garnet Ore", + "block.surgebinding.deepslate_heliodor_ore": "Deepslate Heliodor Ore", + "block.surgebinding.deepslate_ruby_ore": "Deepslate Ruby Ore", + "block.surgebinding.deepslate_sapphire_ore": "Deepslate Sapphire Ore", + "block.surgebinding.deepslate_smokestone_ore": "Deepslate Smokestone Ore", + "block.surgebinding.deepslate_topaz_ore": "Deepslate Topaz Ore", + "block.surgebinding.deepslate_zircon_ore": "Deepslate Zircon Ore", + "block.surgebinding.diamond_block": "Diamond Block", + "block.surgebinding.diamond_ore": "Diamond Ore", + "block.surgebinding.emerald_block": "Emerald Block", + "block.surgebinding.emerald_ore": "Emerald Ore", + "block.surgebinding.garnet_block": "Garnet Block", + "block.surgebinding.garnet_ore": "Garnet Ore", + "block.surgebinding.heliodor_block": "Heliodor Block", + "block.surgebinding.heliodor_ore": "Heliodor Ore", + "block.surgebinding.lavis_polyp": "Lavis Polyp", + "block.surgebinding.prickletac": "Prickletac", + "block.surgebinding.rockbud_variant": "Rockbud Variant", + "block.surgebinding.ruby_block": "Ruby Block", + "block.surgebinding.ruby_ore": "Ruby Ore", + "block.surgebinding.sapphire_block": "Sapphire Block", + "block.surgebinding.sapphire_ore": "Sapphire Ore", + "block.surgebinding.smokestone_block": "Smokestone Block", + "block.surgebinding.smokestone_ore": "Smokestone Ore", + "block.surgebinding.topaz_block": "Topaz Block", + "block.surgebinding.topaz_ore": "Topaz Ore", + "block.surgebinding.vinebud": "Vinebud", + "block.surgebinding.zircon_block": "Zircon Block", + "block.surgebinding.zircon_ore": "Zircon Ore", + "entity.surgebinding.chull": "Chull", + "entity.surgebinding.cryptic": "Cryptic", + "item.surgebinding.amethyst_broam": "Amethyst Broam", + "item.surgebinding.amethyst_chip": "Amethyst Chip", + "item.surgebinding.amethyst_mark": "Amethyst Mark", + "item.surgebinding.bondsmith_honorblade": "Bondsmith Honorblade", + "item.surgebinding.chull_spawn_egg": "Chull Spawn Egg", + "item.surgebinding.cryptic_spawn_egg": "Cryptic Spawn Egg", + "item.surgebinding.diamond_broam": "Diamond Broam", + "item.surgebinding.diamond_chip": "Diamond Chip", + "item.surgebinding.diamond_mark": "Diamond Mark", + "item.surgebinding.dustbringer_honorblade": "Dustbringer Honorblade", + "item.surgebinding.edgedancer_honorblade": "Edgedancer Honorblade", + "item.surgebinding.elsecaller_honorblade": "Elsecaller Honorblade", + "item.surgebinding.emerald_broam": "Emerald Broam", + "item.surgebinding.emerald_chip": "Emerald Chip", + "item.surgebinding.emerald_mark": "Emerald Mark", + "item.surgebinding.garnet_broam": "Garnet Broam", + "item.surgebinding.garnet_chip": "Garnet Chip", + "item.surgebinding.garnet_mark": "Garnet Mark", + "item.surgebinding.heliodor_broam": "Heliodor Broam", + "item.surgebinding.heliodor_chip": "Heliodor Chip", + "item.surgebinding.heliodor_mark": "Heliodor Mark", + "item.surgebinding.lightweaver_honorblade": "Lightweaver Honorblade", + "item.surgebinding.master_sword": "Master Sword", + "item.surgebinding.nightblood": "Nightblood", + "item.surgebinding.ruby_broam": "Ruby Broam", + "item.surgebinding.ruby_chip": "Ruby Chip", + "item.surgebinding.ruby_mark": "Ruby Mark", + "item.surgebinding.sapphire_broam": "Sapphire Broam", + "item.surgebinding.sapphire_chip": "Sapphire Chip", + "item.surgebinding.sapphire_mark": "Sapphire Mark", + "item.surgebinding.shardplate_boots": "Shardplate Boots", + "item.surgebinding.shardplate_chest": "Shardplate Chest", + "item.surgebinding.shardplate_helmet": "Shardplate Helmet", + "item.surgebinding.shardplate_leggings": "Shardplate Leggings", + "item.surgebinding.skybreaker_honorblade": "Skybreaker Honorblade", + "item.surgebinding.smokestone_broam": "Smokestone Broam", + "item.surgebinding.smokestone_chip": "Smokestone Chip", + "item.surgebinding.smokestone_mark": "Smokestone Mark", + "item.surgebinding.stoneward_honorblade": "Stoneward Honorblade", + "item.surgebinding.test_blade": "Test Blade", + "item.surgebinding.topaz_broam": "Topaz Broam", + "item.surgebinding.topaz_chip": "Topaz Chip", + "item.surgebinding.topaz_mark": "Topaz Mark", + "item.surgebinding.truthwatcher_honorblade": "Truthwatcher Honorblade", + "item.surgebinding.willshaper_honorblade": "Willshaper Honorblade", + "item.surgebinding.windrunner_honorblade": "Windrunner Honorblade", + "item.surgebinding.zircon_broam": "Zircon Broam", + "item.surgebinding.zircon_chip": "Zircon Chip", + "item.surgebinding.zircon_mark": "Zircon Mark", + "key.cosmere.stormlight.shardblade": "Summon/Dismiss Shardblade", + "manifestation.surgebinding.abrasion": "Abrasion", + "manifestation.surgebinding.abrasion.description": "Needs description", + "manifestation.surgebinding.adhesion": "Adhesion", + "manifestation.surgebinding.adhesion.description": "Needs description", + "manifestation.surgebinding.cohesion": "Cohesion", + "manifestation.surgebinding.cohesion.description": "Needs description", + "manifestation.surgebinding.division": "Division", + "manifestation.surgebinding.division.description": "Needs description", + "manifestation.surgebinding.gravitation": "Gravitation", + "manifestation.surgebinding.gravitation.description": "Needs description", + "manifestation.surgebinding.illumination": "Illumination", + "manifestation.surgebinding.illumination.description": "Needs description", + "manifestation.surgebinding.progression": "Progression", + "manifestation.surgebinding.progression.description": "Needs description", + "manifestation.surgebinding.tension": "Tension", + "manifestation.surgebinding.tension.description": "Needs description", + "manifestation.surgebinding.transformation": "Transformation", + "manifestation.surgebinding.transformation.description": "Needs description", + "manifestation.surgebinding.transportation": "Transportation", + "manifestation.surgebinding.transportation.description": "Needs description" +} \ No newline at end of file diff --git a/src/surgebinding/resources/assets/surgebinding/lang/sv_se.json b/src/surgebinding/resources/assets/surgebinding/lang/sv_se.json new file mode 100644 index 000000000..5ea991e07 --- /dev/null +++ b/src/surgebinding/resources/assets/surgebinding/lang/sv_se.json @@ -0,0 +1,130 @@ +{ + "advancements.surgebinding.surgebinding.abrasion.description": "Test description: Abrasion", + "advancements.surgebinding.surgebinding.abrasion.title": "Abrasion", + "advancements.surgebinding.surgebinding.adhesion.description": "Test description: Adhesion", + "advancements.surgebinding.surgebinding.adhesion.title": "Adhesion", + "advancements.surgebinding.surgebinding.cohesion.description": "Test description: Cohesion", + "advancements.surgebinding.surgebinding.cohesion.title": "Cohesion", + "advancements.surgebinding.surgebinding.description": "Test description: Surgebinding", + "advancements.surgebinding.surgebinding.division.description": "Test description: Division", + "advancements.surgebinding.surgebinding.division.title": "Division", + "advancements.surgebinding.surgebinding.gravitation.description": "Test description: Gravitation", + "advancements.surgebinding.surgebinding.gravitation.title": "Gravitation", + "advancements.surgebinding.surgebinding.illumination.description": "Test description: Illumination", + "advancements.surgebinding.surgebinding.illumination.title": "Illumination", + "advancements.surgebinding.surgebinding.progression.description": "Test description: Progression", + "advancements.surgebinding.surgebinding.progression.title": "Progression", + "advancements.surgebinding.surgebinding.tension.description": "Test description: Tension", + "advancements.surgebinding.surgebinding.tension.title": "Tension", + "advancements.surgebinding.surgebinding.title": "Surgebinding", + "advancements.surgebinding.surgebinding.transformation.description": "Test description: Transformation", + "advancements.surgebinding.surgebinding.transformation.title": "Transformation", + "advancements.surgebinding.surgebinding.transportation.description": "Test description: Transportation", + "advancements.surgebinding.surgebinding.transportation.title": "Transportation", + "block.surgebinding.amethyst_block": "Amethyst Block", + "block.surgebinding.amethyst_ore": "Amethyst Ore", + "block.surgebinding.deepslate_amethyst_ore": "Deepslate Amethyst Ore", + "block.surgebinding.deepslate_diamond_ore": "Deepslate Diamond Ore", + "block.surgebinding.deepslate_emerald_ore": "Deepslate Emerald Ore", + "block.surgebinding.deepslate_garnet_ore": "Deepslate Garnet Ore", + "block.surgebinding.deepslate_heliodor_ore": "Deepslate Heliodor Ore", + "block.surgebinding.deepslate_ruby_ore": "Deepslate Ruby Ore", + "block.surgebinding.deepslate_sapphire_ore": "Deepslate Sapphire Ore", + "block.surgebinding.deepslate_smokestone_ore": "Deepslate Smokestone Ore", + "block.surgebinding.deepslate_topaz_ore": "Deepslate Topaz Ore", + "block.surgebinding.deepslate_zircon_ore": "Deepslate Zircon Ore", + "block.surgebinding.diamond_block": "Diamond Block", + "block.surgebinding.diamond_ore": "Diamond Ore", + "block.surgebinding.emerald_block": "Emerald Block", + "block.surgebinding.emerald_ore": "Emerald Ore", + "block.surgebinding.garnet_block": "Garnet Block", + "block.surgebinding.garnet_ore": "Garnet Ore", + "block.surgebinding.heliodor_block": "Heliodor Block", + "block.surgebinding.heliodor_ore": "Heliodor Ore", + "block.surgebinding.lavis_polyp": "Lavis Polyp", + "block.surgebinding.prickletac": "Prickletac", + "block.surgebinding.rockbud_variant": "Rockbud Variant", + "block.surgebinding.ruby_block": "Ruby Block", + "block.surgebinding.ruby_ore": "Ruby Ore", + "block.surgebinding.sapphire_block": "Sapphire Block", + "block.surgebinding.sapphire_ore": "Sapphire Ore", + "block.surgebinding.smokestone_block": "Smokestone Block", + "block.surgebinding.smokestone_ore": "Smokestone Ore", + "block.surgebinding.topaz_block": "Topaz Block", + "block.surgebinding.topaz_ore": "Topaz Ore", + "block.surgebinding.vinebud": "Vinebud", + "block.surgebinding.zircon_block": "Zircon Block", + "block.surgebinding.zircon_ore": "Zircon Ore", + "entity.surgebinding.chull": "Chull", + "entity.surgebinding.cryptic": "Cryptic", + "item.surgebinding.amethyst_broam": "Amethyst Broam", + "item.surgebinding.amethyst_chip": "Amethyst Chip", + "item.surgebinding.amethyst_mark": "Amethyst Mark", + "item.surgebinding.bondsmith_honorblade": "Bondsmith Honorblade", + "item.surgebinding.chull_spawn_egg": "Chull Spawn Egg", + "item.surgebinding.cryptic_spawn_egg": "Cryptic Spawn Egg", + "item.surgebinding.diamond_broam": "Diamond Broam", + "item.surgebinding.diamond_chip": "Diamond Chip", + "item.surgebinding.diamond_mark": "Diamond Mark", + "item.surgebinding.dustbringer_honorblade": "Dustbringer Honorblade", + "item.surgebinding.edgedancer_honorblade": "Edgedancer Honorblade", + "item.surgebinding.elsecaller_honorblade": "Elsecaller Honorblade", + "item.surgebinding.emerald_broam": "Emerald Broam", + "item.surgebinding.emerald_chip": "Emerald Chip", + "item.surgebinding.emerald_mark": "Emerald Mark", + "item.surgebinding.garnet_broam": "Garnet Broam", + "item.surgebinding.garnet_chip": "Garnet Chip", + "item.surgebinding.garnet_mark": "Garnet Mark", + "item.surgebinding.heliodor_broam": "Heliodor Broam", + "item.surgebinding.heliodor_chip": "Heliodor Chip", + "item.surgebinding.heliodor_mark": "Heliodor Mark", + "item.surgebinding.lightweaver_honorblade": "Lightweaver Honorblade", + "item.surgebinding.master_sword": "Master Sword", + "item.surgebinding.nightblood": "Nightblood", + "item.surgebinding.ruby_broam": "Ruby Broam", + "item.surgebinding.ruby_chip": "Ruby Chip", + "item.surgebinding.ruby_mark": "Ruby Mark", + "item.surgebinding.sapphire_broam": "Sapphire Broam", + "item.surgebinding.sapphire_chip": "Sapphire Chip", + "item.surgebinding.sapphire_mark": "Sapphire Mark", + "item.surgebinding.shardplate_boots": "Shardplate Boots", + "item.surgebinding.shardplate_chest": "Shardplate Chest", + "item.surgebinding.shardplate_helmet": "Shardplate Helmet", + "item.surgebinding.shardplate_leggings": "Shardplate Leggings", + "item.surgebinding.skybreaker_honorblade": "Skybreaker Honorblade", + "item.surgebinding.smokestone_broam": "Smokestone Broam", + "item.surgebinding.smokestone_chip": "Smokestone Chip", + "item.surgebinding.smokestone_mark": "Smokestone Mark", + "item.surgebinding.stoneward_honorblade": "Stoneward Honorblade", + "item.surgebinding.test_blade": "Test Blade", + "item.surgebinding.topaz_broam": "Topaz Broam", + "item.surgebinding.topaz_chip": "Topaz Chip", + "item.surgebinding.topaz_mark": "Topaz Mark", + "item.surgebinding.truthwatcher_honorblade": "Truthwatcher Honorblade", + "item.surgebinding.willshaper_honorblade": "Willshaper Honorblade", + "item.surgebinding.windrunner_honorblade": "Windrunner Honorblade", + "item.surgebinding.zircon_broam": "Zircon Broam", + "item.surgebinding.zircon_chip": "Zircon Chip", + "item.surgebinding.zircon_mark": "Zircon Mark", + "key.cosmere.stormlight.shardblade": "Summon/Dismiss Shardblade", + "manifestation.surgebinding.abrasion": "Abrasion", + "manifestation.surgebinding.abrasion.description": "Needs description", + "manifestation.surgebinding.adhesion": "Adhesion", + "manifestation.surgebinding.adhesion.description": "Needs description", + "manifestation.surgebinding.cohesion": "Cohesion", + "manifestation.surgebinding.cohesion.description": "Needs description", + "manifestation.surgebinding.division": "Division", + "manifestation.surgebinding.division.description": "Needs description", + "manifestation.surgebinding.gravitation": "Gravitation", + "manifestation.surgebinding.gravitation.description": "Needs description", + "manifestation.surgebinding.illumination": "Illumination", + "manifestation.surgebinding.illumination.description": "Needs description", + "manifestation.surgebinding.progression": "Progression", + "manifestation.surgebinding.progression.description": "Needs description", + "manifestation.surgebinding.tension": "Tension", + "manifestation.surgebinding.tension.description": "Needs description", + "manifestation.surgebinding.transformation": "Transformation", + "manifestation.surgebinding.transformation.description": "Needs description", + "manifestation.surgebinding.transportation": "Transportation", + "manifestation.surgebinding.transportation.description": "Needs description" +} \ No newline at end of file diff --git a/src/surgebinding/resources/assets/surgebinding/models/block/lavis_polyp.json b/src/surgebinding/resources/assets/surgebinding/models/block/lavis_polyp.json new file mode 100644 index 000000000..d4b433dfa --- /dev/null +++ b/src/surgebinding/resources/assets/surgebinding/models/block/lavis_polyp.json @@ -0,0 +1,453 @@ +{ + "credit": "Made with Blockbench", + "texture_size": [32, 32], + "textures": { + "0": "surgebinding:block/lavis_polyp", + "particle": "surgebinding:block/lavis_polyp" + }, + "elements": [ + { + "from": [6, 0, 6], + "to": [10, 1, 10], + "rotation": {"angle": -22.5, "axis": "y", "origin": [8, 3.92857, 8]}, + "faces": { + "north": {"uv": [6, 0, 8, 0.5], "texture": "#0"}, + "east": {"uv": [6, 0.5, 8, 1], "texture": "#0"}, + "south": {"uv": [6, 1, 8, 1.5], "texture": "#0"}, + "west": {"uv": [6, 1.5, 8, 2], "texture": "#0"}, + "up": {"uv": [2, 8, 0, 6], "texture": "#0"}, + "down": {"uv": [4, 6, 2, 8], "texture": "#0"} + } + }, + { + "from": [6, 4, 6], + "to": [10, 5, 10], + "rotation": {"angle": -22.5, "axis": "y", "origin": [8, 3.92857, 8]}, + "faces": { + "north": {"uv": [6, 2, 8, 2.5], "texture": "#0"}, + "east": {"uv": [6, 2.5, 8, 3], "texture": "#0"}, + "south": {"uv": [6, 3, 8, 3.5], "texture": "#0"}, + "west": {"uv": [6, 3.5, 8, 4], "texture": "#0"}, + "up": {"uv": [6, 8, 4, 6], "texture": "#0"}, + "down": {"uv": [8, 6, 6, 8], "texture": "#0"} + } + }, + { + "from": [5, 1, 5], + "to": [11, 4, 11], + "rotation": {"angle": -22.5, "axis": "y", "origin": [8, 3.92857, 8]}, + "faces": { + "north": {"uv": [3, 3, 6, 4.5], "texture": "#0"}, + "east": {"uv": [3, 0, 6, 1.5], "texture": "#0"}, + "south": {"uv": [3, 1.5, 6, 3], "texture": "#0"}, + "west": {"uv": [3, 4.5, 6, 6], "texture": "#0"}, + "up": {"uv": [3, 3, 0, 0], "texture": "#0"}, + "down": {"uv": [3, 3, 0, 6], "texture": "#0"} + } + }, + { + "from": [8, 4.5, 7], + "to": [8, 5.5, 9], + "rotation": {"angle": -22.5, "axis": "y", "origin": [8, 3.92857, 8]}, + "faces": { + "north": {"uv": [0, 0, 0, 0.5], "texture": "#0"}, + "east": {"uv": [4, 8, 5, 8.5], "texture": "#0"}, + "south": {"uv": [0, 0, 0, 0.5], "texture": "#0"}, + "west": {"uv": [5, 8, 6, 8.5], "texture": "#0"}, + "up": {"uv": [0, 1, 0, 0], "texture": "#0"}, + "down": {"uv": [0, 0, 0, 1], "texture": "#0"} + } + }, + { + "from": [8, 4.5, 7], + "to": [8, 5.5, 9], + "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 3.92857, 8]}, + "faces": { + "north": {"uv": [0, 0, 0, 0.5], "texture": "#0"}, + "east": {"uv": [6, 8, 7, 8.5], "texture": "#0"}, + "south": {"uv": [0, 0, 0, 0.5], "texture": "#0"}, + "west": {"uv": [7, 8, 8, 8.5], "texture": "#0"}, + "up": {"uv": [0, 1, 0, 0], "texture": "#0"}, + "down": {"uv": [0, 0, 0, 1], "texture": "#0"} + } + }, + { + "from": [7, 4.5, 8], + "to": [9, 5.5, 8], + "rotation": {"angle": -22.5, "axis": "y", "origin": [8, 3.92857, 8]}, + "faces": { + "north": {"uv": [8, 8, 9, 8.5], "texture": "#0"}, + "east": {"uv": [0, 0, 0, 0.5], "texture": "#0"}, + "south": {"uv": [8, 0, 9, 0.5], "texture": "#0"}, + "west": {"uv": [0, 0, 0, 0.5], "texture": "#0"}, + "up": {"uv": [1, 0, 0, 0], "texture": "#0"}, + "down": {"uv": [1, 0, 0, 0], "texture": "#0"} + } + }, + { + "from": [7, 4.5, 8], + "to": [9, 5.5, 8], + "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 3.92857, 8]}, + "faces": { + "north": {"uv": [8, 0.5, 9, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 0, 0.5], "texture": "#0"}, + "south": {"uv": [8, 1, 9, 1.5], "texture": "#0"}, + "west": {"uv": [0, 0, 0, 0.5], "texture": "#0"}, + "up": {"uv": [1, 0, 0, 0], "texture": "#0"}, + "down": {"uv": [1, 0, 0, 0], "texture": "#0"} + } + }, + { + "from": [9, 0, 8], + "to": [12, 1, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [17, 8, 16]}, + "faces": { + "north": {"uv": [6, 4, 7.5, 4.5], "texture": "#0"}, + "east": {"uv": [7, 9.5, 7.5, 10], "texture": "#0"}, + "south": {"uv": [6, 4.5, 7.5, 5], "texture": "#0"}, + "west": {"uv": [7.5, 9.5, 8, 10], "texture": "#0"}, + "up": {"uv": [7.5, 5.5, 6, 5], "texture": "#0"}, + "down": {"uv": [7.5, 5.5, 6, 6], "texture": "#0"} + } + }, + { + "from": [8.25, 0, 10.5625], + "to": [10.125, 0.875, 11.4375], + "rotation": {"angle": -22.5, "axis": "y", "origin": [16.1875, 7.9375, 18.5]}, + "faces": { + "north": {"uv": [8, 1.5, 9, 2], "texture": "#0"}, + "east": {"uv": [8, 9.5, 8.5, 10], "texture": "#0"}, + "south": {"uv": [8, 2, 9, 2.5], "texture": "#0"}, + "west": {"uv": [8.5, 9.5, 9, 10], "texture": "#0"}, + "up": {"uv": [9, 3, 8, 2.5], "texture": "#0"}, + "down": {"uv": [9, 3, 8, 3.5], "texture": "#0"} + } + }, + { + "from": [12.875, 0, 9.375], + "to": [13.625, 0.75, 11.125], + "rotation": {"angle": 0, "axis": "y", "origin": [20.75, 7.875, 17.25]}, + "faces": { + "north": {"uv": [9, 9.5, 9.5, 10], "texture": "#0"}, + "east": {"uv": [8, 3.5, 9, 4], "texture": "#0"}, + "south": {"uv": [9.5, 9.5, 10, 10], "texture": "#0"}, + "west": {"uv": [8, 6, 9, 6.5], "texture": "#0"}, + "up": {"uv": [8.5, 7.5, 8, 6.5], "texture": "#0"}, + "down": {"uv": [1.5, 8.5, 1, 9.5], "texture": "#0"} + } + }, + { + "from": [5.3125, 0, 13.875], + "to": [5.9375, 0.625, 15.5], + "rotation": {"angle": -45, "axis": "y", "origin": [13.125, 7.8125, 21.6875]}, + "faces": { + "north": {"uv": [9.5, 2, 10, 2.5], "texture": "#0"}, + "east": {"uv": [8, 7.5, 9, 8], "texture": "#0"}, + "south": {"uv": [9.5, 2.5, 10, 3], "texture": "#0"}, + "west": {"uv": [1.5, 8.5, 2.5, 9], "texture": "#0"}, + "up": {"uv": [3, 9.5, 2.5, 8.5], "texture": "#0"}, + "down": {"uv": [3.5, 8.5, 3, 9.5], "texture": "#0"} + } + }, + { + "from": [13.375, 0.0625, 8.9375], + "to": [14.875, 0.5625, 9.4375], + "rotation": {"angle": 0, "axis": "y", "origin": [7.125, 7.8125, 16.6875]}, + "faces": { + "north": {"uv": [3.5, 8.5, 4.5, 9], "texture": "#0"}, + "east": {"uv": [9.5, 6, 10, 6.5], "texture": "#0"}, + "south": {"uv": [4.5, 8.5, 5.5, 9], "texture": "#0"}, + "west": {"uv": [9.5, 6.5, 10, 7], "texture": "#0"}, + "up": {"uv": [6.5, 9, 5.5, 8.5], "texture": "#0"}, + "down": {"uv": [7.5, 8.5, 6.5, 9], "texture": "#0"} + } + }, + { + "from": [6.3002, 0, 9.00543], + "to": [7.3002, 1, 12.00543], + "rotation": {"angle": 0, "axis": "y", "origin": [6.64738, 0.3875, 12.65281]}, + "faces": { + "north": {"uv": [9.5, 7, 10, 7.5], "texture": "#0"}, + "east": {"uv": [7.5, 4, 9, 4.5], "texture": "#0"}, + "south": {"uv": [9.5, 7.5, 10, 8], "texture": "#0"}, + "west": {"uv": [7.5, 4.5, 9, 5], "texture": "#0"}, + "up": {"uv": [0.5, 9.5, 0, 8], "texture": "#0"}, + "down": {"uv": [1, 8, 0.5, 9.5], "texture": "#0"} + } + }, + { + "from": [5.96701, 0, 11.75431], + "to": [6.84201, 0.875, 13.62931], + "rotation": {"angle": -22.5, "axis": "y", "origin": [6.64738, 0.3875, 12.65281]}, + "faces": { + "north": {"uv": [9.5, 8.5, 10, 9], "texture": "#0"}, + "east": {"uv": [7.5, 8.5, 8.5, 9], "texture": "#0"}, + "south": {"uv": [9.5, 9, 10, 9.5], "texture": "#0"}, + "west": {"uv": [8.5, 8.5, 9.5, 9], "texture": "#0"}, + "up": {"uv": [9, 7.5, 8.5, 6.5], "texture": "#0"}, + "down": {"uv": [2, 9, 1.5, 10], "texture": "#0"} + } + }, + { + "from": [4.1752, 0, 12.88043], + "to": [5.9252, 0.75, 13.63043], + "rotation": {"angle": 0, "axis": "y", "origin": [6.64738, 0.3875, 12.65281]}, + "faces": { + "north": {"uv": [3.5, 9, 4.5, 9.5], "texture": "#0"}, + "east": {"uv": [0, 10, 0.5, 10.5], "texture": "#0"}, + "south": {"uv": [4.5, 9, 5.5, 9.5], "texture": "#0"}, + "west": {"uv": [0.5, 10, 1, 10.5], "texture": "#0"}, + "up": {"uv": [6.5, 9.5, 5.5, 9], "texture": "#0"}, + "down": {"uv": [7.5, 9, 6.5, 9.5], "texture": "#0"} + } + }, + { + "from": [3.95569, 0, 14.39496], + "to": [5.58069, 0.625, 15.01996], + "rotation": {"angle": -45, "axis": "y", "origin": [6.64738, 0.3875, 12.65281]}, + "faces": { + "north": {"uv": [7.5, 9, 8.5, 9.5], "texture": "#0"}, + "east": {"uv": [1.5, 10, 2, 10.5], "texture": "#0"}, + "south": {"uv": [8.5, 9, 9.5, 9.5], "texture": "#0"}, + "west": {"uv": [2, 10, 2.5, 10.5], "texture": "#0"}, + "up": {"uv": [10, 0.5, 9, 0], "texture": "#0"}, + "down": {"uv": [10, 0.5, 9, 1], "texture": "#0"} + } + }, + { + "from": [5.8627, 0.0625, 13.38043], + "to": [6.3627, 0.5625, 14.88043], + "rotation": {"angle": 0, "axis": "y", "origin": [6.64738, 0.3875, 12.65281]}, + "faces": { + "north": {"uv": [3, 10, 3.5, 10.5], "texture": "#0"}, + "east": {"uv": [9, 1, 10, 1.5], "texture": "#0"}, + "south": {"uv": [3.5, 10, 4, 10.5], "texture": "#0"}, + "west": {"uv": [9, 1.5, 10, 2], "texture": "#0"}, + "up": {"uv": [2.5, 10, 2, 9], "texture": "#0"}, + "down": {"uv": [9.5, 2, 9, 3], "texture": "#0"} + } + }, + { + "from": [4.29477, 0, 5.69437], + "to": [7.29477, 1, 6.69437], + "rotation": {"angle": 0, "axis": "y", "origin": [3.64738, 0.3875, 7.34719]}, + "faces": { + "north": {"uv": [7.5, 5, 9, 5.5], "texture": "#0"}, + "east": {"uv": [4, 10, 4.5, 10.5], "texture": "#0"}, + "south": {"uv": [7.5, 5.5, 9, 6], "texture": "#0"}, + "west": {"uv": [4.5, 10, 5, 10.5], "texture": "#0"}, + "up": {"uv": [2.5, 8.5, 1, 8], "texture": "#0"}, + "down": {"uv": [4, 8, 2.5, 8.5], "texture": "#0"} + } + }, + { + "from": [3.05357, 0, 6.22868], + "to": [4.92857, 0.875, 7.10368], + "rotation": {"angle": 22.5, "axis": "y", "origin": [3.64738, 0.3875, 7.34719]}, + "faces": { + "north": {"uv": [9, 3, 10, 3.5], "texture": "#0"}, + "east": {"uv": [5, 10, 5.5, 10.5], "texture": "#0"}, + "south": {"uv": [9, 3.5, 10, 4], "texture": "#0"}, + "west": {"uv": [5.5, 10, 6, 10.5], "texture": "#0"}, + "up": {"uv": [10, 4.5, 9, 4], "texture": "#0"}, + "down": {"uv": [10, 4.5, 9, 5], "texture": "#0"} + } + }, + { + "from": [2.66977, 0, 7.06937], + "to": [3.41977, 0.75, 8.81937], + "rotation": {"angle": 0, "axis": "y", "origin": [3.64738, 0.3875, 7.34719]}, + "faces": { + "north": {"uv": [6, 10, 6.5, 10.5], "texture": "#0"}, + "east": {"uv": [9, 5, 10, 5.5], "texture": "#0"}, + "south": {"uv": [6.5, 10, 7, 10.5], "texture": "#0"}, + "west": {"uv": [9, 5.5, 10, 6], "texture": "#0"}, + "up": {"uv": [9.5, 7, 9, 6], "texture": "#0"}, + "down": {"uv": [9.5, 7, 9, 8], "texture": "#0"} + } + }, + { + "from": [1.98735, 0, 7.70677], + "to": [2.61235, 0.625, 9.33177], + "rotation": {"angle": 45, "axis": "y", "origin": [3.64738, 0.3875, 7.34719]}, + "faces": { + "north": {"uv": [7, 10, 7.5, 10.5], "texture": "#0"}, + "east": {"uv": [9, 8, 10, 8.5], "texture": "#0"}, + "south": {"uv": [7.5, 10, 8, 10.5], "texture": "#0"}, + "west": {"uv": [0, 9.5, 1, 10], "texture": "#0"}, + "up": {"uv": [1.5, 10.5, 1, 9.5], "texture": "#0"}, + "down": {"uv": [3, 9.5, 2.5, 10.5], "texture": "#0"} + } + }, + { + "from": [1.41977, 0.0625, 6.63187], + "to": [2.91977, 0.5625, 7.13187], + "rotation": {"angle": 0, "axis": "y", "origin": [3.64738, 0.3875, 7.34719]}, + "faces": { + "north": {"uv": [3, 9.5, 4, 10], "texture": "#0"}, + "east": {"uv": [8, 10, 8.5, 10.5], "texture": "#0"}, + "south": {"uv": [4, 9.5, 5, 10], "texture": "#0"}, + "west": {"uv": [8.5, 10, 9, 10.5], "texture": "#0"}, + "up": {"uv": [6, 10, 5, 9.5], "texture": "#0"}, + "down": {"uv": [7, 9.5, 6, 10], "texture": "#0"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [-177.58, -23.01, -173.12], + "translation": [0.5, 3.5, -3] + }, + "thirdperson_lefthand": { + "rotation": [177.96, 22.43, 179.16], + "translation": [0, 3.25, -3.25] + }, + "firstperson_righthand": { + "translation": [0, 7, 0] + }, + "firstperson_lefthand": { + "translation": [0, 8, 0] + }, + "ground": { + "translation": [0, 3.25, 0] + }, + "gui": { + "translation": [-0.75, 5.5, 0] + }, + "fixed": { + "translation": [0, 4.75, 0] + } + }, + "groups": [ + { + "name": "group", + "origin": [8, 8, 8], + "color": 0, + "children": [ + 0, + 1, + 2, + { + "name": "group", + "origin": [16, 10, 15], + "color": 0, + "children": [3, 4, 5, 6] + } + ] + }, + { + "name": "root 1", + "origin": [15, 15.5, 15], + "color": 0, + "children": [ + 7, + { + "name": "group", + "origin": [19.625, 7.9375, 16], + "color": 0, + "children": [ + 8, + { + "name": "group", + "origin": [16.1875, 7.9375, 18.5], + "color": 0, + "children": [ + 9, + { + "name": "group", + "origin": [20.75, 7.8125, 18.25], + "color": 0, + "children": [ + 10, + { + "name": "group", + "origin": [15.125, 7.8125, 21.6875], + "color": 0, + "children": [11] + } + ] + } + ] + } + ] + } + ] + }, + { + "name": "root2", + "origin": [15, 15.5, 15], + "color": 0, + "children": [ + 12, + { + "name": "group", + "origin": [19.625, 7.9375, 16], + "color": 0, + "children": [ + 13, + { + "name": "group", + "origin": [16.1875, 7.9375, 18.5], + "color": 0, + "children": [ + 14, + { + "name": "group", + "origin": [20.75, 7.8125, 18.25], + "color": 0, + "children": [ + 15, + { + "name": "group", + "origin": [15.125, 7.8125, 21.6875], + "color": 0, + "children": [16] + } + ] + } + ] + } + ] + } + ] + }, + { + "name": "root3", + "origin": [15, 15.5, 15], + "color": 0, + "children": [ + 17, + { + "name": "group", + "origin": [19.625, 7.9375, 16], + "color": 0, + "children": [ + 18, + { + "name": "group", + "origin": [16.1875, 7.9375, 18.5], + "color": 0, + "children": [ + 19, + { + "name": "group", + "origin": [20.75, 7.8125, 18.25], + "color": 0, + "children": [ + 20, + { + "name": "group", + "origin": [15.125, 7.8125, 21.6875], + "color": 0, + "children": [21] + } + ] + } + ] + } + ] + } + ] + } + ] +} diff --git a/src/surgebinding/resources/assets/surgebinding/models/block/prickletac1.json b/src/surgebinding/resources/assets/surgebinding/models/block/prickletac1.json new file mode 100644 index 000000000..8be7b3042 --- /dev/null +++ b/src/surgebinding/resources/assets/surgebinding/models/block/prickletac1.json @@ -0,0 +1,5021 @@ +{ + "credit": "Made with Blockbench", + "texture_size": [ + 32, + 32 + ], + "textures": { + "0": "surgebinding:block/prickletac", + "particle": "surgebinding:block/prickletac" + }, + "elements": [ + { + "from": [ + 5.3125, + 0.9375, + 7.8125 + ], + "to": [ + 7.1875, + 3.8125, + 9.6875 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 13.25, + 7.875, + 16.75 + ] + }, + "faces": { + "north": { + "uv": [ + 1.5, + 1.5, + 2.5, + 3 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 1.5, + 0, + 2.5, + 1.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 2.5, + 2.5, + 3.5, + 4 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 2.5, + 0, + 3.5, + 1.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 3.5, + 2.5, + 2.5, + 1.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 6.5, + 1, + 5.5, + 2 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 5.5625, + 5.55847, + 8.919169999999999 + ], + "to": [ + 6.9375, + 7.93347, + 10.29417 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 13.25, + 12.24597, + 17.60667 + ] + }, + "faces": { + "north": { + "uv": [ + 0, + 3, + 1, + 4.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 1, + 3, + 2, + 4.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 3.5, + 3.5, + 4.5, + 5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 3.5, + 0, + 4.5, + 1.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 6.5, + 3, + 5.5, + 2 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 6.5, + 3, + 5.5, + 4 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 5.6875, + 7.22453, + 8.55673 + ], + "to": [ + 6.8125, + 9.34953, + 9.68173 + ], + "rotation": { + "angle": -45, + "axis": "x", + "origin": [ + 6.25, + 8.28703, + 9.11923 + ] + }, + "faces": { + "north": { + "uv": [ + 3.5, + 1.5, + 4.5, + 3 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 2, + 4, + 3, + 5.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 0, + 4.5, + 1, + 6 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 1, + 4.5, + 2, + 6 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 1, + 7, + 0, + 6 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 2, + 6, + 1, + 7 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 5.8125, + 8.586959999999999, + 6.89068 + ], + "to": [ + 6.6875, + 9.461959999999999, + 8.76568 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 6.25, + 9.024459999999999, + 7.82818 + ] + }, + "faces": { + "north": { + "uv": [ + 6, + 6, + 7, + 7 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 4.5, + 4.5, + 6, + 5.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 6, + 0, + 7, + 1 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 4.5, + 0, + 6, + 1 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 5.5, + 2.5, + 4.5, + 1 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 5.5, + 2.5, + 4.5, + 4 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 5.4375, + 3.37299, + 8.272080000000001 + ], + "to": [ + 7.0625, + 5.99799, + 9.897080000000001 + ], + "rotation": { + "angle": 22.5, + "axis": "x", + "origin": [ + 6.25, + 4.68549, + 9.084580000000001 + ] + }, + "faces": { + "north": { + "uv": [ + 3, + 5, + 4, + 6.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 2, + 5.5, + 3, + 7 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 4, + 5.5, + 5, + 7 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 5, + 5.5, + 6, + 7 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 7, + 5, + 6, + 4 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 7, + 5, + 6, + 6 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 5, + 0, + 7 + ], + "to": [ + 8, + 1, + 10 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 13, + 8, + 17 + ] + }, + "faces": { + "north": { + "uv": [ + 4.5, + 4, + 6, + 4.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 6.5, + 1, + 8, + 1.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 6.5, + 1.5, + 8, + 2 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 6.5, + 2, + 8, + 2.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 1.5, + 1.5, + 0, + 0 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 1.5, + 1.5, + 0, + 3 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 5.4375, + 8.0625, + 9.25 + ], + "to": [ + 6.4375, + 9.0625, + 10.25 + ], + "rotation": { + "angle": -45, + "axis": "x", + "origin": [ + 5.9375, + 8.5625, + 9.75 + ] + }, + "faces": { + "north": { + "uv": [ + 4, + 5, + 4.5, + 5.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 9, + 7.5, + 9.5, + 8 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 9, + 8.5, + 9.5, + 9 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 10, + 8.5, + 10.5, + 9 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 11.5, + 11, + 11, + 10.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 12, + 10, + 11.5, + 10.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 5.5, + 8.3125, + 9.4375 + ], + "to": [ + 6.25, + 10.0625, + 10.1875 + ], + "rotation": { + "angle": 45, + "axis": "z", + "origin": [ + 5.875, + 8.6875, + 9.8125 + ] + }, + "faces": { + "north": { + "uv": [ + 2, + 3, + 2.5, + 4 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 3, + 4, + 3.5, + 5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 1, + 8, + 1.5, + 9 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 1.5, + 8, + 2, + 9 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 12, + 11, + 11.5, + 10.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 5.5, + 12, + 5, + 12.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 3.625, + 9.0625, + 9.6875 + ], + "to": [ + 5.25, + 9.6875, + 10.3125 + ], + "rotation": { + "angle": 45, + "axis": "y", + "origin": [ + 4.9375, + 9.375, + 10 + ] + }, + "faces": { + "north": { + "uv": [ + 3.5, + 3, + 4.5, + 3.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 9, + 12, + 9.5, + 12.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 7.5, + 7, + 8.5, + 7.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 10, + 12, + 10.5, + 12.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 3, + 8.5, + 2, + 8 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 4, + 8, + 3, + 8.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 3.875, + 9.125, + 10.5 + ], + "to": [ + 4.375, + 10.625, + 11 + ], + "rotation": { + "angle": -22.5, + "axis": "z", + "origin": [ + 4.125, + 9.375, + 10.75 + ] + }, + "faces": { + "north": { + "uv": [ + 4, + 8, + 4.5, + 9 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 4.5, + 8, + 5, + 9 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 5, + 8, + 5.5, + 9 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 7.5, + 8, + 8, + 9 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 12.5, + 12.5, + 12, + 12 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 12.5, + 0, + 12, + 0.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 4.375, + 10.4375, + 10.5 + ], + "to": [ + 4.5, + 11.5625, + 10.625 + ], + "rotation": { + "angle": -22.5, + "axis": "x", + "origin": [ + 4.4375, + 10.5, + 10.5625 + ] + }, + "faces": { + "north": { + "uv": [ + 8, + 8, + 8.5, + 9 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 8, + 1, + 8.5, + 2 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 8, + 2, + 8.5, + 3 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 8, + 3, + 8.5, + 4 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 12.5, + 1, + 12, + 0.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 12.5, + 1, + 12, + 1.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 4.625, + 10.4375, + 10.5625 + ], + "to": [ + 4.75, + 11.5625, + 10.6875 + ], + "rotation": { + "angle": -45, + "axis": "z", + "origin": [ + 4.6875, + 10.5, + 10.625 + ] + }, + "faces": { + "north": { + "uv": [ + 8, + 4, + 8.5, + 5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 8, + 5, + 8.5, + 6 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 8, + 6, + 8.5, + 7 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 2, + 8.5, + 2.5, + 9.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 12.5, + 2, + 12, + 1.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 12.5, + 2, + 12, + 2.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 4.625, + 10.4375, + 10.8125 + ], + "to": [ + 4.75, + 11.5625, + 10.9375 + ], + "rotation": { + "angle": 22.5, + "axis": "y", + "origin": [ + 4.6875, + 10.5, + 10.875 + ] + }, + "faces": { + "north": { + "uv": [ + 2.5, + 8.5, + 3, + 9.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 3, + 8.5, + 3.5, + 9.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 3.5, + 8.5, + 4, + 9.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 5.5, + 8.5, + 6, + 9.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 12.5, + 3, + 12, + 2.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 12.5, + 3, + 12, + 3.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 4.3125, + 10.4375, + 10.8125 + ], + "to": [ + 4.4375, + 11.5625, + 10.9375 + ], + "rotation": { + "angle": 22.5, + "axis": "x", + "origin": [ + 4.375, + 10.5, + 10.875 + ] + }, + "faces": { + "north": { + "uv": [ + 6, + 8.5, + 6.5, + 9.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 6.5, + 8.5, + 7, + 9.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 7, + 8.5, + 7.5, + 9.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 8.5, + 8.5, + 9, + 9.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 12.5, + 4, + 12, + 3.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 12.5, + 4, + 12, + 4.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 4.25, + 10.25, + 10.5625 + ], + "to": [ + 4.375, + 11.375, + 10.6875 + ], + "rotation": { + "angle": 22.5, + "axis": "z", + "origin": [ + 4.3125, + 10.3125, + 10.625 + ] + }, + "faces": { + "north": { + "uv": [ + 8.5, + 0, + 9, + 1 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 8.5, + 1, + 9, + 2 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 8.5, + 2, + 9, + 3 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 8.5, + 3, + 9, + 4 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 12.5, + 5, + 12, + 4.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 12.5, + 5, + 12, + 5.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 5.0625, + 4.875, + 8.625 + ], + "to": [ + 6.0625, + 5.875, + 9.625 + ], + "rotation": { + "angle": -45, + "axis": "x", + "origin": [ + 5.5625, + 5.375, + 9.125 + ] + }, + "faces": { + "north": { + "uv": [ + 12, + 5.5, + 12.5, + 6 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 12, + 6, + 12.5, + 6.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 12, + 6.5, + 12.5, + 7 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 12, + 7, + 12.5, + 7.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 12.5, + 8, + 12, + 7.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 12.5, + 8, + 12, + 8.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 5.125, + 5.125, + 8.8125 + ], + "to": [ + 5.875, + 6.875, + 9.5625 + ], + "rotation": { + "angle": 45, + "axis": "z", + "origin": [ + 5.5, + 5.5, + 9.1875 + ] + }, + "faces": { + "north": { + "uv": [ + 8.5, + 4, + 9, + 5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 8.5, + 5, + 9, + 6 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 8.5, + 6, + 9, + 7 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 1, + 9, + 1.5, + 10 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 12.5, + 9, + 12, + 8.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 12.5, + 9, + 12, + 9.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 3.25, + 5.875, + 9.0625 + ], + "to": [ + 4.875, + 6.5, + 9.6875 + ], + "rotation": { + "angle": 45, + "axis": "y", + "origin": [ + 4.5625, + 6.1875, + 9.375 + ] + }, + "faces": { + "north": { + "uv": [ + 8.5, + 7, + 9.5, + 7.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 12, + 9.5, + 12.5, + 10 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 8.5, + 8, + 9.5, + 8.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 12, + 10, + 12.5, + 10.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 5, + 9.5, + 4, + 9 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 8.5, + 9, + 7.5, + 9.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 3.5625, + 6, + 9.875 + ], + "to": [ + 4.0625, + 7.5, + 10.375 + ], + "rotation": { + "angle": -22.5, + "axis": "z", + "origin": [ + 3.8125, + 6.25, + 10.125 + ] + }, + "faces": { + "north": { + "uv": [ + 1.5, + 9, + 2, + 10 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 5, + 9, + 5.5, + 10 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 9, + 9, + 9.5, + 10 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 9, + 0, + 9.5, + 1 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 12.5, + 11, + 12, + 10.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 12.5, + 11, + 12, + 11.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 4.0625, + 7.3125, + 9.875 + ], + "to": [ + 4.1875, + 8.4375, + 10 + ], + "rotation": { + "angle": -22.5, + "axis": "x", + "origin": [ + 4.125, + 7.375, + 9.9375 + ] + }, + "faces": { + "north": { + "uv": [ + 9, + 1, + 9.5, + 2 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 9, + 2, + 9.5, + 3 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 9, + 3, + 9.5, + 4 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 9, + 4, + 9.5, + 5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 12.5, + 12, + 12, + 11.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 0.5, + 12.5, + 0, + 13 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 4.3125, + 7.3125, + 9.9375 + ], + "to": [ + 4.4375, + 8.4375, + 10.0625 + ], + "rotation": { + "angle": -45, + "axis": "z", + "origin": [ + 4.375, + 7.375, + 10 + ] + }, + "faces": { + "north": { + "uv": [ + 9, + 5, + 9.5, + 6 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 9, + 6, + 9.5, + 7 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 0, + 9.5, + 0.5, + 10.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 0.5, + 9.5, + 1, + 10.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 1, + 13, + 0.5, + 12.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 1.5, + 12.5, + 1, + 13 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 4.3125, + 7.3125, + 10.1875 + ], + "to": [ + 4.4375, + 8.4375, + 10.3125 + ], + "rotation": { + "angle": 22.5, + "axis": "y", + "origin": [ + 4.375, + 7.375, + 10.25 + ] + }, + "faces": { + "north": { + "uv": [ + 2, + 9.5, + 2.5, + 10.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 2.5, + 9.5, + 3, + 10.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 3, + 9.5, + 3.5, + 10.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 3.5, + 9.5, + 4, + 10.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 2, + 13, + 1.5, + 12.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 2.5, + 12.5, + 2, + 13 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 4, + 7.3125, + 10.1875 + ], + "to": [ + 4.125, + 8.4375, + 10.3125 + ], + "rotation": { + "angle": 22.5, + "axis": "x", + "origin": [ + 4.0625, + 7.375, + 10.25 + ] + }, + "faces": { + "north": { + "uv": [ + 4, + 9.5, + 4.5, + 10.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 4.5, + 9.5, + 5, + 10.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 5.5, + 9.5, + 6, + 10.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 6, + 9.5, + 6.5, + 10.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 3, + 13, + 2.5, + 12.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 3.5, + 12.5, + 3, + 13 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 3.9375, + 7.125, + 9.9375 + ], + "to": [ + 4.0625, + 8.25, + 10.0625 + ], + "rotation": { + "angle": 22.5, + "axis": "z", + "origin": [ + 4, + 7.1875, + 10 + ] + }, + "faces": { + "north": { + "uv": [ + 6.5, + 9.5, + 7, + 10.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 7, + 9.5, + 7.5, + 10.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 7.5, + 9.5, + 8, + 10.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 8, + 9.5, + 8.5, + 10.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 4, + 13, + 3.5, + 12.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 4.5, + 12.5, + 4, + 13 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 6.0625, + 6.5, + 8.4375 + ], + "to": [ + 7.0625, + 7.5, + 9.4375 + ], + "rotation": { + "angle": -45, + "axis": "x", + "origin": [ + 6.5625, + 7, + 8.9375 + ] + }, + "faces": { + "north": { + "uv": [ + 4.5, + 12.5, + 5, + 13 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 5, + 12.5, + 5.5, + 13 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 5.5, + 12.5, + 6, + 13 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 6, + 12.5, + 6.5, + 13 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 7, + 13, + 6.5, + 12.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 7.5, + 12.5, + 7, + 13 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 6.375, + 6.6875, + 6.25 + ], + "to": [ + 7.125, + 7.4375, + 9 + ], + "rotation": { + "angle": -45, + "axis": "y", + "origin": [ + 6.75, + 7.0625, + 8.625 + ] + }, + "faces": { + "north": { + "uv": [ + 7.5, + 12.5, + 8, + 13 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 6.5, + 2.5, + 8, + 3 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 8, + 12.5, + 8.5, + 13 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 6.5, + 3, + 8, + 3.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 3.5, + 8, + 3, + 6.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 4, + 6.5, + 3.5, + 8 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 6.9375, + 7 + ], + "to": [ + 10.625, + 7.5625, + 7.625 + ], + "rotation": { + "angle": 45, + "axis": "z", + "origin": [ + 8.3125, + 7.25, + 7.3125 + ] + }, + "faces": { + "north": { + "uv": [ + 6.5, + 3.5, + 8, + 4 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 8.5, + 12.5, + 9, + 13 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 0, + 7, + 1.5, + 7.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 9, + 12.5, + 9.5, + 13 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 3, + 7.5, + 1.5, + 7 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 5.5, + 7, + 4, + 7.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 9.375, + 8.75, + 7.0625 + ], + "to": [ + 9.875, + 11.25, + 7.5625 + ], + "rotation": { + "angle": 22.5, + "axis": "z", + "origin": [ + 9.625, + 9, + 7.3125 + ] + }, + "faces": { + "north": { + "uv": [ + 5.5, + 7, + 6, + 8.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 6, + 7, + 6.5, + 8.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 6.5, + 7, + 7, + 8.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 7, + 7, + 7.5, + 8.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 10, + 13, + 9.5, + 12.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 10.5, + 12.5, + 10, + 13 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8.875, + 10.875, + 7.0625 + ], + "to": [ + 9, + 12, + 7.1875 + ], + "rotation": { + "angle": -22.5, + "axis": "x", + "origin": [ + 8.9375, + 10.9375, + 7.125 + ] + }, + "faces": { + "north": { + "uv": [ + 8.5, + 9.5, + 9, + 10.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 9.5, + 9.5, + 10, + 10.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 9.5, + 0, + 10, + 1 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 9.5, + 1, + 10, + 2 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 11, + 13, + 10.5, + 12.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 11.5, + 12.5, + 11, + 13 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8.625, + 10.875, + 7.125 + ], + "to": [ + 8.75, + 12, + 7.25 + ], + "rotation": { + "angle": 45, + "axis": "z", + "origin": [ + 8.6875, + 10.9375, + 7.1875 + ] + }, + "faces": { + "north": { + "uv": [ + 9.5, + 2, + 10, + 3 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 9.5, + 3, + 10, + 4 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 9.5, + 4, + 10, + 5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 9.5, + 5, + 10, + 6 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 12, + 13, + 11.5, + 12.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 12.5, + 12.5, + 12, + 13 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8.625, + 10.875, + 7.375 + ], + "to": [ + 8.75, + 12, + 7.5 + ], + "rotation": { + "angle": -22.5, + "axis": "y", + "origin": [ + 8.6875, + 10.9375, + 7.4375 + ] + }, + "faces": { + "north": { + "uv": [ + 9.5, + 6, + 10, + 7 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 9.5, + 7, + 10, + 8 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 9.5, + 8, + 10, + 9 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 1, + 10, + 1.5, + 11 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 13, + 13, + 12.5, + 12.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 13, + 0, + 12.5, + 0.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8.9375, + 10.875, + 7.375 + ], + "to": [ + 9.0625, + 12, + 7.5 + ], + "rotation": { + "angle": 22.5, + "axis": "x", + "origin": [ + 9, + 10.9375, + 7.4375 + ] + }, + "faces": { + "north": { + "uv": [ + 1.5, + 10, + 2, + 11 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 5, + 10, + 5.5, + 11 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 9, + 10, + 9.5, + 11 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 10, + 10, + 10.5, + 11 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 13, + 1, + 12.5, + 0.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 13, + 1, + 12.5, + 1.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 9, + 10.6875, + 7.125 + ], + "to": [ + 9.125, + 11.8125, + 7.25 + ], + "rotation": { + "angle": -22.5, + "axis": "z", + "origin": [ + 9.0625, + 10.75, + 7.1875 + ] + }, + "faces": { + "north": { + "uv": [ + 10, + 0, + 10.5, + 1 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 10, + 1, + 10.5, + 2 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 10, + 2, + 10.5, + 3 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 10, + 3, + 10.5, + 4 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 13, + 2, + 12.5, + 1.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 13, + 2, + 12.5, + 2.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 5.75, + 8.625, + 5.625 + ], + "to": [ + 6.5, + 9.375, + 7.375 + ], + "rotation": { + "angle": 45, + "axis": "y", + "origin": [ + 6.125, + 9, + 7 + ] + }, + "faces": { + "north": { + "uv": [ + 12.5, + 2.5, + 13, + 3 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 9.5, + 9, + 10.5, + 9.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 12.5, + 3, + 13, + 3.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 10, + 4, + 11, + 4.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 10.5, + 5.5, + 10, + 4.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 10.5, + 5.5, + 10, + 6.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 3.875, + 8.875, + 6 + ], + "to": [ + 5.5, + 9.5, + 6.625 + ], + "rotation": { + "angle": -45, + "axis": "z", + "origin": [ + 5.1875, + 9.1875, + 6.3125 + ] + }, + "faces": { + "north": { + "uv": [ + 10, + 6.5, + 11, + 7 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 12.5, + 3.5, + 13, + 4 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 10, + 7, + 11, + 7.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 12.5, + 4, + 13, + 4.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 11, + 8, + 10, + 7.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 11, + 8, + 10, + 8.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 4, + 9.8125, + 6.0625 + ], + "to": [ + 4.5, + 11.3125, + 6.5625 + ], + "rotation": { + "angle": -22.5, + "axis": "z", + "origin": [ + 4.25, + 10.0625, + 6.3125 + ] + }, + "faces": { + "north": { + "uv": [ + 0, + 10.5, + 0.5, + 11.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 0.5, + 10.5, + 1, + 11.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 2, + 10.5, + 2.5, + 11.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 2.5, + 10.5, + 3, + 11.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 13, + 5, + 12.5, + 4.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 13, + 5, + 12.5, + 5.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 4.5, + 11.125, + 6.0625 + ], + "to": [ + 4.625, + 12.25, + 6.1875 + ], + "rotation": { + "angle": -22.5, + "axis": "x", + "origin": [ + 4.5625, + 11.1875, + 6.125 + ] + }, + "faces": { + "north": { + "uv": [ + 3, + 10.5, + 3.5, + 11.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 3.5, + 10.5, + 4, + 11.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 4, + 10.5, + 4.5, + 11.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 4.5, + 10.5, + 5, + 11.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 13, + 6, + 12.5, + 5.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 13, + 6, + 12.5, + 6.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 4.75, + 11.125, + 6.125 + ], + "to": [ + 4.875, + 12.25, + 6.25 + ], + "rotation": { + "angle": -45, + "axis": "z", + "origin": [ + 4.8125, + 11.1875, + 6.1875 + ] + }, + "faces": { + "north": { + "uv": [ + 5.5, + 10.5, + 6, + 11.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 6, + 10.5, + 6.5, + 11.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 6.5, + 10.5, + 7, + 11.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 7, + 10.5, + 7.5, + 11.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 13, + 7, + 12.5, + 6.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 13, + 7, + 12.5, + 7.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 4.75, + 11.125, + 6.375 + ], + "to": [ + 4.875, + 12.25, + 6.5 + ], + "rotation": { + "angle": 22.5, + "axis": "y", + "origin": [ + 4.8125, + 11.1875, + 6.4375 + ] + }, + "faces": { + "north": { + "uv": [ + 7.5, + 10.5, + 8, + 11.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 8, + 10.5, + 8.5, + 11.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 8.5, + 10.5, + 9, + 11.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 9.5, + 10.5, + 10, + 11.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 13, + 8, + 12.5, + 7.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 13, + 8, + 12.5, + 8.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 4.4375, + 11.125, + 6.375 + ], + "to": [ + 4.5625, + 12.25, + 6.5 + ], + "rotation": { + "angle": 22.5, + "axis": "x", + "origin": [ + 4.5, + 11.1875, + 6.4375 + ] + }, + "faces": { + "north": { + "uv": [ + 10.5, + 10.5, + 11, + 11.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 10.5, + 0, + 11, + 1 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 10.5, + 1, + 11, + 2 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 10.5, + 2, + 11, + 3 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 13, + 9, + 12.5, + 8.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 13, + 9, + 12.5, + 9.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 4.375, + 10.9375, + 6.125 + ], + "to": [ + 4.5, + 12.0625, + 6.25 + ], + "rotation": { + "angle": 22.5, + "axis": "z", + "origin": [ + 4.4375, + 11, + 6.1875 + ] + }, + "faces": { + "north": { + "uv": [ + 10.5, + 3, + 11, + 4 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 10.5, + 4.5, + 11, + 5.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 10.5, + 5.5, + 11, + 6.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 10.5, + 8.5, + 11, + 9.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 13, + 10, + 12.5, + 9.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 13, + 10, + 12.5, + 10.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 6.3125, + 9.0625, + 7.875 + ], + "to": [ + 7.9375, + 9.6875, + 8.5 + ], + "rotation": { + "angle": 45, + "axis": "z", + "origin": [ + 6.625, + 9.375, + 8.1875 + ] + }, + "faces": { + "north": { + "uv": [ + 10, + 9.5, + 11, + 10 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 12.5, + 10.5, + 13, + 11 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 10.5, + 10, + 11.5, + 10.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 12.5, + 11, + 13, + 11.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 2, + 11.5, + 1, + 11 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 12, + 11, + 11, + 11.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 7.3125, + 10, + 7.9375 + ], + "to": [ + 7.8125, + 11.5, + 8.4375 + ], + "rotation": { + "angle": 22.5, + "axis": "z", + "origin": [ + 7.5625, + 10.25, + 8.1875 + ] + }, + "faces": { + "north": { + "uv": [ + 5, + 11, + 5.5, + 12 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 9, + 11, + 9.5, + 12 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 10, + 11, + 10.5, + 12 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 11, + 0, + 11.5, + 1 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 13, + 12, + 12.5, + 11.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 13, + 12, + 12.5, + 12.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 7.1875, + 11.3125, + 7.9375 + ], + "to": [ + 7.3125, + 12.4375, + 8.0625 + ], + "rotation": { + "angle": -22.5, + "axis": "x", + "origin": [ + 7.25, + 11.375, + 8 + ] + }, + "faces": { + "north": { + "uv": [ + 11, + 1, + 11.5, + 2 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 11, + 2, + 11.5, + 3 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 11, + 3, + 11.5, + 4 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 11, + 4, + 11.5, + 5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 0.5, + 13.5, + 0, + 13 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 1, + 13, + 0.5, + 13.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 6.9375, + 11.3125, + 8 + ], + "to": [ + 7.0625, + 12.4375, + 8.125 + ], + "rotation": { + "angle": 45, + "axis": "z", + "origin": [ + 7, + 11.375, + 8.0625 + ] + }, + "faces": { + "north": { + "uv": [ + 11, + 5, + 11.5, + 6 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 11, + 6, + 11.5, + 7 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 11, + 7, + 11.5, + 8 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 11, + 8, + 11.5, + 9 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 1.5, + 13.5, + 1, + 13 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 2, + 13, + 1.5, + 13.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 6.9375, + 11.3125, + 8.25 + ], + "to": [ + 7.0625, + 12.4375, + 8.375 + ], + "rotation": { + "angle": -22.5, + "axis": "y", + "origin": [ + 7, + 11.375, + 8.3125 + ] + }, + "faces": { + "north": { + "uv": [ + 11, + 9, + 11.5, + 10 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 0, + 11.5, + 0.5, + 12.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 0.5, + 11.5, + 1, + 12.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 1, + 11.5, + 1.5, + 12.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 2.5, + 13.5, + 2, + 13 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 3, + 13, + 2.5, + 13.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 7.25, + 11.3125, + 8.25 + ], + "to": [ + 7.375, + 12.4375, + 8.375 + ], + "rotation": { + "angle": 22.5, + "axis": "x", + "origin": [ + 7.3125, + 11.375, + 8.3125 + ] + }, + "faces": { + "north": { + "uv": [ + 1.5, + 11.5, + 2, + 12.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 2, + 11.5, + 2.5, + 12.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 2.5, + 11.5, + 3, + 12.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 3, + 11.5, + 3.5, + 12.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 3.5, + 13.5, + 3, + 13 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 4, + 13, + 3.5, + 13.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 7.3125, + 11.125, + 8 + ], + "to": [ + 7.4375, + 12.25, + 8.125 + ], + "rotation": { + "angle": -22.5, + "axis": "z", + "origin": [ + 7.375, + 11.1875, + 8.0625 + ] + }, + "faces": { + "north": { + "uv": [ + 3.5, + 11.5, + 4, + 12.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 4, + 11.5, + 4.5, + 12.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 4.5, + 11.5, + 5, + 12.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 5.5, + 11.5, + 6, + 12.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 4.5, + 13.5, + 4, + 13 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 5, + 13, + 4.5, + 13.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 5.75, + 7.6875, + 9.25 + ], + "to": [ + 6.75, + 8.6875, + 10.25 + ], + "rotation": { + "angle": 45, + "axis": "x", + "origin": [ + 6.25, + 8.1875, + 9.75 + ] + }, + "faces": { + "north": { + "uv": [ + 5, + 13, + 5.5, + 13.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 5.5, + 13, + 6, + 13.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 6, + 13, + 6.5, + 13.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 6.5, + 13, + 7, + 13.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 7.5, + 13.5, + 7, + 13 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 8, + 13, + 7.5, + 13.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 6.0625, + 7.875, + 9.6875 + ], + "to": [ + 6.8125, + 8.625, + 12.4375 + ], + "rotation": { + "angle": 45, + "axis": "y", + "origin": [ + 6.4375, + 8.25, + 10.0625 + ] + }, + "faces": { + "north": { + "uv": [ + 8, + 13, + 8.5, + 13.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 7, + 0, + 8.5, + 0.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 8.5, + 13, + 9, + 13.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 7, + 0.5, + 8.5, + 1 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 7.5, + 5.5, + 7, + 4 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 7.5, + 5.5, + 7, + 7 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 7.625, + 8.125, + 11.0625 + ], + "to": [ + 10.25, + 8.75, + 11.6875 + ], + "rotation": { + "angle": 45, + "axis": "z", + "origin": [ + 7.9375, + 8.4375, + 11.375 + ] + }, + "faces": { + "north": { + "uv": [ + 0, + 7.5, + 1.5, + 8 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 9, + 13, + 9.5, + 13.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 1.5, + 7.5, + 3, + 8 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 9.5, + 13, + 10, + 13.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 5.5, + 8, + 4, + 7.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 9, + 7.5, + 7.5, + 8 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 9.125, + 9.8125, + 11.0625 + ], + "to": [ + 9.625, + 12.3125, + 11.5625 + ], + "rotation": { + "angle": -22.5, + "axis": "x", + "origin": [ + 9.375, + 10.0625, + 11.3125 + ] + }, + "faces": { + "north": { + "uv": [ + 7.5, + 4, + 8, + 5.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 7.5, + 5.5, + 8, + 7 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 0, + 8, + 0.5, + 9.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 0.5, + 8, + 1, + 9.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 10.5, + 13.5, + 10, + 13 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 11, + 13, + 10.5, + 13.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 9.125, + 11.9375, + 10.5625 + ], + "to": [ + 9.25, + 13.0625, + 10.6875 + ], + "rotation": { + "angle": 22.5, + "axis": "z", + "origin": [ + 9.1875, + 12, + 10.625 + ] + }, + "faces": { + "north": { + "uv": [ + 6, + 11.5, + 6.5, + 12.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 6.5, + 11.5, + 7, + 12.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 7, + 11.5, + 7.5, + 12.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 7.5, + 11.5, + 8, + 12.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 11.5, + 13.5, + 11, + 13 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 12, + 13, + 11.5, + 13.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 9.1875, + 11.9375, + 10.3125 + ], + "to": [ + 9.3125, + 13.0625, + 10.4375 + ], + "rotation": { + "angle": -45, + "axis": "x", + "origin": [ + 9.25, + 12, + 10.375 + ] + }, + "faces": { + "north": { + "uv": [ + 8, + 11.5, + 8.5, + 12.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 8.5, + 11.5, + 9, + 12.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 9.5, + 11.5, + 10, + 12.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 10.5, + 11.5, + 11, + 12.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 12.5, + 13.5, + 12, + 13 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 13, + 13, + 12.5, + 13.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 9.4375, + 11.9375, + 10.3125 + ], + "to": [ + 9.5625, + 13.0625, + 10.4375 + ], + "rotation": { + "angle": 22.5, + "axis": "y", + "origin": [ + 9.5, + 12, + 10.375 + ] + }, + "faces": { + "north": { + "uv": [ + 11, + 11.5, + 11.5, + 12.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 11.5, + 11.5, + 12, + 12.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 11.5, + 0, + 12, + 1 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 11.5, + 1, + 12, + 2 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 13.5, + 13.5, + 13, + 13 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 13.5, + 0, + 13, + 0.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 9.4375, + 11.9375, + 10.625 + ], + "to": [ + 9.5625, + 13.0625, + 10.75 + ], + "rotation": { + "angle": -22.5, + "axis": "z", + "origin": [ + 9.5, + 12, + 10.6875 + ] + }, + "faces": { + "north": { + "uv": [ + 11.5, + 2, + 12, + 3 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 11.5, + 3, + 12, + 4 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 11.5, + 4, + 12, + 5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 11.5, + 5, + 12, + 6 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 13.5, + 1, + 13, + 0.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 13.5, + 1, + 13, + 1.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 9.1875, + 11.75, + 10.6875 + ], + "to": [ + 9.3125, + 12.875, + 10.8125 + ], + "rotation": { + "angle": 22.5, + "axis": "x", + "origin": [ + 9.25, + 11.8125, + 10.75 + ] + }, + "faces": { + "north": { + "uv": [ + 11.5, + 6, + 12, + 7 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 11.5, + 7, + 12, + 8 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 11.5, + 8, + 12, + 9 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 11.5, + 9, + 12, + 10 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 13.5, + 2, + 13, + 1.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 13.5, + 2, + 13, + 2.5 + ], + "texture": "#0" + } + } + } + ], + "groups": [ + { + "name": "group", + "origin": [ + 8, + 8, + 8 + ], + "children": [ + { + "name": "stalk", + "origin": [ + 8, + 8, + 8 + ], + "children": [ + 0, + 1, + 2, + 3, + 4, + 5 + ] + }, + { + "name": "arm 1", + "origin": [ + 6, + 9.461959999999999, + 8.07818 + ], + "children": [ + 6, + { + "name": "group", + "origin": [ + 5.5, + 3.375, + 8 + ], + "children": [ + 7, + { + "name": "group", + "origin": [ + 5.375, + 3.5625, + 7.875 + ], + "children": [ + 8, + { + "name": "group", + "origin": [ + 5.375, + 3.5625, + 7.875 + ], + "children": [ + 9, + { + "name": "group", + "origin": [ + 5.375, + 3.5625, + 7.875 + ], + "children": [ + 10, + { + "name": "group", + "origin": [ + 5.375, + 3.5625, + 7.875 + ], + "children": [ + 11, + { + "name": "group", + "origin": [ + 5.375, + 3.5625, + 7.875 + ], + "children": [ + 12, + { + "name": "group", + "origin": [ + 4.4375, + 5.8125, + 7.375 + ], + "children": [ + 13, + { + "name": "group", + "origin": [ + 4.4375, + 5.8125, + 7.375 + ], + "children": [ + 14 + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "name": "arm 2", + "origin": [ + 6, + 9.461959999999999, + 8.07818 + ], + "children": [ + 15, + { + "name": "group", + "origin": [ + 5.5, + 3.375, + 8 + ], + "children": [ + 16, + { + "name": "group", + "origin": [ + 5.375, + 3.5625, + 7.875 + ], + "children": [ + 17, + { + "name": "group", + "origin": [ + 5.375, + 3.5625, + 7.875 + ], + "children": [ + 18, + { + "name": "group", + "origin": [ + 5.375, + 3.5625, + 7.875 + ], + "children": [ + 19, + { + "name": "group", + "origin": [ + 5.375, + 3.5625, + 7.875 + ], + "children": [ + 20, + { + "name": "group", + "origin": [ + 5.375, + 3.5625, + 7.875 + ], + "children": [ + 21, + { + "name": "group", + "origin": [ + 4.4375, + 5.8125, + 7.375 + ], + "children": [ + 22, + { + "name": "group", + "origin": [ + 4.4375, + 5.8125, + 7.375 + ], + "children": [ + 23 + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "name": "arm 3", + "origin": [ + 6, + 9.461959999999999, + 8.07818 + ], + "children": [ + 24, + { + "name": "group", + "origin": [ + 5.5, + 3.375, + 8 + ], + "children": [ + 25, + { + "name": "group", + "origin": [ + 5.375, + 3.5625, + 7.875 + ], + "children": [ + 26, + { + "name": "group", + "origin": [ + 5.375, + 3.5625, + 7.875 + ], + "children": [ + 27, + { + "name": "group", + "origin": [ + 5.375, + 3.5625, + 7.875 + ], + "children": [ + 28, + { + "name": "group", + "origin": [ + 5.375, + 3.5625, + 7.875 + ], + "children": [ + 29, + { + "name": "group", + "origin": [ + 5.375, + 3.5625, + 7.875 + ], + "children": [ + 30, + { + "name": "group", + "origin": [ + 4.4375, + 5.8125, + 7.375 + ], + "children": [ + 31, + { + "name": "group", + "origin": [ + 4.4375, + 5.8125, + 7.375 + ], + "children": [ + 32 + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "name": "arm 4", + "origin": [ + 6, + 9.461959999999999, + 8.07818 + ], + "children": [ + { + "name": "group", + "origin": [ + 5.5, + 3.375, + 8 + ], + "children": [ + 33, + { + "name": "group", + "origin": [ + 5.375, + 3.5625, + 7.875 + ], + "children": [ + 34, + { + "name": "group", + "origin": [ + 5.375, + 3.5625, + 7.875 + ], + "children": [ + 35, + { + "name": "group", + "origin": [ + 5.375, + 3.5625, + 7.875 + ], + "children": [ + 36, + { + "name": "group", + "origin": [ + 5.375, + 3.5625, + 7.875 + ], + "children": [ + 37, + { + "name": "group", + "origin": [ + 5.375, + 3.5625, + 7.875 + ], + "children": [ + 38, + { + "name": "group", + "origin": [ + 4.4375, + 5.8125, + 7.375 + ], + "children": [ + 39, + { + "name": "group", + "origin": [ + 4.4375, + 5.8125, + 7.375 + ], + "children": [ + 40 + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "name": "arm 5", + "origin": [ + 6, + 9.461959999999999, + 8.07818 + ], + "children": [ + { + "name": "group", + "origin": [ + 5.5, + 3.375, + 8 + ], + "children": [ + { + "name": "group", + "origin": [ + 5.375, + 3.5625, + 7.875 + ], + "children": [ + 41, + { + "name": "group", + "origin": [ + 5.375, + 3.5625, + 7.875 + ], + "children": [ + 42, + { + "name": "group", + "origin": [ + 5.375, + 3.5625, + 7.875 + ], + "children": [ + 43, + { + "name": "group", + "origin": [ + 5.375, + 3.5625, + 7.875 + ], + "children": [ + 44, + { + "name": "group", + "origin": [ + 5.375, + 3.5625, + 7.875 + ], + "children": [ + 45, + { + "name": "group", + "origin": [ + 4.4375, + 5.8125, + 7.375 + ], + "children": [ + 46, + { + "name": "group", + "origin": [ + 4.4375, + 5.8125, + 7.375 + ], + "children": [ + 47 + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "name": "arm 6", + "origin": [ + 6, + 9.461959999999999, + 8.07818 + ], + "children": [ + 48, + { + "name": "group", + "origin": [ + 5.5, + 3.375, + 8 + ], + "children": [ + 49, + { + "name": "group", + "origin": [ + 5.375, + 3.5625, + 7.875 + ], + "children": [ + 50, + { + "name": "group", + "origin": [ + 5.375, + 3.5625, + 7.875 + ], + "children": [ + 51, + { + "name": "group", + "origin": [ + 5.375, + 3.5625, + 7.875 + ], + "children": [ + 52, + { + "name": "group", + "origin": [ + 5.375, + 3.5625, + 7.875 + ], + "children": [ + 53, + { + "name": "group", + "origin": [ + 5.375, + 3.5625, + 7.875 + ], + "children": [ + 54, + { + "name": "group", + "origin": [ + 4.4375, + 5.8125, + 7.375 + ], + "children": [ + 55, + { + "name": "group", + "origin": [ + 4.4375, + 5.8125, + 7.375 + ], + "children": [ + 56 + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/surgebinding/resources/assets/surgebinding/models/block/prickletac2.json b/src/surgebinding/resources/assets/surgebinding/models/block/prickletac2.json new file mode 100644 index 000000000..b1a9b9728 --- /dev/null +++ b/src/surgebinding/resources/assets/surgebinding/models/block/prickletac2.json @@ -0,0 +1,1082 @@ +{ + "credit": "Made with Blockbench", + "texture_size": [32, 32], + "textures": { + "0": "surgebinding:block/prickletac", + "particle": "surgebinding:block/prickletac" + }, + "elements": [ + { + "from": [5.3125, 0.9375, 7.8125], + "to": [7.1875, 3.8125, 9.6875], + "rotation": {"angle": 0, "axis": "y", "origin": [13.25, 7.875, 16.75]}, + "faces": { + "north": {"uv": [1.5, 1.5, 2.5, 3], "texture": "#0"}, + "east": {"uv": [1.5, 0, 2.5, 1.5], "texture": "#0"}, + "south": {"uv": [2.5, 2.5, 3.5, 4], "texture": "#0"}, + "west": {"uv": [2.5, 0, 3.5, 1.5], "texture": "#0"}, + "up": {"uv": [3.5, 2.5, 2.5, 1.5], "texture": "#0"}, + "down": {"uv": [6.5, 1, 5.5, 2], "texture": "#0"} + } + }, + { + "from": [5.5625, 5.55847, 8.91917], + "to": [6.9375, 7.93347, 10.29417], + "rotation": {"angle": 0, "axis": "y", "origin": [13.25, 12.24597, 17.60667]}, + "faces": { + "north": {"uv": [0, 3, 1, 4.5], "texture": "#0"}, + "east": {"uv": [1, 3, 2, 4.5], "texture": "#0"}, + "south": {"uv": [3.5, 3.5, 4.5, 5], "texture": "#0"}, + "west": {"uv": [3.5, 0, 4.5, 1.5], "texture": "#0"}, + "up": {"uv": [6.5, 3, 5.5, 2], "texture": "#0"}, + "down": {"uv": [6.5, 3, 5.5, 4], "texture": "#0"} + } + }, + { + "from": [5.6875, 7.22453, 8.55673], + "to": [6.8125, 9.34953, 9.68173], + "rotation": {"angle": -45, "axis": "x", "origin": [6.25, 8.28703, 9.11923]}, + "faces": { + "north": {"uv": [3.5, 1.5, 4.5, 3], "texture": "#0"}, + "east": {"uv": [2, 4, 3, 5.5], "texture": "#0"}, + "south": {"uv": [0, 4.5, 1, 6], "texture": "#0"}, + "west": {"uv": [1, 4.5, 2, 6], "texture": "#0"}, + "up": {"uv": [1, 7, 0, 6], "texture": "#0"}, + "down": {"uv": [2, 6, 1, 7], "texture": "#0"} + } + }, + { + "from": [5.8125, 8.58696, 6.89068], + "to": [6.6875, 9.46196, 8.76568], + "rotation": {"angle": 0, "axis": "y", "origin": [6.25, 9.02446, 7.82818]}, + "faces": { + "north": {"uv": [6, 6, 7, 7], "texture": "#0"}, + "east": {"uv": [4.5, 4.5, 6, 5.5], "texture": "#0"}, + "south": {"uv": [6, 0, 7, 1], "texture": "#0"}, + "west": {"uv": [4.5, 0, 6, 1], "texture": "#0"}, + "up": {"uv": [5.5, 2.5, 4.5, 1], "texture": "#0"}, + "down": {"uv": [5.5, 2.5, 4.5, 4], "texture": "#0"} + } + }, + { + "from": [5.4375, 3.37299, 8.27208], + "to": [7.0625, 5.99799, 9.89708], + "rotation": {"angle": 22.5, "axis": "x", "origin": [6.25, 4.68549, 9.08458]}, + "faces": { + "north": {"uv": [3, 5, 4, 6.5], "texture": "#0"}, + "east": {"uv": [2, 5.5, 3, 7], "texture": "#0"}, + "south": {"uv": [4, 5.5, 5, 7], "texture": "#0"}, + "west": {"uv": [5, 5.5, 6, 7], "texture": "#0"}, + "up": {"uv": [7, 5, 6, 4], "texture": "#0"}, + "down": {"uv": [7, 5, 6, 6], "texture": "#0"} + } + }, + { + "from": [5, 0, 7], + "to": [8, 1, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [13, 8, 17]}, + "faces": { + "north": {"uv": [4.5, 4, 6, 4.5], "texture": "#0"}, + "east": {"uv": [6.5, 1, 8, 1.5], "texture": "#0"}, + "south": {"uv": [6.5, 1.5, 8, 2], "texture": "#0"}, + "west": {"uv": [6.5, 2, 8, 2.5], "texture": "#0"}, + "up": {"uv": [1.5, 1.5, 0, 0], "texture": "#0"}, + "down": {"uv": [1.5, 1.5, 0, 3], "texture": "#0"} + } + }, + { + "from": [5.4375, 8.0625, 9.25], + "to": [6.4375, 9.0625, 10.25], + "rotation": {"angle": -45, "axis": "x", "origin": [5.9375, 8.5625, 9.75]}, + "faces": { + "north": {"uv": [4, 5, 4.5, 5.5], "texture": "#0"}, + "east": {"uv": [9, 7.5, 9.5, 8], "texture": "#0"}, + "south": {"uv": [9, 8.5, 9.5, 9], "texture": "#0"}, + "west": {"uv": [10, 8.5, 10.5, 9], "texture": "#0"}, + "up": {"uv": [11.5, 11, 11, 10.5], "texture": "#0"}, + "down": {"uv": [12, 10, 11.5, 10.5], "texture": "#0"} + } + }, + { + "from": [5.5, 8.3125, 9.4375], + "to": [6.25, 10.0625, 10.1875], + "rotation": {"angle": 45, "axis": "z", "origin": [5.875, 8.6875, 9.8125]}, + "faces": { + "north": {"uv": [2, 3, 2.5, 4], "texture": "#0"}, + "east": {"uv": [3, 4, 3.5, 5], "texture": "#0"}, + "south": {"uv": [1, 8, 1.5, 9], "texture": "#0"}, + "west": {"uv": [1.5, 8, 2, 9], "texture": "#0"}, + "up": {"uv": [12, 11, 11.5, 10.5], "texture": "#0"}, + "down": {"uv": [5.5, 12, 5, 12.5], "texture": "#0"} + } + }, + { + "from": [3.625, 9.0625, 9.6875], + "to": [5.25, 9.6875, 10.3125], + "rotation": {"angle": 45, "axis": "y", "origin": [4.9375, 9.375, 10]}, + "faces": { + "north": {"uv": [3.5, 3, 4.5, 3.5], "texture": "#0"}, + "east": {"uv": [9, 12, 9.5, 12.5], "texture": "#0"}, + "south": {"uv": [7.5, 7, 8.5, 7.5], "texture": "#0"}, + "west": {"uv": [10, 12, 10.5, 12.5], "texture": "#0"}, + "up": {"uv": [3, 8.5, 2, 8], "texture": "#0"}, + "down": {"uv": [4, 8, 3, 8.5], "texture": "#0"} + } + }, + { + "from": [3.875, 9.125, 10.5], + "to": [4.375, 10.625, 11], + "rotation": {"angle": -22.5, "axis": "z", "origin": [4.125, 9.375, 10.75]}, + "faces": { + "north": {"uv": [4, 8, 4.5, 9], "texture": "#0"}, + "east": {"uv": [4.5, 8, 5, 9], "texture": "#0"}, + "south": {"uv": [5, 8, 5.5, 9], "texture": "#0"}, + "west": {"uv": [7.5, 8, 8, 9], "texture": "#0"}, + "up": {"uv": [12.5, 12.5, 12, 12], "texture": "#0"}, + "down": {"uv": [12.5, 0, 12, 0.5], "texture": "#0"} + } + }, + { + "from": [4.375, 9.9375, 10.6875], + "to": [4.5, 11.0625, 10.8125], + "rotation": {"angle": -22.5, "axis": "x", "origin": [4.4375, 10, 10.75]}, + "faces": { + "north": {"uv": [8, 8, 8.5, 9], "texture": "#0"}, + "east": {"uv": [8, 1, 8.5, 2], "texture": "#0"}, + "south": {"uv": [8, 2, 8.5, 3], "texture": "#0"}, + "west": {"uv": [8, 3, 8.5, 4], "texture": "#0"}, + "up": {"uv": [12.5, 1, 12, 0.5], "texture": "#0"}, + "down": {"uv": [12.5, 1, 12, 1.5], "texture": "#0"} + } + }, + { + "from": [4.25, 10, 10.5625], + "to": [4.375, 11.125, 10.6875], + "rotation": {"angle": -45, "axis": "z", "origin": [4.3125, 10.0625, 10.625]}, + "faces": { + "north": {"uv": [8, 4, 8.5, 5], "texture": "#0"}, + "east": {"uv": [8, 5, 8.5, 6], "texture": "#0"}, + "south": {"uv": [8, 6, 8.5, 7], "texture": "#0"}, + "west": {"uv": [2, 8.5, 2.5, 9.5], "texture": "#0"}, + "up": {"uv": [12.5, 2, 12, 1.5], "texture": "#0"}, + "down": {"uv": [12.5, 2, 12, 2.5], "texture": "#0"} + } + }, + { + "from": [4.4375, 9.9375, 10.8125], + "to": [4.5625, 11.0625, 10.9375], + "rotation": {"angle": 22.5, "axis": "y", "origin": [4.5, 10, 10.875]}, + "faces": { + "north": {"uv": [2.5, 8.5, 3, 9.5], "texture": "#0"}, + "east": {"uv": [3, 8.5, 3.5, 9.5], "texture": "#0"}, + "south": {"uv": [3.5, 8.5, 4, 9.5], "texture": "#0"}, + "west": {"uv": [5.5, 8.5, 6, 9.5], "texture": "#0"}, + "up": {"uv": [12.5, 3, 12, 2.5], "texture": "#0"}, + "down": {"uv": [12.5, 3, 12, 3.5], "texture": "#0"} + } + }, + { + "from": [4.3125, 10, 10.6875], + "to": [4.4375, 11.125, 10.8125], + "rotation": {"angle": 22.5, "axis": "x", "origin": [4.375, 10.0625, 10.75]}, + "faces": { + "north": {"uv": [6, 8.5, 6.5, 9.5], "texture": "#0"}, + "east": {"uv": [6.5, 8.5, 7, 9.5], "texture": "#0"}, + "south": {"uv": [7, 8.5, 7.5, 9.5], "texture": "#0"}, + "west": {"uv": [8.5, 8.5, 9, 9.5], "texture": "#0"}, + "up": {"uv": [12.5, 4, 12, 3.5], "texture": "#0"}, + "down": {"uv": [12.5, 4, 12, 4.5], "texture": "#0"} + } + }, + { + "from": [4.4375, 9.8125, 10.5625], + "to": [4.5625, 10.9375, 10.6875], + "rotation": {"angle": 22.5, "axis": "z", "origin": [4.5, 9.875, 10.625]}, + "faces": { + "north": {"uv": [8.5, 0, 9, 1], "texture": "#0"}, + "east": {"uv": [8.5, 1, 9, 2], "texture": "#0"}, + "south": {"uv": [8.5, 2, 9, 3], "texture": "#0"}, + "west": {"uv": [8.5, 3, 9, 4], "texture": "#0"}, + "up": {"uv": [12.5, 5, 12, 4.5], "texture": "#0"}, + "down": {"uv": [12.5, 5, 12, 5.5], "texture": "#0"} + } + }, + { + "from": [5.0625, 4.875, 8.625], + "to": [6.0625, 5.875, 9.625], + "rotation": {"angle": -45, "axis": "x", "origin": [5.5625, 5.375, 9.125]}, + "faces": { + "north": {"uv": [12, 5.5, 12.5, 6], "texture": "#0"}, + "east": {"uv": [12, 6, 12.5, 6.5], "texture": "#0"}, + "south": {"uv": [12, 6.5, 12.5, 7], "texture": "#0"}, + "west": {"uv": [12, 7, 12.5, 7.5], "texture": "#0"}, + "up": {"uv": [12.5, 8, 12, 7.5], "texture": "#0"}, + "down": {"uv": [12.5, 8, 12, 8.5], "texture": "#0"} + } + }, + { + "from": [5.125, 5.125, 8.8125], + "to": [5.875, 6.875, 9.5625], + "rotation": {"angle": 45, "axis": "z", "origin": [5.5, 5.5, 9.1875]}, + "faces": { + "north": {"uv": [8.5, 4, 9, 5], "texture": "#0"}, + "east": {"uv": [8.5, 5, 9, 6], "texture": "#0"}, + "south": {"uv": [8.5, 6, 9, 7], "texture": "#0"}, + "west": {"uv": [1, 9, 1.5, 10], "texture": "#0"}, + "up": {"uv": [12.5, 9, 12, 8.5], "texture": "#0"}, + "down": {"uv": [12.5, 9, 12, 9.5], "texture": "#0"} + } + }, + { + "from": [3.25, 5.875, 9.0625], + "to": [4.875, 6.5, 9.6875], + "rotation": {"angle": 45, "axis": "y", "origin": [4.5625, 6.1875, 9.375]}, + "faces": { + "north": {"uv": [8.5, 7, 9.5, 7.5], "texture": "#0"}, + "east": {"uv": [12, 9.5, 12.5, 10], "texture": "#0"}, + "south": {"uv": [8.5, 8, 9.5, 8.5], "texture": "#0"}, + "west": {"uv": [12, 10, 12.5, 10.5], "texture": "#0"}, + "up": {"uv": [5, 9.5, 4, 9], "texture": "#0"}, + "down": {"uv": [8.5, 9, 7.5, 9.5], "texture": "#0"} + } + }, + { + "from": [3.5625, 6, 9.875], + "to": [4.0625, 7.5, 10.375], + "rotation": {"angle": -22.5, "axis": "z", "origin": [3.8125, 6.25, 10.125]}, + "faces": { + "north": {"uv": [1.5, 9, 2, 10], "texture": "#0"}, + "east": {"uv": [5, 9, 5.5, 10], "texture": "#0"}, + "south": {"uv": [9, 9, 9.5, 10], "texture": "#0"}, + "west": {"uv": [9, 0, 9.5, 1], "texture": "#0"}, + "up": {"uv": [12.5, 11, 12, 10.5], "texture": "#0"}, + "down": {"uv": [12.5, 11, 12, 11.5], "texture": "#0"} + } + }, + { + "from": [4.0625, 6.8125, 10.125], + "to": [4.1875, 7.9375, 10.25], + "rotation": {"angle": -22.5, "axis": "x", "origin": [4.125, 6.875, 10.1875]}, + "faces": { + "north": {"uv": [9, 1, 9.5, 2], "texture": "#0"}, + "east": {"uv": [9, 2, 9.5, 3], "texture": "#0"}, + "south": {"uv": [9, 3, 9.5, 4], "texture": "#0"}, + "west": {"uv": [9, 4, 9.5, 5], "texture": "#0"}, + "up": {"uv": [12.5, 12, 12, 11.5], "texture": "#0"}, + "down": {"uv": [0.5, 12.5, 0, 13], "texture": "#0"} + } + }, + { + "from": [3.875, 6.8125, 9.9375], + "to": [4, 7.9375, 10.0625], + "rotation": {"angle": -45, "axis": "z", "origin": [3.9375, 6.875, 10]}, + "faces": { + "north": {"uv": [9, 5, 9.5, 6], "texture": "#0"}, + "east": {"uv": [9, 6, 9.5, 7], "texture": "#0"}, + "south": {"uv": [0, 9.5, 0.5, 10.5], "texture": "#0"}, + "west": {"uv": [0.5, 9.5, 1, 10.5], "texture": "#0"}, + "up": {"uv": [1, 13, 0.5, 12.5], "texture": "#0"}, + "down": {"uv": [1.5, 12.5, 1, 13], "texture": "#0"} + } + }, + { + "from": [4.0625, 6.8125, 10.1875], + "to": [4.1875, 7.9375, 10.3125], + "rotation": {"angle": 22.5, "axis": "y", "origin": [4.125, 6.875, 10.25]}, + "faces": { + "north": {"uv": [2, 9.5, 2.5, 10.5], "texture": "#0"}, + "east": {"uv": [2.5, 9.5, 3, 10.5], "texture": "#0"}, + "south": {"uv": [3, 9.5, 3.5, 10.5], "texture": "#0"}, + "west": {"uv": [3.5, 9.5, 4, 10.5], "texture": "#0"}, + "up": {"uv": [2, 13, 1.5, 12.5], "texture": "#0"}, + "down": {"uv": [2.5, 12.5, 2, 13], "texture": "#0"} + } + }, + { + "from": [4, 6.75, 10.0625], + "to": [4.125, 7.875, 10.1875], + "rotation": {"angle": 22.5, "axis": "x", "origin": [4.0625, 6.8125, 10.125]}, + "faces": { + "north": {"uv": [4, 9.5, 4.5, 10.5], "texture": "#0"}, + "east": {"uv": [4.5, 9.5, 5, 10.5], "texture": "#0"}, + "south": {"uv": [5.5, 9.5, 6, 10.5], "texture": "#0"}, + "west": {"uv": [6, 9.5, 6.5, 10.5], "texture": "#0"}, + "up": {"uv": [3, 13, 2.5, 12.5], "texture": "#0"}, + "down": {"uv": [3.5, 12.5, 3, 13], "texture": "#0"} + } + }, + { + "from": [4.1875, 6.625, 9.9375], + "to": [4.3125, 7.75, 10.0625], + "rotation": {"angle": 22.5, "axis": "z", "origin": [4.25, 6.6875, 10]}, + "faces": { + "north": {"uv": [6.5, 9.5, 7, 10.5], "texture": "#0"}, + "east": {"uv": [7, 9.5, 7.5, 10.5], "texture": "#0"}, + "south": {"uv": [7.5, 9.5, 8, 10.5], "texture": "#0"}, + "west": {"uv": [8, 9.5, 8.5, 10.5], "texture": "#0"}, + "up": {"uv": [4, 13, 3.5, 12.5], "texture": "#0"}, + "down": {"uv": [4.5, 12.5, 4, 13], "texture": "#0"} + } + }, + { + "from": [6.0625, 6.5, 8.4375], + "to": [7.0625, 7.5, 9.4375], + "rotation": {"angle": -45, "axis": "x", "origin": [6.5625, 7, 8.9375]}, + "faces": { + "north": {"uv": [4.5, 12.5, 5, 13], "texture": "#0"}, + "east": {"uv": [5, 12.5, 5.5, 13], "texture": "#0"}, + "south": {"uv": [5.5, 12.5, 6, 13], "texture": "#0"}, + "west": {"uv": [6, 12.5, 6.5, 13], "texture": "#0"}, + "up": {"uv": [7, 13, 6.5, 12.5], "texture": "#0"}, + "down": {"uv": [7.5, 12.5, 7, 13], "texture": "#0"} + } + }, + { + "from": [6.375, 6.6875, 6.25], + "to": [7.125, 7.4375, 9], + "rotation": {"angle": -45, "axis": "y", "origin": [6.75, 7.0625, 8.625]}, + "faces": { + "north": {"uv": [7.5, 12.5, 8, 13], "texture": "#0"}, + "east": {"uv": [6.5, 2.5, 8, 3], "texture": "#0"}, + "south": {"uv": [8, 12.5, 8.5, 13], "texture": "#0"}, + "west": {"uv": [6.5, 3, 8, 3.5], "texture": "#0"}, + "up": {"uv": [3.5, 8, 3, 6.5], "texture": "#0"}, + "down": {"uv": [4, 6.5, 3.5, 8], "texture": "#0"} + } + }, + { + "from": [8, 6.9375, 7], + "to": [10.625, 7.5625, 7.625], + "rotation": {"angle": 45, "axis": "z", "origin": [8.3125, 7.25, 7.3125]}, + "faces": { + "north": {"uv": [6.5, 3.5, 8, 4], "texture": "#0"}, + "east": {"uv": [8.5, 12.5, 9, 13], "texture": "#0"}, + "south": {"uv": [0, 7, 1.5, 7.5], "texture": "#0"}, + "west": {"uv": [9, 12.5, 9.5, 13], "texture": "#0"}, + "up": {"uv": [3, 7.5, 1.5, 7], "texture": "#0"}, + "down": {"uv": [5.5, 7, 4, 7.5], "texture": "#0"} + } + }, + { + "from": [9.375, 8.75, 7.0625], + "to": [9.875, 11.25, 7.5625], + "rotation": {"angle": 22.5, "axis": "z", "origin": [9.625, 9, 7.3125]}, + "faces": { + "north": {"uv": [5.5, 7, 6, 8.5], "texture": "#0"}, + "east": {"uv": [6, 7, 6.5, 8.5], "texture": "#0"}, + "south": {"uv": [6.5, 7, 7, 8.5], "texture": "#0"}, + "west": {"uv": [7, 7, 7.5, 8.5], "texture": "#0"}, + "up": {"uv": [10, 13, 9.5, 12.5], "texture": "#0"}, + "down": {"uv": [10.5, 12.5, 10, 13], "texture": "#0"} + } + }, + { + "from": [8.875, 10.625, 7.25], + "to": [9, 11.75, 7.375], + "rotation": {"angle": -22.5, "axis": "x", "origin": [8.9375, 10.6875, 7.3125]}, + "faces": { + "north": {"uv": [8.5, 9.5, 9, 10.5], "texture": "#0"}, + "east": {"uv": [9.5, 9.5, 10, 10.5], "texture": "#0"}, + "south": {"uv": [9.5, 0, 10, 1], "texture": "#0"}, + "west": {"uv": [9.5, 1, 10, 2], "texture": "#0"}, + "up": {"uv": [11, 13, 10.5, 12.5], "texture": "#0"}, + "down": {"uv": [11.5, 12.5, 11, 13], "texture": "#0"} + } + }, + { + "from": [8.9375, 10.625, 7.125], + "to": [9.0625, 11.75, 7.25], + "rotation": {"angle": 45, "axis": "z", "origin": [9, 10.6875, 7.1875]}, + "faces": { + "north": {"uv": [9.5, 2, 10, 3], "texture": "#0"}, + "east": {"uv": [9.5, 3, 10, 4], "texture": "#0"}, + "south": {"uv": [9.5, 4, 10, 5], "texture": "#0"}, + "west": {"uv": [9.5, 5, 10, 6], "texture": "#0"}, + "up": {"uv": [12, 13, 11.5, 12.5], "texture": "#0"}, + "down": {"uv": [12.5, 12.5, 12, 13], "texture": "#0"} + } + }, + { + "from": [8.75, 10.5, 7.375], + "to": [8.875, 11.625, 7.5], + "rotation": {"angle": -22.5, "axis": "y", "origin": [8.8125, 10.5625, 7.4375]}, + "faces": { + "north": {"uv": [9.5, 6, 10, 7], "texture": "#0"}, + "east": {"uv": [9.5, 7, 10, 8], "texture": "#0"}, + "south": {"uv": [9.5, 8, 10, 9], "texture": "#0"}, + "west": {"uv": [1, 10, 1.5, 11], "texture": "#0"}, + "up": {"uv": [13, 13, 12.5, 12.5], "texture": "#0"}, + "down": {"uv": [13, 0, 12.5, 0.5], "texture": "#0"} + } + }, + { + "from": [8.9375, 10.5, 7.25], + "to": [9.0625, 11.625, 7.375], + "rotation": {"angle": 22.5, "axis": "x", "origin": [9, 10.5625, 7.3125]}, + "faces": { + "north": {"uv": [1.5, 10, 2, 11], "texture": "#0"}, + "east": {"uv": [5, 10, 5.5, 11], "texture": "#0"}, + "south": {"uv": [9, 10, 9.5, 11], "texture": "#0"}, + "west": {"uv": [10, 10, 10.5, 11], "texture": "#0"}, + "up": {"uv": [13, 1, 12.5, 0.5], "texture": "#0"}, + "down": {"uv": [13, 1, 12.5, 1.5], "texture": "#0"} + } + }, + { + "from": [8.8125, 10.375, 7.125], + "to": [8.9375, 11.5, 7.25], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8.875, 10.4375, 7.1875]}, + "faces": { + "north": {"uv": [10, 0, 10.5, 1], "texture": "#0"}, + "east": {"uv": [10, 1, 10.5, 2], "texture": "#0"}, + "south": {"uv": [10, 2, 10.5, 3], "texture": "#0"}, + "west": {"uv": [10, 3, 10.5, 4], "texture": "#0"}, + "up": {"uv": [13, 2, 12.5, 1.5], "texture": "#0"}, + "down": {"uv": [13, 2, 12.5, 2.5], "texture": "#0"} + } + }, + { + "from": [5.75, 8.625, 5.625], + "to": [6.5, 9.375, 7.375], + "rotation": {"angle": 45, "axis": "y", "origin": [6.125, 9, 7]}, + "faces": { + "north": {"uv": [12.5, 2.5, 13, 3], "texture": "#0"}, + "east": {"uv": [9.5, 9, 10.5, 9.5], "texture": "#0"}, + "south": {"uv": [12.5, 3, 13, 3.5], "texture": "#0"}, + "west": {"uv": [10, 4, 11, 4.5], "texture": "#0"}, + "up": {"uv": [10.5, 5.5, 10, 4.5], "texture": "#0"}, + "down": {"uv": [10.5, 5.5, 10, 6.5], "texture": "#0"} + } + }, + { + "from": [3.875, 8.875, 6], + "to": [5.5, 9.5, 6.625], + "rotation": {"angle": -45, "axis": "z", "origin": [5.1875, 9.1875, 6.3125]}, + "faces": { + "north": {"uv": [10, 6.5, 11, 7], "texture": "#0"}, + "east": {"uv": [12.5, 3.5, 13, 4], "texture": "#0"}, + "south": {"uv": [10, 7, 11, 7.5], "texture": "#0"}, + "west": {"uv": [12.5, 4, 13, 4.5], "texture": "#0"}, + "up": {"uv": [11, 8, 10, 7.5], "texture": "#0"}, + "down": {"uv": [11, 8, 10, 8.5], "texture": "#0"} + } + }, + { + "from": [4, 9.8125, 6.0625], + "to": [4.5, 11.3125, 6.5625], + "rotation": {"angle": -22.5, "axis": "z", "origin": [4.25, 10.0625, 6.3125]}, + "faces": { + "north": {"uv": [0, 10.5, 0.5, 11.5], "texture": "#0"}, + "east": {"uv": [0.5, 10.5, 1, 11.5], "texture": "#0"}, + "south": {"uv": [2, 10.5, 2.5, 11.5], "texture": "#0"}, + "west": {"uv": [2.5, 10.5, 3, 11.5], "texture": "#0"}, + "up": {"uv": [13, 5, 12.5, 4.5], "texture": "#0"}, + "down": {"uv": [13, 5, 12.5, 5.5], "texture": "#0"} + } + }, + { + "from": [4.5, 10.625, 6.3125], + "to": [4.625, 11.75, 6.4375], + "rotation": {"angle": -22.5, "axis": "x", "origin": [4.5625, 10.6875, 6.375]}, + "faces": { + "north": {"uv": [3, 10.5, 3.5, 11.5], "texture": "#0"}, + "east": {"uv": [3.5, 10.5, 4, 11.5], "texture": "#0"}, + "south": {"uv": [4, 10.5, 4.5, 11.5], "texture": "#0"}, + "west": {"uv": [4.5, 10.5, 5, 11.5], "texture": "#0"}, + "up": {"uv": [13, 6, 12.5, 5.5], "texture": "#0"}, + "down": {"uv": [13, 6, 12.5, 6.5], "texture": "#0"} + } + }, + { + "from": [4.4375, 10.6875, 6.125], + "to": [4.5625, 11.8125, 6.25], + "rotation": {"angle": -45, "axis": "z", "origin": [4.5, 10.75, 6.1875]}, + "faces": { + "north": {"uv": [5.5, 10.5, 6, 11.5], "texture": "#0"}, + "east": {"uv": [6, 10.5, 6.5, 11.5], "texture": "#0"}, + "south": {"uv": [6.5, 10.5, 7, 11.5], "texture": "#0"}, + "west": {"uv": [7, 10.5, 7.5, 11.5], "texture": "#0"}, + "up": {"uv": [13, 7, 12.5, 6.5], "texture": "#0"}, + "down": {"uv": [13, 7, 12.5, 7.5], "texture": "#0"} + } + }, + { + "from": [4.5, 10.4375, 6.375], + "to": [4.625, 11.5625, 6.5], + "rotation": {"angle": 22.5, "axis": "y", "origin": [4.5625, 10.5, 6.4375]}, + "faces": { + "north": {"uv": [7.5, 10.5, 8, 11.5], "texture": "#0"}, + "east": {"uv": [8, 10.5, 8.5, 11.5], "texture": "#0"}, + "south": {"uv": [8.5, 10.5, 9, 11.5], "texture": "#0"}, + "west": {"uv": [9.5, 10.5, 10, 11.5], "texture": "#0"}, + "up": {"uv": [13, 8, 12.5, 7.5], "texture": "#0"}, + "down": {"uv": [13, 8, 12.5, 8.5], "texture": "#0"} + } + }, + { + "from": [4.4375, 10.5, 6.125], + "to": [4.5625, 11.625, 6.25], + "rotation": {"angle": 22.5, "axis": "x", "origin": [4.5, 10.5625, 6.1875]}, + "faces": { + "north": {"uv": [10.5, 10.5, 11, 11.5], "texture": "#0"}, + "east": {"uv": [10.5, 0, 11, 1], "texture": "#0"}, + "south": {"uv": [10.5, 1, 11, 2], "texture": "#0"}, + "west": {"uv": [10.5, 2, 11, 3], "texture": "#0"}, + "up": {"uv": [13, 9, 12.5, 8.5], "texture": "#0"}, + "down": {"uv": [13, 9, 12.5, 9.5], "texture": "#0"} + } + }, + { + "from": [4.5625, 10.5625, 6.1875], + "to": [4.6875, 11.6875, 6.3125], + "rotation": {"angle": 22.5, "axis": "z", "origin": [4.625, 10.625, 6.25]}, + "faces": { + "north": {"uv": [10.5, 3, 11, 4], "texture": "#0"}, + "east": {"uv": [10.5, 4.5, 11, 5.5], "texture": "#0"}, + "south": {"uv": [10.5, 5.5, 11, 6.5], "texture": "#0"}, + "west": {"uv": [10.5, 8.5, 11, 9.5], "texture": "#0"}, + "up": {"uv": [13, 10, 12.5, 9.5], "texture": "#0"}, + "down": {"uv": [13, 10, 12.5, 10.5], "texture": "#0"} + } + }, + { + "from": [6.3125, 9.0625, 7.875], + "to": [7.9375, 9.6875, 8.5], + "rotation": {"angle": 45, "axis": "z", "origin": [6.625, 9.375, 8.1875]}, + "faces": { + "north": {"uv": [10, 9.5, 11, 10], "texture": "#0"}, + "east": {"uv": [12.5, 10.5, 13, 11], "texture": "#0"}, + "south": {"uv": [10.5, 10, 11.5, 10.5], "texture": "#0"}, + "west": {"uv": [12.5, 11, 13, 11.5], "texture": "#0"}, + "up": {"uv": [2, 11.5, 1, 11], "texture": "#0"}, + "down": {"uv": [12, 11, 11, 11.5], "texture": "#0"} + } + }, + { + "from": [7.3125, 10, 7.9375], + "to": [7.8125, 11.5, 8.4375], + "rotation": {"angle": 22.5, "axis": "z", "origin": [7.5625, 10.25, 8.1875]}, + "faces": { + "north": {"uv": [5, 11, 5.5, 12], "texture": "#0"}, + "east": {"uv": [9, 11, 9.5, 12], "texture": "#0"}, + "south": {"uv": [10, 11, 10.5, 12], "texture": "#0"}, + "west": {"uv": [11, 0, 11.5, 1], "texture": "#0"}, + "up": {"uv": [13, 12, 12.5, 11.5], "texture": "#0"}, + "down": {"uv": [13, 12, 12.5, 12.5], "texture": "#0"} + } + }, + { + "from": [7.1875, 10.875, 8.125], + "to": [7.3125, 12, 8.25], + "rotation": {"angle": -22.5, "axis": "x", "origin": [7.25, 10.9375, 8.1875]}, + "faces": { + "north": {"uv": [11, 1, 11.5, 2], "texture": "#0"}, + "east": {"uv": [11, 2, 11.5, 3], "texture": "#0"}, + "south": {"uv": [11, 3, 11.5, 4], "texture": "#0"}, + "west": {"uv": [11, 4, 11.5, 5], "texture": "#0"}, + "up": {"uv": [0.5, 13.5, 0, 13], "texture": "#0"}, + "down": {"uv": [1, 13, 0.5, 13.5], "texture": "#0"} + } + }, + { + "from": [7.25, 10.9375, 8], + "to": [7.375, 12.0625, 8.125], + "rotation": {"angle": 45, "axis": "z", "origin": [7.3125, 11, 8.0625]}, + "faces": { + "north": {"uv": [11, 5, 11.5, 6], "texture": "#0"}, + "east": {"uv": [11, 6, 11.5, 7], "texture": "#0"}, + "south": {"uv": [11, 7, 11.5, 8], "texture": "#0"}, + "west": {"uv": [11, 8, 11.5, 9], "texture": "#0"}, + "up": {"uv": [1.5, 13.5, 1, 13], "texture": "#0"}, + "down": {"uv": [2, 13, 1.5, 13.5], "texture": "#0"} + } + }, + { + "from": [7.125, 10.8125, 8.25], + "to": [7.25, 11.9375, 8.375], + "rotation": {"angle": -22.5, "axis": "y", "origin": [7.1875, 10.875, 8.3125]}, + "faces": { + "north": {"uv": [11, 9, 11.5, 10], "texture": "#0"}, + "east": {"uv": [0, 11.5, 0.5, 12.5], "texture": "#0"}, + "south": {"uv": [0.5, 11.5, 1, 12.5], "texture": "#0"}, + "west": {"uv": [1, 11.5, 1.5, 12.5], "texture": "#0"}, + "up": {"uv": [2.5, 13.5, 2, 13], "texture": "#0"}, + "down": {"uv": [3, 13, 2.5, 13.5], "texture": "#0"} + } + }, + { + "from": [7.25, 10.8125, 8.0625], + "to": [7.375, 11.9375, 8.1875], + "rotation": {"angle": 22.5, "axis": "x", "origin": [7.3125, 10.875, 8.125]}, + "faces": { + "north": {"uv": [1.5, 11.5, 2, 12.5], "texture": "#0"}, + "east": {"uv": [2, 11.5, 2.5, 12.5], "texture": "#0"}, + "south": {"uv": [2.5, 11.5, 3, 12.5], "texture": "#0"}, + "west": {"uv": [3, 11.5, 3.5, 12.5], "texture": "#0"}, + "up": {"uv": [3.5, 13.5, 3, 13], "texture": "#0"}, + "down": {"uv": [4, 13, 3.5, 13.5], "texture": "#0"} + } + }, + { + "from": [7.125, 10.75, 8], + "to": [7.25, 11.875, 8.125], + "rotation": {"angle": -22.5, "axis": "z", "origin": [7.1875, 10.8125, 8.0625]}, + "faces": { + "north": {"uv": [3.5, 11.5, 4, 12.5], "texture": "#0"}, + "east": {"uv": [4, 11.5, 4.5, 12.5], "texture": "#0"}, + "south": {"uv": [4.5, 11.5, 5, 12.5], "texture": "#0"}, + "west": {"uv": [5.5, 11.5, 6, 12.5], "texture": "#0"}, + "up": {"uv": [4.5, 13.5, 4, 13], "texture": "#0"}, + "down": {"uv": [5, 13, 4.5, 13.5], "texture": "#0"} + } + }, + { + "from": [5.75, 7.6875, 9.25], + "to": [6.75, 8.6875, 10.25], + "rotation": {"angle": 45, "axis": "x", "origin": [6.25, 8.1875, 9.75]}, + "faces": { + "north": {"uv": [5, 13, 5.5, 13.5], "texture": "#0"}, + "east": {"uv": [5.5, 13, 6, 13.5], "texture": "#0"}, + "south": {"uv": [6, 13, 6.5, 13.5], "texture": "#0"}, + "west": {"uv": [6.5, 13, 7, 13.5], "texture": "#0"}, + "up": {"uv": [7.5, 13.5, 7, 13], "texture": "#0"}, + "down": {"uv": [8, 13, 7.5, 13.5], "texture": "#0"} + } + }, + { + "from": [6.0625, 7.875, 9.6875], + "to": [6.8125, 8.625, 12.4375], + "rotation": {"angle": 45, "axis": "y", "origin": [6.4375, 8.25, 10.0625]}, + "faces": { + "north": {"uv": [8, 13, 8.5, 13.5], "texture": "#0"}, + "east": {"uv": [7, 0, 8.5, 0.5], "texture": "#0"}, + "south": {"uv": [8.5, 13, 9, 13.5], "texture": "#0"}, + "west": {"uv": [7, 0.5, 8.5, 1], "texture": "#0"}, + "up": {"uv": [7.5, 5.5, 7, 4], "texture": "#0"}, + "down": {"uv": [7.5, 5.5, 7, 7], "texture": "#0"} + } + }, + { + "from": [7.625, 8.125, 11.0625], + "to": [10.25, 8.75, 11.6875], + "rotation": {"angle": 45, "axis": "z", "origin": [7.9375, 8.4375, 11.375]}, + "faces": { + "north": {"uv": [0, 7.5, 1.5, 8], "texture": "#0"}, + "east": {"uv": [9, 13, 9.5, 13.5], "texture": "#0"}, + "south": {"uv": [1.5, 7.5, 3, 8], "texture": "#0"}, + "west": {"uv": [9.5, 13, 10, 13.5], "texture": "#0"}, + "up": {"uv": [5.5, 8, 4, 7.5], "texture": "#0"}, + "down": {"uv": [9, 7.5, 7.5, 8], "texture": "#0"} + } + }, + { + "from": [9.125, 9.8125, 11.0625], + "to": [9.625, 12.3125, 11.5625], + "rotation": {"angle": -22.5, "axis": "x", "origin": [9.375, 10.0625, 11.3125]}, + "faces": { + "north": {"uv": [7.5, 4, 8, 5.5], "texture": "#0"}, + "east": {"uv": [7.5, 5.5, 8, 7], "texture": "#0"}, + "south": {"uv": [0, 8, 0.5, 9.5], "texture": "#0"}, + "west": {"uv": [0.5, 8, 1, 9.5], "texture": "#0"}, + "up": {"uv": [10.5, 13.5, 10, 13], "texture": "#0"}, + "down": {"uv": [11, 13, 10.5, 13.5], "texture": "#0"} + } + }, + { + "from": [9.3125, 11.5625, 10.5625], + "to": [9.4375, 12.6875, 10.6875], + "rotation": {"angle": 22.5, "axis": "z", "origin": [9.375, 11.625, 10.625]}, + "faces": { + "north": {"uv": [6, 11.5, 6.5, 12.5], "texture": "#0"}, + "east": {"uv": [6.5, 11.5, 7, 12.5], "texture": "#0"}, + "south": {"uv": [7, 11.5, 7.5, 12.5], "texture": "#0"}, + "west": {"uv": [7.5, 11.5, 8, 12.5], "texture": "#0"}, + "up": {"uv": [11.5, 13.5, 11, 13], "texture": "#0"}, + "down": {"uv": [12, 13, 11.5, 13.5], "texture": "#0"} + } + }, + { + "from": [9.1875, 11.6875, 10.6875], + "to": [9.3125, 12.8125, 10.8125], + "rotation": {"angle": -45, "axis": "x", "origin": [9.25, 11.75, 10.75]}, + "faces": { + "north": {"uv": [8, 11.5, 8.5, 12.5], "texture": "#0"}, + "east": {"uv": [8.5, 11.5, 9, 12.5], "texture": "#0"}, + "south": {"uv": [9.5, 11.5, 10, 12.5], "texture": "#0"}, + "west": {"uv": [10.5, 11.5, 11, 12.5], "texture": "#0"}, + "up": {"uv": [12.5, 13.5, 12, 13], "texture": "#0"}, + "down": {"uv": [13, 13, 12.5, 13.5], "texture": "#0"} + } + }, + { + "from": [9.4375, 11.4375, 10.5], + "to": [9.5625, 12.5625, 10.625], + "rotation": {"angle": 22.5, "axis": "y", "origin": [9.5, 11.5, 10.5625]}, + "faces": { + "north": {"uv": [11, 11.5, 11.5, 12.5], "texture": "#0"}, + "east": {"uv": [11.5, 11.5, 12, 12.5], "texture": "#0"}, + "south": {"uv": [11.5, 0, 12, 1], "texture": "#0"}, + "west": {"uv": [11.5, 1, 12, 2], "texture": "#0"}, + "up": {"uv": [13.5, 13.5, 13, 13], "texture": "#0"}, + "down": {"uv": [13.5, 0, 13, 0.5], "texture": "#0"} + } + }, + { + "from": [9.3125, 11.5625, 10.625], + "to": [9.4375, 12.6875, 10.75], + "rotation": {"angle": -22.5, "axis": "z", "origin": [9.375, 11.625, 10.6875]}, + "faces": { + "north": {"uv": [11.5, 2, 12, 3], "texture": "#0"}, + "east": {"uv": [11.5, 3, 12, 4], "texture": "#0"}, + "south": {"uv": [11.5, 4, 12, 5], "texture": "#0"}, + "west": {"uv": [11.5, 5, 12, 6], "texture": "#0"}, + "up": {"uv": [13.5, 1, 13, 0.5], "texture": "#0"}, + "down": {"uv": [13.5, 1, 13, 1.5], "texture": "#0"} + } + }, + { + "from": [9.1875, 11.5, 10.4375], + "to": [9.3125, 12.625, 10.5625], + "rotation": {"angle": 22.5, "axis": "x", "origin": [9.25, 11.5625, 10.5]}, + "faces": { + "north": {"uv": [11.5, 6, 12, 7], "texture": "#0"}, + "east": {"uv": [11.5, 7, 12, 8], "texture": "#0"}, + "south": {"uv": [11.5, 8, 12, 9], "texture": "#0"}, + "west": {"uv": [11.5, 9, 12, 10], "texture": "#0"}, + "up": {"uv": [13.5, 2, 13, 1.5], "texture": "#0"}, + "down": {"uv": [13.5, 2, 13, 2.5], "texture": "#0"} + } + } + ], + "groups": [ + { + "name": "group", + "origin": [8, 8, 8], + "children": [ + { + "name": "stalk", + "origin": [8, 8, 8], + "children": [0, 1, 2, 3, 4, 5] + }, + { + "name": "arm 1", + "origin": [6, 9.46196, 8.07818], + "children": [6, + { + "name": "group", + "origin": [5.5, 3.375, 8], + "children": [7, + { + "name": "group", + "origin": [5.375, 3.5625, 7.875], + "children": [8, + { + "name": "group", + "origin": [5.375, 3.5625, 7.875], + "children": [9, + { + "name": "group", + "origin": [5.375, 3.5625, 7.875], + "children": [10, + { + "name": "group", + "origin": [5.375, 3.5625, 7.875], + "children": [11, + { + "name": "group", + "origin": [5.375, 3.5625, 7.875], + "children": [12, + { + "name": "group", + "origin": [4.4375, 5.8125, 7.375], + "children": [13, + { + "name": "group", + "origin": [4.4375, 5.8125, 7.375], + "children": [14] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "name": "arm 2", + "origin": [6, 9.46196, 8.07818], + "children": [15, + { + "name": "group", + "origin": [5.5, 3.375, 8], + "children": [16, + { + "name": "group", + "origin": [5.375, 3.5625, 7.875], + "children": [17, + { + "name": "group", + "origin": [5.375, 3.5625, 7.875], + "children": [18, + { + "name": "group", + "origin": [5.375, 3.5625, 7.875], + "children": [19, + { + "name": "group", + "origin": [5.375, 3.5625, 7.875], + "children": [20, + { + "name": "group", + "origin": [5.375, 3.5625, 7.875], + "children": [21, + { + "name": "group", + "origin": [4.4375, 5.8125, 7.375], + "children": [22, + { + "name": "group", + "origin": [4.4375, 5.8125, 7.375], + "children": [23] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "name": "arm 3", + "origin": [6, 9.46196, 8.07818], + "children": [24, + { + "name": "group", + "origin": [5.5, 3.375, 8], + "children": [25, + { + "name": "group", + "origin": [5.375, 3.5625, 7.875], + "children": [26, + { + "name": "group", + "origin": [5.375, 3.5625, 7.875], + "children": [27, + { + "name": "group", + "origin": [5.375, 3.5625, 7.875], + "children": [28, + { + "name": "group", + "origin": [5.375, 3.5625, 7.875], + "children": [29, + { + "name": "group", + "origin": [5.375, 3.5625, 7.875], + "children": [30, + { + "name": "group", + "origin": [4.4375, 5.8125, 7.375], + "children": [31, + { + "name": "group", + "origin": [4.4375, 5.8125, 7.375], + "children": [32] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "name": "arm 4", + "origin": [6, 9.46196, 8.07818], + "children": [ + { + "name": "group", + "origin": [5.5, 3.375, 8], + "children": [33, + { + "name": "group", + "origin": [5.375, 3.5625, 7.875], + "children": [34, + { + "name": "group", + "origin": [5.375, 3.5625, 7.875], + "children": [35, + { + "name": "group", + "origin": [5.375, 3.5625, 7.875], + "children": [36, + { + "name": "group", + "origin": [5.375, 3.5625, 7.875], + "children": [37, + { + "name": "group", + "origin": [5.375, 3.5625, 7.875], + "children": [38, + { + "name": "group", + "origin": [4.4375, 5.8125, 7.375], + "children": [39, + { + "name": "group", + "origin": [4.4375, 5.8125, 7.375], + "children": [40] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "name": "arm 5", + "origin": [6, 9.46196, 8.07818], + "children": [ + { + "name": "group", + "origin": [5.5, 3.375, 8], + "children": [ + { + "name": "group", + "origin": [5.375, 3.5625, 7.875], + "children": [41, + { + "name": "group", + "origin": [5.375, 3.5625, 7.875], + "children": [42, + { + "name": "group", + "origin": [5.375, 3.5625, 7.875], + "children": [43, + { + "name": "group", + "origin": [5.375, 3.5625, 7.875], + "children": [44, + { + "name": "group", + "origin": [5.375, 3.5625, 7.875], + "children": [45, + { + "name": "group", + "origin": [4.4375, 5.8125, 7.375], + "children": [46, + { + "name": "group", + "origin": [4.4375, 5.8125, 7.375], + "children": [47] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "name": "arm 6", + "origin": [6, 9.46196, 8.07818], + "children": [48, + { + "name": "group", + "origin": [5.5, 3.375, 8], + "children": [49, + { + "name": "group", + "origin": [5.375, 3.5625, 7.875], + "children": [50, + { + "name": "group", + "origin": [5.375, 3.5625, 7.875], + "children": [51, + { + "name": "group", + "origin": [5.375, 3.5625, 7.875], + "children": [52, + { + "name": "group", + "origin": [5.375, 3.5625, 7.875], + "children": [53, + { + "name": "group", + "origin": [5.375, 3.5625, 7.875], + "children": [54, + { + "name": "group", + "origin": [4.4375, 5.8125, 7.375], + "children": [55, + { + "name": "group", + "origin": [4.4375, 5.8125, 7.375], + "children": [56] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/surgebinding/resources/assets/surgebinding/models/block/prickletac3.json b/src/surgebinding/resources/assets/surgebinding/models/block/prickletac3.json new file mode 100644 index 000000000..0a980f0b2 --- /dev/null +++ b/src/surgebinding/resources/assets/surgebinding/models/block/prickletac3.json @@ -0,0 +1,692 @@ +{ + "credit": "Made with Blockbench", + "texture_size": [32, 32], + "textures": { + "0": "surgebinding:block/prickletac", + "particle": "surgebinding:block/prickletac" + }, + "elements": [ + { + "from": [5.3125, 0.9375, 7.8125], + "to": [7.1875, 3.8125, 9.6875], + "rotation": {"angle": 0, "axis": "y", "origin": [13.25, 7.875, 16.75]}, + "faces": { + "north": {"uv": [1.5, 1.5, 2.5, 3], "texture": "#0"}, + "east": {"uv": [1.5, 0, 2.5, 1.5], "texture": "#0"}, + "south": {"uv": [2.5, 2.5, 3.5, 4], "texture": "#0"}, + "west": {"uv": [2.5, 0, 3.5, 1.5], "texture": "#0"}, + "up": {"uv": [3.5, 2.5, 2.5, 1.5], "texture": "#0"}, + "down": {"uv": [6.5, 1, 5.5, 2], "texture": "#0"} + } + }, + { + "from": [5.5625, 5.55847, 8.91917], + "to": [6.9375, 7.93347, 10.29417], + "rotation": {"angle": 0, "axis": "y", "origin": [13.25, 12.24597, 17.60667]}, + "faces": { + "north": {"uv": [0, 3, 1, 4.5], "texture": "#0"}, + "east": {"uv": [1, 3, 2, 4.5], "texture": "#0"}, + "south": {"uv": [3.5, 3.5, 4.5, 5], "texture": "#0"}, + "west": {"uv": [3.5, 0, 4.5, 1.5], "texture": "#0"}, + "up": {"uv": [6.5, 3, 5.5, 2], "texture": "#0"}, + "down": {"uv": [6.5, 3, 5.5, 4], "texture": "#0"} + } + }, + { + "from": [5.6875, 7.22453, 8.55673], + "to": [6.8125, 9.34953, 9.68173], + "rotation": {"angle": -45, "axis": "x", "origin": [6.25, 8.28703, 9.11923]}, + "faces": { + "north": {"uv": [3.5, 1.5, 4.5, 3], "texture": "#0"}, + "east": {"uv": [2, 4, 3, 5.5], "texture": "#0"}, + "south": {"uv": [0, 4.5, 1, 6], "texture": "#0"}, + "west": {"uv": [1, 4.5, 2, 6], "texture": "#0"}, + "up": {"uv": [1, 7, 0, 6], "texture": "#0"}, + "down": {"uv": [2, 6, 1, 7], "texture": "#0"} + } + }, + { + "from": [5.8125, 8.58696, 6.89068], + "to": [6.6875, 9.46196, 8.76568], + "rotation": {"angle": 0, "axis": "y", "origin": [6.25, 9.02446, 7.82818]}, + "faces": { + "north": {"uv": [6, 6, 7, 7], "texture": "#0"}, + "east": {"uv": [4.5, 4.5, 6, 5.5], "texture": "#0"}, + "south": {"uv": [6, 0, 7, 1], "texture": "#0"}, + "west": {"uv": [4.5, 0, 6, 1], "texture": "#0"}, + "up": {"uv": [5.5, 2.5, 4.5, 1], "texture": "#0"}, + "down": {"uv": [5.5, 2.5, 4.5, 4], "texture": "#0"} + } + }, + { + "from": [5.4375, 3.37299, 8.27208], + "to": [7.0625, 5.99799, 9.89708], + "rotation": {"angle": 22.5, "axis": "x", "origin": [6.25, 4.68549, 9.08458]}, + "faces": { + "north": {"uv": [3, 5, 4, 6.5], "texture": "#0"}, + "east": {"uv": [2, 5.5, 3, 7], "texture": "#0"}, + "south": {"uv": [4, 5.5, 5, 7], "texture": "#0"}, + "west": {"uv": [5, 5.5, 6, 7], "texture": "#0"}, + "up": {"uv": [7, 5, 6, 4], "texture": "#0"}, + "down": {"uv": [7, 5, 6, 6], "texture": "#0"} + } + }, + { + "from": [5, 0, 7], + "to": [8, 1, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [13, 8, 17]}, + "faces": { + "north": {"uv": [4.5, 4, 6, 4.5], "texture": "#0"}, + "east": {"uv": [6.5, 1, 8, 1.5], "texture": "#0"}, + "south": {"uv": [6.5, 1.5, 8, 2], "texture": "#0"}, + "west": {"uv": [6.5, 2, 8, 2.5], "texture": "#0"}, + "up": {"uv": [1.5, 1.5, 0, 0], "texture": "#0"}, + "down": {"uv": [1.5, 1.5, 0, 3], "texture": "#0"} + } + }, + { + "from": [5.4375, 8.0625, 9.25], + "to": [6.4375, 9.0625, 10.25], + "rotation": {"angle": -45, "axis": "x", "origin": [5.9375, 8.5625, 9.75]}, + "faces": { + "north": {"uv": [4, 5, 4.5, 5.5], "texture": "#0"}, + "east": {"uv": [9, 7.5, 9.5, 8], "texture": "#0"}, + "south": {"uv": [9, 8.5, 9.5, 9], "texture": "#0"}, + "west": {"uv": [10, 8.5, 10.5, 9], "texture": "#0"}, + "up": {"uv": [11.5, 11, 11, 10.5], "texture": "#0"}, + "down": {"uv": [12, 10, 11.5, 10.5], "texture": "#0"} + } + }, + { + "from": [5.5, 8.3125, 9.4375], + "to": [6.25, 10.0625, 10.1875], + "rotation": {"angle": 45, "axis": "z", "origin": [5.875, 8.6875, 9.8125]}, + "faces": { + "north": {"uv": [2, 3, 2.5, 4], "texture": "#0"}, + "east": {"uv": [3, 4, 3.5, 5], "texture": "#0"}, + "south": {"uv": [1, 8, 1.5, 9], "texture": "#0"}, + "west": {"uv": [1.5, 8, 2, 9], "texture": "#0"}, + "up": {"uv": [12, 11, 11.5, 10.5], "texture": "#0"}, + "down": {"uv": [5.5, 12, 5, 12.5], "texture": "#0"} + } + }, + { + "from": [3.625, 9.0625, 9.6875], + "to": [5.25, 9.6875, 10.3125], + "rotation": {"angle": 45, "axis": "y", "origin": [4.9375, 9.375, 10]}, + "faces": { + "north": {"uv": [3.5, 3, 4.5, 3.5], "texture": "#0"}, + "east": {"uv": [9, 12, 9.5, 12.5], "texture": "#0"}, + "south": {"uv": [7.5, 7, 8.5, 7.5], "texture": "#0"}, + "west": {"uv": [10, 12, 10.5, 12.5], "texture": "#0"}, + "up": {"uv": [3, 8.5, 2, 8], "texture": "#0"}, + "down": {"uv": [4, 8, 3, 8.5], "texture": "#0"} + } + }, + { + "from": [3.875, 9.125, 10.5], + "to": [4.375, 10.625, 11], + "rotation": {"angle": -22.5, "axis": "z", "origin": [4.125, 9.375, 10.75]}, + "faces": { + "north": {"uv": [4, 8, 4.5, 9], "texture": "#0"}, + "east": {"uv": [4.5, 8, 5, 9], "texture": "#0"}, + "south": {"uv": [5, 8, 5.5, 9], "texture": "#0"}, + "west": {"uv": [7.5, 8, 8, 9], "texture": "#0"}, + "up": {"uv": [12.5, 12.5, 12, 12], "texture": "#0"}, + "down": {"uv": [12.5, 0, 12, 0.5], "texture": "#0"} + } + }, + { + "from": [5.0625, 4.875, 8.625], + "to": [6.0625, 5.875, 9.625], + "rotation": {"angle": -45, "axis": "x", "origin": [5.5625, 5.375, 9.125]}, + "faces": { + "north": {"uv": [12, 5.5, 12.5, 6], "texture": "#0"}, + "east": {"uv": [12, 6, 12.5, 6.5], "texture": "#0"}, + "south": {"uv": [12, 6.5, 12.5, 7], "texture": "#0"}, + "west": {"uv": [12, 7, 12.5, 7.5], "texture": "#0"}, + "up": {"uv": [12.5, 8, 12, 7.5], "texture": "#0"}, + "down": {"uv": [12.5, 8, 12, 8.5], "texture": "#0"} + } + }, + { + "from": [5.125, 5.125, 8.8125], + "to": [5.875, 6.875, 9.5625], + "rotation": {"angle": 45, "axis": "z", "origin": [5.5, 5.5, 9.1875]}, + "faces": { + "north": {"uv": [8.5, 4, 9, 5], "texture": "#0"}, + "east": {"uv": [8.5, 5, 9, 6], "texture": "#0"}, + "south": {"uv": [8.5, 6, 9, 7], "texture": "#0"}, + "west": {"uv": [1, 9, 1.5, 10], "texture": "#0"}, + "up": {"uv": [12.5, 9, 12, 8.5], "texture": "#0"}, + "down": {"uv": [12.5, 9, 12, 9.5], "texture": "#0"} + } + }, + { + "from": [3.25, 5.875, 9.0625], + "to": [4.875, 6.5, 9.6875], + "rotation": {"angle": 45, "axis": "y", "origin": [4.5625, 6.1875, 9.375]}, + "faces": { + "north": {"uv": [8.5, 7, 9.5, 7.5], "texture": "#0"}, + "east": {"uv": [12, 9.5, 12.5, 10], "texture": "#0"}, + "south": {"uv": [8.5, 8, 9.5, 8.5], "texture": "#0"}, + "west": {"uv": [12, 10, 12.5, 10.5], "texture": "#0"}, + "up": {"uv": [5, 9.5, 4, 9], "texture": "#0"}, + "down": {"uv": [8.5, 9, 7.5, 9.5], "texture": "#0"} + } + }, + { + "from": [3.5625, 6, 9.875], + "to": [4.0625, 7.5, 10.375], + "rotation": {"angle": -22.5, "axis": "z", "origin": [3.8125, 6.25, 10.125]}, + "faces": { + "north": {"uv": [1.5, 9, 2, 10], "texture": "#0"}, + "east": {"uv": [5, 9, 5.5, 10], "texture": "#0"}, + "south": {"uv": [9, 9, 9.5, 10], "texture": "#0"}, + "west": {"uv": [9, 0, 9.5, 1], "texture": "#0"}, + "up": {"uv": [12.5, 11, 12, 10.5], "texture": "#0"}, + "down": {"uv": [12.5, 11, 12, 11.5], "texture": "#0"} + } + }, + { + "from": [6.0625, 6.5, 8.4375], + "to": [7.0625, 7.5, 9.4375], + "rotation": {"angle": -45, "axis": "x", "origin": [6.5625, 7, 8.9375]}, + "faces": { + "north": {"uv": [4.5, 12.5, 5, 13], "texture": "#0"}, + "east": {"uv": [5, 12.5, 5.5, 13], "texture": "#0"}, + "south": {"uv": [5.5, 12.5, 6, 13], "texture": "#0"}, + "west": {"uv": [6, 12.5, 6.5, 13], "texture": "#0"}, + "up": {"uv": [7, 13, 6.5, 12.5], "texture": "#0"}, + "down": {"uv": [7.5, 12.5, 7, 13], "texture": "#0"} + } + }, + { + "from": [6.375, 6.6875, 6.25], + "to": [7.125, 7.4375, 9], + "rotation": {"angle": -45, "axis": "y", "origin": [6.75, 7.0625, 8.625]}, + "faces": { + "north": {"uv": [7.5, 12.5, 8, 13], "texture": "#0"}, + "east": {"uv": [6.5, 2.5, 8, 3], "texture": "#0"}, + "south": {"uv": [8, 12.5, 8.5, 13], "texture": "#0"}, + "west": {"uv": [6.5, 3, 8, 3.5], "texture": "#0"}, + "up": {"uv": [3.5, 8, 3, 6.5], "texture": "#0"}, + "down": {"uv": [4, 6.5, 3.5, 8], "texture": "#0"} + } + }, + { + "from": [8, 6.9375, 7], + "to": [10.625, 7.5625, 7.625], + "rotation": {"angle": 45, "axis": "z", "origin": [8.3125, 7.25, 7.3125]}, + "faces": { + "north": {"uv": [6.5, 3.5, 8, 4], "texture": "#0"}, + "east": {"uv": [8.5, 12.5, 9, 13], "texture": "#0"}, + "south": {"uv": [0, 7, 1.5, 7.5], "texture": "#0"}, + "west": {"uv": [9, 12.5, 9.5, 13], "texture": "#0"}, + "up": {"uv": [3, 7.5, 1.5, 7], "texture": "#0"}, + "down": {"uv": [5.5, 7, 4, 7.5], "texture": "#0"} + } + }, + { + "from": [9.375, 8.75, 7.0625], + "to": [9.875, 11.25, 7.5625], + "rotation": {"angle": 22.5, "axis": "z", "origin": [9.625, 9, 7.3125]}, + "faces": { + "north": {"uv": [5.5, 7, 6, 8.5], "texture": "#0"}, + "east": {"uv": [6, 7, 6.5, 8.5], "texture": "#0"}, + "south": {"uv": [6.5, 7, 7, 8.5], "texture": "#0"}, + "west": {"uv": [7, 7, 7.5, 8.5], "texture": "#0"}, + "up": {"uv": [10, 13, 9.5, 12.5], "texture": "#0"}, + "down": {"uv": [10.5, 12.5, 10, 13], "texture": "#0"} + } + }, + { + "from": [5.75, 8.625, 5.625], + "to": [6.5, 9.375, 7.375], + "rotation": {"angle": 45, "axis": "y", "origin": [6.125, 9, 7]}, + "faces": { + "north": {"uv": [12.5, 2.5, 13, 3], "texture": "#0"}, + "east": {"uv": [9.5, 9, 10.5, 9.5], "texture": "#0"}, + "south": {"uv": [12.5, 3, 13, 3.5], "texture": "#0"}, + "west": {"uv": [10, 4, 11, 4.5], "texture": "#0"}, + "up": {"uv": [10.5, 5.5, 10, 4.5], "texture": "#0"}, + "down": {"uv": [10.5, 5.5, 10, 6.5], "texture": "#0"} + } + }, + { + "from": [3.875, 8.875, 6], + "to": [5.5, 9.5, 6.625], + "rotation": {"angle": -45, "axis": "z", "origin": [5.1875, 9.1875, 6.3125]}, + "faces": { + "north": {"uv": [10, 6.5, 11, 7], "texture": "#0"}, + "east": {"uv": [12.5, 3.5, 13, 4], "texture": "#0"}, + "south": {"uv": [10, 7, 11, 7.5], "texture": "#0"}, + "west": {"uv": [12.5, 4, 13, 4.5], "texture": "#0"}, + "up": {"uv": [11, 8, 10, 7.5], "texture": "#0"}, + "down": {"uv": [11, 8, 10, 8.5], "texture": "#0"} + } + }, + { + "from": [4, 9.8125, 6.0625], + "to": [4.5, 11.3125, 6.5625], + "rotation": {"angle": -22.5, "axis": "z", "origin": [4.25, 10.0625, 6.3125]}, + "faces": { + "north": {"uv": [0, 10.5, 0.5, 11.5], "texture": "#0"}, + "east": {"uv": [0.5, 10.5, 1, 11.5], "texture": "#0"}, + "south": {"uv": [2, 10.5, 2.5, 11.5], "texture": "#0"}, + "west": {"uv": [2.5, 10.5, 3, 11.5], "texture": "#0"}, + "up": {"uv": [13, 5, 12.5, 4.5], "texture": "#0"}, + "down": {"uv": [13, 5, 12.5, 5.5], "texture": "#0"} + } + }, + { + "from": [6.3125, 9.0625, 7.875], + "to": [7.9375, 9.6875, 8.5], + "rotation": {"angle": 45, "axis": "z", "origin": [6.625, 9.375, 8.1875]}, + "faces": { + "north": {"uv": [10, 9.5, 11, 10], "texture": "#0"}, + "east": {"uv": [12.5, 10.5, 13, 11], "texture": "#0"}, + "south": {"uv": [10.5, 10, 11.5, 10.5], "texture": "#0"}, + "west": {"uv": [12.5, 11, 13, 11.5], "texture": "#0"}, + "up": {"uv": [2, 11.5, 1, 11], "texture": "#0"}, + "down": {"uv": [12, 11, 11, 11.5], "texture": "#0"} + } + }, + { + "from": [7.3125, 10, 7.9375], + "to": [7.8125, 11.5, 8.4375], + "rotation": {"angle": 22.5, "axis": "z", "origin": [7.5625, 10.25, 8.1875]}, + "faces": { + "north": {"uv": [5, 11, 5.5, 12], "texture": "#0"}, + "east": {"uv": [9, 11, 9.5, 12], "texture": "#0"}, + "south": {"uv": [10, 11, 10.5, 12], "texture": "#0"}, + "west": {"uv": [11, 0, 11.5, 1], "texture": "#0"}, + "up": {"uv": [13, 12, 12.5, 11.5], "texture": "#0"}, + "down": {"uv": [13, 12, 12.5, 12.5], "texture": "#0"} + } + }, + { + "from": [5.75, 7.6875, 9.25], + "to": [6.75, 8.6875, 10.25], + "rotation": {"angle": 45, "axis": "x", "origin": [6.25, 8.1875, 9.75]}, + "faces": { + "north": {"uv": [5, 13, 5.5, 13.5], "texture": "#0"}, + "east": {"uv": [5.5, 13, 6, 13.5], "texture": "#0"}, + "south": {"uv": [6, 13, 6.5, 13.5], "texture": "#0"}, + "west": {"uv": [6.5, 13, 7, 13.5], "texture": "#0"}, + "up": {"uv": [7.5, 13.5, 7, 13], "texture": "#0"}, + "down": {"uv": [8, 13, 7.5, 13.5], "texture": "#0"} + } + }, + { + "from": [6.0625, 7.875, 9.6875], + "to": [6.8125, 8.625, 12.4375], + "rotation": {"angle": 45, "axis": "y", "origin": [6.4375, 8.25, 10.0625]}, + "faces": { + "north": {"uv": [8, 13, 8.5, 13.5], "texture": "#0"}, + "east": {"uv": [7, 0, 8.5, 0.5], "texture": "#0"}, + "south": {"uv": [8.5, 13, 9, 13.5], "texture": "#0"}, + "west": {"uv": [7, 0.5, 8.5, 1], "texture": "#0"}, + "up": {"uv": [7.5, 5.5, 7, 4], "texture": "#0"}, + "down": {"uv": [7.5, 5.5, 7, 7], "texture": "#0"} + } + }, + { + "from": [7.625, 8.125, 11.0625], + "to": [10.25, 8.75, 11.6875], + "rotation": {"angle": 45, "axis": "z", "origin": [7.9375, 8.4375, 11.375]}, + "faces": { + "north": {"uv": [0, 7.5, 1.5, 8], "texture": "#0"}, + "east": {"uv": [9, 13, 9.5, 13.5], "texture": "#0"}, + "south": {"uv": [1.5, 7.5, 3, 8], "texture": "#0"}, + "west": {"uv": [9.5, 13, 10, 13.5], "texture": "#0"}, + "up": {"uv": [5.5, 8, 4, 7.5], "texture": "#0"}, + "down": {"uv": [9, 7.5, 7.5, 8], "texture": "#0"} + } + }, + { + "from": [9.125, 9.8125, 11.0625], + "to": [9.625, 12.3125, 11.5625], + "rotation": {"angle": -22.5, "axis": "x", "origin": [9.375, 10.0625, 11.3125]}, + "faces": { + "north": {"uv": [7.5, 4, 8, 5.5], "texture": "#0"}, + "east": {"uv": [7.5, 5.5, 8, 7], "texture": "#0"}, + "south": {"uv": [0, 8, 0.5, 9.5], "texture": "#0"}, + "west": {"uv": [0.5, 8, 1, 9.5], "texture": "#0"}, + "up": {"uv": [10.5, 13.5, 10, 13], "texture": "#0"}, + "down": {"uv": [11, 13, 10.5, 13.5], "texture": "#0"} + } + } + ], + "groups": [ + { + "name": "group", + "origin": [8, 8, 8], + "children": [ + { + "name": "stalk", + "origin": [8, 8, 8], + "children": [0, 1, 2, 3, 4, 5] + }, + { + "name": "arm 1", + "origin": [6, 9.46196, 8.07818], + "children": [6, + { + "name": "group", + "origin": [5.5, 3.375, 8], + "children": [7, + { + "name": "group", + "origin": [5.375, 3.5625, 7.875], + "children": [8, + { + "name": "group", + "origin": [5.375, 3.5625, 7.875], + "children": [9, + { + "name": "group", + "origin": [5.375, 3.5625, 7.875], + "children": [ + { + "name": "group", + "origin": [5.375, 3.5625, 7.875], + "children": [ + { + "name": "group", + "origin": [5.375, 3.5625, 7.875], + "children": [ + { + "name": "group", + "origin": [4.4375, 5.8125, 7.375], + "children": [ + { + "name": "group", + "origin": [4.4375, 5.8125, 7.375], + "children": [] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "name": "arm 2", + "origin": [6, 9.46196, 8.07818], + "children": [10, + { + "name": "group", + "origin": [5.5, 3.375, 8], + "children": [11, + { + "name": "group", + "origin": [5.375, 3.5625, 7.875], + "children": [12, + { + "name": "group", + "origin": [5.375, 3.5625, 7.875], + "children": [13, + { + "name": "group", + "origin": [5.375, 3.5625, 7.875], + "children": [ + { + "name": "group", + "origin": [5.375, 3.5625, 7.875], + "children": [ + { + "name": "group", + "origin": [5.375, 3.5625, 7.875], + "children": [ + { + "name": "group", + "origin": [4.4375, 5.8125, 7.375], + "children": [ + { + "name": "group", + "origin": [4.4375, 5.8125, 7.375], + "children": [] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "name": "arm 3", + "origin": [6, 9.46196, 8.07818], + "children": [14, + { + "name": "group", + "origin": [5.5, 3.375, 8], + "children": [15, + { + "name": "group", + "origin": [5.375, 3.5625, 7.875], + "children": [16, + { + "name": "group", + "origin": [5.375, 3.5625, 7.875], + "children": [17, + { + "name": "group", + "origin": [5.375, 3.5625, 7.875], + "children": [ + { + "name": "group", + "origin": [5.375, 3.5625, 7.875], + "children": [ + { + "name": "group", + "origin": [5.375, 3.5625, 7.875], + "children": [ + { + "name": "group", + "origin": [4.4375, 5.8125, 7.375], + "children": [ + { + "name": "group", + "origin": [4.4375, 5.8125, 7.375], + "children": [] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "name": "arm 4", + "origin": [6, 9.46196, 8.07818], + "children": [ + { + "name": "group", + "origin": [5.5, 3.375, 8], + "children": [18, + { + "name": "group", + "origin": [5.375, 3.5625, 7.875], + "children": [19, + { + "name": "group", + "origin": [5.375, 3.5625, 7.875], + "children": [20, + { + "name": "group", + "origin": [5.375, 3.5625, 7.875], + "children": [ + { + "name": "group", + "origin": [5.375, 3.5625, 7.875], + "children": [ + { + "name": "group", + "origin": [5.375, 3.5625, 7.875], + "children": [ + { + "name": "group", + "origin": [4.4375, 5.8125, 7.375], + "children": [ + { + "name": "group", + "origin": [4.4375, 5.8125, 7.375], + "children": [] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "name": "arm 5", + "origin": [6, 9.46196, 8.07818], + "children": [ + { + "name": "group", + "origin": [5.5, 3.375, 8], + "children": [ + { + "name": "group", + "origin": [5.375, 3.5625, 7.875], + "children": [21, + { + "name": "group", + "origin": [5.375, 3.5625, 7.875], + "children": [22, + { + "name": "group", + "origin": [5.375, 3.5625, 7.875], + "children": [ + { + "name": "group", + "origin": [5.375, 3.5625, 7.875], + "children": [ + { + "name": "group", + "origin": [5.375, 3.5625, 7.875], + "children": [ + { + "name": "group", + "origin": [4.4375, 5.8125, 7.375], + "children": [ + { + "name": "group", + "origin": [4.4375, 5.8125, 7.375], + "children": [] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "name": "arm 6", + "origin": [6, 9.46196, 8.07818], + "children": [23, + { + "name": "group", + "origin": [5.5, 3.375, 8], + "children": [24, + { + "name": "group", + "origin": [5.375, 3.5625, 7.875], + "children": [25, + { + "name": "group", + "origin": [5.375, 3.5625, 7.875], + "children": [26, + { + "name": "group", + "origin": [5.375, 3.5625, 7.875], + "children": [ + { + "name": "group", + "origin": [5.375, 3.5625, 7.875], + "children": [ + { + "name": "group", + "origin": [5.375, 3.5625, 7.875], + "children": [ + { + "name": "group", + "origin": [4.4375, 5.8125, 7.375], + "children": [ + { + "name": "group", + "origin": [4.4375, 5.8125, 7.375], + "children": [] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/surgebinding/resources/assets/surgebinding/models/block/rockbud_variant1.json b/src/surgebinding/resources/assets/surgebinding/models/block/rockbud_variant1.json new file mode 100644 index 000000000..f4d46f21f --- /dev/null +++ b/src/surgebinding/resources/assets/surgebinding/models/block/rockbud_variant1.json @@ -0,0 +1,1798 @@ +{ + "credit": "Made with Blockbench", + "texture_size": [64, 64], + "textures": { + "0": "surgebinding:block/rockbud_variant", + "particle": "surgebinding:block/rockbud_variant" + }, + "elements": [ + { + "from": [6, 0, 6], + "to": [10, 1, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [15, 8, 15]}, + "faces": { + "north": {"uv": [5, 4.75, 6, 5], "texture": "#0"}, + "east": {"uv": [8, 6.75, 9, 7], "texture": "#0"}, + "south": {"uv": [8, 7.5, 9, 7.75], "texture": "#0"}, + "west": {"uv": [8.25, 2.75, 9.25, 3], "texture": "#0"}, + "up": {"uv": [7, 7, 6, 6], "texture": "#0"}, + "down": {"uv": [7, 4.75, 6, 5.75], "texture": "#0"} + } + }, + { + "from": [5, 1, 5], + "to": [11, 2, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [15, 9, 15]}, + "faces": { + "north": {"uv": [3.5, 7.25, 5, 7.5], "texture": "#0"}, + "east": {"uv": [0, 7.5, 1.5, 7.75], "texture": "#0"}, + "south": {"uv": [3.5, 7.5, 5, 7.75], "texture": "#0"}, + "west": {"uv": [5, 7.5, 6.5, 7.75], "texture": "#0"}, + "up": {"uv": [3.5, 3.5, 2, 2], "texture": "#0"}, + "down": {"uv": [3.5, 0, 2, 1.5], "texture": "#0"} + } + }, + { + "from": [4, 2, 4], + "to": [12, 4, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [15, 10, 15]}, + "faces": { + "north": {"uv": [6.25, 0, 8.25, 0.5], "texture": "#0"}, + "east": {"uv": [6.25, 0.5, 8.25, 1], "texture": "#0"}, + "south": {"uv": [6.25, 1, 8.25, 1.5], "texture": "#0"}, + "west": {"uv": [6.25, 1.5, 8.25, 2], "texture": "#0"}, + "up": {"uv": [2, 2, 0, 0], "texture": "#0"}, + "down": {"uv": [2, 2, 0, 4], "texture": "#0"} + } + }, + { + "from": [4.9375, 3.9375, 4.9375], + "to": [11.0625, 5.0625, 11.0625], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 4.5, 8]}, + "faces": { + "north": {"uv": [6.5, 7.5, 8, 7.75], "texture": "#0"}, + "east": {"uv": [7.5, 7, 9, 7.25], "texture": "#0"}, + "south": {"uv": [7.5, 7.25, 9, 7.5], "texture": "#0"}, + "west": {"uv": [0, 7.75, 1.5, 8], "texture": "#0"}, + "up": {"uv": [3.5, 5, 2, 3.5], "texture": "#0"}, + "down": {"uv": [5, 3.5, 3.5, 5], "texture": "#0"} + } + }, + { + "from": [0, 3, 4], + "to": [4, 4, 12], + "rotation": {"angle": 45, "axis": "z", "origin": [4, 3.5, 8]}, + "faces": { + "north": {"uv": [8.5, 4.5, 9.5, 4.75], "texture": "#0"}, + "east": {"uv": [6, 5.75, 8, 6], "texture": "#0"}, + "south": {"uv": [8.5, 8, 9.5, 8.25], "texture": "#0"}, + "west": {"uv": [6.25, 2, 8.25, 2.25], "texture": "#0"}, + "up": {"uv": [4.5, 2, 3.5, 0], "texture": "#0"}, + "down": {"uv": [1, 4, 0, 6], "texture": "#0"} + } + }, + { + "from": [-1.47487, 0.31802, 5], + "to": [1.52513, 1.31802, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [4.48744, 4.42678, 8]}, + "faces": { + "north": {"uv": [8, 10.5, 8.75, 10.75], "texture": "#0"}, + "east": {"uv": [1.5, 7.75, 3, 8], "texture": "#0"}, + "south": {"uv": [8.75, 10.5, 9.5, 10.75], "texture": "#0"}, + "west": {"uv": [3, 7.75, 4.5, 8], "texture": "#0"}, + "up": {"uv": [6.25, 1.5, 5.5, 0], "texture": "#0"}, + "down": {"uv": [6.25, 1.5, 5.5, 3], "texture": "#0"} + } + }, + { + "from": [12, 3, 4], + "to": [16, 4, 12], + "rotation": {"angle": -45, "axis": "z", "origin": [12, 3.5, 8]}, + "faces": { + "north": {"uv": [8.5, 8.25, 9.5, 8.5], "texture": "#0"}, + "east": {"uv": [6.25, 2.25, 8.25, 2.5], "texture": "#0"}, + "south": {"uv": [2.5, 8.75, 3.5, 9], "texture": "#0"}, + "west": {"uv": [6.25, 2.5, 8.25, 2.75], "texture": "#0"}, + "up": {"uv": [2, 6, 1, 4], "texture": "#0"}, + "down": {"uv": [5.5, 0, 4.5, 2], "texture": "#0"} + } + }, + { + "from": [14.47487, 0.31802, 5], + "to": [17.47487, 1.31802, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [11.51256, 4.42678, 8]}, + "faces": { + "north": {"uv": [9.5, 10.5, 10.25, 10.75], "texture": "#0"}, + "east": {"uv": [4.5, 7.75, 6, 8], "texture": "#0"}, + "south": {"uv": [10.25, 10.5, 11, 10.75], "texture": "#0"}, + "west": {"uv": [6, 7.75, 7.5, 8], "texture": "#0"}, + "up": {"uv": [0.75, 7.5, 0, 6], "texture": "#0"}, + "down": {"uv": [1.5, 6, 0.75, 7.5], "texture": "#0"} + } + }, + { + "from": [4, 3, 12], + "to": [12, 4, 16], + "rotation": {"angle": 45, "axis": "x", "origin": [8, 3.5, 12]}, + "faces": { + "north": {"uv": [6.25, 2.75, 8.25, 3], "texture": "#0"}, + "east": {"uv": [6, 8.75, 7, 9], "texture": "#0"}, + "south": {"uv": [6.5, 4, 8.5, 4.25], "texture": "#0"}, + "west": {"uv": [8.75, 0, 9.75, 0.25], "texture": "#0"}, + "up": {"uv": [5.5, 3, 3.5, 2], "texture": "#0"}, + "down": {"uv": [4, 5, 2, 6], "texture": "#0"} + } + }, + { + "from": [5, 0.31802, 14.47487], + "to": [11, 1.31802, 17.47487], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 4.42678, 11.51256]}, + "faces": { + "north": {"uv": [7.5, 7.75, 9, 8], "texture": "#0"}, + "east": {"uv": [10.5, 0.75, 11.25, 1], "texture": "#0"}, + "south": {"uv": [0, 8, 1.5, 8.25], "texture": "#0"}, + "west": {"uv": [10.5, 1, 11.25, 1.25], "texture": "#0"}, + "up": {"uv": [6.5, 4.75, 5, 4], "texture": "#0"}, + "down": {"uv": [3, 6, 1.5, 6.75], "texture": "#0"} + } + }, + { + "from": [4, 3, 0], + "to": [12, 4, 4], + "rotation": {"angle": -45, "axis": "x", "origin": [8, 3.5, 4]}, + "faces": { + "north": {"uv": [6.5, 4.25, 8.5, 4.5], "texture": "#0"}, + "east": {"uv": [8.75, 0.25, 9.75, 0.5], "texture": "#0"}, + "south": {"uv": [6.5, 4.5, 8.5, 4.75], "texture": "#0"}, + "west": {"uv": [8.75, 0.5, 9.75, 0.75], "texture": "#0"}, + "up": {"uv": [6, 6, 4, 5], "texture": "#0"}, + "down": {"uv": [7, 3, 5, 4], "texture": "#0"} + } + }, + { + "from": [5, 0.31802, -1.47487], + "to": [11, 1.31802, 1.52513], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 4.42678, 4.48744]}, + "faces": { + "north": {"uv": [1.5, 8, 3, 8.25], "texture": "#0"}, + "east": {"uv": [10.5, 1.25, 11.25, 1.5], "texture": "#0"}, + "south": {"uv": [3, 8, 4.5, 8.25], "texture": "#0"}, + "west": {"uv": [10.5, 1.5, 11.25, 1.75], "texture": "#0"}, + "up": {"uv": [4.5, 6.75, 3, 6], "texture": "#0"}, + "down": {"uv": [6, 6, 4.5, 6.75], "texture": "#0"} + } + }, + { + "from": [8, 5.6875, 6], + "to": [8, 6.6875, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [16, 13.6875, 16]}, + "faces": { + "north": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "east": {"uv": [8.75, 3, 9.75, 3.25], "texture": "#0"}, + "south": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "west": {"uv": [8.75, 3.25, 9.75, 3.5], "texture": "#0"}, + "up": {"uv": [0, 1, 0, 0], "texture": "#0"}, + "down": {"uv": [0, 0, 0, 1], "texture": "#0"} + } + }, + { + "from": [8, 5.6875, 6], + "to": [8, 6.6875, 10], + "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 6.1875, 8]}, + "faces": { + "north": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "east": {"uv": [8.75, 3.5, 9.75, 3.75], "texture": "#0"}, + "south": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "west": {"uv": [8.75, 3.75, 9.75, 4], "texture": "#0"}, + "up": {"uv": [0, 1, 0, 0], "texture": "#0"}, + "down": {"uv": [0, 0, 0, 1], "texture": "#0"} + } + }, + { + "from": [8, 5.6875, 6], + "to": [8, 6.6875, 10], + "rotation": {"angle": 45, "axis": "y", "origin": [8, 6.1875, 8]}, + "faces": { + "north": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "east": {"uv": [8.75, 4.75, 9.75, 5], "texture": "#0"}, + "south": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "west": {"uv": [8.75, 5, 9.75, 5.25], "texture": "#0"}, + "up": {"uv": [0, 1, 0, 0], "texture": "#0"}, + "down": {"uv": [0, 0, 0, 1], "texture": "#0"} + } + }, + { + "from": [6, 5.6875, 8], + "to": [10, 6.6875, 8], + "rotation": {"angle": -22.5, "axis": "y", "origin": [8, 6.1875, 8]}, + "faces": { + "north": {"uv": [8.75, 5.25, 9.75, 5.5], "texture": "#0"}, + "east": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "south": {"uv": [8.75, 5.5, 9.75, 5.75], "texture": "#0"}, + "west": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "up": {"uv": [1, 0, 0, 0], "texture": "#0"}, + "down": {"uv": [1, 0, 0, 0], "texture": "#0"} + } + }, + { + "from": [6, 5.6875, 8], + "to": [10, 6.6875, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 6.1875, 8]}, + "faces": { + "north": {"uv": [8.75, 5.75, 9.75, 6], "texture": "#0"}, + "east": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "south": {"uv": [8.75, 6, 9.75, 6.25], "texture": "#0"}, + "west": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "up": {"uv": [1, 0, 0, 0], "texture": "#0"}, + "down": {"uv": [1, 0, 0, 0], "texture": "#0"} + } + }, + { + "from": [6, 5.6875, 8], + "to": [10, 6.6875, 8], + "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 6.1875, 8]}, + "faces": { + "north": {"uv": [8.75, 6.25, 9.75, 6.5], "texture": "#0"}, + "east": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "south": {"uv": [8.75, 6.5, 9.75, 6.75], "texture": "#0"}, + "west": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "up": {"uv": [1, 0, 0, 0], "texture": "#0"}, + "down": {"uv": [1, 0, 0, 0], "texture": "#0"} + } + }, + { + "from": [6, 5.6875, 8], + "to": [10, 6.6875, 8], + "rotation": {"angle": 45, "axis": "y", "origin": [8, 6.1875, 8]}, + "faces": { + "north": {"uv": [1, 9, 2, 9.25], "texture": "#0"}, + "east": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "south": {"uv": [2, 9, 3, 9.25], "texture": "#0"}, + "west": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "up": {"uv": [1, 0, 0, 0], "texture": "#0"}, + "down": {"uv": [1, 0, 0, 0], "texture": "#0"} + } + }, + { + "from": [8, 5.6875, 6], + "to": [8, 6.6875, 10], + "rotation": {"angle": -22.5, "axis": "y", "origin": [8, 6.1875, 8]}, + "faces": { + "north": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "east": {"uv": [3, 9, 4, 9.25], "texture": "#0"}, + "south": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "west": {"uv": [4, 9, 5, 9.25], "texture": "#0"}, + "up": {"uv": [0, 1, 0, 0], "texture": "#0"}, + "down": {"uv": [0, 0, 0, 1], "texture": "#0"} + } + }, + { + "from": [11, 5.5625, 8], + "to": [11, 6.5625, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [19, 13.5625, 18]}, + "faces": { + "north": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "east": {"uv": [5, 9, 6, 9.25], "texture": "#0"}, + "south": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "west": {"uv": [6, 9, 7, 9.25], "texture": "#0"}, + "up": {"uv": [0, 1, 0, 0], "texture": "#0"}, + "down": {"uv": [0, 0, 0, 1], "texture": "#0"} + } + }, + { + "from": [11, 5.5625, 8], + "to": [11, 6.5625, 12], + "rotation": {"angle": 22.5, "axis": "y", "origin": [11, 6.0625, 10]}, + "faces": { + "north": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "east": {"uv": [7, 9, 8, 9.25], "texture": "#0"}, + "south": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "west": {"uv": [8, 9, 9, 9.25], "texture": "#0"}, + "up": {"uv": [0, 1, 0, 0], "texture": "#0"}, + "down": {"uv": [0, 0, 0, 1], "texture": "#0"} + } + }, + { + "from": [11, 5.5625, 8], + "to": [11, 6.5625, 12], + "rotation": {"angle": 45, "axis": "y", "origin": [11, 6.0625, 10]}, + "faces": { + "north": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "east": {"uv": [9, 9, 10, 9.25], "texture": "#0"}, + "south": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "west": {"uv": [9, 0.75, 10, 1], "texture": "#0"}, + "up": {"uv": [0, 1, 0, 0], "texture": "#0"}, + "down": {"uv": [0, 0, 0, 1], "texture": "#0"} + } + }, + { + "from": [9, 5.5625, 10], + "to": [13, 6.5625, 10], + "rotation": {"angle": -22.5, "axis": "y", "origin": [11, 6.0625, 10]}, + "faces": { + "north": {"uv": [9, 1, 10, 1.25], "texture": "#0"}, + "east": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "south": {"uv": [9, 1.25, 10, 1.5], "texture": "#0"}, + "west": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "up": {"uv": [1, 0, 0, 0], "texture": "#0"}, + "down": {"uv": [1, 0, 0, 0], "texture": "#0"} + } + }, + { + "from": [9, 5.5625, 10], + "to": [13, 6.5625, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [11, 6.0625, 10]}, + "faces": { + "north": {"uv": [9, 1.5, 10, 1.75], "texture": "#0"}, + "east": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "south": {"uv": [9, 1.75, 10, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "up": {"uv": [1, 0, 0, 0], "texture": "#0"}, + "down": {"uv": [1, 0, 0, 0], "texture": "#0"} + } + }, + { + "from": [9, 5.5625, 10], + "to": [13, 6.5625, 10], + "rotation": {"angle": 22.5, "axis": "y", "origin": [11, 6.0625, 10]}, + "faces": { + "north": {"uv": [9, 2, 10, 2.25], "texture": "#0"}, + "east": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "south": {"uv": [9, 2.25, 10, 2.5], "texture": "#0"}, + "west": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "up": {"uv": [1, 0, 0, 0], "texture": "#0"}, + "down": {"uv": [1, 0, 0, 0], "texture": "#0"} + } + }, + { + "from": [9, 5.5625, 10], + "to": [13, 6.5625, 10], + "rotation": {"angle": 45, "axis": "y", "origin": [11, 6.0625, 10]}, + "faces": { + "north": {"uv": [9, 2.5, 10, 2.75], "texture": "#0"}, + "east": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "south": {"uv": [9, 6.75, 10, 7], "texture": "#0"}, + "west": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "up": {"uv": [1, 0, 0, 0], "texture": "#0"}, + "down": {"uv": [1, 0, 0, 0], "texture": "#0"} + } + }, + { + "from": [11, 5.5625, 8], + "to": [11, 6.5625, 12], + "rotation": {"angle": -22.5, "axis": "y", "origin": [11, 6.0625, 10]}, + "faces": { + "north": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "east": {"uv": [9, 7, 10, 7.25], "texture": "#0"}, + "south": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "west": {"uv": [9, 7.25, 10, 7.5], "texture": "#0"}, + "up": {"uv": [0, 1, 0, 0], "texture": "#0"}, + "down": {"uv": [0, 0, 0, 1], "texture": "#0"} + } + }, + { + "from": [10, 5.25, 4], + "to": [10, 6.25, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [18, 13.25, 14]}, + "faces": { + "north": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "east": {"uv": [9, 7.5, 10, 7.75], "texture": "#0"}, + "south": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "west": {"uv": [9, 7.75, 10, 8], "texture": "#0"}, + "up": {"uv": [0, 1, 0, 0], "texture": "#0"}, + "down": {"uv": [0, 0, 0, 1], "texture": "#0"} + } + }, + { + "from": [10, 5.25, 4], + "to": [10, 6.25, 8], + "rotation": {"angle": 22.5, "axis": "y", "origin": [10, 5.75, 6]}, + "faces": { + "north": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "east": {"uv": [1, 9.25, 2, 9.5], "texture": "#0"}, + "south": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "west": {"uv": [2, 9.25, 3, 9.5], "texture": "#0"}, + "up": {"uv": [0, 1, 0, 0], "texture": "#0"}, + "down": {"uv": [0, 0, 0, 1], "texture": "#0"} + } + }, + { + "from": [10, 5.25, 4], + "to": [10, 6.25, 8], + "rotation": {"angle": 45, "axis": "y", "origin": [10, 5.75, 6]}, + "faces": { + "north": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "east": {"uv": [3, 9.25, 4, 9.5], "texture": "#0"}, + "south": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "west": {"uv": [4, 9.25, 5, 9.5], "texture": "#0"}, + "up": {"uv": [0, 1, 0, 0], "texture": "#0"}, + "down": {"uv": [0, 0, 0, 1], "texture": "#0"} + } + }, + { + "from": [8, 5.25, 6], + "to": [12, 6.25, 6], + "rotation": {"angle": -22.5, "axis": "y", "origin": [10, 5.75, 6]}, + "faces": { + "north": {"uv": [5, 9.25, 6, 9.5], "texture": "#0"}, + "east": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "south": {"uv": [6, 9.25, 7, 9.5], "texture": "#0"}, + "west": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "up": {"uv": [1, 0, 0, 0], "texture": "#0"}, + "down": {"uv": [1, 0, 0, 0], "texture": "#0"} + } + }, + { + "from": [8, 5.25, 6], + "to": [12, 6.25, 6], + "rotation": {"angle": 0, "axis": "y", "origin": [10, 5.75, 6]}, + "faces": { + "north": {"uv": [7, 9.25, 8, 9.5], "texture": "#0"}, + "east": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "south": {"uv": [8, 9.25, 9, 9.5], "texture": "#0"}, + "west": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "up": {"uv": [1, 0, 0, 0], "texture": "#0"}, + "down": {"uv": [1, 0, 0, 0], "texture": "#0"} + } + }, + { + "from": [8, 5.25, 6], + "to": [12, 6.25, 6], + "rotation": {"angle": 22.5, "axis": "y", "origin": [10, 5.75, 6]}, + "faces": { + "north": {"uv": [9, 9.25, 10, 9.5], "texture": "#0"}, + "east": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "south": {"uv": [9.25, 2.75, 10.25, 3], "texture": "#0"}, + "west": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "up": {"uv": [1, 0, 0, 0], "texture": "#0"}, + "down": {"uv": [1, 0, 0, 0], "texture": "#0"} + } + }, + { + "from": [8, 5.25, 6], + "to": [12, 6.25, 6], + "rotation": {"angle": 45, "axis": "y", "origin": [10, 5.75, 6]}, + "faces": { + "north": {"uv": [9.25, 4, 10.25, 4.25], "texture": "#0"}, + "east": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "south": {"uv": [9.25, 4.25, 10.25, 4.5], "texture": "#0"}, + "west": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "up": {"uv": [1, 0, 0, 0], "texture": "#0"}, + "down": {"uv": [1, 0, 0, 0], "texture": "#0"} + } + }, + { + "from": [10, 5.25, 4], + "to": [10, 6.25, 8], + "rotation": {"angle": -22.5, "axis": "y", "origin": [10, 5.75, 6]}, + "faces": { + "north": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "east": {"uv": [9.25, 8.5, 10.25, 8.75], "texture": "#0"}, + "south": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "west": {"uv": [9.25, 8.75, 10.25, 9], "texture": "#0"}, + "up": {"uv": [0, 1, 0, 0], "texture": "#0"}, + "down": {"uv": [0, 0, 0, 1], "texture": "#0"} + } + }, + { + "from": [6, 5.3125, 9], + "to": [6, 6.3125, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [14, 13.3125, 19]}, + "faces": { + "north": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "east": {"uv": [0, 9.5, 1, 9.75], "texture": "#0"}, + "south": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "west": {"uv": [1, 9.5, 2, 9.75], "texture": "#0"}, + "up": {"uv": [0, 1, 0, 0], "texture": "#0"}, + "down": {"uv": [0, 0, 0, 1], "texture": "#0"} + } + }, + { + "from": [6, 5.3125, 9], + "to": [6, 6.3125, 13], + "rotation": {"angle": 22.5, "axis": "y", "origin": [6, 5.8125, 11]}, + "faces": { + "north": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "east": {"uv": [2, 9.5, 3, 9.75], "texture": "#0"}, + "south": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "west": {"uv": [3, 9.5, 4, 9.75], "texture": "#0"}, + "up": {"uv": [0, 1, 0, 0], "texture": "#0"}, + "down": {"uv": [0, 0, 0, 1], "texture": "#0"} + } + }, + { + "from": [6, 5.3125, 9], + "to": [6, 6.3125, 13], + "rotation": {"angle": 45, "axis": "y", "origin": [6, 5.8125, 11]}, + "faces": { + "north": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "east": {"uv": [4, 9.5, 5, 9.75], "texture": "#0"}, + "south": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "west": {"uv": [5, 9.5, 6, 9.75], "texture": "#0"}, + "up": {"uv": [0, 1, 0, 0], "texture": "#0"}, + "down": {"uv": [0, 0, 0, 1], "texture": "#0"} + } + }, + { + "from": [4, 5.3125, 11], + "to": [8, 6.3125, 11], + "rotation": {"angle": -22.5, "axis": "y", "origin": [6, 5.8125, 11]}, + "faces": { + "north": {"uv": [6, 9.5, 7, 9.75], "texture": "#0"}, + "east": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "south": {"uv": [7, 9.5, 8, 9.75], "texture": "#0"}, + "west": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "up": {"uv": [1, 0, 0, 0], "texture": "#0"}, + "down": {"uv": [1, 0, 0, 0], "texture": "#0"} + } + }, + { + "from": [4, 5.3125, 11], + "to": [8, 6.3125, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [6, 5.8125, 11]}, + "faces": { + "north": {"uv": [8, 9.5, 9, 9.75], "texture": "#0"}, + "east": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "south": {"uv": [9, 9.5, 10, 9.75], "texture": "#0"}, + "west": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "up": {"uv": [1, 0, 0, 0], "texture": "#0"}, + "down": {"uv": [1, 0, 0, 0], "texture": "#0"} + } + }, + { + "from": [4, 5.3125, 11], + "to": [8, 6.3125, 11], + "rotation": {"angle": 22.5, "axis": "y", "origin": [6, 5.8125, 11]}, + "faces": { + "north": {"uv": [9.5, 4.5, 10.5, 4.75], "texture": "#0"}, + "east": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "south": {"uv": [9.5, 8, 10.5, 8.25], "texture": "#0"}, + "west": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "up": {"uv": [1, 0, 0, 0], "texture": "#0"}, + "down": {"uv": [1, 0, 0, 0], "texture": "#0"} + } + }, + { + "from": [4, 5.3125, 11], + "to": [8, 6.3125, 11], + "rotation": {"angle": 45, "axis": "y", "origin": [6, 5.8125, 11]}, + "faces": { + "north": {"uv": [9.5, 8.25, 10.5, 8.5], "texture": "#0"}, + "east": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "south": {"uv": [0, 9.75, 1, 10], "texture": "#0"}, + "west": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "up": {"uv": [1, 0, 0, 0], "texture": "#0"}, + "down": {"uv": [1, 0, 0, 0], "texture": "#0"} + } + }, + { + "from": [6, 5.3125, 9], + "to": [6, 6.3125, 13], + "rotation": {"angle": -22.5, "axis": "y", "origin": [6, 5.8125, 11]}, + "faces": { + "north": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "east": {"uv": [1, 9.75, 2, 10], "texture": "#0"}, + "south": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "west": {"uv": [2, 9.75, 3, 10], "texture": "#0"}, + "up": {"uv": [0, 1, 0, 0], "texture": "#0"}, + "down": {"uv": [0, 0, 0, 1], "texture": "#0"} + } + }, + { + "from": [6, 5.3125, 3], + "to": [6, 6.3125, 7], + "rotation": {"angle": 0, "axis": "y", "origin": [14, 13.3125, 13]}, + "faces": { + "north": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "east": {"uv": [3, 9.75, 4, 10], "texture": "#0"}, + "south": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "west": {"uv": [4, 9.75, 5, 10], "texture": "#0"}, + "up": {"uv": [0, 1, 0, 0], "texture": "#0"}, + "down": {"uv": [0, 0, 0, 1], "texture": "#0"} + } + }, + { + "from": [6, 5.3125, 3], + "to": [6, 6.3125, 7], + "rotation": {"angle": 22.5, "axis": "y", "origin": [6, 5.8125, 5]}, + "faces": { + "north": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "east": {"uv": [5, 9.75, 6, 10], "texture": "#0"}, + "south": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "west": {"uv": [6, 9.75, 7, 10], "texture": "#0"}, + "up": {"uv": [0, 1, 0, 0], "texture": "#0"}, + "down": {"uv": [0, 0, 0, 1], "texture": "#0"} + } + }, + { + "from": [6, 5.3125, 3], + "to": [6, 6.3125, 7], + "rotation": {"angle": 45, "axis": "y", "origin": [6, 5.8125, 5]}, + "faces": { + "north": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "east": {"uv": [7, 9.75, 8, 10], "texture": "#0"}, + "south": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "west": {"uv": [8, 9.75, 9, 10], "texture": "#0"}, + "up": {"uv": [0, 1, 0, 0], "texture": "#0"}, + "down": {"uv": [0, 0, 0, 1], "texture": "#0"} + } + }, + { + "from": [4, 5.3125, 5], + "to": [8, 6.3125, 5], + "rotation": {"angle": -22.5, "axis": "y", "origin": [6, 5.8125, 5]}, + "faces": { + "north": {"uv": [9, 9.75, 10, 10], "texture": "#0"}, + "east": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "south": {"uv": [9.75, 0, 10.75, 0.25], "texture": "#0"}, + "west": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "up": {"uv": [1, 0, 0, 0], "texture": "#0"}, + "down": {"uv": [1, 0, 0, 0], "texture": "#0"} + } + }, + { + "from": [4, 5.3125, 5], + "to": [8, 6.3125, 5], + "rotation": {"angle": 0, "axis": "y", "origin": [6, 5.8125, 5]}, + "faces": { + "north": {"uv": [9.75, 0.25, 10.75, 0.5], "texture": "#0"}, + "east": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "south": {"uv": [9.75, 0.5, 10.75, 0.75], "texture": "#0"}, + "west": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "up": {"uv": [1, 0, 0, 0], "texture": "#0"}, + "down": {"uv": [1, 0, 0, 0], "texture": "#0"} + } + }, + { + "from": [4, 5.3125, 5], + "to": [8, 6.3125, 5], + "rotation": {"angle": 22.5, "axis": "y", "origin": [6, 5.8125, 5]}, + "faces": { + "north": {"uv": [9.75, 3, 10.75, 3.25], "texture": "#0"}, + "east": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "south": {"uv": [9.75, 3.25, 10.75, 3.5], "texture": "#0"}, + "west": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "up": {"uv": [1, 0, 0, 0], "texture": "#0"}, + "down": {"uv": [1, 0, 0, 0], "texture": "#0"} + } + }, + { + "from": [4, 5.3125, 5], + "to": [8, 6.3125, 5], + "rotation": {"angle": 45, "axis": "y", "origin": [6, 5.8125, 5]}, + "faces": { + "north": {"uv": [9.75, 3.5, 10.75, 3.75], "texture": "#0"}, + "east": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "south": {"uv": [9.75, 3.75, 10.75, 4], "texture": "#0"}, + "west": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "up": {"uv": [1, 0, 0, 0], "texture": "#0"}, + "down": {"uv": [1, 0, 0, 0], "texture": "#0"} + } + }, + { + "from": [6, 5.3125, 3], + "to": [6, 6.3125, 7], + "rotation": {"angle": -22.5, "axis": "y", "origin": [6, 5.8125, 5]}, + "faces": { + "north": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "east": {"uv": [9.75, 4.75, 10.75, 5], "texture": "#0"}, + "south": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "west": {"uv": [9.75, 5, 10.75, 5.25], "texture": "#0"}, + "up": {"uv": [0, 1, 0, 0], "texture": "#0"}, + "down": {"uv": [0, 0, 0, 1], "texture": "#0"} + } + }, + { + "from": [5, 4.75, 6], + "to": [5, 6.75, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [13, 13.75, 16]}, + "faces": { + "north": {"uv": [0, 0, 0, 0.5], "texture": "#0"}, + "east": {"uv": [2, 1.5, 3, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 0, 0.5], "texture": "#0"}, + "west": {"uv": [3.5, 3, 4.5, 3.5], "texture": "#0"}, + "up": {"uv": [0, 1, 0, 0], "texture": "#0"}, + "down": {"uv": [0, 0, 0, 1], "texture": "#0"} + } + }, + { + "from": [5, 4.75, 6], + "to": [5, 6.75, 10], + "rotation": {"angle": 22.5, "axis": "y", "origin": [5, 6.25, 8]}, + "faces": { + "north": {"uv": [0, 0, 0, 0.5], "texture": "#0"}, + "east": {"uv": [1.5, 6.75, 2.5, 7.25], "texture": "#0"}, + "south": {"uv": [0, 0, 0, 0.5], "texture": "#0"}, + "west": {"uv": [2.5, 6.75, 3.5, 7.25], "texture": "#0"}, + "up": {"uv": [0, 1, 0, 0], "texture": "#0"}, + "down": {"uv": [0, 0, 0, 1], "texture": "#0"} + } + }, + { + "from": [5, 4.75, 6], + "to": [5, 6.75, 10], + "rotation": {"angle": 45, "axis": "y", "origin": [5, 6.25, 8]}, + "faces": { + "north": {"uv": [0, 0, 0, 0.5], "texture": "#0"}, + "east": {"uv": [3.5, 6.75, 4.5, 7.25], "texture": "#0"}, + "south": {"uv": [0, 0, 0, 0.5], "texture": "#0"}, + "west": {"uv": [4.5, 6.75, 5.5, 7.25], "texture": "#0"}, + "up": {"uv": [0, 1, 0, 0], "texture": "#0"}, + "down": {"uv": [0, 0, 0, 1], "texture": "#0"} + } + }, + { + "from": [3, 4.75, 8], + "to": [7, 6.75, 8], + "rotation": {"angle": -22.5, "axis": "y", "origin": [5, 6.25, 8]}, + "faces": { + "north": {"uv": [5.5, 7, 6.5, 7.5], "texture": "#0"}, + "east": {"uv": [0, 0, 0, 0.5], "texture": "#0"}, + "south": {"uv": [6.5, 7, 7.5, 7.5], "texture": "#0"}, + "west": {"uv": [0, 0, 0, 0.5], "texture": "#0"}, + "up": {"uv": [1, 0, 0, 0], "texture": "#0"}, + "down": {"uv": [1, 0, 0, 0], "texture": "#0"} + } + }, + { + "from": [3, 4.75, 8], + "to": [7, 6.75, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [5, 6.25, 8]}, + "faces": { + "north": {"uv": [7, 3, 8, 3.5], "texture": "#0"}, + "east": {"uv": [0, 0, 0, 0.5], "texture": "#0"}, + "south": {"uv": [7, 3.5, 8, 4], "texture": "#0"}, + "west": {"uv": [0, 0, 0, 0.5], "texture": "#0"}, + "up": {"uv": [1, 0, 0, 0], "texture": "#0"}, + "down": {"uv": [1, 0, 0, 0], "texture": "#0"} + } + }, + { + "from": [3, 4.75, 8], + "to": [7, 6.75, 8], + "rotation": {"angle": 22.5, "axis": "y", "origin": [5, 6.25, 8]}, + "faces": { + "north": {"uv": [7, 4.75, 8, 5.25], "texture": "#0"}, + "east": {"uv": [0, 0, 0, 0.5], "texture": "#0"}, + "south": {"uv": [7, 5.25, 8, 5.75], "texture": "#0"}, + "west": {"uv": [0, 0, 0, 0.5], "texture": "#0"}, + "up": {"uv": [1, 0, 0, 0], "texture": "#0"}, + "down": {"uv": [1, 0, 0, 0], "texture": "#0"} + } + }, + { + "from": [3, 4.75, 8], + "to": [7, 6.75, 8], + "rotation": {"angle": 45, "axis": "y", "origin": [5, 6.25, 8]}, + "faces": { + "north": {"uv": [7, 6, 8, 6.5], "texture": "#0"}, + "east": {"uv": [0, 0, 0, 0.5], "texture": "#0"}, + "south": {"uv": [7, 6.5, 8, 7], "texture": "#0"}, + "west": {"uv": [0, 0, 0, 0.5], "texture": "#0"}, + "up": {"uv": [1, 0, 0, 0], "texture": "#0"}, + "down": {"uv": [1, 0, 0, 0], "texture": "#0"} + } + }, + { + "from": [5, 4.75, 6], + "to": [5, 6.75, 10], + "rotation": {"angle": -22.5, "axis": "y", "origin": [5, 6.25, 8]}, + "faces": { + "north": {"uv": [0, 0, 0, 0.5], "texture": "#0"}, + "east": {"uv": [1.5, 7.25, 2.5, 7.75], "texture": "#0"}, + "south": {"uv": [0, 0, 0, 0.5], "texture": "#0"}, + "west": {"uv": [2.5, 7.25, 3.5, 7.75], "texture": "#0"}, + "up": {"uv": [0, 1, 0, 0], "texture": "#0"}, + "down": {"uv": [0, 0, 0, 1], "texture": "#0"} + } + }, + { + "from": [5, 4, 5], + "to": [7, 6, 7], + "rotation": {"angle": 0, "axis": "y", "origin": [14, 12, 13]}, + "faces": { + "north": {"uv": [3, 1.5, 3.5, 2], "texture": "#0"}, + "east": {"uv": [4.5, 3, 5, 3.5], "texture": "#0"}, + "south": {"uv": [9.75, 5.25, 10.25, 5.75], "texture": "#0"}, + "west": {"uv": [9.75, 5.75, 10.25, 6.25], "texture": "#0"}, + "up": {"uv": [10.25, 6.75, 9.75, 6.25], "texture": "#0"}, + "down": {"uv": [0.5, 10, 0, 10.5], "texture": "#0"} + } + }, + { + "from": [5.25, 4, 3.25], + "to": [6.75, 5.5, 5.75], + "rotation": {"angle": 0, "axis": "y", "origin": [6, 4.75, 5]}, + "faces": { + "north": {"uv": [0.5, 10, 1, 10.5], "texture": "#0"}, + "east": {"uv": [4.5, 8, 5.25, 8.5], "texture": "#0"}, + "south": {"uv": [1, 10, 1.5, 10.5], "texture": "#0"}, + "west": {"uv": [5.25, 8, 6, 8.5], "texture": "#0"}, + "up": {"uv": [6.5, 8.75, 6, 8], "texture": "#0"}, + "down": {"uv": [7, 8, 6.5, 8.75], "texture": "#0"} + } + }, + { + "from": [5.375, 3.875, 0.6875], + "to": [6.625, 5.125, 3.9375], + "rotation": {"angle": -45, "axis": "x", "origin": [6, 4.5, 3.3125]}, + "faces": { + "north": {"uv": [11.25, 4.5, 11.5, 4.75], "texture": "#0"}, + "east": {"uv": [10.5, 2.25, 11.25, 2.5], "texture": "#0"}, + "south": {"uv": [11.25, 4.75, 11.5, 5], "texture": "#0"}, + "west": {"uv": [10.5, 2.5, 11.25, 2.75], "texture": "#0"}, + "up": {"uv": [1.75, 11.5, 1.5, 10.75], "texture": "#0"}, + "down": {"uv": [2, 10.75, 1.75, 11.5], "texture": "#0"} + } + }, + { + "from": [4.375, 1.9375, 1], + "to": [6.5, 3.0625, 2.125], + "rotation": {"angle": 0, "axis": "y", "origin": [13.4375, 10, 9.0625]}, + "faces": { + "north": {"uv": [5.5, 6.75, 6, 7], "texture": "#0"}, + "east": {"uv": [11.25, 5, 11.5, 5.25], "texture": "#0"}, + "south": {"uv": [5, 7.25, 5.5, 7.5], "texture": "#0"}, + "west": {"uv": [11.25, 5.25, 11.5, 5.5], "texture": "#0"}, + "up": {"uv": [1.5, 9, 1, 8.75], "texture": "#0"}, + "down": {"uv": [4, 8.75, 3.5, 9], "texture": "#0"} + } + }, + { + "from": [2, 1.6875, 1.0625], + "to": [5, 2.6875, 2.0625], + "rotation": {"angle": 45, "axis": "z", "origin": [4.5, 2.1875, 1.5625]}, + "faces": { + "north": {"uv": [10.5, 4.5, 11.25, 4.75], "texture": "#0"}, + "east": {"uv": [11.25, 5.5, 11.5, 5.75], "texture": "#0"}, + "south": {"uv": [10.5, 8, 11.25, 8.25], "texture": "#0"}, + "west": {"uv": [11.25, 7.25, 11.5, 7.5], "texture": "#0"}, + "up": {"uv": [11.25, 8.5, 10.5, 8.25], "texture": "#0"}, + "down": {"uv": [11.25, 10, 10.5, 10.25], "texture": "#0"} + } + }, + { + "from": [1.375, 0.1875, 1.1875], + "to": [3.125, 0.9375, 1.9375], + "rotation": {"angle": 0, "axis": "y", "origin": [7.25, 8.0625, 9.0625]}, + "faces": { + "north": {"uv": [10.75, 4, 11.25, 4.25], "texture": "#0"}, + "east": {"uv": [11.25, 7.5, 11.5, 7.75], "texture": "#0"}, + "south": {"uv": [10.75, 4.25, 11.25, 4.5], "texture": "#0"}, + "west": {"uv": [11.25, 8, 11.5, 8.25], "texture": "#0"}, + "up": {"uv": [11.25, 5, 10.75, 4.75], "texture": "#0"}, + "down": {"uv": [11.25, 5, 10.75, 5.25], "texture": "#0"} + } + }, + { + "from": [2.6875, 4, 5.25], + "to": [5.1875, 5.5, 6.75], + "rotation": {"angle": 0, "axis": "y", "origin": [4.4375, 4.75, 6]}, + "faces": { + "north": {"uv": [7, 8, 7.75, 8.5], "texture": "#0"}, + "east": {"uv": [1.5, 10, 2, 10.5], "texture": "#0"}, + "south": {"uv": [7.75, 8, 8.5, 8.5], "texture": "#0"}, + "west": {"uv": [2, 10, 2.5, 10.5], "texture": "#0"}, + "up": {"uv": [8.75, 3.5, 8, 3], "texture": "#0"}, + "down": {"uv": [8.75, 3.5, 8, 4], "texture": "#0"} + } + }, + { + "from": [-0.875, 3.875, 5.375], + "to": [3.375, 5.125, 6.625], + "rotation": {"angle": 45, "axis": "z", "origin": [2.75, 4.5, 6]}, + "faces": { + "north": {"uv": [2.5, 10, 3.5, 10.25], "texture": "#0"}, + "east": {"uv": [11.25, 8.25, 11.5, 8.5], "texture": "#0"}, + "south": {"uv": [3.5, 10, 4.5, 10.25], "texture": "#0"}, + "west": {"uv": [11.25, 9.5, 11.5, 9.75], "texture": "#0"}, + "up": {"uv": [5.5, 10.25, 4.5, 10], "texture": "#0"}, + "down": {"uv": [6.5, 10, 5.5, 10.25], "texture": "#0"} + } + }, + { + "from": [-0.3125, 1.4375, 4.375], + "to": [0.8125, 2.5625, 6.5], + "rotation": {"angle": 0, "axis": "y", "origin": [7.75, 9.5, 13.4375]}, + "faces": { + "north": {"uv": [11.25, 9.75, 11.5, 10], "texture": "#0"}, + "east": {"uv": [10.75, 7.25, 11.25, 7.5], "texture": "#0"}, + "south": {"uv": [11.25, 10, 11.5, 10.25], "texture": "#0"}, + "west": {"uv": [10.75, 7.5, 11.25, 7.75], "texture": "#0"}, + "up": {"uv": [11, 9, 10.75, 8.5], "texture": "#0"}, + "down": {"uv": [11, 9, 10.75, 9.5], "texture": "#0"} + } + }, + { + "from": [-0.25, 1.1875, 3], + "to": [0.75, 2.1875, 5], + "rotation": {"angle": -45, "axis": "x", "origin": [0.25, 1.6875, 4.5]}, + "faces": { + "north": {"uv": [11.25, 10.25, 11.5, 10.5], "texture": "#0"}, + "east": {"uv": [10.75, 9.5, 11.25, 9.75], "texture": "#0"}, + "south": {"uv": [0, 11.5, 0.25, 11.75], "texture": "#0"}, + "west": {"uv": [10.75, 9.75, 11.25, 10], "texture": "#0"}, + "up": {"uv": [0.25, 11.5, 0, 11], "texture": "#0"}, + "down": {"uv": [0.5, 11, 0.25, 11.5], "texture": "#0"} + } + }, + { + "from": [-0.125, 0.1875, 2.125], + "to": [0.625, 0.9375, 3.875], + "rotation": {"angle": 0, "axis": "y", "origin": [7.75, 8.0625, 8]}, + "faces": { + "north": {"uv": [0.25, 11.5, 0.5, 11.75], "texture": "#0"}, + "east": {"uv": [0.5, 11, 1, 11.25], "texture": "#0"}, + "south": {"uv": [0.5, 11.5, 0.75, 11.75], "texture": "#0"}, + "west": {"uv": [1, 11, 1.5, 11.25], "texture": "#0"}, + "up": {"uv": [2.25, 11.5, 2, 11], "texture": "#0"}, + "down": {"uv": [2.5, 11, 2.25, 11.5], "texture": "#0"} + } + }, + { + "from": [9, 4, 5], + "to": [11, 6, 7], + "rotation": {"angle": 0, "axis": "y", "origin": [3, 12, 14]}, + "faces": { + "north": {"uv": [6.5, 10, 7, 10.5], "texture": "#0"}, + "east": {"uv": [7, 10, 7.5, 10.5], "texture": "#0"}, + "south": {"uv": [7.5, 10, 8, 10.5], "texture": "#0"}, + "west": {"uv": [8, 10, 8.5, 10.5], "texture": "#0"}, + "up": {"uv": [9, 10.5, 8.5, 10], "texture": "#0"}, + "down": {"uv": [9.5, 10, 9, 10.5], "texture": "#0"} + } + }, + { + "from": [10.25, 4, 5.25], + "to": [12.75, 5.5, 6.75], + "rotation": {"angle": 0, "axis": "y", "origin": [11, 4.75, 6]}, + "faces": { + "north": {"uv": [8, 4.75, 8.75, 5.25], "texture": "#0"}, + "east": {"uv": [9.5, 10, 10, 10.5], "texture": "#0"}, + "south": {"uv": [8, 5.25, 8.75, 5.75], "texture": "#0"}, + "west": {"uv": [10, 10, 10.5, 10.5], "texture": "#0"}, + "up": {"uv": [8.75, 6.25, 8, 5.75], "texture": "#0"}, + "down": {"uv": [8.75, 6.25, 8, 6.75], "texture": "#0"} + } + }, + { + "from": [12.0625, 3.875, 5.375], + "to": [15.3125, 5.125, 6.625], + "rotation": {"angle": -45, "axis": "z", "origin": [12.6875, 4.5, 6]}, + "faces": { + "north": {"uv": [10.5, 10.25, 11.25, 10.5], "texture": "#0"}, + "east": {"uv": [0.75, 11.5, 1, 11.75], "texture": "#0"}, + "south": {"uv": [2, 10.75, 2.75, 11], "texture": "#0"}, + "west": {"uv": [1.5, 11.5, 1.75, 11.75], "texture": "#0"}, + "up": {"uv": [3.5, 11, 2.75, 10.75], "texture": "#0"}, + "down": {"uv": [4.25, 10.75, 3.5, 11], "texture": "#0"} + } + }, + { + "from": [13.875, 1.9375, 4.375], + "to": [15, 3.0625, 6.5], + "rotation": {"angle": 0, "axis": "y", "origin": [6.9375, 10, 13.4375]}, + "faces": { + "north": {"uv": [1.75, 11.5, 2, 11.75], "texture": "#0"}, + "east": {"uv": [2.5, 11, 3, 11.25], "texture": "#0"}, + "south": {"uv": [2, 11.5, 2.25, 11.75], "texture": "#0"}, + "west": {"uv": [3, 11, 3.5, 11.25], "texture": "#0"}, + "up": {"uv": [3.75, 11.5, 3.5, 11], "texture": "#0"}, + "down": {"uv": [4, 11, 3.75, 11.5], "texture": "#0"} + } + }, + { + "from": [13.9375, 1.6875, 2], + "to": [14.9375, 2.6875, 5], + "rotation": {"angle": -45, "axis": "x", "origin": [14.4375, 2.1875, 4.5]}, + "faces": { + "north": {"uv": [2.25, 11.5, 2.5, 11.75], "texture": "#0"}, + "east": {"uv": [4.25, 10.75, 5, 11], "texture": "#0"}, + "south": {"uv": [2.5, 11.5, 2.75, 11.75], "texture": "#0"}, + "west": {"uv": [5, 10.75, 5.75, 11], "texture": "#0"}, + "up": {"uv": [6, 11.5, 5.75, 10.75], "texture": "#0"}, + "down": {"uv": [6.25, 10.75, 6, 11.5], "texture": "#0"} + } + }, + { + "from": [14.0625, 0.1875, 1.375], + "to": [14.8125, 0.9375, 3.125], + "rotation": {"angle": 0, "axis": "y", "origin": [6.9375, 8.0625, 7.25]}, + "faces": { + "north": {"uv": [2.75, 11.5, 3, 11.75], "texture": "#0"}, + "east": {"uv": [4, 11, 4.5, 11.25], "texture": "#0"}, + "south": {"uv": [3, 11.5, 3.25, 11.75], "texture": "#0"}, + "west": {"uv": [4.5, 11, 5, 11.25], "texture": "#0"}, + "up": {"uv": [5.25, 11.5, 5, 11], "texture": "#0"}, + "down": {"uv": [5.5, 11, 5.25, 11.5], "texture": "#0"} + } + }, + { + "from": [9.25, 4, 2.6875], + "to": [10.75, 5.5, 5.1875], + "rotation": {"angle": 0, "axis": "y", "origin": [10, 4.75, 4.4375]}, + "faces": { + "north": {"uv": [10, 0.75, 10.5, 1.25], "texture": "#0"}, + "east": {"uv": [0, 8.25, 0.75, 8.75], "texture": "#0"}, + "south": {"uv": [10, 1.25, 10.5, 1.75], "texture": "#0"}, + "west": {"uv": [0.75, 8.25, 1.5, 8.75], "texture": "#0"}, + "up": {"uv": [2, 9, 1.5, 8.25], "texture": "#0"}, + "down": {"uv": [2.5, 8.25, 2, 9], "texture": "#0"} + } + }, + { + "from": [9.375, 3.875, -0.875], + "to": [10.625, 5.125, 3.375], + "rotation": {"angle": -45, "axis": "x", "origin": [10, 4.5, 2.75]}, + "faces": { + "north": {"uv": [3.25, 11.5, 3.5, 11.75], "texture": "#0"}, + "east": {"uv": [10, 1.75, 11, 2], "texture": "#0"}, + "south": {"uv": [3.5, 11.5, 3.75, 11.75], "texture": "#0"}, + "west": {"uv": [10, 2, 11, 2.25], "texture": "#0"}, + "up": {"uv": [10.25, 7.75, 10, 6.75], "texture": "#0"}, + "down": {"uv": [10.25, 9, 10, 10], "texture": "#0"} + } + }, + { + "from": [9.5, 1.4375, -0.3125], + "to": [11.625, 2.5625, 0.8125], + "rotation": {"angle": 0, "axis": "y", "origin": [2.5625, 9.5, 7.75]}, + "faces": { + "north": {"uv": [6.25, 11, 6.75, 11.25], "texture": "#0"}, + "east": {"uv": [3.75, 11.5, 4, 11.75], "texture": "#0"}, + "south": {"uv": [8, 11, 8.5, 11.25], "texture": "#0"}, + "west": {"uv": [4.5, 11.5, 4.75, 11.75], "texture": "#0"}, + "up": {"uv": [9, 11.25, 8.5, 11], "texture": "#0"}, + "down": {"uv": [9.5, 11, 9, 11.25], "texture": "#0"} + } + }, + { + "from": [11, 1.1875, -0.25], + "to": [13, 2.1875, 0.75], + "rotation": {"angle": -45, "axis": "z", "origin": [11.5, 1.6875, 0.25]}, + "faces": { + "north": {"uv": [9.5, 11, 10, 11.25], "texture": "#0"}, + "east": {"uv": [4.75, 11.5, 5, 11.75], "texture": "#0"}, + "south": {"uv": [10, 11, 10.5, 11.25], "texture": "#0"}, + "west": {"uv": [5, 11.5, 5.25, 11.75], "texture": "#0"}, + "up": {"uv": [11, 11.25, 10.5, 11], "texture": "#0"}, + "down": {"uv": [11.5, 11, 11, 11.25], "texture": "#0"} + } + }, + { + "from": [12.125, 0.1875, -0.125], + "to": [13.875, 0.9375, 0.625], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8.0625, 7.75]}, + "faces": { + "north": {"uv": [11, 1.75, 11.5, 2], "texture": "#0"}, + "east": {"uv": [5.25, 11.5, 5.5, 11.75], "texture": "#0"}, + "south": {"uv": [11, 2, 11.5, 2.25], "texture": "#0"}, + "west": {"uv": [5.5, 11.5, 5.75, 11.75], "texture": "#0"}, + "up": {"uv": [11.5, 6, 11, 5.75], "texture": "#0"}, + "down": {"uv": [11.5, 6, 11, 6.25], "texture": "#0"} + } + }, + { + "from": [9, 4, 9], + "to": [11, 6, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [2, 12, 3]}, + "faces": { + "north": {"uv": [10, 2.25, 10.5, 2.75], "texture": "#0"}, + "east": {"uv": [2.5, 10.25, 3, 10.75], "texture": "#0"}, + "south": {"uv": [3, 10.25, 3.5, 10.75], "texture": "#0"}, + "west": {"uv": [3.5, 10.25, 4, 10.75], "texture": "#0"}, + "up": {"uv": [4.5, 10.75, 4, 10.25], "texture": "#0"}, + "down": {"uv": [5, 10.25, 4.5, 10.75], "texture": "#0"} + } + }, + { + "from": [9.25, 4, 10.25], + "to": [10.75, 5.5, 12.75], + "rotation": {"angle": 0, "axis": "y", "origin": [10, 4.75, 11]}, + "faces": { + "north": {"uv": [5, 10.25, 5.5, 10.75], "texture": "#0"}, + "east": {"uv": [2.5, 8.25, 3.25, 8.75], "texture": "#0"}, + "south": {"uv": [5.5, 10.25, 6, 10.75], "texture": "#0"}, + "west": {"uv": [3.25, 8.25, 4, 8.75], "texture": "#0"}, + "up": {"uv": [4.5, 9, 4, 8.25], "texture": "#0"}, + "down": {"uv": [8.75, 0, 8.25, 0.75], "texture": "#0"} + } + }, + { + "from": [9.375, 3.875, 12.0625], + "to": [10.625, 5.125, 15.3125], + "rotation": {"angle": 45, "axis": "x", "origin": [10, 4.5, 12.6875]}, + "faces": { + "north": {"uv": [5.75, 11.5, 6, 11.75], "texture": "#0"}, + "east": {"uv": [6.25, 10.75, 7, 11], "texture": "#0"}, + "south": {"uv": [6, 11.5, 6.25, 11.75], "texture": "#0"}, + "west": {"uv": [8, 10.75, 8.75, 11], "texture": "#0"}, + "up": {"uv": [7.25, 11.5, 7, 10.75], "texture": "#0"}, + "down": {"uv": [7.5, 10.75, 7.25, 11.5], "texture": "#0"} + } + }, + { + "from": [9.5, 1.9375, 13.875], + "to": [11.625, 3.0625, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [2.5625, 10, 6.9375]}, + "faces": { + "north": {"uv": [11, 6.25, 11.5, 6.5], "texture": "#0"}, + "east": {"uv": [6.25, 11.5, 6.5, 11.75], "texture": "#0"}, + "south": {"uv": [11, 6.5, 11.5, 6.75], "texture": "#0"}, + "west": {"uv": [6.5, 11.5, 6.75, 11.75], "texture": "#0"}, + "up": {"uv": [11.5, 7, 11, 6.75], "texture": "#0"}, + "down": {"uv": [11.5, 7, 11, 7.25], "texture": "#0"} + } + }, + { + "from": [11, 1.6875, 13.9375], + "to": [14, 2.6875, 14.9375], + "rotation": {"angle": -45, "axis": "z", "origin": [11.5, 2.1875, 14.4375]}, + "faces": { + "north": {"uv": [8.75, 10.75, 9.5, 11], "texture": "#0"}, + "east": {"uv": [6.75, 11.5, 7, 11.75], "texture": "#0"}, + "south": {"uv": [9.5, 10.75, 10.25, 11], "texture": "#0"}, + "west": {"uv": [7, 11.5, 7.25, 11.75], "texture": "#0"}, + "up": {"uv": [11, 11, 10.25, 10.75], "texture": "#0"}, + "down": {"uv": [11.5, 0, 10.75, 0.25], "texture": "#0"} + } + }, + { + "from": [12.875, 0.1875, 14.0625], + "to": [14.625, 0.9375, 14.8125], + "rotation": {"angle": 0, "axis": "y", "origin": [8.75, 8.0625, 6.9375]}, + "faces": { + "north": {"uv": [11, 7.75, 11.5, 8], "texture": "#0"}, + "east": {"uv": [7.25, 11.5, 7.5, 11.75], "texture": "#0"}, + "south": {"uv": [11, 8.5, 11.5, 8.75], "texture": "#0"}, + "west": {"uv": [7.5, 11.5, 7.75, 11.75], "texture": "#0"}, + "up": {"uv": [11.5, 9, 11, 8.75], "texture": "#0"}, + "down": {"uv": [11.5, 9, 11, 9.25], "texture": "#0"} + } + }, + { + "from": [10.8125, 4, 9.25], + "to": [13.3125, 5.5, 10.75], + "rotation": {"angle": 0, "axis": "y", "origin": [11.5625, 4.75, 10]}, + "faces": { + "north": {"uv": [8.25, 0.75, 9, 1.25], "texture": "#0"}, + "east": {"uv": [6, 10.25, 6.5, 10.75], "texture": "#0"}, + "south": {"uv": [8.25, 1.25, 9, 1.75], "texture": "#0"}, + "west": {"uv": [10.25, 4, 10.75, 4.5], "texture": "#0"}, + "up": {"uv": [9, 2.25, 8.25, 1.75], "texture": "#0"}, + "down": {"uv": [9, 2.25, 8.25, 2.75], "texture": "#0"} + } + }, + { + "from": [12.625, 3.875, 9.375], + "to": [16.875, 5.125, 10.625], + "rotation": {"angle": -45, "axis": "z", "origin": [13.25, 4.5, 10]}, + "faces": { + "north": {"uv": [10, 7.75, 11, 8], "texture": "#0"}, + "east": {"uv": [7.75, 11.5, 8, 11.75], "texture": "#0"}, + "south": {"uv": [10.25, 2.75, 11.25, 3], "texture": "#0"}, + "west": {"uv": [8.5, 11.5, 8.75, 11.75], "texture": "#0"}, + "up": {"uv": [11.25, 5.5, 10.25, 5.25], "texture": "#0"}, + "down": {"uv": [11.25, 5.5, 10.25, 5.75], "texture": "#0"} + } + }, + { + "from": [15.1875, 1.4375, 9.5], + "to": [16.3125, 2.5625, 11.625], + "rotation": {"angle": 0, "axis": "y", "origin": [8.25, 9.5, 2.5625]}, + "faces": { + "north": {"uv": [8.75, 11.5, 9, 11.75], "texture": "#0"}, + "east": {"uv": [11, 9.25, 11.5, 9.5], "texture": "#0"}, + "south": {"uv": [9, 11.5, 9.25, 11.75], "texture": "#0"}, + "west": {"uv": [11, 10.5, 11.5, 10.75], "texture": "#0"}, + "up": {"uv": [5.75, 11.5, 5.5, 11], "texture": "#0"}, + "down": {"uv": [7, 11, 6.75, 11.5], "texture": "#0"} + } + }, + { + "from": [15.25, 1.1875, 11], + "to": [16.25, 2.1875, 13], + "rotation": {"angle": 45, "axis": "x", "origin": [15.75, 1.6875, 11.5]}, + "faces": { + "north": {"uv": [9.25, 11.5, 9.5, 11.75], "texture": "#0"}, + "east": {"uv": [11, 10.75, 11.5, 11], "texture": "#0"}, + "south": {"uv": [10, 11.5, 10.25, 11.75], "texture": "#0"}, + "west": {"uv": [0.5, 11.25, 1, 11.5], "texture": "#0"}, + "up": {"uv": [1.25, 11.75, 1, 11.25], "texture": "#0"}, + "down": {"uv": [1.5, 11.25, 1.25, 11.75], "texture": "#0"} + } + }, + { + "from": [15.375, 0.1875, 12.125], + "to": [16.125, 0.9375, 13.875], + "rotation": {"angle": 0, "axis": "y", "origin": [8.25, 8.0625, 8]}, + "faces": { + "north": {"uv": [10.25, 11.5, 10.5, 11.75], "texture": "#0"}, + "east": {"uv": [2.5, 11.25, 3, 11.5], "texture": "#0"}, + "south": {"uv": [10.5, 11.5, 10.75, 11.75], "texture": "#0"}, + "west": {"uv": [3, 11.25, 3.5, 11.5], "texture": "#0"}, + "up": {"uv": [4.25, 11.75, 4, 11.25], "texture": "#0"}, + "down": {"uv": [4.5, 11.25, 4.25, 11.75], "texture": "#0"} + } + }, + { + "from": [5, 4, 9], + "to": [7, 6, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [13, 12, 2]}, + "faces": { + "north": {"uv": [10.25, 5.75, 10.75, 6.25], "texture": "#0"}, + "east": {"uv": [10.25, 6.25, 10.75, 6.75], "texture": "#0"}, + "south": {"uv": [10.25, 6.75, 10.75, 7.25], "texture": "#0"}, + "west": {"uv": [10.25, 7.25, 10.75, 7.75], "texture": "#0"}, + "up": {"uv": [10.75, 9, 10.25, 8.5], "texture": "#0"}, + "down": {"uv": [10.75, 9, 10.25, 9.5], "texture": "#0"} + } + }, + { + "from": [3.25, 4, 9.25], + "to": [5.75, 5.5, 10.75], + "rotation": {"angle": 0, "axis": "y", "origin": [5, 4.75, 10]}, + "faces": { + "north": {"uv": [4.5, 8.5, 5.25, 9], "texture": "#0"}, + "east": {"uv": [10.25, 9.5, 10.75, 10], "texture": "#0"}, + "south": {"uv": [5.25, 8.5, 6, 9], "texture": "#0"}, + "west": {"uv": [0, 10.5, 0.5, 11], "texture": "#0"}, + "up": {"uv": [7.75, 9, 7, 8.5], "texture": "#0"}, + "down": {"uv": [8.5, 8.5, 7.75, 9], "texture": "#0"} + } + }, + { + "from": [0.6875, 3.875, 9.375], + "to": [3.9375, 5.125, 10.625], + "rotation": {"angle": 45, "axis": "z", "origin": [3.3125, 4.5, 10]}, + "faces": { + "north": {"uv": [10.75, 0.25, 11.5, 0.5], "texture": "#0"}, + "east": {"uv": [10.75, 11.5, 11, 11.75], "texture": "#0"}, + "south": {"uv": [10.75, 0.5, 11.5, 0.75], "texture": "#0"}, + "west": {"uv": [11, 11.5, 11.25, 11.75], "texture": "#0"}, + "up": {"uv": [11.5, 3.25, 10.75, 3], "texture": "#0"}, + "down": {"uv": [11.5, 3.25, 10.75, 3.5], "texture": "#0"} + } + }, + { + "from": [1, 1.9375, 9.5], + "to": [2.125, 3.0625, 11.625], + "rotation": {"angle": 0, "axis": "y", "origin": [9.0625, 10, 2.5625]}, + "faces": { + "north": {"uv": [11.25, 11.5, 11.5, 11.75], "texture": "#0"}, + "east": {"uv": [4.5, 11.25, 5, 11.5], "texture": "#0"}, + "south": {"uv": [11.5, 11.5, 11.75, 11.75], "texture": "#0"}, + "west": {"uv": [6.25, 11.25, 6.75, 11.5], "texture": "#0"}, + "up": {"uv": [8.25, 11.75, 8, 11.25], "texture": "#0"}, + "down": {"uv": [8.5, 11.25, 8.25, 11.75], "texture": "#0"} + } + }, + { + "from": [1.0625, 1.6875, 11], + "to": [2.0625, 2.6875, 14], + "rotation": {"angle": 45, "axis": "x", "origin": [1.5625, 2.1875, 11.5]}, + "faces": { + "north": {"uv": [11.5, 0, 11.75, 0.25], "texture": "#0"}, + "east": {"uv": [10.75, 3.5, 11.5, 3.75], "texture": "#0"}, + "south": {"uv": [11.5, 0.25, 11.75, 0.5], "texture": "#0"}, + "west": {"uv": [10.75, 3.75, 11.5, 4], "texture": "#0"}, + "up": {"uv": [11, 6.5, 10.75, 5.75], "texture": "#0"}, + "down": {"uv": [11, 6.5, 10.75, 7.25], "texture": "#0"} + } + }, + { + "from": [1.1875, 0.1875, 12.875], + "to": [1.9375, 0.9375, 14.625], + "rotation": {"angle": 0, "axis": "y", "origin": [9.0625, 8.0625, 8.75]}, + "faces": { + "north": {"uv": [11.5, 0.5, 11.75, 0.75], "texture": "#0"}, + "east": {"uv": [8.5, 11.25, 9, 11.5], "texture": "#0"}, + "south": {"uv": [11.5, 1.75, 11.75, 2], "texture": "#0"}, + "west": {"uv": [9, 11.25, 9.5, 11.5], "texture": "#0"}, + "up": {"uv": [9.75, 11.75, 9.5, 11.25], "texture": "#0"}, + "down": {"uv": [10, 11.25, 9.75, 11.75], "texture": "#0"} + } + }, + { + "from": [5.25, 4, 10.8125], + "to": [6.75, 5.5, 13.3125], + "rotation": {"angle": 0, "axis": "y", "origin": [6, 4.75, 11.5625]}, + "faces": { + "north": {"uv": [0.5, 10.5, 1, 11], "texture": "#0"}, + "east": {"uv": [8.5, 8.5, 9.25, 9], "texture": "#0"}, + "south": {"uv": [1, 10.5, 1.5, 11], "texture": "#0"}, + "west": {"uv": [8.5, 4, 9.25, 4.5], "texture": "#0"}, + "up": {"uv": [0.5, 9.5, 0, 8.75], "texture": "#0"}, + "down": {"uv": [1, 8.75, 0.5, 9.5], "texture": "#0"} + } + }, + { + "from": [5.375, 3.875, 12.625], + "to": [6.625, 5.125, 16.875], + "rotation": {"angle": 45, "axis": "x", "origin": [6, 4.5, 13.25]}, + "faces": { + "north": {"uv": [11.5, 2, 11.75, 2.25], "texture": "#0"}, + "east": {"uv": [1.5, 10.5, 2.5, 10.75], "texture": "#0"}, + "south": {"uv": [11.5, 3, 11.75, 3.25], "texture": "#0"}, + "west": {"uv": [6.5, 10.5, 7.5, 10.75], "texture": "#0"}, + "up": {"uv": [7.75, 11.5, 7.5, 10.5], "texture": "#0"}, + "down": {"uv": [8, 10.5, 7.75, 11.5], "texture": "#0"} + } + }, + { + "from": [4.375, 1.4375, 15.1875], + "to": [6.5, 2.5625, 16.3125], + "rotation": {"angle": 0, "axis": "y", "origin": [13.4375, 9.5, 8.25]}, + "faces": { + "north": {"uv": [10, 11.25, 10.5, 11.5], "texture": "#0"}, + "east": {"uv": [11.5, 3.25, 11.75, 3.5], "texture": "#0"}, + "south": {"uv": [10.5, 11.25, 11, 11.5], "texture": "#0"}, + "west": {"uv": [11.5, 3.5, 11.75, 3.75], "texture": "#0"}, + "up": {"uv": [11.5, 11.5, 11, 11.25], "texture": "#0"}, + "down": {"uv": [11.75, 0.75, 11.25, 1], "texture": "#0"} + } + }, + { + "from": [3, 1.1875, 15.25], + "to": [5, 2.1875, 16.25], + "rotation": {"angle": 45, "axis": "z", "origin": [4.5, 1.6875, 15.75]}, + "faces": { + "north": {"uv": [11.25, 1, 11.75, 1.25], "texture": "#0"}, + "east": {"uv": [11.5, 3.75, 11.75, 4], "texture": "#0"}, + "south": {"uv": [11.25, 1.25, 11.75, 1.5], "texture": "#0"}, + "west": {"uv": [11.5, 4.5, 11.75, 4.75], "texture": "#0"}, + "up": {"uv": [11.75, 1.75, 11.25, 1.5], "texture": "#0"}, + "down": {"uv": [11.75, 2.25, 11.25, 2.5], "texture": "#0"} + } + }, + { + "from": [2.125, 0.1875, 15.375], + "to": [3.875, 0.9375, 16.125], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8.0625, 8.25]}, + "faces": { + "north": {"uv": [11.25, 2.5, 11.75, 2.75], "texture": "#0"}, + "east": {"uv": [11.5, 4.75, 11.75, 5], "texture": "#0"}, + "south": {"uv": [11.25, 2.75, 11.75, 3], "texture": "#0"}, + "west": {"uv": [11.5, 5, 11.75, 5.25], "texture": "#0"}, + "up": {"uv": [11.75, 4.25, 11.25, 4], "texture": "#0"}, + "down": {"uv": [11.75, 4.25, 11.25, 4.5], "texture": "#0"} + } + } + ], + "groups": [ + { + "name": "group", + "origin": [8, 8, 8], + "color": 0, + "children": [0, 1, 2, 3] + }, + { + "name": "group", + "origin": [15, 10, 15], + "color": 0, + "children": [ + 4, + { + "name": "group", + "origin": [11, 11, 12], + "color": 0, + "children": [5] + } + ] + }, + { + "name": "group", + "origin": [15, 10, 15], + "color": 0, + "children": [ + 6, + { + "name": "group", + "origin": [11, 11, 12], + "color": 0, + "children": [7] + } + ] + }, + { + "name": "group", + "origin": [15, 10, 15], + "color": 0, + "children": [ + 8, + { + "name": "group", + "origin": [11, 11, 12], + "color": 0, + "children": [9] + } + ] + }, + { + "name": "group", + "origin": [15, 10, 15], + "color": 0, + "children": [ + 10, + { + "name": "group", + "origin": [11, 11, 12], + "color": 0, + "children": [11] + } + ] + }, + { + "name": "flower1", + "origin": [8, 8, 8], + "color": 0, + "children": [12, 13, 14, 15, 16, 17, 18, 19] + }, + { + "name": "flower2", + "origin": [8, 8, 8], + "color": 0, + "children": [20, 21, 22, 23, 24, 25, 26, 27] + }, + { + "name": "flower3", + "origin": [8, 8, 8], + "color": 0, + "children": [28, 29, 30, 31, 32, 33, 34, 35] + }, + { + "name": "flower4", + "origin": [8, 8, 8], + "color": 0, + "children": [36, 37, 38, 39, 40, 41, 42, 43] + }, + { + "name": "flower5", + "origin": [8, 8, 8], + "color": 0, + "children": [44, 45, 46, 47, 48, 49, 50, 51] + }, + { + "name": "flower6", + "origin": [8, 8, 8], + "color": 0, + "children": [52, 53, 54, 55, 56, 57, 58, 59] + }, + { + "name": "group", + "origin": [8, 8, 8], + "color": 0, + "children": [ + 60, + { + "name": "group", + "origin": [14, 12, 13], + "color": 0, + "children": [ + 61, + { + "name": "group", + "origin": [4.4375, 4.75, 6], + "color": 0, + "children": [ + 62, + { + "name": "group", + "origin": [2.75, 4.5, 6], + "color": 0, + "children": [ + 63, + { + "name": "group", + "origin": [7.875, 9.5, 13.4375], + "color": 0, + "children": [ + 64, + { + "name": "group", + "origin": [0.25, 1.6875, 4.5], + "color": 0, + "children": [65] + } + ] + } + ] + } + ] + } + ] + }, + { + "name": "group", + "origin": [14, 12, 13], + "color": 0, + "children": [ + 66, + { + "name": "group", + "origin": [4.4375, 4.75, 6], + "color": 0, + "children": [ + 67, + { + "name": "group", + "origin": [2.75, 4.5, 6], + "color": 0, + "children": [ + 68, + { + "name": "group", + "origin": [7.875, 9.5, 13.4375], + "color": 0, + "children": [ + 69, + { + "name": "group", + "origin": [0.25, 1.6875, 4.5], + "color": 0, + "children": [70] + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "name": "group", + "origin": [8, 8, 8], + "color": 0, + "children": [ + 71, + { + "name": "group", + "origin": [14, 12, 13], + "color": 0, + "children": [ + 72, + { + "name": "group", + "origin": [4.4375, 4.75, 6], + "color": 0, + "children": [ + 73, + { + "name": "group", + "origin": [2.75, 4.5, 6], + "color": 0, + "children": [ + 74, + { + "name": "group", + "origin": [7.875, 9.5, 13.4375], + "color": 0, + "children": [ + 75, + { + "name": "group", + "origin": [0.25, 1.6875, 4.5], + "color": 0, + "children": [76] + } + ] + } + ] + } + ] + } + ] + }, + { + "name": "group", + "origin": [14, 12, 13], + "color": 0, + "children": [ + 77, + { + "name": "group", + "origin": [4.4375, 4.75, 6], + "color": 0, + "children": [ + 78, + { + "name": "group", + "origin": [2.75, 4.5, 6], + "color": 0, + "children": [ + 79, + { + "name": "group", + "origin": [7.875, 9.5, 13.4375], + "color": 0, + "children": [ + 80, + { + "name": "group", + "origin": [0.25, 1.6875, 4.5], + "color": 0, + "children": [81] + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "name": "group", + "origin": [8, 8, 8], + "color": 0, + "children": [ + 82, + { + "name": "group", + "origin": [14, 12, 13], + "color": 0, + "children": [ + 83, + { + "name": "group", + "origin": [4.4375, 4.75, 6], + "color": 0, + "children": [ + 84, + { + "name": "group", + "origin": [2.75, 4.5, 6], + "color": 0, + "children": [ + 85, + { + "name": "group", + "origin": [7.875, 9.5, 13.4375], + "color": 0, + "children": [ + 86, + { + "name": "group", + "origin": [0.25, 1.6875, 4.5], + "color": 0, + "children": [87] + } + ] + } + ] + } + ] + } + ] + }, + { + "name": "group", + "origin": [14, 12, 13], + "color": 0, + "children": [ + 88, + { + "name": "group", + "origin": [4.4375, 4.75, 6], + "color": 0, + "children": [ + 89, + { + "name": "group", + "origin": [2.75, 4.5, 6], + "color": 0, + "children": [ + 90, + { + "name": "group", + "origin": [7.875, 9.5, 13.4375], + "color": 0, + "children": [ + 91, + { + "name": "group", + "origin": [0.25, 1.6875, 4.5], + "color": 0, + "children": [92] + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "name": "group", + "origin": [8, 8, 8], + "color": 0, + "children": [ + 93, + { + "name": "group", + "origin": [14, 12, 13], + "color": 0, + "children": [ + 94, + { + "name": "group", + "origin": [4.4375, 4.75, 6], + "color": 0, + "children": [ + 95, + { + "name": "group", + "origin": [2.75, 4.5, 6], + "color": 0, + "children": [ + 96, + { + "name": "group", + "origin": [7.875, 9.5, 13.4375], + "color": 0, + "children": [ + 97, + { + "name": "group", + "origin": [0.25, 1.6875, 4.5], + "color": 0, + "children": [98] + } + ] + } + ] + } + ] + } + ] + }, + { + "name": "group", + "origin": [14, 12, 13], + "color": 0, + "children": [ + 99, + { + "name": "group", + "origin": [4.4375, 4.75, 6], + "color": 0, + "children": [ + 100, + { + "name": "group", + "origin": [2.75, 4.5, 6], + "color": 0, + "children": [ + 101, + { + "name": "group", + "origin": [7.875, 9.5, 13.4375], + "color": 0, + "children": [ + 102, + { + "name": "group", + "origin": [0.25, 1.6875, 4.5], + "color": 0, + "children": [103] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/surgebinding/resources/assets/surgebinding/models/block/rockbud_variant2.json b/src/surgebinding/resources/assets/surgebinding/models/block/rockbud_variant2.json new file mode 100644 index 000000000..354e4d97e --- /dev/null +++ b/src/surgebinding/resources/assets/surgebinding/models/block/rockbud_variant2.json @@ -0,0 +1,1308 @@ +{ + "credit": "Made with Blockbench", + "texture_size": [64, 64], + "textures": { + "0": "surgebinding:block/rockbud_variant", + "particle": "surgebinding:block/rockbud_variant" + }, + "elements": [ + { + "from": [6, 0, 6], + "to": [10, 1, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [15, 8, 15]}, + "faces": { + "north": {"uv": [5, 4.75, 6, 5], "texture": "#0"}, + "east": {"uv": [8, 6.75, 9, 7], "texture": "#0"}, + "south": {"uv": [8, 7.5, 9, 7.75], "texture": "#0"}, + "west": {"uv": [8.25, 2.75, 9.25, 3], "texture": "#0"}, + "up": {"uv": [7, 7, 6, 6], "texture": "#0"}, + "down": {"uv": [7, 4.75, 6, 5.75], "texture": "#0"} + } + }, + { + "from": [5, 1, 5], + "to": [11, 2, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [15, 9, 15]}, + "faces": { + "north": {"uv": [3.5, 7.25, 5, 7.5], "texture": "#0"}, + "east": {"uv": [0, 7.5, 1.5, 7.75], "texture": "#0"}, + "south": {"uv": [3.5, 7.5, 5, 7.75], "texture": "#0"}, + "west": {"uv": [5, 7.5, 6.5, 7.75], "texture": "#0"}, + "up": {"uv": [3.5, 3.5, 2, 2], "texture": "#0"}, + "down": {"uv": [3.5, 0, 2, 1.5], "texture": "#0"} + } + }, + { + "from": [4, 2, 4], + "to": [12, 4, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [15, 10, 15]}, + "faces": { + "north": {"uv": [6.25, 0, 8.25, 0.5], "texture": "#0"}, + "east": {"uv": [6.25, 0.5, 8.25, 1], "texture": "#0"}, + "south": {"uv": [6.25, 1, 8.25, 1.5], "texture": "#0"}, + "west": {"uv": [6.25, 1.5, 8.25, 2], "texture": "#0"}, + "up": {"uv": [2, 2, 0, 0], "texture": "#0"}, + "down": {"uv": [2, 2, 0, 4], "texture": "#0"} + } + }, + { + "from": [4.9375, 3.9375, 4.9375], + "to": [11.0625, 5.0625, 11.0625], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 4.5, 8]}, + "faces": { + "north": {"uv": [6.5, 7.5, 8, 7.75], "texture": "#0"}, + "east": {"uv": [7.5, 7, 9, 7.25], "texture": "#0"}, + "south": {"uv": [7.5, 7.25, 9, 7.5], "texture": "#0"}, + "west": {"uv": [0, 7.75, 1.5, 8], "texture": "#0"}, + "up": {"uv": [3.5, 5, 2, 3.5], "texture": "#0"}, + "down": {"uv": [5, 3.5, 3.5, 5], "texture": "#0"} + } + }, + { + "from": [0, 3, 4], + "to": [4, 4, 12], + "rotation": {"angle": 45, "axis": "z", "origin": [4, 3.5, 8]}, + "faces": { + "north": {"uv": [8.5, 4.5, 9.5, 4.75], "texture": "#0"}, + "east": {"uv": [6, 5.75, 8, 6], "texture": "#0"}, + "south": {"uv": [8.5, 8, 9.5, 8.25], "texture": "#0"}, + "west": {"uv": [6.25, 2, 8.25, 2.25], "texture": "#0"}, + "up": {"uv": [4.5, 2, 3.5, 0], "texture": "#0"}, + "down": {"uv": [1, 4, 0, 6], "texture": "#0"} + } + }, + { + "from": [-1.47487, 0.31802, 5], + "to": [1.52513, 1.31802, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [4.48744, 4.42678, 8]}, + "faces": { + "north": {"uv": [8, 10.5, 8.75, 10.75], "texture": "#0"}, + "east": {"uv": [1.5, 7.75, 3, 8], "texture": "#0"}, + "south": {"uv": [8.75, 10.5, 9.5, 10.75], "texture": "#0"}, + "west": {"uv": [3, 7.75, 4.5, 8], "texture": "#0"}, + "up": {"uv": [6.25, 1.5, 5.5, 0], "texture": "#0"}, + "down": {"uv": [6.25, 1.5, 5.5, 3], "texture": "#0"} + } + }, + { + "from": [12, 3, 4], + "to": [16, 4, 12], + "rotation": {"angle": -45, "axis": "z", "origin": [12, 3.5, 8]}, + "faces": { + "north": {"uv": [8.5, 8.25, 9.5, 8.5], "texture": "#0"}, + "east": {"uv": [6.25, 2.25, 8.25, 2.5], "texture": "#0"}, + "south": {"uv": [2.5, 8.75, 3.5, 9], "texture": "#0"}, + "west": {"uv": [6.25, 2.5, 8.25, 2.75], "texture": "#0"}, + "up": {"uv": [2, 6, 1, 4], "texture": "#0"}, + "down": {"uv": [5.5, 0, 4.5, 2], "texture": "#0"} + } + }, + { + "from": [14.47487, 0.31802, 5], + "to": [17.47487, 1.31802, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [11.51256, 4.42678, 8]}, + "faces": { + "north": {"uv": [9.5, 10.5, 10.25, 10.75], "texture": "#0"}, + "east": {"uv": [4.5, 7.75, 6, 8], "texture": "#0"}, + "south": {"uv": [10.25, 10.5, 11, 10.75], "texture": "#0"}, + "west": {"uv": [6, 7.75, 7.5, 8], "texture": "#0"}, + "up": {"uv": [0.75, 7.5, 0, 6], "texture": "#0"}, + "down": {"uv": [1.5, 6, 0.75, 7.5], "texture": "#0"} + } + }, + { + "from": [4, 3, 12], + "to": [12, 4, 16], + "rotation": {"angle": 45, "axis": "x", "origin": [8, 3.5, 12]}, + "faces": { + "north": {"uv": [6.25, 2.75, 8.25, 3], "texture": "#0"}, + "east": {"uv": [6, 8.75, 7, 9], "texture": "#0"}, + "south": {"uv": [6.5, 4, 8.5, 4.25], "texture": "#0"}, + "west": {"uv": [8.75, 0, 9.75, 0.25], "texture": "#0"}, + "up": {"uv": [5.5, 3, 3.5, 2], "texture": "#0"}, + "down": {"uv": [4, 5, 2, 6], "texture": "#0"} + } + }, + { + "from": [5, 0.31802, 14.47487], + "to": [11, 1.31802, 17.47487], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 4.42678, 11.51256]}, + "faces": { + "north": {"uv": [7.5, 7.75, 9, 8], "texture": "#0"}, + "east": {"uv": [10.5, 0.75, 11.25, 1], "texture": "#0"}, + "south": {"uv": [0, 8, 1.5, 8.25], "texture": "#0"}, + "west": {"uv": [10.5, 1, 11.25, 1.25], "texture": "#0"}, + "up": {"uv": [6.5, 4.75, 5, 4], "texture": "#0"}, + "down": {"uv": [3, 6, 1.5, 6.75], "texture": "#0"} + } + }, + { + "from": [4, 3, 0], + "to": [12, 4, 4], + "rotation": {"angle": -45, "axis": "x", "origin": [8, 3.5, 4]}, + "faces": { + "north": {"uv": [6.5, 4.25, 8.5, 4.5], "texture": "#0"}, + "east": {"uv": [8.75, 0.25, 9.75, 0.5], "texture": "#0"}, + "south": {"uv": [6.5, 4.5, 8.5, 4.75], "texture": "#0"}, + "west": {"uv": [8.75, 0.5, 9.75, 0.75], "texture": "#0"}, + "up": {"uv": [6, 6, 4, 5], "texture": "#0"}, + "down": {"uv": [7, 3, 5, 4], "texture": "#0"} + } + }, + { + "from": [5, 0.31802, -1.47487], + "to": [11, 1.31802, 1.52513], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 4.42678, 4.48744]}, + "faces": { + "north": {"uv": [1.5, 8, 3, 8.25], "texture": "#0"}, + "east": {"uv": [10.5, 1.25, 11.25, 1.5], "texture": "#0"}, + "south": {"uv": [3, 8, 4.5, 8.25], "texture": "#0"}, + "west": {"uv": [10.5, 1.5, 11.25, 1.75], "texture": "#0"}, + "up": {"uv": [4.5, 6.75, 3, 6], "texture": "#0"}, + "down": {"uv": [6, 6, 4.5, 6.75], "texture": "#0"} + } + }, + { + "from": [8, 5.6875, 6], + "to": [8, 6.6875, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [16, 13.6875, 16]}, + "faces": { + "north": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "east": {"uv": [8.75, 3, 9.75, 3.25], "texture": "#0"}, + "south": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "west": {"uv": [8.75, 3.25, 9.75, 3.5], "texture": "#0"}, + "up": {"uv": [0, 1, 0, 0], "texture": "#0"}, + "down": {"uv": [0, 0, 0, 1], "texture": "#0"} + } + }, + { + "from": [8, 5.6875, 6], + "to": [8, 6.6875, 10], + "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 6.1875, 8]}, + "faces": { + "north": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "east": {"uv": [8.75, 3.5, 9.75, 3.75], "texture": "#0"}, + "south": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "west": {"uv": [8.75, 3.75, 9.75, 4], "texture": "#0"}, + "up": {"uv": [0, 1, 0, 0], "texture": "#0"}, + "down": {"uv": [0, 0, 0, 1], "texture": "#0"} + } + }, + { + "from": [8, 5.6875, 6], + "to": [8, 6.6875, 10], + "rotation": {"angle": 45, "axis": "y", "origin": [8, 6.1875, 8]}, + "faces": { + "north": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "east": {"uv": [8.75, 4.75, 9.75, 5], "texture": "#0"}, + "south": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "west": {"uv": [8.75, 5, 9.75, 5.25], "texture": "#0"}, + "up": {"uv": [0, 1, 0, 0], "texture": "#0"}, + "down": {"uv": [0, 0, 0, 1], "texture": "#0"} + } + }, + { + "from": [6, 5.6875, 8], + "to": [10, 6.6875, 8], + "rotation": {"angle": -22.5, "axis": "y", "origin": [8, 6.1875, 8]}, + "faces": { + "north": {"uv": [8.75, 5.25, 9.75, 5.5], "texture": "#0"}, + "east": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "south": {"uv": [8.75, 5.5, 9.75, 5.75], "texture": "#0"}, + "west": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "up": {"uv": [1, 0, 0, 0], "texture": "#0"}, + "down": {"uv": [1, 0, 0, 0], "texture": "#0"} + } + }, + { + "from": [6, 5.6875, 8], + "to": [10, 6.6875, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 6.1875, 8]}, + "faces": { + "north": {"uv": [8.75, 5.75, 9.75, 6], "texture": "#0"}, + "east": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "south": {"uv": [8.75, 6, 9.75, 6.25], "texture": "#0"}, + "west": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "up": {"uv": [1, 0, 0, 0], "texture": "#0"}, + "down": {"uv": [1, 0, 0, 0], "texture": "#0"} + } + }, + { + "from": [6, 5.6875, 8], + "to": [10, 6.6875, 8], + "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 6.1875, 8]}, + "faces": { + "north": {"uv": [8.75, 6.25, 9.75, 6.5], "texture": "#0"}, + "east": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "south": {"uv": [8.75, 6.5, 9.75, 6.75], "texture": "#0"}, + "west": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "up": {"uv": [1, 0, 0, 0], "texture": "#0"}, + "down": {"uv": [1, 0, 0, 0], "texture": "#0"} + } + }, + { + "from": [6, 5.6875, 8], + "to": [10, 6.6875, 8], + "rotation": {"angle": 45, "axis": "y", "origin": [8, 6.1875, 8]}, + "faces": { + "north": {"uv": [1, 9, 2, 9.25], "texture": "#0"}, + "east": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "south": {"uv": [2, 9, 3, 9.25], "texture": "#0"}, + "west": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "up": {"uv": [1, 0, 0, 0], "texture": "#0"}, + "down": {"uv": [1, 0, 0, 0], "texture": "#0"} + } + }, + { + "from": [8, 5.6875, 6], + "to": [8, 6.6875, 10], + "rotation": {"angle": -22.5, "axis": "y", "origin": [8, 6.1875, 8]}, + "faces": { + "north": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "east": {"uv": [3, 9, 4, 9.25], "texture": "#0"}, + "south": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "west": {"uv": [4, 9, 5, 9.25], "texture": "#0"}, + "up": {"uv": [0, 1, 0, 0], "texture": "#0"}, + "down": {"uv": [0, 0, 0, 1], "texture": "#0"} + } + }, + { + "from": [6, 5.3125, 9], + "to": [6, 6.3125, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [14, 13.3125, 19]}, + "faces": { + "north": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "east": {"uv": [0, 9.5, 1, 9.75], "texture": "#0"}, + "south": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "west": {"uv": [1, 9.5, 2, 9.75], "texture": "#0"}, + "up": {"uv": [0, 1, 0, 0], "texture": "#0"}, + "down": {"uv": [0, 0, 0, 1], "texture": "#0"} + } + }, + { + "from": [6, 5.3125, 9], + "to": [6, 6.3125, 13], + "rotation": {"angle": 22.5, "axis": "y", "origin": [6, 5.8125, 11]}, + "faces": { + "north": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "east": {"uv": [2, 9.5, 3, 9.75], "texture": "#0"}, + "south": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "west": {"uv": [3, 9.5, 4, 9.75], "texture": "#0"}, + "up": {"uv": [0, 1, 0, 0], "texture": "#0"}, + "down": {"uv": [0, 0, 0, 1], "texture": "#0"} + } + }, + { + "from": [6, 5.3125, 9], + "to": [6, 6.3125, 13], + "rotation": {"angle": 45, "axis": "y", "origin": [6, 5.8125, 11]}, + "faces": { + "north": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "east": {"uv": [4, 9.5, 5, 9.75], "texture": "#0"}, + "south": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "west": {"uv": [5, 9.5, 6, 9.75], "texture": "#0"}, + "up": {"uv": [0, 1, 0, 0], "texture": "#0"}, + "down": {"uv": [0, 0, 0, 1], "texture": "#0"} + } + }, + { + "from": [4, 5.3125, 11], + "to": [8, 6.3125, 11], + "rotation": {"angle": -22.5, "axis": "y", "origin": [6, 5.8125, 11]}, + "faces": { + "north": {"uv": [6, 9.5, 7, 9.75], "texture": "#0"}, + "east": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "south": {"uv": [7, 9.5, 8, 9.75], "texture": "#0"}, + "west": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "up": {"uv": [1, 0, 0, 0], "texture": "#0"}, + "down": {"uv": [1, 0, 0, 0], "texture": "#0"} + } + }, + { + "from": [4, 5.3125, 11], + "to": [8, 6.3125, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [6, 5.8125, 11]}, + "faces": { + "north": {"uv": [8, 9.5, 9, 9.75], "texture": "#0"}, + "east": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "south": {"uv": [9, 9.5, 10, 9.75], "texture": "#0"}, + "west": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "up": {"uv": [1, 0, 0, 0], "texture": "#0"}, + "down": {"uv": [1, 0, 0, 0], "texture": "#0"} + } + }, + { + "from": [4, 5.3125, 11], + "to": [8, 6.3125, 11], + "rotation": {"angle": 22.5, "axis": "y", "origin": [6, 5.8125, 11]}, + "faces": { + "north": {"uv": [9.5, 4.5, 10.5, 4.75], "texture": "#0"}, + "east": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "south": {"uv": [9.5, 8, 10.5, 8.25], "texture": "#0"}, + "west": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "up": {"uv": [1, 0, 0, 0], "texture": "#0"}, + "down": {"uv": [1, 0, 0, 0], "texture": "#0"} + } + }, + { + "from": [4, 5.3125, 11], + "to": [8, 6.3125, 11], + "rotation": {"angle": 45, "axis": "y", "origin": [6, 5.8125, 11]}, + "faces": { + "north": {"uv": [9.5, 8.25, 10.5, 8.5], "texture": "#0"}, + "east": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "south": {"uv": [0, 9.75, 1, 10], "texture": "#0"}, + "west": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "up": {"uv": [1, 0, 0, 0], "texture": "#0"}, + "down": {"uv": [1, 0, 0, 0], "texture": "#0"} + } + }, + { + "from": [6, 5.3125, 9], + "to": [6, 6.3125, 13], + "rotation": {"angle": -22.5, "axis": "y", "origin": [6, 5.8125, 11]}, + "faces": { + "north": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "east": {"uv": [1, 9.75, 2, 10], "texture": "#0"}, + "south": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "west": {"uv": [2, 9.75, 3, 10], "texture": "#0"}, + "up": {"uv": [0, 1, 0, 0], "texture": "#0"}, + "down": {"uv": [0, 0, 0, 1], "texture": "#0"} + } + }, + { + "from": [5, 4.75, 6], + "to": [5, 6.75, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [13, 13.75, 16]}, + "faces": { + "north": {"uv": [0, 0, 0, 0.5], "texture": "#0"}, + "east": {"uv": [2, 1.5, 3, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 0, 0.5], "texture": "#0"}, + "west": {"uv": [3.5, 3, 4.5, 3.5], "texture": "#0"}, + "up": {"uv": [0, 1, 0, 0], "texture": "#0"}, + "down": {"uv": [0, 0, 0, 1], "texture": "#0"} + } + }, + { + "from": [5, 4.75, 6], + "to": [5, 6.75, 10], + "rotation": {"angle": 22.5, "axis": "y", "origin": [5, 6.25, 8]}, + "faces": { + "north": {"uv": [0, 0, 0, 0.5], "texture": "#0"}, + "east": {"uv": [1.5, 6.75, 2.5, 7.25], "texture": "#0"}, + "south": {"uv": [0, 0, 0, 0.5], "texture": "#0"}, + "west": {"uv": [2.5, 6.75, 3.5, 7.25], "texture": "#0"}, + "up": {"uv": [0, 1, 0, 0], "texture": "#0"}, + "down": {"uv": [0, 0, 0, 1], "texture": "#0"} + } + }, + { + "from": [5, 4.75, 6], + "to": [5, 6.75, 10], + "rotation": {"angle": 45, "axis": "y", "origin": [5, 6.25, 8]}, + "faces": { + "north": {"uv": [0, 0, 0, 0.5], "texture": "#0"}, + "east": {"uv": [3.5, 6.75, 4.5, 7.25], "texture": "#0"}, + "south": {"uv": [0, 0, 0, 0.5], "texture": "#0"}, + "west": {"uv": [4.5, 6.75, 5.5, 7.25], "texture": "#0"}, + "up": {"uv": [0, 1, 0, 0], "texture": "#0"}, + "down": {"uv": [0, 0, 0, 1], "texture": "#0"} + } + }, + { + "from": [3, 4.75, 8], + "to": [7, 6.75, 8], + "rotation": {"angle": -22.5, "axis": "y", "origin": [5, 6.25, 8]}, + "faces": { + "north": {"uv": [5.5, 7, 6.5, 7.5], "texture": "#0"}, + "east": {"uv": [0, 0, 0, 0.5], "texture": "#0"}, + "south": {"uv": [6.5, 7, 7.5, 7.5], "texture": "#0"}, + "west": {"uv": [0, 0, 0, 0.5], "texture": "#0"}, + "up": {"uv": [1, 0, 0, 0], "texture": "#0"}, + "down": {"uv": [1, 0, 0, 0], "texture": "#0"} + } + }, + { + "from": [3, 4.75, 8], + "to": [7, 6.75, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [5, 6.25, 8]}, + "faces": { + "north": {"uv": [7, 3, 8, 3.5], "texture": "#0"}, + "east": {"uv": [0, 0, 0, 0.5], "texture": "#0"}, + "south": {"uv": [7, 3.5, 8, 4], "texture": "#0"}, + "west": {"uv": [0, 0, 0, 0.5], "texture": "#0"}, + "up": {"uv": [1, 0, 0, 0], "texture": "#0"}, + "down": {"uv": [1, 0, 0, 0], "texture": "#0"} + } + }, + { + "from": [3, 4.75, 8], + "to": [7, 6.75, 8], + "rotation": {"angle": 22.5, "axis": "y", "origin": [5, 6.25, 8]}, + "faces": { + "north": {"uv": [7, 4.75, 8, 5.25], "texture": "#0"}, + "east": {"uv": [0, 0, 0, 0.5], "texture": "#0"}, + "south": {"uv": [7, 5.25, 8, 5.75], "texture": "#0"}, + "west": {"uv": [0, 0, 0, 0.5], "texture": "#0"}, + "up": {"uv": [1, 0, 0, 0], "texture": "#0"}, + "down": {"uv": [1, 0, 0, 0], "texture": "#0"} + } + }, + { + "from": [3, 4.75, 8], + "to": [7, 6.75, 8], + "rotation": {"angle": 45, "axis": "y", "origin": [5, 6.25, 8]}, + "faces": { + "north": {"uv": [7, 6, 8, 6.5], "texture": "#0"}, + "east": {"uv": [0, 0, 0, 0.5], "texture": "#0"}, + "south": {"uv": [7, 6.5, 8, 7], "texture": "#0"}, + "west": {"uv": [0, 0, 0, 0.5], "texture": "#0"}, + "up": {"uv": [1, 0, 0, 0], "texture": "#0"}, + "down": {"uv": [1, 0, 0, 0], "texture": "#0"} + } + }, + { + "from": [5, 4.75, 6], + "to": [5, 6.75, 10], + "rotation": {"angle": -22.5, "axis": "y", "origin": [5, 6.25, 8]}, + "faces": { + "north": {"uv": [0, 0, 0, 0.5], "texture": "#0"}, + "east": {"uv": [1.5, 7.25, 2.5, 7.75], "texture": "#0"}, + "south": {"uv": [0, 0, 0, 0.5], "texture": "#0"}, + "west": {"uv": [2.5, 7.25, 3.5, 7.75], "texture": "#0"}, + "up": {"uv": [0, 1, 0, 0], "texture": "#0"}, + "down": {"uv": [0, 0, 0, 1], "texture": "#0"} + } + }, + { + "from": [5, 4, 5], + "to": [7, 6, 7], + "rotation": {"angle": 0, "axis": "y", "origin": [14, 12, 13]}, + "faces": { + "north": {"uv": [3, 1.5, 3.5, 2], "texture": "#0"}, + "east": {"uv": [4.5, 3, 5, 3.5], "texture": "#0"}, + "south": {"uv": [9.75, 5.25, 10.25, 5.75], "texture": "#0"}, + "west": {"uv": [9.75, 5.75, 10.25, 6.25], "texture": "#0"}, + "up": {"uv": [10.25, 6.75, 9.75, 6.25], "texture": "#0"}, + "down": {"uv": [0.5, 10, 0, 10.5], "texture": "#0"} + } + }, + { + "from": [5.25, 4, 3.25], + "to": [6.75, 5.5, 5.75], + "rotation": {"angle": 0, "axis": "y", "origin": [6, 4.75, 5]}, + "faces": { + "north": {"uv": [0.5, 10, 1, 10.5], "texture": "#0"}, + "east": {"uv": [4.5, 8, 5.25, 8.5], "texture": "#0"}, + "south": {"uv": [1, 10, 1.5, 10.5], "texture": "#0"}, + "west": {"uv": [5.25, 8, 6, 8.5], "texture": "#0"}, + "up": {"uv": [6.5, 8.75, 6, 8], "texture": "#0"}, + "down": {"uv": [7, 8, 6.5, 8.75], "texture": "#0"} + } + }, + { + "from": [5.375, 3.875, 0.6875], + "to": [6.625, 5.125, 3.9375], + "rotation": {"angle": -45, "axis": "x", "origin": [6, 4.5, 3.3125]}, + "faces": { + "north": {"uv": [11.25, 4.5, 11.5, 4.75], "texture": "#0"}, + "east": {"uv": [10.5, 2.25, 11.25, 2.5], "texture": "#0"}, + "south": {"uv": [11.25, 4.75, 11.5, 5], "texture": "#0"}, + "west": {"uv": [10.5, 2.5, 11.25, 2.75], "texture": "#0"}, + "up": {"uv": [1.75, 11.5, 1.5, 10.75], "texture": "#0"}, + "down": {"uv": [2, 10.75, 1.75, 11.5], "texture": "#0"} + } + }, + { + "from": [4.375, 1.9375, 1], + "to": [6.5, 3.0625, 2.125], + "rotation": {"angle": 0, "axis": "y", "origin": [13.4375, 10, 9.0625]}, + "faces": { + "north": {"uv": [5.5, 6.75, 6, 7], "texture": "#0"}, + "east": {"uv": [11.25, 5, 11.5, 5.25], "texture": "#0"}, + "south": {"uv": [5, 7.25, 5.5, 7.5], "texture": "#0"}, + "west": {"uv": [11.25, 5.25, 11.5, 5.5], "texture": "#0"}, + "up": {"uv": [1.5, 9, 1, 8.75], "texture": "#0"}, + "down": {"uv": [4, 8.75, 3.5, 9], "texture": "#0"} + } + }, + { + "from": [2.6875, 4, 5.25], + "to": [5.1875, 5.5, 6.75], + "rotation": {"angle": 0, "axis": "y", "origin": [4.4375, 4.75, 6]}, + "faces": { + "north": {"uv": [7, 8, 7.75, 8.5], "texture": "#0"}, + "east": {"uv": [1.5, 10, 2, 10.5], "texture": "#0"}, + "south": {"uv": [7.75, 8, 8.5, 8.5], "texture": "#0"}, + "west": {"uv": [2, 10, 2.5, 10.5], "texture": "#0"}, + "up": {"uv": [8.75, 3.5, 8, 3], "texture": "#0"}, + "down": {"uv": [8.75, 3.5, 8, 4], "texture": "#0"} + } + }, + { + "from": [-0.875, 3.875, 5.375], + "to": [3.375, 5.125, 6.625], + "rotation": {"angle": 45, "axis": "z", "origin": [2.75, 4.5, 6]}, + "faces": { + "north": {"uv": [2.5, 10, 3.5, 10.25], "texture": "#0"}, + "east": {"uv": [11.25, 8.25, 11.5, 8.5], "texture": "#0"}, + "south": {"uv": [3.5, 10, 4.5, 10.25], "texture": "#0"}, + "west": {"uv": [11.25, 9.5, 11.5, 9.75], "texture": "#0"}, + "up": {"uv": [5.5, 10.25, 4.5, 10], "texture": "#0"}, + "down": {"uv": [6.5, 10, 5.5, 10.25], "texture": "#0"} + } + }, + { + "from": [-0.3125, 1.4375, 4.375], + "to": [0.8125, 2.5625, 6.5], + "rotation": {"angle": 0, "axis": "y", "origin": [7.75, 9.5, 13.4375]}, + "faces": { + "north": {"uv": [11.25, 9.75, 11.5, 10], "texture": "#0"}, + "east": {"uv": [10.75, 7.25, 11.25, 7.5], "texture": "#0"}, + "south": {"uv": [11.25, 10, 11.5, 10.25], "texture": "#0"}, + "west": {"uv": [10.75, 7.5, 11.25, 7.75], "texture": "#0"}, + "up": {"uv": [11, 9, 10.75, 8.5], "texture": "#0"}, + "down": {"uv": [11, 9, 10.75, 9.5], "texture": "#0"} + } + }, + { + "from": [-0.25, 1.1875, 3], + "to": [0.75, 2.1875, 5], + "rotation": {"angle": -45, "axis": "x", "origin": [0.25, 1.6875, 4.5]}, + "faces": { + "north": {"uv": [11.25, 10.25, 11.5, 10.5], "texture": "#0"}, + "east": {"uv": [10.75, 9.5, 11.25, 9.75], "texture": "#0"}, + "south": {"uv": [0, 11.5, 0.25, 11.75], "texture": "#0"}, + "west": {"uv": [10.75, 9.75, 11.25, 10], "texture": "#0"}, + "up": {"uv": [0.25, 11.5, 0, 11], "texture": "#0"}, + "down": {"uv": [0.5, 11, 0.25, 11.5], "texture": "#0"} + } + }, + { + "from": [9, 4, 5], + "to": [11, 6, 7], + "rotation": {"angle": 0, "axis": "y", "origin": [3, 12, 14]}, + "faces": { + "north": {"uv": [6.5, 10, 7, 10.5], "texture": "#0"}, + "east": {"uv": [7, 10, 7.5, 10.5], "texture": "#0"}, + "south": {"uv": [7.5, 10, 8, 10.5], "texture": "#0"}, + "west": {"uv": [8, 10, 8.5, 10.5], "texture": "#0"}, + "up": {"uv": [9, 10.5, 8.5, 10], "texture": "#0"}, + "down": {"uv": [9.5, 10, 9, 10.5], "texture": "#0"} + } + }, + { + "from": [10.25, 4, 5.25], + "to": [12.75, 5.5, 6.75], + "rotation": {"angle": 0, "axis": "y", "origin": [11, 4.75, 6]}, + "faces": { + "north": {"uv": [8, 4.75, 8.75, 5.25], "texture": "#0"}, + "east": {"uv": [9.5, 10, 10, 10.5], "texture": "#0"}, + "south": {"uv": [8, 5.25, 8.75, 5.75], "texture": "#0"}, + "west": {"uv": [10, 10, 10.5, 10.5], "texture": "#0"}, + "up": {"uv": [8.75, 6.25, 8, 5.75], "texture": "#0"}, + "down": {"uv": [8.75, 6.25, 8, 6.75], "texture": "#0"} + } + }, + { + "from": [12.0625, 3.875, 5.375], + "to": [15.3125, 5.125, 6.625], + "rotation": {"angle": -45, "axis": "z", "origin": [12.6875, 4.5, 6]}, + "faces": { + "north": {"uv": [10.5, 10.25, 11.25, 10.5], "texture": "#0"}, + "east": {"uv": [0.75, 11.5, 1, 11.75], "texture": "#0"}, + "south": {"uv": [2, 10.75, 2.75, 11], "texture": "#0"}, + "west": {"uv": [1.5, 11.5, 1.75, 11.75], "texture": "#0"}, + "up": {"uv": [3.5, 11, 2.75, 10.75], "texture": "#0"}, + "down": {"uv": [4.25, 10.75, 3.5, 11], "texture": "#0"} + } + }, + { + "from": [13.875, 1.9375, 4.375], + "to": [15, 3.0625, 6.5], + "rotation": {"angle": 0, "axis": "y", "origin": [6.9375, 10, 13.4375]}, + "faces": { + "north": {"uv": [1.75, 11.5, 2, 11.75], "texture": "#0"}, + "east": {"uv": [2.5, 11, 3, 11.25], "texture": "#0"}, + "south": {"uv": [2, 11.5, 2.25, 11.75], "texture": "#0"}, + "west": {"uv": [3, 11, 3.5, 11.25], "texture": "#0"}, + "up": {"uv": [3.75, 11.5, 3.5, 11], "texture": "#0"}, + "down": {"uv": [4, 11, 3.75, 11.5], "texture": "#0"} + } + }, + { + "from": [13.9375, 1.6875, 2], + "to": [14.9375, 2.6875, 5], + "rotation": {"angle": -45, "axis": "x", "origin": [14.4375, 2.1875, 4.5]}, + "faces": { + "north": {"uv": [2.25, 11.5, 2.5, 11.75], "texture": "#0"}, + "east": {"uv": [4.25, 10.75, 5, 11], "texture": "#0"}, + "south": {"uv": [2.5, 11.5, 2.75, 11.75], "texture": "#0"}, + "west": {"uv": [5, 10.75, 5.75, 11], "texture": "#0"}, + "up": {"uv": [6, 11.5, 5.75, 10.75], "texture": "#0"}, + "down": {"uv": [6.25, 10.75, 6, 11.5], "texture": "#0"} + } + }, + { + "from": [9.25, 4, 2.6875], + "to": [10.75, 5.5, 5.1875], + "rotation": {"angle": 0, "axis": "y", "origin": [10, 4.75, 4.4375]}, + "faces": { + "north": {"uv": [10, 0.75, 10.5, 1.25], "texture": "#0"}, + "east": {"uv": [0, 8.25, 0.75, 8.75], "texture": "#0"}, + "south": {"uv": [10, 1.25, 10.5, 1.75], "texture": "#0"}, + "west": {"uv": [0.75, 8.25, 1.5, 8.75], "texture": "#0"}, + "up": {"uv": [2, 9, 1.5, 8.25], "texture": "#0"}, + "down": {"uv": [2.5, 8.25, 2, 9], "texture": "#0"} + } + }, + { + "from": [9.375, 3.875, -0.875], + "to": [10.625, 5.125, 3.375], + "rotation": {"angle": -45, "axis": "x", "origin": [10, 4.5, 2.75]}, + "faces": { + "north": {"uv": [3.25, 11.5, 3.5, 11.75], "texture": "#0"}, + "east": {"uv": [10, 1.75, 11, 2], "texture": "#0"}, + "south": {"uv": [3.5, 11.5, 3.75, 11.75], "texture": "#0"}, + "west": {"uv": [10, 2, 11, 2.25], "texture": "#0"}, + "up": {"uv": [10.25, 7.75, 10, 6.75], "texture": "#0"}, + "down": {"uv": [10.25, 9, 10, 10], "texture": "#0"} + } + }, + { + "from": [9.5, 1.4375, -0.3125], + "to": [11.625, 2.5625, 0.8125], + "rotation": {"angle": 0, "axis": "y", "origin": [2.5625, 9.5, 7.75]}, + "faces": { + "north": {"uv": [6.25, 11, 6.75, 11.25], "texture": "#0"}, + "east": {"uv": [3.75, 11.5, 4, 11.75], "texture": "#0"}, + "south": {"uv": [8, 11, 8.5, 11.25], "texture": "#0"}, + "west": {"uv": [4.5, 11.5, 4.75, 11.75], "texture": "#0"}, + "up": {"uv": [9, 11.25, 8.5, 11], "texture": "#0"}, + "down": {"uv": [9.5, 11, 9, 11.25], "texture": "#0"} + } + }, + { + "from": [9, 4, 9], + "to": [11, 6, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [2, 12, 3]}, + "faces": { + "north": {"uv": [10, 2.25, 10.5, 2.75], "texture": "#0"}, + "east": {"uv": [2.5, 10.25, 3, 10.75], "texture": "#0"}, + "south": {"uv": [3, 10.25, 3.5, 10.75], "texture": "#0"}, + "west": {"uv": [3.5, 10.25, 4, 10.75], "texture": "#0"}, + "up": {"uv": [4.5, 10.75, 4, 10.25], "texture": "#0"}, + "down": {"uv": [5, 10.25, 4.5, 10.75], "texture": "#0"} + } + }, + { + "from": [9.25, 4, 10.25], + "to": [10.75, 5.5, 12.75], + "rotation": {"angle": 0, "axis": "y", "origin": [10, 4.75, 11]}, + "faces": { + "north": {"uv": [5, 10.25, 5.5, 10.75], "texture": "#0"}, + "east": {"uv": [2.5, 8.25, 3.25, 8.75], "texture": "#0"}, + "south": {"uv": [5.5, 10.25, 6, 10.75], "texture": "#0"}, + "west": {"uv": [3.25, 8.25, 4, 8.75], "texture": "#0"}, + "up": {"uv": [4.5, 9, 4, 8.25], "texture": "#0"}, + "down": {"uv": [8.75, 0, 8.25, 0.75], "texture": "#0"} + } + }, + { + "from": [9.375, 3.875, 12.0625], + "to": [10.625, 5.125, 15.3125], + "rotation": {"angle": 45, "axis": "x", "origin": [10, 4.5, 12.6875]}, + "faces": { + "north": {"uv": [5.75, 11.5, 6, 11.75], "texture": "#0"}, + "east": {"uv": [6.25, 10.75, 7, 11], "texture": "#0"}, + "south": {"uv": [6, 11.5, 6.25, 11.75], "texture": "#0"}, + "west": {"uv": [8, 10.75, 8.75, 11], "texture": "#0"}, + "up": {"uv": [7.25, 11.5, 7, 10.75], "texture": "#0"}, + "down": {"uv": [7.5, 10.75, 7.25, 11.5], "texture": "#0"} + } + }, + { + "from": [9.5, 1.9375, 13.875], + "to": [11.625, 3.0625, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [2.5625, 10, 6.9375]}, + "faces": { + "north": {"uv": [11, 6.25, 11.5, 6.5], "texture": "#0"}, + "east": {"uv": [6.25, 11.5, 6.5, 11.75], "texture": "#0"}, + "south": {"uv": [11, 6.5, 11.5, 6.75], "texture": "#0"}, + "west": {"uv": [6.5, 11.5, 6.75, 11.75], "texture": "#0"}, + "up": {"uv": [11.5, 7, 11, 6.75], "texture": "#0"}, + "down": {"uv": [11.5, 7, 11, 7.25], "texture": "#0"} + } + }, + { + "from": [10.8125, 4, 9.25], + "to": [13.3125, 5.5, 10.75], + "rotation": {"angle": 0, "axis": "y", "origin": [11.5625, 4.75, 10]}, + "faces": { + "north": {"uv": [8.25, 0.75, 9, 1.25], "texture": "#0"}, + "east": {"uv": [6, 10.25, 6.5, 10.75], "texture": "#0"}, + "south": {"uv": [8.25, 1.25, 9, 1.75], "texture": "#0"}, + "west": {"uv": [10.25, 4, 10.75, 4.5], "texture": "#0"}, + "up": {"uv": [9, 2.25, 8.25, 1.75], "texture": "#0"}, + "down": {"uv": [9, 2.25, 8.25, 2.75], "texture": "#0"} + } + }, + { + "from": [12.625, 3.875, 9.375], + "to": [16.875, 5.125, 10.625], + "rotation": {"angle": -45, "axis": "z", "origin": [13.25, 4.5, 10]}, + "faces": { + "north": {"uv": [10, 7.75, 11, 8], "texture": "#0"}, + "east": {"uv": [7.75, 11.5, 8, 11.75], "texture": "#0"}, + "south": {"uv": [10.25, 2.75, 11.25, 3], "texture": "#0"}, + "west": {"uv": [8.5, 11.5, 8.75, 11.75], "texture": "#0"}, + "up": {"uv": [11.25, 5.5, 10.25, 5.25], "texture": "#0"}, + "down": {"uv": [11.25, 5.5, 10.25, 5.75], "texture": "#0"} + } + }, + { + "from": [15.1875, 1.4375, 9.5], + "to": [16.3125, 2.5625, 11.625], + "rotation": {"angle": 0, "axis": "y", "origin": [8.25, 9.5, 2.5625]}, + "faces": { + "north": {"uv": [8.75, 11.5, 9, 11.75], "texture": "#0"}, + "east": {"uv": [11, 9.25, 11.5, 9.5], "texture": "#0"}, + "south": {"uv": [9, 11.5, 9.25, 11.75], "texture": "#0"}, + "west": {"uv": [11, 10.5, 11.5, 10.75], "texture": "#0"}, + "up": {"uv": [5.75, 11.5, 5.5, 11], "texture": "#0"}, + "down": {"uv": [7, 11, 6.75, 11.5], "texture": "#0"} + } + }, + { + "from": [15.25, 1.1875, 11], + "to": [16.25, 2.1875, 13], + "rotation": {"angle": 45, "axis": "x", "origin": [15.75, 1.6875, 11.5]}, + "faces": { + "north": {"uv": [9.25, 11.5, 9.5, 11.75], "texture": "#0"}, + "east": {"uv": [11, 10.75, 11.5, 11], "texture": "#0"}, + "south": {"uv": [10, 11.5, 10.25, 11.75], "texture": "#0"}, + "west": {"uv": [0.5, 11.25, 1, 11.5], "texture": "#0"}, + "up": {"uv": [1.25, 11.75, 1, 11.25], "texture": "#0"}, + "down": {"uv": [1.5, 11.25, 1.25, 11.75], "texture": "#0"} + } + }, + { + "from": [5, 4, 9], + "to": [7, 6, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [13, 12, 2]}, + "faces": { + "north": {"uv": [10.25, 5.75, 10.75, 6.25], "texture": "#0"}, + "east": {"uv": [10.25, 6.25, 10.75, 6.75], "texture": "#0"}, + "south": {"uv": [10.25, 6.75, 10.75, 7.25], "texture": "#0"}, + "west": {"uv": [10.25, 7.25, 10.75, 7.75], "texture": "#0"}, + "up": {"uv": [10.75, 9, 10.25, 8.5], "texture": "#0"}, + "down": {"uv": [10.75, 9, 10.25, 9.5], "texture": "#0"} + } + }, + { + "from": [3.25, 4, 9.25], + "to": [5.75, 5.5, 10.75], + "rotation": {"angle": 0, "axis": "y", "origin": [5, 4.75, 10]}, + "faces": { + "north": {"uv": [4.5, 8.5, 5.25, 9], "texture": "#0"}, + "east": {"uv": [10.25, 9.5, 10.75, 10], "texture": "#0"}, + "south": {"uv": [5.25, 8.5, 6, 9], "texture": "#0"}, + "west": {"uv": [0, 10.5, 0.5, 11], "texture": "#0"}, + "up": {"uv": [7.75, 9, 7, 8.5], "texture": "#0"}, + "down": {"uv": [8.5, 8.5, 7.75, 9], "texture": "#0"} + } + }, + { + "from": [0.6875, 3.875, 9.375], + "to": [3.9375, 5.125, 10.625], + "rotation": {"angle": 45, "axis": "z", "origin": [3.3125, 4.5, 10]}, + "faces": { + "north": {"uv": [10.75, 0.25, 11.5, 0.5], "texture": "#0"}, + "east": {"uv": [10.75, 11.5, 11, 11.75], "texture": "#0"}, + "south": {"uv": [10.75, 0.5, 11.5, 0.75], "texture": "#0"}, + "west": {"uv": [11, 11.5, 11.25, 11.75], "texture": "#0"}, + "up": {"uv": [11.5, 3.25, 10.75, 3], "texture": "#0"}, + "down": {"uv": [11.5, 3.25, 10.75, 3.5], "texture": "#0"} + } + }, + { + "from": [1, 1.9375, 9.5], + "to": [2.125, 3.0625, 11.625], + "rotation": {"angle": 0, "axis": "y", "origin": [9.0625, 10, 2.5625]}, + "faces": { + "north": {"uv": [11.25, 11.5, 11.5, 11.75], "texture": "#0"}, + "east": {"uv": [4.5, 11.25, 5, 11.5], "texture": "#0"}, + "south": {"uv": [11.5, 11.5, 11.75, 11.75], "texture": "#0"}, + "west": {"uv": [6.25, 11.25, 6.75, 11.5], "texture": "#0"}, + "up": {"uv": [8.25, 11.75, 8, 11.25], "texture": "#0"}, + "down": {"uv": [8.5, 11.25, 8.25, 11.75], "texture": "#0"} + } + }, + { + "from": [1.0625, 1.6875, 11], + "to": [2.0625, 2.6875, 14], + "rotation": {"angle": 45, "axis": "x", "origin": [1.5625, 2.1875, 11.5]}, + "faces": { + "north": {"uv": [11.5, 0, 11.75, 0.25], "texture": "#0"}, + "east": {"uv": [10.75, 3.5, 11.5, 3.75], "texture": "#0"}, + "south": {"uv": [11.5, 0.25, 11.75, 0.5], "texture": "#0"}, + "west": {"uv": [10.75, 3.75, 11.5, 4], "texture": "#0"}, + "up": {"uv": [11, 6.5, 10.75, 5.75], "texture": "#0"}, + "down": {"uv": [11, 6.5, 10.75, 7.25], "texture": "#0"} + } + }, + { + "from": [5.25, 4, 10.8125], + "to": [6.75, 5.5, 13.3125], + "rotation": {"angle": 0, "axis": "y", "origin": [6, 4.75, 11.5625]}, + "faces": { + "north": {"uv": [0.5, 10.5, 1, 11], "texture": "#0"}, + "east": {"uv": [8.5, 8.5, 9.25, 9], "texture": "#0"}, + "south": {"uv": [1, 10.5, 1.5, 11], "texture": "#0"}, + "west": {"uv": [8.5, 4, 9.25, 4.5], "texture": "#0"}, + "up": {"uv": [0.5, 9.5, 0, 8.75], "texture": "#0"}, + "down": {"uv": [1, 8.75, 0.5, 9.5], "texture": "#0"} + } + }, + { + "from": [5.375, 3.875, 12.625], + "to": [6.625, 5.125, 16.875], + "rotation": {"angle": 45, "axis": "x", "origin": [6, 4.5, 13.25]}, + "faces": { + "north": {"uv": [11.5, 2, 11.75, 2.25], "texture": "#0"}, + "east": {"uv": [1.5, 10.5, 2.5, 10.75], "texture": "#0"}, + "south": {"uv": [11.5, 3, 11.75, 3.25], "texture": "#0"}, + "west": {"uv": [6.5, 10.5, 7.5, 10.75], "texture": "#0"}, + "up": {"uv": [7.75, 11.5, 7.5, 10.5], "texture": "#0"}, + "down": {"uv": [8, 10.5, 7.75, 11.5], "texture": "#0"} + } + }, + { + "from": [4.375, 1.4375, 15.1875], + "to": [6.5, 2.5625, 16.3125], + "rotation": {"angle": 0, "axis": "y", "origin": [13.4375, 9.5, 8.25]}, + "faces": { + "north": {"uv": [10, 11.25, 10.5, 11.5], "texture": "#0"}, + "east": {"uv": [11.5, 3.25, 11.75, 3.5], "texture": "#0"}, + "south": {"uv": [10.5, 11.25, 11, 11.5], "texture": "#0"}, + "west": {"uv": [11.5, 3.5, 11.75, 3.75], "texture": "#0"}, + "up": {"uv": [11.5, 11.5, 11, 11.25], "texture": "#0"}, + "down": {"uv": [11.75, 0.75, 11.25, 1], "texture": "#0"} + } + } + ], + "groups": [ + { + "name": "group", + "origin": [8, 8, 8], + "color": 0, + "children": [0, 1, 2, 3] + }, + { + "name": "group", + "origin": [15, 10, 15], + "color": 0, + "children": [ + 4, + { + "name": "group", + "origin": [11, 11, 12], + "color": 0, + "children": [5] + } + ] + }, + { + "name": "group", + "origin": [15, 10, 15], + "color": 0, + "children": [ + 6, + { + "name": "group", + "origin": [11, 11, 12], + "color": 0, + "children": [7] + } + ] + }, + { + "name": "group", + "origin": [15, 10, 15], + "color": 0, + "children": [ + 8, + { + "name": "group", + "origin": [11, 11, 12], + "color": 0, + "children": [9] + } + ] + }, + { + "name": "group", + "origin": [15, 10, 15], + "color": 0, + "children": [ + 10, + { + "name": "group", + "origin": [11, 11, 12], + "color": 0, + "children": [11] + } + ] + }, + { + "name": "flower1", + "origin": [8, 8, 8], + "color": 0, + "children": [12, 13, 14, 15, 16, 17, 18, 19] + }, + { + "name": "flower4", + "origin": [8, 8, 8], + "color": 0, + "children": [20, 21, 22, 23, 24, 25, 26, 27] + }, + { + "name": "flower6", + "origin": [8, 8, 8], + "color": 0, + "children": [28, 29, 30, 31, 32, 33, 34, 35] + }, + { + "name": "group", + "origin": [8, 8, 8], + "color": 0, + "children": [ + 36, + { + "name": "group", + "origin": [14, 12, 13], + "color": 0, + "children": [ + 37, + { + "name": "group", + "origin": [4.4375, 4.75, 6], + "color": 0, + "children": [ + 38, + { + "name": "group", + "origin": [2.75, 4.5, 6], + "color": 0, + "children": [ + 39, + { + "name": "group", + "origin": [7.875, 9.5, 13.4375], + "color": 0, + "children": [ + { + "name": "group", + "origin": [0.25, 1.6875, 4.5], + "color": 0, + "children": [] + } + ] + } + ] + } + ] + } + ] + }, + { + "name": "group", + "origin": [14, 12, 13], + "color": 0, + "children": [ + 40, + { + "name": "group", + "origin": [4.4375, 4.75, 6], + "color": 0, + "children": [ + 41, + { + "name": "group", + "origin": [2.75, 4.5, 6], + "color": 0, + "children": [ + 42, + { + "name": "group", + "origin": [7.875, 9.5, 13.4375], + "color": 0, + "children": [ + 43, + { + "name": "group", + "origin": [0.25, 1.6875, 4.5], + "color": 0, + "children": [] + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "name": "group", + "origin": [8, 8, 8], + "color": 0, + "children": [ + 44, + { + "name": "group", + "origin": [14, 12, 13], + "color": 0, + "children": [ + 45, + { + "name": "group", + "origin": [4.4375, 4.75, 6], + "color": 0, + "children": [ + 46, + { + "name": "group", + "origin": [2.75, 4.5, 6], + "color": 0, + "children": [ + 47, + { + "name": "group", + "origin": [7.875, 9.5, 13.4375], + "color": 0, + "children": [ + 48, + { + "name": "group", + "origin": [0.25, 1.6875, 4.5], + "color": 0, + "children": [] + } + ] + } + ] + } + ] + } + ] + }, + { + "name": "group", + "origin": [14, 12, 13], + "color": 0, + "children": [ + 49, + { + "name": "group", + "origin": [4.4375, 4.75, 6], + "color": 0, + "children": [ + 50, + { + "name": "group", + "origin": [2.75, 4.5, 6], + "color": 0, + "children": [ + 51, + { + "name": "group", + "origin": [7.875, 9.5, 13.4375], + "color": 0, + "children": [ + { + "name": "group", + "origin": [0.25, 1.6875, 4.5], + "color": 0, + "children": [] + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "name": "group", + "origin": [8, 8, 8], + "color": 0, + "children": [ + 52, + { + "name": "group", + "origin": [14, 12, 13], + "color": 0, + "children": [ + 53, + { + "name": "group", + "origin": [4.4375, 4.75, 6], + "color": 0, + "children": [ + 54, + { + "name": "group", + "origin": [2.75, 4.5, 6], + "color": 0, + "children": [ + 55, + { + "name": "group", + "origin": [7.875, 9.5, 13.4375], + "color": 0, + "children": [ + { + "name": "group", + "origin": [0.25, 1.6875, 4.5], + "color": 0, + "children": [] + } + ] + } + ] + } + ] + } + ] + }, + { + "name": "group", + "origin": [14, 12, 13], + "color": 0, + "children": [ + 56, + { + "name": "group", + "origin": [4.4375, 4.75, 6], + "color": 0, + "children": [ + 57, + { + "name": "group", + "origin": [2.75, 4.5, 6], + "color": 0, + "children": [ + 58, + { + "name": "group", + "origin": [7.875, 9.5, 13.4375], + "color": 0, + "children": [ + 59, + { + "name": "group", + "origin": [0.25, 1.6875, 4.5], + "color": 0, + "children": [] + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "name": "group", + "origin": [8, 8, 8], + "color": 0, + "children": [ + 60, + { + "name": "group", + "origin": [14, 12, 13], + "color": 0, + "children": [ + 61, + { + "name": "group", + "origin": [4.4375, 4.75, 6], + "color": 0, + "children": [ + 62, + { + "name": "group", + "origin": [2.75, 4.5, 6], + "color": 0, + "children": [ + 63, + { + "name": "group", + "origin": [7.875, 9.5, 13.4375], + "color": 0, + "children": [ + 64, + { + "name": "group", + "origin": [0.25, 1.6875, 4.5], + "color": 0, + "children": [] + } + ] + } + ] + } + ] + } + ] + }, + { + "name": "group", + "origin": [14, 12, 13], + "color": 0, + "children": [ + 65, + { + "name": "group", + "origin": [4.4375, 4.75, 6], + "color": 0, + "children": [ + 66, + { + "name": "group", + "origin": [2.75, 4.5, 6], + "color": 0, + "children": [ + 67, + { + "name": "group", + "origin": [7.875, 9.5, 13.4375], + "color": 0, + "children": [ + { + "name": "group", + "origin": [0.25, 1.6875, 4.5], + "color": 0, + "children": [] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/surgebinding/resources/assets/surgebinding/models/block/rockbud_variant3.json b/src/surgebinding/resources/assets/surgebinding/models/block/rockbud_variant3.json new file mode 100644 index 000000000..b13076731 --- /dev/null +++ b/src/surgebinding/resources/assets/surgebinding/models/block/rockbud_variant3.json @@ -0,0 +1,892 @@ +{ + "credit": "Made with Blockbench", + "texture_size": [64, 64], + "textures": { + "0": "surgebinding:block/rockbud_variant", + "particle": "surgebinding:block/rockbud_variant" + }, + "elements": [ + { + "from": [6, 0, 6], + "to": [10, 1, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [15, 8, 15]}, + "faces": { + "north": {"uv": [5, 4.75, 6, 5], "texture": "#0"}, + "east": {"uv": [8, 6.75, 9, 7], "texture": "#0"}, + "south": {"uv": [8, 7.5, 9, 7.75], "texture": "#0"}, + "west": {"uv": [8.25, 2.75, 9.25, 3], "texture": "#0"}, + "up": {"uv": [7, 7, 6, 6], "texture": "#0"}, + "down": {"uv": [7, 4.75, 6, 5.75], "texture": "#0"} + } + }, + { + "from": [5, 1, 5], + "to": [11, 2, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [15, 9, 15]}, + "faces": { + "north": {"uv": [3.5, 7.25, 5, 7.5], "texture": "#0"}, + "east": {"uv": [0, 7.5, 1.5, 7.75], "texture": "#0"}, + "south": {"uv": [3.5, 7.5, 5, 7.75], "texture": "#0"}, + "west": {"uv": [5, 7.5, 6.5, 7.75], "texture": "#0"}, + "up": {"uv": [3.5, 3.5, 2, 2], "texture": "#0"}, + "down": {"uv": [3.5, 0, 2, 1.5], "texture": "#0"} + } + }, + { + "from": [4, 2, 4], + "to": [12, 4, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [15, 10, 15]}, + "faces": { + "north": {"uv": [6.25, 0, 8.25, 0.5], "texture": "#0"}, + "east": {"uv": [6.25, 0.5, 8.25, 1], "texture": "#0"}, + "south": {"uv": [6.25, 1, 8.25, 1.5], "texture": "#0"}, + "west": {"uv": [6.25, 1.5, 8.25, 2], "texture": "#0"}, + "up": {"uv": [2, 2, 0, 0], "texture": "#0"}, + "down": {"uv": [2, 2, 0, 4], "texture": "#0"} + } + }, + { + "from": [4.9375, 3.9375, 4.9375], + "to": [11.0625, 5.0625, 11.0625], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 4.5, 8]}, + "faces": { + "north": {"uv": [6.5, 7.5, 8, 7.75], "texture": "#0"}, + "east": {"uv": [7.5, 7, 9, 7.25], "texture": "#0"}, + "south": {"uv": [7.5, 7.25, 9, 7.5], "texture": "#0"}, + "west": {"uv": [0, 7.75, 1.5, 8], "texture": "#0"}, + "up": {"uv": [3.5, 5, 2, 3.5], "texture": "#0"}, + "down": {"uv": [5, 3.5, 3.5, 5], "texture": "#0"} + } + }, + { + "from": [0, 3, 4], + "to": [4, 4, 12], + "rotation": {"angle": 45, "axis": "z", "origin": [4, 3.5, 8]}, + "faces": { + "north": {"uv": [8.5, 4.5, 9.5, 4.75], "texture": "#0"}, + "east": {"uv": [6, 5.75, 8, 6], "texture": "#0"}, + "south": {"uv": [8.5, 8, 9.5, 8.25], "texture": "#0"}, + "west": {"uv": [6.25, 2, 8.25, 2.25], "texture": "#0"}, + "up": {"uv": [4.5, 2, 3.5, 0], "texture": "#0"}, + "down": {"uv": [1, 4, 0, 6], "texture": "#0"} + } + }, + { + "from": [-0.47487, -0.68198, 5], + "to": [2.52513, 0.31802, 11], + "rotation": {"angle": -22.5, "axis": "z", "origin": [5.48744, 3.42678, 8]}, + "faces": { + "north": {"uv": [8, 10.5, 8.75, 10.75], "texture": "#0"}, + "east": {"uv": [1.5, 7.75, 3, 8], "texture": "#0"}, + "south": {"uv": [8.75, 10.5, 9.5, 10.75], "texture": "#0"}, + "west": {"uv": [3, 7.75, 4.5, 8], "texture": "#0"}, + "up": {"uv": [6.25, 1.5, 5.5, 0], "texture": "#0"}, + "down": {"uv": [6.25, 1.5, 5.5, 3], "texture": "#0"} + } + }, + { + "from": [12, 3, 4], + "to": [16, 4, 12], + "rotation": {"angle": -45, "axis": "z", "origin": [12, 3.5, 8]}, + "faces": { + "north": {"uv": [8.5, 8.25, 9.5, 8.5], "texture": "#0"}, + "east": {"uv": [6.25, 2.25, 8.25, 2.5], "texture": "#0"}, + "south": {"uv": [2.5, 8.75, 3.5, 9], "texture": "#0"}, + "west": {"uv": [6.25, 2.5, 8.25, 2.75], "texture": "#0"}, + "up": {"uv": [2, 6, 1, 4], "texture": "#0"}, + "down": {"uv": [5.5, 0, 4.5, 2], "texture": "#0"} + } + }, + { + "from": [13.47487, -0.68198, 5], + "to": [16.47487, 0.31802, 11], + "rotation": {"angle": 22.5, "axis": "z", "origin": [10.51256, 3.42678, 8]}, + "faces": { + "north": {"uv": [9.5, 10.5, 10.25, 10.75], "texture": "#0"}, + "east": {"uv": [4.5, 7.75, 6, 8], "texture": "#0"}, + "south": {"uv": [10.25, 10.5, 11, 10.75], "texture": "#0"}, + "west": {"uv": [6, 7.75, 7.5, 8], "texture": "#0"}, + "up": {"uv": [0.75, 7.5, 0, 6], "texture": "#0"}, + "down": {"uv": [1.5, 6, 0.75, 7.5], "texture": "#0"} + } + }, + { + "from": [4, 3, 12], + "to": [12, 4, 16], + "rotation": {"angle": 45, "axis": "x", "origin": [8, 3.5, 12]}, + "faces": { + "north": {"uv": [6.25, 2.75, 8.25, 3], "texture": "#0"}, + "east": {"uv": [6, 8.75, 7, 9], "texture": "#0"}, + "south": {"uv": [6.5, 4, 8.5, 4.25], "texture": "#0"}, + "west": {"uv": [8.75, 0, 9.75, 0.25], "texture": "#0"}, + "up": {"uv": [5.5, 3, 3.5, 2], "texture": "#0"}, + "down": {"uv": [4, 5, 2, 6], "texture": "#0"} + } + }, + { + "from": [5, -0.68198, 13.47487], + "to": [11, 0.31802, 16.47487], + "rotation": {"angle": -22.5, "axis": "x", "origin": [8, 3.42678, 10.51256]}, + "faces": { + "north": {"uv": [7.5, 7.75, 9, 8], "texture": "#0"}, + "east": {"uv": [10.5, 0.75, 11.25, 1], "texture": "#0"}, + "south": {"uv": [0, 8, 1.5, 8.25], "texture": "#0"}, + "west": {"uv": [10.5, 1, 11.25, 1.25], "texture": "#0"}, + "up": {"uv": [6.5, 4.75, 5, 4], "texture": "#0"}, + "down": {"uv": [3, 6, 1.5, 6.75], "texture": "#0"} + } + }, + { + "from": [4, 3, 0], + "to": [12, 4, 4], + "rotation": {"angle": -45, "axis": "x", "origin": [8, 3.5, 4]}, + "faces": { + "north": {"uv": [6.5, 4.25, 8.5, 4.5], "texture": "#0"}, + "east": {"uv": [8.75, 0.25, 9.75, 0.5], "texture": "#0"}, + "south": {"uv": [6.5, 4.5, 8.5, 4.75], "texture": "#0"}, + "west": {"uv": [8.75, 0.5, 9.75, 0.75], "texture": "#0"}, + "up": {"uv": [6, 6, 4, 5], "texture": "#0"}, + "down": {"uv": [7, 3, 5, 4], "texture": "#0"} + } + }, + { + "from": [5, -0.68198, -0.47487], + "to": [11, 0.31802, 2.52513], + "rotation": {"angle": 22.5, "axis": "x", "origin": [8, 3.42678, 5.48744]}, + "faces": { + "north": {"uv": [1.5, 8, 3, 8.25], "texture": "#0"}, + "east": {"uv": [10.5, 1.25, 11.25, 1.5], "texture": "#0"}, + "south": {"uv": [3, 8, 4.5, 8.25], "texture": "#0"}, + "west": {"uv": [10.5, 1.5, 11.25, 1.75], "texture": "#0"}, + "up": {"uv": [4.5, 6.75, 3, 6], "texture": "#0"}, + "down": {"uv": [6, 6, 4.5, 6.75], "texture": "#0"} + } + }, + { + "from": [8, 5.6875, 6], + "to": [8, 6.6875, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [16, 13.6875, 16]}, + "faces": { + "north": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "east": {"uv": [8.75, 3, 9.75, 3.25], "texture": "#0"}, + "south": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "west": {"uv": [8.75, 3.25, 9.75, 3.5], "texture": "#0"}, + "up": {"uv": [0, 1, 0, 0], "texture": "#0"}, + "down": {"uv": [0, 0, 0, 1], "texture": "#0"} + } + }, + { + "from": [8, 5.6875, 6], + "to": [8, 6.6875, 10], + "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 6.1875, 8]}, + "faces": { + "north": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "east": {"uv": [8.75, 3.5, 9.75, 3.75], "texture": "#0"}, + "south": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "west": {"uv": [8.75, 3.75, 9.75, 4], "texture": "#0"}, + "up": {"uv": [0, 1, 0, 0], "texture": "#0"}, + "down": {"uv": [0, 0, 0, 1], "texture": "#0"} + } + }, + { + "from": [8, 5.6875, 6], + "to": [8, 6.6875, 10], + "rotation": {"angle": 45, "axis": "y", "origin": [8, 6.1875, 8]}, + "faces": { + "north": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "east": {"uv": [8.75, 4.75, 9.75, 5], "texture": "#0"}, + "south": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "west": {"uv": [8.75, 5, 9.75, 5.25], "texture": "#0"}, + "up": {"uv": [0, 1, 0, 0], "texture": "#0"}, + "down": {"uv": [0, 0, 0, 1], "texture": "#0"} + } + }, + { + "from": [6, 5.6875, 8], + "to": [10, 6.6875, 8], + "rotation": {"angle": -22.5, "axis": "y", "origin": [8, 6.1875, 8]}, + "faces": { + "north": {"uv": [8.75, 5.25, 9.75, 5.5], "texture": "#0"}, + "east": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "south": {"uv": [8.75, 5.5, 9.75, 5.75], "texture": "#0"}, + "west": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "up": {"uv": [1, 0, 0, 0], "texture": "#0"}, + "down": {"uv": [1, 0, 0, 0], "texture": "#0"} + } + }, + { + "from": [6, 5.6875, 8], + "to": [10, 6.6875, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 6.1875, 8]}, + "faces": { + "north": {"uv": [8.75, 5.75, 9.75, 6], "texture": "#0"}, + "east": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "south": {"uv": [8.75, 6, 9.75, 6.25], "texture": "#0"}, + "west": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "up": {"uv": [1, 0, 0, 0], "texture": "#0"}, + "down": {"uv": [1, 0, 0, 0], "texture": "#0"} + } + }, + { + "from": [6, 5.6875, 8], + "to": [10, 6.6875, 8], + "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 6.1875, 8]}, + "faces": { + "north": {"uv": [8.75, 6.25, 9.75, 6.5], "texture": "#0"}, + "east": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "south": {"uv": [8.75, 6.5, 9.75, 6.75], "texture": "#0"}, + "west": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "up": {"uv": [1, 0, 0, 0], "texture": "#0"}, + "down": {"uv": [1, 0, 0, 0], "texture": "#0"} + } + }, + { + "from": [6, 5.6875, 8], + "to": [10, 6.6875, 8], + "rotation": {"angle": 45, "axis": "y", "origin": [8, 6.1875, 8]}, + "faces": { + "north": {"uv": [1, 9, 2, 9.25], "texture": "#0"}, + "east": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "south": {"uv": [2, 9, 3, 9.25], "texture": "#0"}, + "west": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "up": {"uv": [1, 0, 0, 0], "texture": "#0"}, + "down": {"uv": [1, 0, 0, 0], "texture": "#0"} + } + }, + { + "from": [8, 5.6875, 6], + "to": [8, 6.6875, 10], + "rotation": {"angle": -22.5, "axis": "y", "origin": [8, 6.1875, 8]}, + "faces": { + "north": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "east": {"uv": [3, 9, 4, 9.25], "texture": "#0"}, + "south": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "west": {"uv": [4, 9, 5, 9.25], "texture": "#0"}, + "up": {"uv": [0, 1, 0, 0], "texture": "#0"}, + "down": {"uv": [0, 0, 0, 1], "texture": "#0"} + } + }, + { + "from": [5, 4, 5], + "to": [7, 6, 7], + "rotation": {"angle": 0, "axis": "y", "origin": [14, 12, 13]}, + "faces": { + "north": {"uv": [3, 1.5, 3.5, 2], "texture": "#0"}, + "east": {"uv": [4.5, 3, 5, 3.5], "texture": "#0"}, + "south": {"uv": [9.75, 5.25, 10.25, 5.75], "texture": "#0"}, + "west": {"uv": [9.75, 5.75, 10.25, 6.25], "texture": "#0"}, + "up": {"uv": [10.25, 6.75, 9.75, 6.25], "texture": "#0"}, + "down": {"uv": [0.5, 10, 0, 10.5], "texture": "#0"} + } + }, + { + "from": [5.25, 4, 3.25], + "to": [6.75, 5.5, 5.75], + "rotation": {"angle": 0, "axis": "y", "origin": [6, 4.75, 5]}, + "faces": { + "north": {"uv": [0.5, 10, 1, 10.5], "texture": "#0"}, + "east": {"uv": [4.5, 8, 5.25, 8.5], "texture": "#0"}, + "south": {"uv": [1, 10, 1.5, 10.5], "texture": "#0"}, + "west": {"uv": [5.25, 8, 6, 8.5], "texture": "#0"}, + "up": {"uv": [6.5, 8.75, 6, 8], "texture": "#0"}, + "down": {"uv": [7, 8, 6.5, 8.75], "texture": "#0"} + } + }, + { + "from": [5.375, 3.875, 0.6875], + "to": [6.625, 5.125, 3.9375], + "rotation": {"angle": -45, "axis": "x", "origin": [6, 4.5, 3.3125]}, + "faces": { + "north": {"uv": [11.25, 4.5, 11.5, 4.75], "texture": "#0"}, + "east": {"uv": [10.5, 2.25, 11.25, 2.5], "texture": "#0"}, + "south": {"uv": [11.25, 4.75, 11.5, 5], "texture": "#0"}, + "west": {"uv": [10.5, 2.5, 11.25, 2.75], "texture": "#0"}, + "up": {"uv": [1.75, 11.5, 1.5, 10.75], "texture": "#0"}, + "down": {"uv": [2, 10.75, 1.75, 11.5], "texture": "#0"} + } + }, + { + "from": [4.375, 1.9375, 1], + "to": [6.5, 3.0625, 2.125], + "rotation": {"angle": 0, "axis": "y", "origin": [13.4375, 10, 9.0625]}, + "faces": { + "north": {"uv": [5.5, 6.75, 6, 7], "texture": "#0"}, + "east": {"uv": [11.25, 5, 11.5, 5.25], "texture": "#0"}, + "south": {"uv": [5, 7.25, 5.5, 7.5], "texture": "#0"}, + "west": {"uv": [11.25, 5.25, 11.5, 5.5], "texture": "#0"}, + "up": {"uv": [1.5, 9, 1, 8.75], "texture": "#0"}, + "down": {"uv": [4, 8.75, 3.5, 9], "texture": "#0"} + } + }, + { + "from": [2.6875, 4, 5.25], + "to": [5.1875, 5.5, 6.75], + "rotation": {"angle": 0, "axis": "y", "origin": [4.4375, 4.75, 6]}, + "faces": { + "north": {"uv": [7, 8, 7.75, 8.5], "texture": "#0"}, + "east": {"uv": [1.5, 10, 2, 10.5], "texture": "#0"}, + "south": {"uv": [7.75, 8, 8.5, 8.5], "texture": "#0"}, + "west": {"uv": [2, 10, 2.5, 10.5], "texture": "#0"}, + "up": {"uv": [8.75, 3.5, 8, 3], "texture": "#0"}, + "down": {"uv": [8.75, 3.5, 8, 4], "texture": "#0"} + } + }, + { + "from": [-0.875, 3.875, 5.375], + "to": [3.375, 5.125, 6.625], + "rotation": {"angle": 45, "axis": "z", "origin": [2.75, 4.5, 6]}, + "faces": { + "north": {"uv": [2.5, 10, 3.5, 10.25], "texture": "#0"}, + "east": {"uv": [11.25, 8.25, 11.5, 8.5], "texture": "#0"}, + "south": {"uv": [3.5, 10, 4.5, 10.25], "texture": "#0"}, + "west": {"uv": [11.25, 9.5, 11.5, 9.75], "texture": "#0"}, + "up": {"uv": [5.5, 10.25, 4.5, 10], "texture": "#0"}, + "down": {"uv": [6.5, 10, 5.5, 10.25], "texture": "#0"} + } + }, + { + "from": [9, 4, 5], + "to": [11, 6, 7], + "rotation": {"angle": 0, "axis": "y", "origin": [3, 12, 14]}, + "faces": { + "north": {"uv": [6.5, 10, 7, 10.5], "texture": "#0"}, + "east": {"uv": [7, 10, 7.5, 10.5], "texture": "#0"}, + "south": {"uv": [7.5, 10, 8, 10.5], "texture": "#0"}, + "west": {"uv": [8, 10, 8.5, 10.5], "texture": "#0"}, + "up": {"uv": [9, 10.5, 8.5, 10], "texture": "#0"}, + "down": {"uv": [9.5, 10, 9, 10.5], "texture": "#0"} + } + }, + { + "from": [10.25, 4, 5.25], + "to": [12.75, 5.5, 6.75], + "rotation": {"angle": 0, "axis": "y", "origin": [11, 4.75, 6]}, + "faces": { + "north": {"uv": [8, 4.75, 8.75, 5.25], "texture": "#0"}, + "east": {"uv": [9.5, 10, 10, 10.5], "texture": "#0"}, + "south": {"uv": [8, 5.25, 8.75, 5.75], "texture": "#0"}, + "west": {"uv": [10, 10, 10.5, 10.5], "texture": "#0"}, + "up": {"uv": [8.75, 6.25, 8, 5.75], "texture": "#0"}, + "down": {"uv": [8.75, 6.25, 8, 6.75], "texture": "#0"} + } + }, + { + "from": [9.25, 4, 2.6875], + "to": [10.75, 5.5, 5.1875], + "rotation": {"angle": 0, "axis": "y", "origin": [10, 4.75, 4.4375]}, + "faces": { + "north": {"uv": [10, 0.75, 10.5, 1.25], "texture": "#0"}, + "east": {"uv": [0, 8.25, 0.75, 8.75], "texture": "#0"}, + "south": {"uv": [10, 1.25, 10.5, 1.75], "texture": "#0"}, + "west": {"uv": [0.75, 8.25, 1.5, 8.75], "texture": "#0"}, + "up": {"uv": [2, 9, 1.5, 8.25], "texture": "#0"}, + "down": {"uv": [2.5, 8.25, 2, 9], "texture": "#0"} + } + }, + { + "from": [9.375, 3.875, -0.875], + "to": [10.625, 5.125, 3.375], + "rotation": {"angle": -45, "axis": "x", "origin": [10, 4.5, 2.75]}, + "faces": { + "north": {"uv": [3.25, 11.5, 3.5, 11.75], "texture": "#0"}, + "east": {"uv": [10, 1.75, 11, 2], "texture": "#0"}, + "south": {"uv": [3.5, 11.5, 3.75, 11.75], "texture": "#0"}, + "west": {"uv": [10, 2, 11, 2.25], "texture": "#0"}, + "up": {"uv": [10.25, 7.75, 10, 6.75], "texture": "#0"}, + "down": {"uv": [10.25, 9, 10, 10], "texture": "#0"} + } + }, + { + "from": [9, 4, 9], + "to": [11, 6, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [2, 12, 3]}, + "faces": { + "north": {"uv": [10, 2.25, 10.5, 2.75], "texture": "#0"}, + "east": {"uv": [2.5, 10.25, 3, 10.75], "texture": "#0"}, + "south": {"uv": [3, 10.25, 3.5, 10.75], "texture": "#0"}, + "west": {"uv": [3.5, 10.25, 4, 10.75], "texture": "#0"}, + "up": {"uv": [4.5, 10.75, 4, 10.25], "texture": "#0"}, + "down": {"uv": [5, 10.25, 4.5, 10.75], "texture": "#0"} + } + }, + { + "from": [9.25, 4, 10.25], + "to": [10.75, 5.5, 12.75], + "rotation": {"angle": 0, "axis": "y", "origin": [10, 4.75, 11]}, + "faces": { + "north": {"uv": [5, 10.25, 5.5, 10.75], "texture": "#0"}, + "east": {"uv": [2.5, 8.25, 3.25, 8.75], "texture": "#0"}, + "south": {"uv": [5.5, 10.25, 6, 10.75], "texture": "#0"}, + "west": {"uv": [3.25, 8.25, 4, 8.75], "texture": "#0"}, + "up": {"uv": [4.5, 9, 4, 8.25], "texture": "#0"}, + "down": {"uv": [8.75, 0, 8.25, 0.75], "texture": "#0"} + } + }, + { + "from": [10.8125, 4, 9.25], + "to": [13.3125, 5.5, 10.75], + "rotation": {"angle": 0, "axis": "y", "origin": [11.5625, 4.75, 10]}, + "faces": { + "north": {"uv": [8.25, 0.75, 9, 1.25], "texture": "#0"}, + "east": {"uv": [6, 10.25, 6.5, 10.75], "texture": "#0"}, + "south": {"uv": [8.25, 1.25, 9, 1.75], "texture": "#0"}, + "west": {"uv": [10.25, 4, 10.75, 4.5], "texture": "#0"}, + "up": {"uv": [9, 2.25, 8.25, 1.75], "texture": "#0"}, + "down": {"uv": [9, 2.25, 8.25, 2.75], "texture": "#0"} + } + }, + { + "from": [12.625, 3.875, 9.375], + "to": [16.875, 5.125, 10.625], + "rotation": {"angle": -45, "axis": "z", "origin": [13.25, 4.5, 10]}, + "faces": { + "north": {"uv": [10, 7.75, 11, 8], "texture": "#0"}, + "east": {"uv": [7.75, 11.5, 8, 11.75], "texture": "#0"}, + "south": {"uv": [10.25, 2.75, 11.25, 3], "texture": "#0"}, + "west": {"uv": [8.5, 11.5, 8.75, 11.75], "texture": "#0"}, + "up": {"uv": [11.25, 5.5, 10.25, 5.25], "texture": "#0"}, + "down": {"uv": [11.25, 5.5, 10.25, 5.75], "texture": "#0"} + } + }, + { + "from": [5, 4, 9], + "to": [7, 6, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [13, 12, 2]}, + "faces": { + "north": {"uv": [10.25, 5.75, 10.75, 6.25], "texture": "#0"}, + "east": {"uv": [10.25, 6.25, 10.75, 6.75], "texture": "#0"}, + "south": {"uv": [10.25, 6.75, 10.75, 7.25], "texture": "#0"}, + "west": {"uv": [10.25, 7.25, 10.75, 7.75], "texture": "#0"}, + "up": {"uv": [10.75, 9, 10.25, 8.5], "texture": "#0"}, + "down": {"uv": [10.75, 9, 10.25, 9.5], "texture": "#0"} + } + }, + { + "from": [3.25, 4, 9.25], + "to": [5.75, 5.5, 10.75], + "rotation": {"angle": 0, "axis": "y", "origin": [5, 4.75, 10]}, + "faces": { + "north": {"uv": [4.5, 8.5, 5.25, 9], "texture": "#0"}, + "east": {"uv": [10.25, 9.5, 10.75, 10], "texture": "#0"}, + "south": {"uv": [5.25, 8.5, 6, 9], "texture": "#0"}, + "west": {"uv": [0, 10.5, 0.5, 11], "texture": "#0"}, + "up": {"uv": [7.75, 9, 7, 8.5], "texture": "#0"}, + "down": {"uv": [8.5, 8.5, 7.75, 9], "texture": "#0"} + } + }, + { + "from": [5.25, 4, 10.8125], + "to": [6.75, 5.5, 13.3125], + "rotation": {"angle": 0, "axis": "y", "origin": [6, 4.75, 11.5625]}, + "faces": { + "north": {"uv": [0.5, 10.5, 1, 11], "texture": "#0"}, + "east": {"uv": [8.5, 8.5, 9.25, 9], "texture": "#0"}, + "south": {"uv": [1, 10.5, 1.5, 11], "texture": "#0"}, + "west": {"uv": [8.5, 4, 9.25, 4.5], "texture": "#0"}, + "up": {"uv": [0.5, 9.5, 0, 8.75], "texture": "#0"}, + "down": {"uv": [1, 8.75, 0.5, 9.5], "texture": "#0"} + } + }, + { + "from": [5.375, 3.875, 12.625], + "to": [6.625, 5.125, 16.875], + "rotation": {"angle": 45, "axis": "x", "origin": [6, 4.5, 13.25]}, + "faces": { + "north": {"uv": [11.5, 2, 11.75, 2.25], "texture": "#0"}, + "east": {"uv": [1.5, 10.5, 2.5, 10.75], "texture": "#0"}, + "south": {"uv": [11.5, 3, 11.75, 3.25], "texture": "#0"}, + "west": {"uv": [6.5, 10.5, 7.5, 10.75], "texture": "#0"}, + "up": {"uv": [7.75, 11.5, 7.5, 10.5], "texture": "#0"}, + "down": {"uv": [8, 10.5, 7.75, 11.5], "texture": "#0"} + } + } + ], + "groups": [ + { + "name": "group", + "origin": [8, 8, 8], + "color": 0, + "children": [0, 1, 2, 3] + }, + { + "name": "group", + "origin": [15, 10, 15], + "color": 0, + "children": [ + 4, + { + "name": "group", + "origin": [11, 11, 12], + "color": 0, + "children": [5] + } + ] + }, + { + "name": "group", + "origin": [15, 10, 15], + "color": 0, + "children": [ + 6, + { + "name": "group", + "origin": [11, 11, 12], + "color": 0, + "children": [7] + } + ] + }, + { + "name": "group", + "origin": [15, 10, 15], + "color": 0, + "children": [ + 8, + { + "name": "group", + "origin": [11, 11, 12], + "color": 0, + "children": [9] + } + ] + }, + { + "name": "group", + "origin": [15, 10, 15], + "color": 0, + "children": [ + 10, + { + "name": "group", + "origin": [11, 11, 12], + "color": 0, + "children": [11] + } + ] + }, + { + "name": "flower1", + "origin": [8, 8, 8], + "color": 0, + "children": [12, 13, 14, 15, 16, 17, 18, 19] + }, + { + "name": "group", + "origin": [8, 8, 8], + "color": 0, + "children": [ + 20, + { + "name": "group", + "origin": [14, 12, 13], + "color": 0, + "children": [ + 21, + { + "name": "group", + "origin": [4.4375, 4.75, 6], + "color": 0, + "children": [ + 22, + { + "name": "group", + "origin": [2.75, 4.5, 6], + "color": 0, + "children": [ + 23, + { + "name": "group", + "origin": [7.875, 9.5, 13.4375], + "color": 0, + "children": [ + { + "name": "group", + "origin": [0.25, 1.6875, 4.5], + "color": 0, + "children": [] + } + ] + } + ] + } + ] + } + ] + }, + { + "name": "group", + "origin": [14, 12, 13], + "color": 0, + "children": [ + 24, + { + "name": "group", + "origin": [4.4375, 4.75, 6], + "color": 0, + "children": [ + 25, + { + "name": "group", + "origin": [2.75, 4.5, 6], + "color": 0, + "children": [ + { + "name": "group", + "origin": [7.875, 9.5, 13.4375], + "color": 0, + "children": [ + { + "name": "group", + "origin": [0.25, 1.6875, 4.5], + "color": 0, + "children": [] + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "name": "group", + "origin": [8, 8, 8], + "color": 0, + "children": [ + 26, + { + "name": "group", + "origin": [14, 12, 13], + "color": 0, + "children": [ + 27, + { + "name": "group", + "origin": [4.4375, 4.75, 6], + "color": 0, + "children": [ + { + "name": "group", + "origin": [2.75, 4.5, 6], + "color": 0, + "children": [ + { + "name": "group", + "origin": [7.875, 9.5, 13.4375], + "color": 0, + "children": [ + { + "name": "group", + "origin": [0.25, 1.6875, 4.5], + "color": 0, + "children": [] + } + ] + } + ] + } + ] + } + ] + }, + { + "name": "group", + "origin": [14, 12, 13], + "color": 0, + "children": [ + 28, + { + "name": "group", + "origin": [4.4375, 4.75, 6], + "color": 0, + "children": [ + 29, + { + "name": "group", + "origin": [2.75, 4.5, 6], + "color": 0, + "children": [ + { + "name": "group", + "origin": [7.875, 9.5, 13.4375], + "color": 0, + "children": [ + { + "name": "group", + "origin": [0.25, 1.6875, 4.5], + "color": 0, + "children": [] + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "name": "group", + "origin": [8, 8, 8], + "color": 0, + "children": [ + 30, + { + "name": "group", + "origin": [14, 12, 13], + "color": 0, + "children": [ + 31, + { + "name": "group", + "origin": [4.4375, 4.75, 6], + "color": 0, + "children": [ + { + "name": "group", + "origin": [2.75, 4.5, 6], + "color": 0, + "children": [ + { + "name": "group", + "origin": [7.875, 9.5, 13.4375], + "color": 0, + "children": [ + { + "name": "group", + "origin": [0.25, 1.6875, 4.5], + "color": 0, + "children": [] + } + ] + } + ] + } + ] + } + ] + }, + { + "name": "group", + "origin": [14, 12, 13], + "color": 0, + "children": [ + 32, + { + "name": "group", + "origin": [4.4375, 4.75, 6], + "color": 0, + "children": [ + 33, + { + "name": "group", + "origin": [2.75, 4.5, 6], + "color": 0, + "children": [ + { + "name": "group", + "origin": [7.875, 9.5, 13.4375], + "color": 0, + "children": [ + { + "name": "group", + "origin": [0.25, 1.6875, 4.5], + "color": 0, + "children": [] + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "name": "group", + "origin": [8, 8, 8], + "color": 0, + "children": [ + 34, + { + "name": "group", + "origin": [14, 12, 13], + "color": 0, + "children": [ + 35, + { + "name": "group", + "origin": [4.4375, 4.75, 6], + "color": 0, + "children": [ + { + "name": "group", + "origin": [2.75, 4.5, 6], + "color": 0, + "children": [ + { + "name": "group", + "origin": [7.875, 9.5, 13.4375], + "color": 0, + "children": [ + { + "name": "group", + "origin": [0.25, 1.6875, 4.5], + "color": 0, + "children": [] + } + ] + } + ] + } + ] + } + ] + }, + { + "name": "group", + "origin": [14, 12, 13], + "color": 0, + "children": [ + 36, + { + "name": "group", + "origin": [4.4375, 4.75, 6], + "color": 0, + "children": [ + 37, + { + "name": "group", + "origin": [2.75, 4.5, 6], + "color": 0, + "children": [ + { + "name": "group", + "origin": [7.875, 9.5, 13.4375], + "color": 0, + "children": [ + { + "name": "group", + "origin": [0.25, 1.6875, 4.5], + "color": 0, + "children": [] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/surgebinding/resources/assets/surgebinding/models/block/rockbud_variant4.json b/src/surgebinding/resources/assets/surgebinding/models/block/rockbud_variant4.json new file mode 100644 index 000000000..f792e0912 --- /dev/null +++ b/src/surgebinding/resources/assets/surgebinding/models/block/rockbud_variant4.json @@ -0,0 +1,696 @@ +{ + "credit": "Made with Blockbench", + "texture_size": [64, 64], + "textures": { + "0": "surgebinding:block/rockbud_variant", + "particle": "surgebinding:block/rockbud_variant" + }, + "elements": [ + { + "from": [6, 0, 6], + "to": [10, 1, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [15, 8, 15]}, + "faces": { + "north": {"uv": [5, 4.75, 6, 5], "texture": "#0"}, + "east": {"uv": [8, 6.75, 9, 7], "texture": "#0"}, + "south": {"uv": [8, 7.5, 9, 7.75], "texture": "#0"}, + "west": {"uv": [8.25, 2.75, 9.25, 3], "texture": "#0"}, + "up": {"uv": [7, 7, 6, 6], "texture": "#0"}, + "down": {"uv": [7, 4.75, 6, 5.75], "texture": "#0"} + } + }, + { + "from": [5, 1, 5], + "to": [11, 2, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [15, 9, 15]}, + "faces": { + "north": {"uv": [3.5, 7.25, 5, 7.5], "texture": "#0"}, + "east": {"uv": [0, 7.5, 1.5, 7.75], "texture": "#0"}, + "south": {"uv": [3.5, 7.5, 5, 7.75], "texture": "#0"}, + "west": {"uv": [5, 7.5, 6.5, 7.75], "texture": "#0"}, + "up": {"uv": [3.5, 3.5, 2, 2], "texture": "#0"}, + "down": {"uv": [3.5, 0, 2, 1.5], "texture": "#0"} + } + }, + { + "from": [4, 2, 4], + "to": [12, 4, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [15, 10, 15]}, + "faces": { + "north": {"uv": [6.25, 0, 8.25, 0.5], "texture": "#0"}, + "east": {"uv": [6.25, 0.5, 8.25, 1], "texture": "#0"}, + "south": {"uv": [6.25, 1, 8.25, 1.5], "texture": "#0"}, + "west": {"uv": [6.25, 1.5, 8.25, 2], "texture": "#0"}, + "up": {"uv": [2, 2, 0, 0], "texture": "#0"}, + "down": {"uv": [2, 2, 0, 4], "texture": "#0"} + } + }, + { + "from": [4.9375, 3.9375, 4.9375], + "to": [11.0625, 5.0625, 11.0625], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 4.5, 8]}, + "faces": { + "north": {"uv": [6.5, 7.5, 8, 7.75], "texture": "#0"}, + "east": {"uv": [7.5, 7, 9, 7.25], "texture": "#0"}, + "south": {"uv": [7.5, 7.25, 9, 7.5], "texture": "#0"}, + "west": {"uv": [0, 7.75, 1.5, 8], "texture": "#0"}, + "up": {"uv": [3.5, 5, 2, 3.5], "texture": "#0"}, + "down": {"uv": [5, 3.5, 3.5, 5], "texture": "#0"} + } + }, + { + "from": [0, 3, 4], + "to": [4, 4, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [4, 3.5, 8]}, + "faces": { + "north": {"uv": [8.5, 4.5, 9.5, 4.75], "texture": "#0"}, + "east": {"uv": [6, 5.75, 8, 6], "texture": "#0"}, + "south": {"uv": [8.5, 8, 9.5, 8.25], "texture": "#0"}, + "west": {"uv": [6.25, 2, 8.25, 2.25], "texture": "#0"}, + "up": {"uv": [4.5, 2, 3.5, 0], "texture": "#0"}, + "down": {"uv": [1, 4, 0, 6], "texture": "#0"} + } + }, + { + "from": [-3.10567, 3.00823, 5], + "to": [-0.10567, 4.00823, 11], + "rotation": {"angle": -45, "axis": "z", "origin": [-0.07351, 3.73849, 8]}, + "faces": { + "north": {"uv": [8, 10.5, 8.75, 10.75], "texture": "#0"}, + "east": {"uv": [1.5, 7.75, 3, 8], "texture": "#0"}, + "south": {"uv": [8.75, 10.5, 9.5, 10.75], "texture": "#0"}, + "west": {"uv": [3, 7.75, 4.5, 8], "texture": "#0"}, + "up": {"uv": [6.25, 1.5, 5.5, 0], "texture": "#0"}, + "down": {"uv": [6.25, 1.5, 5.5, 3], "texture": "#0"} + } + }, + { + "from": [12, 3, 4], + "to": [16, 4, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [12, 3.5, 8]}, + "faces": { + "north": {"uv": [8.5, 8.25, 9.5, 8.5], "texture": "#0"}, + "east": {"uv": [6.25, 2.25, 8.25, 2.5], "texture": "#0"}, + "south": {"uv": [2.5, 8.75, 3.5, 9], "texture": "#0"}, + "west": {"uv": [6.25, 2.5, 8.25, 2.75], "texture": "#0"}, + "up": {"uv": [2, 6, 1, 4], "texture": "#0"}, + "down": {"uv": [5.5, 0, 4.5, 2], "texture": "#0"} + } + }, + { + "from": [16.10567, 3.00823, 5], + "to": [19.10567, 4.00823, 11], + "rotation": {"angle": 45, "axis": "z", "origin": [16.07351, 3.73849, 8]}, + "faces": { + "north": {"uv": [9.5, 10.5, 10.25, 10.75], "texture": "#0"}, + "east": {"uv": [4.5, 7.75, 6, 8], "texture": "#0"}, + "south": {"uv": [10.25, 10.5, 11, 10.75], "texture": "#0"}, + "west": {"uv": [6, 7.75, 7.5, 8], "texture": "#0"}, + "up": {"uv": [0.75, 7.5, 0, 6], "texture": "#0"}, + "down": {"uv": [1.5, 6, 0.75, 7.5], "texture": "#0"} + } + }, + { + "from": [4, 3, 12], + "to": [12, 4, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 3.5, 12]}, + "faces": { + "north": {"uv": [6.25, 2.75, 8.25, 3], "texture": "#0"}, + "east": {"uv": [6, 8.75, 7, 9], "texture": "#0"}, + "south": {"uv": [6.5, 4, 8.5, 4.25], "texture": "#0"}, + "west": {"uv": [8.75, 0, 9.75, 0.25], "texture": "#0"}, + "up": {"uv": [5.5, 3, 3.5, 2], "texture": "#0"}, + "down": {"uv": [4, 5, 2, 6], "texture": "#0"} + } + }, + { + "from": [5, 3.00823, 16.10567], + "to": [11, 4.00823, 19.10567], + "rotation": {"angle": -45, "axis": "x", "origin": [8, 3.73849, 16.07351]}, + "faces": { + "north": {"uv": [7.5, 7.75, 9, 8], "texture": "#0"}, + "east": {"uv": [10.5, 0.75, 11.25, 1], "texture": "#0"}, + "south": {"uv": [0, 8, 1.5, 8.25], "texture": "#0"}, + "west": {"uv": [10.5, 1, 11.25, 1.25], "texture": "#0"}, + "up": {"uv": [6.5, 4.75, 5, 4], "texture": "#0"}, + "down": {"uv": [3, 6, 1.5, 6.75], "texture": "#0"} + } + }, + { + "from": [4, 3, 0], + "to": [12, 4, 4], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 3.5, 4]}, + "faces": { + "north": {"uv": [6.5, 4.25, 8.5, 4.5], "texture": "#0"}, + "east": {"uv": [8.75, 0.25, 9.75, 0.5], "texture": "#0"}, + "south": {"uv": [6.5, 4.5, 8.5, 4.75], "texture": "#0"}, + "west": {"uv": [8.75, 0.5, 9.75, 0.75], "texture": "#0"}, + "up": {"uv": [6, 6, 4, 5], "texture": "#0"}, + "down": {"uv": [7, 3, 5, 4], "texture": "#0"} + } + }, + { + "from": [5, 3.00823, -3.10567], + "to": [11, 4.00823, -0.10567], + "rotation": {"angle": 45, "axis": "x", "origin": [8, 3.73849, -0.07351]}, + "faces": { + "north": {"uv": [1.5, 8, 3, 8.25], "texture": "#0"}, + "east": {"uv": [10.5, 1.25, 11.25, 1.5], "texture": "#0"}, + "south": {"uv": [3, 8, 4.5, 8.25], "texture": "#0"}, + "west": {"uv": [10.5, 1.5, 11.25, 1.75], "texture": "#0"}, + "up": {"uv": [4.5, 6.75, 3, 6], "texture": "#0"}, + "down": {"uv": [6, 6, 4.5, 6.75], "texture": "#0"} + } + }, + { + "from": [8, 5.6875, 6], + "to": [8, 6.6875, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [16, 13.6875, 16]}, + "faces": { + "north": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "east": {"uv": [8.75, 3, 9.75, 3.25], "texture": "#0"}, + "south": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "west": {"uv": [8.75, 3.25, 9.75, 3.5], "texture": "#0"}, + "up": {"uv": [0, 1, 0, 0], "texture": "#0"}, + "down": {"uv": [0, 0, 0, 1], "texture": "#0"} + } + }, + { + "from": [8, 5.6875, 6], + "to": [8, 6.6875, 10], + "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 6.1875, 8]}, + "faces": { + "north": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "east": {"uv": [8.75, 3.5, 9.75, 3.75], "texture": "#0"}, + "south": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "west": {"uv": [8.75, 3.75, 9.75, 4], "texture": "#0"}, + "up": {"uv": [0, 1, 0, 0], "texture": "#0"}, + "down": {"uv": [0, 0, 0, 1], "texture": "#0"} + } + }, + { + "from": [8, 5.6875, 6], + "to": [8, 6.6875, 10], + "rotation": {"angle": 45, "axis": "y", "origin": [8, 6.1875, 8]}, + "faces": { + "north": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "east": {"uv": [8.75, 4.75, 9.75, 5], "texture": "#0"}, + "south": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "west": {"uv": [8.75, 5, 9.75, 5.25], "texture": "#0"}, + "up": {"uv": [0, 1, 0, 0], "texture": "#0"}, + "down": {"uv": [0, 0, 0, 1], "texture": "#0"} + } + }, + { + "from": [6, 5.6875, 8], + "to": [10, 6.6875, 8], + "rotation": {"angle": -22.5, "axis": "y", "origin": [8, 6.1875, 8]}, + "faces": { + "north": {"uv": [8.75, 5.25, 9.75, 5.5], "texture": "#0"}, + "east": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "south": {"uv": [8.75, 5.5, 9.75, 5.75], "texture": "#0"}, + "west": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "up": {"uv": [1, 0, 0, 0], "texture": "#0"}, + "down": {"uv": [1, 0, 0, 0], "texture": "#0"} + } + }, + { + "from": [6, 5.6875, 8], + "to": [10, 6.6875, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 6.1875, 8]}, + "faces": { + "north": {"uv": [8.75, 5.75, 9.75, 6], "texture": "#0"}, + "east": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "south": {"uv": [8.75, 6, 9.75, 6.25], "texture": "#0"}, + "west": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "up": {"uv": [1, 0, 0, 0], "texture": "#0"}, + "down": {"uv": [1, 0, 0, 0], "texture": "#0"} + } + }, + { + "from": [6, 5.6875, 8], + "to": [10, 6.6875, 8], + "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 6.1875, 8]}, + "faces": { + "north": {"uv": [8.75, 6.25, 9.75, 6.5], "texture": "#0"}, + "east": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "south": {"uv": [8.75, 6.5, 9.75, 6.75], "texture": "#0"}, + "west": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "up": {"uv": [1, 0, 0, 0], "texture": "#0"}, + "down": {"uv": [1, 0, 0, 0], "texture": "#0"} + } + }, + { + "from": [6, 5.6875, 8], + "to": [10, 6.6875, 8], + "rotation": {"angle": 45, "axis": "y", "origin": [8, 6.1875, 8]}, + "faces": { + "north": {"uv": [1, 9, 2, 9.25], "texture": "#0"}, + "east": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "south": {"uv": [2, 9, 3, 9.25], "texture": "#0"}, + "west": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "up": {"uv": [1, 0, 0, 0], "texture": "#0"}, + "down": {"uv": [1, 0, 0, 0], "texture": "#0"} + } + }, + { + "from": [8, 5.6875, 6], + "to": [8, 6.6875, 10], + "rotation": {"angle": -22.5, "axis": "y", "origin": [8, 6.1875, 8]}, + "faces": { + "north": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "east": {"uv": [3, 9, 4, 9.25], "texture": "#0"}, + "south": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "west": {"uv": [4, 9, 5, 9.25], "texture": "#0"}, + "up": {"uv": [0, 1, 0, 0], "texture": "#0"}, + "down": {"uv": [0, 0, 0, 1], "texture": "#0"} + } + }, + { + "from": [5, 4, 5], + "to": [7, 6, 7], + "rotation": {"angle": 0, "axis": "y", "origin": [14, 12, 13]}, + "faces": { + "north": {"uv": [3, 1.5, 3.5, 2], "texture": "#0"}, + "east": {"uv": [4.5, 3, 5, 3.5], "texture": "#0"}, + "south": {"uv": [9.75, 5.25, 10.25, 5.75], "texture": "#0"}, + "west": {"uv": [9.75, 5.75, 10.25, 6.25], "texture": "#0"}, + "up": {"uv": [10.25, 6.75, 9.75, 6.25], "texture": "#0"}, + "down": {"uv": [0.5, 10, 0, 10.5], "texture": "#0"} + } + }, + { + "from": [9, 4, 5], + "to": [11, 6, 7], + "rotation": {"angle": 0, "axis": "y", "origin": [3, 12, 14]}, + "faces": { + "north": {"uv": [6.5, 10, 7, 10.5], "texture": "#0"}, + "east": {"uv": [7, 10, 7.5, 10.5], "texture": "#0"}, + "south": {"uv": [7.5, 10, 8, 10.5], "texture": "#0"}, + "west": {"uv": [8, 10, 8.5, 10.5], "texture": "#0"}, + "up": {"uv": [9, 10.5, 8.5, 10], "texture": "#0"}, + "down": {"uv": [9.5, 10, 9, 10.5], "texture": "#0"} + } + }, + { + "from": [9, 4, 9], + "to": [11, 6, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [2, 12, 3]}, + "faces": { + "north": {"uv": [10, 2.25, 10.5, 2.75], "texture": "#0"}, + "east": {"uv": [2.5, 10.25, 3, 10.75], "texture": "#0"}, + "south": {"uv": [3, 10.25, 3.5, 10.75], "texture": "#0"}, + "west": {"uv": [3.5, 10.25, 4, 10.75], "texture": "#0"}, + "up": {"uv": [4.5, 10.75, 4, 10.25], "texture": "#0"}, + "down": {"uv": [5, 10.25, 4.5, 10.75], "texture": "#0"} + } + }, + { + "from": [5, 4, 9], + "to": [7, 6, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [13, 12, 2]}, + "faces": { + "north": {"uv": [10.25, 5.75, 10.75, 6.25], "texture": "#0"}, + "east": {"uv": [10.25, 6.25, 10.75, 6.75], "texture": "#0"}, + "south": {"uv": [10.25, 6.75, 10.75, 7.25], "texture": "#0"}, + "west": {"uv": [10.25, 7.25, 10.75, 7.75], "texture": "#0"}, + "up": {"uv": [10.75, 9, 10.25, 8.5], "texture": "#0"}, + "down": {"uv": [10.75, 9, 10.25, 9.5], "texture": "#0"} + } + } + ], + "groups": [ + { + "name": "group", + "origin": [8, 8, 8], + "color": 0, + "children": [0, 1, 2, 3] + }, + { + "name": "group", + "origin": [15, 10, 15], + "color": 0, + "children": [ + 4, + { + "name": "group", + "origin": [11, 11, 12], + "color": 0, + "children": [5] + } + ] + }, + { + "name": "group", + "origin": [15, 10, 15], + "color": 0, + "children": [ + 6, + { + "name": "group", + "origin": [11, 11, 12], + "color": 0, + "children": [7] + } + ] + }, + { + "name": "group", + "origin": [15, 10, 15], + "color": 0, + "children": [ + 8, + { + "name": "group", + "origin": [11, 11, 12], + "color": 0, + "children": [9] + } + ] + }, + { + "name": "group", + "origin": [15, 10, 15], + "color": 0, + "children": [ + 10, + { + "name": "group", + "origin": [11, 11, 12], + "color": 0, + "children": [11] + } + ] + }, + { + "name": "flower1", + "origin": [8, 8, 8], + "color": 0, + "children": [12, 13, 14, 15, 16, 17, 18, 19] + }, + { + "name": "group", + "origin": [8, 8, 8], + "color": 0, + "children": [ + 20, + { + "name": "group", + "origin": [14, 12, 13], + "color": 0, + "children": [ + { + "name": "group", + "origin": [4.4375, 4.75, 6], + "color": 0, + "children": [ + { + "name": "group", + "origin": [2.75, 4.5, 6], + "color": 0, + "children": [ + { + "name": "group", + "origin": [7.875, 9.5, 13.4375], + "color": 0, + "children": [ + { + "name": "group", + "origin": [0.25, 1.6875, 4.5], + "color": 0, + "children": [] + } + ] + } + ] + } + ] + } + ] + }, + { + "name": "group", + "origin": [14, 12, 13], + "color": 0, + "children": [ + { + "name": "group", + "origin": [4.4375, 4.75, 6], + "color": 0, + "children": [ + { + "name": "group", + "origin": [2.75, 4.5, 6], + "color": 0, + "children": [ + { + "name": "group", + "origin": [7.875, 9.5, 13.4375], + "color": 0, + "children": [ + { + "name": "group", + "origin": [0.25, 1.6875, 4.5], + "color": 0, + "children": [] + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "name": "group", + "origin": [8, 8, 8], + "color": 0, + "children": [ + 21, + { + "name": "group", + "origin": [14, 12, 13], + "color": 0, + "children": [ + { + "name": "group", + "origin": [4.4375, 4.75, 6], + "color": 0, + "children": [ + { + "name": "group", + "origin": [2.75, 4.5, 6], + "color": 0, + "children": [ + { + "name": "group", + "origin": [7.875, 9.5, 13.4375], + "color": 0, + "children": [ + { + "name": "group", + "origin": [0.25, 1.6875, 4.5], + "color": 0, + "children": [] + } + ] + } + ] + } + ] + } + ] + }, + { + "name": "group", + "origin": [14, 12, 13], + "color": 0, + "children": [ + { + "name": "group", + "origin": [4.4375, 4.75, 6], + "color": 0, + "children": [ + { + "name": "group", + "origin": [2.75, 4.5, 6], + "color": 0, + "children": [ + { + "name": "group", + "origin": [7.875, 9.5, 13.4375], + "color": 0, + "children": [ + { + "name": "group", + "origin": [0.25, 1.6875, 4.5], + "color": 0, + "children": [] + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "name": "group", + "origin": [8, 8, 8], + "color": 0, + "children": [ + 22, + { + "name": "group", + "origin": [14, 12, 13], + "color": 0, + "children": [ + { + "name": "group", + "origin": [4.4375, 4.75, 6], + "color": 0, + "children": [ + { + "name": "group", + "origin": [2.75, 4.5, 6], + "color": 0, + "children": [ + { + "name": "group", + "origin": [7.875, 9.5, 13.4375], + "color": 0, + "children": [ + { + "name": "group", + "origin": [0.25, 1.6875, 4.5], + "color": 0, + "children": [] + } + ] + } + ] + } + ] + } + ] + }, + { + "name": "group", + "origin": [14, 12, 13], + "color": 0, + "children": [ + { + "name": "group", + "origin": [4.4375, 4.75, 6], + "color": 0, + "children": [ + { + "name": "group", + "origin": [2.75, 4.5, 6], + "color": 0, + "children": [ + { + "name": "group", + "origin": [7.875, 9.5, 13.4375], + "color": 0, + "children": [ + { + "name": "group", + "origin": [0.25, 1.6875, 4.5], + "color": 0, + "children": [] + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "name": "group", + "origin": [8, 8, 8], + "color": 0, + "children": [ + 23, + { + "name": "group", + "origin": [14, 12, 13], + "color": 0, + "children": [ + { + "name": "group", + "origin": [4.4375, 4.75, 6], + "color": 0, + "children": [ + { + "name": "group", + "origin": [2.75, 4.5, 6], + "color": 0, + "children": [ + { + "name": "group", + "origin": [7.875, 9.5, 13.4375], + "color": 0, + "children": [ + { + "name": "group", + "origin": [0.25, 1.6875, 4.5], + "color": 0, + "children": [] + } + ] + } + ] + } + ] + } + ] + }, + { + "name": "group", + "origin": [14, 12, 13], + "color": 0, + "children": [ + { + "name": "group", + "origin": [4.4375, 4.75, 6], + "color": 0, + "children": [ + { + "name": "group", + "origin": [2.75, 4.5, 6], + "color": 0, + "children": [ + { + "name": "group", + "origin": [7.875, 9.5, 13.4375], + "color": 0, + "children": [ + { + "name": "group", + "origin": [0.25, 1.6875, 4.5], + "color": 0, + "children": [] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/surgebinding/resources/assets/surgebinding/models/block/rockbud_variant5.json b/src/surgebinding/resources/assets/surgebinding/models/block/rockbud_variant5.json new file mode 100644 index 000000000..c9a820607 --- /dev/null +++ b/src/surgebinding/resources/assets/surgebinding/models/block/rockbud_variant5.json @@ -0,0 +1,696 @@ +{ + "credit": "Made with Blockbench", + "texture_size": [64, 64], + "textures": { + "0": "surgebinding:block/rockbud_variant", + "particle": "surgebinding:block/rockbud_variant" + }, + "elements": [ + { + "from": [6, 0, 6], + "to": [10, 1, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [15, 8, 15]}, + "faces": { + "north": {"uv": [5, 4.75, 6, 5], "texture": "#0"}, + "east": {"uv": [8, 6.75, 9, 7], "texture": "#0"}, + "south": {"uv": [8, 7.5, 9, 7.75], "texture": "#0"}, + "west": {"uv": [8.25, 2.75, 9.25, 3], "texture": "#0"}, + "up": {"uv": [7, 7, 6, 6], "texture": "#0"}, + "down": {"uv": [7, 4.75, 6, 5.75], "texture": "#0"} + } + }, + { + "from": [5, 1, 5], + "to": [11, 2, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [15, 9, 15]}, + "faces": { + "north": {"uv": [3.5, 7.25, 5, 7.5], "texture": "#0"}, + "east": {"uv": [0, 7.5, 1.5, 7.75], "texture": "#0"}, + "south": {"uv": [3.5, 7.5, 5, 7.75], "texture": "#0"}, + "west": {"uv": [5, 7.5, 6.5, 7.75], "texture": "#0"}, + "up": {"uv": [3.5, 3.5, 2, 2], "texture": "#0"}, + "down": {"uv": [3.5, 0, 2, 1.5], "texture": "#0"} + } + }, + { + "from": [4, 2, 4], + "to": [12, 4, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [15, 10, 15]}, + "faces": { + "north": {"uv": [6.25, 0, 8.25, 0.5], "texture": "#0"}, + "east": {"uv": [6.25, 0.5, 8.25, 1], "texture": "#0"}, + "south": {"uv": [6.25, 1, 8.25, 1.5], "texture": "#0"}, + "west": {"uv": [6.25, 1.5, 8.25, 2], "texture": "#0"}, + "up": {"uv": [2, 2, 0, 0], "texture": "#0"}, + "down": {"uv": [2, 2, 0, 4], "texture": "#0"} + } + }, + { + "from": [4.9375, 3.9375, 4.9375], + "to": [11.0625, 5.0625, 11.0625], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 4.5, 8]}, + "faces": { + "north": {"uv": [6.5, 7.5, 8, 7.75], "texture": "#0"}, + "east": {"uv": [7.5, 7, 9, 7.25], "texture": "#0"}, + "south": {"uv": [7.5, 7.25, 9, 7.5], "texture": "#0"}, + "west": {"uv": [0, 7.75, 1.5, 8], "texture": "#0"}, + "up": {"uv": [3.5, 5, 2, 3.5], "texture": "#0"}, + "down": {"uv": [5, 3.5, 3.5, 5], "texture": "#0"} + } + }, + { + "from": [3.5, 2.9375, 4], + "to": [4.5, 6.9375, 12], + "rotation": {"angle": 22.5, "axis": "z", "origin": [4, 2.9375, 8]}, + "faces": { + "north": {"uv": [8.5, 4.5, 9.5, 4.75], "rotation": 270, "texture": "#0"}, + "east": {"uv": [4.5, 2, 3.5, 0], "rotation": 90, "texture": "#0"}, + "south": {"uv": [8.5, 8, 9.5, 8.25], "rotation": 90, "texture": "#0"}, + "west": {"uv": [1, 4, 0, 6], "rotation": 90, "texture": "#0"}, + "up": {"uv": [6.25, 2, 8.25, 2.25], "rotation": 90, "texture": "#0"}, + "down": {"uv": [6, 5.75, 8, 6], "rotation": 90, "texture": "#0"} + } + }, + { + "from": [2.83043, 6.79152, 5], + "to": [5.83043, 7.79152, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [2.79827, 7.06126, 8]}, + "faces": { + "north": {"uv": [8, 10.5, 8.75, 10.75], "rotation": 180, "texture": "#0"}, + "east": {"uv": [3, 7.75, 4.5, 8], "rotation": 180, "texture": "#0"}, + "south": {"uv": [8.75, 10.5, 9.5, 10.75], "rotation": 180, "texture": "#0"}, + "west": {"uv": [1.5, 7.75, 3, 8], "rotation": 180, "texture": "#0"}, + "up": {"uv": [6.25, 1.5, 5.5, 3], "rotation": 180, "texture": "#0"}, + "down": {"uv": [6.25, 1.5, 5.5, 0], "rotation": 180, "texture": "#0"} + } + }, + { + "from": [11.5, 2.9375, 4], + "to": [12.5, 6.9375, 12], + "rotation": {"angle": -22.5, "axis": "z", "origin": [12, 2.9375, 8]}, + "faces": { + "north": {"uv": [8.5, 8.25, 9.5, 8.5], "rotation": 90, "texture": "#0"}, + "east": {"uv": [5.5, 0, 4.5, 2], "rotation": 270, "texture": "#0"}, + "south": {"uv": [2.5, 8.75, 3.5, 9], "rotation": 270, "texture": "#0"}, + "west": {"uv": [2, 6, 1, 4], "rotation": 270, "texture": "#0"}, + "up": {"uv": [6.25, 2.25, 8.25, 2.5], "rotation": 270, "texture": "#0"}, + "down": {"uv": [6.25, 2.5, 8.25, 2.75], "rotation": 270, "texture": "#0"} + } + }, + { + "from": [10.16957, 6.79152, 5], + "to": [13.16957, 7.79152, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [13.20173, 7.06126, 8]}, + "faces": { + "north": {"uv": [9.5, 10.5, 10.25, 10.75], "rotation": 180, "texture": "#0"}, + "east": {"uv": [6, 7.75, 7.5, 8], "rotation": 180, "texture": "#0"}, + "south": {"uv": [10.25, 10.5, 11, 10.75], "rotation": 180, "texture": "#0"}, + "west": {"uv": [4.5, 7.75, 6, 8], "rotation": 180, "texture": "#0"}, + "up": {"uv": [1.5, 6, 0.75, 7.5], "rotation": 180, "texture": "#0"}, + "down": {"uv": [0.75, 7.5, 0, 6], "rotation": 180, "texture": "#0"} + } + }, + { + "from": [4, 2.9375, 11.5], + "to": [12, 6.9375, 12.5], + "rotation": {"angle": 22.5, "axis": "x", "origin": [8, 2.9375, 12]}, + "faces": { + "north": {"uv": [5.5, 3, 3.5, 2], "rotation": 180, "texture": "#0"}, + "east": {"uv": [6, 8.75, 7, 9], "rotation": 90, "texture": "#0"}, + "south": {"uv": [4, 5, 2, 6], "texture": "#0"}, + "west": {"uv": [8.75, 0, 9.75, 0.25], "rotation": 270, "texture": "#0"}, + "up": {"uv": [6.5, 4, 8.5, 4.25], "texture": "#0"}, + "down": {"uv": [6.25, 2.75, 8.25, 3], "rotation": 180, "texture": "#0"} + } + }, + { + "from": [5, 7.02451, 13.01253], + "to": [11, 10.02451, 14.01253], + "rotation": {"angle": -45, "axis": "x", "origin": [8, 6.99235, 13.28227]}, + "faces": { + "north": {"uv": [6.5, 4.75, 5, 4], "rotation": 180, "texture": "#0"}, + "east": {"uv": [10.5, 0.75, 11.25, 1], "rotation": 90, "texture": "#0"}, + "south": {"uv": [3, 6, 1.5, 6.75], "texture": "#0"}, + "west": {"uv": [10.5, 1, 11.25, 1.25], "rotation": 270, "texture": "#0"}, + "up": {"uv": [0, 8, 1.5, 8.25], "texture": "#0"}, + "down": {"uv": [7.5, 7.75, 9, 8], "rotation": 180, "texture": "#0"} + } + }, + { + "from": [4, 2.9375, 3.5], + "to": [12, 6.9375, 4.5], + "rotation": {"angle": -22.5, "axis": "x", "origin": [8, 2.9375, 4]}, + "faces": { + "north": {"uv": [7, 3, 5, 4], "rotation": 180, "texture": "#0"}, + "east": {"uv": [8.75, 0.25, 9.75, 0.5], "rotation": 270, "texture": "#0"}, + "south": {"uv": [6, 6, 4, 5], "texture": "#0"}, + "west": {"uv": [8.75, 0.5, 9.75, 0.75], "rotation": 90, "texture": "#0"}, + "up": {"uv": [6.5, 4.25, 8.5, 4.5], "rotation": 180, "texture": "#0"}, + "down": {"uv": [6.5, 4.5, 8.5, 4.75], "texture": "#0"} + } + }, + { + "from": [5, 6.72262, 2.74989], + "to": [11, 7.72262, 5.74989], + "rotation": {"angle": -45, "axis": "x", "origin": [8, 6.99235, 2.71773]}, + "faces": { + "north": {"uv": [3, 8, 4.5, 8.25], "rotation": 180, "texture": "#0"}, + "east": {"uv": [10.5, 1.25, 11.25, 1.5], "rotation": 180, "texture": "#0"}, + "south": {"uv": [1.5, 8, 3, 8.25], "rotation": 180, "texture": "#0"}, + "west": {"uv": [10.5, 1.5, 11.25, 1.75], "rotation": 180, "texture": "#0"}, + "up": {"uv": [6, 6, 4.5, 6.75], "texture": "#0"}, + "down": {"uv": [4.5, 6.75, 3, 6], "texture": "#0"} + } + }, + { + "from": [8, 5.6875, 6], + "to": [8, 6.6875, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [16, 13.6875, 16]}, + "faces": { + "north": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "east": {"uv": [8.75, 3, 9.75, 3.25], "texture": "#0"}, + "south": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "west": {"uv": [8.75, 3.25, 9.75, 3.5], "texture": "#0"}, + "up": {"uv": [0, 1, 0, 0], "texture": "#0"}, + "down": {"uv": [0, 0, 0, 1], "texture": "#0"} + } + }, + { + "from": [8, 5.6875, 6], + "to": [8, 6.6875, 10], + "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 6.1875, 8]}, + "faces": { + "north": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "east": {"uv": [8.75, 3.5, 9.75, 3.75], "texture": "#0"}, + "south": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "west": {"uv": [8.75, 3.75, 9.75, 4], "texture": "#0"}, + "up": {"uv": [0, 1, 0, 0], "texture": "#0"}, + "down": {"uv": [0, 0, 0, 1], "texture": "#0"} + } + }, + { + "from": [8, 5.6875, 6], + "to": [8, 6.6875, 10], + "rotation": {"angle": 45, "axis": "y", "origin": [8, 6.1875, 8]}, + "faces": { + "north": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "east": {"uv": [8.75, 4.75, 9.75, 5], "texture": "#0"}, + "south": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "west": {"uv": [8.75, 5, 9.75, 5.25], "texture": "#0"}, + "up": {"uv": [0, 1, 0, 0], "texture": "#0"}, + "down": {"uv": [0, 0, 0, 1], "texture": "#0"} + } + }, + { + "from": [6, 5.6875, 8], + "to": [10, 6.6875, 8], + "rotation": {"angle": -22.5, "axis": "y", "origin": [8, 6.1875, 8]}, + "faces": { + "north": {"uv": [8.75, 5.25, 9.75, 5.5], "texture": "#0"}, + "east": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "south": {"uv": [8.75, 5.5, 9.75, 5.75], "texture": "#0"}, + "west": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "up": {"uv": [1, 0, 0, 0], "texture": "#0"}, + "down": {"uv": [1, 0, 0, 0], "texture": "#0"} + } + }, + { + "from": [6, 5.6875, 8], + "to": [10, 6.6875, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 6.1875, 8]}, + "faces": { + "north": {"uv": [8.75, 5.75, 9.75, 6], "texture": "#0"}, + "east": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "south": {"uv": [8.75, 6, 9.75, 6.25], "texture": "#0"}, + "west": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "up": {"uv": [1, 0, 0, 0], "texture": "#0"}, + "down": {"uv": [1, 0, 0, 0], "texture": "#0"} + } + }, + { + "from": [6, 5.6875, 8], + "to": [10, 6.6875, 8], + "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 6.1875, 8]}, + "faces": { + "north": {"uv": [8.75, 6.25, 9.75, 6.5], "texture": "#0"}, + "east": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "south": {"uv": [8.75, 6.5, 9.75, 6.75], "texture": "#0"}, + "west": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "up": {"uv": [1, 0, 0, 0], "texture": "#0"}, + "down": {"uv": [1, 0, 0, 0], "texture": "#0"} + } + }, + { + "from": [6, 5.6875, 8], + "to": [10, 6.6875, 8], + "rotation": {"angle": 45, "axis": "y", "origin": [8, 6.1875, 8]}, + "faces": { + "north": {"uv": [1, 9, 2, 9.25], "texture": "#0"}, + "east": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "south": {"uv": [2, 9, 3, 9.25], "texture": "#0"}, + "west": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "up": {"uv": [1, 0, 0, 0], "texture": "#0"}, + "down": {"uv": [1, 0, 0, 0], "texture": "#0"} + } + }, + { + "from": [8, 5.6875, 6], + "to": [8, 6.6875, 10], + "rotation": {"angle": -22.5, "axis": "y", "origin": [8, 6.1875, 8]}, + "faces": { + "north": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "east": {"uv": [3, 9, 4, 9.25], "texture": "#0"}, + "south": {"uv": [0, 0, 0, 0.25], "texture": "#0"}, + "west": {"uv": [4, 9, 5, 9.25], "texture": "#0"}, + "up": {"uv": [0, 1, 0, 0], "texture": "#0"}, + "down": {"uv": [0, 0, 0, 1], "texture": "#0"} + } + }, + { + "from": [5, 4, 5], + "to": [7, 6, 7], + "rotation": {"angle": 0, "axis": "y", "origin": [14, 12, 13]}, + "faces": { + "north": {"uv": [3, 1.5, 3.5, 2], "texture": "#0"}, + "east": {"uv": [4.5, 3, 5, 3.5], "texture": "#0"}, + "south": {"uv": [9.75, 5.25, 10.25, 5.75], "texture": "#0"}, + "west": {"uv": [9.75, 5.75, 10.25, 6.25], "texture": "#0"}, + "up": {"uv": [10.25, 6.75, 9.75, 6.25], "texture": "#0"}, + "down": {"uv": [0.5, 10, 0, 10.5], "texture": "#0"} + } + }, + { + "from": [9, 4, 5], + "to": [11, 6, 7], + "rotation": {"angle": 0, "axis": "y", "origin": [3, 12, 14]}, + "faces": { + "north": {"uv": [6.5, 10, 7, 10.5], "texture": "#0"}, + "east": {"uv": [7, 10, 7.5, 10.5], "texture": "#0"}, + "south": {"uv": [7.5, 10, 8, 10.5], "texture": "#0"}, + "west": {"uv": [8, 10, 8.5, 10.5], "texture": "#0"}, + "up": {"uv": [9, 10.5, 8.5, 10], "texture": "#0"}, + "down": {"uv": [9.5, 10, 9, 10.5], "texture": "#0"} + } + }, + { + "from": [9, 4, 9], + "to": [11, 6, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [2, 12, 3]}, + "faces": { + "north": {"uv": [10, 2.25, 10.5, 2.75], "texture": "#0"}, + "east": {"uv": [2.5, 10.25, 3, 10.75], "texture": "#0"}, + "south": {"uv": [3, 10.25, 3.5, 10.75], "texture": "#0"}, + "west": {"uv": [3.5, 10.25, 4, 10.75], "texture": "#0"}, + "up": {"uv": [4.5, 10.75, 4, 10.25], "texture": "#0"}, + "down": {"uv": [5, 10.25, 4.5, 10.75], "texture": "#0"} + } + }, + { + "from": [5, 4, 9], + "to": [7, 6, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [13, 12, 2]}, + "faces": { + "north": {"uv": [10.25, 5.75, 10.75, 6.25], "texture": "#0"}, + "east": {"uv": [10.25, 6.25, 10.75, 6.75], "texture": "#0"}, + "south": {"uv": [10.25, 6.75, 10.75, 7.25], "texture": "#0"}, + "west": {"uv": [10.25, 7.25, 10.75, 7.75], "texture": "#0"}, + "up": {"uv": [10.75, 9, 10.25, 8.5], "texture": "#0"}, + "down": {"uv": [10.75, 9, 10.25, 9.5], "texture": "#0"} + } + } + ], + "groups": [ + { + "name": "group", + "origin": [8, 8, 8], + "color": 0, + "children": [0, 1, 2, 3] + }, + { + "name": "group", + "origin": [15, 10, 15], + "color": 0, + "children": [ + 4, + { + "name": "group", + "origin": [11, 11, 12], + "color": 0, + "children": [5] + } + ] + }, + { + "name": "group", + "origin": [15, 10, 15], + "color": 0, + "children": [ + 6, + { + "name": "group", + "origin": [11, 11, 12], + "color": 0, + "children": [7] + } + ] + }, + { + "name": "group", + "origin": [15, 10, 15], + "color": 0, + "children": [ + 8, + { + "name": "group", + "origin": [11, 11, 12], + "color": 0, + "children": [9] + } + ] + }, + { + "name": "group", + "origin": [15, 10, 15], + "color": 0, + "children": [ + 10, + { + "name": "group", + "origin": [11, 11, 12], + "color": 0, + "children": [11] + } + ] + }, + { + "name": "flower1", + "origin": [8, 8, 8], + "color": 0, + "children": [12, 13, 14, 15, 16, 17, 18, 19] + }, + { + "name": "group", + "origin": [8, 8, 8], + "color": 0, + "children": [ + 20, + { + "name": "group", + "origin": [14, 12, 13], + "color": 0, + "children": [ + { + "name": "group", + "origin": [4.4375, 4.75, 6], + "color": 0, + "children": [ + { + "name": "group", + "origin": [2.75, 4.5, 6], + "color": 0, + "children": [ + { + "name": "group", + "origin": [7.875, 9.5, 13.4375], + "color": 0, + "children": [ + { + "name": "group", + "origin": [0.25, 1.6875, 4.5], + "color": 0, + "children": [] + } + ] + } + ] + } + ] + } + ] + }, + { + "name": "group", + "origin": [14, 12, 13], + "color": 0, + "children": [ + { + "name": "group", + "origin": [4.4375, 4.75, 6], + "color": 0, + "children": [ + { + "name": "group", + "origin": [2.75, 4.5, 6], + "color": 0, + "children": [ + { + "name": "group", + "origin": [7.875, 9.5, 13.4375], + "color": 0, + "children": [ + { + "name": "group", + "origin": [0.25, 1.6875, 4.5], + "color": 0, + "children": [] + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "name": "group", + "origin": [8, 8, 8], + "color": 0, + "children": [ + 21, + { + "name": "group", + "origin": [14, 12, 13], + "color": 0, + "children": [ + { + "name": "group", + "origin": [4.4375, 4.75, 6], + "color": 0, + "children": [ + { + "name": "group", + "origin": [2.75, 4.5, 6], + "color": 0, + "children": [ + { + "name": "group", + "origin": [7.875, 9.5, 13.4375], + "color": 0, + "children": [ + { + "name": "group", + "origin": [0.25, 1.6875, 4.5], + "color": 0, + "children": [] + } + ] + } + ] + } + ] + } + ] + }, + { + "name": "group", + "origin": [14, 12, 13], + "color": 0, + "children": [ + { + "name": "group", + "origin": [4.4375, 4.75, 6], + "color": 0, + "children": [ + { + "name": "group", + "origin": [2.75, 4.5, 6], + "color": 0, + "children": [ + { + "name": "group", + "origin": [7.875, 9.5, 13.4375], + "color": 0, + "children": [ + { + "name": "group", + "origin": [0.25, 1.6875, 4.5], + "color": 0, + "children": [] + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "name": "group", + "origin": [8, 8, 8], + "color": 0, + "children": [ + 22, + { + "name": "group", + "origin": [14, 12, 13], + "color": 0, + "children": [ + { + "name": "group", + "origin": [4.4375, 4.75, 6], + "color": 0, + "children": [ + { + "name": "group", + "origin": [2.75, 4.5, 6], + "color": 0, + "children": [ + { + "name": "group", + "origin": [7.875, 9.5, 13.4375], + "color": 0, + "children": [ + { + "name": "group", + "origin": [0.25, 1.6875, 4.5], + "color": 0, + "children": [] + } + ] + } + ] + } + ] + } + ] + }, + { + "name": "group", + "origin": [14, 12, 13], + "color": 0, + "children": [ + { + "name": "group", + "origin": [4.4375, 4.75, 6], + "color": 0, + "children": [ + { + "name": "group", + "origin": [2.75, 4.5, 6], + "color": 0, + "children": [ + { + "name": "group", + "origin": [7.875, 9.5, 13.4375], + "color": 0, + "children": [ + { + "name": "group", + "origin": [0.25, 1.6875, 4.5], + "color": 0, + "children": [] + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "name": "group", + "origin": [8, 8, 8], + "color": 0, + "children": [ + 23, + { + "name": "group", + "origin": [14, 12, 13], + "color": 0, + "children": [ + { + "name": "group", + "origin": [4.4375, 4.75, 6], + "color": 0, + "children": [ + { + "name": "group", + "origin": [2.75, 4.5, 6], + "color": 0, + "children": [ + { + "name": "group", + "origin": [7.875, 9.5, 13.4375], + "color": 0, + "children": [ + { + "name": "group", + "origin": [0.25, 1.6875, 4.5], + "color": 0, + "children": [] + } + ] + } + ] + } + ] + } + ] + }, + { + "name": "group", + "origin": [14, 12, 13], + "color": 0, + "children": [ + { + "name": "group", + "origin": [4.4375, 4.75, 6], + "color": 0, + "children": [ + { + "name": "group", + "origin": [2.75, 4.5, 6], + "color": 0, + "children": [ + { + "name": "group", + "origin": [7.875, 9.5, 13.4375], + "color": 0, + "children": [ + { + "name": "group", + "origin": [0.25, 1.6875, 4.5], + "color": 0, + "children": [] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/surgebinding/resources/assets/surgebinding/models/block/rockbud_variant6.json b/src/surgebinding/resources/assets/surgebinding/models/block/rockbud_variant6.json new file mode 100644 index 000000000..138446112 --- /dev/null +++ b/src/surgebinding/resources/assets/surgebinding/models/block/rockbud_variant6.json @@ -0,0 +1,230 @@ +{ + "credit": "Made with Blockbench", + "texture_size": [64, 64], + "textures": { + "0": "surgebinding:block/rockbud_variant", + "particle": "surgebinding:block/rockbud_variant" + }, + "elements": [ + { + "from": [6, 0, 6], + "to": [10, 1, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [15, 8, 15]}, + "faces": { + "north": {"uv": [5, 4.75, 6, 5], "texture": "#0"}, + "east": {"uv": [8, 6.75, 9, 7], "texture": "#0"}, + "south": {"uv": [8, 7.5, 9, 7.75], "texture": "#0"}, + "west": {"uv": [8.25, 2.75, 9.25, 3], "texture": "#0"}, + "up": {"uv": [7, 7, 6, 6], "texture": "#0"}, + "down": {"uv": [7, 4.75, 6, 5.75], "texture": "#0"} + } + }, + { + "from": [5, 1, 5], + "to": [11, 2, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [15, 9, 15]}, + "faces": { + "north": {"uv": [3.5, 7.25, 5, 7.5], "texture": "#0"}, + "east": {"uv": [0, 7.5, 1.5, 7.75], "texture": "#0"}, + "south": {"uv": [3.5, 7.5, 5, 7.75], "texture": "#0"}, + "west": {"uv": [5, 7.5, 6.5, 7.75], "texture": "#0"}, + "up": {"uv": [3.5, 3.5, 2, 2], "texture": "#0"}, + "down": {"uv": [3.5, 0, 2, 1.5], "texture": "#0"} + } + }, + { + "from": [4, 2, 4], + "to": [12, 4, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [15, 10, 15]}, + "faces": { + "north": {"uv": [6.25, 0, 8.25, 0.5], "texture": "#0"}, + "east": {"uv": [6.25, 0.5, 8.25, 1], "texture": "#0"}, + "south": {"uv": [6.25, 1, 8.25, 1.5], "texture": "#0"}, + "west": {"uv": [6.25, 1.5, 8.25, 2], "texture": "#0"}, + "up": {"uv": [2, 2, 0, 0], "texture": "#0"}, + "down": {"uv": [2, 2, 0, 4], "texture": "#0"} + } + }, + { + "from": [4.9375, 3.9375, 4.9375], + "to": [11.0625, 5.0625, 11.0625], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 4.5, 8]}, + "faces": { + "north": {"uv": [6.5, 7.5, 8, 7.75], "texture": "#0"}, + "east": {"uv": [7.5, 7, 9, 7.25], "texture": "#0"}, + "south": {"uv": [7.5, 7.25, 9, 7.5], "texture": "#0"}, + "west": {"uv": [0, 7.75, 1.5, 8], "texture": "#0"}, + "up": {"uv": [3.5, 5, 2, 3.5], "texture": "#0"}, + "down": {"uv": [5, 3.5, 3.5, 5], "texture": "#0"} + } + }, + { + "from": [3, 3, 4], + "to": [4, 7, 12], + "rotation": {"angle": -22.5, "axis": "z", "origin": [3.5, 3, 8]}, + "faces": { + "north": {"uv": [8.5, 4.5, 9.5, 4.75], "rotation": 270, "texture": "#0"}, + "east": {"uv": [4.5, 2, 3.5, 0], "rotation": 90, "texture": "#0"}, + "south": {"uv": [8.5, 8, 9.5, 8.25], "rotation": 90, "texture": "#0"}, + "west": {"uv": [1, 4, 0, 6], "rotation": 90, "texture": "#0"}, + "up": {"uv": [6.25, 2, 8.25, 2.25], "rotation": 90, "texture": "#0"}, + "down": {"uv": [6, 5.75, 8, 6], "rotation": 90, "texture": "#0"} + } + }, + { + "from": [4.63986, 6.03331, 5], + "to": [7.63986, 7.03331, 11], + "rotation": {"angle": -22.5, "axis": "z", "origin": [4.67755, 6.92455, 8]}, + "faces": { + "north": {"uv": [8, 10.5, 8.75, 10.75], "rotation": 180, "texture": "#0"}, + "east": {"uv": [3, 7.75, 4.5, 8], "rotation": 180, "texture": "#0"}, + "south": {"uv": [8.75, 10.5, 9.5, 10.75], "rotation": 180, "texture": "#0"}, + "west": {"uv": [1.5, 7.75, 3, 8], "rotation": 180, "texture": "#0"}, + "up": {"uv": [6.25, 1.5, 5.5, 3], "rotation": 180, "texture": "#0"}, + "down": {"uv": [6.25, 1.5, 5.5, 0], "rotation": 180, "texture": "#0"} + } + }, + { + "from": [12, 3, 4], + "to": [13, 7, 12], + "rotation": {"angle": 22.5, "axis": "z", "origin": [12.5, 3, 8]}, + "faces": { + "north": {"uv": [8.5, 8.25, 9.5, 8.5], "rotation": 90, "texture": "#0"}, + "east": {"uv": [5.5, 0, 4.5, 2], "rotation": 270, "texture": "#0"}, + "south": {"uv": [2.5, 8.75, 3.5, 9], "rotation": 270, "texture": "#0"}, + "west": {"uv": [2, 6, 1, 4], "rotation": 270, "texture": "#0"}, + "up": {"uv": [6.25, 2.25, 8.25, 2.5], "rotation": 270, "texture": "#0"}, + "down": {"uv": [6.25, 2.5, 8.25, 2.75], "rotation": 270, "texture": "#0"} + } + }, + { + "from": [8.36014, 6.03331, 5], + "to": [11.36014, 7.03331, 11], + "rotation": {"angle": 22.5, "axis": "z", "origin": [11.32245, 6.92455, 8]}, + "faces": { + "north": {"uv": [9.5, 10.5, 10.25, 10.75], "rotation": 180, "texture": "#0"}, + "east": {"uv": [6, 7.75, 7.5, 8], "rotation": 180, "texture": "#0"}, + "south": {"uv": [10.25, 10.5, 11, 10.75], "rotation": 180, "texture": "#0"}, + "west": {"uv": [4.5, 7.75, 6, 8], "rotation": 180, "texture": "#0"}, + "up": {"uv": [1.5, 6, 0.75, 7.5], "rotation": 180, "texture": "#0"}, + "down": {"uv": [0.75, 7.5, 0, 6], "rotation": 180, "texture": "#0"} + } + }, + { + "from": [4, 3, 12], + "to": [12, 7, 13], + "rotation": {"angle": -22.5, "axis": "x", "origin": [8, 3, 12.5]}, + "faces": { + "north": {"uv": [5.5, 3, 3.5, 2], "rotation": 180, "texture": "#0"}, + "east": {"uv": [6, 8.75, 7, 9], "rotation": 90, "texture": "#0"}, + "south": {"uv": [4, 5, 2, 6], "texture": "#0"}, + "west": {"uv": [8.75, 0, 9.75, 0.25], "rotation": 270, "texture": "#0"}, + "up": {"uv": [6.5, 4, 8.5, 4.25], "texture": "#0"}, + "down": {"uv": [6.25, 2.75, 8.25, 3], "rotation": 180, "texture": "#0"} + } + }, + { + "from": [5, 6.03331, 8.36014], + "to": [11, 7.03331, 11.36014], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 6.92455, 11.32245]}, + "faces": { + "north": {"uv": [0, 8, 1.5, 8.25], "rotation": 180, "texture": "#0"}, + "east": {"uv": [10.5, 0.75, 11.25, 1], "rotation": 180, "texture": "#0"}, + "south": {"uv": [7.5, 7.75, 9, 8], "rotation": 180, "texture": "#0"}, + "west": {"uv": [10.5, 1, 11.25, 1.25], "rotation": 180, "texture": "#0"}, + "up": {"uv": [3, 6, 1.5, 6.75], "texture": "#0"}, + "down": {"uv": [6.5, 4.75, 5, 4], "texture": "#0"} + } + }, + { + "from": [4, 3, 3], + "to": [12, 7, 4], + "rotation": {"angle": 22.5, "axis": "x", "origin": [8, 3, 3.5]}, + "faces": { + "north": {"uv": [7, 3, 5, 4], "rotation": 180, "texture": "#0"}, + "east": {"uv": [8.75, 0.25, 9.75, 0.5], "rotation": 270, "texture": "#0"}, + "south": {"uv": [6, 6, 4, 5], "texture": "#0"}, + "west": {"uv": [8.75, 0.5, 9.75, 0.75], "rotation": 90, "texture": "#0"}, + "up": {"uv": [6.5, 4.25, 8.5, 4.5], "rotation": 180, "texture": "#0"}, + "down": {"uv": [6.5, 4.5, 8.5, 4.75], "texture": "#0"} + } + }, + { + "from": [5, 6.03331, 4.63986], + "to": [11, 7.03331, 7.63986], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 6.92455, 4.67755]}, + "faces": { + "north": {"uv": [3, 8, 4.5, 8.25], "rotation": 180, "texture": "#0"}, + "east": {"uv": [10.5, 1.25, 11.25, 1.5], "rotation": 180, "texture": "#0"}, + "south": {"uv": [1.5, 8, 3, 8.25], "rotation": 180, "texture": "#0"}, + "west": {"uv": [10.5, 1.5, 11.25, 1.75], "rotation": 180, "texture": "#0"}, + "up": {"uv": [6, 6, 4.5, 6.75], "texture": "#0"}, + "down": {"uv": [4.5, 6.75, 3, 6], "texture": "#0"} + } + } + ], + "groups": [ + { + "name": "group", + "origin": [8, 8, 8], + "color": 0, + "children": [0, 1, 2, 3] + }, + { + "name": "group", + "origin": [15, 10, 15], + "color": 0, + "children": [ + 4, + { + "name": "group", + "origin": [11, 11, 12], + "color": 0, + "children": [5] + } + ] + }, + { + "name": "group", + "origin": [15, 10, 15], + "color": 0, + "children": [ + 6, + { + "name": "group", + "origin": [11, 11, 12], + "color": 0, + "children": [7] + } + ] + }, + { + "name": "group", + "origin": [15, 10, 15], + "color": 0, + "children": [ + 8, + { + "name": "group", + "origin": [11, 11, 12], + "color": 0, + "children": [9] + } + ] + }, + { + "name": "group", + "origin": [15, 10, 15], + "color": 0, + "children": [ + 10, + { + "name": "group", + "origin": [11, 11, 12], + "color": 0, + "children": [11] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/surgebinding/resources/assets/surgebinding/models/block/vinebud1.json b/src/surgebinding/resources/assets/surgebinding/models/block/vinebud1.json new file mode 100644 index 000000000..0bbe2f12f --- /dev/null +++ b/src/surgebinding/resources/assets/surgebinding/models/block/vinebud1.json @@ -0,0 +1,706 @@ +{ + "credit": "Made with Blockbench", + "texture_size": [32, 32], + "textures": { + "0": "surgebinding:block/vinebud", + "particle": "surgebinding:block/vinebud" + }, + "elements": [ + { + "from": [5, 0, 5], + "to": [11, 6, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [16, 8, 16]}, + "faces": { + "north": {"uv": [0, 0, 3, 3], "texture": "#0"}, + "east": {"uv": [0, 3, 3, 6], "texture": "#0"}, + "south": {"uv": [3, 3, 6, 6], "texture": "#0"}, + "west": {"uv": [3, 0, 6, 3], "texture": "#0"}, + "up": {"uv": [3, 9, 0, 6], "texture": "#0"}, + "down": {"uv": [6, 6, 3, 9], "texture": "#0"} + } + }, + { + "from": [5, 1, 11], + "to": [11, 5, 12], + "rotation": {"angle": 22.5, "axis": "x", "origin": [8, 1, 11]}, + "faces": { + "north": {"uv": [6, 6, 9, 8], "texture": "#0"}, + "east": {"uv": [11, 11, 11.5, 13], "texture": "#0"}, + "south": {"uv": [6, 0, 9, 2], "texture": "#0"}, + "west": {"uv": [11, 0, 11.5, 2], "texture": "#0"}, + "up": {"uv": [12, 8.5, 9, 8], "texture": "#0"}, + "down": {"uv": [12, 8.5, 9, 9], "texture": "#0"} + } + }, + { + "from": [6, 4.69552, 9.53073], + "to": [10, 5.69552, 12.53073], + "rotation": {"angle": 45, "axis": "x", "origin": [8, 4.69552, 12.53073]}, + "faces": { + "north": {"uv": [11, 2, 13, 2.5], "texture": "#0"}, + "east": {"uv": [11.5, 1, 13, 1.5], "texture": "#0"}, + "south": {"uv": [11, 2.5, 13, 3], "texture": "#0"}, + "west": {"uv": [11.5, 1.5, 13, 2], "texture": "#0"}, + "up": {"uv": [11, 1.5, 9, 0], "texture": "#0"}, + "down": {"uv": [11, 1.5, 9, 3], "texture": "#0"} + } + }, + { + "from": [5, 1, 4], + "to": [11, 5, 5], + "rotation": {"angle": -22.5, "axis": "x", "origin": [8, 1, 5]}, + "faces": { + "north": {"uv": [6, 2, 9, 4], "texture": "#0"}, + "east": {"uv": [11, 3, 11.5, 5], "texture": "#0"}, + "south": {"uv": [6, 4, 9, 6], "texture": "#0"}, + "west": {"uv": [0, 11.5, 0.5, 13.5], "texture": "#0"}, + "up": {"uv": [3, 11.5, 0, 11], "texture": "#0"}, + "down": {"uv": [6, 11, 3, 11.5], "texture": "#0"} + } + }, + { + "from": [6, 4.69552, 3.46927], + "to": [10, 5.69552, 6.46927], + "rotation": {"angle": -45, "axis": "x", "origin": [8, 4.69552, 3.46927]}, + "faces": { + "north": {"uv": [11, 5, 13, 5.5], "texture": "#0"}, + "east": {"uv": [11.5, 11, 13, 11.5], "texture": "#0"}, + "south": {"uv": [11, 5.5, 13, 6], "texture": "#0"}, + "west": {"uv": [12, 3, 13.5, 3.5], "texture": "#0"}, + "up": {"uv": [11, 4.5, 9, 3], "texture": "#0"}, + "down": {"uv": [11, 4.5, 9, 6], "texture": "#0"} + } + }, + { + "from": [4, 1, 5], + "to": [5, 5, 11], + "rotation": {"angle": 22.5, "axis": "z", "origin": [5, 1, 8]}, + "faces": { + "north": {"uv": [0.5, 11.5, 1, 13.5], "texture": "#0"}, + "east": {"uv": [6, 8, 9, 10], "texture": "#0"}, + "south": {"uv": [1, 11.5, 1.5, 13.5], "texture": "#0"}, + "west": {"uv": [0, 9, 3, 11], "texture": "#0"}, + "up": {"uv": [9.5, 14, 9, 11], "texture": "#0"}, + "down": {"uv": [10, 11, 9.5, 14], "texture": "#0"} + } + }, + { + "from": [3.46927, 4.69552, 6], + "to": [6.46927, 5.69552, 10], + "rotation": {"angle": 45, "axis": "z", "origin": [3.46927, 4.69552, 8]}, + "faces": { + "north": {"uv": [12, 3.5, 13.5, 4], "texture": "#0"}, + "east": {"uv": [1.5, 11.5, 3.5, 12], "texture": "#0"}, + "south": {"uv": [12, 4, 13.5, 4.5], "texture": "#0"}, + "west": {"uv": [3.5, 11.5, 5.5, 12], "texture": "#0"}, + "up": {"uv": [10.5, 8, 9, 6], "texture": "#0"}, + "down": {"uv": [7.5, 10, 6, 12], "texture": "#0"} + } + }, + { + "from": [11, 1, 5], + "to": [12, 5, 11], + "rotation": {"angle": -22.5, "axis": "z", "origin": [11, 1, 8]}, + "faces": { + "north": {"uv": [5.5, 11.5, 6, 13.5], "texture": "#0"}, + "east": {"uv": [3, 9, 6, 11], "texture": "#0"}, + "south": {"uv": [11.5, 11.5, 12, 13.5], "texture": "#0"}, + "west": {"uv": [9, 9, 12, 11], "texture": "#0"}, + "up": {"uv": [10.5, 14, 10, 11], "texture": "#0"}, + "down": {"uv": [11, 11, 10.5, 14], "texture": "#0"} + } + }, + { + "from": [9.53073, 4.69552, 6], + "to": [12.53073, 5.69552, 10], + "rotation": {"angle": -45, "axis": "z", "origin": [12.53073, 4.69552, 8]}, + "faces": { + "north": {"uv": [12, 4.5, 13.5, 5], "texture": "#0"}, + "east": {"uv": [11.5, 0, 13.5, 0.5], "texture": "#0"}, + "south": {"uv": [12, 6, 13.5, 6.5], "texture": "#0"}, + "west": {"uv": [11.5, 0.5, 13.5, 1], "texture": "#0"}, + "up": {"uv": [9, 12, 7.5, 10], "texture": "#0"}, + "down": {"uv": [12, 6, 10.5, 8], "texture": "#0"} + } + }, + { + "from": [6, 6, 9], + "to": [6, 10, 10], + "rotation": {"angle": 22.5, "axis": "z", "origin": [6, 6, 9]}, + "faces": { + "north": {"uv": [0, 0, 0, 2], "texture": "#0"}, + "east": {"uv": [11.5, 3, 12, 5], "texture": "#0"}, + "south": {"uv": [0, 0, 0, 2], "texture": "#0"}, + "west": {"uv": [1.5, 12, 2, 14], "texture": "#0"}, + "up": {"uv": [0, 0.5, 0, 0], "texture": "#0"}, + "down": {"uv": [0, 0, 0, 0.5], "texture": "#0"} + } + }, + { + "from": [6, 6, 6], + "to": [6, 10, 7], + "rotation": {"angle": 22.5, "axis": "z", "origin": [6, 6, 6]}, + "faces": { + "north": {"uv": [0, 0, 0, 2], "texture": "#0"}, + "east": {"uv": [2, 12, 2.5, 14], "texture": "#0"}, + "south": {"uv": [0, 0, 0, 2], "texture": "#0"}, + "west": {"uv": [2.5, 12, 3, 14], "texture": "#0"}, + "up": {"uv": [0, 0.5, 0, 0], "texture": "#0"}, + "down": {"uv": [0, 0, 0, 0.5], "texture": "#0"} + } + }, + { + "from": [10, 6, 9], + "to": [10, 10, 10], + "rotation": {"angle": -22.5, "axis": "z", "origin": [10, 6, 9]}, + "faces": { + "north": {"uv": [0, 0, 0, 2], "texture": "#0"}, + "east": {"uv": [3, 12, 3.5, 14], "texture": "#0"}, + "south": {"uv": [0, 0, 0, 2], "texture": "#0"}, + "west": {"uv": [3.5, 12, 4, 14], "texture": "#0"}, + "up": {"uv": [0, 0.5, 0, 0], "texture": "#0"}, + "down": {"uv": [0, 0, 0, 0.5], "texture": "#0"} + } + }, + { + "from": [10, 6, 6], + "to": [10, 10, 7], + "rotation": {"angle": -22.5, "axis": "z", "origin": [10, 6, 6]}, + "faces": { + "north": {"uv": [0, 0, 0, 2], "texture": "#0"}, + "east": {"uv": [4, 12, 4.5, 14], "texture": "#0"}, + "south": {"uv": [0, 0, 0, 2], "texture": "#0"}, + "west": {"uv": [4.5, 12, 5, 14], "texture": "#0"}, + "up": {"uv": [0, 0.5, 0, 0], "texture": "#0"}, + "down": {"uv": [0, 0, 0, 0.5], "texture": "#0"} + } + }, + { + "from": [6, 6, 6], + "to": [7, 10, 6], + "rotation": {"angle": -22.5, "axis": "x", "origin": [7, 6, 6]}, + "faces": { + "north": {"uv": [5, 12, 5.5, 14], "texture": "#0"}, + "east": {"uv": [0, 0, 0, 2], "texture": "#0"}, + "south": {"uv": [6, 12, 6.5, 14], "texture": "#0"}, + "west": {"uv": [0, 0, 0, 2], "texture": "#0"}, + "up": {"uv": [0.5, 0, 0, 0], "texture": "#0"}, + "down": {"uv": [0.5, 0, 0, 0], "texture": "#0"} + } + }, + { + "from": [9, 6, 6], + "to": [10, 10, 6], + "rotation": {"angle": -22.5, "axis": "x", "origin": [10, 6, 6]}, + "faces": { + "north": {"uv": [6.5, 12, 7, 14], "texture": "#0"}, + "east": {"uv": [0, 0, 0, 2], "texture": "#0"}, + "south": {"uv": [7, 12, 7.5, 14], "texture": "#0"}, + "west": {"uv": [0, 0, 0, 2], "texture": "#0"}, + "up": {"uv": [0.5, 0, 0, 0], "texture": "#0"}, + "down": {"uv": [0.5, 0, 0, 0], "texture": "#0"} + } + }, + { + "from": [9, 6, 10], + "to": [10, 10, 10], + "rotation": {"angle": 22.5, "axis": "x", "origin": [9, 6, 10]}, + "faces": { + "north": {"uv": [7.5, 12, 8, 14], "texture": "#0"}, + "east": {"uv": [0, 0, 0, 2], "texture": "#0"}, + "south": {"uv": [8, 12, 8.5, 14], "texture": "#0"}, + "west": {"uv": [0, 0, 0, 2], "texture": "#0"}, + "up": {"uv": [0.5, 0, 0, 0], "texture": "#0"}, + "down": {"uv": [0.5, 0, 0, 0], "texture": "#0"} + } + }, + { + "from": [6, 6, 10], + "to": [7, 10, 10], + "rotation": {"angle": 22.5, "axis": "x", "origin": [6, 6, 10]}, + "faces": { + "north": {"uv": [8.5, 12, 9, 14], "texture": "#0"}, + "east": {"uv": [0, 0, 0, 2], "texture": "#0"}, + "south": {"uv": [12, 12, 12.5, 14], "texture": "#0"}, + "west": {"uv": [0, 0, 0, 2], "texture": "#0"}, + "up": {"uv": [0.5, 0, 0, 0], "texture": "#0"}, + "down": {"uv": [0.5, 0, 0, 0], "texture": "#0"} + } + }, + { + "from": [6, 5, 9], + "to": [7, 8, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [14, 14, 17]}, + "faces": { + "north": {"uv": [12, 6.5, 12.5, 8], "texture": "#0"}, + "east": {"uv": [12, 8, 12.5, 9.5], "texture": "#0"}, + "south": {"uv": [12, 9.5, 12.5, 11], "texture": "#0"}, + "west": {"uv": [12.5, 12.5, 13, 14], "texture": "#0"}, + "up": {"uv": [12.5, 12, 12, 11.5], "texture": "#0"}, + "down": {"uv": [13.5, 2.5, 13, 3], "texture": "#0"} + } + }, + { + "from": [6.125, 7.125, 9.125], + "to": [6.875, 9.875, 9.875], + "rotation": {"angle": 22.5, "axis": "x", "origin": [6.5, 7.5, 9.5]}, + "faces": { + "north": {"uv": [12.5, 6.5, 13, 8], "texture": "#0"}, + "east": {"uv": [12.5, 8, 13, 9.5], "texture": "#0"}, + "south": {"uv": [12.5, 9.5, 13, 11], "texture": "#0"}, + "west": {"uv": [11, 13, 11.5, 14.5], "texture": "#0"}, + "up": {"uv": [13.5, 13, 13, 12.5], "texture": "#0"}, + "down": {"uv": [14.5, 13.5, 14, 14], "texture": "#0"} + } + }, + { + "from": [6.25, 9.25, 10.0625], + "to": [6.75, 11.75, 10.5625], + "rotation": {"angle": -22.5, "axis": "z", "origin": [6.5, 9.5, 10.3125]}, + "faces": { + "north": {"uv": [13, 13, 13.5, 14.5], "texture": "#0"}, + "east": {"uv": [13, 1, 13.5, 2.5], "texture": "#0"}, + "south": {"uv": [13, 6.5, 13.5, 8], "texture": "#0"}, + "west": {"uv": [13, 8, 13.5, 9.5], "texture": "#0"}, + "up": {"uv": [15, 14.5, 14.5, 14], "texture": "#0"}, + "down": {"uv": [6, 15, 5.5, 15.5], "texture": "#0"} + } + }, + { + "from": [7.25, 11.375, 10.1875], + "to": [7.5, 13.625, 10.4375], + "rotation": {"angle": 22.5, "axis": "z", "origin": [7.375, 11.5, 10.3125]}, + "faces": { + "north": {"uv": [13, 9.5, 13.5, 11], "texture": "#0"}, + "east": {"uv": [13, 11, 13.5, 12.5], "texture": "#0"}, + "south": {"uv": [0, 13.5, 0.5, 15], "texture": "#0"}, + "west": {"uv": [0.5, 13.5, 1, 15], "texture": "#0"}, + "up": {"uv": [12, 15.5, 11.5, 15], "texture": "#0"}, + "down": {"uv": [14, 15, 13.5, 15.5], "texture": "#0"} + } + }, + { + "from": [6.5, 13.45653, 10.34183], + "to": [6.625, 14.58153, 10.46683], + "rotation": {"angle": -22.5, "axis": "x", "origin": [6.5625, 13.25, 10.5]}, + "faces": { + "north": {"uv": [12.5, 11.5, 13, 12.5], "texture": "#0"}, + "east": {"uv": [13, 5, 13.5, 6], "texture": "#0"}, + "south": {"uv": [14.5, 3, 15, 4], "texture": "#0"}, + "west": {"uv": [14.5, 4, 15, 5], "texture": "#0"}, + "up": {"uv": [15.5, 15.5, 15, 15], "texture": "#0"}, + "down": {"uv": [15.5, 0, 15, 0.5], "texture": "#0"} + } + }, + { + "from": [9, 5, 9], + "to": [10, 8, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [9, 6, 10]}, + "faces": { + "north": {"uv": [1, 13.5, 1.5, 15], "texture": "#0"}, + "east": {"uv": [5.5, 13.5, 6, 15], "texture": "#0"}, + "south": {"uv": [11.5, 13.5, 12, 15], "texture": "#0"}, + "west": {"uv": [13.5, 13.5, 14, 15], "texture": "#0"}, + "up": {"uv": [15.5, 1, 15, 0.5], "texture": "#0"}, + "down": {"uv": [15.5, 1, 15, 1.5], "texture": "#0"} + } + }, + { + "from": [9.66096, 6.81948, 9.125], + "to": [10.41096, 9.56948, 9.875], + "rotation": {"angle": 22.5, "axis": "z", "origin": [9, 6, 10]}, + "faces": { + "north": {"uv": [13.5, 0, 14, 1.5], "texture": "#0"}, + "east": {"uv": [13.5, 1.5, 14, 3], "texture": "#0"}, + "south": {"uv": [13.5, 3, 14, 4.5], "texture": "#0"}, + "west": {"uv": [13.5, 4.5, 14, 6], "texture": "#0"}, + "up": {"uv": [15.5, 2, 15, 1.5], "texture": "#0"}, + "down": {"uv": [15.5, 2, 15, 2.5], "texture": "#0"} + } + }, + { + "from": [8.4375, 8.79224, 7.94867], + "to": [8.9375, 11.29224, 8.44867], + "rotation": {"angle": 22.5, "axis": "x", "origin": [9, 6, 10]}, + "faces": { + "north": {"uv": [13.5, 6, 14, 7.5], "texture": "#0"}, + "east": {"uv": [13.5, 7.5, 14, 9], "texture": "#0"}, + "south": {"uv": [13.5, 9, 14, 10.5], "texture": "#0"}, + "west": {"uv": [13.5, 10.5, 14, 12], "texture": "#0"}, + "up": {"uv": [15.5, 3, 15, 2.5], "texture": "#0"}, + "down": {"uv": [15.5, 3, 15, 3.5], "texture": "#0"} + } + }, + { + "from": [8.5625, 10.81283, 12.32621], + "to": [8.8125, 13.06283, 12.57621], + "rotation": {"angle": -22.5, "axis": "x", "origin": [9, 6, 10]}, + "faces": { + "north": {"uv": [13.5, 12, 14, 13.5], "texture": "#0"}, + "east": {"uv": [1.5, 14, 2, 15.5], "texture": "#0"}, + "south": {"uv": [2, 14, 2.5, 15.5], "texture": "#0"}, + "west": {"uv": [2.5, 14, 3, 15.5], "texture": "#0"}, + "up": {"uv": [15.5, 4, 15, 3.5], "texture": "#0"}, + "down": {"uv": [15.5, 4, 15, 4.5], "texture": "#0"} + } + }, + { + "from": [5.79678, 12.71332, 9.5], + "to": [5.92178, 13.83832, 9.625], + "rotation": {"angle": -22.5, "axis": "z", "origin": [9, 6, 10]}, + "faces": { + "north": {"uv": [14.5, 5, 15, 6], "texture": "#0"}, + "east": {"uv": [14.5, 6, 15, 7], "texture": "#0"}, + "south": {"uv": [14.5, 7, 15, 8], "texture": "#0"}, + "west": {"uv": [14.5, 8, 15, 9], "texture": "#0"}, + "up": {"uv": [15.5, 5, 15, 4.5], "texture": "#0"}, + "down": {"uv": [15.5, 5, 15, 5.5], "texture": "#0"} + } + }, + { + "from": [6, 5, 6], + "to": [7, 8, 7], + "rotation": {"angle": 0, "axis": "y", "origin": [7, 6, 7]}, + "faces": { + "north": {"uv": [3, 14, 3.5, 15.5], "texture": "#0"}, + "east": {"uv": [3.5, 14, 4, 15.5], "texture": "#0"}, + "south": {"uv": [4, 14, 4.5, 15.5], "texture": "#0"}, + "west": {"uv": [4.5, 14, 5, 15.5], "texture": "#0"}, + "up": {"uv": [15.5, 6, 15, 5.5], "texture": "#0"}, + "down": {"uv": [15.5, 6, 15, 6.5], "texture": "#0"} + } + }, + { + "from": [5.58904, 6.81948, 6.125], + "to": [6.33904, 9.56948, 6.875], + "rotation": {"angle": -22.5, "axis": "z", "origin": [7, 6, 7]}, + "faces": { + "north": {"uv": [5, 14, 5.5, 15.5], "texture": "#0"}, + "east": {"uv": [6, 14, 6.5, 15.5], "texture": "#0"}, + "south": {"uv": [6.5, 14, 7, 15.5], "texture": "#0"}, + "west": {"uv": [7, 14, 7.5, 15.5], "texture": "#0"}, + "up": {"uv": [15.5, 7, 15, 6.5], "texture": "#0"}, + "down": {"uv": [15.5, 7, 15, 7.5], "texture": "#0"} + } + }, + { + "from": [7.0625, 8.79224, 4.94867], + "to": [7.5625, 11.29224, 5.44867], + "rotation": {"angle": 22.5, "axis": "x", "origin": [7, 6, 7]}, + "faces": { + "north": {"uv": [7.5, 14, 8, 15.5], "texture": "#0"}, + "east": {"uv": [8, 14, 8.5, 15.5], "texture": "#0"}, + "south": {"uv": [8.5, 14, 9, 15.5], "texture": "#0"}, + "west": {"uv": [9, 14, 9.5, 15.5], "texture": "#0"}, + "up": {"uv": [15.5, 8, 15, 7.5], "texture": "#0"}, + "down": {"uv": [15.5, 8, 15, 8.5], "texture": "#0"} + } + }, + { + "from": [7.1875, 10.81283, 9.32621], + "to": [7.4375, 13.06283, 9.57621], + "rotation": {"angle": -22.5, "axis": "x", "origin": [7, 6, 7]}, + "faces": { + "north": {"uv": [9.5, 14, 10, 15.5], "texture": "#0"}, + "east": {"uv": [10, 14, 10.5, 15.5], "texture": "#0"}, + "south": {"uv": [10.5, 14, 11, 15.5], "texture": "#0"}, + "west": {"uv": [12, 14, 12.5, 15.5], "texture": "#0"}, + "up": {"uv": [15.5, 9, 15, 8.5], "texture": "#0"}, + "down": {"uv": [15.5, 9, 15, 9.5], "texture": "#0"} + } + }, + { + "from": [10.07822, 12.71332, 6.5], + "to": [10.20322, 13.83832, 6.625], + "rotation": {"angle": 22.5, "axis": "z", "origin": [7, 6, 7]}, + "faces": { + "north": {"uv": [14.5, 9, 15, 10], "texture": "#0"}, + "east": {"uv": [14.5, 10, 15, 11], "texture": "#0"}, + "south": {"uv": [14.5, 11, 15, 12], "texture": "#0"}, + "west": {"uv": [14.5, 12, 15, 13], "texture": "#0"}, + "up": {"uv": [15.5, 10, 15, 9.5], "texture": "#0"}, + "down": {"uv": [15.5, 10, 15, 10.5], "texture": "#0"} + } + }, + { + "from": [9, 5, 6], + "to": [10, 8, 7], + "rotation": {"angle": 0, "axis": "y", "origin": [9, 6, 6]}, + "faces": { + "north": {"uv": [12.5, 14, 13, 15.5], "texture": "#0"}, + "east": {"uv": [14, 14, 14.5, 15.5], "texture": "#0"}, + "south": {"uv": [14, 0, 14.5, 1.5], "texture": "#0"}, + "west": {"uv": [14, 1.5, 14.5, 3], "texture": "#0"}, + "up": {"uv": [15.5, 11, 15, 10.5], "texture": "#0"}, + "down": {"uv": [15.5, 11, 15, 11.5], "texture": "#0"} + } + }, + { + "from": [9.125, 6.81948, 6.66096], + "to": [9.875, 9.56948, 7.41096], + "rotation": {"angle": -22.5, "axis": "x", "origin": [9, 6, 6]}, + "faces": { + "north": {"uv": [14, 3, 14.5, 4.5], "texture": "#0"}, + "east": {"uv": [14, 4.5, 14.5, 6], "texture": "#0"}, + "south": {"uv": [14, 6, 14.5, 7.5], "texture": "#0"}, + "west": {"uv": [14, 7.5, 14.5, 9], "texture": "#0"}, + "up": {"uv": [15.5, 12, 15, 11.5], "texture": "#0"}, + "down": {"uv": [15.5, 12, 15, 12.5], "texture": "#0"} + } + }, + { + "from": [10.55133, 8.79224, 5.4375], + "to": [11.05133, 11.29224, 5.9375], + "rotation": {"angle": 22.5, "axis": "z", "origin": [9, 6, 6]}, + "faces": { + "north": {"uv": [14, 9, 14.5, 10.5], "texture": "#0"}, + "east": {"uv": [14, 10.5, 14.5, 12], "texture": "#0"}, + "south": {"uv": [14, 12, 14.5, 13.5], "texture": "#0"}, + "west": {"uv": [11, 14.5, 11.5, 16], "texture": "#0"}, + "up": {"uv": [15.5, 13, 15, 12.5], "texture": "#0"}, + "down": {"uv": [15.5, 13, 15, 13.5], "texture": "#0"} + } + }, + { + "from": [6.42379, 10.81283, 5.5625], + "to": [6.67379, 13.06283, 5.8125], + "rotation": {"angle": -22.5, "axis": "z", "origin": [9, 6, 6]}, + "faces": { + "north": {"uv": [13, 14.5, 13.5, 16], "texture": "#0"}, + "east": {"uv": [14.5, 14.5, 15, 16], "texture": "#0"}, + "south": {"uv": [14.5, 0, 15, 1.5], "texture": "#0"}, + "west": {"uv": [14.5, 1.5, 15, 3], "texture": "#0"}, + "up": {"uv": [15.5, 14, 15, 13.5], "texture": "#0"}, + "down": {"uv": [15.5, 14, 15, 14.5], "texture": "#0"} + } + }, + { + "from": [9.375, 12.71332, 2.79678], + "to": [9.5, 13.83832, 2.92178], + "rotation": {"angle": 22.5, "axis": "x", "origin": [9, 6, 6]}, + "faces": { + "north": {"uv": [14.5, 13, 15, 14], "texture": "#0"}, + "east": {"uv": [0, 15, 0.5, 16], "texture": "#0"}, + "south": {"uv": [0.5, 15, 1, 16], "texture": "#0"}, + "west": {"uv": [1, 15, 1.5, 16], "texture": "#0"}, + "up": {"uv": [15.5, 15, 15, 14.5], "texture": "#0"}, + "down": {"uv": [2, 15.5, 1.5, 16], "texture": "#0"} + } + } + ], + "display": { + "thirdperson_righthand": { + "translation": [0, 0.5, -1.5], + "scale": [0.5, 0.5, 0.5] + }, + "thirdperson_lefthand": { + "translation": [0, 0, -1.5], + "scale": [0.5, 0.5, 0.5] + }, + "firstperson_righthand": { + "scale": [0.5, 0.5, 0.5] + }, + "firstperson_lefthand": { + "scale": [0.5, 0.5, 0.5] + }, + "ground": { + "translation": [0, 0.5, 0], + "scale": [0.5, 0.5, 0.5] + }, + "gui": { + "rotation": [0, 45, 0], + "translation": [0, 0.5, 0], + "scale": [0.9, 0.9, 0.9] + }, + "head": { + "translation": [0, 14.5, 0] + } + }, + "groups": [ + { + "name": "body", + "origin": [8, 8, 8], + "children": [0] + }, + { + "name": "shell1", + "origin": [16, 8, 16], + "children": [1, + { + "name": "group", + "origin": [16, 8, 16], + "children": [2] + } + ] + }, + { + "name": "shell2", + "origin": [16, 8, 16], + "children": [3, + { + "name": "group", + "origin": [8, 4.69552, 3.53073], + "children": [4] + } + ] + }, + { + "name": "shell3", + "origin": [16, 8, 16], + "children": [5, + { + "name": "group", + "origin": [16, 8, 16], + "children": [6] + } + ] + }, + { + "name": "shell4", + "origin": [16, 8, 16], + "children": [7, + { + "name": "group", + "origin": [16, 8, 16], + "children": [8] + } + ] + }, + { + "name": "leaf1", + "origin": [8, 8, 8], + "children": [9, 10] + }, + { + "name": "leaf2", + "origin": [8, 8, 8], + "children": [11, 12] + }, + { + "name": "leaf3", + "origin": [8, 8, 8], + "children": [13, 14] + }, + { + "name": "leaf4", + "origin": [8, 8, 8], + "children": [15, 16] + }, + { + "name": "tendril1", + "origin": [8, 8, 8], + "children": [17, + { + "name": "group", + "origin": [8, 8, 8], + "children": [18, + { + "name": "group", + "origin": [14, 15, 17], + "children": [19, + { + "name": "group", + "origin": [14, 15, 17], + "children": [20, + { + "name": "group", + "origin": [14, 15, 17], + "children": [21] + } + ] + } + ] + } + ] + } + ] + }, + { + "name": "tendril2", + "origin": [8, 8, 8], + "children": [22, + { + "name": "group", + "origin": [8, 8, 8], + "children": [23, + { + "name": "group", + "origin": [14, 15, 17], + "children": [24, + { + "name": "group", + "origin": [14, 15, 17], + "children": [25, + { + "name": "group", + "origin": [14, 15, 17], + "children": [26] + } + ] + } + ] + } + ] + } + ] + }, + { + "name": "tendril3", + "origin": [8, 8, 8], + "children": [27, + { + "name": "group", + "origin": [8, 8, 8], + "children": [28, + { + "name": "group", + "origin": [14, 15, 17], + "children": [29, + { + "name": "group", + "origin": [14, 15, 17], + "children": [30, + { + "name": "group", + "origin": [14, 15, 17], + "children": [31] + } + ] + } + ] + } + ] + } + ] + }, + { + "name": "tendril4", + "origin": [8, 8, 8], + "children": [32, + { + "name": "group", + "origin": [8, 8, 8], + "children": [33, + { + "name": "group", + "origin": [14, 15, 17], + "children": [34, + { + "name": "group", + "origin": [14, 15, 17], + "children": [35, + { + "name": "group", + "origin": [14, 15, 17], + "children": [36] + } + ] + } + ] + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/surgebinding/resources/assets/surgebinding/models/block/vinebud2.json b/src/surgebinding/resources/assets/surgebinding/models/block/vinebud2.json new file mode 100644 index 000000000..0ea5b69c1 --- /dev/null +++ b/src/surgebinding/resources/assets/surgebinding/models/block/vinebud2.json @@ -0,0 +1,654 @@ +{ + "credit": "Made with Blockbench", + "texture_size": [32, 32], + "textures": { + "0": "surgebinding:block/vinebud", + "particle": "surgebinding:block/vinebud" + }, + "elements": [ + { + "from": [5, 0, 5], + "to": [11, 6, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [16, 8, 16]}, + "faces": { + "north": {"uv": [0, 0, 3, 3], "texture": "#0"}, + "east": {"uv": [0, 3, 3, 6], "texture": "#0"}, + "south": {"uv": [3, 3, 6, 6], "texture": "#0"}, + "west": {"uv": [3, 0, 6, 3], "texture": "#0"}, + "up": {"uv": [3, 9, 0, 6], "texture": "#0"}, + "down": {"uv": [6, 6, 3, 9], "texture": "#0"} + } + }, + { + "from": [5, 2, 11], + "to": [11, 6, 12], + "rotation": {"angle": 22.5, "axis": "x", "origin": [8, 2, 11]}, + "faces": { + "north": {"uv": [6, 6, 9, 8], "texture": "#0"}, + "east": {"uv": [11, 11, 11.5, 13], "texture": "#0"}, + "south": {"uv": [6, 0, 9, 2], "texture": "#0"}, + "west": {"uv": [11, 0, 11.5, 2], "texture": "#0"}, + "up": {"uv": [12, 8.5, 9, 8], "texture": "#0"}, + "down": {"uv": [12, 8.5, 9, 9], "texture": "#0"} + } + }, + { + "from": [6, 5.69552, 9.53073], + "to": [10, 6.69552, 12.53073], + "rotation": {"angle": 45, "axis": "x", "origin": [8, 5.69552, 12.53073]}, + "faces": { + "north": {"uv": [11, 2, 13, 2.5], "texture": "#0"}, + "east": {"uv": [11.5, 1, 13, 1.5], "texture": "#0"}, + "south": {"uv": [11, 2.5, 13, 3], "texture": "#0"}, + "west": {"uv": [11.5, 1.5, 13, 2], "texture": "#0"}, + "up": {"uv": [11, 1.5, 9, 0], "texture": "#0"}, + "down": {"uv": [11, 1.5, 9, 3], "texture": "#0"} + } + }, + { + "from": [5, 2, 4], + "to": [11, 6, 5], + "rotation": {"angle": -22.5, "axis": "x", "origin": [8, 2, 5]}, + "faces": { + "north": {"uv": [6, 2, 9, 4], "texture": "#0"}, + "east": {"uv": [11, 3, 11.5, 5], "texture": "#0"}, + "south": {"uv": [6, 4, 9, 6], "texture": "#0"}, + "west": {"uv": [0, 11.5, 0.5, 13.5], "texture": "#0"}, + "up": {"uv": [3, 11.5, 0, 11], "texture": "#0"}, + "down": {"uv": [6, 11, 3, 11.5], "texture": "#0"} + } + }, + { + "from": [6, 5.69552, 3.46927], + "to": [10, 6.69552, 6.46927], + "rotation": {"angle": -45, "axis": "x", "origin": [8, 5.69552, 3.46927]}, + "faces": { + "north": {"uv": [11, 5, 13, 5.5], "texture": "#0"}, + "east": {"uv": [11.5, 11, 13, 11.5], "texture": "#0"}, + "south": {"uv": [11, 5.5, 13, 6], "texture": "#0"}, + "west": {"uv": [12, 3, 13.5, 3.5], "texture": "#0"}, + "up": {"uv": [11, 4.5, 9, 3], "texture": "#0"}, + "down": {"uv": [11, 4.5, 9, 6], "texture": "#0"} + } + }, + { + "from": [4, 2, 5], + "to": [5, 6, 11], + "rotation": {"angle": 22.5, "axis": "z", "origin": [5, 2, 8]}, + "faces": { + "north": {"uv": [0.5, 11.5, 1, 13.5], "texture": "#0"}, + "east": {"uv": [6, 8, 9, 10], "texture": "#0"}, + "south": {"uv": [1, 11.5, 1.5, 13.5], "texture": "#0"}, + "west": {"uv": [0, 9, 3, 11], "texture": "#0"}, + "up": {"uv": [9.5, 14, 9, 11], "texture": "#0"}, + "down": {"uv": [10, 11, 9.5, 14], "texture": "#0"} + } + }, + { + "from": [3.46927, 5.69552, 6], + "to": [6.46927, 6.69552, 10], + "rotation": {"angle": 45, "axis": "z", "origin": [3.46927, 5.69552, 8]}, + "faces": { + "north": {"uv": [12, 3.5, 13.5, 4], "texture": "#0"}, + "east": {"uv": [1.5, 11.5, 3.5, 12], "texture": "#0"}, + "south": {"uv": [12, 4, 13.5, 4.5], "texture": "#0"}, + "west": {"uv": [3.5, 11.5, 5.5, 12], "texture": "#0"}, + "up": {"uv": [10.5, 8, 9, 6], "texture": "#0"}, + "down": {"uv": [7.5, 10, 6, 12], "texture": "#0"} + } + }, + { + "from": [11, 2, 5], + "to": [12, 6, 11], + "rotation": {"angle": -22.5, "axis": "z", "origin": [11, 2, 8]}, + "faces": { + "north": {"uv": [5.5, 11.5, 6, 13.5], "texture": "#0"}, + "east": {"uv": [3, 9, 6, 11], "texture": "#0"}, + "south": {"uv": [11.5, 11.5, 12, 13.5], "texture": "#0"}, + "west": {"uv": [9, 9, 12, 11], "texture": "#0"}, + "up": {"uv": [10.5, 14, 10, 11], "texture": "#0"}, + "down": {"uv": [11, 11, 10.5, 14], "texture": "#0"} + } + }, + { + "from": [9.53073, 5.69552, 6], + "to": [12.53073, 6.69552, 10], + "rotation": {"angle": -45, "axis": "z", "origin": [12.53073, 5.69552, 8]}, + "faces": { + "north": {"uv": [12, 4.5, 13.5, 5], "texture": "#0"}, + "east": {"uv": [11.5, 0, 13.5, 0.5], "texture": "#0"}, + "south": {"uv": [12, 6, 13.5, 6.5], "texture": "#0"}, + "west": {"uv": [11.5, 0.5, 13.5, 1], "texture": "#0"}, + "up": {"uv": [9, 12, 7.5, 10], "texture": "#0"}, + "down": {"uv": [12, 6, 10.5, 8], "texture": "#0"} + } + }, + { + "from": [6, 3, 9], + "to": [6, 7, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [6, 3, 9]}, + "faces": { + "north": {"uv": [0, 0, 0, 2], "texture": "#0"}, + "east": {"uv": [11.5, 3, 12, 5], "texture": "#0"}, + "south": {"uv": [0, 0, 0, 2], "texture": "#0"}, + "west": {"uv": [1.5, 12, 2, 14], "texture": "#0"}, + "up": {"uv": [0, 0.5, 0, 0], "texture": "#0"}, + "down": {"uv": [0, 0, 0, 0.5], "texture": "#0"} + } + }, + { + "from": [6, 5, 6], + "to": [6, 9, 7], + "rotation": {"angle": 0, "axis": "y", "origin": [6, 5, 6]}, + "faces": { + "north": {"uv": [0, 0, 0, 2], "texture": "#0"}, + "east": {"uv": [2, 12, 2.5, 14], "texture": "#0"}, + "south": {"uv": [0, 0, 0, 2], "texture": "#0"}, + "west": {"uv": [2.5, 12, 3, 14], "texture": "#0"}, + "up": {"uv": [0, 0.5, 0, 0], "texture": "#0"}, + "down": {"uv": [0, 0, 0, 0.5], "texture": "#0"} + } + }, + { + "from": [10, 5, 9], + "to": [10, 9, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [10, 5, 9]}, + "faces": { + "north": {"uv": [0, 0, 0, 2], "texture": "#0"}, + "east": {"uv": [3, 12, 3.5, 14], "texture": "#0"}, + "south": {"uv": [0, 0, 0, 2], "texture": "#0"}, + "west": {"uv": [3.5, 12, 4, 14], "texture": "#0"}, + "up": {"uv": [0, 0.5, 0, 0], "texture": "#0"}, + "down": {"uv": [0, 0, 0, 0.5], "texture": "#0"} + } + }, + { + "from": [10, 6, 6], + "to": [10, 10, 7], + "rotation": {"angle": 0, "axis": "y", "origin": [10, 6, 6]}, + "faces": { + "north": {"uv": [0, 0, 0, 2], "texture": "#0"}, + "east": {"uv": [4, 12, 4.5, 14], "texture": "#0"}, + "south": {"uv": [0, 0, 0, 2], "texture": "#0"}, + "west": {"uv": [4.5, 12, 5, 14], "texture": "#0"}, + "up": {"uv": [0, 0.5, 0, 0], "texture": "#0"}, + "down": {"uv": [0, 0, 0, 0.5], "texture": "#0"} + } + }, + { + "from": [6, 4, 6], + "to": [7, 8, 6], + "rotation": {"angle": 0, "axis": "y", "origin": [7, 4, 6]}, + "faces": { + "north": {"uv": [5, 12, 5.5, 14], "texture": "#0"}, + "east": {"uv": [0, 0, 0, 2], "texture": "#0"}, + "south": {"uv": [6, 12, 6.5, 14], "texture": "#0"}, + "west": {"uv": [0, 0, 0, 2], "texture": "#0"}, + "up": {"uv": [0.5, 0, 0, 0], "texture": "#0"}, + "down": {"uv": [0.5, 0, 0, 0], "texture": "#0"} + } + }, + { + "from": [9, 5, 6], + "to": [10, 9, 6], + "rotation": {"angle": 0, "axis": "y", "origin": [10, 5, 6]}, + "faces": { + "north": {"uv": [6.5, 12, 7, 14], "texture": "#0"}, + "east": {"uv": [0, 0, 0, 2], "texture": "#0"}, + "south": {"uv": [7, 12, 7.5, 14], "texture": "#0"}, + "west": {"uv": [0, 0, 0, 2], "texture": "#0"}, + "up": {"uv": [0.5, 0, 0, 0], "texture": "#0"}, + "down": {"uv": [0.5, 0, 0, 0], "texture": "#0"} + } + }, + { + "from": [9, 5, 10], + "to": [10, 9, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [9, 5, 10]}, + "faces": { + "north": {"uv": [7.5, 12, 8, 14], "texture": "#0"}, + "east": {"uv": [0, 0, 0, 2], "texture": "#0"}, + "south": {"uv": [8, 12, 8.5, 14], "texture": "#0"}, + "west": {"uv": [0, 0, 0, 2], "texture": "#0"}, + "up": {"uv": [0.5, 0, 0, 0], "texture": "#0"}, + "down": {"uv": [0.5, 0, 0, 0], "texture": "#0"} + } + }, + { + "from": [6, 5, 10], + "to": [7, 9, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [6, 5, 10]}, + "faces": { + "north": {"uv": [8.5, 12, 9, 14], "texture": "#0"}, + "east": {"uv": [0, 0, 0, 2], "texture": "#0"}, + "south": {"uv": [12, 12, 12.5, 14], "texture": "#0"}, + "west": {"uv": [0, 0, 0, 2], "texture": "#0"}, + "up": {"uv": [0.5, 0, 0, 0], "texture": "#0"}, + "down": {"uv": [0.5, 0, 0, 0], "texture": "#0"} + } + }, + { + "from": [6.125, 5.125, 9.125], + "to": [6.875, 7.875, 9.875], + "rotation": {"angle": 22.5, "axis": "x", "origin": [6.5, 5.5, 9.5]}, + "faces": { + "north": {"uv": [12.5, 6.5, 13, 8], "texture": "#0"}, + "east": {"uv": [12.5, 8, 13, 9.5], "texture": "#0"}, + "south": {"uv": [12.5, 9.5, 13, 11], "texture": "#0"}, + "west": {"uv": [11, 13, 11.5, 14.5], "texture": "#0"}, + "up": {"uv": [13.5, 13, 13, 12.5], "texture": "#0"}, + "down": {"uv": [14.5, 13.5, 14, 14], "texture": "#0"} + } + }, + { + "from": [6.25, 7.25, 10.0625], + "to": [6.75, 9.75, 10.5625], + "rotation": {"angle": -22.5, "axis": "z", "origin": [6.5, 7.5, 10.3125]}, + "faces": { + "north": {"uv": [13, 13, 13.5, 14.5], "texture": "#0"}, + "east": {"uv": [13, 1, 13.5, 2.5], "texture": "#0"}, + "south": {"uv": [13, 6.5, 13.5, 8], "texture": "#0"}, + "west": {"uv": [13, 8, 13.5, 9.5], "texture": "#0"}, + "up": {"uv": [15, 14.5, 14.5, 14], "texture": "#0"}, + "down": {"uv": [6, 15, 5.5, 15.5], "texture": "#0"} + } + }, + { + "from": [7.25, 9.375, 10.1875], + "to": [7.5, 11.625, 10.4375], + "rotation": {"angle": 22.5, "axis": "z", "origin": [7.375, 9.5, 10.3125]}, + "faces": { + "north": {"uv": [13, 9.5, 13.5, 11], "texture": "#0"}, + "east": {"uv": [13, 11, 13.5, 12.5], "texture": "#0"}, + "south": {"uv": [0, 13.5, 0.5, 15], "texture": "#0"}, + "west": {"uv": [0.5, 13.5, 1, 15], "texture": "#0"}, + "up": {"uv": [12, 15.5, 11.5, 15], "texture": "#0"}, + "down": {"uv": [14, 15, 13.5, 15.5], "texture": "#0"} + } + }, + { + "from": [6.5, 11.45653, 10.34183], + "to": [6.625, 12.58153, 10.46683], + "rotation": {"angle": -22.5, "axis": "x", "origin": [6.5625, 11.25, 10.5]}, + "faces": { + "north": {"uv": [12.5, 11.5, 13, 12.5], "texture": "#0"}, + "east": {"uv": [13, 5, 13.5, 6], "texture": "#0"}, + "south": {"uv": [14.5, 3, 15, 4], "texture": "#0"}, + "west": {"uv": [14.5, 4, 15, 5], "texture": "#0"}, + "up": {"uv": [15.5, 15.5, 15, 15], "texture": "#0"}, + "down": {"uv": [15.5, 0, 15, 0.5], "texture": "#0"} + } + }, + { + "from": [9.66096, 4.81948, 9.125], + "to": [10.41096, 7.56948, 9.875], + "rotation": {"angle": 22.5, "axis": "z", "origin": [9, 4, 10]}, + "faces": { + "north": {"uv": [13.5, 0, 14, 1.5], "texture": "#0"}, + "east": {"uv": [13.5, 1.5, 14, 3], "texture": "#0"}, + "south": {"uv": [13.5, 3, 14, 4.5], "texture": "#0"}, + "west": {"uv": [13.5, 4.5, 14, 6], "texture": "#0"}, + "up": {"uv": [15.5, 2, 15, 1.5], "texture": "#0"}, + "down": {"uv": [15.5, 2, 15, 2.5], "texture": "#0"} + } + }, + { + "from": [8.4375, 6.79224, 7.94867], + "to": [8.9375, 9.29224, 8.44867], + "rotation": {"angle": 22.5, "axis": "x", "origin": [9, 4, 10]}, + "faces": { + "north": {"uv": [13.5, 6, 14, 7.5], "texture": "#0"}, + "east": {"uv": [13.5, 7.5, 14, 9], "texture": "#0"}, + "south": {"uv": [13.5, 9, 14, 10.5], "texture": "#0"}, + "west": {"uv": [13.5, 10.5, 14, 12], "texture": "#0"}, + "up": {"uv": [15.5, 3, 15, 2.5], "texture": "#0"}, + "down": {"uv": [15.5, 3, 15, 3.5], "texture": "#0"} + } + }, + { + "from": [8.5625, 8.81283, 12.32621], + "to": [8.8125, 11.06283, 12.57621], + "rotation": {"angle": -22.5, "axis": "x", "origin": [9, 4, 10]}, + "faces": { + "north": {"uv": [13.5, 12, 14, 13.5], "texture": "#0"}, + "east": {"uv": [1.5, 14, 2, 15.5], "texture": "#0"}, + "south": {"uv": [2, 14, 2.5, 15.5], "texture": "#0"}, + "west": {"uv": [2.5, 14, 3, 15.5], "texture": "#0"}, + "up": {"uv": [15.5, 4, 15, 3.5], "texture": "#0"}, + "down": {"uv": [15.5, 4, 15, 4.5], "texture": "#0"} + } + }, + { + "from": [5.79678, 10.71332, 9.5], + "to": [5.92178, 11.83832, 9.625], + "rotation": {"angle": -22.5, "axis": "z", "origin": [9, 4, 10]}, + "faces": { + "north": {"uv": [14.5, 5, 15, 6], "texture": "#0"}, + "east": {"uv": [14.5, 6, 15, 7], "texture": "#0"}, + "south": {"uv": [14.5, 7, 15, 8], "texture": "#0"}, + "west": {"uv": [14.5, 8, 15, 9], "texture": "#0"}, + "up": {"uv": [15.5, 5, 15, 4.5], "texture": "#0"}, + "down": {"uv": [15.5, 5, 15, 5.5], "texture": "#0"} + } + }, + { + "from": [5.58904, 4.81948, 6.125], + "to": [6.33904, 7.56948, 6.875], + "rotation": {"angle": -22.5, "axis": "z", "origin": [7, 4, 7]}, + "faces": { + "north": {"uv": [5, 14, 5.5, 15.5], "texture": "#0"}, + "east": {"uv": [6, 14, 6.5, 15.5], "texture": "#0"}, + "south": {"uv": [6.5, 14, 7, 15.5], "texture": "#0"}, + "west": {"uv": [7, 14, 7.5, 15.5], "texture": "#0"}, + "up": {"uv": [15.5, 7, 15, 6.5], "texture": "#0"}, + "down": {"uv": [15.5, 7, 15, 7.5], "texture": "#0"} + } + }, + { + "from": [7.0625, 6.79224, 4.94867], + "to": [7.5625, 9.29224, 5.44867], + "rotation": {"angle": 22.5, "axis": "x", "origin": [7, 4, 7]}, + "faces": { + "north": {"uv": [7.5, 14, 8, 15.5], "texture": "#0"}, + "east": {"uv": [8, 14, 8.5, 15.5], "texture": "#0"}, + "south": {"uv": [8.5, 14, 9, 15.5], "texture": "#0"}, + "west": {"uv": [9, 14, 9.5, 15.5], "texture": "#0"}, + "up": {"uv": [15.5, 8, 15, 7.5], "texture": "#0"}, + "down": {"uv": [15.5, 8, 15, 8.5], "texture": "#0"} + } + }, + { + "from": [7.1875, 8.81283, 9.32621], + "to": [7.4375, 11.06283, 9.57621], + "rotation": {"angle": -22.5, "axis": "x", "origin": [7, 4, 7]}, + "faces": { + "north": {"uv": [9.5, 14, 10, 15.5], "texture": "#0"}, + "east": {"uv": [10, 14, 10.5, 15.5], "texture": "#0"}, + "south": {"uv": [10.5, 14, 11, 15.5], "texture": "#0"}, + "west": {"uv": [12, 14, 12.5, 15.5], "texture": "#0"}, + "up": {"uv": [15.5, 9, 15, 8.5], "texture": "#0"}, + "down": {"uv": [15.5, 9, 15, 9.5], "texture": "#0"} + } + }, + { + "from": [10.07822, 10.71332, 6.5], + "to": [10.20322, 11.83832, 6.625], + "rotation": {"angle": 22.5, "axis": "z", "origin": [7, 4, 7]}, + "faces": { + "north": {"uv": [14.5, 9, 15, 10], "texture": "#0"}, + "east": {"uv": [14.5, 10, 15, 11], "texture": "#0"}, + "south": {"uv": [14.5, 11, 15, 12], "texture": "#0"}, + "west": {"uv": [14.5, 12, 15, 13], "texture": "#0"}, + "up": {"uv": [15.5, 10, 15, 9.5], "texture": "#0"}, + "down": {"uv": [15.5, 10, 15, 10.5], "texture": "#0"} + } + }, + { + "from": [9.125, 4.81948, 6.66096], + "to": [9.875, 7.56948, 7.41096], + "rotation": {"angle": -22.5, "axis": "x", "origin": [9, 4, 6]}, + "faces": { + "north": {"uv": [14, 3, 14.5, 4.5], "texture": "#0"}, + "east": {"uv": [14, 4.5, 14.5, 6], "texture": "#0"}, + "south": {"uv": [14, 6, 14.5, 7.5], "texture": "#0"}, + "west": {"uv": [14, 7.5, 14.5, 9], "texture": "#0"}, + "up": {"uv": [15.5, 12, 15, 11.5], "texture": "#0"}, + "down": {"uv": [15.5, 12, 15, 12.5], "texture": "#0"} + } + }, + { + "from": [10.55133, 6.79224, 5.4375], + "to": [11.05133, 9.29224, 5.9375], + "rotation": {"angle": 22.5, "axis": "z", "origin": [9, 4, 6]}, + "faces": { + "north": {"uv": [14, 9, 14.5, 10.5], "texture": "#0"}, + "east": {"uv": [14, 10.5, 14.5, 12], "texture": "#0"}, + "south": {"uv": [14, 12, 14.5, 13.5], "texture": "#0"}, + "west": {"uv": [11, 14.5, 11.5, 16], "texture": "#0"}, + "up": {"uv": [15.5, 13, 15, 12.5], "texture": "#0"}, + "down": {"uv": [15.5, 13, 15, 13.5], "texture": "#0"} + } + }, + { + "from": [6.42379, 8.81283, 5.5625], + "to": [6.67379, 11.06283, 5.8125], + "rotation": {"angle": -22.5, "axis": "z", "origin": [9, 4, 6]}, + "faces": { + "north": {"uv": [13, 14.5, 13.5, 16], "texture": "#0"}, + "east": {"uv": [14.5, 14.5, 15, 16], "texture": "#0"}, + "south": {"uv": [14.5, 0, 15, 1.5], "texture": "#0"}, + "west": {"uv": [14.5, 1.5, 15, 3], "texture": "#0"}, + "up": {"uv": [15.5, 14, 15, 13.5], "texture": "#0"}, + "down": {"uv": [15.5, 14, 15, 14.5], "texture": "#0"} + } + }, + { + "from": [9.375, 10.71332, 2.79678], + "to": [9.5, 11.83832, 2.92178], + "rotation": {"angle": 22.5, "axis": "x", "origin": [9, 4, 6]}, + "faces": { + "north": {"uv": [14.5, 13, 15, 14], "texture": "#0"}, + "east": {"uv": [0, 15, 0.5, 16], "texture": "#0"}, + "south": {"uv": [0.5, 15, 1, 16], "texture": "#0"}, + "west": {"uv": [1, 15, 1.5, 16], "texture": "#0"}, + "up": {"uv": [15.5, 15, 15, 14.5], "texture": "#0"}, + "down": {"uv": [2, 15.5, 1.5, 16], "texture": "#0"} + } + } + ], + "display": { + "thirdperson_righthand": { + "translation": [0, 0.5, -1.5], + "scale": [0.5, 0.5, 0.5] + }, + "thirdperson_lefthand": { + "translation": [0, 0, -1.5], + "scale": [0.5, 0.5, 0.5] + }, + "firstperson_righthand": { + "scale": [0.5, 0.5, 0.5] + }, + "firstperson_lefthand": { + "scale": [0.5, 0.5, 0.5] + }, + "ground": { + "translation": [0, 0.5, 0], + "scale": [0.5, 0.5, 0.5] + }, + "gui": { + "rotation": [0, 45, 0], + "translation": [0, 0.5, 0], + "scale": [0.9, 0.9, 0.9] + }, + "head": { + "translation": [0, 14.5, 0] + } + }, + "groups": [ + { + "name": "body", + "origin": [8, 8, 8], + "children": [0] + }, + { + "name": "shell1", + "origin": [16, 8, 16], + "children": [1, + { + "name": "group", + "origin": [16, 8, 16], + "children": [2] + } + ] + }, + { + "name": "shell2", + "origin": [16, 8, 16], + "children": [3, + { + "name": "group", + "origin": [8, 4.69552, 3.53073], + "children": [4] + } + ] + }, + { + "name": "shell3", + "origin": [16, 8, 16], + "children": [5, + { + "name": "group", + "origin": [16, 8, 16], + "children": [6] + } + ] + }, + { + "name": "shell4", + "origin": [16, 8, 16], + "children": [7, + { + "name": "group", + "origin": [16, 8, 16], + "children": [8] + } + ] + }, + { + "name": "leaf1", + "origin": [8, 8, 8], + "children": [9, 10] + }, + { + "name": "leaf2", + "origin": [8, 8, 8], + "children": [11, 12] + }, + { + "name": "leaf3", + "origin": [8, 8, 8], + "children": [13, 14] + }, + { + "name": "leaf4", + "origin": [8, 8, 8], + "children": [15, 16] + }, + { + "name": "tendril1", + "origin": [8, 8, 8], + "children": [ + { + "name": "group", + "origin": [8, 8, 8], + "children": [17, + { + "name": "group", + "origin": [14, 15, 17], + "children": [18, + { + "name": "group", + "origin": [14, 15, 17], + "children": [19, + { + "name": "group", + "origin": [14, 15, 17], + "children": [20] + } + ] + } + ] + } + ] + } + ] + }, + { + "name": "tendril2", + "origin": [8, 8, 8], + "children": [ + { + "name": "group", + "origin": [8, 8, 8], + "children": [21, + { + "name": "group", + "origin": [14, 15, 17], + "children": [22, + { + "name": "group", + "origin": [14, 15, 17], + "children": [23, + { + "name": "group", + "origin": [14, 15, 17], + "children": [24] + } + ] + } + ] + } + ] + } + ] + }, + { + "name": "tendril3", + "origin": [8, 8, 8], + "children": [ + { + "name": "group", + "origin": [8, 8, 8], + "children": [25, + { + "name": "group", + "origin": [14, 15, 17], + "children": [26, + { + "name": "group", + "origin": [14, 15, 17], + "children": [27, + { + "name": "group", + "origin": [14, 15, 17], + "children": [28] + } + ] + } + ] + } + ] + } + ] + }, + { + "name": "tendril4", + "origin": [8, 8, 8], + "children": [ + { + "name": "group", + "origin": [8, 8, 8], + "children": [29, + { + "name": "group", + "origin": [14, 15, 17], + "children": [30, + { + "name": "group", + "origin": [14, 15, 17], + "children": [31, + { + "name": "group", + "origin": [14, 15, 17], + "children": [32] + } + ] + } + ] + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/surgebinding/resources/assets/surgebinding/models/block/vinebud3.json b/src/surgebinding/resources/assets/surgebinding/models/block/vinebud3.json new file mode 100644 index 000000000..c6050f078 --- /dev/null +++ b/src/surgebinding/resources/assets/surgebinding/models/block/vinebud3.json @@ -0,0 +1,478 @@ +{ + "credit": "Made with Blockbench", + "texture_size": [32, 32], + "textures": { + "0": "surgebinding:block/vinebud", + "particle": "surgebinding:block/vinebud" + }, + "elements": [ + { + "from": [5, 0, 5], + "to": [11, 6, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [16, 8, 16]}, + "faces": { + "north": {"uv": [0, 0, 3, 3], "texture": "#0"}, + "east": {"uv": [0, 3, 3, 6], "texture": "#0"}, + "south": {"uv": [3, 3, 6, 6], "texture": "#0"}, + "west": {"uv": [3, 0, 6, 3], "texture": "#0"}, + "up": {"uv": [3, 9, 0, 6], "texture": "#0"}, + "down": {"uv": [6, 6, 3, 9], "texture": "#0"} + } + }, + { + "from": [5, 2, 11], + "to": [11, 6, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 2, 11]}, + "faces": { + "north": {"uv": [6, 6, 9, 8], "texture": "#0"}, + "east": {"uv": [11, 11, 11.5, 13], "texture": "#0"}, + "south": {"uv": [6, 0, 9, 2], "texture": "#0"}, + "west": {"uv": [11, 0, 11.5, 2], "texture": "#0"}, + "up": {"uv": [12, 8.5, 9, 8], "texture": "#0"}, + "down": {"uv": [12, 8.5, 9, 9], "texture": "#0"} + } + }, + { + "from": [6, 6, 8], + "to": [10, 7, 11], + "rotation": {"angle": 45, "axis": "x", "origin": [8, 6, 11]}, + "faces": { + "north": {"uv": [11, 2, 13, 2.5], "texture": "#0"}, + "east": {"uv": [11.5, 1, 13, 1.5], "texture": "#0"}, + "south": {"uv": [11, 2.5, 13, 3], "texture": "#0"}, + "west": {"uv": [11.5, 1.5, 13, 2], "texture": "#0"}, + "up": {"uv": [11, 1.5, 9, 0], "texture": "#0"}, + "down": {"uv": [11, 1.5, 9, 3], "texture": "#0"} + } + }, + { + "from": [5, 2, 4], + "to": [11, 6, 5], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 2, 5]}, + "faces": { + "north": {"uv": [6, 2, 9, 4], "texture": "#0"}, + "east": {"uv": [11, 3, 11.5, 5], "texture": "#0"}, + "south": {"uv": [6, 4, 9, 6], "texture": "#0"}, + "west": {"uv": [0, 11.5, 0.5, 13.5], "texture": "#0"}, + "up": {"uv": [3, 11.5, 0, 11], "texture": "#0"}, + "down": {"uv": [6, 11, 3, 11.5], "texture": "#0"} + } + }, + { + "from": [6, 6, 5], + "to": [10, 7, 8], + "rotation": {"angle": -45, "axis": "x", "origin": [8, 6, 5]}, + "faces": { + "north": {"uv": [11, 5, 13, 5.5], "texture": "#0"}, + "east": {"uv": [11.5, 11, 13, 11.5], "texture": "#0"}, + "south": {"uv": [11, 5.5, 13, 6], "texture": "#0"}, + "west": {"uv": [12, 3, 13.5, 3.5], "texture": "#0"}, + "up": {"uv": [11, 4.5, 9, 3], "texture": "#0"}, + "down": {"uv": [11, 4.5, 9, 6], "texture": "#0"} + } + }, + { + "from": [4, 2, 5], + "to": [5, 6, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [5, 2, 8]}, + "faces": { + "north": {"uv": [0.5, 11.5, 1, 13.5], "texture": "#0"}, + "east": {"uv": [6, 8, 9, 10], "texture": "#0"}, + "south": {"uv": [1, 11.5, 1.5, 13.5], "texture": "#0"}, + "west": {"uv": [0, 9, 3, 11], "texture": "#0"}, + "up": {"uv": [9.5, 14, 9, 11], "texture": "#0"}, + "down": {"uv": [10, 11, 9.5, 14], "texture": "#0"} + } + }, + { + "from": [5, 6, 6], + "to": [8, 7, 10], + "rotation": {"angle": 45, "axis": "z", "origin": [5, 6, 8]}, + "faces": { + "north": {"uv": [12, 3.5, 13.5, 4], "texture": "#0"}, + "east": {"uv": [1.5, 11.5, 3.5, 12], "texture": "#0"}, + "south": {"uv": [12, 4, 13.5, 4.5], "texture": "#0"}, + "west": {"uv": [3.5, 11.5, 5.5, 12], "texture": "#0"}, + "up": {"uv": [10.5, 8, 9, 6], "texture": "#0"}, + "down": {"uv": [7.5, 10, 6, 12], "texture": "#0"} + } + }, + { + "from": [11, 2, 5], + "to": [12, 6, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [11, 2, 8]}, + "faces": { + "north": {"uv": [5.5, 11.5, 6, 13.5], "texture": "#0"}, + "east": {"uv": [3, 9, 6, 11], "texture": "#0"}, + "south": {"uv": [11.5, 11.5, 12, 13.5], "texture": "#0"}, + "west": {"uv": [9, 9, 12, 11], "texture": "#0"}, + "up": {"uv": [10.5, 14, 10, 11], "texture": "#0"}, + "down": {"uv": [11, 11, 10.5, 14], "texture": "#0"} + } + }, + { + "from": [8, 6, 6], + "to": [11, 7, 10], + "rotation": {"angle": -45, "axis": "z", "origin": [11, 6, 8]}, + "faces": { + "north": {"uv": [12, 4.5, 13.5, 5], "texture": "#0"}, + "east": {"uv": [11.5, 0, 13.5, 0.5], "texture": "#0"}, + "south": {"uv": [12, 6, 13.5, 6.5], "texture": "#0"}, + "west": {"uv": [11.5, 0.5, 13.5, 1], "texture": "#0"}, + "up": {"uv": [9, 12, 7.5, 10], "texture": "#0"}, + "down": {"uv": [12, 6, 10.5, 8], "texture": "#0"} + } + }, + { + "from": [6.25, 5.25, 8.0625], + "to": [6.75, 7.75, 8.5625], + "rotation": {"angle": -22.5, "axis": "z", "origin": [6.5, 5.5, 8.3125]}, + "faces": { + "north": {"uv": [13, 13, 13.5, 14.5], "texture": "#0"}, + "east": {"uv": [13, 1, 13.5, 2.5], "texture": "#0"}, + "south": {"uv": [13, 6.5, 13.5, 8], "texture": "#0"}, + "west": {"uv": [13, 8, 13.5, 9.5], "texture": "#0"}, + "up": {"uv": [15, 14.5, 14.5, 14], "texture": "#0"}, + "down": {"uv": [6, 15, 5.5, 15.5], "texture": "#0"} + } + }, + { + "from": [7.25, 7.375, 8.1875], + "to": [7.5, 9.625, 8.4375], + "rotation": {"angle": 22.5, "axis": "z", "origin": [7.375, 7.5, 8.3125]}, + "faces": { + "north": {"uv": [13, 9.5, 13.5, 11], "texture": "#0"}, + "east": {"uv": [13, 11, 13.5, 12.5], "texture": "#0"}, + "south": {"uv": [0, 13.5, 0.5, 15], "texture": "#0"}, + "west": {"uv": [0.5, 13.5, 1, 15], "texture": "#0"}, + "up": {"uv": [12, 15.5, 11.5, 15], "texture": "#0"}, + "down": {"uv": [14, 15, 13.5, 15.5], "texture": "#0"} + } + }, + { + "from": [6.5, 9.45653, 8.34183], + "to": [6.625, 10.58153, 8.46683], + "rotation": {"angle": -22.5, "axis": "x", "origin": [6.5625, 9.25, 8.5]}, + "faces": { + "north": {"uv": [12.5, 11.5, 13, 12.5], "texture": "#0"}, + "east": {"uv": [13, 5, 13.5, 6], "texture": "#0"}, + "south": {"uv": [14.5, 3, 15, 4], "texture": "#0"}, + "west": {"uv": [14.5, 4, 15, 5], "texture": "#0"}, + "up": {"uv": [15.5, 15.5, 15, 15], "texture": "#0"}, + "down": {"uv": [15.5, 0, 15, 0.5], "texture": "#0"} + } + }, + { + "from": [8.4375, 4.79224, 6.94867], + "to": [8.9375, 7.29224, 7.44867], + "rotation": {"angle": 22.5, "axis": "x", "origin": [9, 2, 9]}, + "faces": { + "north": {"uv": [13.5, 6, 14, 7.5], "texture": "#0"}, + "east": {"uv": [13.5, 7.5, 14, 9], "texture": "#0"}, + "south": {"uv": [13.5, 9, 14, 10.5], "texture": "#0"}, + "west": {"uv": [13.5, 10.5, 14, 12], "texture": "#0"}, + "up": {"uv": [15.5, 3, 15, 2.5], "texture": "#0"}, + "down": {"uv": [15.5, 3, 15, 3.5], "texture": "#0"} + } + }, + { + "from": [8.5625, 6.81283, 11.32621], + "to": [8.8125, 9.06283, 11.57621], + "rotation": {"angle": -22.5, "axis": "x", "origin": [9, 2, 9]}, + "faces": { + "north": {"uv": [13.5, 12, 14, 13.5], "texture": "#0"}, + "east": {"uv": [1.5, 14, 2, 15.5], "texture": "#0"}, + "south": {"uv": [2, 14, 2.5, 15.5], "texture": "#0"}, + "west": {"uv": [2.5, 14, 3, 15.5], "texture": "#0"}, + "up": {"uv": [15.5, 4, 15, 3.5], "texture": "#0"}, + "down": {"uv": [15.5, 4, 15, 4.5], "texture": "#0"} + } + }, + { + "from": [5.79678, 8.71332, 8.5], + "to": [5.92178, 9.83832, 8.625], + "rotation": {"angle": -22.5, "axis": "z", "origin": [9, 2, 9]}, + "faces": { + "north": {"uv": [14.5, 5, 15, 6], "texture": "#0"}, + "east": {"uv": [14.5, 6, 15, 7], "texture": "#0"}, + "south": {"uv": [14.5, 7, 15, 8], "texture": "#0"}, + "west": {"uv": [14.5, 8, 15, 9], "texture": "#0"}, + "up": {"uv": [15.5, 5, 15, 4.5], "texture": "#0"}, + "down": {"uv": [15.5, 5, 15, 5.5], "texture": "#0"} + } + }, + { + "from": [7.0625, 4.79224, 4.94867], + "to": [7.5625, 7.29224, 5.44867], + "rotation": {"angle": 22.5, "axis": "x", "origin": [7, 2, 7]}, + "faces": { + "north": {"uv": [7.5, 14, 8, 15.5], "texture": "#0"}, + "east": {"uv": [8, 14, 8.5, 15.5], "texture": "#0"}, + "south": {"uv": [8.5, 14, 9, 15.5], "texture": "#0"}, + "west": {"uv": [9, 14, 9.5, 15.5], "texture": "#0"}, + "up": {"uv": [15.5, 8, 15, 7.5], "texture": "#0"}, + "down": {"uv": [15.5, 8, 15, 8.5], "texture": "#0"} + } + }, + { + "from": [7.1875, 6.81283, 9.32621], + "to": [7.4375, 9.06283, 9.57621], + "rotation": {"angle": -22.5, "axis": "x", "origin": [7, 2, 7]}, + "faces": { + "north": {"uv": [9.5, 14, 10, 15.5], "texture": "#0"}, + "east": {"uv": [10, 14, 10.5, 15.5], "texture": "#0"}, + "south": {"uv": [10.5, 14, 11, 15.5], "texture": "#0"}, + "west": {"uv": [12, 14, 12.5, 15.5], "texture": "#0"}, + "up": {"uv": [15.5, 9, 15, 8.5], "texture": "#0"}, + "down": {"uv": [15.5, 9, 15, 9.5], "texture": "#0"} + } + }, + { + "from": [10.07822, 8.71332, 6.5], + "to": [10.20322, 9.83832, 6.625], + "rotation": {"angle": 22.5, "axis": "z", "origin": [7, 2, 7]}, + "faces": { + "north": {"uv": [14.5, 9, 15, 10], "texture": "#0"}, + "east": {"uv": [14.5, 10, 15, 11], "texture": "#0"}, + "south": {"uv": [14.5, 11, 15, 12], "texture": "#0"}, + "west": {"uv": [14.5, 12, 15, 13], "texture": "#0"}, + "up": {"uv": [15.5, 10, 15, 9.5], "texture": "#0"}, + "down": {"uv": [15.5, 10, 15, 10.5], "texture": "#0"} + } + }, + { + "from": [10.55133, 4.79224, 7.4375], + "to": [11.05133, 7.29224, 7.9375], + "rotation": {"angle": 22.5, "axis": "z", "origin": [9, 2, 8]}, + "faces": { + "north": {"uv": [14, 9, 14.5, 10.5], "texture": "#0"}, + "east": {"uv": [14, 10.5, 14.5, 12], "texture": "#0"}, + "south": {"uv": [14, 12, 14.5, 13.5], "texture": "#0"}, + "west": {"uv": [11, 14.5, 11.5, 16], "texture": "#0"}, + "up": {"uv": [15.5, 13, 15, 12.5], "texture": "#0"}, + "down": {"uv": [15.5, 13, 15, 13.5], "texture": "#0"} + } + }, + { + "from": [6.42379, 6.81283, 7.5625], + "to": [6.67379, 9.06283, 7.8125], + "rotation": {"angle": -22.5, "axis": "z", "origin": [9, 2, 8]}, + "faces": { + "north": {"uv": [13, 14.5, 13.5, 16], "texture": "#0"}, + "east": {"uv": [14.5, 14.5, 15, 16], "texture": "#0"}, + "south": {"uv": [14.5, 0, 15, 1.5], "texture": "#0"}, + "west": {"uv": [14.5, 1.5, 15, 3], "texture": "#0"}, + "up": {"uv": [15.5, 14, 15, 13.5], "texture": "#0"}, + "down": {"uv": [15.5, 14, 15, 14.5], "texture": "#0"} + } + }, + { + "from": [9.375, 8.71332, 4.79678], + "to": [9.5, 9.83832, 4.92178], + "rotation": {"angle": 22.5, "axis": "x", "origin": [9, 2, 8]}, + "faces": { + "north": {"uv": [14.5, 13, 15, 14], "texture": "#0"}, + "east": {"uv": [0, 15, 0.5, 16], "texture": "#0"}, + "south": {"uv": [0.5, 15, 1, 16], "texture": "#0"}, + "west": {"uv": [1, 15, 1.5, 16], "texture": "#0"}, + "up": {"uv": [15.5, 15, 15, 14.5], "texture": "#0"}, + "down": {"uv": [2, 15.5, 1.5, 16], "texture": "#0"} + } + } + ], + "display": { + "thirdperson_righthand": { + "translation": [0, 0.5, -1.5], + "scale": [0.5, 0.5, 0.5] + }, + "thirdperson_lefthand": { + "translation": [0, 0, -1.5], + "scale": [0.5, 0.5, 0.5] + }, + "firstperson_righthand": { + "scale": [0.5, 0.5, 0.5] + }, + "firstperson_lefthand": { + "scale": [0.5, 0.5, 0.5] + }, + "ground": { + "translation": [0, 0.5, 0], + "scale": [0.5, 0.5, 0.5] + }, + "gui": { + "rotation": [0, 45, 0], + "translation": [0, 0.5, 0], + "scale": [0.9, 0.9, 0.9] + }, + "head": { + "translation": [0, 14.5, 0] + } + }, + "groups": [ + { + "name": "body", + "origin": [8, 8, 8], + "children": [0] + }, + { + "name": "shell1", + "origin": [16, 8, 16], + "children": [1, + { + "name": "group", + "origin": [16, 8, 16], + "children": [2] + } + ] + }, + { + "name": "shell2", + "origin": [16, 8, 16], + "children": [3, + { + "name": "group", + "origin": [8, 4.69552, 3.53073], + "children": [4] + } + ] + }, + { + "name": "shell3", + "origin": [16, 8, 16], + "children": [5, + { + "name": "group", + "origin": [16, 8, 16], + "children": [6] + } + ] + }, + { + "name": "shell4", + "origin": [16, 8, 16], + "children": [7, + { + "name": "group", + "origin": [16, 8, 16], + "children": [8] + } + ] + }, + { + "name": "tendril1", + "origin": [8, 8, 8], + "children": [ + { + "name": "group", + "origin": [8, 8, 8], + "children": [ + { + "name": "group", + "origin": [14, 15, 17], + "children": [9, + { + "name": "group", + "origin": [14, 15, 17], + "children": [10, + { + "name": "group", + "origin": [14, 15, 17], + "children": [11] + } + ] + } + ] + } + ] + } + ] + }, + { + "name": "tendril2", + "origin": [8, 8, 8], + "children": [ + { + "name": "group", + "origin": [8, 8, 8], + "children": [ + { + "name": "group", + "origin": [14, 15, 17], + "children": [12, + { + "name": "group", + "origin": [14, 15, 17], + "children": [13, + { + "name": "group", + "origin": [14, 15, 17], + "children": [14] + } + ] + } + ] + } + ] + } + ] + }, + { + "name": "tendril3", + "origin": [8, 8, 8], + "children": [ + { + "name": "group", + "origin": [8, 8, 8], + "children": [ + { + "name": "group", + "origin": [14, 15, 17], + "children": [15, + { + "name": "group", + "origin": [14, 15, 17], + "children": [16, + { + "name": "group", + "origin": [14, 15, 17], + "children": [17] + } + ] + } + ] + } + ] + } + ] + }, + { + "name": "tendril4", + "origin": [8, 8, 8], + "children": [ + { + "name": "group", + "origin": [8, 8, 8], + "children": [ + { + "name": "group", + "origin": [14, 15, 17], + "children": [18, + { + "name": "group", + "origin": [14, 15, 17], + "children": [19, + { + "name": "group", + "origin": [14, 15, 17], + "children": [20] + } + ] + } + ] + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/surgebinding/resources/assets/surgebinding/models/block/vinebud4.json b/src/surgebinding/resources/assets/surgebinding/models/block/vinebud4.json new file mode 100644 index 000000000..090316bb7 --- /dev/null +++ b/src/surgebinding/resources/assets/surgebinding/models/block/vinebud4.json @@ -0,0 +1,206 @@ +{ + "credit": "Made with Blockbench", + "texture_size": [32, 32], + "textures": { + "0": "surgebinding:block/vinebud", + "particle": "surgebinding:block/vinebud" + }, + "elements": [ + { + "from": [5, 0, 5], + "to": [11, 6, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [16, 8, 16]}, + "faces": { + "north": {"uv": [0, 0, 3, 3], "texture": "#0"}, + "east": {"uv": [0, 3, 3, 6], "texture": "#0"}, + "south": {"uv": [3, 3, 6, 6], "texture": "#0"}, + "west": {"uv": [3, 0, 6, 3], "texture": "#0"}, + "up": {"uv": [3, 9, 0, 6], "texture": "#0"}, + "down": {"uv": [6, 6, 3, 9], "texture": "#0"} + } + }, + { + "from": [5, 2, 11], + "to": [11, 6, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 2, 11]}, + "faces": { + "north": {"uv": [6, 6, 9, 8], "texture": "#0"}, + "east": {"uv": [11, 11, 11.5, 13], "texture": "#0"}, + "south": {"uv": [6, 0, 9, 2], "texture": "#0"}, + "west": {"uv": [11, 0, 11.5, 2], "texture": "#0"}, + "up": {"uv": [12, 8.5, 9, 8], "texture": "#0"}, + "down": {"uv": [12, 8.5, 9, 9], "texture": "#0"} + } + }, + { + "from": [6, 6, 8], + "to": [10, 7, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 6, 11]}, + "faces": { + "north": {"uv": [11, 2, 13, 2.5], "texture": "#0"}, + "east": {"uv": [11.5, 1, 13, 1.5], "texture": "#0"}, + "south": {"uv": [11, 2.5, 13, 3], "texture": "#0"}, + "west": {"uv": [11.5, 1.5, 13, 2], "texture": "#0"}, + "up": {"uv": [11, 1.5, 9, 0], "texture": "#0"}, + "down": {"uv": [11, 1.5, 9, 3], "texture": "#0"} + } + }, + { + "from": [5, 2, 4], + "to": [11, 6, 5], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 2, 5]}, + "faces": { + "north": {"uv": [6, 2, 9, 4], "texture": "#0"}, + "east": {"uv": [11, 3, 11.5, 5], "texture": "#0"}, + "south": {"uv": [6, 4, 9, 6], "texture": "#0"}, + "west": {"uv": [0, 11.5, 0.5, 13.5], "texture": "#0"}, + "up": {"uv": [3, 11.5, 0, 11], "texture": "#0"}, + "down": {"uv": [6, 11, 3, 11.5], "texture": "#0"} + } + }, + { + "from": [6, 6, 5], + "to": [10, 7, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 6, 5]}, + "faces": { + "north": {"uv": [11, 5, 13, 5.5], "texture": "#0"}, + "east": {"uv": [11.5, 11, 13, 11.5], "texture": "#0"}, + "south": {"uv": [11, 5.5, 13, 6], "texture": "#0"}, + "west": {"uv": [12, 3, 13.5, 3.5], "texture": "#0"}, + "up": {"uv": [11, 4.5, 9, 3], "texture": "#0"}, + "down": {"uv": [11, 4.5, 9, 6], "texture": "#0"} + } + }, + { + "from": [4, 2, 5], + "to": [5, 6, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [5, 2, 8]}, + "faces": { + "north": {"uv": [0.5, 11.5, 1, 13.5], "texture": "#0"}, + "east": {"uv": [6, 8, 9, 10], "texture": "#0"}, + "south": {"uv": [1, 11.5, 1.5, 13.5], "texture": "#0"}, + "west": {"uv": [0, 9, 3, 11], "texture": "#0"}, + "up": {"uv": [9.5, 14, 9, 11], "texture": "#0"}, + "down": {"uv": [10, 11, 9.5, 14], "texture": "#0"} + } + }, + { + "from": [5, 6, 6], + "to": [8, 7, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [5, 6, 8]}, + "faces": { + "north": {"uv": [12, 3.5, 13.5, 4], "texture": "#0"}, + "east": {"uv": [1.5, 11.5, 3.5, 12], "texture": "#0"}, + "south": {"uv": [12, 4, 13.5, 4.5], "texture": "#0"}, + "west": {"uv": [3.5, 11.5, 5.5, 12], "texture": "#0"}, + "up": {"uv": [10.5, 8, 9, 6], "texture": "#0"}, + "down": {"uv": [7.5, 10, 6, 12], "texture": "#0"} + } + }, + { + "from": [11, 2, 5], + "to": [12, 6, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [11, 2, 8]}, + "faces": { + "north": {"uv": [5.5, 11.5, 6, 13.5], "texture": "#0"}, + "east": {"uv": [3, 9, 6, 11], "texture": "#0"}, + "south": {"uv": [11.5, 11.5, 12, 13.5], "texture": "#0"}, + "west": {"uv": [9, 9, 12, 11], "texture": "#0"}, + "up": {"uv": [10.5, 14, 10, 11], "texture": "#0"}, + "down": {"uv": [11, 11, 10.5, 14], "texture": "#0"} + } + }, + { + "from": [8, 6, 6], + "to": [11, 7, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [11, 6, 8]}, + "faces": { + "north": {"uv": [12, 4.5, 13.5, 5], "texture": "#0"}, + "east": {"uv": [11.5, 0, 13.5, 0.5], "texture": "#0"}, + "south": {"uv": [12, 6, 13.5, 6.5], "texture": "#0"}, + "west": {"uv": [11.5, 0.5, 13.5, 1], "texture": "#0"}, + "up": {"uv": [9, 12, 7.5, 10], "texture": "#0"}, + "down": {"uv": [12, 6, 10.5, 8], "texture": "#0"} + } + } + ], + "display": { + "thirdperson_righthand": { + "translation": [0, 0.5, -1.5], + "scale": [0.5, 0.5, 0.5] + }, + "thirdperson_lefthand": { + "translation": [0, 0, -1.5], + "scale": [0.5, 0.5, 0.5] + }, + "firstperson_righthand": { + "scale": [0.5, 0.5, 0.5] + }, + "firstperson_lefthand": { + "scale": [0.5, 0.5, 0.5] + }, + "ground": { + "translation": [0, 0.5, 0], + "scale": [0.5, 0.5, 0.5] + }, + "gui": { + "rotation": [0, 45, 0], + "translation": [0, 0.5, 0], + "scale": [0.9, 0.9, 0.9] + }, + "head": { + "translation": [0, 14.5, 0] + } + }, + "groups": [ + { + "name": "body", + "origin": [8, 8, 8], + "children": [0] + }, + { + "name": "shell1", + "origin": [16, 8, 16], + "children": [1, + { + "name": "group", + "origin": [16, 8, 16], + "children": [2] + } + ] + }, + { + "name": "shell2", + "origin": [16, 8, 16], + "children": [3, + { + "name": "group", + "origin": [8, 4.69552, 3.53073], + "children": [4] + } + ] + }, + { + "name": "shell3", + "origin": [16, 8, 16], + "children": [5, + { + "name": "group", + "origin": [16, 8, 16], + "children": [6] + } + ] + }, + { + "name": "shell4", + "origin": [16, 8, 16], + "children": [7, + { + "name": "group", + "origin": [16, 8, 16], + "children": [8] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/surgebinding/resources/assets/surgebinding/models/item/bondsmith_honorblade.json b/src/surgebinding/resources/assets/surgebinding/models/item/bondsmith_honorblade.json new file mode 100644 index 000000000..1e5a98a6c --- /dev/null +++ b/src/surgebinding/resources/assets/surgebinding/models/item/bondsmith_honorblade.json @@ -0,0 +1,1937 @@ +{ + "credit": "Made with Blockbench", + "texture_size": [32, 32], + "textures": { + "0": "surgebinding:item/models/shardblade_model/bondsmith_honorblade", + "particle": "surgebinding:item/models/shardblade_model/bondsmith_honorblade" + }, + "elements": [ + { + "from": [9.81664, 11.67866, 7.96062], + "to": [9.89539, 12.54491, 8.03938], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [2, 0, 2.5, 0.5], "texture": "#0"}, + "east": {"uv": [2, 0.5, 2.5, 1], "texture": "#0"}, + "south": {"uv": [2, 1, 2.5, 1.5], "texture": "#0"}, + "west": {"uv": [2, 1.5, 2.5, 2], "texture": "#0"}, + "up": {"uv": [2.5, 2.5, 2, 2], "texture": "#0"}, + "down": {"uv": [0.5, 2.5, 0, 3], "texture": "#0"} + } + }, + { + "from": [9.73789, 11.67866, 7.96062], + "to": [9.89539, 12.46616, 8.03938], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [13.5, 9, 14, 9.5], "texture": "#0"}, + "east": {"uv": [9.5, 13.5, 10, 14], "texture": "#0"}, + "south": {"uv": [13.5, 9.5, 14, 10], "texture": "#0"}, + "west": {"uv": [10, 13.5, 10.5, 14], "texture": "#0"}, + "up": {"uv": [14, 10.5, 13.5, 10], "texture": "#0"}, + "down": {"uv": [11, 13.5, 10.5, 14], "texture": "#0"} + } + }, + { + "from": [9.58039, 11.67866, 7.96062], + "to": [9.73789, 12.30866, 8.03938], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [13.5, 12, 14, 12.5], "texture": "#0"}, + "east": {"uv": [12.5, 13.5, 13, 14], "texture": "#0"}, + "south": {"uv": [13.5, 12.5, 14, 13], "texture": "#0"}, + "west": {"uv": [13, 13.5, 13.5, 14], "texture": "#0"}, + "up": {"uv": [14, 13.5, 13.5, 13], "texture": "#0"}, + "down": {"uv": [14, 13.5, 13.5, 14], "texture": "#0"} + } + }, + { + "from": [9.50164, 11.67866, 7.96062], + "to": [9.65914, 11.99366, 8.03938], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [1.5, 14, 2, 14.5], "texture": "#0"}, + "east": {"uv": [14, 1.5, 14.5, 2], "texture": "#0"}, + "south": {"uv": [2, 14, 2.5, 14.5], "texture": "#0"}, + "west": {"uv": [14, 2, 14.5, 2.5], "texture": "#0"}, + "up": {"uv": [3, 14.5, 2.5, 14], "texture": "#0"}, + "down": {"uv": [14.5, 2.5, 14, 3], "texture": "#0"} + } + }, + { + "from": [4.48103, 11.44501, 7.96062], + "to": [4.52639, 11.49037, 8.03938], + "rotation": {"angle": -45, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [13.5, 7.5, 14, 8], "texture": "#0"}, + "east": {"uv": [8, 13.5, 8.5, 14], "texture": "#0"}, + "south": {"uv": [13.5, 8, 14, 8.5], "texture": "#0"}, + "west": {"uv": [8.5, 13.5, 9, 14], "texture": "#0"}, + "up": {"uv": [14, 9, 13.5, 8.5], "texture": "#0"}, + "down": {"uv": [9.5, 13.5, 9, 14], "texture": "#0"} + } + }, + { + "from": [9.60569, 11.09062, 7.96062], + "to": [9.68444, 11.24812, 8.03938], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [8.5, 2, 9, 2.5], "texture": "#0"}, + "east": {"uv": [2.5, 8.5, 3, 9], "texture": "#0"}, + "south": {"uv": [8.5, 2.5, 9, 3], "texture": "#0"}, + "west": {"uv": [3, 8.5, 3.5, 9], "texture": "#0"}, + "up": {"uv": [9, 3.5, 8.5, 3], "texture": "#0"}, + "down": {"uv": [4, 8.5, 3.5, 9], "texture": "#0"} + } + }, + { + "from": [5.55299, 10.66019, 7.96062], + "to": [5.78924, 10.73894, 8.03938], + "rotation": {"angle": -45, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [2.5, 0.5, 3, 1], "texture": "#0"}, + "east": {"uv": [1, 2.5, 1.5, 3], "texture": "#0"}, + "south": {"uv": [2.5, 1, 3, 1.5], "texture": "#0"}, + "west": {"uv": [1.5, 2.5, 2, 3], "texture": "#0"}, + "up": {"uv": [3, 2, 2.5, 1.5], "texture": "#0"}, + "down": {"uv": [2.5, 2.5, 2, 3], "texture": "#0"} + } + }, + { + "from": [6.73929, 11.22497, 7.96062], + "to": [6.97554, 11.38247, 8.03938], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [1.5, 4, 2, 4.5], "texture": "#0"}, + "east": {"uv": [4, 1.5, 4.5, 2], "texture": "#0"}, + "south": {"uv": [2, 4, 2.5, 4.5], "texture": "#0"}, + "west": {"uv": [4, 2, 4.5, 2.5], "texture": "#0"}, + "up": {"uv": [3, 4.5, 2.5, 4], "texture": "#0"}, + "down": {"uv": [4.5, 2.5, 4, 3], "texture": "#0"} + } + }, + { + "from": [8.02835, 11.57272, 7.96062], + "to": [8.34335, 12.12397, 8.03938], + "rotation": {"angle": 0, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [0, 4, 0.5, 4.5], "texture": "#0"}, + "east": {"uv": [4, 0, 4.5, 0.5], "texture": "#0"}, + "south": {"uv": [0.5, 4, 1, 4.5], "texture": "#0"}, + "west": {"uv": [4, 0.5, 4.5, 1], "texture": "#0"}, + "up": {"uv": [1.5, 4.5, 1, 4], "texture": "#0"}, + "down": {"uv": [4.5, 1, 4, 1.5], "texture": "#0"} + } + }, + { + "from": [6.27812, 11.07511, 7.96062], + "to": [6.35687, 11.23261, 8.03938], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [8.5, 6.5, 9, 7], "texture": "#0"}, + "east": {"uv": [7, 8.5, 7.5, 9], "texture": "#0"}, + "south": {"uv": [8.5, 7, 9, 7.5], "texture": "#0"}, + "west": {"uv": [7.5, 8.5, 8, 9], "texture": "#0"}, + "up": {"uv": [9, 8, 8.5, 7.5], "texture": "#0"}, + "down": {"uv": [8.5, 8.5, 8, 9], "texture": "#0"} + } + }, + { + "from": [7.61612, 11.57272, 7.96062], + "to": [8.08862, 12.12397, 8.03938], + "rotation": {"angle": 0, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [8.5, 5, 9, 5.5], "texture": "#0"}, + "east": {"uv": [5.5, 8.5, 6, 9], "texture": "#0"}, + "south": {"uv": [8.5, 5.5, 9, 6], "texture": "#0"}, + "west": {"uv": [6, 8.5, 6.5, 9], "texture": "#0"}, + "up": {"uv": [9, 6.5, 8.5, 6], "texture": "#0"}, + "down": {"uv": [7, 8.5, 6.5, 9], "texture": "#0"} + } + }, + { + "from": [6.06717, 11.66315, 7.96062], + "to": [6.14592, 12.5294, 8.03938], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [8.5, 3.5, 9, 4], "texture": "#0"}, + "east": {"uv": [4, 8.5, 4.5, 9], "texture": "#0"}, + "south": {"uv": [8.5, 4, 9, 4.5], "texture": "#0"}, + "west": {"uv": [4.5, 8.5, 5, 9], "texture": "#0"}, + "up": {"uv": [9, 5, 8.5, 4.5], "texture": "#0"}, + "down": {"uv": [5.5, 8.5, 5, 9], "texture": "#0"} + } + }, + { + "from": [6.06717, 11.66315, 7.96062], + "to": [6.22467, 12.45065, 8.03938], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [13.5, 10.5, 14, 11], "texture": "#0"}, + "east": {"uv": [11, 13.5, 11.5, 14], "texture": "#0"}, + "south": {"uv": [13.5, 11, 14, 11.5], "texture": "#0"}, + "west": {"uv": [11.5, 13.5, 12, 14], "texture": "#0"}, + "up": {"uv": [14, 12, 13.5, 11.5], "texture": "#0"}, + "down": {"uv": [12.5, 13.5, 12, 14], "texture": "#0"} + } + }, + { + "from": [6.22467, 11.66315, 7.96062], + "to": [6.38217, 12.29315, 8.03938], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [0, 14, 0.5, 14.5], "texture": "#0"}, + "east": {"uv": [14, 0, 14.5, 0.5], "texture": "#0"}, + "south": {"uv": [0.5, 14, 1, 14.5], "texture": "#0"}, + "west": {"uv": [14, 0.5, 14.5, 1], "texture": "#0"}, + "up": {"uv": [1.5, 14.5, 1, 14], "texture": "#0"}, + "down": {"uv": [14.5, 1, 14, 1.5], "texture": "#0"} + } + }, + { + "from": [9.33822, 10.78054, 7.96062], + "to": [9.49572, 10.93804, 8.03938], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [1, 3, 1.5, 3.5], "texture": "#0"}, + "east": {"uv": [3, 1, 3.5, 1.5], "texture": "#0"}, + "south": {"uv": [1.5, 3, 2, 3.5], "texture": "#0"}, + "west": {"uv": [3, 1.5, 3.5, 2], "texture": "#0"}, + "up": {"uv": [2.5, 3.5, 2, 3], "texture": "#0"}, + "down": {"uv": [3.5, 2, 3, 2.5], "texture": "#0"} + } + }, + { + "from": [8.13016, 11.21403, 7.96062], + "to": [8.28766, 11.45028, 8.03938], + "rotation": {"angle": 0, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [2.5, 2, 3, 2.5], "texture": "#0"}, + "east": {"uv": [2.5, 2.5, 3, 3], "texture": "#0"}, + "south": {"uv": [0, 3, 0.5, 3.5], "texture": "#0"}, + "west": {"uv": [3, 0, 3.5, 0.5], "texture": "#0"}, + "up": {"uv": [1, 3.5, 0.5, 3], "texture": "#0"}, + "down": {"uv": [3.5, 0.5, 3, 1], "texture": "#0"} + } + }, + { + "from": [7.45103, 9.7534, 7.96062], + "to": [7.52978, 9.83215, 8.03938], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [3.5, 2, 4, 2.5], "texture": "#0"}, + "east": {"uv": [2.5, 3.5, 3, 4], "texture": "#0"}, + "south": {"uv": [3.5, 2.5, 4, 3], "texture": "#0"}, + "west": {"uv": [3, 3.5, 3.5, 4], "texture": "#0"}, + "up": {"uv": [4, 3.5, 3.5, 3], "texture": "#0"}, + "down": {"uv": [4, 3.5, 3.5, 4], "texture": "#0"} + } + }, + { + "from": [6.78569, 9.43399, 7.96062], + "to": [6.86444, 9.59149, 8.03938], + "rotation": {"angle": -45, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [4.5, 0, 5, 0.5], "texture": "#0"}, + "east": {"uv": [0.5, 4.5, 1, 5], "texture": "#0"}, + "south": {"uv": [4.5, 0.5, 5, 1], "texture": "#0"}, + "west": {"uv": [1, 4.5, 1.5, 5], "texture": "#0"}, + "up": {"uv": [5, 1.5, 4.5, 1], "texture": "#0"}, + "down": {"uv": [2, 4.5, 1.5, 5], "texture": "#0"} + } + }, + { + "from": [8.73818, 9.27532, 7.96062], + "to": [8.81693, 9.35407, 8.03938], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [4.5, 3, 5, 3.5], "texture": "#0"}, + "east": {"uv": [3.5, 4.5, 4, 5], "texture": "#0"}, + "south": {"uv": [4.5, 3.5, 5, 4], "texture": "#0"}, + "west": {"uv": [4, 4.5, 4.5, 5], "texture": "#0"}, + "up": {"uv": [5, 4.5, 4.5, 4], "texture": "#0"}, + "down": {"uv": [5, 4.5, 4.5, 5], "texture": "#0"} + } + }, + { + "from": [8.76832, 9.12381, 7.96062], + "to": [8.84707, 9.20256, 8.03938], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [4, 6, 4.5, 6.5], "texture": "#0"}, + "east": {"uv": [6, 4, 6.5, 4.5], "texture": "#0"}, + "south": {"uv": [4.5, 6, 5, 6.5], "texture": "#0"}, + "west": {"uv": [6, 4.5, 6.5, 5], "texture": "#0"}, + "up": {"uv": [5.5, 6.5, 5, 6], "texture": "#0"}, + "down": {"uv": [6.5, 5, 6, 5.5], "texture": "#0"} + } + }, + { + "from": [9.16404, 8.78687, 7.96062], + "to": [9.24279, 8.94437, 8.03938], + "rotation": {"angle": 45, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [4.5, 1.5, 5, 2], "texture": "#0"}, + "east": {"uv": [2, 4.5, 2.5, 5], "texture": "#0"}, + "south": {"uv": [4.5, 2, 5, 2.5], "texture": "#0"}, + "west": {"uv": [2.5, 4.5, 3, 5], "texture": "#0"}, + "up": {"uv": [5, 3, 4.5, 2.5], "texture": "#0"}, + "down": {"uv": [3.5, 4.5, 3, 5], "texture": "#0"} + } + }, + { + "from": [7.12839, 9.05515, 7.96062], + "to": [7.28589, 9.21265, 8.03938], + "rotation": {"angle": -45, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [1, 6, 1.5, 6.5], "texture": "#0"}, + "east": {"uv": [6, 1, 6.5, 1.5], "texture": "#0"}, + "south": {"uv": [1.5, 6, 2, 6.5], "texture": "#0"}, + "west": {"uv": [6, 1.5, 6.5, 2], "texture": "#0"}, + "up": {"uv": [2.5, 6.5, 2, 6], "texture": "#0"}, + "down": {"uv": [6.5, 2, 6, 2.5], "texture": "#0"} + } + }, + { + "from": [7.69543, 9.16337, 7.96062], + "to": [7.77418, 9.32087, 8.03938], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [5.5, 5, 6, 5.5], "texture": "#0"}, + "east": {"uv": [5.5, 5.5, 6, 6], "texture": "#0"}, + "south": {"uv": [0, 6, 0.5, 6.5], "texture": "#0"}, + "west": {"uv": [6, 0, 6.5, 0.5], "texture": "#0"}, + "up": {"uv": [1, 6.5, 0.5, 6], "texture": "#0"}, + "down": {"uv": [6.5, 0.5, 6, 1], "texture": "#0"} + } + }, + { + "from": [8.32004, 8.3772, 7.96062], + "to": [8.47754, 8.5347, 8.03938], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [5.5, 3.5, 6, 4], "texture": "#0"}, + "east": {"uv": [4, 5.5, 4.5, 6], "texture": "#0"}, + "south": {"uv": [5.5, 4, 6, 4.5], "texture": "#0"}, + "west": {"uv": [4.5, 5.5, 5, 6], "texture": "#0"}, + "up": {"uv": [6, 5, 5.5, 4.5], "texture": "#0"}, + "down": {"uv": [5.5, 5.5, 5, 6], "texture": "#0"} + } + }, + { + "from": [8.50679, 8.08699, 7.96062], + "to": [8.58554, 8.24449, 8.03938], + "rotation": {"angle": 45, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [5.5, 2, 6, 2.5], "texture": "#0"}, + "east": {"uv": [2.5, 5.5, 3, 6], "texture": "#0"}, + "south": {"uv": [5.5, 2.5, 6, 3], "texture": "#0"}, + "west": {"uv": [3, 5.5, 3.5, 6], "texture": "#0"}, + "up": {"uv": [6, 3.5, 5.5, 3], "texture": "#0"}, + "down": {"uv": [4, 5.5, 3.5, 6], "texture": "#0"} + } + }, + { + "from": [8.95703, 9.65816, 7.96062], + "to": [9.03578, 9.73691, 8.03938], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [3, 4, 3.5, 4.5], "texture": "#0"}, + "east": {"uv": [4, 3, 4.5, 3.5], "texture": "#0"}, + "south": {"uv": [3.5, 4, 4, 4.5], "texture": "#0"}, + "west": {"uv": [4, 3.5, 4.5, 4], "texture": "#0"}, + "up": {"uv": [4.5, 4.5, 4, 4], "texture": "#0"}, + "down": {"uv": [0.5, 4.5, 0, 5], "texture": "#0"} + } + }, + { + "from": [8.15782, 9.16987, 7.96062], + "to": [8.23657, 10.11487, 8.03938], + "rotation": {"angle": 0, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [3.5, 0.5, 4, 1], "texture": "#0"}, + "east": {"uv": [1, 3.5, 1.5, 4], "texture": "#0"}, + "south": {"uv": [3.5, 1, 4, 1.5], "texture": "#0"}, + "west": {"uv": [1.5, 3.5, 2, 4], "texture": "#0"}, + "up": {"uv": [4, 2, 3.5, 1.5], "texture": "#0"}, + "down": {"uv": [2.5, 3.5, 2, 4], "texture": "#0"} + } + }, + { + "from": [6.28549, 9.89157, 7.96062], + "to": [6.52174, 9.97032, 8.03938], + "rotation": {"angle": -45, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [5.5, 0.5, 6, 1], "texture": "#0"}, + "east": {"uv": [1, 5.5, 1.5, 6], "texture": "#0"}, + "south": {"uv": [5.5, 1, 6, 1.5], "texture": "#0"}, + "west": {"uv": [1.5, 5.5, 2, 6], "texture": "#0"}, + "up": {"uv": [6, 2, 5.5, 1.5], "texture": "#0"}, + "down": {"uv": [2.5, 5.5, 2, 6], "texture": "#0"} + } + }, + { + "from": [9.17588, 10.11975, 7.96062], + "to": [9.25463, 10.27725, 8.03938], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [4.5, 5, 5, 5.5], "texture": "#0"}, + "east": {"uv": [5, 4.5, 5.5, 5], "texture": "#0"}, + "south": {"uv": [5, 5, 5.5, 5.5], "texture": "#0"}, + "west": {"uv": [0, 5.5, 0.5, 6], "texture": "#0"}, + "up": {"uv": [6, 0.5, 5.5, 0], "texture": "#0"}, + "down": {"uv": [1, 5.5, 0.5, 6], "texture": "#0"} + } + }, + { + "from": [7.12189, 10.23454, 7.96062], + "to": [7.35814, 10.39204, 8.03938], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [3, 5, 3.5, 5.5], "texture": "#0"}, + "east": {"uv": [5, 3, 5.5, 3.5], "texture": "#0"}, + "south": {"uv": [3.5, 5, 4, 5.5], "texture": "#0"}, + "west": {"uv": [5, 3.5, 5.5, 4], "texture": "#0"}, + "up": {"uv": [4.5, 5.5, 4, 5], "texture": "#0"}, + "down": {"uv": [5.5, 4, 5, 4.5], "texture": "#0"} + } + }, + { + "from": [8.18337, 10.07382, 7.96062], + "to": [8.26212, 10.38882, 8.03938], + "rotation": {"angle": 0, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [1.5, 5, 2, 5.5], "texture": "#0"}, + "east": {"uv": [5, 1.5, 5.5, 2], "texture": "#0"}, + "south": {"uv": [2, 5, 2.5, 5.5], "texture": "#0"}, + "west": {"uv": [5, 2, 5.5, 2.5], "texture": "#0"}, + "up": {"uv": [3, 5.5, 2.5, 5], "texture": "#0"}, + "down": {"uv": [5.5, 2.5, 5, 3], "texture": "#0"} + } + }, + { + "from": [8.95703, 9.73691, 7.96062], + "to": [9.03578, 9.89441, 8.03938], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [0, 5, 0.5, 5.5], "texture": "#0"}, + "east": {"uv": [5, 0, 5.5, 0.5], "texture": "#0"}, + "south": {"uv": [0.5, 5, 1, 5.5], "texture": "#0"}, + "west": {"uv": [5, 0.5, 5.5, 1], "texture": "#0"}, + "up": {"uv": [1.5, 5.5, 1, 5], "texture": "#0"}, + "down": {"uv": [5.5, 1, 5, 1.5], "texture": "#0"} + } + }, + { + "from": [8.1603, 10.51127, 7.96062], + "to": [8.3178, 11.14127, 8.03938], + "rotation": {"angle": 0, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [2.5, 3, 3, 3.5], "texture": "#0"}, + "east": {"uv": [3, 2.5, 3.5, 3], "texture": "#0"}, + "south": {"uv": [3, 3, 3.5, 3.5], "texture": "#0"}, + "west": {"uv": [0, 3.5, 0.5, 4], "texture": "#0"}, + "up": {"uv": [4, 0.5, 3.5, 0], "texture": "#0"}, + "down": {"uv": [1, 3.5, 0.5, 4], "texture": "#0"} + } + }, + { + "from": [8.18795, 8.60399, 7.96062], + "to": [8.2667, 9.23399, 8.03938], + "rotation": {"angle": 0, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [2.5, 6, 3, 6.5], "texture": "#0"}, + "east": {"uv": [6, 2.5, 6.5, 3], "texture": "#0"}, + "south": {"uv": [3, 6, 3.5, 6.5], "texture": "#0"}, + "west": {"uv": [6, 3, 6.5, 3.5], "texture": "#0"}, + "up": {"uv": [4, 6.5, 3.5, 6], "texture": "#0"}, + "down": {"uv": [6.5, 3.5, 6, 4], "texture": "#0"} + } + }, + { + "from": [8.42893, 8.22569, 7.96062], + "to": [8.50768, 8.30444, 8.03938], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [7, 9, 7.5, 9.5], "texture": "#0"}, + "east": {"uv": [9, 7, 9.5, 7.5], "texture": "#0"}, + "south": {"uv": [7.5, 9, 8, 9.5], "texture": "#0"}, + "west": {"uv": [9, 7.5, 9.5, 8], "texture": "#0"}, + "up": {"uv": [8.5, 9.5, 8, 9], "texture": "#0"}, + "down": {"uv": [9.5, 8, 9, 8.5], "texture": "#0"} + } + }, + { + "from": [7.74952, 8.47665, 7.96062], + "to": [7.98577, 8.5554, 8.03938], + "rotation": {"angle": -45, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [5.5, 9, 6, 9.5], "texture": "#0"}, + "east": {"uv": [9, 5.5, 9.5, 6], "texture": "#0"}, + "south": {"uv": [6, 9, 6.5, 9.5], "texture": "#0"}, + "west": {"uv": [9, 6, 9.5, 6.5], "texture": "#0"}, + "up": {"uv": [7, 9.5, 6.5, 9], "texture": "#0"}, + "down": {"uv": [9.5, 6.5, 9, 7], "texture": "#0"} + } + }, + { + "from": [7.933, 8.28831, 7.96062], + "to": [8.16925, 8.52456, 8.03938], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [4, 9, 4.5, 9.5], "texture": "#0"}, + "east": {"uv": [9, 4, 9.5, 4.5], "texture": "#0"}, + "south": {"uv": [4.5, 9, 5, 9.5], "texture": "#0"}, + "west": {"uv": [9, 4.5, 9.5, 5], "texture": "#0"}, + "up": {"uv": [5.5, 9.5, 5, 9], "texture": "#0"}, + "down": {"uv": [9.5, 5, 9, 5.5], "texture": "#0"} + } + }, + { + "from": [8.13934, 7.80185, 7.96062], + "to": [8.29684, 8.27435, 8.03938], + "rotation": {"angle": 0, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [2.5, 9, 3, 9.5], "texture": "#0"}, + "east": {"uv": [9, 2.5, 9.5, 3], "texture": "#0"}, + "south": {"uv": [3, 9, 3.5, 9.5], "texture": "#0"}, + "west": {"uv": [9, 3, 9.5, 3.5], "texture": "#0"}, + "up": {"uv": [4, 9.5, 3.5, 9], "texture": "#0"}, + "down": {"uv": [9.5, 3.5, 9, 4], "texture": "#0"} + } + }, + { + "from": [8.16948, 7.15722, 7.96062], + "to": [8.32698, 7.47222, 8.03938], + "rotation": {"angle": 0, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [9.5, 3.5, 10, 4], "texture": "#0"}, + "east": {"uv": [4, 9.5, 4.5, 10], "texture": "#0"}, + "south": {"uv": [9.5, 4, 10, 4.5], "texture": "#0"}, + "west": {"uv": [4.5, 9.5, 5, 10], "texture": "#0"}, + "up": {"uv": [10, 5, 9.5, 4.5], "texture": "#0"}, + "down": {"uv": [5.5, 9.5, 5, 10], "texture": "#0"} + } + }, + { + "from": [8.26781, 7.55877, 7.96062], + "to": [8.50406, 7.79502, 8.03938], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [9.5, 2, 10, 2.5], "texture": "#0"}, + "east": {"uv": [2.5, 9.5, 3, 10], "texture": "#0"}, + "south": {"uv": [9.5, 2.5, 10, 3], "texture": "#0"}, + "west": {"uv": [3, 9.5, 3.5, 10], "texture": "#0"}, + "up": {"uv": [10, 3.5, 9.5, 3], "texture": "#0"}, + "down": {"uv": [4, 9.5, 3.5, 10], "texture": "#0"} + } + }, + { + "from": [8.49552, 7.93076, 7.96062], + "to": [8.57427, 8.00951, 8.03938], + "rotation": {"angle": -45, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [9.5, 0.5, 10, 1], "texture": "#0"}, + "east": {"uv": [1, 9.5, 1.5, 10], "texture": "#0"}, + "south": {"uv": [9.5, 1, 10, 1.5], "texture": "#0"}, + "west": {"uv": [1.5, 9.5, 2, 10], "texture": "#0"}, + "up": {"uv": [10, 2, 9.5, 1.5], "texture": "#0"}, + "down": {"uv": [2.5, 9.5, 2, 10], "texture": "#0"} + } + }, + { + "from": [8.1498, 7.47308, 7.96062], + "to": [8.22855, 7.55183, 8.03938], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [8.5, 9, 9, 9.5], "texture": "#0"}, + "east": {"uv": [9, 8.5, 9.5, 9], "texture": "#0"}, + "south": {"uv": [9, 9, 9.5, 9.5], "texture": "#0"}, + "west": {"uv": [0, 9.5, 0.5, 10], "texture": "#0"}, + "up": {"uv": [10, 0.5, 9.5, 0], "texture": "#0"}, + "down": {"uv": [1, 9.5, 0.5, 10], "texture": "#0"} + } + }, + { + "from": [7.96217, 7.54584, 7.96062], + "to": [8.19842, 7.78209, 8.03938], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [1, 9, 1.5, 9.5], "texture": "#0"}, + "east": {"uv": [9, 1, 9.5, 1.5], "texture": "#0"}, + "south": {"uv": [1.5, 9, 2, 9.5], "texture": "#0"}, + "west": {"uv": [9, 1.5, 9.5, 2], "texture": "#0"}, + "up": {"uv": [2.5, 9.5, 2, 9], "texture": "#0"}, + "down": {"uv": [9.5, 2, 9, 2.5], "texture": "#0"} + } + }, + { + "from": [7.66457, 6.85999, 7.96062], + "to": [7.97957, 7.17499, 8.03938], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [9.5, 5, 10, 5.5], "texture": "#0"}, + "east": {"uv": [5.5, 9.5, 6, 10], "texture": "#0"}, + "south": {"uv": [9.5, 5.5, 10, 6], "texture": "#0"}, + "west": {"uv": [6, 9.5, 6.5, 10], "texture": "#0"}, + "up": {"uv": [10, 6.5, 9.5, 6], "texture": "#0"}, + "down": {"uv": [7, 9.5, 6.5, 10], "texture": "#0"} + } + }, + { + "from": [7.41451, 5.54906, 7.96062], + "to": [7.57201, 6.10031, 8.03938], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [10.5, 0, 11, 0.5], "texture": "#0"}, + "east": {"uv": [0.5, 10.5, 1, 11], "texture": "#0"}, + "south": {"uv": [10.5, 0.5, 11, 1], "texture": "#0"}, + "west": {"uv": [1, 10.5, 1.5, 11], "texture": "#0"}, + "up": {"uv": [11, 1.5, 10.5, 1], "texture": "#0"}, + "down": {"uv": [2, 10.5, 1.5, 11], "texture": "#0"} + } + }, + { + "from": [7.9609, 7.49849, 7.96062], + "to": [8.03965, 7.57724, 8.03938], + "rotation": {"angle": 45, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [8.5, 8, 9, 8.5], "texture": "#0"}, + "east": {"uv": [8.5, 8.5, 9, 9], "texture": "#0"}, + "south": {"uv": [0, 9, 0.5, 9.5], "texture": "#0"}, + "west": {"uv": [9, 0, 9.5, 0.5], "texture": "#0"}, + "up": {"uv": [1, 9.5, 0.5, 9], "texture": "#0"}, + "down": {"uv": [9.5, 0.5, 9, 1], "texture": "#0"} + } + }, + { + "from": [8.96666, 7.46611, 7.96062], + "to": [9.04541, 7.54486, 8.03938], + "rotation": {"angle": -45, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [4.5, 10, 5, 10.5], "texture": "#0"}, + "east": {"uv": [10, 4.5, 10.5, 5], "texture": "#0"}, + "south": {"uv": [5, 10, 5.5, 10.5], "texture": "#0"}, + "west": {"uv": [10, 5, 10.5, 5.5], "texture": "#0"}, + "up": {"uv": [6, 10.5, 5.5, 10], "texture": "#0"}, + "down": {"uv": [10.5, 5.5, 10, 6], "texture": "#0"} + } + }, + { + "from": [8.52527, 6.94919, 7.96062], + "to": [8.76152, 7.18544, 8.03938], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [3, 10, 3.5, 10.5], "texture": "#0"}, + "east": {"uv": [10, 3, 10.5, 3.5], "texture": "#0"}, + "south": {"uv": [3.5, 10, 4, 10.5], "texture": "#0"}, + "west": {"uv": [10, 3.5, 10.5, 4], "texture": "#0"}, + "up": {"uv": [4.5, 10.5, 4, 10], "texture": "#0"}, + "down": {"uv": [10.5, 4, 10, 4.5], "texture": "#0"} + } + }, + { + "from": [8.76967, 6.43791, 7.96062], + "to": [9.00592, 6.67416, 8.03938], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [7.5, 10, 8, 10.5], "texture": "#0"}, + "east": {"uv": [10, 7.5, 10.5, 8], "texture": "#0"}, + "south": {"uv": [8, 10, 8.5, 10.5], "texture": "#0"}, + "west": {"uv": [10, 8, 10.5, 8.5], "texture": "#0"}, + "up": {"uv": [9, 10.5, 8.5, 10], "texture": "#0"}, + "down": {"uv": [10.5, 8.5, 10, 9], "texture": "#0"} + } + }, + { + "from": [9.23061, 7.00853, 7.96062], + "to": [9.46686, 7.16603, 8.03938], + "rotation": {"angle": -45, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [6, 10, 6.5, 10.5], "texture": "#0"}, + "east": {"uv": [10, 6, 10.5, 6.5], "texture": "#0"}, + "south": {"uv": [6.5, 10, 7, 10.5], "texture": "#0"}, + "west": {"uv": [10, 6.5, 10.5, 7], "texture": "#0"}, + "up": {"uv": [7.5, 10.5, 7, 10], "texture": "#0"}, + "down": {"uv": [10.5, 7, 10, 7.5], "texture": "#0"} + } + }, + { + "from": [8.09531, 6.57426, 7.96062], + "to": [8.33156, 6.81051, 8.03938], + "rotation": {"angle": 0, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [1.5, 10, 2, 10.5], "texture": "#0"}, + "east": {"uv": [10, 1.5, 10.5, 2], "texture": "#0"}, + "south": {"uv": [2, 10, 2.5, 10.5], "texture": "#0"}, + "west": {"uv": [10, 2, 10.5, 2.5], "texture": "#0"}, + "up": {"uv": [3, 10.5, 2.5, 10], "texture": "#0"}, + "down": {"uv": [10.5, 2.5, 10, 3], "texture": "#0"} + } + }, + { + "from": [8.12545, 6.00837, 7.96062], + "to": [8.3617, 6.24462, 8.03938], + "rotation": {"angle": 0, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [9, 10, 9.5, 10.5], "texture": "#0"}, + "east": {"uv": [10, 9, 10.5, 9.5], "texture": "#0"}, + "south": {"uv": [9.5, 10, 10, 10.5], "texture": "#0"}, + "west": {"uv": [10, 9.5, 10.5, 10], "texture": "#0"}, + "up": {"uv": [10.5, 10.5, 10, 10], "texture": "#0"}, + "down": {"uv": [0.5, 10.5, 0, 11], "texture": "#0"} + } + }, + { + "from": [8.46377, 5.49309, 7.96062], + "to": [8.54252, 5.57184, 8.03938], + "rotation": {"angle": 0, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [11.5, 11, 12, 11.5], "texture": "#0"}, + "east": {"uv": [11.5, 11.5, 12, 12], "texture": "#0"}, + "south": {"uv": [0, 12, 0.5, 12.5], "texture": "#0"}, + "west": {"uv": [12, 0, 12.5, 0.5], "texture": "#0"}, + "up": {"uv": [1, 12.5, 0.5, 12], "texture": "#0"}, + "down": {"uv": [12.5, 0.5, 12, 1], "texture": "#0"} + } + }, + { + "from": [6.53222, 5.84373, 7.96062], + "to": [6.61097, 6.15873, 8.03938], + "rotation": {"angle": 45, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [2.5, 12, 3, 12.5], "texture": "#0"}, + "east": {"uv": [12, 2.5, 12.5, 3], "texture": "#0"}, + "south": {"uv": [3, 12, 3.5, 12.5], "texture": "#0"}, + "west": {"uv": [12, 3, 12.5, 3.5], "texture": "#0"}, + "up": {"uv": [4, 12.5, 3.5, 12], "texture": "#0"}, + "down": {"uv": [12.5, 3.5, 12, 4], "texture": "#0"} + } + }, + { + "from": [5.64802, 6.39382, 7.96062], + "to": [5.80552, 6.47257, 8.03938], + "rotation": {"angle": 45, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [10, 12, 10.5, 12.5], "texture": "#0"}, + "east": {"uv": [12, 10, 12.5, 10.5], "texture": "#0"}, + "south": {"uv": [10.5, 12, 11, 12.5], "texture": "#0"}, + "west": {"uv": [12, 10.5, 12.5, 11], "texture": "#0"}, + "up": {"uv": [11.5, 12.5, 11, 12], "texture": "#0"}, + "down": {"uv": [12.5, 11, 12, 11.5], "texture": "#0"} + } + }, + { + "from": [9.27893, 5.84891, 7.96062], + "to": [9.35768, 5.92766, 8.03938], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [4, 12, 4.5, 12.5], "texture": "#0"}, + "east": {"uv": [12, 4, 12.5, 4.5], "texture": "#0"}, + "south": {"uv": [4.5, 12, 5, 12.5], "texture": "#0"}, + "west": {"uv": [12, 4.5, 12.5, 5], "texture": "#0"}, + "up": {"uv": [5.5, 12.5, 5, 12], "texture": "#0"}, + "down": {"uv": [12.5, 5, 12, 5.5], "texture": "#0"} + } + }, + { + "from": [7.23179, 5.60475, 7.96062], + "to": [7.31054, 5.6835, 8.03938], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [7, 12, 7.5, 12.5], "texture": "#0"}, + "east": {"uv": [12, 7, 12.5, 7.5], "texture": "#0"}, + "south": {"uv": [7.5, 12, 8, 12.5], "texture": "#0"}, + "west": {"uv": [12, 7.5, 12.5, 8], "texture": "#0"}, + "up": {"uv": [8.5, 12.5, 8, 12], "texture": "#0"}, + "down": {"uv": [12.5, 8, 12, 8.5], "texture": "#0"} + } + }, + { + "from": [6.21614, 6.08106, 7.96062], + "to": [6.45239, 6.23856, 8.03938], + "rotation": {"angle": 45, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [8.5, 12, 9, 12.5], "texture": "#0"}, + "east": {"uv": [12, 8.5, 12.5, 9], "texture": "#0"}, + "south": {"uv": [9, 12, 9.5, 12.5], "texture": "#0"}, + "west": {"uv": [12, 9, 12.5, 9.5], "texture": "#0"}, + "up": {"uv": [10, 12.5, 9.5, 12], "texture": "#0"}, + "down": {"uv": [12.5, 9.5, 12, 10], "texture": "#0"} + } + }, + { + "from": [8.12214, 5.52323, 7.96062], + "to": [8.43714, 5.68073, 8.03938], + "rotation": {"angle": 0, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [5.5, 12, 6, 12.5], "texture": "#0"}, + "east": {"uv": [12, 5.5, 12.5, 6], "texture": "#0"}, + "south": {"uv": [6, 12, 6.5, 12.5], "texture": "#0"}, + "west": {"uv": [12, 6, 12.5, 6.5], "texture": "#0"}, + "up": {"uv": [7, 12.5, 6.5, 12], "texture": "#0"}, + "down": {"uv": [12.5, 6.5, 12, 7], "texture": "#0"} + } + }, + { + "from": [7.41695, 5.25684, 7.96062], + "to": [7.4957, 5.57184, 8.03938], + "rotation": {"angle": 0, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [1, 12, 1.5, 12.5], "texture": "#0"}, + "east": {"uv": [12, 1, 12.5, 1.5], "texture": "#0"}, + "south": {"uv": [1.5, 12, 2, 12.5], "texture": "#0"}, + "west": {"uv": [12, 1.5, 12.5, 2], "texture": "#0"}, + "up": {"uv": [2.5, 12.5, 2, 12], "texture": "#0"}, + "down": {"uv": [12.5, 2, 12, 2.5], "texture": "#0"} + } + }, + { + "from": [7.88161, 5.24134, 7.96062], + "to": [8.11786, 5.63509, 8.03938], + "rotation": {"angle": 0, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [12.5, 6.5, 13, 7], "texture": "#0"}, + "east": {"uv": [7, 12.5, 7.5, 13], "texture": "#0"}, + "south": {"uv": [12.5, 7, 13, 7.5], "texture": "#0"}, + "west": {"uv": [7.5, 12.5, 8, 13], "texture": "#0"}, + "up": {"uv": [13, 8, 12.5, 7.5], "texture": "#0"}, + "down": {"uv": [8.5, 12.5, 8, 13], "texture": "#0"} + } + }, + { + "from": [7.88161, 5.65461, 7.07069], + "to": [8.11786, 5.81211, 7.14944], + "rotation": {"angle": -22.5, "axis": "x", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [4.5, 13, 5, 13.5], "texture": "#0"}, + "east": {"uv": [13, 4.5, 13.5, 5], "texture": "#0"}, + "south": {"uv": [5, 13, 5.5, 13.5], "texture": "#0"}, + "west": {"uv": [13, 5, 13.5, 5.5], "texture": "#0"}, + "up": {"uv": [6, 13.5, 5.5, 13], "texture": "#0"}, + "down": {"uv": [13.5, 5.5, 13, 6], "texture": "#0"} + } + }, + { + "from": [7.88161, 6.30415, 9.62309], + "to": [8.11786, 6.37597, 9.69491], + "rotation": {"angle": 45, "axis": "x", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [6, 13, 6.5, 13.5], "texture": "#0"}, + "east": {"uv": [13, 6, 13.5, 6.5], "texture": "#0"}, + "south": {"uv": [6.5, 13, 7, 13.5], "texture": "#0"}, + "west": {"uv": [13, 6.5, 13.5, 7], "texture": "#0"}, + "up": {"uv": [7.5, 13.5, 7, 13], "texture": "#0"}, + "down": {"uv": [13.5, 7, 13, 7.5], "texture": "#0"} + } + }, + { + "from": [7.88161, 5.65461, 8.85057], + "to": [8.11786, 5.81211, 8.92931], + "rotation": {"angle": 22.5, "axis": "x", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [3, 13, 3.5, 13.5], "texture": "#0"}, + "east": {"uv": [13, 3, 13.5, 3.5], "texture": "#0"}, + "south": {"uv": [3.5, 13, 4, 13.5], "texture": "#0"}, + "west": {"uv": [13, 3.5, 13.5, 4], "texture": "#0"}, + "up": {"uv": [4.5, 13.5, 4, 13], "texture": "#0"}, + "down": {"uv": [13.5, 4, 13, 4.5], "texture": "#0"} + } + }, + { + "from": [7.88161, 5.08384, 7.96062], + "to": [8.11786, 5.24134, 8.03938], + "rotation": {"angle": 0, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [12.5, 8, 13, 8.5], "texture": "#0"}, + "east": {"uv": [8.5, 12.5, 9, 13], "texture": "#0"}, + "south": {"uv": [12.5, 8.5, 13, 9], "texture": "#0"}, + "west": {"uv": [9, 12.5, 9.5, 13], "texture": "#0"}, + "up": {"uv": [13, 9.5, 12.5, 9], "texture": "#0"}, + "down": {"uv": [10, 12.5, 9.5, 13], "texture": "#0"} + } + }, + { + "from": [7.88161, 4.95639, 7.88829], + "to": [8.11786, 5.50764, 7.96704], + "rotation": {"angle": 0, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [7.5, 13, 8, 13.5], "texture": "#0"}, + "east": {"uv": [13, 7.5, 13.5, 8], "texture": "#0"}, + "south": {"uv": [8, 13, 8.5, 13.5], "texture": "#0"}, + "west": {"uv": [13, 8, 13.5, 8.5], "texture": "#0"}, + "up": {"uv": [9, 13.5, 8.5, 13], "texture": "#0"}, + "down": {"uv": [13.5, 8.5, 13, 9], "texture": "#0"} + } + }, + { + "from": [5.84568, 5.76731, 7.88829], + "to": [6.08193, 5.92481, 7.96704], + "rotation": {"angle": 45, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [3, 14, 3.5, 14.5], "texture": "#0"}, + "east": {"uv": [14, 3, 14.5, 3.5], "texture": "#0"}, + "south": {"uv": [3.5, 14, 4, 14.5], "texture": "#0"}, + "west": {"uv": [14, 3.5, 14.5, 4], "texture": "#0"}, + "up": {"uv": [4.5, 14.5, 4, 14], "texture": "#0"}, + "down": {"uv": [14.5, 4, 14, 4.5], "texture": "#0"} + } + }, + { + "from": [5.76693, 5.68856, 7.88829], + "to": [6.00318, 5.84606, 7.96704], + "rotation": {"angle": 45, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [6, 14, 6.5, 14.5], "texture": "#0"}, + "east": {"uv": [14, 6, 14.5, 6.5], "texture": "#0"}, + "south": {"uv": [6.5, 14, 7, 14.5], "texture": "#0"}, + "west": {"uv": [14, 6.5, 14.5, 7], "texture": "#0"}, + "up": {"uv": [7.5, 14.5, 7, 14], "texture": "#0"}, + "down": {"uv": [14.5, 7, 14, 7.5], "texture": "#0"} + } + }, + { + "from": [5.76693, 5.92481, 7.88829], + "to": [5.92443, 6.08231, 7.96704], + "rotation": {"angle": 45, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [4.5, 14, 5, 14.5], "texture": "#0"}, + "east": {"uv": [14, 4.5, 14.5, 5], "texture": "#0"}, + "south": {"uv": [5, 14, 5.5, 14.5], "texture": "#0"}, + "west": {"uv": [14, 5, 14.5, 5.5], "texture": "#0"}, + "up": {"uv": [6, 14.5, 5.5, 14], "texture": "#0"}, + "down": {"uv": [14.5, 5.5, 14, 6], "texture": "#0"} + } + }, + { + "from": [5.68818, 5.84606, 7.88829], + "to": [5.84568, 6.00356, 7.96704], + "rotation": {"angle": 45, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [7.5, 14, 8, 14.5], "texture": "#0"}, + "east": {"uv": [14, 7.5, 14.5, 8], "texture": "#0"}, + "south": {"uv": [8, 14, 8.5, 14.5], "texture": "#0"}, + "west": {"uv": [14, 8, 14.5, 8.5], "texture": "#0"}, + "up": {"uv": [9, 14.5, 8.5, 14], "texture": "#0"}, + "down": {"uv": [14.5, 8.5, 14, 9], "texture": "#0"} + } + }, + { + "from": [7.88161, 4.95639, 8.03297], + "to": [8.11786, 5.50764, 8.11172], + "rotation": {"angle": 0, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [9, 13, 9.5, 13.5], "texture": "#0"}, + "east": {"uv": [13, 9, 13.5, 9.5], "texture": "#0"}, + "south": {"uv": [9.5, 13, 10, 13.5], "texture": "#0"}, + "west": {"uv": [13, 9.5, 13.5, 10], "texture": "#0"}, + "up": {"uv": [10.5, 13.5, 10, 13], "texture": "#0"}, + "down": {"uv": [13.5, 10, 13, 10.5], "texture": "#0"} + } + }, + { + "from": [7.25161, 4.92634, 7.88188], + "to": [8.74786, 5.08384, 8.11812], + "rotation": {"angle": 0, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [1.5, 13, 2, 13.5], "texture": "#0"}, + "east": {"uv": [13, 1.5, 13.5, 2], "texture": "#0"}, + "south": {"uv": [2, 13, 2.5, 13.5], "texture": "#0"}, + "west": {"uv": [13, 2, 13.5, 2.5], "texture": "#0"}, + "up": {"uv": [3, 13.5, 2.5, 13], "texture": "#0"}, + "down": {"uv": [13.5, 2.5, 13, 3], "texture": "#0"} + } + }, + { + "from": [7.88161, 3.19384, 7.88188], + "to": [8.11786, 4.92634, 8.11812], + "rotation": {"angle": 0, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [13.5, 0, 14, 0.5], "texture": "#0"}, + "east": {"uv": [0.5, 13.5, 1, 14], "texture": "#0"}, + "south": {"uv": [13.5, 0.5, 14, 1], "texture": "#0"}, + "west": {"uv": [1, 13.5, 1.5, 14], "texture": "#0"}, + "up": {"uv": [14, 1.5, 13.5, 1], "texture": "#0"}, + "down": {"uv": [2, 13.5, 1.5, 14], "texture": "#0"} + } + }, + { + "from": [7.88161, 2.95759, 7.88188], + "to": [8.11786, 3.19384, 8.11812], + "rotation": {"angle": 0, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [9, 14, 9.5, 14.5], "texture": "#0"}, + "east": {"uv": [14, 9, 14.5, 9.5], "texture": "#0"}, + "south": {"uv": [9.5, 14, 10, 14.5], "texture": "#0"}, + "west": {"uv": [14, 9.5, 14.5, 10], "texture": "#0"}, + "up": {"uv": [10.5, 14.5, 10, 14], "texture": "#0"}, + "down": {"uv": [14.5, 10, 14, 10.5], "texture": "#0"} + } + }, + { + "from": [8.74786, 4.84759, 7.88188], + "to": [8.90536, 5.71384, 8.11812], + "rotation": {"angle": 0, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [12, 13, 12.5, 13.5], "texture": "#0"}, + "east": {"uv": [13, 12, 13.5, 12.5], "texture": "#0"}, + "south": {"uv": [12.5, 13, 13, 13.5], "texture": "#0"}, + "west": {"uv": [13, 12.5, 13.5, 13], "texture": "#0"}, + "up": {"uv": [13.5, 13.5, 13, 13], "texture": "#0"}, + "down": {"uv": [0.5, 13.5, 0, 14], "texture": "#0"} + } + }, + { + "from": [6.91149, 5.74326, 7.88188], + "to": [7.02363, 5.8554, 8.11812], + "rotation": {"angle": 45, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [13.5, 1.5, 14, 2], "texture": "#0"}, + "east": {"uv": [2, 13.5, 2.5, 14], "texture": "#0"}, + "south": {"uv": [13.5, 2, 14, 2.5], "texture": "#0"}, + "west": {"uv": [2.5, 13.5, 3, 14], "texture": "#0"}, + "up": {"uv": [14, 3, 13.5, 2.5], "texture": "#0"}, + "down": {"uv": [3.5, 13.5, 3, 14], "texture": "#0"} + } + }, + { + "from": [5.40877, 6.57776, 7.88188], + "to": [5.52091, 6.6899, 8.11812], + "rotation": {"angle": 45, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [13.5, 4.5, 14, 5], "texture": "#0"}, + "east": {"uv": [5, 13.5, 5.5, 14], "texture": "#0"}, + "south": {"uv": [13.5, 5, 14, 5.5], "texture": "#0"}, + "west": {"uv": [5.5, 13.5, 6, 14], "texture": "#0"}, + "up": {"uv": [14, 6, 13.5, 5.5], "texture": "#0"}, + "down": {"uv": [6.5, 13.5, 6, 14], "texture": "#0"} + } + }, + { + "from": [5.07466, 6.24365, 7.88188], + "to": [5.1868, 6.35579, 8.11812], + "rotation": {"angle": 45, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [13.5, 6, 14, 6.5], "texture": "#0"}, + "east": {"uv": [6.5, 13.5, 7, 14], "texture": "#0"}, + "south": {"uv": [13.5, 6.5, 14, 7], "texture": "#0"}, + "west": {"uv": [7, 13.5, 7.5, 14], "texture": "#0"}, + "up": {"uv": [14, 7.5, 13.5, 7], "texture": "#0"}, + "down": {"uv": [8, 13.5, 7.5, 14], "texture": "#0"} + } + }, + { + "from": [6.29972, 5.12996, 7.88188], + "to": [6.41186, 5.2421, 8.11812], + "rotation": {"angle": 45, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [13.5, 3, 14, 3.5], "texture": "#0"}, + "east": {"uv": [3.5, 13.5, 4, 14], "texture": "#0"}, + "south": {"uv": [13.5, 3.5, 14, 4], "texture": "#0"}, + "west": {"uv": [4, 13.5, 4.5, 14], "texture": "#0"}, + "up": {"uv": [14, 4.5, 13.5, 4], "texture": "#0"}, + "down": {"uv": [5, 13.5, 4.5, 14], "texture": "#0"} + } + }, + { + "from": [7.09411, 4.76884, 7.88188], + "to": [7.25161, 5.24134, 8.11812], + "rotation": {"angle": 0, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [10.5, 13, 11, 13.5], "texture": "#0"}, + "east": {"uv": [13, 10.5, 13.5, 11], "texture": "#0"}, + "south": {"uv": [11, 13, 11.5, 13.5], "texture": "#0"}, + "west": {"uv": [13, 11, 13.5, 11.5], "texture": "#0"}, + "up": {"uv": [12, 13.5, 11.5, 13], "texture": "#0"}, + "down": {"uv": [13.5, 11.5, 13, 12], "texture": "#0"} + } + }, + { + "from": [7.42651, 5.31253, 7.96062], + "to": [7.58401, 5.54878, 8.03938], + "rotation": {"angle": 0, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [11.5, 12, 12, 12.5], "texture": "#0"}, + "east": {"uv": [12, 11.5, 12.5, 12], "texture": "#0"}, + "south": {"uv": [12, 12, 12.5, 12.5], "texture": "#0"}, + "west": {"uv": [0, 12.5, 0.5, 13], "texture": "#0"}, + "up": {"uv": [13, 0.5, 12.5, 0], "texture": "#0"}, + "down": {"uv": [1, 12.5, 0.5, 13], "texture": "#0"} + } + }, + { + "from": [8.53524, 5.43066, 7.96062], + "to": [8.61399, 5.58816, 8.03938], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [12.5, 0.5, 13, 1], "texture": "#0"}, + "east": {"uv": [1, 12.5, 1.5, 13], "texture": "#0"}, + "south": {"uv": [12.5, 1, 13, 1.5], "texture": "#0"}, + "west": {"uv": [1.5, 12.5, 2, 13], "texture": "#0"}, + "up": {"uv": [13, 2, 12.5, 1.5], "texture": "#0"}, + "down": {"uv": [2.5, 12.5, 2, 13], "texture": "#0"} + } + }, + { + "from": [9.33272, 5.92796, 7.96062], + "to": [9.49022, 6.16421, 8.03938], + "rotation": {"angle": -45, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [12.5, 2, 13, 2.5], "texture": "#0"}, + "east": {"uv": [2.5, 12.5, 3, 13], "texture": "#0"}, + "south": {"uv": [12.5, 2.5, 13, 3], "texture": "#0"}, + "west": {"uv": [3, 12.5, 3.5, 13], "texture": "#0"}, + "up": {"uv": [13, 3.5, 12.5, 3], "texture": "#0"}, + "down": {"uv": [4, 12.5, 3.5, 13], "texture": "#0"} + } + }, + { + "from": [8.63813, 5.69105, 7.96062], + "to": [8.79563, 5.7698, 8.03938], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [12.5, 5, 13, 5.5], "texture": "#0"}, + "east": {"uv": [5.5, 12.5, 6, 13], "texture": "#0"}, + "south": {"uv": [12.5, 5.5, 13, 6], "texture": "#0"}, + "west": {"uv": [6, 12.5, 6.5, 13], "texture": "#0"}, + "up": {"uv": [13, 6.5, 12.5, 6], "texture": "#0"}, + "down": {"uv": [7, 12.5, 6.5, 13], "texture": "#0"} + } + }, + { + "from": [6.92992, 5.72598, 7.96062], + "to": [7.08742, 5.88348, 8.03938], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [12.5, 9.5, 13, 10], "texture": "#0"}, + "east": {"uv": [10, 12.5, 10.5, 13], "texture": "#0"}, + "south": {"uv": [12.5, 10, 13, 10.5], "texture": "#0"}, + "west": {"uv": [10.5, 12.5, 11, 13], "texture": "#0"}, + "up": {"uv": [13, 11, 12.5, 10.5], "texture": "#0"}, + "down": {"uv": [11.5, 12.5, 11, 13], "texture": "#0"} + } + }, + { + "from": [7.69996, 5.59247, 7.96062], + "to": [7.77871, 5.67122, 8.03938], + "rotation": {"angle": 0, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [12.5, 3.5, 13, 4], "texture": "#0"}, + "east": {"uv": [4, 12.5, 4.5, 13], "texture": "#0"}, + "south": {"uv": [12.5, 4, 13, 4.5], "texture": "#0"}, + "west": {"uv": [4.5, 12.5, 5, 13], "texture": "#0"}, + "up": {"uv": [13, 5, 12.5, 4.5], "texture": "#0"}, + "down": {"uv": [5.5, 12.5, 5, 13], "texture": "#0"} + } + }, + { + "from": [7.52447, 6.47715, 7.96062], + "to": [7.76072, 6.63465, 8.03938], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [0, 10, 0.5, 10.5], "texture": "#0"}, + "east": {"uv": [10, 0, 10.5, 0.5], "texture": "#0"}, + "south": {"uv": [0.5, 10, 1, 10.5], "texture": "#0"}, + "west": {"uv": [10, 0.5, 10.5, 1], "texture": "#0"}, + "up": {"uv": [1.5, 10.5, 1, 10], "texture": "#0"}, + "down": {"uv": [10.5, 1, 10, 1.5], "texture": "#0"} + } + }, + { + "from": [7.11742, 6.60589, 7.96062], + "to": [7.19617, 6.76339, 8.03938], + "rotation": {"angle": 45, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [9.5, 8, 10, 8.5], "texture": "#0"}, + "east": {"uv": [8.5, 9.5, 9, 10], "texture": "#0"}, + "south": {"uv": [9.5, 8.5, 10, 9], "texture": "#0"}, + "west": {"uv": [9, 9.5, 9.5, 10], "texture": "#0"}, + "up": {"uv": [10, 9.5, 9.5, 9], "texture": "#0"}, + "down": {"uv": [10, 9.5, 9.5, 10], "texture": "#0"} + } + }, + { + "from": [7.71211, 6.32565, 7.96062], + "to": [7.79086, 6.4044, 8.03938], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [9.5, 6.5, 10, 7], "texture": "#0"}, + "east": {"uv": [7, 9.5, 7.5, 10], "texture": "#0"}, + "south": {"uv": [9.5, 7, 10, 7.5], "texture": "#0"}, + "west": {"uv": [7.5, 9.5, 8, 10], "texture": "#0"}, + "up": {"uv": [10, 8, 9.5, 7.5], "texture": "#0"}, + "down": {"uv": [8.5, 9.5, 8, 10], "texture": "#0"} + } + }, + { + "from": [7.93169, 7.46982, 7.96062], + "to": [8.01044, 7.54857, 8.03938], + "rotation": {"angle": -45, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [11.5, 9.5, 12, 10], "texture": "#0"}, + "east": {"uv": [10, 11.5, 10.5, 12], "texture": "#0"}, + "south": {"uv": [11.5, 10, 12, 10.5], "texture": "#0"}, + "west": {"uv": [10.5, 11.5, 11, 12], "texture": "#0"}, + "up": {"uv": [12, 11, 11.5, 10.5], "texture": "#0"}, + "down": {"uv": [11.5, 11.5, 11, 12], "texture": "#0"} + } + }, + { + "from": [7.76414, 7.53033, 7.96062], + "to": [8.00039, 7.76658, 8.03938], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [11.5, 8, 12, 8.5], "texture": "#0"}, + "east": {"uv": [8.5, 11.5, 9, 12], "texture": "#0"}, + "south": {"uv": [11.5, 8.5, 12, 9], "texture": "#0"}, + "west": {"uv": [9, 11.5, 9.5, 12], "texture": "#0"}, + "up": {"uv": [12, 9.5, 11.5, 9], "texture": "#0"}, + "down": {"uv": [10, 11.5, 9.5, 12], "texture": "#0"} + } + }, + { + "from": [7.66263, 7.80185, 7.96062], + "to": [7.82013, 8.27435, 8.03938], + "rotation": {"angle": 0, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [11.5, 6.5, 12, 7], "texture": "#0"}, + "east": {"uv": [7, 11.5, 7.5, 12], "texture": "#0"}, + "south": {"uv": [11.5, 7, 12, 7.5], "texture": "#0"}, + "west": {"uv": [7.5, 11.5, 8, 12], "texture": "#0"}, + "up": {"uv": [12, 8, 11.5, 7.5], "texture": "#0"}, + "down": {"uv": [8.5, 11.5, 8, 12], "texture": "#0"} + } + }, + { + "from": [7.7933, 8.30382, 7.96062], + "to": [8.02955, 8.54007, 8.03938], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [11.5, 5, 12, 5.5], "texture": "#0"}, + "east": {"uv": [5.5, 11.5, 6, 12], "texture": "#0"}, + "south": {"uv": [11.5, 5.5, 12, 6], "texture": "#0"}, + "west": {"uv": [6, 11.5, 6.5, 12], "texture": "#0"}, + "up": {"uv": [12, 6.5, 11.5, 6], "texture": "#0"}, + "down": {"uv": [7, 11.5, 6.5, 12], "texture": "#0"} + } + }, + { + "from": [7.98558, 8.50531, 7.96062], + "to": [8.22183, 8.58406, 8.03938], + "rotation": {"angle": 45, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [11.5, 3.5, 12, 4], "texture": "#0"}, + "east": {"uv": [4, 11.5, 4.5, 12], "texture": "#0"}, + "south": {"uv": [11.5, 4, 12, 4.5], "texture": "#0"}, + "west": {"uv": [4.5, 11.5, 5, 12], "texture": "#0"}, + "up": {"uv": [12, 5, 11.5, 4.5], "texture": "#0"}, + "down": {"uv": [5.5, 11.5, 5, 12], "texture": "#0"} + } + }, + { + "from": [7.45488, 8.21018, 7.96062], + "to": [7.53363, 8.28893, 8.03938], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [11.5, 2, 12, 2.5], "texture": "#0"}, + "east": {"uv": [2.5, 11.5, 3, 12], "texture": "#0"}, + "south": {"uv": [11.5, 2.5, 12, 3], "texture": "#0"}, + "west": {"uv": [3, 11.5, 3.5, 12], "texture": "#0"}, + "up": {"uv": [12, 3.5, 11.5, 3], "texture": "#0"}, + "down": {"uv": [4, 11.5, 3.5, 12], "texture": "#0"} + } + }, + { + "from": [7.734, 7.45757, 7.96062], + "to": [7.81275, 7.53632, 8.03938], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [11.5, 0.5, 12, 1], "texture": "#0"}, + "east": {"uv": [1, 11.5, 1.5, 12], "texture": "#0"}, + "south": {"uv": [11.5, 1, 12, 1.5], "texture": "#0"}, + "west": {"uv": [1.5, 11.5, 2, 12], "texture": "#0"}, + "up": {"uv": [12, 2, 11.5, 1.5], "texture": "#0"}, + "down": {"uv": [2.5, 11.5, 2, 12], "texture": "#0"} + } + }, + { + "from": [7.39707, 7.95942, 7.96062], + "to": [7.47582, 8.03817, 8.03938], + "rotation": {"angle": 45, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [10.5, 11, 11, 11.5], "texture": "#0"}, + "east": {"uv": [11, 10.5, 11.5, 11], "texture": "#0"}, + "south": {"uv": [11, 11, 11.5, 11.5], "texture": "#0"}, + "west": {"uv": [0, 11.5, 0.5, 12], "texture": "#0"}, + "up": {"uv": [12, 0.5, 11.5, 0], "texture": "#0"}, + "down": {"uv": [1, 11.5, 0.5, 12], "texture": "#0"} + } + }, + { + "from": [7.4585, 7.57428, 7.96062], + "to": [7.69475, 7.81053, 8.03938], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [9, 11, 9.5, 11.5], "texture": "#0"}, + "east": {"uv": [11, 9, 11.5, 9.5], "texture": "#0"}, + "south": {"uv": [9.5, 11, 10, 11.5], "texture": "#0"}, + "west": {"uv": [11, 9.5, 11.5, 10], "texture": "#0"}, + "up": {"uv": [10.5, 11.5, 10, 11], "texture": "#0"}, + "down": {"uv": [11.5, 10, 11, 10.5], "texture": "#0"} + } + }, + { + "from": [7.63249, 7.15722, 7.96062], + "to": [7.86874, 7.47222, 8.03938], + "rotation": {"angle": 0, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [7.5, 11, 8, 11.5], "texture": "#0"}, + "east": {"uv": [11, 7.5, 11.5, 8], "texture": "#0"}, + "south": {"uv": [8, 11, 8.5, 11.5], "texture": "#0"}, + "west": {"uv": [11, 8, 11.5, 8.5], "texture": "#0"}, + "up": {"uv": [9, 11.5, 8.5, 11], "texture": "#0"}, + "down": {"uv": [11.5, 8.5, 11, 9], "texture": "#0"} + } + }, + { + "from": [7.98299, 6.84448, 7.96062], + "to": [8.29799, 7.15948, 8.03938], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [6, 11, 6.5, 11.5], "texture": "#0"}, + "east": {"uv": [11, 6, 11.5, 6.5], "texture": "#0"}, + "south": {"uv": [6.5, 11, 7, 11.5], "texture": "#0"}, + "west": {"uv": [11, 6.5, 11.5, 7], "texture": "#0"}, + "up": {"uv": [7.5, 11.5, 7, 11], "texture": "#0"}, + "down": {"uv": [11.5, 7, 11, 7.5], "texture": "#0"} + } + }, + { + "from": [8.1717, 6.31014, 7.96062], + "to": [8.25045, 6.38889, 8.03938], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [4.5, 11, 5, 11.5], "texture": "#0"}, + "east": {"uv": [11, 4.5, 11.5, 5], "texture": "#0"}, + "south": {"uv": [5, 11, 5.5, 11.5], "texture": "#0"}, + "west": {"uv": [11, 5, 11.5, 5.5], "texture": "#0"}, + "up": {"uv": [6, 11.5, 5.5, 11], "texture": "#0"}, + "down": {"uv": [11.5, 5.5, 11, 6], "texture": "#0"} + } + }, + { + "from": [8.77518, 6.57723, 7.96062], + "to": [8.85393, 6.65598, 8.03938], + "rotation": {"angle": -45, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [3, 11, 3.5, 11.5], "texture": "#0"}, + "east": {"uv": [11, 3, 11.5, 3.5], "texture": "#0"}, + "south": {"uv": [3.5, 11, 4, 11.5], "texture": "#0"}, + "west": {"uv": [11, 3.5, 11.5, 4], "texture": "#0"}, + "up": {"uv": [4.5, 11.5, 4, 11], "texture": "#0"}, + "down": {"uv": [11.5, 4, 11, 4.5], "texture": "#0"} + } + }, + { + "from": [8.20184, 6.38289, 7.96062], + "to": [8.51684, 6.61914, 8.03938], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [1.5, 11, 2, 11.5], "texture": "#0"}, + "east": {"uv": [11, 1.5, 11.5, 2], "texture": "#0"}, + "south": {"uv": [2, 11, 2.5, 11.5], "texture": "#0"}, + "west": {"uv": [11, 2, 11.5, 2.5], "texture": "#0"}, + "up": {"uv": [3, 11.5, 2.5, 11], "texture": "#0"}, + "down": {"uv": [11.5, 2.5, 11, 3], "texture": "#0"} + } + }, + { + "from": [7.62791, 6.57426, 7.96062], + "to": [7.86416, 6.81051, 8.03938], + "rotation": {"angle": 0, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [0, 11, 0.5, 11.5], "texture": "#0"}, + "east": {"uv": [11, 0, 11.5, 0.5], "texture": "#0"}, + "south": {"uv": [0.5, 11, 1, 11.5], "texture": "#0"}, + "west": {"uv": [11, 0.5, 11.5, 1], "texture": "#0"}, + "up": {"uv": [1.5, 11.5, 1, 11], "texture": "#0"}, + "down": {"uv": [11.5, 1, 11, 1.5], "texture": "#0"} + } + }, + { + "from": [7.20103, 6.9647, 7.96062], + "to": [7.43728, 7.20095, 8.03938], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [10.5, 9, 11, 9.5], "texture": "#0"}, + "east": {"uv": [9.5, 10.5, 10, 11], "texture": "#0"}, + "south": {"uv": [10.5, 9.5, 11, 10], "texture": "#0"}, + "west": {"uv": [10, 10.5, 10.5, 11], "texture": "#0"}, + "up": {"uv": [11, 10.5, 10.5, 10], "texture": "#0"}, + "down": {"uv": [11, 10.5, 10.5, 11], "texture": "#0"} + } + }, + { + "from": [6.92593, 7.49477, 7.96062], + "to": [7.00468, 7.57352, 8.03938], + "rotation": {"angle": 45, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [10.5, 7.5, 11, 8], "texture": "#0"}, + "east": {"uv": [8, 10.5, 8.5, 11], "texture": "#0"}, + "south": {"uv": [10.5, 8, 11, 8.5], "texture": "#0"}, + "west": {"uv": [8.5, 10.5, 9, 11], "texture": "#0"}, + "up": {"uv": [11, 9, 10.5, 8.5], "texture": "#0"}, + "down": {"uv": [9.5, 10.5, 9, 11], "texture": "#0"} + } + }, + { + "from": [6.50448, 7.11594, 7.96062], + "to": [6.66198, 7.19469, 8.03938], + "rotation": {"angle": 45, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [10.5, 6, 11, 6.5], "texture": "#0"}, + "east": {"uv": [6.5, 10.5, 7, 11], "texture": "#0"}, + "south": {"uv": [10.5, 6.5, 11, 7], "texture": "#0"}, + "west": {"uv": [7, 10.5, 7.5, 11], "texture": "#0"}, + "up": {"uv": [11, 7.5, 10.5, 7], "texture": "#0"}, + "down": {"uv": [8, 10.5, 7.5, 11], "texture": "#0"} + } + }, + { + "from": [6.95664, 6.53217, 7.96062], + "to": [7.27164, 6.68967, 8.03938], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [10.5, 4.5, 11, 5], "texture": "#0"}, + "east": {"uv": [5, 10.5, 5.5, 11], "texture": "#0"}, + "south": {"uv": [10.5, 5, 11, 5.5], "texture": "#0"}, + "west": {"uv": [5.5, 10.5, 6, 11], "texture": "#0"}, + "up": {"uv": [11, 6, 10.5, 5.5], "texture": "#0"}, + "down": {"uv": [6.5, 10.5, 6, 11], "texture": "#0"} + } + }, + { + "from": [7.59777, 6.00837, 7.96062], + "to": [7.83402, 6.32337, 8.03938], + "rotation": {"angle": 0, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [10.5, 3, 11, 3.5], "texture": "#0"}, + "east": {"uv": [3.5, 10.5, 4, 11], "texture": "#0"}, + "south": {"uv": [10.5, 3.5, 11, 4], "texture": "#0"}, + "west": {"uv": [4, 10.5, 4.5, 11], "texture": "#0"}, + "up": {"uv": [11, 4.5, 10.5, 4], "texture": "#0"}, + "down": {"uv": [5, 10.5, 4.5, 11], "texture": "#0"} + } + }, + { + "from": [8.39055, 5.53355, 7.96062], + "to": [8.54805, 6.0848, 8.03938], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [10.5, 1.5, 11, 2], "texture": "#0"}, + "east": {"uv": [2, 10.5, 2.5, 11], "texture": "#0"}, + "south": {"uv": [10.5, 2, 11, 2.5], "texture": "#0"}, + "west": {"uv": [2.5, 10.5, 3, 11], "texture": "#0"}, + "up": {"uv": [11, 3, 10.5, 2.5], "texture": "#0"}, + "down": {"uv": [3.5, 10.5, 3, 11], "texture": "#0"} + } + }, + { + "from": [10.1821, 10.68885, 7.96062], + "to": [10.41835, 10.7676, 8.03938], + "rotation": {"angle": 45, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [8.5, 0.5, 9, 1], "texture": "#0"}, + "east": {"uv": [1, 8.5, 1.5, 9], "texture": "#0"}, + "south": {"uv": [8.5, 1, 9, 1.5], "texture": "#0"}, + "west": {"uv": [1.5, 8.5, 2, 9], "texture": "#0"}, + "up": {"uv": [9, 2, 8.5, 1.5], "texture": "#0"}, + "down": {"uv": [2.5, 8.5, 2, 9], "texture": "#0"} + } + }, + { + "from": [7.67181, 11.21403, 7.96062], + "to": [7.82931, 11.45028, 8.03938], + "rotation": {"angle": 0, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [7.5, 8, 8, 8.5], "texture": "#0"}, + "east": {"uv": [8, 7.5, 8.5, 8], "texture": "#0"}, + "south": {"uv": [8, 8, 8.5, 8.5], "texture": "#0"}, + "west": {"uv": [0, 8.5, 0.5, 9], "texture": "#0"}, + "up": {"uv": [9, 0.5, 8.5, 0], "texture": "#0"}, + "down": {"uv": [1, 8.5, 0.5, 9], "texture": "#0"} + } + }, + { + "from": [6.46683, 10.76503, 7.96062], + "to": [6.62433, 10.92253, 8.03938], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [6, 8, 6.5, 8.5], "texture": "#0"}, + "east": {"uv": [8, 6, 8.5, 6.5], "texture": "#0"}, + "south": {"uv": [6.5, 8, 7, 8.5], "texture": "#0"}, + "west": {"uv": [8, 6.5, 8.5, 7], "texture": "#0"}, + "up": {"uv": [7.5, 8.5, 7, 8], "texture": "#0"}, + "down": {"uv": [8.5, 7, 8, 7.5], "texture": "#0"} + } + }, + { + "from": [7.64167, 10.51127, 7.96062], + "to": [7.79917, 11.14127, 8.03938], + "rotation": {"angle": 0, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [4.5, 8, 5, 8.5], "texture": "#0"}, + "east": {"uv": [8, 4.5, 8.5, 5], "texture": "#0"}, + "south": {"uv": [5, 8, 5.5, 8.5], "texture": "#0"}, + "west": {"uv": [8, 5, 8.5, 5.5], "texture": "#0"}, + "up": {"uv": [6, 8.5, 5.5, 8], "texture": "#0"}, + "down": {"uv": [8.5, 5.5, 8, 6], "texture": "#0"} + } + }, + { + "from": [7.7229, 9.16987, 7.96062], + "to": [7.80165, 10.11487, 8.03938], + "rotation": {"angle": 0, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [3, 8, 3.5, 8.5], "texture": "#0"}, + "east": {"uv": [8, 3, 8.5, 3.5], "texture": "#0"}, + "south": {"uv": [3.5, 8, 4, 8.5], "texture": "#0"}, + "west": {"uv": [8, 3.5, 8.5, 4], "texture": "#0"}, + "up": {"uv": [4.5, 8.5, 4, 8], "texture": "#0"}, + "down": {"uv": [8.5, 4, 8, 4.5], "texture": "#0"} + } + }, + { + "from": [8.43278, 9.76891, 7.96062], + "to": [8.51153, 9.84766, 8.03938], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [1.5, 8, 2, 8.5], "texture": "#0"}, + "east": {"uv": [8, 1.5, 8.5, 2], "texture": "#0"}, + "south": {"uv": [2, 8, 2.5, 8.5], "texture": "#0"}, + "west": {"uv": [8, 2, 8.5, 2.5], "texture": "#0"}, + "up": {"uv": [3, 8.5, 2.5, 8], "texture": "#0"}, + "down": {"uv": [8.5, 2.5, 8, 3], "texture": "#0"} + } + }, + { + "from": [8.98702, 11.24048, 7.96062], + "to": [9.22327, 11.39798, 8.03938], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [0, 8, 0.5, 8.5], "texture": "#0"}, + "east": {"uv": [8, 0, 8.5, 0.5], "texture": "#0"}, + "south": {"uv": [0.5, 8, 1, 8.5], "texture": "#0"}, + "west": {"uv": [8, 0.5, 8.5, 1], "texture": "#0"}, + "up": {"uv": [1.5, 8.5, 1, 8], "texture": "#0"}, + "down": {"uv": [8.5, 1, 8, 1.5], "texture": "#0"} + } + }, + { + "from": [6.92677, 9.64265, 7.96062], + "to": [7.00552, 9.7214, 8.03938], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [7.5, 6, 8, 6.5], "texture": "#0"}, + "east": {"uv": [6.5, 7.5, 7, 8], "texture": "#0"}, + "south": {"uv": [7.5, 6.5, 8, 7], "texture": "#0"}, + "west": {"uv": [7, 7.5, 7.5, 8], "texture": "#0"}, + "up": {"uv": [8, 7.5, 7.5, 7], "texture": "#0"}, + "down": {"uv": [8, 7.5, 7.5, 8], "texture": "#0"} + } + }, + { + "from": [9.1069, 9.46265, 7.96062], + "to": [9.18565, 9.62015, 8.03938], + "rotation": {"angle": 45, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [7.5, 4.5, 8, 5], "texture": "#0"}, + "east": {"uv": [5, 7.5, 5.5, 8], "texture": "#0"}, + "south": {"uv": [7.5, 5, 8, 5.5], "texture": "#0"}, + "west": {"uv": [5.5, 7.5, 6, 8], "texture": "#0"}, + "up": {"uv": [8, 6, 7.5, 5.5], "texture": "#0"}, + "down": {"uv": [6.5, 7.5, 6, 8], "texture": "#0"} + } + }, + { + "from": [6.72855, 8.7582, 7.96062], + "to": [6.8073, 8.9157, 8.03938], + "rotation": {"angle": -45, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [7.5, 3, 8, 3.5], "texture": "#0"}, + "east": {"uv": [3.5, 7.5, 4, 8], "texture": "#0"}, + "south": {"uv": [7.5, 3.5, 8, 4], "texture": "#0"}, + "west": {"uv": [4, 7.5, 4.5, 8], "texture": "#0"}, + "up": {"uv": [8, 4.5, 7.5, 4], "texture": "#0"}, + "down": {"uv": [5, 7.5, 4.5, 8], "texture": "#0"} + } + }, + { + "from": [7.14562, 9.25981, 7.96062], + "to": [7.22437, 9.33856, 8.03938], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [7.5, 1.5, 8, 2], "texture": "#0"}, + "east": {"uv": [2, 7.5, 2.5, 8], "texture": "#0"}, + "south": {"uv": [7.5, 2, 8, 2.5], "texture": "#0"}, + "west": {"uv": [2.5, 7.5, 3, 8], "texture": "#0"}, + "up": {"uv": [8, 3, 7.5, 2.5], "texture": "#0"}, + "down": {"uv": [3.5, 7.5, 3, 8], "texture": "#0"} + } + }, + { + "from": [6.92677, 9.7214, 7.96062], + "to": [7.00552, 9.8789, 8.03938], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [7.5, 0, 8, 0.5], "texture": "#0"}, + "east": {"uv": [0.5, 7.5, 1, 8], "texture": "#0"}, + "south": {"uv": [7.5, 0.5, 8, 1], "texture": "#0"}, + "west": {"uv": [1, 7.5, 1.5, 8], "texture": "#0"}, + "up": {"uv": [8, 1.5, 7.5, 1], "texture": "#0"}, + "down": {"uv": [2, 7.5, 1.5, 8], "texture": "#0"} + } + }, + { + "from": [7.69735, 10.07382, 7.96062], + "to": [7.85485, 10.38882, 8.03938], + "rotation": {"angle": 0, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [6, 7, 6.5, 7.5], "texture": "#0"}, + "east": {"uv": [7, 6, 7.5, 6.5], "texture": "#0"}, + "south": {"uv": [6.5, 7, 7, 7.5], "texture": "#0"}, + "west": {"uv": [7, 6.5, 7.5, 7], "texture": "#0"}, + "up": {"uv": [7.5, 7.5, 7, 7], "texture": "#0"}, + "down": {"uv": [0.5, 7.5, 0, 8], "texture": "#0"} + } + }, + { + "from": [8.60442, 10.25005, 7.96062], + "to": [8.84067, 10.40755, 8.03938], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [4.5, 7, 5, 7.5], "texture": "#0"}, + "east": {"uv": [7, 4.5, 7.5, 5], "texture": "#0"}, + "south": {"uv": [5, 7, 5.5, 7.5], "texture": "#0"}, + "west": {"uv": [7, 5, 7.5, 5.5], "texture": "#0"}, + "up": {"uv": [6, 7.5, 5.5, 7], "texture": "#0"}, + "down": {"uv": [7.5, 5.5, 7, 6], "texture": "#0"} + } + }, + { + "from": [6.70792, 10.10423, 7.96062], + "to": [6.78667, 10.26173, 8.03938], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [3, 7, 3.5, 7.5], "texture": "#0"}, + "east": {"uv": [7, 3, 7.5, 3.5], "texture": "#0"}, + "south": {"uv": [3.5, 7, 4, 7.5], "texture": "#0"}, + "west": {"uv": [7, 3.5, 7.5, 4], "texture": "#0"}, + "up": {"uv": [4.5, 7.5, 4, 7], "texture": "#0"}, + "down": {"uv": [7.5, 4, 7, 4.5], "texture": "#0"} + } + }, + { + "from": [9.44961, 9.92023, 7.96062], + "to": [9.68586, 9.99898, 8.03938], + "rotation": {"angle": 45, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [1.5, 7, 2, 7.5], "texture": "#0"}, + "east": {"uv": [7, 1.5, 7.5, 2], "texture": "#0"}, + "south": {"uv": [2, 7, 2.5, 7.5], "texture": "#0"}, + "west": {"uv": [7, 2, 7.5, 2.5], "texture": "#0"}, + "up": {"uv": [3, 7.5, 2.5, 7], "texture": "#0"}, + "down": {"uv": [7.5, 2.5, 7, 3], "texture": "#0"} + } + }, + { + "from": [7.38581, 8.05833, 7.96062], + "to": [7.46456, 8.21583, 8.03938], + "rotation": {"angle": -45, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [0, 7, 0.5, 7.5], "texture": "#0"}, + "east": {"uv": [7, 0, 7.5, 0.5], "texture": "#0"}, + "south": {"uv": [0.5, 7, 1, 7.5], "texture": "#0"}, + "west": {"uv": [7, 0.5, 7.5, 1], "texture": "#0"}, + "up": {"uv": [1.5, 7.5, 1, 7], "texture": "#0"}, + "down": {"uv": [7.5, 1, 7, 1.5], "texture": "#0"} + } + }, + { + "from": [7.48502, 8.36169, 7.96062], + "to": [7.64252, 8.51919, 8.03938], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [6.5, 5, 7, 5.5], "texture": "#0"}, + "east": {"uv": [5.5, 6.5, 6, 7], "texture": "#0"}, + "south": {"uv": [6.5, 5.5, 7, 6], "texture": "#0"}, + "west": {"uv": [6, 6.5, 6.5, 7], "texture": "#0"}, + "up": {"uv": [7, 6.5, 6.5, 6], "texture": "#0"}, + "down": {"uv": [7, 6.5, 6.5, 7], "texture": "#0"} + } + }, + { + "from": [8.18838, 9.17888, 7.96062], + "to": [8.34588, 9.41513, 8.03938], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [6.5, 3.5, 7, 4], "texture": "#0"}, + "east": {"uv": [4, 6.5, 4.5, 7], "texture": "#0"}, + "south": {"uv": [6.5, 4, 7, 4.5], "texture": "#0"}, + "west": {"uv": [4.5, 6.5, 5, 7], "texture": "#0"}, + "up": {"uv": [7, 5, 6.5, 4.5], "texture": "#0"}, + "down": {"uv": [5.5, 6.5, 5, 7], "texture": "#0"} + } + }, + { + "from": [8.68545, 9.16256, 7.96062], + "to": [8.84295, 9.24131, 8.03938], + "rotation": {"angle": 45, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [6.5, 2, 7, 2.5], "texture": "#0"}, + "east": {"uv": [2.5, 6.5, 3, 7], "texture": "#0"}, + "south": {"uv": [6.5, 2.5, 7, 3], "texture": "#0"}, + "west": {"uv": [3, 6.5, 3.5, 7], "texture": "#0"}, + "up": {"uv": [7, 3.5, 6.5, 3], "texture": "#0"}, + "down": {"uv": [4, 6.5, 3.5, 7], "texture": "#0"} + } + }, + { + "from": [7.69277, 8.60399, 7.96062], + "to": [7.85027, 9.23399, 8.03938], + "rotation": {"angle": 0, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [6.5, 0.5, 7, 1], "texture": "#0"}, + "east": {"uv": [1, 6.5, 1.5, 7], "texture": "#0"}, + "south": {"uv": [6.5, 1, 7, 1.5], "texture": "#0"}, + "west": {"uv": [1.5, 6.5, 2, 7], "texture": "#0"}, + "up": {"uv": [7, 2, 6.5, 1.5], "texture": "#0"}, + "down": {"uv": [2.5, 6.5, 2, 7], "texture": "#0"} + } + }, + { + "from": [7.11549, 9.1083, 7.96062], + "to": [7.19424, 9.18705, 8.03938], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [5.5, 6, 6, 6.5], "texture": "#0"}, + "east": {"uv": [6, 5.5, 6.5, 6], "texture": "#0"}, + "south": {"uv": [6, 6, 6.5, 6.5], "texture": "#0"}, + "west": {"uv": [0, 6.5, 0.5, 7], "texture": "#0"}, + "up": {"uv": [7, 0.5, 6.5, 0], "texture": "#0"}, + "down": {"uv": [1, 6.5, 0.5, 7], "texture": "#0"} + } + }, + { + "from": [7.7942, 5.61149, 7.96062], + "to": [8.18795, 12.06899, 8.03938], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [0, 0, 0.5, 2.5], "texture": "#0"}, + "east": {"uv": [0.5, 0, 1, 2.5], "texture": "#0"}, + "south": {"uv": [1, 0, 1.5, 2.5], "texture": "#0"}, + "west": {"uv": [1.5, 0, 2, 2.5], "texture": "#0"}, + "up": {"uv": [3, 0.5, 2.5, 0], "texture": "#0"}, + "down": {"uv": [1, 2.5, 0.5, 3], "texture": "#0"} + } + }, + { + "from": [7.6367, 5.61149, 7.96062], + "to": [8.34545, 6.08399, 8.03938], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [12.5, 11, 13, 11.5], "texture": "#0"}, + "east": {"uv": [11.5, 12.5, 12, 13], "texture": "#0"}, + "south": {"uv": [12.5, 11.5, 13, 12], "texture": "#0"}, + "west": {"uv": [12, 12.5, 12.5, 13], "texture": "#0"}, + "up": {"uv": [13, 12.5, 12.5, 12], "texture": "#0"}, + "down": {"uv": [13, 12.5, 12.5, 13], "texture": "#0"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [0, 90, 0], + "translation": [0, 13.75, 1], + "scale": [4, 4, 4] + }, + "thirdperson_lefthand": { + "rotation": [0, -90, 0], + "translation": [0, 13.75, 1], + "scale": [4, 4, 4] + }, + "firstperson_righthand": { + "rotation": [0, 90.5, 0], + "translation": [0, 11.75, 0], + "scale": [3, 3, 3] + }, + "firstperson_lefthand": { + "rotation": [0, 90, 0], + "translation": [0, 11.75, 0], + "scale": [3, 3, 3] + }, + "ground": { + "translation": [0, 3.75, 0], + "scale": [1.25, 1.25, 1.25] + }, + "gui": { + "rotation": [0, 0, -45], + "translation": [1, 1, 0], + "scale": [1.25, 1.25, 1.25] + }, + "fixed": { + "rotation": [0, 180, -45], + "scale": [1.5, 1.5, 1.5] + } + }, + "groups": [ + { + "name": "Everything", + "origin": [8, 8, 8], + "color": 0, + "children": [ + { + "name": "Blade", + "origin": [8, 8, 8], + "color": 0, + "children": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133 + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/surgebinding/resources/assets/surgebinding/models/item/dustbringer_honorblade.json b/src/surgebinding/resources/assets/surgebinding/models/item/dustbringer_honorblade.json new file mode 100644 index 000000000..b29d59e99 --- /dev/null +++ b/src/surgebinding/resources/assets/surgebinding/models/item/dustbringer_honorblade.json @@ -0,0 +1,6310 @@ +{ + "credit": "Made with Blockbench", + "texture_size": [ + 32, + 32 + ], + "textures": { + "0": "surgebinding:item/models/shardblade_model/dustbringer_honorblade", + "particle": "surgebinding:item/models/shardblade_model/dustbringer_honorblade" + }, + "elements": [ + { + "from": [ + 8, + 7.5, + 8 + ], + "to": [ + 8.25, + 14.5625, + 8.0625 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 7.96165, + 9.34306, + 8.03125 + ] + }, + "faces": { + "north": { + "uv": [ + 0, + 0, + 0.5, + 3.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 0.5, + 0, + 1, + 3.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 1, + 0, + 1.5, + 3.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 1.5, + 0, + 2, + 3.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 2, + 4, + 1.5, + 3.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 2.5, + 3.5, + 2, + 4 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 7.6875, + 7.5, + 8 + ], + "to": [ + 7.9375, + 14.5625, + 8.0625 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 7.96165, + 9.34306, + 8.03125 + ] + }, + "faces": { + "north": { + "uv": [ + 2, + 0, + 2.5, + 3.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 2.5, + 0, + 3, + 3.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 3, + 0, + 3.5, + 3.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 0, + 3.5, + 0.5, + 7 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 4, + 2.5, + 3.5, + 2 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 3, + 3.5, + 2.5, + 4 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 7.6875, + 7, + 8 + ], + "to": [ + 8.25, + 7.5, + 8.0625 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 7.96165, + 9.34306, + 8.03125 + ] + }, + "faces": { + "north": { + "uv": [ + 6, + 1.5, + 6.5, + 2 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 2, + 6, + 2.5, + 6.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 6, + 2, + 6.5, + 2.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 2.5, + 6, + 3, + 6.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 6.5, + 3, + 6, + 2.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 3.5, + 6, + 3, + 6.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 7.9375, + 7.4375, + 7.9375 + ], + "to": [ + 8, + 7.5, + 8.125 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 7.96165, + 9.34306, + 8.03125 + ] + }, + "faces": { + "north": { + "uv": [ + 6.5, + 3, + 7, + 3.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 3.5, + 6.5, + 4, + 7 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 6.5, + 3.5, + 7, + 4 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 4, + 6.5, + 4.5, + 7 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 7, + 4.5, + 6.5, + 4 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 5, + 6.5, + 4.5, + 7 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 7.22927, + 7.31312, + 7.9375 + ], + "to": [ + 7.29177, + 7.62562, + 8.125 + ], + "rotation": { + "angle": 22.5, + "axis": "z", + "origin": [ + 7.96165, + 9.34306, + 8.03125 + ] + }, + "faces": { + "north": { + "uv": [ + 6, + 3, + 6.5, + 3.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 3.5, + 6, + 4, + 6.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 6, + 3.5, + 6.5, + 4 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 4, + 6, + 4.5, + 6.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 6.5, + 4.5, + 6, + 4 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 5, + 6, + 4.5, + 6.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 6.32069, + 7.49791, + 7.9375 + ], + "to": [ + 6.57069, + 7.74791, + 8.125 + ], + "rotation": { + "angle": 45, + "axis": "z", + "origin": [ + 7.96165, + 9.34306, + 8.03125 + ] + }, + "faces": { + "north": { + "uv": [ + 6.5, + 0, + 7, + 0.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 0.5, + 6.5, + 1, + 7 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 6.5, + 0.5, + 7, + 1 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 1, + 6.5, + 1.5, + 7 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 7, + 1.5, + 6.5, + 1 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 2, + 6.5, + 1.5, + 7 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 7.90782, + 6.99229, + 7.9375 + ], + "to": [ + 8.28282, + 7.05479, + 8.125 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 7.96165, + 9.34306, + 8.03125 + ] + }, + "faces": { + "north": { + "uv": [ + 6.5, + 4.5, + 7, + 5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 5, + 6.5, + 5.5, + 7 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 6.5, + 5, + 7, + 5.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 5.5, + 6.5, + 6, + 7 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 7, + 6, + 6.5, + 5.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 6.5, + 6.5, + 6, + 7 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 9.03297, + 7.10664, + 7.9375 + ], + "to": [ + 9.15797, + 7.29414, + 8.125 + ], + "rotation": { + "angle": -22.5, + "axis": "z", + "origin": [ + 7.96165, + 9.34306, + 8.03125 + ] + }, + "faces": { + "north": { + "uv": [ + 1, + 7, + 1.5, + 7.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 7, + 1, + 7.5, + 1.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 1.5, + 7, + 2, + 7.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 7, + 1.5, + 7.5, + 2 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 2.5, + 7.5, + 2, + 7 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 7.5, + 2, + 7, + 2.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 6.98524, + 6.59921, + 7.9375 + ], + "to": [ + 7.17274, + 6.78671, + 8.125 + ], + "rotation": { + "angle": 22.5, + "axis": "z", + "origin": [ + 7.96165, + 9.34306, + 8.03125 + ] + }, + "faces": { + "north": { + "uv": [ + 4, + 7, + 4.5, + 7.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 7, + 4, + 7.5, + 4.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 4.5, + 7, + 5, + 7.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 7, + 4.5, + 7.5, + 5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 5.5, + 7.5, + 5, + 7 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 7.5, + 5, + 7, + 5.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 7.96582, + 6.65548, + 7.9375 + ], + "to": [ + 8.21582, + 6.84298, + 8.125 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 7.96165, + 9.34306, + 8.03125 + ] + }, + "faces": { + "north": { + "uv": [ + 2.5, + 7, + 3, + 7.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 7, + 2.5, + 7.5, + 3 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 3, + 7, + 3.5, + 7.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 7, + 3, + 7.5, + 3.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 4, + 7.5, + 3.5, + 7 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 7.5, + 3.5, + 7, + 4 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 7.77832, + 6.84298, + 7.9375 + ], + "to": [ + 8.21582, + 7.03048, + 8.125 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 7.96165, + 9.34306, + 8.03125 + ] + }, + "faces": { + "north": { + "uv": [ + 8.5, + 1.5, + 9, + 2 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 2, + 8.5, + 2.5, + 9 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 8.5, + 2, + 9, + 2.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 2.5, + 8.5, + 3, + 9 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 9, + 3, + 8.5, + 2.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 3.5, + 8.5, + 3, + 9 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 7.77832, + 6.46798, + 7.9375 + ], + "to": [ + 8.21582, + 6.65548, + 8.125 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 7.96165, + 9.34306, + 8.03125 + ] + }, + "faces": { + "north": { + "uv": [ + 8.5, + 3, + 9, + 3.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 3.5, + 8.5, + 4, + 9 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 8.5, + 3.5, + 9, + 4 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 4, + 8.5, + 4.5, + 9 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 9, + 4.5, + 8.5, + 4 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 5, + 8.5, + 4.5, + 9 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 7.72168, + 6.65548, + 7.9375 + ], + "to": [ + 7.97168, + 6.84298, + 8.125 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 7.96165, + 9.34306, + 8.03125 + ] + }, + "faces": { + "north": { + "uv": [ + 7.5, + 1, + 8, + 1.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 1.5, + 7.5, + 2, + 8 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 7.5, + 1.5, + 8, + 2 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 2, + 7.5, + 2.5, + 8 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 8, + 2.5, + 7.5, + 2 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 3, + 7.5, + 2.5, + 8 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 6.05776, + 7.04747, + 7.875 + ], + "to": [ + 6.12026, + 7.48497, + 8.1875 + ], + "rotation": { + "angle": 45, + "axis": "z", + "origin": [ + 7.96165, + 9.34306, + 8.03125 + ] + }, + "faces": { + "north": { + "uv": [ + 7.5, + 5.5, + 8, + 6 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 6, + 7.5, + 6.5, + 8 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 7.5, + 6, + 8, + 6.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 6.5, + 7.5, + 7, + 8 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 8, + 7, + 7.5, + 6.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 7.5, + 7.5, + 7, + 8 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8.71493, + 6.86468, + 7.875 + ], + "to": [ + 8.96493, + 6.92718, + 8.1875 + ], + "rotation": { + "angle": -22.5, + "axis": "z", + "origin": [ + 7.96165, + 9.34306, + 8.03125 + ] + }, + "faces": { + "north": { + "uv": [ + 2.5, + 8, + 3, + 8.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 8, + 2.5, + 8.5, + 3 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 3, + 8, + 3.5, + 8.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 8, + 3, + 8.5, + 3.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 4, + 8.5, + 3.5, + 8 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 8.5, + 3.5, + 8, + 4 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 9.81308, + 7.05752, + 7.875 + ], + "to": [ + 9.87558, + 7.49502, + 8.1875 + ], + "rotation": { + "angle": -45, + "axis": "z", + "origin": [ + 7.96165, + 9.34306, + 8.03125 + ] + }, + "faces": { + "north": { + "uv": [ + 7.5, + 7, + 8, + 7.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 7.5, + 7.5, + 8, + 8 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 0, + 8, + 0.5, + 8.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 8, + 0, + 8.5, + 0.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 1, + 8.5, + 0.5, + 8 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 8.5, + 0.5, + 8, + 1 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 9.8526, + 6.72204, + 7.875 + ], + "to": [ + 10.2901, + 7.03454, + 8.1875 + ], + "rotation": { + "angle": -45, + "axis": "z", + "origin": [ + 7.96165, + 9.34306, + 8.03125 + ] + }, + "faces": { + "north": { + "uv": [ + 8.5, + 4.5, + 9, + 5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 5, + 8.5, + 5.5, + 9 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 8.5, + 5, + 9, + 5.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 5.5, + 8.5, + 6, + 9 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 9, + 6, + 8.5, + 5.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 6.5, + 8.5, + 6, + 9 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 10.28022, + 7.02466, + 7.875 + ], + "to": [ + 10.59272, + 7.46216, + 8.1875 + ], + "rotation": { + "angle": -45, + "axis": "z", + "origin": [ + 7.96165, + 9.34306, + 8.03125 + ] + }, + "faces": { + "north": { + "uv": [ + 8.5, + 6, + 9, + 6.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 6.5, + 8.5, + 7, + 9 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 8.5, + 6.5, + 9, + 7 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 7, + 8.5, + 7.5, + 9 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 9, + 7.5, + 8.5, + 7 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 8, + 8.5, + 7.5, + 9 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 7.89612, + 5.87359, + 7.875 + ], + "to": [ + 8.27112, + 6.37359, + 8.1875 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 7.96165, + 9.34306, + 8.03125 + ] + }, + "faces": { + "north": { + "uv": [ + 9.5, + 4.5, + 10, + 5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 5, + 9.5, + 5.5, + 10 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 9.5, + 5, + 10, + 5.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 5.5, + 9.5, + 6, + 10 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 10, + 6, + 9.5, + 5.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 6.5, + 9.5, + 6, + 10 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 7.66638, + 5.87359, + 7.875 + ], + "to": [ + 7.91638, + 6.37359, + 8.1875 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 7.96165, + 9.34306, + 8.03125 + ] + }, + "faces": { + "north": { + "uv": [ + 9.5, + 6, + 10, + 6.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 6.5, + 9.5, + 7, + 10 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 9.5, + 6.5, + 10, + 7 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 7, + 9.5, + 7.5, + 10 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 10, + 7.5, + 9.5, + 7 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 8, + 9.5, + 7.5, + 10 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 7.8125, + 3.93609, + 7.875 + ], + "to": [ + 8.125, + 5.43609, + 8.1875 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 7.96165, + 9.34306, + 8.03125 + ] + }, + "faces": { + "north": { + "uv": [ + 3.5, + 0, + 4, + 1 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 0.5, + 3.5, + 1, + 4.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 1, + 3.5, + 1.5, + 4.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 3.5, + 1, + 4, + 2 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 4.5, + 10.5, + 4, + 10 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 10.5, + 4, + 10, + 4.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 5.9184, + 4.16015, + 7.875 + ], + "to": [ + 6.0434, + 4.28515, + 8.1875 + ], + "rotation": { + "angle": 22.5, + "axis": "z", + "origin": [ + 7.96165, + 9.34306, + 8.03125 + ] + }, + "faces": { + "north": { + "uv": [ + 10.5, + 1.5, + 11, + 2 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 2, + 10.5, + 2.5, + 11 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 10.5, + 2, + 11, + 2.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 2.5, + 10.5, + 3, + 11 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 11, + 3, + 10.5, + 2.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 3.5, + 10.5, + 3, + 11 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 9.89301, + 4.16559, + 7.875 + ], + "to": [ + 10.01801, + 4.29059, + 8.1875 + ], + "rotation": { + "angle": -22.5, + "axis": "z", + "origin": [ + 7.96165, + 9.34306, + 8.03125 + ] + }, + "faces": { + "north": { + "uv": [ + 10.5, + 3, + 11, + 3.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 3.5, + 10.5, + 4, + 11 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 10.5, + 3.5, + 11, + 4 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 4, + 10.5, + 4.5, + 11 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 11, + 4.5, + 10.5, + 4 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 5, + 10.5, + 4.5, + 11 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 7.76466, + 3.7581, + 7.875 + ], + "to": [ + 8.01466, + 3.8206, + 8.1875 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 7.96165, + 9.34306, + 8.03125 + ] + }, + "faces": { + "north": { + "uv": [ + 10.5, + 7.5, + 11, + 8 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 8, + 10.5, + 8.5, + 11 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 10.5, + 8, + 11, + 8.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 8.5, + 10.5, + 9, + 11 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 11, + 9, + 10.5, + 8.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 9.5, + 10.5, + 9, + 11 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 7.8125, + 3.64262, + 7.875 + ], + "to": [ + 8.125, + 3.70512, + 8.1875 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 7.96165, + 9.34306, + 8.03125 + ] + }, + "faces": { + "north": { + "uv": [ + 9, + 11, + 9.5, + 11.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 11, + 9, + 11.5, + 9.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 9.5, + 11, + 10, + 11.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 11, + 9.5, + 11.5, + 10 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 10.5, + 11.5, + 10, + 11 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 11.5, + 10, + 11, + 10.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 7.8125, + 3.7581, + 7.82716 + ], + "to": [ + 8.125, + 3.8206, + 8.07716 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 7.96165, + 9.34306, + 8.03125 + ] + }, + "faces": { + "north": { + "uv": [ + 0, + 11, + 0.5, + 11.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 11, + 0, + 11.5, + 0.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 0.5, + 11, + 1, + 11.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 11, + 0.5, + 11.5, + 1 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 1.5, + 11.5, + 1, + 11 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 11.5, + 1, + 11, + 1.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 7.8125, + 3.7581, + 7.98534 + ], + "to": [ + 8.125, + 3.8206, + 8.23534 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 7.96165, + 9.34306, + 8.03125 + ] + }, + "faces": { + "north": { + "uv": [ + 1.5, + 11, + 2, + 11.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 11, + 1.5, + 11.5, + 2 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 2, + 11, + 2.5, + 11.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 11, + 2, + 11.5, + 2.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 3, + 11.5, + 2.5, + 11 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 11.5, + 2.5, + 11, + 3 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 7.92284, + 3.7581, + 7.875 + ], + "to": [ + 8.17284, + 3.8206, + 8.1875 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 7.96165, + 9.34306, + 8.03125 + ] + }, + "faces": { + "north": { + "uv": [ + 10.5, + 9, + 11, + 9.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 9.5, + 10.5, + 10, + 11 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 10.5, + 9.5, + 11, + 10 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 10, + 10.5, + 10.5, + 11 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 11, + 10.5, + 10.5, + 10 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 11, + 10.5, + 10.5, + 11 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 7.8125, + 4.16287, + 9.95606 + ], + "to": [ + 8.125, + 4.28787, + 10.08106 + ], + "rotation": { + "angle": 22.5, + "axis": "x", + "origin": [ + 7.96165, + 9.34306, + 8.03125 + ] + }, + "faces": { + "north": { + "uv": [ + 10.5, + 4.5, + 11, + 5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 5, + 10.5, + 5.5, + 11 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 10.5, + 5, + 11, + 5.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 5.5, + 10.5, + 6, + 11 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 11, + 6, + 10.5, + 5.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 6.5, + 10.5, + 6, + 11 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 7.8125, + 4.16287, + 5.98144 + ], + "to": [ + 8.125, + 4.28787, + 6.10644 + ], + "rotation": { + "angle": -22.5, + "axis": "x", + "origin": [ + 7.96165, + 9.34306, + 8.03125 + ] + }, + "faces": { + "north": { + "uv": [ + 10.5, + 6, + 11, + 6.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 6.5, + 10.5, + 7, + 11 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 10.5, + 6.5, + 11, + 7 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 7, + 10.5, + 7.5, + 11 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 11, + 7.5, + 10.5, + 7 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 8, + 10.5, + 7.5, + 11 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 7.8125, + 4.13633, + 5.70543 + ], + "to": [ + 8.125, + 4.26133, + 5.83043 + ], + "rotation": { + "angle": -22.5, + "axis": "x", + "origin": [ + 7.96165, + 9.34306, + 8.03125 + ] + }, + "faces": { + "north": { + "uv": [ + 7.5, + 11, + 8, + 11.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 11, + 7.5, + 11.5, + 8 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 8, + 11, + 8.5, + 11.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 11, + 8, + 11.5, + 8.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 9, + 11.5, + 8.5, + 11 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 11.5, + 8.5, + 11, + 9 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 10.16903, + 4.13905, + 7.875 + ], + "to": [ + 10.29403, + 4.26405, + 8.1875 + ], + "rotation": { + "angle": -22.5, + "axis": "z", + "origin": [ + 7.96165, + 9.34306, + 8.03125 + ] + }, + "faces": { + "north": { + "uv": [ + 6, + 11, + 6.5, + 11.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 11, + 6, + 11.5, + 6.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 6.5, + 11, + 7, + 11.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 11, + 6.5, + 11.5, + 7 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 7.5, + 11.5, + 7, + 11 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 11.5, + 7, + 11, + 7.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 5.64239, + 4.13361, + 7.875 + ], + "to": [ + 5.76739, + 4.25861, + 8.1875 + ], + "rotation": { + "angle": 22.5, + "axis": "z", + "origin": [ + 7.96165, + 9.34306, + 8.03125 + ] + }, + "faces": { + "north": { + "uv": [ + 4.5, + 11, + 5, + 11.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 11, + 4.5, + 11.5, + 5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 5, + 11, + 5.5, + 11.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 11, + 5, + 11.5, + 5.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 6, + 11.5, + 5.5, + 11 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 11.5, + 5.5, + 11, + 6 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 7.8125, + 4.13633, + 10.23207 + ], + "to": [ + 8.125, + 4.26133, + 10.35707 + ], + "rotation": { + "angle": 22.5, + "axis": "x", + "origin": [ + 7.96165, + 9.34306, + 8.03125 + ] + }, + "faces": { + "north": { + "uv": [ + 3, + 11, + 3.5, + 11.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 11, + 3, + 11.5, + 3.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 3.5, + 11, + 4, + 11.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 11, + 3.5, + 11.5, + 4 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 4.5, + 11.5, + 4, + 11 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 11.5, + 4, + 11, + 4.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 7.8125, + 6.46993, + 10.68342 + ], + "to": [ + 8.125, + 6.59493, + 10.74592 + ], + "rotation": { + "angle": 45, + "axis": "x", + "origin": [ + 7.96165, + 9.34306, + 8.03125 + ] + }, + "faces": { + "north": { + "uv": [ + 9, + 10, + 9.5, + 10.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 10, + 9, + 10.5, + 9.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 9.5, + 10, + 10, + 10.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 10, + 9.5, + 10.5, + 10 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 10.5, + 10.5, + 10, + 10 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 0.5, + 10.5, + 0, + 11 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 7.8125, + 6.46993, + 5.31658 + ], + "to": [ + 8.125, + 6.59493, + 5.37908 + ], + "rotation": { + "angle": -45, + "axis": "x", + "origin": [ + 7.96165, + 9.34306, + 8.03125 + ] + }, + "faces": { + "north": { + "uv": [ + 10.5, + 0, + 11, + 0.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 0.5, + 10.5, + 1, + 11 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 10.5, + 0.5, + 11, + 1 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 1, + 10.5, + 1.5, + 11 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 11, + 1.5, + 10.5, + 1 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 2, + 10.5, + 1.5, + 11 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8.30459, + 6.02761, + 7.875 + ], + "to": [ + 8.49209, + 6.15261, + 8.1875 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 7.96165, + 9.34306, + 8.03125 + ] + }, + "faces": { + "north": { + "uv": [ + 0.5, + 9, + 1, + 9.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 9, + 0.5, + 9.5, + 1 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 1, + 9, + 1.5, + 9.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 9, + 1, + 9.5, + 1.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 2, + 9.5, + 1.5, + 9 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 9.5, + 1.5, + 9, + 2 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 7.44541, + 6.02761, + 7.875 + ], + "to": [ + 7.57041, + 6.15261, + 8.1875 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 7.96165, + 9.34306, + 8.03125 + ] + }, + "faces": { + "north": { + "uv": [ + 3.5, + 9, + 4, + 9.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 9, + 3.5, + 9.5, + 4 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 4, + 9, + 4.5, + 9.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 9, + 4, + 9.5, + 4.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 5, + 9.5, + 4.5, + 9 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 9.5, + 4.5, + 9, + 5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 9.47048, + 6.17048, + 7.875 + ], + "to": [ + 9.72048, + 6.48298, + 8.1875 + ], + "rotation": { + "angle": -22.5, + "axis": "z", + "origin": [ + 7.96165, + 9.34306, + 8.03125 + ] + }, + "faces": { + "north": { + "uv": [ + 8.5, + 7.5, + 9, + 8 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 8, + 8.5, + 8.5, + 9 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 8.5, + 8, + 9, + 8.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 8.5, + 8.5, + 9, + 9 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 0.5, + 9.5, + 0, + 9 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 9.5, + 0, + 9, + 0.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 6.21594, + 6.16504, + 7.875 + ], + "to": [ + 6.46594, + 6.47754, + 8.1875 + ], + "rotation": { + "angle": 22.5, + "axis": "z", + "origin": [ + 7.96165, + 9.34306, + 8.03125 + ] + }, + "faces": { + "north": { + "uv": [ + 2, + 9, + 2.5, + 9.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 9, + 2, + 9.5, + 2.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 2.5, + 9, + 3, + 9.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 9, + 2.5, + 9.5, + 3 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 3.5, + 9.5, + 3, + 9 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 9.5, + 3, + 9, + 3.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8.93025, + 5.65565, + 7.875 + ], + "to": [ + 8.99275, + 5.90565, + 8.1875 + ], + "rotation": { + "angle": -22.5, + "axis": "z", + "origin": [ + 7.96165, + 9.34306, + 8.03125 + ] + }, + "faces": { + "north": { + "uv": [ + 5, + 9, + 5.5, + 9.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 9, + 5, + 9.5, + 5.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 5.5, + 9, + 6, + 9.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 9, + 5.5, + 9.5, + 6 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 6.5, + 9.5, + 6, + 9 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 9.5, + 6, + 9, + 6.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 10.26287, + 6.33093, + 7.875 + ], + "to": [ + 10.32537, + 6.76843, + 8.1875 + ], + "rotation": { + "angle": -45, + "axis": "z", + "origin": [ + 7.96165, + 9.34306, + 8.03125 + ] + }, + "faces": { + "north": { + "uv": [ + 9.5, + 0, + 10, + 0.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 0.5, + 9.5, + 1, + 10 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 9.5, + 0.5, + 10, + 1 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 1, + 9.5, + 1.5, + 10 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 10, + 1.5, + 9.5, + 1 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 2, + 9.5, + 1.5, + 10 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 10.20037, + 6.51843, + 7.875 + ], + "to": [ + 10.26287, + 6.76843, + 8.1875 + ], + "rotation": { + "angle": -45, + "axis": "z", + "origin": [ + 7.96165, + 9.34306, + 8.03125 + ] + }, + "faces": { + "north": { + "uv": [ + 4.5, + 10, + 5, + 10.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 10, + 4.5, + 10.5, + 5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 5, + 10, + 5.5, + 10.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 10, + 5, + 10.5, + 5.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 6, + 10.5, + 5.5, + 10 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 10.5, + 5.5, + 10, + 6 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 10.20037, + 6.48284, + 7.875 + ], + "to": [ + 10.26287, + 6.73284, + 8.1875 + ], + "rotation": { + "angle": -45, + "axis": "z", + "origin": [ + 7.96165, + 9.34306, + 8.03125 + ] + }, + "faces": { + "north": { + "uv": [ + 6, + 10, + 6.5, + 10.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 10, + 6, + 10.5, + 6.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 6.5, + 10, + 7, + 10.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 10, + 6.5, + 10.5, + 7 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 7.5, + 10.5, + 7, + 10 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 10.5, + 7, + 10, + 7.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 10.32537, + 6.45593, + 7.9375 + ], + "to": [ + 10.76287, + 6.64343, + 8.125 + ], + "rotation": { + "angle": -45, + "axis": "z", + "origin": [ + 7.96165, + 9.34306, + 8.03125 + ] + }, + "faces": { + "north": { + "uv": [ + 9.5, + 9, + 10, + 9.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 9.5, + 9.5, + 10, + 10 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 0, + 10, + 0.5, + 10.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 10, + 0, + 10.5, + 0.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 1, + 10.5, + 0.5, + 10 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 10.5, + 0.5, + 10, + 1 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 10.32537, + 6.64343, + 7.9375 + ], + "to": [ + 10.45037, + 6.89343, + 8.125 + ], + "rotation": { + "angle": -45, + "axis": "z", + "origin": [ + 7.96165, + 9.34306, + 8.03125 + ] + }, + "faces": { + "north": { + "uv": [ + 2.5, + 10, + 3, + 10.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 10, + 2.5, + 10.5, + 3 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 3, + 10, + 3.5, + 10.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 10, + 3, + 10.5, + 3.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 4, + 10.5, + 3.5, + 10 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 10.5, + 3.5, + 10, + 4 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 6.94367, + 5.65022, + 7.875 + ], + "to": [ + 7.00617, + 5.90022, + 8.1875 + ], + "rotation": { + "angle": 22.5, + "axis": "z", + "origin": [ + 7.96165, + 9.34306, + 8.03125 + ] + }, + "faces": { + "north": { + "uv": [ + 6.5, + 9, + 7, + 9.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 9, + 6.5, + 9.5, + 7 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 7, + 9, + 7.5, + 9.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 9, + 7, + 9.5, + 7.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 8, + 9.5, + 7.5, + 9 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 9.5, + 7.5, + 9, + 8 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 5.60797, + 6.32088, + 7.875 + ], + "to": [ + 5.67047, + 6.75838, + 8.1875 + ], + "rotation": { + "angle": 45, + "axis": "z", + "origin": [ + 7.96165, + 9.34306, + 8.03125 + ] + }, + "faces": { + "north": { + "uv": [ + 8, + 9, + 8.5, + 9.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 9, + 8, + 9.5, + 8.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 8.5, + 9, + 9, + 9.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 9, + 8.5, + 9.5, + 9 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 9.5, + 9.5, + 9, + 9 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 0.5, + 9.5, + 0, + 10 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 5.67047, + 6.47279, + 7.875 + ], + "to": [ + 5.73297, + 6.72279, + 8.1875 + ], + "rotation": { + "angle": 45, + "axis": "z", + "origin": [ + 7.96165, + 9.34306, + 8.03125 + ] + }, + "faces": { + "north": { + "uv": [ + 7.5, + 10, + 8, + 10.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 10, + 7.5, + 10.5, + 8 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 8, + 10, + 8.5, + 10.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 10, + 8, + 10.5, + 8.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 9, + 10.5, + 8.5, + 10 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 10.5, + 8.5, + 10, + 9 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 5.17047, + 6.44588, + 7.9375 + ], + "to": [ + 5.60797, + 6.63338, + 8.125 + ], + "rotation": { + "angle": 45, + "axis": "z", + "origin": [ + 7.96165, + 9.34306, + 8.03125 + ] + }, + "faces": { + "north": { + "uv": [ + 9.5, + 7.5, + 10, + 8 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 8, + 9.5, + 8.5, + 10 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 9.5, + 8, + 10, + 8.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 8.5, + 9.5, + 9, + 10 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 10, + 9, + 9.5, + 8.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 9.5, + 9.5, + 9, + 10 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 5.48297, + 6.63338, + 7.9375 + ], + "to": [ + 5.60797, + 6.88338, + 8.125 + ], + "rotation": { + "angle": 45, + "axis": "z", + "origin": [ + 7.96165, + 9.34306, + 8.03125 + ] + }, + "faces": { + "north": { + "uv": [ + 1, + 10, + 1.5, + 10.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 10, + 1, + 10.5, + 1.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 1.5, + 10, + 2, + 10.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 10, + 1.5, + 10.5, + 2 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 2.5, + 10.5, + 2, + 10 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 10.5, + 2, + 10, + 2.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 7.91919, + 5.83281, + 7.875 + ], + "to": [ + 8.16919, + 5.89531, + 8.1875 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 7.96165, + 9.34306, + 8.03125 + ] + }, + "faces": { + "north": { + "uv": [ + 9.5, + 1.5, + 10, + 2 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 2, + 9.5, + 2.5, + 10 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 9.5, + 2, + 10, + 2.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 2.5, + 9.5, + 3, + 10 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 10, + 3, + 9.5, + 2.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 3.5, + 9.5, + 3, + 10 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 7.76831, + 5.83281, + 7.875 + ], + "to": [ + 7.95581, + 5.89531, + 8.1875 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 7.96165, + 9.34306, + 8.03125 + ] + }, + "faces": { + "north": { + "uv": [ + 9.5, + 3, + 10, + 3.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 3.5, + 9.5, + 4, + 10 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 9.5, + 3.5, + 10, + 4 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 4, + 9.5, + 4.5, + 10 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 10, + 4.5, + 9.5, + 4 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 5, + 9.5, + 4.5, + 10 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 6.97149, + 6.85924, + 7.875 + ], + "to": [ + 7.22149, + 6.92174, + 8.1875 + ], + "rotation": { + "angle": 22.5, + "axis": "z", + "origin": [ + 7.96165, + 9.34306, + 8.03125 + ] + }, + "faces": { + "north": { + "uv": [ + 1, + 8, + 1.5, + 8.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 8, + 1, + 8.5, + 1.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 1.5, + 8, + 2, + 8.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 8, + 1.5, + 8.5, + 2 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 2.5, + 8.5, + 2, + 8 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 8.5, + 2, + 8, + 2.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8.20443, + 6.76031, + 7.875 + ], + "to": [ + 8.26693, + 6.82281, + 8.1875 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 7.96165, + 9.34306, + 8.03125 + ] + }, + "faces": { + "north": { + "uv": [ + 4, + 8, + 4.5, + 8.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 8, + 4, + 8.5, + 4.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 4.5, + 8, + 5, + 8.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 8, + 4.5, + 8.5, + 5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 5.5, + 8.5, + 5, + 8 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 8.5, + 5, + 8, + 5.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8.23862, + 6.37359, + 7.875 + ], + "to": [ + 8.30112, + 6.43609, + 8.1875 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 7.96165, + 9.34306, + 8.03125 + ] + }, + "faces": { + "north": { + "uv": [ + 7, + 8, + 7.5, + 8.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 8, + 7, + 8.5, + 7.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 7.5, + 8, + 8, + 8.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 8, + 7.5, + 8.5, + 8 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 8.5, + 8.5, + 8, + 8 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 0.5, + 8.5, + 0, + 9 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 7.63638, + 6.37359, + 7.875 + ], + "to": [ + 7.69888, + 6.43609, + 8.1875 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 7.96165, + 9.34306, + 8.03125 + ] + }, + "faces": { + "north": { + "uv": [ + 8.5, + 0, + 9, + 0.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 0.5, + 8.5, + 1, + 9 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 8.5, + 0.5, + 9, + 1 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 1, + 8.5, + 1.5, + 9 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 9, + 1.5, + 8.5, + 1 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 2, + 8.5, + 1.5, + 9 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 7.67057, + 6.76031, + 7.875 + ], + "to": [ + 7.73307, + 6.82281, + 8.1875 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 7.96165, + 9.34306, + 8.03125 + ] + }, + "faces": { + "north": { + "uv": [ + 5.5, + 8, + 6, + 8.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 8, + 5.5, + 8.5, + 6 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 6, + 8, + 6.5, + 8.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 8, + 6, + 8.5, + 6.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 7, + 8.5, + 6.5, + 8 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 8.5, + 6.5, + 8, + 7 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 6.77845, + 7.1012, + 7.9375 + ], + "to": [ + 6.90345, + 7.2887, + 8.125 + ], + "rotation": { + "angle": 22.5, + "axis": "z", + "origin": [ + 7.96165, + 9.34306, + 8.03125 + ] + }, + "faces": { + "north": { + "uv": [ + 7, + 7, + 7.5, + 7.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 0, + 7.5, + 0.5, + 8 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 7.5, + 0, + 8, + 0.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 0.5, + 7.5, + 1, + 8 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 8, + 1, + 7.5, + 0.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 1.5, + 7.5, + 1, + 8 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8.76368, + 6.60464, + 7.9375 + ], + "to": [ + 8.95118, + 6.79214, + 8.125 + ], + "rotation": { + "angle": -22.5, + "axis": "z", + "origin": [ + 7.96165, + 9.34306, + 8.03125 + ] + }, + "faces": { + "north": { + "uv": [ + 5.5, + 7, + 6, + 7.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 7, + 5.5, + 7.5, + 6 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 6, + 7, + 6.5, + 7.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 7, + 6, + 7.5, + 6.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 7, + 7.5, + 6.5, + 7 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 7.5, + 6.5, + 7, + 7 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 7.65468, + 6.99229, + 7.9375 + ], + "to": [ + 7.96718, + 7.05479, + 8.125 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 7.96165, + 9.34306, + 8.03125 + ] + }, + "faces": { + "north": { + "uv": [ + 6.5, + 6, + 7, + 6.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 6.5, + 6.5, + 7, + 7 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 0, + 7, + 0.5, + 7.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 7, + 0, + 7.5, + 0.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 1, + 7.5, + 0.5, + 7 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 7.5, + 0.5, + 7, + 1 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 7.90782, + 6.38117, + 7.9375 + ], + "to": [ + 8.28282, + 6.50617, + 8.125 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 7.96165, + 9.34306, + 8.03125 + ] + }, + "faces": { + "north": { + "uv": [ + 7.5, + 4, + 8, + 4.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 4.5, + 7.5, + 5, + 8 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 7.5, + 4.5, + 8, + 5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 5, + 7.5, + 5.5, + 8 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 8, + 5.5, + 7.5, + 5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 6, + 7.5, + 5.5, + 8 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 7.65468, + 6.38117, + 7.9375 + ], + "to": [ + 7.96718, + 6.50617, + 8.125 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 7.96165, + 9.34306, + 8.03125 + ] + }, + "faces": { + "north": { + "uv": [ + 7.5, + 2.5, + 8, + 3 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 3, + 7.5, + 3.5, + 8 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 7.5, + 3, + 8, + 3.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 3.5, + 7.5, + 4, + 8 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 8, + 4, + 7.5, + 3.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 4.5, + 7.5, + 4, + 8 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 9.36265, + 7.50795, + 7.9375 + ], + "to": [ + 9.61265, + 7.75795, + 8.125 + ], + "rotation": { + "angle": -45, + "axis": "z", + "origin": [ + 7.96165, + 9.34306, + 8.03125 + ] + }, + "faces": { + "north": { + "uv": [ + 6.5, + 1.5, + 7, + 2 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 2, + 6.5, + 2.5, + 7 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 6.5, + 2, + 7, + 2.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 2.5, + 6.5, + 3, + 7 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 7, + 3, + 6.5, + 2.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 3.5, + 6.5, + 3, + 7 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8.64465, + 7.31855, + 7.9375 + ], + "to": [ + 8.70715, + 7.63105, + 8.125 + ], + "rotation": { + "angle": -22.5, + "axis": "z", + "origin": [ + 7.96165, + 9.34306, + 8.03125 + ] + }, + "faces": { + "north": { + "uv": [ + 6, + 4.5, + 6.5, + 5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 5, + 6, + 5.5, + 6.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 6, + 5, + 6.5, + 5.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 5.5, + 6, + 6, + 6.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 6.5, + 6, + 6, + 5.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 6.5, + 6, + 6, + 6.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 14.5625, + 8 + ], + "to": [ + 8.125, + 14.75, + 8.0625 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 7.96165, + 9.34306, + 8.03125 + ] + }, + "faces": { + "north": { + "uv": [ + 3.5, + 2.5, + 4, + 3 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 3, + 3.5, + 3.5, + 4 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 3.5, + 3, + 4, + 3.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 3.5, + 3.5, + 4, + 4 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 4.5, + 0.5, + 4, + 0 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 4.5, + 0.5, + 4, + 1 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 14.75, + 8 + ], + "to": [ + 8.0625, + 14.9375, + 8.0625 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 7.96165, + 9.34306, + 8.03125 + ] + }, + "faces": { + "north": { + "uv": [ + 4, + 2.5, + 4.5, + 3 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 3, + 4, + 3.5, + 4.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 4, + 3, + 4.5, + 3.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 3.5, + 4, + 4, + 4.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 4.5, + 4, + 4, + 3.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 4.5, + 4, + 4, + 4.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 14.9375, + 8 + ], + "to": [ + 8.0625, + 15, + 8.0625 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 7.96165, + 9.34306, + 8.03125 + ] + }, + "faces": { + "north": { + "uv": [ + 5.5, + 1, + 6, + 1.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 1.5, + 5.5, + 2, + 6 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 5.5, + 1.5, + 6, + 2 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 2, + 5.5, + 2.5, + 6 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 6, + 2.5, + 5.5, + 2 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 3, + 5.5, + 2.5, + 6 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 5.83211, + 14.5841, + 8 + ], + "to": [ + 5.87711, + 14.6291, + 8.0625 + ], + "rotation": { + "angle": -22.5, + "axis": "z", + "origin": [ + 7.96165, + 9.34306, + 8.03125 + ] + }, + "faces": { + "north": { + "uv": [ + 5.5, + 4, + 6, + 4.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 4.5, + 5.5, + 5, + 6 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 5.5, + 4.5, + 6, + 5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 5, + 5.5, + 5.5, + 6 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 6, + 5.5, + 5.5, + 5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 6, + 5.5, + 5.5, + 6 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 10.05931, + 14.57866, + 8 + ], + "to": [ + 10.10431, + 14.62366, + 8.0625 + ], + "rotation": { + "angle": 22.5, + "axis": "z", + "origin": [ + 7.96165, + 9.34306, + 8.03125 + ] + }, + "faces": { + "north": { + "uv": [ + 6, + 0, + 6.5, + 0.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 0.5, + 6, + 1, + 6.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 6, + 0.5, + 6.5, + 1 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 1, + 6, + 1.5, + 6.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 6.5, + 1.5, + 6, + 1 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 2, + 6, + 1.5, + 6.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 7.875, + 14.9375, + 8 + ], + "to": [ + 7.9375, + 15, + 8.0625 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 7.96165, + 9.34306, + 8.03125 + ] + }, + "faces": { + "north": { + "uv": [ + 5.5, + 2.5, + 6, + 3 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 3, + 5.5, + 3.5, + 6 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 5.5, + 3, + 6, + 3.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 3.5, + 5.5, + 4, + 6 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 6, + 4, + 5.5, + 3.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 4.5, + 5.5, + 4, + 6 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8.0625, + 14.8125, + 8 + ], + "to": [ + 8.1025, + 14.875, + 8.0625 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 7.96165, + 9.34306, + 8.03125 + ] + }, + "faces": { + "north": { + "uv": [ + 5, + 3, + 5.5, + 3.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 3.5, + 5, + 4, + 5.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 5, + 3.5, + 5.5, + 4 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 4, + 5, + 4.5, + 5.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 5.5, + 4.5, + 5, + 4 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 5, + 5, + 4.5, + 5.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 7.835, + 14.8125, + 8 + ], + "to": [ + 7.875, + 14.875, + 8.0625 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 7.96165, + 9.34306, + 8.03125 + ] + }, + "faces": { + "north": { + "uv": [ + 5, + 4.5, + 5.5, + 5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 5, + 5, + 5.5, + 5.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 5.5, + 0, + 6, + 0.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 0.5, + 5.5, + 1, + 6 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 6, + 1, + 5.5, + 0.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 1.5, + 5.5, + 1, + 6 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 10.16294, + 14.05485, + 8 + ], + "to": [ + 10.22544, + 14.55485, + 8.0625 + ], + "rotation": { + "angle": 22.5, + "axis": "z", + "origin": [ + 7.96165, + 9.34306, + 8.03125 + ] + }, + "faces": { + "north": { + "uv": [ + 4.5, + 1.5, + 5, + 2 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 2, + 4.5, + 2.5, + 5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 4.5, + 2, + 5, + 2.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 2.5, + 4.5, + 3, + 5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 5, + 3, + 4.5, + 2.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 3.5, + 4.5, + 3, + 5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 5.71098, + 14.06028, + 8 + ], + "to": [ + 5.77348, + 14.56028, + 8.0625 + ], + "rotation": { + "angle": -22.5, + "axis": "z", + "origin": [ + 7.96165, + 9.34306, + 8.03125 + ] + }, + "faces": { + "north": { + "uv": [ + 4.5, + 3, + 5, + 3.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 3.5, + 4.5, + 4, + 5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 4.5, + 3.5, + 5, + 4 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 4, + 4.5, + 4.5, + 5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 5, + 4.5, + 4.5, + 4 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 5, + 4.5, + 4.5, + 5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 7.875, + 14.75, + 8 + ], + "to": [ + 7.9375, + 14.9375, + 8.0625 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 7.96165, + 9.34306, + 8.03125 + ] + }, + "faces": { + "north": { + "uv": [ + 4.5, + 0, + 5, + 0.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 0.5, + 4.5, + 1, + 5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 4.5, + 0.5, + 5, + 1 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 1, + 4.5, + 1.5, + 5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 5, + 1.5, + 4.5, + 1 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 2, + 4.5, + 1.5, + 5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 5.77348, + 14.06028, + 8 + ], + "to": [ + 5.83598, + 14.37278, + 8.0625 + ], + "rotation": { + "angle": -22.5, + "axis": "z", + "origin": [ + 7.96165, + 9.34306, + 8.03125 + ] + }, + "faces": { + "north": { + "uv": [ + 5, + 0, + 5.5, + 0.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 0.5, + 5, + 1, + 5.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 5, + 0.5, + 5.5, + 1 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 1, + 5, + 1.5, + 5.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 5.5, + 1.5, + 5, + 1 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 2, + 5, + 1.5, + 5.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 10.10044, + 14.05485, + 8 + ], + "to": [ + 10.16294, + 14.36735, + 8.0625 + ], + "rotation": { + "angle": 22.5, + "axis": "z", + "origin": [ + 7.96165, + 9.34306, + 8.03125 + ] + }, + "faces": { + "north": { + "uv": [ + 5, + 1.5, + 5.5, + 2 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 2, + 5, + 2.5, + 5.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 5, + 2, + 5.5, + 2.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 2.5, + 5, + 3, + 5.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 5.5, + 3, + 5, + 2.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 3.5, + 5, + 3, + 5.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 7.8125, + 14.5625, + 8 + ], + "to": [ + 7.9375, + 14.75, + 8.0625 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 7.96165, + 9.34306, + 8.03125 + ] + }, + "faces": { + "north": { + "uv": [ + 4, + 1, + 4.5, + 1.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 1.5, + 4, + 2, + 4.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 4, + 1.5, + 4.5, + 2 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 2, + 4, + 2.5, + 4.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 4.5, + 2.5, + 4, + 2 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 3, + 4, + 2.5, + 4.5 + ], + "texture": "#0" + } + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [ + 0, + 90, + 0 + ], + "translation": [ + -0.5, + 10.75, + 0.75 + ], + "scale": [ + 4, + 4, + 4 + ] + }, + "thirdperson_lefthand": { + "rotation": [ + 0, + 90, + 0 + ], + "translation": [ + -0.75, + 10.75, + 1 + ], + "scale": [ + 4, + 4, + 4 + ] + }, + "firstperson_righthand": { + "rotation": [ + 0, + 90, + 0 + ], + "translation": [ + 0, + 6.5, + 0 + ], + "scale": [ + 3.15, + 3.15, + 3.15 + ] + }, + "firstperson_lefthand": { + "rotation": [ + 0, + 90, + 0 + ], + "translation": [ + 3, + 6.5, + 0 + ], + "scale": [ + 3.15, + 3.15, + 3.15 + ] + }, + "ground": { + "translation": [ + 0, + 2.25, + 0 + ], + "scale": [ + 1.5, + 1.5, + 1.5 + ] + }, + "gui": { + "rotation": [ + 0, + 0, + -45 + ], + "scale": [ + 1.15, + 1.15, + 1.15 + ] + }, + "fixed": { + "rotation": [ + 0, + 0, + 45 + ], + "translation": [ + 0, + 0, + -0.5 + ], + "scale": [ + 1.5, + 1.5, + 1.5 + ] + } + }, + "groups": [ + { + "name": "Everything", + "origin": [ + 8, + 8, + 8 + ], + "color": 0, + "children": [ + { + "name": "Blade", + "origin": [ + 8, + 8, + 8 + ], + "color": 0, + "children": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78 + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/surgebinding/resources/assets/surgebinding/models/item/edgedancer_honorblade.json b/src/surgebinding/resources/assets/surgebinding/models/item/edgedancer_honorblade.json new file mode 100644 index 000000000..732a53d67 --- /dev/null +++ b/src/surgebinding/resources/assets/surgebinding/models/item/edgedancer_honorblade.json @@ -0,0 +1,6945 @@ +{ + "credit": "Made with Blockbench", + "texture_size": [ + 32, + 32 + ], + "textures": { + "1": "surgebinding:item/models/shardblade_model/edgedancer_honorblade" + }, + "elements": [ + { + "from": [ + 7.75499, + 5.59655, + 7.7125 + ], + "to": [ + 8.25499, + 5.78405, + 8.15 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 7.81749, + 5.8778, + 7.93125 + ] + }, + "faces": { + "north": { + "uv": [ + 0.5, + 11, + 1, + 11.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 11, + 0.5, + 11.5, + 1 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 1, + 11, + 1.5, + 11.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 11, + 1, + 11.5, + 1.5 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 2, + 11.5, + 1.5, + 11 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 11.5, + 1.5, + 11, + 2 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 7.785, + 2.84655, + 7.7125 + ], + "to": [ + 8.2225, + 2.97155, + 8.15 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 7.81749, + 5.8778, + 7.93125 + ] + }, + "faces": { + "north": { + "uv": [ + 11.5, + 10, + 12, + 10.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 10.5, + 11.5, + 11, + 12 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 11.5, + 10.5, + 12, + 11 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 11, + 11.5, + 11.5, + 12 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 12, + 11.5, + 11.5, + 11 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 12, + 11.5, + 11.5, + 12 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 7.73684, + 2.21197, + 7.7125 + ], + "to": [ + 7.79934, + 2.83697, + 8.15 + ], + "rotation": { + "angle": 22.5, + "axis": "z", + "origin": [ + 7.76809, + 2.80572, + 7.93125 + ] + }, + "faces": { + "north": { + "uv": [ + 9.5, + 11, + 10, + 11.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 11, + 9.5, + 11.5, + 10 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 10, + 11, + 10.5, + 11.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 11, + 10, + 11.5, + 10.5 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 11, + 11.5, + 10.5, + 11 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 11.5, + 10.5, + 11, + 11 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 7.79934, + 2.39947, + 7.7125 + ], + "to": [ + 7.98684, + 2.83697, + 8.15 + ], + "rotation": { + "angle": 22.5, + "axis": "z", + "origin": [ + 7.76809, + 2.80572, + 7.93125 + ] + }, + "faces": { + "north": { + "uv": [ + 11.5, + 4, + 12, + 4.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 4.5, + 11.5, + 5, + 12 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 11.5, + 4.5, + 12, + 5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 5, + 11.5, + 5.5, + 12 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 12, + 5.5, + 11.5, + 5 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 6, + 11.5, + 5.5, + 12 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 7.93841, + 2.32699, + 7.7125 + ], + "to": [ + 8.06341, + 2.88949, + 8.15 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 7.93841, + 2.63949, + 7.93125 + ] + }, + "faces": { + "north": { + "uv": [ + 11.5, + 7, + 12, + 7.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 7.5, + 11.5, + 8, + 12 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 11.5, + 7.5, + 12, + 8 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 8, + 11.5, + 8.5, + 12 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 12, + 8.5, + 11.5, + 8 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 9, + 11.5, + 8.5, + 12 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 7.98, + 2.26449, + 7.7125 + ], + "to": [ + 8.0425, + 2.32699, + 8.15 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 7.93841, + 2.63949, + 7.93125 + ] + }, + "faces": { + "north": { + "uv": [ + 11.5, + 8.5, + 12, + 9 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 9, + 11.5, + 9.5, + 12 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 11.5, + 9, + 12, + 9.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 9.5, + 11.5, + 10, + 12 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 12, + 10, + 11.5, + 9.5 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 10.5, + 11.5, + 10, + 12 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 7.84447, + 2.78688, + 7.7125 + ], + "to": [ + 7.90697, + 2.97438, + 8.15 + ], + "rotation": { + "angle": -22.5, + "axis": "z", + "origin": [ + 7.87572, + 3.09938, + 7.93125 + ] + }, + "faces": { + "north": { + "uv": [ + 11, + 11, + 11.5, + 11.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 0, + 11.5, + 0.5, + 12 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 11.5, + 0, + 12, + 0.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 0.5, + 11.5, + 1, + 12 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 12, + 1, + 11.5, + 0.5 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 1.5, + 11.5, + 1, + 12 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 8.11005, + 2.73905, + 7.7125 + ], + "to": [ + 8.17255, + 2.92655, + 8.15 + ], + "rotation": { + "angle": 22.5, + "axis": "z", + "origin": [ + 8.0163, + 3.05155, + 7.93125 + ] + }, + "faces": { + "north": { + "uv": [ + 11.5, + 2.5, + 12, + 3 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 3, + 11.5, + 3.5, + 12 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 11.5, + 3, + 12, + 3.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 3.5, + 11.5, + 4, + 12 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 12, + 4, + 11.5, + 3.5 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 4.5, + 11.5, + 4, + 12 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 8.20816, + 2.21197, + 7.7125 + ], + "to": [ + 8.27066, + 2.83697, + 8.15 + ], + "rotation": { + "angle": -22.5, + "axis": "z", + "origin": [ + 8.23941, + 2.80572, + 7.93125 + ] + }, + "faces": { + "north": { + "uv": [ + 11.5, + 1, + 12, + 1.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 1.5, + 11.5, + 2, + 12 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 11.5, + 1.5, + 12, + 2 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 2, + 11.5, + 2.5, + 12 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 12, + 2.5, + 11.5, + 2 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 3, + 11.5, + 2.5, + 12 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 8.02066, + 2.39947, + 7.7125 + ], + "to": [ + 8.20816, + 2.83697, + 8.15 + ], + "rotation": { + "angle": -22.5, + "axis": "z", + "origin": [ + 8.23941, + 2.80572, + 7.93125 + ] + }, + "faces": { + "north": { + "uv": [ + 11.5, + 5.5, + 12, + 6 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 6, + 11.5, + 6.5, + 12 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 11.5, + 6, + 12, + 6.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 6.5, + 11.5, + 7, + 12 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 12, + 7, + 11.5, + 6.5 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 7.5, + 11.5, + 7, + 12 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 8.51599, + 2.50945, + 7.7125 + ], + "to": [ + 8.56999, + 2.56345, + 8.15 + ], + "rotation": { + "angle": -45, + "axis": "z", + "origin": [ + 7.92224, + 3.0407, + 9.05625 + ] + }, + "faces": { + "north": { + "uv": [ + 8, + 11, + 8.5, + 11.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 11, + 8, + 11.5, + 8.5 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 8.5, + 11, + 9, + 11.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 11, + 8.5, + 11.5, + 9 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 9.5, + 11.5, + 9, + 11 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 11.5, + 9, + 11, + 9.5 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 7.785, + 2.965, + 7.7125 + ], + "to": [ + 8.2225, + 5.6525, + 8.15 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 0, + 1.125, + 0.275 + ] + }, + "faces": { + "north": { + "uv": [ + 2, + 0, + 2.5, + 1.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 2, + 1.5, + 2.5, + 3 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 2.5, + 0, + 3, + 1.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 2.5, + 1.5, + 3, + 3 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 0.5, + 12.5, + 0, + 12 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 12.5, + 0, + 12, + 0.5 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 7.75499, + 5.73449, + 7.76964 + ], + "to": [ + 8.25499, + 5.92199, + 7.89464 + ], + "rotation": { + "angle": 45, + "axis": "x", + "origin": [ + 8.06249, + 5.82824, + 7.80089 + ] + }, + "faces": { + "north": { + "uv": [ + 2, + 11, + 2.5, + 11.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 11, + 2, + 11.5, + 2.5 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 2.5, + 11, + 3, + 11.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 11, + 2.5, + 11.5, + 3 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 3.5, + 11.5, + 3, + 11 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 11.5, + 3, + 11, + 3.5 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 8.15899, + 5.42814, + 7.7125 + ], + "to": [ + 8.22149, + 5.61564, + 8.15 + ], + "rotation": { + "angle": -22.5, + "axis": "z", + "origin": [ + 8.19024, + 5.52189, + 7.9625 + ] + }, + "faces": { + "north": { + "uv": [ + 5, + 11, + 5.5, + 11.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 11, + 5, + 11.5, + 5.5 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 5.5, + 11, + 6, + 11.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 11, + 5.5, + 11.5, + 6 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 6.5, + 11.5, + 6, + 11 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 11.5, + 6, + 11, + 6.5 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 7.78848, + 5.42814, + 7.7125 + ], + "to": [ + 7.85098, + 5.61564, + 8.15 + ], + "rotation": { + "angle": 22.5, + "axis": "z", + "origin": [ + 7.81973, + 5.52189, + 7.93125 + ] + }, + "faces": { + "north": { + "uv": [ + 6.5, + 11, + 7, + 11.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 11, + 6.5, + 11.5, + 7 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 7, + 11, + 7.5, + 11.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 11, + 7, + 11.5, + 7.5 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 8, + 11.5, + 7.5, + 11 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 11.5, + 7.5, + 11, + 8 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 7.75499, + 5.73449, + 7.96786 + ], + "to": [ + 8.25499, + 5.92199, + 8.09286 + ], + "rotation": { + "angle": -45, + "axis": "x", + "origin": [ + 8.00499, + 5.82824, + 8.06161 + ] + }, + "faces": { + "north": { + "uv": [ + 3.5, + 11, + 4, + 11.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 11, + 3.5, + 11.5, + 4 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 4, + 11, + 4.5, + 11.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 11, + 4, + 11.5, + 4.5 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 5, + 11.5, + 4.5, + 11 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 11.5, + 4.5, + 11, + 5 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 7.72106, + 6.91237, + 7.8375 + ], + "to": [ + 8.48106, + 7.67237, + 8.025 + ], + "rotation": { + "angle": -45, + "axis": "z", + "origin": [ + 7.75231, + 7.29237, + 7.99375 + ] + }, + "faces": { + "north": { + "uv": [ + 8.5, + 7, + 9, + 7.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 7.5, + 8.5, + 8, + 9 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 8.5, + 7.5, + 9, + 8 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 8, + 8.5, + 8.5, + 9 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 9, + 8.5, + 8.5, + 8 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 9, + 8.5, + 8.5, + 9 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 7.46152, + 5.92077, + 7.8375 + ], + "to": [ + 8.53652, + 7.04577, + 8.025 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 7.99277, + 6.48327, + 7.93125 + ] + }, + "faces": { + "north": { + "uv": [ + 8.5, + 5.5, + 9, + 6 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 6, + 8.5, + 6.5, + 9 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 8.5, + 6, + 9, + 6.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 6.5, + 8.5, + 7, + 9 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 9, + 7, + 8.5, + 6.5 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 7.5, + 8.5, + 7, + 9 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 6.46152, + 6.60827, + 7.8375 + ], + "to": [ + 7.46152, + 6.85827, + 8.025 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 7.99277, + 6.48327, + 7.93125 + ] + }, + "faces": { + "north": { + "uv": [ + 6.5, + 10, + 7, + 10.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 10, + 6.5, + 10.5, + 7 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 7, + 10, + 7.5, + 10.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 10, + 7, + 10.5, + 7.5 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 8, + 10.5, + 7.5, + 10 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 10.5, + 7.5, + 10, + 8 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 5.7879, + 6.74226, + 7.8375 + ], + "to": [ + 6.5379, + 6.99226, + 8.025 + ], + "rotation": { + "angle": -22.5, + "axis": "z", + "origin": [ + 6.1629, + 6.86726, + 7.93125 + ] + }, + "faces": { + "north": { + "uv": [ + 9.5, + 10, + 10, + 10.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 10, + 9.5, + 10.5, + 10 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 10, + 10, + 10.5, + 10.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 0, + 10.5, + 0.5, + 11 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 11, + 0.5, + 10.5, + 0 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 1, + 10.5, + 0.5, + 11 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 5.67678, + 6.87625, + 7.8375 + ], + "to": [ + 5.86428, + 7.12625, + 8.025 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 5.48928, + 7.00125, + 7.93125 + ] + }, + "faces": { + "north": { + "uv": [ + 10.5, + 8, + 11, + 8.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 8.5, + 10.5, + 9, + 11 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 10.5, + 8.5, + 11, + 9 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 9, + 10.5, + 9.5, + 11 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 11, + 9.5, + 10.5, + 9 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 10, + 10.5, + 9.5, + 11 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 10.13572, + 6.87625, + 7.8375 + ], + "to": [ + 10.32322, + 7.12625, + 8.025 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 5.51072, + 7.00125, + 7.93125 + ] + }, + "faces": { + "north": { + "uv": [ + 10.5, + 9.5, + 11, + 10 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 10, + 10.5, + 10.5, + 11 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 10.5, + 10, + 11, + 10.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 10.5, + 10.5, + 11, + 11 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 0.5, + 11.5, + 0, + 11 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 11.5, + 0, + 11, + 0.5 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 9.4621, + 6.74226, + 7.8375 + ], + "to": [ + 10.2121, + 6.99226, + 8.025 + ], + "rotation": { + "angle": 22.5, + "axis": "z", + "origin": [ + 9.8371, + 6.86726, + 7.93125 + ] + }, + "faces": { + "north": { + "uv": [ + 10.5, + 0.5, + 11, + 1 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 1, + 10.5, + 1.5, + 11 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 10.5, + 1, + 11, + 1.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 1.5, + 10.5, + 2, + 11 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 11, + 2, + 10.5, + 1.5 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 2.5, + 10.5, + 2, + 11 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 8.53652, + 6.60827, + 7.8375 + ], + "to": [ + 9.53652, + 6.85827, + 8.025 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 8.00527, + 6.67077, + 7.93125 + ] + }, + "faces": { + "north": { + "uv": [ + 8, + 10, + 8.5, + 10.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 10, + 8, + 10.5, + 8.5 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 8.5, + 10, + 9, + 10.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 10, + 8.5, + 10.5, + 9 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 9.5, + 10.5, + 9, + 10 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 10.5, + 9, + 10, + 9.5 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 7.28474, + 6.05649, + 7.8375 + ], + "to": [ + 7.34724, + 6.18149, + 8.025 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 7.31599, + 6.05649, + 7.93125 + ] + }, + "faces": { + "north": { + "uv": [ + 3, + 9, + 3.5, + 9.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 9, + 3, + 9.5, + 3.5 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 3.5, + 9, + 4, + 9.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 9, + 3.5, + 9.5, + 4 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 4.5, + 9.5, + 4, + 9 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 9.5, + 4, + 9, + 4.5 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 8.04429, + 6.2552, + 7.8375 + ], + "to": [ + 8.16929, + 6.5052, + 8.025 + ], + "rotation": { + "angle": -45, + "axis": "z", + "origin": [ + 7.57554, + 7.1352, + 7.99375 + ] + }, + "faces": { + "north": { + "uv": [ + 0, + 9, + 0.5, + 9.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 9, + 0, + 9.5, + 0.5 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 0.5, + 9, + 1, + 9.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 9, + 0.5, + 9.5, + 1 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 1.5, + 9.5, + 1, + 9 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 9.5, + 1, + 9, + 1.5 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 7.25961, + 6.59836, + 7.8375 + ], + "to": [ + 7.50961, + 6.72336, + 8.025 + ], + "rotation": { + "angle": -22.5, + "axis": "z", + "origin": [ + 7.32211, + 6.59836, + 7.93125 + ] + }, + "faces": { + "north": { + "uv": [ + 10.5, + 2, + 11, + 2.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 2.5, + 10.5, + 3, + 11 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 10.5, + 2.5, + 11, + 3 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 3, + 10.5, + 3.5, + 11 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 11, + 3.5, + 10.5, + 3 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 4, + 10.5, + 3.5, + 11 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 7.25961, + 6.74318, + 7.8375 + ], + "to": [ + 7.50961, + 6.86818, + 8.025 + ], + "rotation": { + "angle": 22.5, + "axis": "z", + "origin": [ + 7.32211, + 6.86818, + 7.93125 + ] + }, + "faces": { + "north": { + "uv": [ + 10.5, + 5, + 11, + 5.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 5.5, + 10.5, + 6, + 11 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 10.5, + 5.5, + 11, + 6 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 6, + 10.5, + 6.5, + 11 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 11, + 6.5, + 10.5, + 6 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 7, + 10.5, + 6.5, + 11 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 8.49039, + 6.74318, + 7.8375 + ], + "to": [ + 8.74039, + 6.86818, + 8.025 + ], + "rotation": { + "angle": -22.5, + "axis": "z", + "origin": [ + 8.67789, + 6.86818, + 7.93125 + ] + }, + "faces": { + "north": { + "uv": [ + 10.5, + 6.5, + 11, + 7 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 7, + 10.5, + 7.5, + 11 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 10.5, + 7, + 11, + 7.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 7.5, + 10.5, + 8, + 11 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 11, + 8, + 10.5, + 7.5 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 8.5, + 10.5, + 8, + 11 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 8.49039, + 6.59836, + 7.8375 + ], + "to": [ + 8.74039, + 6.72336, + 8.025 + ], + "rotation": { + "angle": 22.5, + "axis": "z", + "origin": [ + 8.67789, + 6.59836, + 7.93125 + ] + }, + "faces": { + "north": { + "uv": [ + 10.5, + 3.5, + 11, + 4 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 4, + 10.5, + 4.5, + 11 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 10.5, + 4, + 11, + 4.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 4.5, + 10.5, + 5, + 11 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 11, + 5, + 10.5, + 4.5 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 5.5, + 10.5, + 5, + 11 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 8.47977, + 6.02903, + 7.8375 + ], + "to": [ + 8.72977, + 6.27903, + 8.025 + ], + "rotation": { + "angle": -45, + "axis": "z", + "origin": [ + 8.60477, + 6.24778, + 7.93125 + ] + }, + "faces": { + "north": { + "uv": [ + 1.5, + 9, + 2, + 9.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 9, + 1.5, + 9.5, + 2 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 2, + 9, + 2.5, + 9.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 9, + 2, + 9.5, + 2.5 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 3, + 9.5, + 2.5, + 9 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 9.5, + 2.5, + 9, + 3 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 8.65276, + 6.05649, + 7.8375 + ], + "to": [ + 8.71526, + 6.18149, + 8.025 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 7.18401, + 6.05649, + 7.93125 + ] + }, + "faces": { + "north": { + "uv": [ + 4.5, + 9, + 5, + 9.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 9, + 4.5, + 9.5, + 5 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 5, + 9, + 5.5, + 9.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 9, + 5, + 9.5, + 5.5 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 6, + 9.5, + 5.5, + 9 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 9.5, + 5.5, + 9, + 6 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 8.47977, + 5.95895, + 7.8375 + ], + "to": [ + 8.72977, + 6.20895, + 8.025 + ], + "rotation": { + "angle": 45, + "axis": "z", + "origin": [ + 8.60477, + 5.9902, + 7.93125 + ] + }, + "faces": { + "north": { + "uv": [ + 6, + 9, + 6.5, + 9.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 9, + 6, + 9.5, + 6.5 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 6.5, + 9, + 7, + 9.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 9, + 6.5, + 9.5, + 7 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 7.5, + 9.5, + 7, + 9 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 9.5, + 7, + 9, + 7.5 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 8.28604, + 5.8295, + 7.8375 + ], + "to": [ + 8.53604, + 6.017, + 8.025 + ], + "rotation": { + "angle": 22.5, + "axis": "z", + "origin": [ + 8.41104, + 5.86075, + 7.93125 + ] + }, + "faces": { + "north": { + "uv": [ + 7.5, + 9, + 8, + 9.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 9, + 7.5, + 9.5, + 8 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 8, + 9, + 8.5, + 9.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 9, + 8, + 9.5, + 8.5 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 9, + 9.5, + 8.5, + 9 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 9.5, + 8.5, + 9, + 9 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 7.27023, + 5.95895, + 7.8375 + ], + "to": [ + 7.52023, + 6.20895, + 8.025 + ], + "rotation": { + "angle": -45, + "axis": "z", + "origin": [ + 7.39523, + 5.9902, + 7.93125 + ] + }, + "faces": { + "north": { + "uv": [ + 9.5, + 1, + 10, + 1.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 1.5, + 9.5, + 2, + 10 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 9.5, + 1.5, + 10, + 2 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 2, + 9.5, + 2.5, + 10 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 10, + 2.5, + 9.5, + 2 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 3, + 9.5, + 2.5, + 10 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 7.46396, + 5.8295, + 7.8375 + ], + "to": [ + 7.71396, + 6.017, + 8.025 + ], + "rotation": { + "angle": -22.5, + "axis": "z", + "origin": [ + 7.58896, + 5.86075, + 7.93125 + ] + }, + "faces": { + "north": { + "uv": [ + 9, + 9, + 9.5, + 9.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 0, + 9.5, + 0.5, + 10 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 9.5, + 0, + 10, + 0.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 0.5, + 9.5, + 1, + 10 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 10, + 1, + 9.5, + 0.5 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 1.5, + 9.5, + 1, + 10 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 7.69249, + 5.78405, + 7.8375 + ], + "to": [ + 8.30749, + 5.97155, + 8.025 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 7.81749, + 5.8778, + 7.93125 + ] + }, + "faces": { + "north": { + "uv": [ + 9.5, + 2.5, + 10, + 3 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 3, + 9.5, + 3.5, + 10 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 9.5, + 3, + 10, + 3.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 3.5, + 9.5, + 4, + 10 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 10, + 4, + 9.5, + 3.5 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 4.5, + 9.5, + 4, + 10 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 7.65747, + 6.57847, + 7.775 + ], + "to": [ + 7.84497, + 7.07847, + 8.0875 + ], + "rotation": { + "angle": -22.5, + "axis": "z", + "origin": [ + 7.99652, + 6.58658, + 8.05625 + ] + }, + "faces": { + "north": { + "uv": [ + 9.5, + 4, + 10, + 4.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 4.5, + 9.5, + 5, + 10 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 9.5, + 4.5, + 10, + 5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 5, + 9.5, + 5.5, + 10 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 10, + 5.5, + 9.5, + 5 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 6, + 9.5, + 5.5, + 10 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 8.14806, + 6.57847, + 7.775 + ], + "to": [ + 8.33556, + 7.07847, + 8.0875 + ], + "rotation": { + "angle": 22.5, + "axis": "z", + "origin": [ + 7.99652, + 6.58658, + 8.05625 + ] + }, + "faces": { + "north": { + "uv": [ + 9.5, + 8.5, + 10, + 9 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 9, + 9.5, + 9.5, + 10 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 9.5, + 9, + 10, + 9.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 9.5, + 9.5, + 10, + 10 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 0.5, + 10.5, + 0, + 10 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 10.5, + 0, + 10, + 0.5 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 7.68018, + 6.45883, + 7.775 + ], + "to": [ + 7.93018, + 6.70883, + 8.0875 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 7.99652, + 6.58658, + 8.05625 + ] + }, + "faces": { + "north": { + "uv": [ + 9.5, + 5.5, + 10, + 6 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 6, + 9.5, + 6.5, + 10 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 9.5, + 6, + 10, + 6.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 6.5, + 9.5, + 7, + 10 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 10, + 7, + 9.5, + 6.5 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 7.5, + 9.5, + 7, + 10 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 8.06286, + 6.45883, + 7.775 + ], + "to": [ + 8.31286, + 6.70883, + 8.0875 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 7.99652, + 6.58658, + 8.05625 + ] + }, + "faces": { + "north": { + "uv": [ + 0.5, + 10, + 1, + 10.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 10, + 0.5, + 10.5, + 1 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 1, + 10, + 1.5, + 10.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 10, + 1, + 10.5, + 1.5 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 2, + 10.5, + 1.5, + 10 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 10.5, + 1.5, + 10, + 2 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 7.87152, + 6.17077, + 7.775 + ], + "to": [ + 8.12152, + 7.17077, + 8.0875 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 7.99652, + 6.58658, + 8.05625 + ] + }, + "faces": { + "north": { + "uv": [ + 9.5, + 7, + 10, + 7.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 7.5, + 9.5, + 8, + 10 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 9.5, + 7.5, + 10, + 8 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 8, + 9.5, + 8.5, + 10 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 10, + 8.5, + 9.5, + 8 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 9, + 9.5, + 8.5, + 10 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 8.14806, + 6.0947, + 7.775 + ], + "to": [ + 8.33556, + 6.5947, + 8.0875 + ], + "rotation": { + "angle": -22.5, + "axis": "z", + "origin": [ + 7.99652, + 6.58658, + 8.05625 + ] + }, + "faces": { + "north": { + "uv": [ + 5, + 10, + 5.5, + 10.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 10, + 5, + 10.5, + 5.5 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 5.5, + 10, + 6, + 10.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 10, + 5.5, + 10.5, + 6 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 6.5, + 10.5, + 6, + 10 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 10.5, + 6, + 10, + 6.5 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 7.65747, + 6.0947, + 7.775 + ], + "to": [ + 7.84497, + 6.5947, + 8.0875 + ], + "rotation": { + "angle": 22.5, + "axis": "z", + "origin": [ + 7.99652, + 6.58658, + 8.05625 + ] + }, + "faces": { + "north": { + "uv": [ + 3.5, + 10, + 4, + 10.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 10, + 3.5, + 10.5, + 4 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 4, + 10, + 4.5, + 10.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 10, + 4, + 10.5, + 4.5 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 5, + 10.5, + 4.5, + 10 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 10.5, + 4.5, + 10, + 5 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 7.87152, + 6.0024, + 7.775 + ], + "to": [ + 8.12152, + 6.1899, + 8.0875 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 7.99652, + 6.58658, + 8.05625 + ] + }, + "faces": { + "north": { + "uv": [ + 2, + 10, + 2.5, + 10.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 10, + 2, + 10.5, + 2.5 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 2.5, + 10, + 3, + 10.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 10, + 2.5, + 10.5, + 3 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 3.5, + 10.5, + 3, + 10 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 10.5, + 3, + 10, + 3.5 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 7.5, + 7.5, + 7.9 + ], + "to": [ + 8.5, + 19.125, + 7.9625 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 0, + 3.125, + 0.275 + ] + }, + "faces": { + "north": { + "uv": [ + 0, + 0, + 0.5, + 6.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 0.5, + 0, + 1, + 6.5 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 1, + 0, + 1.5, + 6.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 1.5, + 0, + 2, + 6.5 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 3.5, + 0.5, + 3, + 0 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 3.5, + 0.5, + 3, + 1 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 7.50571, + 7.00158, + 7.9 + ], + "to": [ + 8.49571, + 7.56408, + 7.9625 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 2.69321, + 3.06408, + 0.275 + ] + }, + "faces": { + "north": { + "uv": [ + 5.5, + 4.5, + 6, + 5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 5, + 5.5, + 5.5, + 6 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 5.5, + 5, + 6, + 5.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 5.5, + 5.5, + 6, + 6 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 6.5, + 0.5, + 6, + 0 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 6.5, + 0.5, + 6, + 1 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 8.35519, + 10.47119, + 7.9 + ], + "to": [ + 8.60519, + 11.09619, + 7.9625 + ], + "rotation": { + "angle": 22.5, + "axis": "z", + "origin": [ + 8.48019, + 10.84619, + 8.025 + ] + }, + "faces": { + "north": { + "uv": [ + 2, + 7, + 2.5, + 7.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 7, + 2, + 7.5, + 2.5 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 2.5, + 7, + 3, + 7.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 7, + 2.5, + 7.5, + 3 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 3.5, + 7.5, + 3, + 7 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 7.5, + 3, + 7, + 3.5 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 8.3791, + 10.21, + 7.9 + ], + "to": [ + 8.6291, + 10.5225, + 7.9625 + ], + "rotation": { + "angle": -22.5, + "axis": "z", + "origin": [ + 8.5041, + 10.2725, + 7.93125 + ] + }, + "faces": { + "north": { + "uv": [ + 5, + 7, + 5.5, + 7.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 7, + 5, + 7.5, + 5.5 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 5.5, + 7, + 6, + 7.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 7, + 5.5, + 7.5, + 6 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 6.5, + 7.5, + 6, + 7 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 7.5, + 6, + 7, + 6.5 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 8.45207, + 10.35056, + 7.9 + ], + "to": [ + 8.63957, + 10.53806, + 7.9625 + ], + "rotation": { + "angle": 45, + "axis": "z", + "origin": [ + 8.51457, + 10.66306, + 7.93125 + ] + }, + "faces": { + "north": { + "uv": [ + 3.5, + 7, + 4, + 7.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 7, + 3.5, + 7.5, + 4 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 4, + 7, + 4.5, + 7.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 7, + 4, + 7.5, + 4.5 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 5, + 7.5, + 4.5, + 7 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 7.5, + 4.5, + 7, + 5 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 8.33127, + 8.96653, + 7.9 + ], + "to": [ + 8.58127, + 9.21653, + 7.9625 + ], + "rotation": { + "angle": -22.5, + "axis": "z", + "origin": [ + 8.45627, + 9.09153, + 7.93125 + ] + }, + "faces": { + "north": { + "uv": [ + 6.5, + 1, + 7, + 1.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 1.5, + 6.5, + 2, + 7 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 6.5, + 1.5, + 7, + 2 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 2, + 6.5, + 2.5, + 7 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 7, + 2.5, + 6.5, + 2 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 3, + 6.5, + 2.5, + 7 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 8.28343, + 9.7828, + 7.9 + ], + "to": [ + 8.53343, + 10.0953, + 7.9625 + ], + "rotation": { + "angle": 22.5, + "axis": "z", + "origin": [ + 8.40843, + 10.2828, + 8.025 + ] + }, + "faces": { + "north": { + "uv": [ + 6, + 1, + 6.5, + 1.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 6, + 1.5, + 6.5, + 2 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 2, + 6, + 2.5, + 6.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 6, + 2, + 6.5, + 2.5 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 3, + 6.5, + 2.5, + 6 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 6.5, + 2.5, + 6, + 3 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 8.42694, + 9.25999, + 7.9 + ], + "to": [ + 8.67694, + 9.57249, + 7.9625 + ], + "rotation": { + "angle": -22.5, + "axis": "z", + "origin": [ + 8.55194, + 9.44749, + 7.93125 + ] + }, + "faces": { + "north": { + "uv": [ + 4.5, + 6, + 5, + 6.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 6, + 4.5, + 6.5, + 5 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 5, + 6, + 5.5, + 6.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 6, + 5, + 6.5, + 5.5 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 6, + 6.5, + 5.5, + 6 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 6.5, + 5.5, + 6, + 6 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 8.46526, + 9.56692, + 7.9 + ], + "to": [ + 8.84026, + 9.94192, + 7.9625 + ], + "rotation": { + "angle": 45, + "axis": "z", + "origin": [ + 8.71526, + 9.69192, + 7.93125 + ] + }, + "faces": { + "north": { + "uv": [ + 3, + 6, + 3.5, + 6.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 6, + 3, + 6.5, + 3.5 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 3.5, + 6, + 4, + 6.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 6, + 3.5, + 6.5, + 4 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 4.5, + 6.5, + 4, + 6 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 6.5, + 4, + 6, + 4.5 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 8.36959, + 10.09967, + 7.9 + ], + "to": [ + 8.61959, + 10.22467, + 7.9625 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 8.49459, + 9.97467, + 7.93125 + ] + }, + "faces": { + "north": { + "uv": [ + 5.5, + 3, + 6, + 3.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 3.5, + 5.5, + 4, + 6 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 5.5, + 3.5, + 6, + 4 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 4, + 5.5, + 4.5, + 6 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 6, + 4.5, + 5.5, + 4 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 5, + 5.5, + 4.5, + 6 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 8.36959, + 9.15917, + 7.9 + ], + "to": [ + 8.61959, + 9.28417, + 7.9625 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 8.49459, + 10.09667, + 7.93125 + ] + }, + "faces": { + "north": { + "uv": [ + 6, + 6, + 6.5, + 6.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 0, + 6.5, + 0.5, + 7 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 6.5, + 0, + 7, + 0.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 0.5, + 6.5, + 1, + 7 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 7, + 1, + 6.5, + 0.5 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 1.5, + 6.5, + 1, + 7 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 8.27392, + 8.3657, + 7.9 + ], + "to": [ + 8.52392, + 8.9907, + 7.9625 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 8.39892, + 10.4282, + 7.93125 + ] + }, + "faces": { + "north": { + "uv": [ + 5, + 8, + 5.5, + 8.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 8, + 5, + 8.5, + 5.5 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 5.5, + 8, + 6, + 8.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 8, + 5.5, + 8.5, + 6 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 6.5, + 8.5, + 6, + 8 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 8.5, + 6, + 8, + 6.5 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 7.38041, + 10.09967, + 7.9 + ], + "to": [ + 7.63041, + 10.22467, + 7.9625 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 7.50541, + 9.97467, + 7.93125 + ] + }, + "faces": { + "north": { + "uv": [ + 3.5, + 8, + 4, + 8.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 8, + 3.5, + 8.5, + 4 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 4, + 8, + 4.5, + 8.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 8, + 4, + 8.5, + 4.5 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 5, + 8.5, + 4.5, + 8 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 8.5, + 4.5, + 8, + 5 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 7.46657, + 9.7828, + 7.9 + ], + "to": [ + 7.71657, + 10.0953, + 7.9625 + ], + "rotation": { + "angle": -22.5, + "axis": "z", + "origin": [ + 7.59157, + 10.2828, + 8.025 + ] + }, + "faces": { + "north": { + "uv": [ + 2, + 8, + 2.5, + 8.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 8, + 2, + 8.5, + 2.5 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 2.5, + 8, + 3, + 8.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 8, + 2.5, + 8.5, + 3 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 3.5, + 8.5, + 3, + 8 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 8.5, + 3, + 8, + 3.5 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 7.15974, + 9.56692, + 7.9 + ], + "to": [ + 7.53474, + 9.94192, + 7.9625 + ], + "rotation": { + "angle": -45, + "axis": "z", + "origin": [ + 7.28474, + 9.69192, + 7.93125 + ] + }, + "faces": { + "north": { + "uv": [ + 0.5, + 8, + 1, + 8.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 8, + 0.5, + 8.5, + 1 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 1, + 8, + 1.5, + 8.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 8, + 1, + 8.5, + 1.5 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 2, + 8.5, + 1.5, + 8 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 8.5, + 1.5, + 8, + 2 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 7.32306, + 9.25999, + 7.9 + ], + "to": [ + 7.57306, + 9.57249, + 7.9625 + ], + "rotation": { + "angle": 22.5, + "axis": "z", + "origin": [ + 7.44806, + 9.44749, + 7.93125 + ] + }, + "faces": { + "north": { + "uv": [ + 7.5, + 6.5, + 8, + 7 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 7, + 7.5, + 7.5, + 8 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 7.5, + 7, + 8, + 7.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 7.5, + 7.5, + 8, + 8 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 0.5, + 8.5, + 0, + 8 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 8.5, + 0, + 8, + 0.5 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 7.38041, + 9.15917, + 7.9 + ], + "to": [ + 7.63041, + 9.28417, + 7.9625 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 7.50541, + 10.09667, + 7.93125 + ] + }, + "faces": { + "north": { + "uv": [ + 7.5, + 5, + 8, + 5.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 5.5, + 7.5, + 6, + 8 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 7.5, + 5.5, + 8, + 6 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 6, + 7.5, + 6.5, + 8 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 8, + 6.5, + 7.5, + 6 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 7, + 7.5, + 6.5, + 8 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 7.41873, + 8.96653, + 7.9 + ], + "to": [ + 7.66873, + 9.21653, + 7.9625 + ], + "rotation": { + "angle": 22.5, + "axis": "z", + "origin": [ + 7.54373, + 9.09153, + 7.93125 + ] + }, + "faces": { + "north": { + "uv": [ + 7.5, + 3.5, + 8, + 4 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 4, + 7.5, + 4.5, + 8 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 7.5, + 4, + 8, + 4.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 4.5, + 7.5, + 5, + 8 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 8, + 5, + 7.5, + 4.5 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 5.5, + 7.5, + 5, + 8 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 7.39481, + 10.47119, + 7.9 + ], + "to": [ + 7.64481, + 11.09619, + 7.9625 + ], + "rotation": { + "angle": -22.5, + "axis": "z", + "origin": [ + 7.51981, + 10.84619, + 8.025 + ] + }, + "faces": { + "north": { + "uv": [ + 7.5, + 2, + 8, + 2.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 2.5, + 7.5, + 3, + 8 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 7.5, + 2.5, + 8, + 3 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 3, + 7.5, + 3.5, + 8 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 8, + 3.5, + 7.5, + 3 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 4, + 7.5, + 3.5, + 8 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 7.36043, + 10.35056, + 7.9 + ], + "to": [ + 7.54793, + 10.53806, + 7.9625 + ], + "rotation": { + "angle": -45, + "axis": "z", + "origin": [ + 7.48543, + 10.66306, + 7.93125 + ] + }, + "faces": { + "north": { + "uv": [ + 7.5, + 0.5, + 8, + 1 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 1, + 7.5, + 1.5, + 8 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 7.5, + 1, + 8, + 1.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 1.5, + 7.5, + 2, + 8 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 8, + 2, + 7.5, + 1.5 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 2.5, + 7.5, + 2, + 8 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 7.3709, + 10.21, + 7.9 + ], + "to": [ + 7.6209, + 10.5225, + 7.9625 + ], + "rotation": { + "angle": 22.5, + "axis": "z", + "origin": [ + 7.4959, + 10.2725, + 7.93125 + ] + }, + "faces": { + "north": { + "uv": [ + 6.5, + 7, + 7, + 7.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 7, + 6.5, + 7.5, + 7 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 7, + 7, + 7.5, + 7.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 0, + 7.5, + 0.5, + 8 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 8, + 0.5, + 7.5, + 0 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 1, + 7.5, + 0.5, + 8 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 8.3791, + 8.1494, + 7.9 + ], + "to": [ + 8.6291, + 8.3994, + 7.9625 + ], + "rotation": { + "angle": 22.5, + "axis": "z", + "origin": [ + 8.5041, + 8.1494, + 8.025 + ] + }, + "faces": { + "north": { + "uv": [ + 0.5, + 7, + 1, + 7.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 7, + 0.5, + 7.5, + 1 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 1, + 7, + 1.5, + 7.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 7, + 1, + 7.5, + 1.5 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 2, + 7.5, + 1.5, + 7 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 7.5, + 1.5, + 7, + 2 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 8.28343, + 7.63037, + 7.9 + ], + "to": [ + 8.53343, + 8.06787, + 7.9625 + ], + "rotation": { + "angle": 22.5, + "axis": "z", + "origin": [ + 8.40843, + 8.25537, + 8.025 + ] + }, + "faces": { + "north": { + "uv": [ + 6.5, + 5.5, + 7, + 6 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 6, + 6.5, + 6.5, + 7 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 6.5, + 6, + 7, + 6.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 6.5, + 6.5, + 7, + 7 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 0.5, + 7.5, + 0, + 7 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 7.5, + 0, + 7, + 0.5 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 8.36959, + 8.07223, + 7.9 + ], + "to": [ + 8.61959, + 8.19723, + 7.9625 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 8.49459, + 7.94723, + 7.93125 + ] + }, + "faces": { + "north": { + "uv": [ + 6.5, + 4, + 7, + 4.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 4.5, + 6.5, + 5, + 7 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 6.5, + 4.5, + 7, + 5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 5, + 6.5, + 5.5, + 7 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 7, + 5.5, + 6.5, + 5 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 6, + 6.5, + 5.5, + 7 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 8.30679, + 7.07924, + 7.9 + ], + "to": [ + 9.05679, + 7.57924, + 7.9625 + ], + "rotation": { + "angle": 45, + "axis": "z", + "origin": [ + 8.49429, + 7.26674, + 7.93125 + ] + }, + "faces": { + "north": { + "uv": [ + 6.5, + 2.5, + 7, + 3 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 3, + 6.5, + 3.5, + 7 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 6.5, + 3, + 7, + 3.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 3.5, + 6.5, + 4, + 7 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 7, + 4, + 6.5, + 3.5 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 4.5, + 6.5, + 4, + 7 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 7.47608, + 8.3657, + 7.9 + ], + "to": [ + 7.72608, + 8.9907, + 7.9625 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 7.60108, + 10.4282, + 7.93125 + ] + }, + "faces": { + "north": { + "uv": [ + 8.5, + 4, + 9, + 4.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 4.5, + 8.5, + 5, + 9 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 8.5, + 4.5, + 9, + 5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 5, + 8.5, + 5.5, + 9 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 9, + 5.5, + 8.5, + 5 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 6, + 8.5, + 5.5, + 9 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 7.3709, + 8.1494, + 7.9 + ], + "to": [ + 7.6209, + 8.3994, + 7.9625 + ], + "rotation": { + "angle": -22.5, + "axis": "z", + "origin": [ + 7.4959, + 8.1494, + 8.025 + ] + }, + "faces": { + "north": { + "uv": [ + 8.5, + 2.5, + 9, + 3 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 3, + 8.5, + 3.5, + 9 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 8.5, + 3, + 9, + 3.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 3.5, + 8.5, + 4, + 9 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 9, + 4, + 8.5, + 3.5 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 4.5, + 8.5, + 4, + 9 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 7.38041, + 8.07223, + 7.9 + ], + "to": [ + 7.63041, + 8.19723, + 7.9625 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 7.50541, + 7.94723, + 7.93125 + ] + }, + "faces": { + "north": { + "uv": [ + 8.5, + 1, + 9, + 1.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 1.5, + 8.5, + 2, + 9 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 8.5, + 1.5, + 9, + 2 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 2, + 8.5, + 2.5, + 9 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 9, + 2.5, + 8.5, + 2 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 3, + 8.5, + 2.5, + 9 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 7.46657, + 7.56787, + 7.9 + ], + "to": [ + 7.71657, + 8.06787, + 7.9625 + ], + "rotation": { + "angle": -22.5, + "axis": "z", + "origin": [ + 7.59157, + 8.25537, + 8.025 + ] + }, + "faces": { + "north": { + "uv": [ + 8, + 8, + 8.5, + 8.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 0, + 8.5, + 0.5, + 9 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 8.5, + 0, + 9, + 0.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 0.5, + 8.5, + 1, + 9 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 9, + 1, + 8.5, + 0.5 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 1.5, + 8.5, + 1, + 9 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 6.94321, + 7.07924, + 7.9 + ], + "to": [ + 7.69321, + 7.57924, + 7.9625 + ], + "rotation": { + "angle": -45, + "axis": "z", + "origin": [ + 7.50571, + 7.26674, + 7.93125 + ] + }, + "faces": { + "north": { + "uv": [ + 6.5, + 8, + 7, + 8.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 8, + 6.5, + 8.5, + 7 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 7, + 8, + 7.5, + 8.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 8, + 7, + 8.5, + 7.5 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 8, + 8.5, + 7.5, + 8 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 8.5, + 7.5, + 8, + 8 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 9.2197, + 18.7705, + 7.9 + ], + "to": [ + 9.2822, + 19.958, + 7.9625 + ], + "rotation": { + "angle": -22.5, + "axis": "z", + "origin": [ + 9.25095, + 23.2705, + 8.025 + ] + }, + "faces": { + "north": { + "uv": [ + 3, + 1, + 3.5, + 1.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 3, + 1.5, + 3.5, + 2 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 2, + 3, + 2.5, + 3.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 3, + 2, + 3.5, + 2.5 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 3, + 3.5, + 2.5, + 3 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 3.5, + 2.5, + 3, + 3 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 9.2822, + 18.7705, + 7.9 + ], + "to": [ + 9.3447, + 19.8955, + 7.9625 + ], + "rotation": { + "angle": -22.5, + "axis": "z", + "origin": [ + 9.25095, + 23.2705, + 8.025 + ] + }, + "faces": { + "north": { + "uv": [ + 2.5, + 4, + 3, + 4.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 4, + 2.5, + 4.5, + 3 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 3, + 4, + 3.5, + 4.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 4, + 3, + 4.5, + 3.5 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 4, + 4.5, + 3.5, + 4 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 4.5, + 3.5, + 4, + 4 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 9.3447, + 18.7705, + 7.9 + ], + "to": [ + 9.4072, + 19.708, + 7.9625 + ], + "rotation": { + "angle": -22.5, + "axis": "z", + "origin": [ + 9.25095, + 23.2705, + 8.025 + ] + }, + "faces": { + "north": { + "uv": [ + 4.5, + 2, + 5, + 2.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 2.5, + 4.5, + 3, + 5 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 4.5, + 2.5, + 5, + 3 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 3, + 4.5, + 3.5, + 5 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 5, + 3.5, + 4.5, + 3 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 4, + 4.5, + 3.5, + 5 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 9.4072, + 18.7705, + 7.9 + ], + "to": [ + 9.5322, + 19.708, + 7.9625 + ], + "rotation": { + "angle": -22.5, + "axis": "z", + "origin": [ + 9.25095, + 23.2705, + 8.025 + ] + }, + "faces": { + "north": { + "uv": [ + 5, + 1, + 5.5, + 1.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 5, + 1.5, + 5.5, + 2 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 2, + 5, + 2.5, + 5.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 5, + 2, + 5.5, + 2.5 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 3, + 5.5, + 2.5, + 5 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 5.5, + 2.5, + 5, + 3 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 9.5322, + 18.7705, + 7.9 + ], + "to": [ + 9.6572, + 19.458, + 7.9625 + ], + "rotation": { + "angle": -22.5, + "axis": "z", + "origin": [ + 9.25095, + 23.2705, + 8.025 + ] + }, + "faces": { + "north": { + "uv": [ + 4.5, + 5, + 5, + 5.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 5, + 4.5, + 5.5, + 5 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 5, + 5, + 5.5, + 5.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 5.5, + 0, + 6, + 0.5 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 6, + 1, + 5.5, + 0.5 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 6, + 1, + 5.5, + 1.5 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 7.97, + 19.06784, + 7.9 + ], + "to": [ + 8.0325, + 20.19284, + 7.9625 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 7.75609, + 19.66159, + 8.025 + ] + }, + "faces": { + "north": { + "uv": [ + 4, + 0, + 4.5, + 0.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 4, + 0.5, + 4.5, + 1 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 4, + 1, + 4.5, + 1.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 4, + 1.5, + 4.5, + 2 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 2.5, + 4.5, + 2, + 4 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 4.5, + 2, + 4, + 2.5 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 7.57131, + 20.02504, + 7.9 + ], + "to": [ + 7.63531, + 20.08904, + 7.9625 + ], + "rotation": { + "angle": 45, + "axis": "z", + "origin": [ + 7.60256, + 20.61879, + 8.025 + ] + }, + "faces": { + "north": { + "uv": [ + 3.5, + 2, + 4, + 2.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 2.5, + 3.5, + 3, + 4 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 3.5, + 2.5, + 4, + 3 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 3, + 3.5, + 3.5, + 4 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 4, + 3.5, + 3.5, + 3 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 4, + 3.5, + 3.5, + 4 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 8.21266, + 19.06784, + 7.9 + ], + "to": [ + 8.27516, + 20.25534, + 7.9625 + ], + "rotation": { + "angle": 22.5, + "axis": "z", + "origin": [ + 8.24391, + 19.66159, + 8.025 + ] + }, + "faces": { + "north": { + "uv": [ + 3, + 3, + 3.5, + 3.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 3.5, + 0, + 4, + 0.5 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 3.5, + 0.5, + 4, + 1 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 3.5, + 1, + 4, + 1.5 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 4, + 2, + 3.5, + 1.5 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 2.5, + 3.5, + 2, + 4 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 8.15016, + 19.06784, + 7.9 + ], + "to": [ + 8.21266, + 20.19284, + 7.9625 + ], + "rotation": { + "angle": 22.5, + "axis": "z", + "origin": [ + 8.24391, + 19.66159, + 8.025 + ] + }, + "faces": { + "north": { + "uv": [ + 4, + 4, + 4.5, + 4.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 4.5, + 0, + 5, + 0.5 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 4.5, + 0.5, + 5, + 1 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 4.5, + 1, + 5, + 1.5 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 5, + 2, + 4.5, + 1.5 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 2.5, + 4.5, + 2, + 5 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 8.08766, + 19.06784, + 7.9 + ], + "to": [ + 8.15016, + 20.00534, + 7.9625 + ], + "rotation": { + "angle": 22.5, + "axis": "z", + "origin": [ + 8.24391, + 19.66159, + 8.025 + ] + }, + "faces": { + "north": { + "uv": [ + 4.5, + 3.5, + 5, + 4 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 4, + 4.5, + 4.5, + 5 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 4.5, + 4, + 5, + 4.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 4.5, + 4.5, + 5, + 5 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 5.5, + 0.5, + 5, + 0 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 5.5, + 0.5, + 5, + 1 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 7.96266, + 19.06784, + 7.9 + ], + "to": [ + 8.08766, + 20.00534, + 7.9625 + ], + "rotation": { + "angle": 22.5, + "axis": "z", + "origin": [ + 8.24391, + 19.66159, + 8.025 + ] + }, + "faces": { + "north": { + "uv": [ + 3, + 5, + 3.5, + 5.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 5, + 3, + 5.5, + 3.5 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 3.5, + 5, + 4, + 5.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 5, + 3.5, + 5.5, + 4 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 4.5, + 5.5, + 4, + 5 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 5.5, + 4, + 5, + 4.5 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 7.83766, + 19.06784, + 7.9 + ], + "to": [ + 7.96266, + 19.88034, + 7.9625 + ], + "rotation": { + "angle": 22.5, + "axis": "z", + "origin": [ + 8.24391, + 19.66159, + 8.025 + ] + }, + "faces": { + "north": { + "uv": [ + 5.5, + 1.5, + 6, + 2 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 2, + 5.5, + 2.5, + 6 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 5.5, + 2, + 6, + 2.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 2.5, + 5.5, + 3, + 6 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 6, + 3, + 5.5, + 2.5 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 3.5, + 5.5, + 3, + 6 + ], + "texture": "#1" + } + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [ + 0, + 90, + 0 + ], + "translation": [ + 0.5, + 8, + 0.75 + ], + "scale": [ + 2.75, + 2.75, + 2.75 + ] + }, + "thirdperson_lefthand": { + "rotation": [ + 0, + 90, + 0 + ], + "translation": [ + 0.5, + 8, + 0.75 + ], + "scale": [ + 2.75, + 2.75, + 2.75 + ] + }, + "firstperson_righthand": { + "rotation": [ + 0, + 90, + 0 + ], + "translation": [ + 0, + 6, + 0 + ], + "scale": [ + 2.75, + 2.75, + 2.75 + ] + }, + "firstperson_lefthand": { + "rotation": [ + 0, + 90, + 0 + ], + "translation": [ + 0, + 6, + 0 + ], + "scale": [ + 2.75, + 2.75, + 2.75 + ] + }, + "ground": { + "translation": [ + 0, + 2, + 0 + ] + }, + "gui": { + "rotation": [ + 0, + 0, + -45 + ], + "translation": [ + -2.75, + -2.25, + 0 + ] + }, + "fixed": { + "rotation": [ + 0, + 0, + 45 + ], + "translation": [ + 3, + -2.25, + 0 + ] + } + }, + "groups": [ + { + "name": "Everything", + "origin": [ + 8, + 8, + 8 + ], + "color": 0, + "children": [ + { + "name": "Handle", + "origin": [ + 9.8371, + 3.74226, + 7.65625 + ], + "color": 0, + "children": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11 + ] + }, + 12, + 13, + 14, + 15, + { + "name": "Hilt", + "origin": [ + 7.18401, + 2.93149, + 7.65625 + ], + "color": 0, + "children": [ + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44 + ] + }, + { + "name": "Blade", + "origin": [ + 8, + 8, + 8 + ], + "color": 0, + "children": [ + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86 + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/surgebinding/resources/assets/surgebinding/models/item/elsecaller_honorblade.json b/src/surgebinding/resources/assets/surgebinding/models/item/elsecaller_honorblade.json new file mode 100644 index 000000000..7578c369f --- /dev/null +++ b/src/surgebinding/resources/assets/surgebinding/models/item/elsecaller_honorblade.json @@ -0,0 +1,1472 @@ +{ + "credit": "Made with Blockbench", + "texture_size": [32, 32], + "textures": { + "1": "surgebinding:item/models/shardblade_model/elsecaller_honorblade" + }, + "elements": [ + { + "from": [7.53393, 5.8374, 7.9375], + "to": [8.40893, 11.8374, 8.0625], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.09107, -0.6626, 0.4375]}, + "faces": { + "north": {"uv": [0, 0, 0.5, 3], "texture": "#1"}, + "east": {"uv": [0.5, 0, 1, 3], "texture": "#1"}, + "south": {"uv": [1, 0, 1.5, 3], "texture": "#1"}, + "west": {"uv": [1.5, 0, 2, 3], "texture": "#1"}, + "up": {"uv": [3, 1.5, 2.5, 1], "texture": "#1"}, + "down": {"uv": [3, 1.5, 2.5, 2], "texture": "#1"} + } + }, + { + "from": [8.34643, 7.3999, 7.9375], + "to": [8.47143, 7.8374, 8.0625], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8.69018, 7.61865, 8]}, + "faces": { + "north": {"uv": [6, 7, 6.5, 7.5], "texture": "#1"}, + "east": {"uv": [7, 6, 7.5, 6.5], "texture": "#1"}, + "south": {"uv": [6.5, 7, 7, 7.5], "texture": "#1"}, + "west": {"uv": [7, 6.5, 7.5, 7], "texture": "#1"}, + "up": {"uv": [7.5, 7.5, 7, 7], "texture": "#1"}, + "down": {"uv": [0.5, 7.5, 0, 8], "texture": "#1"} + } + }, + { + "from": [8.09643, 6.5874, 7.9375], + "to": [8.22143, 7.3374, 8.0625], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8.69018, 7.61865, 8]}, + "faces": { + "north": {"uv": [7.5, 0, 8, 0.5], "texture": "#1"}, + "east": {"uv": [0.5, 7.5, 1, 8], "texture": "#1"}, + "south": {"uv": [7.5, 0.5, 8, 1], "texture": "#1"}, + "west": {"uv": [1, 7.5, 1.5, 8], "texture": "#1"}, + "up": {"uv": [8, 1.5, 7.5, 1], "texture": "#1"}, + "down": {"uv": [2, 7.5, 1.5, 8], "texture": "#1"} + } + }, + { + "from": [7.9674, 6.64499, 7.9375], + "to": [8.7174, 6.76999, 8.0625], + "rotation": {"angle": -45, "axis": "z", "origin": [8.3424, 6.70749, 8]}, + "faces": { + "north": {"uv": [7.5, 1.5, 8, 2], "texture": "#1"}, + "east": {"uv": [2, 7.5, 2.5, 8], "texture": "#1"}, + "south": {"uv": [7.5, 2, 8, 2.5], "texture": "#1"}, + "west": {"uv": [2.5, 7.5, 3, 8], "texture": "#1"}, + "up": {"uv": [8, 3, 7.5, 2.5], "texture": "#1"}, + "down": {"uv": [3.5, 7.5, 3, 8], "texture": "#1"} + } + }, + { + "from": [8.2357, 5.59636, 7.9375], + "to": [8.3607, 6.47136, 8.0625], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8.2982, 6.22136, 8]}, + "faces": { + "north": {"uv": [7.5, 4.5, 8, 5], "texture": "#1"}, + "east": {"uv": [5, 7.5, 5.5, 8], "texture": "#1"}, + "south": {"uv": [7.5, 5, 8, 5.5], "texture": "#1"}, + "west": {"uv": [5.5, 7.5, 6, 8], "texture": "#1"}, + "up": {"uv": [8, 6, 7.5, 5.5], "texture": "#1"}, + "down": {"uv": [6.5, 7.5, 6, 8], "texture": "#1"} + } + }, + { + "from": [8.28354, 4.48087, 7.9375], + "to": [8.40854, 5.10587, 8.0625], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8.34604, 4.98087, 8]}, + "faces": { + "north": {"uv": [0, 8, 0.5, 8.5], "texture": "#1"}, + "east": {"uv": [8, 0, 8.5, 0.5], "texture": "#1"}, + "south": {"uv": [0.5, 8, 1, 8.5], "texture": "#1"}, + "west": {"uv": [8, 0.5, 8.5, 1], "texture": "#1"}, + "up": {"uv": [1.5, 8.5, 1, 8], "texture": "#1"}, + "down": {"uv": [8.5, 1, 8, 1.5], "texture": "#1"} + } + }, + { + "from": [8.40854, 4.79337, 7.9375], + "to": [8.53354, 5.10587, 8.0625], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8.34604, 4.98087, 8]}, + "faces": { + "north": {"uv": [12.5, 11.5, 13, 12], "texture": "#1"}, + "east": {"uv": [12, 12.5, 12.5, 13], "texture": "#1"}, + "south": {"uv": [12.5, 12, 13, 12.5], "texture": "#1"}, + "west": {"uv": [12.5, 12.5, 13, 13], "texture": "#1"}, + "up": {"uv": [0.5, 13.5, 0, 13], "texture": "#1"}, + "down": {"uv": [13.5, 0, 13, 0.5], "texture": "#1"} + } + }, + { + "from": [7.75673, 4.77871, 7.9375], + "to": [8.19423, 5.34121, 8.0625], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8.38173, 5.02871, 8]}, + "faces": { + "north": {"uv": [8.5, 6.5, 9, 7], "texture": "#1"}, + "east": {"uv": [7, 8.5, 7.5, 9], "texture": "#1"}, + "south": {"uv": [8.5, 7, 9, 7.5], "texture": "#1"}, + "west": {"uv": [7.5, 8.5, 8, 9], "texture": "#1"}, + "up": {"uv": [9, 8, 8.5, 7.5], "texture": "#1"}, + "down": {"uv": [8.5, 8.5, 8, 9], "texture": "#1"} + } + }, + { + "from": [8.11218, 4.38917, 7.9375], + "to": [8.23718, 4.76417, 8.0625], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8.17468, 4.57667, 8]}, + "faces": { + "north": {"uv": [8.5, 8, 9, 8.5], "texture": "#1"}, + "east": {"uv": [8.5, 8.5, 9, 9], "texture": "#1"}, + "south": {"uv": [0, 9, 0.5, 9.5], "texture": "#1"}, + "west": {"uv": [9, 0, 9.5, 0.5], "texture": "#1"}, + "up": {"uv": [1, 9.5, 0.5, 9], "texture": "#1"}, + "down": {"uv": [9.5, 0.5, 9, 1], "texture": "#1"} + } + }, + { + "from": [8.46501, 2.26126, 7.9375], + "to": [8.59001, 2.44876, 8.0625], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8.52751, 4.32376, 8]}, + "faces": { + "north": {"uv": [11.5, 8, 12, 8.5], "texture": "#1"}, + "east": {"uv": [8.5, 11.5, 9, 12], "texture": "#1"}, + "south": {"uv": [11.5, 8.5, 12, 9], "texture": "#1"}, + "west": {"uv": [9, 11.5, 9.5, 12], "texture": "#1"}, + "up": {"uv": [12, 9.5, 11.5, 9], "texture": "#1"}, + "down": {"uv": [10, 11.5, 9.5, 12], "texture": "#1"} + } + }, + { + "from": [7.96365, 2.37016, 7.9375], + "to": [8.08865, 2.55766, 8.0625], + "rotation": {"angle": 0, "axis": "z", "origin": [8.02615, 2.40141, 8]}, + "faces": { + "north": {"uv": [2.5, 12, 3, 12.5], "texture": "#1"}, + "east": {"uv": [12, 2.5, 12.5, 3], "texture": "#1"}, + "south": {"uv": [3, 12, 3.5, 12.5], "texture": "#1"}, + "west": {"uv": [12, 3, 12.5, 3.5], "texture": "#1"}, + "up": {"uv": [4, 12.5, 3.5, 12], "texture": "#1"}, + "down": {"uv": [12.5, 3.5, 12, 4], "texture": "#1"} + } + }, + { + "from": [8.00429, 2.54088, 7.9375], + "to": [8.12929, 2.60338, 8.0625], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8.06679, 2.44713, 8]}, + "faces": { + "north": {"uv": [1, 12, 1.5, 12.5], "texture": "#1"}, + "east": {"uv": [12, 1, 12.5, 1.5], "texture": "#1"}, + "south": {"uv": [1.5, 12, 2, 12.5], "texture": "#1"}, + "west": {"uv": [12, 1.5, 12.5, 2], "texture": "#1"}, + "up": {"uv": [2.5, 12.5, 2, 12], "texture": "#1"}, + "down": {"uv": [12.5, 2, 12, 2.5], "texture": "#1"} + } + }, + { + "from": [7.94449, 2.33633, 7.9375], + "to": [8.06949, 2.39883, 8.0625], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8.00699, 2.33633, 8]}, + "faces": { + "north": {"uv": [4, 12, 4.5, 12.5], "texture": "#1"}, + "east": {"uv": [12, 4, 12.5, 4.5], "texture": "#1"}, + "south": {"uv": [4.5, 12, 5, 12.5], "texture": "#1"}, + "west": {"uv": [12, 4.5, 12.5, 5], "texture": "#1"}, + "up": {"uv": [5.5, 12.5, 5, 12], "texture": "#1"}, + "down": {"uv": [12.5, 5, 12, 5.5], "texture": "#1"} + } + }, + { + "from": [7.91385, 2.06242, 7.9375], + "to": [8.03885, 2.37492, 8.0625], + "rotation": {"angle": -45, "axis": "z", "origin": [7.97635, 2.31242, 8]}, + "faces": { + "north": {"uv": [5.5, 12, 6, 12.5], "texture": "#1"}, + "east": {"uv": [12, 5.5, 12.5, 6], "texture": "#1"}, + "south": {"uv": [6, 12, 6.5, 12.5], "texture": "#1"}, + "west": {"uv": [12, 6, 12.5, 6.5], "texture": "#1"}, + "up": {"uv": [7, 12.5, 6.5, 12], "texture": "#1"}, + "down": {"uv": [12.5, 6.5, 12, 7], "texture": "#1"} + } + }, + { + "from": [7.65626, 2.09145, 7.9375], + "to": [7.84376, 2.21645, 8.0625], + "rotation": {"angle": 0, "axis": "z", "origin": [7.68751, 2.15395, 8]}, + "faces": { + "north": {"uv": [7, 12, 7.5, 12.5], "texture": "#1"}, + "east": {"uv": [12, 7, 12.5, 7.5], "texture": "#1"}, + "south": {"uv": [7.5, 12, 8, 12.5], "texture": "#1"}, + "west": {"uv": [12, 7.5, 12.5, 8], "texture": "#1"}, + "up": {"uv": [8.5, 12.5, 8, 12], "texture": "#1"}, + "down": {"uv": [12.5, 8, 12, 8.5], "texture": "#1"} + } + }, + { + "from": [7.63834, 2.09029, 7.9375], + "to": [7.82584, 2.21529, 8.0625], + "rotation": {"angle": 0, "axis": "z", "origin": [7.66959, 2.15279, 8]}, + "faces": { + "north": {"uv": [11.5, 12, 12, 12.5], "texture": "#1"}, + "east": {"uv": [12, 11.5, 12.5, 12], "texture": "#1"}, + "south": {"uv": [12, 12, 12.5, 12.5], "texture": "#1"}, + "west": {"uv": [0, 12.5, 0.5, 13], "texture": "#1"}, + "up": {"uv": [13, 0.5, 12.5, 0], "texture": "#1"}, + "down": {"uv": [1, 12.5, 0.5, 13], "texture": "#1"} + } + }, + { + "from": [8.40277, 2.01087, 7.9375], + "to": [8.52777, 2.26087, 8.0625], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8.46527, 4.13587, 8]}, + "faces": { + "north": {"uv": [11.5, 11, 12, 11.5], "texture": "#1"}, + "east": {"uv": [11.5, 11.5, 12, 12], "texture": "#1"}, + "south": {"uv": [0, 12, 0.5, 12.5], "texture": "#1"}, + "west": {"uv": [12, 0, 12.5, 0.5], "texture": "#1"}, + "up": {"uv": [1, 12.5, 0.5, 12], "texture": "#1"}, + "down": {"uv": [12.5, 0.5, 12, 1], "texture": "#1"} + } + }, + { + "from": [7.61157, 2.10983, 7.9375], + "to": [7.73657, 2.22483, 8.0625], + "rotation": {"angle": 22.5, "axis": "z", "origin": [7.67407, 2.16733, 8]}, + "faces": { + "north": {"uv": [8.5, 12, 9, 12.5], "texture": "#1"}, + "east": {"uv": [12, 8.5, 12.5, 9], "texture": "#1"}, + "south": {"uv": [9, 12, 9.5, 12.5], "texture": "#1"}, + "west": {"uv": [12, 9, 12.5, 9.5], "texture": "#1"}, + "up": {"uv": [10, 12.5, 9.5, 12], "texture": "#1"}, + "down": {"uv": [12.5, 9.5, 12, 10], "texture": "#1"} + } + }, + { + "from": [7.58325, 2.09587, 7.9375], + "to": [7.67325, 2.17587, 8.0625], + "rotation": {"angle": -22.5, "axis": "z", "origin": [7.64075, 2.15837, 8]}, + "faces": { + "north": {"uv": [12.5, 0.5, 13, 1], "texture": "#1"}, + "east": {"uv": [1, 12.5, 1.5, 13], "texture": "#1"}, + "south": {"uv": [12.5, 1, 13, 1.5], "texture": "#1"}, + "west": {"uv": [1.5, 12.5, 2, 13], "texture": "#1"}, + "up": {"uv": [13, 2, 12.5, 1.5], "texture": "#1"}, + "down": {"uv": [2.5, 12.5, 2, 13], "texture": "#1"} + } + }, + { + "from": [7.68048, 2.37967, 7.9375], + "to": [7.80548, 2.44217, 8.0625], + "rotation": {"angle": 0, "axis": "z", "origin": [7.74298, 2.41092, 8]}, + "faces": { + "north": {"uv": [10, 12, 10.5, 12.5], "texture": "#1"}, + "east": {"uv": [12, 10, 12.5, 10.5], "texture": "#1"}, + "south": {"uv": [10.5, 12, 11, 12.5], "texture": "#1"}, + "west": {"uv": [12, 10.5, 12.5, 11], "texture": "#1"}, + "up": {"uv": [11.5, 12.5, 11, 12], "texture": "#1"}, + "down": {"uv": [12.5, 11, 12, 11.5], "texture": "#1"} + } + }, + { + "from": [7.96867, 3.65359, 7.9375], + "to": [8.09367, 4.02859, 8.0625], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8.03117, 3.84109, 8]}, + "faces": { + "north": {"uv": [11.5, 6.5, 12, 7], "texture": "#1"}, + "east": {"uv": [7, 11.5, 7.5, 12], "texture": "#1"}, + "south": {"uv": [11.5, 7, 12, 7.5], "texture": "#1"}, + "west": {"uv": [7.5, 11.5, 8, 12], "texture": "#1"}, + "up": {"uv": [12, 8, 11.5, 7.5], "texture": "#1"}, + "down": {"uv": [8.5, 11.5, 8, 12], "texture": "#1"} + } + }, + { + "from": [7.91067, 4.1779, 7.9375], + "to": [8.16067, 4.6779, 8.0625], + "rotation": {"angle": 0, "axis": "z", "origin": [8.03567, 4.37953, 8]}, + "faces": { + "north": {"uv": [3, 11, 3.5, 11.5], "texture": "#1"}, + "east": {"uv": [11, 3, 11.5, 3.5], "texture": "#1"}, + "south": {"uv": [3.5, 11, 4, 11.5], "texture": "#1"}, + "west": {"uv": [11, 3.5, 11.5, 4], "texture": "#1"}, + "up": {"uv": [4.5, 11.5, 4, 11], "texture": "#1"}, + "down": {"uv": [11.5, 4, 11, 4.5], "texture": "#1"} + } + }, + { + "from": [7.91067, 3.9904, 7.9375], + "to": [8.16067, 4.1779, 8.0625], + "rotation": {"angle": 0, "axis": "z", "origin": [8.03567, 4.37953, 8]}, + "faces": { + "north": {"uv": [3.5, 13, 4, 13.5], "texture": "#1"}, + "east": {"uv": [13, 3.5, 13.5, 4], "texture": "#1"}, + "south": {"uv": [4, 13, 4.5, 13.5], "texture": "#1"}, + "west": {"uv": [13, 4, 13.5, 4.5], "texture": "#1"}, + "up": {"uv": [5, 13.5, 4.5, 13], "texture": "#1"}, + "down": {"uv": [13.5, 4.5, 13, 5], "texture": "#1"} + } + }, + { + "from": [7.75224, 2.5529, 7.9375], + "to": [8.06474, 2.6154, 8.0625], + "rotation": {"angle": 0, "axis": "z", "origin": [8.50224, 4.0529, 8]}, + "faces": { + "north": {"uv": [12.5, 2, 13, 2.5], "texture": "#1"}, + "east": {"uv": [2.5, 12.5, 3, 13], "texture": "#1"}, + "south": {"uv": [12.5, 2.5, 13, 3], "texture": "#1"}, + "west": {"uv": [3, 12.5, 3.5, 13], "texture": "#1"}, + "up": {"uv": [13, 3.5, 12.5, 3], "texture": "#1"}, + "down": {"uv": [4, 12.5, 3.5, 13], "texture": "#1"} + } + }, + { + "from": [7.75224, 2.6154, 7.9375], + "to": [8.06474, 4.1779, 8.0625], + "rotation": {"angle": 0, "axis": "z", "origin": [8.50224, 4.0529, 8]}, + "faces": { + "north": {"uv": [2, 0, 2.5, 1], "texture": "#1"}, + "east": {"uv": [2, 1, 2.5, 2], "texture": "#1"}, + "south": {"uv": [2, 2, 2.5, 3], "texture": "#1"}, + "west": {"uv": [2.5, 0, 3, 1], "texture": "#1"}, + "up": {"uv": [13, 5.5, 12.5, 5], "texture": "#1"}, + "down": {"uv": [6, 12.5, 5.5, 13], "texture": "#1"} + } + }, + { + "from": [7.75224, 4.1779, 7.9375], + "to": [8.00224, 4.2404, 8.0625], + "rotation": {"angle": 0, "axis": "z", "origin": [8.50224, 4.0529, 8]}, + "faces": { + "north": {"uv": [12.5, 3.5, 13, 4], "texture": "#1"}, + "east": {"uv": [4, 12.5, 4.5, 13], "texture": "#1"}, + "south": {"uv": [12.5, 4, 13, 4.5], "texture": "#1"}, + "west": {"uv": [4.5, 12.5, 5, 13], "texture": "#1"}, + "up": {"uv": [13, 5, 12.5, 4.5], "texture": "#1"}, + "down": {"uv": [5.5, 12.5, 5, 13], "texture": "#1"} + } + }, + { + "from": [8.03567, 4.1779, 7.9375], + "to": [8.16067, 4.2404, 8.0625], + "rotation": {"angle": 0, "axis": "z", "origin": [8.34817, 4.0529, 8]}, + "faces": { + "north": {"uv": [2, 13, 2.5, 13.5], "texture": "#1"}, + "east": {"uv": [13, 2, 13.5, 2.5], "texture": "#1"}, + "south": {"uv": [2.5, 13, 3, 13.5], "texture": "#1"}, + "west": {"uv": [13, 2.5, 13.5, 3], "texture": "#1"}, + "up": {"uv": [3.5, 13.5, 3, 13], "texture": "#1"}, + "down": {"uv": [13.5, 3, 13, 3.5], "texture": "#1"} + } + }, + { + "from": [8.24046, 5.07244, 7.9375], + "to": [8.49046, 5.19744, 8.0625], + "rotation": {"angle": 0, "axis": "z", "origin": [8.30296, 5.38494, 8]}, + "faces": { + "north": {"uv": [1.5, 8, 2, 8.5], "texture": "#1"}, + "east": {"uv": [8, 1.5, 8.5, 2], "texture": "#1"}, + "south": {"uv": [2, 8, 2.5, 8.5], "texture": "#1"}, + "west": {"uv": [8, 2, 8.5, 2.5], "texture": "#1"}, + "up": {"uv": [3, 8.5, 2.5, 8], "texture": "#1"}, + "down": {"uv": [8.5, 2.5, 8, 3], "texture": "#1"} + } + }, + { + "from": [8.03567, 5.07244, 7.9375], + "to": [8.16067, 5.13494, 8.0625], + "rotation": {"angle": 0, "axis": "z", "origin": [8.34817, 5.38494, 8]}, + "faces": { + "north": {"uv": [8.5, 5, 9, 5.5], "texture": "#1"}, + "east": {"uv": [5.5, 8.5, 6, 9], "texture": "#1"}, + "south": {"uv": [8.5, 5.5, 9, 6], "texture": "#1"}, + "west": {"uv": [6, 8.5, 6.5, 9], "texture": "#1"}, + "up": {"uv": [9, 6.5, 8.5, 6], "texture": "#1"}, + "down": {"uv": [7, 8.5, 6.5, 9], "texture": "#1"} + } + }, + { + "from": [8.22375, 5.09398, 7.9375], + "to": [8.34875, 5.21898, 8.0625], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8.28625, 5.18773, 8]}, + "faces": { + "north": {"uv": [3, 8, 3.5, 8.5], "texture": "#1"}, + "east": {"uv": [8, 3, 8.5, 3.5], "texture": "#1"}, + "south": {"uv": [3.5, 8, 4, 8.5], "texture": "#1"}, + "west": {"uv": [8, 3.5, 8.5, 4], "texture": "#1"}, + "up": {"uv": [4.5, 8.5, 4, 8], "texture": "#1"}, + "down": {"uv": [8.5, 4, 8, 4.5], "texture": "#1"} + } + }, + { + "from": [8.20324, 5.18717, 7.9375], + "to": [8.32824, 5.24967, 8.0625], + "rotation": {"angle": 45, "axis": "z", "origin": [8.26574, 5.21842, 8]}, + "faces": { + "north": {"uv": [4.5, 8, 5, 8.5], "texture": "#1"}, + "east": {"uv": [8, 4.5, 8.5, 5], "texture": "#1"}, + "south": {"uv": [5, 8, 5.5, 8.5], "texture": "#1"}, + "west": {"uv": [8, 5, 8.5, 5.5], "texture": "#1"}, + "up": {"uv": [6, 8.5, 5.5, 8], "texture": "#1"}, + "down": {"uv": [8.5, 5.5, 8, 6], "texture": "#1"} + } + }, + { + "from": [8.2038, 5.18363, 7.9375], + "to": [8.2663, 5.30863, 8.0625], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8.21694, 5.24253, 8]}, + "faces": { + "north": {"uv": [7.5, 8, 8, 8.5], "texture": "#1"}, + "east": {"uv": [8, 7.5, 8.5, 8], "texture": "#1"}, + "south": {"uv": [8, 8, 8.5, 8.5], "texture": "#1"}, + "west": {"uv": [0, 8.5, 0.5, 9], "texture": "#1"}, + "up": {"uv": [9, 0.5, 8.5, 0], "texture": "#1"}, + "down": {"uv": [1, 8.5, 0.5, 9], "texture": "#1"} + } + }, + { + "from": [8.07289, 5.18717, 7.9375], + "to": [8.19789, 5.24967, 8.0625], + "rotation": {"angle": -45, "axis": "z", "origin": [8.13539, 5.21842, 8]}, + "faces": { + "north": {"uv": [8.5, 3.5, 9, 4], "texture": "#1"}, + "east": {"uv": [4, 8.5, 4.5, 9], "texture": "#1"}, + "south": {"uv": [8.5, 4, 9, 4.5], "texture": "#1"}, + "west": {"uv": [4.5, 8.5, 5, 9], "texture": "#1"}, + "up": {"uv": [9, 5, 8.5, 4.5], "texture": "#1"}, + "down": {"uv": [5.5, 8.5, 5, 9], "texture": "#1"} + } + }, + { + "from": [8.13483, 5.18363, 7.9375], + "to": [8.19733, 5.30863, 8.0625], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8.18418, 5.24253, 8]}, + "faces": { + "north": {"uv": [8.5, 2, 9, 2.5], "texture": "#1"}, + "east": {"uv": [2.5, 8.5, 3, 9], "texture": "#1"}, + "south": {"uv": [8.5, 2.5, 9, 3], "texture": "#1"}, + "west": {"uv": [3, 8.5, 3.5, 9], "texture": "#1"}, + "up": {"uv": [9, 3.5, 8.5, 3], "texture": "#1"}, + "down": {"uv": [4, 8.5, 3.5, 9], "texture": "#1"} + } + }, + { + "from": [8.05238, 5.09398, 7.9375], + "to": [8.17738, 5.21898, 8.0625], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8.11488, 5.18773, 8]}, + "faces": { + "north": {"uv": [8.5, 0.5, 9, 1], "texture": "#1"}, + "east": {"uv": [1, 8.5, 1.5, 9], "texture": "#1"}, + "south": {"uv": [8.5, 1, 9, 1.5], "texture": "#1"}, + "west": {"uv": [1.5, 8.5, 2, 9], "texture": "#1"}, + "up": {"uv": [9, 2, 8.5, 1.5], "texture": "#1"}, + "down": {"uv": [2.5, 8.5, 2, 9], "texture": "#1"} + } + }, + { + "from": [8.16759, 5.18363, 7.9375], + "to": [8.23009, 5.30863, 8.0625], + "rotation": {"angle": 0, "axis": "z", "origin": [8.21694, 5.24253, 8]}, + "faces": { + "north": {"uv": [6, 8, 6.5, 8.5], "texture": "#1"}, + "east": {"uv": [8, 6, 8.5, 6.5], "texture": "#1"}, + "south": {"uv": [6.5, 8, 7, 8.5], "texture": "#1"}, + "west": {"uv": [8, 6.5, 8.5, 7], "texture": "#1"}, + "up": {"uv": [7.5, 8.5, 7, 8], "texture": "#1"}, + "down": {"uv": [8.5, 7, 8, 7.5], "texture": "#1"} + } + }, + { + "from": [8.47012, 4.54285, 7.9375], + "to": [8.59512, 5.66785, 8.0625], + "rotation": {"angle": 0, "axis": "z", "origin": [8.40762, 5.98035, 8]}, + "faces": { + "north": {"uv": [7.5, 6, 8, 6.5], "texture": "#1"}, + "east": {"uv": [6.5, 7.5, 7, 8], "texture": "#1"}, + "south": {"uv": [7.5, 6.5, 8, 7], "texture": "#1"}, + "west": {"uv": [7, 7.5, 7.5, 8], "texture": "#1"}, + "up": {"uv": [8, 7.5, 7.5, 7], "texture": "#1"}, + "down": {"uv": [8, 7.5, 7.5, 8], "texture": "#1"} + } + }, + { + "from": [7.59643, 5.8374, 7.9375], + "to": [8.03393, 6.7124, 8.0625], + "rotation": {"angle": -22.5, "axis": "z", "origin": [7.62768, 6.5874, 8]}, + "faces": { + "north": {"uv": [6.5, 0.5, 7, 1], "texture": "#1"}, + "east": {"uv": [1, 6.5, 1.5, 7], "texture": "#1"}, + "south": {"uv": [6.5, 1, 7, 1.5], "texture": "#1"}, + "west": {"uv": [1.5, 6.5, 2, 7], "texture": "#1"}, + "up": {"uv": [7, 2, 6.5, 1.5], "texture": "#1"}, + "down": {"uv": [2.5, 6.5, 2, 7], "texture": "#1"} + } + }, + { + "from": [7.71394, 5.42738, 7.9375], + "to": [7.77644, 5.73988, 8.0625], + "rotation": {"angle": -45, "axis": "z", "origin": [7.74519, 6.30238, 8]}, + "faces": { + "north": {"uv": [6.5, 2, 7, 2.5], "texture": "#1"}, + "east": {"uv": [2.5, 6.5, 3, 7], "texture": "#1"}, + "south": {"uv": [6.5, 2.5, 7, 3], "texture": "#1"}, + "west": {"uv": [3, 6.5, 3.5, 7], "texture": "#1"}, + "up": {"uv": [7, 3.5, 6.5, 3], "texture": "#1"}, + "down": {"uv": [4, 6.5, 3.5, 7], "texture": "#1"} + } + }, + { + "from": [8.13273, 5.18383, 7.9375], + "to": [8.63273, 5.49633, 8.0625], + "rotation": {"angle": 45, "axis": "z", "origin": [7.66398, 4.68383, 8]}, + "faces": { + "north": {"uv": [6.5, 3.5, 7, 4], "texture": "#1"}, + "east": {"uv": [4, 6.5, 4.5, 7], "texture": "#1"}, + "south": {"uv": [6.5, 4, 7, 4.5], "texture": "#1"}, + "west": {"uv": [4.5, 6.5, 5, 7], "texture": "#1"}, + "up": {"uv": [7, 5, 6.5, 4.5], "texture": "#1"}, + "down": {"uv": [5.5, 6.5, 5, 7], "texture": "#1"} + } + }, + { + "from": [8.94523, 5.68383, 7.9375], + "to": [9.25773, 5.87133, 8.0625], + "rotation": {"angle": 45, "axis": "z", "origin": [8.60148, 4.30883, 8]}, + "faces": { + "north": {"uv": [1, 9, 1.5, 9.5], "texture": "#1"}, + "east": {"uv": [9, 1, 9.5, 1.5], "texture": "#1"}, + "south": {"uv": [1.5, 9, 2, 9.5], "texture": "#1"}, + "west": {"uv": [9, 1.5, 9.5, 2], "texture": "#1"}, + "up": {"uv": [2.5, 9.5, 2, 9], "texture": "#1"}, + "down": {"uv": [9.5, 2, 9, 2.5], "texture": "#1"} + } + }, + { + "from": [7.76834, 5.58831, 7.9375], + "to": [7.95584, 5.65081, 8.0625], + "rotation": {"angle": -22.5, "axis": "z", "origin": [7.86209, 5.61956, 8]}, + "faces": { + "north": {"uv": [2.5, 9, 3, 9.5], "texture": "#1"}, + "east": {"uv": [9, 2.5, 9.5, 3], "texture": "#1"}, + "south": {"uv": [3, 9, 3.5, 9.5], "texture": "#1"}, + "west": {"uv": [9, 3, 9.5, 3.5], "texture": "#1"}, + "up": {"uv": [4, 9.5, 3.5, 9], "texture": "#1"}, + "down": {"uv": [9.5, 3.5, 9, 4], "texture": "#1"} + } + }, + { + "from": [7.74925, 5.17982, 7.9375], + "to": [7.93675, 5.67982, 8.0625], + "rotation": {"angle": 0, "axis": "z", "origin": [7.85254, 5.47557, 8]}, + "faces": { + "north": {"uv": [5.5, 9, 6, 9.5], "texture": "#1"}, + "east": {"uv": [9, 5.5, 9.5, 6], "texture": "#1"}, + "south": {"uv": [6, 9, 6.5, 9.5], "texture": "#1"}, + "west": {"uv": [9, 6, 9.5, 6.5], "texture": "#1"}, + "up": {"uv": [7, 9.5, 6.5, 9], "texture": "#1"}, + "down": {"uv": [9.5, 6.5, 9, 7], "texture": "#1"} + } + }, + { + "from": [7.74925, 5.39632, 7.9375], + "to": [7.93675, 5.45882, 8.0625], + "rotation": {"angle": 22.5, "axis": "z", "origin": [7.85254, 5.47557, 8]}, + "faces": { + "north": {"uv": [4, 9, 4.5, 9.5], "texture": "#1"}, + "east": {"uv": [9, 4, 9.5, 4.5], "texture": "#1"}, + "south": {"uv": [4.5, 9, 5, 9.5], "texture": "#1"}, + "west": {"uv": [9, 4.5, 9.5, 5], "texture": "#1"}, + "up": {"uv": [5.5, 9.5, 5, 9], "texture": "#1"}, + "down": {"uv": [9.5, 5, 9, 5.5], "texture": "#1"} + } + }, + { + "from": [8.16342, 5.71461, 7.9375], + "to": [8.35092, 5.90211, 8.0625], + "rotation": {"angle": -45, "axis": "z", "origin": [8.13454, 5.73768, 8]}, + "faces": { + "north": {"uv": [9.5, 2, 10, 2.5], "texture": "#1"}, + "east": {"uv": [2.5, 9.5, 3, 10], "texture": "#1"}, + "south": {"uv": [9.5, 2.5, 10, 3], "texture": "#1"}, + "west": {"uv": [3, 9.5, 3.5, 10], "texture": "#1"}, + "up": {"uv": [10, 3.5, 9.5, 3], "texture": "#1"}, + "down": {"uv": [4, 9.5, 3.5, 10], "texture": "#1"} + } + }, + { + "from": [8.14764, 5.6814, 7.9375], + "to": [8.21014, 5.8689, 8.0625], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8.13454, 5.73768, 8]}, + "faces": { + "north": {"uv": [9.5, 0.5, 10, 1], "texture": "#1"}, + "east": {"uv": [1, 9.5, 1.5, 10], "texture": "#1"}, + "south": {"uv": [9.5, 1, 10, 1.5], "texture": "#1"}, + "west": {"uv": [1.5, 9.5, 2, 10], "texture": "#1"}, + "up": {"uv": [10, 2, 9.5, 1.5], "texture": "#1"}, + "down": {"uv": [2.5, 9.5, 2, 10], "texture": "#1"} + } + }, + { + "from": [7.98376, 5.71254, 7.9375], + "to": [8.04626, 5.90004, 8.0625], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8.13454, 5.73768, 8]}, + "faces": { + "north": {"uv": [8.5, 9, 9, 9.5], "texture": "#1"}, + "east": {"uv": [9, 8.5, 9.5, 9], "texture": "#1"}, + "south": {"uv": [9, 9, 9.5, 9.5], "texture": "#1"}, + "west": {"uv": [0, 9.5, 0.5, 10], "texture": "#1"}, + "up": {"uv": [10, 0.5, 9.5, 0], "texture": "#1"}, + "down": {"uv": [1, 9.5, 0.5, 10], "texture": "#1"} + } + }, + { + "from": [7.7501, 5.68067, 7.9375], + "to": [8.5001, 5.86817, 8.0625], + "rotation": {"angle": 0, "axis": "z", "origin": [8.13454, 5.73768, 8]}, + "faces": { + "north": {"uv": [7, 9, 7.5, 9.5], "texture": "#1"}, + "east": {"uv": [9, 7, 9.5, 7.5], "texture": "#1"}, + "south": {"uv": [7.5, 9, 8, 9.5], "texture": "#1"}, + "west": {"uv": [9, 7.5, 9.5, 8], "texture": "#1"}, + "up": {"uv": [8.5, 9.5, 8, 9], "texture": "#1"}, + "down": {"uv": [9.5, 8, 9, 8.5], "texture": "#1"} + } + }, + { + "from": [8.22705, 5.31501, 7.9375], + "to": [8.41455, 5.62751, 8.0625], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8.21338, 5.43732, 8]}, + "faces": { + "north": {"uv": [1.5, 10, 2, 10.5], "texture": "#1"}, + "east": {"uv": [10, 1.5, 10.5, 2], "texture": "#1"}, + "south": {"uv": [2, 10, 2.5, 10.5], "texture": "#1"}, + "west": {"uv": [10, 2, 10.5, 2.5], "texture": "#1"}, + "up": {"uv": [3, 10.5, 2.5, 10], "texture": "#1"}, + "down": {"uv": [10.5, 2.5, 10, 3], "texture": "#1"} + } + }, + { + "from": [8.25095, 5.30482, 7.9375], + "to": [8.50095, 5.74232, 8.0625], + "rotation": {"angle": 0, "axis": "z", "origin": [8.21338, 5.43732, 8]}, + "faces": { + "north": {"uv": [0, 10, 0.5, 10.5], "texture": "#1"}, + "east": {"uv": [10, 0, 10.5, 0.5], "texture": "#1"}, + "south": {"uv": [0.5, 10, 1, 10.5], "texture": "#1"}, + "west": {"uv": [10, 0.5, 10.5, 1], "texture": "#1"}, + "up": {"uv": [1.5, 10.5, 1, 10], "texture": "#1"}, + "down": {"uv": [10.5, 1, 10, 1.5], "texture": "#1"} + } + }, + { + "from": [8.29306, 5.53149, 7.9375], + "to": [8.48056, 5.59399, 8.0625], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8.21338, 5.43732, 8]}, + "faces": { + "north": {"uv": [9.5, 8, 10, 8.5], "texture": "#1"}, + "east": {"uv": [8.5, 9.5, 9, 10], "texture": "#1"}, + "south": {"uv": [9.5, 8.5, 10, 9], "texture": "#1"}, + "west": {"uv": [9, 9.5, 9.5, 10], "texture": "#1"}, + "up": {"uv": [10, 9.5, 9.5, 9], "texture": "#1"}, + "down": {"uv": [10, 9.5, 9.5, 10], "texture": "#1"} + } + }, + { + "from": [8.04221, 5.21814, 7.9375], + "to": [8.22971, 5.40564, 8.0625], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8.21338, 5.43732, 8]}, + "faces": { + "north": {"uv": [9.5, 6.5, 10, 7], "texture": "#1"}, + "east": {"uv": [7, 9.5, 7.5, 10], "texture": "#1"}, + "south": {"uv": [9.5, 7, 10, 7.5], "texture": "#1"}, + "west": {"uv": [7.5, 9.5, 8, 10], "texture": "#1"}, + "up": {"uv": [10, 8, 9.5, 7.5], "texture": "#1"}, + "down": {"uv": [8.5, 9.5, 8, 10], "texture": "#1"} + } + }, + { + "from": [8.22498, 5.38253, 7.9375], + "to": [8.41248, 5.44503, 8.0625], + "rotation": {"angle": -45, "axis": "z", "origin": [8.21338, 5.43732, 8]}, + "faces": { + "north": {"uv": [9.5, 5, 10, 5.5], "texture": "#1"}, + "east": {"uv": [5.5, 9.5, 6, 10], "texture": "#1"}, + "south": {"uv": [9.5, 5.5, 10, 6], "texture": "#1"}, + "west": {"uv": [6, 9.5, 6.5, 10], "texture": "#1"}, + "up": {"uv": [10, 6.5, 9.5, 6], "texture": "#1"}, + "down": {"uv": [7, 9.5, 6.5, 10], "texture": "#1"} + } + }, + { + "from": [7.6251, 5.17896, 7.9375], + "to": [8.5001, 5.36646, 8.0625], + "rotation": {"angle": 0, "axis": "z", "origin": [8.21338, 5.43732, 8]}, + "faces": { + "north": {"uv": [9.5, 3.5, 10, 4], "texture": "#1"}, + "east": {"uv": [4, 9.5, 4.5, 10], "texture": "#1"}, + "south": {"uv": [9.5, 4, 10, 4.5], "texture": "#1"}, + "west": {"uv": [4.5, 9.5, 5, 10], "texture": "#1"}, + "up": {"uv": [10, 5, 9.5, 4.5], "texture": "#1"}, + "down": {"uv": [5.5, 9.5, 5, 10], "texture": "#1"} + } + }, + { + "from": [7.97391, 5.2157, 7.9375], + "to": [8.03641, 5.4032, 8.0625], + "rotation": {"angle": -22.5, "axis": "z", "origin": [7.95716, 5.319, 8]}, + "faces": { + "north": {"uv": [4.5, 10, 5, 10.5], "texture": "#1"}, + "east": {"uv": [10, 4.5, 10.5, 5], "texture": "#1"}, + "south": {"uv": [5, 10, 5.5, 10.5], "texture": "#1"}, + "west": {"uv": [10, 5, 10.5, 5.5], "texture": "#1"}, + "up": {"uv": [6, 10.5, 5.5, 10], "texture": "#1"}, + "down": {"uv": [10.5, 5.5, 10, 6], "texture": "#1"} + } + }, + { + "from": [7.81541, 5.2157, 7.9375], + "to": [8.00291, 5.4032, 8.0625], + "rotation": {"angle": -45, "axis": "z", "origin": [7.95716, 5.319, 8]}, + "faces": { + "north": {"uv": [3, 10, 3.5, 10.5], "texture": "#1"}, + "east": {"uv": [10, 3, 10.5, 3.5], "texture": "#1"}, + "south": {"uv": [3.5, 10, 4, 10.5], "texture": "#1"}, + "west": {"uv": [10, 3.5, 10.5, 4], "texture": "#1"}, + "up": {"uv": [4.5, 10.5, 4, 10], "texture": "#1"}, + "down": {"uv": [10.5, 4, 10, 4.5], "texture": "#1"} + } + }, + { + "from": [7.2704, 5.5978, 7.9375], + "to": [7.5829, 5.9103, 8.0625], + "rotation": {"angle": -22.5, "axis": "z", "origin": [7.3954, 5.62905, 8]}, + "faces": { + "north": {"uv": [6.5, 5, 7, 5.5], "texture": "#1"}, + "east": {"uv": [5.5, 6.5, 6, 7], "texture": "#1"}, + "south": {"uv": [6.5, 5.5, 7, 6], "texture": "#1"}, + "west": {"uv": [6, 6.5, 6.5, 7], "texture": "#1"}, + "up": {"uv": [7, 6.5, 6.5, 6], "texture": "#1"}, + "down": {"uv": [7, 6.5, 6.5, 7], "texture": "#1"} + } + }, + { + "from": [7.2079, 5.5978, 7.9375], + "to": [7.2704, 5.8478, 8.0625], + "rotation": {"angle": -22.5, "axis": "z", "origin": [7.3954, 5.62905, 8]}, + "faces": { + "north": {"uv": [12.5, 8.5, 13, 9], "texture": "#1"}, + "east": {"uv": [9, 12.5, 9.5, 13], "texture": "#1"}, + "south": {"uv": [12.5, 9, 13, 9.5], "texture": "#1"}, + "west": {"uv": [9.5, 12.5, 10, 13], "texture": "#1"}, + "up": {"uv": [13, 10, 12.5, 9.5], "texture": "#1"}, + "down": {"uv": [10.5, 12.5, 10, 13], "texture": "#1"} + } + }, + { + "from": [7.1454, 5.5978, 7.9375], + "to": [7.2079, 5.6978, 8.0625], + "rotation": {"angle": -22.5, "axis": "z", "origin": [7.3954, 5.62905, 8]}, + "faces": { + "north": {"uv": [12.5, 10, 13, 10.5], "texture": "#1"}, + "east": {"uv": [10.5, 12.5, 11, 13], "texture": "#1"}, + "south": {"uv": [12.5, 10.5, 13, 11], "texture": "#1"}, + "west": {"uv": [11, 12.5, 11.5, 13], "texture": "#1"}, + "up": {"uv": [13, 11.5, 12.5, 11], "texture": "#1"}, + "down": {"uv": [12, 12.5, 11.5, 13], "texture": "#1"} + } + }, + { + "from": [7.10438, 5.64326, 7.9375], + "to": [7.29188, 5.70576, 8.0625], + "rotation": {"angle": 0, "axis": "z", "origin": [7.22938, 5.67451, 8]}, + "faces": { + "north": {"uv": [0, 7, 0.5, 7.5], "texture": "#1"}, + "east": {"uv": [7, 0, 7.5, 0.5], "texture": "#1"}, + "south": {"uv": [0.5, 7, 1, 7.5], "texture": "#1"}, + "west": {"uv": [7, 0.5, 7.5, 1], "texture": "#1"}, + "up": {"uv": [1.5, 7.5, 1, 7], "texture": "#1"}, + "down": {"uv": [7.5, 1, 7, 1.5], "texture": "#1"} + } + }, + { + "from": [7.60694, 5.1407, 7.9375], + "to": [7.98194, 5.3282, 8.0625], + "rotation": {"angle": 0, "axis": "z", "origin": [7.59273, 5.2032, 8]}, + "faces": { + "north": {"uv": [3, 7, 3.5, 7.5], "texture": "#1"}, + "east": {"uv": [7, 3, 7.5, 3.5], "texture": "#1"}, + "south": {"uv": [3.5, 7, 4, 7.5], "texture": "#1"}, + "west": {"uv": [7, 3.5, 7.5, 4], "texture": "#1"}, + "up": {"uv": [4.5, 7.5, 4, 7], "texture": "#1"}, + "down": {"uv": [7.5, 4, 7, 4.5], "texture": "#1"} + } + }, + { + "from": [7.57344, 4.65979, 7.9375], + "to": [7.94844, 5.22229, 8.0625], + "rotation": {"angle": -22.5, "axis": "z", "origin": [7.60469, 5.06604, 8]}, + "faces": { + "north": {"uv": [4.5, 7, 5, 7.5], "texture": "#1"}, + "east": {"uv": [7, 4.5, 7.5, 5], "texture": "#1"}, + "south": {"uv": [5, 7, 5.5, 7.5], "texture": "#1"}, + "west": {"uv": [7, 5, 7.5, 5.5], "texture": "#1"}, + "up": {"uv": [6, 7.5, 5.5, 7], "texture": "#1"}, + "down": {"uv": [7.5, 5.5, 7, 6], "texture": "#1"} + } + }, + { + "from": [7.42036, 4.64017, 7.9375], + "to": [7.54536, 4.70267, 8.0625], + "rotation": {"angle": 0, "axis": "z", "origin": [7.45161, 4.45267, 8]}, + "faces": { + "north": {"uv": [9, 10, 9.5, 10.5], "texture": "#1"}, + "east": {"uv": [10, 9, 10.5, 9.5], "texture": "#1"}, + "south": {"uv": [9.5, 10, 10, 10.5], "texture": "#1"}, + "west": {"uv": [10, 9.5, 10.5, 10], "texture": "#1"}, + "up": {"uv": [10.5, 10.5, 10, 10], "texture": "#1"}, + "down": {"uv": [0.5, 10.5, 0, 11], "texture": "#1"} + } + }, + { + "from": [7.53742, 4.49601, 7.9375], + "to": [7.59992, 4.62101, 8.0625], + "rotation": {"angle": 0, "axis": "z", "origin": [7.56867, 4.30851, 8]}, + "faces": { + "north": {"uv": [10.5, 3, 11, 3.5], "texture": "#1"}, + "east": {"uv": [3.5, 10.5, 4, 11], "texture": "#1"}, + "south": {"uv": [10.5, 3.5, 11, 4], "texture": "#1"}, + "west": {"uv": [4, 10.5, 4.5, 11], "texture": "#1"}, + "up": {"uv": [11, 4.5, 10.5, 4], "texture": "#1"}, + "down": {"uv": [5, 10.5, 4.5, 11], "texture": "#1"} + } + }, + { + "from": [7.54563, 4.49601, 7.9375], + "to": [7.60813, 4.62101, 8.0625], + "rotation": {"angle": 0, "axis": "z", "origin": [7.57688, 4.30851, 8]}, + "faces": { + "north": {"uv": [10.5, 6, 11, 6.5], "texture": "#1"}, + "east": {"uv": [6.5, 10.5, 7, 11], "texture": "#1"}, + "south": {"uv": [10.5, 6.5, 11, 7], "texture": "#1"}, + "west": {"uv": [7, 10.5, 7.5, 11], "texture": "#1"}, + "up": {"uv": [11, 7.5, 10.5, 7], "texture": "#1"}, + "down": {"uv": [8, 10.5, 7.5, 11], "texture": "#1"} + } + }, + { + "from": [7.55997, 4.56809, 7.9375], + "to": [7.62247, 4.63059, 8.0625], + "rotation": {"angle": -22.5, "axis": "z", "origin": [7.59122, 4.59934, 8]}, + "faces": { + "north": {"uv": [10.5, 7.5, 11, 8], "texture": "#1"}, + "east": {"uv": [8, 10.5, 8.5, 11], "texture": "#1"}, + "south": {"uv": [10.5, 8, 11, 8.5], "texture": "#1"}, + "west": {"uv": [8.5, 10.5, 9, 11], "texture": "#1"}, + "up": {"uv": [11, 9, 10.5, 8.5], "texture": "#1"}, + "down": {"uv": [9.5, 10.5, 9, 11], "texture": "#1"} + } + }, + { + "from": [7.84631, 4.48382, 7.9375], + "to": [7.90881, 4.60882, 8.0625], + "rotation": {"angle": -45, "axis": "z", "origin": [7.88473, 4.55111, 8]}, + "faces": { + "north": {"uv": [7.5, 11, 8, 11.5], "texture": "#1"}, + "east": {"uv": [11, 7.5, 11.5, 8], "texture": "#1"}, + "south": {"uv": [8, 11, 8.5, 11.5], "texture": "#1"}, + "west": {"uv": [11, 8, 11.5, 8.5], "texture": "#1"}, + "up": {"uv": [9, 11.5, 8.5, 11], "texture": "#1"}, + "down": {"uv": [11.5, 8.5, 11, 9], "texture": "#1"} + } + }, + { + "from": [7.86924, 4.42509, 7.9375], + "to": [8.11924, 4.55009, 8.0625], + "rotation": {"angle": 22.5, "axis": "z", "origin": [7.86445, 4.44917, 8]}, + "faces": { + "north": {"uv": [6, 11, 6.5, 11.5], "texture": "#1"}, + "east": {"uv": [11, 6, 11.5, 6.5], "texture": "#1"}, + "south": {"uv": [6.5, 11, 7, 11.5], "texture": "#1"}, + "west": {"uv": [11, 6.5, 11.5, 7], "texture": "#1"}, + "up": {"uv": [7.5, 11.5, 7, 11], "texture": "#1"}, + "down": {"uv": [11.5, 7, 11, 7.5], "texture": "#1"} + } + }, + { + "from": [7.87809, 4.23168, 7.9375], + "to": [8.00309, 4.35668, 8.0625], + "rotation": {"angle": -22.5, "axis": "z", "origin": [7.90217, 4.36147, 8]}, + "faces": { + "north": {"uv": [10.5, 11, 11, 11.5], "texture": "#1"}, + "east": {"uv": [11, 10.5, 11.5, 11], "texture": "#1"}, + "south": {"uv": [11, 11, 11.5, 11.5], "texture": "#1"}, + "west": {"uv": [0, 11.5, 0.5, 12], "texture": "#1"}, + "up": {"uv": [12, 0.5, 11.5, 0], "texture": "#1"}, + "down": {"uv": [1, 11.5, 0.5, 12], "texture": "#1"} + } + }, + { + "from": [7.87809, 4.30376, 7.9375], + "to": [8.06559, 4.55376, 8.0625], + "rotation": {"angle": 0, "axis": "z", "origin": [7.90217, 4.36147, 8]}, + "faces": { + "north": {"uv": [9, 11, 9.5, 11.5], "texture": "#1"}, + "east": {"uv": [11, 9, 11.5, 9.5], "texture": "#1"}, + "south": {"uv": [9.5, 11, 10, 11.5], "texture": "#1"}, + "west": {"uv": [11, 9.5, 11.5, 10], "texture": "#1"}, + "up": {"uv": [10.5, 11.5, 10, 11], "texture": "#1"}, + "down": {"uv": [11.5, 10, 11, 10.5], "texture": "#1"} + } + }, + { + "from": [7.78003, 4.2682, 7.9375], + "to": [7.84253, 4.3307, 8.0625], + "rotation": {"angle": -45, "axis": "z", "origin": [7.79032, 4.23011, 8]}, + "faces": { + "north": {"uv": [11.5, 2, 12, 2.5], "texture": "#1"}, + "east": {"uv": [2.5, 11.5, 3, 12], "texture": "#1"}, + "south": {"uv": [11.5, 2.5, 12, 3], "texture": "#1"}, + "west": {"uv": [3, 11.5, 3.5, 12], "texture": "#1"}, + "up": {"uv": [12, 3.5, 11.5, 3], "texture": "#1"}, + "down": {"uv": [4, 11.5, 3.5, 12], "texture": "#1"} + } + }, + { + "from": [7.75907, 4.19169, 7.9375], + "to": [7.88407, 4.25419, 8.0625], + "rotation": {"angle": 22.5, "axis": "z", "origin": [7.79032, 4.23011, 8]}, + "faces": { + "north": {"uv": [11.5, 0.5, 12, 1], "texture": "#1"}, + "east": {"uv": [1, 11.5, 1.5, 12], "texture": "#1"}, + "south": {"uv": [11.5, 1, 12, 1.5], "texture": "#1"}, + "west": {"uv": [1.5, 11.5, 2, 12], "texture": "#1"}, + "up": {"uv": [12, 2, 11.5, 1.5], "texture": "#1"}, + "down": {"uv": [2.5, 11.5, 2, 12], "texture": "#1"} + } + }, + { + "from": [7.73189, 4.44283, 7.9375], + "to": [7.79439, 4.88033, 8.0625], + "rotation": {"angle": -22.5, "axis": "z", "origin": [7.57564, 4.59908, 8]}, + "faces": { + "north": {"uv": [4.5, 11, 5, 11.5], "texture": "#1"}, + "east": {"uv": [11, 4.5, 11.5, 5], "texture": "#1"}, + "south": {"uv": [5, 11, 5.5, 11.5], "texture": "#1"}, + "west": {"uv": [11, 5, 11.5, 5.5], "texture": "#1"}, + "up": {"uv": [6, 11.5, 5.5, 11], "texture": "#1"}, + "down": {"uv": [11.5, 5.5, 11, 6], "texture": "#1"} + } + }, + { + "from": [7.70865, 4.49944, 7.9375], + "to": [7.77115, 4.56194, 8.0625], + "rotation": {"angle": 0, "axis": "z", "origin": [7.6774, 4.53069, 8]}, + "faces": { + "north": {"uv": [11.5, 5, 12, 5.5], "texture": "#1"}, + "east": {"uv": [5.5, 11.5, 6, 12], "texture": "#1"}, + "south": {"uv": [11.5, 5.5, 12, 6], "texture": "#1"}, + "west": {"uv": [6, 11.5, 6.5, 12], "texture": "#1"}, + "up": {"uv": [12, 6.5, 11.5, 6], "texture": "#1"}, + "down": {"uv": [7, 11.5, 6.5, 12], "texture": "#1"} + } + }, + { + "from": [7.67203, 4.49944, 7.9375], + "to": [7.79703, 4.74944, 8.0625], + "rotation": {"angle": -45, "axis": "z", "origin": [7.76578, 4.53069, 8]}, + "faces": { + "north": {"uv": [0.5, 13, 1, 13.5], "texture": "#1"}, + "east": {"uv": [13, 0.5, 13.5, 1], "texture": "#1"}, + "south": {"uv": [1, 13, 1.5, 13.5], "texture": "#1"}, + "west": {"uv": [13, 1, 13.5, 1.5], "texture": "#1"}, + "up": {"uv": [2, 13.5, 1.5, 13], "texture": "#1"}, + "down": {"uv": [13.5, 1.5, 13, 2], "texture": "#1"} + } + }, + { + "from": [7.64724, 4.37101, 7.9375], + "to": [7.70974, 4.62101, 8.0625], + "rotation": {"angle": 0, "axis": "z", "origin": [7.67849, 4.30851, 8]}, + "faces": { + "north": {"uv": [0, 11, 0.5, 11.5], "texture": "#1"}, + "east": {"uv": [11, 0, 11.5, 0.5], "texture": "#1"}, + "south": {"uv": [0.5, 11, 1, 11.5], "texture": "#1"}, + "west": {"uv": [11, 0.5, 11.5, 1], "texture": "#1"}, + "up": {"uv": [1.5, 11.5, 1, 11], "texture": "#1"}, + "down": {"uv": [11.5, 1, 11, 1.5], "texture": "#1"} + } + }, + { + "from": [7.6329, 4.56809, 7.9375], + "to": [7.6954, 4.63059, 8.0625], + "rotation": {"angle": 22.5, "axis": "z", "origin": [7.66415, 4.59934, 8]}, + "faces": { + "north": {"uv": [10.5, 9, 11, 9.5], "texture": "#1"}, + "east": {"uv": [9.5, 10.5, 10, 11], "texture": "#1"}, + "south": {"uv": [10.5, 9.5, 11, 10], "texture": "#1"}, + "west": {"uv": [10, 10.5, 10.5, 11], "texture": "#1"}, + "up": {"uv": [11, 10.5, 10.5, 10], "texture": "#1"}, + "down": {"uv": [11, 10.5, 10.5, 11], "texture": "#1"} + } + }, + { + "from": [7.54153, 4.4736, 7.9375], + "to": [7.59153, 4.5236, 8.0625], + "rotation": {"angle": 45, "axis": "z", "origin": [7.57278, 4.50485, 8]}, + "faces": { + "north": {"uv": [10.5, 4.5, 11, 5], "texture": "#1"}, + "east": {"uv": [5, 10.5, 5.5, 11], "texture": "#1"}, + "south": {"uv": [10.5, 5, 11, 5.5], "texture": "#1"}, + "west": {"uv": [5.5, 10.5, 6, 11], "texture": "#1"}, + "up": {"uv": [11, 6, 10.5, 5.5], "texture": "#1"}, + "down": {"uv": [6.5, 10.5, 6, 11], "texture": "#1"} + } + }, + { + "from": [7.65134, 4.3486, 7.9375], + "to": [7.70134, 4.3986, 8.0625], + "rotation": {"angle": 45, "axis": "z", "origin": [7.68259, 4.37985, 8]}, + "faces": { + "north": {"uv": [1.5, 11, 2, 11.5], "texture": "#1"}, + "east": {"uv": [11, 1.5, 11.5, 2], "texture": "#1"}, + "south": {"uv": [2, 11, 2.5, 11.5], "texture": "#1"}, + "west": {"uv": [11, 2, 11.5, 2.5], "texture": "#1"}, + "up": {"uv": [3, 11.5, 2.5, 11], "texture": "#1"}, + "down": {"uv": [11.5, 2.5, 11, 3], "texture": "#1"} + } + }, + { + "from": [7.4958, 4.60892, 7.9375], + "to": [7.5583, 4.67142, 8.0625], + "rotation": {"angle": -45, "axis": "z", "origin": [7.52705, 4.64017, 8]}, + "faces": { + "north": {"uv": [10.5, 0, 11, 0.5], "texture": "#1"}, + "east": {"uv": [0.5, 10.5, 1, 11], "texture": "#1"}, + "south": {"uv": [10.5, 0.5, 11, 1], "texture": "#1"}, + "west": {"uv": [1, 10.5, 1.5, 11], "texture": "#1"}, + "up": {"uv": [11, 1.5, 10.5, 1], "texture": "#1"}, + "down": {"uv": [2, 10.5, 1.5, 11], "texture": "#1"} + } + }, + { + "from": [7.52308, 4.56809, 7.9375], + "to": [7.58558, 4.63059, 8.0625], + "rotation": {"angle": 22.5, "axis": "z", "origin": [7.55433, 4.59934, 8]}, + "faces": { + "north": {"uv": [10.5, 1.5, 11, 2], "texture": "#1"}, + "east": {"uv": [2, 10.5, 2.5, 11], "texture": "#1"}, + "south": {"uv": [10.5, 2, 11, 2.5], "texture": "#1"}, + "west": {"uv": [2.5, 10.5, 3, 11], "texture": "#1"}, + "up": {"uv": [11, 3, 10.5, 2.5], "texture": "#1"}, + "down": {"uv": [3.5, 10.5, 3, 11], "texture": "#1"} + } + }, + { + "from": [7.67286, 5.29408, 7.9375], + "to": [7.92286, 5.48158, 8.0625], + "rotation": {"angle": 22.5, "axis": "z", "origin": [7.61665, 5.14545, 8]}, + "faces": { + "north": {"uv": [1.5, 7, 2, 7.5], "texture": "#1"}, + "east": {"uv": [7, 1.5, 7.5, 2], "texture": "#1"}, + "south": {"uv": [2, 7, 2.5, 7.5], "texture": "#1"}, + "west": {"uv": [7, 2, 7.5, 2.5], "texture": "#1"}, + "up": {"uv": [3, 7.5, 2.5, 7], "texture": "#1"}, + "down": {"uv": [7.5, 2.5, 7, 3], "texture": "#1"} + } + }, + { + "from": [8.15893, 11.8374, 7.9375], + "to": [8.40893, 13.1499, 8.0625], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.09107, -0.6626, 0.4375]}, + "faces": { + "north": {"uv": [1, 3, 1.5, 3.5], "texture": "#1"}, + "east": {"uv": [3, 1, 3.5, 1.5], "texture": "#1"}, + "south": {"uv": [1.5, 3, 2, 3.5], "texture": "#1"}, + "west": {"uv": [3, 1.5, 3.5, 2], "texture": "#1"}, + "up": {"uv": [2.5, 3.5, 2, 3], "texture": "#1"}, + "down": {"uv": [3.5, 2, 3, 2.5], "texture": "#1"} + } + }, + { + "from": [8.19367, 13.13022, 7.9375], + "to": [8.31867, 13.25522, 8.0625], + "rotation": {"angle": 0, "axis": "y", "origin": [-0.18133, -1.18228, 0.4375]}, + "faces": { + "north": {"uv": [3, 5, 3.5, 5.5], "texture": "#1"}, + "east": {"uv": [5, 3, 5.5, 3.5], "texture": "#1"}, + "south": {"uv": [3.5, 5, 4, 5.5], "texture": "#1"}, + "west": {"uv": [5, 3.5, 5.5, 4], "texture": "#1"}, + "up": {"uv": [4.5, 5.5, 4, 5], "texture": "#1"}, + "down": {"uv": [5.5, 4, 5, 4.5], "texture": "#1"} + } + }, + { + "from": [7.66072, 11.03732, 7.9375], + "to": [7.78572, 12.16232, 8.0625], + "rotation": {"angle": -22.5, "axis": "z", "origin": [7.72322, 12.13107, 8]}, + "faces": { + "north": {"uv": [2.5, 2, 3, 2.5], "texture": "#1"}, + "east": {"uv": [2.5, 2.5, 3, 3], "texture": "#1"}, + "south": {"uv": [0, 3, 0.5, 3.5], "texture": "#1"}, + "west": {"uv": [3, 0, 3.5, 0.5], "texture": "#1"}, + "up": {"uv": [1, 3.5, 0.5, 3], "texture": "#1"}, + "down": {"uv": [3.5, 0.5, 3, 1], "texture": "#1"} + } + }, + { + "from": [7.21545, 10.85901, 7.9375], + "to": [7.30545, 10.94901, 8.0625], + "rotation": {"angle": 45, "axis": "z", "origin": [7.26045, 10.90401, 8]}, + "faces": { + "north": {"uv": [1.5, 5, 2, 5.5], "texture": "#1"}, + "east": {"uv": [5, 1.5, 5.5, 2], "texture": "#1"}, + "south": {"uv": [2, 5, 2.5, 5.5], "texture": "#1"}, + "west": {"uv": [5, 2, 5.5, 2.5], "texture": "#1"}, + "up": {"uv": [3, 5.5, 2.5, 5], "texture": "#1"}, + "down": {"uv": [5.5, 2.5, 5, 3], "texture": "#1"} + } + }, + { + "from": [8.468, 7.26349, 7.9375], + "to": [8.558, 7.35349, 8.0625], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8.513, 7.30849, 8]}, + "faces": { + "north": {"uv": [6, 10, 6.5, 10.5], "texture": "#1"}, + "east": {"uv": [10, 6, 10.5, 6.5], "texture": "#1"}, + "south": {"uv": [6.5, 10, 7, 10.5], "texture": "#1"}, + "west": {"uv": [10, 6.5, 10.5, 7], "texture": "#1"}, + "up": {"uv": [7.5, 10.5, 7, 10], "texture": "#1"}, + "down": {"uv": [10.5, 7, 10, 7.5], "texture": "#1"} + } + }, + { + "from": [8.56176, 6.39652, 7.9375], + "to": [8.65176, 6.48652, 8.0625], + "rotation": {"angle": 0, "axis": "y", "origin": [8.60676, 6.44152, 8]}, + "faces": { + "north": {"uv": [7.5, 10, 8, 10.5], "texture": "#1"}, + "east": {"uv": [10, 7.5, 10.5, 8], "texture": "#1"}, + "south": {"uv": [8, 10, 8.5, 10.5], "texture": "#1"}, + "west": {"uv": [10, 8, 10.5, 8.5], "texture": "#1"}, + "up": {"uv": [9, 10.5, 8.5, 10], "texture": "#1"}, + "down": {"uv": [10.5, 8.5, 10, 9], "texture": "#1"} + } + }, + { + "from": [7.66072, 12.91232, 7.9375], + "to": [7.84822, 13.28732, 8.0625], + "rotation": {"angle": -22.5, "axis": "z", "origin": [7.72322, 12.13107, 8]}, + "faces": { + "north": {"uv": [0, 5, 0.5, 5.5], "texture": "#1"}, + "east": {"uv": [5, 0, 5.5, 0.5], "texture": "#1"}, + "south": {"uv": [0.5, 5, 1, 5.5], "texture": "#1"}, + "west": {"uv": [5, 0.5, 5.5, 1], "texture": "#1"}, + "up": {"uv": [1.5, 5.5, 1, 5], "texture": "#1"}, + "down": {"uv": [5.5, 1, 5, 1.5], "texture": "#1"} + } + }, + { + "from": [7.72543, 12.11221, 7.9375], + "to": [8.35043, 12.42471, 8.0625], + "rotation": {"angle": -45, "axis": "z", "origin": [7.78793, 12.20596, 8]}, + "faces": { + "north": {"uv": [4.5, 0, 5, 0.5], "texture": "#1"}, + "east": {"uv": [0.5, 4.5, 1, 5], "texture": "#1"}, + "south": {"uv": [4.5, 0.5, 5, 1], "texture": "#1"}, + "west": {"uv": [1, 4.5, 1.5, 5], "texture": "#1"}, + "up": {"uv": [5, 1.5, 4.5, 1], "texture": "#1"}, + "down": {"uv": [2, 4.5, 1.5, 5], "texture": "#1"} + } + }, + { + "from": [7.91293, 11.79971, 7.9375], + "to": [8.22543, 12.11221, 8.0625], + "rotation": {"angle": -45, "axis": "z", "origin": [7.78793, 12.20596, 8]}, + "faces": { + "north": {"uv": [12.5, 5.5, 13, 6], "texture": "#1"}, + "east": {"uv": [6, 12.5, 6.5, 13], "texture": "#1"}, + "south": {"uv": [12.5, 6, 13, 6.5], "texture": "#1"}, + "west": {"uv": [6.5, 12.5, 7, 13], "texture": "#1"}, + "up": {"uv": [13, 7, 12.5, 6.5], "texture": "#1"}, + "down": {"uv": [7.5, 12.5, 7, 13], "texture": "#1"} + } + }, + { + "from": [7.78793, 11.98721, 7.9375], + "to": [7.91293, 12.11221, 8.0625], + "rotation": {"angle": -45, "axis": "z", "origin": [7.78793, 12.20596, 8]}, + "faces": { + "north": {"uv": [12.5, 7, 13, 7.5], "texture": "#1"}, + "east": {"uv": [7.5, 12.5, 8, 13], "texture": "#1"}, + "south": {"uv": [12.5, 7.5, 13, 8], "texture": "#1"}, + "west": {"uv": [8, 12.5, 8.5, 13], "texture": "#1"}, + "up": {"uv": [13, 8.5, 12.5, 8], "texture": "#1"}, + "down": {"uv": [9, 12.5, 8.5, 13], "texture": "#1"} + } + }, + { + "from": [7.81405, 12.24483, 7.9375], + "to": [8.25155, 12.74483, 8.0625], + "rotation": {"angle": -22.5, "axis": "z", "origin": [7.87655, 12.33858, 8]}, + "faces": { + "north": {"uv": [4.5, 1.5, 5, 2], "texture": "#1"}, + "east": {"uv": [2, 4.5, 2.5, 5], "texture": "#1"}, + "south": {"uv": [4.5, 2, 5, 2.5], "texture": "#1"}, + "west": {"uv": [2.5, 4.5, 3, 5], "texture": "#1"}, + "up": {"uv": [5, 3, 4.5, 2.5], "texture": "#1"}, + "down": {"uv": [3.5, 4.5, 3, 5], "texture": "#1"} + } + }, + { + "from": [7.96445, 12.68927, 7.9375], + "to": [8.15195, 12.87677, 8.0625], + "rotation": {"angle": 0, "axis": "z", "origin": [8.02695, 12.78302, 8]}, + "faces": { + "north": {"uv": [4.5, 3, 5, 3.5], "texture": "#1"}, + "east": {"uv": [3.5, 4.5, 4, 5], "texture": "#1"}, + "south": {"uv": [4.5, 3.5, 5, 4], "texture": "#1"}, + "west": {"uv": [4, 4.5, 4.5, 5], "texture": "#1"}, + "up": {"uv": [5, 4.5, 4.5, 4], "texture": "#1"}, + "down": {"uv": [5, 4.5, 4.5, 5], "texture": "#1"} + } + }, + { + "from": [7.56628, 11.23288, 7.9375], + "to": [7.69128, 11.35788, 8.0625], + "rotation": {"angle": 0, "axis": "z", "origin": [7.62878, 11.29538, 8]}, + "faces": { + "north": {"uv": [2.5, 3, 3, 3.5], "texture": "#1"}, + "east": {"uv": [3, 2.5, 3.5, 3], "texture": "#1"}, + "south": {"uv": [3, 3, 3.5, 3.5], "texture": "#1"}, + "west": {"uv": [0, 3.5, 0.5, 4], "texture": "#1"}, + "up": {"uv": [4, 0.5, 3.5, 0], "texture": "#1"}, + "down": {"uv": [1, 3.5, 0.5, 4], "texture": "#1"} + } + }, + { + "from": [7.24474, 10.98936, 7.9375], + "to": [7.36974, 11.11436, 8.0625], + "rotation": {"angle": -22.5, "axis": "z", "origin": [7.32158, 11.12394, 8]}, + "faces": { + "north": {"uv": [3.5, 0.5, 4, 1], "texture": "#1"}, + "east": {"uv": [1, 3.5, 1.5, 4], "texture": "#1"}, + "south": {"uv": [3.5, 1, 4, 1.5], "texture": "#1"}, + "west": {"uv": [1.5, 3.5, 2, 4], "texture": "#1"}, + "up": {"uv": [4, 2, 3.5, 1.5], "texture": "#1"}, + "down": {"uv": [2.5, 3.5, 2, 4], "texture": "#1"} + } + }, + { + "from": [7.19909, 10.90401, 7.9375], + "to": [7.32409, 11.02901, 8.0625], + "rotation": {"angle": 0, "axis": "z", "origin": [7.26159, 10.96651, 8]}, + "faces": { + "north": {"uv": [7.5, 3, 8, 3.5], "texture": "#1"}, + "east": {"uv": [3.5, 7.5, 4, 8], "texture": "#1"}, + "south": {"uv": [7.5, 3.5, 8, 4], "texture": "#1"}, + "west": {"uv": [4, 7.5, 4.5, 8], "texture": "#1"}, + "up": {"uv": [8, 4.5, 7.5, 4], "texture": "#1"}, + "down": {"uv": [5, 7.5, 4.5, 8], "texture": "#1"} + } + }, + { + "from": [7.35962, 11.20421, 7.9375], + "to": [7.60962, 11.32921, 8.0625], + "rotation": {"angle": 22.5, "axis": "z", "origin": [7.48462, 11.26671, 8]}, + "faces": { + "north": {"uv": [0, 4, 0.5, 4.5], "texture": "#1"}, + "east": {"uv": [4, 0, 4.5, 0.5], "texture": "#1"}, + "south": {"uv": [0.5, 4, 1, 4.5], "texture": "#1"}, + "west": {"uv": [4, 0.5, 4.5, 1], "texture": "#1"}, + "up": {"uv": [1.5, 4.5, 1, 4], "texture": "#1"}, + "down": {"uv": [4.5, 1, 4, 1.5], "texture": "#1"} + } + }, + { + "from": [7.42212, 11.32921, 7.9375], + "to": [7.60962, 11.39171, 8.0625], + "rotation": {"angle": 22.5, "axis": "z", "origin": [7.48462, 11.26671, 8]}, + "faces": { + "north": {"uv": [1.5, 4, 2, 4.5], "texture": "#1"}, + "east": {"uv": [4, 1.5, 4.5, 2], "texture": "#1"}, + "south": {"uv": [2, 4, 2.5, 4.5], "texture": "#1"}, + "west": {"uv": [4, 2, 4.5, 2.5], "texture": "#1"}, + "up": {"uv": [3, 4.5, 2.5, 4], "texture": "#1"}, + "down": {"uv": [4.5, 2.5, 4, 3], "texture": "#1"} + } + }, + { + "from": [7.42212, 11.39171, 7.9375], + "to": [7.60962, 11.51671, 8.0625], + "rotation": {"angle": 0, "axis": "z", "origin": [7.48462, 11.26671, 8]}, + "faces": { + "north": {"uv": [3, 4, 3.5, 4.5], "texture": "#1"}, + "east": {"uv": [4, 3, 4.5, 3.5], "texture": "#1"}, + "south": {"uv": [3.5, 4, 4, 4.5], "texture": "#1"}, + "west": {"uv": [4, 3.5, 4.5, 4], "texture": "#1"}, + "up": {"uv": [4.5, 4.5, 4, 4], "texture": "#1"}, + "down": {"uv": [0.5, 4.5, 0, 5], "texture": "#1"} + } + }, + { + "from": [7.33116, 11.07578, 7.9375], + "to": [7.45616, 11.20078, 8.0625], + "rotation": {"angle": 45, "axis": "z", "origin": [7.32158, 11.12394, 8]}, + "faces": { + "north": {"uv": [3.5, 2, 4, 2.5], "texture": "#1"}, + "east": {"uv": [2.5, 3.5, 3, 4], "texture": "#1"}, + "south": {"uv": [3.5, 2.5, 4, 3], "texture": "#1"}, + "west": {"uv": [3, 3.5, 3.5, 4], "texture": "#1"}, + "up": {"uv": [4, 3.5, 3.5, 3], "texture": "#1"}, + "down": {"uv": [4, 3.5, 3.5, 4], "texture": "#1"} + } + }, + { + "from": [8.25655, 12.58161, 7.9375], + "to": [8.50655, 13.58161, 8.0625], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8.21774, 13.10287, 8]}, + "faces": { + "north": {"uv": [4.5, 5, 5, 5.5], "texture": "#1"}, + "east": {"uv": [5, 4.5, 5.5, 5], "texture": "#1"}, + "south": {"uv": [5, 5, 5.5, 5.5], "texture": "#1"}, + "west": {"uv": [0, 5.5, 0.5, 6], "texture": "#1"}, + "up": {"uv": [6, 0.5, 5.5, 0], "texture": "#1"}, + "down": {"uv": [1, 5.5, 0.5, 6], "texture": "#1"} + } + }, + { + "from": [8.05501, 13.11035, 7.9375], + "to": [8.30501, 13.61035, 8.0625], + "rotation": {"angle": -45, "axis": "z", "origin": [8.21774, 13.10287, 8]}, + "faces": { + "north": {"uv": [5.5, 0.5, 6, 1], "texture": "#1"}, + "east": {"uv": [1, 5.5, 1.5, 6], "texture": "#1"}, + "south": {"uv": [5.5, 1, 6, 1.5], "texture": "#1"}, + "west": {"uv": [1.5, 5.5, 2, 6], "texture": "#1"}, + "up": {"uv": [6, 2, 5.5, 1.5], "texture": "#1"}, + "down": {"uv": [2.5, 5.5, 2, 6], "texture": "#1"} + } + }, + { + "from": [8.31905, 13.58161, 7.9375], + "to": [8.38155, 13.69911, 8.0625], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8.21774, 13.10287, 8]}, + "faces": { + "north": {"uv": [5.5, 2, 6, 2.5], "texture": "#1"}, + "east": {"uv": [2.5, 5.5, 3, 6], "texture": "#1"}, + "south": {"uv": [5.5, 2.5, 6, 3], "texture": "#1"}, + "west": {"uv": [3, 5.5, 3.5, 6], "texture": "#1"}, + "up": {"uv": [6, 3.5, 5.5, 3], "texture": "#1"}, + "down": {"uv": [4, 5.5, 3.5, 6], "texture": "#1"} + } + }, + { + "from": [8.11751, 13.86129, 7.9375], + "to": [8.18001, 13.93129, 8.0625], + "rotation": {"angle": -45, "axis": "z", "origin": [8.21774, 13.10287, 8]}, + "faces": { + "north": {"uv": [5.5, 3.5, 6, 4], "texture": "#1"}, + "east": {"uv": [4, 5.5, 4.5, 6], "texture": "#1"}, + "south": {"uv": [5.5, 4, 6, 4.5], "texture": "#1"}, + "west": {"uv": [4.5, 5.5, 5, 6], "texture": "#1"}, + "up": {"uv": [6, 5, 5.5, 4.5], "texture": "#1"}, + "down": {"uv": [5.5, 5.5, 5, 6], "texture": "#1"} + } + }, + { + "from": [8.38155, 13.58161, 7.9375], + "to": [8.44405, 13.88661, 8.0625], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8.21774, 13.10287, 8]}, + "faces": { + "north": {"uv": [5.5, 5, 6, 5.5], "texture": "#1"}, + "east": {"uv": [5.5, 5.5, 6, 6], "texture": "#1"}, + "south": {"uv": [0, 6, 0.5, 6.5], "texture": "#1"}, + "west": {"uv": [6, 0, 6.5, 0.5], "texture": "#1"}, + "up": {"uv": [1, 6.5, 0.5, 6], "texture": "#1"}, + "down": {"uv": [6.5, 0.5, 6, 1], "texture": "#1"} + } + }, + { + "from": [8.11751, 13.61035, 7.9375], + "to": [8.18001, 13.92285, 8.0625], + "rotation": {"angle": -45, "axis": "z", "origin": [8.21774, 13.10287, 8]}, + "faces": { + "north": {"uv": [1, 6, 1.5, 6.5], "texture": "#1"}, + "east": {"uv": [6, 1, 6.5, 1.5], "texture": "#1"}, + "south": {"uv": [1.5, 6, 2, 6.5], "texture": "#1"}, + "west": {"uv": [6, 1.5, 6.5, 2], "texture": "#1"}, + "up": {"uv": [2.5, 6.5, 2, 6], "texture": "#1"}, + "down": {"uv": [6.5, 2, 6, 2.5], "texture": "#1"} + } + }, + { + "from": [8.77087, 13.82914, 7.9375], + "to": [8.83287, 13.88614, 8.0625], + "rotation": {"angle": 0, "axis": "z", "origin": [8.21774, 13.10287, 8]}, + "faces": { + "north": {"uv": [2.5, 6, 3, 6.5], "texture": "#1"}, + "east": {"uv": [6, 2.5, 6.5, 3], "texture": "#1"}, + "south": {"uv": [3, 6, 3.5, 6.5], "texture": "#1"}, + "west": {"uv": [6, 3, 6.5, 3.5], "texture": "#1"}, + "up": {"uv": [4, 6.5, 3.5, 6], "texture": "#1"}, + "down": {"uv": [6.5, 3.5, 6, 4], "texture": "#1"} + } + }, + { + "from": [8.05501, 13.61035, 7.9375], + "to": [8.11751, 14.04785, 8.0625], + "rotation": {"angle": -45, "axis": "z", "origin": [8.21774, 13.10287, 8]}, + "faces": { + "north": {"uv": [4, 6, 4.5, 6.5], "texture": "#1"}, + "east": {"uv": [6, 4, 6.5, 4.5], "texture": "#1"}, + "south": {"uv": [4.5, 6, 5, 6.5], "texture": "#1"}, + "west": {"uv": [6, 4.5, 6.5, 5], "texture": "#1"}, + "up": {"uv": [5.5, 6.5, 5, 6], "texture": "#1"}, + "down": {"uv": [6.5, 5, 6, 5.5], "texture": "#1"} + } + }, + { + "from": [8.44405, 13.58161, 7.9375], + "to": [8.50655, 14.01161, 8.0625], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8.21774, 13.10287, 8]}, + "faces": { + "north": {"uv": [5.5, 6, 6, 6.5], "texture": "#1"}, + "east": {"uv": [6, 5.5, 6.5, 6], "texture": "#1"}, + "south": {"uv": [6, 6, 6.5, 6.5], "texture": "#1"}, + "west": {"uv": [0, 6.5, 0.5, 7], "texture": "#1"}, + "up": {"uv": [7, 0.5, 6.5, 0], "texture": "#1"}, + "down": {"uv": [1, 6.5, 0.5, 7], "texture": "#1"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [0, -90, 0], + "translation": [0, 12.25, 1], + "scale": [3.1, 3.1, 3.1] + }, + "thirdperson_lefthand": { + "rotation": [0, 90, 0], + "translation": [0, 12.25, 1], + "scale": [3.1, 3.1, 3.1] + }, + "firstperson_righthand": { + "rotation": [0, -90, 0], + "translation": [0, 7.25, 0], + "scale": [2.15, 2.15, 2.15] + }, + "firstperson_lefthand": { + "rotation": [0, 90, 0], + "translation": [0, 7.25, 0], + "scale": [2.15, 2.15, 2.15] + }, + "ground": { + "translation": [0, 2.25, 0] + }, + "gui": { + "rotation": [0, 180, 45], + "translation": [0.5, 0.5, 0] + }, + "fixed": { + "rotation": [0, 0, 45], + "translation": [-0.5, 0.5, 0] + } + } +} \ No newline at end of file diff --git a/src/surgebinding/resources/assets/surgebinding/models/item/lavis_polyp.json b/src/surgebinding/resources/assets/surgebinding/models/item/lavis_polyp.json new file mode 100644 index 000000000..da0079a74 --- /dev/null +++ b/src/surgebinding/resources/assets/surgebinding/models/item/lavis_polyp.json @@ -0,0 +1,3 @@ +{ + "parent": "surgebinding:block/lavis_polyp" +} diff --git a/src/surgebinding/resources/assets/surgebinding/models/item/lightweaver_honorblade.json b/src/surgebinding/resources/assets/surgebinding/models/item/lightweaver_honorblade.json new file mode 100644 index 000000000..7eb3dec21 --- /dev/null +++ b/src/surgebinding/resources/assets/surgebinding/models/item/lightweaver_honorblade.json @@ -0,0 +1,1606 @@ +{ + "credit": "Made with Blockbench", + "texture_size": [32, 32], + "textures": { + "0": "surgebinding:item/models/shardblade_model/lightweaver_honorblade", + "particle": "surgebinding:item/models/shardblade_model/lightweaver_honorblade" + }, + "elements": [ + { + "from": [7.66796, 10.66466, 7.9375], + "to": [8.41796, 11.91466, 8.0625], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8.29296, 9.91466, 7.9375]}, + "faces": { + "north": {"uv": [1.5, 5.5, 2, 5], "texture": "#0"}, + "east": {"uv": [2, 5.5, 2.5, 5], "texture": "#0"}, + "south": {"uv": [5, 2.5, 5.5, 2], "texture": "#0"}, + "west": {"uv": [2.5, 5.5, 3, 5], "texture": "#0"}, + "up": {"uv": [5.5, 3.5, 5, 3], "texture": "#0"}, + "down": {"uv": [5.5, 2.5, 5, 3], "texture": "#0"} + } + }, + { + "from": [7.9761, 10.54369, 7.9375], + "to": [8.2261, 11.04369, 8.0625], + "rotation": {"angle": -22.5, "axis": "z", "origin": [6.6011, 9.04369, 7.9375]}, + "faces": { + "north": {"uv": [4.5, 9.5, 5, 9], "texture": "#0"}, + "east": {"uv": [9, 5, 9.5, 4.5], "texture": "#0"}, + "south": {"uv": [5, 9.5, 5.5, 9], "texture": "#0"}, + "west": {"uv": [9, 5.5, 9.5, 5], "texture": "#0"}, + "up": {"uv": [9.5, 6, 9, 5.5], "texture": "#0"}, + "down": {"uv": [6, 9, 5.5, 9.5], "texture": "#0"} + } + }, + { + "from": [13.48435, 5.05365, 7.9375], + "to": [13.73435, 5.55365, 8.0625], + "rotation": {"angle": 22.5, "axis": "z", "origin": [6.35935, -6.19635, 7.9375]}, + "faces": { + "north": {"uv": [6, 9.5, 6.5, 9], "texture": "#0"}, + "east": {"uv": [9, 6.5, 9.5, 6], "texture": "#0"}, + "south": {"uv": [6.5, 9.5, 7, 9], "texture": "#0"}, + "west": {"uv": [9, 7, 9.5, 6.5], "texture": "#0"}, + "up": {"uv": [9.5, 7.5, 9, 7], "texture": "#0"}, + "down": {"uv": [7.5, 9, 7, 9.5], "texture": "#0"} + } + }, + { + "from": [9.26363, 5.89563, 7.9375], + "to": [9.76363, 7.14563, 8.0625], + "rotation": {"angle": -22.5, "axis": "z", "origin": [9.13863, 10.89563, 7.9375]}, + "faces": { + "north": {"uv": [5.5, 6.5, 6, 6], "texture": "#0"}, + "east": {"uv": [6, 6, 6.5, 5.5], "texture": "#0"}, + "south": {"uv": [6, 6.5, 6.5, 6], "texture": "#0"}, + "west": {"uv": [0, 7, 0.5, 6.5], "texture": "#0"}, + "up": {"uv": [1, 7, 0.5, 6.5], "texture": "#0"}, + "down": {"uv": [7, 0, 6.5, 0.5], "texture": "#0"} + } + }, + { + "from": [9.34289, 4.78041, 7.9375], + "to": [10.09289, 5.53041, 8.0625], + "rotation": {"angle": -22.5, "axis": "z", "origin": [9.21789, 9.53041, 7.9375]}, + "faces": { + "north": {"uv": [6, 8.5, 6.5, 8], "texture": "#0"}, + "east": {"uv": [8, 6.5, 8.5, 6], "texture": "#0"}, + "south": {"uv": [6.5, 8.5, 7, 8], "texture": "#0"}, + "west": {"uv": [8, 7, 8.5, 6.5], "texture": "#0"}, + "up": {"uv": [8.5, 7.5, 8, 7], "texture": "#0"}, + "down": {"uv": [7.5, 8, 7, 8.5], "texture": "#0"} + } + }, + { + "from": [7.80264, 5.53705, 7.9375], + "to": [8.30264, 6.28705, 8.0625], + "rotation": {"angle": 0, "axis": "z", "origin": [8.05264, 5.66205, 7.9375]}, + "faces": { + "north": {"uv": [8.5, 5.5, 9, 5], "texture": "#0"}, + "east": {"uv": [5.5, 9, 6, 8.5], "texture": "#0"}, + "south": {"uv": [8.5, 6, 9, 5.5], "texture": "#0"}, + "west": {"uv": [6, 9, 6.5, 8.5], "texture": "#0"}, + "up": {"uv": [7, 9, 6.5, 8.5], "texture": "#0"}, + "down": {"uv": [9, 6, 8.5, 6.5], "texture": "#0"} + } + }, + { + "from": [7.26563, 4.24059, 7.9375], + "to": [7.76563, 5.24059, 8.0625], + "rotation": {"angle": -45, "axis": "z", "origin": [7.51563, 4.74059, 7.9375]}, + "faces": { + "north": {"uv": [7.5, 8.5, 8, 8], "texture": "#0"}, + "east": {"uv": [8, 8, 8.5, 7.5], "texture": "#0"}, + "south": {"uv": [8, 8.5, 8.5, 8], "texture": "#0"}, + "west": {"uv": [0, 9, 0.5, 8.5], "texture": "#0"}, + "up": {"uv": [1, 9, 0.5, 8.5], "texture": "#0"}, + "down": {"uv": [9, 0, 8.5, 0.5], "texture": "#0"} + } + }, + { + "from": [6.9853, 4.31381, 7.9375], + "to": [7.7353, 4.56381, 8.0625], + "rotation": {"angle": 0, "axis": "z", "origin": [7.3603, 4.31381, 7.9375]}, + "faces": { + "north": {"uv": [8.5, 1, 9, 0.5], "texture": "#0"}, + "east": {"uv": [1, 9, 1.5, 8.5], "texture": "#0"}, + "south": {"uv": [8.5, 1.5, 9, 1], "texture": "#0"}, + "west": {"uv": [1.5, 9, 2, 8.5], "texture": "#0"}, + "up": {"uv": [2.5, 9, 2, 8.5], "texture": "#0"}, + "down": {"uv": [9, 1.5, 8.5, 2], "texture": "#0"} + } + }, + { + "from": [7.56925, 4.07381, 7.9375], + "to": [7.81925, 4.31381, 8.0625], + "rotation": {"angle": 0, "axis": "z", "origin": [7.3603, 4.31381, 7.9375]}, + "faces": { + "north": {"uv": [8.5, 7, 9, 6.5], "texture": "#0"}, + "east": {"uv": [7, 9, 7.5, 8.5], "texture": "#0"}, + "south": {"uv": [8.5, 7.5, 9, 7], "texture": "#0"}, + "west": {"uv": [7.5, 9, 8, 8.5], "texture": "#0"}, + "up": {"uv": [8.5, 9, 8, 8.5], "texture": "#0"}, + "down": {"uv": [9, 7.5, 8.5, 8], "texture": "#0"} + } + }, + { + "from": [7.00459, 4.16079, 7.9375], + "to": [7.75459, 4.41079, 8.0625], + "rotation": {"angle": -22.5, "axis": "z", "origin": [7.37959, 4.28579, 7.9375]}, + "faces": { + "north": {"uv": [8.5, 2.5, 9, 2], "texture": "#0"}, + "east": {"uv": [2.5, 9, 3, 8.5], "texture": "#0"}, + "south": {"uv": [8.5, 3, 9, 2.5], "texture": "#0"}, + "west": {"uv": [3, 9, 3.5, 8.5], "texture": "#0"}, + "up": {"uv": [4, 9, 3.5, 8.5], "texture": "#0"}, + "down": {"uv": [9, 3, 8.5, 3.5], "texture": "#0"} + } + }, + { + "from": [7.53121, 4.35543, 7.9375], + "to": [8.28121, 4.41793, 8.0625], + "rotation": {"angle": -45, "axis": "z", "origin": [7.34371, 4.19918, 8]}, + "faces": { + "north": {"uv": [6, 10.5, 6.5, 10], "texture": "#0"}, + "east": {"uv": [10, 6.5, 10.5, 6], "texture": "#0"}, + "south": {"uv": [6.5, 10.5, 7, 10], "texture": "#0"}, + "west": {"uv": [10, 7, 10.5, 6.5], "texture": "#0"}, + "up": {"uv": [10.5, 7.5, 10, 7], "texture": "#0"}, + "down": {"uv": [7.5, 10, 7, 10.5], "texture": "#0"} + } + }, + { + "from": [7.67821, 4.0268, 7.9375], + "to": [8.17821, 5.0268, 8.0625], + "rotation": {"angle": 0, "axis": "z", "origin": [8.05321, 4.1518, 7.9375]}, + "faces": { + "north": {"uv": [8.5, 4, 9, 3.5], "texture": "#0"}, + "east": {"uv": [4, 9, 4.5, 8.5], "texture": "#0"}, + "south": {"uv": [8.5, 4.5, 9, 4], "texture": "#0"}, + "west": {"uv": [4.5, 9, 5, 8.5], "texture": "#0"}, + "up": {"uv": [5.5, 9, 5, 8.5], "texture": "#0"}, + "down": {"uv": [9, 4.5, 8.5, 5], "texture": "#0"} + } + }, + { + "from": [7.3407, 5.9784, 7.9375], + "to": [7.5907, 6.2284, 8.0625], + "rotation": {"angle": 0, "axis": "z", "origin": [7.4657, 5.2284, 7.9375]}, + "faces": { + "north": {"uv": [6.5, 1, 7, 0.5], "texture": "#0"}, + "east": {"uv": [1, 7, 1.5, 6.5], "texture": "#0"}, + "south": {"uv": [6.5, 1.5, 7, 1], "texture": "#0"}, + "west": {"uv": [1.5, 7, 2, 6.5], "texture": "#0"}, + "up": {"uv": [2.5, 7, 2, 6.5], "texture": "#0"}, + "down": {"uv": [7, 1.5, 6.5, 2], "texture": "#0"} + } + }, + { + "from": [7.35712, 5.86804, 7.9375], + "to": [7.55712, 6.56804, 8.0625], + "rotation": {"angle": -45, "axis": "z", "origin": [7.48212, 5.94304, 7.9375]}, + "faces": { + "north": {"uv": [6.5, 2.5, 7, 2], "texture": "#0"}, + "east": {"uv": [2.5, 7, 3, 6.5], "texture": "#0"}, + "south": {"uv": [6.5, 3, 7, 2.5], "texture": "#0"}, + "west": {"uv": [3, 7, 3.5, 6.5], "texture": "#0"}, + "up": {"uv": [4, 7, 3.5, 6.5], "texture": "#0"}, + "down": {"uv": [7, 3, 6.5, 3.5], "texture": "#0"} + } + }, + { + "from": [7.57766, 6.00905, 7.9375], + "to": [7.77766, 6.20905, 8.0625], + "rotation": {"angle": 22.5, "axis": "z", "origin": [7.67766, 6.10905, 7.9375]}, + "faces": { + "north": {"uv": [6.5, 4, 7, 3.5], "texture": "#0"}, + "east": {"uv": [4, 7, 4.5, 6.5], "texture": "#0"}, + "south": {"uv": [6.5, 4.5, 7, 4], "texture": "#0"}, + "west": {"uv": [4.5, 7, 5, 6.5], "texture": "#0"}, + "up": {"uv": [5.5, 7, 5, 6.5], "texture": "#0"}, + "down": {"uv": [7, 4.5, 6.5, 5], "texture": "#0"} + } + }, + { + "from": [9.26363, 7.14563, 7.9375], + "to": [9.76363, 8.39563, 8.0625], + "rotation": {"angle": -22.5, "axis": "z", "origin": [9.13863, 12.14563, 7.9375]}, + "faces": { + "north": {"uv": [3, 7.5, 3.5, 7], "texture": "#0"}, + "east": {"uv": [7, 3.5, 7.5, 3], "texture": "#0"}, + "south": {"uv": [3.5, 7.5, 4, 7], "texture": "#0"}, + "west": {"uv": [7, 4, 7.5, 3.5], "texture": "#0"}, + "up": {"uv": [7.5, 4.5, 7, 4], "texture": "#0"}, + "down": {"uv": [4.5, 7, 4, 7.5], "texture": "#0"} + } + }, + { + "from": [7.3407, 7.2284, 7.9375], + "to": [7.5907, 7.4784, 8.0625], + "rotation": {"angle": 0, "axis": "z", "origin": [7.4657, 6.4784, 7.9375]}, + "faces": { + "north": {"uv": [1.5, 7.5, 2, 7], "texture": "#0"}, + "east": {"uv": [7, 2, 7.5, 1.5], "texture": "#0"}, + "south": {"uv": [2, 7.5, 2.5, 7], "texture": "#0"}, + "west": {"uv": [7, 2.5, 7.5, 2], "texture": "#0"}, + "up": {"uv": [7.5, 3, 7, 2.5], "texture": "#0"}, + "down": {"uv": [3, 7, 2.5, 7.5], "texture": "#0"} + } + }, + { + "from": [7.35712, 7.11804, 7.9375], + "to": [7.55712, 7.81804, 8.0625], + "rotation": {"angle": -45, "axis": "z", "origin": [7.48212, 7.19304, 7.9375]}, + "faces": { + "north": {"uv": [0, 7.5, 0.5, 7], "texture": "#0"}, + "east": {"uv": [7, 0.5, 7.5, 0], "texture": "#0"}, + "south": {"uv": [0.5, 7.5, 1, 7], "texture": "#0"}, + "west": {"uv": [7, 1, 7.5, 0.5], "texture": "#0"}, + "up": {"uv": [7.5, 1.5, 7, 1], "texture": "#0"}, + "down": {"uv": [1.5, 7, 1, 7.5], "texture": "#0"} + } + }, + { + "from": [7.57766, 7.25905, 7.9375], + "to": [7.77766, 7.45905, 8.0625], + "rotation": {"angle": 22.5, "axis": "z", "origin": [7.67766, 7.35905, 7.9375]}, + "faces": { + "north": {"uv": [6.5, 5.5, 7, 5], "texture": "#0"}, + "east": {"uv": [5.5, 7, 6, 6.5], "texture": "#0"}, + "south": {"uv": [6.5, 6, 7, 5.5], "texture": "#0"}, + "west": {"uv": [6, 7, 6.5, 6.5], "texture": "#0"}, + "up": {"uv": [7, 7, 6.5, 6.5], "texture": "#0"}, + "down": {"uv": [7, 6, 6.5, 6.5], "texture": "#0"} + } + }, + { + "from": [9.26363, 8.64563, 7.9375], + "to": [9.76363, 9.89563, 8.0625], + "rotation": {"angle": -22.5, "axis": "z", "origin": [9.13863, 13.64563, 7.9375]}, + "faces": { + "north": {"uv": [0, 8.5, 0.5, 8], "texture": "#0"}, + "east": {"uv": [8, 0.5, 8.5, 0], "texture": "#0"}, + "south": {"uv": [0.5, 8.5, 1, 8], "texture": "#0"}, + "west": {"uv": [8, 1, 8.5, 0.5], "texture": "#0"}, + "up": {"uv": [8.5, 1.5, 8, 1], "texture": "#0"}, + "down": {"uv": [1.5, 8, 1, 8.5], "texture": "#0"} + } + }, + { + "from": [7.3407, 8.7284, 7.9375], + "to": [7.5907, 8.9784, 8.0625], + "rotation": {"angle": 0, "axis": "z", "origin": [7.4657, 7.9784, 7.9375]}, + "faces": { + "north": {"uv": [7.5, 6.5, 8, 6], "texture": "#0"}, + "east": {"uv": [6.5, 8, 7, 7.5], "texture": "#0"}, + "south": {"uv": [7.5, 7, 8, 6.5], "texture": "#0"}, + "west": {"uv": [7, 8, 7.5, 7.5], "texture": "#0"}, + "up": {"uv": [8, 8, 7.5, 7.5], "texture": "#0"}, + "down": {"uv": [8, 7, 7.5, 7.5], "texture": "#0"} + } + }, + { + "from": [7.35712, 8.61804, 7.9375], + "to": [7.55712, 9.31804, 8.0625], + "rotation": {"angle": -45, "axis": "z", "origin": [7.48212, 8.69304, 7.9375]}, + "faces": { + "north": {"uv": [7.5, 5, 8, 4.5], "texture": "#0"}, + "east": {"uv": [5, 8, 5.5, 7.5], "texture": "#0"}, + "south": {"uv": [7.5, 5.5, 8, 5], "texture": "#0"}, + "west": {"uv": [5.5, 8, 6, 7.5], "texture": "#0"}, + "up": {"uv": [6.5, 8, 6, 7.5], "texture": "#0"}, + "down": {"uv": [8, 5.5, 7.5, 6], "texture": "#0"} + } + }, + { + "from": [7.57766, 8.75905, 7.9375], + "to": [7.77766, 8.95905, 8.0625], + "rotation": {"angle": 22.5, "axis": "z", "origin": [7.67766, 8.85905, 7.9375]}, + "faces": { + "north": {"uv": [7.5, 3.5, 8, 3], "texture": "#0"}, + "east": {"uv": [3.5, 8, 4, 7.5], "texture": "#0"}, + "south": {"uv": [7.5, 4, 8, 3.5], "texture": "#0"}, + "west": {"uv": [4, 8, 4.5, 7.5], "texture": "#0"}, + "up": {"uv": [5, 8, 4.5, 7.5], "texture": "#0"}, + "down": {"uv": [8, 4, 7.5, 4.5], "texture": "#0"} + } + }, + { + "from": [7.57766, 10.00905, 7.9375], + "to": [8.02766, 10.45905, 8.0625], + "rotation": {"angle": 22.5, "axis": "z", "origin": [7.67766, 10.10905, 7.9375]}, + "faces": { + "north": {"uv": [7.5, 2, 8, 1.5], "texture": "#0"}, + "east": {"uv": [2, 8, 2.5, 7.5], "texture": "#0"}, + "south": {"uv": [7.5, 2.5, 8, 2], "texture": "#0"}, + "west": {"uv": [2.5, 8, 3, 7.5], "texture": "#0"}, + "up": {"uv": [3.5, 8, 3, 7.5], "texture": "#0"}, + "down": {"uv": [8, 2.5, 7.5, 3], "texture": "#0"} + } + }, + { + "from": [7.35712, 9.86804, 7.9375], + "to": [7.55712, 10.31804, 8.0625], + "rotation": {"angle": -45, "axis": "z", "origin": [7.48212, 9.94304, 7.9375]}, + "faces": { + "north": {"uv": [7.5, 0.5, 8, 0], "texture": "#0"}, + "east": {"uv": [0.5, 8, 1, 7.5], "texture": "#0"}, + "south": {"uv": [7.5, 1, 8, 0.5], "texture": "#0"}, + "west": {"uv": [1, 8, 1.5, 7.5], "texture": "#0"}, + "up": {"uv": [2, 8, 1.5, 7.5], "texture": "#0"}, + "down": {"uv": [8, 1, 7.5, 1.5], "texture": "#0"} + } + }, + { + "from": [7.3407, 9.9784, 7.9375], + "to": [7.5907, 10.4784, 8.0625], + "rotation": {"angle": 0, "axis": "z", "origin": [7.4657, 9.2284, 7.9375]}, + "faces": { + "north": {"uv": [6, 7.5, 6.5, 7], "texture": "#0"}, + "east": {"uv": [7, 6.5, 7.5, 6], "texture": "#0"}, + "south": {"uv": [6.5, 7.5, 7, 7], "texture": "#0"}, + "west": {"uv": [7, 7, 7.5, 6.5], "texture": "#0"}, + "up": {"uv": [0.5, 8, 0, 7.5], "texture": "#0"}, + "down": {"uv": [7.5, 7, 7, 7.5], "texture": "#0"} + } + }, + { + "from": [9.07229, 10.18369, 7.9375], + "to": [9.57229, 10.93369, 8.0625], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8.94729, 14.68369, 7.9375]}, + "faces": { + "north": {"uv": [4.5, 7.5, 5, 7], "texture": "#0"}, + "east": {"uv": [7, 5, 7.5, 4.5], "texture": "#0"}, + "south": {"uv": [5, 7.5, 5.5, 7], "texture": "#0"}, + "west": {"uv": [7, 5.5, 7.5, 5], "texture": "#0"}, + "up": {"uv": [7.5, 6, 7, 5.5], "texture": "#0"}, + "down": {"uv": [6, 7, 5.5, 7.5], "texture": "#0"} + } + }, + { + "from": [7.64288, 10.95792, 7.9375], + "to": [8.14288, 11.20792, 8.0625], + "rotation": {"angle": -45, "axis": "z", "origin": [7.89288, 11.08292, 7.9375]}, + "faces": { + "north": {"uv": [4.5, 8.5, 5, 8], "texture": "#0"}, + "east": {"uv": [8, 5, 8.5, 4.5], "texture": "#0"}, + "south": {"uv": [5, 8.5, 5.5, 8], "texture": "#0"}, + "west": {"uv": [8, 5.5, 8.5, 5], "texture": "#0"}, + "up": {"uv": [8.5, 6, 8, 5.5], "texture": "#0"}, + "down": {"uv": [6, 8, 5.5, 8.5], "texture": "#0"} + } + }, + { + "from": [8.59631, 10.84248, 7.9375], + "to": [8.84631, 12.09248, 8.0625], + "rotation": {"angle": -22.5, "axis": "z", "origin": [9.47131, 14.34248, 7.9375]}, + "faces": { + "north": {"uv": [1.5, 8.5, 2, 8], "texture": "#0"}, + "east": {"uv": [8, 2, 8.5, 1.5], "texture": "#0"}, + "south": {"uv": [2, 8.5, 2.5, 8], "texture": "#0"}, + "west": {"uv": [8, 2.5, 8.5, 2], "texture": "#0"}, + "up": {"uv": [8.5, 3, 8, 2.5], "texture": "#0"}, + "down": {"uv": [3, 8, 2.5, 8.5], "texture": "#0"} + } + }, + { + "from": [7.55449, 11.34808, 7.9375], + "to": [7.80449, 11.84808, 8.0625], + "rotation": {"angle": 0, "axis": "z", "origin": [7.67949, 11.47308, 7.9375]}, + "faces": { + "north": {"uv": [3, 8.5, 3.5, 8], "texture": "#0"}, + "east": {"uv": [8, 3.5, 8.5, 3], "texture": "#0"}, + "south": {"uv": [3.5, 8.5, 4, 8], "texture": "#0"}, + "west": {"uv": [8, 4, 8.5, 3.5], "texture": "#0"}, + "up": {"uv": [8.5, 4.5, 8, 4], "texture": "#0"}, + "down": {"uv": [4.5, 8, 4, 8.5], "texture": "#0"} + } + }, + { + "from": [8.42381, 11.71458, 7.9375], + "to": [9.17381, 12.21458, 8.0625], + "rotation": {"angle": 0, "axis": "z", "origin": [9.04881, 10.46458, 7.9375]}, + "faces": { + "north": {"uv": [5.5, 2, 6, 1.5], "texture": "#0"}, + "east": {"uv": [2, 6, 2.5, 5.5], "texture": "#0"}, + "south": {"uv": [5.5, 2.5, 6, 2], "texture": "#0"}, + "west": {"uv": [2.5, 6, 3, 5.5], "texture": "#0"}, + "up": {"uv": [3.5, 6, 3, 5.5], "texture": "#0"}, + "down": {"uv": [6, 2.5, 5.5, 3], "texture": "#0"} + } + }, + { + "from": [7.75412, 6.84779, 7.9375], + "to": [8.50412, 13.59779, 8.0625], + "rotation": {"angle": 0, "axis": "y", "origin": [-22.49588, 25.09779, -22.1875]}, + "faces": { + "north": {"uv": [0, 3.5, 0.5, 0], "texture": "#0"}, + "east": {"uv": [0.5, 3.5, 1, 0], "texture": "#0"}, + "south": {"uv": [1, 3.5, 1.5, 0], "texture": "#0"}, + "west": {"uv": [1.5, 3.5, 2, 0], "texture": "#0"}, + "up": {"uv": [6, 1, 5.5, 0.5], "texture": "#0"}, + "down": {"uv": [6, 0, 5.5, 0.5], "texture": "#0"} + } + }, + { + "from": [8.11777, 5.76958, 7.9375], + "to": [8.86777, 7.01958, 8.0625], + "rotation": {"angle": 0, "axis": "y", "origin": [-22.13223, 24.26958, -22.1875]}, + "faces": { + "north": {"uv": [1.5, 9.5, 2, 9], "texture": "#0"}, + "east": {"uv": [9, 2, 9.5, 1.5], "texture": "#0"}, + "south": {"uv": [2, 9.5, 2.5, 9], "texture": "#0"}, + "west": {"uv": [9, 2.5, 9.5, 2], "texture": "#0"}, + "up": {"uv": [9.5, 3, 9, 2.5], "texture": "#0"}, + "down": {"uv": [3, 9, 2.5, 9.5], "texture": "#0"} + } + }, + { + "from": [7.92643, 6.98152, 7.9375], + "to": [8.67643, 10.48152, 8.0625], + "rotation": {"angle": 0, "axis": "y", "origin": [-22.32357, 25.98152, -22.1875]}, + "faces": { + "north": {"uv": [2, 2, 2.5, 0], "texture": "#0"}, + "east": {"uv": [2, 4, 2.5, 2], "texture": "#0"}, + "south": {"uv": [2.5, 2, 3, 0], "texture": "#0"}, + "west": {"uv": [2.5, 4, 3, 2], "texture": "#0"}, + "up": {"uv": [9.5, 8, 9, 7.5], "texture": "#0"}, + "down": {"uv": [8, 9, 7.5, 9.5], "texture": "#0"} + } + }, + { + "from": [8.11777, 10.26958, 7.9375], + "to": [8.86777, 11.51958, 8.0625], + "rotation": {"angle": 0, "axis": "y", "origin": [-22.13223, 24.26958, -22.1875]}, + "faces": { + "north": {"uv": [3, 9.5, 3.5, 9], "texture": "#0"}, + "east": {"uv": [9, 3.5, 9.5, 3], "texture": "#0"}, + "south": {"uv": [3.5, 9.5, 4, 9], "texture": "#0"}, + "west": {"uv": [9, 4, 9.5, 3.5], "texture": "#0"}, + "up": {"uv": [9.5, 4.5, 9, 4], "texture": "#0"}, + "down": {"uv": [4.5, 9, 4, 9.5], "texture": "#0"} + } + }, + { + "from": [7.7062, 12.36763, 7.9375], + "to": [7.9562, 13.36763, 8.0625], + "rotation": {"angle": 0, "axis": "y", "origin": [-22.0438, 22.61763, -22.1875]}, + "faces": { + "north": {"uv": [3, 6.5, 3.5, 6], "texture": "#0"}, + "east": {"uv": [6, 3.5, 6.5, 3], "texture": "#0"}, + "south": {"uv": [3.5, 6.5, 4, 6], "texture": "#0"}, + "west": {"uv": [6, 4, 6.5, 3.5], "texture": "#0"}, + "up": {"uv": [6.5, 4.5, 6, 4], "texture": "#0"}, + "down": {"uv": [4.5, 6, 4, 6.5], "texture": "#0"} + } + }, + { + "from": [9.77534, 4.95011, 7.9375], + "to": [10.02534, 6.20011, 8.0625], + "rotation": {"angle": 22.5, "axis": "z", "origin": [9.90034, 3.20011, 7.9375]}, + "faces": { + "north": {"uv": [5, 4, 5.5, 3.5], "texture": "#0"}, + "east": {"uv": [4, 5.5, 4.5, 5], "texture": "#0"}, + "south": {"uv": [5, 4.5, 5.5, 4], "texture": "#0"}, + "west": {"uv": [4.5, 5.5, 5, 5], "texture": "#0"}, + "up": {"uv": [5.5, 5.5, 5, 5], "texture": "#0"}, + "down": {"uv": [5.5, 4.5, 5, 5], "texture": "#0"} + } + }, + { + "from": [8.42563, 4.99602, 7.9375], + "to": [8.67563, 5.24602, 8.0625], + "rotation": {"angle": -45, "axis": "z", "origin": [8.55063, 4.24602, 7.9375]}, + "faces": { + "north": {"uv": [5.5, 3.5, 6, 3], "texture": "#0"}, + "east": {"uv": [3.5, 6, 4, 5.5], "texture": "#0"}, + "south": {"uv": [5.5, 4, 6, 3.5], "texture": "#0"}, + "west": {"uv": [4, 6, 4.5, 5.5], "texture": "#0"}, + "up": {"uv": [5, 6, 4.5, 5.5], "texture": "#0"}, + "down": {"uv": [6, 4, 5.5, 4.5], "texture": "#0"} + } + }, + { + "from": [7.81684, 3.84523, 7.9375], + "to": [8.31684, 4.34523, 8.0625], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8.23492, 3.87866, 7.9375]}, + "faces": { + "north": {"uv": [5.5, 5, 6, 4.5], "texture": "#0"}, + "east": {"uv": [5, 6, 5.5, 5.5], "texture": "#0"}, + "south": {"uv": [5.5, 5.5, 6, 5], "texture": "#0"}, + "west": {"uv": [5.5, 6, 6, 5.5], "texture": "#0"}, + "up": {"uv": [6.5, 0.5, 6, 0], "texture": "#0"}, + "down": {"uv": [0.5, 6, 0, 6.5], "texture": "#0"} + } + }, + { + "from": [7.81684, 3.84959, 7.9375], + "to": [8.31684, 5.41209, 8.0625], + "rotation": {"angle": 0, "axis": "z", "origin": [8.23492, 3.87866, 7.9375]}, + "faces": { + "north": {"uv": [4.5, 1, 5, 0], "texture": "#0"}, + "east": {"uv": [4.5, 2, 5, 1], "texture": "#0"}, + "south": {"uv": [4.5, 3, 5, 2], "texture": "#0"}, + "west": {"uv": [3, 5.5, 3.5, 4.5], "texture": "#0"}, + "up": {"uv": [6.5, 1, 6, 0.5], "texture": "#0"}, + "down": {"uv": [1, 6, 0.5, 6.5], "texture": "#0"} + } + }, + { + "from": [7.87934, 4.6064, 7.875], + "to": [8.37934, 4.6689, 8.125], + "rotation": {"angle": 0, "axis": "z", "origin": [8.12934, 4.88425, 7.90625]}, + "faces": { + "north": {"uv": [12.5, 5.5, 13, 5], "texture": "#0"}, + "east": {"uv": [5.5, 13, 6, 12.5], "texture": "#0"}, + "south": {"uv": [12.5, 6, 13, 5.5], "texture": "#0"}, + "west": {"uv": [6, 13, 6.5, 12.5], "texture": "#0"}, + "up": {"uv": [7, 13, 6.5, 12.5], "texture": "#0"}, + "down": {"uv": [13, 6, 12.5, 6.5], "texture": "#0"} + } + }, + { + "from": [7.94184, 4.6689, 7.875], + "to": [8.31684, 4.7314, 8.125], + "rotation": {"angle": 0, "axis": "z", "origin": [8.12934, 4.88425, 7.90625]}, + "faces": { + "north": {"uv": [1.5, 13.5, 2, 13], "texture": "#0"}, + "east": {"uv": [13, 2, 13.5, 1.5], "texture": "#0"}, + "south": {"uv": [2, 13.5, 2.5, 13], "texture": "#0"}, + "west": {"uv": [13, 2.5, 13.5, 2], "texture": "#0"}, + "up": {"uv": [13.5, 3, 13, 2.5], "texture": "#0"}, + "down": {"uv": [3, 13, 2.5, 13.5], "texture": "#0"} + } + }, + { + "from": [8.1529, 4.58963, 7.875], + "to": [8.2779, 5.08963, 8.125], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8.12934, 4.88425, 7.90625]}, + "faces": { + "north": {"uv": [12.5, 8.5, 13, 8], "texture": "#0"}, + "east": {"uv": [8.5, 13, 9, 12.5], "texture": "#0"}, + "south": {"uv": [12.5, 9, 13, 8.5], "texture": "#0"}, + "west": {"uv": [9, 13, 9.5, 12.5], "texture": "#0"}, + "up": {"uv": [10, 13, 9.5, 12.5], "texture": "#0"}, + "down": {"uv": [13, 9, 12.5, 9.5], "texture": "#0"} + } + }, + { + "from": [8.0904, 4.65213, 7.875], + "to": [8.1529, 4.96463, 8.125], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8.12934, 4.88425, 7.90625]}, + "faces": { + "north": {"uv": [12.5, 11.5, 13, 11], "texture": "#0"}, + "east": {"uv": [11.5, 13, 12, 12.5], "texture": "#0"}, + "south": {"uv": [12.5, 12, 13, 11.5], "texture": "#0"}, + "west": {"uv": [12, 13, 12.5, 12.5], "texture": "#0"}, + "up": {"uv": [13, 13, 12.5, 12.5], "texture": "#0"}, + "down": {"uv": [13, 12, 12.5, 12.5], "texture": "#0"} + } + }, + { + "from": [8.26223, 5.0151, 7.875], + "to": [8.34723, 5.1001, 8.125], + "rotation": {"angle": 45, "axis": "z", "origin": [8.12934, 4.88425, 7.90625]}, + "faces": { + "north": {"uv": [12.5, 10, 13, 9.5], "texture": "#0"}, + "east": {"uv": [10, 13, 10.5, 12.5], "texture": "#0"}, + "south": {"uv": [12.5, 10.5, 13, 10], "texture": "#0"}, + "west": {"uv": [10.5, 13, 11, 12.5], "texture": "#0"}, + "up": {"uv": [11.5, 13, 11, 12.5], "texture": "#0"}, + "down": {"uv": [13, 10.5, 12.5, 11], "texture": "#0"} + } + }, + { + "from": [7.98078, 4.58963, 7.875], + "to": [8.10578, 5.08963, 8.125], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8.12934, 4.88425, 7.90625]}, + "faces": { + "north": {"uv": [12.5, 7, 13, 6.5], "texture": "#0"}, + "east": {"uv": [7, 13, 7.5, 12.5], "texture": "#0"}, + "south": {"uv": [12.5, 7.5, 13, 7], "texture": "#0"}, + "west": {"uv": [7.5, 13, 8, 12.5], "texture": "#0"}, + "up": {"uv": [8.5, 13, 8, 12.5], "texture": "#0"}, + "down": {"uv": [13, 7.5, 12.5, 8], "texture": "#0"} + } + }, + { + "from": [8.10578, 4.65213, 7.875], + "to": [8.23078, 4.90213, 8.125], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8.12934, 4.88425, 7.90625]}, + "faces": { + "north": {"uv": [0, 13.5, 0.5, 13], "texture": "#0"}, + "east": {"uv": [13, 0.5, 13.5, 0], "texture": "#0"}, + "south": {"uv": [0.5, 13.5, 1, 13], "texture": "#0"}, + "west": {"uv": [13, 1, 13.5, 0.5], "texture": "#0"}, + "up": {"uv": [13.5, 1.5, 13, 1], "texture": "#0"}, + "down": {"uv": [1.5, 13, 1, 13.5], "texture": "#0"} + } + }, + { + "from": [7.81684, 1.59959, 7.8125], + "to": [8.31684, 3.84959, 8.1875], + "rotation": {"angle": 0, "axis": "z", "origin": [8.23492, 3.87866, 7.9375]}, + "faces": { + "north": {"uv": [3.5, 3, 4, 1.5], "texture": "#0"}, + "east": {"uv": [3.5, 4.5, 4, 3], "texture": "#0"}, + "south": {"uv": [4, 1.5, 4.5, 0], "texture": "#0"}, + "west": {"uv": [4, 3, 4.5, 1.5], "texture": "#0"}, + "up": {"uv": [10, 10, 9.5, 9.5], "texture": "#0"}, + "down": {"uv": [10, 9, 9.5, 9.5], "texture": "#0"} + } + }, + { + "from": [7.81684, 1.22459, 7.8125], + "to": [8.31684, 1.59959, 8.1875], + "rotation": {"angle": 0, "axis": "z", "origin": [8.23492, 4.56616, 7.9375]}, + "faces": { + "north": {"uv": [12.5, 4, 13, 3.5], "texture": "#0"}, + "east": {"uv": [4, 13, 4.5, 12.5], "texture": "#0"}, + "south": {"uv": [12.5, 4.5, 13, 4], "texture": "#0"}, + "west": {"uv": [4.5, 13, 5, 12.5], "texture": "#0"}, + "up": {"uv": [5.5, 13, 5, 12.5], "texture": "#0"}, + "down": {"uv": [13, 4.5, 12.5, 5], "texture": "#0"} + } + }, + { + "from": [8.28989, 1.29417, 7.8125], + "to": [8.41489, 1.60667, 8.1875], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8.38364, 1.35667, 8]}, + "faces": { + "north": {"uv": [7.5, 10.5, 8, 10], "texture": "#0"}, + "east": {"uv": [10, 8, 10.5, 7.5], "texture": "#0"}, + "south": {"uv": [8, 10.5, 8.5, 10], "texture": "#0"}, + "west": {"uv": [10, 8.5, 10.5, 8], "texture": "#0"}, + "up": {"uv": [10.5, 9, 10, 8.5], "texture": "#0"}, + "down": {"uv": [9, 10, 8.5, 10.5], "texture": "#0"} + } + }, + { + "from": [8.18643, 1.12338, 7.8125], + "to": [8.43643, 1.31088, 8.1875], + "rotation": {"angle": 0, "axis": "z", "origin": [8.40518, 1.15463, 8]}, + "faces": { + "north": {"uv": [11.5, 11.5, 12, 11], "texture": "#0"}, + "east": {"uv": [11.5, 12, 12, 11.5], "texture": "#0"}, + "south": {"uv": [0, 12.5, 0.5, 12], "texture": "#0"}, + "west": {"uv": [12, 0.5, 12.5, 0], "texture": "#0"}, + "up": {"uv": [12.5, 1, 12, 0.5], "texture": "#0"}, + "down": {"uv": [1, 12, 0.5, 12.5], "texture": "#0"} + } + }, + { + "from": [8.15988, 1.05237, 7.8125], + "to": [8.40988, 1.36487, 8.1875], + "rotation": {"angle": -22.5, "axis": "z", "origin": [7.81613, 1.17737, 8]}, + "faces": { + "north": {"uv": [10.5, 0.5, 11, 0], "texture": "#0"}, + "east": {"uv": [0.5, 11, 1, 10.5], "texture": "#0"}, + "south": {"uv": [10.5, 1, 11, 0.5], "texture": "#0"}, + "west": {"uv": [1, 11, 1.5, 10.5], "texture": "#0"}, + "up": {"uv": [2, 11, 1.5, 10.5], "texture": "#0"}, + "down": {"uv": [11, 1, 10.5, 1.5], "texture": "#0"} + } + }, + { + "from": [8.23964, 0.53485, 7.9375], + "to": [8.36464, 1.09735, 8.0625], + "rotation": {"angle": 0, "axis": "z", "origin": [8.45839, 0.9411, 8]}, + "faces": { + "north": {"uv": [1, 12.5, 1.5, 12], "texture": "#0"}, + "east": {"uv": [12, 1.5, 12.5, 1], "texture": "#0"}, + "south": {"uv": [1.5, 12.5, 2, 12], "texture": "#0"}, + "west": {"uv": [12, 2, 12.5, 1.5], "texture": "#0"}, + "up": {"uv": [12.5, 2.5, 12, 2], "texture": "#0"}, + "down": {"uv": [2.5, 12, 2, 12.5], "texture": "#0"} + } + }, + { + "from": [8.36432, 0.40991, 7.9375], + "to": [8.42682, 0.53491, 8.0625], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8.39557, 0.69116, 8]}, + "faces": { + "north": {"uv": [4, 12.5, 4.5, 12], "texture": "#0"}, + "east": {"uv": [12, 4.5, 12.5, 4], "texture": "#0"}, + "south": {"uv": [4.5, 12.5, 5, 12], "texture": "#0"}, + "west": {"uv": [12, 5, 12.5, 4.5], "texture": "#0"}, + "up": {"uv": [12.5, 5.5, 12, 5], "texture": "#0"}, + "down": {"uv": [5.5, 12, 5, 12.5], "texture": "#0"} + } + }, + { + "from": [8.00141, 0.46899, 7.9375], + "to": [8.06391, 0.65649, 8.0625], + "rotation": {"angle": 0, "axis": "z", "origin": [7.97016, 0.59399, 8]}, + "faces": { + "north": {"uv": [7, 12.5, 7.5, 12], "texture": "#0"}, + "east": {"uv": [12, 7.5, 12.5, 7], "texture": "#0"}, + "south": {"uv": [7.5, 12.5, 8, 12], "texture": "#0"}, + "west": {"uv": [12, 8, 12.5, 7.5], "texture": "#0"}, + "up": {"uv": [12.5, 8.5, 12, 8], "texture": "#0"}, + "down": {"uv": [8.5, 12, 8, 12.5], "texture": "#0"} + } + }, + { + "from": [7.88713, 0.55738, 7.9375], + "to": [7.94963, 0.74488, 8.0625], + "rotation": {"angle": 0, "axis": "z", "origin": [8.10588, 0.68238, 8]}, + "faces": { + "north": {"uv": [10, 12.5, 10.5, 12], "texture": "#0"}, + "east": {"uv": [12, 10.5, 12.5, 10], "texture": "#0"}, + "south": {"uv": [10.5, 12.5, 11, 12], "texture": "#0"}, + "west": {"uv": [12, 11, 12.5, 10.5], "texture": "#0"}, + "up": {"uv": [12.5, 11.5, 12, 11], "texture": "#0"}, + "down": {"uv": [11.5, 12, 11, 12.5], "texture": "#0"} + } + }, + { + "from": [7.94427, 0.41943, 7.9375], + "to": [8.00677, 0.60693, 8.0625], + "rotation": {"angle": 45, "axis": "z", "origin": [7.97552, 0.51318, 8]}, + "faces": { + "north": {"uv": [8.5, 12.5, 9, 12], "texture": "#0"}, + "east": {"uv": [12, 9, 12.5, 8.5], "texture": "#0"}, + "south": {"uv": [9, 12.5, 9.5, 12], "texture": "#0"}, + "west": {"uv": [12, 9.5, 12.5, 9], "texture": "#0"}, + "up": {"uv": [12.5, 10, 12, 9.5], "texture": "#0"}, + "down": {"uv": [10, 12, 9.5, 12.5], "texture": "#0"} + } + }, + { + "from": [7.81391, 0.65649, 7.9375], + "to": [7.87641, 0.84399, 8.0625], + "rotation": {"angle": 0, "axis": "z", "origin": [7.78266, 0.78149, 8]}, + "faces": { + "north": {"uv": [12.5, 2.5, 13, 2], "texture": "#0"}, + "east": {"uv": [2.5, 13, 3, 12.5], "texture": "#0"}, + "south": {"uv": [12.5, 3, 13, 2.5], "texture": "#0"}, + "west": {"uv": [3, 13, 3.5, 12.5], "texture": "#0"}, + "up": {"uv": [4, 13, 3.5, 12.5], "texture": "#0"}, + "down": {"uv": [13, 3, 12.5, 3.5], "texture": "#0"} + } + }, + { + "from": [7.75677, 0.60693, 7.9375], + "to": [7.81927, 0.85693, 8.0625], + "rotation": {"angle": 45, "axis": "z", "origin": [7.78802, 0.70068, 8]}, + "faces": { + "north": {"uv": [12.5, 1, 13, 0.5], "texture": "#0"}, + "east": {"uv": [1, 13, 1.5, 12.5], "texture": "#0"}, + "south": {"uv": [12.5, 1.5, 13, 1], "texture": "#0"}, + "west": {"uv": [1.5, 13, 2, 12.5], "texture": "#0"}, + "up": {"uv": [2.5, 13, 2, 12.5], "texture": "#0"}, + "down": {"uv": [13, 1.5, 12.5, 2], "texture": "#0"} + } + }, + { + "from": [7.65544, 0.78907, 7.9375], + "to": [7.71794, 0.97657, 8.0625], + "rotation": {"angle": 0, "axis": "z", "origin": [7.87419, 0.91407, 8]}, + "faces": { + "north": {"uv": [11.5, 12.5, 12, 12], "texture": "#0"}, + "east": {"uv": [12, 12, 12.5, 11.5], "texture": "#0"}, + "south": {"uv": [12, 12.5, 12.5, 12], "texture": "#0"}, + "west": {"uv": [0, 13, 0.5, 12.5], "texture": "#0"}, + "up": {"uv": [1, 13, 0.5, 12.5], "texture": "#0"}, + "down": {"uv": [13, 0, 12.5, 0.5], "texture": "#0"} + } + }, + { + "from": [8.182, 0.4744, 7.9375], + "to": [8.307, 0.7244, 8.0625], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8.33825, 0.5369, 8]}, + "faces": { + "north": {"uv": [2.5, 12.5, 3, 12], "texture": "#0"}, + "east": {"uv": [12, 3, 12.5, 2.5], "texture": "#0"}, + "south": {"uv": [3, 12.5, 3.5, 12], "texture": "#0"}, + "west": {"uv": [12, 3.5, 12.5, 3], "texture": "#0"}, + "up": {"uv": [12.5, 4, 12, 3.5], "texture": "#0"}, + "down": {"uv": [4, 12, 3.5, 12.5], "texture": "#0"} + } + }, + { + "from": [8.23606, 0.38592, 7.9375], + "to": [8.30606, 0.45592, 8.0625], + "rotation": {"angle": -45, "axis": "z", "origin": [8.26731, 0.42467, 8]}, + "faces": { + "north": {"uv": [5.5, 12.5, 6, 12], "texture": "#0"}, + "east": {"uv": [12, 6, 12.5, 5.5], "texture": "#0"}, + "south": {"uv": [6, 12.5, 6.5, 12], "texture": "#0"}, + "west": {"uv": [12, 6.5, 12.5, 6], "texture": "#0"}, + "up": {"uv": [12.5, 7, 12, 6.5], "texture": "#0"}, + "down": {"uv": [7, 12, 6.5, 12.5], "texture": "#0"} + } + }, + { + "from": [7.90495, 1.20717, 7.8125], + "to": [8.1862, 1.23842, 8.1875], + "rotation": {"angle": 0, "axis": "z", "origin": [8.04557, 1.20717, 7.90625]}, + "faces": { + "north": {"uv": [10.5, 6.5, 11, 6], "texture": "#0"}, + "east": {"uv": [6.5, 11, 7, 10.5], "texture": "#0"}, + "south": {"uv": [10.5, 7, 11, 6.5], "texture": "#0"}, + "west": {"uv": [7, 11, 7.5, 10.5], "texture": "#0"}, + "up": {"uv": [8, 11, 7.5, 10.5], "texture": "#0"}, + "down": {"uv": [11, 7, 10.5, 7.5], "texture": "#0"} + } + }, + { + "from": [7.99391, 1.2, 7.8125], + "to": [8.02516, 1.23125, 8.1875], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8.00953, 1.21563, 7.90625]}, + "faces": { + "north": {"uv": [10.5, 8, 11, 7.5], "texture": "#0"}, + "east": {"uv": [8, 11, 8.5, 10.5], "texture": "#0"}, + "south": {"uv": [10.5, 8.5, 11, 8], "texture": "#0"}, + "west": {"uv": [8.5, 11, 9, 10.5], "texture": "#0"}, + "up": {"uv": [9.5, 11, 9, 10.5], "texture": "#0"}, + "down": {"uv": [11, 8.5, 10.5, 9], "texture": "#0"} + } + }, + { + "from": [7.90086, 1.17959, 7.8125], + "to": [8.05711, 1.21084, 8.1875], + "rotation": {"angle": 45, "axis": "z", "origin": [7.97898, 1.19521, 7.90625]}, + "faces": { + "north": {"uv": [10.5, 9.5, 11, 9], "texture": "#0"}, + "east": {"uv": [9.5, 11, 10, 10.5], "texture": "#0"}, + "south": {"uv": [10.5, 10, 11, 9.5], "texture": "#0"}, + "west": {"uv": [10, 11, 10.5, 10.5], "texture": "#0"}, + "up": {"uv": [11, 11, 10.5, 10.5], "texture": "#0"}, + "down": {"uv": [11, 10, 10.5, 10.5], "texture": "#0"} + } + }, + { + "from": [7.92915, 1.14629, 7.8125], + "to": [7.9604, 1.17754, 8.1875], + "rotation": {"angle": -22.5, "axis": "z", "origin": [7.95856, 1.12862, 7.90625]}, + "faces": { + "north": {"uv": [0, 11.5, 0.5, 11], "texture": "#0"}, + "east": {"uv": [11, 0.5, 11.5, 0], "texture": "#0"}, + "south": {"uv": [0.5, 11.5, 1, 11], "texture": "#0"}, + "west": {"uv": [11, 1, 11.5, 0.5], "texture": "#0"}, + "up": {"uv": [11.5, 1.5, 11, 1], "texture": "#0"}, + "down": {"uv": [1.5, 11, 1, 11.5], "texture": "#0"} + } + }, + { + "from": [7.90495, 1.01881, 7.8125], + "to": [8.1862, 1.05006, 8.1875], + "rotation": {"angle": 0, "axis": "z", "origin": [8.04557, 1.05006, 7.90625]}, + "faces": { + "north": {"uv": [7.5, 11.5, 8, 11], "texture": "#0"}, + "east": {"uv": [11, 8, 11.5, 7.5], "texture": "#0"}, + "south": {"uv": [8, 11.5, 8.5, 11], "texture": "#0"}, + "west": {"uv": [11, 8.5, 11.5, 8], "texture": "#0"}, + "up": {"uv": [11.5, 9, 11, 8.5], "texture": "#0"}, + "down": {"uv": [9, 11, 8.5, 11.5], "texture": "#0"} + } + }, + { + "from": [7.99391, 1.02598, 7.8125], + "to": [8.02516, 1.05723, 8.1875], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8.00953, 1.04161, 7.90625]}, + "faces": { + "north": {"uv": [6, 11.5, 6.5, 11], "texture": "#0"}, + "east": {"uv": [11, 6.5, 11.5, 6], "texture": "#0"}, + "south": {"uv": [6.5, 11.5, 7, 11], "texture": "#0"}, + "west": {"uv": [11, 7, 11.5, 6.5], "texture": "#0"}, + "up": {"uv": [11.5, 7.5, 11, 7], "texture": "#0"}, + "down": {"uv": [7.5, 11, 7, 11.5], "texture": "#0"} + } + }, + { + "from": [7.90086, 0.9839, 7.8125], + "to": [8.18211, 1.07765, 8.1875], + "rotation": {"angle": -45, "axis": "z", "origin": [7.97898, 1.06202, 7.90625]}, + "faces": { + "north": {"uv": [4.5, 11.5, 5, 11], "texture": "#0"}, + "east": {"uv": [11, 5, 11.5, 4.5], "texture": "#0"}, + "south": {"uv": [5, 11.5, 5.5, 11], "texture": "#0"}, + "west": {"uv": [11, 5.5, 11.5, 5], "texture": "#0"}, + "up": {"uv": [11.5, 6, 11, 5.5], "texture": "#0"}, + "down": {"uv": [6, 11, 5.5, 11.5], "texture": "#0"} + } + }, + { + "from": [7.87327, 0.98799, 7.8125], + "to": [7.96702, 1.26924, 8.1875], + "rotation": {"angle": 0, "axis": "z", "origin": [7.95856, 1.12862, 7.90625]}, + "faces": { + "north": {"uv": [3, 11.5, 3.5, 11], "texture": "#0"}, + "east": {"uv": [11, 3.5, 11.5, 3], "texture": "#0"}, + "south": {"uv": [3.5, 11.5, 4, 11], "texture": "#0"}, + "west": {"uv": [11, 4, 11.5, 3.5], "texture": "#0"}, + "up": {"uv": [11.5, 4.5, 11, 4], "texture": "#0"}, + "down": {"uv": [4.5, 11, 4, 11.5], "texture": "#0"} + } + }, + { + "from": [7.92915, 1.0797, 7.8125], + "to": [7.9604, 1.11095, 8.1875], + "rotation": {"angle": 22.5, "axis": "z", "origin": [7.95856, 1.12862, 7.90625]}, + "faces": { + "north": {"uv": [1.5, 11.5, 2, 11], "texture": "#0"}, + "east": {"uv": [11, 2, 11.5, 1.5], "texture": "#0"}, + "south": {"uv": [2, 11.5, 2.5, 11], "texture": "#0"}, + "west": {"uv": [11, 2.5, 11.5, 2], "texture": "#0"}, + "up": {"uv": [11.5, 3, 11, 2.5], "texture": "#0"}, + "down": {"uv": [3, 11, 2.5, 11.5], "texture": "#0"} + } + }, + { + "from": [8.06599, 1.2, 7.8125], + "to": [8.09724, 1.23125, 8.1875], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8.08161, 1.21563, 7.90625]}, + "faces": { + "north": {"uv": [11.5, 7, 12, 6.5], "texture": "#0"}, + "east": {"uv": [7, 12, 7.5, 11.5], "texture": "#0"}, + "south": {"uv": [11.5, 7.5, 12, 7], "texture": "#0"}, + "west": {"uv": [7.5, 12, 8, 11.5], "texture": "#0"}, + "up": {"uv": [8.5, 12, 8, 11.5], "texture": "#0"}, + "down": {"uv": [12, 7.5, 11.5, 8], "texture": "#0"} + } + }, + { + "from": [8.03404, 1.17959, 7.8125], + "to": [8.19029, 1.27334, 8.1875], + "rotation": {"angle": -45, "axis": "z", "origin": [8.11217, 1.19521, 7.90625]}, + "faces": { + "north": {"uv": [11.5, 5.5, 12, 5], "texture": "#0"}, + "east": {"uv": [5.5, 12, 6, 11.5], "texture": "#0"}, + "south": {"uv": [11.5, 6, 12, 5.5], "texture": "#0"}, + "west": {"uv": [6, 12, 6.5, 11.5], "texture": "#0"}, + "up": {"uv": [7, 12, 6.5, 11.5], "texture": "#0"}, + "down": {"uv": [12, 6, 11.5, 6.5], "texture": "#0"} + } + }, + { + "from": [8.12413, 0.98799, 7.8125], + "to": [8.21788, 1.26924, 8.1875], + "rotation": {"angle": 0, "axis": "z", "origin": [8.13258, 1.12862, 7.90625]}, + "faces": { + "north": {"uv": [11.5, 4, 12, 3.5], "texture": "#0"}, + "east": {"uv": [4, 12, 4.5, 11.5], "texture": "#0"}, + "south": {"uv": [11.5, 4.5, 12, 4], "texture": "#0"}, + "west": {"uv": [4.5, 12, 5, 11.5], "texture": "#0"}, + "up": {"uv": [5.5, 12, 5, 11.5], "texture": "#0"}, + "down": {"uv": [12, 4.5, 11.5, 5], "texture": "#0"} + } + }, + { + "from": [8.13075, 1.14629, 7.8125], + "to": [8.162, 1.17754, 8.1875], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8.13258, 1.12862, 7.90625]}, + "faces": { + "north": {"uv": [11.5, 2.5, 12, 2], "texture": "#0"}, + "east": {"uv": [2.5, 12, 3, 11.5], "texture": "#0"}, + "south": {"uv": [11.5, 3, 12, 2.5], "texture": "#0"}, + "west": {"uv": [3, 12, 3.5, 11.5], "texture": "#0"}, + "up": {"uv": [4, 12, 3.5, 11.5], "texture": "#0"}, + "down": {"uv": [12, 3, 11.5, 3.5], "texture": "#0"} + } + }, + { + "from": [8.13075, 1.0797, 7.8125], + "to": [8.162, 1.11095, 8.1875], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8.13258, 1.12862, 7.90625]}, + "faces": { + "north": {"uv": [11.5, 1, 12, 0.5], "texture": "#0"}, + "east": {"uv": [1, 12, 1.5, 11.5], "texture": "#0"}, + "south": {"uv": [11.5, 1.5, 12, 1], "texture": "#0"}, + "west": {"uv": [1.5, 12, 2, 11.5], "texture": "#0"}, + "up": {"uv": [2.5, 12, 2, 11.5], "texture": "#0"}, + "down": {"uv": [12, 1.5, 11.5, 2], "texture": "#0"} + } + }, + { + "from": [8.03404, 0.9839, 7.8125], + "to": [8.19029, 1.07765, 8.1875], + "rotation": {"angle": 45, "axis": "z", "origin": [8.11217, 1.06202, 7.90625]}, + "faces": { + "north": {"uv": [10.5, 11.5, 11, 11], "texture": "#0"}, + "east": {"uv": [11, 11, 11.5, 10.5], "texture": "#0"}, + "south": {"uv": [11, 11.5, 11.5, 11], "texture": "#0"}, + "west": {"uv": [0, 12, 0.5, 11.5], "texture": "#0"}, + "up": {"uv": [1, 12, 0.5, 11.5], "texture": "#0"}, + "down": {"uv": [12, 0, 11.5, 0.5], "texture": "#0"} + } + }, + { + "from": [8.06599, 1.02598, 7.8125], + "to": [8.09724, 1.05723, 8.1875], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8.08161, 1.04161, 7.90625]}, + "faces": { + "north": {"uv": [9, 11.5, 9.5, 11], "texture": "#0"}, + "east": {"uv": [11, 9.5, 11.5, 9], "texture": "#0"}, + "south": {"uv": [9.5, 11.5, 10, 11], "texture": "#0"}, + "west": {"uv": [11, 10, 11.5, 9.5], "texture": "#0"}, + "up": {"uv": [11.5, 10.5, 11, 10], "texture": "#0"}, + "down": {"uv": [10.5, 11, 10, 11.5], "texture": "#0"} + } + }, + { + "from": [7.71879, 1.10667, 7.8125], + "to": [8.03129, 1.60667, 8.1875], + "rotation": {"angle": -22.5, "axis": "z", "origin": [7.75004, 1.35667, 8]}, + "faces": { + "north": {"uv": [9, 10.5, 9.5, 10], "texture": "#0"}, + "east": {"uv": [10, 9.5, 10.5, 9], "texture": "#0"}, + "south": {"uv": [9.5, 10.5, 10, 10], "texture": "#0"}, + "west": {"uv": [10, 10, 10.5, 9.5], "texture": "#0"}, + "up": {"uv": [0.5, 11, 0, 10.5], "texture": "#0"}, + "down": {"uv": [10.5, 10, 10, 10.5], "texture": "#0"} + } + }, + { + "from": [7.75651, 0.57136, 7.8125], + "to": [8.00651, 1.19636, 8.1875], + "rotation": {"angle": 45, "axis": "z", "origin": [7.91276, 0.94636, 8]}, + "faces": { + "north": {"uv": [10.5, 3.5, 11, 3], "texture": "#0"}, + "east": {"uv": [3.5, 11, 4, 10.5], "texture": "#0"}, + "south": {"uv": [10.5, 4, 11, 3.5], "texture": "#0"}, + "west": {"uv": [4, 11, 4.5, 10.5], "texture": "#0"}, + "up": {"uv": [5, 11, 4.5, 10.5], "texture": "#0"}, + "down": {"uv": [11, 4, 10.5, 4.5], "texture": "#0"} + } + }, + { + "from": [8.06744, 0.57071, 7.8125], + "to": [8.25494, 1.00821, 8.1875], + "rotation": {"angle": 0, "axis": "z", "origin": [8.37994, 0.60196, 8]}, + "faces": { + "north": {"uv": [10.5, 5, 11, 4.5], "texture": "#0"}, + "east": {"uv": [5, 11, 5.5, 10.5], "texture": "#0"}, + "south": {"uv": [10.5, 5.5, 11, 5], "texture": "#0"}, + "west": {"uv": [5.5, 11, 6, 10.5], "texture": "#0"}, + "up": {"uv": [6.5, 11, 6, 10.5], "texture": "#0"}, + "down": {"uv": [11, 5.5, 10.5, 6], "texture": "#0"} + } + }, + { + "from": [8.25255, 0.63082, 7.8125], + "to": [8.31505, 0.93082, 8.1875], + "rotation": {"angle": 0, "axis": "z", "origin": [8.2213, 0.77457, 8]}, + "faces": { + "north": {"uv": [11.5, 8.5, 12, 8], "texture": "#0"}, + "east": {"uv": [8.5, 12, 9, 11.5], "texture": "#0"}, + "south": {"uv": [11.5, 9, 12, 8.5], "texture": "#0"}, + "west": {"uv": [9, 12, 9.5, 11.5], "texture": "#0"}, + "up": {"uv": [10, 12, 9.5, 11.5], "texture": "#0"}, + "down": {"uv": [12, 9, 11.5, 9.5], "texture": "#0"} + } + }, + { + "from": [8.19541, 0.59537, 7.8125], + "to": [8.25791, 0.68037, 8.1875], + "rotation": {"angle": -45, "axis": "z", "origin": [8.22666, 0.58662, 8]}, + "faces": { + "north": {"uv": [11.5, 10, 12, 9.5], "texture": "#0"}, + "east": {"uv": [10, 12, 10.5, 11.5], "texture": "#0"}, + "south": {"uv": [11.5, 10.5, 12, 10], "texture": "#0"}, + "west": {"uv": [10.5, 12, 11, 11.5], "texture": "#0"}, + "up": {"uv": [11.5, 12, 11, 11.5], "texture": "#0"}, + "down": {"uv": [12, 10.5, 11.5, 11], "texture": "#0"} + } + }, + { + "from": [7.6255, 1.01265, 7.8125], + "to": [7.7505, 1.13765, 8.1875], + "rotation": {"angle": 0, "axis": "z", "origin": [7.65675, 0.88765, 8]}, + "faces": { + "north": {"uv": [10.5, 2, 11, 1.5], "texture": "#0"}, + "east": {"uv": [2, 11, 2.5, 10.5], "texture": "#0"}, + "south": {"uv": [10.5, 2.5, 11, 2], "texture": "#0"}, + "west": {"uv": [2.5, 11, 3, 10.5], "texture": "#0"}, + "up": {"uv": [3.5, 11, 3, 10.5], "texture": "#0"}, + "down": {"uv": [11, 2.5, 10.5, 3], "texture": "#0"} + } + }, + { + "from": [7.81684, 3.82098, 7.89383], + "to": [8.31684, 4.25848, 7.95633], + "rotation": {"angle": 22.5, "axis": "x", "origin": [8.06684, 4.03973, 7.92508]}, + "faces": { + "north": {"uv": [0, 10.5, 0.5, 10], "texture": "#0"}, + "east": {"uv": [10, 0.5, 10.5, 0], "texture": "#0"}, + "south": {"uv": [0.5, 10.5, 1, 10], "texture": "#0"}, + "west": {"uv": [10, 1, 10.5, 0.5], "texture": "#0"}, + "up": {"uv": [10.5, 1.5, 10, 1], "texture": "#0"}, + "down": {"uv": [1.5, 10, 1, 10.5], "texture": "#0"} + } + }, + { + "from": [7.81684, 3.82098, 7.95633], + "to": [8.31684, 4.13348, 8.01883], + "rotation": {"angle": 22.5, "axis": "x", "origin": [8.06684, 4.03973, 7.92508]}, + "faces": { + "north": {"uv": [4.5, 10.5, 5, 10], "texture": "#0"}, + "east": {"uv": [10, 5, 10.5, 4.5], "texture": "#0"}, + "south": {"uv": [5, 10.5, 5.5, 10], "texture": "#0"}, + "west": {"uv": [10, 5.5, 10.5, 5], "texture": "#0"}, + "up": {"uv": [10.5, 6, 10, 5.5], "texture": "#0"}, + "down": {"uv": [6, 10, 5.5, 10.5], "texture": "#0"} + } + }, + { + "from": [7.81684, 3.82098, 8.04367], + "to": [8.31684, 4.25848, 8.10617], + "rotation": {"angle": -22.5, "axis": "x", "origin": [8.06684, 4.03973, 8.07492]}, + "faces": { + "north": {"uv": [1.5, 10.5, 2, 10], "texture": "#0"}, + "east": {"uv": [10, 2, 10.5, 1.5], "texture": "#0"}, + "south": {"uv": [2, 10.5, 2.5, 10], "texture": "#0"}, + "west": {"uv": [10, 2.5, 10.5, 2], "texture": "#0"}, + "up": {"uv": [10.5, 3, 10, 2.5], "texture": "#0"}, + "down": {"uv": [3, 10, 2.5, 10.5], "texture": "#0"} + } + }, + { + "from": [7.81684, 3.82098, 7.98117], + "to": [8.31684, 4.13348, 8.04367], + "rotation": {"angle": -22.5, "axis": "x", "origin": [8.06684, 4.03973, 8.07492]}, + "faces": { + "north": {"uv": [3, 10.5, 3.5, 10], "texture": "#0"}, + "east": {"uv": [10, 3.5, 10.5, 3], "texture": "#0"}, + "south": {"uv": [3.5, 10.5, 4, 10], "texture": "#0"}, + "west": {"uv": [10, 4, 10.5, 3.5], "texture": "#0"}, + "up": {"uv": [10.5, 4.5, 10, 4], "texture": "#0"}, + "down": {"uv": [4.5, 10, 4, 10.5], "texture": "#0"} + } + }, + { + "from": [8.64054, 4.58277, 7.9375], + "to": [9.14054, 7.08277, 8.0625], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8.89054, 4.70777, 7.9375]}, + "faces": { + "north": {"uv": [3, 1.5, 3.5, 0], "texture": "#0"}, + "east": {"uv": [3, 3, 3.5, 1.5], "texture": "#0"}, + "south": {"uv": [3, 4.5, 3.5, 3], "texture": "#0"}, + "west": {"uv": [0, 5, 0.5, 3.5], "texture": "#0"}, + "up": {"uv": [6.5, 3, 6, 2.5], "texture": "#0"}, + "down": {"uv": [3, 6, 2.5, 6.5], "texture": "#0"} + } + }, + { + "from": [8.27335, 4.33742, 7.9375], + "to": [9.02335, 5.33742, 8.0625], + "rotation": {"angle": 45, "axis": "z", "origin": [8.52335, 4.46242, 7.9375]}, + "faces": { + "north": {"uv": [1, 6.5, 1.5, 6], "texture": "#0"}, + "east": {"uv": [6, 1.5, 6.5, 1], "texture": "#0"}, + "south": {"uv": [1.5, 6.5, 2, 6], "texture": "#0"}, + "west": {"uv": [6, 2, 6.5, 1.5], "texture": "#0"}, + "up": {"uv": [6.5, 2.5, 6, 2], "texture": "#0"}, + "down": {"uv": [2.5, 6, 2, 6.5], "texture": "#0"} + } + }, + { + "from": [14.84068, 10.95484, 7.9375], + "to": [15.59068, 12.95484, 8.0625], + "rotation": {"angle": 22.5, "axis": "z", "origin": [9.21568, -4.54516, 7.9375]}, + "faces": { + "north": {"uv": [2, 5, 2.5, 4], "texture": "#0"}, + "east": {"uv": [2.5, 5, 3, 4], "texture": "#0"}, + "south": {"uv": [4, 4, 4.5, 3], "texture": "#0"}, + "west": {"uv": [4, 5, 4.5, 4], "texture": "#0"}, + "up": {"uv": [2, 6, 1.5, 5.5], "texture": "#0"}, + "down": {"uv": [6, 1, 5.5, 1.5], "texture": "#0"} + } + }, + { + "from": [14.84068, 10.95484, 7.9375], + "to": [15.09068, 13.95484, 8.0625], + "rotation": {"angle": 22.5, "axis": "z", "origin": [9.21568, -4.54516, 7.9375]}, + "faces": { + "north": {"uv": [3.5, 1.5, 4, 0], "texture": "#0"}, + "east": {"uv": [0.5, 5, 1, 3.5], "texture": "#0"}, + "south": {"uv": [1, 5, 1.5, 3.5], "texture": "#0"}, + "west": {"uv": [1.5, 5, 2, 3.5], "texture": "#0"}, + "up": {"uv": [9, 9, 8.5, 8.5], "texture": "#0"}, + "down": {"uv": [9, 8, 8.5, 8.5], "texture": "#0"} + } + }, + { + "from": [15.09068, 12.74467, 7.9375], + "to": [15.34068, 13.49467, 8.0625], + "rotation": {"angle": 22.5, "axis": "z", "origin": [9.21568, -4.54516, 7.9375]}, + "faces": { + "north": {"uv": [0, 9.5, 0.5, 9], "texture": "#0"}, + "east": {"uv": [9, 0.5, 9.5, 0], "texture": "#0"}, + "south": {"uv": [0.5, 9.5, 1, 9], "texture": "#0"}, + "west": {"uv": [9, 1, 9.5, 0.5], "texture": "#0"}, + "up": {"uv": [9.5, 1.5, 9, 1], "texture": "#0"}, + "down": {"uv": [1.5, 9, 1, 9.5], "texture": "#0"} + } + }, + { + "from": [7.22279, 13.57123, 7.9375], + "to": [7.47279, 15.32123, 8.0625], + "rotation": {"angle": 45, "axis": "z", "origin": [7.34779, 14.94623, 7.9375]}, + "faces": { + "north": {"uv": [5, 1, 5.5, 0], "texture": "#0"}, + "east": {"uv": [0.5, 6, 1, 5], "texture": "#0"}, + "south": {"uv": [1, 6, 1.5, 5], "texture": "#0"}, + "west": {"uv": [5, 2, 5.5, 1], "texture": "#0"}, + "up": {"uv": [6.5, 5.5, 6, 5], "texture": "#0"}, + "down": {"uv": [5.5, 6, 5, 6.5], "texture": "#0"} + } + }, + { + "from": [7.41029, 15.32123, 7.9375], + "to": [7.47279, 15.75873, 8.0625], + "rotation": {"angle": 45, "axis": "z", "origin": [7.34779, 14.94623, 7.9375]}, + "faces": { + "north": {"uv": [9.5, 0.5, 10, 0], "texture": "#0"}, + "east": {"uv": [0.5, 10, 1, 9.5], "texture": "#0"}, + "south": {"uv": [9.5, 1, 10, 0.5], "texture": "#0"}, + "west": {"uv": [1, 10, 1.5, 9.5], "texture": "#0"}, + "up": {"uv": [2, 10, 1.5, 9.5], "texture": "#0"}, + "down": {"uv": [10, 1, 9.5, 1.5], "texture": "#0"} + } + }, + { + "from": [7.34779, 15.57217, 7.9375], + "to": [7.41029, 15.64217, 8.0625], + "rotation": {"angle": 45, "axis": "z", "origin": [7.34779, 14.94623, 7.9375]}, + "faces": { + "north": {"uv": [9.5, 6.5, 10, 6], "texture": "#0"}, + "east": {"uv": [6.5, 10, 7, 9.5], "texture": "#0"}, + "south": {"uv": [9.5, 7, 10, 6.5], "texture": "#0"}, + "west": {"uv": [7, 10, 7.5, 9.5], "texture": "#0"}, + "up": {"uv": [8, 10, 7.5, 9.5], "texture": "#0"}, + "down": {"uv": [10, 7, 9.5, 7.5], "texture": "#0"} + } + }, + { + "from": [7.34779, 15.32123, 7.9375], + "to": [7.41029, 15.63373, 8.0625], + "rotation": {"angle": 45, "axis": "z", "origin": [7.34779, 14.94623, 7.9375]}, + "faces": { + "north": {"uv": [9.5, 3.5, 10, 3], "texture": "#0"}, + "east": {"uv": [3.5, 10, 4, 9.5], "texture": "#0"}, + "south": {"uv": [9.5, 4, 10, 3.5], "texture": "#0"}, + "west": {"uv": [4, 10, 4.5, 9.5], "texture": "#0"}, + "up": {"uv": [5, 10, 4.5, 9.5], "texture": "#0"}, + "down": {"uv": [10, 4, 9.5, 4.5], "texture": "#0"} + } + }, + { + "from": [6.79965, 15.55214, 7.9375], + "to": [6.86165, 15.60914, 8.0625], + "rotation": {"angle": 0, "axis": "z", "origin": [6.8309, 15.57789, 8]}, + "faces": { + "north": {"uv": [9.5, 2, 10, 1.5], "texture": "#0"}, + "east": {"uv": [2, 10, 2.5, 9.5], "texture": "#0"}, + "south": {"uv": [9.5, 2.5, 10, 2], "texture": "#0"}, + "west": {"uv": [2.5, 10, 3, 9.5], "texture": "#0"}, + "up": {"uv": [3.5, 10, 3, 9.5], "texture": "#0"}, + "down": {"uv": [10, 2.5, 9.5, 3], "texture": "#0"} + } + }, + { + "from": [14.04694, 12.24058, 7.9375], + "to": [14.29694, 14.42808, 8.0625], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8.67194, -3.00942, 7.9375]}, + "faces": { + "north": {"uv": [4.5, 4, 5, 3], "texture": "#0"}, + "east": {"uv": [3.5, 5.5, 4, 4.5], "texture": "#0"}, + "south": {"uv": [4.5, 5, 5, 4], "texture": "#0"}, + "west": {"uv": [0, 6, 0.5, 5], "texture": "#0"}, + "up": {"uv": [6.5, 5, 6, 4.5], "texture": "#0"}, + "down": {"uv": [5, 6, 4.5, 6.5], "texture": "#0"} + } + }, + { + "from": [14.04981, 14.42865, 7.9375], + "to": [14.11231, 14.85865, 8.0625], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8.67481, -3.01635, 7.9375]}, + "faces": { + "north": {"uv": [8, 9.5, 8.5, 9], "texture": "#0"}, + "east": {"uv": [9, 8.5, 9.5, 8], "texture": "#0"}, + "south": {"uv": [8.5, 9.5, 9, 9], "texture": "#0"}, + "west": {"uv": [9, 9, 9.5, 8.5], "texture": "#0"}, + "up": {"uv": [0.5, 10, 0, 9.5], "texture": "#0"}, + "down": {"uv": [9.5, 9, 9, 9.5], "texture": "#0"} + } + }, + { + "from": [14.11231, 14.42865, 7.9375], + "to": [14.17481, 14.73365, 8.0625], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8.67481, -3.01635, 7.9375]}, + "faces": { + "north": {"uv": [9.5, 5, 10, 4.5], "texture": "#0"}, + "east": {"uv": [5, 10, 5.5, 9.5], "texture": "#0"}, + "south": {"uv": [9.5, 5.5, 10, 5], "texture": "#0"}, + "west": {"uv": [5.5, 10, 6, 9.5], "texture": "#0"}, + "up": {"uv": [6.5, 10, 6, 9.5], "texture": "#0"}, + "down": {"uv": [10, 5.5, 9.5, 6], "texture": "#0"} + } + }, + { + "from": [14.17481, 14.42865, 7.9375], + "to": [14.23731, 14.54615, 8.0625], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8.67481, -3.01635, 7.9375]}, + "faces": { + "north": {"uv": [9.5, 8, 10, 7.5], "texture": "#0"}, + "east": {"uv": [8, 10, 8.5, 9.5], "texture": "#0"}, + "south": {"uv": [9.5, 8.5, 10, 8], "texture": "#0"}, + "west": {"uv": [8.5, 10, 9, 9.5], "texture": "#0"}, + "up": {"uv": [9.5, 10, 9, 9.5], "texture": "#0"}, + "down": {"uv": [10, 8.5, 9.5, 9], "texture": "#0"} + } + }, + { + "from": [14.04694, 12.24058, 7.9375], + "to": [14.29694, 14.42808, 8.0625], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8.67194, -3.00942, 7.9375]}, + "faces": { + "north": {"uv": [4.5, 4, 5, 3], "texture": "#0"}, + "east": {"uv": [3.5, 5.5, 4, 4.5], "texture": "#0"}, + "south": {"uv": [4.5, 5, 5, 4], "texture": "#0"}, + "west": {"uv": [0, 6, 0.5, 5], "texture": "#0"}, + "up": {"uv": [6.5, 5, 6, 4.5], "texture": "#0"}, + "down": {"uv": [5, 6, 4.5, 6.5], "texture": "#0"} + } + }, + { + "from": [7.22279, 13.57123, 7.9375], + "to": [7.47279, 15.32123, 8.0625], + "rotation": {"angle": 45, "axis": "z", "origin": [7.34779, 14.94623, 7.9375]}, + "faces": { + "north": {"uv": [5, 1, 5.5, 0], "texture": "#0"}, + "east": {"uv": [0.5, 6, 1, 5], "texture": "#0"}, + "south": {"uv": [1, 6, 1.5, 5], "texture": "#0"}, + "west": {"uv": [5, 2, 5.5, 1], "texture": "#0"}, + "up": {"uv": [6.5, 5.5, 6, 5], "texture": "#0"}, + "down": {"uv": [5.5, 6, 5, 6.5], "texture": "#0"} + } + }, + { + "from": [14.04981, 14.42865, 7.9375], + "to": [14.11231, 14.85865, 8.0625], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8.67481, -3.01635, 7.9375]}, + "faces": { + "north": {"uv": [8, 9.5, 8.5, 9], "texture": "#0"}, + "east": {"uv": [9, 8.5, 9.5, 8], "texture": "#0"}, + "south": {"uv": [8.5, 9.5, 9, 9], "texture": "#0"}, + "west": {"uv": [9, 9, 9.5, 8.5], "texture": "#0"}, + "up": {"uv": [0.5, 10, 0, 9.5], "texture": "#0"}, + "down": {"uv": [9.5, 9, 9, 9.5], "texture": "#0"} + } + }, + { + "from": [7.41029, 15.32123, 7.9375], + "to": [7.47279, 15.75873, 8.0625], + "rotation": {"angle": 45, "axis": "z", "origin": [7.34779, 14.94623, 7.9375]}, + "faces": { + "north": {"uv": [9.5, 0.5, 10, 0], "texture": "#0"}, + "east": {"uv": [0.5, 10, 1, 9.5], "texture": "#0"}, + "south": {"uv": [9.5, 1, 10, 0.5], "texture": "#0"}, + "west": {"uv": [1, 10, 1.5, 9.5], "texture": "#0"}, + "up": {"uv": [2, 10, 1.5, 9.5], "texture": "#0"}, + "down": {"uv": [10, 1, 9.5, 1.5], "texture": "#0"} + } + }, + { + "from": [6.79965, 15.55214, 7.9375], + "to": [6.86165, 15.60914, 8.0625], + "rotation": {"angle": 0, "axis": "z", "origin": [6.8309, 15.57789, 8]}, + "faces": { + "north": {"uv": [9.5, 2, 10, 1.5], "texture": "#0"}, + "east": {"uv": [2, 10, 2.5, 9.5], "texture": "#0"}, + "south": {"uv": [9.5, 2.5, 10, 2], "texture": "#0"}, + "west": {"uv": [2.5, 10, 3, 9.5], "texture": "#0"}, + "up": {"uv": [3.5, 10, 3, 9.5], "texture": "#0"}, + "down": {"uv": [10, 2.5, 9.5, 3], "texture": "#0"} + } + }, + { + "from": [7.34779, 15.32123, 7.9375], + "to": [7.41029, 15.63373, 8.0625], + "rotation": {"angle": 45, "axis": "z", "origin": [7.34779, 14.94623, 7.9375]}, + "faces": { + "north": {"uv": [9.5, 3.5, 10, 3], "texture": "#0"}, + "east": {"uv": [3.5, 10, 4, 9.5], "texture": "#0"}, + "south": {"uv": [9.5, 4, 10, 3.5], "texture": "#0"}, + "west": {"uv": [4, 10, 4.5, 9.5], "texture": "#0"}, + "up": {"uv": [5, 10, 4.5, 9.5], "texture": "#0"}, + "down": {"uv": [10, 4, 9.5, 4.5], "texture": "#0"} + } + }, + { + "from": [14.11231, 14.42865, 7.9375], + "to": [14.17481, 14.73365, 8.0625], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8.67481, -3.01635, 7.9375]}, + "faces": { + "north": {"uv": [9.5, 5, 10, 4.5], "texture": "#0"}, + "east": {"uv": [5, 10, 5.5, 9.5], "texture": "#0"}, + "south": {"uv": [9.5, 5.5, 10, 5], "texture": "#0"}, + "west": {"uv": [5.5, 10, 6, 9.5], "texture": "#0"}, + "up": {"uv": [6.5, 10, 6, 9.5], "texture": "#0"}, + "down": {"uv": [10, 5.5, 9.5, 6], "texture": "#0"} + } + }, + { + "from": [7.34779, 15.57217, 7.9375], + "to": [7.41029, 15.64217, 8.0625], + "rotation": {"angle": 45, "axis": "z", "origin": [7.34779, 14.94623, 7.9375]}, + "faces": { + "north": {"uv": [9.5, 6.5, 10, 6], "texture": "#0"}, + "east": {"uv": [6.5, 10, 7, 9.5], "texture": "#0"}, + "south": {"uv": [9.5, 7, 10, 6.5], "texture": "#0"}, + "west": {"uv": [7, 10, 7.5, 9.5], "texture": "#0"}, + "up": {"uv": [8, 10, 7.5, 9.5], "texture": "#0"}, + "down": {"uv": [10, 7, 9.5, 7.5], "texture": "#0"} + } + }, + { + "from": [14.17481, 14.42865, 7.9375], + "to": [14.23731, 14.54615, 8.0625], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8.67481, -3.01635, 7.9375]}, + "faces": { + "north": {"uv": [9.5, 8, 10, 7.5], "texture": "#0"}, + "east": {"uv": [8, 10, 8.5, 9.5], "texture": "#0"}, + "south": {"uv": [9.5, 8.5, 10, 8], "texture": "#0"}, + "west": {"uv": [8.5, 10, 9, 9.5], "texture": "#0"}, + "up": {"uv": [9.5, 10, 9, 9.5], "texture": "#0"}, + "down": {"uv": [10, 8.5, 9.5, 9], "texture": "#0"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [0, 90, 0], + "translation": [0, 12, 1.25], + "scale": [2.65, 2.65, 2.65] + }, + "thirdperson_lefthand": { + "rotation": [0, -90, 0], + "translation": [0, 12, 1.25], + "scale": [2.65, 2.65, 2.65] + }, + "firstperson_righthand": { + "rotation": [0, 90, 0], + "translation": [0, 7.75, 0], + "scale": [1.85, 1.85, 1.85] + }, + "firstperson_lefthand": { + "rotation": [0, -90, 0], + "translation": [0, 7.75, 0], + "scale": [1.85, 1.85, 1.85] + }, + "ground": { + "translation": [0, 3.75, 0] + }, + "gui": { + "rotation": [0, 0, -45], + "translation": [1, 1, 0] + }, + "fixed": { + "rotation": [0, 180, -45], + "translation": [-2, 2, 0] + } + }, + "groups": [ + { + "name": "Everything", + "origin": [8, 8, 8], + "color": 0, + "children": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110 + ] + } + ] +} \ No newline at end of file diff --git a/src/surgebinding/resources/assets/surgebinding/models/item/master_sword.json b/src/surgebinding/resources/assets/surgebinding/models/item/master_sword.json new file mode 100644 index 000000000..590e1dd8b --- /dev/null +++ b/src/surgebinding/resources/assets/surgebinding/models/item/master_sword.json @@ -0,0 +1,907 @@ +{ + "credit": "Made with Blockbench", + "parent": "forge:item/default", + "textures": { + "1": "surgebinding:item/models/shardblade_model/master_sword", + "particle": "surgebinding:item/models/shardblade_model/master_sword" + }, + "elements": [ + { + "name": "blade_sides", + "from": [ + 6, + 11.5, + 8 + ], + "to": [ + 10, + 28.5, + 8 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 8, + 21.5, + 8 + ] + }, + "faces": { + "north": { + "uv": [ + 0, + 0, + 3, + 16 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 0, + 0, + 1, + 16 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 0, + 0, + 3, + 16 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 0, + 0, + 1, + 16 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 0, + 0, + 1, + 3 + ], + "rotation": 90, + "texture": "#1" + }, + "down": { + "uv": [ + 0, + 0, + 1, + 3 + ], + "rotation": 270, + "texture": "#1" + } + } + }, + { + "name": "blade_tall", + "from": [ + 7, + 10.5, + 7.5 + ], + "to": [ + 9, + 32, + 8.5 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 8, + 21.5, + 8 + ] + }, + "faces": { + "north": { + "uv": [ + 0, + 0, + 2, + 16 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 0, + 0, + 1, + 16 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 0, + 0, + 2, + 16 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 0, + 0, + 1, + 16 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 0, + 0, + 1, + 2 + ], + "rotation": 90, + "texture": "#1" + }, + "down": { + "uv": [ + 0, + 0, + 1, + 2 + ], + "rotation": 270, + "texture": "#1" + } + } + }, + { + "name": "handguard_inner", + "from": [ + 5.5, + 7.5, + 7 + ], + "to": [ + 10.5, + 9.5, + 9 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 8, + 10, + 8 + ] + }, + "faces": { + "north": { + "uv": [ + 13, + 0, + 16, + 3 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 13, + 0, + 16, + 1 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 13, + 0, + 16, + 3 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 13, + 0, + 16, + 1 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 13, + 0, + 16, + 3 + ], + "rotation": 270, + "texture": "#1" + }, + "down": { + "uv": [ + 13, + 0, + 16, + 3 + ], + "rotation": 90, + "texture": "#1" + } + } + }, + { + "name": "handguard_upper", + "from": [ + 6, + 9.5, + 7.5 + ], + "to": [ + 10, + 10.5, + 8.5 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 8, + 11.5, + 8 + ] + }, + "faces": { + "north": { + "uv": [ + 13, + 0, + 16, + 1 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 13, + 0, + 16, + 1 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 13, + 0, + 16, + 1 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 13, + 0, + 16, + 1 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 13, + 0, + 16, + 3 + ], + "rotation": 270, + "texture": "#1" + }, + "down": { + "uv": [ + 13, + 0, + 16, + 3 + ], + "rotation": 90, + "texture": "#1" + } + } + }, + { + "name": "handguard_outer", + "from": [ + 4, + 7.75, + 7.5 + ], + "to": [ + 12, + 8.75, + 8.5 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 8, + 9.75, + 8 + ] + }, + "faces": { + "north": { + "uv": [ + 13, + 0, + 16, + 1 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 13, + 0, + 16, + 1 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 13, + 0, + 16, + 1 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 13, + 0, + 16, + 1 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 13, + 0, + 16, + 3 + ], + "rotation": 270, + "texture": "#1" + }, + "down": { + "uv": [ + 13, + 0, + 16, + 3 + ], + "rotation": 90, + "texture": "#1" + } + } + }, + { + "name": "handguard_side", + "from": [ + 11, + 8, + 8 + ], + "to": [ + 13, + 10, + 8 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 12, + 10.5, + 8 + ] + }, + "faces": { + "north": { + "uv": [ + 14, + 13, + 16, + 15 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 13, + 14, + 16, + 16 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 13, + 13, + 15, + 15 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 13, + 14, + 16, + 16 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 13, + 11, + 16, + 14 + ], + "rotation": 180, + "texture": "#1" + }, + "down": { + "uv": [ + 13, + 11, + 16, + 14 + ], + "rotation": 180, + "texture": "#1" + } + } + }, + { + "name": "handguard_side", + "from": [ + 3, + 8, + 8 + ], + "to": [ + 5, + 10, + 8 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 4, + 10.5, + 8 + ] + }, + "faces": { + "north": { + "uv": [ + 13, + 13, + 15, + 15 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 13, + 14, + 16, + 16 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 14, + 13, + 16, + 15 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 13, + 14, + 16, + 16 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 13, + 11, + 16, + 14 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 13, + 11, + 16, + 14 + ], + "texture": "#1" + } + } + }, + { + "name": "handle", + "from": [ + 7.51237, + 2, + 7.47014 + ], + "to": [ + 8.51237, + 7.5, + 8.47014 + ], + "rotation": { + "angle": 45, + "axis": "y", + "origin": [ + 8.01237, + 5.5, + 7.97014 + ] + }, + "faces": { + "north": { + "uv": [ + 5, + 8, + 6, + 15 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 5, + 8, + 6, + 15 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 5, + 8, + 6, + 15 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 5, + 8, + 6, + 15 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 5, + 8, + 6, + 9 + ], + "rotation": 90, + "texture": "#1" + }, + "down": { + "uv": [ + 5, + 9, + 6, + 10 + ], + "rotation": 270, + "texture": "#1" + } + } + }, + { + "name": "handle", + "from": [ + 7.5, + 2, + 7.5 + ], + "to": [ + 8.5, + 7.5, + 8.5 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 8, + 5.5, + 8 + ] + }, + "faces": { + "north": { + "uv": [ + 5, + 8, + 6, + 15 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 5, + 8, + 6, + 15 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 5, + 8, + 6, + 15 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 5, + 8, + 6, + 15 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 5, + 8, + 6, + 9 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 5, + 9, + 6, + 10 + ], + "texture": "#1" + } + } + }, + { + "name": "pommel", + "from": [ + 6, + 0, + 8 + ], + "to": [ + 10, + 3, + 8 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 8, + 1.5, + 8 + ] + }, + "faces": { + "north": { + "uv": [ + 13, + 12, + 16, + 16 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 13, + 14, + 16, + 16 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 13, + 12, + 16, + 16 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 13, + 14, + 16, + 16 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 13, + 11, + 16, + 14 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 13, + 11, + 16, + 14 + ], + "texture": "#1" + } + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [ + 0, + 90, + 0 + ], + "translation": [ + -0.5, + 0.75, + 0 + ] + }, + "thirdperson_lefthand": { + "rotation": [ + 0, + 90, + 0 + ], + "translation": [ + -0.5, + 0.75, + 0 + ] + }, + "firstperson_righthand": { + "rotation": [ + 0, + 90, + 0 + ] + }, + "firstperson_lefthand": { + "rotation": [ + 0, + 90, + 0 + ] + }, + "ground": { + "translation": [ + 0, + 4, + 0 + ] + }, + "gui": { + "rotation": [ + 0, + 0, + -45 + ], + "translation": [ + -3.5, + -3.5, + -2 + ], + "scale": [ + 0.67, + 0.67, + 0.67 + ] + }, + "fixed": { + "rotation": [ + 0, + 0, + 46 + ], + "translation": [ + 4.5, + -3.75, + -1.25 + ], + "scale": [ + 0.78, + 0.78, + 0.78 + ] + } + }, + "groups": [ + { + "name": "blade", + "origin": [ + 8, + 8, + 8 + ], + "children": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9 + ] + } + ] +} \ No newline at end of file diff --git a/src/surgebinding/resources/assets/surgebinding/models/item/nightblood.json b/src/surgebinding/resources/assets/surgebinding/models/item/nightblood.json new file mode 100644 index 000000000..d9730607f --- /dev/null +++ b/src/surgebinding/resources/assets/surgebinding/models/item/nightblood.json @@ -0,0 +1,535 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "surgebinding:item/models/shardblade_model/nightblood", + "particle": "surgebinding:item/models/shardblade_model/nightblood" + }, + "elements": [ + { + "from": [7.625, 3.89268, 7.96875], + "to": [8.375, 11.33018, 8.03125], + "rotation": {"angle": 0, "axis": "y", "origin": [7.375, 3.83018, 7.03125]}, + "faces": { + "north": {"uv": [0, 0, 1, 7], "texture": "#0"}, + "east": {"uv": [1, 0, 2, 7], "texture": "#0"}, + "south": {"uv": [2, 0, 3, 7], "texture": "#0"}, + "west": {"uv": [3, 0, 4, 7], "texture": "#0"}, + "up": {"uv": [6, 3, 5, 2], "texture": "#0"}, + "down": {"uv": [6, 3, 5, 4], "texture": "#0"} + } + }, + { + "from": [7.875, 2.26768, 7.90625], + "to": [8.125, 3.83018, 8.09375], + "rotation": {"angle": 0, "axis": "y", "origin": [7.375, 3.83018, 7.03125]}, + "faces": { + "north": {"uv": [4, 0, 5, 2], "texture": "#0"}, + "east": {"uv": [4, 2, 5, 4], "texture": "#0"}, + "south": {"uv": [4, 4, 5, 6], "texture": "#0"}, + "west": {"uv": [5, 0, 6, 2], "texture": "#0"}, + "up": {"uv": [2, 13, 1, 12], "texture": "#0"}, + "down": {"uv": [13, 1, 12, 2], "texture": "#0"} + } + }, + { + "from": [7.875, 2.14268, 7.90625], + "to": [8.125, 2.26768, 8.09375], + "rotation": {"angle": 0, "axis": "y", "origin": [7.375, 3.83018, 7.03125]}, + "faces": { + "north": {"uv": [15, 6, 16, 7], "texture": "#0"}, + "east": {"uv": [7, 15, 8, 16], "texture": "#0"}, + "south": {"uv": [15, 7, 16, 8], "texture": "#0"}, + "west": {"uv": [8, 15, 9, 16], "texture": "#0"}, + "up": {"uv": [16, 9, 15, 8], "texture": "#0"}, + "down": {"uv": [10, 15, 9, 16], "texture": "#0"} + } + }, + { + "from": [7.9375, 2.08018, 7.96875], + "to": [8.0625, 2.14268, 8.03125], + "rotation": {"angle": 0, "axis": "y", "origin": [7.375, 3.83018, 7.03125]}, + "faces": { + "north": {"uv": [15, 9, 16, 10], "texture": "#0"}, + "east": {"uv": [10, 15, 11, 16], "texture": "#0"}, + "south": {"uv": [15, 10, 16, 11], "texture": "#0"}, + "west": {"uv": [11, 15, 12, 16], "texture": "#0"}, + "up": {"uv": [16, 12, 15, 11], "texture": "#0"}, + "down": {"uv": [13, 15, 12, 16], "texture": "#0"} + } + }, + { + "from": [7.5, 3.83018, 7.84375], + "to": [8.5, 3.89268, 8.15625], + "rotation": {"angle": 0, "axis": "y", "origin": [7.375, 3.83018, 7.03125]}, + "faces": { + "north": {"uv": [9, 8, 10, 9], "texture": "#0"}, + "east": {"uv": [9, 9, 10, 10], "texture": "#0"}, + "south": {"uv": [0, 10, 1, 11], "texture": "#0"}, + "west": {"uv": [10, 0, 11, 1], "texture": "#0"}, + "up": {"uv": [2, 11, 1, 10], "texture": "#0"}, + "down": {"uv": [11, 1, 10, 2], "texture": "#0"} + } + }, + { + "from": [7.9375, 3.89268, 7.90625], + "to": [8.0625, 3.95518, 8.09375], + "rotation": {"angle": 0, "axis": "y", "origin": [7.375, 3.83018, 7.03125]}, + "faces": { + "north": {"uv": [15, 3, 16, 4], "texture": "#0"}, + "east": {"uv": [4, 15, 5, 16], "texture": "#0"}, + "south": {"uv": [15, 4, 16, 5], "texture": "#0"}, + "west": {"uv": [5, 15, 6, 16], "texture": "#0"}, + "up": {"uv": [16, 6, 15, 5], "texture": "#0"}, + "down": {"uv": [7, 15, 6, 16], "texture": "#0"} + } + }, + { + "from": [8.48328, 3.83018, 7.86529], + "to": [8.67078, 3.89268, 7.92779], + "rotation": {"angle": -22.5, "axis": "y", "origin": [8.54578, 3.86143, 7.89654]}, + "faces": { + "north": {"uv": [3, 14, 4, 15], "texture": "#0"}, + "east": {"uv": [14, 3, 15, 4], "texture": "#0"}, + "south": {"uv": [4, 14, 5, 15], "texture": "#0"}, + "west": {"uv": [14, 4, 15, 5], "texture": "#0"}, + "up": {"uv": [6, 15, 5, 14], "texture": "#0"}, + "down": {"uv": [15, 5, 14, 6], "texture": "#0"} + } + }, + { + "from": [8.48328, 3.83018, 8.07221], + "to": [8.67078, 3.89268, 8.13471], + "rotation": {"angle": 22.5, "axis": "y", "origin": [8.54578, 3.86143, 8.10346]}, + "faces": { + "north": {"uv": [6, 14, 7, 15], "texture": "#0"}, + "east": {"uv": [14, 6, 15, 7], "texture": "#0"}, + "south": {"uv": [7, 14, 8, 15], "texture": "#0"}, + "west": {"uv": [14, 7, 15, 8], "texture": "#0"}, + "up": {"uv": [9, 15, 8, 14], "texture": "#0"}, + "down": {"uv": [15, 8, 14, 9], "texture": "#0"} + } + }, + { + "from": [7.32922, 3.83018, 8.07221], + "to": [7.51672, 3.89268, 8.13471], + "rotation": {"angle": -22.5, "axis": "y", "origin": [7.45422, 3.86143, 8.10346]}, + "faces": { + "north": {"uv": [12, 14, 13, 15], "texture": "#0"}, + "east": {"uv": [14, 12, 15, 13], "texture": "#0"}, + "south": {"uv": [13, 14, 14, 15], "texture": "#0"}, + "west": {"uv": [14, 13, 15, 14], "texture": "#0"}, + "up": {"uv": [15, 15, 14, 14], "texture": "#0"}, + "down": {"uv": [1, 15, 0, 16], "texture": "#0"} + } + }, + { + "from": [7.32922, 3.83018, 7.86529], + "to": [7.51672, 3.89268, 7.92779], + "rotation": {"angle": 22.5, "axis": "y", "origin": [7.45422, 3.86143, 7.89654]}, + "faces": { + "north": {"uv": [9, 14, 10, 15], "texture": "#0"}, + "east": {"uv": [14, 9, 15, 10], "texture": "#0"}, + "south": {"uv": [10, 14, 11, 15], "texture": "#0"}, + "west": {"uv": [14, 10, 15, 11], "texture": "#0"}, + "up": {"uv": [12, 15, 11, 14], "texture": "#0"}, + "down": {"uv": [15, 11, 14, 12], "texture": "#0"} + } + }, + { + "from": [7.2761, 4.0239, 7.90625], + "to": [7.5261, 4.0864, 8.09375], + "rotation": {"angle": -22.5, "axis": "z", "origin": [7.0261, 4.05515, 8]}, + "faces": { + "north": {"uv": [11, 0, 12, 1], "texture": "#0"}, + "east": {"uv": [1, 11, 2, 12], "texture": "#0"}, + "south": {"uv": [11, 1, 12, 2], "texture": "#0"}, + "west": {"uv": [2, 11, 3, 12], "texture": "#0"}, + "up": {"uv": [12, 3, 11, 2], "texture": "#0"}, + "down": {"uv": [4, 11, 3, 12], "texture": "#0"} + } + }, + { + "from": [7.04062, 4.01632, 7.90625], + "to": [7.46812, 4.07882, 8.09375], + "rotation": {"angle": -45, "axis": "z", "origin": [7.16562, 4.04757, 8]}, + "faces": { + "north": {"uv": [11, 6, 12, 7], "texture": "#0"}, + "east": {"uv": [7, 11, 8, 12], "texture": "#0"}, + "south": {"uv": [11, 7, 12, 8], "texture": "#0"}, + "west": {"uv": [8, 11, 9, 12], "texture": "#0"}, + "up": {"uv": [12, 9, 11, 8], "texture": "#0"}, + "down": {"uv": [10, 11, 9, 12], "texture": "#0"} + } + }, + { + "from": [7.05474, 4.04666, 7.90625], + "to": [7.29474, 4.07666, 8.09375], + "rotation": {"angle": -45, "axis": "z", "origin": [7.17974, 4.07791, 8]}, + "faces": { + "north": {"uv": [13, 7, 14, 8], "texture": "#0"}, + "east": {"uv": [8, 13, 9, 14], "texture": "#0"}, + "south": {"uv": [13, 8, 14, 9], "texture": "#0"}, + "west": {"uv": [9, 13, 10, 14], "texture": "#0"}, + "up": {"uv": [14, 10, 13, 9], "texture": "#0"}, + "down": {"uv": [11, 13, 10, 14], "texture": "#0"} + } + }, + { + "from": [7.05047, 4.12542, 7.90625], + "to": [7.09047, 4.16542, 8.09375], + "rotation": {"angle": 0, "axis": "z", "origin": [7.07672, 4.15667, 8]}, + "faces": { + "north": {"uv": [13, 4, 14, 5], "texture": "#0"}, + "east": {"uv": [5, 13, 6, 14], "texture": "#0"}, + "south": {"uv": [13, 5, 14, 6], "texture": "#0"}, + "west": {"uv": [6, 13, 7, 14], "texture": "#0"}, + "up": {"uv": [14, 7, 13, 6], "texture": "#0"}, + "down": {"uv": [8, 13, 7, 14], "texture": "#0"} + } + }, + { + "from": [8.90953, 4.12542, 7.90625], + "to": [8.94953, 4.16542, 8.09375], + "rotation": {"angle": 0, "axis": "z", "origin": [8.92328, 4.15667, 8]}, + "faces": { + "north": {"uv": [0, 14, 1, 15], "texture": "#0"}, + "east": {"uv": [14, 0, 15, 1], "texture": "#0"}, + "south": {"uv": [1, 14, 2, 15], "texture": "#0"}, + "west": {"uv": [14, 1, 15, 2], "texture": "#0"}, + "up": {"uv": [3, 15, 2, 14], "texture": "#0"}, + "down": {"uv": [15, 2, 14, 3], "texture": "#0"} + } + }, + { + "from": [8.70526, 4.04666, 7.90625], + "to": [8.94526, 4.07666, 8.09375], + "rotation": {"angle": 45, "axis": "z", "origin": [8.82026, 4.07791, 8]}, + "faces": { + "north": {"uv": [13, 10, 14, 11], "texture": "#0"}, + "east": {"uv": [11, 13, 12, 14], "texture": "#0"}, + "south": {"uv": [13, 11, 14, 12], "texture": "#0"}, + "west": {"uv": [12, 13, 13, 14], "texture": "#0"}, + "up": {"uv": [14, 13, 13, 12], "texture": "#0"}, + "down": {"uv": [14, 13, 13, 14], "texture": "#0"} + } + }, + { + "from": [7.08653, 3.81738, 7.90625], + "to": [7.39903, 3.94238, 8.09375], + "rotation": {"angle": -45, "axis": "z", "origin": [7.27403, 3.84863, 8]}, + "faces": { + "north": {"uv": [11, 3, 12, 4], "texture": "#0"}, + "east": {"uv": [4, 11, 5, 12], "texture": "#0"}, + "south": {"uv": [11, 4, 12, 5], "texture": "#0"}, + "west": {"uv": [5, 11, 6, 12], "texture": "#0"}, + "up": {"uv": [12, 6, 11, 5], "texture": "#0"}, + "down": {"uv": [7, 11, 6, 12], "texture": "#0"} + } + }, + { + "from": [7.05718, 3.95918, 7.90625], + "to": [7.11968, 4.13918, 8.09375], + "rotation": {"angle": 22.5, "axis": "z", "origin": [7.08843, 4.11543, 8]}, + "faces": { + "north": {"uv": [11, 9, 12, 10], "texture": "#0"}, + "east": {"uv": [10, 11, 11, 12], "texture": "#0"}, + "south": {"uv": [11, 10, 12, 11], "texture": "#0"}, + "west": {"uv": [11, 11, 12, 12], "texture": "#0"}, + "up": {"uv": [1, 13, 0, 12], "texture": "#0"}, + "down": {"uv": [13, 0, 12, 1], "texture": "#0"} + } + }, + { + "from": [7.3678, 3.80388, 7.90625], + "to": [7.4928, 3.86638, 8.09375], + "rotation": {"angle": 22.5, "axis": "z", "origin": [7.4303, 3.83513, 8]}, + "faces": { + "north": {"uv": [8, 10, 9, 11], "texture": "#0"}, + "east": {"uv": [10, 8, 11, 9], "texture": "#0"}, + "south": {"uv": [9, 10, 10, 11], "texture": "#0"}, + "west": {"uv": [10, 9, 11, 10], "texture": "#0"}, + "up": {"uv": [11, 11, 10, 10], "texture": "#0"}, + "down": {"uv": [1, 11, 0, 12], "texture": "#0"} + } + }, + { + "from": [8.5072, 3.80388, 7.90625], + "to": [8.6322, 3.86638, 8.09375], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8.5697, 3.83513, 8]}, + "faces": { + "north": {"uv": [13, 1, 14, 2], "texture": "#0"}, + "east": {"uv": [2, 13, 3, 14], "texture": "#0"}, + "south": {"uv": [13, 2, 14, 3], "texture": "#0"}, + "west": {"uv": [3, 13, 4, 14], "texture": "#0"}, + "up": {"uv": [14, 4, 13, 3], "texture": "#0"}, + "down": {"uv": [5, 13, 4, 14], "texture": "#0"} + } + }, + { + "from": [8.4739, 4.0239, 7.90625], + "to": [8.7239, 4.0864, 8.09375], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8.9739, 4.05515, 8]}, + "faces": { + "north": {"uv": [11, 12, 12, 13], "texture": "#0"}, + "east": {"uv": [12, 11, 13, 12], "texture": "#0"}, + "south": {"uv": [12, 12, 13, 13], "texture": "#0"}, + "west": {"uv": [0, 13, 1, 14], "texture": "#0"}, + "up": {"uv": [14, 1, 13, 0], "texture": "#0"}, + "down": {"uv": [2, 13, 1, 14], "texture": "#0"} + } + }, + { + "from": [8.60097, 3.81738, 7.90625], + "to": [8.91347, 3.94238, 8.09375], + "rotation": {"angle": 45, "axis": "z", "origin": [8.72597, 3.84863, 8]}, + "faces": { + "north": {"uv": [8, 12, 9, 13], "texture": "#0"}, + "east": {"uv": [12, 8, 13, 9], "texture": "#0"}, + "south": {"uv": [9, 12, 10, 13], "texture": "#0"}, + "west": {"uv": [12, 9, 13, 10], "texture": "#0"}, + "up": {"uv": [11, 13, 10, 12], "texture": "#0"}, + "down": {"uv": [13, 10, 12, 11], "texture": "#0"} + } + }, + { + "from": [8.71938, 4.01632, 7.90625], + "to": [8.95938, 4.07882, 8.09375], + "rotation": {"angle": 45, "axis": "z", "origin": [8.83438, 4.04757, 8]}, + "faces": { + "north": {"uv": [5, 12, 6, 13], "texture": "#0"}, + "east": {"uv": [12, 5, 13, 6], "texture": "#0"}, + "south": {"uv": [6, 12, 7, 13], "texture": "#0"}, + "west": {"uv": [12, 6, 13, 7], "texture": "#0"}, + "up": {"uv": [8, 13, 7, 12], "texture": "#0"}, + "down": {"uv": [13, 7, 12, 8], "texture": "#0"} + } + }, + { + "from": [8.88032, 3.95918, 7.90625], + "to": [8.94282, 4.13918, 8.09375], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8.91157, 4.11543, 8]}, + "faces": { + "north": {"uv": [2, 12, 3, 13], "texture": "#0"}, + "east": {"uv": [12, 2, 13, 3], "texture": "#0"}, + "south": {"uv": [3, 12, 4, 13], "texture": "#0"}, + "west": {"uv": [12, 3, 13, 4], "texture": "#0"}, + "up": {"uv": [5, 13, 4, 12], "texture": "#0"}, + "down": {"uv": [13, 4, 12, 5], "texture": "#0"} + } + }, + { + "from": [7.97568, 3.89647, 7.90625], + "to": [8.16318, 3.95897, 8.09375], + "rotation": {"angle": -45, "axis": "z", "origin": [8.06943, 3.92772, 8]}, + "faces": { + "north": {"uv": [2, 10, 3, 11], "texture": "#0"}, + "east": {"uv": [10, 2, 11, 3], "texture": "#0"}, + "south": {"uv": [3, 10, 4, 11], "texture": "#0"}, + "west": {"uv": [10, 3, 11, 4], "texture": "#0"}, + "up": {"uv": [5, 11, 4, 10], "texture": "#0"}, + "down": {"uv": [11, 4, 10, 5], "texture": "#0"} + } + }, + { + "from": [7.94037, 3.95897, 7.90625], + "to": [8.12787, 3.98397, 8.09375], + "rotation": {"angle": -45, "axis": "z", "origin": [8.03412, 3.92772, 8]}, + "faces": { + "north": {"uv": [15, 0, 16, 1], "texture": "#0"}, + "east": {"uv": [1, 15, 2, 16], "texture": "#0"}, + "south": {"uv": [15, 1, 16, 2], "texture": "#0"}, + "west": {"uv": [2, 15, 3, 16], "texture": "#0"}, + "up": {"uv": [16, 3, 15, 2], "texture": "#0"}, + "down": {"uv": [4, 15, 3, 16], "texture": "#0"} + } + }, + { + "from": [7.75, 3.51768, 7.90625], + "to": [7.9375, 3.58018, 8.09375], + "rotation": {"angle": 45, "axis": "z", "origin": [7.4375, 3.86143, 8]}, + "faces": { + "north": {"uv": [5, 10, 6, 11], "texture": "#0"}, + "east": {"uv": [10, 5, 11, 6], "texture": "#0"}, + "south": {"uv": [6, 10, 7, 11], "texture": "#0"}, + "west": {"uv": [10, 6, 11, 7], "texture": "#0"}, + "up": {"uv": [8, 11, 7, 10], "texture": "#0"}, + "down": {"uv": [11, 7, 10, 8], "texture": "#0"} + } + }, + { + "from": [7.57085, 11.94646, 7.96875], + "to": [7.62785, 12.00346, 8.03125], + "rotation": {"angle": 45, "axis": "z", "origin": [7.6021, 12.54021, 8.09375]}, + "faces": { + "north": {"uv": [15, 12, 16, 13], "texture": "#0"}, + "east": {"uv": [13, 15, 14, 16], "texture": "#0"}, + "south": {"uv": [15, 13, 16, 14], "texture": "#0"}, + "west": {"uv": [14, 15, 15, 16], "texture": "#0"}, + "up": {"uv": [16, 15, 15, 14], "texture": "#0"}, + "down": {"uv": [16, 15, 15, 16], "texture": "#0"} + } + }, + { + "from": [7.97, 11.27302, 7.96875], + "to": [8.0325, 12.08552, 8.03125], + "rotation": {"angle": 0, "axis": "y", "origin": [6.06859, 11.86677, 8.09375]}, + "faces": { + "north": {"uv": [7, 0, 8, 1], "texture": "#0"}, + "east": {"uv": [1, 7, 2, 8], "texture": "#0"}, + "south": {"uv": [7, 1, 8, 2], "texture": "#0"}, + "west": {"uv": [2, 7, 3, 8], "texture": "#0"}, + "up": {"uv": [8, 3, 7, 2], "texture": "#0"}, + "down": {"uv": [4, 7, 3, 8], "texture": "#0"} + } + }, + { + "from": [7.845, 11.27302, 7.96875], + "to": [8.1575, 11.58552, 8.03125], + "rotation": {"angle": 0, "axis": "y", "origin": [6.06859, 11.86677, 8.09375]}, + "faces": { + "north": {"uv": [9, 5, 10, 6], "texture": "#0"}, + "east": {"uv": [6, 9, 7, 10], "texture": "#0"}, + "south": {"uv": [9, 6, 10, 7], "texture": "#0"}, + "west": {"uv": [7, 9, 8, 10], "texture": "#0"}, + "up": {"uv": [10, 8, 9, 7], "texture": "#0"}, + "down": {"uv": [9, 9, 8, 10], "texture": "#0"} + } + }, + { + "from": [8.08766, 11.27302, 7.96875], + "to": [8.15016, 12.14802, 8.03125], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8.11891, 11.86677, 8.09375]}, + "faces": { + "north": {"uv": [4, 6, 5, 7], "texture": "#0"}, + "east": {"uv": [6, 4, 7, 5], "texture": "#0"}, + "south": {"uv": [5, 6, 6, 7], "texture": "#0"}, + "west": {"uv": [6, 5, 7, 6], "texture": "#0"}, + "up": {"uv": [7, 7, 6, 6], "texture": "#0"}, + "down": {"uv": [1, 7, 0, 8], "texture": "#0"} + } + }, + { + "from": [8.02516, 11.27302, 7.96875], + "to": [8.08766, 12.08552, 8.03125], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8.11891, 11.86677, 8.09375]}, + "faces": { + "north": {"uv": [7, 3, 8, 4], "texture": "#0"}, + "east": {"uv": [4, 7, 5, 8], "texture": "#0"}, + "south": {"uv": [7, 4, 8, 5], "texture": "#0"}, + "west": {"uv": [5, 7, 6, 8], "texture": "#0"}, + "up": {"uv": [8, 6, 7, 5], "texture": "#0"}, + "down": {"uv": [7, 7, 6, 8], "texture": "#0"} + } + }, + { + "from": [7.96266, 11.27302, 7.96875], + "to": [8.02516, 12.02302, 8.03125], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8.11891, 11.86677, 8.09375]}, + "faces": { + "north": {"uv": [7, 6, 8, 7], "texture": "#0"}, + "east": {"uv": [7, 7, 8, 8], "texture": "#0"}, + "south": {"uv": [0, 8, 1, 9], "texture": "#0"}, + "west": {"uv": [8, 0, 9, 1], "texture": "#0"}, + "up": {"uv": [2, 9, 1, 8], "texture": "#0"}, + "down": {"uv": [9, 1, 8, 2], "texture": "#0"} + } + }, + { + "from": [7.90016, 11.27302, 7.96875], + "to": [7.96266, 11.96052, 8.03125], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8.11891, 11.86677, 8.09375]}, + "faces": { + "north": {"uv": [2, 8, 3, 9], "texture": "#0"}, + "east": {"uv": [8, 2, 9, 3], "texture": "#0"}, + "south": {"uv": [3, 8, 4, 9], "texture": "#0"}, + "west": {"uv": [8, 3, 9, 4], "texture": "#0"}, + "up": {"uv": [5, 9, 4, 8], "texture": "#0"}, + "down": {"uv": [9, 4, 8, 5], "texture": "#0"} + } + }, + { + "from": [9.3447, 10.97568, 7.96875], + "to": [9.4072, 11.85068, 8.03125], + "rotation": {"angle": -22.5, "axis": "z", "origin": [9.37595, 15.47568, 8.09375]}, + "faces": { + "north": {"uv": [5, 4, 6, 5], "texture": "#0"}, + "east": {"uv": [5, 5, 6, 6], "texture": "#0"}, + "south": {"uv": [6, 0, 7, 1], "texture": "#0"}, + "west": {"uv": [6, 1, 7, 2], "texture": "#0"}, + "up": {"uv": [7, 3, 6, 2], "texture": "#0"}, + "down": {"uv": [7, 3, 6, 4], "texture": "#0"} + } + }, + { + "from": [9.4072, 10.97568, 7.96875], + "to": [9.4697, 11.78818, 8.03125], + "rotation": {"angle": -22.5, "axis": "z", "origin": [9.37595, 15.47568, 8.09375]}, + "faces": { + "north": {"uv": [5, 8, 6, 9], "texture": "#0"}, + "east": {"uv": [8, 5, 9, 6], "texture": "#0"}, + "south": {"uv": [6, 8, 7, 9], "texture": "#0"}, + "west": {"uv": [8, 6, 9, 7], "texture": "#0"}, + "up": {"uv": [8, 9, 7, 8], "texture": "#0"}, + "down": {"uv": [9, 7, 8, 8], "texture": "#0"} + } + }, + { + "from": [9.4697, 10.97568, 7.96875], + "to": [9.5322, 11.72568, 8.03125], + "rotation": {"angle": -22.5, "axis": "z", "origin": [9.37595, 15.47568, 8.09375]}, + "faces": { + "north": {"uv": [8, 8, 9, 9], "texture": "#0"}, + "east": {"uv": [0, 9, 1, 10], "texture": "#0"}, + "south": {"uv": [9, 0, 10, 1], "texture": "#0"}, + "west": {"uv": [1, 9, 2, 10], "texture": "#0"}, + "up": {"uv": [10, 2, 9, 1], "texture": "#0"}, + "down": {"uv": [3, 9, 2, 10], "texture": "#0"} + } + }, + { + "from": [9.5322, 10.97568, 7.96875], + "to": [9.5947, 11.66318, 8.03125], + "rotation": {"angle": -22.5, "axis": "z", "origin": [9.37595, 15.47568, 8.09375]}, + "faces": { + "north": {"uv": [9, 2, 10, 3], "texture": "#0"}, + "east": {"uv": [3, 9, 4, 10], "texture": "#0"}, + "south": {"uv": [9, 3, 10, 4], "texture": "#0"}, + "west": {"uv": [4, 9, 5, 10], "texture": "#0"}, + "up": {"uv": [10, 5, 9, 4], "texture": "#0"}, + "down": {"uv": [6, 9, 5, 10], "texture": "#0"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [0, 90, 0], + "translation": [0, 13, 1], + "scale": [3, 3, 3] + }, + "thirdperson_lefthand": { + "rotation": [0, 90, 0], + "translation": [0, 13, 1], + "scale": [3, 3, 3] + }, + "firstperson_righthand": { + "rotation": [0, -90, 0], + "translation": [0, 9.5, 0], + "scale": [2, 2, 2] + }, + "firstperson_lefthand": { + "rotation": [0, 90, 0], + "translation": [0, 9.5, 0], + "scale": [2, 2, 2] + }, + "gui": { + "rotation": [0, 0, -45], + "translation": [0.75, 0.75, 0], + "scale": [1.25, 1.25, 1.25] + }, + "fixed": { + "rotation": [0, 0, 45], + "translation": [-1, 1, 0], + "scale": [1.5, 1.5, 1.5] + } + } +} \ No newline at end of file diff --git a/src/surgebinding/resources/assets/surgebinding/models/item/prickletac.json b/src/surgebinding/resources/assets/surgebinding/models/item/prickletac.json new file mode 100644 index 000000000..4274f2357 --- /dev/null +++ b/src/surgebinding/resources/assets/surgebinding/models/item/prickletac.json @@ -0,0 +1,3 @@ +{ + "parent": "surgebinding:block/prickletac1" +} diff --git a/src/surgebinding/resources/assets/surgebinding/models/item/rockbud_variant.json b/src/surgebinding/resources/assets/surgebinding/models/item/rockbud_variant.json new file mode 100644 index 000000000..db3aa62b2 --- /dev/null +++ b/src/surgebinding/resources/assets/surgebinding/models/item/rockbud_variant.json @@ -0,0 +1,3 @@ +{ + "parent": "surgebinding:block/rockbud_variant1" +} diff --git a/src/surgebinding/resources/assets/surgebinding/models/item/shardblade.json b/src/surgebinding/resources/assets/surgebinding/models/item/shardblade.json new file mode 100644 index 000000000..701161490 --- /dev/null +++ b/src/surgebinding/resources/assets/surgebinding/models/item/shardblade.json @@ -0,0 +1,44 @@ +{ + "parent": "builtin/entity", + "gui_light": "front", + "textures": { + "particle": "surgebinding:item/models/shardblade/dynamic" + }, + "display": { + "thirdperson_righthand": { + "rotation": [ 0, 60, 0 ], + "translation": [ 11, 17, -2 ], + "scale": [ 1, 1, 1 ] + }, + "thirdperson_lefthand": { + "rotation": [ 0, 60, 0 ], + "translation": [ 3, 17, 12 ], + "scale": [ 1, 1, 1 ] + }, + "firstperson_righthand": { + "rotation": [ 0, -90, 25 ], + "translation": [ -3, 17, 1], + "scale": [ 1, 1, 1 ] + }, + "firstperson_lefthand": { + "rotation": [ 0, 90, -25 ], + "translation": [ 13, 17, 1], + "scale": [ 1, 1, 1 ] + }, + "gui": { + "rotation": [ 15, -25, -5 ], + "translation": [ 2, 3, 0 ], + "scale": [ 0.65, 0.65, 0.65 ] + }, + "fixed": { + "rotation": [ 0, 180, 0 ], + "translation": [ -2, 4, -5], + "scale":[ 0.5, 0.5, 0.5] + }, + "ground": { + "rotation": [ 0, 0, 0 ], + "translation": [ 4, 4, 2], + "scale":[ 0.25, 0.25, 0.25] + } + } +} diff --git a/src/surgebinding/resources/assets/surgebinding/models/item/shardblade_model/shard_blade.mtl b/src/surgebinding/resources/assets/surgebinding/models/item/shardblade_model/shard_blade.mtl new file mode 100644 index 000000000..162d2dc29 --- /dev/null +++ b/src/surgebinding/resources/assets/surgebinding/models/item/shardblade_model/shard_blade.mtl @@ -0,0 +1,6 @@ +newmtl lambert2SG + +Ka 0.000000 0.000000 0.000000 +Kd 0.588000 0.588000 0.588000 +d 1.000000 +map_Kd surgebinding:item/models/shardblade_model/shard_blade diff --git a/src/main/resources/assets/cosmere/models/item/shardblade_model/shard_blade.obj b/src/surgebinding/resources/assets/surgebinding/models/item/shardblade_model/shard_blade.obj similarity index 100% rename from src/main/resources/assets/cosmere/models/item/shardblade_model/shard_blade.obj rename to src/surgebinding/resources/assets/surgebinding/models/item/shardblade_model/shard_blade.obj diff --git a/src/surgebinding/resources/assets/surgebinding/models/item/skybreaker_honorblade.json b/src/surgebinding/resources/assets/surgebinding/models/item/skybreaker_honorblade.json new file mode 100644 index 000000000..657a3e711 --- /dev/null +++ b/src/surgebinding/resources/assets/surgebinding/models/item/skybreaker_honorblade.json @@ -0,0 +1,4583 @@ +{ + "credit": "Made with Blockbench", + "texture_size": [ + 32, + 32 + ], + "textures": { + "1": "surgebinding:item/models/shardblade_model/skybreaker_honorblade" + }, + "elements": [ + { + "from": [ + 8, + 7.4375, + 8 + ], + "to": [ + 8.5, + 18.6875, + 8.125 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 0.25, + 0, + 0.5 + ] + }, + "faces": { + "north": { + "uv": [ + 0, + 0, + 0.5, + 5.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 0.5, + 0, + 1, + 5.5 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 1, + 0, + 1.5, + 5.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 1.5, + 0, + 2, + 5.5 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 1.5, + 8, + 1, + 7.5 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 8, + 1, + 7.5, + 1.5 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 8.5625, + 7.5, + 8 + ], + "to": [ + 9.0625, + 18.6875, + 8.125 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 0.25, + 0, + 0.5 + ] + }, + "faces": { + "north": { + "uv": [ + 2, + 0, + 2.5, + 5.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 2.5, + 0, + 3, + 5.5 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 3, + 0, + 3.5, + 5.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 3.5, + 0, + 4, + 5.5 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 2, + 8, + 1.5, + 7.5 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 8, + 1.5, + 7.5, + 2 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 8.59209, + 18.29556, + 8 + ], + "to": [ + 8.84209, + 20.17056, + 8.125 + ], + "rotation": { + "angle": 22.5, + "axis": "z", + "origin": [ + 7.96709, + 19.04556, + 8.0625 + ] + }, + "faces": { + "north": { + "uv": [ + 5.5, + 3.5, + 6, + 4.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 4, + 5.5, + 4.5, + 6.5 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 4.5, + 5.5, + 5, + 6.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 5.5, + 4.5, + 6, + 5.5 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 2.5, + 8, + 2, + 7.5 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 8, + 2, + 7.5, + 2.5 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 4.90212, + 7.91565, + 7.9375 + ], + "to": [ + 5.15212, + 10.35315, + 8.1875 + ], + "rotation": { + "angle": 22.5, + "axis": "z", + "origin": [ + 8.02712, + 18.16565, + 8.0625 + ] + }, + "faces": { + "north": { + "uv": [ + 5, + 5.5, + 5.5, + 6.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 5.5, + 5.5, + 6, + 6.5 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 6, + 0, + 6.5, + 1 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 6, + 1, + 6.5, + 2 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 3, + 8, + 2.5, + 7.5 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 8, + 2.5, + 7.5, + 3 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 8.13932, + 9.80706, + 7.98355 + ], + "to": [ + 8.35932, + 9.99456, + 8.10855 + ], + "rotation": { + "angle": -22.5, + "axis": "x", + "origin": [ + 8.24932, + 10.02581, + 8.04605 + ] + }, + "faces": { + "north": { + "uv": [ + 3, + 7.5, + 3.5, + 8 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 7.5, + 3, + 8, + 3.5 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 3.5, + 7.5, + 4, + 8 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 7.5, + 3.5, + 8, + 4 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 4.5, + 8, + 4, + 7.5 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 8, + 4, + 7.5, + 4.5 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 8.13932, + 9.66013, + 7.9375 + ], + "to": [ + 8.35932, + 9.84763, + 8.1875 + ], + "rotation": { + "angle": 0, + "axis": "x", + "origin": [ + 8.24932, + 9.75388, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 4.5, + 7.5, + 5, + 8 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 7.5, + 4.5, + 8, + 5 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 5, + 7.5, + 5.5, + 8 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 7.5, + 5, + 8, + 5.5 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 6, + 8, + 5.5, + 7.5 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 8, + 5.5, + 7.5, + 6 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 8.13932, + 9.81657, + 7.96862 + ], + "to": [ + 8.35932, + 10.00407, + 8.09362 + ], + "rotation": { + "angle": 22.5, + "axis": "x", + "origin": [ + 8.24932, + 9.91032, + 8.03112 + ] + }, + "faces": { + "north": { + "uv": [ + 6, + 7.5, + 6.5, + 8 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 7.5, + 6, + 8, + 6.5 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 6.5, + 7.5, + 7, + 8 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 7.5, + 6.5, + 8, + 7 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 7.5, + 8, + 7, + 7.5 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 8, + 7, + 7.5, + 7.5 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 7.20653, + 7.09567, + 7.9375 + ], + "to": [ + 9.29653, + 7.59567, + 8.1875 + ], + "rotation": { + "angle": 0, + "axis": "z", + "origin": [ + 7.64403, + 8.47067, + 8.0625 + ] + }, + "faces": { + "north": { + "uv": [ + 2, + 6, + 3, + 6.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 7.5, + 7.5, + 8, + 8 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 3, + 6, + 4, + 6.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 8, + 0, + 8.5, + 0.5 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 7, + 4, + 6, + 3.5 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 7, + 4, + 6, + 4.5 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 7.81449, + 7.08118, + 7.8125 + ], + "to": [ + 8.74749, + 7.20618, + 8.3125 + ], + "rotation": { + "angle": 0, + "axis": "z", + "origin": [ + 15.84451, + 9.45618, + 7.6875 + ] + }, + "faces": { + "north": { + "uv": [ + 8, + 0.5, + 8.5, + 1 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 1, + 8, + 1.5, + 8.5 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 8, + 1, + 8.5, + 1.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 1.5, + 8, + 2, + 8.5 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 8.5, + 2, + 8, + 1.5 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 2.5, + 8, + 2, + 8.5 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 8.02975, + 3.5615, + 7.8125 + ], + "to": [ + 8.52975, + 7.124, + 8.3125 + ], + "rotation": { + "angle": 0, + "axis": "z", + "origin": [ + 8.34225, + 9.4365, + 8.0625 + ] + }, + "faces": { + "north": { + "uv": [ + 5.5, + 0, + 6, + 2 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 0.5, + 5.5, + 1, + 7.5 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 1, + 5.5, + 1.5, + 7.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 1.5, + 5.5, + 2, + 7.5 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 8.5, + 2.5, + 8, + 2 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 3, + 8, + 2.5, + 8.5 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 9.13492, + 7.20551, + 7.9375 + ], + "to": [ + 9.57242, + 7.45551, + 8.1875 + ], + "rotation": { + "angle": -45, + "axis": "z", + "origin": [ + 9.38492, + 7.33051, + 8.0625 + ] + }, + "faces": { + "north": { + "uv": [ + 8, + 2.5, + 8.5, + 3 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 3, + 8, + 3.5, + 8.5 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 8, + 3, + 8.5, + 3.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 3.5, + 8, + 4, + 8.5 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 8.5, + 4, + 8, + 3.5 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 4.5, + 8, + 4, + 8.5 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 9.41596, + 7.13057, + 7.9375 + ], + "to": [ + 9.66596, + 7.38057, + 8.1875 + ], + "rotation": { + "angle": -22.5, + "axis": "z", + "origin": [ + 9.54096, + 7.25557, + 8.0625 + ] + }, + "faces": { + "north": { + "uv": [ + 8, + 4, + 8.5, + 4.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 4.5, + 8, + 5, + 8.5 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 8, + 4.5, + 8.5, + 5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 5, + 8, + 5.5, + 8.5 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 8.5, + 5.5, + 8, + 5 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 6, + 8, + 5.5, + 8.5 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 10.25605, + 7.19822, + 7.9375 + ], + "to": [ + 10.50605, + 7.44822, + 8.1875 + ], + "rotation": { + "angle": -45, + "axis": "z", + "origin": [ + 10.38105, + 7.32322, + 8.0625 + ] + }, + "faces": { + "north": { + "uv": [ + 8, + 5.5, + 8.5, + 6 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 6, + 8, + 6.5, + 8.5 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 8, + 6, + 8.5, + 6.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 6.5, + 8, + 7, + 8.5 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 8.5, + 7, + 8, + 6.5 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 7.5, + 8, + 7, + 8.5 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 10.6525, + 7.55178, + 7.9375 + ], + "to": [ + 10.9025, + 7.80178, + 8.1875 + ], + "rotation": { + "angle": -45, + "axis": "z", + "origin": [ + 10.2775, + 7.67678, + 8.0625 + ] + }, + "faces": { + "north": { + "uv": [ + 8, + 7, + 8.5, + 7.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 7.5, + 8, + 8, + 8.5 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 8, + 7.5, + 8.5, + 8 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 8, + 8, + 8.5, + 8.5 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 9, + 0.5, + 8.5, + 0 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 1, + 8.5, + 0.5, + 9 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 10.38105, + 7.25, + 7.9375 + ], + "to": [ + 10.63105, + 7.5, + 8.1875 + ], + "rotation": { + "angle": 0, + "axis": "z", + "origin": [ + 10.50605, + 7.375, + 8.0625 + ] + }, + "faces": { + "north": { + "uv": [ + 8.5, + 0.5, + 9, + 1 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 1, + 8.5, + 1.5, + 9 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 8.5, + 1, + 9, + 1.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 1.5, + 8.5, + 2, + 9 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 9, + 2, + 8.5, + 1.5 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 2.5, + 8.5, + 2, + 9 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 10.25605, + 6.94822, + 7.9375 + ], + "to": [ + 10.50605, + 7.19822, + 8.1875 + ], + "rotation": { + "angle": 45, + "axis": "z", + "origin": [ + 10.38105, + 7.07322, + 8.0625 + ] + }, + "faces": { + "north": { + "uv": [ + 8.5, + 2, + 9, + 2.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 2.5, + 8.5, + 3, + 9 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 8.5, + 2.5, + 9, + 3 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 3, + 8.5, + 3.5, + 9 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 9, + 3.5, + 8.5, + 3 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 4, + 8.5, + 3.5, + 9 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 10.38105, + 6.89645, + 7.9375 + ], + "to": [ + 10.63105, + 7.14645, + 8.1875 + ], + "rotation": { + "angle": 0, + "axis": "z", + "origin": [ + 10.50605, + 7.02145, + 8.0625 + ] + }, + "faces": { + "north": { + "uv": [ + 8.5, + 3.5, + 9, + 4 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 4, + 8.5, + 4.5, + 9 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 8.5, + 4, + 9, + 4.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 4.5, + 8.5, + 5, + 9 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 9, + 5, + 8.5, + 4.5 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 5.5, + 8.5, + 5, + 9 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 10.6525, + 6.59467, + 7.9375 + ], + "to": [ + 10.9025, + 6.84467, + 8.1875 + ], + "rotation": { + "angle": 45, + "axis": "z", + "origin": [ + 10.2775, + 6.71967, + 8.0625 + ] + }, + "faces": { + "north": { + "uv": [ + 8.5, + 5, + 9, + 5.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 5.5, + 8.5, + 6, + 9 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 8.5, + 5.5, + 9, + 6 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 6, + 8.5, + 6.5, + 9 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 9, + 6.5, + 8.5, + 6 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 7, + 8.5, + 6.5, + 9 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 5.99395, + 7.19822, + 7.9375 + ], + "to": [ + 6.24395, + 7.44822, + 8.1875 + ], + "rotation": { + "angle": 45, + "axis": "z", + "origin": [ + 6.11895, + 7.32322, + 8.0625 + ] + }, + "faces": { + "north": { + "uv": [ + 8.5, + 6.5, + 9, + 7 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 7, + 8.5, + 7.5, + 9 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 8.5, + 7, + 9, + 7.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 7.5, + 8.5, + 8, + 9 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 9, + 8, + 8.5, + 7.5 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 8.5, + 8.5, + 8, + 9 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 5.86895, + 7.25, + 7.9375 + ], + "to": [ + 6.11895, + 7.5, + 8.1875 + ], + "rotation": { + "angle": 0, + "axis": "z", + "origin": [ + 5.99395, + 7.375, + 8.0625 + ] + }, + "faces": { + "north": { + "uv": [ + 8.5, + 8, + 9, + 8.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 8.5, + 8.5, + 9, + 9 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 9, + 0, + 9.5, + 0.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 0.5, + 9, + 1, + 9.5 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 9.5, + 1, + 9, + 0.5 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 1.5, + 9, + 1, + 9.5 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 5.5975, + 7.55178, + 7.9375 + ], + "to": [ + 5.8475, + 7.80178, + 8.1875 + ], + "rotation": { + "angle": 45, + "axis": "z", + "origin": [ + 6.2225, + 7.67678, + 8.0625 + ] + }, + "faces": { + "north": { + "uv": [ + 9, + 1, + 9.5, + 1.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 1.5, + 9, + 2, + 9.5 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 9, + 1.5, + 9.5, + 2 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 2, + 9, + 2.5, + 9.5 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 9.5, + 2.5, + 9, + 2 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 3, + 9, + 2.5, + 9.5 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 5.5975, + 6.59467, + 7.9375 + ], + "to": [ + 5.8475, + 6.84467, + 8.1875 + ], + "rotation": { + "angle": -45, + "axis": "z", + "origin": [ + 6.2225, + 6.71967, + 8.0625 + ] + }, + "faces": { + "north": { + "uv": [ + 9, + 2.5, + 9.5, + 3 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 3, + 9, + 3.5, + 9.5 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 9, + 3, + 9.5, + 3.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 3.5, + 9, + 4, + 9.5 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 9.5, + 4, + 9, + 3.5 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 4.5, + 9, + 4, + 9.5 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 5.86895, + 6.89645, + 7.9375 + ], + "to": [ + 6.11895, + 7.14645, + 8.1875 + ], + "rotation": { + "angle": 0, + "axis": "z", + "origin": [ + 5.99395, + 7.02145, + 8.0625 + ] + }, + "faces": { + "north": { + "uv": [ + 9, + 4, + 9.5, + 4.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 4.5, + 9, + 5, + 9.5 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 9, + 4.5, + 9.5, + 5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 5, + 9, + 5.5, + 9.5 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 9.5, + 5.5, + 9, + 5 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 6, + 9, + 5.5, + 9.5 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 5.99395, + 6.94822, + 7.9375 + ], + "to": [ + 6.24395, + 7.19822, + 8.1875 + ], + "rotation": { + "angle": -45, + "axis": "z", + "origin": [ + 6.11895, + 7.07322, + 8.0625 + ] + }, + "faces": { + "north": { + "uv": [ + 9, + 5.5, + 9.5, + 6 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 6, + 9, + 6.5, + 9.5 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 9, + 6, + 9.5, + 6.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 6.5, + 9, + 7, + 9.5 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 9.5, + 7, + 9, + 6.5 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 7.5, + 9, + 7, + 9.5 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 9.24533, + 7.07322, + 7.9375 + ], + "to": [ + 10.80783, + 7.32322, + 8.1875 + ], + "rotation": { + "angle": 0, + "axis": "z", + "origin": [ + 9.87033, + 7.19822, + 8.0625 + ] + }, + "faces": { + "north": { + "uv": [ + 6, + 4.5, + 7, + 5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 9, + 7, + 9.5, + 7.5 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 6, + 5, + 7, + 5.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 7.5, + 9, + 8, + 9.5 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 7, + 6, + 6, + 5.5 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 7, + 6, + 6, + 6.5 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 6.93064, + 7.20551, + 7.9375 + ], + "to": [ + 7.36814, + 7.45551, + 8.1875 + ], + "rotation": { + "angle": 45, + "axis": "z", + "origin": [ + 7.11814, + 7.33051, + 8.0625 + ] + }, + "faces": { + "north": { + "uv": [ + 9, + 7.5, + 9.5, + 8 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 8, + 9, + 8.5, + 9.5 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 9, + 8, + 9.5, + 8.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 8.5, + 9, + 9, + 9.5 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 9.5, + 9, + 9, + 8.5 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 9.5, + 9, + 9, + 9.5 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 6.8371, + 7.13057, + 7.9375 + ], + "to": [ + 7.0871, + 7.38057, + 8.1875 + ], + "rotation": { + "angle": 22.5, + "axis": "z", + "origin": [ + 6.9621, + 7.25557, + 8.0625 + ] + }, + "faces": { + "north": { + "uv": [ + 9.5, + 0, + 10, + 0.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 0.5, + 9.5, + 1, + 10 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 9.5, + 0.5, + 10, + 1 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 1, + 9.5, + 1.5, + 10 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 10, + 1.5, + 9.5, + 1 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 2, + 9.5, + 1.5, + 10 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 7.91261, + 6.58793, + 7.8125 + ], + "to": [ + 8.16261, + 7.15043, + 8.3125 + ], + "rotation": { + "angle": 22.5, + "axis": "z", + "origin": [ + 8.03761, + 6.86918, + 8.0625 + ] + }, + "faces": { + "north": { + "uv": [ + 9.5, + 1.5, + 10, + 2 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 2, + 9.5, + 2.5, + 10 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 9.5, + 2, + 10, + 2.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 2.5, + 9.5, + 3, + 10 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 10, + 3, + 9.5, + 2.5 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 3.5, + 9.5, + 3, + 10 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 6.96184, + 2.68712, + 7.8125 + ], + "to": [ + 7.21184, + 3.24962, + 8.3125 + ], + "rotation": { + "angle": 22.5, + "axis": "z", + "origin": [ + 7.08684, + 6.71837, + 8.0625 + ] + }, + "faces": { + "north": { + "uv": [ + 9.5, + 3, + 10, + 3.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 3.5, + 9.5, + 4, + 10 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 9.5, + 3.5, + 10, + 4 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 4, + 9.5, + 4.5, + 10 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 10, + 4.5, + 9.5, + 4 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 5, + 9.5, + 4.5, + 10 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 7.91261, + 2.97257, + 7.8125 + ], + "to": [ + 8.16261, + 3.53507, + 8.3125 + ], + "rotation": { + "angle": -22.5, + "axis": "z", + "origin": [ + 8.03761, + 3.25382, + 8.0625 + ] + }, + "faces": { + "north": { + "uv": [ + 9.5, + 4.5, + 10, + 5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 5, + 9.5, + 5.5, + 10 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 9.5, + 5, + 10, + 5.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 5.5, + 9.5, + 6, + 10 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 10, + 6, + 9.5, + 5.5 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 6.5, + 9.5, + 6, + 10 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 7.85281, + 2.84917, + 7.8125 + ], + "to": [ + 8.10281, + 3.09917, + 8.3125 + ], + "rotation": { + "angle": 22.5, + "axis": "z", + "origin": [ + 7.97781, + 2.97417, + 8.0625 + ] + }, + "faces": { + "north": { + "uv": [ + 9.5, + 6, + 10, + 6.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 6.5, + 9.5, + 7, + 10 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 9.5, + 6.5, + 10, + 7 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 7, + 9.5, + 7.5, + 10 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 10, + 7.5, + 9.5, + 7 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 8, + 9.5, + 7.5, + 10 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 8.45669, + 2.84917, + 7.8125 + ], + "to": [ + 8.70669, + 3.09917, + 8.3125 + ], + "rotation": { + "angle": -22.5, + "axis": "z", + "origin": [ + 8.58169, + 2.97417, + 8.0625 + ] + }, + "faces": { + "north": { + "uv": [ + 9.5, + 7.5, + 10, + 8 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 8, + 9.5, + 8.5, + 10 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 9.5, + 8, + 10, + 8.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 8.5, + 9.5, + 9, + 10 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 10, + 9, + 9.5, + 8.5 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 9.5, + 9.5, + 9, + 10 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 8.02975, + 2.97257, + 8.17964 + ], + "to": [ + 8.52975, + 3.53507, + 8.42964 + ], + "rotation": { + "angle": -22.5, + "axis": "x", + "origin": [ + 8.27975, + 3.25382, + 8.30464 + ] + }, + "faces": { + "north": { + "uv": [ + 9.5, + 9, + 10, + 9.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 9.5, + 9.5, + 10, + 10 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 10, + 0, + 10.5, + 0.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 0.5, + 10, + 1, + 10.5 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 10.5, + 1, + 10, + 0.5 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 1.5, + 10, + 1, + 10.5 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 8.02975, + 2.97257, + 7.69536 + ], + "to": [ + 8.52975, + 3.53507, + 7.94536 + ], + "rotation": { + "angle": 22.5, + "axis": "x", + "origin": [ + 8.27975, + 3.25382, + 7.82036 + ] + }, + "faces": { + "north": { + "uv": [ + 10, + 1, + 10.5, + 1.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 1.5, + 10, + 2, + 10.5 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 10, + 1.5, + 10.5, + 2 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 2, + 10, + 2.5, + 10.5 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 10.5, + 2.5, + 10, + 2 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 3, + 10, + 2.5, + 10.5 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 8.02975, + 2.80397, + 8.46666 + ], + "to": [ + 8.52975, + 3.05397, + 8.71666 + ], + "rotation": { + "angle": 22.5, + "axis": "x", + "origin": [ + 8.27975, + 3.52272, + 8.59166 + ] + }, + "faces": { + "north": { + "uv": [ + 10, + 2.5, + 10.5, + 3 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 3, + 10, + 3.5, + 10.5 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 10, + 3, + 10.5, + 3.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 3.5, + 10, + 4, + 10.5 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 10.5, + 4, + 10, + 3.5 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 4.5, + 10, + 4, + 10.5 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 8.02975, + 2.84917, + 7.63556 + ], + "to": [ + 8.52975, + 3.09917, + 7.88556 + ], + "rotation": { + "angle": -22.5, + "axis": "x", + "origin": [ + 8.27975, + 2.97417, + 7.76056 + ] + }, + "faces": { + "north": { + "uv": [ + 10, + 4, + 10.5, + 4.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 4.5, + 10, + 5, + 10.5 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 10, + 4.5, + 10.5, + 5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 5, + 10, + 5.5, + 10.5 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 10.5, + 5.5, + 10, + 5 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 6, + 10, + 5.5, + 10.5 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 8.02975, + 2.81085, + 7.69291 + ], + "to": [ + 8.52975, + 3.06085, + 8.43291 + ], + "rotation": { + "angle": 0, + "axis": "x", + "origin": [ + 8.27975, + 2.93585, + 7.81791 + ] + }, + "faces": { + "north": { + "uv": [ + 10, + 5.5, + 10.5, + 6 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 6, + 10, + 6.5, + 10.5 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 10, + 6, + 10.5, + 6.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 6.5, + 10, + 7, + 10.5 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 10.5, + 7, + 10, + 6.5 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 7.5, + 10, + 7, + 10.5 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 7.90975, + 2.81085, + 7.81291 + ], + "to": [ + 8.64975, + 3.06085, + 8.31291 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 8.27975, + 2.93585, + 8.06291 + ] + }, + "faces": { + "north": { + "uv": [ + 10, + 7, + 10.5, + 7.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 7.5, + 10, + 8, + 10.5 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 10, + 7.5, + 10.5, + 8 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 8, + 10, + 8.5, + 10.5 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 10.5, + 8.5, + 10, + 8 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 9, + 10, + 8.5, + 10.5 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 8.3969, + 6.58793, + 7.8125 + ], + "to": [ + 8.6469, + 7.15043, + 8.3125 + ], + "rotation": { + "angle": -22.5, + "axis": "z", + "origin": [ + 8.5219, + 6.86918, + 8.0625 + ] + }, + "faces": { + "north": { + "uv": [ + 10, + 8.5, + 10.5, + 9 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 9, + 10, + 9.5, + 10.5 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 10, + 9, + 10.5, + 9.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 9.5, + 10, + 10, + 10.5 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 10.5, + 10, + 10, + 9.5 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 10.5, + 10, + 10, + 10.5 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 5.69217, + 7.07322, + 7.9375 + ], + "to": [ + 9.25467, + 7.32322, + 8.1875 + ], + "rotation": { + "angle": 0, + "axis": "z", + "origin": [ + 6.69217, + 7.19822, + 8.0625 + ] + }, + "faces": { + "north": { + "uv": [ + 2, + 5.5, + 4, + 6 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 10.5, + 0, + 11, + 0.5 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 5.5, + 2, + 7.5, + 2.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 0.5, + 10.5, + 1, + 11 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 7.5, + 3, + 5.5, + 2.5 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 7.5, + 3, + 5.5, + 3.5 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 7.55578, + 7.47647, + 7.9375 + ], + "to": [ + 7.80578, + 9.91397, + 8.1875 + ], + "rotation": { + "angle": -22.5, + "axis": "z", + "origin": [ + 7.68078, + 8.41397, + 8.0625 + ] + }, + "faces": { + "north": { + "uv": [ + 6.5, + 0, + 7, + 1 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 6.5, + 1, + 7, + 2 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 2, + 6.5, + 2.5, + 7.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 2.5, + 6.5, + 3, + 7.5 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 11, + 1, + 10.5, + 0.5 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 1.5, + 10.5, + 1, + 11 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 7.80578, + 7.47647, + 7.9375 + ], + "to": [ + 8.05578, + 9.41397, + 8.1875 + ], + "rotation": { + "angle": -22.5, + "axis": "z", + "origin": [ + 7.68078, + 8.41397, + 8.0625 + ] + }, + "faces": { + "north": { + "uv": [ + 3, + 6.5, + 3.5, + 7.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 3.5, + 6.5, + 4, + 7.5 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 4, + 6.5, + 4.5, + 7.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 4.5, + 6.5, + 5, + 7.5 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 11, + 1.5, + 10.5, + 1 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 2, + 10.5, + 1.5, + 11 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 8.05578, + 7.53897, + 7.9375 + ], + "to": [ + 8.30578, + 9.16397, + 8.1875 + ], + "rotation": { + "angle": -22.5, + "axis": "z", + "origin": [ + 7.68078, + 8.41397, + 8.0625 + ] + }, + "faces": { + "north": { + "uv": [ + 5, + 6.5, + 5.5, + 7.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 5.5, + 6.5, + 6, + 7.5 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 6, + 6.5, + 6.5, + 7.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 6.5, + 6.5, + 7, + 7.5 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 11, + 2, + 10.5, + 1.5 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 2.5, + 10.5, + 2, + 11 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 8.42371, + 7.19092, + 7.9375 + ], + "to": [ + 8.67371, + 9.31592, + 8.1875 + ], + "rotation": { + "angle": 22.5, + "axis": "z", + "origin": [ + 7.92371, + 8.34717, + 8.0625 + ] + }, + "faces": { + "north": { + "uv": [ + 7, + 0, + 7.5, + 1 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 7, + 1, + 7.5, + 2 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 7, + 3.5, + 7.5, + 4.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 7, + 4.5, + 7.5, + 5.5 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 11, + 2.5, + 10.5, + 2 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 3, + 10.5, + 2.5, + 11 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 8.17371, + 7.31592, + 7.9375 + ], + "to": [ + 8.42371, + 8.37842, + 8.1875 + ], + "rotation": { + "angle": 22.5, + "axis": "z", + "origin": [ + 7.92371, + 8.34717, + 8.0625 + ] + }, + "faces": { + "north": { + "uv": [ + 10.5, + 2.5, + 11, + 3 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 3, + 10.5, + 3.5, + 11 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 10.5, + 3, + 11, + 3.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 3.5, + 10.5, + 4, + 11 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 11, + 4, + 10.5, + 3.5 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 4.5, + 10.5, + 4, + 11 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 7.96151, + 7.49749, + 7.9375 + ], + "to": [ + 8.52401, + 8.55999, + 8.1875 + ], + "rotation": { + "angle": 0, + "axis": "z", + "origin": [ + 8.46151, + 8.02874, + 8.0625 + ] + }, + "faces": { + "north": { + "uv": [ + 10.5, + 4, + 11, + 4.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 4.5, + 10.5, + 5, + 11 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 10.5, + 4.5, + 11, + 5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 5, + 10.5, + 5.5, + 11 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 11, + 5.5, + 10.5, + 5 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 6, + 10.5, + 5.5, + 11 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 7.81449, + 6.63955, + 8.08887 + ], + "to": [ + 8.74749, + 7.26455, + 8.21387 + ], + "rotation": { + "angle": -22.5, + "axis": "x", + "origin": [ + 8.09574, + 7.1708, + 6.83887 + ] + }, + "faces": { + "north": { + "uv": [ + 10.5, + 5.5, + 11, + 6 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 6, + 10.5, + 6.5, + 11 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 10.5, + 6, + 11, + 6.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 6.5, + 10.5, + 7, + 11 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 11, + 7, + 10.5, + 6.5 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 7.5, + 10.5, + 7, + 11 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 7.81449, + 7.1561, + 7.93929 + ], + "to": [ + 8.74749, + 7.7811, + 8.06429 + ], + "rotation": { + "angle": 22.5, + "axis": "x", + "origin": [ + 8.28099, + 7.49985, + 8.00179 + ] + }, + "faces": { + "north": { + "uv": [ + 10.5, + 7, + 11, + 7.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 7.5, + 10.5, + 8, + 11 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 10.5, + 7.5, + 11, + 8 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 8, + 10.5, + 8.5, + 11 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 11, + 8.5, + 10.5, + 8 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 9, + 10.5, + 8.5, + 11 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 7.89756, + 19.09287, + 8 + ], + "to": [ + 8.21006, + 20.03037, + 8.125 + ], + "rotation": { + "angle": 22.5, + "axis": "z", + "origin": [ + 8.33506, + 20.28037, + 8.0625 + ] + }, + "faces": { + "north": { + "uv": [ + 10.5, + 8.5, + 11, + 9 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 9, + 10.5, + 9.5, + 11 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 10.5, + 9, + 11, + 9.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 9.5, + 10.5, + 10, + 11 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 11, + 10, + 10.5, + 9.5 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 10.5, + 10.5, + 10, + 11 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 8.28994, + 19.09287, + 8 + ], + "to": [ + 8.60244, + 20.03037, + 8.125 + ], + "rotation": { + "angle": -22.5, + "axis": "z", + "origin": [ + 8.16494, + 20.28037, + 8.0625 + ] + }, + "faces": { + "north": { + "uv": [ + 10.5, + 10, + 11, + 10.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 10.5, + 10.5, + 11, + 11 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 0, + 11, + 0.5, + 11.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 11, + 0, + 11.5, + 0.5 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 1, + 11.5, + 0.5, + 11 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 11.5, + 0.5, + 11, + 1 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 8.14191, + 19.07267, + 8 + ], + "to": [ + 8.36191, + 20.13517, + 8.125 + ], + "rotation": { + "angle": 0, + "axis": "z", + "origin": [ + 8.76062, + 19.91642, + 8.0625 + ] + }, + "faces": { + "north": { + "uv": [ + 1, + 11, + 1.5, + 11.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 11, + 1, + 11.5, + 1.5 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 1.5, + 11, + 2, + 11.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 11, + 1.5, + 11.5, + 2 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 2.5, + 11.5, + 2, + 11 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 11.5, + 2, + 11, + 2.5 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 7.6875, + 18.6875, + 8 + ], + "to": [ + 8.8125, + 19.125, + 8.125 + ], + "rotation": { + "angle": 0, + "axis": "z", + "origin": [ + 8.5, + 20.09375, + 8.0625 + ] + }, + "faces": { + "north": { + "uv": [ + 2.5, + 11, + 3, + 11.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 11, + 2.5, + 11.5, + 3 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 3, + 11, + 3.5, + 11.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 11, + 3, + 11.5, + 3.5 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 4, + 11.5, + 3.5, + 11 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 11.5, + 3.5, + 11, + 4 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 6.93112, + 18.14176, + 8 + ], + "to": [ + 7.18112, + 20.01676, + 8.125 + ], + "rotation": { + "angle": -22.5, + "axis": "z", + "origin": [ + 8.55612, + 17.14176, + 8.0625 + ] + }, + "faces": { + "north": { + "uv": [ + 7, + 5.5, + 7.5, + 6.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 7, + 6.5, + 7.5, + 7.5 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 7.5, + 0, + 8, + 1 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 0.5, + 7.5, + 1, + 8.5 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 4.5, + 11.5, + 4, + 11 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 11.5, + 4, + 11, + 4.5 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 8.95898, + 19.7039, + 8 + ], + "to": [ + 9.08398, + 19.8289, + 8.125 + ], + "rotation": { + "angle": -45, + "axis": "z", + "origin": [ + 9.42773, + 21.0164, + 7.3125 + ] + }, + "faces": { + "north": { + "uv": [ + 4.5, + 11, + 5, + 11.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 11, + 4.5, + 11.5, + 5 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 5, + 11, + 5.5, + 11.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 11, + 5, + 11.5, + 5.5 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 6, + 11.5, + 5.5, + 11 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 11.5, + 5.5, + 11, + 6 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 9.28577, + 19.89963, + 8 + ], + "to": [ + 9.41077, + 20.02463, + 8.125 + ], + "rotation": { + "angle": -45, + "axis": "z", + "origin": [ + 9.34827, + 21.52463, + 8.0625 + ] + }, + "faces": { + "north": { + "uv": [ + 6, + 11, + 6.5, + 11.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 11, + 6, + 11.5, + 6.5 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 6.5, + 11, + 7, + 11.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 11, + 6.5, + 11.5, + 7 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 7.5, + 11.5, + 7, + 11 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 11.5, + 7, + 11, + 7.5 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 8.24342, + 20.38316, + 8 + ], + "to": [ + 8.25342, + 20.50816, + 8.125 + ], + "rotation": { + "angle": 0, + "axis": "z", + "origin": [ + 8.75215, + 20.66441, + 8.0625 + ] + }, + "faces": { + "north": { + "uv": [ + 0, + 0, + 0, + 0.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 7.5, + 11, + 8, + 11.5 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 0, + 0, + 0, + 0.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 11, + 7.5, + 11.5, + 8 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 0, + 0.5, + 0, + 0 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 0, + 0, + 0, + 0.5 + ], + "texture": "#1" + } + } + }, + { + "from": [ + 7.4375, + 7.5, + 8 + ], + "to": [ + 7.9375, + 18.6875, + 8.125 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 0.25, + 0, + 0.5 + ] + }, + "faces": { + "north": { + "uv": [ + 4, + 0, + 4.5, + 5.5 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 4.5, + 0, + 5, + 5.5 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 5, + 0, + 5.5, + 5.5 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 0, + 5.5, + 0.5, + 11 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 8.5, + 11.5, + 8, + 11 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 11.5, + 8, + 11, + 8.5 + ], + "texture": "#1" + } + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [ + 0, + 90, + 0 + ], + "translation": [ + -0.5, + 4.25, + 1.75 + ], + "scale": [ + 2.5, + 2.5, + 2.5 + ] + }, + "thirdperson_lefthand": { + "rotation": [ + 0, + 90, + 0 + ], + "translation": [ + -0.5, + 4.25, + 0.5 + ], + "scale": [ + 2.5, + 2.5, + 2.5 + ] + }, + "firstperson_righthand": { + "rotation": [ + 0, + 90, + 0 + ], + "translation": [ + 0, + 1, + 0 + ], + "scale": [ + 2.5, + 2.5, + 2.5 + ] + }, + "firstperson_lefthand": { + "rotation": [ + 0, + 90, + 0 + ], + "translation": [ + 0, + 1, + -0.5 + ], + "scale": [ + 2.5, + 2.5, + 2.5 + ] + }, + "ground": { + "translation": [ + 0, + 1, + 0 + ] + }, + "gui": { + "rotation": [ + 0, + 0, + -45 + ], + "translation": [ + -1.5, + -1.5, + 0 + ] + }, + "fixed": { + "rotation": [ + 0, + 0, + 45 + ], + "translation": [ + 0, + 0, + -0.25 + ] + } + }, + "groups": [ + { + "name": "Everything", + "origin": [ + 8, + 8, + 8 + ], + "color": 0, + "children": [ + { + "name": "Blade", + "origin": [ + 8, + 8, + 8 + ], + "color": 0, + "children": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56 + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/surgebinding/resources/assets/surgebinding/models/item/stoneward_honorblade.json b/src/surgebinding/resources/assets/surgebinding/models/item/stoneward_honorblade.json new file mode 100644 index 000000000..250873826 --- /dev/null +++ b/src/surgebinding/resources/assets/surgebinding/models/item/stoneward_honorblade.json @@ -0,0 +1,835 @@ +{ + "credit": "Made with Blockbench", + "texture_size": [32, 32], + "textures": { + "0": "surgebinding:item/models/shardblade_model/stoneward_honorblade", + "particle": "surgebinding:item/models/shardblade_model/stoneward_honorblade" + }, + "elements": [ + { + "from": [7.5, 2.70262, 7.96875], + "to": [8.5, 14.95262, 8.03125], + "rotation": {"angle": 0, "axis": "y", "origin": [0, -2.04738, 0.34375]}, + "faces": { + "north": {"uv": [0, 0, 0.5, 6], "texture": "#0"}, + "east": {"uv": [0.5, 0, 1, 6], "texture": "#0"}, + "south": {"uv": [1, 0, 1.5, 6], "texture": "#0"}, + "west": {"uv": [1.5, 0, 2, 6], "texture": "#0"}, + "up": {"uv": [3.5, 1.5, 3, 1], "texture": "#0"}, + "down": {"uv": [3.5, 1.5, 3, 2], "texture": "#0"} + } + }, + { + "from": [7.5, 2.01512, 7.90625], + "to": [8.5, 2.70262, 8.09375], + "rotation": {"angle": 0, "axis": "y", "origin": [0, -2.04738, 0.34375]}, + "faces": { + "north": {"uv": [6.5, 7, 7, 7.5], "texture": "#0"}, + "east": {"uv": [7, 6.5, 7.5, 7], "texture": "#0"}, + "south": {"uv": [7, 7, 7.5, 7.5], "texture": "#0"}, + "west": {"uv": [0, 7.5, 0.5, 8], "texture": "#0"}, + "up": {"uv": [8, 0.5, 7.5, 0], "texture": "#0"}, + "down": {"uv": [1, 7.5, 0.5, 8], "texture": "#0"} + } + }, + { + "from": [7.75, 2.57762, 7.90625], + "to": [8.25, 3.26512, 8.09375], + "rotation": {"angle": 0, "axis": "y", "origin": [0, -2.04738, 0.34375]}, + "faces": { + "north": {"uv": [0, 10, 0.5, 10.5], "texture": "#0"}, + "east": {"uv": [10, 0, 10.5, 0.5], "texture": "#0"}, + "south": {"uv": [0.5, 10, 1, 10.5], "texture": "#0"}, + "west": {"uv": [10, 0.5, 10.5, 1], "texture": "#0"}, + "up": {"uv": [1.5, 10.5, 1, 10], "texture": "#0"}, + "down": {"uv": [10.5, 1, 10, 1.5], "texture": "#0"} + } + }, + { + "from": [8.33225, 2.66926, 7.90625], + "to": [8.39475, 3.85676, 8.09375], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8.3635, 2.95051, 8]}, + "faces": { + "north": {"uv": [5, 8, 5.5, 8.5], "texture": "#0"}, + "east": {"uv": [8, 5, 8.5, 5.5], "texture": "#0"}, + "south": {"uv": [5.5, 8, 6, 8.5], "texture": "#0"}, + "west": {"uv": [8, 5.5, 8.5, 6], "texture": "#0"}, + "up": {"uv": [6.5, 8.5, 6, 8], "texture": "#0"}, + "down": {"uv": [8.5, 6, 8, 6.5], "texture": "#0"} + } + }, + { + "from": [7.96738, 3.76848, 7.90625], + "to": [8.03038, 3.83148, 8.09375], + "rotation": {"angle": -45, "axis": "z", "origin": [7.99863, 3.79973, 8]}, + "faces": { + "north": {"uv": [1.5, 10, 2, 10.5], "texture": "#0"}, + "east": {"uv": [10, 1.5, 10.5, 2], "texture": "#0"}, + "south": {"uv": [2, 10, 2.5, 10.5], "texture": "#0"}, + "west": {"uv": [10, 2, 10.5, 2.5], "texture": "#0"}, + "up": {"uv": [3, 10.5, 2.5, 10], "texture": "#0"}, + "down": {"uv": [10.5, 2.5, 10, 3], "texture": "#0"} + } + }, + { + "from": [8.26975, 2.66926, 7.90625], + "to": [8.33225, 3.79426, 8.09375], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8.3635, 2.95051, 8]}, + "faces": { + "north": {"uv": [9.5, 0.5, 10, 1], "texture": "#0"}, + "east": {"uv": [1, 9.5, 1.5, 10], "texture": "#0"}, + "south": {"uv": [9.5, 1, 10, 1.5], "texture": "#0"}, + "west": {"uv": [1.5, 9.5, 2, 10], "texture": "#0"}, + "up": {"uv": [10, 2, 9.5, 1.5], "texture": "#0"}, + "down": {"uv": [2.5, 9.5, 2, 10], "texture": "#0"} + } + }, + { + "from": [7.97938, 2.62393, 7.90625], + "to": [8.04188, 3.74893, 8.09375], + "rotation": {"angle": 0, "axis": "y", "origin": [8.19813, 3.18643, 8]}, + "faces": { + "north": {"uv": [3, 10, 3.5, 10.5], "texture": "#0"}, + "east": {"uv": [10, 3, 10.5, 3.5], "texture": "#0"}, + "south": {"uv": [3.5, 10, 4, 10.5], "texture": "#0"}, + "west": {"uv": [10, 3.5, 10.5, 4], "texture": "#0"}, + "up": {"uv": [4.5, 10.5, 4, 10], "texture": "#0"}, + "down": {"uv": [10.5, 4, 10, 4.5], "texture": "#0"} + } + }, + { + "from": [8.20725, 2.66926, 7.90625], + "to": [8.26975, 3.73176, 8.09375], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8.3635, 2.95051, 8]}, + "faces": { + "north": {"uv": [9.5, 6.5, 10, 7], "texture": "#0"}, + "east": {"uv": [7, 9.5, 7.5, 10], "texture": "#0"}, + "south": {"uv": [9.5, 7, 10, 7.5], "texture": "#0"}, + "west": {"uv": [7.5, 9.5, 8, 10], "texture": "#0"}, + "up": {"uv": [10, 8, 9.5, 7.5], "texture": "#0"}, + "down": {"uv": [8.5, 9.5, 8, 10], "texture": "#0"} + } + }, + { + "from": [8.14475, 2.66926, 7.90625], + "to": [8.20725, 3.66926, 8.09375], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8.3635, 2.95051, 8]}, + "faces": { + "north": {"uv": [9.5, 8, 10, 8.5], "texture": "#0"}, + "east": {"uv": [8.5, 9.5, 9, 10], "texture": "#0"}, + "south": {"uv": [9.5, 8.5, 10, 9], "texture": "#0"}, + "west": {"uv": [9, 9.5, 9.5, 10], "texture": "#0"}, + "up": {"uv": [10, 9.5, 9.5, 9], "texture": "#0"}, + "down": {"uv": [10, 9.5, 9.5, 10], "texture": "#0"} + } + }, + { + "from": [7.71288, 2.64785, 7.90625], + "to": [7.77538, 3.83535, 8.09375], + "rotation": {"angle": -22.5, "axis": "z", "origin": [7.74413, 3.21035, 8]}, + "faces": { + "north": {"uv": [6.5, 8, 7, 8.5], "texture": "#0"}, + "east": {"uv": [8, 6.5, 8.5, 7], "texture": "#0"}, + "south": {"uv": [7, 8, 7.5, 8.5], "texture": "#0"}, + "west": {"uv": [8, 7, 8.5, 7.5], "texture": "#0"}, + "up": {"uv": [8, 8.5, 7.5, 8], "texture": "#0"}, + "down": {"uv": [8.5, 7.5, 8, 8], "texture": "#0"} + } + }, + { + "from": [7.83788, 2.64785, 7.90625], + "to": [7.90038, 3.71035, 8.09375], + "rotation": {"angle": -22.5, "axis": "z", "origin": [7.74413, 3.21035, 8]}, + "faces": { + "north": {"uv": [9.5, 3.5, 10, 4], "texture": "#0"}, + "east": {"uv": [4, 9.5, 4.5, 10], "texture": "#0"}, + "south": {"uv": [9.5, 4, 10, 4.5], "texture": "#0"}, + "west": {"uv": [4.5, 9.5, 5, 10], "texture": "#0"}, + "up": {"uv": [10, 5, 9.5, 4.5], "texture": "#0"}, + "down": {"uv": [5.5, 9.5, 5, 10], "texture": "#0"} + } + }, + { + "from": [7.90038, 2.64785, 7.90625], + "to": [7.96288, 3.64785, 8.09375], + "rotation": {"angle": -22.5, "axis": "z", "origin": [7.74413, 3.21035, 8]}, + "faces": { + "north": {"uv": [9.5, 5, 10, 5.5], "texture": "#0"}, + "east": {"uv": [5.5, 9.5, 6, 10], "texture": "#0"}, + "south": {"uv": [9.5, 5.5, 10, 6], "texture": "#0"}, + "west": {"uv": [6, 9.5, 6.5, 10], "texture": "#0"}, + "up": {"uv": [10, 6.5, 9.5, 6], "texture": "#0"}, + "down": {"uv": [7, 9.5, 6.5, 10], "texture": "#0"} + } + }, + { + "from": [7.77538, 2.64785, 7.90625], + "to": [7.83788, 3.77285, 8.09375], + "rotation": {"angle": -22.5, "axis": "z", "origin": [7.74413, 3.21035, 8]}, + "faces": { + "north": {"uv": [9.5, 2, 10, 2.5], "texture": "#0"}, + "east": {"uv": [2.5, 9.5, 3, 10], "texture": "#0"}, + "south": {"uv": [9.5, 2.5, 10, 3], "texture": "#0"}, + "west": {"uv": [3, 9.5, 3.5, 10], "texture": "#0"}, + "up": {"uv": [10, 3.5, 9.5, 3], "texture": "#0"}, + "down": {"uv": [4, 9.5, 3.5, 10], "texture": "#0"} + } + }, + { + "from": [8.63543, 2.72888, 8.0115], + "to": [8.76043, 2.85388, 8.074], + "rotation": {"angle": 22.5, "axis": "x", "origin": [8.26043, 3.01013, 8.04275]}, + "faces": { + "north": {"uv": [7.5, 3.5, 8, 4], "texture": "#0"}, + "east": {"uv": [4, 7.5, 4.5, 8], "texture": "#0"}, + "south": {"uv": [7.5, 4, 8, 4.5], "texture": "#0"}, + "west": {"uv": [4.5, 7.5, 5, 8], "texture": "#0"}, + "up": {"uv": [8, 5, 7.5, 4.5], "texture": "#0"}, + "down": {"uv": [5.5, 7.5, 5, 8], "texture": "#0"} + } + }, + { + "from": [8.63543, 2.85836, 7.93816], + "to": [8.76043, 2.92236, 8.00216], + "rotation": {"angle": -45, "axis": "x", "origin": [8.69793, 2.92086, 8.00066]}, + "faces": { + "north": {"uv": [7.5, 6.5, 8, 7], "texture": "#0"}, + "east": {"uv": [7, 7.5, 7.5, 8], "texture": "#0"}, + "south": {"uv": [7.5, 7, 8, 7.5], "texture": "#0"}, + "west": {"uv": [7.5, 7.5, 8, 8], "texture": "#0"}, + "up": {"uv": [0.5, 8.5, 0, 8], "texture": "#0"}, + "down": {"uv": [8.5, 0, 8, 0.5], "texture": "#0"} + } + }, + { + "from": [8.63543, 2.72888, 7.926], + "to": [8.76043, 2.85388, 7.9885], + "rotation": {"angle": -22.5, "axis": "x", "origin": [8.26043, 3.01013, 7.95725]}, + "faces": { + "north": {"uv": [7.5, 5, 8, 5.5], "texture": "#0"}, + "east": {"uv": [5.5, 7.5, 6, 8], "texture": "#0"}, + "south": {"uv": [7.5, 5.5, 8, 6], "texture": "#0"}, + "west": {"uv": [6, 7.5, 6.5, 8], "texture": "#0"}, + "up": {"uv": [8, 6.5, 7.5, 6], "texture": "#0"}, + "down": {"uv": [7, 7.5, 6.5, 8], "texture": "#0"} + } + }, + { + "from": [7.23957, 2.72888, 8.0115], + "to": [7.36457, 2.85388, 8.074], + "rotation": {"angle": 22.5, "axis": "x", "origin": [7.73957, 3.01013, 8.04275]}, + "faces": { + "north": {"uv": [3.5, 8, 4, 8.5], "texture": "#0"}, + "east": {"uv": [8, 3.5, 8.5, 4], "texture": "#0"}, + "south": {"uv": [4, 8, 4.5, 8.5], "texture": "#0"}, + "west": {"uv": [8, 4, 8.5, 4.5], "texture": "#0"}, + "up": {"uv": [5, 8.5, 4.5, 8], "texture": "#0"}, + "down": {"uv": [8.5, 4.5, 8, 5], "texture": "#0"} + } + }, + { + "from": [7.23957, 2.85836, 7.93816], + "to": [7.36457, 2.92236, 8.00216], + "rotation": {"angle": -45, "axis": "x", "origin": [7.30207, 2.92086, 8.00066]}, + "faces": { + "north": {"uv": [2, 8, 2.5, 8.5], "texture": "#0"}, + "east": {"uv": [8, 2, 8.5, 2.5], "texture": "#0"}, + "south": {"uv": [2.5, 8, 3, 8.5], "texture": "#0"}, + "west": {"uv": [8, 2.5, 8.5, 3], "texture": "#0"}, + "up": {"uv": [3.5, 8.5, 3, 8], "texture": "#0"}, + "down": {"uv": [8.5, 3, 8, 3.5], "texture": "#0"} + } + }, + { + "from": [7.23957, 2.72888, 7.926], + "to": [7.36457, 2.85388, 7.9885], + "rotation": {"angle": -22.5, "axis": "x", "origin": [7.73957, 3.01013, 7.95725]}, + "faces": { + "north": {"uv": [0.5, 8, 1, 8.5], "texture": "#0"}, + "east": {"uv": [8, 0.5, 8.5, 1], "texture": "#0"}, + "south": {"uv": [1, 8, 1.5, 8.5], "texture": "#0"}, + "west": {"uv": [8, 1, 8.5, 1.5], "texture": "#0"}, + "up": {"uv": [2, 8.5, 1.5, 8], "texture": "#0"}, + "down": {"uv": [8.5, 1.5, 8, 2], "texture": "#0"} + } + }, + { + "from": [7.51163, 2.13781, 7.90625], + "to": [7.63663, 2.70031, 8.09375], + "rotation": {"angle": -22.5, "axis": "z", "origin": [7.54288, 2.51281, 8]}, + "faces": { + "north": {"uv": [5.5, 4, 6, 4.5], "texture": "#0"}, + "east": {"uv": [4.5, 5.5, 5, 6], "texture": "#0"}, + "south": {"uv": [5.5, 4.5, 6, 5], "texture": "#0"}, + "west": {"uv": [5, 5.5, 5.5, 6], "texture": "#0"}, + "up": {"uv": [6, 5.5, 5.5, 5], "texture": "#0"}, + "down": {"uv": [6, 5.5, 5.5, 6], "texture": "#0"} + } + }, + { + "from": [7.30563, 2.34923, 7.90625], + "to": [7.43063, 2.72423, 8.09375], + "rotation": {"angle": 22.5, "axis": "z", "origin": [7.39938, 2.53673, 8]}, + "faces": { + "north": {"uv": [0, 6, 0.5, 6.5], "texture": "#0"}, + "east": {"uv": [6, 0, 6.5, 0.5], "texture": "#0"}, + "south": {"uv": [0.5, 6, 1, 6.5], "texture": "#0"}, + "west": {"uv": [6, 0.5, 6.5, 1], "texture": "#0"}, + "up": {"uv": [1.5, 6.5, 1, 6], "texture": "#0"}, + "down": {"uv": [6.5, 1, 6, 1.5], "texture": "#0"} + } + }, + { + "from": [8.61813, 1.84923, 7.90625], + "to": [8.74313, 2.22423, 8.09375], + "rotation": {"angle": 22.5, "axis": "z", "origin": [7.39938, 2.53673, 8]}, + "faces": { + "north": {"uv": [6.5, 4, 7, 4.5], "texture": "#0"}, + "east": {"uv": [4.5, 6.5, 5, 7], "texture": "#0"}, + "south": {"uv": [6.5, 4.5, 7, 5], "texture": "#0"}, + "west": {"uv": [5, 6.5, 5.5, 7], "texture": "#0"}, + "up": {"uv": [7, 5.5, 6.5, 5], "texture": "#0"}, + "down": {"uv": [6, 6.5, 5.5, 7], "texture": "#0"} + } + }, + { + "from": [8.68675, 2.27406, 7.90625], + "to": [8.93675, 2.39906, 8.09375], + "rotation": {"angle": 45, "axis": "z", "origin": [8.74925, 2.30531, 8]}, + "faces": { + "north": {"uv": [6.5, 5.5, 7, 6], "texture": "#0"}, + "east": {"uv": [6, 6.5, 6.5, 7], "texture": "#0"}, + "south": {"uv": [6.5, 6, 7, 6.5], "texture": "#0"}, + "west": {"uv": [6.5, 6.5, 7, 7], "texture": "#0"}, + "up": {"uv": [0.5, 7.5, 0, 7], "texture": "#0"}, + "down": {"uv": [7.5, 0, 7, 0.5], "texture": "#0"} + } + }, + { + "from": [8.42587, 2.32531, 7.90625], + "to": [8.48837, 2.70031, 8.09375], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8.45712, 2.51281, 8]}, + "faces": { + "north": {"uv": [6, 6, 6.5, 6.5], "texture": "#0"}, + "east": {"uv": [0, 6.5, 0.5, 7], "texture": "#0"}, + "south": {"uv": [6.5, 0, 7, 0.5], "texture": "#0"}, + "west": {"uv": [0.5, 6.5, 1, 7], "texture": "#0"}, + "up": {"uv": [7, 1, 6.5, 0.5], "texture": "#0"}, + "down": {"uv": [1.5, 6.5, 1, 7], "texture": "#0"} + } + }, + { + "from": [8.56937, 2.34923, 7.90625], + "to": [8.63187, 2.72423, 8.09375], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8.60062, 2.53673, 8]}, + "faces": { + "north": {"uv": [1.5, 6, 2, 6.5], "texture": "#0"}, + "east": {"uv": [6, 1.5, 6.5, 2], "texture": "#0"}, + "south": {"uv": [2, 6, 2.5, 6.5], "texture": "#0"}, + "west": {"uv": [6, 2, 6.5, 2.5], "texture": "#0"}, + "up": {"uv": [3, 6.5, 2.5, 6], "texture": "#0"}, + "down": {"uv": [6.5, 2.5, 6, 3], "texture": "#0"} + } + }, + { + "from": [8.63543, 2.76225, 7.96875], + "to": [8.76043, 3.26225, 8.03125], + "rotation": {"angle": 0, "axis": "y", "origin": [8.66668, 2.57475, 8]}, + "faces": { + "north": {"uv": [6.5, 1, 7, 1.5], "texture": "#0"}, + "east": {"uv": [1.5, 6.5, 2, 7], "texture": "#0"}, + "south": {"uv": [6.5, 1.5, 7, 2], "texture": "#0"}, + "west": {"uv": [2, 6.5, 2.5, 7], "texture": "#0"}, + "up": {"uv": [7, 2.5, 6.5, 2], "texture": "#0"}, + "down": {"uv": [3, 6.5, 2.5, 7], "texture": "#0"} + } + }, + { + "from": [8.63543, 2.01225, 7.90625], + "to": [8.76043, 2.76225, 8.09375], + "rotation": {"angle": 0, "axis": "y", "origin": [8.66668, 2.57475, 8]}, + "faces": { + "north": {"uv": [7.5, 2, 8, 2.5], "texture": "#0"}, + "east": {"uv": [2.5, 7.5, 3, 8], "texture": "#0"}, + "south": {"uv": [7.5, 2.5, 8, 3], "texture": "#0"}, + "west": {"uv": [3, 7.5, 3.5, 8], "texture": "#0"}, + "up": {"uv": [8, 3.5, 7.5, 3], "texture": "#0"}, + "down": {"uv": [4, 7.5, 3.5, 8], "texture": "#0"} + } + }, + { + "from": [7.26043, 2.01225, 7.90625], + "to": [8.76043, 2.38725, 8.09375], + "rotation": {"angle": 0, "axis": "y", "origin": [8.66668, 2.57475, 8]}, + "faces": { + "north": {"uv": [2, 2, 3, 2.5], "texture": "#0"}, + "east": {"uv": [8.5, 0, 9, 0.5], "texture": "#0"}, + "south": {"uv": [2, 2.5, 3, 3], "texture": "#0"}, + "west": {"uv": [0.5, 8.5, 1, 9], "texture": "#0"}, + "up": {"uv": [4, 0.5, 3, 0], "texture": "#0"}, + "down": {"uv": [4, 0.5, 3, 1], "texture": "#0"} + } + }, + { + "from": [7.26043, 2.01225, 7.90625], + "to": [8.76043, 2.19975, 8.09375], + "rotation": {"angle": 0, "axis": "y", "origin": [8.66668, 2.57475, 8]}, + "faces": { + "north": {"uv": [2, 0, 3, 0.5], "texture": "#0"}, + "east": {"uv": [8, 8, 8.5, 8.5], "texture": "#0"}, + "south": {"uv": [2, 0.5, 3, 1], "texture": "#0"}, + "west": {"uv": [0, 8.5, 0.5, 9], "texture": "#0"}, + "up": {"uv": [3, 1.5, 2, 1], "texture": "#0"}, + "down": {"uv": [3, 1.5, 2, 2], "texture": "#0"} + } + }, + { + "from": [8.38774, 1.93811, 7.90625], + "to": [8.76274, 2.12561, 8.09375], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8.57524, 1.96936, 8]}, + "faces": { + "north": {"uv": [8.5, 0.5, 9, 1], "texture": "#0"}, + "east": {"uv": [1, 8.5, 1.5, 9], "texture": "#0"}, + "south": {"uv": [8.5, 1, 9, 1.5], "texture": "#0"}, + "west": {"uv": [1.5, 8.5, 2, 9], "texture": "#0"}, + "up": {"uv": [9, 2, 8.5, 1.5], "texture": "#0"}, + "down": {"uv": [2.5, 8.5, 2, 9], "texture": "#0"} + } + }, + { + "from": [7.91397, 1.86874, 7.90625], + "to": [8.41397, 2.05624, 8.09375], + "rotation": {"angle": 0, "axis": "y", "origin": [8.22647, 1.89999, 8]}, + "faces": { + "north": {"uv": [8.5, 3.5, 9, 4], "texture": "#0"}, + "east": {"uv": [4, 8.5, 4.5, 9], "texture": "#0"}, + "south": {"uv": [8.5, 4, 9, 4.5], "texture": "#0"}, + "west": {"uv": [4.5, 8.5, 5, 9], "texture": "#0"}, + "up": {"uv": [9, 5, 8.5, 4.5], "texture": "#0"}, + "down": {"uv": [5.5, 8.5, 5, 9], "texture": "#0"} + } + }, + { + "from": [7.875, 0.11874, 7.90625], + "to": [8.125, 1.86874, 8.09375], + "rotation": {"angle": 0, "axis": "y", "origin": [8.22647, 1.89999, 8]}, + "faces": { + "north": {"uv": [8.5, 6.5, 9, 7], "texture": "#0"}, + "east": {"uv": [7, 8.5, 7.5, 9], "texture": "#0"}, + "south": {"uv": [8.5, 7, 9, 7.5], "texture": "#0"}, + "west": {"uv": [7.5, 8.5, 8, 9], "texture": "#0"}, + "up": {"uv": [9, 8, 8.5, 7.5], "texture": "#0"}, + "down": {"uv": [8.5, 8.5, 8, 9], "texture": "#0"} + } + }, + { + "from": [7.875, 0.05624, 7.90625], + "to": [8.125, 0.11874, 8.09375], + "rotation": {"angle": 0, "axis": "y", "origin": [8.22647, 1.58749, 8]}, + "faces": { + "north": {"uv": [8.5, 8, 9, 8.5], "texture": "#0"}, + "east": {"uv": [8.5, 8.5, 9, 9], "texture": "#0"}, + "south": {"uv": [0, 9, 0.5, 9.5], "texture": "#0"}, + "west": {"uv": [9, 0, 9.5, 0.5], "texture": "#0"}, + "up": {"uv": [1, 9.5, 0.5, 9], "texture": "#0"}, + "down": {"uv": [9.5, 0.5, 9, 1], "texture": "#0"} + } + }, + { + "from": [8.029, -0.11217, 7.90625], + "to": [8.0915, 0.07533, 8.09375], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8.06025, -0.01842, 8]}, + "faces": { + "north": {"uv": [2.5, 9, 3, 9.5], "texture": "#0"}, + "east": {"uv": [9, 2.5, 9.5, 3], "texture": "#0"}, + "south": {"uv": [3, 9, 3.5, 9.5], "texture": "#0"}, + "west": {"uv": [9, 3, 9.5, 3.5], "texture": "#0"}, + "up": {"uv": [4, 9.5, 3.5, 9], "texture": "#0"}, + "down": {"uv": [9.5, 3.5, 9, 4], "texture": "#0"} + } + }, + { + "from": [8.029, -0.17467, 7.90625], + "to": [8.0915, 0.07533, 8.09375], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8.06025, -0.01842, 8]}, + "faces": { + "north": {"uv": [1, 9, 1.5, 9.5], "texture": "#0"}, + "east": {"uv": [9, 1, 9.5, 1.5], "texture": "#0"}, + "south": {"uv": [1.5, 9, 2, 9.5], "texture": "#0"}, + "west": {"uv": [9, 1.5, 9.5, 2], "texture": "#0"}, + "up": {"uv": [2.5, 9.5, 2, 9], "texture": "#0"}, + "down": {"uv": [9.5, 2, 9, 2.5], "texture": "#0"} + } + }, + { + "from": [7.9665, -0.11217, 7.90625], + "to": [8.029, 0.07533, 8.09375], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8.06025, -0.01842, 8]}, + "faces": { + "north": {"uv": [7, 9, 7.5, 9.5], "texture": "#0"}, + "east": {"uv": [9, 7, 9.5, 7.5], "texture": "#0"}, + "south": {"uv": [7.5, 9, 8, 9.5], "texture": "#0"}, + "west": {"uv": [9, 7.5, 9.5, 8], "texture": "#0"}, + "up": {"uv": [8.5, 9.5, 8, 9], "texture": "#0"}, + "down": {"uv": [9.5, 8, 9, 8.5], "texture": "#0"} + } + }, + { + "from": [7.98362, -0.20598, 7.90625], + "to": [8.02362, -0.16598, 8.09375], + "rotation": {"angle": -45, "axis": "z", "origin": [8.01487, -0.17473, 8]}, + "faces": { + "north": {"uv": [5.5, 9, 6, 9.5], "texture": "#0"}, + "east": {"uv": [9, 5.5, 9.5, 6], "texture": "#0"}, + "south": {"uv": [6, 9, 6.5, 9.5], "texture": "#0"}, + "west": {"uv": [9, 6, 9.5, 6.5], "texture": "#0"}, + "up": {"uv": [7, 9.5, 6.5, 9], "texture": "#0"}, + "down": {"uv": [9.5, 6.5, 9, 7], "texture": "#0"} + } + }, + { + "from": [7.9085, -0.17467, 7.90625], + "to": [7.971, 0.07533, 8.09375], + "rotation": {"angle": 22.5, "axis": "z", "origin": [7.93975, -0.01842, 8]}, + "faces": { + "north": {"uv": [4, 9, 4.5, 9.5], "texture": "#0"}, + "east": {"uv": [9, 4, 9.5, 4.5], "texture": "#0"}, + "south": {"uv": [4.5, 9, 5, 9.5], "texture": "#0"}, + "west": {"uv": [9, 4.5, 9.5, 5], "texture": "#0"}, + "up": {"uv": [5.5, 9.5, 5, 9], "texture": "#0"}, + "down": {"uv": [9.5, 5, 9, 5.5], "texture": "#0"} + } + }, + { + "from": [7.971, -0.11217, 7.90625], + "to": [8.0335, 0.07533, 8.09375], + "rotation": {"angle": 22.5, "axis": "z", "origin": [7.93975, -0.01842, 8]}, + "faces": { + "north": {"uv": [8.5, 9, 9, 9.5], "texture": "#0"}, + "east": {"uv": [9, 8.5, 9.5, 9], "texture": "#0"}, + "south": {"uv": [9, 9, 9.5, 9.5], "texture": "#0"}, + "west": {"uv": [0, 9.5, 0.5, 10], "texture": "#0"}, + "up": {"uv": [10, 0.5, 9.5, 0], "texture": "#0"}, + "down": {"uv": [1, 9.5, 0.5, 10], "texture": "#0"} + } + }, + { + "from": [7.58603, 1.86874, 7.90625], + "to": [7.96103, 2.05624, 8.09375], + "rotation": {"angle": 0, "axis": "y", "origin": [7.77353, 1.89999, 8]}, + "faces": { + "north": {"uv": [8.5, 5, 9, 5.5], "texture": "#0"}, + "east": {"uv": [5.5, 8.5, 6, 9], "texture": "#0"}, + "south": {"uv": [8.5, 5.5, 9, 6], "texture": "#0"}, + "west": {"uv": [6, 8.5, 6.5, 9], "texture": "#0"}, + "up": {"uv": [9, 6.5, 8.5, 6], "texture": "#0"}, + "down": {"uv": [7, 8.5, 6.5, 9], "texture": "#0"} + } + }, + { + "from": [7.23726, 1.93811, 7.90625], + "to": [7.61226, 2.12561, 8.09375], + "rotation": {"angle": -22.5, "axis": "z", "origin": [7.42476, 1.96936, 8]}, + "faces": { + "north": {"uv": [8.5, 2, 9, 2.5], "texture": "#0"}, + "east": {"uv": [2.5, 8.5, 3, 9], "texture": "#0"}, + "south": {"uv": [8.5, 2.5, 9, 3], "texture": "#0"}, + "west": {"uv": [3, 8.5, 3.5, 9], "texture": "#0"}, + "up": {"uv": [9, 3.5, 8.5, 3], "texture": "#0"}, + "down": {"uv": [4, 8.5, 3.5, 9], "texture": "#0"} + } + }, + { + "from": [7.23957, 2.76225, 7.96875], + "to": [7.36457, 3.26225, 8.03125], + "rotation": {"angle": 0, "axis": "y", "origin": [7.33332, 2.57475, 8]}, + "faces": { + "north": {"uv": [3.5, 7, 4, 7.5], "texture": "#0"}, + "east": {"uv": [7, 3.5, 7.5, 4], "texture": "#0"}, + "south": {"uv": [4, 7, 4.5, 7.5], "texture": "#0"}, + "west": {"uv": [7, 4, 7.5, 4.5], "texture": "#0"}, + "up": {"uv": [5, 7.5, 4.5, 7], "texture": "#0"}, + "down": {"uv": [7.5, 4.5, 7, 5], "texture": "#0"} + } + }, + { + "from": [7.23957, 2.01225, 7.90625], + "to": [7.36457, 2.76225, 8.09375], + "rotation": {"angle": 0, "axis": "y", "origin": [7.33332, 2.57475, 8]}, + "faces": { + "north": {"uv": [7.5, 0.5, 8, 1], "texture": "#0"}, + "east": {"uv": [1, 7.5, 1.5, 8], "texture": "#0"}, + "south": {"uv": [7.5, 1, 8, 1.5], "texture": "#0"}, + "west": {"uv": [1.5, 7.5, 2, 8], "texture": "#0"}, + "up": {"uv": [8, 2, 7.5, 1.5], "texture": "#0"}, + "down": {"uv": [2.5, 7.5, 2, 8], "texture": "#0"} + } + }, + { + "from": [7.25687, 1.84923, 7.90625], + "to": [7.38187, 2.22423, 8.09375], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8.60062, 2.53673, 8]}, + "faces": { + "north": {"uv": [2, 7, 2.5, 7.5], "texture": "#0"}, + "east": {"uv": [7, 2, 7.5, 2.5], "texture": "#0"}, + "south": {"uv": [2.5, 7, 3, 7.5], "texture": "#0"}, + "west": {"uv": [7, 2.5, 7.5, 3], "texture": "#0"}, + "up": {"uv": [3.5, 7.5, 3, 7], "texture": "#0"}, + "down": {"uv": [7.5, 3, 7, 3.5], "texture": "#0"} + } + }, + { + "from": [7.06325, 2.27406, 7.90625], + "to": [7.31325, 2.39906, 8.09375], + "rotation": {"angle": -45, "axis": "z", "origin": [7.25075, 2.30531, 8]}, + "faces": { + "north": {"uv": [0.5, 7, 1, 7.5], "texture": "#0"}, + "east": {"uv": [7, 0.5, 7.5, 1], "texture": "#0"}, + "south": {"uv": [1, 7, 1.5, 7.5], "texture": "#0"}, + "west": {"uv": [7, 1, 7.5, 1.5], "texture": "#0"}, + "up": {"uv": [2, 7.5, 1.5, 7], "texture": "#0"}, + "down": {"uv": [7.5, 1.5, 7, 2], "texture": "#0"} + } + }, + { + "from": [8.63429, 3.22449, 7.96875], + "to": [8.72429, 3.31449, 8.03125], + "rotation": {"angle": 45, "axis": "z", "origin": [8.69679, 3.28699, 8]}, + "faces": { + "north": {"uv": [6.5, 2.5, 7, 3], "texture": "#0"}, + "east": {"uv": [3, 6.5, 3.5, 7], "texture": "#0"}, + "south": {"uv": [6.5, 3, 7, 3.5], "texture": "#0"}, + "west": {"uv": [3.5, 6.5, 4, 7], "texture": "#0"}, + "up": {"uv": [7, 4, 6.5, 3.5], "texture": "#0"}, + "down": {"uv": [4.5, 6.5, 4, 7], "texture": "#0"} + } + }, + { + "from": [7.24071, 3.22449, 7.96875], + "to": [7.33071, 3.31449, 8.03125], + "rotation": {"angle": 45, "axis": "z", "origin": [7.30321, 3.28699, 8]}, + "faces": { + "north": {"uv": [5, 7, 5.5, 7.5], "texture": "#0"}, + "east": {"uv": [7, 5, 7.5, 5.5], "texture": "#0"}, + "south": {"uv": [5.5, 7, 6, 7.5], "texture": "#0"}, + "west": {"uv": [7, 5.5, 7.5, 6], "texture": "#0"}, + "up": {"uv": [6.5, 7.5, 6, 7], "texture": "#0"}, + "down": {"uv": [7.5, 6, 7, 6.5], "texture": "#0"} + } + }, + { + "from": [8.36425, 2.16618, 7.90625], + "to": [8.48925, 2.72868, 8.09375], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8.52887, 2.52477, 8]}, + "faces": { + "north": {"uv": [4.5, 6, 5, 6.5], "texture": "#0"}, + "east": {"uv": [6, 4.5, 6.5, 5], "texture": "#0"}, + "south": {"uv": [5, 6, 5.5, 6.5], "texture": "#0"}, + "west": {"uv": [6, 5, 6.5, 5.5], "texture": "#0"}, + "up": {"uv": [6, 6.5, 5.5, 6], "texture": "#0"}, + "down": {"uv": [6.5, 5.5, 6, 6], "texture": "#0"} + } + }, + { + "from": [8.55934, 2.31328, 7.90625], + "to": [8.68434, 2.75078, 8.09375], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8.52887, 2.52477, 8]}, + "faces": { + "north": {"uv": [3, 6, 3.5, 6.5], "texture": "#0"}, + "east": {"uv": [6, 3, 6.5, 3.5], "texture": "#0"}, + "south": {"uv": [3.5, 6, 4, 6.5], "texture": "#0"}, + "west": {"uv": [6, 3.5, 6.5, 4], "texture": "#0"}, + "up": {"uv": [4.5, 6.5, 4, 6], "texture": "#0"}, + "down": {"uv": [6.5, 4, 6, 4.5], "texture": "#0"} + } + }, + { + "from": [9.2197, 14.59812, 7.96875], + "to": [9.2822, 15.78562, 8.03125], + "rotation": {"angle": -22.5, "axis": "z", "origin": [9.25095, 19.09812, 8.09375]}, + "faces": { + "north": {"uv": [2, 3, 2.5, 3.5], "texture": "#0"}, + "east": {"uv": [3, 2, 3.5, 2.5], "texture": "#0"}, + "south": {"uv": [2.5, 3, 3, 3.5], "texture": "#0"}, + "west": {"uv": [3, 2.5, 3.5, 3], "texture": "#0"}, + "up": {"uv": [3.5, 3.5, 3, 3], "texture": "#0"}, + "down": {"uv": [4, 1, 3.5, 1.5], "texture": "#0"} + } + }, + { + "from": [8.21266, 14.89547, 7.96875], + "to": [8.27516, 16.08297, 8.03125], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8.24391, 15.48922, 8.09375]}, + "faces": { + "north": {"uv": [3.5, 1.5, 4, 2], "texture": "#0"}, + "east": {"uv": [2, 3.5, 2.5, 4], "texture": "#0"}, + "south": {"uv": [3.5, 2, 4, 2.5], "texture": "#0"}, + "west": {"uv": [2.5, 3.5, 3, 4], "texture": "#0"}, + "up": {"uv": [4, 3, 3.5, 2.5], "texture": "#0"}, + "down": {"uv": [3.5, 3.5, 3, 4], "texture": "#0"} + } + }, + { + "from": [7.57131, 15.85267, 7.96875], + "to": [7.63531, 15.91667, 8.03125], + "rotation": {"angle": 45, "axis": "z", "origin": [7.60256, 16.44642, 8.09375]}, + "faces": { + "north": {"uv": [3.5, 3, 4, 3.5], "texture": "#0"}, + "east": {"uv": [3.5, 3.5, 4, 4], "texture": "#0"}, + "south": {"uv": [4, 0, 4.5, 0.5], "texture": "#0"}, + "west": {"uv": [4, 0.5, 4.5, 1], "texture": "#0"}, + "up": {"uv": [4.5, 1.5, 4, 1], "texture": "#0"}, + "down": {"uv": [4.5, 1.5, 4, 2], "texture": "#0"} + } + }, + { + "from": [7.97, 14.89547, 7.96875], + "to": [8.0325, 16.02047, 8.03125], + "rotation": {"angle": 0, "axis": "y", "origin": [7.75609, 15.48922, 8.09375]}, + "faces": { + "north": {"uv": [2, 4, 2.5, 4.5], "texture": "#0"}, + "east": {"uv": [4, 2, 4.5, 2.5], "texture": "#0"}, + "south": {"uv": [2.5, 4, 3, 4.5], "texture": "#0"}, + "west": {"uv": [4, 2.5, 4.5, 3], "texture": "#0"}, + "up": {"uv": [3.5, 4.5, 3, 4], "texture": "#0"}, + "down": {"uv": [4.5, 3, 4, 3.5], "texture": "#0"} + } + }, + { + "from": [9.2822, 14.59812, 7.96875], + "to": [9.3447, 15.72312, 8.03125], + "rotation": {"angle": -22.5, "axis": "z", "origin": [9.25095, 19.09812, 8.09375]}, + "faces": { + "north": {"uv": [3.5, 4, 4, 4.5], "texture": "#0"}, + "east": {"uv": [4, 3.5, 4.5, 4], "texture": "#0"}, + "south": {"uv": [4, 4, 4.5, 4.5], "texture": "#0"}, + "west": {"uv": [4.5, 0, 5, 0.5], "texture": "#0"}, + "up": {"uv": [5, 1, 4.5, 0.5], "texture": "#0"}, + "down": {"uv": [5, 1, 4.5, 1.5], "texture": "#0"} + } + }, + { + "from": [8.15016, 14.89547, 7.96875], + "to": [8.21266, 16.02047, 8.03125], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8.24391, 15.48922, 8.09375]}, + "faces": { + "north": {"uv": [4.5, 1.5, 5, 2], "texture": "#0"}, + "east": {"uv": [2, 4.5, 2.5, 5], "texture": "#0"}, + "south": {"uv": [4.5, 2, 5, 2.5], "texture": "#0"}, + "west": {"uv": [2.5, 4.5, 3, 5], "texture": "#0"}, + "up": {"uv": [5, 3, 4.5, 2.5], "texture": "#0"}, + "down": {"uv": [3.5, 4.5, 3, 5], "texture": "#0"} + } + }, + { + "from": [9.3447, 14.59812, 7.96875], + "to": [9.4072, 15.53562, 8.03125], + "rotation": {"angle": -22.5, "axis": "z", "origin": [9.25095, 19.09812, 8.09375]}, + "faces": { + "north": {"uv": [4.5, 3, 5, 3.5], "texture": "#0"}, + "east": {"uv": [3.5, 4.5, 4, 5], "texture": "#0"}, + "south": {"uv": [4.5, 3.5, 5, 4], "texture": "#0"}, + "west": {"uv": [4, 4.5, 4.5, 5], "texture": "#0"}, + "up": {"uv": [5, 4.5, 4.5, 4], "texture": "#0"}, + "down": {"uv": [5, 4.5, 4.5, 5], "texture": "#0"} + } + }, + { + "from": [8.08766, 14.89547, 7.96875], + "to": [8.15016, 15.83297, 8.03125], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8.24391, 15.48922, 8.09375]}, + "faces": { + "north": {"uv": [5, 0, 5.5, 0.5], "texture": "#0"}, + "east": {"uv": [5, 0.5, 5.5, 1], "texture": "#0"}, + "south": {"uv": [5, 1, 5.5, 1.5], "texture": "#0"}, + "west": {"uv": [5, 1.5, 5.5, 2], "texture": "#0"}, + "up": {"uv": [2.5, 5.5, 2, 5], "texture": "#0"}, + "down": {"uv": [5.5, 2, 5, 2.5], "texture": "#0"} + } + }, + { + "from": [9.4072, 14.59812, 7.96875], + "to": [9.5322, 15.53562, 8.03125], + "rotation": {"angle": -22.5, "axis": "z", "origin": [9.25095, 19.09812, 8.09375]}, + "faces": { + "north": {"uv": [2.5, 5, 3, 5.5], "texture": "#0"}, + "east": {"uv": [5, 2.5, 5.5, 3], "texture": "#0"}, + "south": {"uv": [3, 5, 3.5, 5.5], "texture": "#0"}, + "west": {"uv": [5, 3, 5.5, 3.5], "texture": "#0"}, + "up": {"uv": [4, 5.5, 3.5, 5], "texture": "#0"}, + "down": {"uv": [5.5, 3.5, 5, 4], "texture": "#0"} + } + }, + { + "from": [7.96266, 14.89547, 7.96875], + "to": [8.08766, 15.83297, 8.03125], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8.24391, 15.48922, 8.09375]}, + "faces": { + "north": {"uv": [4, 5, 4.5, 5.5], "texture": "#0"}, + "east": {"uv": [5, 4, 5.5, 4.5], "texture": "#0"}, + "south": {"uv": [4.5, 5, 5, 5.5], "texture": "#0"}, + "west": {"uv": [5, 4.5, 5.5, 5], "texture": "#0"}, + "up": {"uv": [5.5, 5.5, 5, 5], "texture": "#0"}, + "down": {"uv": [6, 0, 5.5, 0.5], "texture": "#0"} + } + }, + { + "from": [9.5322, 14.59812, 7.96875], + "to": [9.6572, 15.28562, 8.03125], + "rotation": {"angle": -22.5, "axis": "z", "origin": [9.25095, 19.09812, 8.09375]}, + "faces": { + "north": {"uv": [5.5, 0.5, 6, 1], "texture": "#0"}, + "east": {"uv": [5.5, 1, 6, 1.5], "texture": "#0"}, + "south": {"uv": [5.5, 1.5, 6, 2], "texture": "#0"}, + "west": {"uv": [2, 5.5, 2.5, 6], "texture": "#0"}, + "up": {"uv": [6, 2.5, 5.5, 2], "texture": "#0"}, + "down": {"uv": [3, 5.5, 2.5, 6], "texture": "#0"} + } + }, + { + "from": [7.83766, 14.89547, 7.96875], + "to": [7.96266, 15.70797, 8.03125], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8.24391, 15.48922, 8.09375]}, + "faces": { + "north": {"uv": [5.5, 2.5, 6, 3], "texture": "#0"}, + "east": {"uv": [3, 5.5, 3.5, 6], "texture": "#0"}, + "south": {"uv": [5.5, 3, 6, 3.5], "texture": "#0"}, + "west": {"uv": [3.5, 5.5, 4, 6], "texture": "#0"}, + "up": {"uv": [6, 4, 5.5, 3.5], "texture": "#0"}, + "down": {"uv": [4.5, 5.5, 4, 6], "texture": "#0"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [0, 90, 0], + "translation": [0, 17, 1], + "scale": [2.7, 2.7, 2.7] + }, + "thirdperson_lefthand": { + "rotation": [0, 90, 0], + "translation": [0, 17, 1], + "scale": [2.7, 2.7, 2.7] + }, + "firstperson_righthand": { + "rotation": [0, 90, 0], + "translation": [0, 13, 0], + "scale": [2, 2, 2] + }, + "firstperson_lefthand": { + "rotation": [0, 90, 0], + "translation": [0, 13, 0], + "scale": [2, 2, 2] + }, + "ground": { + "translation": [0, 5, 0] + }, + "gui": { + "rotation": [0, 0, -45] + }, + "fixed": { + "rotation": [0, 0, 45], + "translation": [-1, 1, 0] + } + } +} \ No newline at end of file diff --git a/src/surgebinding/resources/assets/surgebinding/models/item/test_blade.json b/src/surgebinding/resources/assets/surgebinding/models/item/test_blade.json new file mode 100644 index 000000000..45fd9b2d2 --- /dev/null +++ b/src/surgebinding/resources/assets/surgebinding/models/item/test_blade.json @@ -0,0 +1,504 @@ +{ + "credit": "Made with Blockbench", + "parent": "forge:item/default", + "textures": { + "0": "surgebinding:item/models/shardblade_model/shard_test", + "particle": "surgebinding:item/models/shardblade_model/shard_test" + }, + "elements": [ + { + "name": "blade", + "from": [ + 6.5, + 11, + 7.5 + ], + "to": [ + 9.5, + 31, + 8.5 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 8.04223, + 9.53957, + 8 + ] + }, + "faces": { + "north": { + "uv": [ + 0, + 0, + 3, + 16 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 0, + 0, + 1, + 16 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 0, + 0, + 3, + 16 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 0, + 0, + 1, + 16 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 0, + 0, + 1, + 3 + ], + "rotation": 90, + "texture": "#0" + }, + "down": { + "uv": [ + 0, + 0, + 1, + 3 + ], + "rotation": 270, + "texture": "#0" + } + } + }, + { + "name": "handguard_inner", + "from": [ + 6, + 9, + 7 + ], + "to": [ + 11, + 11, + 9 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 8.34223, + 9.53957, + 8 + ] + }, + "faces": { + "north": { + "uv": [ + 13, + 0, + 16, + 1 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 13, + 0, + 16, + 1 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 13, + 0, + 16, + 1 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 13, + 0, + 16, + 1 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 13, + 0, + 16, + 3 + ], + "rotation": 270, + "texture": "#0" + }, + "down": { + "uv": [ + 13, + 0, + 16, + 3 + ], + "rotation": 90, + "texture": "#0" + } + } + }, + { + "name": "handguard_outer", + "from": [ + 5.76543, + 9.15965, + 6.5 + ], + "to": [ + 10.76543, + 11.15965, + 9.5 + ], + "rotation": { + "angle": 22.5, + "axis": "z", + "origin": [ + 8.04223, + 9.53957, + 8 + ] + }, + "faces": { + "north": { + "uv": [ + 13, + 0, + 16, + 1 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 13, + 0, + 16, + 1 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 13, + 0, + 16, + 1 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 13, + 0, + 16, + 1 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 13, + 0, + 16, + 3 + ], + "rotation": 270, + "texture": "#0" + }, + "down": { + "uv": [ + 13, + 0, + 16, + 3 + ], + "rotation": 90, + "texture": "#0" + } + } + }, + { + "name": "handle", + "from": [ + 7.5, + 2, + 7.5 + ], + "to": [ + 8.5, + 9, + 8.5 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 8.04223, + 9.53957, + 8 + ] + }, + "faces": { + "north": { + "uv": [ + 5, + 8, + 6, + 15 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 5, + 8, + 6, + 15 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 5, + 8, + 6, + 15 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 5, + 8, + 6, + 15 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 5, + 8, + 6, + 9 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 5, + 9, + 6, + 10 + ], + "texture": "#0" + } + } + }, + { + "name": "pommel", + "from": [ + 6.5, + 0, + 6.5 + ], + "to": [ + 9.5, + 2, + 9.5 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 8.04223, + 9.53957, + 8 + ] + }, + "faces": { + "north": { + "uv": [ + 13, + 14, + 16, + 16 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 13, + 14, + 16, + 16 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 13, + 14, + 16, + 16 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 13, + 14, + 16, + 16 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 13, + 11, + 16, + 14 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 13, + 11, + 16, + 14 + ], + "texture": "#0" + } + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [ + 0, + 90, + 0 + ], + "translation": [ + -0.5, + 0.75, + 0 + ] + }, + "thirdperson_lefthand": { + "rotation": [ + 0, + 90, + 0 + ], + "translation": [ + -0.5, + 0.75, + 0 + ] + }, + "firstperson_righthand": { + "rotation": [ + 0, + 90, + 0 + ] + }, + "firstperson_lefthand": { + "rotation": [ + 0, + 90, + 0 + ] + }, + "ground": { + "translation": [ + 0, + 4, + 0 + ] + }, + "gui": { + "rotation": [ + 0, + 0, + -45 + ], + "translation": [ + -3.5, + -3.5, + -2 + ], + "scale": [ + 0.67, + 0.67, + 0.67 + ] + }, + "fixed": { + "rotation": [ + 0, + 0, + 46 + ], + "translation": [ + 4.5, + -3.75, + -1.25 + ], + "scale": [ + 0.78, + 0.78, + 0.78 + ] + } + }, + "groups": [ + { + "name": "blade", + "origin": [ + 8, + 8, + 8 + ], + "children": [ + 0, + 1, + 2, + 3, + 4 + ] + } + ] +} \ No newline at end of file diff --git a/src/surgebinding/resources/assets/surgebinding/models/item/truthwatcher_honorblade.json b/src/surgebinding/resources/assets/surgebinding/models/item/truthwatcher_honorblade.json new file mode 100644 index 000000000..00fe1a9ae --- /dev/null +++ b/src/surgebinding/resources/assets/surgebinding/models/item/truthwatcher_honorblade.json @@ -0,0 +1,1249 @@ +{ + "credit": "Made with Blockbench", + "texture_size": [32, 32], + "textures": { + "0": "surgebinding:item/models/shardblade_model/truthwatcher_honorblade", + "particle": "surgebinding:item/models/shardblade_model/truthwatcher_honorblade" + }, + "elements": [ + { + "from": [7.76645, 6.73453, 7.9275], + "to": [8.34645, 11.80953, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [8.05645, 8.11203, 7.96375]}, + "faces": { + "north": {"uv": [0, 0, 0.5, 2], "texture": "#0"}, + "east": {"uv": [0.5, 0, 1, 2], "texture": "#0"}, + "south": {"uv": [1, 0, 1.5, 2], "texture": "#0"}, + "west": {"uv": [1.5, 0, 2, 2], "texture": "#0"}, + "up": {"uv": [2.5, 1.5, 2, 1], "texture": "#0"}, + "down": {"uv": [2, 2, 1.5, 2.5], "texture": "#0"} + } + }, + { + "from": [7.43826, 6.04882, 7.855], + "to": [7.82251, 6.78107, 8.0725], + "rotation": {"angle": -22.5, "axis": "z", "origin": [7.48538, 5.93282, 7.97463]}, + "faces": { + "north": {"uv": [1, 4, 1.5, 4.5], "texture": "#0"}, + "east": {"uv": [4, 1, 4.5, 1.5], "texture": "#0"}, + "south": {"uv": [1.5, 4, 2, 4.5], "texture": "#0"}, + "west": {"uv": [4, 1.5, 4.5, 2], "texture": "#0"}, + "up": {"uv": [2.5, 4.5, 2, 4], "texture": "#0"}, + "down": {"uv": [4.5, 2, 4, 2.5], "texture": "#0"} + } + }, + { + "from": [7.43826, 6.04882, 7.855], + "to": [7.53251, 7.43357, 8.0725], + "rotation": {"angle": -22.5, "axis": "z", "origin": [7.48538, 5.93282, 7.97463]}, + "faces": { + "north": {"uv": [2.5, 9, 3, 9.5], "texture": "#0"}, + "east": {"uv": [9, 2.5, 9.5, 3], "texture": "#0"}, + "south": {"uv": [3, 9, 3.5, 9.5], "texture": "#0"}, + "west": {"uv": [9, 3, 9.5, 3.5], "texture": "#0"}, + "up": {"uv": [4, 9.5, 3.5, 9], "texture": "#0"}, + "down": {"uv": [9.5, 3.5, 9, 4], "texture": "#0"} + } + }, + { + "from": [7.51076, 6.77382, 7.855], + "to": [7.60501, 7.36107, 8.0725], + "rotation": {"angle": -22.5, "axis": "z", "origin": [7.48538, 5.93282, 7.97463]}, + "faces": { + "north": {"uv": [10.5, 11, 11, 11.5], "texture": "#0"}, + "east": {"uv": [11, 10.5, 11.5, 11], "texture": "#0"}, + "south": {"uv": [11, 11, 11.5, 11.5], "texture": "#0"}, + "west": {"uv": [0, 11.5, 0.5, 12], "texture": "#0"}, + "up": {"uv": [12, 0.5, 11.5, 0], "texture": "#0"}, + "down": {"uv": [1, 11.5, 0.5, 12], "texture": "#0"} + } + }, + { + "from": [7.58326, 6.77382, 7.855], + "to": [7.67751, 7.28857, 8.0725], + "rotation": {"angle": -22.5, "axis": "z", "origin": [7.48538, 5.93282, 7.97463]}, + "faces": { + "north": {"uv": [11.5, 2, 12, 2.5], "texture": "#0"}, + "east": {"uv": [2.5, 11.5, 3, 12], "texture": "#0"}, + "south": {"uv": [11.5, 2.5, 12, 3], "texture": "#0"}, + "west": {"uv": [3, 11.5, 3.5, 12], "texture": "#0"}, + "up": {"uv": [12, 3.5, 11.5, 3], "texture": "#0"}, + "down": {"uv": [4, 11.5, 3.5, 12], "texture": "#0"} + } + }, + { + "from": [7.80076, 6.26632, 7.855], + "to": [8.04001, 6.41857, 8.0725], + "rotation": {"angle": -22.5, "axis": "z", "origin": [7.48538, 5.93282, 7.97463]}, + "faces": { + "north": {"uv": [1.5, 8, 2, 8.5], "texture": "#0"}, + "east": {"uv": [8, 1.5, 8.5, 2], "texture": "#0"}, + "south": {"uv": [2, 8, 2.5, 8.5], "texture": "#0"}, + "west": {"uv": [8, 2, 8.5, 2.5], "texture": "#0"}, + "up": {"uv": [3, 8.5, 2.5, 8], "texture": "#0"}, + "down": {"uv": [8.5, 2.5, 8, 3], "texture": "#0"} + } + }, + { + "from": [7.80076, 6.41132, 7.855], + "to": [7.96751, 6.56357, 8.0725], + "rotation": {"angle": -22.5, "axis": "z", "origin": [7.48538, 5.93282, 7.97463]}, + "faces": { + "north": {"uv": [3, 8, 3.5, 8.5], "texture": "#0"}, + "east": {"uv": [8, 3, 8.5, 3.5], "texture": "#0"}, + "south": {"uv": [3.5, 8, 4, 8.5], "texture": "#0"}, + "west": {"uv": [8, 3.5, 8.5, 4], "texture": "#0"}, + "up": {"uv": [4.5, 8.5, 4, 8], "texture": "#0"}, + "down": {"uv": [8.5, 4, 8, 4.5], "texture": "#0"} + } + }, + { + "from": [7.98265, 5.92651, 7.855], + "to": [8.1494, 7.09376, 8.0725], + "rotation": {"angle": 0, "axis": "y", "origin": [8.06602, 6.29263, 7.96375]}, + "faces": { + "north": {"uv": [4.5, 8, 5, 8.5], "texture": "#0"}, + "east": {"uv": [8, 4.5, 8.5, 5], "texture": "#0"}, + "south": {"uv": [5, 8, 5.5, 8.5], "texture": "#0"}, + "west": {"uv": [8, 5, 8.5, 5.5], "texture": "#0"}, + "up": {"uv": [6, 8.5, 5.5, 8], "texture": "#0"}, + "down": {"uv": [8.5, 5.5, 8, 6], "texture": "#0"} + } + }, + { + "from": [8.5804, 5.55582, 7.855], + "to": [8.67465, 7.43357, 8.0725], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8.62753, 5.93282, 7.97463]}, + "faces": { + "north": {"uv": [0, 2, 0.5, 3], "texture": "#0"}, + "east": {"uv": [2, 0, 2.5, 1], "texture": "#0"}, + "south": {"uv": [0.5, 2, 1, 3], "texture": "#0"}, + "west": {"uv": [1, 2, 1.5, 3], "texture": "#0"}, + "up": {"uv": [3, 4.5, 2.5, 4], "texture": "#0"}, + "down": {"uv": [4.5, 2.5, 4, 3], "texture": "#0"} + } + }, + { + "from": [8.01887, 7.32012, 7.855], + "to": [8.07687, 7.37812, 8.0725], + "rotation": {"angle": 45, "axis": "z", "origin": [8.06599, 7.35274, 7.96375]}, + "faces": { + "north": {"uv": [11.5, 6.5, 12, 7], "texture": "#0"}, + "east": {"uv": [7, 11.5, 7.5, 12], "texture": "#0"}, + "south": {"uv": [11.5, 7, 12, 7.5], "texture": "#0"}, + "west": {"uv": [7.5, 11.5, 8, 12], "texture": "#0"}, + "up": {"uv": [12, 8, 11.5, 7.5], "texture": "#0"}, + "down": {"uv": [8.5, 11.5, 8, 12], "texture": "#0"} + } + }, + { + "from": [8.49835, 6.83108, 7.855], + "to": [8.5926, 7.33133, 8.0725], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8.61797, 5.97558, 7.97463]}, + "faces": { + "north": {"uv": [11.5, 0.5, 12, 1], "texture": "#0"}, + "east": {"uv": [1, 11.5, 1.5, 12], "texture": "#0"}, + "south": {"uv": [11.5, 1, 12, 1.5], "texture": "#0"}, + "west": {"uv": [1.5, 11.5, 2, 12], "texture": "#0"}, + "up": {"uv": [12, 2, 11.5, 1.5], "texture": "#0"}, + "down": {"uv": [2.5, 11.5, 2, 12], "texture": "#0"} + } + }, + { + "from": [7.70011, 5.50158, 7.855], + "to": [8.37436, 6.02358, 8.0725], + "rotation": {"angle": 0, "axis": "y", "origin": [8.32724, 5.74083, 7.97463]}, + "faces": { + "north": {"uv": [3, 4, 3.5, 4.5], "texture": "#0"}, + "east": {"uv": [4, 3, 4.5, 3.5], "texture": "#0"}, + "south": {"uv": [3.5, 4, 4, 4.5], "texture": "#0"}, + "west": {"uv": [4, 3.5, 4.5, 4], "texture": "#0"}, + "up": {"uv": [4.5, 4.5, 4, 4], "texture": "#0"}, + "down": {"uv": [0.5, 4.5, 0, 5], "texture": "#0"} + } + }, + { + "from": [8.6093, 5.41056, 7.855], + "to": [8.70355, 6.82431, 8.0725], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8.65642, 5.69331, 7.97463]}, + "faces": { + "north": {"uv": [4.5, 1.5, 5, 2], "texture": "#0"}, + "east": {"uv": [2, 4.5, 2.5, 5], "texture": "#0"}, + "south": {"uv": [4.5, 2, 5, 2.5], "texture": "#0"}, + "west": {"uv": [2.5, 4.5, 3, 5], "texture": "#0"}, + "up": {"uv": [5, 3, 4.5, 2.5], "texture": "#0"}, + "down": {"uv": [3.5, 4.5, 3, 5], "texture": "#0"} + } + }, + { + "from": [8.32655, 5.88181, 7.855], + "to": [8.4208, 6.91856, 8.0725], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8.65642, 5.69331, 7.97463]}, + "faces": { + "north": {"uv": [2.5, 6, 3, 6.5], "texture": "#0"}, + "east": {"uv": [6, 2.5, 6.5, 3], "texture": "#0"}, + "south": {"uv": [3, 6, 3.5, 6.5], "texture": "#0"}, + "west": {"uv": [6, 3, 6.5, 3.5], "texture": "#0"}, + "up": {"uv": [4, 6.5, 3.5, 6], "texture": "#0"}, + "down": {"uv": [6.5, 3.5, 6, 4], "texture": "#0"} + } + }, + { + "from": [8.08582, 5.93718, 7.855], + "to": [8.18007, 7.08268, 8.0725], + "rotation": {"angle": 0, "axis": "y", "origin": [8.13294, 6.20181, 7.97463]}, + "faces": { + "north": {"uv": [4, 6, 4.5, 6.5], "texture": "#0"}, + "east": {"uv": [6, 4, 6.5, 4.5], "texture": "#0"}, + "south": {"uv": [4.5, 6, 5, 6.5], "texture": "#0"}, + "west": {"uv": [6, 4.5, 6.5, 5], "texture": "#0"}, + "up": {"uv": [5.5, 6.5, 5, 6], "texture": "#0"}, + "down": {"uv": [6.5, 5, 6, 5.5], "texture": "#0"} + } + }, + { + "from": [8.37436, 6.02358, 7.855], + "to": [8.56286, 6.11783, 8.0725], + "rotation": {"angle": 0, "axis": "y", "origin": [8.42149, 5.83508, 7.97463]}, + "faces": { + "north": {"uv": [0, 5, 0.5, 5.5], "texture": "#0"}, + "east": {"uv": [5, 0, 5.5, 0.5], "texture": "#0"}, + "south": {"uv": [0.5, 5, 1, 5.5], "texture": "#0"}, + "west": {"uv": [5, 0.5, 5.5, 1], "texture": "#0"}, + "up": {"uv": [1.5, 5.5, 1, 5], "texture": "#0"}, + "down": {"uv": [5.5, 1, 5, 1.5], "texture": "#0"} + } + }, + { + "from": [8.20761, 6.02358, 7.855], + "to": [8.54111, 6.19033, 8.0725], + "rotation": {"angle": 45, "axis": "z", "origin": [8.42149, 6.0707, 7.97463]}, + "faces": { + "north": {"uv": [3, 5, 3.5, 5.5], "texture": "#0"}, + "east": {"uv": [5, 3, 5.5, 3.5], "texture": "#0"}, + "south": {"uv": [3.5, 5, 4, 5.5], "texture": "#0"}, + "west": {"uv": [5, 3.5, 5.5, 4], "texture": "#0"}, + "up": {"uv": [4.5, 5.5, 4, 5], "texture": "#0"}, + "down": {"uv": [5.5, 4, 5, 4.5], "texture": "#0"} + } + }, + { + "from": [8.02664, 5.54466, 7.855], + "to": [8.33839, 5.73316, 8.0725], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8.47977, 5.78029, 7.97463]}, + "faces": { + "north": {"uv": [4.5, 3, 5, 3.5], "texture": "#0"}, + "east": {"uv": [3.5, 4.5, 4, 5], "texture": "#0"}, + "south": {"uv": [4.5, 3.5, 5, 4], "texture": "#0"}, + "west": {"uv": [4, 4.5, 4.5, 5], "texture": "#0"}, + "up": {"uv": [5, 4.5, 4.5, 4], "texture": "#0"}, + "down": {"uv": [5, 4.5, 4.5, 5], "texture": "#0"} + } + }, + { + "from": [8.20795, 4.87999, 7.855], + "to": [8.5197, 5.43099, 8.0725], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8.47258, 5.33674, 7.97463]}, + "faces": { + "north": {"uv": [4.5, 5, 5, 5.5], "texture": "#0"}, + "east": {"uv": [5, 4.5, 5.5, 5], "texture": "#0"}, + "south": {"uv": [5, 5, 5.5, 5.5], "texture": "#0"}, + "west": {"uv": [0, 5.5, 0.5, 6], "texture": "#0"}, + "up": {"uv": [6, 0.5, 5.5, 0], "texture": "#0"}, + "down": {"uv": [1, 5.5, 0.5, 6], "texture": "#0"} + } + }, + { + "from": [8.40509, 5.34486, 7.855], + "to": [8.49934, 5.60586, 8.0725], + "rotation": {"angle": 45, "axis": "z", "origin": [8.45221, 5.43911, 7.97463]}, + "faces": { + "north": {"uv": [1.5, 5, 2, 5.5], "texture": "#0"}, + "east": {"uv": [5, 1.5, 5.5, 2], "texture": "#0"}, + "south": {"uv": [2, 5, 2.5, 5.5], "texture": "#0"}, + "west": {"uv": [5, 2, 5.5, 2.5], "texture": "#0"}, + "up": {"uv": [3, 5.5, 2.5, 5], "texture": "#0"}, + "down": {"uv": [5.5, 2.5, 5, 3], "texture": "#0"} + } + }, + { + "from": [8.72109, 5.41405, 7.855], + "to": [8.81534, 5.60255, 8.0725], + "rotation": {"angle": 0, "axis": "y", "origin": [8.76821, 5.3198, 7.97463]}, + "faces": { + "north": {"uv": [4.5, 0, 5, 0.5], "texture": "#0"}, + "east": {"uv": [0.5, 4.5, 1, 5], "texture": "#0"}, + "south": {"uv": [4.5, 0.5, 5, 1], "texture": "#0"}, + "west": {"uv": [1, 4.5, 1.5, 5], "texture": "#0"}, + "up": {"uv": [5, 1.5, 4.5, 1], "texture": "#0"}, + "down": {"uv": [2, 4.5, 1.5, 5], "texture": "#0"} + } + }, + { + "from": [7.48623, 5.86952, 7.855], + "to": [8.08798, 6.05802, 8.0725], + "rotation": {"angle": 0, "axis": "y", "origin": [7.53336, 6.03627, 7.97463]}, + "faces": { + "north": {"uv": [5.5, 0.5, 6, 1], "texture": "#0"}, + "east": {"uv": [1, 5.5, 1.5, 6], "texture": "#0"}, + "south": {"uv": [5.5, 1, 6, 1.5], "texture": "#0"}, + "west": {"uv": [1.5, 5.5, 2, 6], "texture": "#0"}, + "up": {"uv": [6, 2, 5.5, 1.5], "texture": "#0"}, + "down": {"uv": [2.5, 5.5, 2, 6], "texture": "#0"} + } + }, + { + "from": [7.84873, 6.01452, 7.855], + "to": [8.08798, 6.20302, 8.0725], + "rotation": {"angle": 0, "axis": "y", "origin": [7.53336, 6.03627, 7.97463]}, + "faces": { + "north": {"uv": [8.5, 2, 9, 2.5], "texture": "#0"}, + "east": {"uv": [2.5, 8.5, 3, 9], "texture": "#0"}, + "south": {"uv": [8.5, 2.5, 9, 3], "texture": "#0"}, + "west": {"uv": [3, 8.5, 3.5, 9], "texture": "#0"}, + "up": {"uv": [9, 3.5, 8.5, 3], "texture": "#0"}, + "down": {"uv": [4, 8.5, 3.5, 9], "texture": "#0"} + } + }, + { + "from": [8.00812, 5.43626, 7.855], + "to": [8.04727, 5.47541, 8.0725], + "rotation": {"angle": 0, "axis": "y", "origin": [8.02769, 5.33785, 7.94707]}, + "faces": { + "north": {"uv": [5.5, 6, 6, 6.5], "texture": "#0"}, + "east": {"uv": [6, 5.5, 6.5, 6], "texture": "#0"}, + "south": {"uv": [6, 6, 6.5, 6.5], "texture": "#0"}, + "west": {"uv": [0, 6.5, 0.5, 7], "texture": "#0"}, + "up": {"uv": [7, 0.5, 6.5, 0], "texture": "#0"}, + "down": {"uv": [1, 6.5, 0.5, 7], "texture": "#0"} + } + }, + { + "from": [7.93562, 5.43626, 7.855], + "to": [8.04727, 5.47541, 8.0725], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8.02769, 5.33785, 7.94707]}, + "faces": { + "north": {"uv": [6.5, 0.5, 7, 1], "texture": "#0"}, + "east": {"uv": [1, 6.5, 1.5, 7], "texture": "#0"}, + "south": {"uv": [6.5, 1, 7, 1.5], "texture": "#0"}, + "west": {"uv": [1.5, 6.5, 2, 7], "texture": "#0"}, + "up": {"uv": [7, 2, 6.5, 1.5], "texture": "#0"}, + "down": {"uv": [2.5, 6.5, 2, 7], "texture": "#0"} + } + }, + { + "from": [7.86312, 5.43626, 7.855], + "to": [8.11977, 5.54791, 8.0725], + "rotation": {"angle": -45, "axis": "z", "origin": [8.02769, 5.33785, 7.94707]}, + "faces": { + "north": {"uv": [6.5, 2, 7, 2.5], "texture": "#0"}, + "east": {"uv": [2.5, 6.5, 3, 7], "texture": "#0"}, + "south": {"uv": [6.5, 2.5, 7, 3], "texture": "#0"}, + "west": {"uv": [3, 6.5, 3.5, 7], "texture": "#0"}, + "up": {"uv": [7, 3.5, 6.5, 3], "texture": "#0"}, + "down": {"uv": [4, 6.5, 3.5, 7], "texture": "#0"} + } + }, + { + "from": [8.1261, 5.31827, 7.855], + "to": [8.16525, 5.35742, 8.0725], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8.02769, 5.33785, 7.94707]}, + "faces": { + "north": {"uv": [7.5, 0, 8, 0.5], "texture": "#0"}, + "east": {"uv": [0.5, 7.5, 1, 8], "texture": "#0"}, + "south": {"uv": [7.5, 0.5, 8, 1], "texture": "#0"}, + "west": {"uv": [1, 7.5, 1.5, 8], "texture": "#0"}, + "up": {"uv": [8, 1.5, 7.5, 1], "texture": "#0"}, + "down": {"uv": [2, 7.5, 1.5, 8], "texture": "#0"} + } + }, + { + "from": [7.93562, 5.43626, 7.855], + "to": [8.04727, 5.54791, 8.0725], + "rotation": {"angle": 45, "axis": "z", "origin": [8.02769, 5.33785, 7.94707]}, + "faces": { + "north": {"uv": [6.5, 5, 7, 5.5], "texture": "#0"}, + "east": {"uv": [5.5, 6.5, 6, 7], "texture": "#0"}, + "south": {"uv": [6.5, 5.5, 7, 6], "texture": "#0"}, + "west": {"uv": [6, 6.5, 6.5, 7], "texture": "#0"}, + "up": {"uv": [7, 6.5, 6.5, 6], "texture": "#0"}, + "down": {"uv": [7, 6.5, 6.5, 7], "texture": "#0"} + } + }, + { + "from": [7.93562, 5.43626, 7.855], + "to": [8.11977, 5.54791, 8.0725], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8.02769, 5.33785, 7.94707]}, + "faces": { + "north": {"uv": [6.5, 3.5, 7, 4], "texture": "#0"}, + "east": {"uv": [4, 6.5, 4.5, 7], "texture": "#0"}, + "south": {"uv": [6.5, 4, 7, 4.5], "texture": "#0"}, + "west": {"uv": [4.5, 6.5, 5, 7], "texture": "#0"}, + "up": {"uv": [7, 5, 6.5, 4.5], "texture": "#0"}, + "down": {"uv": [5.5, 6.5, 5, 7], "texture": "#0"} + } + }, + { + "from": [7.86312, 5.12779, 7.855], + "to": [8.19227, 5.23944, 8.0725], + "rotation": {"angle": 0, "axis": "y", "origin": [8.02769, 5.33785, 7.94707]}, + "faces": { + "north": {"uv": [6, 7, 6.5, 7.5], "texture": "#0"}, + "east": {"uv": [7, 6, 7.5, 6.5], "texture": "#0"}, + "south": {"uv": [6.5, 7, 7, 7.5], "texture": "#0"}, + "west": {"uv": [7, 6.5, 7.5, 7], "texture": "#0"}, + "up": {"uv": [7.5, 7.5, 7, 7], "texture": "#0"}, + "down": {"uv": [0.5, 7.5, 0, 8], "texture": "#0"} + } + }, + { + "from": [8.1261, 5.31827, 7.855], + "to": [8.16525, 5.50242, 8.0725], + "rotation": {"angle": 0, "axis": "y", "origin": [8.02769, 5.33785, 7.94707]}, + "faces": { + "north": {"uv": [7.5, 1.5, 8, 2], "texture": "#0"}, + "east": {"uv": [2, 7.5, 2.5, 8], "texture": "#0"}, + "south": {"uv": [7.5, 2, 8, 2.5], "texture": "#0"}, + "west": {"uv": [2.5, 7.5, 3, 8], "texture": "#0"}, + "up": {"uv": [8, 3, 7.5, 2.5], "texture": "#0"}, + "down": {"uv": [3.5, 7.5, 3, 8], "texture": "#0"} + } + }, + { + "from": [8.1261, 5.24577, 7.855], + "to": [8.23775, 5.50242, 8.0725], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8.02769, 5.33785, 7.94707]}, + "faces": { + "north": {"uv": [7.5, 3, 8, 3.5], "texture": "#0"}, + "east": {"uv": [3.5, 7.5, 4, 8], "texture": "#0"}, + "south": {"uv": [7.5, 3.5, 8, 4], "texture": "#0"}, + "west": {"uv": [4, 7.5, 4.5, 8], "texture": "#0"}, + "up": {"uv": [8, 4.5, 7.5, 4], "texture": "#0"}, + "down": {"uv": [5, 7.5, 4.5, 8], "texture": "#0"} + } + }, + { + "from": [7.89013, 5.24577, 7.855], + "to": [7.92928, 5.35742, 8.0725], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8.02769, 5.33785, 7.94707]}, + "faces": { + "north": {"uv": [0, 8, 0.5, 8.5], "texture": "#0"}, + "east": {"uv": [8, 0, 8.5, 0.5], "texture": "#0"}, + "south": {"uv": [0.5, 8, 1, 8.5], "texture": "#0"}, + "west": {"uv": [8, 0.5, 8.5, 1], "texture": "#0"}, + "up": {"uv": [1.5, 8.5, 1, 8], "texture": "#0"}, + "down": {"uv": [8.5, 1, 8, 1.5], "texture": "#0"} + } + }, + { + "from": [7.89013, 5.31827, 7.855], + "to": [7.92928, 5.35742, 8.0725], + "rotation": {"angle": 0, "axis": "y", "origin": [8.02769, 5.33785, 7.94707]}, + "faces": { + "north": {"uv": [7.5, 6, 8, 6.5], "texture": "#0"}, + "east": {"uv": [6.5, 7.5, 7, 8], "texture": "#0"}, + "south": {"uv": [7.5, 6.5, 8, 7], "texture": "#0"}, + "west": {"uv": [7, 7.5, 7.5, 8], "texture": "#0"}, + "up": {"uv": [8, 7.5, 7.5, 7], "texture": "#0"}, + "down": {"uv": [8, 7.5, 7.5, 8], "texture": "#0"} + } + }, + { + "from": [7.81763, 5.31827, 7.855], + "to": [7.92928, 5.42992, 8.0725], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8.02769, 5.33785, 7.94707]}, + "faces": { + "north": {"uv": [7.5, 4.5, 8, 5], "texture": "#0"}, + "east": {"uv": [5, 7.5, 5.5, 8], "texture": "#0"}, + "south": {"uv": [7.5, 5, 8, 5.5], "texture": "#0"}, + "west": {"uv": [5.5, 7.5, 6, 8], "texture": "#0"}, + "up": {"uv": [8, 6, 7.5, 5.5], "texture": "#0"}, + "down": {"uv": [6.5, 7.5, 6, 8], "texture": "#0"} + } + }, + { + "from": [8.00812, 5.20029, 7.855], + "to": [8.19227, 5.23944, 8.0725], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8.02769, 5.33785, 7.94707]}, + "faces": { + "north": {"uv": [4.5, 7, 5, 7.5], "texture": "#0"}, + "east": {"uv": [7, 4.5, 7.5, 5], "texture": "#0"}, + "south": {"uv": [5, 7, 5.5, 7.5], "texture": "#0"}, + "west": {"uv": [7, 5, 7.5, 5.5], "texture": "#0"}, + "up": {"uv": [6, 7.5, 5.5, 7], "texture": "#0"}, + "down": {"uv": [7.5, 5.5, 7, 6], "texture": "#0"} + } + }, + { + "from": [8.00812, 5.20029, 7.855], + "to": [8.04727, 5.23944, 8.0725], + "rotation": {"angle": 45, "axis": "z", "origin": [8.02769, 5.33785, 7.94707]}, + "faces": { + "north": {"uv": [3, 7, 3.5, 7.5], "texture": "#0"}, + "east": {"uv": [7, 3, 7.5, 3.5], "texture": "#0"}, + "south": {"uv": [3.5, 7, 4, 7.5], "texture": "#0"}, + "west": {"uv": [7, 3.5, 7.5, 4], "texture": "#0"}, + "up": {"uv": [4.5, 7.5, 4, 7], "texture": "#0"}, + "down": {"uv": [7.5, 4, 7, 4.5], "texture": "#0"} + } + }, + { + "from": [8.00812, 5.20029, 7.855], + "to": [8.04727, 5.23944, 8.0725], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8.02769, 5.33785, 7.94707]}, + "faces": { + "north": {"uv": [1.5, 7, 2, 7.5], "texture": "#0"}, + "east": {"uv": [7, 1.5, 7.5, 2], "texture": "#0"}, + "south": {"uv": [2, 7, 2.5, 7.5], "texture": "#0"}, + "west": {"uv": [7, 2, 7.5, 2.5], "texture": "#0"}, + "up": {"uv": [3, 7.5, 2.5, 7], "texture": "#0"}, + "down": {"uv": [7.5, 2.5, 7, 3], "texture": "#0"} + } + }, + { + "from": [7.93562, 5.20029, 7.855], + "to": [8.11977, 5.23944, 8.0725], + "rotation": {"angle": -45, "axis": "z", "origin": [8.02769, 5.33785, 7.94707]}, + "faces": { + "north": {"uv": [0, 7, 0.5, 7.5], "texture": "#0"}, + "east": {"uv": [7, 0, 7.5, 0.5], "texture": "#0"}, + "south": {"uv": [0.5, 7, 1, 7.5], "texture": "#0"}, + "west": {"uv": [7, 0.5, 7.5, 1], "texture": "#0"}, + "up": {"uv": [1.5, 7.5, 1, 7], "texture": "#0"}, + "down": {"uv": [7.5, 1, 7, 1.5], "texture": "#0"} + } + }, + { + "from": [7.51017, 5.28631, 7.855], + "to": [7.89442, 5.47481, 8.0725], + "rotation": {"angle": 0, "axis": "y", "origin": [7.5573, 6.04031, 7.97463]}, + "faces": { + "north": {"uv": [1, 6, 1.5, 6.5], "texture": "#0"}, + "east": {"uv": [6, 1, 6.5, 1.5], "texture": "#0"}, + "south": {"uv": [1.5, 6, 2, 6.5], "texture": "#0"}, + "west": {"uv": [6, 1.5, 6.5, 2], "texture": "#0"}, + "up": {"uv": [2.5, 6.5, 2, 6], "texture": "#0"}, + "down": {"uv": [6.5, 2, 6, 2.5], "texture": "#0"} + } + }, + { + "from": [7.6208, 5.2744, 7.855], + "to": [7.9543, 5.36865, 8.0725], + "rotation": {"angle": -22.5, "axis": "z", "origin": [7.64255, 5.32152, 7.96375]}, + "faces": { + "north": {"uv": [6, 8, 6.5, 8.5], "texture": "#0"}, + "east": {"uv": [8, 6, 8.5, 6.5], "texture": "#0"}, + "south": {"uv": [6.5, 8, 7, 8.5], "texture": "#0"}, + "west": {"uv": [8, 6.5, 8.5, 7], "texture": "#0"}, + "up": {"uv": [7.5, 8.5, 7, 8], "texture": "#0"}, + "down": {"uv": [8.5, 7, 8, 7.5], "texture": "#0"} + } + }, + { + "from": [7.67156, 5.24048, 7.855], + "to": [7.71506, 5.33473, 8.0725], + "rotation": {"angle": -45, "axis": "z", "origin": [7.69331, 5.28761, 7.96375]}, + "faces": { + "north": {"uv": [8.5, 3.5, 9, 4], "texture": "#0"}, + "east": {"uv": [4, 8.5, 4.5, 9], "texture": "#0"}, + "south": {"uv": [8.5, 4, 9, 4.5], "texture": "#0"}, + "west": {"uv": [4.5, 8.5, 5, 9], "texture": "#0"}, + "up": {"uv": [9, 5, 8.5, 4.5], "texture": "#0"}, + "down": {"uv": [5.5, 8.5, 5, 9], "texture": "#0"} + } + }, + { + "from": [7.68011, 5.21509, 7.855], + "to": [7.77436, 5.33109, 8.0725], + "rotation": {"angle": 22.5, "axis": "z", "origin": [7.72723, 5.23684, 7.96375]}, + "faces": { + "north": {"uv": [8.5, 5, 9, 5.5], "texture": "#0"}, + "east": {"uv": [5.5, 8.5, 6, 9], "texture": "#0"}, + "south": {"uv": [8.5, 5.5, 9, 6], "texture": "#0"}, + "west": {"uv": [6, 8.5, 6.5, 9], "texture": "#0"}, + "up": {"uv": [9, 6.5, 8.5, 6], "texture": "#0"}, + "down": {"uv": [7, 8.5, 6.5, 9], "texture": "#0"} + } + }, + { + "from": [7.69202, 4.93771, 7.855], + "to": [7.93127, 5.27121, 8.0725], + "rotation": {"angle": 0, "axis": "y", "origin": [7.73914, 5.17696, 7.96375]}, + "faces": { + "north": {"uv": [8.5, 6.5, 9, 7], "texture": "#0"}, + "east": {"uv": [7, 8.5, 7.5, 9], "texture": "#0"}, + "south": {"uv": [8.5, 7, 9, 7.5], "texture": "#0"}, + "west": {"uv": [7.5, 8.5, 8, 9], "texture": "#0"}, + "up": {"uv": [9, 8, 8.5, 7.5], "texture": "#0"}, + "down": {"uv": [8.5, 8.5, 8, 9], "texture": "#0"} + } + }, + { + "from": [7.68011, 5.09534, 7.855], + "to": [7.77436, 5.13884, 8.0725], + "rotation": {"angle": -22.5, "axis": "z", "origin": [7.72723, 5.11709, 7.96375]}, + "faces": { + "north": {"uv": [8.5, 8, 9, 8.5], "texture": "#0"}, + "east": {"uv": [8.5, 8.5, 9, 9], "texture": "#0"}, + "south": {"uv": [0, 9, 0.5, 9.5], "texture": "#0"}, + "west": {"uv": [9, 0, 9.5, 0.5], "texture": "#0"}, + "up": {"uv": [1, 9.5, 0.5, 9], "texture": "#0"}, + "down": {"uv": [9.5, 0.5, 9, 1], "texture": "#0"} + } + }, + { + "from": [7.08396, 3.87447, 7.855], + "to": [7.19996, 3.96872, 8.0725], + "rotation": {"angle": 0, "axis": "y", "origin": [7.1822, 3.96568, 7.96375]}, + "faces": { + "north": {"uv": [10.5, 3, 11, 3.5], "texture": "#0"}, + "east": {"uv": [3.5, 10.5, 4, 11], "texture": "#0"}, + "south": {"uv": [10.5, 3.5, 11, 4], "texture": "#0"}, + "west": {"uv": [4, 10.5, 4.5, 11], "texture": "#0"}, + "up": {"uv": [11, 4.5, 10.5, 4], "texture": "#0"}, + "down": {"uv": [5, 10.5, 4.5, 11], "texture": "#0"} + } + }, + { + "from": [7.01146, 3.79369, 7.855], + "to": [7.15646, 3.93869, 8.0725], + "rotation": {"angle": -45, "axis": "z", "origin": [7.08396, 3.86619, 7.96375]}, + "faces": { + "north": {"uv": [10.5, 4.5, 11, 5], "texture": "#0"}, + "east": {"uv": [5, 10.5, 5.5, 11], "texture": "#0"}, + "south": {"uv": [10.5, 5, 11, 5.5], "texture": "#0"}, + "west": {"uv": [5.5, 10.5, 6, 11], "texture": "#0"}, + "up": {"uv": [11, 6, 10.5, 5.5], "texture": "#0"}, + "down": {"uv": [6.5, 10.5, 6, 11], "texture": "#0"} + } + }, + { + "from": [7.13279, 3.89519, 7.855], + "to": [7.17629, 3.98944, 8.0725], + "rotation": {"angle": 22.5, "axis": "z", "origin": [7.1822, 3.96568, 7.96375]}, + "faces": { + "north": {"uv": [10.5, 1.5, 11, 2], "texture": "#0"}, + "east": {"uv": [2, 10.5, 2.5, 11], "texture": "#0"}, + "south": {"uv": [10.5, 2, 11, 2.5], "texture": "#0"}, + "west": {"uv": [2.5, 10.5, 3, 11], "texture": "#0"}, + "up": {"uv": [11, 3, 10.5, 2.5], "texture": "#0"}, + "down": {"uv": [3.5, 10.5, 3, 11], "texture": "#0"} + } + }, + { + "from": [7.11333, 3.89564, 7.855], + "to": [7.22933, 3.98989, 8.0725], + "rotation": {"angle": 45, "axis": "z", "origin": [7.1822, 3.96568, 7.96375]}, + "faces": { + "north": {"uv": [10.5, 0, 11, 0.5], "texture": "#0"}, + "east": {"uv": [0.5, 10.5, 1, 11], "texture": "#0"}, + "south": {"uv": [10.5, 0.5, 11, 1], "texture": "#0"}, + "west": {"uv": [1, 10.5, 1.5, 11], "texture": "#0"}, + "up": {"uv": [11, 1.5, 10.5, 1], "texture": "#0"}, + "down": {"uv": [2, 10.5, 1.5, 11], "texture": "#0"} + } + }, + { + "from": [7.17787, 3.87349, 7.855], + "to": [7.34462, 4.13449, 8.0725], + "rotation": {"angle": -22.5, "axis": "z", "origin": [7.1822, 3.96568, 7.96375]}, + "faces": { + "north": {"uv": [9, 10, 9.5, 10.5], "texture": "#0"}, + "east": {"uv": [10, 9, 10.5, 9.5], "texture": "#0"}, + "south": {"uv": [9.5, 10, 10, 10.5], "texture": "#0"}, + "west": {"uv": [10, 9.5, 10.5, 10], "texture": "#0"}, + "up": {"uv": [10.5, 10.5, 10, 10], "texture": "#0"}, + "down": {"uv": [0.5, 10.5, 0, 11], "texture": "#0"} + } + }, + { + "from": [7.27404, 3.9254, 7.855], + "to": [7.36829, 3.9689, 8.0725], + "rotation": {"angle": -22.5, "axis": "z", "origin": [7.27837, 3.87259, 7.96375]}, + "faces": { + "north": {"uv": [10.5, 9, 11, 9.5], "texture": "#0"}, + "east": {"uv": [9.5, 10.5, 10, 11], "texture": "#0"}, + "south": {"uv": [10.5, 9.5, 11, 10], "texture": "#0"}, + "west": {"uv": [10, 10.5, 10.5, 11], "texture": "#0"}, + "up": {"uv": [11, 10.5, 10.5, 10], "texture": "#0"}, + "down": {"uv": [11, 10.5, 10.5, 11], "texture": "#0"} + } + }, + { + "from": [7.25117, 3.78186, 7.855], + "to": [7.36717, 3.87611, 8.0725], + "rotation": {"angle": 45, "axis": "z", "origin": [7.24753, 3.8519, 7.96375]}, + "faces": { + "north": {"uv": [10.5, 7.5, 11, 8], "texture": "#0"}, + "east": {"uv": [8, 10.5, 8.5, 11], "texture": "#0"}, + "south": {"uv": [10.5, 8, 11, 8.5], "texture": "#0"}, + "west": {"uv": [8.5, 10.5, 9, 11], "texture": "#0"}, + "up": {"uv": [11, 9, 10.5, 8.5], "texture": "#0"}, + "down": {"uv": [9.5, 10.5, 9, 11], "texture": "#0"} + } + }, + { + "from": [7.1637, 3.80495, 7.855], + "to": [7.27158, 3.9717, 8.0725], + "rotation": {"angle": 22.5, "axis": "z", "origin": [7.28561, 3.87544, 7.96375]}, + "faces": { + "north": {"uv": [10.5, 6, 11, 6.5], "texture": "#0"}, + "east": {"uv": [6.5, 10.5, 7, 11], "texture": "#0"}, + "south": {"uv": [10.5, 6.5, 11, 7], "texture": "#0"}, + "west": {"uv": [7, 10.5, 7.5, 11], "texture": "#0"}, + "up": {"uv": [11, 7.5, 10.5, 7], "texture": "#0"}, + "down": {"uv": [8, 10.5, 7.5, 11], "texture": "#0"} + } + }, + { + "from": [7.08396, 3.76366, 7.855], + "to": [7.19996, 3.85791, 8.0725], + "rotation": {"angle": 0, "axis": "y", "origin": [7.14196, 3.81078, 7.96375]}, + "faces": { + "north": {"uv": [0, 11, 0.5, 11.5], "texture": "#0"}, + "east": {"uv": [11, 0, 11.5, 0.5], "texture": "#0"}, + "south": {"uv": [0.5, 11, 1, 11.5], "texture": "#0"}, + "west": {"uv": [11, 0.5, 11.5, 1], "texture": "#0"}, + "up": {"uv": [1.5, 11.5, 1, 11], "texture": "#0"}, + "down": {"uv": [11.5, 1, 11, 1.5], "texture": "#0"} + } + }, + { + "from": [8.35332, 5.14084, 7.855], + "to": [8.44757, 5.18434, 8.0725], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8.40044, 5.16259, 7.96375]}, + "faces": { + "north": {"uv": [7, 9, 7.5, 9.5], "texture": "#0"}, + "east": {"uv": [9, 7, 9.5, 7.5], "texture": "#0"}, + "south": {"uv": [7.5, 9, 8, 9.5], "texture": "#0"}, + "west": {"uv": [9, 7.5, 9.5, 8], "texture": "#0"}, + "up": {"uv": [8.5, 9.5, 8, 9], "texture": "#0"}, + "down": {"uv": [9.5, 8, 9, 8.5], "texture": "#0"} + } + }, + { + "from": [8.3414, 5.08096, 7.855], + "to": [8.43565, 5.12446, 8.0725], + "rotation": {"angle": 0, "axis": "y", "origin": [8.38853, 5.10271, 7.96375]}, + "faces": { + "north": {"uv": [5.5, 9, 6, 9.5], "texture": "#0"}, + "east": {"uv": [9, 5.5, 9.5, 6], "texture": "#0"}, + "south": {"uv": [6, 9, 6.5, 9.5], "texture": "#0"}, + "west": {"uv": [9, 6, 9.5, 6.5], "texture": "#0"}, + "up": {"uv": [7, 9.5, 6.5, 9], "texture": "#0"}, + "down": {"uv": [9.5, 6.5, 9, 7], "texture": "#0"} + } + }, + { + "from": [8.35332, 4.94858, 7.855], + "to": [8.44757, 5.13708, 8.0725], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8.40044, 5.04283, 7.96375]}, + "faces": { + "north": {"uv": [4, 9, 4.5, 9.5], "texture": "#0"}, + "east": {"uv": [9, 4, 9.5, 4.5], "texture": "#0"}, + "south": {"uv": [4.5, 9, 5, 9.5], "texture": "#0"}, + "west": {"uv": [9, 4.5, 9.5, 5], "texture": "#0"}, + "up": {"uv": [5.5, 9.5, 5, 9], "texture": "#0"}, + "down": {"uv": [9.5, 5, 9, 5.5], "texture": "#0"} + } + }, + { + "from": [8.38723, 4.97032, 7.855], + "to": [8.48148, 5.01382, 8.0725], + "rotation": {"angle": 45, "axis": "z", "origin": [8.43436, 4.99207, 7.96375]}, + "faces": { + "north": {"uv": [8.5, 9, 9, 9.5], "texture": "#0"}, + "east": {"uv": [9, 8.5, 9.5, 9], "texture": "#0"}, + "south": {"uv": [9, 9, 9.5, 9.5], "texture": "#0"}, + "west": {"uv": [0, 9.5, 0.5, 10], "texture": "#0"}, + "up": {"uv": [10, 0.5, 9.5, 0], "texture": "#0"}, + "down": {"uv": [1, 9.5, 0.5, 10], "texture": "#0"} + } + }, + { + "from": [8.42875, 5.46592, 7.855], + "to": [8.68975, 5.56017, 8.0725], + "rotation": {"angle": -22.5, "axis": "z", "origin": [7.1455, 5.51304, 7.96375]}, + "faces": { + "north": {"uv": [8.5, 0.5, 9, 1], "texture": "#0"}, + "east": {"uv": [1, 8.5, 1.5, 9], "texture": "#0"}, + "south": {"uv": [8.5, 1, 9, 1.5], "texture": "#0"}, + "west": {"uv": [1.5, 8.5, 2, 9], "texture": "#0"}, + "up": {"uv": [9, 2, 8.5, 1.5], "texture": "#0"}, + "down": {"uv": [2.5, 8.5, 2, 9], "texture": "#0"} + } + }, + { + "from": [7.57523, 4.87137, 7.855], + "to": [8.92373, 4.96562, 8.0725], + "rotation": {"angle": 0, "axis": "y", "origin": [8.64823, 4.9185, 7.96375]}, + "faces": { + "north": {"uv": [9.5, 0.5, 10, 1], "texture": "#0"}, + "east": {"uv": [1, 9.5, 1.5, 10], "texture": "#0"}, + "south": {"uv": [9.5, 1, 10, 1.5], "texture": "#0"}, + "west": {"uv": [1.5, 9.5, 2, 10], "texture": "#0"}, + "up": {"uv": [10, 2, 9.5, 1.5], "texture": "#0"}, + "down": {"uv": [2.5, 9.5, 2, 10], "texture": "#0"} + } + }, + { + "from": [8.1107, 4.74482, 7.855], + "to": [8.7342, 4.83907, 8.0725], + "rotation": {"angle": 0, "axis": "y", "origin": [8.4587, 4.79194, 7.96375]}, + "faces": { + "north": {"uv": [9.5, 5, 10, 5.5], "texture": "#0"}, + "east": {"uv": [5.5, 9.5, 6, 10], "texture": "#0"}, + "south": {"uv": [9.5, 5.5, 10, 6], "texture": "#0"}, + "west": {"uv": [6, 9.5, 6.5, 10], "texture": "#0"}, + "up": {"uv": [10, 6.5, 9.5, 6], "texture": "#0"}, + "down": {"uv": [7, 9.5, 6.5, 10], "texture": "#0"} + } + }, + { + "from": [7.4582, 4.74482, 7.855], + "to": [7.9367, 4.83907, 8.0725], + "rotation": {"angle": 0, "axis": "y", "origin": [8.4587, 4.79194, 7.96375]}, + "faces": { + "north": {"uv": [9.5, 6.5, 10, 7], "texture": "#0"}, + "east": {"uv": [7, 9.5, 7.5, 10], "texture": "#0"}, + "south": {"uv": [9.5, 7, 10, 7.5], "texture": "#0"}, + "west": {"uv": [7.5, 9.5, 8, 10], "texture": "#0"}, + "up": {"uv": [10, 8, 9.5, 7.5], "texture": "#0"}, + "down": {"uv": [8.5, 9.5, 8, 10], "texture": "#0"} + } + }, + { + "from": [7.5307, 4.81732, 7.855], + "to": [8.8067, 4.91157, 8.0725], + "rotation": {"angle": 0, "axis": "y", "origin": [8.4587, 4.79194, 7.96375]}, + "faces": { + "north": {"uv": [11.5, 3.5, 12, 4], "texture": "#0"}, + "east": {"uv": [4, 11.5, 4.5, 12], "texture": "#0"}, + "south": {"uv": [11.5, 4, 12, 4.5], "texture": "#0"}, + "west": {"uv": [4.5, 11.5, 5, 12], "texture": "#0"}, + "up": {"uv": [12, 5, 11.5, 4.5], "texture": "#0"}, + "down": {"uv": [5.5, 11.5, 5, 12], "texture": "#0"} + } + }, + { + "from": [7.8932, 4.67232, 7.855], + "to": [8.1832, 5.17982, 8.0725], + "rotation": {"angle": 0, "axis": "y", "origin": [8.4587, 4.79194, 7.96375]}, + "faces": { + "north": {"uv": [9.5, 8, 10, 8.5], "texture": "#0"}, + "east": {"uv": [8.5, 9.5, 9, 10], "texture": "#0"}, + "south": {"uv": [9.5, 8.5, 10, 9], "texture": "#0"}, + "west": {"uv": [9, 9.5, 9.5, 10], "texture": "#0"}, + "up": {"uv": [10, 9.5, 9.5, 9], "texture": "#0"}, + "down": {"uv": [10, 9.5, 9.5, 10], "texture": "#0"} + } + }, + { + "from": [7.8932, 2.93232, 7.855], + "to": [8.1832, 3.00482, 8.0725], + "rotation": {"angle": 0, "axis": "y", "origin": [8.4587, 4.79194, 7.96375]}, + "faces": { + "north": {"uv": [1.5, 11, 2, 11.5], "texture": "#0"}, + "east": {"uv": [11, 1.5, 11.5, 2], "texture": "#0"}, + "south": {"uv": [2, 11, 2.5, 11.5], "texture": "#0"}, + "west": {"uv": [11, 2, 11.5, 2.5], "texture": "#0"}, + "up": {"uv": [3, 11.5, 2.5, 11], "texture": "#0"}, + "down": {"uv": [11.5, 2.5, 11, 3], "texture": "#0"} + } + }, + { + "from": [7.8932, 3.00482, 7.855], + "to": [8.1832, 4.67232, 8.0725], + "rotation": {"angle": 0, "axis": "y", "origin": [8.4587, 4.79194, 7.96375]}, + "faces": { + "north": {"uv": [9, 11, 9.5, 11.5], "texture": "#0"}, + "east": {"uv": [11, 9, 11.5, 9.5], "texture": "#0"}, + "south": {"uv": [9.5, 11, 10, 11.5], "texture": "#0"}, + "west": {"uv": [11, 9.5, 11.5, 10], "texture": "#0"}, + "up": {"uv": [10.5, 11.5, 10, 11], "texture": "#0"}, + "down": {"uv": [11.5, 10, 11, 10.5], "texture": "#0"} + } + }, + { + "from": [7.97643, 2.73137, 7.855], + "to": [8.04893, 2.94887, 8.0725], + "rotation": {"angle": 0, "axis": "y", "origin": [8.46943, 4.8085, 7.96375]}, + "faces": { + "north": {"uv": [6, 11, 6.5, 11.5], "texture": "#0"}, + "east": {"uv": [11, 6, 11.5, 6.5], "texture": "#0"}, + "south": {"uv": [6.5, 11, 7, 11.5], "texture": "#0"}, + "west": {"uv": [11, 6.5, 11.5, 7], "texture": "#0"}, + "up": {"uv": [7.5, 11.5, 7, 11], "texture": "#0"}, + "down": {"uv": [11.5, 7, 11, 7.5], "texture": "#0"} + } + }, + { + "from": [8.02747, 2.73137, 7.855], + "to": [8.09997, 2.94887, 8.0725], + "rotation": {"angle": 0, "axis": "y", "origin": [8.52047, 4.8085, 7.96375]}, + "faces": { + "north": {"uv": [7.5, 11, 8, 11.5], "texture": "#0"}, + "east": {"uv": [11, 7.5, 11.5, 8], "texture": "#0"}, + "south": {"uv": [8, 11, 8.5, 11.5], "texture": "#0"}, + "west": {"uv": [11, 8, 11.5, 8.5], "texture": "#0"}, + "up": {"uv": [9, 11.5, 8.5, 11], "texture": "#0"}, + "down": {"uv": [11.5, 8.5, 11, 9], "texture": "#0"} + } + }, + { + "from": [7.93206, 2.73697, 7.855], + "to": [8.07706, 2.95447, 8.0725], + "rotation": {"angle": 22.5, "axis": "z", "origin": [7.96831, 2.84572, 7.96375]}, + "faces": { + "north": {"uv": [3, 11, 3.5, 11.5], "texture": "#0"}, + "east": {"uv": [11, 3, 11.5, 3.5], "texture": "#0"}, + "south": {"uv": [3.5, 11, 4, 11.5], "texture": "#0"}, + "west": {"uv": [11, 3.5, 11.5, 4], "texture": "#0"}, + "up": {"uv": [4.5, 11.5, 4, 11], "texture": "#0"}, + "down": {"uv": [11.5, 4, 11, 4.5], "texture": "#0"} + } + }, + { + "from": [7.99934, 2.73697, 7.855], + "to": [8.14434, 2.95447, 8.0725], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8.10809, 2.84572, 7.96375]}, + "faces": { + "north": {"uv": [4.5, 11, 5, 11.5], "texture": "#0"}, + "east": {"uv": [11, 4.5, 11.5, 5], "texture": "#0"}, + "south": {"uv": [5, 11, 5.5, 11.5], "texture": "#0"}, + "west": {"uv": [11, 5, 11.5, 5.5], "texture": "#0"}, + "up": {"uv": [6, 11.5, 5.5, 11], "texture": "#0"}, + "down": {"uv": [11.5, 5.5, 11, 6], "texture": "#0"} + } + }, + { + "from": [8.88989, 4.76727, 7.855], + "to": [9.00589, 4.86152, 8.0725], + "rotation": {"angle": 45, "axis": "z", "origin": [8.83914, 4.81439, 7.96375]}, + "faces": { + "north": {"uv": [9.5, 2, 10, 2.5], "texture": "#0"}, + "east": {"uv": [2.5, 9.5, 3, 10], "texture": "#0"}, + "south": {"uv": [9.5, 2.5, 10, 3], "texture": "#0"}, + "west": {"uv": [3, 9.5, 3.5, 10], "texture": "#0"}, + "up": {"uv": [10, 3.5, 9.5, 3], "texture": "#0"}, + "down": {"uv": [4, 9.5, 3.5, 10], "texture": "#0"} + } + }, + { + "from": [8.70623, 4.79117, 7.855], + "to": [8.89473, 4.88542, 8.0725], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8.83673, 4.8383, 7.96375]}, + "faces": { + "north": {"uv": [9.5, 3.5, 10, 4], "texture": "#0"}, + "east": {"uv": [4, 9.5, 4.5, 10], "texture": "#0"}, + "south": {"uv": [9.5, 4, 10, 4.5], "texture": "#0"}, + "west": {"uv": [4.5, 9.5, 5, 10], "texture": "#0"}, + "up": {"uv": [10, 5, 9.5, 4.5], "texture": "#0"}, + "down": {"uv": [5.5, 9.5, 5, 10], "texture": "#0"} + } + }, + { + "from": [7.64727, 5.78704, 7.855], + "to": [7.74152, 6.06979, 8.0725], + "rotation": {"angle": 0, "axis": "y", "origin": [8.85439, 5.97554, 7.97463]}, + "faces": { + "north": {"uv": [5.5, 3.5, 6, 4], "texture": "#0"}, + "east": {"uv": [4, 5.5, 4.5, 6], "texture": "#0"}, + "south": {"uv": [5.5, 4, 6, 4.5], "texture": "#0"}, + "west": {"uv": [4.5, 5.5, 5, 6], "texture": "#0"}, + "up": {"uv": [6, 5, 5.5, 4.5], "texture": "#0"}, + "down": {"uv": [5.5, 5.5, 5, 6], "texture": "#0"} + } + }, + { + "from": [7.59675, 5.43884, 7.855], + "to": [7.981, 5.81584, 8.0725], + "rotation": {"angle": -22.5, "axis": "z", "origin": [7.64388, 5.67446, 7.97463]}, + "faces": { + "north": {"uv": [5.5, 5, 6, 5.5], "texture": "#0"}, + "east": {"uv": [5.5, 5.5, 6, 6], "texture": "#0"}, + "south": {"uv": [0, 6, 0.5, 6.5], "texture": "#0"}, + "west": {"uv": [6, 0, 6.5, 0.5], "texture": "#0"}, + "up": {"uv": [1, 6.5, 0.5, 6], "texture": "#0"}, + "down": {"uv": [6.5, 0.5, 6, 1], "texture": "#0"} + } + }, + { + "from": [7.50101, 4.73217, 7.855], + "to": [7.81276, 5.25417, 8.0725], + "rotation": {"angle": -45, "axis": "z", "origin": [7.54813, 4.92067, 7.96375]}, + "faces": { + "north": {"uv": [7.5, 8, 8, 8.5], "texture": "#0"}, + "east": {"uv": [8, 7.5, 8.5, 8], "texture": "#0"}, + "south": {"uv": [8, 8, 8.5, 8.5], "texture": "#0"}, + "west": {"uv": [0, 8.5, 0.5, 9], "texture": "#0"}, + "up": {"uv": [9, 0.5, 8.5, 0], "texture": "#0"}, + "down": {"uv": [1, 8.5, 0.5, 9], "texture": "#0"} + } + }, + { + "from": [7.70809, 4.72819, 7.855], + "to": [7.85309, 4.80069, 8.0725], + "rotation": {"angle": 22.5, "axis": "z", "origin": [7.81684, 4.76444, 8.03625]}, + "faces": { + "north": {"uv": [1, 9, 1.5, 9.5], "texture": "#0"}, + "east": {"uv": [9, 1, 9.5, 1.5], "texture": "#0"}, + "south": {"uv": [1.5, 9, 2, 9.5], "texture": "#0"}, + "west": {"uv": [9, 1.5, 9.5, 2], "texture": "#0"}, + "up": {"uv": [2.5, 9.5, 2, 9], "texture": "#0"}, + "down": {"uv": [9.5, 2, 9, 2.5], "texture": "#0"} + } + }, + { + "from": [7.60436, 4.64316, 7.855], + "to": [7.74936, 4.71566, 8.0725], + "rotation": {"angle": 45, "axis": "z", "origin": [7.67686, 4.67941, 8.03625]}, + "faces": { + "north": {"uv": [0, 10, 0.5, 10.5], "texture": "#0"}, + "east": {"uv": [10, 0, 10.5, 0.5], "texture": "#0"}, + "south": {"uv": [0.5, 10, 1, 10.5], "texture": "#0"}, + "west": {"uv": [10, 0.5, 10.5, 1], "texture": "#0"}, + "up": {"uv": [1.5, 10.5, 1, 10], "texture": "#0"}, + "down": {"uv": [10.5, 1, 10, 1.5], "texture": "#0"} + } + }, + { + "from": [7.24456, 4.43019, 7.855], + "to": [7.60706, 4.57519, 8.0725], + "rotation": {"angle": 45, "axis": "z", "origin": [7.53456, 4.46644, 8.03625]}, + "faces": { + "north": {"uv": [3, 10, 3.5, 10.5], "texture": "#0"}, + "east": {"uv": [10, 3, 10.5, 3.5], "texture": "#0"}, + "south": {"uv": [3.5, 10, 4, 10.5], "texture": "#0"}, + "west": {"uv": [10, 3.5, 10.5, 4], "texture": "#0"}, + "up": {"uv": [4.5, 10.5, 4, 10], "texture": "#0"}, + "down": {"uv": [10.5, 4, 10, 4.5], "texture": "#0"} + } + }, + { + "from": [7.46206, 4.43019, 7.855], + "to": [7.60706, 4.64769, 8.0725], + "rotation": {"angle": 45, "axis": "z", "origin": [7.53456, 4.46644, 8.03625]}, + "faces": { + "north": {"uv": [11.5, 5, 12, 5.5], "texture": "#0"}, + "east": {"uv": [5.5, 11.5, 6, 12], "texture": "#0"}, + "south": {"uv": [11.5, 5.5, 12, 6], "texture": "#0"}, + "west": {"uv": [6, 11.5, 6.5, 12], "texture": "#0"}, + "up": {"uv": [12, 6.5, 11.5, 6], "texture": "#0"}, + "down": {"uv": [7, 11.5, 6.5, 12], "texture": "#0"} + } + }, + { + "from": [7.42446, 4.50043, 7.855], + "to": [7.64196, 4.64543, 8.0725], + "rotation": {"angle": -22.5, "axis": "z", "origin": [7.60571, 4.57293, 8.03625]}, + "faces": { + "north": {"uv": [1.5, 10, 2, 10.5], "texture": "#0"}, + "east": {"uv": [10, 1.5, 10.5, 2], "texture": "#0"}, + "south": {"uv": [2, 10, 2.5, 10.5], "texture": "#0"}, + "west": {"uv": [10, 2, 10.5, 2.5], "texture": "#0"}, + "up": {"uv": [3, 10.5, 2.5, 10], "texture": "#0"}, + "down": {"uv": [10.5, 2.5, 10, 3], "texture": "#0"} + } + }, + { + "from": [7.61158, 5.83863, 7.855], + "to": [7.70583, 6.02713, 8.0725], + "rotation": {"angle": -45, "axis": "z", "origin": [7.5862, 6.00538, 7.97463]}, + "faces": { + "north": {"uv": [5.5, 2, 6, 2.5], "texture": "#0"}, + "east": {"uv": [2.5, 5.5, 3, 6], "texture": "#0"}, + "south": {"uv": [5.5, 2.5, 6, 3], "texture": "#0"}, + "west": {"uv": [3, 5.5, 3.5, 6], "texture": "#0"}, + "up": {"uv": [6, 3.5, 5.5, 3], "texture": "#0"}, + "down": {"uv": [4, 5.5, 3.5, 6], "texture": "#0"} + } + }, + { + "from": [8.13599, 11.69198, 7.9275], + "to": [8.28099, 13.14198, 8], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8.20849, 12.41698, 7.66702]}, + "faces": { + "north": {"uv": [3.5, 1.5, 4, 2], "texture": "#0"}, + "east": {"uv": [2, 3.5, 2.5, 4], "texture": "#0"}, + "south": {"uv": [3.5, 2, 4, 2.5], "texture": "#0"}, + "west": {"uv": [2.5, 3.5, 3, 4], "texture": "#0"}, + "up": {"uv": [4, 3, 3.5, 2.5], "texture": "#0"}, + "down": {"uv": [3.5, 3.5, 3, 4], "texture": "#0"} + } + }, + { + "from": [8.03838, 11.7266, 7.9275], + "to": [8.18338, 13.1882, 8], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8.11088, 12.4516, 7.66702]}, + "faces": { + "north": {"uv": [0.5, 3, 1, 3.5], "texture": "#0"}, + "east": {"uv": [3, 0.5, 3.5, 1], "texture": "#0"}, + "south": {"uv": [1, 3, 1.5, 3.5], "texture": "#0"}, + "west": {"uv": [3, 1, 3.5, 1.5], "texture": "#0"}, + "up": {"uv": [2, 3.5, 1.5, 3], "texture": "#0"}, + "down": {"uv": [3.5, 1.5, 3, 2], "texture": "#0"} + } + }, + { + "from": [8.28993, 13.06547, 7.9275], + "to": [8.45117, 13.22671, 8], + "rotation": {"angle": 45, "axis": "z", "origin": [8.38853, 13.23657, 7.66702]}, + "faces": { + "north": {"uv": [2, 3, 2.5, 3.5], "texture": "#0"}, + "east": {"uv": [3, 2, 3.5, 2.5], "texture": "#0"}, + "south": {"uv": [2.5, 3, 3, 3.5], "texture": "#0"}, + "west": {"uv": [3, 2.5, 3.5, 3], "texture": "#0"}, + "up": {"uv": [3.5, 3.5, 3, 3], "texture": "#0"}, + "down": {"uv": [0.5, 3.5, 0, 4], "texture": "#0"} + } + }, + { + "from": [8.30246, 11.94886, 7.9275], + "to": [8.44746, 12.52886, 8], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8.37496, 12.23886, 7.66702]}, + "faces": { + "north": {"uv": [2, 1.5, 2.5, 2], "texture": "#0"}, + "east": {"uv": [2, 2, 2.5, 2.5], "texture": "#0"}, + "south": {"uv": [2.5, 0, 3, 0.5], "texture": "#0"}, + "west": {"uv": [2.5, 0.5, 3, 1], "texture": "#0"}, + "up": {"uv": [3, 1.5, 2.5, 1], "texture": "#0"}, + "down": {"uv": [2, 2.5, 1.5, 3], "texture": "#0"} + } + }, + { + "from": [8.40881, 12.50738, 7.9275], + "to": [8.55381, 13.15988, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [7.10381, 11.99988, 7.66702]}, + "faces": { + "north": {"uv": [2.5, 1.5, 3, 2], "texture": "#0"}, + "east": {"uv": [2, 2.5, 2.5, 3], "texture": "#0"}, + "south": {"uv": [2.5, 2, 3, 2.5], "texture": "#0"}, + "west": {"uv": [2.5, 2.5, 3, 3], "texture": "#0"}, + "up": {"uv": [0.5, 3.5, 0, 3], "texture": "#0"}, + "down": {"uv": [3.5, 0, 3, 0.5], "texture": "#0"} + } + }, + { + "from": [8.26381, 12.28988, 7.9275], + "to": [8.40881, 12.94238, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [7.10381, 11.99988, 7.66702]}, + "faces": { + "north": {"uv": [11.5, 8, 12, 8.5], "texture": "#0"}, + "east": {"uv": [8.5, 11.5, 9, 12], "texture": "#0"}, + "south": {"uv": [11.5, 8.5, 12, 9], "texture": "#0"}, + "west": {"uv": [9, 11.5, 9.5, 12], "texture": "#0"}, + "up": {"uv": [12, 9.5, 11.5, 9], "texture": "#0"}, + "down": {"uv": [10, 11.5, 9.5, 12], "texture": "#0"} + } + }, + { + "from": [8.40792, 12.47904, 7.9275], + "to": [8.55292, 13.13154, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [7.46542, 11.97154, 7.66702]}, + "faces": { + "north": {"uv": [3.5, 0, 4, 0.5], "texture": "#0"}, + "east": {"uv": [0.5, 3.5, 1, 4], "texture": "#0"}, + "south": {"uv": [3.5, 0.5, 4, 1], "texture": "#0"}, + "west": {"uv": [1, 3.5, 1.5, 4], "texture": "#0"}, + "up": {"uv": [4, 1.5, 3.5, 1], "texture": "#0"}, + "down": {"uv": [2, 3.5, 1.5, 4], "texture": "#0"} + } + }, + { + "from": [7.36406, 4.37043, 7.855], + "to": [7.53081, 4.80543, 8.0725], + "rotation": {"angle": -22.5, "axis": "z", "origin": [7.41119, 4.76918, 7.96375]}, + "faces": { + "north": {"uv": [4.5, 10, 5, 10.5], "texture": "#0"}, + "east": {"uv": [10, 4.5, 10.5, 5], "texture": "#0"}, + "south": {"uv": [5, 10, 5.5, 10.5], "texture": "#0"}, + "west": {"uv": [10, 5, 10.5, 5.5], "texture": "#0"}, + "up": {"uv": [6, 10.5, 5.5, 10], "texture": "#0"}, + "down": {"uv": [10.5, 5.5, 10, 6], "texture": "#0"} + } + }, + { + "from": [7.21505, 4.05631, 7.855], + "to": [7.3093, 4.41881, 8.0725], + "rotation": {"angle": 0, "axis": "y", "origin": [7.26218, 4.20131, 7.96375]}, + "faces": { + "north": {"uv": [6, 10, 6.5, 10.5], "texture": "#0"}, + "east": {"uv": [10, 6, 10.5, 6.5], "texture": "#0"}, + "south": {"uv": [6.5, 10, 7, 10.5], "texture": "#0"}, + "west": {"uv": [10, 6.5, 10.5, 7], "texture": "#0"}, + "up": {"uv": [7.5, 10.5, 7, 10], "texture": "#0"}, + "down": {"uv": [10.5, 7, 10, 7.5], "texture": "#0"} + } + }, + { + "from": [7.30405, 3.92716, 7.855], + "to": [7.3983, 4.43466, 8.0725], + "rotation": {"angle": 0, "axis": "y", "origin": [7.35117, 4.07216, 7.96375]}, + "faces": { + "north": {"uv": [7.5, 10, 8, 10.5], "texture": "#0"}, + "east": {"uv": [10, 7.5, 10.5, 8], "texture": "#0"}, + "south": {"uv": [8, 10, 8.5, 10.5], "texture": "#0"}, + "west": {"uv": [10, 8, 10.5, 8.5], "texture": "#0"}, + "up": {"uv": [9, 10.5, 8.5, 10], "texture": "#0"}, + "down": {"uv": [10.5, 8.5, 10, 9], "texture": "#0"} + } + }, + { + "from": [8.20145, 11.80953, 7.9275], + "to": [8.34645, 12.67953, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [7.47645, 12.38953, 7.66702]}, + "faces": { + "north": {"uv": [3.5, 3, 4, 3.5], "texture": "#0"}, + "east": {"uv": [3.5, 3.5, 4, 4], "texture": "#0"}, + "south": {"uv": [0, 4, 0.5, 4.5], "texture": "#0"}, + "west": {"uv": [4, 0, 4.5, 0.5], "texture": "#0"}, + "up": {"uv": [1, 4.5, 0.5, 4], "texture": "#0"}, + "down": {"uv": [4.5, 0.5, 4, 1], "texture": "#0"} + } + }, + { + "from": [7.98395, 11.80953, 7.9275], + "to": [8.20145, 12.24453, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [7.47645, 12.38953, 7.66702]}, + "faces": { + "north": {"uv": [11.5, 9.5, 12, 10], "texture": "#0"}, + "east": {"uv": [10, 11.5, 10.5, 12], "texture": "#0"}, + "south": {"uv": [11.5, 10, 12, 10.5], "texture": "#0"}, + "west": {"uv": [10.5, 11.5, 11, 12], "texture": "#0"}, + "up": {"uv": [12, 11, 11.5, 10.5], "texture": "#0"}, + "down": {"uv": [11.5, 11.5, 11, 12], "texture": "#0"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [0, -90, 0], + "translation": [-0.25, 14.75, 2], + "scale": [4, 4, 4] + }, + "thirdperson_lefthand": { + "rotation": [0, 90, 0], + "translation": [0.25, 14.75, 2], + "scale": [4, 4, 4] + }, + "firstperson_righthand": { + "rotation": [0, -90, 0], + "translation": [0, 11.5, 0], + "scale": [3, 3, 3] + }, + "firstperson_lefthand": { + "rotation": [0, 90, 0], + "translation": [0, 11.5, 0], + "scale": [3, 3, 3] + }, + "gui": { + "rotation": [0, 180, 45], + "scale": [1.35, 1.35, 1.35] + }, + "fixed": { + "rotation": [0, 0, 45], + "scale": [1.15, 1.15, 1.15] + } + } +} \ No newline at end of file diff --git a/src/surgebinding/resources/assets/surgebinding/models/item/vinebud.json b/src/surgebinding/resources/assets/surgebinding/models/item/vinebud.json new file mode 100644 index 000000000..fbef2f377 --- /dev/null +++ b/src/surgebinding/resources/assets/surgebinding/models/item/vinebud.json @@ -0,0 +1,3 @@ +{ + "parent": "surgebinding:block/vinebud1" +} diff --git a/src/surgebinding/resources/assets/surgebinding/models/item/willshaper_honorblade.json b/src/surgebinding/resources/assets/surgebinding/models/item/willshaper_honorblade.json new file mode 100644 index 000000000..be870ac6e --- /dev/null +++ b/src/surgebinding/resources/assets/surgebinding/models/item/willshaper_honorblade.json @@ -0,0 +1,11752 @@ +{ + "credit": "Made with Blockbench", + "texture_size": [ + 64, + 64 + ], + "textures": { + "0": "surgebinding:item/models/shardblade_model/willshaper_honorblade", + "particle": "surgebinding:item/models/shardblade_model/willshaper_honorblade" + }, + "elements": [ + { + "from": [ + 7.875, + 2.84458, + 7.8818 + ], + "to": [ + 8.375, + 3.34458, + 8.3818 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 0, + 8, + 0.25, + 8.25 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 8, + 0, + 8.25, + 0.25 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 0.25, + 8, + 0.5, + 8.25 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 8, + 0.25, + 8.25, + 0.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 0.75, + 8.25, + 0.5, + 8 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 8.25, + 0.5, + 8, + 0.75 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 7.875, + 6.58033, + -0.65069 + ], + "to": [ + 8.375, + 7.08033, + -0.15069 + ], + "rotation": { + "angle": -45, + "axis": "x", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 0.75, + 8, + 1, + 8.25 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 8, + 0.75, + 8.25, + 1 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 1, + 8, + 1.25, + 8.25 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 8, + 1, + 8.25, + 1.25 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 1.5, + 8.25, + 1.25, + 8 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 8.25, + 1.25, + 8, + 1.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 7.875, + 6.22678, + -0.29714 + ], + "to": [ + 8.375, + 6.72678, + 0.20286 + ], + "rotation": { + "angle": -45, + "axis": "x", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 1.5, + 8, + 1.75, + 8.25 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 8, + 1.5, + 8.25, + 1.75 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 1.75, + 8, + 2, + 8.25 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 8, + 1.75, + 8.25, + 2 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 2.25, + 8.25, + 2, + 8 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 8.25, + 2, + 8, + 2.25 + ], + "texture": "#0" + } + } + }, + { + "from": [ + -0.6555, + 6.58514, + 7.8818 + ], + "to": [ + -0.1555, + 7.08514, + 8.3818 + ], + "rotation": { + "angle": 45, + "axis": "z", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 2.25, + 8, + 2.5, + 8.25 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 8, + 2.25, + 8.25, + 2.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 2.5, + 8, + 2.75, + 8.25 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 8, + 2.5, + 8.25, + 2.75 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 3, + 8.25, + 2.75, + 8 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 8.25, + 2.75, + 8, + 3 + ], + "texture": "#0" + } + } + }, + { + "from": [ + -0.30195, + 6.23158, + 7.8818 + ], + "to": [ + 0.19805, + 6.73158, + 8.3818 + ], + "rotation": { + "angle": 45, + "axis": "z", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 3, + 8, + 3.25, + 8.25 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 8, + 3, + 8.25, + 3.25 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 3.25, + 8, + 3.5, + 8.25 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 8, + 3.25, + 8.25, + 3.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 3.75, + 8.25, + 3.5, + 8 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 8.25, + 3.5, + 8, + 3.75 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 7.52145, + 3.19813, + 7.8818 + ], + "to": [ + 8.02145, + 3.69813, + 8.3818 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 3.75, + 8, + 4, + 8.25 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 8, + 3.75, + 8.25, + 4 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 4, + 8, + 4.25, + 8.25 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 8, + 4, + 8.25, + 4.25 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 4.5, + 8.25, + 4.25, + 8 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 8.25, + 4.25, + 8, + 4.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 7.875, + 3.19813, + 7.52825 + ], + "to": [ + 8.375, + 3.69813, + 8.02825 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 4.5, + 8, + 4.75, + 8.25 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 8, + 4.5, + 8.25, + 4.75 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 4.75, + 8, + 5, + 8.25 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 8, + 4.75, + 8.25, + 5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 5.25, + 8.25, + 5, + 8 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 8.25, + 5, + 8, + 5.25 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8.22855, + 3.19813, + 7.8818 + ], + "to": [ + 8.72855, + 3.69813, + 8.3818 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 5.25, + 8, + 5.5, + 8.25 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 8, + 5.25, + 8.25, + 5.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 5.5, + 8, + 5.75, + 8.25 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 8, + 5.5, + 8.25, + 5.75 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 6, + 8.25, + 5.75, + 8 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 8.25, + 5.75, + 8, + 6 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 7.875, + 3.19813, + 8.23535 + ], + "to": [ + 8.375, + 3.69813, + 8.73535 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 6, + 8, + 6.25, + 8.25 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 8, + 6, + 8.25, + 6.25 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 6.25, + 8, + 6.5, + 8.25 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 8, + 6.25, + 8.25, + 6.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 6.75, + 8.25, + 6.5, + 8 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 8.25, + 6.5, + 8, + 6.75 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 7.875, + 3.46958, + 7.8818 + ], + "to": [ + 8.375, + 7.40708, + 8.3818 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 1.25, + 2.5, + 1.5, + 3.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 1.5, + 2.5, + 1.75, + 3.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 1.75, + 2.5, + 2, + 3.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 2, + 2.5, + 2.25, + 3.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 7, + 8.25, + 6.75, + 8 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 8.25, + 6.75, + 8, + 7 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 7.75, + 8.21958, + 6.7568 + ], + "to": [ + 8.5, + 8.46958, + 9.5068 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 2.75, + 2.25, + 3, + 2.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 2.25, + 2.5, + 3, + 2.75 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 0.5, + 3.5, + 0.75, + 3.75 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 2.75, + 0, + 3.5, + 0.25 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 3, + 1, + 2.75, + 0.25 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 3, + 1, + 2.75, + 1.75 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 7.75, + 8.38714, + 10.41325 + ], + "to": [ + 8.5, + 8.51214, + 10.53825 + ], + "rotation": { + "angle": 22.5, + "axis": "x", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 1.5, + 3.5, + 1.75, + 3.75 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 1.75, + 3.5, + 2, + 3.75 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 3.5, + 1.75, + 3.75, + 2 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 2, + 3.5, + 2.25, + 3.75 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 3.75, + 2.25, + 3.5, + 2 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 2.75, + 3.5, + 2.5, + 3.75 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 7.75, + 9.86793, + 12.65448 + ], + "to": [ + 8.5, + 10.11793, + 12.84198 + ], + "rotation": { + "angle": 45, + "axis": "x", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 3.5, + 2.5, + 3.75, + 2.75 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 2.75, + 3.5, + 3, + 3.75 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 3.5, + 2.75, + 3.75, + 3 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 3.25, + 3.5, + 3.5, + 3.75 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 3.75, + 3.75, + 3.5, + 3.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 4, + 0, + 3.75, + 0.25 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 7.75, + 8.21963, + 8.07101 + ], + "to": [ + 8.5, + 8.34463, + 8.19601 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 3.75, + 0.25, + 4, + 0.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 0.5, + 3.75, + 0.75, + 4 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 3.75, + 0.5, + 4, + 0.75 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 0.75, + 3.75, + 1, + 4 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 4, + 1, + 3.75, + 0.75 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 1.25, + 3.75, + 1, + 4 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 7.75, + 8.75733, + 5.35076 + ], + "to": [ + 8.5, + 8.88233, + 5.47576 + ], + "rotation": { + "angle": -22.5, + "axis": "x", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 3.75, + 1, + 4, + 1.25 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 1.25, + 3.75, + 1.5, + 4 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 3.75, + 1.25, + 4, + 1.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 1.5, + 3.75, + 1.75, + 4 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 4, + 1.75, + 3.75, + 1.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 2, + 3.75, + 1.75, + 4 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 7.75, + 8.76385, + 10.78996 + ], + "to": [ + 8.5, + 8.88885, + 10.91496 + ], + "rotation": { + "angle": 22.5, + "axis": "x", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 3.75, + 1.75, + 4, + 2 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 2, + 3.75, + 2.25, + 4 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 3.75, + 2, + 4, + 2.25 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 2.25, + 3.75, + 2.5, + 4 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 4, + 2.5, + 3.75, + 2.25 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 2.75, + 3.75, + 2.5, + 4 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 7.75, + 9.8559, + 3.42006 + ], + "to": [ + 8.5, + 10.1059, + 3.60756 + ], + "rotation": { + "angle": -45, + "axis": "x", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 3.75, + 2.5, + 4, + 2.75 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 2.75, + 3.75, + 3, + 4 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 3.75, + 2.75, + 4, + 3 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 3, + 3.75, + 3.25, + 4 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 4, + 3.25, + 3.75, + 3 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 3.5, + 3.75, + 3.25, + 4 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 7.75, + 8.38063, + 5.72747 + ], + "to": [ + 8.5, + 8.50563, + 5.85247 + ], + "rotation": { + "angle": -22.5, + "axis": "x", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 3.75, + 3.25, + 4, + 3.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 3.5, + 3.75, + 3.75, + 4 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 3.75, + 3.5, + 4, + 3.75 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 3.75, + 3.75, + 4, + 4 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 4.25, + 0.25, + 4, + 0 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 0.5, + 4, + 0.25, + 4.25 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 7.75, + 7.84292, + 8.44772 + ], + "to": [ + 8.5, + 7.96792, + 8.57272 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 4, + 0.25, + 4.25, + 0.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 0.5, + 4, + 0.75, + 4.25 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 4, + 0.5, + 4.25, + 0.75 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 0.75, + 4, + 1, + 4.25 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 4.25, + 1, + 4, + 0.75 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 1.25, + 4, + 1, + 4.25 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 7.75, + 8.38714, + 11.16667 + ], + "to": [ + 8.5, + 8.51214, + 11.29167 + ], + "rotation": { + "angle": 22.5, + "axis": "x", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 4, + 1, + 4.25, + 1.25 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 1.25, + 4, + 1.5, + 4.25 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 4, + 1.25, + 4.25, + 1.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 1.5, + 4, + 1.75, + 4.25 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 4.25, + 1.75, + 4, + 1.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 2, + 4, + 1.75, + 4.25 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 7.75, + 9.86793, + 13.47039 + ], + "to": [ + 8.5, + 10.11793, + 13.65789 + ], + "rotation": { + "angle": 45, + "axis": "x", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 4, + 1.75, + 4.25, + 2 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 2, + 4, + 2.25, + 4.25 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 4, + 2, + 4.25, + 2.25 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 2.25, + 4, + 2.5, + 4.25 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 4.25, + 2.5, + 4, + 2.25 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 2.75, + 4, + 2.5, + 4.25 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 7.75, + 8.00392, + 5.35076 + ], + "to": [ + 8.5, + 8.12892, + 5.47576 + ], + "rotation": { + "angle": -22.5, + "axis": "x", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 4, + 2.5, + 4.25, + 2.75 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 2.75, + 4, + 3, + 4.25 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 4, + 2.75, + 4.25, + 3 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 3, + 4, + 3.25, + 4.25 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 4.25, + 3.25, + 4, + 3 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 3.5, + 4, + 3.25, + 4.25 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 7.75, + 7.46621, + 8.07101 + ], + "to": [ + 8.5, + 7.59121, + 8.19601 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 4, + 3.25, + 4.25, + 3.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 3.5, + 4, + 3.75, + 4.25 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 4, + 3.5, + 4.25, + 3.75 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 3.75, + 4, + 4, + 4.25 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 4.25, + 4, + 4, + 3.75 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 4.25, + 4, + 4, + 4.25 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 7.75, + 8.01043, + 10.78996 + ], + "to": [ + 8.5, + 8.13543, + 10.91496 + ], + "rotation": { + "angle": 22.5, + "axis": "x", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 4.25, + 0, + 4.5, + 0.25 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 0.25, + 4.25, + 0.5, + 4.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 4.25, + 0.25, + 4.5, + 0.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 0.5, + 4.25, + 0.75, + 4.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 4.5, + 0.75, + 4.25, + 0.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 1, + 4.25, + 0.75, + 4.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 7.75, + 9.8559, + 2.60414 + ], + "to": [ + 8.5, + 10.1059, + 2.79164 + ], + "rotation": { + "angle": -45, + "axis": "x", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 4.25, + 0.75, + 4.5, + 1 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 1, + 4.25, + 1.25, + 4.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 4.25, + 1, + 4.5, + 1.25 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 1.25, + 4.25, + 1.5, + 4.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 4.5, + 1.5, + 4.25, + 1.25 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 1.75, + 4.25, + 1.5, + 4.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 7.75, + 8.38063, + 4.97405 + ], + "to": [ + 8.5, + 8.50563, + 5.09905 + ], + "rotation": { + "angle": -22.5, + "axis": "x", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 4.25, + 1.5, + 4.5, + 1.75 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 1.75, + 4.25, + 2, + 4.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 4.25, + 1.75, + 4.5, + 2 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 2, + 4.25, + 2.25, + 4.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 4.5, + 2.25, + 4.25, + 2 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 2.5, + 4.25, + 2.25, + 4.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 7.75, + 7.40708, + 6.7568 + ], + "to": [ + 8.5, + 8.21958, + 7.8193 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 4.25, + 2.25, + 4.5, + 2.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 2.5, + 4.25, + 2.75, + 4.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 4.25, + 2.5, + 4.5, + 2.75 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 2.75, + 4.25, + 3, + 4.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 4.5, + 3, + 4.25, + 2.75 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 3.25, + 4.25, + 3, + 4.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 7.75, + 7.40708, + 8.4568 + ], + "to": [ + 8.5, + 8.21958, + 9.5068 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 4.25, + 3, + 4.5, + 3.25 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 3.25, + 4.25, + 3.5, + 4.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 4.25, + 3.25, + 4.5, + 3.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 3.5, + 4.25, + 3.75, + 4.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 4.5, + 3.75, + 4.25, + 3.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 4, + 4.25, + 3.75, + 4.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 7.75, + 7.40708, + 7.8193 + ], + "to": [ + 8.5, + 7.59458, + 8.5068 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 4.25, + 3.75, + 4.5, + 4 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 4, + 4.25, + 4.25, + 4.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 4.25, + 4, + 4.5, + 4.25 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 4.25, + 4.25, + 4.5, + 4.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 4.75, + 0.25, + 4.5, + 0 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 0.5, + 4.5, + 0.25, + 4.75 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 7.65708, + 9.4568 + ], + "to": [ + 8.25, + 8.21958, + 10.7568 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 4.5, + 0.25, + 4.75, + 0.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 0.5, + 4.5, + 0.75, + 4.75 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 4.5, + 0.5, + 4.75, + 0.75 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 0.75, + 4.5, + 1, + 4.75 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 4.75, + 1, + 4.5, + 0.75 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 1.25, + 4.5, + 1, + 4.75 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 7.65708, + 5.4932 + ], + "to": [ + 8.25, + 8.21958, + 6.7932 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 4.5, + 1, + 4.75, + 1.25 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 1.25, + 4.5, + 1.5, + 4.75 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 4.5, + 1.25, + 4.75, + 1.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 1.5, + 4.5, + 1.75, + 4.75 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 4.75, + 1.75, + 4.5, + 1.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 2, + 4.5, + 1.75, + 4.75 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 8.3481, + 11.06706 + ], + "to": [ + 8.25, + 8.8481, + 11.37956 + ], + "rotation": { + "angle": 45, + "axis": "x", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 4.5, + 1.75, + 4.75, + 2 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 2, + 4.5, + 2.25, + 4.75 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 4.5, + 2, + 4.75, + 2.25 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 2.25, + 4.5, + 2.5, + 4.75 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 4.75, + 2.5, + 4.5, + 2.25 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 2.75, + 4.5, + 2.5, + 4.75 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 11.17227, + 1.06327 + ], + "to": [ + 8.25, + 11.67227, + 1.37577 + ], + "rotation": { + "angle": -45, + "axis": "x", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 4.5, + 2.5, + 4.75, + 2.75 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 2.75, + 4.5, + 3, + 4.75 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 4.5, + 2.75, + 4.75, + 3 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 3, + 4.5, + 3.25, + 4.75 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 4.75, + 3.25, + 4.5, + 3 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 3.5, + 4.5, + 3.25, + 4.75 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 11.17227, + 14.87423 + ], + "to": [ + 8.25, + 11.67227, + 15.18673 + ], + "rotation": { + "angle": 45, + "axis": "x", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 4.5, + 3.25, + 4.75, + 3.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 3.5, + 4.5, + 3.75, + 4.75 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 4.5, + 3.5, + 4.75, + 3.75 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 3.75, + 4.5, + 4, + 4.75 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 4.75, + 4, + 4.5, + 3.75 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 4.25, + 4.5, + 4, + 4.75 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 8.3481, + 4.87044 + ], + "to": [ + 8.25, + 8.8481, + 5.18294 + ], + "rotation": { + "angle": -45, + "axis": "x", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 4.5, + 4, + 4.75, + 4.25 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 4.25, + 4.5, + 4.5, + 4.75 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 4.5, + 4.25, + 4.75, + 4.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 4.5, + 4.5, + 4.75, + 4.75 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 5, + 0.25, + 4.75, + 0 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 0.5, + 4.75, + 0.25, + 5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8.4184, + 7.28208, + 7.13975 + ], + "to": [ + 8.6684, + 7.40708, + 7.88975 + ], + "rotation": { + "angle": 22.5, + "axis": "y", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 4.75, + 0.25, + 5, + 0.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 0.5, + 4.75, + 0.75, + 5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 4.75, + 0.5, + 5, + 0.75 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 0.75, + 4.75, + 1, + 5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 5, + 1, + 4.75, + 0.75 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 1.25, + 4.75, + 1, + 5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8.03701, + 7.28208, + 7.68889 + ], + "to": [ + 8.53701, + 7.40708, + 8.56389 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 4.75, + 1, + 5, + 1.25 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 1.25, + 4.75, + 1.5, + 5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 4.75, + 1.25, + 5, + 1.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 1.5, + 4.75, + 1.75, + 5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 5, + 1.75, + 4.75, + 1.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 2, + 4.75, + 1.75, + 5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8.42361, + 7.28208, + 8.37281 + ], + "to": [ + 8.67361, + 7.40708, + 9.12281 + ], + "rotation": { + "angle": -22.5, + "axis": "y", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 4.75, + 1.75, + 5, + 2 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 2, + 4.75, + 2.25, + 5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 4.75, + 2, + 5, + 2.25 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 2.25, + 4.75, + 2.5, + 5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 5, + 2.5, + 4.75, + 2.25 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 2.75, + 4.75, + 2.5, + 5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 7.5816, + 7.28208, + 7.13975 + ], + "to": [ + 7.8316, + 7.40708, + 7.88975 + ], + "rotation": { + "angle": -22.5, + "axis": "y", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 4.75, + 2.5, + 5, + 2.75 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 2.75, + 4.75, + 3, + 5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 4.75, + 2.75, + 5, + 3 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 3, + 4.75, + 3.25, + 5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 5, + 3.25, + 4.75, + 3 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 3.5, + 4.75, + 3.25, + 5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 7.71299, + 7.28208, + 7.69971 + ], + "to": [ + 8.21299, + 7.40708, + 8.57471 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 4.75, + 3.25, + 5, + 3.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 3.5, + 4.75, + 3.75, + 5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 4.75, + 3.5, + 5, + 3.75 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 3.75, + 4.75, + 4, + 5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 5, + 4, + 4.75, + 3.75 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 4.25, + 4.75, + 4, + 5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 7.57639, + 7.28208, + 8.37281 + ], + "to": [ + 7.82639, + 7.40708, + 9.12281 + ], + "rotation": { + "angle": 22.5, + "axis": "y", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 4.75, + 4, + 5, + 4.25 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 4.25, + 4.75, + 4.5, + 5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 4.75, + 4.25, + 5, + 4.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 4.5, + 4.75, + 4.75, + 5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 5, + 4.75, + 4.75, + 4.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 5, + 4.75, + 4.75, + 5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 7.28208, + 7.0068 + ], + "to": [ + 8.25, + 7.40708, + 9.2568 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 0, + 5, + 0.25, + 5.25 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 2.75, + 1.75, + 3.25, + 2 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 5, + 0, + 5.25, + 0.25 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 2.75, + 2, + 3.25, + 2.25 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 2.5, + 3.25, + 2.25, + 2.75 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 2.75, + 2.75, + 2.5, + 3.25 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8.4184, + 8.46958, + 7.13975 + ], + "to": [ + 8.6684, + 8.59458, + 7.88975 + ], + "rotation": { + "angle": 22.5, + "axis": "y", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 0.25, + 5, + 0.5, + 5.25 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 5, + 0.25, + 5.25, + 0.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 0.5, + 5, + 0.75, + 5.25 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 5, + 0.5, + 5.25, + 0.75 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 1, + 5.25, + 0.75, + 5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 5.25, + 0.75, + 5, + 1 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 7.71299, + 8.46958, + 7.69971 + ], + "to": [ + 8.21299, + 8.59458, + 8.57471 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 1, + 5, + 1.25, + 5.25 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 5, + 1, + 5.25, + 1.25 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 1.25, + 5, + 1.5, + 5.25 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 5, + 1.25, + 5.25, + 1.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 1.75, + 5.25, + 1.5, + 5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 5.25, + 1.5, + 5, + 1.75 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8.03701, + 8.46958, + 7.68889 + ], + "to": [ + 8.53701, + 8.59458, + 8.56389 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 1.75, + 5, + 2, + 5.25 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 5, + 1.75, + 5.25, + 2 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 2, + 5, + 2.25, + 5.25 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 5, + 2, + 5.25, + 2.25 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 2.5, + 5.25, + 2.25, + 5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 5.25, + 2.25, + 5, + 2.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 7.5816, + 8.46958, + 7.13975 + ], + "to": [ + 7.8316, + 8.59458, + 7.88975 + ], + "rotation": { + "angle": -22.5, + "axis": "y", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 2.5, + 5, + 2.75, + 5.25 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 5, + 2.5, + 5.25, + 2.75 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 2.75, + 5, + 3, + 5.25 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 5, + 2.75, + 5.25, + 3 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 3.25, + 5.25, + 3, + 5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 5.25, + 3, + 5, + 3.25 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8.42361, + 8.46958, + 8.37281 + ], + "to": [ + 8.67361, + 8.59458, + 9.12281 + ], + "rotation": { + "angle": -22.5, + "axis": "y", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 3.25, + 5, + 3.5, + 5.25 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 5, + 3.25, + 5.25, + 3.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 3.5, + 5, + 3.75, + 5.25 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 5, + 3.5, + 5.25, + 3.75 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 4, + 5.25, + 3.75, + 5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 5.25, + 3.75, + 5, + 4 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 7.57639, + 8.46958, + 8.37281 + ], + "to": [ + 7.82639, + 8.59458, + 9.12281 + ], + "rotation": { + "angle": 22.5, + "axis": "y", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 4, + 5, + 4.25, + 5.25 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 5, + 4, + 5.25, + 4.25 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 4.25, + 5, + 4.5, + 5.25 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 5, + 4.25, + 5.25, + 4.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 4.75, + 5.25, + 4.5, + 5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 5.25, + 4.5, + 5, + 4.75 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 13.75, + 7 + ], + "to": [ + 8.25, + 24, + 8 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 0, + 0, + 0.25, + 2.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 0.25, + 0, + 0.5, + 2.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 0.5, + 0, + 0.75, + 2.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 0.75, + 0, + 1, + 2.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 5, + 5.25, + 4.75, + 5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 5.25, + 4.75, + 5, + 5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 13.75, + 8.25 + ], + "to": [ + 8.25, + 24, + 9.25 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 1, + 0, + 1.25, + 2.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 1.25, + 0, + 1.5, + 2.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 1.5, + 0, + 1.75, + 2.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 1.75, + 0, + 2, + 2.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 5.25, + 5.25, + 5, + 5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 0.25, + 5.25, + 0, + 5.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 24, + 7 + ], + "to": [ + 8.25, + 25.9375, + 8 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 2.75, + 2.75, + 3, + 3.25 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 0.25, + 3, + 0.5, + 3.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 3, + 0.25, + 3.25, + 0.75 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 0.5, + 3, + 0.75, + 3.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 5.5, + 0.25, + 5.25, + 0 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 0.5, + 5.25, + 0.25, + 5.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 25.75, + 8 + ], + "to": [ + 8.25, + 25.9375, + 8.125 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 5.25, + 0.25, + 5.5, + 0.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 0.5, + 5.25, + 0.75, + 5.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 5.25, + 0.5, + 5.5, + 0.75 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 0.75, + 5.25, + 1, + 5.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 5.5, + 1, + 5.25, + 0.75 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 1.25, + 5.25, + 1, + 5.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 15.25, + 8 + ], + "to": [ + 8.25, + 25.5625, + 8.25 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 2, + 0, + 2.25, + 2.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 2.25, + 0, + 2.5, + 2.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 0, + 2.5, + 0.25, + 5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 2.5, + 0, + 2.75, + 2.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 5.5, + 1.25, + 5.25, + 1 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 1.5, + 5.25, + 1.25, + 5.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 25.75, + 8.125 + ], + "to": [ + 8.25, + 25.9375, + 8.25 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 5.25, + 1.25, + 5.5, + 1.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 1.5, + 5.25, + 1.75, + 5.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 5.25, + 1.5, + 5.5, + 1.75 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 1.75, + 5.25, + 2, + 5.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 5.5, + 2, + 5.25, + 1.75 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 2.25, + 5.25, + 2, + 5.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 24.68262, + 3.89078 + ], + "to": [ + 8.25, + 24.93262, + 4.01578 + ], + "rotation": { + "angle": 22.5, + "axis": "x", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 5.25, + 2, + 5.5, + 2.25 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 2.25, + 5.25, + 2.5, + 5.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 5.25, + 2.25, + 5.5, + 2.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 2.5, + 5.25, + 2.75, + 5.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 5.5, + 2.75, + 5.25, + 2.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 3, + 5.25, + 2.75, + 5.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 24.68262, + 12.23422 + ], + "to": [ + 8.25, + 24.93262, + 12.35922 + ], + "rotation": { + "angle": -22.5, + "axis": "x", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 5.25, + 2.75, + 5.5, + 3 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 3, + 5.25, + 3.25, + 5.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 5.25, + 3, + 5.5, + 3.25 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 3.25, + 5.25, + 3.5, + 5.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 5.5, + 3.5, + 5.25, + 3.25 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 3.75, + 5.25, + 3.5, + 5.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 24, + 8.25 + ], + "to": [ + 8.25, + 25.9375, + 9.25 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 0.75, + 3, + 1, + 3.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 3, + 0.75, + 3.25, + 1.25 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 1, + 3, + 1.25, + 3.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 3, + 1.25, + 3.25, + 1.75 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 5.5, + 3.75, + 5.25, + 3.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 4, + 5.25, + 3.75, + 5.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 24.92388, + 6.61732 + ], + "to": [ + 8.25, + 25.17388, + 7.05482 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 5.25, + 3.75, + 5.5, + 4 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 4, + 5.25, + 4.25, + 5.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 5.25, + 4, + 5.5, + 4.25 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 4.25, + 5.25, + 4.5, + 5.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 5.5, + 4.5, + 5.25, + 4.25 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 4.75, + 5.25, + 4.5, + 5.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 24.61138, + 6.86732 + ], + "to": [ + 8.25, + 25.17388, + 7.05482 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 5.25, + 4.5, + 5.5, + 4.75 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 4.75, + 5.25, + 5, + 5.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 5.25, + 4.75, + 5.5, + 5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 5, + 5.25, + 5.25, + 5.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 5.5, + 5.25, + 5.25, + 5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 5.5, + 5.25, + 5.25, + 5.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 24.92388, + 9.19518 + ], + "to": [ + 8.25, + 25.17388, + 9.63268 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 0, + 5.5, + 0.25, + 5.75 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 5.5, + 0, + 5.75, + 0.25 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 0.25, + 5.5, + 0.5, + 5.75 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 5.5, + 0.25, + 5.75, + 0.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 0.75, + 5.75, + 0.5, + 5.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 5.75, + 0.5, + 5.5, + 0.75 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 24.61138, + 9.19518 + ], + "to": [ + 8.25, + 25.17388, + 9.38268 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 0.75, + 5.5, + 1, + 5.75 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 5.5, + 0.75, + 5.75, + 1 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 1, + 5.5, + 1.25, + 5.75 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 5.5, + 1, + 5.75, + 1.25 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 1.5, + 5.75, + 1.25, + 5.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 5.75, + 1.25, + 5.5, + 1.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 23.74635, + 5.47484 + ], + "to": [ + 8.25, + 24.74635, + 5.72484 + ], + "rotation": { + "angle": 22.5, + "axis": "x", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 1.5, + 5.5, + 1.75, + 5.75 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 5.5, + 1.5, + 5.75, + 1.75 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 1.75, + 5.5, + 2, + 5.75 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 5.5, + 1.75, + 5.75, + 2 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 2.25, + 5.75, + 2, + 5.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 5.75, + 2, + 5.5, + 2.25 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 12.00227, + 7.84335 + ], + "to": [ + 8.25, + 13.00227, + 8.34335 + ], + "rotation": { + "angle": 22.5, + "axis": "x", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 2.25, + 5.5, + 2.5, + 5.75 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 5.5, + 2.25, + 5.75, + 2.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 2.5, + 5.5, + 2.75, + 5.75 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 5.5, + 2.5, + 5.75, + 2.75 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 3, + 5.75, + 2.75, + 5.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 5.75, + 2.75, + 5.5, + 3 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 14.86928, + 9.29242 + ], + "to": [ + 8.25, + 15.49428, + 9.54242 + ], + "rotation": { + "angle": -22.5, + "axis": "x", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 3, + 5.5, + 3.25, + 5.75 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 5.5, + 3, + 5.75, + 3.25 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 3.25, + 5.5, + 3.5, + 5.75 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 5.5, + 3.25, + 5.75, + 3.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 3.75, + 5.75, + 3.5, + 5.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 5.75, + 3.5, + 5.5, + 3.75 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 14.86928, + 6.70758 + ], + "to": [ + 8.25, + 15.49428, + 6.95758 + ], + "rotation": { + "angle": 22.5, + "axis": "x", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 3.75, + 5.5, + 4, + 5.75 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 5.5, + 3.75, + 5.75, + 4 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 4, + 5.5, + 4.25, + 5.75 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 5.5, + 4, + 5.75, + 4.25 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 4.5, + 5.75, + 4.25, + 5.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 5.75, + 4.25, + 5.5, + 4.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 13.95321, + 6.82228 + ], + "to": [ + 8.25, + 14.45321, + 7.19728 + ], + "rotation": { + "angle": 45, + "axis": "x", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 4.5, + 5.5, + 4.75, + 5.75 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 5.5, + 4.5, + 5.75, + 4.75 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 4.75, + 5.5, + 5, + 5.75 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 5.5, + 4.75, + 5.75, + 5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 5.25, + 5.75, + 5, + 5.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 5.75, + 5, + 5.5, + 5.25 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 14.59848, + 6.45686 + ], + "to": [ + 8.25, + 15.34848, + 6.95686 + ], + "rotation": { + "angle": -22.5, + "axis": "x", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 5.25, + 5.5, + 5.5, + 5.75 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 5.5, + 5.25, + 5.75, + 5.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 5.5, + 5.5, + 5.75, + 5.75 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 0, + 5.75, + 0.25, + 6 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 6, + 0.25, + 5.75, + 0 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 0.5, + 5.75, + 0.25, + 6 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 14.59848, + 9.29314 + ], + "to": [ + 8.25, + 15.34848, + 9.79314 + ], + "rotation": { + "angle": 22.5, + "axis": "x", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 5.75, + 0.25, + 6, + 0.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 0.5, + 5.75, + 0.75, + 6 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 5.75, + 0.5, + 6, + 0.75 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 0.75, + 5.75, + 1, + 6 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 6, + 1, + 5.75, + 0.75 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 1.25, + 5.75, + 1, + 6 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 13.95321, + 8.99022 + ], + "to": [ + 8.25, + 14.45321, + 9.42772 + ], + "rotation": { + "angle": -45, + "axis": "x", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 5.75, + 1, + 6, + 1.25 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 1.25, + 5.75, + 1.5, + 6 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 5.75, + 1.25, + 6, + 1.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 1.5, + 5.75, + 1.75, + 6 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 6, + 1.75, + 5.75, + 1.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 2, + 5.75, + 1.75, + 6 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 14.68451, + 6.4551 + ], + "to": [ + 8.25, + 15.18451, + 7.0176 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 5.75, + 1.75, + 6, + 2 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 2, + 5.75, + 2.25, + 6 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 5.75, + 2, + 6, + 2.25 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 2.25, + 5.75, + 2.5, + 6 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 6, + 2.5, + 5.75, + 2.25 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 2.75, + 5.75, + 2.5, + 6 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 13.13804, + 7.09567 + ], + "to": [ + 8.25, + 13.76304, + 7.84567 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 5.75, + 2.5, + 6, + 2.75 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 2.75, + 5.75, + 3, + 6 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 5.75, + 2.75, + 6, + 3 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 3, + 5.75, + 3.25, + 6 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 6, + 3.25, + 5.75, + 3 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 3.5, + 5.75, + 3.25, + 6 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 13.78127, + 8.80404 + ], + "to": [ + 8.25, + 14.03127, + 8.92904 + ], + "rotation": { + "angle": 45, + "axis": "x", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 5.75, + 3.25, + 6, + 3.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 3.5, + 5.75, + 3.75, + 6 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 5.75, + 3.5, + 6, + 3.75 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 3.75, + 5.75, + 4, + 6 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 6, + 4, + 5.75, + 3.75 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 4.25, + 5.75, + 4, + 6 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 13.78127, + 9.53259 + ], + "to": [ + 8.25, + 14.03127, + 9.65759 + ], + "rotation": { + "angle": 45, + "axis": "x", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 5.75, + 4, + 6, + 4.25 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 4.25, + 5.75, + 4.5, + 6 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 5.75, + 4.25, + 6, + 4.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 4.5, + 5.75, + 4.75, + 6 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 6, + 4.75, + 5.75, + 4.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 5, + 5.75, + 4.75, + 6 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 14.20804, + 9.10581 + ], + "to": [ + 8.25, + 14.33304, + 9.35581 + ], + "rotation": { + "angle": 45, + "axis": "x", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 5.75, + 4.75, + 6, + 5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 5, + 5.75, + 5.25, + 6 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 5.75, + 5, + 6, + 5.25 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 5.25, + 5.75, + 5.5, + 6 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 6, + 5.5, + 5.75, + 5.25 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 5.75, + 5.75, + 5.5, + 6 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 13.47949, + 9.10581 + ], + "to": [ + 8.25, + 13.60449, + 9.35581 + ], + "rotation": { + "angle": 45, + "axis": "x", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 5.75, + 5.5, + 6, + 5.75 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 5.75, + 5.75, + 6, + 6 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 0, + 6, + 0.25, + 6.25 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 6, + 0, + 6.25, + 0.25 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 0.5, + 6.25, + 0.25, + 6 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 6.25, + 0.25, + 6, + 0.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 13.75, + 8 + ], + "to": [ + 8.25, + 14.5, + 8.25 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 0.5, + 6, + 0.75, + 6.25 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 6, + 0.5, + 6.25, + 0.75 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 0.75, + 6, + 1, + 6.25 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 6, + 0.75, + 6.25, + 1 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 1.25, + 6.25, + 1, + 6 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 6.25, + 1, + 6, + 1.25 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 11.20895, + 7.25 + ], + "to": [ + 8.25, + 13.14645, + 9 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 3, + 2.25, + 3.25, + 2.75 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 0.25, + 2.5, + 0.75, + 3 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 3, + 2.75, + 3.25, + 3.25 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 0.75, + 2.5, + 1.25, + 3 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 3.5, + 0.75, + 3.25, + 0.25 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 3.5, + 0.75, + 3.25, + 1.25 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 14.76834, + 6.42556 + ], + "to": [ + 8.25, + 15.26834, + 6.67556 + ], + "rotation": { + "angle": -45, + "axis": "x", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 1.25, + 6, + 1.5, + 6.25 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 6, + 1.25, + 6.25, + 1.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 1.5, + 6, + 1.75, + 6.25 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 6, + 1.5, + 6.25, + 1.75 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 2, + 6.25, + 1.75, + 6 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 6.25, + 1.75, + 6, + 2 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 14.76834, + 9.57444 + ], + "to": [ + 8.25, + 15.26834, + 9.82444 + ], + "rotation": { + "angle": 45, + "axis": "x", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 2, + 6, + 2.25, + 6.25 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 6, + 2, + 6.25, + 2.25 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 2.25, + 6, + 2.5, + 6.25 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 6, + 2.25, + 6.25, + 2.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 2.75, + 6.25, + 2.5, + 6 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 6.25, + 2.5, + 6, + 2.75 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 14.68451, + 9.2324 + ], + "to": [ + 8.25, + 15.18451, + 9.7949 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 2.75, + 6, + 3, + 6.25 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 6, + 2.75, + 6.25, + 3 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 3, + 6, + 3.25, + 6.25 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 6, + 3, + 6.25, + 3.25 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 3.5, + 6.25, + 3.25, + 6 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 6.25, + 3.25, + 6, + 3.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 10.25162, + 8.65428 + ], + "to": [ + 8.25, + 11.50162, + 9.40428 + ], + "rotation": { + "angle": 22.5, + "axis": "x", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 3.5, + 6, + 3.75, + 6.25 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 6, + 3.5, + 6.25, + 3.75 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 3.75, + 6, + 4, + 6.25 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 6, + 3.75, + 6.25, + 4 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 4.25, + 6.25, + 4, + 6 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 6.25, + 4, + 6, + 4.25 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 10.48854, + 9.3242 + ], + "to": [ + 8.25, + 11.55104, + 9.5742 + ], + "rotation": { + "angle": 22.5, + "axis": "x", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 4.25, + 6, + 4.5, + 6.25 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 6, + 4.25, + 6.25, + 4.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 4.5, + 6, + 4.75, + 6.25 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 6, + 4.5, + 6.25, + 4.75 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 5, + 6.25, + 4.75, + 6 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 6.25, + 4.75, + 6, + 5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 10.90178, + 6.13183 + ], + "to": [ + 8.25, + 11.02678, + 6.25683 + ], + "rotation": { + "angle": -22.5, + "axis": "x", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 5, + 6, + 5.25, + 6.25 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 6, + 5, + 6.25, + 5.25 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 5.25, + 6, + 5.5, + 6.25 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 6, + 5.25, + 6.25, + 5.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 5.75, + 6.25, + 5.5, + 6 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 6.25, + 5.5, + 6, + 5.75 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 11.80458, + 4.70109 + ], + "to": [ + 8.25, + 11.99208, + 4.82609 + ], + "rotation": { + "angle": -45, + "axis": "x", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 5.75, + 6, + 6, + 6.25 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 6, + 5.75, + 6.25, + 6 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 6, + 6, + 6.25, + 6.25 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 0, + 6.25, + 0.25, + 6.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 6.5, + 0.25, + 6.25, + 0 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 0.5, + 6.25, + 0.25, + 6.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 10.28635, + 6.99787 + ], + "to": [ + 8.25, + 10.41135, + 9.24787 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 6.25, + 0.25, + 6.5, + 0.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 3.25, + 1.25, + 3.75, + 1.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 0.5, + 6.25, + 0.75, + 6.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 3.25, + 1.5, + 3.75, + 1.75 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 3.5, + 2.25, + 3.25, + 1.75 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 2.5, + 3.25, + 2.25, + 3.75 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 10.90178, + 9.99317 + ], + "to": [ + 8.25, + 11.02678, + 10.11817 + ], + "rotation": { + "angle": 22.5, + "axis": "x", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 6.25, + 0.5, + 6.5, + 0.75 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 0.75, + 6.25, + 1, + 6.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 6.25, + 0.75, + 6.5, + 1 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 1, + 6.25, + 1.25, + 6.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 6.5, + 1.25, + 6.25, + 1 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 1.5, + 6.25, + 1.25, + 6.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 11.58817, + 4.91749 + ], + "to": [ + 8.25, + 11.71317, + 5.10499 + ], + "rotation": { + "angle": -45, + "axis": "x", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 6.25, + 1.25, + 6.5, + 1.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 1.5, + 6.25, + 1.75, + 6.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 6.25, + 1.5, + 6.5, + 1.75 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 1.75, + 6.25, + 2, + 6.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 6.5, + 2, + 6.25, + 1.75 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 2.25, + 6.25, + 2, + 6.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 10.36522, + 7.73664 + ], + "to": [ + 8.25, + 10.74022, + 7.92414 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 6.25, + 2, + 6.5, + 2.25 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 2.25, + 6.25, + 2.5, + 6.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 6.25, + 2.25, + 6.5, + 2.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 2.5, + 6.25, + 2.75, + 6.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 6.5, + 2.75, + 6.25, + 2.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 3, + 6.25, + 2.75, + 6.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 10.36522, + 8.32586 + ], + "to": [ + 8.25, + 10.74022, + 8.51336 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 6.25, + 2.75, + 6.5, + 3 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 3, + 6.25, + 3.25, + 6.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 6.25, + 3, + 6.5, + 3.25 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 3.25, + 6.25, + 3.5, + 6.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 6.5, + 3.5, + 6.25, + 3.25 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 3.75, + 6.25, + 3.5, + 6.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 10.48854, + 6.6758 + ], + "to": [ + 8.25, + 11.55104, + 6.9258 + ], + "rotation": { + "angle": -22.5, + "axis": "x", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 6.25, + 3.5, + 6.5, + 3.75 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 3.75, + 6.25, + 4, + 6.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 6.25, + 3.75, + 6.5, + 4 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 4, + 6.25, + 4.25, + 6.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 6.5, + 4.25, + 6.25, + 4 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 4.5, + 6.25, + 4.25, + 6.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 21.13146, + 16.06407 + ], + "to": [ + 8.25, + 21.63146, + 16.37657 + ], + "rotation": { + "angle": -45, + "axis": "x", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 6.25, + 4.25, + 6.5, + 4.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 4.5, + 6.25, + 4.75, + 6.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 6.25, + 4.5, + 6.5, + 4.75 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 4.75, + 6.25, + 5, + 6.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 6.5, + 5, + 6.25, + 4.75 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 5.25, + 6.25, + 5, + 6.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 24.9377, + 5.07156 + ], + "to": [ + 8.25, + 25.4377, + 5.32156 + ], + "rotation": { + "angle": 22.5, + "axis": "x", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 6.25, + 5, + 6.5, + 5.25 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 5.25, + 6.25, + 5.5, + 6.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 6.25, + 5.25, + 6.5, + 5.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 5.5, + 6.25, + 5.75, + 6.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 6.5, + 5.75, + 6.25, + 5.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 6, + 6.25, + 5.75, + 6.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 24.9377, + 10.92844 + ], + "to": [ + 8.25, + 25.4377, + 11.17844 + ], + "rotation": { + "angle": -22.5, + "axis": "x", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 6.25, + 5.75, + 6.5, + 6 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 6, + 6.25, + 6.25, + 6.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 6.25, + 6, + 6.5, + 6.25 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 6.25, + 6.25, + 6.5, + 6.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 0.25, + 6.75, + 0, + 6.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 6.75, + 0, + 6.5, + 0.25 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 21.59184, + -0.43418 + ], + "to": [ + 8.25, + 22.09184, + -0.18418 + ], + "rotation": { + "angle": 45, + "axis": "x", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 0.25, + 6.5, + 0.5, + 6.75 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 6.5, + 0.25, + 6.75, + 0.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 0.5, + 6.5, + 0.75, + 6.75 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 6.5, + 0.5, + 6.75, + 0.75 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 1, + 6.75, + 0.75, + 6.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 6.75, + 0.75, + 6.5, + 1 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 25.94548, + 7.07889 + ], + "to": [ + 8.25, + 26.75798, + 7.20389 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 1, + 6.5, + 1.25, + 6.75 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 6.5, + 1, + 6.75, + 1.25 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 1.25, + 6.5, + 1.5, + 6.75 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 6.5, + 1.25, + 6.75, + 1.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 1.75, + 6.75, + 1.5, + 6.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 6.75, + 1.5, + 6.5, + 1.75 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 25.88298, + 9.04611 + ], + "to": [ + 8.25, + 26.75798, + 9.17111 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 1.75, + 6.5, + 2, + 6.75 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 6.5, + 1.75, + 6.75, + 2 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 2, + 6.5, + 2.25, + 6.75 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 6.5, + 2, + 6.75, + 2.25 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 2.5, + 6.75, + 2.25, + 6.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 6.75, + 2.25, + 6.5, + 2.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 25.74452, + 4.56178 + ], + "to": [ + 8.25, + 26.24452, + 4.81178 + ], + "rotation": { + "angle": 22.5, + "axis": "x", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 2.5, + 6.5, + 2.75, + 6.75 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 6.5, + 2.5, + 6.75, + 2.75 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 2.75, + 6.5, + 3, + 6.75 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 6.5, + 2.75, + 6.75, + 3 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 3.25, + 6.75, + 3, + 6.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 6.75, + 3, + 6.5, + 3.25 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 23.77513, + 0.78402 + ], + "to": [ + 8.25, + 24.08763, + 0.90902 + ], + "rotation": { + "angle": 45, + "axis": "x", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 3.25, + 6.5, + 3.5, + 6.75 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 6.5, + 3.25, + 6.75, + 3.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 3.5, + 6.5, + 3.75, + 6.75 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 6.5, + 3.5, + 6.75, + 3.75 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 4, + 6.75, + 3.75, + 6.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 6.75, + 3.75, + 6.5, + 4 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 25.08009, + 13.57506 + ], + "to": [ + 8.25, + 25.20509, + 13.70006 + ], + "rotation": { + "angle": -22.5, + "axis": "x", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 4, + 6.5, + 4.25, + 6.75 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 6.5, + 4, + 6.75, + 4.25 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 4.25, + 6.5, + 4.5, + 6.75 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 6.5, + 4.25, + 6.75, + 4.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 4.75, + 6.75, + 4.5, + 6.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 6.75, + 4.5, + 6.5, + 4.75 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 24.01562, + 0.58186 + ], + "to": [ + 8.25, + 24.14062, + 1.08186 + ], + "rotation": { + "angle": 45, + "axis": "x", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 4.75, + 6.5, + 5, + 6.75 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 6.5, + 4.75, + 6.75, + 5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 5, + 6.5, + 5.25, + 6.75 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 6.5, + 5, + 6.75, + 5.25 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 5.5, + 6.75, + 5.25, + 6.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 6.75, + 5.25, + 6.5, + 5.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 26.20739, + 4.14938 + ], + "to": [ + 8.25, + 26.33239, + 4.64938 + ], + "rotation": { + "angle": 22.5, + "axis": "x", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 5.5, + 6.5, + 5.75, + 6.75 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 6.5, + 5.5, + 6.75, + 5.75 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 5.75, + 6.5, + 6, + 6.75 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 6.5, + 5.75, + 6.75, + 6 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 6.25, + 6.75, + 6, + 6.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 6.75, + 6, + 6.5, + 6.25 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 25.74452, + 11.43822 + ], + "to": [ + 8.25, + 26.24452, + 11.68822 + ], + "rotation": { + "angle": -22.5, + "axis": "x", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 6.25, + 6.5, + 6.5, + 6.75 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 6.5, + 6.25, + 6.75, + 6.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 6.5, + 6.5, + 6.75, + 6.75 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 0, + 6.75, + 0.25, + 7 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 7, + 0.25, + 6.75, + 0 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 0.5, + 6.75, + 0.25, + 7 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 22.22806, + -0.82555 + ], + "to": [ + 8.25, + 22.35306, + -0.63805 + ], + "rotation": { + "angle": 45, + "axis": "x", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 6.75, + 0.25, + 7, + 0.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 0.5, + 6.75, + 0.75, + 7 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 6.75, + 0.5, + 7, + 0.75 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 0.75, + 6.75, + 1, + 7 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 7, + 1, + 6.75, + 0.75 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 1.25, + 6.75, + 1, + 7 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 25.08009, + 2.54994 + ], + "to": [ + 8.25, + 25.26759, + 2.67494 + ], + "rotation": { + "angle": 22.5, + "axis": "x", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 6.75, + 1, + 7, + 1.25 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 1.25, + 6.75, + 1.5, + 7 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 6.75, + 1.25, + 7, + 1.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 1.5, + 6.75, + 1.75, + 7 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 7, + 1.75, + 6.75, + 1.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 2, + 6.75, + 1.75, + 7 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 24.01562, + 15.16814 + ], + "to": [ + 8.25, + 24.14062, + 15.66814 + ], + "rotation": { + "angle": -45, + "axis": "x", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 6.75, + 1.75, + 7, + 2 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 2, + 6.75, + 2.25, + 7 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 6.75, + 2, + 7, + 2.25 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 2.25, + 6.75, + 2.5, + 7 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 7, + 2.5, + 6.75, + 2.25 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 2.75, + 6.75, + 2.5, + 7 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 26.20739, + 11.60062 + ], + "to": [ + 8.25, + 26.33239, + 12.10062 + ], + "rotation": { + "angle": -22.5, + "axis": "x", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 6.75, + 2.5, + 7, + 2.75 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 2.75, + 6.75, + 3, + 7 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 6.75, + 2.75, + 7, + 3 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 3, + 6.75, + 3.25, + 7 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 7, + 3.25, + 6.75, + 3 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 3.5, + 6.75, + 3.25, + 7 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 26.86708, + 7.4659 + ], + "to": [ + 8.25, + 26.99208, + 7.9659 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 6.75, + 3.25, + 7, + 3.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 3.5, + 6.75, + 3.75, + 7 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 6.75, + 3.5, + 7, + 3.75 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 3.75, + 6.75, + 4, + 7 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 7, + 4, + 6.75, + 3.75 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 4.25, + 6.75, + 4, + 7 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 25.42989, + 3.50431 + ], + "to": [ + 8.25, + 25.92989, + 3.62931 + ], + "rotation": { + "angle": 22.5, + "axis": "x", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 6.75, + 4, + 7, + 4.25 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 4.25, + 6.75, + 4.5, + 7 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 6.75, + 4.25, + 7, + 4.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 4.5, + 6.75, + 4.75, + 7 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 7, + 4.75, + 6.75, + 4.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 5, + 6.75, + 4.75, + 7 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 25.42771, + 12.62596 + ], + "to": [ + 8.25, + 25.92771, + 12.75096 + ], + "rotation": { + "angle": -22.5, + "axis": "x", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 6.75, + 4.75, + 7, + 5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 5, + 6.75, + 5.25, + 7 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 6.75, + 5, + 7, + 5.25 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 5.25, + 6.75, + 5.5, + 7 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 7, + 5.5, + 6.75, + 5.25 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 5.75, + 6.75, + 5.5, + 7 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 25.06157, + 12.26719 + ], + "to": [ + 8.25, + 25.56157, + 12.39219 + ], + "rotation": { + "angle": -22.5, + "axis": "x", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 6.75, + 5.5, + 7, + 5.75 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 5.75, + 6.75, + 6, + 7 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 6.75, + 5.75, + 7, + 6 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 6, + 6.75, + 6.25, + 7 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 7, + 6.25, + 6.75, + 6 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 6.5, + 6.75, + 6.25, + 7 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 25.06375, + 3.86308 + ], + "to": [ + 8.25, + 25.56375, + 3.98808 + ], + "rotation": { + "angle": 22.5, + "axis": "x", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 6.75, + 6.25, + 7, + 6.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 6.5, + 6.75, + 6.75, + 7 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 6.75, + 6.5, + 7, + 6.75 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 6.75, + 6.75, + 7, + 7 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 0.25, + 7.25, + 0, + 7 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 7.25, + 0, + 7, + 0.25 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 14.37553, + 8.31686 + ], + "to": [ + 8.25, + 14.87553, + 8.44186 + ], + "rotation": { + "angle": 22.5, + "axis": "x", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 0.25, + 7, + 0.5, + 7.25 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 7, + 0.25, + 7.25, + 0.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 0.5, + 7, + 0.75, + 7.25 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 7, + 0.5, + 7.25, + 0.75 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 1, + 7.25, + 0.75, + 7 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 7.25, + 0.75, + 7, + 1 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 14.37553, + 7.80814 + ], + "to": [ + 8.25, + 14.87553, + 7.93314 + ], + "rotation": { + "angle": -22.5, + "axis": "x", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 1, + 7, + 1.25, + 7.25 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 7, + 1, + 7.25, + 1.25 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 1.25, + 7, + 1.5, + 7.25 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 7, + 1.25, + 7.25, + 1.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 1.75, + 7.25, + 1.5, + 7 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 7.25, + 1.5, + 7, + 1.75 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 14.7418, + 7.89455 + ], + "to": [ + 8.25, + 15.2418, + 8.01955 + ], + "rotation": { + "angle": 22.5, + "axis": "x", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 1.75, + 7, + 2, + 7.25 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 7, + 1.75, + 7.25, + 2 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 2, + 7, + 2.25, + 7.25 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 7, + 2, + 7.25, + 2.25 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 2.5, + 7.25, + 2.25, + 7 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 7.25, + 2.25, + 7, + 2.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 14.7418, + 8.23045 + ], + "to": [ + 8.25, + 15.2418, + 8.35545 + ], + "rotation": { + "angle": -22.5, + "axis": "x", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 2.5, + 7, + 2.75, + 7.25 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 7, + 2.5, + 7.25, + 2.75 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 2.75, + 7, + 3, + 7.25 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 7, + 2.75, + 7.25, + 3 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 3.25, + 7.25, + 3, + 7 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 7.25, + 3, + 7, + 3.25 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 26.80458, + 7.9091 + ], + "to": [ + 8.25, + 26.99208, + 8.7841 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 3.25, + 7, + 3.5, + 7.25 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 7, + 3.25, + 7.25, + 3.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 3.5, + 7, + 3.75, + 7.25 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 7, + 3.5, + 7.25, + 3.75 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 4, + 7.25, + 3.75, + 7 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 7.25, + 3.75, + 7, + 4 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 25.92958, + 7.1591 + ], + "to": [ + 8.25, + 26.86708, + 8.0341 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 4, + 7, + 4.25, + 7.25 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 7, + 4, + 7.25, + 4.25 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 4.25, + 7, + 4.5, + 7.25 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 7, + 4.25, + 7.25, + 4.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 4.75, + 7.25, + 4.5, + 7 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 7.25, + 4.5, + 7, + 4.75 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 25.92958, + 7.9091 + ], + "to": [ + 8.25, + 26.11708, + 8.2841 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 4.75, + 7, + 5, + 7.25 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 7, + 4.75, + 7.25, + 5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 5, + 7, + 5.25, + 7.25 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 7, + 5, + 7.25, + 5.25 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 5.5, + 7.25, + 5.25, + 7 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 7.25, + 5.25, + 7, + 5.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 25.92958, + 8.2216 + ], + "to": [ + 8.25, + 26.86708, + 9.0966 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 6.25, + 7, + 6.5, + 7.25 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 7, + 6.25, + 7.25, + 6.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 6.5, + 7, + 6.75, + 7.25 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 7, + 6.5, + 7.25, + 6.75 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 7, + 7.25, + 6.75, + 7 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 7.25, + 6.75, + 7, + 7 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 21.59184, + 16.43418 + ], + "to": [ + 8.25, + 22.09184, + 16.68418 + ], + "rotation": { + "angle": -45, + "axis": "x", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 7, + 7, + 7.25, + 7.25 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 0, + 7.25, + 0.25, + 7.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 7.25, + 0, + 7.5, + 0.25 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 0.25, + 7.25, + 0.5, + 7.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 7.5, + 0.5, + 7.25, + 0.25 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 0.75, + 7.25, + 0.5, + 7.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 21.13146, + -0.12657 + ], + "to": [ + 8.25, + 21.63146, + 0.18593 + ], + "rotation": { + "angle": 45, + "axis": "x", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 7.25, + 0.5, + 7.5, + 0.75 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 0.75, + 7.25, + 1, + 7.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 7.25, + 0.75, + 7.5, + 1 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 1, + 7.25, + 1.25, + 7.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 7.5, + 1.25, + 7.25, + 1 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 1.5, + 7.25, + 1.25, + 7.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 23.74635, + 10.52516 + ], + "to": [ + 8.25, + 24.74635, + 10.77516 + ], + "rotation": { + "angle": -22.5, + "axis": "x", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 7.25, + 1.25, + 7.5, + 1.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 1.5, + 7.25, + 1.75, + 7.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 7.25, + 1.5, + 7.5, + 1.75 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 1.75, + 7.25, + 2, + 7.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 7.5, + 2, + 7.25, + 1.75 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 2.25, + 7.25, + 2, + 7.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 11.25162, + 8.15428 + ], + "to": [ + 8.25, + 11.50162, + 8.90428 + ], + "rotation": { + "angle": 22.5, + "axis": "x", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 7.25, + 2, + 7.5, + 2.25 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 2.25, + 7.25, + 2.5, + 7.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 7.25, + 2.25, + 7.5, + 2.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 2.5, + 7.25, + 2.75, + 7.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 7.5, + 2.75, + 7.25, + 2.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 3, + 7.25, + 2.75, + 7.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 10.00162, + 8.65428 + ], + "to": [ + 8.25, + 10.25162, + 9.15428 + ], + "rotation": { + "angle": 22.5, + "axis": "x", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 7.25, + 2.75, + 7.5, + 3 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 3, + 7.25, + 3.25, + 7.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 7.25, + 3, + 7.5, + 3.25 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 3.25, + 7.25, + 3.5, + 7.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 7.5, + 3.5, + 7.25, + 3.25 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 3.75, + 7.25, + 3.5, + 7.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 9.00162, + 9.15428 + ], + "to": [ + 8.25, + 10.25162, + 9.40428 + ], + "rotation": { + "angle": 22.5, + "axis": "x", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 7.25, + 3.5, + 7.5, + 3.75 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 3.75, + 7.25, + 4, + 7.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 7.25, + 3.75, + 7.5, + 4 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 4, + 7.25, + 4.25, + 7.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 7.5, + 4.25, + 7.25, + 4 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 4.5, + 7.25, + 4.25, + 7.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 9.50162, + 9.15428 + ], + "to": [ + 8.25, + 10.75162, + 10.15428 + ], + "rotation": { + "angle": 22.5, + "axis": "x", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 7.25, + 4.25, + 7.5, + 4.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 4.5, + 7.25, + 4.75, + 7.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 7.25, + 4.5, + 7.5, + 4.75 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 4.75, + 7.25, + 5, + 7.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 7.5, + 5, + 7.25, + 4.75 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 5.25, + 7.25, + 5, + 7.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 8.96958, + 7.0068 + ], + "to": [ + 8.25, + 9.53208, + 9.1318 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 7.25, + 5, + 7.5, + 5.25 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 3.25, + 2.25, + 3.75, + 2.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 5.25, + 7.25, + 5.5, + 7.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 2.5, + 3.25, + 3, + 3.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 3.5, + 3, + 3.25, + 2.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 3.25, + 3.25, + 3, + 3.75 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 9.53208, + 8.0068 + ], + "to": [ + 8.25, + 9.71958, + 8.2568 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 7.25, + 5.25, + 7.5, + 5.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 5.5, + 7.25, + 5.75, + 7.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 7.25, + 5.5, + 7.5, + 5.75 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 5.75, + 7.25, + 6, + 7.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 7.5, + 6, + 7.25, + 5.75 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 6.25, + 7.25, + 6, + 7.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 8.46958, + 7.0068 + ], + "to": [ + 8.25, + 8.59458, + 9.2568 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 7.25, + 6, + 7.5, + 6.25 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 3.25, + 3, + 3.75, + 3.25 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 6.25, + 7.25, + 6.5, + 7.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 3.25, + 3.25, + 3.75, + 3.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 3.75, + 0.5, + 3.5, + 0 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 0.5, + 3.5, + 0.25, + 4 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 9.09729, + 9.63525 + ], + "to": [ + 8.25, + 9.22229, + 9.76025 + ], + "rotation": { + "angle": 22.5, + "axis": "x", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 7.25, + 6.25, + 7.5, + 6.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 6.5, + 7.25, + 6.75, + 7.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 7.25, + 6.5, + 7.5, + 6.75 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 6.75, + 7.25, + 7, + 7.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 7.5, + 7, + 7.25, + 6.75 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 7.25, + 7.25, + 7, + 7.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 10.17331, + 11.83677 + ], + "to": [ + 8.25, + 10.36081, + 12.27427 + ], + "rotation": { + "angle": 45, + "axis": "x", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 7.25, + 7, + 7.5, + 7.25 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 7.25, + 7.25, + 7.5, + 7.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 0, + 7.5, + 0.25, + 7.75 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 7.5, + 0, + 7.75, + 0.25 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 0.5, + 7.75, + 0.25, + 7.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 7.75, + 0.25, + 7.5, + 0.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 9.43291, + 5.14675 + ], + "to": [ + 8.25, + 9.55791, + 5.27175 + ], + "rotation": { + "angle": -22.5, + "axis": "x", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 0.5, + 7.5, + 0.75, + 7.75 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 7.5, + 0.5, + 7.75, + 0.75 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 0.75, + 7.5, + 1, + 7.75 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 7.5, + 0.75, + 7.75, + 1 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 1.25, + 7.75, + 1, + 7.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 7.75, + 1, + 7.5, + 1.25 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 8.46787, + 7.50851 + ], + "to": [ + 8.25, + 8.96787, + 8.13351 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 2, + 7.5, + 2.25, + 7.75 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 7.5, + 2, + 7.75, + 2.25 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 2.25, + 7.5, + 2.5, + 7.75 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 7.5, + 2.25, + 7.75, + 2.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 2.75, + 7.75, + 2.5, + 7.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 7.75, + 2.5, + 7.5, + 2.75 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 8.72058, + 10.01196 + ], + "to": [ + 8.25, + 8.84558, + 10.13696 + ], + "rotation": { + "angle": 22.5, + "axis": "x", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 2.75, + 7.5, + 3, + 7.75 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 7.5, + 2.75, + 7.75, + 3 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 3, + 7.5, + 3.25, + 7.75 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 7.5, + 3, + 7.75, + 3.25 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 3.5, + 7.75, + 3.25, + 7.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 7.75, + 3.25, + 7.5, + 3.5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 9.09729, + 6.42725 + ], + "to": [ + 8.25, + 9.22229, + 6.61475 + ], + "rotation": { + "angle": -22.5, + "axis": "x", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 3.5, + 7.5, + 3.75, + 7.75 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 7.5, + 3.5, + 7.75, + 3.75 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 3.75, + 7.5, + 4, + 7.75 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 7.5, + 3.75, + 7.75, + 4 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 4.25, + 7.75, + 4, + 7.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 7.75, + 4, + 7.5, + 4.25 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 10.17331, + 4.22573 + ], + "to": [ + 8.25, + 10.29831, + 4.35073 + ], + "rotation": { + "angle": -45, + "axis": "x", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 4.25, + 7.5, + 4.5, + 7.75 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 7.5, + 4.25, + 7.75, + 4.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 4.5, + 7.5, + 4.75, + 7.75 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 7.5, + 4.5, + 7.75, + 4.75 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 5, + 7.75, + 4.75, + 7.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 7.75, + 4.75, + 7.5, + 5 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 9.43291, + 10.97825 + ], + "to": [ + 8.25, + 9.68291, + 11.10325 + ], + "rotation": { + "angle": 22.5, + "axis": "x", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 5, + 7.5, + 5.25, + 7.75 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 7.5, + 5, + 7.75, + 5.25 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 5.25, + 7.5, + 5.5, + 7.75 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 7.5, + 5.25, + 7.75, + 5.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 5.75, + 7.75, + 5.5, + 7.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 7.75, + 5.5, + 7.5, + 5.75 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 8.46787, + 8.11649 + ], + "to": [ + 8.25, + 8.96787, + 8.74149 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 6.5, + 7.5, + 6.75, + 7.75 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 7.5, + 6.5, + 7.75, + 6.75 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 6.75, + 7.5, + 7, + 7.75 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 7.5, + 6.75, + 7.75, + 7 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 7.25, + 7.75, + 7, + 7.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 7.75, + 7, + 7.5, + 7.25 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 8.72058, + 6.11304 + ], + "to": [ + 8.25, + 8.84558, + 6.23804 + ], + "rotation": { + "angle": -22.5, + "axis": "x", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 7.25, + 7.5, + 7.5, + 7.75 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 7.5, + 7.25, + 7.75, + 7.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 7.5, + 7.5, + 7.75, + 7.75 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 0, + 7.75, + 0.25, + 8 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 8, + 0.25, + 7.75, + 0 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 0.5, + 7.75, + 0.25, + 8 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 11.52666, + 6.71299 + ], + "to": [ + 8.25, + 12.33916, + 7.46299 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 7.75, + 0.25, + 8, + 0.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 0.5, + 7.75, + 0.75, + 8 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 7.75, + 0.5, + 8, + 0.75 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 0.75, + 7.75, + 1, + 8 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 8, + 1, + 7.75, + 0.75 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 1.25, + 7.75, + 1, + 8 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 12.00227, + 7.90665 + ], + "to": [ + 8.25, + 13.00227, + 8.40665 + ], + "rotation": { + "angle": -22.5, + "axis": "x", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 7.75, + 1, + 8, + 1.25 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 1.25, + 7.75, + 1.5, + 8 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 7.75, + 1.25, + 8, + 1.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 1.5, + 7.75, + 1.75, + 8 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 8, + 1.75, + 7.75, + 1.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 2, + 7.75, + 1.75, + 8 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 11.52666, + 8.97451 + ], + "to": [ + 8.25, + 12.33916, + 9.53701 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 7.75, + 1.75, + 8, + 2 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 2, + 7.75, + 2.25, + 8 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 7.75, + 2, + 8, + 2.25 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 2.25, + 7.75, + 2.5, + 8 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 8, + 2.5, + 7.75, + 2.25 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 2.75, + 7.75, + 2.5, + 8 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 11.25162, + 7.34572 + ], + "to": [ + 8.25, + 11.50162, + 8.09572 + ], + "rotation": { + "angle": -22.5, + "axis": "x", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 7.75, + 2.5, + 8, + 2.75 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 2.75, + 7.75, + 3, + 8 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 7.75, + 2.75, + 8, + 3 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 3, + 7.75, + 3.25, + 8 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 8, + 3.25, + 7.75, + 3 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 3.5, + 7.75, + 3.25, + 8 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 10.25162, + 6.84572 + ], + "to": [ + 8.25, + 11.43912, + 7.59572 + ], + "rotation": { + "angle": -22.5, + "axis": "x", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 7.75, + 3.25, + 8, + 3.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 3.5, + 7.75, + 3.75, + 8 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 7.75, + 3.5, + 8, + 3.75 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 3.75, + 7.75, + 4, + 8 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 8, + 4, + 7.75, + 3.75 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 4.25, + 7.75, + 4, + 8 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 9.00162, + 6.84572 + ], + "to": [ + 8.25, + 10.25162, + 7.09572 + ], + "rotation": { + "angle": -22.5, + "axis": "x", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 7.75, + 4, + 8, + 4.25 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 4.25, + 7.75, + 4.5, + 8 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 7.75, + 4.25, + 8, + 4.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 4.5, + 7.75, + 4.75, + 8 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 8, + 4.75, + 7.75, + 4.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 5, + 7.75, + 4.75, + 8 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 9.50162, + 6.09572 + ], + "to": [ + 8.25, + 10.75162, + 7.09572 + ], + "rotation": { + "angle": -22.5, + "axis": "x", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 7.75, + 4.75, + 8, + 5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 5, + 7.75, + 5.25, + 8 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 7.75, + 5, + 8, + 5.25 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 5.25, + 7.75, + 5.5, + 8 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 8, + 5.5, + 7.75, + 5.25 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 5.75, + 7.75, + 5.5, + 8 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 10.00162, + 7.09572 + ], + "to": [ + 8.25, + 10.25162, + 7.59572 + ], + "rotation": { + "angle": -22.5, + "axis": "x", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 7.75, + 5.5, + 8, + 5.75 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 5.75, + 7.75, + 6, + 8 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 7.75, + 5.75, + 8, + 6 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 6, + 7.75, + 6.25, + 8 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 8, + 6.25, + 7.75, + 6 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 6.5, + 7.75, + 6.25, + 8 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 8.96958, + 8.9932 + ], + "to": [ + 8.25, + 9.21958, + 9.2432 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 7.75, + 6.25, + 8, + 6.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 6.5, + 7.75, + 6.75, + 8 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 7.75, + 6.5, + 8, + 6.75 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 6.75, + 7.75, + 7, + 8 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 8, + 7, + 7.75, + 6.75 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 7.25, + 7.75, + 7, + 8 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 8, + 13.13804, + 8.40433 + ], + "to": [ + 8.25, + 13.76304, + 9.15433 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 8.125, + 15.01208, + 8.125 + ] + }, + "faces": { + "north": { + "uv": [ + 7.75, + 7, + 8, + 7.25 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 7.25, + 7.75, + 7.5, + 8 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 7.75, + 7.25, + 8, + 7.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 7.5, + 7.75, + 7.75, + 8 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 8, + 7.75, + 7.75, + 7.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 8, + 7.75, + 7.75, + 8 + ], + "texture": "#0" + } + } + } + ], + "display": { + "thirdperson_righthand": { + "translation": [ + 0, + 2.5, + 1 + ], + "scale": [ + 1.7, + 1.7, + 1.7 + ] + }, + "thirdperson_lefthand": { + "translation": [ + 0, + 2.5, + 0.25 + ], + "scale": [ + 1.7, + 1.7, + 1.7 + ] + }, + "firstperson_righthand": { + "scale": [ + 1.7, + 1.7, + 1.7 + ] + }, + "firstperson_lefthand": { + "scale": [ + 1.7, + 1.7, + 1.7 + ] + }, + "ground": { + "translation": [ + 0, + 1.25, + 0 + ] + }, + "gui": { + "rotation": [ + 90, + 45, + -90 + ], + "translation": [ + -5.25, + -5, + 0 + ] + }, + "fixed": { + "rotation": [ + -90, + 45, + 90 + ], + "translation": [ + 5.5, + -5.25, + -0.75 + ] + } + }, + "groups": [ + { + "name": "Everything", + "origin": [ + 8, + 8, + 8 + ], + "color": 0, + "children": [ + { + "name": "Handle", + "origin": [ + 8, + 8, + 8 + ], + "color": 0, + "children": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9 + ] + }, + { + "name": "Hilt", + "origin": [ + 8.125, + 9.09458, + 7.2568 + ], + "color": 0, + "children": [ + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47 + ] + }, + { + "name": "Blade", + "origin": [ + 0, + 0, + 0 + ], + "color": 0, + "children": [ + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139, + 140, + 141, + 142, + 143, + 144, + 145, + 146, + 147, + 148 + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/surgebinding/resources/assets/surgebinding/models/item/windrunner_honorblade.json b/src/surgebinding/resources/assets/surgebinding/models/item/windrunner_honorblade.json new file mode 100644 index 000000000..2ba0e758b --- /dev/null +++ b/src/surgebinding/resources/assets/surgebinding/models/item/windrunner_honorblade.json @@ -0,0 +1,1012 @@ +{ + "credit": "Made with Blockbench", + "texture_size": [32, 32], + "textures": { + "0": "surgebinding:item/models/shardblade_model/windrunner_honorblade", + "particle": "surgebinding:item/models/shardblade_model/windrunner_honorblade" + }, + "elements": [ + { + "from": [8.90498, 5.2064, 7.375], + "to": [9.02998, 7.5189, 7.6875], + "rotation": {"angle": -45, "axis": "z", "origin": [7.34248, 6.9564, 7.53125]}, + "faces": { + "north": {"uv": [0.5, 2.5, 1, 3.5], "texture": "#0"}, + "east": {"uv": [1, 2.5, 1.5, 3.5], "texture": "#0"}, + "south": {"uv": [1.5, 2.5, 2, 3.5], "texture": "#0"}, + "west": {"uv": [2.5, 2, 3, 3], "texture": "#0"}, + "up": {"uv": [9, 4, 8.5, 3.5], "texture": "#0"}, + "down": {"uv": [4.5, 8.5, 4, 9], "texture": "#0"} + } + }, + { + "from": [8.9599, 5.21398, 7.375], + "to": [9.0849, 7.52648, 7.6875], + "rotation": {"angle": -45, "axis": "z", "origin": [7.3349, 6.96398, 7.53125]}, + "faces": { + "north": {"uv": [3, 0, 3.5, 1], "texture": "#0"}, + "east": {"uv": [3, 1, 3.5, 2], "texture": "#0"}, + "south": {"uv": [3, 2, 3.5, 3], "texture": "#0"}, + "west": {"uv": [2.5, 3, 3, 4], "texture": "#0"}, + "up": {"uv": [9, 6, 8.5, 5.5], "texture": "#0"}, + "down": {"uv": [6.5, 8.5, 6, 9], "texture": "#0"} + } + }, + { + "from": [9.0849, 5.96398, 7.375], + "to": [9.2099, 6.77648, 7.6875], + "rotation": {"angle": -45, "axis": "z", "origin": [7.3349, 6.96398, 7.53125]}, + "faces": { + "north": {"uv": [2.5, 10, 3, 10.5], "texture": "#0"}, + "east": {"uv": [10, 2.5, 10.5, 3], "texture": "#0"}, + "south": {"uv": [3, 10, 3.5, 10.5], "texture": "#0"}, + "west": {"uv": [10, 3, 10.5, 3.5], "texture": "#0"}, + "up": {"uv": [4, 10.5, 3.5, 10], "texture": "#0"}, + "down": {"uv": [10.5, 3.5, 10, 4], "texture": "#0"} + } + }, + { + "from": [8.44378, 5.52236, 7.375], + "to": [8.56878, 5.89736, 7.6875], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8.50628, 5.61611, 7.53125]}, + "faces": { + "north": {"uv": [4, 10, 4.5, 10.5], "texture": "#0"}, + "east": {"uv": [10, 4, 10.5, 4.5], "texture": "#0"}, + "south": {"uv": [4.5, 10, 5, 10.5], "texture": "#0"}, + "west": {"uv": [10, 4.5, 10.5, 5], "texture": "#0"}, + "up": {"uv": [5.5, 10.5, 5, 10], "texture": "#0"}, + "down": {"uv": [10.5, 5, 10, 5.5], "texture": "#0"} + } + }, + { + "from": [7.56184, 4.89042, 7.375], + "to": [7.93684, 5.01542, 7.6875], + "rotation": {"angle": 22.5, "axis": "z", "origin": [7.84309, 4.95292, 7.53125]}, + "faces": { + "north": {"uv": [5.5, 10, 6, 10.5], "texture": "#0"}, + "east": {"uv": [10, 5.5, 10.5, 6], "texture": "#0"}, + "south": {"uv": [6, 10, 6.5, 10.5], "texture": "#0"}, + "west": {"uv": [10, 6, 10.5, 6.5], "texture": "#0"}, + "up": {"uv": [7, 10.5, 6.5, 10], "texture": "#0"}, + "down": {"uv": [10.5, 6.5, 10, 7], "texture": "#0"} + } + }, + { + "from": [7.2099, 4.48911, 7.375], + "to": [7.3349, 4.61411, 7.6875], + "rotation": {"angle": 0, "axis": "z", "origin": [7.9599, 4.55161, 7.53125]}, + "faces": { + "north": {"uv": [3.5, 9, 4, 9.5], "texture": "#0"}, + "east": {"uv": [9, 3.5, 9.5, 4], "texture": "#0"}, + "south": {"uv": [4, 9, 4.5, 9.5], "texture": "#0"}, + "west": {"uv": [9, 4, 9.5, 4.5], "texture": "#0"}, + "up": {"uv": [5, 9.5, 4.5, 9], "texture": "#0"}, + "down": {"uv": [9.5, 4.5, 9, 5], "texture": "#0"} + } + }, + { + "from": [8.84508, 6.12429, 7.375], + "to": [8.97008, 6.24929, 7.6875], + "rotation": {"angle": 0, "axis": "z", "origin": [8.90758, 6.18679, 7.53125]}, + "faces": { + "north": {"uv": [8.5, 4, 9, 4.5], "texture": "#0"}, + "east": {"uv": [4.5, 8.5, 5, 9], "texture": "#0"}, + "south": {"uv": [8.5, 4.5, 9, 5], "texture": "#0"}, + "west": {"uv": [5, 8.5, 5.5, 9], "texture": "#0"}, + "up": {"uv": [9, 5.5, 8.5, 5], "texture": "#0"}, + "down": {"uv": [6, 8.5, 5.5, 9], "texture": "#0"} + } + }, + { + "from": [7.5, 7.5, 7.5], + "to": [8.5, 11.4375, 7.5625], + "rotation": {"angle": 0, "axis": "y", "origin": [0.5, -0.5625, -1.4375]}, + "faces": { + "north": {"uv": [2, 0, 2.5, 2], "texture": "#0"}, + "east": {"uv": [2, 2, 2.5, 4], "texture": "#0"}, + "south": {"uv": [0, 2.5, 0.5, 4.5], "texture": "#0"}, + "west": {"uv": [2.5, 0, 3, 2], "texture": "#0"}, + "up": {"uv": [4, 1.5, 3.5, 1], "texture": "#0"}, + "down": {"uv": [2, 3.5, 1.5, 4], "texture": "#0"} + } + }, + { + "from": [7.5, 6.5, 7.4375], + "to": [8.5, 7.5, 7.625], + "rotation": {"angle": 0, "axis": "y", "origin": [0.5, -0.5625, -1.4375]}, + "faces": { + "north": {"uv": [9.5, 7.5, 10, 8], "texture": "#0"}, + "east": {"uv": [8, 9.5, 8.5, 10], "texture": "#0"}, + "south": {"uv": [9.5, 8, 10, 8.5], "texture": "#0"}, + "west": {"uv": [8.5, 9.5, 9, 10], "texture": "#0"}, + "up": {"uv": [10, 9, 9.5, 8.5], "texture": "#0"}, + "down": {"uv": [9.5, 9.5, 9, 10], "texture": "#0"} + } + }, + { + "from": [7.5, 7.44998, 7.62646], + "to": [8.5, 7.61998, 7.68896], + "rotation": {"angle": 22.5, "axis": "x", "origin": [8, 7.94998, 7.65771]}, + "faces": { + "north": {"uv": [9.5, 9, 10, 9.5], "texture": "#0"}, + "east": {"uv": [9.5, 9.5, 10, 10], "texture": "#0"}, + "south": {"uv": [0, 10, 0.5, 10.5], "texture": "#0"}, + "west": {"uv": [10, 0, 10.5, 0.5], "texture": "#0"}, + "up": {"uv": [1, 10.5, 0.5, 10], "texture": "#0"}, + "down": {"uv": [10.5, 0.5, 10, 1], "texture": "#0"} + } + }, + { + "from": [7.5, 7.4809, 7.529], + "to": [8.5, 7.6509, 7.5915], + "rotation": {"angle": -22.5, "axis": "x", "origin": [8, 7.57465, 7.56025]}, + "faces": { + "north": {"uv": [1, 10, 1.5, 10.5], "texture": "#0"}, + "east": {"uv": [10, 1, 10.5, 1.5], "texture": "#0"}, + "south": {"uv": [1.5, 10, 2, 10.5], "texture": "#0"}, + "west": {"uv": [10, 1.5, 10.5, 2], "texture": "#0"}, + "up": {"uv": [2.5, 10.5, 2, 10], "texture": "#0"}, + "down": {"uv": [10.5, 2, 10, 2.5], "texture": "#0"} + } + }, + { + "from": [7.27998, 6.3939, 7.4375], + "to": [7.40498, 7.5189, 7.625], + "rotation": {"angle": -22.5, "axis": "z", "origin": [7.34248, 6.9564, 7.53125]}, + "faces": { + "north": {"uv": [1.5, 5, 2, 5.5], "texture": "#0"}, + "east": {"uv": [5, 1.5, 5.5, 2], "texture": "#0"}, + "south": {"uv": [2, 5, 2.5, 5.5], "texture": "#0"}, + "west": {"uv": [5, 2, 5.5, 2.5], "texture": "#0"}, + "up": {"uv": [3, 5.5, 2.5, 5], "texture": "#0"}, + "down": {"uv": [5.5, 2.5, 5, 3], "texture": "#0"} + } + }, + { + "from": [7.40498, 6.4564, 7.4375], + "to": [7.84248, 7.5189, 7.625], + "rotation": {"angle": -22.5, "axis": "z", "origin": [7.34248, 6.9564, 7.53125]}, + "faces": { + "north": {"uv": [9.5, 1.5, 10, 2], "texture": "#0"}, + "east": {"uv": [2, 9.5, 2.5, 10], "texture": "#0"}, + "south": {"uv": [9.5, 2, 10, 2.5], "texture": "#0"}, + "west": {"uv": [2.5, 9.5, 3, 10], "texture": "#0"}, + "up": {"uv": [10, 3, 9.5, 2.5], "texture": "#0"}, + "down": {"uv": [3.5, 9.5, 3, 10], "texture": "#0"} + } + }, + { + "from": [7.0496, 6.50862, 7.4375], + "to": [7.1121, 6.63362, 7.625], + "rotation": {"angle": 45, "axis": "z", "origin": [7.26835, 6.57112, 7.53125]}, + "faces": { + "north": {"uv": [4.5, 5, 5, 5.5], "texture": "#0"}, + "east": {"uv": [5, 4.5, 5.5, 5], "texture": "#0"}, + "south": {"uv": [5, 5, 5.5, 5.5], "texture": "#0"}, + "west": {"uv": [0, 5.5, 0.5, 6], "texture": "#0"}, + "up": {"uv": [6, 0.5, 5.5, 0], "texture": "#0"}, + "down": {"uv": [1, 5.5, 0.5, 6], "texture": "#0"} + } + }, + { + "from": [7.18776, 6.41052, 7.4375], + "to": [7.66276, 6.53552, 7.625], + "rotation": {"angle": 0, "axis": "z", "origin": [7.28151, 6.47302, 7.53125]}, + "faces": { + "north": {"uv": [5.5, 0.5, 6, 1], "texture": "#0"}, + "east": {"uv": [1, 5.5, 1.5, 6], "texture": "#0"}, + "south": {"uv": [5.5, 1, 6, 1.5], "texture": "#0"}, + "west": {"uv": [1.5, 5.5, 2, 6], "texture": "#0"}, + "up": {"uv": [6, 2, 5.5, 1.5], "texture": "#0"}, + "down": {"uv": [2.5, 5.5, 2, 6], "texture": "#0"} + } + }, + { + "from": [7.55162, 5.79665, 7.4375], + "to": [8.48912, 6.52165, 7.625], + "rotation": {"angle": 0, "axis": "z", "origin": [7.61412, 6.15915, 7.53125]}, + "faces": { + "north": {"uv": [6.5, 0.5, 7, 1], "texture": "#0"}, + "east": {"uv": [1, 6.5, 1.5, 7], "texture": "#0"}, + "south": {"uv": [6.5, 1, 7, 1.5], "texture": "#0"}, + "west": {"uv": [1.5, 6.5, 2, 7], "texture": "#0"}, + "up": {"uv": [7, 2, 6.5, 1.5], "texture": "#0"}, + "down": {"uv": [2.5, 6.5, 2, 7], "texture": "#0"} + } + }, + { + "from": [7.37037, 6.38662, 7.4375], + "to": [7.47037, 6.51162, 7.625], + "rotation": {"angle": -22.5, "axis": "z", "origin": [7.42037, 6.44912, 7.53125]}, + "faces": { + "north": {"uv": [5.5, 2, 6, 2.5], "texture": "#0"}, + "east": {"uv": [2.5, 5.5, 3, 6], "texture": "#0"}, + "south": {"uv": [5.5, 2.5, 6, 3], "texture": "#0"}, + "west": {"uv": [3, 5.5, 3.5, 6], "texture": "#0"}, + "up": {"uv": [6, 3.5, 5.5, 3], "texture": "#0"}, + "down": {"uv": [4, 5.5, 3.5, 6], "texture": "#0"} + } + }, + { + "from": [7.40969, 6.31859, 7.4375], + "to": [7.63469, 6.44359, 7.625], + "rotation": {"angle": -45, "axis": "z", "origin": [7.52219, 6.38109, 7.53125]}, + "faces": { + "north": {"uv": [5.5, 3.5, 6, 4], "texture": "#0"}, + "east": {"uv": [4, 5.5, 4.5, 6], "texture": "#0"}, + "south": {"uv": [5.5, 4, 6, 4.5], "texture": "#0"}, + "west": {"uv": [4.5, 5.5, 5, 6], "texture": "#0"}, + "up": {"uv": [6, 5, 5.5, 4.5], "texture": "#0"}, + "down": {"uv": [5.5, 5.5, 5, 6], "texture": "#0"} + } + }, + { + "from": [7.52773, 6.22926, 7.4375], + "to": [7.65273, 6.32926, 7.625], + "rotation": {"angle": 22.5, "axis": "z", "origin": [7.59023, 6.27926, 7.53125]}, + "faces": { + "north": {"uv": [5.5, 5, 6, 5.5], "texture": "#0"}, + "east": {"uv": [5.5, 5.5, 6, 6], "texture": "#0"}, + "south": {"uv": [0, 6, 0.5, 6.5], "texture": "#0"}, + "west": {"uv": [6, 0, 6.5, 0.5], "texture": "#0"}, + "up": {"uv": [1, 6.5, 0.5, 6], "texture": "#0"}, + "down": {"uv": [6.5, 0.5, 6, 1], "texture": "#0"} + } + }, + { + "from": [7.12526, 5.78278, 7.4375], + "to": [7.41276, 5.90778, 7.625], + "rotation": {"angle": 0, "axis": "z", "origin": [7.28151, 5.84528, 7.53125]}, + "faces": { + "north": {"uv": [5.5, 6, 6, 6.5], "texture": "#0"}, + "east": {"uv": [6, 5.5, 6.5, 6], "texture": "#0"}, + "south": {"uv": [6, 6, 6.5, 6.5], "texture": "#0"}, + "west": {"uv": [0, 6.5, 0.5, 7], "texture": "#0"}, + "up": {"uv": [7, 0.5, 6.5, 0], "texture": "#0"}, + "down": {"uv": [1, 6.5, 0.5, 7], "texture": "#0"} + } + }, + { + "from": [7.37037, 5.80667, 7.4375], + "to": [7.47037, 5.93167, 7.625], + "rotation": {"angle": 22.5, "axis": "z", "origin": [7.42037, 5.86917, 7.53125]}, + "faces": { + "north": {"uv": [4, 6, 4.5, 6.5], "texture": "#0"}, + "east": {"uv": [6, 4, 6.5, 4.5], "texture": "#0"}, + "south": {"uv": [4.5, 6, 5, 6.5], "texture": "#0"}, + "west": {"uv": [6, 4.5, 6.5, 5], "texture": "#0"}, + "up": {"uv": [5.5, 6.5, 5, 6], "texture": "#0"}, + "down": {"uv": [6.5, 5, 6, 5.5], "texture": "#0"} + } + }, + { + "from": [7.36932, 6.4342, 7.4375], + "to": [7.46932, 6.5592, 7.625], + "rotation": {"angle": 22.5, "axis": "z", "origin": [7.41932, 5.8717, 7.53125]}, + "faces": { + "north": {"uv": [6.5, 5, 7, 5.5], "texture": "#0"}, + "east": {"uv": [5.5, 6.5, 6, 7], "texture": "#0"}, + "south": {"uv": [6.5, 5.5, 7, 6], "texture": "#0"}, + "west": {"uv": [6, 6.5, 6.5, 7], "texture": "#0"}, + "up": {"uv": [7, 6.5, 6.5, 6], "texture": "#0"}, + "down": {"uv": [7, 6.5, 6.5, 7], "texture": "#0"} + } + }, + { + "from": [7.40969, 5.81221, 7.4375], + "to": [7.63469, 5.99971, 7.625], + "rotation": {"angle": 45, "axis": "z", "origin": [7.52219, 5.93721, 7.53125]}, + "faces": { + "north": {"uv": [2.5, 6, 3, 6.5], "texture": "#0"}, + "east": {"uv": [6, 2.5, 6.5, 3], "texture": "#0"}, + "south": {"uv": [3, 6, 3.5, 6.5], "texture": "#0"}, + "west": {"uv": [6, 3, 6.5, 3.5], "texture": "#0"}, + "up": {"uv": [4, 6.5, 3.5, 6], "texture": "#0"}, + "down": {"uv": [6.5, 3.5, 6, 4], "texture": "#0"} + } + }, + { + "from": [7.52773, 5.98904, 7.4375], + "to": [7.65273, 6.08904, 7.625], + "rotation": {"angle": -22.5, "axis": "z", "origin": [7.59023, 6.03904, 7.53125]}, + "faces": { + "north": {"uv": [1, 6, 1.5, 6.5], "texture": "#0"}, + "east": {"uv": [6, 1, 6.5, 1.5], "texture": "#0"}, + "south": {"uv": [1.5, 6, 2, 6.5], "texture": "#0"}, + "west": {"uv": [6, 1.5, 6.5, 2], "texture": "#0"}, + "up": {"uv": [2.5, 6.5, 2, 6], "texture": "#0"}, + "down": {"uv": [6.5, 2, 6, 2.5], "texture": "#0"} + } + }, + { + "from": [7.13015, 5.80667, 7.4375], + "to": [7.23015, 5.93167, 7.625], + "rotation": {"angle": -22.5, "axis": "z", "origin": [7.18015, 5.86917, 7.53125]}, + "faces": { + "north": {"uv": [6.5, 3.5, 7, 4], "texture": "#0"}, + "east": {"uv": [4, 6.5, 4.5, 7], "texture": "#0"}, + "south": {"uv": [6.5, 4, 7, 4.5], "texture": "#0"}, + "west": {"uv": [4.5, 6.5, 5, 7], "texture": "#0"}, + "up": {"uv": [7, 5, 6.5, 4.5], "texture": "#0"}, + "down": {"uv": [5.5, 6.5, 5, 7], "texture": "#0"} + } + }, + { + "from": [7.02832, 5.87471, 7.4375], + "to": [7.25332, 5.99971, 7.625], + "rotation": {"angle": -45, "axis": "z", "origin": [7.07832, 5.93721, 7.53125]}, + "faces": { + "north": {"uv": [6.5, 2, 7, 2.5], "texture": "#0"}, + "east": {"uv": [2.5, 6.5, 3, 7], "texture": "#0"}, + "south": {"uv": [6.5, 2.5, 7, 3], "texture": "#0"}, + "west": {"uv": [3, 6.5, 3.5, 7], "texture": "#0"}, + "up": {"uv": [7, 3.5, 6.5, 3], "texture": "#0"}, + "down": {"uv": [4, 6.5, 3.5, 7], "texture": "#0"} + } + }, + { + "from": [6.97105, 5.789, 7.4375], + "to": [7.19605, 5.914, 7.625], + "rotation": {"angle": -22.5, "axis": "z", "origin": [7.02105, 5.8515, 7.53125]}, + "faces": { + "north": {"uv": [0, 7, 0.5, 7.5], "texture": "#0"}, + "east": {"uv": [7, 0, 7.5, 0.5], "texture": "#0"}, + "south": {"uv": [0.5, 7, 1, 7.5], "texture": "#0"}, + "west": {"uv": [7, 0.5, 7.5, 1], "texture": "#0"}, + "up": {"uv": [1.5, 7.5, 1, 7], "texture": "#0"}, + "down": {"uv": [7.5, 1, 7, 1.5], "texture": "#0"} + } + }, + { + "from": [6.95094, 5.68789, 7.4375], + "to": [7.42594, 5.81289, 7.625], + "rotation": {"angle": 0, "axis": "z", "origin": [7.00094, 5.75039, 7.53125]}, + "faces": { + "north": {"uv": [4.5, 7, 5, 7.5], "texture": "#0"}, + "east": {"uv": [7, 4.5, 7.5, 5], "texture": "#0"}, + "south": {"uv": [5, 7, 5.5, 7.5], "texture": "#0"}, + "west": {"uv": [7, 5, 7.5, 5.5], "texture": "#0"}, + "up": {"uv": [6, 7.5, 5.5, 7], "texture": "#0"}, + "down": {"uv": [7.5, 5.5, 7, 6], "texture": "#0"} + } + }, + { + "from": [7.02832, 5.50106, 7.4375], + "to": [7.19082, 5.62606, 7.625], + "rotation": {"angle": 45, "axis": "z", "origin": [7.07832, 5.56356, 7.53125]}, + "faces": { + "north": {"uv": [3, 7, 3.5, 7.5], "texture": "#0"}, + "east": {"uv": [7, 3, 7.5, 3.5], "texture": "#0"}, + "south": {"uv": [3.5, 7, 4, 7.5], "texture": "#0"}, + "west": {"uv": [7, 3.5, 7.5, 4], "texture": "#0"}, + "up": {"uv": [4.5, 7.5, 4, 7], "texture": "#0"}, + "down": {"uv": [7.5, 4, 7, 4.5], "texture": "#0"} + } + }, + { + "from": [7.13157, 5.56193, 7.4375], + "to": [7.19407, 5.68693, 7.625], + "rotation": {"angle": 22.5, "axis": "z", "origin": [7.16282, 5.62443, 7.53125]}, + "faces": { + "north": {"uv": [6, 7, 6.5, 7.5], "texture": "#0"}, + "east": {"uv": [7, 6, 7.5, 6.5], "texture": "#0"}, + "south": {"uv": [6.5, 7, 7, 7.5], "texture": "#0"}, + "west": {"uv": [7, 6.5, 7.5, 7], "texture": "#0"}, + "up": {"uv": [7.5, 7.5, 7, 7], "texture": "#0"}, + "down": {"uv": [0.5, 7.5, 0, 8], "texture": "#0"} + } + }, + { + "from": [7.29965, 5.56193, 7.4375], + "to": [7.42465, 5.74943, 7.625], + "rotation": {"angle": -22.5, "axis": "z", "origin": [7.3309, 5.62443, 7.53125]}, + "faces": { + "north": {"uv": [7.5, 1.5, 8, 2], "texture": "#0"}, + "east": {"uv": [2, 7.5, 2.5, 8], "texture": "#0"}, + "south": {"uv": [7.5, 2, 8, 2.5], "texture": "#0"}, + "west": {"uv": [2.5, 7.5, 3, 8], "texture": "#0"}, + "up": {"uv": [8, 3, 7.5, 2.5], "texture": "#0"}, + "down": {"uv": [3.5, 7.5, 3, 8], "texture": "#0"} + } + }, + { + "from": [7.3084, 5.51432, 7.4375], + "to": [7.4959, 5.63932, 7.625], + "rotation": {"angle": -45, "axis": "z", "origin": [7.40215, 5.57682, 7.53125]}, + "faces": { + "north": {"uv": [7.5, 3, 8, 3.5], "texture": "#0"}, + "east": {"uv": [3.5, 7.5, 4, 8], "texture": "#0"}, + "south": {"uv": [7.5, 3.5, 8, 4], "texture": "#0"}, + "west": {"uv": [4, 7.5, 4.5, 8], "texture": "#0"}, + "up": {"uv": [8, 4.5, 7.5, 4], "texture": "#0"}, + "down": {"uv": [5, 7.5, 4.5, 8], "texture": "#0"} + } + }, + { + "from": [7.38725, 5.47433, 7.4375], + "to": [7.51225, 5.53683, 7.625], + "rotation": {"angle": 22.5, "axis": "z", "origin": [7.44975, 5.50558, 7.53125]}, + "faces": { + "north": {"uv": [7.5, 4.5, 8, 5], "texture": "#0"}, + "east": {"uv": [5, 7.5, 5.5, 8], "texture": "#0"}, + "south": {"uv": [7.5, 5, 8, 5.5], "texture": "#0"}, + "west": {"uv": [5.5, 7.5, 6, 8], "texture": "#0"}, + "up": {"uv": [8, 6, 7.5, 5.5], "texture": "#0"}, + "down": {"uv": [6.5, 7.5, 6, 8], "texture": "#0"} + } + }, + { + "from": [7.40397, 5.20279, 7.4375], + "to": [8.02897, 5.82779, 7.625], + "rotation": {"angle": 0, "axis": "z", "origin": [7.46647, 5.42154, 7.53125]}, + "faces": { + "north": {"uv": [7.5, 6, 8, 6.5], "texture": "#0"}, + "east": {"uv": [6.5, 7.5, 7, 8], "texture": "#0"}, + "south": {"uv": [7.5, 6.5, 8, 7], "texture": "#0"}, + "west": {"uv": [7, 7.5, 7.5, 8], "texture": "#0"}, + "up": {"uv": [8, 7.5, 7.5, 7], "texture": "#0"}, + "down": {"uv": [8, 7.5, 7.5, 8], "texture": "#0"} + } + }, + { + "from": [8.02897, 5.57779, 7.4375], + "to": [8.34147, 5.82779, 7.625], + "rotation": {"angle": 0, "axis": "z", "origin": [7.46647, 5.42154, 7.53125]}, + "faces": { + "north": {"uv": [5, 9, 5.5, 9.5], "texture": "#0"}, + "east": {"uv": [9, 5, 9.5, 5.5], "texture": "#0"}, + "south": {"uv": [5.5, 9, 6, 9.5], "texture": "#0"}, + "west": {"uv": [9, 5.5, 9.5, 6], "texture": "#0"}, + "up": {"uv": [6.5, 9.5, 6, 9], "texture": "#0"}, + "down": {"uv": [9.5, 6, 9, 6.5], "texture": "#0"} + } + }, + { + "from": [8.34147, 5.70279, 7.4375], + "to": [8.40397, 5.82779, 7.625], + "rotation": {"angle": 0, "axis": "z", "origin": [7.46647, 5.42154, 7.53125]}, + "faces": { + "north": {"uv": [8, 9, 8.5, 9.5], "texture": "#0"}, + "east": {"uv": [9, 8, 9.5, 8.5], "texture": "#0"}, + "south": {"uv": [8.5, 9, 9, 9.5], "texture": "#0"}, + "west": {"uv": [9, 8.5, 9.5, 9], "texture": "#0"}, + "up": {"uv": [9.5, 9.5, 9, 9], "texture": "#0"}, + "down": {"uv": [0.5, 9.5, 0, 10], "texture": "#0"} + } + }, + { + "from": [8.02897, 5.39029, 7.4375], + "to": [8.21647, 5.57779, 7.625], + "rotation": {"angle": 0, "axis": "z", "origin": [7.46647, 5.42154, 7.53125]}, + "faces": { + "north": {"uv": [6.5, 9, 7, 9.5], "texture": "#0"}, + "east": {"uv": [9, 6.5, 9.5, 7], "texture": "#0"}, + "south": {"uv": [7, 9, 7.5, 9.5], "texture": "#0"}, + "west": {"uv": [9, 7, 9.5, 7.5], "texture": "#0"}, + "up": {"uv": [8, 9.5, 7.5, 9], "texture": "#0"}, + "down": {"uv": [9.5, 7.5, 9, 8], "texture": "#0"} + } + }, + { + "from": [7.38725, 4.93125, 7.4375], + "to": [7.82475, 5.36875, 7.625], + "rotation": {"angle": -22.5, "axis": "z", "origin": [7.44975, 5.3375, 7.53125]}, + "faces": { + "north": {"uv": [0, 8, 0.5, 8.5], "texture": "#0"}, + "east": {"uv": [8, 0, 8.5, 0.5], "texture": "#0"}, + "south": {"uv": [0.5, 8, 1, 8.5], "texture": "#0"}, + "west": {"uv": [8, 0.5, 8.5, 1], "texture": "#0"}, + "up": {"uv": [1.5, 8.5, 1, 8], "texture": "#0"}, + "down": {"uv": [8.5, 1, 8, 1.5], "texture": "#0"} + } + }, + { + "from": [7.23654, 4.61109, 7.4375], + "to": [7.42404, 4.98609, 7.625], + "rotation": {"angle": 0, "axis": "z", "origin": [7.29904, 4.95484, 7.53125]}, + "faces": { + "north": {"uv": [1.5, 8, 2, 8.5], "texture": "#0"}, + "east": {"uv": [8, 1.5, 8.5, 2], "texture": "#0"}, + "south": {"uv": [2, 8, 2.5, 8.5], "texture": "#0"}, + "west": {"uv": [8, 2, 8.5, 2.5], "texture": "#0"}, + "up": {"uv": [3, 8.5, 2.5, 8], "texture": "#0"}, + "down": {"uv": [8.5, 2.5, 8, 3], "texture": "#0"} + } + }, + { + "from": [7.42404, 4.79859, 7.4375], + "to": [7.54904, 4.98609, 7.625], + "rotation": {"angle": 0, "axis": "z", "origin": [7.29904, 4.95484, 7.53125]}, + "faces": { + "north": {"uv": [9.5, 0, 10, 0.5], "texture": "#0"}, + "east": {"uv": [0.5, 9.5, 1, 10], "texture": "#0"}, + "south": {"uv": [9.5, 0.5, 10, 1], "texture": "#0"}, + "west": {"uv": [1, 9.5, 1.5, 10], "texture": "#0"}, + "up": {"uv": [10, 1.5, 9.5, 1], "texture": "#0"}, + "down": {"uv": [2, 9.5, 1.5, 10], "texture": "#0"} + } + }, + { + "from": [7.15311, 5.57864, 7.4375], + "to": [7.34061, 5.70364, 7.625], + "rotation": {"angle": 0, "axis": "z", "origin": [7.24686, 5.64114, 7.53125]}, + "faces": { + "north": {"uv": [7.5, 0, 8, 0.5], "texture": "#0"}, + "east": {"uv": [0.5, 7.5, 1, 8], "texture": "#0"}, + "south": {"uv": [7.5, 0.5, 8, 1], "texture": "#0"}, + "west": {"uv": [1, 7.5, 1.5, 8], "texture": "#0"}, + "up": {"uv": [8, 1.5, 7.5, 1], "texture": "#0"}, + "down": {"uv": [2, 7.5, 1.5, 8], "texture": "#0"} + } + }, + { + "from": [8.38619, 6.27228, 7.4375], + "to": [8.51119, 6.33478, 7.625], + "rotation": {"angle": 0, "axis": "z", "origin": [8.44869, 6.30353, 7.53125]}, + "faces": { + "north": {"uv": [8.5, 2, 9, 2.5], "texture": "#0"}, + "east": {"uv": [2.5, 8.5, 3, 9], "texture": "#0"}, + "south": {"uv": [8.5, 2.5, 9, 3], "texture": "#0"}, + "west": {"uv": [3, 8.5, 3.5, 9], "texture": "#0"}, + "up": {"uv": [9, 3.5, 8.5, 3], "texture": "#0"}, + "down": {"uv": [4, 8.5, 3.5, 9], "texture": "#0"} + } + }, + { + "from": [8.40291, 6.29382, 7.4375], + "to": [8.52791, 6.48132, 7.625], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8.46541, 6.38757, 7.53125]}, + "faces": { + "north": {"uv": [8.5, 0.5, 9, 1], "texture": "#0"}, + "east": {"uv": [1, 8.5, 1.5, 9], "texture": "#0"}, + "south": {"uv": [8.5, 1, 9, 1.5], "texture": "#0"}, + "west": {"uv": [1.5, 8.5, 2, 9], "texture": "#0"}, + "up": {"uv": [9, 2, 8.5, 1.5], "texture": "#0"}, + "down": {"uv": [2.5, 8.5, 2, 9], "texture": "#0"} + } + }, + { + "from": [8.48177, 6.39631, 7.4375], + "to": [8.54427, 6.52131, 7.625], + "rotation": {"angle": 45, "axis": "z", "origin": [8.51302, 6.45881, 7.53125]}, + "faces": { + "north": {"uv": [7.5, 8, 8, 8.5], "texture": "#0"}, + "east": {"uv": [8, 7.5, 8.5, 8], "texture": "#0"}, + "south": {"uv": [8, 8, 8.5, 8.5], "texture": "#0"}, + "west": {"uv": [0, 8.5, 0.5, 9], "texture": "#0"}, + "up": {"uv": [9, 0.5, 8.5, 0], "texture": "#0"}, + "down": {"uv": [1, 8.5, 0.5, 9], "texture": "#0"} + } + }, + { + "from": [8.49051, 6.44392, 7.4375], + "to": [8.61551, 6.56892, 7.625], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8.58426, 6.50642, 7.53125]}, + "faces": { + "north": {"uv": [6, 8, 6.5, 8.5], "texture": "#0"}, + "east": {"uv": [8, 6, 8.5, 6.5], "texture": "#0"}, + "south": {"uv": [6.5, 8, 7, 8.5], "texture": "#0"}, + "west": {"uv": [8, 6.5, 8.5, 7], "texture": "#0"}, + "up": {"uv": [7.5, 8.5, 7, 8], "texture": "#0"}, + "down": {"uv": [8.5, 7, 8, 7.5], "texture": "#0"} + } + }, + { + "from": [8.57455, 6.46064, 7.4375], + "to": [8.76205, 6.58564, 7.625], + "rotation": {"angle": 0, "axis": "z", "origin": [8.6683, 6.52314, 7.53125]}, + "faces": { + "north": {"uv": [4.5, 8, 5, 8.5], "texture": "#0"}, + "east": {"uv": [8, 4.5, 8.5, 5], "texture": "#0"}, + "south": {"uv": [5, 8, 5.5, 8.5], "texture": "#0"}, + "west": {"uv": [8, 5, 8.5, 5.5], "texture": "#0"}, + "up": {"uv": [6, 8.5, 5.5, 8], "texture": "#0"}, + "down": {"uv": [8.5, 5.5, 8, 6], "texture": "#0"} + } + }, + { + "from": [8.63705, 6.02143, 7.4375], + "to": [8.76205, 6.14643, 7.625], + "rotation": {"angle": 0, "axis": "z", "origin": [8.6683, 6.08393, 7.53125]}, + "faces": { + "north": {"uv": [2, 9, 2.5, 9.5], "texture": "#0"}, + "east": {"uv": [9, 2, 9.5, 2.5], "texture": "#0"}, + "south": {"uv": [2.5, 9, 3, 9.5], "texture": "#0"}, + "west": {"uv": [9, 2.5, 9.5, 3], "texture": "#0"}, + "up": {"uv": [3.5, 9.5, 3, 9], "texture": "#0"}, + "down": {"uv": [9.5, 3, 9, 3.5], "texture": "#0"} + } + }, + { + "from": [8.49051, 5.78814, 7.4375], + "to": [8.67801, 6.16314, 7.625], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8.58426, 6.10064, 7.53125]}, + "faces": { + "north": {"uv": [0.5, 9, 1, 9.5], "texture": "#0"}, + "east": {"uv": [9, 0.5, 9.5, 1], "texture": "#0"}, + "south": {"uv": [1, 9, 1.5, 9.5], "texture": "#0"}, + "west": {"uv": [9, 1, 9.5, 1.5], "texture": "#0"}, + "up": {"uv": [2, 9.5, 1.5, 9], "texture": "#0"}, + "down": {"uv": [9.5, 1.5, 9, 2], "texture": "#0"} + } + }, + { + "from": [8.48177, 6.08575, 7.4375], + "to": [8.54427, 6.21075, 7.625], + "rotation": {"angle": -45, "axis": "z", "origin": [8.51302, 6.14825, 7.53125]}, + "faces": { + "north": {"uv": [8.5, 7.5, 9, 8], "texture": "#0"}, + "east": {"uv": [8, 8.5, 8.5, 9], "texture": "#0"}, + "south": {"uv": [8.5, 8, 9, 8.5], "texture": "#0"}, + "west": {"uv": [8.5, 8.5, 9, 9], "texture": "#0"}, + "up": {"uv": [0.5, 9.5, 0, 9], "texture": "#0"}, + "down": {"uv": [9.5, 0, 9, 0.5], "texture": "#0"} + } + }, + { + "from": [8.40291, 6.12574, 7.4375], + "to": [8.52791, 6.31324, 7.625], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8.46541, 6.21949, 7.53125]}, + "faces": { + "north": {"uv": [8.5, 6, 9, 6.5], "texture": "#0"}, + "east": {"uv": [6.5, 8.5, 7, 9], "texture": "#0"}, + "south": {"uv": [8.5, 6.5, 9, 7], "texture": "#0"}, + "west": {"uv": [7, 8.5, 7.5, 9], "texture": "#0"}, + "up": {"uv": [9, 7.5, 8.5, 7], "texture": "#0"}, + "down": {"uv": [8, 8.5, 7.5, 9], "texture": "#0"} + } + }, + { + "from": [8.72109, 6.44392, 7.4375], + "to": [8.84609, 6.56892, 7.625], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8.75234, 6.50642, 7.53125]}, + "faces": { + "north": {"uv": [3, 8, 3.5, 8.5], "texture": "#0"}, + "east": {"uv": [8, 3, 8.5, 3.5], "texture": "#0"}, + "south": {"uv": [3.5, 8, 4, 8.5], "texture": "#0"}, + "west": {"uv": [8, 3.5, 8.5, 4], "texture": "#0"}, + "up": {"uv": [4.5, 8.5, 4, 8], "texture": "#0"}, + "down": {"uv": [8.5, 4, 8, 4.5], "texture": "#0"} + } + }, + { + "from": [6.97105, 5.58678, 7.4375], + "to": [7.19605, 5.71178, 7.625], + "rotation": {"angle": 22.5, "axis": "z", "origin": [7.02105, 5.64928, 7.53125]}, + "faces": { + "north": {"uv": [1.5, 7, 2, 7.5], "texture": "#0"}, + "east": {"uv": [7, 1.5, 7.5, 2], "texture": "#0"}, + "south": {"uv": [2, 7, 2.5, 7.5], "texture": "#0"}, + "west": {"uv": [7, 2, 7.5, 2.5], "texture": "#0"}, + "up": {"uv": [3, 7.5, 2.5, 7], "texture": "#0"}, + "down": {"uv": [7.5, 2.5, 7, 3], "texture": "#0"} + } + }, + { + "from": [8.59502, 6.3939, 7.4375], + "to": [8.72002, 7.5189, 7.625], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8.65752, 6.9564, 7.53125]}, + "faces": { + "north": {"uv": [3, 5, 3.5, 5.5], "texture": "#0"}, + "east": {"uv": [5, 3, 5.5, 3.5], "texture": "#0"}, + "south": {"uv": [3.5, 5, 4, 5.5], "texture": "#0"}, + "west": {"uv": [5, 3.5, 5.5, 4], "texture": "#0"}, + "up": {"uv": [4.5, 5.5, 4, 5], "texture": "#0"}, + "down": {"uv": [5.5, 4, 5, 4.5], "texture": "#0"} + } + }, + { + "from": [8.28252, 6.5189, 7.4375], + "to": [8.59502, 7.5189, 7.625], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8.65752, 6.9564, 7.53125]}, + "faces": { + "north": {"uv": [9.5, 3, 10, 3.5], "texture": "#0"}, + "east": {"uv": [3.5, 9.5, 4, 10], "texture": "#0"}, + "south": {"uv": [9.5, 3.5, 10, 4], "texture": "#0"}, + "west": {"uv": [4, 9.5, 4.5, 10], "texture": "#0"}, + "up": {"uv": [10, 4.5, 9.5, 4], "texture": "#0"}, + "down": {"uv": [5, 9.5, 4.5, 10], "texture": "#0"} + } + }, + { + "from": [7.5, 11.4375, 7.5], + "to": [8.5, 16.4375, 7.5625], + "rotation": {"angle": 0, "axis": "z", "origin": [8, 13.9375, 7.53125]}, + "faces": { + "north": {"uv": [0, 0, 0.5, 2.5], "texture": "#0"}, + "east": {"uv": [0.5, 0, 1, 2.5], "texture": "#0"}, + "south": {"uv": [1, 0, 1.5, 2.5], "texture": "#0"}, + "west": {"uv": [1.5, 0, 2, 2.5], "texture": "#0"}, + "up": {"uv": [4, 2, 3.5, 1.5], "texture": "#0"}, + "down": {"uv": [4, 2, 3.5, 2.5], "texture": "#0"} + } + }, + { + "from": [7.68658, 16.37552, 7.5], + "to": [8.31158, 17.37552, 7.5625], + "rotation": {"angle": -22.5, "axis": "z", "origin": [7.74908, 16.87552, 7.53125]}, + "faces": { + "north": {"uv": [3.5, 2.5, 4, 3], "texture": "#0"}, + "east": {"uv": [3.5, 3, 4, 3.5], "texture": "#0"}, + "south": {"uv": [3.5, 3.5, 4, 4], "texture": "#0"}, + "west": {"uv": [4, 0, 4.5, 0.5], "texture": "#0"}, + "up": {"uv": [4.5, 1, 4, 0.5], "texture": "#0"}, + "down": {"uv": [4.5, 1, 4, 1.5], "texture": "#0"} + } + }, + { + "from": [8, 16.4375, 7.5], + "to": [8.5, 17.0625, 7.5625], + "rotation": {"angle": 0, "axis": "z", "origin": [8.4375, 16.9375, 7.53125]}, + "faces": { + "north": {"uv": [4.5, 0, 5, 0.5], "texture": "#0"}, + "east": {"uv": [0.5, 4.5, 1, 5], "texture": "#0"}, + "south": {"uv": [4.5, 0.5, 5, 1], "texture": "#0"}, + "west": {"uv": [1, 4.5, 1.5, 5], "texture": "#0"}, + "up": {"uv": [5, 1.5, 4.5, 1], "texture": "#0"}, + "down": {"uv": [2, 4.5, 1.5, 5], "texture": "#0"} + } + }, + { + "from": [8.0148, 17.25847, 7.5], + "to": [8.3898, 18.00847, 7.5625], + "rotation": {"angle": -22.5, "axis": "z", "origin": [7.8273, 16.88347, 7.53125]}, + "faces": { + "north": {"uv": [3, 4, 3.5, 4.5], "texture": "#0"}, + "east": {"uv": [4, 3, 4.5, 3.5], "texture": "#0"}, + "south": {"uv": [3.5, 4, 4, 4.5], "texture": "#0"}, + "west": {"uv": [4, 3.5, 4.5, 4], "texture": "#0"}, + "up": {"uv": [4.5, 4.5, 4, 4], "texture": "#0"}, + "down": {"uv": [0.5, 4.5, 0, 5], "texture": "#0"} + } + }, + { + "from": [8.21793, 17.17074, 7.5], + "to": [8.53043, 18.04574, 7.5625], + "rotation": {"angle": -45, "axis": "z", "origin": [8.28043, 17.67074, 7.53125]}, + "faces": { + "north": {"uv": [1.5, 4, 2, 4.5], "texture": "#0"}, + "east": {"uv": [4, 1.5, 4.5, 2], "texture": "#0"}, + "south": {"uv": [2, 4, 2.5, 4.5], "texture": "#0"}, + "west": {"uv": [4, 2, 4.5, 2.5], "texture": "#0"}, + "up": {"uv": [3, 4.5, 2.5, 4], "texture": "#0"}, + "down": {"uv": [4.5, 2.5, 4, 3], "texture": "#0"} + } + }, + { + "from": [8.48726, 18.0512, 7.5], + "to": [9.17476, 18.1762, 7.5625], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8.98726, 18.1137, 7.53125]}, + "faces": { + "north": {"uv": [4.5, 3, 5, 3.5], "texture": "#0"}, + "east": {"uv": [3.5, 4.5, 4, 5], "texture": "#0"}, + "south": {"uv": [4.5, 3.5, 5, 4], "texture": "#0"}, + "west": {"uv": [4, 4.5, 4.5, 5], "texture": "#0"}, + "up": {"uv": [5, 4.5, 4.5, 4], "texture": "#0"}, + "down": {"uv": [5, 4.5, 4.5, 5], "texture": "#0"} + } + }, + { + "from": [8.48726, 17.9262, 7.5], + "to": [8.86226, 18.0512, 7.5625], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8.98726, 18.1137, 7.53125]}, + "faces": { + "north": {"uv": [9.5, 4.5, 10, 5], "texture": "#0"}, + "east": {"uv": [5, 9.5, 5.5, 10], "texture": "#0"}, + "south": {"uv": [9.5, 5, 10, 5.5], "texture": "#0"}, + "west": {"uv": [5.5, 9.5, 6, 10], "texture": "#0"}, + "up": {"uv": [10, 6, 9.5, 5.5], "texture": "#0"}, + "down": {"uv": [6.5, 9.5, 6, 10], "texture": "#0"} + } + }, + { + "from": [8.86226, 17.9887, 7.5], + "to": [8.92476, 18.0512, 7.5625], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8.98726, 18.1137, 7.53125]}, + "faces": { + "north": {"uv": [9.5, 6, 10, 6.5], "texture": "#0"}, + "east": {"uv": [6.5, 9.5, 7, 10], "texture": "#0"}, + "south": {"uv": [9.5, 6.5, 10, 7], "texture": "#0"}, + "west": {"uv": [7, 9.5, 7.5, 10], "texture": "#0"}, + "up": {"uv": [10, 7.5, 9.5, 7], "texture": "#0"}, + "down": {"uv": [8, 9.5, 7.5, 10], "texture": "#0"} + } + }, + { + "from": [9.11631, 18.11936, 7.5], + "to": [9.21931, 18.22236, 7.5625], + "rotation": {"angle": -22.5, "axis": "z", "origin": [9.17881, 18.18186, 7.53125]}, + "faces": { + "north": {"uv": [0, 5, 0.5, 5.5], "texture": "#0"}, + "east": {"uv": [5, 0, 5.5, 0.5], "texture": "#0"}, + "south": {"uv": [0.5, 5, 1, 5.5], "texture": "#0"}, + "west": {"uv": [5, 0.5, 5.5, 1], "texture": "#0"}, + "up": {"uv": [1.5, 5.5, 1, 5], "texture": "#0"}, + "down": {"uv": [5.5, 1, 5, 1.5], "texture": "#0"} + } + }, + { + "from": [8.99726, 17.56477, 7.5], + "to": [9.12226, 18.18977, 7.5625], + "rotation": {"angle": -45, "axis": "z", "origin": [9.05976, 18.06477, 7.53125]}, + "faces": { + "north": {"uv": [4.5, 1.5, 5, 2], "texture": "#0"}, + "east": {"uv": [2, 4.5, 2.5, 5], "texture": "#0"}, + "south": {"uv": [4.5, 2, 5, 2.5], "texture": "#0"}, + "west": {"uv": [2.5, 4.5, 3, 5], "texture": "#0"}, + "up": {"uv": [5, 3, 4.5, 2.5], "texture": "#0"}, + "down": {"uv": [3.5, 4.5, 3, 5], "texture": "#0"} + } + }, + { + "from": [7.94669, 4.91876, 7.375], + "to": [8.25919, 5.35626, 7.6875], + "rotation": {"angle": 0, "axis": "z", "origin": [8.19669, 5.26251, 7.53125]}, + "faces": { + "north": {"uv": [7, 10, 7.5, 10.5], "texture": "#0"}, + "east": {"uv": [10, 7, 10.5, 7.5], "texture": "#0"}, + "south": {"uv": [7.5, 10, 8, 10.5], "texture": "#0"}, + "west": {"uv": [10, 7.5, 10.5, 8], "texture": "#0"}, + "up": {"uv": [8.5, 10.5, 8, 10], "texture": "#0"}, + "down": {"uv": [10.5, 8, 10, 8.5], "texture": "#0"} + } + }, + { + "from": [7.94669, 3.16876, 7.375], + "to": [8.25919, 4.91876, 7.6875], + "rotation": {"angle": 0, "axis": "z", "origin": [8.19669, 5.26251, 7.53125]}, + "faces": { + "north": {"uv": [3, 3, 3.5, 4], "texture": "#0"}, + "east": {"uv": [3.5, 0, 4, 1], "texture": "#0"}, + "south": {"uv": [0.5, 3.5, 1, 4.5], "texture": "#0"}, + "west": {"uv": [1, 3.5, 1.5, 4.5], "texture": "#0"}, + "up": {"uv": [11, 1.5, 10.5, 1], "texture": "#0"}, + "down": {"uv": [2, 10.5, 1.5, 11], "texture": "#0"} + } + }, + { + "from": [7.88419, 3.10626, 7.3125], + "to": [8.32169, 3.16876, 7.75], + "rotation": {"angle": 0, "axis": "z", "origin": [8.19669, 5.26251, 7.53125]}, + "faces": { + "north": {"uv": [8.5, 10, 9, 10.5], "texture": "#0"}, + "east": {"uv": [10, 8.5, 10.5, 9], "texture": "#0"}, + "south": {"uv": [9, 10, 9.5, 10.5], "texture": "#0"}, + "west": {"uv": [10, 9, 10.5, 9.5], "texture": "#0"}, + "up": {"uv": [10, 10.5, 9.5, 10], "texture": "#0"}, + "down": {"uv": [10.5, 9.5, 10, 10], "texture": "#0"} + } + }, + { + "from": [7.94669, 3.04376, 7.375], + "to": [8.25919, 3.10626, 7.6875], + "rotation": {"angle": 0, "axis": "z", "origin": [8.19669, 5.26251, 7.53125]}, + "faces": { + "north": {"uv": [10, 10, 10.5, 10.5], "texture": "#0"}, + "east": {"uv": [0, 10.5, 0.5, 11], "texture": "#0"}, + "south": {"uv": [10.5, 0, 11, 0.5], "texture": "#0"}, + "west": {"uv": [0.5, 10.5, 1, 11], "texture": "#0"}, + "up": {"uv": [11, 1, 10.5, 0.5], "texture": "#0"}, + "down": {"uv": [1.5, 10.5, 1, 11], "texture": "#0"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [0, -90, 0], + "translation": [-1.25, 8.5, 0.5], + "scale": [2.7, 2.7, 2.7] + }, + "thirdperson_lefthand": { + "rotation": [0, 90, 0], + "translation": [1.25, 8.5, 0.5], + "scale": [2.7, 2.7, 2.7] + }, + "firstperson_righthand": { + "rotation": [0, -90, 0], + "translation": [0, 8.5, 0], + "scale": [2.7, 2.7, 2.7] + }, + "firstperson_lefthand": { + "rotation": [0, 90, 0], + "translation": [0, 8.5, 0], + "scale": [2.7, 2.7, 2.7] + }, + "ground": { + "translation": [0, 1.25, 0], + "scale": [1.5, 1.5, 1.5] + }, + "gui": { + "rotation": [0, 180, 45], + "translation": [-0.5, -0.5, 0] + }, + "fixed": { + "rotation": [0, 0, 45] + } + }, + "groups": [ + { + "name": "Everything", + "origin": [8, 8, 8], + "color": 0, + "children": [ + { + "name": "Hilt", + "origin": [8, 8, 8], + "color": 0, + "children": [0, 1, 2, 3, 4, 5, 6] + }, + { + "name": "Blade", + "origin": [8, 8, 8], + "color": 0, + "children": [ + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63 + ] + }, + { + "name": "Handle", + "origin": [8, 8, 8], + "color": 0, + "children": [64, 65, 66, 67] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/surgebinding/resources/assets/surgebinding/textures/block/gem_block.png b/src/surgebinding/resources/assets/surgebinding/textures/block/gem_block.png new file mode 100644 index 000000000..fd6ef8dcc Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/block/gem_block.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/block/gem_ore_block.png b/src/surgebinding/resources/assets/surgebinding/textures/block/gem_ore_block.png new file mode 100644 index 000000000..89d7a5cce Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/block/gem_ore_block.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/block/gem_ore_block_deepslate.png b/src/surgebinding/resources/assets/surgebinding/textures/block/gem_ore_block_deepslate.png new file mode 100644 index 000000000..921ff9e9d Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/block/gem_ore_block_deepslate.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/block/gem_ore_block_tint_overlay.png b/src/surgebinding/resources/assets/surgebinding/textures/block/gem_ore_block_tint_overlay.png new file mode 100644 index 000000000..c570374d7 Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/block/gem_ore_block_tint_overlay.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/block/lavis_polyp.png b/src/surgebinding/resources/assets/surgebinding/textures/block/lavis_polyp.png new file mode 100644 index 000000000..a30da4a7e Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/block/lavis_polyp.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/block/prickletac.png b/src/surgebinding/resources/assets/surgebinding/textures/block/prickletac.png new file mode 100644 index 000000000..4fff2fd4c Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/block/prickletac.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/block/rockbud_variant.png b/src/surgebinding/resources/assets/surgebinding/textures/block/rockbud_variant.png new file mode 100644 index 000000000..814a8a0cb Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/block/rockbud_variant.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/block/vinebud.png b/src/surgebinding/resources/assets/surgebinding/textures/block/vinebud.png new file mode 100644 index 000000000..665029e9f Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/block/vinebud.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/entity/chull/baby_chull.png b/src/surgebinding/resources/assets/surgebinding/textures/entity/chull/baby_chull.png new file mode 100644 index 000000000..0aa002127 Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/entity/chull/baby_chull.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/entity/chull/chull.png b/src/surgebinding/resources/assets/surgebinding/textures/entity/chull/chull.png new file mode 100644 index 000000000..89bce6a58 Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/entity/chull/chull.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/entity/cryptic/cryptic.png b/src/surgebinding/resources/assets/surgebinding/textures/entity/cryptic/cryptic.png new file mode 100644 index 000000000..66d028aff Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/entity/cryptic/cryptic.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/gui/stormlight_hud.png b/src/surgebinding/resources/assets/surgebinding/textures/gui/stormlight_hud.png new file mode 100644 index 000000000..8a0fa5c49 Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/gui/stormlight_hud.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/icon/surgebinding.png b/src/surgebinding/resources/assets/surgebinding/textures/icon/surgebinding.png new file mode 100644 index 000000000..3eab65dec Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/icon/surgebinding.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/icon/surgebinding/abrasion.png b/src/surgebinding/resources/assets/surgebinding/textures/icon/surgebinding/abrasion.png new file mode 100644 index 000000000..b68302b93 Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/icon/surgebinding/abrasion.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/icon/surgebinding/adhesion.png b/src/surgebinding/resources/assets/surgebinding/textures/icon/surgebinding/adhesion.png new file mode 100644 index 000000000..94f7274fe Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/icon/surgebinding/adhesion.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/icon/surgebinding/cohesion.png b/src/surgebinding/resources/assets/surgebinding/textures/icon/surgebinding/cohesion.png new file mode 100644 index 000000000..5fe686fc2 Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/icon/surgebinding/cohesion.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/icon/surgebinding/division.png b/src/surgebinding/resources/assets/surgebinding/textures/icon/surgebinding/division.png new file mode 100644 index 000000000..bc5d3fa79 Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/icon/surgebinding/division.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/icon/surgebinding/gravitation.png b/src/surgebinding/resources/assets/surgebinding/textures/icon/surgebinding/gravitation.png new file mode 100644 index 000000000..fb58e9cb3 Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/icon/surgebinding/gravitation.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/icon/surgebinding/illumination.png b/src/surgebinding/resources/assets/surgebinding/textures/icon/surgebinding/illumination.png new file mode 100644 index 000000000..6772d7298 Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/icon/surgebinding/illumination.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/icon/surgebinding/progression.png b/src/surgebinding/resources/assets/surgebinding/textures/icon/surgebinding/progression.png new file mode 100644 index 000000000..3d8760672 Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/icon/surgebinding/progression.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/icon/surgebinding/tension.png b/src/surgebinding/resources/assets/surgebinding/textures/icon/surgebinding/tension.png new file mode 100644 index 000000000..34d1105f0 Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/icon/surgebinding/tension.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/icon/surgebinding/transformation.png b/src/surgebinding/resources/assets/surgebinding/textures/icon/surgebinding/transformation.png new file mode 100644 index 000000000..859a4b57b Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/icon/surgebinding/transformation.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/icon/surgebinding/transportation.png b/src/surgebinding/resources/assets/surgebinding/textures/icon/surgebinding/transportation.png new file mode 100644 index 000000000..7b6839e44 Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/icon/surgebinding/transportation.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/item/amethyst_broam.png b/src/surgebinding/resources/assets/surgebinding/textures/item/amethyst_broam.png new file mode 100644 index 000000000..f5ad9b4db Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/item/amethyst_broam.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/item/amethyst_chip.png b/src/surgebinding/resources/assets/surgebinding/textures/item/amethyst_chip.png new file mode 100644 index 000000000..6e5d71fd3 Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/item/amethyst_chip.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/item/amethyst_mark.png b/src/surgebinding/resources/assets/surgebinding/textures/item/amethyst_mark.png new file mode 100644 index 000000000..04d30cc01 Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/item/amethyst_mark.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/item/cut_amethyst_large.png b/src/surgebinding/resources/assets/surgebinding/textures/item/cut_amethyst_large.png new file mode 100644 index 000000000..dcffce695 Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/item/cut_amethyst_large.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/item/cut_amethyst_medium.png b/src/surgebinding/resources/assets/surgebinding/textures/item/cut_amethyst_medium.png new file mode 100644 index 000000000..424a3a07e Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/item/cut_amethyst_medium.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/item/cut_amethyst_small.png b/src/surgebinding/resources/assets/surgebinding/textures/item/cut_amethyst_small.png new file mode 100644 index 000000000..7dd4708d4 Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/item/cut_amethyst_small.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/item/cut_diamond_large.png b/src/surgebinding/resources/assets/surgebinding/textures/item/cut_diamond_large.png new file mode 100644 index 000000000..b778a4132 Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/item/cut_diamond_large.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/item/cut_diamond_medium.png b/src/surgebinding/resources/assets/surgebinding/textures/item/cut_diamond_medium.png new file mode 100644 index 000000000..e393b789d Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/item/cut_diamond_medium.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/item/cut_diamond_small.png b/src/surgebinding/resources/assets/surgebinding/textures/item/cut_diamond_small.png new file mode 100644 index 000000000..beb8237b3 Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/item/cut_diamond_small.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/item/cut_emerald_large.png b/src/surgebinding/resources/assets/surgebinding/textures/item/cut_emerald_large.png new file mode 100644 index 000000000..1c7c89c54 Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/item/cut_emerald_large.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/item/cut_emerald_medium.png b/src/surgebinding/resources/assets/surgebinding/textures/item/cut_emerald_medium.png new file mode 100644 index 000000000..82322ddb7 Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/item/cut_emerald_medium.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/item/cut_emerald_small.png b/src/surgebinding/resources/assets/surgebinding/textures/item/cut_emerald_small.png new file mode 100644 index 000000000..860b0658c Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/item/cut_emerald_small.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/item/cut_garnet_large.png b/src/surgebinding/resources/assets/surgebinding/textures/item/cut_garnet_large.png new file mode 100644 index 000000000..99a42ff0b Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/item/cut_garnet_large.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/item/cut_garnet_medium.png b/src/surgebinding/resources/assets/surgebinding/textures/item/cut_garnet_medium.png new file mode 100644 index 000000000..8c450372b Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/item/cut_garnet_medium.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/item/cut_garnet_small.png b/src/surgebinding/resources/assets/surgebinding/textures/item/cut_garnet_small.png new file mode 100644 index 000000000..4f35459a4 Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/item/cut_garnet_small.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/item/cut_heliodor_large.png b/src/surgebinding/resources/assets/surgebinding/textures/item/cut_heliodor_large.png new file mode 100644 index 000000000..6ddf8bab8 Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/item/cut_heliodor_large.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/item/cut_heliodor_medium.png b/src/surgebinding/resources/assets/surgebinding/textures/item/cut_heliodor_medium.png new file mode 100644 index 000000000..68e7d0b56 Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/item/cut_heliodor_medium.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/item/cut_heliodor_small.png b/src/surgebinding/resources/assets/surgebinding/textures/item/cut_heliodor_small.png new file mode 100644 index 000000000..5ce6498ad Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/item/cut_heliodor_small.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/item/cut_ruby_large.png b/src/surgebinding/resources/assets/surgebinding/textures/item/cut_ruby_large.png new file mode 100644 index 000000000..57ba9e24d Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/item/cut_ruby_large.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/item/cut_ruby_medium.png b/src/surgebinding/resources/assets/surgebinding/textures/item/cut_ruby_medium.png new file mode 100644 index 000000000..6683a94c7 Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/item/cut_ruby_medium.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/item/cut_ruby_small.png b/src/surgebinding/resources/assets/surgebinding/textures/item/cut_ruby_small.png new file mode 100644 index 000000000..e6aa63688 Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/item/cut_ruby_small.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/item/cut_sapphire_large.png b/src/surgebinding/resources/assets/surgebinding/textures/item/cut_sapphire_large.png new file mode 100644 index 000000000..99383f78a Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/item/cut_sapphire_large.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/item/cut_sapphire_medium.png b/src/surgebinding/resources/assets/surgebinding/textures/item/cut_sapphire_medium.png new file mode 100644 index 000000000..d12debba2 Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/item/cut_sapphire_medium.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/item/cut_sapphire_small.png b/src/surgebinding/resources/assets/surgebinding/textures/item/cut_sapphire_small.png new file mode 100644 index 000000000..693bf3eff Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/item/cut_sapphire_small.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/item/cut_smokestone_large.png b/src/surgebinding/resources/assets/surgebinding/textures/item/cut_smokestone_large.png new file mode 100644 index 000000000..69e228edd Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/item/cut_smokestone_large.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/item/cut_smokestone_medium.png b/src/surgebinding/resources/assets/surgebinding/textures/item/cut_smokestone_medium.png new file mode 100644 index 000000000..b357e3818 Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/item/cut_smokestone_medium.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/item/cut_smokestone_small.png b/src/surgebinding/resources/assets/surgebinding/textures/item/cut_smokestone_small.png new file mode 100644 index 000000000..500f356b7 Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/item/cut_smokestone_small.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/item/cut_topaz_large.png b/src/surgebinding/resources/assets/surgebinding/textures/item/cut_topaz_large.png new file mode 100644 index 000000000..039942919 Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/item/cut_topaz_large.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/item/cut_topaz_medium.png b/src/surgebinding/resources/assets/surgebinding/textures/item/cut_topaz_medium.png new file mode 100644 index 000000000..587e97715 Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/item/cut_topaz_medium.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/item/cut_topaz_small.png b/src/surgebinding/resources/assets/surgebinding/textures/item/cut_topaz_small.png new file mode 100644 index 000000000..cbd9e5a5f Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/item/cut_topaz_small.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/item/cut_zircon_large.png b/src/surgebinding/resources/assets/surgebinding/textures/item/cut_zircon_large.png new file mode 100644 index 000000000..64e53fd82 Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/item/cut_zircon_large.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/item/cut_zircon_medium.png b/src/surgebinding/resources/assets/surgebinding/textures/item/cut_zircon_medium.png new file mode 100644 index 000000000..b262e76a3 Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/item/cut_zircon_medium.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/item/cut_zircon_small.png b/src/surgebinding/resources/assets/surgebinding/textures/item/cut_zircon_small.png new file mode 100644 index 000000000..0f8f99f82 Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/item/cut_zircon_small.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/item/diamond_broam.png b/src/surgebinding/resources/assets/surgebinding/textures/item/diamond_broam.png new file mode 100644 index 000000000..12cb966ce Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/item/diamond_broam.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/item/diamond_chip.png b/src/surgebinding/resources/assets/surgebinding/textures/item/diamond_chip.png new file mode 100644 index 000000000..cd4cf5b19 Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/item/diamond_chip.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/item/diamond_mark.png b/src/surgebinding/resources/assets/surgebinding/textures/item/diamond_mark.png new file mode 100644 index 000000000..f48e7adfc Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/item/diamond_mark.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/item/emerald_broam.png b/src/surgebinding/resources/assets/surgebinding/textures/item/emerald_broam.png new file mode 100644 index 000000000..e69f86fd7 Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/item/emerald_broam.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/item/emerald_chip.png b/src/surgebinding/resources/assets/surgebinding/textures/item/emerald_chip.png new file mode 100644 index 000000000..c7835f8f0 Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/item/emerald_chip.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/item/emerald_mark.png b/src/surgebinding/resources/assets/surgebinding/textures/item/emerald_mark.png new file mode 100644 index 000000000..204074856 Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/item/emerald_mark.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/item/garnet.png b/src/surgebinding/resources/assets/surgebinding/textures/item/garnet.png new file mode 100644 index 000000000..772d1e7d2 Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/item/garnet.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/item/garnet_broam.png b/src/surgebinding/resources/assets/surgebinding/textures/item/garnet_broam.png new file mode 100644 index 000000000..692ebd83e Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/item/garnet_broam.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/item/garnet_chip.png b/src/surgebinding/resources/assets/surgebinding/textures/item/garnet_chip.png new file mode 100644 index 000000000..f25452d03 Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/item/garnet_chip.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/item/garnet_mark.png b/src/surgebinding/resources/assets/surgebinding/textures/item/garnet_mark.png new file mode 100644 index 000000000..fd5462c2d Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/item/garnet_mark.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/item/heliodor.png b/src/surgebinding/resources/assets/surgebinding/textures/item/heliodor.png new file mode 100644 index 000000000..65ac4d1fe Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/item/heliodor.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/item/heliodor_broam.png b/src/surgebinding/resources/assets/surgebinding/textures/item/heliodor_broam.png new file mode 100644 index 000000000..e04f4eac4 Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/item/heliodor_broam.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/item/heliodor_chip.png b/src/surgebinding/resources/assets/surgebinding/textures/item/heliodor_chip.png new file mode 100644 index 000000000..03abdba88 Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/item/heliodor_chip.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/item/heliodor_mark.png b/src/surgebinding/resources/assets/surgebinding/textures/item/heliodor_mark.png new file mode 100644 index 000000000..f90fde592 Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/item/heliodor_mark.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/item/models/shardblade/dynamic.png b/src/surgebinding/resources/assets/surgebinding/textures/item/models/shardblade/dynamic.png new file mode 100644 index 000000000..9483f38b3 Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/item/models/shardblade/dynamic.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/item/models/shardblade_model/bondsmith_honorblade.png b/src/surgebinding/resources/assets/surgebinding/textures/item/models/shardblade_model/bondsmith_honorblade.png new file mode 100644 index 000000000..0fd97deee Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/item/models/shardblade_model/bondsmith_honorblade.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/item/models/shardblade_model/dustbringer_honorblade.png b/src/surgebinding/resources/assets/surgebinding/textures/item/models/shardblade_model/dustbringer_honorblade.png new file mode 100644 index 000000000..379914d14 Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/item/models/shardblade_model/dustbringer_honorblade.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/item/models/shardblade_model/edgedancer_honorblade.png b/src/surgebinding/resources/assets/surgebinding/textures/item/models/shardblade_model/edgedancer_honorblade.png new file mode 100644 index 000000000..5ccfe678c Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/item/models/shardblade_model/edgedancer_honorblade.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/item/models/shardblade_model/elsecaller_honorblade.png b/src/surgebinding/resources/assets/surgebinding/textures/item/models/shardblade_model/elsecaller_honorblade.png new file mode 100644 index 000000000..c9990c84c Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/item/models/shardblade_model/elsecaller_honorblade.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/item/models/shardblade_model/lightweaver_honorblade.png b/src/surgebinding/resources/assets/surgebinding/textures/item/models/shardblade_model/lightweaver_honorblade.png new file mode 100644 index 000000000..31b8e080d Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/item/models/shardblade_model/lightweaver_honorblade.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/models/shardblade_model/master_sword.png b/src/surgebinding/resources/assets/surgebinding/textures/item/models/shardblade_model/master_sword.png similarity index 100% rename from src/main/resources/assets/cosmere/textures/item/models/shardblade_model/master_sword.png rename to src/surgebinding/resources/assets/surgebinding/textures/item/models/shardblade_model/master_sword.png diff --git a/src/surgebinding/resources/assets/surgebinding/textures/item/models/shardblade_model/nightblood.png b/src/surgebinding/resources/assets/surgebinding/textures/item/models/shardblade_model/nightblood.png new file mode 100644 index 000000000..5e6398fae Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/item/models/shardblade_model/nightblood.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/models/shardblade_model/shard_blade.png b/src/surgebinding/resources/assets/surgebinding/textures/item/models/shardblade_model/shard_blade.png similarity index 100% rename from src/main/resources/assets/cosmere/textures/item/models/shardblade_model/shard_blade.png rename to src/surgebinding/resources/assets/surgebinding/textures/item/models/shardblade_model/shard_blade.png diff --git a/src/main/resources/assets/cosmere/textures/item/models/shardblade_model/shard_test.png b/src/surgebinding/resources/assets/surgebinding/textures/item/models/shardblade_model/shard_test.png similarity index 100% rename from src/main/resources/assets/cosmere/textures/item/models/shardblade_model/shard_test.png rename to src/surgebinding/resources/assets/surgebinding/textures/item/models/shardblade_model/shard_test.png diff --git a/src/surgebinding/resources/assets/surgebinding/textures/item/models/shardblade_model/skybreaker_honorblade.png b/src/surgebinding/resources/assets/surgebinding/textures/item/models/shardblade_model/skybreaker_honorblade.png new file mode 100644 index 000000000..d89074404 Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/item/models/shardblade_model/skybreaker_honorblade.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/item/models/shardblade_model/stoneward_honorblade.png b/src/surgebinding/resources/assets/surgebinding/textures/item/models/shardblade_model/stoneward_honorblade.png new file mode 100644 index 000000000..583a09466 Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/item/models/shardblade_model/stoneward_honorblade.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/item/models/shardblade_model/truthwatcher_honorblade.png b/src/surgebinding/resources/assets/surgebinding/textures/item/models/shardblade_model/truthwatcher_honorblade.png new file mode 100644 index 000000000..a5ac0eac2 Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/item/models/shardblade_model/truthwatcher_honorblade.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/item/models/shardblade_model/willshaper_honorblade.png b/src/surgebinding/resources/assets/surgebinding/textures/item/models/shardblade_model/willshaper_honorblade.png new file mode 100644 index 000000000..296e4deea Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/item/models/shardblade_model/willshaper_honorblade.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/item/models/shardblade_model/windrunner_honorblade.png b/src/surgebinding/resources/assets/surgebinding/textures/item/models/shardblade_model/windrunner_honorblade.png new file mode 100644 index 000000000..cc66ef09b Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/item/models/shardblade_model/windrunner_honorblade.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/item/rosharan_diamond.png b/src/surgebinding/resources/assets/surgebinding/textures/item/rosharan_diamond.png new file mode 100644 index 000000000..8807fb3c4 Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/item/rosharan_diamond.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/item/ruby.png b/src/surgebinding/resources/assets/surgebinding/textures/item/ruby.png new file mode 100644 index 000000000..70c5eda52 Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/item/ruby.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/item/ruby_broam.png b/src/surgebinding/resources/assets/surgebinding/textures/item/ruby_broam.png new file mode 100644 index 000000000..a81b1fcac Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/item/ruby_broam.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/item/ruby_chip.png b/src/surgebinding/resources/assets/surgebinding/textures/item/ruby_chip.png new file mode 100644 index 000000000..9ac1b93eb Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/item/ruby_chip.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/item/ruby_mark.png b/src/surgebinding/resources/assets/surgebinding/textures/item/ruby_mark.png new file mode 100644 index 000000000..da92cc5c9 Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/item/ruby_mark.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/item/sapphire.png b/src/surgebinding/resources/assets/surgebinding/textures/item/sapphire.png new file mode 100644 index 000000000..9ae0a8513 Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/item/sapphire.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/item/sapphire_broam.png b/src/surgebinding/resources/assets/surgebinding/textures/item/sapphire_broam.png new file mode 100644 index 000000000..92a95138f Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/item/sapphire_broam.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/item/sapphire_chip.png b/src/surgebinding/resources/assets/surgebinding/textures/item/sapphire_chip.png new file mode 100644 index 000000000..6cc14974a Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/item/sapphire_chip.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/item/sapphire_mark.png b/src/surgebinding/resources/assets/surgebinding/textures/item/sapphire_mark.png new file mode 100644 index 000000000..516a2fcd6 Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/item/sapphire_mark.png differ diff --git a/src/main/resources/assets/cosmere/textures/item/investiture.png b/src/surgebinding/resources/assets/surgebinding/textures/item/shardplate_boots.png similarity index 100% rename from src/main/resources/assets/cosmere/textures/item/investiture.png rename to src/surgebinding/resources/assets/surgebinding/textures/item/shardplate_boots.png diff --git a/src/main/resources/assets/cosmere/textures/item/jar_empty.png b/src/surgebinding/resources/assets/surgebinding/textures/item/shardplate_chest.png similarity index 100% rename from src/main/resources/assets/cosmere/textures/item/jar_empty.png rename to src/surgebinding/resources/assets/surgebinding/textures/item/shardplate_chest.png diff --git a/src/main/resources/assets/cosmere/textures/item/jar_of_blood.png b/src/surgebinding/resources/assets/surgebinding/textures/item/shardplate_helmet.png similarity index 100% rename from src/main/resources/assets/cosmere/textures/item/jar_of_blood.png rename to src/surgebinding/resources/assets/surgebinding/textures/item/shardplate_helmet.png diff --git a/src/main/resources/assets/cosmere/textures/item/metal_file.png b/src/surgebinding/resources/assets/surgebinding/textures/item/shardplate_leggings.png similarity index 100% rename from src/main/resources/assets/cosmere/textures/item/metal_file.png rename to src/surgebinding/resources/assets/surgebinding/textures/item/shardplate_leggings.png diff --git a/src/surgebinding/resources/assets/surgebinding/textures/item/smokestone.png b/src/surgebinding/resources/assets/surgebinding/textures/item/smokestone.png new file mode 100644 index 000000000..05731a2f9 Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/item/smokestone.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/item/smokestone_broam.png b/src/surgebinding/resources/assets/surgebinding/textures/item/smokestone_broam.png new file mode 100644 index 000000000..1da6dbe03 Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/item/smokestone_broam.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/item/smokestone_chip.png b/src/surgebinding/resources/assets/surgebinding/textures/item/smokestone_chip.png new file mode 100644 index 000000000..af737d223 Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/item/smokestone_chip.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/item/smokestone_mark.png b/src/surgebinding/resources/assets/surgebinding/textures/item/smokestone_mark.png new file mode 100644 index 000000000..045b42eee Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/item/smokestone_mark.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/item/topaz.png b/src/surgebinding/resources/assets/surgebinding/textures/item/topaz.png new file mode 100644 index 000000000..4f11eefc8 Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/item/topaz.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/item/topaz_broam.png b/src/surgebinding/resources/assets/surgebinding/textures/item/topaz_broam.png new file mode 100644 index 000000000..9c84f4e76 Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/item/topaz_broam.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/item/topaz_chip.png b/src/surgebinding/resources/assets/surgebinding/textures/item/topaz_chip.png new file mode 100644 index 000000000..b88b72dbf Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/item/topaz_chip.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/item/topaz_mark.png b/src/surgebinding/resources/assets/surgebinding/textures/item/topaz_mark.png new file mode 100644 index 000000000..859748f9e Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/item/topaz_mark.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/item/zircon.png b/src/surgebinding/resources/assets/surgebinding/textures/item/zircon.png new file mode 100644 index 000000000..d41eb54a2 Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/item/zircon.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/item/zircon_broam.png b/src/surgebinding/resources/assets/surgebinding/textures/item/zircon_broam.png new file mode 100644 index 000000000..69c67d895 Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/item/zircon_broam.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/item/zircon_chip.png b/src/surgebinding/resources/assets/surgebinding/textures/item/zircon_chip.png new file mode 100644 index 000000000..d1fe8a63d Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/item/zircon_chip.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/item/zircon_mark.png b/src/surgebinding/resources/assets/surgebinding/textures/item/zircon_mark.png new file mode 100644 index 000000000..8b353c0a1 Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/item/zircon_mark.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/models/armor/deadplate_layer_1.png b/src/surgebinding/resources/assets/surgebinding/textures/models/armor/deadplate_layer_1.png new file mode 100644 index 000000000..c97e520a6 Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/models/armor/deadplate_layer_1.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/models/armor/deadplate_layer_2.png b/src/surgebinding/resources/assets/surgebinding/textures/models/armor/deadplate_layer_2.png new file mode 100644 index 000000000..c97e520a6 Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/models/armor/deadplate_layer_2.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/models/armor/shardplate.png b/src/surgebinding/resources/assets/surgebinding/textures/models/armor/shardplate.png new file mode 100644 index 000000000..d9bbb8352 Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/models/armor/shardplate.png differ diff --git a/src/surgebinding/resources/assets/surgebinding/textures/models/armor/windrunner_shardplate.png b/src/surgebinding/resources/assets/surgebinding/textures/models/armor/windrunner_shardplate.png new file mode 100644 index 000000000..d6089ce81 Binary files /dev/null and b/src/surgebinding/resources/assets/surgebinding/textures/models/armor/windrunner_shardplate.png differ diff --git a/src/surgebinding/resources/data/surgebinding/dimension/roshar.json b/src/surgebinding/resources/data/surgebinding/dimension/roshar.json new file mode 100644 index 000000000..ec6c5887e --- /dev/null +++ b/src/surgebinding/resources/data/surgebinding/dimension/roshar.json @@ -0,0 +1,11 @@ +{ + "type": "minecraft:overworld", + "generator": { + "type": "minecraft:noise", + "settings": "surgebinding:roshar_biome", + "biome_source": { + "type": "minecraft:fixed", + "biome": "surgebinding:roshar_biome" + } + } +} diff --git a/src/surgebinding/resources/data/surgebinding/dimension_type/roshar_type.json b/src/surgebinding/resources/data/surgebinding/dimension_type/roshar_type.json new file mode 100644 index 000000000..23553cd34 --- /dev/null +++ b/src/surgebinding/resources/data/surgebinding/dimension_type/roshar_type.json @@ -0,0 +1,25 @@ +{ + "ultrawarm": false, + "natural": true, + "piglin_safe": true, + "respawn_anchor_works": true, + "bed_works": true, + "has_raids": true, + "has_skylight": true, + "has_ceiling": false, + "coordinate_scale": 0.5, + "ambient_light": 4, + "logical_height": 384, + "effects": "minecraft:overworld", + "infiniburn": "#minecraft:infiniburn_overworld", + "min_y": -64, + "height": 384, + "monster_spawn_light_level": { + "type": "minecraft:uniform", + "value": { + "min_inclusive": 0, + "max_inclusive": 7 + } + }, + "monster_spawn_block_light_limit": 0 +} diff --git a/src/surgebinding/resources/data/surgebinding/worldgen/biome/roshar_biome.json b/src/surgebinding/resources/data/surgebinding/worldgen/biome/roshar_biome.json new file mode 100644 index 000000000..cc9a06992 --- /dev/null +++ b/src/surgebinding/resources/data/surgebinding/worldgen/biome/roshar_biome.json @@ -0,0 +1,122 @@ +{ + "temperature": 1, + "downfall": 0.3, + "has_precipitation": true, + "effects": { + "sky_color": 7776511, + "fog_color": 12638463, + "water_color": 4159204, + "water_fog_color": 329011, + "mood_sound": { + "sound": "minecraft:ambient.cave", + "tick_delay": 6000, + "block_search_extent": 8, + "offset": 2 + }, + "music": { + "sound": "minecraft:music.overworld.stony_peaks", + "min_delay": 12000, + "max_delay": 24000, + "replace_current_music": false + } + }, + "spawners": { + "ambient": [ + { + "type": "minecraft:bat", + "weight": 10, + "minCount": 8, + "maxCount": 8 + } + ], + "axolotls": [], + "creature": [], + "misc": [], + "monster": [ + { + "type": "minecraft:slime", + "weight": 100, + "minCount": 4, + "maxCount": 4 + }, + { + "type": "minecraft:enderman", + "weight": 10, + "minCount": 1, + "maxCount": 4 + } + ], + "underground_water_creature": [ + { + "type": "minecraft:glow_squid", + "weight": 10, + "minCount": 4, + "maxCount": 6 + } + ], + "water_ambient": [], + "water_creature": [] + }, + "spawn_costs": {}, + "carvers": { + "air": [ + "minecraft:cave", + "minecraft:cave_extra_underground", + "minecraft:canyon" + ] + }, + "features": [ + [], + [ + "minecraft:lake_lava_underground", + "minecraft:lake_lava_surface" + ], + [ + "minecraft:amethyst_geode" + ], + [ + "minecraft:monster_room", + "minecraft:monster_room_deep" + ], + [], + [], + [ + "minecraft:ore_dirt", + "minecraft:ore_gravel", + "minecraft:ore_granite_upper", + "minecraft:ore_granite_lower", + "minecraft:ore_diorite_upper", + "minecraft:ore_diorite_lower", + "minecraft:ore_andesite_upper", + "minecraft:ore_andesite_lower", + "minecraft:ore_tuff", + "minecraft:ore_coal_upper", + "minecraft:ore_coal_lower", + "minecraft:ore_iron_upper", + "minecraft:ore_iron_middle", + "minecraft:ore_iron_small", + "minecraft:ore_gold", + "minecraft:ore_gold_lower", + "minecraft:ore_lapis", + "minecraft:ore_lapis_buried", + "minecraft:ore_copper", + "minecraft:underwater_magma", + "minecraft:disk_sand", + "minecraft:disk_clay", + "minecraft:disk_gravel" + ], + [ + "minecraft:ore_infested" + ], + [ + "minecraft:spring_water", + "minecraft:spring_lava" + ], + [ + "minecraft:glow_lichen" + ], + [ + "minecraft:freeze_top_layer" + ] + ] +} diff --git a/src/surgebinding/resources/data/surgebinding/worldgen/noise_settings/roshar_biome.json b/src/surgebinding/resources/data/surgebinding/worldgen/noise_settings/roshar_biome.json new file mode 100644 index 000000000..fc72036c5 --- /dev/null +++ b/src/surgebinding/resources/data/surgebinding/worldgen/noise_settings/roshar_biome.json @@ -0,0 +1,2542 @@ +{ + "sea_level": 63, + "disable_mob_generation": false, + "aquifers_enabled": true, + "ore_veins_enabled": true, + "legacy_random_source": false, + "default_block": { + "Name": "minecraft:stone" + }, + "default_fluid": { + "Name": "minecraft:water", + "Properties": { + "level": "0" + } + }, + "noise": { + "min_y": -64, + "height": 384, + "size_horizontal": 1, + "size_vertical": 2 + }, + "noise_router": { + "barrier": { + "type": "minecraft:noise", + "noise": "minecraft:aquifer_barrier", + "xz_scale": 1, + "y_scale": 0.5 + }, + "fluid_level_floodedness": { + "type": "minecraft:noise", + "noise": "minecraft:aquifer_fluid_level_floodedness", + "xz_scale": 1, + "y_scale": 0.67 + }, + "fluid_level_spread": { + "type": "minecraft:noise", + "noise": "minecraft:aquifer_fluid_level_spread", + "xz_scale": 1, + "y_scale": 0.7142857142857143 + }, + "lava": { + "type": "minecraft:noise", + "noise": "minecraft:aquifer_lava", + "xz_scale": 1, + "y_scale": 1 + }, + "temperature": { + "type": "minecraft:shifted_noise", + "noise": "minecraft:temperature", + "xz_scale": 0.25, + "y_scale": 0, + "shift_x": "minecraft:shift_x", + "shift_y": 0, + "shift_z": "minecraft:shift_z" + }, + "vegetation": { + "type": "minecraft:shifted_noise", + "noise": "minecraft:vegetation", + "xz_scale": 0.25, + "y_scale": 0, + "shift_x": "minecraft:shift_x", + "shift_y": 0, + "shift_z": "minecraft:shift_z" + }, + "continents": "minecraft:overworld/continents", + "erosion": "minecraft:overworld/erosion", + "depth": "minecraft:overworld_amplified/depth", + "ridges": "minecraft:overworld/ridges", + "initial_density_without_jaggedness": { + "type": "minecraft:add", + "argument1": 0.4, + "argument2": { + "type": "minecraft:mul", + "argument1": { + "type": "minecraft:y_clamped_gradient", + "from_y": -64, + "to_y": -40, + "from_value": 0, + "to_value": 1 + }, + "argument2": { + "type": "minecraft:add", + "argument1": -0.4, + "argument2": { + "type": "minecraft:add", + "argument1": -0.078125, + "argument2": { + "type": "minecraft:mul", + "argument1": { + "type": "minecraft:y_clamped_gradient", + "from_y": 304, + "to_y": 320, + "from_value": 1, + "to_value": 0 + }, + "argument2": { + "type": "minecraft:add", + "argument1": 0.078125, + "argument2": { + "type": "minecraft:clamp", + "input": { + "type": "minecraft:add", + "argument1": -0.703125, + "argument2": { + "type": "minecraft:mul", + "argument1": 4, + "argument2": { + "type": "minecraft:quarter_negative", + "argument": { + "type": "minecraft:mul", + "argument1": "minecraft:overworld_amplified/depth", + "argument2": { + "type": "minecraft:cache_2d", + "argument": "minecraft:overworld_amplified/factor" + } + } + } + } + }, + "min": -64, + "max": 64 + } + } + } + } + } + } + }, + "final_density": { + "type": "minecraft:min", + "argument1": { + "type": "minecraft:squeeze", + "argument": { + "type": "minecraft:mul", + "argument1": 0.64, + "argument2": { + "type": "minecraft:interpolated", + "argument": { + "type": "minecraft:blend_density", + "argument": { + "type": "minecraft:add", + "argument1": 0.4, + "argument2": { + "type": "minecraft:mul", + "argument1": { + "type": "minecraft:y_clamped_gradient", + "from_y": -64, + "to_y": -40, + "from_value": 0, + "to_value": 1 + }, + "argument2": { + "type": "minecraft:add", + "argument1": -0.4, + "argument2": { + "type": "minecraft:add", + "argument1": -0.078125, + "argument2": { + "type": "minecraft:mul", + "argument1": { + "type": "minecraft:y_clamped_gradient", + "from_y": 304, + "to_y": 320, + "from_value": 1, + "to_value": 0 + }, + "argument2": { + "type": "minecraft:add", + "argument1": 0.078125, + "argument2": { + "type": "minecraft:range_choice", + "input": "minecraft:overworld_amplified/sloped_cheese", + "min_inclusive": -1000000, + "max_exclusive": 1.5625, + "when_in_range": { + "type": "minecraft:min", + "argument1": "minecraft:overworld_amplified/sloped_cheese", + "argument2": { + "type": "minecraft:mul", + "argument1": 5, + "argument2": "minecraft:overworld/caves/entrances" + } + }, + "when_out_of_range": { + "type": "minecraft:max", + "argument1": { + "type": "minecraft:min", + "argument1": { + "type": "minecraft:min", + "argument1": { + "type": "minecraft:add", + "argument1": { + "type": "minecraft:mul", + "argument1": 4, + "argument2": { + "type": "minecraft:square", + "argument": { + "type": "minecraft:noise", + "noise": "minecraft:cave_layer", + "xz_scale": 1, + "y_scale": 8 + } + } + }, + "argument2": { + "type": "minecraft:add", + "argument1": { + "type": "minecraft:clamp", + "input": { + "type": "minecraft:add", + "argument1": 0.27, + "argument2": { + "type": "minecraft:noise", + "noise": "minecraft:cave_cheese", + "xz_scale": 1, + "y_scale": 0.6666666666666666 + } + }, + "min": -1, + "max": 1 + }, + "argument2": { + "type": "minecraft:clamp", + "input": { + "type": "minecraft:add", + "argument1": 1.5, + "argument2": { + "type": "minecraft:mul", + "argument1": -0.64, + "argument2": "minecraft:overworld_amplified/sloped_cheese" + } + }, + "min": 0, + "max": 0.5 + } + } + }, + "argument2": "minecraft:overworld/caves/entrances" + }, + "argument2": { + "type": "minecraft:add", + "argument1": "minecraft:overworld/caves/spaghetti_2d", + "argument2": "minecraft:overworld/caves/spaghetti_roughness_function" + } + }, + "argument2": { + "type": "minecraft:range_choice", + "input": "minecraft:overworld/caves/pillars", + "min_inclusive": -1000000, + "max_exclusive": 0.03, + "when_in_range": -1000000, + "when_out_of_range": "minecraft:overworld/caves/pillars" + } + } + } + } + } + } + } + } + } + } + } + } + }, + "argument2": "minecraft:overworld/caves/noodle" + }, + "vein_toggle": { + "type": "minecraft:interpolated", + "argument": { + "type": "minecraft:range_choice", + "input": "minecraft:y", + "min_inclusive": -60, + "max_exclusive": 51, + "when_in_range": { + "type": "minecraft:noise", + "noise": "minecraft:ore_veininess", + "xz_scale": 1.5, + "y_scale": 1.5 + }, + "when_out_of_range": 0 + } + }, + "vein_ridged": { + "type": "minecraft:add", + "argument1": -0.07999999821186066, + "argument2": { + "type": "minecraft:max", + "argument1": { + "type": "minecraft:abs", + "argument": { + "type": "minecraft:interpolated", + "argument": { + "type": "minecraft:range_choice", + "input": "minecraft:y", + "min_inclusive": -60, + "max_exclusive": 51, + "when_in_range": { + "type": "minecraft:noise", + "noise": "minecraft:ore_vein_a", + "xz_scale": 4, + "y_scale": 4 + }, + "when_out_of_range": 0 + } + } + }, + "argument2": { + "type": "minecraft:abs", + "argument": { + "type": "minecraft:interpolated", + "argument": { + "type": "minecraft:range_choice", + "input": "minecraft:y", + "min_inclusive": -60, + "max_exclusive": 51, + "when_in_range": { + "type": "minecraft:noise", + "noise": "minecraft:ore_vein_b", + "xz_scale": 4, + "y_scale": 4 + }, + "when_out_of_range": 0 + } + } + } + } + }, + "vein_gap": { + "type": "minecraft:noise", + "noise": "minecraft:ore_gap", + "xz_scale": 1, + "y_scale": 1 + } + }, + "spawn_target": [ + { + "temperature": [ + -1, + 1 + ], + "humidity": [ + -1, + 1 + ], + "continentalness": [ + -0.11, + 1 + ], + "erosion": [ + -1, + 1 + ], + "weirdness": [ + -1, + -0.16 + ], + "depth": 0, + "offset": 0 + }, + { + "temperature": [ + -1, + 1 + ], + "humidity": [ + -1, + 1 + ], + "continentalness": [ + -0.11, + 1 + ], + "erosion": [ + -1, + 1 + ], + "weirdness": [ + 0.16, + 1 + ], + "depth": 0, + "offset": 0 + } + ], + "surface_rule": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:vertical_gradient", + "random_name": "minecraft:bedrock_floor", + "true_at_and_below": { + "above_bottom": 0 + }, + "false_at_and_above": { + "above_bottom": 5 + } + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:bedrock" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:above_preliminary_surface" + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "offset": 0, + "surface_type": "floor", + "add_surface_depth": false, + "secondary_depth_range": 0 + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:wooded_badlands" + ] + }, + "then_run": { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:y_above", + "anchor": { + "absolute": 97 + }, + "surface_depth_multiplier": 2, + "add_stone_depth": false + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "noise": "minecraft:surface", + "min_threshold": -0.909, + "max_threshold": -0.5454 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:coarse_dirt" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "noise": "minecraft:surface", + "min_threshold": -0.1818, + "max_threshold": 0.1818 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:coarse_dirt" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "noise": "minecraft:surface", + "min_threshold": 0.5454, + "max_threshold": 0.909 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:coarse_dirt" + } + } + }, + { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:water", + "offset": 0, + "surface_depth_multiplier": 0, + "add_stone_depth": false + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:grass_block", + "Properties": { + "snowy": "false" + } + } + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:dirt" + } + } + ] + } + ] + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:swamp" + ] + }, + "then_run": { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:y_above", + "anchor": { + "absolute": 62 + }, + "surface_depth_multiplier": 0, + "add_stone_depth": false + }, + "then_run": { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:not", + "invert": { + "type": "minecraft:y_above", + "anchor": { + "absolute": 63 + }, + "surface_depth_multiplier": 0, + "add_stone_depth": false + } + }, + "then_run": { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "noise": "minecraft:surface_swamp", + "min_threshold": 0, + "max_threshold": 1.7976931348623157e+308 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:water", + "Properties": { + "level": "0" + } + } + } + } + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:mangrove_swamp" + ] + }, + "then_run": { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:y_above", + "anchor": { + "absolute": 60 + }, + "surface_depth_multiplier": 0, + "add_stone_depth": false + }, + "then_run": { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:not", + "invert": { + "type": "minecraft:y_above", + "anchor": { + "absolute": 63 + }, + "surface_depth_multiplier": 0, + "add_stone_depth": false + } + }, + "then_run": { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "noise": "minecraft:surface_swamp", + "min_threshold": 0, + "max_threshold": 1.7976931348623157e+308 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:water", + "Properties": { + "level": "0" + } + } + } + } + } + } + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:badlands", + "minecraft:eroded_badlands", + "minecraft:wooded_badlands" + ] + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "offset": 0, + "surface_type": "floor", + "add_surface_depth": false, + "secondary_depth_range": 0 + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:y_above", + "anchor": { + "absolute": 256 + }, + "surface_depth_multiplier": 0, + "add_stone_depth": false + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:orange_terracotta" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:y_above", + "anchor": { + "absolute": 74 + }, + "surface_depth_multiplier": 1, + "add_stone_depth": true + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "noise": "minecraft:surface", + "min_threshold": -0.909, + "max_threshold": -0.5454 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:terracotta" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "noise": "minecraft:surface", + "min_threshold": -0.1818, + "max_threshold": 0.1818 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:terracotta" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "noise": "minecraft:surface", + "min_threshold": 0.5454, + "max_threshold": 0.909 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:terracotta" + } + } + }, + { + "type": "minecraft:bandlands" + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:water", + "offset": -1, + "surface_depth_multiplier": 0, + "add_stone_depth": false + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "offset": 0, + "surface_type": "ceiling", + "add_surface_depth": false, + "secondary_depth_range": 0 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:red_sandstone" + } + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:red_sand" + } + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:not", + "invert": { + "type": "minecraft:hole" + } + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:orange_terracotta" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:water", + "offset": -6, + "surface_depth_multiplier": -1, + "add_stone_depth": true + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:white_terracotta" + } + } + }, + { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "offset": 0, + "surface_type": "ceiling", + "add_surface_depth": false, + "secondary_depth_range": 0 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:stone" + } + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:gravel" + } + } + ] + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:y_above", + "anchor": { + "absolute": 63 + }, + "surface_depth_multiplier": -1, + "add_stone_depth": true + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:y_above", + "anchor": { + "absolute": 63 + }, + "surface_depth_multiplier": 0, + "add_stone_depth": false + }, + "then_run": { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:not", + "invert": { + "type": "minecraft:y_above", + "anchor": { + "absolute": 74 + }, + "surface_depth_multiplier": 1, + "add_stone_depth": true + } + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:orange_terracotta" + } + } + } + }, + { + "type": "minecraft:bandlands" + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "offset": 0, + "surface_type": "floor", + "add_surface_depth": true, + "secondary_depth_range": 0 + }, + "then_run": { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:water", + "offset": -6, + "surface_depth_multiplier": -1, + "add_stone_depth": true + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:white_terracotta" + } + } + } + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "offset": 0, + "surface_type": "floor", + "add_surface_depth": false, + "secondary_depth_range": 0 + }, + "then_run": { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:water", + "offset": -1, + "surface_depth_multiplier": 0, + "add_stone_depth": false + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:frozen_ocean", + "minecraft:deep_frozen_ocean" + ] + }, + "then_run": { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:hole" + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:water", + "offset": 0, + "surface_depth_multiplier": 0, + "add_stone_depth": false + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:air" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:temperature" + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:ice" + } + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:water", + "Properties": { + "level": "0" + } + } + } + ] + } + } + }, + { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:frozen_peaks" + ] + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:steep" + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:packed_ice" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "noise": "minecraft:packed_ice", + "min_threshold": 0, + "max_threshold": 0.2 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:packed_ice" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "noise": "minecraft:ice", + "min_threshold": 0, + "max_threshold": 0.025 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:ice" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:water", + "offset": 0, + "surface_depth_multiplier": 0, + "add_stone_depth": false + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:snow_block" + } + } + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:snowy_slopes" + ] + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:steep" + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:stone" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "noise": "minecraft:powder_snow", + "min_threshold": 0.35, + "max_threshold": 0.6 + }, + "then_run": { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:water", + "offset": 0, + "surface_depth_multiplier": 0, + "add_stone_depth": false + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:powder_snow" + } + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:water", + "offset": 0, + "surface_depth_multiplier": 0, + "add_stone_depth": false + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:snow_block" + } + } + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:jagged_peaks" + ] + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:steep" + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:stone" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:water", + "offset": 0, + "surface_depth_multiplier": 0, + "add_stone_depth": false + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:snow_block" + } + } + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:grove" + ] + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "noise": "minecraft:powder_snow", + "min_threshold": 0.35, + "max_threshold": 0.6 + }, + "then_run": { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:water", + "offset": 0, + "surface_depth_multiplier": 0, + "add_stone_depth": false + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:powder_snow" + } + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:water", + "offset": 0, + "surface_depth_multiplier": 0, + "add_stone_depth": false + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:snow_block" + } + } + } + ] + } + }, + { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "surgebinding:roshar_biome" + ] + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "noise": "minecraft:calcite", + "min_threshold": -0.0125, + "max_threshold": 0.0125 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:calcite" + } + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:stone" + } + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:stony_shore" + ] + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "noise": "minecraft:gravel", + "min_threshold": -0.05, + "max_threshold": 0.05 + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "offset": 0, + "surface_type": "ceiling", + "add_surface_depth": false, + "secondary_depth_range": 0 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:stone" + } + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:gravel" + } + } + ] + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:stone" + } + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:windswept_hills" + ] + }, + "then_run": { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "noise": "minecraft:surface", + "min_threshold": 0.12121212121212122, + "max_threshold": 1.7976931348623157e+308 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:stone" + } + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:warm_ocean", + "minecraft:beach", + "minecraft:snowy_beach" + ] + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "offset": 0, + "surface_type": "ceiling", + "add_surface_depth": false, + "secondary_depth_range": 0 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:sandstone" + } + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:sand" + } + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:desert" + ] + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "offset": 0, + "surface_type": "ceiling", + "add_surface_depth": false, + "secondary_depth_range": 0 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:sandstone" + } + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:sand" + } + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:dripstone_caves" + ] + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:stone" + } + } + } + ] + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:windswept_savanna" + ] + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "noise": "minecraft:surface", + "min_threshold": 0.21212121212121213, + "max_threshold": 1.7976931348623157e+308 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:stone" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "noise": "minecraft:surface", + "min_threshold": -0.06060606060606061, + "max_threshold": 1.7976931348623157e+308 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:coarse_dirt" + } + } + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:windswept_gravelly_hills" + ] + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "noise": "minecraft:surface", + "min_threshold": 0.24242424242424243, + "max_threshold": 1.7976931348623157e+308 + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "offset": 0, + "surface_type": "ceiling", + "add_surface_depth": false, + "secondary_depth_range": 0 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:stone" + } + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:gravel" + } + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "noise": "minecraft:surface", + "min_threshold": 0.12121212121212122, + "max_threshold": 1.7976931348623157e+308 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:stone" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "noise": "minecraft:surface", + "min_threshold": -0.12121212121212122, + "max_threshold": 1.7976931348623157e+308 + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:water", + "offset": 0, + "surface_depth_multiplier": 0, + "add_stone_depth": false + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:grass_block", + "Properties": { + "snowy": "false" + } + } + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:dirt" + } + } + ] + } + }, + { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "offset": 0, + "surface_type": "ceiling", + "add_surface_depth": false, + "secondary_depth_range": 0 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:stone" + } + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:gravel" + } + } + ] + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:old_growth_pine_taiga", + "minecraft:old_growth_spruce_taiga" + ] + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "noise": "minecraft:surface", + "min_threshold": 0.21212121212121213, + "max_threshold": 1.7976931348623157e+308 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:coarse_dirt" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "noise": "minecraft:surface", + "min_threshold": -0.11515151515151514, + "max_threshold": 1.7976931348623157e+308 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:podzol", + "Properties": { + "snowy": "false" + } + } + } + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:ice_spikes" + ] + }, + "then_run": { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:water", + "offset": 0, + "surface_depth_multiplier": 0, + "add_stone_depth": false + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:snow_block" + } + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:mangrove_swamp" + ] + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:mud" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:mushroom_fields" + ] + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:mycelium", + "Properties": { + "snowy": "false" + } + } + } + }, + { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:water", + "offset": 0, + "surface_depth_multiplier": 0, + "add_stone_depth": false + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:grass_block", + "Properties": { + "snowy": "false" + } + } + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:dirt" + } + } + ] + } + ] + } + ] + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:water", + "offset": -6, + "surface_depth_multiplier": -1, + "add_stone_depth": true + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "offset": 0, + "surface_type": "floor", + "add_surface_depth": false, + "secondary_depth_range": 0 + }, + "then_run": { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:frozen_ocean", + "minecraft:deep_frozen_ocean" + ] + }, + "then_run": { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:hole" + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:water", + "Properties": { + "level": "0" + } + } + } + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "offset": 0, + "surface_type": "floor", + "add_surface_depth": true, + "secondary_depth_range": 0 + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:frozen_peaks" + ] + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:steep" + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:packed_ice" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "noise": "minecraft:packed_ice", + "min_threshold": -0.5, + "max_threshold": 0.2 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:packed_ice" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "noise": "minecraft:ice", + "min_threshold": -0.0625, + "max_threshold": 0.025 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:ice" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:water", + "offset": 0, + "surface_depth_multiplier": 0, + "add_stone_depth": false + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:snow_block" + } + } + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:snowy_slopes" + ] + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:steep" + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:stone" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "noise": "minecraft:powder_snow", + "min_threshold": 0.45, + "max_threshold": 0.58 + }, + "then_run": { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:water", + "offset": 0, + "surface_depth_multiplier": 0, + "add_stone_depth": false + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:powder_snow" + } + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:water", + "offset": 0, + "surface_depth_multiplier": 0, + "add_stone_depth": false + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:snow_block" + } + } + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:jagged_peaks" + ] + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:stone" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:grove" + ] + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "noise": "minecraft:powder_snow", + "min_threshold": 0.45, + "max_threshold": 0.58 + }, + "then_run": { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:water", + "offset": 0, + "surface_depth_multiplier": 0, + "add_stone_depth": false + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:powder_snow" + } + } + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:dirt" + } + } + ] + } + }, + { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "surgebinding:roshar_biome" + ] + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "noise": "minecraft:calcite", + "min_threshold": -0.0125, + "max_threshold": 0.0125 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:calcite" + } + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:stone" + } + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:stony_shore" + ] + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "noise": "minecraft:gravel", + "min_threshold": -0.05, + "max_threshold": 0.05 + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "offset": 0, + "surface_type": "ceiling", + "add_surface_depth": false, + "secondary_depth_range": 0 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:stone" + } + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:gravel" + } + } + ] + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:stone" + } + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:windswept_hills" + ] + }, + "then_run": { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "noise": "minecraft:surface", + "min_threshold": 0.12121212121212122, + "max_threshold": 1.7976931348623157e+308 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:stone" + } + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:warm_ocean", + "minecraft:beach", + "minecraft:snowy_beach" + ] + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "offset": 0, + "surface_type": "ceiling", + "add_surface_depth": false, + "secondary_depth_range": 0 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:sandstone" + } + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:sand" + } + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:desert" + ] + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "offset": 0, + "surface_type": "ceiling", + "add_surface_depth": false, + "secondary_depth_range": 0 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:sandstone" + } + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:sand" + } + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:dripstone_caves" + ] + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:stone" + } + } + } + ] + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:windswept_savanna" + ] + }, + "then_run": { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "noise": "minecraft:surface", + "min_threshold": 0.21212121212121213, + "max_threshold": 1.7976931348623157e+308 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:stone" + } + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:windswept_gravelly_hills" + ] + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "noise": "minecraft:surface", + "min_threshold": 0.24242424242424243, + "max_threshold": 1.7976931348623157e+308 + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "offset": 0, + "surface_type": "ceiling", + "add_surface_depth": false, + "secondary_depth_range": 0 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:stone" + } + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:gravel" + } + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "noise": "minecraft:surface", + "min_threshold": 0.12121212121212122, + "max_threshold": 1.7976931348623157e+308 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:stone" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "noise": "minecraft:surface", + "min_threshold": -0.12121212121212122, + "max_threshold": 1.7976931348623157e+308 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:dirt" + } + } + }, + { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "offset": 0, + "surface_type": "ceiling", + "add_surface_depth": false, + "secondary_depth_range": 0 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:stone" + } + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:gravel" + } + } + ] + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:mangrove_swamp" + ] + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:mud" + } + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:dirt" + } + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:warm_ocean", + "minecraft:beach", + "minecraft:snowy_beach" + ] + }, + "then_run": { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "offset": 0, + "surface_type": "floor", + "add_surface_depth": true, + "secondary_depth_range": 6 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:sandstone" + } + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:desert" + ] + }, + "then_run": { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "offset": 0, + "surface_type": "floor", + "add_surface_depth": true, + "secondary_depth_range": 30 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:sandstone" + } + } + } + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "offset": 0, + "surface_type": "floor", + "add_surface_depth": false, + "secondary_depth_range": 0 + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:frozen_peaks", + "minecraft:jagged_peaks" + ] + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:stone" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:warm_ocean", + "minecraft:lukewarm_ocean", + "minecraft:deep_lukewarm_ocean" + ] + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "offset": 0, + "surface_type": "ceiling", + "add_surface_depth": false, + "secondary_depth_range": 0 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:sandstone" + } + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:sand" + } + } + ] + } + }, + { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "offset": 0, + "surface_type": "ceiling", + "add_surface_depth": false, + "secondary_depth_range": 0 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:stone" + } + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:gravel" + } + } + ] + } + ] + } + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:vertical_gradient", + "random_name": "minecraft:deepslate", + "true_at_and_below": { + "absolute": 0 + }, + "false_at_and_above": { + "absolute": 8 + } + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:deepslate", + "Properties": { + "axis": "y" + } + } + } + } + ] + } +} diff --git a/src/surgebinding/resources/pack.mcmeta b/src/surgebinding/resources/pack.mcmeta new file mode 100644 index 000000000..90ff3492a --- /dev/null +++ b/src/surgebinding/resources/pack.mcmeta @@ -0,0 +1,6 @@ +{ + "pack": { + "description": "Resources used for Surgebinding", + "pack_format": 15 + } +} \ No newline at end of file diff --git a/src/surgebinding/resources/surgebinding.mixins.json b/src/surgebinding/resources/surgebinding.mixins.json new file mode 100644 index 000000000..577a3fab8 --- /dev/null +++ b/src/surgebinding/resources/surgebinding.mixins.json @@ -0,0 +1,18 @@ +{ + "required": true, + "minVersion": "0.8", + "package": "leaf.cosmere.surgebinding.mixin", + "compatibilityLevel": "JAVA_17", + "refmap": "mixins.cosmere.surgebinding.refmap.json", + "mixins": [ + "LivingEntityMixin", + "PlayerMixin", + "RaidMixin" + ], + "client": [ + "LocalPlayerMixin" + ], + "injectors": { + "defaultRequire": 1 + } +} \ No newline at end of file